ZGlmZiAtLWdpdCBhL0FuZHJvaWQuYnAgYi9BbmRyb2lkLmJwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyYzg3ODcKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkLmJwCkBAIC0wLDAgKzEsMTIwIEBACitjY19kZWZhdWx0cyB7CisgICAgbmFtZTogInpsaWJfZGVmYXVsdHMiLAorCisgICAgY2ZsYWdzOiBbCisgICAgICAgICItTzMiLAorICAgICAgICAiLURVU0VfTU1BUCIsCisgICAgICAgICItRFpMSUJfQ09OU1QiLAorICAgIF0sCisgICAgc3RsOiAibm9uZSIsCisgICAgZXhwb3J0X2luY2x1ZGVfZGlyczogWyIuIl0sCisgICAgc3JjczogWworICAgICAgICAic3JjL2FkbGVyMzIuYyIsCisgICAgICAgICJzcmMvY29tcHJlc3MuYyIsCisgICAgICAgICJzcmMvY3JjMzIuYyIsCisgICAgICAgICJzcmMvZGVmbGF0ZS5jIiwKKyAgICAgICAgInNyYy9nemNsb3NlLmMiLAorICAgICAgICAic3JjL2d6bGliLmMiLAorICAgICAgICAic3JjL2d6cmVhZC5jIiwKKyAgICAgICAgInNyYy9nendyaXRlLmMiLAorICAgICAgICAic3JjL2luZmJhY2suYyIsCisgICAgICAgICJzcmMvaW5mbGF0ZS5jIiwKKyAgICAgICAgInNyYy9pbmZ0cmVlcy5jIiwKKyAgICAgICAgInNyYy9pbmZmYXN0LmMiLAorICAgICAgICAic3JjL3RyZWVzLmMiLAorICAgICAgICAic3JjL3VuY29tcHIuYyIsCisgICAgICAgICJzcmMvenV0aWwuYyIsCisgICAgXSwKKworICAgIGFyY2g6IHsKKyAgICAgICAgYXJtOiB7CisgICAgICAgICAgICAvLyBtZWFzdXJlbWVudHMgc2hvdyB0aGF0IHRoZSBBUk0gdmVyc2lvbiBvZiBaTGliIGlzIGFib3V0IHgxLjE3IGZhc3RlcgorICAgICAgICAgICAgLy8gdGhhbiB0aGUgdGh1bWIgb25lLi4uCisgICAgICAgICAgICBpbnN0cnVjdGlvbl9zZXQ6ICJhcm0iLAorCisgICAgICAgICAgICAvLyBUT0RPOiBUaGlzIGlzIHRvIHdvcmsgYXJvdW5kIGIvMjQ0NjUyMDkuIFJlbW92ZSBhZnRlciByb290IGNhdXNlIGlzIGZpeGVkCisgICAgICAgICAgICBsZGZsYWdzOiBbIi1XbCwtLWhhc2gtc3R5bGU9Ym90aCJdLAorICAgICAgICB9LAorICAgIH0sCisKKyAgICB0YXJnZXQ6IHsKKyAgICAgICAgbGludXhfYmlvbmljOiB7CisgICAgICAgICAgICBlbmFibGVkOiB0cnVlLAorICAgICAgICB9LAorICAgICAgICB3aW5kb3dzOiB7CisgICAgICAgICAgICBlbmFibGVkOiB0cnVlLAorICAgICAgICB9LAorICAgIH0sCit9CisKK2NjX2xpYnJhcnkgeworICAgIG5hbWU6ICJsaWJ6IiwKKyAgICBkZWZhdWx0czogWyJ6bGliX2RlZmF1bHRzIl0sCisKKyAgICBob3N0X3N1cHBvcnRlZDogdHJ1ZSwKKyAgICB2ZW5kb3JfYXZhaWxhYmxlIDogdHJ1ZSwKKworICAgIHRhcmdldDogeworICAgICAgICBob3N0OiB7CisgICAgICAgICAgICBzaGFyZWQ6IHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgaG9zdCBzaGFyZWQgbGlicmFyeSBpcyBidWlsdCBhcyBsaWJ6LWhvc3QKKyAgICAgICAgICAgICAgICBlbmFibGVkOiBmYWxzZSwKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgfSwKK30KKworLy8gU2VwYXJhdGUgaG9zdCBzaGFyZWQgbGlicmFyeSBkZWZpbml0aW9uLCBzaW5jZSB3ZSBkb24ndCB3YW50IHRvIGNvbmZsaWN0CisvLyB3aXRoIHRoZSBob3N0LXN1cHBsaWVkIGxpYnoKK2NjX2xpYnJhcnlfaG9zdF9zaGFyZWQgeworICAgIG5hbWU6ICJsaWJ6LWhvc3QiLAorICAgIGRlZmF1bHRzOiBbInpsaWJfZGVmYXVsdHMiXSwKK30KKworY2NfYmluYXJ5X2hvc3QgeworICAgIG5hbWU6ICJtaW5pZ3ppcCIsCisgICAgc3JjczogWyJzcmMvdGVzdC9taW5pZ3ppcC5jIl0sCisgICAgc3RhdGljX2xpYnM6IFsibGlieiJdLAorICAgIHN0bDogIm5vbmUiLAorfQorCitjY19iaW5hcnkgeworICAgIG5hbWU6ICJ6bGliX2V4YW1wbGUiLAorICAgIHNyY3M6IFsic3JjL3Rlc3QvZXhhbXBsZS5jIl0sCisgICAgc2hhcmVkX2xpYnM6IFsibGlieiJdLAorICAgIHN0bDogIm5vbmUiLAorfQorCitjY19iaW5hcnlfaG9zdCB7CisgICAgbmFtZTogInpsaWJfZXhhbXBsZV9ob3N0IiwKKyAgICBzcmNzOiBbInNyYy90ZXN0L2V4YW1wbGUuYyJdLAorICAgIHN0YXRpY19saWJzOiBbImxpYnoiXSwKKyAgICBzdGw6ICJub25lIiwKK30KKworLy8gVGhpcyBtb2R1bGUgaXMgZGVmaW5lZCBpbiBkZXZlbG9wbWVudC9uZGsvQW5kcm9pZC5icC4gVXBkYXRpbmcgdGhlc2UgaGVhZGVycworLy8gdG8gYmUgdXNhYmxlIGZvciBhbnkgQVBJIGxldmVsIGlzIGdvaW5nIHRvIGJlIHNvbWUgd29yayAoYXQgdGhlIHZlcnkgbGVhc3QsCisvLyB0aGVyZSdzIGEgWkxJQl9WRVJOVU0gdGhhdCB3aWxsIG5lZWQgdG8gYmUgaGFuZGxlZCBzaW5jZSBlYXJseSB2ZXJzaW9ucyBvZgorLy8gQW5kcm9pZCBkaWQgbm90IGhhdmUgYWxsIHRoZSBBUElzIHRoYXQgY2FsbGluZyBjb2RlIHdpbGwgdXNlIGlmIHRoaXMgaXMgc2V0CisvLyB0byB0aGUgY3VycmVudCB2YWx1ZS4KKy8vCisvLyBUaGUgTkRLIG5ldmVyIHVwZGF0ZWQgdGhlIHpsaWIgaGVhZGVycyB3aGVuIHRoZSBwbGF0Zm9ybSB1cGRhdGVkLCBzbyB1bnRpbCB3ZQorLy8gc29sdmUgdGhpcyB0aGUgTkRLIHdpbGwgY29udGludWUgc2hpcHBpbmcgdGhlIG9sZCBoZWFkZXJzLgorLy8KKy8vIG5ka19oZWFkZXJzIHsKKy8vICAgICBuYW1lOiAibGliel9oZWFkZXJzIiwKKy8vICAgICBmcm9tOiAic3JjIiwKKy8vICAgICB0bzogIiIsCisvLyAgICAgc3JjczogWworLy8gICAgICAgICAic3JjL3pjb25mLmgiLAorLy8gICAgICAgICAic3JjL3psaWIuaCIsCisvLyAgICAgXSwKKy8vICAgICBsaWNlbnNlOiAiTk9USUNFIiwKKy8vIH0KKworbmRrX2xpYnJhcnkgeworICAgIG5hbWU6ICJsaWJ6IiwKKyAgICBzeW1ib2xfZmlsZTogImxpYnoubWFwLnR4dCIsCisgICAgZmlyc3RfdmVyc2lvbjogIjkiLAorICAgIHVudmVyc2lvbmVkX3VudGlsOiAiY3VycmVudCIsCit9CmRpZmYgLS1naXQgYS9BbmRyb2lkLm1rIGIvQW5kcm9pZC5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGIwOTYzCi0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC5tawpAQCAtMCwwICsxLDEyOCBAQAorTE9DQUxfUEFUSDo9ICQoY2FsbCBteS1kaXIpCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKKworIyBtZWFzdXJlbWVudHMgc2hvdyB0aGF0IHRoZSBBUk0gdmVyc2lvbiBvZiBaTGliIGlzIGFib3V0IHgxLjE3IGZhc3RlcgorIyB0aGFuIHRoZSB0aHVtYiBvbmUuLi4KK0xPQ0FMX0FSTV9NT0RFIDo9IGFybQorCit6bGliX2ZpbGVzIDo9IFwKKwlzcmMvYWRsZXIzMi5jIFwKKwlzcmMvY29tcHJlc3MuYyBcCisJc3JjL2NyYzMyLmMgXAorCXNyYy9kZWZsYXRlLmMgXAorCXNyYy9nemNsb3NlLmMgXAorCXNyYy9nemxpYi5jIFwKKwlzcmMvZ3pyZWFkLmMgXAorCXNyYy9nendyaXRlLmMgXAorCXNyYy9pbmZiYWNrLmMgXAorCXNyYy9pbmZsYXRlLmMgXAorCXNyYy9pbmZ0cmVlcy5jIFwKKwlzcmMvaW5mZmFzdC5jIFwKKwlzcmMvdHJlZXMuYyBcCisJc3JjL3VuY29tcHIuYyBcCisJc3JjL3p1dGlsLmMKKworTE9DQUxfTU9EVUxFIDo9IGxpYnoKK0xPQ0FMX01PRFVMRV9UQUdTIDo9IG9wdGlvbmFsCitMT0NBTF9DRkxBR1MgKz0gLU8zIC1EVVNFX01NQVAKKworIyBUT0RPOiBUaGlzIGlzIHRvIHdvcmsgYXJvdW5kIGIvMjQ0NjUyMDkuIFJlbW92ZSBhZnRlciByb290IGNhdXNlIGlzIGZpeGVkCitMT0NBTF9MREZMQUdTX2FybSA6PSAtV2wsLS1oYXNoLXN0eWxlPWJvdGgKKworTE9DQUxfU1JDX0ZJTEVTIDo9ICQoemxpYl9maWxlcykKK0xPQ0FMX0NYWF9TVEwgOj0gbm9uZQorTE9DQUxfRVhQT1JUX0NfSU5DTFVERV9ESVJTIDo9ICQoTE9DQUxfUEFUSCkKK0xPQ0FMX1RPT0xDSEFJTl9QUkVCVUlMVFMgOj0gXAorICAgICAgICAkKExPQ0FMX1BBVEgpL3NyYy96bGliLmg6dXNyL2luY2x1ZGUvemxpYi5oIFwKKyAgICAgICAgJChMT0NBTF9QQVRIKS9zcmMvemNvbmYuaDp1c3IvaW5jbHVkZS96Y29uZi5oCitpbmNsdWRlICQoQlVJTERfU0hBUkVEX0xJQlJBUlkpCisKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorCitMT0NBTF9BUk1fTU9ERSA6PSBhcm0KK0xPQ0FMX01PRFVMRSA6PSBsaWJ6CitMT0NBTF9NT0RVTEVfVEFHUyA6PSBvcHRpb25hbAorTE9DQUxfQ0ZMQUdTICs9IC1PMyAtRFVTRV9NTUFQCitMT0NBTF9TUkNfRklMRVMgOj0gJCh6bGliX2ZpbGVzKQorTE9DQUxfQ1hYX1NUTCA6PSBub25lCitMT0NBTF9FWFBPUlRfQ19JTkNMVURFX0RJUlMgOj0gJChMT0NBTF9QQVRIKQorTE9DQUxfVE9PTENIQUlOX1BSRUJVSUxUUyA6PSBcCisgICAgICAgICQoTE9DQUxfUEFUSCkvc3JjL3psaWIuaDp1c3IvaW5jbHVkZS96bGliLmggXAorICAgICAgICAkKExPQ0FMX1BBVEgpL3NyYy96Y29uZi5oOnVzci9pbmNsdWRlL3pjb25mLmgKK2luY2x1ZGUgJChCVUlMRF9TVEFUSUNfTElCUkFSWSkKKworaW5jbHVkZSAkKENMRUFSX1ZBUlMpCisKK0xPQ0FMX01PRFVMRSA6PSBsaWJ6CitMT0NBTF9NT0RVTEVfVEFHUyA6PSBvcHRpb25hbAorTE9DQUxfQ0ZMQUdTICs9IC1PMyAtRFVTRV9NTUFQCitMT0NBTF9TUkNfRklMRVMgOj0gJCh6bGliX2ZpbGVzKQorTE9DQUxfTVVMVElMSUIgOj0gYm90aAorTE9DQUxfRVhQT1JUX0NfSU5DTFVERV9ESVJTIDo9ICQoTE9DQUxfUEFUSCkKK0xPQ0FMX01PRFVMRV9IT1NUX09TIDo9IGRhcndpbiBsaW51eCB3aW5kb3dzCitMT0NBTF9DWFhfU1RMIDo9IG5vbmUKK2luY2x1ZGUgJChCVUlMRF9IT1NUX1NUQVRJQ19MSUJSQVJZKQorCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKKworTE9DQUxfTU9EVUxFIDo9IGxpYnotaG9zdAorTE9DQUxfTU9EVUxFX1RBR1MgOj0gb3B0aW9uYWwKK0xPQ0FMX0NGTEFHUyArPSAtTzMgLURVU0VfTU1BUAorTE9DQUxfU1JDX0ZJTEVTIDo9ICQoemxpYl9maWxlcykKK0xPQ0FMX01VTFRJTElCIDo9IGJvdGgKK0xPQ0FMX0VYUE9SVF9DX0lOQ0xVREVfRElSUyA6PSAkKExPQ0FMX1BBVEgpCitMT0NBTF9DWFhfU1RMIDo9IG5vbmUKK2luY2x1ZGUgJChCVUlMRF9IT1NUX1NIQVJFRF9MSUJSQVJZKQorCit1bnppcF9maWxlcyA6PSBcCisgICAgICAgIHNyYy9hZGxlcjMyLmMgXAorICAgICAgICBzcmMvY3JjMzIuYyBcCisgICAgICAgIHNyYy9pbmZsYXRlLmMgXAorICAgICAgICBzcmMvaW5mdHJlZXMuYyBcCisgICAgICAgIHNyYy9pbmZmYXN0LmMgXAorICAgICAgICBzcmMvenV0aWwuYworCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKK0xPQ0FMX1NSQ19GSUxFUyA6PSAkKHVuemlwX2ZpbGVzKQorTE9DQUxfTU9EVUxFIDo9IGxpYnVuegorTE9DQUxfQVJNX01PREUgOj0gYXJtCitpbmNsdWRlICQoQlVJTERfSE9TVF9TVEFUSUNfTElCUkFSWSkKKworaW5jbHVkZSAkKENMRUFSX1ZBUlMpCitMT0NBTF9TUkNfRklMRVMgOj0gJCh1bnppcF9maWxlcykKK0xPQ0FMX01PRFVMRSA6PSBsaWJ1bnoKK0xPQ0FMX0FSTV9NT0RFIDo9IGFybQorTE9DQUxfVE9PTENIQUlOX1BSRUJVSUxUUyA6PSBcCisgICAgICAgICQoTE9DQUxfUEFUSCkvc3JjL3psaWIuaDp1c3IvaW5jbHVkZS96bGliLmggXAorICAgICAgICAkKExPQ0FMX1BBVEgpL3NyYy96Y29uZi5oOnVzci9pbmNsdWRlL3pjb25mLmgKK2luY2x1ZGUgJChCVUlMRF9TVEFUSUNfTElCUkFSWSkKKworaW5jbHVkZSAkKENMRUFSX1ZBUlMpCisKK0xPQ0FMX1NSQ19GSUxFUzo9ICAgICAgICBcCisJc3JjL3Rlc3QvbWluaWd6aXAuYworCitMT0NBTF9NT0RVTEU6PSBnemlwCisKK0xPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgOj0gbGliegorCitMT0NBTF9DWFhfU1RMIDo9IG5vbmUKKworaW5jbHVkZSAkKEJVSUxEX0VYRUNVVEFCTEUpCisKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorCitMT0NBTF9TUkNfRklMRVM6PSAgICAgICAgXAorCXNyYy90ZXN0L21pbmlnemlwLmMKKworTE9DQUxfTU9EVUxFOj0gbWluaWd6aXAKKworTE9DQUxfU1RBVElDX0xJQlJBUklFUyA6PSBsaWJ6CisKK0xPQ0FMX0NYWF9TVEwgOj0gbm9uZQorCitpbmNsdWRlICQoQlVJTERfSE9TVF9FWEVDVVRBQkxFKQorCiskKFRBUkdFVF9PVVRfQ09NTU9OX0dFTikvemxpYl9maW5nZXJwcmludCA6ICQod2lsZGNhcmQgJChMT0NBTF9QQVRIKS9zcmMvKi5bY2hdKQorCXByaW50ZiAnJXNcbicgJF4gfCBMQ19BTEw9QyBzb3J0IHwgeGFyZ3MgY2F0IHwgc2hhc3VtIC1hIDI1NiB8IFwKKwkJYXdrICd7cHJpbnRmICQkMX0nID4gJEAKZGlmZiAtLWdpdCBhL0NsZWFuU3BlYy5tayBiL0NsZWFuU3BlYy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODRlMWI2Ci0tLSAvZGV2L251bGwKKysrIGIvQ2xlYW5TcGVjLm1rCkBAIC0wLDAgKzEsNDkgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDA3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisKKyMgSWYgeW91IGRvbid0IG5lZWQgdG8gZG8gYSBmdWxsIGNsZWFuIGJ1aWxkIGJ1dCB3b3VsZCBsaWtlIHRvIHRvdWNoCisjIGEgZmlsZSBvciBkZWxldGUgc29tZSBpbnRlcm1lZGlhdGUgZmlsZXMsIGFkZCBhIGNsZWFuIHN0ZXAgdG8gdGhlIGVuZAorIyBvZiB0aGUgbGlzdC4gIFRoZXNlIHN0ZXBzIHdpbGwgb25seSBiZSBydW4gb25jZSwgaWYgdGhleSBoYXZlbid0IGJlZW4KKyMgcnVuIGJlZm9yZS4KKyMKKyMgRS5nLjoKKyMgICAgICQoY2FsbCBhZGQtY2xlYW4tc3RlcCwgdG91Y2ggLWMgZXh0ZXJuYWwvc3FsaXRlL3NxbGl0ZTMuaCkKKyMgICAgICQoY2FsbCBhZGQtY2xlYW4tc3RlcCwgcm0gLXJmICQoUFJPRFVDVF9PVVQpL29iai9TVEFUSUNfTElCUkFSSUVTL2xpYnpfaW50ZXJtZWRpYXRlcykKKyMKKyMgQWx3YXlzIHVzZSAidG91Y2ggLWMiIGFuZCAicm0gLWYiIG9yICJybSAtcmYiIHRvIGdyYWNlZnVsbHkgZGVhbCB3aXRoCisjIGZpbGVzIHRoYXQgYXJlIG1pc3Npbmcgb3IgaGF2ZSBiZWVuIG1vdmVkLgorIworIyBVc2UgJChQUk9EVUNUX09VVCkgdG8gZ2V0IHRvIHRoZSAib3V0L3RhcmdldC9wcm9kdWN0L2JsYWgvIiBkaXJlY3RvcnkuCisjIFVzZSAkKE9VVF9ESVIpIHRvIHJlZmVyIHRvIHRoZSAib3V0IiBkaXJlY3RvcnkuCisjCisjIElmIHlvdSBuZWVkIHRvIHJlLWRvIHNvbWV0aGluZyB0aGF0J3MgYWxyZWFkeSBtZW50aW9uZWQsIGp1c3QgY29weQorIyB0aGUgY29tbWFuZCBhbmQgYWRkIGl0IHRvIHRoZSBib3R0b20gb2YgdGhlIGxpc3QuICBFLmcuLCBpZiBhIGNoYW5nZQorIyB0aGF0IHlvdSBtYWRlIGxhc3Qgd2VlayByZXF1aXJlZCB0b3VjaGluZyBhIGZpbGUgYW5kIGEgY2hhbmdlIHlvdQorIyBtYWRlIHRvZGF5IHJlcXVpcmVzIHRvdWNoaW5nIHRoZSBzYW1lIGZpbGUsIGp1c3QgY29weSB0aGUgb2xkCisjIHRvdWNoIHN0ZXAgYW5kIGFkZCBpdCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LgorIworIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgTkVXRVIgQ0xFQU4gU1RFUFMgTVVTVCBCRSBBVCBUSEUgRU5EIE9GIFRIRSBMSVNUCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjIEZvciBleGFtcGxlOgorIyQoY2FsbCBhZGQtY2xlYW4tc3RlcCwgcm0gLXJmICQoT1VUX0RJUikvdGFyZ2V0L2NvbW1vbi9vYmovQVBQUy9BbmRyb2lkVGVzdHNfaW50ZXJtZWRpYXRlcykKKyMkKGNhbGwgYWRkLWNsZWFuLXN0ZXAsIHJtIC1yZiAkKE9VVF9ESVIpL3RhcmdldC9jb21tb24vb2JqL0pBVkFfTElCUkFSSUVTL2NvcmVfaW50ZXJtZWRpYXRlcykKKyMkKGNhbGwgYWRkLWNsZWFuLXN0ZXAsIGZpbmQgJChPVVRfRElSKSAtdHlwZSBmIC1uYW1lICJJR1RhbGtTZXNzaW9uKiIgLXByaW50MCB8IHhhcmdzIC0wIHJtIC1mKQorIyQoY2FsbCBhZGQtY2xlYW4tc3RlcCwgcm0gLXJmICQoUFJPRFVDVF9PVVQpL2RhdGEvKikKKworIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgTkVXRVIgQ0xFQU4gU1RFUFMgTVVTVCBCRSBBVCBUSEUgRU5EIE9GIFRIRSBMSVNUCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvTU9EVUxFX0xJQ0VOU0VfQlNEX0xJS0UgYi9NT0RVTEVfTElDRU5TRV9CU0RfTElLRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvTU9EVUxFX0xJQ0VOU0VfQlNEX0xJS0UKZGlmZiAtLWdpdCBhL05PVElDRSBiL05PVElDRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWYwMTNhCi0tLSAvZGV2L251bGwKKysrIGIvTk9USUNFCkBAIC0wLDAgKzEsMjAgQEAKKyAoQykgMTk5NS0yMDIyIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIKKworICBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZAorICB3YXJyYW50eS4gIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzCisgIGFyaXNpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuCisKKyAgUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UsCisgIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXQKKyAgZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCisgIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90CisgICAgIGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlCisgICAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZQorICAgICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLgorICAyLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZQorICAgICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuCisgIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uCisKKyAgSmVhbi1sb3VwIEdhaWxseSAgICAgICAgTWFyayBBZGxlcgorICBqbG91cEBnemlwLm9yZyAgICAgICAgICBtYWRsZXJAYWx1bW5pLmNhbHRlY2guZWR1CmRpZmYgLS1naXQgYS9saWJ6Lm1hcC50eHQgYi9saWJ6Lm1hcC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRkZjQ0YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnoubWFwLnR4dApAQCAtMCwwICsxLDk4IEBACitMSUJaIHsKKyAgZ2xvYmFsOgorICAgIF9kaXN0X2NvZGU7ICMgdmFyIGludHJvZHVjZWQtYXJtPTkgaW50cm9kdWNlZC1hcm02ND0yMSBpbnRyb2R1Y2VkLW1pcHM9MjEgaW50cm9kdWNlZC1taXBzNjQ9MjEgaW50cm9kdWNlZC14ODY9MjEgaW50cm9kdWNlZC14ODZfNjQ9MjEKKyAgICBfbGVuZ3RoX2NvZGU7ICMgdmFyIGludHJvZHVjZWQtYXJtPTkgaW50cm9kdWNlZC1hcm02ND0yMSBpbnRyb2R1Y2VkLW1pcHM9MjEgaW50cm9kdWNlZC1taXBzNjQ9MjEgaW50cm9kdWNlZC14ODY9MjEgaW50cm9kdWNlZC14ODZfNjQ9MjEKKyAgICBfdHJfYWxpZ247ICMgaW50cm9kdWNlZC1hcm09OSBpbnRyb2R1Y2VkLWFybTY0PTIxIGludHJvZHVjZWQtbWlwcz0yMSBpbnRyb2R1Y2VkLW1pcHM2ND0yMSBpbnRyb2R1Y2VkLXg4Nj0yMSBpbnRyb2R1Y2VkLXg4Nl82ND0yMQorICAgIF90cl9mbHVzaF9iaXRzOyAjIGludHJvZHVjZWQ9MjEKKyAgICBfdHJfZmx1c2hfYmxvY2s7ICMgaW50cm9kdWNlZC1hcm09OSBpbnRyb2R1Y2VkLWFybTY0PTIxIGludHJvZHVjZWQtbWlwcz0yMSBpbnRyb2R1Y2VkLW1pcHM2ND0yMSBpbnRyb2R1Y2VkLXg4Nj0yMSBpbnRyb2R1Y2VkLXg4Nl82ND0yMQorICAgIF90cl9pbml0OyAjIGludHJvZHVjZWQtYXJtPTkgaW50cm9kdWNlZC1hcm02ND0yMSBpbnRyb2R1Y2VkLW1pcHM9MjEgaW50cm9kdWNlZC1taXBzNjQ9MjEgaW50cm9kdWNlZC14ODY9MjEgaW50cm9kdWNlZC14ODZfNjQ9MjEKKyAgICBfdHJfc3RvcmVkX2Jsb2NrOyAjIGludHJvZHVjZWQtYXJtPTkgaW50cm9kdWNlZC1hcm02ND0yMSBpbnRyb2R1Y2VkLW1pcHM9MjEgaW50cm9kdWNlZC1taXBzNjQ9MjEgaW50cm9kdWNlZC14ODY9MjEgaW50cm9kdWNlZC14ODZfNjQ9MjEKKyAgICBfdHJfdGFsbHk7ICMgaW50cm9kdWNlZC1hcm09OSBpbnRyb2R1Y2VkLWFybTY0PTIxIGludHJvZHVjZWQtbWlwcz0yMSBpbnRyb2R1Y2VkLW1pcHM2ND0yMSBpbnRyb2R1Y2VkLXg4Nj0yMSBpbnRyb2R1Y2VkLXg4Nl82ND0yMQorICAgIGFkbGVyMzI7CisgICAgYWRsZXIzMl9jb21iaW5lOworICAgIGFkbGVyMzJfY29tYmluZTY0OyAjIGludHJvZHVjZWQtYXJtPTIxIGludHJvZHVjZWQtYXJtNjQ9MjEgaW50cm9kdWNlZC1taXBzPTkgaW50cm9kdWNlZC1taXBzNjQ9MjEgaW50cm9kdWNlZC14ODY9OSBpbnRyb2R1Y2VkLXg4Nl82ND0yMQorICAgIGNvbXByZXNzOworICAgIGNvbXByZXNzMjsKKyAgICBjb21wcmVzc0JvdW5kOworICAgIGNyYzMyOworICAgIGNyYzMyX2NvbWJpbmU7CisgICAgY3JjMzJfY29tYmluZTY0OyAjIGludHJvZHVjZWQtYXJtPTIxIGludHJvZHVjZWQtYXJtNjQ9MjEgaW50cm9kdWNlZC1taXBzPTkgaW50cm9kdWNlZC1taXBzNjQ9MjEgaW50cm9kdWNlZC14ODY9OSBpbnRyb2R1Y2VkLXg4Nl82ND0yMQorICAgIGRlZmxhdGU7CisgICAgZGVmbGF0ZUJvdW5kOworICAgIGRlZmxhdGVDb3B5OworICAgIGRlZmxhdGVFbmQ7CisgICAgZGVmbGF0ZUluaXQyXzsKKyAgICBkZWZsYXRlSW5pdF87CisgICAgZGVmbGF0ZVBhcmFtczsKKyAgICBkZWZsYXRlUGVuZGluZzsgIyBpbnRyb2R1Y2VkPTIxCisgICAgZGVmbGF0ZVByaW1lOworICAgIGRlZmxhdGVSZXNldDsKKyAgICBkZWZsYXRlUmVzZXRLZWVwOyAjIGludHJvZHVjZWQ9MjEKKyAgICBkZWZsYXRlU2V0RGljdGlvbmFyeTsKKyAgICBkZWZsYXRlU2V0SGVhZGVyOworICAgIGRlZmxhdGVUdW5lOworICAgIGRlZmxhdGVfY29weXJpZ2h0OyAjIHZhcgorICAgIGdldF9jcmNfdGFibGU7CisgICAgZ3pfZXJyb3I7ICMgaW50cm9kdWNlZD0yMQorICAgIGd6YnVmZmVyOyAjIGludHJvZHVjZWQtYXJtPTIxIGludHJvZHVjZWQtYXJtNjQ9MjEgaW50cm9kdWNlZC1taXBzPTkgaW50cm9kdWNlZC1taXBzNjQ9MjEgaW50cm9kdWNlZC14ODY9OSBpbnRyb2R1Y2VkLXg4Nl82ND0yMQorICAgIGd6Y2xlYXJlcnI7CisgICAgZ3pjbG9zZTsKKyAgICBnemNsb3NlX3I7ICMgaW50cm9kdWNlZC1hcm09MjEgaW50cm9kdWNlZC1hcm02ND0yMSBpbnRyb2R1Y2VkLW1pcHM9OSBpbnRyb2R1Y2VkLW1pcHM2ND0yMSBpbnRyb2R1Y2VkLXg4Nj05IGludHJvZHVjZWQteDg2XzY0PTIxCisgICAgZ3pjbG9zZV93OyAjIGludHJvZHVjZWQtYXJtPTIxIGludHJvZHVjZWQtYXJtNjQ9MjEgaW50cm9kdWNlZC1taXBzPTkgaW50cm9kdWNlZC1taXBzNjQ9MjEgaW50cm9kdWNlZC14ODY9OSBpbnRyb2R1Y2VkLXg4Nl82ND0yMQorICAgIGd6ZGlyZWN0OworICAgIGd6ZG9wZW47CisgICAgZ3plb2Y7CisgICAgZ3plcnJvcjsKKyAgICBnemZsdXNoOworICAgIGd6Z2V0YzsKKyAgICBnemdldGNfOyAjIGludHJvZHVjZWQ9MjEKKyAgICBnemdldHM7CisgICAgZ3pvZmZzZXQ7ICMgaW50cm9kdWNlZC1hcm09MjEgaW50cm9kdWNlZC1hcm02ND0yMSBpbnRyb2R1Y2VkLW1pcHM9OSBpbnRyb2R1Y2VkLW1pcHM2ND0yMSBpbnRyb2R1Y2VkLXg4Nj05IGludHJvZHVjZWQteDg2XzY0PTIxCisgICAgZ3pvZmZzZXQ2NDsgIyBpbnRyb2R1Y2VkLWFybT0yMSBpbnRyb2R1Y2VkLWFybTY0PTIxIGludHJvZHVjZWQtbWlwcz05IGludHJvZHVjZWQtbWlwczY0PTIxIGludHJvZHVjZWQteDg2PTkgaW50cm9kdWNlZC14ODZfNjQ9MjEKKyAgICBnem9wZW47CisgICAgZ3pvcGVuNjQ7ICMgaW50cm9kdWNlZC1hcm09MjEgaW50cm9kdWNlZC1hcm02ND0yMSBpbnRyb2R1Y2VkLW1pcHM9OSBpbnRyb2R1Y2VkLW1pcHM2ND0yMSBpbnRyb2R1Y2VkLXg4Nj05IGludHJvZHVjZWQteDg2XzY0PTIxCisgICAgZ3pwcmludGY7CisgICAgZ3pwdXRjOworICAgIGd6cHV0czsKKyAgICBnenJlYWQ7CisgICAgZ3pyZXdpbmQ7CisgICAgZ3pzZWVrOworICAgIGd6c2VlazY0OyAjIGludHJvZHVjZWQtYXJtPTIxIGludHJvZHVjZWQtYXJtNjQ9MjEgaW50cm9kdWNlZC1taXBzPTkgaW50cm9kdWNlZC1taXBzNjQ9MjEgaW50cm9kdWNlZC14ODY9OSBpbnRyb2R1Y2VkLXg4Nl82ND0yMQorICAgIGd6c2V0cGFyYW1zOworICAgIGd6dGVsbDsKKyAgICBnenRlbGw2NDsgIyBpbnRyb2R1Y2VkLWFybT0yMSBpbnRyb2R1Y2VkLWFybTY0PTIxIGludHJvZHVjZWQtbWlwcz05IGludHJvZHVjZWQtbWlwczY0PTIxIGludHJvZHVjZWQteDg2PTkgaW50cm9kdWNlZC14ODZfNjQ9MjEKKyAgICBnenVuZ2V0YzsKKyAgICBnenZwcmludGY7ICMgaW50cm9kdWNlZD0yMQorICAgIGd6d3JpdGU7CisgICAgaW5mbGF0ZTsKKyAgICBpbmZsYXRlQmFjazsKKyAgICBpbmZsYXRlQmFja0VuZDsKKyAgICBpbmZsYXRlQmFja0luaXRfOworICAgIGluZmxhdGVDb3B5OworICAgIGluZmxhdGVFbmQ7CisgICAgaW5mbGF0ZUdldERpY3Rpb25hcnk7ICMgaW50cm9kdWNlZD0yMQorICAgIGluZmxhdGVHZXRIZWFkZXI7CisgICAgaW5mbGF0ZUluaXQyXzsKKyAgICBpbmZsYXRlSW5pdF87CisgICAgaW5mbGF0ZU1hcms7ICMgaW50cm9kdWNlZC1hcm09MjEgaW50cm9kdWNlZC1hcm02ND0yMSBpbnRyb2R1Y2VkLW1pcHM9OSBpbnRyb2R1Y2VkLW1pcHM2ND0yMSBpbnRyb2R1Y2VkLXg4Nj05IGludHJvZHVjZWQteDg2XzY0PTIxCisgICAgaW5mbGF0ZVByaW1lOworICAgIGluZmxhdGVSZXNldDsKKyAgICBpbmZsYXRlUmVzZXQyOyAjIGludHJvZHVjZWQtYXJtPTIxIGludHJvZHVjZWQtYXJtNjQ9MjEgaW50cm9kdWNlZC1taXBzPTkgaW50cm9kdWNlZC1taXBzNjQ9MjEgaW50cm9kdWNlZC14ODY9OSBpbnRyb2R1Y2VkLXg4Nl82ND0yMQorICAgIGluZmxhdGVSZXNldEtlZXA7ICMgaW50cm9kdWNlZD0yMQorICAgIGluZmxhdGVTZXREaWN0aW9uYXJ5OworICAgIGluZmxhdGVTeW5jOworICAgIGluZmxhdGVTeW5jUG9pbnQ7CisgICAgaW5mbGF0ZVVuZGVybWluZTsgIyBpbnRyb2R1Y2VkLWFybT0yMSBpbnRyb2R1Y2VkLWFybTY0PTIxIGludHJvZHVjZWQtbWlwcz05IGludHJvZHVjZWQtbWlwczY0PTIxIGludHJvZHVjZWQteDg2PTkgaW50cm9kdWNlZC14ODZfNjQ9MjEKKyAgICBpbmZsYXRlX2NvcHlyaWdodDsgIyB2YXIKKyAgICBpbmZsYXRlX2Zhc3Q7ICMgaW50cm9kdWNlZC1hcm09OSBpbnRyb2R1Y2VkLWFybTY0PTIxIGludHJvZHVjZWQtbWlwcz0yMSBpbnRyb2R1Y2VkLW1pcHM2ND0yMSBpbnRyb2R1Y2VkLXg4Nj0yMSBpbnRyb2R1Y2VkLXg4Nl82ND0yMQorICAgIGluZmxhdGVfdGFibGU7ICMgaW50cm9kdWNlZC1hcm09OSBpbnRyb2R1Y2VkLWFybTY0PTIxIGludHJvZHVjZWQtbWlwcz0yMSBpbnRyb2R1Y2VkLW1pcHM2ND0yMSBpbnRyb2R1Y2VkLXg4Nj0yMSBpbnRyb2R1Y2VkLXg4Nl82ND0yMQorICAgIHVuY29tcHJlc3M7CisgICAgekVycm9yOworICAgIHpfZXJybXNnOyAjIHZhcgorICAgIHpjYWxsb2M7ICMgaW50cm9kdWNlZC1hcm09OSBpbnRyb2R1Y2VkLWFybTY0PTIxIGludHJvZHVjZWQtbWlwcz0yMSBpbnRyb2R1Y2VkLW1pcHM2ND0yMSBpbnRyb2R1Y2VkLXg4Nj0yMSBpbnRyb2R1Y2VkLXg4Nl82ND0yMQorICAgIHpjZnJlZTsgIyBpbnRyb2R1Y2VkLWFybT05IGludHJvZHVjZWQtYXJtNjQ9MjEgaW50cm9kdWNlZC1taXBzPTIxIGludHJvZHVjZWQtbWlwczY0PTIxIGludHJvZHVjZWQteDg2PTIxIGludHJvZHVjZWQteDg2XzY0PTIxCisgICAgemxpYkNvbXBpbGVGbGFnczsKKyAgICB6bGliVmVyc2lvbjsKKyAgbG9jYWw6CisgICAgKjsKK307CmRpZmYgLS1naXQgYS9zcmMvQ01ha2VMaXN0cy50eHQgYi9zcmMvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZmYmIzNwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDI0OSBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuNC40KQorc2V0KENNQUtFX0FMTE9XX0xPT1NFX0xPT1BfQ09OU1RSVUNUUyBPTikKKworcHJvamVjdCh6bGliIEMpCisKK3NldChWRVJTSU9OICIxLjIuMTIiKQorCitvcHRpb24oQVNNNjg2ICJFbmFibGUgYnVpbGRpbmcgaTY4NiBhc3NlbWJseSBpbXBsZW1lbnRhdGlvbiIpCitvcHRpb24oQU1ENjQgIkVuYWJsZSBidWlsZGluZyBhbWQ2NCBhc3NlbWJseSBpbXBsZW1lbnRhdGlvbiIpCisKK3NldChJTlNUQUxMX0JJTl9ESVIgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L2JpbiIgQ0FDSEUgUEFUSCAiSW5zdGFsbGF0aW9uIGRpcmVjdG9yeSBmb3IgZXhlY3V0YWJsZXMiKQorc2V0KElOU1RBTExfTElCX0RJUiAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vbGliIiBDQUNIRSBQQVRIICJJbnN0YWxsYXRpb24gZGlyZWN0b3J5IGZvciBsaWJyYXJpZXMiKQorc2V0KElOU1RBTExfSU5DX0RJUiAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vaW5jbHVkZSIgQ0FDSEUgUEFUSCAiSW5zdGFsbGF0aW9uIGRpcmVjdG9yeSBmb3IgaGVhZGVycyIpCitzZXQoSU5TVEFMTF9NQU5fRElSICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9zaGFyZS9tYW4iIENBQ0hFIFBBVEggIkluc3RhbGxhdGlvbiBkaXJlY3RvcnkgZm9yIG1hbnVhbCBwYWdlcyIpCitzZXQoSU5TVEFMTF9QS0dDT05GSUdfRElSICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9zaGFyZS9wa2djb25maWciIENBQ0hFIFBBVEggIkluc3RhbGxhdGlvbiBkaXJlY3RvcnkgZm9yIHBrZ2NvbmZpZyAoLnBjKSBmaWxlcyIpCisKK2luY2x1ZGUoQ2hlY2tUeXBlU2l6ZSkKK2luY2x1ZGUoQ2hlY2tGdW5jdGlvbkV4aXN0cykKK2luY2x1ZGUoQ2hlY2tJbmNsdWRlRmlsZSkKK2luY2x1ZGUoQ2hlY2tDU291cmNlQ29tcGlsZXMpCitlbmFibGVfdGVzdGluZygpCisKK2NoZWNrX2luY2x1ZGVfZmlsZShzeXMvdHlwZXMuaCBIQVZFX1NZU19UWVBFU19IKQorY2hlY2tfaW5jbHVkZV9maWxlKHN0ZGludC5oICAgIEhBVkVfU1RESU5UX0gpCitjaGVja19pbmNsdWRlX2ZpbGUoc3RkZGVmLmggICAgSEFWRV9TVERERUZfSCkKKworIworIyBDaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBsYXJnZSBmaWxlIHN1cHBvcnQKKyMKK3NldChDTUFLRV9SRVFVSVJFRF9ERUZJTklUSU9OUyAtRF9MQVJHRUZJTEU2NF9TT1VSQ0U9MSkKKyMgV2UgYWRkIHRoZXNlIG90aGVyIGRlZmluaXRpb25zIGhlcmUgYmVjYXVzZSBDaGVja1R5cGVTaXplLmNtYWtlCisjIGluIENNYWtlIDIuNC54IGRvZXMgbm90IGF1dG9tYXRpY2FsbHkgZG8gc28gYW5kIHdlIHdhbnQKKyMgY29tcGF0aWJpbGl0eSB3aXRoIENNYWtlIDIuNC54LgoraWYoSEFWRV9TWVNfVFlQRVNfSCkKKyAgICBsaXN0KEFQUEVORCBDTUFLRV9SRVFVSVJFRF9ERUZJTklUSU9OUyAtREhBVkVfU1lTX1RZUEVTX0gpCitlbmRpZigpCitpZihIQVZFX1NURElOVF9IKQorICAgIGxpc3QoQVBQRU5EIENNQUtFX1JFUVVJUkVEX0RFRklOSVRJT05TIC1ESEFWRV9TVERJTlRfSCkKK2VuZGlmKCkKK2lmKEhBVkVfU1REREVGX0gpCisgICAgbGlzdChBUFBFTkQgQ01BS0VfUkVRVUlSRURfREVGSU5JVElPTlMgLURIQVZFX1NURERFRl9IKQorZW5kaWYoKQorY2hlY2tfdHlwZV9zaXplKG9mZjY0X3QgT0ZGNjRfVCkKK2lmKEhBVkVfT0ZGNjRfVCkKKyAgIGFkZF9kZWZpbml0aW9ucygtRF9MQVJHRUZJTEU2NF9TT1VSQ0U9MSkKK2VuZGlmKCkKK3NldChDTUFLRV9SRVFVSVJFRF9ERUZJTklUSU9OUykgIyBjbGVhciB2YXJpYWJsZQorCisjCisjIENoZWNrIGZvciBmc2Vla28KKyMKK2NoZWNrX2Z1bmN0aW9uX2V4aXN0cyhmc2Vla28gSEFWRV9GU0VFS08pCitpZihOT1QgSEFWRV9GU0VFS08pCisgICAgYWRkX2RlZmluaXRpb25zKC1ETk9fRlNFRUtPKQorZW5kaWYoKQorCisjCisjIENoZWNrIGZvciB1bmlzdGQuaAorIworY2hlY2tfaW5jbHVkZV9maWxlKHVuaXN0ZC5oIFpfSEFWRV9VTklTVERfSCkKKworaWYoTVNWQykKKyAgICBzZXQoQ01BS0VfREVCVUdfUE9TVEZJWCAiZCIpCisgICAgYWRkX2RlZmluaXRpb25zKC1EX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFKQorICAgIGFkZF9kZWZpbml0aW9ucygtRF9DUlRfTk9OU1REQ19OT19ERVBSRUNBVEUpCisgICAgaW5jbHVkZV9kaXJlY3Rvcmllcygke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0pCitlbmRpZigpCisKK2lmKE5PVCBDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVIgU1RSRVFVQUwgQ01BS0VfQ1VSUkVOVF9CSU5BUllfRElSKQorICAgICMgSWYgd2UncmUgZG9pbmcgYW4gb3V0IG9mIHNvdXJjZSBidWlsZCBhbmQgdGhlIHVzZXIgaGFzIGEgemNvbmYuaAorICAgICMgaW4gdGhlaXIgc291cmNlIHRyZWUuLi4KKyAgICBpZihFWElTVFMgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3pjb25mLmgpCisgICAgICAgIG1lc3NhZ2UoU1RBVFVTICJSZW5hbWluZyIpCisgICAgICAgIG1lc3NhZ2UoU1RBVFVTICIgICAgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3pjb25mLmgiKQorICAgICAgICBtZXNzYWdlKFNUQVRVUyAidG8gJ3pjb25mLmguaW5jbHVkZWQnIGJlY2F1c2UgdGhpcyBmaWxlIGlzIGluY2x1ZGVkIHdpdGggemxpYiIpCisgICAgICAgIG1lc3NhZ2UoU1RBVFVTICJidXQgQ01ha2UgZ2VuZXJhdGVzIGl0IGF1dG9tYXRpY2FsbHkgaW4gdGhlIGJ1aWxkIGRpcmVjdG9yeS4iKQorICAgICAgICBmaWxlKFJFTkFNRSAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vemNvbmYuaCAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vemNvbmYuaC5pbmNsdWRlZCkKKyAgZW5kaWYoKQorZW5kaWYoKQorCitzZXQoWkxJQl9QQyAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vemxpYi5wYykKK2NvbmZpZ3VyZV9maWxlKCAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vemxpYi5wYy5jbWFrZWluCisJCSR7WkxJQl9QQ30gQE9OTFkpCitjb25maWd1cmVfZmlsZSgJJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3pjb25mLmguY21ha2VpbgorCQkke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vemNvbmYuaCBAT05MWSkKK2luY2x1ZGVfZGlyZWN0b3JpZXMoJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9ICR7Q01BS0VfU09VUkNFX0RJUn0pCisKKworIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgemxpYgorIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworc2V0KFpMSUJfUFVCTElDX0hEUlMKKyAgICAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vemNvbmYuaAorICAgIHpsaWIuaAorKQorc2V0KFpMSUJfUFJJVkFURV9IRFJTCisgICAgY3JjMzIuaAorICAgIGRlZmxhdGUuaAorICAgIGd6Z3V0cy5oCisgICAgaW5mZmFzdC5oCisgICAgaW5mZml4ZWQuaAorICAgIGluZmxhdGUuaAorICAgIGluZnRyZWVzLmgKKyAgICB0cmVlcy5oCisgICAgenV0aWwuaAorKQorc2V0KFpMSUJfU1JDUworICAgIGFkbGVyMzIuYworICAgIGNvbXByZXNzLmMKKyAgICBjcmMzMi5jCisgICAgZGVmbGF0ZS5jCisgICAgZ3pjbG9zZS5jCisgICAgZ3psaWIuYworICAgIGd6cmVhZC5jCisgICAgZ3p3cml0ZS5jCisgICAgaW5mbGF0ZS5jCisgICAgaW5mYmFjay5jCisgICAgaW5mdHJlZXMuYworICAgIGluZmZhc3QuYworICAgIHRyZWVzLmMKKyAgICB1bmNvbXByLmMKKyAgICB6dXRpbC5jCispCisKK2lmKE5PVCBNSU5HVykKKyAgICBzZXQoWkxJQl9ETExfU1JDUworICAgICAgICB3aW4zMi96bGliMS5yYyAjIElmIHByZXNlbnQgd2lsbCBvdmVycmlkZSBjdXN0b20gYnVpbGQgcnVsZSBiZWxvdy4KKyAgICApCitlbmRpZigpCisKK2lmKENNQUtFX0NPTVBJTEVSX0lTX0dOVUNDKQorICAgIGlmKEFTTTY4NikKKyAgICAgICAgc2V0KFpMSUJfQVNNUyBjb250cmliL2FzbTY4Ni9tYXRjaC5TKQorICAgIGVsc2VpZiAoQU1ENjQpCisgICAgICAgIHNldChaTElCX0FTTVMgY29udHJpYi9hbWQ2NC9hbWQ2NC1tYXRjaC5TKQorICAgIGVuZGlmICgpCisKKwlpZihaTElCX0FTTVMpCisJCWFkZF9kZWZpbml0aW9ucygtREFTTVYpCisJCXNldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllcygke1pMSUJfQVNNU30gUFJPUEVSVElFUyBMQU5HVUFHRSBDIENPTVBJTEVfRkxBR1MgLUROT19VTkRFUkxJTkUpCisJZW5kaWYoKQorZW5kaWYoKQorCitpZihNU1ZDKQorICAgIGlmKEFTTTY4NikKKwkJRU5BQkxFX0xBTkdVQUdFKEFTTV9NQVNNKQorICAgICAgICBzZXQoWkxJQl9BU01TCisJCQljb250cmliL21hc214ODYvaW5mZmFzMzIuYXNtCisJCQljb250cmliL21hc214ODYvbWF0Y2g2ODYuYXNtCisJCSkKKyAgICBlbHNlaWYgKEFNRDY0KQorCQlFTkFCTEVfTEFOR1VBR0UoQVNNX01BU00pCisgICAgICAgIHNldChaTElCX0FTTVMKKwkJCWNvbnRyaWIvbWFzbXg2NC9ndm1hdDY0LmFzbQorCQkJY29udHJpYi9tYXNteDY0L2luZmZhc3g2NC5hc20KKwkJKQorICAgIGVuZGlmKCkKKworCWlmKFpMSUJfQVNNUykKKwkJYWRkX2RlZmluaXRpb25zKC1EQVNNViAtREFTTUlORikKKwllbmRpZigpCitlbmRpZigpCisKKyMgcGFyc2UgdGhlIGZ1bGwgdmVyc2lvbiBudW1iZXIgZnJvbSB6bGliLmggYW5kIGluY2x1ZGUgaW4gWkxJQl9GVUxMX1ZFUlNJT04KK2ZpbGUoUkVBRCAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vemxpYi5oIF96bGliX2hfY29udGVudHMpCitzdHJpbmcoUkVHRVggUkVQTEFDRSAiLiojZGVmaW5lWyBcdF0rWkxJQl9WRVJTSU9OWyBcdF0rXCIoWy0wLTlBLVphLXouXSspXCIuKiIKKyAgICAiXFwxIiBaTElCX0ZVTExfVkVSU0lPTiAke196bGliX2hfY29udGVudHN9KQorCitpZihNSU5HVykKKyAgICAjIFRoaXMgZ2V0cyB1cyBETEwgcmVzb3VyY2UgaW5mb3JtYXRpb24gd2hlbiBjb21waWxpbmcgb24gTWluR1cuCisgICAgaWYoTk9UIENNQUtFX1JDX0NPTVBJTEVSKQorICAgICAgICBzZXQoQ01BS0VfUkNfQ09NUElMRVIgd2luZHJlcy5leGUpCisgICAgZW5kaWYoKQorCisgICAgYWRkX2N1c3RvbV9jb21tYW5kKE9VVFBVVCAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vemxpYjFyYy5vYmoKKyAgICAgICAgICAgICAgICAgICAgICAgQ09NTUFORCAke0NNQUtFX1JDX0NPTVBJTEVSfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1EIEdDQ19XSU5EUkVTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLUkgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLUkgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLW8gJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3psaWIxcmMub2JqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWkgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3dpbjMyL3psaWIxLnJjKQorICAgIHNldChaTElCX0RMTF9TUkNTICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS96bGliMXJjLm9iaikKK2VuZGlmKE1JTkdXKQorCithZGRfbGlicmFyeSh6bGliIFNIQVJFRCAke1pMSUJfU1JDU30gJHtaTElCX0FTTVN9ICR7WkxJQl9ETExfU1JDU30gJHtaTElCX1BVQkxJQ19IRFJTfSAke1pMSUJfUFJJVkFURV9IRFJTfSkKK2FkZF9saWJyYXJ5KHpsaWJzdGF0aWMgU1RBVElDICR7WkxJQl9TUkNTfSAke1pMSUJfQVNNU30gJHtaTElCX1BVQkxJQ19IRFJTfSAke1pMSUJfUFJJVkFURV9IRFJTfSkKK3NldF90YXJnZXRfcHJvcGVydGllcyh6bGliIFBST1BFUlRJRVMgREVGSU5FX1NZTUJPTCBaTElCX0RMTCkKK3NldF90YXJnZXRfcHJvcGVydGllcyh6bGliIFBST1BFUlRJRVMgU09WRVJTSU9OIDEpCisKK2lmKE5PVCBDWUdXSU4pCisgICAgIyBUaGlzIHByb3BlcnR5IGNhdXNlcyBzaGFyZWQgbGlicmFyaWVzIG9uIExpbnV4IHRvIGhhdmUgdGhlIGZ1bGwgdmVyc2lvbgorICAgICMgZW5jb2RlZCBpbnRvIHRoZWlyIGZpbmFsIGZpbGVuYW1lLiAgV2UgZGlzYWJsZSB0aGlzIG9uIEN5Z3dpbiBiZWNhdXNlCisgICAgIyBpdCBjYXVzZXMgY3lnei0ke1pMSUJfRlVMTF9WRVJTSU9OfS5kbGwgdG8gYmUgY3JlYXRlZCB3aGVuIGN5Z3ouZGxsCisgICAgIyBzZWVtcyB0byBiZSB0aGUgZGVmYXVsdC4KKyAgICAjCisgICAgIyBUaGlzIGhhcyBubyBlZmZlY3Qgd2l0aCBNU1ZDLCBvbiB0aGF0IHBsYXRmb3JtIHRoZSB2ZXJzaW9uIGluZm8gZm9yCisgICAgIyB0aGUgRExMIGNvbWVzIGZyb20gdGhlIHJlc291cmNlIGZpbGUgd2luMzIvemxpYjEucmMKKyAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoemxpYiBQUk9QRVJUSUVTIFZFUlNJT04gJHtaTElCX0ZVTExfVkVSU0lPTn0pCitlbmRpZigpCisKK2lmKFVOSVgpCisgICAgIyBPbiB1bml4LWxpa2UgcGxhdGZvcm1zIHRoZSBsaWJyYXJ5IGlzIGFsbW9zdCBhbHdheXMgY2FsbGVkIGxpYnoKKyAgIHNldF90YXJnZXRfcHJvcGVydGllcyh6bGliIHpsaWJzdGF0aWMgUFJPUEVSVElFUyBPVVRQVVRfTkFNRSB6KQorICAgaWYoTk9UIEFQUExFKQorICAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoemxpYiBQUk9QRVJUSUVTIExJTktfRkxBR1MgIi1XbCwtLXZlcnNpb24tc2NyaXB0LFwiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3psaWIubWFwXCIiKQorICAgZW5kaWYoKQorZWxzZWlmKEJVSUxEX1NIQVJFRF9MSUJTIEFORCBXSU4zMikKKyAgICAjIENyZWF0ZXMgemxpYjEuZGxsIHdoZW4gYnVpbGRpbmcgc2hhcmVkIGxpYnJhcnkgdmVyc2lvbgorICAgIHNldF90YXJnZXRfcHJvcGVydGllcyh6bGliIFBST1BFUlRJRVMgU1VGRklYICIxLmRsbCIpCitlbmRpZigpCisKK2lmKE5PVCBTS0lQX0lOU1RBTExfTElCUkFSSUVTIEFORCBOT1QgU0tJUF9JTlNUQUxMX0FMTCApCisgICAgaW5zdGFsbChUQVJHRVRTIHpsaWIgemxpYnN0YXRpYworICAgICAgICBSVU5USU1FIERFU1RJTkFUSU9OICIke0lOU1RBTExfQklOX0RJUn0iCisgICAgICAgIEFSQ0hJVkUgREVTVElOQVRJT04gIiR7SU5TVEFMTF9MSUJfRElSfSIKKyAgICAgICAgTElCUkFSWSBERVNUSU5BVElPTiAiJHtJTlNUQUxMX0xJQl9ESVJ9IiApCitlbmRpZigpCitpZihOT1QgU0tJUF9JTlNUQUxMX0hFQURFUlMgQU5EIE5PVCBTS0lQX0lOU1RBTExfQUxMICkKKyAgICBpbnN0YWxsKEZJTEVTICR7WkxJQl9QVUJMSUNfSERSU30gREVTVElOQVRJT04gIiR7SU5TVEFMTF9JTkNfRElSfSIpCitlbmRpZigpCitpZihOT1QgU0tJUF9JTlNUQUxMX0ZJTEVTIEFORCBOT1QgU0tJUF9JTlNUQUxMX0FMTCApCisgICAgaW5zdGFsbChGSUxFUyB6bGliLjMgREVTVElOQVRJT04gIiR7SU5TVEFMTF9NQU5fRElSfS9tYW4zIikKK2VuZGlmKCkKK2lmKE5PVCBTS0lQX0lOU1RBTExfRklMRVMgQU5EIE5PVCBTS0lQX0lOU1RBTExfQUxMICkKKyAgICBpbnN0YWxsKEZJTEVTICR7WkxJQl9QQ30gREVTVElOQVRJT04gIiR7SU5TVEFMTF9QS0dDT05GSUdfRElSfSIpCitlbmRpZigpCisKKyM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIEV4YW1wbGUgYmluYXJpZXMKKyM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2FkZF9leGVjdXRhYmxlKGV4YW1wbGUgdGVzdC9leGFtcGxlLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMoZXhhbXBsZSB6bGliKQorYWRkX3Rlc3QoZXhhbXBsZSBleGFtcGxlKQorCithZGRfZXhlY3V0YWJsZShtaW5pZ3ppcCB0ZXN0L21pbmlnemlwLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMobWluaWd6aXAgemxpYikKKworaWYoSEFWRV9PRkY2NF9UKQorICAgIGFkZF9leGVjdXRhYmxlKGV4YW1wbGU2NCB0ZXN0L2V4YW1wbGUuYykKKyAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoZXhhbXBsZTY0IHpsaWIpCisgICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKGV4YW1wbGU2NCBQUk9QRVJUSUVTIENPTVBJTEVfRkxBR1MgIi1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQiKQorICAgIGFkZF90ZXN0KGV4YW1wbGU2NCBleGFtcGxlNjQpCisKKyAgICBhZGRfZXhlY3V0YWJsZShtaW5pZ3ppcDY0IHRlc3QvbWluaWd6aXAuYykKKyAgICB0YXJnZXRfbGlua19saWJyYXJpZXMobWluaWd6aXA2NCB6bGliKQorICAgIHNldF90YXJnZXRfcHJvcGVydGllcyhtaW5pZ3ppcDY0IFBST1BFUlRJRVMgQ09NUElMRV9GTEFHUyAiLURfRklMRV9PRkZTRVRfQklUUz02NCIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9zcmMvQ2hhbmdlTG9nIGIvc3JjL0NoYW5nZUxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGIwZTYxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL0NoYW5nZUxvZwpAQCAtMCwwICsxLDE1NzggQEAKKworICAgICAgICAgICAgICAgIENoYW5nZUxvZyBmaWxlIGZvciB6bGliCisKK0NoYW5nZXMgaW4gMS4yLjEyICgyNyBNYXIgMjAyMikKKy0gQ3lnd2luIGRvZXMgbm90IGhhdmUgX3dvcGVuKCksIHNvIGRvIG5vdCBjcmVhdGUgZ3pvcGVuX3coKSB0aGVyZQorLSBQZXJtaXQgYSBkZWZsYXRlUGFyYW1zKCkgcGFyYW1ldGVyIGNoYW5nZSBhcyBzb29uIGFzIHBvc3NpYmxlCistIExpbWl0IGhhc2ggdGFibGUgaW5zZXJ0cyBhZnRlciBzd2l0Y2ggZnJvbSBzdG9yZWQgZGVmbGF0ZQorLSBGaXggYnVnIHdoZW4gd2luZG93IGZ1bGwgaW4gZGVmbGF0ZV9zdG9yZWQoKQorLSBGaXggQ0xFQVJfSEFTSCBtYWNybyB0byBiZSB1c2FibGUgYXMgYSBzaW5nbGUgc3RhdGVtZW50CistIEF2b2lkIGEgY29udmVyc2lvbiBlcnJvciBpbiBnenNlZWsgd2hlbiBvZmZfdCB0eXBlIHRvbyBzbWFsbAorLSBIYXZlIE1ha2VmaWxlIHJldHVybiBub24temVybyBlcnJvciBjb2RlIG9uIHRlc3QgZmFpbHVyZQorLSBBdm9pZCBzb21lIGNvbnZlcnNpb24gd2FybmluZ3MgaW4gZ3pyZWFkLmMgYW5kIGd6d3JpdGUuYworLSBVcGRhdGUgdXNlIG9mIGVycm5vIGZvciBuZXdlciBXaW5kb3dzIENFIHZlcnNpb25zCistIFNtYWxsIHNwZWVkdXAgdG8gaW5mbGF0ZSBbcHN1bWJlcmFdCistIFJldHVybiBhbiBlcnJvciBpZiB0aGUgZ3pwdXRzIHN0cmluZyBsZW5ndGggY2FuJ3QgZml0IGluIGFuIGludAorLSBBZGQgYWRkcmVzcyBjaGVja2luZyBpbiBjbGFuZyB0byAtdyBvcHRpb24gb2YgY29uZmlndXJlCistIERvbid0IGNvbXB1dGUgY2hlY2sgdmFsdWUgZm9yIHJhdyBpbmZsYXRlIGlmIGFza2VkIHRvIHZhbGlkYXRlCistIEhhbmRsZSBjYXNlIHdoZXJlIGluZmxhdGVTeW5jIHVzZWQgd2hlbiBoZWFkZXIgbmV2ZXIgcHJvY2Vzc2VkCistIEF2b2lkIHRoZSB1c2Ugb2YgcHRyZGlmZl90CistIEF2b2lkIGFuIHVuZGVmaW5lZCBiZWhhdmlvciBvZiBtZW1jcHkoKSBpbiBnemFwcGVuZCgpCistIEF2b2lkIHVuZGVmaW5lZCBiZWhhdmlvcnMgb2YgbWVtY3B5KCkgaW4gZ3oqcHJpbnRmKCkKKy0gQXZvaWQgYW4gdW5kZWZpbmVkIGJlaGF2aW9yIG9mIG1lbWNweSgpIGluIF90cl9zdG9yZWRfYmxvY2soKQorLSBNYWtlIHRoZSBuYW1lcyBpbiBmdW5jdGlvbnMgZGVjbGFyYXRpb25zIGlkZW50aWNhbCB0byBkZWZpbml0aW9ucworLSBSZW1vdmUgb2xkIGFzc2VtYmxlciBjb2RlIGluIHdoaWNoIGJ1Z3MgaGF2ZSBtYW5pZmVzdGVkCistIEZpeCBkZWZsYXRlRW5kKCkgdG8gbm90IHJlcG9ydCBhbiBlcnJvciBhdCBzdGFydCBvZiByYXcgZGVmbGF0ZQorLSBBZGQgbGVnYWwgZGlzY2xhaW1lciB0byBSRUFETUUKKy0gRW1waGFzaXplIHRoZSBuZWVkIHRvIGNvbnRpbnVlIGRlY29tcHJlc3NpbmcgZ3ppcCBtZW1iZXJzCistIENvcnJlY3QgdGhlIGluaXRpYWxpemF0aW9uIHJlcXVpcmVtZW50cyBmb3IgZGVmbGF0ZUluaXQyKCkKKy0gRml4IGEgYnVnIHRoYXQgY2FuIGNyYXNoIGRlZmxhdGUgb24gc29tZSBpbnB1dCB3aGVuIHVzaW5nIFpfRklYRUQKKy0gQXNzdXJlIHRoYXQgdGhlIG51bWJlciBvZiBiaXRzIGZvciBkZWZsYXRlUHJpbWUoKSBpcyB2YWxpZAorLSBVc2UgYSBzdHJ1Y3R1cmUgdG8gbWFrZSBnbG9iYWxzIGluIGVub3VnaC5jIGV2aWRlbnQKKy0gVXNlIGEgbWFjcm8gZm9yIHRoZSBwcmludGYgZm9ybWF0IG9mIGJpZ190IGluIGVub3VnaC5jCistIENsZWFuIHVwIGNvZGUgc3R5bGUgaW4gZW5vdWdoLmMsIHVwZGF0ZSB2ZXJzaW9uCistIFVzZSBpbmxpbmUgZnVuY3Rpb24gaW5zdGVhZCBvZiBtYWNybyBmb3IgaW5kZXggaW4gZW5vdWdoLmMKKy0gQ2xhcmlmeSB0aGF0IHByZWZpeCBjb2RlcyBhcmUgY291bnRlZCBpbiBlbm91Z2guYworLSBTaG93IGFsbCB0aGUgY29kZXMgZm9yIHRoZSBtYXhpbXVtIHRhYmxlcyBzaXplIGluIGVub3VnaC5jCistIEFkZCBnem5vcm0uYyBleGFtcGxlLCB3aGljaCBub3JtYWxpemVzIGd6aXAgZmlsZXMKKy0gRml4IHRoZSB6cmFuLmMgZXhhbXBsZSB0byB3b3JrIG9uIGEgbXVsdGlwbGUtbWVtYmVyIGd6aXAgZmlsZQorLSBBZGQgdGFibGVzIGZvciBjcmMzMl9jb21iaW5lKCksIHRvIHNwZWVkIGl0IHVwIGJ5IGEgZmFjdG9yIG9mIDIwMAorLSBBZGQgY3JjMzJfY29tYmluZV9nZW4oKSBhbmQgY3JjMzJfY29tYmluZV9vcCgpIGZvciBmYXN0IGNvbWJpbmVzCistIFNwZWVkIHVwIHNvZnR3YXJlIENSQy0zMiBjb21wdXRhdGlvbiBieSBhIGZhY3RvciBvZiAxLjUgdG8gMworLSBVc2UgYXRvbWljIHRlc3QgYW5kIHNldCwgaWYgYXZhaWxhYmxlLCBmb3IgZHluYW1pYyBDUkMgdGFibGVzCistIERvbid0IGJvdGhlciBjb21wdXRpbmcgY2hlY2sgdmFsdWUgYWZ0ZXIgc3VjY2Vzc2Z1bCBpbmZsYXRlU3luYygpCistIENvcnJlY3QgY29tbWVudCBpbiBjcmMzMi5jCistIEFkZCB1c2Ugb2YgdGhlIEFSTXY4IGNyYzMyIGluc3RydWN0aW9ucyB3aGVuIHJlcXVlc3RlZAorLSBVc2UgQVJNIGNyYzMyIGluc3RydWN0aW9ucyBpZiB0aGUgQVJNIGFyY2hpdGVjdHVyZSBoYXMgdGhlbQorLSBFeHBsaWNpdGx5IG5vdGUgdGhhdCB0aGUgMzItYml0IGNoZWNrIHZhbHVlcyBhcmUgMzIgYml0cworLSBBdm9pZCBhZGRpbmcgZW1wdHkgZ3ppcCBtZW1iZXIgYWZ0ZXIgZ3pmbHVzaCB3aXRoIFpfRklOSVNICistIEZpeCBtZW1vcnkgbGVhayBvbiBlcnJvciBpbiBnemxvZy5jCistIEZpeCBlcnJvciBpbiBjb21tZW50IG9uIHRoZSBwb2x5bm9taWFsIHJlcHJlc2VudGF0aW9uIG9mIGEgYnl0ZQorLSBDbGFyaWZ5IGd6KiBmdW5jdGlvbiBpbnRlcmZhY2VzLCByZWZlcnJpbmcgdG8gcGFyYW1ldGVyIG5hbWVzCistIENoYW5nZSBtYWNybyBuYW1lIGluIGluZmxhdGUuYyB0byBhdm9pZCBjb2xsaXNpb24gaW4gVnhXb3JrcworLSBDb3JyZWN0IHR5cG8gaW4gYmxhc3QuYworLSBJbXByb3ZlIHBvcnRhYmlsaXR5IG9mIGNvbnRyaWIvbWluaXppcAorLSBGaXggaW5kZW50YXRpb24gaW4gbWluaXppcCdzIHppcC5jCistIFJlcGxhY2UgYmxhY2svd2hpdGUgd2l0aCBhbGxvdy9ibG9jay4gKHRoZXJlc2EtbSkKKy0gbWluaXppcCB3YXJuaW5nIGZpeCBpZiBNQVhVMzIgYWxyZWFkeSBkZWZpbmVkLiAoZ3ZvbGxhbnQpCistIEZpeCB1bnp0ZWxsNjQoKSBpbiBtaW5pemlwIHRvIHdvcmsgcGFzdCA0R0IuIChEYW5pw6tsIEjDtnJjaG5lcikKKy0gQ2xlYW4gdXAgbWluaXppcCB0byByZWR1Y2Ugd2FybmluZ3MgZm9yIHRlc3RpbmcKKy0gQWRkIGZhbGx0aHJvdWdoIGNvbW1lbnRzIGZvciBnY2MKKy0gRWxpbWluYXRlIHVzZSBvZiBVTEwgY29uc3RhbnRzCistIFNlcGFyYXRlIG91dCBhZGRyZXNzIHNhbml0aXppbmcgZnJvbSB3YXJuaW5ncyBpbiBjb25maWd1cmUKKy0gUmVtb3ZlIGRlc3RydWN0aXZlIGFzcGVjdHMgb2YgbWFrZSBkaXN0Y2xlYW4KKy0gQ2hlY2sgZm9yIGNjIG1hc3F1ZXJhZGluZyBhcyBnY2Mgb3IgY2xhbmcgaW4gY29uZmlndXJlCistIEZpeCBjcmMzMi5jIHRvIGNvbXBpbGUgbG9jYWwgZnVuY3Rpb25zIG9ubHkgaWYgdXNlZAorCitDaGFuZ2VzIGluIDEuMi4xMSAoMTUgSmFuIDIwMTcpCistIEZpeCBkZWZsYXRlIHN0b3JlZCBidWcgd2hlbiBwdWxsaW5nIGxhc3QgYmxvY2sgZnJvbSB3aW5kb3cKKy0gUGVybWl0IGltbWVkaWF0ZSBkZWZsYXRlUGFyYW1zIGNoYW5nZXMgYmVmb3JlIGFueSBkZWZsYXRlIGlucHV0CisKK0NoYW5nZXMgaW4gMS4yLjEwICgyIEphbiAyMDE3KQorLSBBdm9pZCB3YXJuaW5ncyBvbiBzbnByaW50ZigpIHJldHVybiB2YWx1ZQorLSBGaXggYnVnIGluIGRlZmxhdGVfc3RvcmVkKCkgZm9yIHplcm8tbGVuZ3RoIGlucHV0CistIEZpeCBidWcgaW4gZ3p3cml0ZS5jIHRoYXQgcHJvZHVjZWQgY29ycnVwdCBnemlwIGZpbGVzCistIFJlbW92ZSBmaWxlcyB0byBiZSBpbnN0YWxsZWQgYmVmb3JlIGNvcHlpbmcgdGhlbSBpbiBNYWtlZmlsZS5pbgorLSBBZGQgd2FybmluZ3Mgd2hlbiBjb21waWxpbmcgd2l0aCBhc3NlbWJsZXIgY29kZQorCitDaGFuZ2VzIGluIDEuMi45ICgzMSBEZWMgMjAxNikKKy0gRml4IGNvbnRyaWIvbWluaXppcCB0byBwZXJtaXQgdW56aXBwaW5nIHdpdGggZGVza3RvcCBBUEkgW1pvdXpvdV0KKy0gSW1wcm92ZSBjb250cmliL2JsYXN0IHRvIHJldHVybiB1bnVzZWQgYnl0ZXMKKy0gQXNzdXJlIHRoYXQgZ3pvZmZzZXQoKSBpcyBjb3JyZWN0IHdoZW4gYXBwZW5kaW5nCistIEltcHJvdmUgY29tcHJlc3MoKSBhbmQgdW5jb21wcmVzcygpIHRvIHN1cHBvcnQgbGFyZ2UgbGVuZ3RocworLSBGaXggYnVnIGluIHRlc3QvZXhhbXBsZS5jIHdoZXJlIGVycm9yIGNvZGUgbm90IHNhdmVkCistIFJlbWVkeSBDb3Zlcml0eSB3YXJuaW5nIFtSYW5kZXJzLVBlaHJzb25dCistIEltcHJvdmUgc3BlZWQgb2YgZ3pwcmludGYoKSBpbiB0cmFuc3BhcmVudCBtb2RlCistIEZpeCBpbmZsYXRlSW5pdDIoKSBidWcgd2hlbiB3aW5kb3dCaXRzIGlzIDE2IG9yIDMyCistIENoYW5nZSBERUJVRyBtYWNybyB0byBaTElCX0RFQlVHCistIEF2b2lkIHVuaW5pdGlhbGl6ZWQgYWNjZXNzIGJ5IGd6Y2xvc2VfdygpCistIEFsbG93IGJ1aWxkaW5nIHpsaWIgb3V0c2lkZSBvZiB0aGUgc291cmNlIGRpcmVjdG9yeQorLSBGaXggYnVnIHRoYXQgYWNjZXB0ZWQgaW52YWxpZCB6bGliIGhlYWRlciB3aGVuIHdpbmRvd0JpdHMgaXMgemVybworLSBGaXggZ3pzZWVrKCkgcHJvYmxlbSBvbiBNaW5HVyBkdWUgdG8gYnVnZ3kgX2xzZWVraTY0IHRoZXJlCistIExvb3Agb24gd3JpdGUoKSBjYWxscyBpbiBnendyaXRlLmMgaW4gY2FzZSBvZiBub24tYmxvY2tpbmcgSS9PCistIEFkZCAtLXdhcm4gKC13KSBvcHRpb24gdG8gLi9jb25maWd1cmUgZm9yIG1vcmUgY29tcGlsZXIgd2FybmluZ3MKKy0gUmVqZWN0IGEgd2luZG93IHNpemUgb2YgMjU2IGJ5dGVzIGlmIG5vdCB1c2luZyB0aGUgemxpYiB3cmFwcGVyCistIEZpeCBidWcgd2hlbiBsZXZlbCAwIHVzZWQgd2l0aCBaX0hVRkZNQU4gb3IgWl9STEUKKy0gQWRkIC0tZGVidWcgKC1kKSBvcHRpb24gdG8gLi9jb25maWd1cmUgdG8gZGVmaW5lIFpMSUJfREVCVUcKKy0gRml4IGJ1Z3MgaW4gY3JlYXRpbmcgYSB2ZXJ5IGxhcmdlIGd6aXAgaGVhZGVyCistIEFkZCB1bmNvbXByZXNzMigpIGZ1bmN0aW9uLCB3aGljaCByZXR1cm5zIHRoZSBpbnB1dCBzaXplIHVzZWQKKy0gQXNzdXJlIHRoYXQgZGVmbGF0ZVBhcmFtcygpIHdpbGwgbm90IHN3aXRjaCBmdW5jdGlvbnMgbWlkLWJsb2NrCistIERyYW1hdGljYWxseSBzcGVlZCB1cCBkZWZsYXRpb24gZm9yIGxldmVsIDAgKHN0b3JpbmcpCistIEFkZCBnemZyZWFkKCksIGR1cGxpY2F0aW5nIHRoZSBpbnRlcmZhY2Ugb2YgZnJlYWQoKQorLSBBZGQgZ3pmd3JpdGUoKSwgZHVwbGljYXRpbmcgdGhlIGludGVyZmFjZSBvZiBmd3JpdGUoKQorLSBBZGQgZGVmbGF0ZUdldERpY3Rpb25hcnkoKSBmdW5jdGlvbgorLSBVc2Ugc25wcmludGYoKSBmb3IgbGF0ZXIgdmVyc2lvbnMgb2YgTWljcm9zb2Z0IEMKKy0gRml4ICpJbml0IG1hY3JvcyB0byB1c2Ugel8gcHJlZml4IHdoZW4gcmVxdWVzdGVkCistIFJlcGxhY2UgYXM0MDAgd2l0aCBvczQwMCBmb3IgT1MvNDAwIHN1cHBvcnQgW01vbm5lcmF0XQorLSBBZGQgY3JjMzJfeigpIGFuZCBhZGxlcjMyX3ooKSBmdW5jdGlvbnMgd2l0aCBzaXplX3QgbGVuZ3RocworLSBVcGRhdGUgVmlzdWFsIFN0dWRpbyBwcm9qZWN0IGZpbGVzIFtBcmFIYWFuXQorCitDaGFuZ2VzIGluIDEuMi44ICgyOCBBcHIgMjAxMykKKy0gVXBkYXRlIGNvbnRyaWIvbWluaXppcC9pb3dpbjMyLmMgZm9yIFdpbmRvd3MgUlQgW1ZvbGxhbnRdCistIERvIG5vdCBmb3JjZSBaX0NPTlNUIGZvciBDKysKKy0gQ2xlYW4gdXAgY29udHJpYi92c3R1ZGlvIFtSb8OfXQorLSBDb3JyZWN0IHNwZWxsaW5nIGVycm9yIGluIHpsaWIuaAorLSBGaXggbWl4ZWQgbGluZSBlbmRpbmdzIGluIGNvbnRyaWIvdnN0dWRpbworCitDaGFuZ2VzIGluIDEuMi43LjMgKDEzIEFwciAyMDEzKQorLSBGaXggdmVyc2lvbiBudW1iZXJzIGFuZCBETEwgbmFtZXMgaW4gY29udHJpYi92c3R1ZGlvLyovemxpYi5yYworCitDaGFuZ2VzIGluIDEuMi43LjIgKDEzIEFwciAyMDEzKQorLSBDaGFuZ2UgY2hlY2sgZm9yIGEgZm91ci1ieXRlIHR5cGUgYmFjayB0byBoZXhhZGVjaW1hbAorLSBGaXggdHlwbyBpbiB3aW4zMi9NYWtlZmlsZS5tc2MKKy0gQWRkIGNhc3RzIGluIGd6d3JpdGUuYyBmb3IgcG9pbnRlciBkaWZmZXJlbmNlcworCitDaGFuZ2VzIGluIDEuMi43LjEgKDI0IE1hciAyMDEzKQorLSBSZXBsYWNlIHVzZSBvZiB1bnNhZmUgc3RyaW5nIGZ1bmN0aW9ucyB3aXRoIHNucHJpbnRmIGlmIGF2YWlsYWJsZQorLSBBdm9pZCBpbmNsdWRpbmcgc3RkZGVmLmggb24gV2luZG93cyBmb3IgWl9TT0xPIGNvbXBpbGUgW05pZXNzaW5rXQorLSBGaXggZ3pnZXRjIHVuZGVmaW5lIHdoZW4gWl9QUkVGSVggc2V0IFtUdXJrXQorLSBFbGltaW5hdGUgdXNlIG9mIG1rdGVtcCBpbiBNYWtlZmlsZSAobm90IGFsd2F5cyBhdmFpbGFibGUpCistIEZpeCBidWcgaW4gJ0YnIG1vZGUgZm9yIGd6b3BlbigpCistIEFkZCBpbmZsYXRlR2V0RGljdGlvbmFyeSgpIGZ1bmN0aW9uCistIENvcnJlY3QgY29tbWVudCBpbiBkZWZsYXRlLmgKKy0gVXNlIF9zbnByaW50ZiBmb3Igc25wcmludGYgaW4gTWljcm9zb2Z0IEMKKy0gT24gRGFyd2luLCBvbmx5IHVzZSAvdXNyL2Jpbi9saWJ0b29sIGlmIGxpYnRvb2wgaXMgbm90IEFwcGxlCistIERlbGV0ZSAiLS12ZXJzaW9uIiBmaWxlIGlmIGNyZWF0ZWQgYnkgImFyIC0tdmVyc2lvbiIgW1JpY2hhcmQgRy5dCistIEZpeCBjb25maWd1cmUgY2hlY2sgZm9yIHZlcmFjaXR5IG9mIGNvbXBpbGVyIGVycm9yIHJldHVybiBjb2RlcworLSBGaXggQ01ha2UgY29tcGlsYXRpb24gb2Ygc3RhdGljIGxpYiBmb3IgTVNWQzIwMTAgeDY0CistIFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgaW4gaW5mYmFjazkuYworLSBGaXggYXJndW1lbnQgY2hlY2tzIGluIGd6bG9nX2NvbXByZXNzKCkgYW5kIGd6bG9nX3dyaXRlKCkKKy0gQ2xlYW4gdXAgdGhlIHVzYWdlIG9mIHpfY29uc3QgYW5kIHJlc3BlY3QgY29uc3QgdXNhZ2Ugd2l0aGluIHpsaWIKKy0gQ2xlYW4gdXAgZXhhbXBsZXMvZ3psb2cuW2NoXSBjb21wYXJpc29ucyBvZiBkaWZmZXJlbnQgdHlwZXMKKy0gQXZvaWQgc2hpZnQgZXF1YWwgdG8gYml0cyBpbiB0eXBlIChjYXVzZWQgZW5kbGVzcyBsb29wKQorLSBGaXggdW5pbml0aWFsaXplZCB2YWx1ZSBidWcgaW4gZ3pwdXRjKCkgaW50cm9kdWNlZCBieSBjb25zdCBwYXRjaGVzCistIEZpeCBtZW1vcnkgYWxsb2NhdGlvbiBlcnJvciBpbiBleGFtcGxlcy96cmFuLmMgW05vcl0KKy0gRml4IGJ1ZyB3aGVyZSBnem9wZW4oKSwgZ3pjbG9zZSgpIHdvdWxkIHdyaXRlIGFuIGVtcHR5IGZpbGUKKy0gRml4IGJ1ZyBpbiBnemNsb3NlKCkgd2hlbiBnendyaXRlKCkgcnVucyBvdXQgb2YgbWVtb3J5CistIENoZWNrIGZvciBpbnB1dCBidWZmZXIgbWFsbG9jIGZhaWx1cmUgaW4gZXhhbXBsZXMvZ3phcHBlbmQuYworLSBBZGQgbm90ZSB0byBjb250cmliL2JsYXN0IHRvIHVzZSBiaW5hcnkgbW9kZSBpbiBzdGRpbworLSBGaXggY29tcGFyaXNvbnMgb2YgZGlmZmVyZW50bHkgc2lnbmVkIGludGVnZXJzIGluIGNvbnRyaWIvYmxhc3QKKy0gQ2hlY2sgZm9yIGludmFsaWQgY29kZSBsZW5ndGggY29kZXMgaW4gY29udHJpYi9wdWZmCistIEZpeCBzZXJpb3VzIGJ1dCB2ZXJ5IHJhcmUgZGVjb21wcmVzc2lvbiBidWcgaW4gaW5mdHJlZXMuYworLSBVcGRhdGUgaW5mbGF0ZUJhY2soKSBjb21tZW50cywgc2luY2UgaW5mbGF0ZSgpIGNhbiBiZSBmYXN0ZXIKKy0gVXNlIHVuZGVyc2NvcmVkIEkvTyBmdW5jdGlvbiBuYW1lcyBmb3IgV0lOQVBJX0ZBTUlMWQorLSBBZGQgX3RyX2ZsdXNoX2JpdHMgdG8gdGhlIGV4dGVybmFsIHN5bWJvbHMgcHJlZml4ZWQgYnkgLS16cHJlZml4CistIEFkZCBjb250cmliL3ZzdHVkaW8vdmMxMCBwcmUtYnVpbGQgc3RlcCBmb3Igc3RhdGljIG9ubHkKKy0gUXVvdGUgLS12ZXJzaW9uLXNjcmlwdCBhcmd1bWVudCBpbiBDTWFrZUxpc3RzLnR4dAorLSBEb24ndCBzcGVjaWZ5IC0tdmVyc2lvbi1zY3JpcHQgb24gQXBwbGUgcGxhdGZvcm1zIGluIENNYWtlTGlzdHMudHh0CistIEZpeCBjYXN0aW5nIGVycm9yIGluIGNvbnRyaWIvdGVzdHpsaWIvdGVzdHpsaWIuYworLSBGaXggdHlwZXMgaW4gY29udHJpYi9taW5pemlwIHRvIG1hdGNoIHJlc3VsdCBvZiBnZXRfY3JjX3RhYmxlKCkKKy0gU2ltcGxpZnkgY29udHJpYi92c3R1ZGlvL3ZjMTAgd2l0aCAnZCcgc3VmZml4CistIEFkZCBUT1Agc3VwcG9ydCB0byB3aW4zMi9NYWtlZmlsZS5tc2MKKy0gU3Vwb3J0IGk2ODYgYW5kIGFtZDY0IGFzc2VtYmxlciBidWlsZHMgaW4gQ01ha2VMaXN0cy50eHQKKy0gRml4IHR5cG9zIGluIHRoZSB1c2Ugb2YgX0xBUkdFRklMRTY0X1NPVVJDRSBpbiB6Y29uZi5oCistIEFkZCB2YzExIGFuZCB2YzEyIGJ1aWxkIGZpbGVzIHRvIGNvbnRyaWIvdnN0dWRpbworLSBBZGQgZ3p2cHJpbnRmKCkgYXMgYW4gdW5kb2N1bWVudGVkIGZ1bmN0aW9uIGluIHpsaWIKKy0gRml4IGNvbmZpZ3VyZSBmb3IgU3VuIHNoZWxsCistIFJlbW92ZSBydW50aW1lIGNoZWNrIGluIGNvbmZpZ3VyZSBmb3IgZm91ci1ieXRlIGludGVnZXIgdHlwZQorLSBBZGQgY2FzdHMgYW5kIGNvbnN0cyB0byBlYXNlIHVzZXIgY29udmVyc2lvbiB0byBDKysKKy0gQWRkIG1hbiBwYWdlcyBmb3IgbWluaXppcCBhbmQgbWluaXVuemlwCistIEluIE1ha2VmaWxlIHVuaW5zdGFsbCwgZG9uJ3Qgcm0gaWYgcHJlY2VkaW5nIGNkIGZhaWxzCistIERvIG5vdCByZXR1cm4gWl9CVUZfRVJST1IgaWYgZGVmbGF0ZVBhcmFtKCkgaGFzIG5vdGhpbmcgdG8gd3JpdGUKKworQ2hhbmdlcyBpbiAxLjIuNyAoMiBNYXkgMjAxMikKKy0gUmVwbGFjZSB1c2Ugb2YgbWVtbW92ZSgpIHdpdGggYSBzaW1wbGUgY29weSBmb3IgcG9ydGFiaWxpdHkKKy0gVGVzdCBmb3IgZXhpc3RlbmNlIG9mIHN0cmVycm9yCistIFJlc3RvcmUgZ3pnZXRjXyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIDEuMi42CistIEZpeCBidWlsZCB3aXRoIG5vbi1HTlUgbWFrZSBvbiBTb2xhcmlzCistIFJlcXVpcmUgZ2NjIDQuMCBvciBsYXRlciBvbiBNYWMgT1MgWCB0byB1c2UgdGhlIGhpZGRlbiBhdHRyaWJ1dGUKKy0gSW5jbHVkZSB1bmlzdGQuaCBmb3IgV2F0Y29tIEMKKy0gVXNlIF9fV0FUQ09NQ19fIGluc3RlYWQgb2YgX19XQVRDT01fXworLSBEbyBub3QgdXNlIHRoZSB2aXNpYmlsaXR5IGF0dHJpYnV0ZSBpZiBOT19WSVogZGVmaW5lZAorLSBJbXByb3ZlIHRoZSBkZXRlY3Rpb24gb2Ygbm8gaGlkZGVuIHZpc2liaWxpdHkgYXR0cmlidXRlCistIEF2b2lkIHVzaW5nIF9faW50NjQgZm9yIGdjYyBvciBzb2xvIGNvbXBpbGF0aW9uCistIENhc3QgdG8gY2hhciAqIGluIGd6cHJpbnRmIHRvIGF2b2lkIHdhcm5pbmdzIFtaaW5zZXJdCistIEZpeCBtYWtlX3Ztcy5jb20gZm9yIFZBWCBbWmluc2VyXQorLSBEb24ndCB1c2UgbGlicmFyeSBvciBidWlsdC1pbiBieXRlIHN3YXBzCistIFNpbXBsaWZ5IHRlc3QgYW5kIHVzZSBvZiBnY2MgaGlkZGVuIGF0dHJpYnV0ZQorLSBGaXggYnVnIGluIGd6Y2xvc2VfdygpIHdoZW4gZ3p3cml0ZSgpIGZhaWxzIHRvIGFsbG9jYXRlIG1lbW9yeQorLSBBZGQgIngiIChPX0VYQ0wpIGFuZCAiZSIgKE9fQ0xPRVhFQykgbW9kZXMgc3VwcG9ydCB0byBnem9wZW4oKQorLSBGaXggYnVnIGluIHRlc3QvbWluaWd6aXAuYyBmb3IgY29uZmlndXJlIC0tc29sbworLSBGaXggY29udHJpYi92c3R1ZGlvIHByb2plY3QgbGluayBlcnJvcnMgW01vaGFuYXRoYXNdCistIEFkZCBhYmlsaXR5IHRvIGNob29zZSB0aGUgYnVpbGRlciBpbiBtYWtlX3Ztcy5jb20gW1NjaHdlZGFdCistIEFkZCBERVNURElSIHN1cHBvcnQgdG8gbWluZ3czMiB3aW4zMi9NYWtlZmlsZS5nY2MKKy0gRml4IGNvbW1lbnRzIGluIHdpbjMyL01ha2VmaWxlLmdjYyBmb3IgcHJvcGVyIHVzYWdlCistIEFsbG93IG92ZXJyaWRpbmcgdGhlIGRlZmF1bHQgaW5zdGFsbCBsb2NhdGlvbnMgZm9yIGNtYWtlCistIEdlbmVyYXRlIGFuZCBpbnN0YWxsIHRoZSBwa2ctY29uZmlnIGZpbGUgd2l0aCBjbWFrZQorLSBCdWlsZCBib3RoIGEgc3RhdGljIGFuZCBhIHNoYXJlZCB2ZXJzaW9uIG9mIHpsaWIgd2l0aCBjbWFrZQorLSBJbmNsdWRlIHZlcnNpb24gc3ltYm9scyBmb3IgY21ha2UgYnVpbGRzCistIElmIHVzaW5nIGNtYWtlIHdpdGggTVNWQywgYWRkIHRoZSBzb3VyY2UgZGlyZWN0b3J5IHRvIHRoZSBpbmNsdWRlcworLSBSZW1vdmUgdW5uZWVkZWQgRVhUUkFfQ0ZMQUdTIGZyb20gd2luMzIvTWFrZWZpbGUuZ2NjIFtUcnV0YV0KKy0gTW92ZSBvYnNvbGV0ZSBlbXggbWFrZWZpbGUgdG8gb2xkIFtUcnV0YV0KKy0gQWxsb3cgdGhlIHVzZSBvZiAtV3VuZGVmIHdoZW4gY29tcGlsaW5nIG9yIHVzaW5nIHpsaWIKKy0gQXZvaWQgdGhlIHVzZSBvZiB0aGUgLXUgb3B0aW9uIHdpdGggbWt0ZW1wCistIEltcHJvdmUgaW5mbGF0ZSgpIGRvY3VtZW50YXRpb24gb24gdGhlIHVzZSBvZiBaX0ZJTklTSAorLSBSZWNvZ25pemUgY2xhbmcgYXMgZ2NjCistIEFkZCBnem9wZW5fdygpIGluIFdpbmRvd3MgZm9yIHdpZGUgY2hhcmFjdGVyIHBhdGggbmFtZXMKKy0gUmVuYW1lIHpjb25mLmggaW4gQ01ha2VMaXN0cy50eHQgdG8gbW92ZSBpdCBvdXQgb2YgdGhlIHdheQorLSBBZGQgc291cmNlIGRpcmVjdG9yeSBpbiBDTWFrZUxpc3RzLnR4dCBmb3IgYnVpbGRpbmcgZXhhbXBsZXMKKy0gTG9vayBpbiBidWlsZCBkaXJlY3RvcnkgZm9yIHpsaWIucGMgaW4gQ01ha2VMaXN0cy50eHQKKy0gUmVtb3ZlIGd6ZmxhZ3MgZnJvbSB6bGlidmMuZGVmIGluIHZjOSBhbmQgdmMxMAorLSBGaXggY29udHJpYi9taW5pemlwIGNvbXBpbGF0aW9uIGluIHRoZSBNaW5HVyBlbnZpcm9ubWVudAorLSBVcGRhdGUgLi9jb25maWd1cmUgZm9yIFNvbGFyaXMsIHN1cHBvcnQgLS02NCBbTW9vbmV5XQorLSBSZW1vdmUgLVIuIGZyb20gU29sYXJpcyBzaGFyZWQgYnVpbGQgKHBvc3NpYmxlIHNlY3VyaXR5IGlzc3VlKQorLSBBdm9pZCByYWNlIGNvbmRpdGlvbiBmb3IgcGFyYWxsZWwgbWFrZSAoLWopIHJ1bm5pbmcgZXhhbXBsZQorLSBGaXggdHlwZSBtaXNtYXRjaCBiZXR3ZWVuIGdldF9jcmNfdGFibGUoKSBhbmQgY3JjX3RhYmxlCistIEZpeCBwYXJzaW5nIG9mIHZlcnNpb24gd2l0aCAiLSIgaW4gQ01ha2VMaXN0cy50eHQgW1NuaWRlciwgWmllZ2xlcl0KKy0gRml4IHRoZSBwYXRoIHRvIHpsaWIubWFwIGluIENNYWtlTGlzdHMudHh0CistIEZvcmNlIHRoZSBuYXRpdmUgbGlidG9vbCBpbiBNYWMgT1MgWCB0byBhdm9pZCBHTlUgbGlidG9vbCBbQmVlYmVdCistIEFkZCBpbnN0cnVjdGlvbnMgdG8gd2luMzIvTWFrZWZpbGUuZ2NjIGZvciBzaGFyZWQgaW5zdGFsbCBbVG9ycmldCisKK0NoYW5nZXMgaW4gMS4yLjYuMSAoMTIgRmViIDIwMTIpCistIEF2b2lkIHRoZSB1c2Ugb2YgdGhlIE9iamVjdGl2ZS1DIHJlc2VydmVkIG5hbWUgImlkIgorLSBJbmNsdWRlIGlvLmggaW4gZ3pndXRzLmggZm9yIE1pY3Jvc29mdCBjb21waWxlcnMKKy0gRml4IHByb2JsZW0gd2l0aCAuL2NvbmZpZ3VyZSAtLXByZWZpeCBhbmQgZ3pnZXRjIG1hY3JvCistIEluY2x1ZGUgZ3pfaGVhZGVyIGRlZmluaXRpb24gd2hlbiBjb21waWxpbmcgemxpYiBzb2xvCistIFB1dCBnemZsYWdzKCkgZnVuY3Rpb25hbGl0eSBiYWNrIGluIHp1dGlsLmMKKy0gQXZvaWQgbGlicmFyeSBoZWFkZXIgaW5jbHVkZSBpbiBjcmMzMi5jIGZvciBaX1NPTE8KKy0gVXNlIG5hbWUgaW4gR0NDX0NMQVNTSUMgYXMgQyBjb21waWxlciBmb3IgY292ZXJhZ2UgdGVzdGluZywgaWYgc2V0CistIE1pbm9yIGNsZWFudXAgaW4gY29udHJpYi9taW5pemlwL3ppcC5jIFtWb2xsYW50XQorLSBVcGRhdGUgbWFrZV92bXMuY29tIFtaaW5zZXJdCistIFJlbW92ZSB1bm5lY2Vzc2FyeSBnemdldGNfIGZ1bmN0aW9uCistIFVzZSBvcHRpbWl6ZWQgYnl0ZSBzd2FwIG9wZXJhdGlvbnMgZm9yIE1pY3Jvc29mdCBhbmQgR05VIFtTbnlkZXJdCistIEZpeCBtaW5vciB0eXBvIGluIHpsaWIuaCBjb21tZW50cyBbUnplc25pb3dpZWNraV0KKworQ2hhbmdlcyBpbiAxLjIuNiAoMjkgSmFuIDIwMTIpCistIFVwZGF0ZSB0aGUgUGFzY2FsIGludGVyZmFjZSBpbiBjb250cmliL3Bhc2NhbAorLSBGaXggZnVuY3Rpb24gbnVtYmVycyBmb3IgZ3pnZXRjXyBpbiB6bGlidmMuZGVmIGZpbGVzCistIEZpeCBjb25maWd1cmUuYWMgZm9yIGNvbnRyaWIvbWluaXppcCBbU2NoaWZmZXJdCistIEZpeCBsYXJnZS1lbnRyeSBkZXRlY3Rpb24gaW4gbWluaXppcCBvbiA2NC1iaXQgc3lzdGVtcyBbU2NoaWZmZXJdCistIEhhdmUgLi9jb25maWd1cmUgdXNlIHRoZSBjb21waWxlciByZXR1cm4gY29kZSBmb3IgZXJyb3IgaW5kaWNhdGlvbgorLSBGaXggQ01ha2VMaXN0cy50eHQgZm9yIGNyb3NzIGNvbXBpbGF0aW9uIFtNY0NsdXJlXQorLSBGaXggY29udHJpYi9taW5pemlwL3ppcC5jIGZvciA2NC1iaXQgYXJjaGl0ZWN0dXJlcyBbRGFsc25lc10KKy0gRml4IGNvbXBpbGF0aW9uIG9mIGNvbnRyaWIvbWluaXppcCBvbiBGcmVlQlNEIFtNYXJxdWV6XQorLSBDb3JyZWN0IHN1Z2dlc3RlZCB1c2FnZXMgaW4gd2luMzIvTWFrZWZpbGUubXNjIFtTaGFjaGFyLCBIb3J2YXRoXQorLSBJbmNsdWRlIGlvLmggZm9yIFR1cmJvIEMgLyBCb3JsYW5kIEMgb24gYWxsIHBsYXRmb3JtcyBbVHJ1dGFdCistIE1ha2UgdmVyc2lvbiBleHBsaWNpdCBpbiBjb250cmliL21pbml6aXAvY29uZmlndXJlLmFjIFtCb3NtYW5zXQorLSBBdm9pZCB3YXJuaW5nIGZvciBubyBlbmNyeXB0aW9uIGluIGNvbnRyaWIvbWluaXppcC96aXAuYyBbVm9sbGFudF0KKy0gTWlub3IgY2xlYW51cCB1cCBjb250cmliL21pbml6aXAvdW56aXAuYyBbVm9sbGFudF0KKy0gRml4IGJ1ZyB3aGVuIGNvbXBpbGluZyBtaW5pemlwIHdpdGggQysrIFtWb2xsYW50XQorLSBQcm90ZWN0IGZvciBsb25nIG5hbWUgYW5kIGV4dHJhIGZpZWxkcyBpbiBjb250cmliL21pbml6aXAgW1ZvbGxhbnRdCistIEF2b2lkIHNvbWUgd2FybmluZ3MgaW4gY29udHJpYi9taW5pemlwIFtWb2xsYW50XQorLSBBZGQgLUkuLi8uLiAtTC4uLy4uIHRvIENGTEFHUyBmb3IgbWluaXppcCBhbmQgbWluaXVuemlwCistIEFkZCBtaXNzaW5nIGxpYnMgdG8gbWluaXppcCBsaW5rZXIgY29tbWFuZAorLSBBZGQgc3VwcG9ydCBmb3IgVlBBVEggYnVpbGRzIGluIGNvbnRyaWIvbWluaXppcAorLSBBZGQgYW4gLS1lbmFibGUtZGVtb3Mgb3B0aW9uIHRvIGNvbnRyaWIvbWluaXppcC9jb25maWd1cmUKKy0gQWRkIHRoZSBnZW5lcmF0aW9uIG9mIGNvbmZpZ3VyZS5sb2cgYnkgLi9jb25maWd1cmUKKy0gRXhpdCB3aGVuIHJlcXVpcmVkIHBhcmFtZXRlcnMgbm90IHByb3ZpZGVkIHRvIHdpbjMyL01ha2VmaWxlLmdjYworLSBIYXZlIGd6cHV0YyByZXR1cm4gdGhlIGNoYXJhY3RlciB3cml0dGVuIGluc3RlYWQgb2YgdGhlIGFyZ3VtZW50CistIFVzZSB0aGUgLW0gb3B0aW9uIG9uIGxkY29uZmlnIGZvciBCU0Qgc3lzdGVtcyBbVG9iaWFzXQorLSBDb3JyZWN0IGluIHpsaWIubWFwIHdoZW4gZGVmbGF0ZVJlc2V0S2VlcCB3YXMgYWRkZWQKKworQ2hhbmdlcyBpbiAxLjIuNS4zICgxNSBKYW4gMjAxMikKKy0gUmVzdG9yZSBnemdldGMgZnVuY3Rpb24gZm9yIGJpbmFyeSBjb21wYXRpYmlsaXR5CistIERvIG5vdCB1c2UgX2xzZWVraTY0IHVuZGVyIEJvcmxhbmQgQysrIFtUcnV0YV0KKy0gVXBkYXRlIHdpbjMyL01ha2VmaWxlLm1zYyB0byBidWlsZCB0ZXN0LyouYyBbVHJ1dGFdCistIFJlbW92ZSBvbGQvdmlzdWFsYzYgZ2l2ZW4gQ01ha2VmaWxlIGFuZCBvdGhlciBhbHRlcm5hdGl2ZXMKKy0gVXBkYXRlIEFTNDAwIGJ1aWxkIGZpbGVzIGFuZCBkb2N1bWVudGF0aW9uIFtNb25uZXJhdF0KKy0gVXBkYXRlIHdpbjMyL01ha2VmaWxlLmdjYyB0byBidWlsZCB0ZXN0LyouYyBbVHJ1dGFdCistIFBlcm1pdCBzdHJvbmdlciBmbHVzaGVzIGFmdGVyIFpfQkxPQ0sgZmx1c2hlcworLSBBdm9pZCBleHRyYW5lb3VzIGVtcHR5IGJsb2NrcyB3aGVuIGRvaW5nIGVtcHR5IGZsdXNoZXMKKy0gUGVybWl0IFpfTlVMTCBhcmd1bWVudHMgdG8gZGVmbGF0ZVBlbmRpbmcKKy0gQWxsb3cgZGVmbGF0ZVByaW1lKCkgdG8gaW5zZXJ0IGJpdHMgaW4gdGhlIG1pZGRsZSBvZiBhIHN0cmVhbQorLSBSZW1vdmUgc2Vjb25kIGVtcHR5IHN0YXRpYyBibG9jayBmb3IgWl9QQVJUSUFMX0ZMVVNICistIFdyaXRlIG91dCBhbGwgb2YgdGhlIGF2YWlsYWJsZSBiaXRzIHdoZW4gdXNpbmcgWl9CTE9DSworLSBJbnNlcnQgdGhlIGZpcnN0IHR3byBzdHJpbmdzIGluIHRoZSBoYXNoIHRhYmxlIGFmdGVyIGEgZmx1c2gKKworQ2hhbmdlcyBpbiAxLjIuNS4yICgxNyBEZWMgMjAxMSkKKy0gZml4IGxkIGVycm9yOiB1bmFibGUgdG8gZmluZCB2ZXJzaW9uIGRlcGVuZGVuY3kgJ1pMSUJfMS4yLjUnCistIHVzZSByZWxhdGl2ZSBzeW1saW5rcyBmb3Igc2hhcmVkIGxpYnMKKy0gQXZvaWQgc2VhcmNoaW5nIHBhc3Qgd2luZG93IGZvciBaX1JMRSBzdHJhdGVneQorLSBBc3N1cmUgdGhhdCBoaWdoLXdhdGVyIG1hcmsgaW5pdGlhbGl6YXRpb24gaXMgYWx3YXlzIGFwcGxpZWQgaW4gZGVmbGF0ZQorLSBBZGQgYXNzZXJ0aW9ucyB0byBmaWxsX3dpbmRvdygpIGluIGRlZmxhdGUuYyB0byBtYXRjaCBjb21tZW50cworLSBVcGRhdGUgcHl0aG9uIGxpbmsgaW4gUkVBRE1FCistIENvcnJlY3Qgc3BlbGxpbmcgZXJyb3IgaW4gZ3pyZWFkLmMKKy0gRml4IGJ1ZyBpbiBnemdldHMoKSBmb3IgYSBjb25jYXRlbmF0ZWQgZW1wdHkgZ3ppcCBzdHJlYW0KKy0gQ29ycmVjdCBlcnJvciBpbiBjb21tZW50IGZvciBnel9tYWtlKCkKKy0gQ2hhbmdlIGd6cmVhZCgpIGFuZCByZWxhdGVkIHRvIGlnbm9yZSBqdW5rIGFmdGVyIGd6aXAgc3RyZWFtcworLSBBbGxvdyBnenJlYWQoKSBhbmQgcmVsYXRlZCB0byBjb250aW51ZSBhZnRlciBnemNsZWFyZXJyKCkKKy0gQWxsb3cgZ3pyZXdpbmQoKSBhbmQgZ3pzZWVrKCkgYWZ0ZXIgYSBwcmVtYXR1cmUgZW5kLW9mLWZpbGUKKy0gU2ltcGxpZnkgZ3pzZWVrKCkgbm93IHRoYXQgcmF3IGFmdGVyIGd6aXAgaXMgaWdub3JlZAorLSBDaGFuZ2UgZ3pnZXRjKCkgdG8gYSBtYWNybyBmb3Igc3BlZWQgKH40MCUgc3BlZWR1cCBpbiB0ZXN0aW5nKQorLSBGaXggZ3pjbG9zZSgpIHRvIHJldHVybiB0aGUgYWN0dWFsIGVycm9yIGxhc3QgZW5jb3VudGVyZWQKKy0gQWx3YXlzIGFkZCBsYXJnZSBmaWxlIHN1cHBvcnQgZm9yIHdpbmRvd3MKKy0gSW5jbHVkZSB6Y29uZi5oIGZvciB3aW5kb3dzIGxhcmdlIGZpbGUgc3VwcG9ydAorLSBJbmNsdWRlIHpjb25mLmguY21ha2VpbiBmb3Igd2luZG93cyBsYXJnZSBmaWxlIHN1cHBvcnQKKy0gVXBkYXRlIHpjb25mLmguY21ha2VpbiBvbiBtYWtlIGRpc3RjbGVhbgorLSBNZXJnZSB2ZXN0aWdpYWwgdnNucHJpbnRmIGRldGVybWluYXRpb24gZnJvbSB6dXRpbC5oIHRvIGd6Z3V0cy5oCistIENsYXJpZnkgaG93IGd6b3BlbigpIGFwcGVuZHMgaW4gemxpYi5oIGNvbW1lbnRzCistIENvcnJlY3QgZG9jdW1lbnRhdGlvbiBvZiBnemRpcmVjdCgpIHNpbmNlIGp1bmsgYXQgZW5kIG5vdyBpZ25vcmVkCistIEFkZCBhIHRyYW5zcGFyZW50IHdyaXRlIG1vZGUgdG8gZ3pvcGVuKCkgd2hlbiAnVCcgaXMgaW4gdGhlIG1vZGUKKy0gVXBkYXRlIHB5dGhvbiBsaW5rIGluIHpsaWIgbWFuIHBhZ2UKKy0gR2V0IGluZmZpeGVkLmggYW5kIE1BS0VGSVhFRCByZXN1bHQgdG8gbWF0Y2gKKy0gQWRkIGEgLi9jb25maWcgLS1zb2xvIG9wdGlvbiB0byBtYWtlIHpsaWIgc3Vic2V0IHdpdGggbm8gbGlicmFyeSB1c2UKKy0gQWRkIHVuZG9jdW1lbnRlZCBpbmZsYXRlUmVzZXRLZWVwKCkgZnVuY3Rpb24gZm9yIENBQiBmaWxlIGRlY29kaW5nCistIEFkZCAtLWNvdmVyIG9wdGlvbiB0byAuL2NvbmZpZ3VyZSBmb3IgZ2NjIGNvdmVyYWdlIHRlc3RpbmcKKy0gQWRkICNkZWZpbmUgWkxJQl9DT05TVCBvcHRpb24gdG8gdXNlIGNvbnN0IGluIHRoZSB6X3N0cmVhbSBpbnRlcmZhY2UKKy0gQWRkIGNvbW1lbnQgdG8gZ3pkb3BlbigpIGluIHpsaWIuaCB0byB1c2UgZHVwKCkgd2hlbiB1c2luZyBmaWxlbm8oKQorLSBOb3RlIGJlaGF2aW9yIG9mIHVuY29tcHJlc3MoKSB0byBwcm92aWRlIGFzIG11Y2ggZGF0YSBhcyBpdCBjYW4KKy0gQWRkIGZpbGVzIGluIGNvbnRyaWIvbWluaXppcCB0byBhaWQgaW4gYnVpbGRpbmcgbGlibWluaXppcAorLSBTcGxpdCBvZmYgQVIgb3B0aW9ucyBpbiBNYWtlZmlsZS5pbiBhbmQgY29uZmlndXJlCistIENoYW5nZSBPTiBtYWNybyB0byBaX0FSRyB0byBhdm9pZCBhcHBsaWNhdGlvbiBjb25mbGljdHMKKy0gRmFjaWxpdGF0ZSBjb21waWxhdGlvbiB3aXRoIEJvcmxhbmQgQysrIGZvciBwcmFnbWFzIGFuZCB2c25wcmludGYKKy0gSW5jbHVkZSBpby5oIGZvciBUdXJibyBDIC8gQm9ybGFuZCBDKysKKy0gTW92ZSBleGFtcGxlLmMgYW5kIG1pbmlnemlwLmMgdG8gdGVzdC8KKy0gU2ltcGxpZnkgaW5jb21wbGV0ZSBjb2RlIHRhYmxlIGZpbGxpbmcgaW4gaW5mbGF0ZV90YWJsZSgpCistIFJlbW92ZSBjb2RlIGZyb20gaW5mbGF0ZS5jIGFuZCBpbmZiYWNrLmMgdGhhdCBpcyBpbXBvc3NpYmxlIHRvIGV4ZWN1dGUKKy0gVGVzdCB0aGUgaW5mbGF0ZSBjb2RlIHdpdGggZnVsbCBjb3ZlcmFnZQorLSBBbGxvdyBkZWZsYXRlU2V0RGljdGlvbmFyeSwgaW5mbGF0ZVNldERpY3Rpb25hcnkgYXQgYW55IHRpbWUgKGluIHJhdykKKy0gQWRkIGRlZmxhdGVSZXNldEtlZXAgYW5kIGZpeCBpbmZsYXRlUmVzZXRLZWVwIHRvIHJldGFpbiBkaWN0aW9uYXJ5CistIEZpeCBnendyaXRlLmMgdG8gYWNjb21tb2RhdGUgcmVkdWNlZCBtZW1vcnkgemxpYiBjb21waWxhdGlvbgorLSBIYXZlIGluZmxhdGUoKSB3aXRoIFpfRklOSVNIIGF2b2lkIHRoZSBhbGxvY2F0aW9uIG9mIGEgd2luZG93CistIERvIG5vdCBzZXQgc3RybS0+YWRsZXIgd2hlbiBkb2luZyByYXcgaW5mbGF0ZQorLSBGaXggZ3plb2YoKSB0byBiZWhhdmUganVzdCBsaWtlIGZlb2YoKSB3aGVuIHJlYWQgaXMgbm90IHBhc3QgZW5kIG9mIGZpbGUKKy0gRml4IGJ1ZyBpbiBnenJlYWQuYyB3aGVuIGVuZC1vZi1maWxlIGlzIHJlYWNoZWQKKy0gQXZvaWQgdXNlIG9mIFpfQlVGX0VSUk9SIGluIGd6KiBmdW5jdGlvbnMgZXhjZXB0IGZvciBwcmVtYXR1cmUgRU9GCistIERvY3VtZW50IGd6cmVhZCgpIGNhcGFiaWxpdHkgdG8gcmVhZCBjb25jdXJyZW50bHkgd3JpdHRlbiBmaWxlcworLSBSZW1vdmUgaGFyZC1jb2Rpbmcgb2YgcmVzb3VyY2UgY29tcGlsZXIgaW4gQ01ha2VMaXN0cy50eHQgW0JsYW1tb10KKworQ2hhbmdlcyBpbiAxLjIuNS4xICgxMCBTZXAgMjAxMSkKKy0gVXBkYXRlIEZBUSBlbnRyeSBvbiBzaGFyZWQgYnVpbGRzICgjMTMpCistIEF2b2lkIHN5bWJvbGljIGFyZ3VtZW50IHRvIGNobW9kIGluIE1ha2VmaWxlLmluCistIEZpeCBidWcgYW5kIGFkZCBjb25zdHMgaW4gY29udHJpYi9wdWZmIFtPYmVyaHVtZXJdCistIFVwZGF0ZSBjb250cmliL3B1ZmYvemVyb3MucmF3IHRlc3QgZmlsZSB0byBoYXZlIGFsbCBibG9jayB0eXBlcworLSBBZGQgZnVsbCBjb3ZlcmFnZSB0ZXN0IGZvciBwdWZmIGluIGNvbnRyaWIvcHVmZi9NYWtlZmlsZQorLSBGaXggc3RhdGljLW9ubHktYnVpbGQgaW5zdGFsbCBpbiBNYWtlZmlsZS5pbgorLSBGaXggYnVnIGluIHVuekdldEN1cnJlbnRGaWxlSW5mbygpIGluIGNvbnRyaWIvbWluaXppcCBbS3Vub10KKy0gQWRkIGxpYnouYSBkZXBlbmRlbmN5IHRvIHNoYXJlZCBpbiBNYWtlZmlsZS5pbiBmb3IgcGFyYWxsZWwgYnVpbGRzCistIFNwZWxsIG91dCAibnVtYmVyIiAoaW5zdGVhZCBvZiAibmIiKSBpbiB6bGliLmggZm9yIHRvdGFsX2luLCB0b3RhbF9vdXQKKy0gUmVwbGFjZSAkKC4uLikgd2l0aCBgLi4uYCBpbiBjb25maWd1cmUgZm9yIG5vbi1iYXNoIHNoIFtCb3dsZXJdCistIEFkZCBkYXJ3aW4qIHRvIERhcndpbiogYW5kIHNvbGFyaXMqIHRvIFN1bk9TXCA1KiBpbiBjb25maWd1cmUgW0dyb2ZmZW5dCistIEFkZCBzb2xhcmlzKiB0byBMaW51eCogaW4gY29uZmlndXJlIHRvIGFsbG93IGdjYyB1c2UgW0dyb2ZmZW5dCistIEFkZCAqYnNkKiB0byBMaW51eCogY2FzZSBpbiBjb25maWd1cmUgW0Jhci1MZXZdCistIEFkZCBpbmZmYXN0Lm9iaiB0byBkZXBlbmRlbmNpZXMgaW4gd2luMzIvTWFrZWZpbGUubXNjCistIENvcnJlY3Qgc3BlbGxpbmcgZXJyb3IgaW4gZGVmbGF0ZS5oIFtLb2hsZXJdCistIENoYW5nZSBsaWJ6ZGxsLmEgYWdhaW4gdG8gbGliei5kbGwuYSAoISkgaW4gd2luMzIvTWFrZWZpbGUuZ2NjCistIEFkZCB0ZXN0IHRvIGNvbmZpZ3VyZSBmb3IgR05VIEMgbG9va2luZyBmb3IgZ2NjIGluIG91dHB1dCBvZiAkY2MgLXYKKy0gQWRkIHpsaWIucGMgZ2VuZXJhdGlvbiB0byB3aW4zMi9NYWtlZmlsZS5nY2MgW1dlaWdlbHRdCistIEZpeCBidWcgaW4gemxpYi5oIGZvciBfRklMRV9PRkZTRVRfQklUUyBzZXQgYW5kIF9MQVJHRUZJTEU2NF9TT1VSQ0Ugbm90CistIEFkZCBjb21tZW50IGluIHpsaWIuaCB0aGF0IGFkbGVyMzJfY29tYmluZSB3aXRoIGxlbjIgPCAwIG1ha2VzIG5vIHNlbnNlCistIE1ha2UgTk9fRElWSURFIG9wdGlvbiBpbiBhZGxlcjMyLmMgbXVjaCBmYXN0ZXIgKHRoYW5rcyB0byBKb2huIFJlaXNlcikKKy0gTWFrZSBzdHJvbmdlciB0ZXN0IGluIHpjb25mLmggdG8gaW5jbHVkZSB1bmlzdGQuaCBmb3IgTEZTCistIEFwcGx5IERhcndpbiBwYXRjaGVzIGZvciA2NC1iaXQgZmlsZSBvZmZzZXRzIHRvIGNvbnRyaWIvbWluaXppcCBbU2xhY2tdCistIEZpeCB6bGliLmggTEZTIHN1cHBvcnQgd2hlbiBaX1BSRUZJWCB1c2VkCistIEFkZCB1cGRhdGVkIGFzNDAwIHN1cHBvcnQgKHJlbW92ZWQgZnJvbSBvbGQpIFtNb25uZXJhdF0KKy0gQXZvaWQgZGVmbGF0ZSBzZW5zaXRpdml0eSB0byB2b2xhdGlsZSBpbnB1dCBkYXRhCistIEF2b2lkIGRpdmlzaW9uIGluIGFkbGVyMzJfY29tYmluZSBmb3IgTk9fRElWSURFCistIENsYXJpZnkgdGhlIHVzZSBvZiBaX0ZJTklTSCB3aXRoIGRlZmxhdGVCb3VuZCgpIGFtb3VudCBvZiBzcGFjZQorLSBTZXQgYmluYXJ5IGZvciBvdXRwdXQgZmlsZSBpbiBwdWZmLmMKKy0gVXNlIHU0IHR5cGUgZm9yIGNyY190YWJsZSB0byBhdm9pZCBjb252ZXJzaW9uIHdhcm5pbmdzCistIEFwcGx5IGNhc3RzIGluIHpsaWIuaCB0byBhdm9pZCBjb252ZXJzaW9uIHdhcm5pbmdzCistIEFkZCBPRiB0byBwcm90b3R5cGVzIGZvciBhZGxlcjMyX2NvbWJpbmVfIGFuZCBjcmMzMl9jb21iaW5lXyBbTWlsbGVyXQorLSBJbXByb3ZlIGluZmxhdGVTeW5jKCkgZG9jdW1lbnRhdGlvbiB0byBub3RlIGluZGV0ZXJtaW5hbmN5CistIEFkZCBkZWZsYXRlUGVuZGluZygpIGZ1bmN0aW9uIHRvIHJldHVybiB0aGUgYW1vdW50IG9mIHBlbmRpbmcgb3V0cHV0CistIENvcnJlY3QgdGhlIHNwZWxsaW5nIG9mICJzcGVjaWZpY2F0aW9uIiBpbiBGQVEgW1JhbmRlcnMtUGVocnNvbl0KKy0gQWRkIGEgY2hlY2sgaW4gY29uZmlndXJlIGZvciBzdGRhcmcuaCwgdXNlIGZvciBnenByaW50ZigpCistIENoZWNrIHRoYXQgcG9pbnRlcnMgZml0IGluIGludHMgd2hlbiBnenByaW50KCkgY29tcGlsZWQgb2xkIHN0eWxlCistIEFkZCBkdW1teSBuYW1lIGJlZm9yZSAkKFNIQVJFRExJQlYpIGluIE1ha2VmaWxlIFtCYXItTGV2LCBCb3dsZXJdCistIERlbGV0ZSBsaW5lIGluIGNvbmZpZ3VyZSB0aGF0IGFkZHMgLUwuIGxpYnouYSB0byBMREZMQUdTIFtXZWlnZWx0XQorLSBBZGQgZGVidWcgcmVjb3JkcyBpbiBhc3NtZWJsZXIgY29kZSBbTG9uZGVyXQorLSBVcGRhdGUgUkZDIHJlZmVyZW5jZXMgdG8gdXNlIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sLy4uLiBbTGldCistIEFkZCAtLWFyY2hzIG9wdGlvbiwgdXNlIG9mIGxpYnRvb2wgdG8gY29uZmlndXJlIGZvciBNYWMgT1MgWCBbQm9yc3RlbF0KKworQ2hhbmdlcyBpbiAxLjIuNSAoMTkgQXByIDIwMTApCistIERpc2FibGUgdmlzaWJpbGl0eSBhdHRyaWJ1dGUgaW4gd2luMzIvTWFrZWZpbGUuZ2NjIFtCYXItTGV2XQorLSBEZWZhdWx0IHRvIGxpYmRpciBhcyBzaGFyZWRsaWJkaXIgaW4gY29uZmlndXJlIFtOaWVkZXJdCistIFVwZGF0ZSBjb3B5cmlnaHQgZGF0ZXMgb24gbW9kaWZpZWQgc291cmNlIGZpbGVzCistIFVwZGF0ZSB0cmVlcy5jIHRvIGJlIGFibGUgdG8gZ2VuZXJhdGUgbW9kaWZpZWQgdHJlZXMuaAorLSBFeGl0IGNvbmZpZ3VyZSBmb3IgTWluR1csIHN1Z2dlc3Rpbmcgd2luMzIvTWFrZWZpbGUuZ2NjCistIENoZWNrIGZvciBOVUxMIHBhdGggaW4gZ3pfb3BlbiBbSG9tdXJsdV0KKworQ2hhbmdlcyBpbiAxLjIuNC41ICgxOCBBcHIgMjAxMCkKKy0gU2V0IHNoYXJlZGxpYmRpciBpbiBjb25maWd1cmUgW1Rvcm9rXQorLSBTZXQgTERGTEFHUyBpbiBNYWtlZmlsZS5pbiBbQmFyLUxldl0KKy0gQXZvaWQgbWtkaXIgb2JqcyByYWNlIGNvbmRpdGlvbiBpbiBNYWtlZmlsZS5pbiBbQm93bGVyXQorLSBBZGQgWkxJQl9JTlRFUk5BTCBpbiBmcm9udCBvZiBpbnRlcm5hbCBpbnRlci1tb2R1bGUgZnVuY3Rpb25zIGFuZCBhcnJheXMKKy0gRGVmaW5lIFpMSUJfSU5URVJOQUwgdG8gaGlkZSBpbnRlcm5hbCBmdW5jdGlvbnMgYW5kIGFycmF5cyBmb3IgR05VIEMKKy0gRG9uJ3QgdXNlIGhpZGRlbiBhdHRyaWJ1dGUgd2hlbiBpdCBpcyBhIHdhcm5pbmcgZ2VuZXJhdG9yIChlLmcuIFNvbGFyaXMpCisKK0NoYW5nZXMgaW4gMS4yLjQuNCAoMTggQXByIDIwMTApCistIEZpeCBDUk9TU19QUkVGSVggZXhlY3V0YWJsZSB0ZXN0aW5nLCBDSE9TVCBleHRyYWN0LCBtaW5ndyogW1Rvcm9rXQorLSBVbmRlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFIGluIHpjb25mLmggaWYgaXQgaXMgemVybywgYnV0IG5vdCBpZiBlbXB0eQorLSBUcnkgdG8gdXNlIGJhc2ggb3Iga3NoIHJlZ2FyZGxlc3Mgb2YgZnVuY3Rpb25hbGl0eSBvZiAvYmluL3NoCistIEZpeCBjb25maWd1cmUgaW5jb21wYXRpYmlsaXR5IHdpdGggTmV0QlNEIHNoCistIFJlbW92ZSBhdHRlbXB0IHRvIHJ1biB1bmRlciBiYXNoIG9yIGtzaCBzaW5jZSBoYXZlIGJldHRlciBOZXRCU0QgZml4CistIEZpeCB3aW4zMi9NYWtlZmlsZS5nY2MgZm9yIE1pbkdXIFtCYXItTGV2XQorLSBBZGQgZGlhZ25vc3RpYyBtZXNzYWdlcyB3aGVuIHVzaW5nIENST1NTX1BSRUZJWCBpbiBjb25maWd1cmUKKy0gQWRkZWQgLS1zaGFyZWRsaWJkaXIgb3B0aW9uIHRvIGNvbmZpZ3VyZSBbV2VpZ2VsdF0KKy0gVXNlIGhpZGRlbiB2aXNpYmlsaXR5IGF0dHJpYnV0ZSB3aGVuIGF2YWlsYWJsZSBbRnJ5c2luZ2VyXQorCitDaGFuZ2VzIGluIDEuMi40LjMgKDEwIEFwciAyMDEwKQorLSBPbmx5IHVzZSBDUk9TU19QUkVGSVggaW4gY29uZmlndXJlIGZvciBhciBhbmQgcmFubGliIGlmIHRoZXkgZXhpc3QKKy0gVXNlIENST1NTX1BSRUZJWCBmb3Igbm0gW0Jhci1MZXZdCistIEFzc3VtZSBfTEFSR0VGSUxFNjRfU09VUkNFIGRlZmluZWQgaXMgZXF1aXZhbGVudCB0byB0cnVlCistIEF2b2lkIHVzZSBvZiB1bmRlZmluZWQgc3ltYm9scyBpbiAjaWYgd2l0aCAmJiBhbmQgfHwKKy0gTWFrZSAqNjQgcHJvdG90eXBlcyBpbiBnemd1dHMuaCBjb25zaXN0ZW50IHdpdGggZnVuY3Rpb25zCistIEFkZCAtc2hhcmVkIGxvYWQgb3B0aW9uIGZvciBNaW5HVyBpbiBjb25maWd1cmUgW0Jvd2xlcl0KKy0gTW92ZSB6X29mZjY0X3QgdG8gcHVibGljIGludGVyZmFjZSwgdXNlIGluc3RlYWQgb2Ygb2ZmNjRfdAorLSBSZW1vdmUgISBmcm9tIHNoZWxsIHRlc3QgaW4gY29uZmlndXJlIChub3QgcG9ydGFibGUgdG8gU29sYXJpcykKKy0gQ2hhbmdlICswIG1hY3JvIHRlc3RzIHRvIC0wIGZvciBwb3NzaWJseSBpbmNyZWFzZWQgcG9ydGFiaWxpdHkKKworQ2hhbmdlcyBpbiAxLjIuNC4yICg5IEFwciAyMDEwKQorLSBBZGQgY29uc2lzdGVudCBjYXJyaWFnZSByZXR1cm5zIHRvIHJlYWRtZS50eHQncyBpbiBtYXNteDg2IGFuZCBtYXNteDY0CistIFJlYWxseSBwcm92aWRlIHByb3RvdHlwZXMgZm9yICo2NCBmdW5jdGlvbnMgd2hlbiBidWlsZGluZyB3aXRob3V0IExGUworLSBPbmx5IGRlZmluZSB1bmxpbmsoKSBpbiBtaW5pZ3ppcC5jIGlmIHVuaXN0ZC5oIG5vdCBpbmNsdWRlZAorLSBVcGRhdGUgUkVBRE1FIHRvIHBvaW50IHRvIGNvbnRyaWIvdnN0dWRpbyBwcm9qZWN0IGZpbGVzCistIE1vdmUgcHJvamVjdHMvdmM2IHRvIG9sZC8gYW5kIHJlbW92ZSBwcm9qZWN0cy8KKy0gSW5jbHVkZSBzdGRsaWIuaCBpbiBtaW5pZ3ppcC5jIGZvciBzZXRtb2RlKCkgZGVmaW5pdGlvbiB1bmRlciBXaW5DRQorLSBDbGVhbiB1cCBhc3NlbWJsZXIgYnVpbGRzIGluIHdpbjMyL01ha2VmaWxlLm1zYyBbUm93ZV0KKy0gSW5jbHVkZSBzeXMvdHlwZXMuaCBmb3IgTWljcm9zb2Z0IGZvciBvZmZfdCBkZWZpbml0aW9uCistIEZpeCBtZW1vcnkgbGVhayBvbiBlcnJvciBpbiBnel9vcGVuKCkKKy0gU3ltYm9saXplIG5tIGFzICROTSBpbiBjb25maWd1cmUgW1dlaWdlbHRdCistIFVzZSBURVNUX0xEU0hBUkVEIGluc3RlYWQgb2YgTERTSEFSRUQgdG8gbGluayB0ZXN0IHByb2dyYW1zIFtXZWlnZWx0XQorLSBBZGQgKzAgdG8gX0ZJTEVfT0ZGU0VUX0JJVFMgYW5kIF9MRlM2NF9MQVJHRUZJTEUgaW4gY2FzZSBub3QgZGVmaW5lZAorLSBGaXggYnVnIGluIGd6ZW9mKCkgdG8gdGFrZSBpbnRvIGFjY291bnQgdW51c2VkIGlucHV0IGRhdGEKKy0gQXZvaWQgaW5pdGlhbGl6YXRpb24gb2Ygc3RydWN0dXJlcyB3aXRoIHZhcmlhYmxlcyBpbiBwdWZmLmMKKy0gVXBkYXRlZCB3aW4zMi9SRUFETUUtV0lOMzIudHh0IFtSb3dlXQorCitDaGFuZ2VzIGluIDEuMi40LjEgKDI4IE1hciAyMDEwKQorLSBSZW1vdmUgdGhlIHVzZSBvZiBbYS16XSBjb25zdHJ1Y3RzIGZvciBzZWQgaW4gY29uZmlndXJlIFtnZW50b28gMzEwMjI1XQorLSBSZW1vdmUgJChTSEFSRURMSUIpIGZyb20gTElCUyBpbiBNYWtlZmlsZS5pbiBbQ3JlZWNoXQorLSBSZXN0b3JlICJmb3IgZGVidWdnaW5nIiBjb21tZW50IG9uIHNwcmludGYoKSBpbiBnemxpYi5jCistIFJlbW92ZSBmZG9wZW4gZm9yIE1WUyBmcm9tIGd6Z3V0cy5oCistIFB1dCBuZXcgUkVBRE1FLVdJTjMyLnR4dCBpbiB3aW4zMiBbUm93ZV0KKy0gQWRkIGNoZWNrIGZvciBzaGVsbCB0byBjb25maWd1cmUgYW5kIGludm9rZSBhbm90aGVyIHNoZWxsIGlmIG5lZWRlZAorLSBGaXggYmlnIGZhdCBzdGlua2luZyBidWcgaW4gZ3pzZWVrKCkgb24gdW5jb21wcmVzc2VkIGZpbGVzCistIFJlbW92ZSB2ZXN0aWdpYWwgRl9PUEVONjQgZGVmaW5lIGluIHp1dGlsLmgKKy0gU2V0IGFuZCBjaGVjayB0aGUgdmFsdWUgb2YgX0xBUkdFRklMRV9TT1VSQ0UgYW5kIF9MQVJHRUZJTEU2NF9TT1VSQ0UKKy0gQXZvaWQgZXJyb3JzIG9uIG5vbi1MRlMgc3lzdGVtcyB3aGVuIGFwcGxpY2F0aW9ucyBkZWZpbmUgTEZTIG1hY3JvcworLSBTZXQgRVhFIHRvICIuZXhlIiBpbiBjb25maWd1cmUgZm9yIE1JTkdXIFtLYWhsZV0KKy0gTWF0Y2ggY3JjMzIoKSBpbiBjcmMzMi5jIGV4YWN0bHkgdG8gdGhlIHByb3RvdHlwZSBpbiB6bGliLmggW1NoZXJyaWxsXQorLSBBZGQgcHJlZml4IGZvciBjcm9zcy1jb21waWxhdGlvbiBpbiB3aW4zMi9tYWtlZmlsZS5nY2MgW0Jhci1MZXZdCistIEFkZCBETEwgaW5zdGFsbCBpbiB3aW4zMi9tYWtlZmlsZS5nY2MgW0Jhci1MZXZdCistIEFsbG93IExpbnV4KiBvciBsaW51eCogZnJvbSB1bmFtZSBpbiBjb25maWd1cmUgW0Jhci1MZXZdCistIEFsbG93IGxkY29uZmlnIHRvIGJlIHJlZGVmaW5lZCBpbiBjb25maWd1cmUgYW5kIE1ha2VmaWxlLmluIFtCYXItTGV2XQorLSBBZGQgY3Jvc3MtY29tcGlsYXRpb24gcHJlZml4ZXMgdG8gY29uZmlndXJlIFtCYXItTGV2XQorLSBNYXRjaCB0eXBlIGV4YWN0bHkgaW4gZ3pfbG9hZCgpIGludm9jYXRpb24gaW4gZ3pyZWFkLmMKKy0gTWF0Y2ggdHlwZSBleGFjdGx5IG9mIHpjYWxsb2MoKSBpbiB6dXRpbC5jIHRvIHpsaWIuaCBhbGxvY19mdW5jCistIFByb3ZpZGUgcHJvdG90eXBlcyBmb3IgKjY0IGZ1bmN0aW9ucyB3aGVuIGJ1aWxkaW5nIHpsaWIgd2l0aG91dCBMRlMKKy0gRG9uJ3QgdXNlIC1sYyB3aGVuIGxpbmtpbmcgc2hhcmVkIGxpYnJhcnkgb24gTWluR1cKKy0gUmVtb3ZlIGVycm5vLmggY2hlY2sgaW4gY29uZmlndXJlIGFuZCB2ZXN0aWdpYWwgZXJybm8gY29kZSBpbiB6dXRpbC5oCisKK0NoYW5nZXMgaW4gMS4yLjQgKDE0IE1hciAyMDEwKQorLSBGaXggVkVSMyBleHRyYWN0aW9uIGluIGNvbmZpZ3VyZSBmb3Igbm8gZm91cnRoIHN1YnZlcnNpb24KKy0gVXBkYXRlIHpsaWIuMywgYWRkIGRvY3MgdG8gTWFrZWZpbGUuaW4gdG8gbWFrZSAucGRmIG91dCBvZiBpdAorLSBBZGQgemxpYi4zLnBkZiB0byBkaXN0cmlidXRpb24KKy0gRG9uJ3Qgc2V0IGVycm9yIGNvZGUgaW4gZ3plcnJvcigpIGlmIHBhc3NlZCBwb2ludGVyIGlzIE5VTEwKKy0gQXBwbHkgZGVzdGluYXRpb24gZGlyZWN0b3J5IGZpeGVzIHRvIENNYWtlTGlzdHMudHh0IFtMb3dtYW5dCistIE1vdmUgI2NtYWtlZGVmaW5lJ3MgdG8gYSBuZXcgemNvbmYuaW4uY21ha2VpbgorLSBSZXN0b3JlIHpjb25mLmggZm9yIGJ1aWxkcyB0aGF0IGRvbid0IHVzZSBjb25maWd1cmUgb3IgY21ha2UKKy0gQWRkIGRpc3RjbGVhbiB0byBkdW1teSBNYWtlZmlsZSBmb3IgY29udmVuaWVuY2UKKy0gVXBkYXRlIGFuZCBpbXByb3ZlIElOREVYLCBSRUFETUUsIGFuZCBGQVEKKy0gVXBkYXRlIENNYWtlTGlzdHMudHh0IGZvciB0aGUgcmV0dXJuIG9mIHpjb25mLmggW0xvd21hbl0KKy0gVXBkYXRlIGNvbnRyaWIvdnN0dWRpby92YzkgYW5kIHZjMTAgW1ZvbGxhbnRdCistIENoYW5nZSBsaWJ6LmRsbC5hIGJhY2sgdG8gbGliemRsbC5hIGluIHdpbjMyL01ha2VmaWxlLmdjYworLSBBcHBseSBsaWNlbnNlIGFuZCByZWFkbWUgY2hhbmdlcyB0byBjb250cmliL2FzbTY4NiBbUmFpdGVyXQorLSBDaGVjayBmaWxlIG5hbWUgbGVuZ3RocyBhbmQgYWRkIC1jIG9wdGlvbiBpbiBtaW5pZ3ppcC5jIFtMaV0KKy0gVXBkYXRlIGNvbnRyaWIvYW1kNjQgYW5kIGNvbnRyaWIvbWFzbXg4Ni8gW1ZvbGxhbnRdCistIEF2b2lkIHVzZSBvZiAiZW9mIiBwYXJhbWV0ZXIgaW4gdHJlZXMuYyB0byBub3Qgc2hhZG93IGxpYnJhcnkgdmFyaWFibGUKKy0gVXBkYXRlIG1ha2Vfdm1zLmNvbSBmb3IgcmVtb3ZhbCBvZiB6bGliZGVmcy5oIFtaaW5zZXJdCistIFVwZGF0ZSBhc3NlbWJsZXIgY29kZSBhbmQgdnN0dWRpbyBwcm9qZWN0cyBpbiBjb250cmliIFtWb2xsYW50XQorLSBSZW1vdmUgb3V0ZGF0ZWQgYXNzZW1ibGVyIGNvZGUgY29udHJpYi9tYXNtNjg2IGFuZCBjb250cmliL2FzbTU4NgorLSBSZW1vdmUgb2xkIHZjNyBhbmQgdmM4IGZyb20gY29udHJpYi92c3R1ZGlvCistIFVwZGF0ZSB3aW4zMi9NYWtlZmlsZS5tc2MsIGFkZCBaTElCX1ZFUl9TVUJSRVZJU0lPTiBbUm93ZV0KKy0gRml4IG1lbW9yeSBsZWFrcyBpbiBnemNsb3NlX3IoKSBhbmQgZ3pjbG9zZV93KCksIGZpbGUgbGVhayBpbiBnel9vcGVuKCkKKy0gQWRkIGNvbnRyaWIvZ2NjX2d2bWF0NjQgZm9yIGxvbmdlc3RfbWF0Y2ggYW5kIGluZmxhdGVfZmFzdCBbVm9sbGFudF0KKy0gUmVtb3ZlICo2NCBmdW5jdGlvbnMgZnJvbSB3aW4zMi96bGliLmRlZiAodGhleSdyZSBub3QgNjQtYml0IHlldCkKKy0gRml4IGJ1ZyBpbiB2b2lkLXJldHVybmluZyB2c3ByaW50ZigpIGNhc2UgaW4gZ3p3cml0ZS5jCistIEZpeCBuYW1lIGNoYW5nZSBmcm9tIGluZmxhdGUuaCBpbiBjb250cmliL2luZmxhdGU4Ni9pbmZmYXM4Ni5jCistIENoZWNrIGlmIHRlbXBvcmFyeSBmaWxlIGV4aXN0cyBiZWZvcmUgcmVtb3ZpbmcgaW4gbWFrZV92bXMuY29tIFtaaW5zZXJdCistIEZpeCBtYWtlIGluc3RhbGwgYW5kIHVuaW5zdGFsbCBmb3IgLS1zdGF0aWMgb3B0aW9uCistIEZpeCB1c2FnZSBvZiBfTVNDX1ZFUiBpbiBnemd1dHMuaCBhbmQgenV0aWwuaCBbVHJ1dGFdCistIFVwZGF0ZSByZWFkbWUudHh0IGluIGNvbnRyaWIvbWFzbXg2NCBhbmQgbWFzbXg4NiB0byBhc3NlbWJsZQorCitDaGFuZ2VzIGluIDEuMi4zLjkgKDIxIEZlYiAyMDEwKQorLSBFeHB1bmdlIGd6aW8uYworLSBNb3ZlIGFzNDAwIGJ1aWxkIGluZm9ybWF0aW9uIHRvIG9sZAorLSBGaXggdXBkYXRlcyBpbiBjb250cmliL21pbml6aXAgYW5kIGNvbnRyaWIvdnN0dWRpbworLSBBZGQgY29uc3QgdG8gdnNucHJpbnRmIHRlc3QgaW4gY29uZmlndXJlIHRvIGF2b2lkIHdhcm5pbmdzIFtXZWlnZWx0XQorLSBEZWxldGUgemNvbmYuaCAobWFkZSBieSBjb25maWd1cmUpIFtXZWlnZWx0XQorLSBDaGFuZ2UgemNvbmYuaW4uaCB0byB6Y29uZi5oLmluIHBlciBjb252ZW50aW9uIFtXZWlnZWx0XQorLSBDaGVjayBmb3IgTlVMTCBidWYgaW4gZ3pnZXRzKCkKKy0gUmV0dXJuIGVtcHR5IHN0cmluZyBmb3IgZ3pnZXRzKCkgd2l0aCBsZW4gPT0gMSAobGlrZSBmZ2V0cygpKQorLSBGaXggZGVzY3JpcHRpb24gb2YgZ3pnZXRzKCkgaW4gemxpYi5oIGZvciBlbmQtb2YtZmlsZSwgTlVMTCByZXR1cm4KKy0gVXBkYXRlIG1pbml6aXAgdG8gMS4xIFtWb2xsYW50XQorLSBBdm9pZCBNU1ZDIGxvc3Mgb2YgZGF0YSB3YXJuaW5ncyBpbiBnenJlYWQuYywgZ3p3cml0ZS5jCistIE5vdGUgaW4gemxpYi5oIHRoYXQgZ3plcnJvcigpIHNob3VsZCBiZSB1c2VkIHRvIGRpc3Rpbmd1aXNoIGZyb20gRU9GCistIFJlbW92ZSB1c2Ugb2Ygc25wcmludGYoKSBmcm9tIGd6bGliLmMKKy0gRml4IGJ1ZyBpbiBnenNlZWsoKQorLSBVcGRhdGUgY29udHJpYi92c3R1ZGlvLCBhZGRpbmcgdmM5IGFuZCB2YzEwIFtLdW5vLCBWb2xsYW50XQorLSBGaXggemNvbmYuaCBnZW5lcmF0aW9uIGluIENNYWtlTGlzdHMudHh0IFtMb3dtYW5dCistIEltcHJvdmUgY29tbWVudHMgaW4gemNvbmYuaCB3aGVyZSBtb2RpZmllZCBieSBjb25maWd1cmUKKworQ2hhbmdlcyBpbiAxLjIuMy44ICgxMyBGZWIgMjAxMCkKKy0gQ2xlYW4gdXAgdGV4dCBmaWxlcyAodGFicywgdHJhaWxpbmcgd2hpdGVzcGFjZSwgZXRjLikgW09iZXJodW1lcl0KKy0gVXNlIHpfb2ZmNjRfdCBpbiBnel96ZXJvKCkgYW5kIGd6X3NraXAoKSB0byBtYXRjaCBzdGF0ZS0+c2tpcAorLSBBdm9pZCBjb21wYXJpc29uIHByb2JsZW0gd2hlbiBzaXplb2YoaW50KSA9PSBzaXplb2Yoel9vZmY2NF90KQorLSBSZXZlcnQgdG8gTWFrZWZpbGUuaW4gZnJvbSAxLjIuMy42IChsaXZlIHdpdGggdGhlIGNsdXR0ZXIpCistIEZpeCBtaXNzaW5nIGVycm9yIHJldHVybiBpbiBnemZsdXNoKCksIGFkZCB6bGliLmggbm90ZQorLSBBZGQgKjY0IGZ1bmN0aW9ucyB0byB6bGliLm1hcCBbTGV2aW5dCistIEZpeCBzaWduZWQvdW5zaWduZWQgY29tcGFyaXNvbiBpbiBnel9jb21wKCkKKy0gVXNlIFNGTEFHUyB3aGVuIHRlc3Rpbmcgc2hhcmVkIGxpbmtpbmcgaW4gY29uZmlndXJlCistIEFkZCAtLTY0IG9wdGlvbiB0byAuL2NvbmZpZ3VyZSB0byB1c2UgLW02NCB3aXRoIGdjYworLSBGaXggLi9jb25maWd1cmUgLS1oZWxwIHRvIGNvcnJlY3RseSBuYW1lIG9wdGlvbnMKKy0gSGF2ZSBtYWtlIGZhaWwgaWYgYSB0ZXN0IGZhaWxzIFtMZXZpbl0KKy0gQXZvaWQgYnVmZmVyIG92ZXJydW4gaW4gY29udHJpYi9tYXNteDY0L2d2bWF0NjQuYXNtIFtTaW1wc29uXQorLSBSZW1vdmUgYXNzZW1ibGVyIG9iamVjdCBmaWxlcyBmcm9tIGNvbnRyaWIKKworQ2hhbmdlcyBpbiAxLjIuMy43ICgyNCBKYW4gMjAxMCkKKy0gQWx3YXlzIGd6b3BlbigpIHdpdGggT19MQVJHRUZJTEUgaWYgYXZhaWxhYmxlCistIEZpeCBnemRpcmVjdCgpIHRvIHdvcmsgaW1tZWRpYXRlbHkgYWZ0ZXIgZ3pvcGVuKCkgb3IgZ3pkb3BlbigpCistIE1ha2UgZ3pkaXJlY3QoKSBtb3JlIHByZWNpc2Ugd2hlbiB0aGUgc3RhdGUgY2hhbmdlcyB3aGlsZSByZWFkaW5nCistIEltcHJvdmUgemxpYi5oIGRvY3VtZW50YXRpb24gaW4gbWFueSBwbGFjZXMKKy0gQ2F0Y2ggbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSBpbiBnel9vcGVuKCkKKy0gQ29tcGxldGUgY2xvc2Ugb3BlcmF0aW9uIGlmIHNlZWsgZm9yd2FyZCBpbiBnemNsb3NlX3coKSBmYWlscworLSBSZXR1cm4gWl9FUlJOTyBmcm9tIGd6Y2xvc2VfcigpIGlmIGNsb3NlKCkgZmFpbHMKKy0gUmV0dXJuIFpfU1RSRUFNX0VSUk9SIGluc3RlYWQgb2YgRU9GIGZvciBnemNsb3NlKCkgYmVpbmcgcGFzc2VkIE5VTEwKKy0gUmV0dXJuIHplcm8gZm9yIGd6d3JpdGUoKSBlcnJvcnMgdG8gbWF0Y2ggemxpYi5oIGRlc2NyaXB0aW9uCistIFJldHVybiAtMSBvbiBnenB1dHMoKSBlcnJvciB0byBtYXRjaCB6bGliLmggZGVzY3JpcHRpb24KKy0gQWRkIHpjb25mLmluLmggdG8gYWxsb3cgcmVjb3ZlcnkgZnJvbSBjb25maWd1cmUgbW9kaWZpY2F0aW9uIFtXZWlnZWx0XQorLSBGaXggc3RhdGljIGxpYnJhcnkgcGVybWlzc2lvbnMgaW4gTWFrZWZpbGUuaW4gW1dlaWdlbHRdCistIEF2b2lkIHdhcm5pbmdzIGluIGNvbmZpZ3VyZSB0ZXN0cyB0aGF0IGhpZGUgZnVuY3Rpb25hbGl0eSBbV2VpZ2VsdF0KKy0gQWRkICpCU0QgYW5kIERyYWdvbkZseSB0byBMaW51eCBjYXNlIGluIGNvbmZpZ3VyZSBbZ2VudG9vIDEyMzU3MV0KKy0gQ2hhbmdlIGxpYnpkbGwuYSB0byBsaWJ6LmRsbC5hIGluIHdpbjMyL01ha2VmaWxlLmdjYyBbZ2VudG9vIDI4ODIxMl0KKy0gQXZvaWQgYWNjZXNzIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSBmb3IgZmlyc3QgaW5mbGF0ZVJlc2V0MiBjYWxsIFtHb21lc10KKy0gS2VlcCBvYmplY3QgZmlsZXMgaW4gc3ViZGlyZWN0b3JpZXMgdG8gcmVkdWNlIHRoZSBjbHV0dGVyIHNvbWV3aGF0CistIFJlbW92ZSBkZWZhdWx0IE1ha2VmaWxlIGFuZCB6bGliZGVmcy5oLCBhZGQgZHVtbXkgTWFrZWZpbGUKKy0gQWRkIG5ldyBleHRlcm5hbCBmdW5jdGlvbnMgdG8gWl9QUkVGSVgsIHJlbW92ZSBkdXBsaWNhdGVzLCB6X3pfIC0+IHpfCistIFJlbW92ZSB6bGliZGVmcy5oIGNvbXBsZXRlbHkgLS0gbW9kaWZ5IHpjb25mLmggaW5zdGVhZAorCitDaGFuZ2VzIGluIDEuMi4zLjYgKDE3IEphbiAyMDEwKQorLSBBdm9pZCB2b2lkICogYXJpdGhtZXRpYyBpbiBnenJlYWQuYyBhbmQgZ3p3cml0ZS5jCistIE1ha2UgY29tcGlsZXJzIGhhcHBpZXIgd2l0aCBjb25zdCBjaGFyICogZm9yIGd6X2Vycm9yIG1lc3NhZ2UKKy0gQXZvaWQgdW51c2VkIHBhcmFtZXRlciB3YXJuaW5nIGluIGluZmxhdGUuYworLSBBdm9pZCBzaWduZWQtdW5zaWduZWQgY29tcGFyaXNvbiB3YXJuaW5nIGluIGluZmxhdGUuYworLSBJbmRlbnQgI3ByYWdtYSdzIGZvciB0cmFkaXRpb25hbCBDCistIEZpeCB1c2FnZSBvZiBzdHJ3aW5lcnJvcigpIGluIGdsaWIuYywgY2hhbmdlIHRvIGd6X3N0cndpbmVycm9yKCkKKy0gQ29ycmVjdCBlbWFpbCBhZGRyZXNzIGluIGNvbmZpZ3VyZSBmb3Igc3lzdGVtIG9wdGlvbnMKKy0gVXBkYXRlIG1ha2Vfdm1zLmNvbSBhbmQgYWRkIG1ha2Vfdm1zLmNvbSB0byBjb250cmliL21pbml6aXAgW1ppbnNlcl0KKy0gVXBkYXRlIHpsaWIubWFwIFtCcm93bl0KKy0gRml4IE1ha2VmaWxlLmluIGZvciBTb2xhcmlzIDEwIG1ha2Ugb2YgZXhhbXBsZTY0IGFuZCBtaW5pemlwNjQgW1Rvcm9rXQorLSBBcHBseSB2YXJpb3VzIGZpeGVzIHRvIENNYWtlTGlzdHMudHh0IFtMb3dtYW5dCistIEFkZCBjaGVja3Mgb24gbGVuIGluIGd6cmVhZCgpIGFuZCBnendyaXRlKCkKKy0gQWRkIGVycm9yIG1lc3NhZ2UgZm9yIG5vIG1vcmUgcm9vbSBmb3IgZ3p1bmdldGMoKQorLSBSZW1vdmUgemxpYiB2ZXJzaW9uIGNoZWNrIGluIGd6d3JpdGUoKQorLSBEZWZlciBjb21wcmVzc2lvbiBvZiBnenByaW50ZigpIHJlc3VsdCB1bnRpbCBuZWVkIHRvCistIFVzZSBzbnByaW50ZigpIGluIGd6ZG9wZW4oKSBpZiBhdmFpbGFibGUKKy0gUmVtb3ZlIFVTRV9NTUFQIGNvbmZpZ3VyYXRpb24gZGV0ZXJtaW5hdGlvbiAob25seSB1c2VkIGJ5IG1pbmlnemlwKQorLSBSZW1vdmUgZXhhbXBsZXMvcGlnei5jIChhdmFpbGFibGUgc2VwYXJhdGVseSkKKy0gVXBkYXRlIGV4YW1wbGVzL2d1bi5jIHRvIDEuNgorCitDaGFuZ2VzIGluIDEuMi4zLjUgKDggSmFuIDIwMTApCistIEFkZCBzcGFjZSBhZnRlciAjaWYgaW4genV0aWwuaCBmb3Igc29tZSBjb21waWxlcnMKKy0gRml4IHJlbGF0aXZlbHkgaGFybWxlc3MgYnVnIGluIGRlZmxhdGVfZmFzdCgpIFtFeGFyZXZza3ldCistIEZpeCBzYW1lIHByb2JsZW0gaW4gZGVmbGF0ZV9zbG93KCkKKy0gQWRkICQoU0hBUkVETElCVikgdG8gTElCUyBpbiBNYWtlZmlsZS5pbiBbQnJvd25dCistIEFkZCBkZWZsYXRlX3JsZSgpIGZvciBmYXN0ZXIgWl9STEUgc3RyYXRlZ3kgcnVuLWxlbmd0aCBlbmNvZGluZworLSBBZGQgZGVmbGF0ZV9odWZmKCkgZm9yIGZhc3RlciBaX0hVRkZNQU5fT05MWSBlbmNvZGluZworLSBDaGFuZ2UgbmFtZSBvZiAid3JpdGUiIHZhcmlhYmxlIGluIGluZmZhc3QuYyB0byBhdm9pZCBsaWJyYXJ5IGNvbGxpc2lvbnMKKy0gRml4IHByZW1hdHVyZSBFT0YgZnJvbSBnenJlYWQoKSBpbiBnemlvLmMgW0Jyb3duXQorLSBVc2UgemxpYiBoZWFkZXIgd2luZG93IHNpemUgaWYgd2luZG93Qml0cyBpcyAwIGluIGluZmxhdGVJbml0MigpCistIFJlbW92ZSBjb21wcmVzc0JvdW5kKCkgY2FsbCBpbiBkZWZsYXRlLmMgdG8gYXZvaWQgbGlua2luZyBjb21wcmVzcy5vCistIFJlcGxhY2UgdXNlIG9mIGVycm5vIGluIGd6KiB3aXRoIGZ1bmN0aW9ucywgc3VwcG9ydCBXaW5DRSBbQWx2ZXNdCistIFByb3ZpZGUgYWx0ZXJuYXRpdmUgdG8gcGVycm9yKCkgaW4gbWluaWd6aXAuYyBmb3IgV2luQ0UgW0FsdmVzXQorLSBEb24ndCB1c2UgX3ZzbnByaW50ZiBvbiBsYXRlciB2ZXJzaW9ucyBvZiBNU1ZDIFtMb3dtYW5dCistIEFkZCBDTWFrZSBidWlsZCBzY3JpcHQgYW5kIGlucHV0IGZpbGUgW0xvd21hbl0KKy0gVXBkYXRlIGNvbnRyaWIvbWluaXppcCB0byAxLjEgW1N2ZW5zc29uLCBWb2xsYW50XQorLSBNb3ZlZCBuaW50ZW5kb2RzIGRpcmVjdG9yeSBmcm9tIGNvbnRyaWIgdG8gcm9vdAorLSBSZXBsYWNlIGd6aW8uYyB3aXRoIGEgbmV3IHNldCBvZiByb3V0aW5lcyB3aXRoIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkKKy0gQWRkIGd6YnVmZmVyKCksIGd6b2Zmc2V0KCksIGd6Y2xvc2VfcigpLCBnemNsb3NlX3coKSBhcyBwYXJ0IG9mIGFib3ZlCistIFVwZGF0ZSBjb250cmliL21pbml6aXAgdG8gMS4xYgorLSBDaGFuZ2UgZ3plb2YoKSB0byByZXR1cm4gMCBvbiBlcnJvciBpbnN0ZWFkIG9mIC0xIHRvIGFncmVlIHdpdGggemxpYi5oCisKK0NoYW5nZXMgaW4gMS4yLjMuNCAoMjEgRGVjIDIwMDkpCistIFVzZSBvbGQgc2Nob29sIC5TVUZGSVhFUyBpbiBNYWtlZmlsZS5pbiBmb3IgRnJlZUJTRCBjb21wYXRpYmlsaXR5CistIFVwZGF0ZSBjb21tZW50cyBpbiBjb25maWd1cmUgYW5kIE1ha2VmaWxlLmluIGZvciBkZWZhdWx0IC0tc2hhcmVkCistIEZpeCB0ZXN0IC16J3MgaW4gY29uZmlndXJlIFtNYXJxdWVzc10KKy0gQnVpbGQgZXhhbXBsZXNoIGFuZCBtaW5pZ3ppcHNoIHdoZW4gbm90IHRlc3RpbmcKKy0gQ2hhbmdlIE5VTEwncyB0byBaX05VTEwncyBpbiBkZWZsYXRlLmMgYW5kIGluIGNvbW1lbnRzIGluIHpsaWIuaAorLSBJbXBvcnQgTERGTEFHUyBmcm9tIHRoZSBlbnZpcm9ubWVudCBpbiBjb25maWd1cmUKKy0gRml4IGNvbmZpZ3VyZSB0byBwb3B1bGF0ZSBTRkxBR1Mgd2l0aCBkaXNjb3ZlcmVkIENGTEFHUyBvcHRpb25zCistIEFkYXB0IG1ha2Vfdm1zLmNvbSB0byB0aGUgbmV3IE1ha2VmaWxlLmluIFtaaW5zZXJdCistIEFkZCB6bGliMmFuc2kgc2NyaXB0IGZvciBDKysgY29tcGlsYXRpb24gW01hcnF1ZXNzXQorLSBBZGQgX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgdGVzdCB0byBtYWtlIHRlc3QgKHdoZW4gYXBwbGljYWJsZSkKKy0gQWRkIEFNRDY0IGFzc2VtYmxlciBjb2RlIGZvciBsb25nZXN0IG1hdGNoIHRvIGNvbnRyaWIgW1RldGVyaW5dCistIEluY2x1ZGUgb3B0aW9ucyBmcm9tICRTRkxBR1Mgd2hlbiBkb2luZyAkTERTSEFSRUQKKy0gU2ltcGxpZnkgNjQtYml0IGZpbGUgc3VwcG9ydCBieSBpbnRyb2R1Y2luZyB6X29mZjY0X3QgdHlwZQorLSBNYWtlIHNoYXJlZCBvYmplY3QgZmlsZXMgaW4gb2JqcyBkaXJlY3RvcnkgdG8gd29yayBhcm91bmQgb2xkIFN1biBjYworLSBVc2Ugb25seSB0aHJlZS1wYXJ0IHZlcnNpb24gbnVtYmVyIGZvciBEYXJ3aW4gc2hhcmVkIGNvbXBpbGVzCistIEFkZCByYyBvcHRpb24gdG8gYXIgaW4gTWFrZWZpbGUuaW4gZm9yIHdoZW4gLi9jb25maWd1cmUgbm90IHJ1bgorLSBBZGQgLVdJLC1ycGF0aCwuIHRvIExERkxBR1MgZm9yIE9TRiAxIFY0KgorLSBTZXQgTERfTElCUkFSWU4zMl9QQVRIIGZvciBTR0kgSVJJWCBzaGFyZWQgY29tcGlsZQorLSBQcm90ZWN0IGFnYWluc3QgX0ZJTEVfT0ZGU0VUX0JJVFMgYmVpbmcgZGVmaW5lZCB3aGVuIGNvbXBpbGluZyB6bGliCistIFJlbmFtZSBNYWtlZmlsZS5pbiB0YXJnZXRzIGFsbHN0YXRpYyB0byBzdGF0aWMgYW5kIGFsbHNoYXJlZCB0byBzaGFyZWQKKy0gRml4IHN0YXRpYyBhbmQgc2hhcmVkIE1ha2VmaWxlLmluIHRhcmdldHMgdG8gYmUgaW5kZXBlbmRlbnQKKy0gQ29ycmVjdCBlcnJvciByZXR1cm4gYnVnIGluIGd6X29wZW4oKSBieSBzZXR0aW5nIHN0YXRlIFtCcm93bl0KKy0gUHV0IHNwYWNlcyBiZWZvcmUgOzsncyBpbiBjb25maWd1cmUgZm9yIGJldHRlciBzaCBjb21wYXRpYmlsaXR5CistIEFkZCBwaWd6LmMgKHBhcmFsbGVsIGltcGxlbWVudGF0aW9uIG9mIGd6aXApIHRvIGV4YW1wbGVzLworLSBDb3JyZWN0IGNvbnN0YW50IGluIGNyYzMyLmMgdG8gVUwgW0xldmVudGhhbF0KKy0gUmVqZWN0IG5lZ2F0aXZlIGxlbmd0aHMgaW4gY3JjMzJfY29tYmluZSgpCistIEFkZCBpbmZsYXRlUmVzZXQyKCkgZnVuY3Rpb24gdG8gd29yayBsaWtlIGluZmxhdGVFbmQoKS9pbmZsYXRlSW5pdDIoKQorLSBJbmNsdWRlIHN5cy90eXBlcy5oIGZvciBfTEFSR0VGSUxFNjRfU09VUkNFIFtCcm93bl0KKy0gQ29ycmVjdCB0eXBvIGluIGRvYy9hbGdvcml0aG0udHh0IFtKYW5pa10KKy0gRml4IGJ1ZyBpbiBhZGxlcjMyX2NvbWJpbmUoKSBbWmh1XQorLSBDYXRjaCBtaXNzaW5nLWVuZC1vZi1ibG9jay1jb2RlIGVycm9yIGluIGFsbCBpbmZsYXRlcyBhbmQgaW4gcHVmZgorICAgIEFzc3VyZXMgdGhhdCByYW5kb20gaW5wdXQgdG8gaW5mbGF0ZSBldmVudHVhbGx5IHJlc3VsdHMgaW4gYW4gZXJyb3IKKy0gQWRkZWQgZW5vdWdoLmMgKGNhbGN1bGF0aW9uIG9mIEVOT1VHSCBmb3IgaW5mdHJlZXMuaCkgdG8gZXhhbXBsZXMvCistIFVwZGF0ZSBFTk9VR0ggYW5kIGl0cyB1c2FnZSB0byByZWZsZWN0IGRpc2NvdmVyZWQgYm91bmRzCistIEZpeCBnemVycm9yKCkgZXJyb3IgcmVwb3J0IG9uIGVtcHR5IGlucHV0IGZpbGUgW0Jyb3duXQorLSBBZGQgdXNoIGNhc3RzIGluIHRyZWVzLmMgdG8gYXZvaWQgcGVkYW50aWMgcnVudGltZSBlcnJvcnMKKy0gRml4IHR5cG8gaW4gemxpYi5oIHVuY29tcHJlc3MoKSBkZXNjcmlwdGlvbiBbUmVpc3NdCistIENvcnJlY3QgaW5mbGF0ZSgpIGNvbW1lbnRzIHdpdGggcmVnYXJkIHRvIGF1dG9tYXRpYyBoZWFkZXIgZGV0ZWN0aW9uCistIFJlbW92ZSBkZXByZWNhdGlvbiBjb21tZW50IG9uIFpfUEFSVElBTF9GTFVTSCAoaXQgc3RheXMpCistIFB1dCBuZXcgdmVyc2lvbiBvZiBnemxvZyAoMi4wKSBpbiBleGFtcGxlcyB3aXRoIGludGVycnVwdGlvbiByZWNvdmVyeQorLSBBZGQgcHVmZiBjb21waWxlIG9wdGlvbiB0byBwZXJtaXQgaW52YWxpZCBkaXN0YW5jZS10b28tZmFyIHN0cmVhbXMKKy0gQWRkIHB1ZmYgVEVTVCBjb21tYW5kIG9wdGlvbnMsIGFiaWxpdHkgdG8gcmVhZCBwaXBlZCBpbnB1dAorLSBQcm90b3R5cGUgdGhlICo2NCBmdW5jdGlvbnMgaW4gemxpYi5oIHdoZW4gX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQsIGJ1dAorICBfTEFSR0VGSUxFNjRfU09VUkNFIG5vdCBkZWZpbmVkCistIEZpeCBaX0ZVTExfRkxVU0ggdG8gdHJ1bHkgZXJhc2UgdGhlIHBhc3QgYnkgcmVzZXR0aW5nIHMtPnN0cnN0YXJ0CistIEZpeCBkZWZsYXRlU2V0RGljdGlvbmFyeSgpIHRvIHVzZSBhbGwgMzJLIGZvciBvdXRwdXQgY29uc2lzdGVuY3kKKy0gUmVtb3ZlIGV4dHJhbmVvdXMgI2RlZmluZSBNSU5fTE9PS0FIRUFEIGluIGRlZmxhdGUuYyAoaW4gZGVmbGF0ZS5oKQorLSBDbGVhciBieXRlcyBhZnRlciBkZWZsYXRlIGxvb2thaGVhZCB0byBhdm9pZCB1c2Ugb2YgdW5pbml0aWFsaXplZCBkYXRhCistIENoYW5nZSBhIGxpbWl0IGluIGluZnRyZWVzLmMgdG8gYmUgbW9yZSB0cmFuc3BhcmVudCB0byBDb3Zlcml0eSBQcmV2ZW50CistIFVwZGF0ZSB3aW4zMi96bGliLmRlZiB3aXRoIGV4cG9ydGVkIHN5bWJvbHMgZnJvbSB6bGliLmgKKy0gQ29ycmVjdCBzcGVsbGluZyBlcnJvcnMgaW4gemxpYi5oIFtXaWxsZW0sIFNvYnJhZG9dCistIEFsbG93IFpfQkxPQ0sgZm9yIGRlZmxhdGUoKSB0byBmb3JjZSBhIG5ldyBibG9jaworLSBBbGxvdyBuZWdhdGl2ZSBiaXRzIGluIGluZmxhdGVQcmltZSgpIHRvIGRlbGV0ZSBleGlzdGluZyBiaXQgYnVmZmVyCistIEFkZCBaX1RSRUVTIGZsdXNoIG9wdGlvbiB0byBpbmZsYXRlKCkgdG8gcmV0dXJuIGF0IGVuZCBvZiB0cmVlcworLSBBZGQgaW5mbGF0ZU1hcmsoKSB0byByZXR1cm4gY3VycmVudCBzdGF0ZSBpbmZvcm1hdGlvbiBmb3IgcmFuZG9tIGFjY2VzcworLSBBZGQgTWFrZWZpbGUgZm9yIE5pbnRlbmRvRFMgdG8gY29udHJpYiBbQ29zdGFdCistIEFkZCAtdyBpbiBjb25maWd1cmUgY29tcGlsZSB0ZXN0cyB0byBhdm9pZCBzcHVyaW91cyB3YXJuaW5ncyBbQmV1Y2xlcl0KKy0gRml4IHR5cG9zIGluIHpsaWIuaCBjb21tZW50cyBmb3IgZGVmbGF0ZVNldERpY3Rpb25hcnkoKQorLSBGaXggRU9GIGRldGVjdGlvbiBpbiB0cmFuc3BhcmVudCBnenJlYWQoKSBbTWFpZXJdCisKK0NoYW5nZXMgaW4gMS4yLjMuMyAoMiBPY3RvYmVyIDIwMDYpCistIE1ha2UgLS1zaGFyZWQgdGhlIGRlZmF1bHQgZm9yIGNvbmZpZ3VyZSwgYWRkIGEgLS1zdGF0aWMgb3B0aW9uCistIEFkZCBjb21waWxlIG9wdGlvbiB0byBwZXJtaXQgaW52YWxpZCBkaXN0YW5jZS10b28tZmFyIHN0cmVhbXMKKy0gQWRkIGluZmxhdGVVbmRlcm1pbmUoKSBmdW5jdGlvbiB3aGljaCBpcyByZXF1aXJlZCB0byBlbmFibGUgYWJvdmUKKy0gUmVtb3ZlIHVzZSBvZiAidGhpcyIgdmFyaWFibGUgbmFtZSBmb3IgQysrIGNvbXBhdGliaWxpdHkgW01hcnF1ZXNzXQorLSBBZGQgdGVzdGluZyBvZiBzaGFyZWQgbGlicmFyeSBpbiBtYWtlIHRlc3QsIGlmIHNoYXJlZCBsaWJyYXJ5IGJ1aWx0CistIFVzZSBmdGVsbG8oKSBhbmQgZnNlZWtvKCkgaWYgYXZhaWxhYmxlIGluc3RlYWQgb2YgZnRlbGwoKSBhbmQgZnNlZWsoKQorLSBQcm92aWRlIHR3byB2ZXJzaW9ucyBvZiBhbGwgZnVuY3Rpb25zIHRoYXQgdXNlIHRoZSB6X29mZl90IHR5cGUgZm9yCisgIGJpbmFyeSBjb21wYXRpYmlsaXR5IC0tIGEgbm9ybWFsIHZlcnNpb24gYW5kIGEgNjQtYml0IG9mZnNldCB2ZXJzaW9uLAorICBwZXIgdGhlIExhcmdlIEZpbGUgU3VwcG9ydCBFeHRlbnNpb24gd2hlbiBfTEFSR0VGSUxFNjRfU09VUkNFIGlzCisgIGRlZmluZWQ7IHVzZSB0aGUgNjQtYml0IHZlcnNpb25zIGJ5IGRlZmF1bHQgd2hlbiBfRklMRV9PRkZTRVRfQklUUworICBpcyBkZWZpbmVkIHRvIGJlIDY0CistIEFkZCBhIC0tdW5hbWU9IG9wdGlvbiB0byBjb25maWd1cmUgdG8gcGVyaGFwcyBoZWxwIHdpdGggY3Jvc3MtY29tcGlsaW5nCisKK0NoYW5nZXMgaW4gMS4yLjMuMiAoMyBTZXB0ZW1iZXIgMjAwNikKKy0gVHVybiBvZmYgc2lsbHkgQm9ybGFuZCB3YXJuaW5ncyBbSGF5XQorLSBVc2Ugb2ZmNjRfdCBhbmQgZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0Ugd2hlbiBwcmVzZW50CistIEZpeCBtaXNzaW5nIGRlcGVuZGVuY3kgb24gaW5mZml4ZWQuaCBpbiBNYWtlZmlsZS5pbgorLSBSaWcgY29uZmlndXJlIC0tc2hhcmVkIHRvIGJ1aWxkIGJvdGggc2hhcmVkIGFuZCBzdGF0aWMgW1RlcmVkZXNhaSwgVHJ1dGFdCistIFJlbW92ZSB6Y29uZi5pbi5oIGFuZCBpbnN0ZWFkIGNyZWF0ZSBhIG5ldyB6bGliZGVmcy5oIGZpbGUKKy0gRml4IGNvbnRyaWIvbWluaXppcC91bnppcC5jIG5vbi1lbmNyeXB0ZWQgYWZ0ZXIgZW5jcnlwdGVkIFtWb2xsYW50XQorLSBBZGQgdHJlZWJ1aWxkLnhtbCAoc2VlIGh0dHA6Ly90cmVlYnVpbGQubWV0dXguZGUvKSBbV2VpZ2VsdF0KKworQ2hhbmdlcyBpbiAxLjIuMy4xICgxNiBBdWd1c3QgMjAwNikKKy0gQWRkIHdhdGNvbSBkaXJlY3Rvcnkgd2l0aCBPcGVuV2F0Y29tIG1ha2UgZmlsZXMgW0RhbmllbF0KKy0gUmVtb3ZlICN1bmRlZiBvZiBGQVIgaW4gemNvbmYuaW4uaCBmb3IgTVZTIFtGZWR0a2VdCistIFVwZGF0ZSBtYWtlX3Ztcy5jb20gW1ppbnNlcl0KKy0gVXNlIC1mUElDIGZvciBzaGFyZWQgYnVpbGQgaW4gY29uZmlndXJlIFtUZXJlZGVzYWksIE5pY2hvbHNvbl0KKy0gVXNlIG9ubHkgbWFqb3IgdmVyc2lvbiBudW1iZXIgZm9yIGxpYnouc28gb24gSVJJWCBhbmQgT1NGMSBbUmVpbmhvbGR0c2VuXQorLSBVc2UgZmRvcGVuKCkgKG5vdCBfZmRvcGVuKCkpIGZvciBJbnRlcml4IGluIHp1dGlsLmggW0LDpGNrXQorLSBBZGQgc29tZSBGQVEgZW50cmllcyBhYm91dCB0aGUgY29udHJpYiBkaXJlY3RvcnkKKy0gVXBkYXRlIHRoZSBNVlMgcXVlc3Rpb24gaW4gdGhlIEZBUQorLSBBdm9pZCBleHRyYW5lb3VzIHJlYWRzIGFmdGVyIEVPRiBpbiBnemlvLmMgW0Jyb3duXQorLSBDb3JyZWN0IHNwZWxsaW5nIG9mICJzdWNjZXNzZnVsbHkiIGluIGd6aW8uYyBbUmFuZGVycy1QZWhyc29uXQorLSBBZGQgY29tbWVudHMgdG8gemxpYi5oIGFib3V0IGd6ZXJyb3IoKSB1c2FnZSBbQnJvd25dCistIFNldCBleHRyYSBmbGFncyBpbiBnemlwIGhlYWRlciBpbiBnem9wZW4oKSBsaWtlIGRlZmxhdGUoKSBkb2VzCistIE1ha2UgY29uZmlndXJlIG9wdGlvbnMgbW9yZSBjb21wYXRpYmxlIHdpdGggZG91YmxlLWRhc2ggY29udmVudGlvbnMKKyAgW1dlaWdlbHRdCistIENsZWFuIHVwIGNvbXBpbGF0aW9uIHVuZGVyIFNvbGFyaXMgU3VuU3R1ZGlvIGNjIFtSb3dlLCBSZWluaG9sZHRzZW5dCistIEZpeCB1bmluc3RhbGwgdGFyZ2V0IGluIE1ha2VmaWxlLmluIFtUcnV0YV0KKy0gQWRkIHBrZ2NvbmZpZyBzdXBwb3J0IFtXZWlnZWx0XQorLSBVc2UgJChERVNURElSKSBtYWNybyBpbiBNYWtlZmlsZS5pbiBbUmVpbmhvbGR0c2VuLCBXZWlnZWx0XQorLSBSZXBsYWNlIHNldF9kYXRhX3R5cGUoKSB3aXRoIGEgbW9yZSBhY2N1cmF0ZSBkZXRlY3RfZGF0YV90eXBlKCkgaW4KKyAgdHJlZXMuYywgYWNjb3JkaW5nIHRvIHRoZSB0eHR2c2Jpbi50eHQgZG9jdW1lbnQgW1RydXRhXQorLSBTd2FwIHRoZSBvcmRlciBvZiAjaW5jbHVkZSA8c3RkaW8uaD4gYW5kICNpbmNsdWRlICJ6bGliLmgiIGluCisgIGd6aW8uYywgZXhhbXBsZS5jIGFuZCBtaW5pZ3ppcC5jIFtUcnV0YV0KKy0gU2h1dCB1cCBhbm5veWluZyBWUzIwMDUgd2FybmluZ3MgYWJvdXQgc3RhbmRhcmQgQyBkZXByZWNhdGlvbiBbUm93ZSwKKyAgVHJ1dGFdICh3aGVyZT8pCistIEZpeCB0YXJnZXQgImNsZWFuIiBmcm9tIHdpbjMyL01ha2VmaWxlLmJvciBbVHJ1dGFdCistIENyZWF0ZSAucGRiIGFuZCAubWFuaWZlc3QgZmlsZXMgaW4gd2luMzIvbWFrZWZpbGUubXNjIFtaaWVnbGVyLCBSb3dlXQorLSBVcGRhdGUgemxpYiB3d3cgaG9tZSBhZGRyZXNzIGluIHdpbjMyL0RMTF9GQVEudHh0IFtUcnV0YV0KKy0gVXBkYXRlIGNvbnRyaWIvbWFzbXg4Ni9pbmZmYXMzMi5hc20gZm9yIFZTMjAwNSBbVm9sbGFudCwgVmFuIFdhc3NlbmhvdmVdCistIEVuYWJsZSBicm93c2UgaW5mbyBpbiB0aGUgIkRlYnVnIiBhbmQgIkFTTSBEZWJ1ZyIgY29uZmlndXJhdGlvbnMgaW4KKyAgdGhlIFZpc3VhbCBDKysgNiBwcm9qZWN0LCBhbmQgc2V0IChub24tQVNNKSAiRGVidWciIGFzIGRlZmF1bHQgW1RydXRhXQorLSBBZGQgcGtnY29uZmlnIHN1cHBvcnQgW1dlaWdlbHRdCistIEFkZCBaTElCX1ZFUl9NQUpPUiwgWkxJQl9WRVJfTUlOT1IgYW5kIFpMSUJfVkVSX1JFVklTSU9OIGluIHpsaWIuaCwKKyAgZm9yIHVzZSBpbiB3aW4zMi96bGliMS5yYyBbUG9sdXNoaW4sIFJvd2UsIFRydXRhXQorLSBBZGQgYSBkb2N1bWVudCB0aGF0IGV4cGxhaW5zIHRoZSBuZXcgdGV4dCBkZXRlY3Rpb24gc2NoZW1lIHRvCisgIGRvYy90eHR2c2Jpbi50eHQgW1RydXRhXQorLSBBZGQgcmZjMTk1MC50eHQsIHJmYzE5NTEudHh0IGFuZCByZmMxOTUyLnR4dCB0byBkb2MvIFtUcnV0YV0KKy0gTW92ZSBhbGdvcml0aG0udHh0IGludG8gZG9jLyBbVHJ1dGFdCistIFN5bmNocm9uaXplIEZBUSB3aXRoIHdlYnNpdGUKKy0gRml4IGNvbXByZXNzQm91bmQoKSwgd2FzIGxvdyBmb3Igc29tZSBwYXRob2xvZ2ljYWwgY2FzZXMgW0ZlYXJubGV5XQorLSBUYWtlIGludG8gYWNjb3VudCB3cmFwcGVyIHZhcmlhdGlvbnMgaW4gZGVmbGF0ZUJvdW5kKCkKKy0gU2V0IGV4YW1wbGVzL3pwaXBlLmMgaW5wdXQgYW5kIG91dHB1dCB0byBiaW5hcnkgbW9kZSBmb3IgV2luZG93cworLSBVcGRhdGUgZXhhbXBsZXMvemxpYl9ob3cuaHRtbCB3aXRoIG5ldyB6cGlwZS5jIChhbHNvIHdlYiBzaXRlKQorLSBGaXggc29tZSB3YXJuaW5ncyBpbiBleGFtcGxlcy9nemxvZy5jIGFuZCBleGFtcGxlcy96cmFuLmMgKGl0IHNlZW1zCisgIHRoYXQgZ2NjIGJlY2FtZSBwaWNraWVyIGluIDQuMCkKKy0gQWRkIHpsaWIubWFwIGZvciBMaW51eDogIkFsbCBzeW1ib2xzIGZyb20gemxpYi0xLjEuNCByZW1haW4KKyAgdW4tdmVyc2lvbmVkLCB0aGUgcGF0Y2ggYWRkcyB2ZXJzaW9uaW5nIG9ubHkgZm9yIHN5bWJvbHMgaW50cm9kdWNlZCBpbgorICB6bGliLTEuMi4wIG9yIGxhdGVyLiAgSXQgYWxzbyBkZWNsYXJlcyBhcyBsb2NhbCB0aG9zZSBzeW1ib2xzIHdoaWNoIGFyZQorICBub3QgZGVzaWduZWQgdG8gYmUgZXhwb3J0ZWQuIiBbTGV2aW5dCistIFVwZGF0ZSBaX1BSRUZJWCBsaXN0IGluIHpjb25mLmluLmgsIGFkZCAtLXpwcmVmaXggb3B0aW9uIHRvIGNvbmZpZ3VyZQorLSBEbyBub3QgaW5pdGlhbGl6ZSBnbG9iYWwgc3RhdGljIGJ5IGRlZmF1bHQgaW4gdHJlZXMuYywgYWRkIGEgcmVzcG9uc2UKKyAgTk9fSU5JVF9HTE9CQUxfUE9JTlRFUlMgdG8gaW5pdGlhbGl6ZSB0aGVtIGlmIG5lZWRlZCBbTWFycXVlc3NdCistIERvbid0IHVzZSBzdHJlcnJvcigpIGluIGd6aW8uYyB1bmRlciBXaW5DRSBbWWFraW1vdl0KKy0gRG9uJ3QgdXNlIGVycm5vLmggaW4genV0aWwuaCB1bmRlciBXaW5DRSBbWWFraW1vdl0KKy0gTW92ZSBhcmd1bWVudHMgZm9yIEFSIHRvIGl0cyB1c2FnZSB0byBhbGxvdyByZXBsYWNpbmcgYXIgW01hcm90XQorLSBBZGQgSEFWRV9WSVNJQklMSVRZX1BSQUdNQSBpbiB6Y29uZi5pbi5oIGZvciBNb3ppbGxhIFtSYW5kZXJzLVBlaHJzb25dCistIEltcHJvdmUgaW5mbGF0ZUluaXQoKSBhbmQgaW5mbGF0ZUluaXQyKCkgZG9jdW1lbnRhdGlvbgorLSBGaXggc3RydWN0dXJlIHNpemUgY29tbWVudCBpbiBpbmZsYXRlLmgKKy0gQ2hhbmdlIGNvbmZpZ3VyZSBoZWxwIG9wdGlvbiBmcm9tIC0taCogdG8gLS1oZWxwIFtTYW50b3NdCisKK0NoYW5nZXMgaW4gMS4yLjMgKDE4IEp1bHkgMjAwNSkKKy0gQXBwbHkgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSBmaXhlcyB0byBjb250cmliL2luZmJhY2s5IGFzIHdlbGwKKy0gQ2xlYW4gdXAgc29tZSB0ZXh0IGZpbGVzIChjYXJyaWFnZSByZXR1cm5zLCB0cmFpbGluZyBzcGFjZSkKKy0gVXBkYXRlIHRlc3R6bGliLCB2c3R1ZGlvLCBtYXNteDY0LCBhbmQgbWFzbXg4NiBpbiBjb250cmliIFtWb2xsYW50XQorCitDaGFuZ2VzIGluIDEuMi4yLjQgKDExIEp1bHkgMjAwNSkKKy0gQWRkIGluZmxhdGVQcmltZSgpIGZ1bmN0aW9uIGZvciBzdGFydGluZyBpbmZsYXRpb24gYXQgYml0IGJvdW5kYXJ5CistIEF2b2lkIHNvbWUgVmlzdWFsIEMgd2FybmluZ3MgaW4gZGVmbGF0ZS5jCistIEF2b2lkIG1vcmUgc2lsbHkgVmlzdWFsIEMgd2FybmluZ3MgaW4gaW5mbGF0ZS5jIGFuZCBpbmZ0cmVlcy5jIGZvciA2NC1iaXQKKyAgY29tcGlsZQorLSBGaXggc29tZSBzcGVsbGluZyBlcnJvcnMgaW4gY29tbWVudHMgW0JldHRzXQorLSBDb3JyZWN0IGluZmxhdGVJbml0MigpIGVycm9yIHJldHVybiBkb2N1bWVudGF0aW9uIGluIHpsaWIuaAorLSBBZGQgenJhbi5jIGV4YW1wbGUgb2YgY29tcHJlc3NlZCBkYXRhIHJhbmRvbSBhY2Nlc3MgdG8gZXhhbXBsZXMKKyAgZGlyZWN0b3J5LCBzaG93cyB1c2Ugb2YgaW5mbGF0ZVByaW1lKCkKKy0gRml4IGNhc3QgZm9yIGFzc2lnbm1lbnRzIHRvIHN0cm0tPnN0YXRlIGluIGluZmxhdGUuYyBhbmQgaW5mYmFjay5jCistIEZpeCB6bGliQ29tcGlsZUZsYWdzKCkgaW4genV0aWwuYyB0byB1c2UgMUwgZm9yIGxvbmcgc2hpZnRzIFtPYmVyaHVtZXJdCistIE1vdmUgZGVjbGFyYXRpb25zIG9mIGdmMiBmdW5jdGlvbnMgdG8gcmlnaHQgcGxhY2UgaW4gY3JjMzIuYyBbT2Jlcmh1bWVyXQorLSBBZGQgY2FzdCBpbiB0cmVlcy5jIHQgYXZvaWQgYSB3YXJuaW5nIFtPYmVyaHVtZXJdCistIEF2b2lkIHNvbWUgd2FybmluZ3MgaW4gZml0YmxrLmMsIGd1bi5jLCBnempvaW4uYyBpbiBleGFtcGxlcyBbT2Jlcmh1bWVyXQorLSBVcGRhdGUgbWFrZV92bXMuY29tIFtaaW5zZXJdCistIEluaXRpYWxpemUgc3RhdGUtPndyaXRlIGluIGluZmxhdGVSZXNldCgpIHNpbmNlIGNvcGllZCBpbiBpbmZsYXRlX2Zhc3QoKQorLSBCZSBtb3JlIHN0cmljdCBvbiBpbmNvbXBsZXRlIGNvZGUgc2V0cyBpbiBpbmZsYXRlX3RhYmxlKCkgYW5kIGluY3JlYXNlCisgIEVOT1VHSCBhbmQgTUFYRCAtLSB0aGlzIHJlcGFpcnMgYSBwb3NzaWJsZSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IGZvcgorICBpbnZhbGlkIGluZmxhdGUgaW5wdXQuICBUaGFua3MgdG8gVGF2aXMgT3JtYW5keSBhbmQgTWFya3VzIE9iZXJodW1lciBmb3IKKyAgZGlzY292ZXJpbmcgdGhlIHZ1bG5lcmFiaWxpdHkgYW5kIHByb3ZpZGluZyB0ZXN0IGNhc2VzCistIEFkZCBpYTY0IHN1cHBvcnQgdG8gY29uZmlndXJlIGZvciBIUC1VWCBbU21pdGhdCistIEFkZCBlcnJvciByZXR1cm4gdG8gZ3pyZWFkKCkgZm9yIGZvcm1hdCBvciBpL28gZXJyb3IgW0xldmluXQorLSBVc2UgbWFsbG9jLmggZm9yIE9TLzIgW05lY2FzZWtdCisKK0NoYW5nZXMgaW4gMS4yLjIuMyAoMjcgTWF5IDIwMDUpCistIFJlcGxhY2UgMVUgY29uc3RhbnRzIGluIGluZmxhdGUuYyBhbmQgaW5mdHJlZXMuYyBmb3IgNjQtYml0IGNvbXBpbGUKKy0gVHlwZWNhc3QgZnJlYWQoKSByZXR1cm4gdmFsdWVzIGluIGd6aW8uYyBbVm9sbGFudF0KKy0gUmVtb3ZlIHRyYWlsaW5nIHNwYWNlIGluIG1pbmlnemlwLmMgb3V0bW9kZSAoVkMrKyBjYW4ndCBkZWFsIHdpdGggaXQpCistIEZpeCBjcmMgY2hlY2sgYnVnIGluIGd6cmVhZCgpIGFmdGVyIGd6dW5nZXRjKCkgW0hlaW5lcl0KKy0gQWRkIHRoZSBkZWZsYXRlVHVuZSgpIGZ1bmN0aW9uIHRvIGFkanVzdCBpbnRlcm5hbCBjb21wcmVzc2lvbiBwYXJhbWV0ZXJzCistIEFkZCBhIGZhc3QgZ3ppcCBkZWNvbXByZXNzb3IsIGd1bi5jLCB0byBleGFtcGxlcyAodXNlIG9mIGluZmxhdGVCYWNrKQorLSBSZW1vdmUgYW4gaW5jb3JyZWN0IGFzc2VydGlvbiBpbiBleGFtcGxlcy96cGlwZS5jCistIEFkZCBDKysgd3JhcHBlciBpbiBpbmZiYWNrOS5oIFtEb25haXNdCistIEZpeCBidWcgaW4gaW5mbGF0ZUNvcHkoKSB3aGVuIGRlY29kaW5nIGZpeGVkIGNvZGVzCistIE5vdGUgaW4gemxpYi5oIGhvdyBtdWNoIGRlZmxhdGVTZXREaWN0aW9uYXJ5KCkgYWN0dWFsbHkgdXNlcworLSBSZW1vdmUgVVNFX0RJQ1RfSEVBRCBpbiBkZWZsYXRlLmMgKHdvdWxkIG1lc3MgdXAgaW5mbGF0ZSBpZiB1c2VkKQorLSBBZGQgX1dJTjMyX1dDRSB0byBkZWZpbmUgV0lOMzIgaW4gemNvbmYuaW4uaCBbU3BlbmNlcl0KKy0gRG9uJ3QgaW5jbHVkZSBzdGRlcnIuaCBvciBlcnJuby5oIGZvciBfV0lOMzJfV0NFIGluIHp1dGlsLmggW1NwZW5jZXJdCistIEFkZCBnemRpcmVjdCgpIGZ1bmN0aW9uIHRvIGluZGljYXRlIHRyYW5zcGFyZW50IHJlYWRzCistIFVwZGF0ZSBjb250cmliL21pbml6aXAgW1ZvbGxhbnRdCistIEZpeCBjb21waWxhdGlvbiBvZiBkZWZsYXRlLmMgd2hlbiBib3RoIEFTTVYgYW5kIEZBU1RFU1QgW09iZXJodW1lcl0KKy0gQWRkIGNhc3RzIGluIGNyYzMyLmMgdG8gYXZvaWQgd2FybmluZ3MgW09iZXJodW1lcl0KKy0gQWRkIGNvbnRyaWIvbWFzbXg2NCBbVm9sbGFudF0KKy0gVXBkYXRlIGNvbnRyaWIvYXNtNTg2LCBhc202ODYsIG1hc214ODYsIHRlc3R6bGliLCB2c3R1ZGlvIFtWb2xsYW50XQorCitDaGFuZ2VzIGluIDEuMi4yLjIgKDMwIERlY2VtYmVyIDIwMDQpCistIFJlcGxhY2Ugc3RydWN0dXJlIGFzc2lnbm1lbnRzIGluIGRlZmxhdGUuYyBhbmQgaW5mbGF0ZS5jIHdpdGggem1lbWNweSB0bworICBhdm9pZCBpbXBsaWNpdCBtZW1jcHkgY2FsbHMgKHBvcnRhYmlsaXR5IGZvciBuby1saWJyYXJ5IGNvbXBpbGF0aW9uKQorLSBJbmNyZWFzZSBzcHJpbnRmKCkgYnVmZmVyIHNpemUgaW4gZ3pkb3BlbigpIHRvIGFsbG93IGZvciBsYXJnZSBudW1iZXJzCistIEFkZCBJTkZMQVRFX1NUUklDVCB0byBjaGVjayBkaXN0YW5jZXMgYWdhaW5zdCB6bGliIGhlYWRlcgorLSBJbXByb3ZlIFdpbkNFIGVycm5vIGhhbmRsaW5nIGFuZCBjb21tZW50cyBbQ2hhbmddCistIFJlbW92ZSBjb21tZW50IGFib3V0IG5vIGd6aXAgaGVhZGVyIHByb2Nlc3NpbmcgaW4gRkFRCistIEFkZCBaX0ZJWEVEIHN0cmF0ZWd5IG9wdGlvbiB0byBkZWZsYXRlSW5pdDIoKSB0byBmb3JjZSBmaXhlZCB0cmVlcworLSBBZGQgdXBkYXRlZCBtYWtlX3Ztcy5jb20gW0NvZ2hsYW5dLCB1cGRhdGUgUkVBRE1FCistIENyZWF0ZSBhIG5ldyAiZXhhbXBsZXMiIGRpcmVjdG9yeSwgbW92ZSBnemFwcGVuZC5jIHRoZXJlLCBhZGQgenBpcGUuYywKKyAgZml0YmxrLmMsIGd6bG9nLltjaF0sIGd6am9pbi5jLCBhbmQgemxpYl9ob3cuaHRtbAorLSBBZGQgRkFRIGVudHJ5IGFuZCBjb21tZW50cyBpbiBkZWZsYXRlLmMgb24gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzCistIEFkZCBTb2xhcmlzIDkgbWFrZSBvcHRpb25zIGluIGNvbmZpZ3VyZSBbR2lsYmVydF0KKy0gQWxsb3cgc3RyZXJyb3IoKSB1c2FnZSBpbiBnemlvLmMgZm9yIFNUREMKKy0gRml4IERlY29tcHJlc3NCdWYgaW4gY29udHJpYi9kZWxwaGkvWkxpYi5wYXMgW01hbkNoZXNUZXJdCistIFVwZGF0ZSBjb250cmliL21hc214ODYvaW5mZmFzMzIuYXNtIGFuZCBndm1hdDMyLmFzbSBbVm9sbGFudF0KKy0gVXNlIHpfb2ZmX3QgZm9yIGFkbGVyMzJfY29tYmluZSgpIGFuZCBjcmMzMl9jb21iaW5lKCkgbGVuZ3RocworLSBNYWtlIGFkbGVyMzIoKSBtdWNoIGZhc3RlciBmb3Igc21hbGwgbGVuCistIFVzZSBPU19DT0RFIGluIGRlZmxhdGUoKSBkZWZhdWx0IGd6aXAgaGVhZGVyCisKK0NoYW5nZXMgaW4gMS4yLjIuMSAoMzEgT2N0b2JlciAyMDA0KQorLSBBbGxvdyBpbmZsYXRlU2V0RGljdGlvbmFyeSgpIGNhbGwgZm9yIHJhdyBpbmZsYXRlCistIEZpeCBpbmZsYXRlIGhlYWRlciBjcmMgY2hlY2sgYnVnIGZvciBmaWxlIG5hbWVzIGFuZCBjb21tZW50cworLSBBZGQgZGVmbGF0ZVNldEhlYWRlcigpIGFuZCBnel9oZWFkZXIgc3RydWN0dXJlIGZvciBjdXN0b20gZ3ppcCBoZWFkZXJzCistIEFkZCBpbmZsYXRlR2V0aGVhZGVyKCkgdG8gcmV0cmlldmUgZ3ppcCBoZWFkZXJzCistIEFkZCBjcmMzMl9jb21iaW5lKCkgYW5kIGFkbGVyMzJfY29tYmluZSgpIGZ1bmN0aW9ucworLSBBZGQgYWxsb2NfZnVuYywgZnJlZV9mdW5jLCBpbl9mdW5jLCBvdXRfZnVuYyB0byBaX1BSRUZJWCBsaXN0CistIFVzZSB6c3RyZWFtcCBjb25zaXN0ZW50bHkgaW4gemxpYi5oIChpbmZsYXRlX2JhY2sgZnVuY3Rpb25zKQorLSBSZW1vdmUgR1VOWklQIGNvbmRpdGlvbiBmcm9tIGRlZmluaXRpb24gb2YgaW5mbGF0ZV9tb2RlIGluIGluZmxhdGUuaAorICBhbmQgaW4gY29udHJpYi9pbmZsYXRlODYvaW5mZmFzdC5TIFtUcnV0YSwgQW5kZXJzb25dCistIEFkZCBzdXBwb3J0IGZvciBBTUQ2NCBpbiBjb250cmliL2luZmxhdGU4Ni9pbmZmYXM4Ni5jIFtBbmRlcnNvbl0KKy0gVXBkYXRlIHByb2plY3RzL1JFQURNRS5wcm9qZWN0cyBhbmQgcHJvamVjdHMvdmlzdWFsYzYgW1RydXRhXQorLSBVcGRhdGUgd2luMzIvRExMX0ZBUS50eHQgW1RydXRhXQorLSBBdm9pZCB3YXJuaW5nIHVuZGVyIE5PX0daQ09NUFJFU1MgaW4gZ3ppby5jOyBmaXggdHlwbyBbVHJ1dGFdCistIERlcHJlY2F0ZSBaX0FTQ0lJOyB1c2UgWl9URVhUIGluc3RlYWQgW1RydXRhXQorLSBVc2UgYSBuZXcgYWxnb3JpdGhtIGZvciBzZXR0aW5nIHN0cm0tPmRhdGFfdHlwZSBpbiB0cmVlcy5jIFtUcnV0YV0KKy0gRG8gbm90IGRlZmluZSBhbiBleGl0KCkgcHJvdG90eXBlIGluIHp1dGlsLmMgdW5sZXNzIERFQlVHIGRlZmluZWQKKy0gUmVtb3ZlIHByb3RvdHlwZSBvZiBleGl0KCkgZnJvbSB6dXRpbC5jLCBleGFtcGxlLmMsIG1pbmlnemlwLmMgW1RydXRhXQorLSBBZGQgY29tbWVudCBpbiB6bGliLmggZm9yIFpfTk9fRkxVU0ggcGFyYW1ldGVyIHRvIGRlZmxhdGUoKQorLSBGaXggRGFyd2luIGJ1aWxkIHZlcnNpb24gaWRlbnRpZmljYXRpb24gW1BldGVyc29uXQorCitDaGFuZ2VzIGluIDEuMi4yICgzIE9jdG9iZXIgMjAwNCkKKy0gVXBkYXRlIHpsaWIuaCBjb21tZW50cyBvbiBnemlwIGluLW1lbW9yeSBwcm9jZXNzaW5nCistIFNldCBhZGxlciB0byAxIGluIGluZmxhdGVSZXNldCgpIHRvIHN1cHBvcnQgSmF2YSB0ZXN0IHN1aXRlIFtXYWxsZXNdCistIEFkZCBjb250cmliL2RvdHpsaWIgW1Jhdm5dCistIFVwZGF0ZSB3aW4zMi9ETExfRkFRLnR4dCBbVHJ1dGFdCistIFVwZGF0ZSBjb250cmliL21pbml6aXAgW1ZvbGxhbnRdCistIE1vdmUgY29udHJpYi92aXN1YWwtYmFzaWMudHh0IHRvIG9sZC8gW1RydXRhXQorLSBGaXggYXNzZW1ibGVyIGJ1aWxkcyBpbiBwcm9qZWN0cy92aXN1YWxjNi8gW1RydXRhXQorCitDaGFuZ2VzIGluIDEuMi4xLjIgKDkgU2VwdGVtYmVyIDIwMDQpCistIFVwZGF0ZSBJTkRFWCBmaWxlCistIEZpeCB0cmVlcy5jIHRvIHVwZGF0ZSBzdHJtLT5kYXRhX3R5cGUgKG5vIG9uZSBldmVyIG5vdGljZWQhKQorLSBGaXggYnVnIGluIGVycm9yIGNhc2UgaW4gaW5mbGF0ZS5jLCBpbmZiYWNrLmMsIGFuZCBpbmZiYWNrOS5jIFtCcm93bl0KKy0gQWRkICJ2b2xhdGlsZSIgdG8gY3JjIHRhYmxlIGZsYWcgZGVjbGFyYXRpb24gKGZvciBEWU5BTUlDX0NSQ19UQUJMRSkKKy0gQWRkIGxpbWl0ZWQgbXVsdGl0YXNraW5nIHByb3RlY3Rpb24gdG8gRFlOQU1JQ19DUkNfVEFCTEUKKy0gQWRkIE5PX3ZzbnByaW50ZiBmb3IgVk1TIGluIHp1dGlsLmggW01vemlsbGFdCistIERvbid0IGRlY2xhcmUgc3RyZXJyb3IoKSB1bmRlciBWTVMgW01vemlsbGFdCistIEFkZCBjb21tZW50IHRvIERZTkFNSUNfQ1JDX1RBQkxFIHRvIHVzZSBnZXRfY3JjX3RhYmxlKCkgdG8gaW5pdGlhbGl6ZQorLSBVcGRhdGUgY29udHJpYi9hZGEgW0FuaXNpbWtvdl0KKy0gVXBkYXRlIGNvbnRyaWIvbWluaXppcCBbVm9sbGFudF0KKy0gRml4IGNvbmZpZ3VyZSB0byBub3QgaGFyZGNvZGUgZGlyZWN0b3JpZXMgZm9yIERhcndpbiBbUGV0ZXJzb25dCistIEZpeCBnemlvLmMgdG8gbm90IHJldHVybiBlcnJvciBvbiBlbXB0eSBmaWxlcyBbQnJvd25dCistIEZpeCBpbmRlbnRhdGlvbjsgdXBkYXRlIHZlcnNpb24gaW4gY29udHJpYi9kZWxwaGkvWkxpYi5wYXMgYW5kCisgIGNvbnRyaWIvcGFzY2FsL3psaWJwYXMucGFzIFtUcnV0YV0KKy0gVXBkYXRlIG1rYXNtLmJhdCBpbiBjb250cmliL21hc214ODYgW1RydXRhXQorLSBVcGRhdGUgY29udHJpYi91bnRneiBbVHJ1dGFdCistIEFkZCBwcm9qZWN0cy9SRUFETUUucHJvamVjdHMgW1RydXRhXQorLSBBZGQgcHJvamVjdCBmb3IgTVMgVmlzdWFsIEMrKyA2LjAgaW4gcHJvamVjdHMvdmlzdWFsYzYgW0NhZGlldXgsIFRydXRhXQorLSBVcGRhdGUgd2luMzIvRExMX0ZBUS50eHQgW1RydXRhXQorLSBVcGRhdGUgbGlzdCBvZiBaX1BSRUZJWCBzeW1ib2xzIGluIHpjb25mLmggW1JhbmRlcnMtUGVocnNvbiwgVHJ1dGFdCistIFJlbW92ZSBhbiB1bm5lY2Vzc2FyeSBhc3NpZ25tZW50IHRvIGN1cnIgaW4gaW5mdHJlZXMuYyBbVHJ1dGFdCistIEFkZCBPUy8yIHRvIGV4ZSBidWlsZHMgaW4gY29uZmlndXJlIFtQb2x0b3Jha10KKy0gUmVtb3ZlIGVyciBkdW1teSBwYXJhbWV0ZXIgaW4gemxpYi5oIFtLaWVudHpsZV0KKworQ2hhbmdlcyBpbiAxLjIuMS4xICg5IEphbnVhcnkgMjAwNCkKKy0gVXBkYXRlIGVtYWlsIGFkZHJlc3MgaW4gUkVBRE1FCistIFNldmVyYWwgRkFRIHVwZGF0ZXMKKy0gRml4IGEgYmlnIGZhdCBidWcgaW4gaW5mdHJlZXMuYyB0aGF0IHByZXZlbnRlZCBkZWNvZGluZyB2YWxpZAorICBkeW5hbWljIGJsb2NrcyB3aXRoIG9ubHkgbGl0ZXJhbHMgYW5kIG5vIGRpc3RhbmNlIGNvZGVzIC0tCisgIFRoYW5rcyB0byAiSG90IEVtdSIgZm9yIHRoZSBidWcgcmVwb3J0IGFuZCBzYW1wbGUgZmlsZQorLSBBZGQgYSBub3RlIHRvIHB1ZmYuYyBvbiBubyBkaXN0YW5jZSBjb2RlcyBjYXNlCisKK0NoYW5nZXMgaW4gMS4yLjEgKDE3IE5vdmVtYmVyIDIwMDMpCistIFJlbW92ZSBhIHRhYiBpbiBjb250cmliL2d6YXBwZW5kL2d6YXBwZW5kLmMKKy0gVXBkYXRlIHNvbWUgaW50ZXJmYWNlcyBpbiBjb250cmliIGZvciBuZXcgemxpYiBmdW5jdGlvbnMKKy0gVXBkYXRlIHpsaWIgdmVyc2lvbiBudW1iZXIgaW4gc29tZSBjb250cmliIGVudHJpZXMKKy0gQWRkIFdpbmRvd3MgQ0UgZGVmaW5pdGlvbiBmb3IgcHRyZGlmZl90IGluIHp1dGlsLmggW01haSwgVHJ1dGFdCistIFN1cHBvcnQgc2hhcmVkIGxpYnJhcmllcyBvbiBIdXJkIGFuZCBLRnJlZUJTRCBbQnJvd25dCistIEZpeCBlcnJvciBpbiBOT19ESVZJREUgb3B0aW9uIG9mIGFkbGVyMzIuYworCitDaGFuZ2VzIGluIDEuMi4wLjggKDQgTm92ZW1iZXIgMjAwMykKKy0gVXBkYXRlIHZlcnNpb24gaW4gY29udHJpYi9kZWxwaGkvWkxpYi5wYXMgYW5kIGNvbnRyaWIvcGFzY2FsL3psaWJwYXMucGFzCistIEFkZCBleHBlcmltZW50YWwgTk9fRElWSURFICNkZWZpbmUgaW4gYWRsZXIzMi5jCisgICAgLSBQb3NzaWJseSBmYXN0ZXIgb24gc29tZSBwcm9jZXNzb3JzIChsZXQgbWUga25vdyBpZiBpdCBpcykKKy0gQ29ycmVjdCBaX0JMT0NLIHRvIG5vdCByZXR1cm4gb24gZmlyc3QgaW5mbGF0ZSBjYWxsIGlmIG5vIHdyYXAKKy0gRml4IHN0cm0tPmRhdGFfdHlwZSBvbiBpbmZsYXRlKCkgcmV0dXJuIHRvIGNvcnJlY3RseSBpbmRpY2F0ZSBFT0IKKy0gQWRkIGRlZmxhdGVQcmltZSgpIGZ1bmN0aW9uIGZvciBhcHBlbmRpbmcgaW4gdGhlIG1pZGRsZSBvZiBhIGJ5dGUKKy0gQWRkIGNvbnRyaWIvZ3phcHBlbmQgZm9yIGFuIGV4YW1wbGUgb2YgYXBwZW5kaW5nIHRvIGEgc3RyZWFtCistIFVwZGF0ZSB3aW4zMi9ETExfRkFRLnR4dCBbVHJ1dGFdCistIERlbGV0ZSBUdXJibyBDIGNvbW1lbnQgaW4gUkVBRE1FIFtUcnV0YV0KKy0gSW1wcm92ZSBzb21lIGluZGVudGF0aW9uIGluIHpjb25mLmggW1RydXRhXQorLSBGaXggaW5maW5pdGUgbG9vcCBvbiBiYWQgaW5wdXQgaW4gY29uZmlndXJlIHNjcmlwdCBbQ2h1cmNoXQorLSBGaXggZ3plb2YoKSBmb3IgY29uY2F0ZW5hdGVkIGd6aXAgZmlsZXMgW0pvaG5zb25dCistIEFkZCBleGFtcGxlIHRvIGNvbnRyaWIvdmlzdWFsLWJhc2ljLnR4dCBbTWljaGFlbCBCLl0KKy0gQWRkIC1wIHRvIG1rZGlyJ3MgaW4gTWFrZWZpbGUuaW4gW3ZkYV0KKy0gRml4IGNvbmZpZ3VyZSB0byBwcm9wZXJseSBkZXRlY3QgcHJlc2VuY2Ugb3IgbGFjayBvZiBwcmludGYgZnVuY3Rpb25zCistIEFkZCBBUzQwMCBzdXBwb3J0IFtNb25uZXJhdF0KKy0gQWRkIGEgbGl0dGxlIEN5Z3dpbiBzdXBwb3J0IFtXaWxzb25dCisKK0NoYW5nZXMgaW4gMS4yLjAuNyAoMjEgU2VwdGVtYmVyIDIwMDMpCistIENvcnJlY3Qgc29tZSBkZWJ1ZyBmb3JtYXRzIGluIGNvbnRyaWIvaW5mYmFjazkKKy0gQ2FzdCBhIHR5cGUgaW4gYSBkZWJ1ZyBzdGF0ZW1lbnQgaW4gdHJlZXMuYworLSBDaGFuZ2Ugc2VhcmNoIGFuZCByZXBsYWNlIGRlbGltaXRlciBpbiBjb25maWd1cmUgZnJvbSAlIHRvICMgW0JlZWJlXQorLSBVcGRhdGUgY29udHJpYi91bnRneiB0byAwLjIgd2l0aCB2YXJpb3VzIGZpeGVzIFtUcnV0YV0KKy0gQWRkIGJ1aWxkIHN1cHBvcnQgZm9yIEFtaWdhIFtOaWtsXQorLSBSZW1vdmUgc29tZSBkaXJlY3RvcmllcyBpbiBvbGQgdGhhdCBoYXZlIGJlZW4gdXBkYXRlZCB0byAxLjIKKy0gQWRkIGR5bGliIGJ1aWxkaW5nIGZvciBNYWMgT1MgWCBpbiBjb25maWd1cmUgYW5kIE1ha2VmaWxlLmluCistIFJlbW92ZSBvbGQgZGlzdHJpYnV0aW9uIHN0dWZmIGZyb20gTWFrZWZpbGUKKy0gVXBkYXRlIFJFQURNRSB0byBwb2ludCB0byBETExfRkFRLnR4dCwgYW5kIGFkZCBjb21tZW50IG9uIE1hYyBPUyBYCistIFVwZGF0ZSBsaW5rcyBpbiBSRUFETUUKKworQ2hhbmdlcyBpbiAxLjIuMC42ICgxMyBTZXB0ZW1iZXIgMjAwMykKKy0gTWlub3IgRkFRIHVwZGF0ZXMKKy0gVXBkYXRlIGNvbnRyaWIvbWluaXppcCB0byAxLjAwIFtWb2xsYW50XQorLSBSZW1vdmUgdGVzdCBvZiBneiBmdW5jdGlvbnMgaW4gZXhhbXBsZS5jIHdoZW4gR1pfQ09NUFJFU1MgZGVmaW5lZCBbVHJ1dGFdCistIFVwZGF0ZSBQT1NUSU5DIGNvbW1lbnQgZm9yIDY4MDYwIFtOaWtsXQorLSBBZGQgY29udHJpYi9pbmZiYWNrOSB3aXRoIGRlZmxhdGU2NCBkZWNvZGluZyAodW5zdXBwb3J0ZWQpCistIEZvciBNVlMgZGVmaW5lIE5PX3ZzbnByaW50ZiBhbmQgdW5kZWZpbmUgRkFSIFt2YW4gQnVyaWtdCistIEFkZCBwcmFnbWEgZm9yIGZkb3BlbiBvbiBNVlMgW3ZhbiBCdXJpa10KKworQ2hhbmdlcyBpbiAxLjIuMC41ICg4IFNlcHRlbWJlciAyMDAzKQorLSBBZGQgT0YgdG8gaW5mbGF0ZUJhY2tFbmQoKSBkZWNsYXJhdGlvbiBpbiB6bGliLmgKKy0gUmVtZW1iZXIgc3RhcnQgd2hlbiB1c2luZyBnemRvcGVuIGluIHRoZSBtaWRkbGUgb2YgYSBmaWxlCistIFVzZSBpbnRlcm5hbCBvZmZfdCBjb3VudGVycyBpbiBneiogZnVuY3Rpb25zIHRvIHByb3Blcmx5IGhhbmRsZSBzZWVrcworLSBQZXJmb3JtIG1vcmUgcmlnb3JvdXMgY2hlY2sgZm9yIGRpc3RhbmNlLXRvby1mYXIgaW4gaW5mZmFzdC5jCistIEFkZCBaX0JMT0NLIGZsdXNoIG9wdGlvbiB0byByZXR1cm4gZnJvbSBpbmZsYXRlIGF0IGJsb2NrIGJvdW5kYXJ5CistIFNldCBzdHJtLT5kYXRhX3R5cGUgb24gcmV0dXJuIGZyb20gaW5mbGF0ZQorICAgIC0gSW5kaWNhdGUgYml0cyB1bnVzZWQsIGlmIGF0IGJsb2NrIGJvdW5kYXJ5LCBhbmQgaWYgaW4gbGFzdCBibG9jaworLSBSZXBsYWNlIHNpemVfdCB3aXRoIHB0cmRpZmZfdCBpbiBjcmMzMi5jLCBhbmQgY2hlY2sgZm9yIGNvcnJlY3Qgc2l6ZQorLSBBZGQgY29uZGl0aW9uIHNvIG9sZCBOT19ERUZMQVRFIGRlZmluZSBzdGlsbCB3b3JrcyBmb3IgY29tcGF0aWJpbGl0eQorLSBGQVEgdXBkYXRlIHJlZ2FyZGluZyB0aGUgV2luZG93cyBETEwgW1RydXRhXQorLSBJTkRFWCB1cGRhdGU6IGFkZCBxbnggZW50cnksIHJlbW92ZSBhaXggZW50cnkgW1RydXRhXQorLSBJbnN0YWxsIHpsaWIuMyBpbnRvIG1hbmRpciBbV2lsc29uXQorLSBNb3ZlIGNvbnRyaWIvemxpYl9kbGxfRkFRLnR4dCB0byB3aW4zMi9ETExfRkFRLnR4dDsgdXBkYXRlIFtUcnV0YV0KKy0gQWRhcHQgdGhlIHpsaWIgaW50ZXJmYWNlIHRvIHRoZSBuZXcgRExMIGNvbnZlbnRpb24gZ3VpZGVsaW5lcyBbVHJ1dGFdCistIEludHJvZHVjZSBaTElCX1dJTkFQSSBtYWNybyB0byBhbGxvdyB0aGUgZXhwb3J0IG9mIGZ1bmN0aW9ucyB1c2luZworICB0aGUgV0lOQVBJIGNhbGxpbmcgY29udmVudGlvbiwgZm9yIFZpc3VhbCBCYXNpYyBbVm9sbGFudCwgVHJ1dGFdCistIFVwZGF0ZSBtc2RvcyBhbmQgd2luMzIgc2NyaXB0cyBhbmQgbWFrZWZpbGVzIFtUcnV0YV0KKy0gRXhwb3J0IHN5bWJvbHMgYnkgbmFtZSwgbm90IGJ5IG9yZGluYWwsIGluIHdpbjMyL3psaWIuZGVmIFtUcnV0YV0KKy0gQWRkIGNvbnRyaWIvYWRhIFtBbmlzaW1rb3ZdCistIE1vdmUgYXNtIGZpbGVzIGZyb20gY29udHJpYi92c3R1ZGlvL3ZjNzBfMzIgdG8gY29udHJpYi9hc20zODYgW1RydXRhXQorLSBSZW5hbWUgY29udHJpYi9hc20zODYgdG8gY29udHJpYi9tYXNteDg2IFtUcnV0YSwgVm9sbGFudF0KKy0gQWRkIGNvbnRyaWIvbWFzbTY4NiBbVHJ1dGFdCistIEZpeCBvZmZzZXRzIGluIGNvbnRyaWIvaW5mbGF0ZTg2IGFuZCBjb250cmliL21hc214ODYvaW5mZmFzMzIuYXNtCisgIFtUcnV0YSwgVm9sbGFudF0KKy0gVXBkYXRlIGNvbnRyaWIvZGVscGhpOyByZW5hbWUgdG8gY29udHJpYi9wYXNjYWw7IGFkZCBleGFtcGxlIFtUcnV0YV0KKy0gUmVtb3ZlIGNvbnRyaWIvZGVscGhpMjsgYWRkIGEgbmV3IGNvbnRyaWIvZGVscGhpIFtUcnV0YV0KKy0gQXZvaWQgaW5jbHVzaW9uIG9mIHRoZSBub25zdGFuZGFyZCA8bWVtb3J5Lmg+IGluIGNvbnRyaWIvaW9zdHJlYW0sCisgIGFuZCBmaXggc29tZSBtZXRob2QgcHJvdG90eXBlcyBbVHJ1dGFdCistIEZpeCB0aGUgWkNSX1NFRUQyIGNvbnN0YW50IHRvIGF2b2lkIHdhcm5pbmdzIGluIGNvbnRyaWIvbWluaXppcAorICBbVHJ1dGFdCistIEF2b2lkIHRoZSB1c2Ugb2YgYmFja3NsYXNoIChcKSBpbiBjb250cmliL21pbml6aXAgW1ZvbGxhbnRdCistIEZpeCBmaWxlIHRpbWUgaGFuZGxpbmcgaW4gY29udHJpYi91bnRnejsgdXBkYXRlIG1ha2VmaWxlcyBbVHJ1dGFdCistIFVwZGF0ZSBjb250cmliL3ZzdHVkaW8vdmM3MF8zMiB0byBjb21wbHkgd2l0aCB0aGUgbmV3IERMTCBndWlkZWxpbmVzCisgIFtWb2xsYW50XQorLSBSZW1vdmUgY29udHJpYi92c3R1ZGlvL3ZjMTVfMTYgW1ZvbGxhbnRdCistIFJlbmFtZSBjb250cmliL3ZzdHVkaW8vdmM3MF8zMiB0byBjb250cmliL3ZzdHVkaW8vdmM3IFtUcnV0YV0KKy0gVXBkYXRlIFJFQURNRS5jb250cmliIFtUcnV0YV0KKy0gSW52ZXJ0IHRoZSBhc3NpZ25tZW50IG9yZGVyIG9mIG1hdGNoX2hlYWQgYW5kIHMtPnByZXZbLi4uXSBpbgorICBJTlNFUlRfU1RSSU5HIFtUcnV0YV0KKy0gQ29tcGFyZSBUT09fRkFSIHdpdGggMzI3NjcgaW5zdGVhZCBvZiAzMjc2OCwgdG8gYXZvaWQgMTYtYml0IHdhcm5pbmdzCisgIFtUcnV0YV0KKy0gQ29tcGFyZSBmdW5jdGlvbiBwb2ludGVycyB3aXRoIDAsIG5vdCB3aXRoIE5VTEwgb3IgWl9OVUxMIFtUcnV0YV0KKy0gRml4IHByb3RvdHlwZSBvZiBzeW5jc2VhcmNoIGluIGluZmxhdGUuYyBbVHJ1dGFdCistIEludHJvZHVjZSBBU01JTkYgbWFjcm8gdG8gYmUgZW5hYmxlZCB3aGVuIHVzaW5nIGFuIEFTTSBpbXBsZW1lbnRhdGlvbgorICBvZiBpbmZsYXRlX2Zhc3QgW1RydXRhXQorLSBDaGFuZ2UgTk9fREVGTEFURSB0byBOT19HWkNPTVBSRVNTIFtUcnV0YV0KKy0gTW9kaWZ5IHRlc3RfZ3ppbyBpbiBleGFtcGxlLmMgdG8gdGFrZSBhIHNpbmdsZSBmaWxlIG5hbWUgYXMgYQorICBwYXJhbWV0ZXIgW1RydXRhXQorLSBFeGl0IHRoZSBleGFtcGxlLmMgcHJvZ3JhbSBpZiBnem9wZW4gZmFpbHMgW1RydXRhXQorLSBBZGQgdHlwZSBjYXN0cyBhcm91bmQgc3RybGVuIGluIGV4YW1wbGUuYyBbVHJ1dGFdCistIFJlbW92ZSBjYXN0aW5nIHRvIHNpemVvZiBpbiBtaW5pZ3ppcC5jOyBnaXZlIGEgcHJvcGVyIHR5cGUKKyAgdG8gdGhlIHZhcmlhYmxlIGNvbXBhcmVkIHdpdGggU1VGRklYX0xFTiBbVHJ1dGFdCistIFVwZGF0ZSBkZWZpbml0aW9ucyBvZiBTVERDIGFuZCBTVERDOTkgaW4gemNvbmYuaCBbVHJ1dGFdCistIFN5bmNocm9uaXplIHpjb25mLmggd2l0aCB0aGUgbmV3IFdpbmRvd3MgRExMIGludGVyZmFjZSBbVHJ1dGFdCistIFVzZSBTWVMxNkJJVCBpbnN0ZWFkIG9mIF9fMzJCSVRfXyB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuCisgIDE2LSBhbmQgMzItYml0IHBsYXRmb3JtcyBbVHJ1dGFdCistIFVzZSBmYXIgbWVtb3J5IGFsbG9jYXRvcnMgaW4gc21hbGwgMTYtYml0IG1lbW9yeSBtb2RlbHMgZm9yCisgIFR1cmJvIEMgW1RydXRhXQorLSBBZGQgaW5mbyBhYm91dCB0aGUgdXNlIG9mIEFTTVYsIEFTTUlORiBhbmQgWkxJQl9XSU5BUEkgaW4KKyAgemxpYkNvbXBpbGVGbGFncyBbVHJ1dGFdCistIEN5Z3dpbiBoYXMgdnNucHJpbnRmIFtXaWxzb25dCistIEluIFdpbmRvd3MxNiwgT1NfQ09ERSBpcyAwLCBhcyBpbiBNU0RPUyBbVHJ1dGFdCistIEluIEN5Z3dpbiwgT1NfQ09ERSBpcyAzIChVbml4KSwgbm90IDExIChXaW5kb3dzMzIpIFtXaWxzb25dCisKK0NoYW5nZXMgaW4gMS4yLjAuNCAoMTAgQXVndXN0IDIwMDMpCistIE1pbm9yIEZBUSB1cGRhdGVzCistIEJlIG1vcmUgc3RyaWN0IHdoZW4gY2hlY2tpbmcgaW5mbGF0ZUluaXQyJ3Mgd2luZG93Qml0cyBwYXJhbWV0ZXIKKy0gQ2hhbmdlIE5PX0dVTlpJUCBjb21waWxlIG9wdGlvbiB0byBOT19HWklQIHRvIGNvdmVyIGRlZmxhdGUgYXMgd2VsbAorLSBBZGQgZ3ppcCB3cmFwcGVyIG9wdGlvbiB0byBkZWZsYXRlSW5pdDIgdXNpbmcgd2luZG93Qml0cworLSBBZGQgdXBkYXRlZCBRTlggcnVsZSBpbiBjb25maWd1cmUgYW5kIHFueCBkaXJlY3RvcnkgW0Jvbm5lZm95XQorLSBNYWtlIGluZmxhdGUgZGlzdGFuY2UtdG9vLWZhciBjaGVja3MgbW9yZSByaWdvcm91cworLSBDbGVhbiB1cCBGQVIgdXNhZ2UgaW4gaW5mbGF0ZQorLSBBZGQgY2FzdGluZyB0byBzaXplb2YoKSBpbiBnemlvLmMgYW5kIG1pbmlnemlwLmMKKworQ2hhbmdlcyBpbiAxLjIuMC4zICgxOSBKdWx5IDIwMDMpCistIEZpeCBzaWxseSBlcnJvciBpbiBnenVuZ2V0YygpIGltcGxlbWVudGF0aW9uIFtWb2xsYW50XQorLSBVcGRhdGUgY29udHJpYi9taW5pemlwIGFuZCBjb250cmliL3ZzdHVkaW8gW1ZvbGxhbnRdCistIEZpeCBwcmludGYgZm9ybWF0IGluIGV4YW1wbGUuYworLSBDb3JyZWN0IGNkZWNsIHN1cHBvcnQgaW4gemNvbmYuaW4uaCBbQW5pc2lta292XQorLSBNaW5vciBGQVEgdXBkYXRlcworCitDaGFuZ2VzIGluIDEuMi4wLjIgKDEzIEp1bHkgMjAwMykKKy0gQWRkIFpMSUJfVkVSTlVNIGluIHpsaWIuaCBmb3IgbnVtZXJpY2FsIHByZXByb2Nlc3NvciBjb21wYXJpc29ucworLSBBdHRlbXB0IHRvIGF2b2lkIHdhcm5pbmdzIGluIGNyYzMyLmMgZm9yIHBvaW50ZXItaW50IGNvbnZlcnNpb24KKy0gQWRkIEFJWCB0byBjb25maWd1cmUsIHJlbW92ZSBhaXggZGlyZWN0b3J5IFtCYWtrZXJdCistIEFkZCBzb21lIGNhc3RzIHRvIG1pbmlnemlwLmMKKy0gSW1wcm92ZSBjaGVja2luZyBhZnRlciBpbnNlY3VyZSBzcHJpbnRmKCkgb3IgdnNwcmludGYoKSBjYWxscworLSBSZW1vdmUgI2VsaWYncyBmcm9tIGNyYzMyLmMKKy0gQ2hhbmdlIGxlYXZlIGxhYmVsIHRvIGluZl9sZWF2ZSBpbiBpbmZsYXRlLmMgYW5kIGluZmJhY2suYyB0byBhdm9pZAorICBsaWJyYXJ5IGNvbmZsaWN0cworLSBSZW1vdmUgaW5mbGF0ZSBnemlwIGRlY29kaW5nIGJ5IGRlZmF1bHQtLW9ubHkgZW5hYmxlIGd6aXAgZGVjb2RpbmcgYnkKKyAgc3BlY2lhbCByZXF1ZXN0IGZvciBzdHJpY3RlciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5CistIEFkZCB6bGliQ29tcGlsZUZsYWdzKCkgZnVuY3Rpb24gdG8gcmV0dXJuIGNvbXBpbGF0aW9uIGluZm9ybWF0aW9uCistIE1vcmUgdHlwZWNhc3RpbmcgaW4gZGVmbGF0ZS5jIHRvIGF2b2lkIHdhcm5pbmdzCistIFJlbW92ZSBsZWFkaW5nIHVuZGVyc2NvcmUgZnJvbSBfQ2FwaXRhbCAjZGVmaW5lcyBbVHJ1dGFdCistIEZpeCBjb25maWd1cmUgdG8gbGluayBzaGFyZWQgbGlicmFyeSB3aGVuIHRlc3RpbmcKKy0gQWRkIHNvbWUgV2luZG93cyBDRSB0YXJnZXQgYWRqdXN0bWVudHMgW01haV0KKy0gUmVtb3ZlICNkZWZpbmUgWkxJQl9ETEwgaW4gemNvbmYuaCBbVm9sbGFudF0KKy0gQWRkIHpsaWIuMyBbUm9kZ2Vyc10KKy0gVXBkYXRlIFJGQyBVUkwgaW4gZGVmbGF0ZS5jIGFuZCBhbGdvcml0aG0udHh0IFtNYWldCistIEFkZCB6bGliX2RsbF9GQVEudHh0IHRvIGNvbnRyaWIgW1RydXRhXQorLSBBZGQgVUwgdG8gc29tZSBjb25zdGFudHMgW1RydXRhXQorLSBVcGRhdGUgbWluaXppcCBhbmQgdnN0dWRpbyBbVm9sbGFudF0KKy0gUmVtb3ZlIHZlc3RpZ2lhbCBORUVEX0RVTU1ZX1JFVFVSTiBmcm9tIHpjb25mLmluLmgKKy0gRXhwYW5kIHVzZSBvZiBOT19EVU1NWV9ERUNMIHRvIGF2b2lkIGFsbCBkdW1teSBzdHJ1Y3R1cmVzCistIEFkZGVkIGlvc3RyZWFtMyB0byBjb250cmliIFtTY2h3YXJkdF0KKy0gUmVwbGFjZSByZXdpbmQoKSB3aXRoIGZzZWVrKCkgZm9yIFdpbkNFIFtUcnV0YV0KKy0gSW1wcm92ZSBzZXR0aW5nIG9mIHpsaWIgZm9ybWF0IGNvbXByZXNzaW9uIGxldmVsIGZsYWdzCisgICAgLSBSZXBvcnQgMCBmb3IgaHVmZm1hbiBhbmQgcmxlIHN0cmF0ZWdpZXMgYW5kIGZvciBsZXZlbCA9PSAwIG9yIDEKKyAgICAtIFJlcG9ydCAyIG9ubHkgZm9yIGxldmVsID09IDYKKy0gT25seSBkZWFsIHdpdGggNjRLIGxpbWl0IHdoZW4gbmVjZXNzYXJ5IGF0IGNvbXBpbGUgdGltZSBbVHJ1dGFdCistIEFsbG93IFRPT19GQVIgY2hlY2sgdG8gYmUgdHVybmVkIG9mZiBhdCBjb21waWxlIHRpbWUgW1RydXRhXQorLSBBZGQgZ3pjbGVhcmVycigpIGZ1bmN0aW9uIFtTb3V6YV0KKy0gQWRkIGd6dW5nZXRjKCkgZnVuY3Rpb24KKworQ2hhbmdlcyBpbiAxLjIuMC4xICgxNyBNYXJjaCAyMDAzKQorLSBBZGQgWl9STEUgc3RyYXRlZ3kgZm9yIHJ1bi1sZW5ndGggZW5jb2RpbmcgW1RydXRhXQorICAgIC0gV2hlbiBaX1JMRSByZXF1ZXN0ZWQsIHJlc3RyaWN0IG1hdGNoZXMgdG8gZGlzdGFuY2Ugb25lCisgICAgLSBVcGRhdGUgemxpYi5oLCBtaW5pZ3ppcC5jLCBnem9wZW4oKSwgZ3pkb3BlbigpIGZvciBaX1JMRQorLSBDb3JyZWN0IEZBU1RFU1QgY29tcGlsYXRpb24gdG8gYWxsb3cgbGV2ZWwgPT0gMAorLSBDbGVhbiB1cCB3aGF0IGdldHMgY29tcGlsZWQgZm9yIEZBU1RFU1QKKy0gSW5jb3Jwb3JhdGUgY2hhbmdlcyB0byB6Y29uZi5pbi5oIFtWb2xsYW50XQorICAgIC0gUmVmaW5lIGRldGVjdGlvbiBvZiBUdXJibyBDIG5lZWQgZm9yIGR1bW15IHJldHVybnMKKyAgICAtIFJlZmluZSBaTElCX0RMTCBjb21waWxhdGlvbgorICAgIC0gSW5jbHVkZSBhZGRpdGlvbmFsIGhlYWRlciBmaWxlIG9uIFZNUyBmb3Igb2ZmX3QgdHlwZWRlZgorLSBUcnkgdG8gdXNlIF92c25wcmludGYgd2hlcmUgaXQgc3VwcGxhbnRzIHZzcHJpbnRmIFtWb2xsYW50XQorLSBBZGQgc29tZSBjYXN0cyBpbiBpbmZmYXN0LmMKKy0gRW5jaGFuY2UgY29tbWVudHMgaW4gemxpYi5oIG9uIHdoYXQgaGFwcGVucyBpZiBnenByaW50ZigpIHRyaWVzIHRvCisgIHdyaXRlIG1vcmUgdGhhbiA0MDk1IGJ5dGVzIGJlZm9yZSBjb21wcmVzc2lvbgorLSBSZW1vdmUgdW51c2VkIHN0YXRlIGZyb20gaW5mbGF0ZUJhY2tFbmQoKQorLSBSZW1vdmUgZXhpdCgwKSBmcm9tIG1pbmlnemlwLmMsIGV4YW1wbGUuYworLSBHZXQgcmlkIG9mIGFsbCB0aG9zZSBkYXJuIHRhYnMKKy0gQWRkICJjaGVjayIgdGFyZ2V0IHRvIE1ha2VmaWxlLmluIHRoYXQgZG9lcyB0aGUgc2FtZSB0aGluZyBhcyAidGVzdCIKKy0gQWRkICJtb3N0bHljbGVhbiIgYW5kICJtYWludGFpbmVyLWNsZWFuIiB0YXJnZXRzIHRvIE1ha2VmaWxlLmluCistIFVwZGF0ZSBjb250cmliL2luZmxhdGU4NiBbQW5kZXJzb25dCistIFVwZGF0ZSBjb250cmliL3Rlc3R6bGliLCBjb250cmliL3ZzdHVkaW8sIGNvbnRyaWIvbWluaXppcCBbVm9sbGFudF0KKy0gQWRkIG1zZG9zIGFuZCB3aW4zMiBkaXJlY3RvcmllcyB3aXRoIG1ha2VmaWxlcyBbVHJ1dGFdCistIE1vcmUgYWRkaXRpb25zIGFuZCBpbXByb3ZlbWVudHMgdG8gdGhlIEZBUQorCitDaGFuZ2VzIGluIDEuMi4wICg5IE1hcmNoIDIwMDMpCistIE5ldyBhbmQgaW1wcm92ZWQgaW5mbGF0ZSBjb2RlCisgICAgLSBBYm91dCAyMCUgZmFzdGVyCisgICAgLSBEb2VzIG5vdCBhbGxvY2F0ZSAzMksgd2luZG93IHVubGVzcyBhbmQgdW50aWwgbmVlZGVkCisgICAgLSBBdXRvbWF0aWNhbGx5IGRldGVjdHMgYW5kIGRlY29tcHJlc3NlcyBnemlwIHN0cmVhbXMKKyAgICAtIFJhdyBpbmZsYXRlIG5vIGxvbmdlciBuZWVkcyBhbiBleHRyYSBkdW1teSBieXRlIGF0IGVuZAorICAgIC0gQWRkZWQgaW5mbGF0ZUJhY2sgZnVuY3Rpb25zIHVzaW5nIGEgY2FsbGJhY2sgaW50ZXJmYWNlLS1ldmVuIGZhc3RlcgorICAgICAgdGhhbiBpbmZsYXRlLCB1c2VmdWwgZm9yIGZpbGUgdXRpbGl0aWVzIChnemlwLCB6aXApCisgICAgLSBBZGRlZCBpbmZsYXRlQ29weSgpIGZ1bmN0aW9uIHRvIHJlY29yZCBzdGF0ZSBmb3IgcmFuZG9tIGFjY2VzcyBvbgorICAgICAgZXh0ZXJuYWxseSBnZW5lcmF0ZWQgZGVmbGF0ZSBzdHJlYW1zIChlLmcuIGluIGd6aXAgZmlsZXMpCisgICAgLSBNb3JlIHJlYWRhYmxlIGNvZGUgKEkgaG9wZSkKKy0gTmV3IGFuZCBpbXByb3ZlZCBjcmMzMigpCisgICAgLSBBYm91dCA1MCUgZmFzdGVyLCB0aGFua3MgdG8gc3VnZ2VzdGlvbnMgZnJvbSBSb2RuZXkgQnJvd24KKy0gQWRkIGRlZmxhdGVCb3VuZCgpIGFuZCBjb21wcmVzc0JvdW5kKCkgZnVuY3Rpb25zCistIEZpeCBtZW1vcnkgbGVhayBpbiBkZWZsYXRlSW5pdDIoKQorLSBQZXJtaXQgc2V0dGluZyBkaWN0aW9uYXJ5IGZvciByYXcgZGVmbGF0ZSAoZm9yIHBhcmFsbGVsIGRlZmxhdGUpCistIEZpeCBjb25zdCBkZWNsYXJhdGlvbiBmb3IgZ3p3cml0ZSgpCistIENoZWNrIGZvciBzb21lIG1hbGxvYygpIGZhaWx1cmVzIGluIGd6aW8uYworLSBGaXggYnVnIGluIGd6b3BlbigpIG9uIHNpbmdsZS1ieXRlIGZpbGUgMHgxZgorLSBGaXggYnVnIGluIGd6cmVhZCgpIG9uIGNvbmNhdGVuYXRlZCBmaWxlIHdpdGggMHgxZiBhdCBlbmQgb2YgYnVmZmVyCisgIGFuZCBuZXh0IGJ1ZmZlciBkb2Vzbid0IHN0YXJ0IHdpdGggMHg4YgorLSBGaXggdW5jb21wcmVzcygpIHRvIHJldHVybiBaX0RBVEFfRVJST1Igb24gdHJ1bmNhdGVkIGlucHV0CistIEZyZWUgbWVtb3J5IGF0IGVuZCBvZiBleGFtcGxlLmMKKy0gUmVtb3ZlIE1BWCAjZGVmaW5lIGluIHRyZWVzLmMgKGNvbmZsaWN0ZWQgd2l0aCBzb21lIGxpYnJhcmllcykKKy0gRml4IHN0YXRpYyBjb25zdCdzIGluIGRlZmxhdGUuYywgZ3ppby5jLCBhbmQgenV0aWwuW2NoXQorLSBEZWNsYXJlIG1hbGxvYygpIGFuZCBmcmVlKCkgaW4gZ3ppby5jIGlmIFNUREMgbm90IGRlZmluZWQKKy0gVXNlIG1hbGxvYygpIGluc3RlYWQgb2YgY2FsbG9jKCkgaW4genV0aWwuYyBpZiBpbnQgYmlnIGVub3VnaAorLSBEZWZpbmUgU1REQyBmb3IgQUlYCistIEFkZCBhaXgvIHdpdGggYXBwcm9hY2ggZm9yIGNvbXBpbGluZyBzaGFyZWQgbGlicmFyeSBvbiBBSVgKKy0gQWRkIEhQLVVYIHN1cHBvcnQgZm9yIHNoYXJlZCBsaWJyYXJpZXMgaW4gY29uZmlndXJlCistIEFkZCBPcGVuVU5JWCBzdXBwb3J0IGZvciBzaGFyZWQgbGlicmFyaWVzIGluIGNvbmZpZ3VyZQorLSBVc2UgJGNjIGluc3RlYWQgb2YgZ2NjIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJ5CistIE1ha2UgcHJlZml4IGRpcmVjdG9yeSBpZiBuZWVkZWQgd2hlbiBpbnN0YWxsaW5nCistIENvcnJlY3QgTWFjaW50b3NoIGF2b2lkYW5jZSBvZiB0eXBlZGVmIEJ5dGUgaW4gemNvbmYuaAorLSBDb3JyZWN0IFR1cmJvIEMgbWVtb3J5IGFsbG9jYXRpb24gd2hlbiB1bmRlciBMaW51eAorLSBVc2UgbGliei5hIGluc3RlYWQgb2YgLWx6IGluIE1ha2VmaWxlIChhc3N1cmUgdXNlIG9mIGNvbXBpbGVkIGxpYnJhcnkpCistIFVwZGF0ZSBjb25maWd1cmUgdG8gY2hlY2sgZm9yIHNucHJpbnRmIG9yIHZzbnByaW50ZiBmdW5jdGlvbnMgYW5kIHRoZWlyCisgIHJldHVybiB2YWx1ZSwgd2FybiBkdXJpbmcgbWFrZSBpZiB1c2luZyBhbiBpbnNlY3VyZSBmdW5jdGlvbgorLSBGaXggY29uZmlndXJlIHByb2JsZW0gd2l0aCBjb21waWxlLXRpbWUga25vd2xlZGdlIG9mIEhBVkVfVU5JU1REX0ggdGhhdAorICBpcyBsb3N0IHdoZW4gbGlicmFyeSBpcyB1c2VkLS1yZXNvbHV0aW9uIGlzIHRvIGJ1aWxkIG5ldyB6Y29uZi5oCistIERvY3VtZW50YXRpb24gaW1wcm92ZW1lbnRzIChpbiB6bGliLmgpOgorICAgIC0gRG9jdW1lbnQgcmF3IGRlZmxhdGUgYW5kIGluZmxhdGUKKyAgICAtIFVwZGF0ZSBSRkNzIFVSTAorICAgIC0gUG9pbnQgb3V0IHRoYXQgemxpYiBhbmQgZ3ppcCBmb3JtYXRzIGFyZSBkaWZmZXJlbnQKKyAgICAtIE5vdGUgdGhhdCBaX0JVRl9FUlJPUiBpcyBub3QgZmF0YWwKKyAgICAtIERvY3VtZW50IHN0cmluZyBsaW1pdCBmb3IgZ3pwcmludGYoKSBhbmQgcG9zc2libGUgYnVmZmVyIG92ZXJmbG93CisgICAgLSBOb3RlIHJlcXVpcmVtZW50IG9uIGF2YWlsX291dCB3aGVuIGZsdXNoaW5nCisgICAgLSBOb3RlIHBlcm1pdHRlZCB2YWx1ZXMgb2YgZmx1c2ggcGFyYW1ldGVyIG9mIGluZmxhdGUoKQorLSBBZGQgc29tZSBGQVFzIChhbmQgZXZlbiBhbnN3ZXJzKSB0byB0aGUgRkFRCistIEFkZCBjb250cmliL2luZmxhdGU4Ni8gZm9yIHg4NiBmYXN0ZXIgaW5mbGF0ZQorLSBBZGQgY29udHJpYi9ibGFzdC8gZm9yIFBLV2FyZSBEYXRhIENvbXByZXNzaW9uIExpYnJhcnkgZGVjb21wcmVzc2lvbgorLSBBZGQgY29udHJpYi9wdWZmLyBzaW1wbGUgaW5mbGF0ZSBmb3IgZGVmbGF0ZSBmb3JtYXQgZGVzY3JpcHRpb24KKworQ2hhbmdlcyBpbiAxLjEuNCAoMTEgTWFyY2ggMjAwMikKKy0gWkZSRUUgd2FzIHJlcGVhdGVkIG9uIHNhbWUgYWxsb2NhdGlvbiBvbiBzb21lIGVycm9yIGNvbmRpdGlvbnMKKyAgVGhpcyBjcmVhdGVzIGEgc2VjdXJpdHkgcHJvYmxlbSBkZXNjcmliZWQgaW4KKyAgaHR0cDovL3d3dy56bGliLm9yZy9hZHZpc29yeS0yMDAyLTAzLTExLnR4dAorLSBSZXR1cm5lZCBpbmNvcnJlY3QgZXJyb3IgKFpfTUVNX0VSUk9SKSBvbiBzb21lIGludmFsaWQgZGF0YQorLSBBdm9pZCBhY2Nlc3NlcyBiZWZvcmUgd2luZG93IGZvciBpbnZhbGlkIGRpc3RhbmNlcyB3aXRoIGluZmxhdGUgd2luZG93CisgIGxlc3MgdGhhbiAzMksKKy0gZm9yY2Ugd2luZG93Qml0cyA+IDggdG8gYXZvaWQgYSBidWcgaW4gdGhlIGVuY29kZXIgZm9yIGEgd2luZG93IHNpemUKKyAgb2YgMjU2IGJ5dGVzLiAoQSBjb21wbGV0ZSBmaXggd2lsbCBiZSBhdmFpbGFibGUgaW4gMS4xLjUpCisKK0NoYW5nZXMgaW4gMS4xLjMgKDkgSnVseSAxOTk4KQorLSBmaXggImFuIGluZmxhdGUgaW5wdXQgYnVmZmVyIGJ1ZyB0aGF0IHNob3dzIHVwIG9uIHJhcmUgYnV0IHBlcnNpc3RlbnQKKyAgb2NjYXNpb25zIiAoTWFyaykKKy0gZml4IGd6cmVhZCBhbmQgZ3p0ZWxsIGZvciBjb25jYXRlbmF0ZWQgLmd6IGZpbGVzIChEaWRpZXIgTGUgQm90bGFuKQorLSBmaXggZ3pzZWVrKC4uLiwgU0VFS19TRVQpIGluIHdyaXRlIG1vZGUKKy0gZml4IGNyYyBjaGVjayBhZnRlciBhIGd6ZWVrIChGcmFuayBGYXViZXJ0KQorLSBmaXggbWluaXVuemlwIHdoZW4gdGhlIGxhc3QgZW50cnkgaW4gYSB6aXAgZmlsZSBpcyBpdHNlbGYgYSB6aXAgZmlsZQorICAoSiBMaWxsZ2UpCistIGFkZCBjb250cmliL2FzbTU4NiBhbmQgY29udHJpYi9hc202ODYgKEJyaWFuIFJhaXRlcikKKyAgU2VlIGh0dHA6Ly93d3cubXVwcGV0bGFicy5jb20vfmJyZWFkYm94L3NvZnR3YXJlL2Fzc2VtYmx5Lmh0bWwKKy0gYWRkIHN1cHBvcnQgZm9yIERlbHBoaSAzIGluIGNvbnRyaWIvZGVscGhpIChCb2IgRGVsbGFjYSkKKy0gYWRkIHN1cHBvcnQgZm9yIEMrK0J1aWxkZXIgMyBhbmQgRGVscGhpIDMgaW4gY29udHJpYi9kZWxwaGkyIChEYXZpZGUgTW9yZXR0aSkKKy0gZG8gbm90IGV4aXQgcHJlbWF0dXJlbHkgaW4gdW50Z3ogaWYgMCBhdCBzdGFydCBvZiBibG9jayAoTWFnbnVzIEhvbG1ncmVuKQorLSB1c2UgbWFjcm8gRVhURVJOIGluc3RlYWQgb2YgZXh0ZXJuIHRvIHN1cHBvcnQgRExMIGZvciBCZU9TIChTYW5kZXIgU3Rva3MpCistIGFkZGVkIGEgRkFRIGZpbGUKKworLSBTdXBwb3J0IGd6ZG9wZW4gb24gTWFjIHdpdGggTWV0cm93ZXJrcyAoSmFzb24gTGluaGFydCkKKy0gRG8gbm90IHJlZGVmaW5lIEJ5dGUgb24gTWFjIChCcmFkIFBldHRpdCAmIEphc29uIExpbmhhcnQpCistIGRlZmluZSBTRUVLX0VORCB0b28gaWYgU0VFS19TRVQgaXMgbm90IGRlZmluZWQgKEFsYmVydCBDaGluLUEtWW91bmcpCistIGF2b2lkIHNvbWUgd2FybmluZ3Mgd2l0aCBCb3JsYW5kIEMgKFRvbSBUYW5uZXIpCistIGZpeCBhIHByb2JsZW0gaW4gY29udHJpYi9taW5pemlwL3ppcC5jIGZvciAxNi1iaXQgTVNET1MgKEdpbGxlcyBWb2xsYW50KQorLSBlbXVsYXRlIHV0aW1lKCkgZm9yIFdJTjMyIGluIGNvbnRyaWIvdW50Z3ogIChHaWxsZXMgVm9sbGFudCkKKy0gYWxsb3cgc2V2ZXJhbCBhcmd1bWVudHMgdG8gY29uZmlndXJlIChUaW0gTW9vbmV5LCBGcm9kbyBMb29pamFhcmQpCistIHVzZSBsaWJkaXIgYW5kIGluY2x1ZGVkaXIgaW4gTWFrZWZpbGUuaW4gKFRpbSBNb29uZXkpCistIHN1cHBvcnQgc2hhcmVkIGxpYnJhcmllcyBvbiBPU0YxIFY0IChUaW0gTW9vbmV5KQorLSByZW1vdmUgc29fbG9jYXRpb25zIGluICJtYWtlIGNsZWFuIiAgKFRpbSBNb29uZXkpCistIGZpeCBtYWtldHJlZS5jIGNvbXBpbGF0aW9uIGVycm9yIChHbGVubiwgTWFyaykKKy0gUHl0aG9uIGludGVyZmFjZSB0byB6bGliIG5vdyBpbiBQeXRob24gMS41IChKZXJlbXkgSHlsdG9uKQorLSBuZXcgTWFrZWZpbGUucmlzY29zIChSaWNoIFdhbGtlcikKKy0gaW5pdGlhbGl6ZSBzdGF0aWMgZGVzY3JpcHRvcnMgaW4gdHJlZXMuYyBmb3IgZW1iZWRkZWQgdGFyZ2V0cyAoTmljayBTbWl0aCkKKy0gdXNlICJmb28tZ3oiIGluIGV4YW1wbGUuYyBmb3IgUklTQ09TIGFuZCBWTVMgKE5pY2sgU21pdGgpCistIGFkZCB0aGUgT1MvMiBmaWxlcyBpbiBNYWtlZmlsZS5pbiB0b28gKEFuZHJldyBaYWJvbG90bnkpCistIGZpeCBmZG9wZW4gYW5kIGhhbGxvYyBtYWNyb3MgZm9yIE1pY3Jvc29mdCBDIDYuMCAoVG9tIExhbmUpCistIGZpeCBtYWtldHJlZS5jIHRvIGFsbG93IGNsZWFuIGNvbXBpbGF0aW9uIG9mIGluZmZpeGVkLmggKE1hcmspCistIGZpeCBwYXJhbWV0ZXIgY2hlY2sgaW4gZGVmbGF0ZUNvcHkgKEd1bnRoZXIgTmlrbCkKKy0gY2xlYW51cCB0cmVlcy5jLCB1c2UgY29tcHJlc3NlZF9sZW4gb25seSBpbiBkZWJ1ZyBtb2RlIChDaHJpc3RpYW4gU3BpZWxlcikKKy0gTWFueSBwb3J0YWJpbGl0eSBwYXRjaGVzIGJ5IENocmlzdGlhbiBTcGllbGVyOgorICAuIHp1dGlsLmMsIHp1dGlsLmg6IGFkZGVkICJjb25zdCIgZm9yIHptZW0qCisgIC4gTWFrZV92bXMuY29tOiBmaXhlZCBzb21lIHR5cG9zCisgIC4gTWFrZV92bXMuY29tOiBtc2Rvcy9NYWtlZmlsZS4qOiByZW1vdmVkIHp1dGlsLmggZnJvbSBzb21lIGRlcGVuZGVuY3kgbGlzdHMKKyAgLiBtc2Rvcy9NYWtlZmlsZS5tc2M6IHJlbW92ZSAiZGVmYXVsdCBydGwgbGluayBsaWJyYXJ5IiBpbmZvIGZyb20gb2JqIGZpbGVzCisgIC4gbXNkb3MvTWFrZWZpbGUuKjogdXNlIG1vZGVsLWRlcGVuZGVudCBuYW1lIGZvciB0aGUgYnVpbHQgemxpYiBsaWJyYXJ5CisgIC4gbXNkb3MvTWFrZWZpbGUuZW14LCBudC9NYWtlZmlsZS5lbXgsIG50L01ha2VmaWxlLmdjYzoKKyAgICAgbmV3IG1ha2VmaWxlcywgZm9yIGVteCAoRE9TL09TMiksIGVteCZyc3hudCBhbmQgbWluZ3czMiAoV2luZG93cyA5eCAvIE5UKQorLSB1c2UgZGVmaW5lIGluc3RlYWQgb2YgdHlwZWRlZiBmb3IgQnl0ZWYgYWxzbyBmb3IgTVNDIHNtYWxsL21lZGl1bSAoVG9tIExhbmUpCistIHJlcGxhY2UgX19mYXIgd2l0aCBfZmFyIGZvciBiZXR0ZXIgcG9ydGFiaWxpdHkgKENocmlzdGlhbiBTcGllbGVyLCBUb20gTGFuZSkKKy0gZml4IHRlc3QgZm9yIGVycm5vLmggaW4gY29uZmlndXJlIChUaW0gTmV3c2hhbSkKKworQ2hhbmdlcyBpbiAxLjEuMiAoMTkgTWFyY2ggOTgpCistIGFkZGVkIGNvbnRyaWIvbWluemlwLCBtaW5pIHppcCBhbmQgdW56aXAgYmFzZWQgb24gemxpYiAoR2lsbGVzIFZvbGxhbnQpCisgIFNlZSBodHRwOi8vd3d3LndpbmltYWdlLmNvbS96TGliRGxsL3VuemlwLmh0bWwKKy0gcHJlaW5pdGlhbGl6ZSB0aGUgaW5mbGF0ZSB0YWJsZXMgZm9yIGZpeGVkIGNvZGVzLCB0byBtYWtlIHRoZSBjb2RlCisgIGNvbXBsZXRlbHkgdGhyZWFkIHNhZmUgKE1hcmspCistIHNvbWUgc2ltcGxpZmljYXRpb25zIGFuZCBzbGlnaHQgc3BlZWQtdXAgdG8gdGhlIGluZmxhdGUgY29kZSAoTWFyaykKKy0gZml4IGd6ZW9mIG9uIG5vbi1jb21wcmVzc2VkIGZpbGVzIChBbGxhbiBTY2hydW0pCistIGFkZCAtc3RkMSBvcHRpb24gaW4gY29uZmlndXJlIGZvciBPU0YxIHRvIGZpeCBnenByaW50ZiAoTWFydGluIE1va3JlanMpCistIHVzZSBkZWZhdWx0IHZhbHVlIG9mIDRLIGZvciBaX0JVRlNJWkUgZm9yIDE2LWJpdCBNU0RPUyAoVGltIFdlZ25lciArIEdsZW5uKQorLSBhZGRlZCBvczIvTWFrZWZpbGUuZGVmIGFuZCBvczIvemxpYi5kZWYgKEFuZHJldyBaYWJvbG90bnkpCistIGFkZCBzaGFyZWQgbGliIHN1cHBvcnQgZm9yIFVOSVhfU1Y0LjJNUCAoTUFUU1VVUkEgVGFrYW5vcmkpCistIGRvIG5vdCB3cmFwIGV4dGVybiAiQyIgYXJvdW5kIHN5c3RlbSBpbmNsdWRlcyAoVG9tIExhbmUpCistIG1lbnRpb24gemxpYiBiaW5kaW5nIGZvciBUQ0wgaW4gUkVBRE1FIChBbmRyZWFzIEt1cHJpZXMpCistIGFkZGVkIGFtaWdhL01ha2VmaWxlLnB1cCBmb3IgQW1pZ2EgcG93ZXJVUCBTQVMvQyBQUEMgKEFuZHJlYXMgS2xlaW5lcnQpCistIGFsbG93ICJtYWtlIGluc3RhbGwgcHJlZml4PS4uLiIgZXZlbiBhZnRlciBjb25maWd1cmUgKEdsZW5uIFJhbmRlcnMtUGVocnNvbikKKy0gYWxsb3cgImNvbmZpZ3VyZSAtLXByZWZpeCAkSE9NRSIgKFRpbSBNb29uZXkpCistIHJlbW92ZSB3YXJuaW5ncyBpbiBleGFtcGxlLmMgYW5kIGd6aW8uYyAoR2xlbm4gUmFuZGVycy1QZWhyc29uKQorLSBtb3ZlIE1ha2VmaWxlLnNhcyB0byBhbWlnYS9NYWtlZmlsZS5zYXMKKworQ2hhbmdlcyBpbiAxLjEuMSAoMjcgRmViIDk4KQorLSBmaXggbWFjcm9zIF90cl90YWxseV8qIGluIGRlZmxhdGUuaCBmb3IgZGVidWcgbW9kZSAgKEdsZW5uIFJhbmRlcnMtUGVocnNvbikKKy0gcmVtb3ZlIGJsb2NrIHRydW5jYXRpb24gaGV1cmlzdGljIHdoaWNoIGhhZCB2ZXJ5IG1hcmdpbmFsIGVmZmVjdCBmb3IgemxpYgorICAoc21hbGxlciBsaXRfYnVmc2l6ZSB0aGFuIGluIGd6aXAgMS4yLjQpIGFuZCBkZWdyYWRlZCBhIGxpdHRsZSB0aGUKKyAgY29tcHJlc3Npb24gcmF0aW8gb24gc29tZSBmaWxlcy4gVGhpcyBhbHNvIGFsbG93cyBpbmxpbmluZyBfdHJfdGFsbHkgZm9yCisgIG1hdGNoZXMgaW4gZGVmbGF0ZV9zbG93CistIGFkZGVkIG1zZG9zL01ha2VmaWxlLnczMiBmb3IgV0lOMzIgTWljcm9zb2Z0IFZpc3VhbCBDKysgKEJvYiBGcmF6aWVyKQorCitDaGFuZ2VzIGluIDEuMS4wICgyNCBGZWIgOTgpCistIGRvIG5vdCByZXR1cm4gU1RSRUFNX0VORCBwcmVtYXR1cmVseSBpbiBpbmZsYXRlIChKb2huIEJvd2xlcikKKy0gcmV2ZXJ0IHRvIHRoZSB6bGliIDEuMC44IGluZmxhdGUgdG8gYXZvaWQgdGhlIGdjYyAyLjguMCBidWcgKEplcmVteSBCdWhsZXIpCistIGNvbXBpbGUgd2l0aCAtREZBU1RFU1QgdG8gZ2V0IGNvbXByZXNzaW9uIGNvZGUgb3B0aW1pemVkIGZvciBzcGVlZCBvbmx5CistIGluIG1pbmlnemlwLCB0cnkgbW1hcCdpbmcgdGhlIGlucHV0IGZpbGUgZmlyc3QgKE1pZ3VlbCBBbGJyZWNodCkKKy0gaW5jcmVhc2Ugc2l6ZSBvZiBJL08gYnVmZmVycyBpbiBtaW5pZ3ppcC5jIGFuZCBnemlvLmMgKG5vdCBhIGJpZyBnYWluCisgIG9uIFN1biBidXQgc2lnbmlmaWNhbnQgb24gSFApCisKKy0gYWRkIGEgcG9pbnRlciB0byBleHBlcmltZW50YWwgdW56aXAgbGlicmFyeSBpbiBSRUFETUUgKEdpbGxlcyBWb2xsYW50KQorLSBpbml0aWFsaXplIHZhcmlhYmxlIGdjYyBpbiBjb25maWd1cmUgKENocmlzIEhlcmJvcnRoKQorCitDaGFuZ2VzIGluIDEuMC45ICgxNyBGZWIgMTk5OCkKKy0gYWRkZWQgZ3pwdXRzIGFuZCBnemdldHMgZnVuY3Rpb25zCistIGRvIG5vdCBjbGVhciBlb2YgZmxhZyBpbiBnenNlZWsgKE1hcmsgRGlla2hhbnMpCistIGZpeCBnenNlZWsgZm9yIGZpbGVzIGluIHRyYW5zcGFyZW50IG1vZGUgKE1hcmsgRGlla2hhbnMpCistIGRvIG5vdCBhc3N1bWUgdGhhdCB2c3ByaW50ZiByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiAoSmVucyBLcmlua2UpCistIHJlcGxhY2UgRVhQT1JUIHdpdGggWkVYUE9SVCB0byBhdm9pZCBjb25mbGljdCB3aXRoIG90aGVyIHByb2dyYW1zCistIGFkZGVkIGNvbXByZXNzMiBpbiB6Y29uZi5oLCB6bGliLmRlZiwgemxpYi5kbnQKKy0gbmV3IGFzbSBjb2RlIGZyb20gR2lsbGVzIFZvbGxhbnQgaW4gY29udHJpYi9hc20zODYKKy0gc2ltcGxpZnkgdGhlIGluZmxhdGUgY29kZSAoTWFyayk6CisgLiBSZXBsYWNlIFpBTExPQydzIGluIGh1ZnRfYnVpbGQoKSB3aXRoIHNpbmdsZSBaQUxMT0MgaW4gaW5mbGF0ZV9ibG9ja3NfbmV3KCkKKyAuIFpBTExPQyB0aGUgbGVuZ3RoIGxpc3QgaW4gaW5mbGF0ZV90cmVlc19maXhlZCgpIGluc3RlYWQgb2YgdXNpbmcgc3RhY2sKKyAuIFpBTExPQyB0aGUgdmFsdWUgYXJlYSBmb3IgaHVmdF9idWlsZCgpIGluc3RlYWQgb2YgdXNpbmcgc3RhY2sKKyAuIFNpbXBsaWZ5IFpfRklOSVNIIGNoZWNrIGluIGluZmxhdGUoKQorCistIEF2b2lkIGdjYyAyLjguMCBjb21wYXJpc29uIGJ1ZyBhIGxpdHRsZSBkaWZmZXJlbnRseSB0aGFuIHpsaWIgMS4wLjgKKy0gaW4gaW5mdHJlZXMuYywgYXZvaWQgY2MgLU8gYnVnIG9uIEhQIChGYXJzaGlkIEVsYWhpKQorLSBpbiB6Y29uZi5oIG1vdmUgdGhlIFpMSUJfRExMIHN0dWZmIGVhcmxpZXIgdG8gYXZvaWQgcHJvYmxlbXMgd2l0aAorICB0aGUgZGVjbGFyYXRpb24gb2YgRkFSIChHaWxsZXMgVk9sbGFudCkKKy0gaW5zdGFsbCBsaWJ6LnNvKiB3aXRoIG1vZGUgNzU1IChleGVjdXRhYmxlKSBpbnN0ZWFkIG9mIDY0NCAoTWFyYyBMZWhtYW5uKQorLSByZWFkX2J1ZiBidWYgcGFyYW1ldGVyIG9mIHR5cGUgQnl0ZWYqIGluc3RlYWQgb2YgY2hhcmYqCistIHptZW1jcHkgcGFyYW1ldGVycyBhcmUgb2YgdHlwZSBCeXRlZiosIG5vdCBjaGFyZiogKEpvc2VwaCBTdHJvdXQpCistIGRvIG5vdCByZWRlY2xhcmUgdW5saW5rIGluIG1pbmlnemlwLmMgZm9yIFdJTjMyIChKb2huIEJvd2xlcikKKy0gZml4IGNoZWNrIGZvciBwcmVzZW5jZSBvZiBkaXJlY3RvcmllcyBpbiAibWFrZSBpbnN0YWxsIiAoSWFuIFdpbGxpcykKKworQ2hhbmdlcyBpbiAxLjAuOCAoMjcgSmFuIDE5OTgpCistIGZpeGVkIG9mZnNldHMgaW4gY29udHJpYi9hc20zODYvZ3ZtYXQzMi5hc20gKEdpbGxlcyBWb2xsYW50KQorLSBmaXggZ3pnZXRjIGFuZCBnenB1dGMgZm9yIGJpZyBlbmRpYW4gc3lzdGVtcyAoTWFya3VzIE9iZXJodW1lcikKKy0gYWRkZWQgY29tcHJlc3MyKCkgdG8gYWxsb3cgc2V0dGluZyB0aGUgY29tcHJlc3Npb24gbGV2ZWwKKy0gaW5jbHVkZSBzeXMvdHlwZXMuaCB0byBnZXQgb2ZmX3Qgb24gc29tZSBzeXN0ZW1zIChNYXJjIExlaG1hbm4gJiBRaW5nTG9uZykKKy0gdXNlIGNvbnN0YW50IGFycmF5cyBmb3IgdGhlIHN0YXRpYyB0cmVlcyBpbiB0cmVlcy5jIGluc3RlYWQgb2YgY29tcHV0aW5nCisgIHRoZW0gYXQgcnVuIHRpbWUgKHRoYW5rcyB0byBLZW4gUmFlYnVybiBmb3IgdGhpcyBzdWdnZXN0aW9uKS4gVG8gY3JlYXRlCisgIHRyZWVzLmgsIGNvbXBpbGUgd2l0aCBHRU5fVFJFRVNfSCBhbmQgcnVuICJtYWtlIHRlc3QiCistIGNoZWNrIHJldHVybiBjb2RlIG9mIGV4YW1wbGUgaW4gIm1ha2UgdGVzdCIgYW5kIGRpc3BsYXkgcmVzdWx0CistIHBhc3MgbWluaWd6aXAgY29tbWFuZCBsaW5lIG9wdGlvbnMgdG8gZmlsZV9jb21wcmVzcworLSBzaW1wbGlmeWluZyBjb2RlIG9mIGluZmxhdGVTeW5jIHRvIGF2b2lkIGdjYyAyLjggYnVnCisKKy0gc3VwcG9ydCBDQz0iZ2NjIC1XYWxsIiBpbiBjb25maWd1cmUgLXMgKFFpbmdMb25nKQorLSBhdm9pZCBhIGZsdXNoIGNhdXNlZCBieSBmdGVsbCBpbiBnem9wZW4gZm9yIHdyaXRlIG1vZGUgKEtlbiBSYWVidXJuKQorLSBmaXggdGVzdCBmb3Igc2hhcmVkIGxpYnJhcnkgc3VwcG9ydCB0byBhdm9pZCBjb21waWxlciB3YXJuaW5ncworLSB6bGliLmxpYiAtPiB6bGliLmRsbCBpbiBtc2Rvcy96bGliLnJjIChHaWxsZXMgVm9sbGFudCkKKy0gY2hlY2sgZm9yIFRBUkdFVF9PU19NQUMgaW4gYWRkaXRpb24gdG8gTUFDT1MgKEJyYWQgUGV0dGl0KQorLSBkbyBub3QgdXNlIGZkb3BlbiBmb3IgTWV0cm93ZXJrcyBvbiBNYWMgKEJyYWQgUGV0dGl0KSkKKy0gYWRkIGNoZWNrcyBmb3IgZ3pwdXRjIGFuZCBnenB1dGMgaW4gZXhhbXBsZS5jCistIGF2b2lkIHdhcm5pbmdzIGluIGd6aW8uYyBhbmQgZGVmbGF0ZS5jIChBbmRyZWFzIEtsZWluZXJ0KQorLSB1c2UgY29uc3QgZm9yIHRoZSBDUkMgdGFibGUgKEtlbiBSYWVidXJuKQorLSBmaXhlZCAibWFrZSB1bmluc3RhbGwiIGZvciBzaGFyZWQgbGlicmFyaWVzCistIHVzZSBUcmFjZXYgaW5zdGVhZCBvZiBUcmFjZSBpbiBpbmZibG9jay5jCistIGluIGV4YW1wbGUuYyB1c2UgY29ycmVjdCBjb21wcmVzc2VkIGxlbmd0aCBmb3IgdGVzdF9zeW5jCistIHN1cHByZXNzICt2bm9jb21wYXR3YXJuaW5ncyBpbiBjb25maWd1cmUgZm9yIEhQVVggKG5vdCBhbHdheXMgc3VwcG9ydGVkKQorCitDaGFuZ2VzIGluIDEuMC43ICgyMCBKYW4gMTk5OCkKKy0gZml4IGd6c2VlayB3aGljaCB3YXMgYnJva2VuIGluIHdyaXRlIG1vZGUKKy0gcmV0dXJuIGVycm9yIGZvciBnenNlZWsgdG8gbmVnYXRpdmUgYWJzb2x1dGUgcG9zaXRpb24KKy0gZml4IGNvbmZpZ3VyZSBmb3IgTGludXggKENodW4tQ2h1bmcgQ2hlbikKKy0gaW5jcmVhc2Ugc3RhY2sgc3BhY2UgZm9yIE1TQyAoVGltIFdlZ25lcikKKy0gZ2V0X2NyY190YWJsZSBhbmQgaW5mbGF0ZVN5bmNQb2ludCBhcmUgRVhQT1JUZWQgKEdpbGxlcyBWb2xsYW50KQorLSBkZWZpbmUgRVhQT1JUVkEgZm9yIGd6cHJpbnRmIChHaWxsZXMgVm9sbGFudCkKKy0gYWRkZWQgbWFuIHBhZ2UgemxpYi4zIChSaWNrIFJvZGdlcnMpCistIGZvciBjb250cmliL3VudGd6LCBmaXggbWFrZWRpcigpIGFuZCBpbXByb3ZlIE1ha2VmaWxlCisKKy0gY2hlY2sgZ3pzZWVrIGluIHdyaXRlIG1vZGUgaW4gZXhhbXBsZS5jCistIGFsbG9jYXRlIGV4dHJhIGJ1ZmZlciBmb3Igc2Vla3Mgb25seSBpZiBnenNlZWsgaXMgYWN0dWFsbHkgY2FsbGVkCistIGF2b2lkIHNpZ25lZC91bnNpZ25lZCBjb21wYXJpc29ucyAoVGltIFdlZ25lciwgR2lsbGVzIFZvbGxhbnQpCistIGFkZCBpbmZsYXRlU3luY1BvaW50IGluIHpjb25mLmgKKy0gZml4IGxpc3Qgb2YgZXhwb3J0ZWQgZnVuY3Rpb25zIGluIG50L3psaWIuZG50IGFuZCBtZHNvcy96bGliLmRlZgorCitDaGFuZ2VzIGluIDEuMC42ICgxOSBKYW4gMTk5OCkKKy0gYWRkIGZ1bmN0aW9ucyBnenByaW50ZiwgZ3pwdXRjLCBnemdldGMsIGd6dGVsbCwgZ3plb2YsIGd6c2VlaywgZ3pyZXdpbmQgYW5kCisgIGd6c2V0cGFyYW1zICh0aGFua3MgdG8gUm9sYW5kIEdpZXJzaWcgYW5kIEtldmluIFJ1bGFuZCBmb3Igc29tZSBvZiB0aGlzIGNvZGUpCistIEZpeCBhIGRlZmxhdGUgYnVnIG9jY3VycmluZyBvbmx5IHdpdGggY29tcHJlc3Npb24gbGV2ZWwgMCAodGhhbmtzIHRvCisgIEFuZHkgQnVja2xlciBmb3IgZmluZGluZyB0aGlzIG9uZSkKKy0gSW4gbWluaWd6aXAsIHBhc3MgdHJhbnNwYXJlbnRseSBhbHNvIHRoZSBmaXJzdCBieXRlIGZvciAuWiBmaWxlcworLSByZXR1cm4gWl9CVUZfRVJST1IgaW5zdGVhZCBvZiBaX09LIGlmIG91dHB1dCBidWZmZXIgZnVsbCBpbiB1bmNvbXByZXNzKCkKKy0gY2hlY2sgWl9GSU5JU0ggaW4gaW5mbGF0ZSAodGhhbmtzIHRvIE1hcmMgU2NobHVwZXIpCistIEltcGxlbWVudCBkZWZsYXRlQ29weSAodGhhbmtzIHRvIEFkYW0gQ29zdGVsbG8pCistIG1ha2Ugc3RhdGljIGxpYnJhcmllcyBieSBkZWZhdWx0IGluIGNvbmZpZ3VyZSwgYWRkIC0tc2hhcmVkIG9wdGlvbgorLSBtb3ZlIE1TRE9TIG9yIFdpbmRvd3Mgc3BlY2lmaWMgZmlsZXMgdG8gZGlyZWN0b3J5IG1zZG9zCistIHN1cHByZXNzIHRoZSBub3Rpb24gb2YgcGFydGlhbCBmbHVzaCB0byBzaW1wbGlmeSB0aGUgaW50ZXJmYWNlCisgIChidXQgdGhlIHN5bWJvbCBaX1BBUlRJQUxfRkxVU0ggaXMga2VwdCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIDEuMC40KQorLSBzdXBwcmVzcyBoaXN0b3J5IGJ1ZmZlciBwcm92aWRlZCBieSBhcHBsaWNhdGlvbiB0byBzaW1wbGlmeSB0aGUgaW50ZXJmYWNlCisgICh0aGlzIGZlYXR1cmUgd2FzIG5vdCBpbXBsZW1lbnRlZCBhbnl3YXkgaW4gMS4wLjQpCistIG5leHRfaW4gYW5kIGF2YWlsX2luIG11c3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGNhbGxpbmcgaW5mbGF0ZUluaXQgb3IKKyAgaW5mbGF0ZUluaXQyCistIGFkZCBFWFBPUlQgaW4gYWxsIGV4cG9ydGVkIGZ1bmN0aW9ucyAoZm9yIFdpbmRvd3MgRExMKQorLSBhZGRlZCBNYWtlZmlsZS5udCAodGhhbmtzIHRvIFN0ZXBoZW4gV2lsbGlhbXMpCistIGFkZGVkIHRoZSB1bnN1cHBvcnRlZCAiY29udHJpYiIgZGlyZWN0b3J5OgorICAgY29udHJpYi9hc20zODYvIGJ5IEdpbGxlcyBWb2xsYW50IDxpbmZvQHdpbmltYWdlLmNvbT4KKyAgICAgICAgMzg2IGFzbSBjb2RlIHJlcGxhY2luZyBsb25nZXN0X21hdGNoKCkKKyAgIGNvbnRyaWIvaW9zdHJlYW0vIGJ5IEtldmluIFJ1bGFuZCA8a2V2aW5Acm9kaW4ud3VzdGwuZWR1PgorICAgICAgICBBIEMrKyBJL08gc3RyZWFtcyBpbnRlcmZhY2UgdG8gdGhlIHpsaWIgZ3oqIGZ1bmN0aW9ucworICAgY29udHJpYi9pb3N0cmVhbTIvICBieSBUeWdlIEzDuHZzZXQgPFR5Z2UuTG92c2V0QGNtci5ubz4KKyAgICAgICAgQW5vdGhlciBDKysgSS9PIHN0cmVhbXMgaW50ZXJmYWNlCisgICBjb250cmliL3VudGd6LyAgYnkgIlBlZHJvIEEuIEFyYW5kYSBHdXRpXGlycmV6IiA8cGFhZ0B0aWQuZXM+CisgICAgICAgIEEgdmVyeSBzaW1wbGUgdGFyLmd6IGZpbGUgZXh0cmFjdG9yIHVzaW5nIHpsaWIKKyAgIGNvbnRyaWIvdmlzdWFsLWJhc2ljLnR4dCBieSBDYXJsb3MgUmlvcyA8Y19yaW9zQHNvbmRhLmNsPgorICAgICAgICBIb3cgdG8gdXNlIGNvbXByZXNzKCksIHVuY29tcHJlc3MoKSBhbmQgdGhlIGd6KiBmdW5jdGlvbnMgZnJvbSBWQgorLSBwYXNzIHBhcmFtcyAtZiAoZmlsdGVyZWQgZGF0YSksIC1oIChodWZmbWFuIG9ubHkpLCAtMSB0byAtOSAoY29tcHJlc3Npb24KKyAgbGV2ZWwpIGluIG1pbmlnemlwICh0aGFua3MgdG8gVG9tIExhbmUpCisKKy0gdXNlIGNvbnN0IGZvciByb21tYWJsZSBjb25zdGFudHMgaW4gZGVmbGF0ZQorLSBhZGRlZCB0ZXN0IGZvciBnenNlZWsgYW5kIGd6dGVsbCBpbiBleGFtcGxlLmMKKy0gYWRkIHVuZG9jdW1lbnRlZCBmdW5jdGlvbiBpbmZsYXRlU3luY1BvaW50KCkgKGhhY2sgZm9yIFBhdWwgTWFja2VycmFzKQorLSBhZGQgdW5kb2N1bWVudGVkIGZ1bmN0aW9uIHpFcnJvciB0byBjb252ZXJ0IGVycm9yIGNvZGUgdG8gc3RyaW5nCisgIChmb3IgVGltIFNtaXRoZXJzKQorLSBBbGxvdyBjb21waWxhdGlvbiBvZiBnemlvIHdpdGggLUROT19ERUZMQVRFIHRvIGF2b2lkIHRoZSBjb21wcmVzc2lvbiBjb2RlCistIFVzZSBkZWZhdWx0IG1lbWNweSBmb3IgU3ltYW50ZWMgTVNET1MgY29tcGlsZXIKKy0gQWRkIEVYUE9SVCBrZXl3b3JkIGZvciBjaGVja19mdW5jIChuZWVkZWQgZm9yIFdpbmRvd3MgRExMKQorLSBhZGQgY3VycmVudCBkaXJlY3RvcnkgdG8gTERfTElCUkFSWV9QQVRIIGZvciAibWFrZSB0ZXN0IgorLSBjcmVhdGUgYWxzbyBhIGxpbmsgZm9yIGxpYnouc28uMQorLSBhZGRlZCBzdXBwb3J0IGZvciBGVUpJVFNVIFVYUC9EUyAodGhhbmtzIHRvIFRvc2hpYWtpIE5vbXVyYSkKKy0gdXNlICQoU0hBUkVETElCKSBpbnN0ZWFkIG9mIGxpYnouc28gaW4gTWFrZWZpbGUuaW4gKGZvciBIUFVYKQorLSBhZGRlZCAtc29uYW1lIGZvciBMaW51eCBpbiBjb25maWd1cmUgKENodW4tQ2h1bmcgQ2hlbiwKKy0gYXNzaWduIG51bWJlcnMgdG8gdGhlIGV4cG9ydGVkIGZ1bmN0aW9ucyBpbiB6bGliLmRlZiAoZm9yIFdpbmRvd3MgRExMKQorLSBhZGQgYWR2aWNlIGluIHpsaWIuaCBmb3IgYmVzdCB1c2FnZSBvZiBkZWZsYXRlU2V0RGljdGlvbmFyeQorLSB3b3JrIGFyb3VuZCBjb21waWxlciBidWcgb24gQXRhcmkgKGNhc3QgWl9OVUxMIGluIGNhbGwgb2Ygcy0+Y2hlY2tmbikKKy0gYWxsb3cgY29tcGlsYXRpb24gd2l0aCBBTlNJIGtleXdvcmRzIG9ubHkgZW5hYmxlZCBmb3IgVHVyYm9DIGluIGxhcmdlIG1vZGVsCistIGF2b2lkICJ2ZXJzaW9uU3RyaW5nIlswXSAoQm9ybGFuZCBidWcpCistIGFkZCBORUVEX0RVTU1ZX1JFVFVSTiBmb3IgQm9ybGFuZAorLSB1c2UgdmFyaWFibGUgel92ZXJib3NlIGZvciB0cmFjaW5nIGluIGRlYnVnIG1vZGUgKEwuIFBldGVyIERldXRzY2gpCistIGFsbG93IGNvbXBpbGF0aW9uIHdpdGggQ0MKKy0gZGVmaW5lZCBTVERDIGZvciBPUy8yIChEYXZpZCBDaGFybGFwKQorLSBsaW1pdCBleHRlcm5hbCBuYW1lcyB0byA4IGNoYXJzIGZvciBNVlMgKFRob21hcyBMdW5kKQorLSBpbiBtaW5pZ3ppcC5jLCB1c2Ugc3RhdGljIGJ1ZmZlcnMgb25seSBmb3IgMTYtYml0IHN5c3RlbXMKKy0gZml4IHN1ZmZpeCBjaGVjayBmb3IgIm1pbmlnemlwIC1kIGZvby5neiIKKy0gZG8gbm90IHJldHVybiBhbiBlcnJvciBmb3IgdGhlIDJuZCBvZiB0d28gY29uc2VjdXRpdmUgZ3pmbHVzaCgpIChGZWxpeCBMZWUpCistIHVzZSBfZmRvcGVuIGluc3RlYWQgb2YgZmRvcGVuIGZvciBNU0MgPj0gNi4wIChUaG9tYXMgRmFuc2xhdSkKKy0gYWRkZWQgbWFrZWxjYy5iYXQgZm9yIGxjYy13aW4zMiAoVG9tIFN0IERlbmlzKQorLSBpbiBNYWtlZmlsZS5kajIsIHVzZSBjb3B5IGFuZCBkZWwgaW5zdGVhZCBvZiBpbnN0YWxsIGFuZCBybSAoRnJhbmsgRG9uYWhvZSkKKy0gQXZvaWQgZXhwYW5kZWQgJElkJC4gVXNlICJyY3MgLWtiIiBvciAiY3ZzIGFkbWluIC1rYiIgdG8gYXZvaWQgSWQgZXhwYW5zaW9uCistIGNoZWNrIGZvciB1bmlzdGQuaCBpbiBjb25maWd1cmUgKGZvciBvZmZfdCkKKy0gcmVtb3ZlIHVzZWxlc3MgY2hlY2sgcGFyYW1ldGVyIGluIGluZmxhdGVfYmxvY2tzX2ZyZWUKKy0gYXZvaWQgdXNlbGVzcyBhc3NpZ25tZW50IG9mIHMtPmNoZWNrIHRvIGl0c2VsZiBpbiBpbmZsYXRlX2Jsb2Nrc19uZXcKKy0gZG8gbm90IGZsdXNoIHR3aWNlIGluIGd6Y2xvc2UgKHRoYW5rcyB0byBLZW4gUmFlYnVybikKKy0gcmVuYW1lIEZPUEVOIGFzIEZfT1BFTiB0byBhdm9pZCBjbGFzaCB3aXRoIC91c3IvaW5jbHVkZS9zeXMvZmlsZS5oCistIHVzZSBOT19FUlJOT19IIGluc3RlYWQgb2YgZW51bWVyYXRpb24gb2Ygb3BlcmF0aW5nIHN5c3RlbXMgd2l0aCBlcnJuby5oCistIHdvcmsgYXJvdW5kIGJ1Z2d5IGZjbG9zZSBvbiBwaXBlcyBmb3IgSFAvVVgKKy0gc3VwcG9ydCB6bGliIERMTCB3aXRoIEJPUkxBTkQgQysrIDUuMCAodGhhbmtzIHRvIEdsZW5uIFJhbmRlcnMtUGVocnNvbikKKy0gZml4IGNvbmZpZ3VyZSBpZiBDQyBpcyBhbHJlYWR5IGVxdWFsIHRvIGdjYworCitDaGFuZ2VzIGluIDEuMC41ICgzIEphbiA5OCkKKy0gRml4IGluZmxhdGUgdG8gdGVybWluYXRlIGdyYWNlZnVsbHkgd2hlbiBmZWQgY29ycnVwdGVkIG9yIGludmFsaWQgZGF0YQorLSBVc2UgY29uc3QgZm9yIHJvbW1hYmxlIGNvbnN0YW50cyBpbiBpbmZsYXRlCistIEVsaW1pbmF0ZSBtZW1vcnkgbGVha3Mgb24gZXJyb3IgY29uZGl0aW9ucyBpbiBpbmZsYXRlCistIFJlbW92ZWQgc29tZSB2ZXN0aWdpYWwgY29kZSBpbiBpbmZsYXRlCistIFVwZGF0ZSB3ZWIgYWRkcmVzcyBpbiBSRUFETUUKKworQ2hhbmdlcyBpbiAxLjAuNCAoMjQgSnVsIDk2KQorLSBJbiB2ZXJ5IHJhcmUgY29uZGl0aW9ucywgZGVmbGF0ZShzLCBaX0ZJTklTSCkgY291bGQgZmFpbCB0byBwcm9kdWNlIGFuIEVPRgorICBiaXQsIHNvIHRoZSBkZWNvbXByZXNzb3IgY291bGQgZGVjb21wcmVzcyBhbGwgdGhlIGNvcnJlY3QgZGF0YSBidXQgd2VudAorICBvbiB0byBhdHRlbXB0IGRlY29tcHJlc3NpbmcgZXh0cmEgZ2FyYmFnZSBkYXRhLiBUaGlzIGFmZmVjdGVkIG1pbmlnemlwIHRvbworLSB6bGliVmVyc2lvbiBhbmQgZ3plcnJvciByZXR1cm4gY29uc3QgY2hhciogKG5lZWRlZCBmb3IgRExMKQorLSBwb3J0IHRvIFJJU0NPUyAobm8gZmRvcGVuLCBubyBtdWx0aXBsZSBkb3RzLCBubyB1bmxpbmssIG5vIGZpbGVubykKKy0gdXNlIHpfZXJyb3Igb25seSBmb3IgREVCVUcgKGF2b2lkIHByb2JsZW0gd2l0aCBETExzKQorCitDaGFuZ2VzIGluIDEuMC4zICgyIEp1bCA5NikKKy0gdXNlIHpfc3RyZWFtcCBpbnN0ZWFkIG9mIHpfc3RyZWFtICosIHdoaWNoIGlzIG5vdyBhIGZhciBwb2ludGVyIGluIE1TRE9TCisgIHNtYWxsIGFuZCBtZWRpdW0gbW9kZWxzOyB0aGlzIG1ha2VzIHRoZSBsaWJyYXJ5IGluY29tcGF0aWJsZSB3aXRoIHByZXZpb3VzCisgIHZlcnNpb25zIGZvciB0aGVzZSBtb2RlbHMuIChObyBlZmZlY3QgaW4gbGFyZ2UgbW9kZWwgb3Igb24gb3RoZXIgc3lzdGVtcy4pCistIHJldHVybiBPSyBpbnN0ZWFkIG9mIEJVRl9FUlJPUiBpZiBwcmV2aW91cyBkZWZsYXRlIGNhbGwgcmV0dXJuZWQgd2l0aAorICBhdmFpbF9vdXQgYXMgemVybyBidXQgdGhlcmUgaXMgbm90aGluZyB0byBkbworLSBhZGRlZCBtZW1jbXAgZm9yIG5vbiBTVERDIGNvbXBpbGVycworLSBkZWZpbmUgTk9fRFVNTVlfREVDTCBmb3IgbW9yZSBNYWMgY29tcGlsZXJzICguaCBmaWxlcyBtZXJnZWQgaW5jb3JyZWN0bHkpCistIGRlZmluZSBfXzMyQklUX18gaWYgX18zODZfXyBvciBpMzg2IGlzIGRlZmluZWQgKHBiLiB3aXRoIFdhdGNvbSBhbmQgU0NPKQorLSBiZXR0ZXIgY2hlY2sgZm9yIDE2LWJpdCBtb2RlIE1TQyAoYXZvaWRzIHByb2JsZW0gd2l0aCBTeW1hbnRlYykKKworQ2hhbmdlcyBpbiAxLjAuMiAoMjMgTWF5IDk2KQorLSBhZGRlZCBXaW5kb3dzIERMTCBzdXBwb3J0CistIGFkZGVkIGEgZnVuY3Rpb24gemxpYlZlcnNpb24gKGZvciB0aGUgRExMIHN1cHBvcnQpCistIGZpeGVkIGRlY2xhcmF0aW9ucyB1c2luZyBCeXRlZiBpbiBpbmZ1dGlsLmMgKHBiIHdpdGggTVNET1MgbWVkaXVtIG1vZGVsKQorLSBCeXRlZiBpcyBkZWZpbmUncyBpbnN0ZWFkIG9mIHR5cGVkZWYnZCBvbmx5IGZvciBCb3JsYW5kIEMKKy0gYXZvaWQgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBleGFtcGxlLmMKKy0gbWVudGlvbiBpbiBSRUFETUUgdGhhdCB0aGUgemxpYiBmb3JtYXQgaXMgbm93IFJGQzE5NTAKKy0gdXBkYXRlZCBNYWtlZmlsZS5kajIKKy0gYWRkZWQgYWxnb3JpdGhtLmRvYworCitDaGFuZ2VzIGluIDEuMC4xICgyMCBNYXkgOTYpIFsxLjAgc2tpcHBlZCB0byBhdm9pZCBjb25mdXNpb25dCistIGZpeCBhcnJheSBvdmVybGF5IGluIGRlZmxhdGUuYyB3aGljaCBzb21ldGltZXMgY2F1c2VkIGJhZCBjb21wcmVzc2VkIGRhdGEKKy0gZml4IGluZmxhdGUgYnVnIHdpdGggZW1wdHkgc3RvcmVkIGJsb2NrCistIGZpeCBNU0RPUyBtZWRpdW0gbW9kZWwgd2hpY2ggd2FzIGJyb2tlbiBpbiAwLjk5CistIGZpeCBkZWZsYXRlUGFyYW1zKCkgd2hpY2ggY291bGQgZ2VuZXJhdGUgYmFkIGNvbXByZXNzZWQgZGF0YQorLSBCeXRlZiBpcyBkZWZpbmUnZCBpbnN0ZWFkIG9mIHR5cGVkZWYnZWQgKHdvcmsgYXJvdW5kIEJvcmxhbmQgYnVnKQorLSBhZGRlZCBhbiBJTkRFWCBmaWxlCistIG5ldyBtYWtlZmlsZXMgZm9yIERKR1BQIChNYWtlZmlsZS5kajIpLCAzMi1iaXQgQm9ybGFuZCAoTWFrZWZpbGUuYjMyKSwKKyAgV2F0Y29tIChNYWtlZmlsZS53YXQpLCBBbWlnYSBTQVMvQyAoTWFrZWZpbGUuc2FzKQorLSBzcGVlZCB1cCBhZGxlcjMyIGZvciBtb2Rlcm4gbWFjaGluZXMgd2l0aG91dCBhdXRvLWluY3JlbWVudAorLSBhZGRlZCAtYW5zaSBmb3IgSVJJWCBpbiBjb25maWd1cmUKKy0gc3RhdGljX2luaXRfZG9uZSBpbiB0cmVlcy5jIGlzIGFuIGludAorLSBkZWZpbmUgdW5saW5rIGFzIGRlbGV0ZSBmb3IgVk1TCistIGZpeCBjb25maWd1cmUgZm9yIFFOWAorLSBhZGQgY29uZmlndXJlIGJyYW5jaCBmb3IgU0NPIGFuZCBIUFVYCistIGF2b2lkIG1hbnkgd2FybmluZ3MgKHVudXNlZCB2YXJpYWJsZXMsIGRlYWQgYXNzaWdubWVudHMsIGV0Yy4uLikKKy0gbm8gZmRvcGVuIGZvciBCZU9TCistIGZpeCB0aGUgV2F0Y29tIGZpeCBmb3IgMzIgYml0IG1vZGUgKGRlZmluZSBGQVIgYXMgZW1wdHkpCistIHJlbW92ZWQgcmVkZWZpbml0aW9uIG9mIEJ5dGUgZm9yIE1LV0VSS1MKKy0gd29yayBhcm91bmQgYW4gTVdLRVJLUyBidWcgKGluY29ycmVjdCBtZXJnZSBvZiBhbGwgLmggZmlsZXMpCisKK0NoYW5nZXMgaW4gMC45OSAoMjcgSmFuIDk2KQorLSBhbGxvdyBwcmVzZXQgZGljdGlvbmFyeSBzaGFyZWQgYmV0d2VlbiBjb21wcmVzc29yIGFuZCBkZWNvbXByZXNzb3IKKy0gYWxsb3cgY29tcHJlc3Npb24gbGV2ZWwgMCAobm8gY29tcHJlc3Npb24pCistIGFkZCBkZWZsYXRlUGFyYW1zIGluIHpsaWIuaDogYWxsb3cgZHluYW1pYyBjaGFuZ2Ugb2YgY29tcHJlc3Npb24gbGV2ZWwKKyAgYW5kIGNvbXByZXNzaW9uIHN0cmF0ZWd5CistIHRlc3QgbGFyZ2UgYnVmZmVycyBhbmQgZGVmbGF0ZVBhcmFtcyBpbiBleGFtcGxlLmMKKy0gYWRkIG9wdGlvbmFsICJjb25maWd1cmUiIHRvIGJ1aWxkIHpsaWIgYXMgYSBzaGFyZWQgbGlicmFyeQorLSBzdXBwcmVzcyBNYWtlZmlsZS5xbngsIHVzZSBjb25maWd1cmUgaW5zdGVhZAorLSBmaXhlZCBkZWZsYXRlIGZvciA2NC1iaXQgc3lzdGVtcyAoZGV0ZWN0ZWQgb24gQ3JheSkKKy0gZml4ZWQgaW5mbGF0ZV9ibG9ja3MgZm9yIDY0LWJpdCBzeXN0ZW1zIChkZXRlY3RlZCBvbiBBbHBoYSkKKy0gZGVjbGFyZSBaX0RFRkxBVEVEIGluIHpsaWIuaCAocG9zc2libGUgcGFyYW1ldGVyIGZvciBkZWZsYXRlSW5pdDIpCistIGFsd2F5cyByZXR1cm4gWl9CVUZfRVJST1Igd2hlbiBkZWZsYXRlKCkgaGFzIG5vdGhpbmcgdG8gZG8KKy0gZGVmbGF0ZUluaXQgYW5kIGluZmxhdGVJbml0IGFyZSBub3cgbWFjcm9zIHRvIGFsbG93IHZlcnNpb24gY2hlY2tpbmcKKy0gcHJlZml4IGFsbCBnbG9iYWwgZnVuY3Rpb25zIGFuZCB0eXBlcyB3aXRoIHpfIHdpdGggLURaX1BSRUZJWAorLSBtYWtlIGZhbGxvYyBjb21wbGV0ZWx5IHJlZW50cmFudCAoaW5mdHJlZXMuYykKKy0gZml4ZWQgdmVyeSB1bmxpa2VseSByYWNlIGNvbmRpdGlvbiBpbiBjdF9zdGF0aWNfaW5pdAorLSBmcmVlIGluIHJldmVyc2Ugb3JkZXIgb2YgYWxsb2NhdGlvbiB0byBoZWxwIG1lbW9yeSBtYW5hZ2VyCistIHVzZSB6bGliLTEuMC8qIGluc3RlYWQgb2YgemxpYi8qIGluc2lkZSB0aGUgdGFyLmd6CistIG1ha2UgemxpYiB3YXJuaW5nLWZyZWUgd2l0aCAiZ2NjIC1PMyAtV2FsbCAtV3dyaXRlLXN0cmluZ3MgLVdwb2ludGVyLWFyaXRoCisgIC1XY29udmVyc2lvbiAtV3N0cmljdC1wcm90b3R5cGVzIC1XbWlzc2luZy1wcm90b3R5cGVzIgorLSBhbGxvdyBnenJlYWQgb24gY29uY2F0ZW5hdGVkIC5neiBmaWxlcworLSBkZWZsYXRlRW5kIG5vdyByZXR1cm5zIFpfREFUQV9FUlJPUiBpZiBpdCB3YXMgcHJlbWF0dXJlCistIGRlZmxhdGUgaXMgZmluYWxseSAoPykgZnVsbHkgZGV0ZXJtaW5pc3RpYyAobm8gbWF0Y2hlcyBiZXlvbmQgZW5kIG9mIGlucHV0KQorLSBEb2N1bWVudCBaX1NZTkNfRkxVU0gKKy0gYWRkIHVuaW5zdGFsbCBpbiBNYWtlZmlsZQorLSBDaGVjayBmb3IgX19jcGx1cGx1cyBpbiB6bGliLmgKKy0gQmV0dGVyIHRlc3QgaW4gY3RfYWxpZ24gZm9yIHBhcnRpYWwgZmx1c2gKKy0gYXZvaWQgaGFybWxlc3Mgd2FybmluZ3MgZm9yIEJvcmxhbmQgQysrCistIGluaXRpYWxpemUgaGFzaF9oZWFkIGluIGRlZmxhdGUuYworLSBhdm9pZCB3YXJuaW5nIG9uIGZkb3BlbiAoZ3ppby5jKSBmb3IgSFAgY2MgLUFhCistIGluY2x1ZGUgc3RkbGliLmggZm9yIFNUREMgY29tcGlsZXJzCistIGluY2x1ZGUgZXJybm8uaCBmb3IgQ3JheQorLSBpZ25vcmUgZXJyb3IgaWYgcmFubGliIGRvZXNuJ3QgZXhpc3QKKy0gY2FsbCByYW5saWIgdHdpY2UgZm9yIE5lWFRTVEVQCistIHVzZSBleGVjX3ByZWZpeCBpbnN0ZWFkIG9mIHByZWZpeCBmb3IgbGliei5hCistIHJlbmFtZWQgY3RfKiBhcyBfdHJfKiB0byBhdm9pZCBjb25mbGljdCB3aXRoIGFwcGxpY2F0aW9ucworLSBjbGVhciB6LT5tc2cgaW4gaW5mbGF0ZUluaXQyIGJlZm9yZSBhbnkgZXJyb3IgcmV0dXJuCistIGluaXRpYWxpemUgb3BhcXVlIGluIGV4YW1wbGUuYywgZ3ppby5jLCBkZWZsYXRlLmMgYW5kIGluZmxhdGUuYworLSBmaXhlZCB0eXBvIGluIHpjb25mLmggKF9HTlVDX18gPT4gX19HTlVDX18pCistIGNoZWNrIGZvciBXSU4zMiBpbiB6Y29uZi5oIGFuZCB6dXRpbC5jIChhdm9pZCBmYXJtYWxsb2MgaW4gMzItYml0IG1vZGUpCistIGZpeCB0eXBvIGluIE1ha2Vfdm1zLmNvbSAoZiR0cm5sbm0gLT4gZiRnZXRzeWkpCistIGluIGZjYWxsb2MsIG5vcm1hbGl6ZSBwb2ludGVyIGlmIHNpemUgPiA2NTUyMCBieXRlcworLSBkb24ndCB1c2Ugc3BlY2lhbCBmY2FsbG9jIGZvciAzMiBiaXQgQm9ybGFuZCBDKysKKy0gdXNlIFNUREMgaW5zdGVhZCBvZiBfX0dPMzJfXyB0byBhdm9pZCByZWRlY2xhcmluZyBleGl0LCBjYWxsb2MsIGV0Yy4uLgorLSB1c2UgWl9CSU5BUlkgaW5zdGVhZCBvZiBCSU5BUlkKKy0gZG9jdW1lbnQgdGhhdCBnemNsb3NlIGFmdGVyIGd6ZG9wZW4gd2lsbCBjbG9zZSB0aGUgZmlsZQorLSBhbGxvdyAiYSIgYXMgbW9kZSBpbiBnem9wZW4KKy0gZml4IGVycm9yIGNoZWNraW5nIGluIGd6cmVhZAorLSBhbGxvdyBza2lwcGluZyAuZ3ogZXh0cmEtZmllbGQgb24gcGlwZXMKKy0gYWRkZWQgcmVmZXJlbmNlIHRvIFBlcmwgaW50ZXJmYWNlIGluIFJFQURNRQorLSBwdXQgdGhlIGNyYyB0YWJsZSBpbiBGQVIgZGF0YSAoSSBkaXNsaWtlIG1vcmUgYW5kIG1vcmUgdGhlIG1lZGl1bSBtb2RlbCA6KQorLSBhZGRlZCBnZXRfY3JjX3RhYmxlCistIGFkZGVkIGEgZGltZW5zaW9uIHRvIGFsbCBhcnJheXMgKEJvcmxhbmQgQyBjYW4ndCBjb3VudCkKKy0gd29ya2Fyb3VuZCBCb3JsYW5kIEMgYnVnIGluIGRlY2xhcmF0aW9uIG9mIGluZmxhdGVfY29kZXNfbmV3ICYgaW5mbGF0ZV9mYXN0CistIGd1YXJkIGFnYWluc3QgbXVsdGlwbGUgaW5jbHVzaW9uIG9mICouaCAoZm9yIHByZWNvbXBpbGVkIGhlYWRlciBvbiBNYWMpCistIFdhdGNvbSBDIHByZXRlbmRzIHRvIGJlIE1pY3Jvc29mdCBDIHNtYWxsIG1vZGVsIGV2ZW4gaW4gMzIgYml0IG1vZGUKKy0gZG9uJ3QgdXNlIHVuc2l6ZWQgYXJyYXlzIHRvIGF2b2lkIHNpbGx5IHdhcm5pbmdzIGJ5IFZpc3VhbCBDKys6CisgICAgIHdhcm5pbmcgQzQ3NDY6ICdpbmZsYXRlX21hc2snIDogdW5zaXplZCBhcnJheSB0cmVhdGVkIGFzICAnX19mYXInCisgICAgICh3aGF0J3Mgd3Jvbmcgd2l0aCBmYXIgZGF0YSBpbiBmYXIgbW9kZWw/KQorLSBkZWZpbmUgZW51bSBvdXQgb2YgaW5mbGF0ZV9ibG9ja3Nfc3RhdGUgdG8gYWxsb3cgY29tcGlsYXRpb24gd2l0aCBDKysKKworQ2hhbmdlcyBpbiAwLjk1ICgxNiBBdWcgOTUpCistIGZpeCBNU0RPUyBzbWFsbCBhbmQgbWVkaXVtIG1vZGVsIChub3cgZWFzaWVyIHRvIGFkYXB0IHRvIGFueSBjb21waWxlcikKKy0gaW5saW5lZCBzZW5kX2JpdHMKKy0gZml4IHRoZSBmaW5hbCAoOi0pIGJ1ZyBmb3IgZGVmbGF0ZSB3aXRoIGZsdXNoIChvdXRwdXQgd2FzIGNvcnJlY3QgYnV0CisgIG5vdCBjb21wbGV0ZWx5IGZsdXNoZWQgaW4gcmFyZSBvY2Nhc2lvbnMpCistIGRlZmF1bHQgd2luZG93IHNpemUgaXMgc2FtZSBmb3IgY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24KKyAgKGl0J3Mgbm93IHN1ZmZpY2llbnQgdG8gc2V0IE1BWF9XQklUUyBpbiB6Y29uZi5oKQorLSB2b2lkcCAtPiB2b2lkcGYgYW5kIHZvaWRucCAtPiB2b2lkcCAoZm9yIGNvbnNpc3RlbmN5IHdpdGggb3RoZXIKKyAgdHlwZWRlZnMgYW5kIGJlY2F1c2Ugdm9pZG5wIHdhcyBub3QgbmVhciBpbiBsYXJnZSBtb2RlbCkKKworQ2hhbmdlcyBpbiAwLjk0ICgxMyBBdWcgOTUpCistIHN1cHBvcnQgTVNET1MgbWVkaXVtIG1vZGVsCistIGZpeCBkZWZsYXRlIHdpdGggZmx1c2ggKGNvdWxkIHNvbWV0aW1lcyBnZW5lcmF0ZSBiYWQgb3V0cHV0KQorLSBmaXggZGVmbGF0ZVJlc2V0ICh6bGliIGhlYWRlciB3YXMgaW5jb3JyZWN0bHkgc3VwcHJlc3NlZCkKKy0gYWRkZWQgc3VwcG9ydCBmb3IgVk1TCistIGFsbG93IGEgY29tcHJlc3Npb24gbGV2ZWwgaW4gZ3pvcGVuKCkKKy0gZ3pmbHVzaCBub3cgY2FsbHMgZmZsdXNoCistIEZvciBkZWZsYXRlIHdpdGggZmx1c2gsIGZsdXNoIGV2ZW4gaWYgbm8gbW9yZSBpbnB1dCBpcyBwcm92aWRlZAorLSByZW5hbWUgbGliZ3ouYSBhcyBsaWJ6LmEKKy0gYXZvaWQgY29tcGxleCBleHByZXNzaW9uIGluIGluZmNvZGVzLmMgdHJpZ2dlcmluZyBUdXJibyBDIGJ1ZworLSB3b3JrIGFyb3VuZCBhIHByb2JsZW0gd2l0aCBnY2Mgb24gQWxwaGEgKGluIElOU0VSVF9TVFJJTkcpCistIGRvbid0IHVzZSBpbmxpbmUgZnVuY3Rpb25zIChwcm9ibGVtIHdpdGggc29tZSBnY2MgdmVyc2lvbnMpCistIGFsbG93IHJlbmFtaW5nIG9mIEJ5dGUsIHVJbnQsIGV0Yy4uLiB3aXRoICNkZWZpbmUKKy0gYXZvaWQgd2FybmluZyBhYm91dCAodW51c2VkKSBwb2ludGVyIGJlZm9yZSBzdGFydCBvZiBhcnJheSBpbiBkZWZsYXRlLmMKKy0gYXZvaWQgdmFyaW91cyB3YXJuaW5ncyBpbiBnemlvLmMsIGV4YW1wbGUuYywgaW5mYmxvY2suYywgYWRsZXIzMi5jLCB6dXRpbC5jCistIGF2b2lkIHJlc2VydmVkIHdvcmQgJ25ldycgaW4gdHJlZXMuYworCitDaGFuZ2VzIGluIDAuOTMgKDI1IEp1bmUgOTUpCistIHRlbXBvcmFyaWx5IGRpc2FibGUgaW5saW5lIGZ1bmN0aW9ucworLSBtYWtlIGRlZmxhdGUgZGV0ZXJtaW5pc3RpYworLSBnaXZlIGVub3VnaCBsb29rYWhlYWQgZm9yIFBBUlRJQUxfRkxVU0gKKy0gU2V0IGJpbmFyeSBtb2RlIGZvciBzdGRpbi9zdGRvdXQgaW4gbWluaWd6aXAuYyBmb3IgT1MvMgorLSBkb24ndCBldmVuIHVzZSBzaWduZWQgY2hhciBpbiBpbmZsYXRlIChub3QgcG9ydGFibGUgZW5vdWdoKQorLSBmaXggaW5mbGF0ZSBtZW1vcnkgbGVhayBmb3Igc2VnbWVudGVkIGFyY2hpdGVjdHVyZXMKKworQ2hhbmdlcyBpbiAwLjkyICgzIE1heSA5NSkKKy0gZG9uJ3QgYXNzdW1lIHRoYXQgY2hhciBpcyBzaWduZWQgKHByb2JsZW0gb24gU0dJKQorLSBDbGVhciBiaXQgYnVmZmVyIHdoZW4gc3RhcnRpbmcgYSBzdG9yZWQgYmxvY2sKKy0gbm8gbWVtY3B5IG9uIFB5cmFtaWQKKy0gc3VwcHJlc3NlZCBpbmZ0ZXN0LmMKKy0gb3B0aW1pemVkIGZpbGxfd2luZG93LCBwdXQgbG9uZ2VzdF9tYXRjaCBpbmxpbmUgZm9yIGdjYworLSBvcHRpbWl6ZWQgaW5mbGF0ZSBvbiBzdG9yZWQgYmxvY2tzCistIHVudGFiaWZ5IGFsbCBzb3VyY2VzIHRvIHNpbXBsaWZ5IHBhdGNoZXMKKworQ2hhbmdlcyBpbiAwLjkxICgyIE1heSA5NSkKKy0gRGVmYXVsdCBNRU1fTEVWRUwgaXMgOCAobm90IDkgZm9yIFVuaXgpIGFzIGRvY3VtZW50ZWQgaW4gemxpYi5oCistIERvY3VtZW50IHRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzIGluIHpjb25mLmgKKy0gYWRkZWQgIm1ha2UgaW5zdGFsbCIKKy0gZml4IHN5bmMgc2VhcmNoIGxvZ2ljIGluIGluZmxhdGVTeW5jCistIGRlZmxhdGUoWl9GVUxMX0ZMVVNIKSBub3cgd29ya3MgZXZlbiBpZiBvdXRwdXQgYnVmZmVyIHRvbyBzaG9ydAorLSBhZnRlciBpbmZsYXRlU3luYywgZG9uJ3Qgc2NhcmUgcGVvcGxlIHdpdGgganVzdCAibG8gd29ybGQiCistIGFkZGVkIHN1cHBvcnQgZm9yIERKR1BQCisKK0NoYW5nZXMgaW4gMC45ICgxIE1heSA5NSkKKy0gZG9uJ3QgYXNzdW1lIHRoYXQgemFsbG9jIGNsZWFycyB0aGUgYWxsb2NhdGVkIG1lbW9yeSAodGhlIFR1cmJvQyBidWcKKyAgd2FzIE1hcmsncyBidWcgYWZ0ZXIgYWxsIDopCistIGxldCBhZ2FpbiBnenJlYWQgY29weSB1bmNvbXByZXNzZWQgZGF0YSB1bmNoYW5nZWQgKHdhcyB3b3JraW5nIGluIDAuNzEpCistIGRlZmxhdGUoWl9GVUxMX0ZMVVNIKSwgaW5mbGF0ZVJlc2V0IGFuZCBpbmZsYXRlU3luYyBhcmUgbm93IGZ1bGx5IGltcGxlbWVudGVkCistIGFkZGVkIGEgdGVzdCBvZiBpbmZsYXRlU3luYyBpbiBleGFtcGxlLmMKKy0gbW92ZWQgTUFYX1dCSVRTIHRvIHpjb25mLmggYmVjYXVzZSB1c2VycyBtaWdodCB3YW50IHRvIGNoYW5nZSB0aGF0CistIGRvY3VtZW50IGV4cGxpY2l0bHkgdGhhdCB6YWxsb2MoNjRLKSBvbiBNU0RPUyBtdXN0IHJldHVybiBhIG5vcm1hbGl6ZWQKKyAgcG9pbnRlciAoemVybyBvZmZzZXQpCistIGFkZGVkIE1ha2VmaWxlcyBmb3IgTWljcm9zb2Z0IEMsIFR1cmJvIEMsIEJvcmxhbmQgQysrCistIGZhc3RlciBjcmMzMigpCisKK0NoYW5nZXMgaW4gMC44ICgyOSBBcHJpbCA5NSkKKy0gYWRkZWQgZmFzdCBpbmZsYXRlIChpbmZmYXN0LmMpCistIGRlZmxhdGUoWl9GSU5JU0gpIG5vdyByZXR1cm5zIFpfU1RSRUFNX0VORCB3aGVuIGRvbmUuIFdhcm5pbmc6IHRoaXMKKyAgaXMgaW5jb21wYXRpYmxlIHdpdGggcHJldmlvdXMgdmVyc2lvbnMgb2YgemxpYiB3aGljaCByZXR1cm5lZCBaX09LCistIHdvcmsgYXJvdW5kIGEgVHVyYm9DIGNvbXBpbGVyIGJ1ZyAoYmFkIGNvZGUgZm9yIGIgPDwgMCwgc2VlIGluZnV0aWwuaCkKKyAgKGFjdHVhbGx5IHRoYXQgd2FzIG5vdCBhIGNvbXBpbGVyIGJ1Zywgc2VlIDAuODEgYWJvdmUpCistIGd6cmVhZCBubyBsb25nZXIgcmVhZHMgb25lIGV4dHJhIGJ5dGUgaW4gY2VydGFpbiBjYXNlcworLSBJbiBnemlvIGRlc3Ryb3koKSwgZG9uJ3QgcmVmZXJlbmNlIGEgZnJlZWQgc3RydWN0dXJlCistIGF2b2lkIG1hbnkgd2FybmluZ3MgZm9yIE1TRE9TCistIGF2b2lkIHRoZSBFUlJPUiBzeW1ib2wgd2hpY2ggaXMgdXNlZCBieSBNUyBXaW5kb3dzCisKK0NoYW5nZXMgaW4gMC43MSAoMTQgQXByaWwgOTUpCistIEZpeGVkIG1vcmUgTVNET1MgY29tcGlsYXRpb24gcHJvYmxlbXMgOiggVGhlcmUgaXMgc3RpbGwgYSBidWcgd2l0aAorICBUdXJib0MgbGFyZ2UgbW9kZWwKKworQ2hhbmdlcyBpbiAwLjcgKDE0IEFwcmlsIDk1KQorLSBBZGRlZCBmdWxsIGluZmxhdGUgc3VwcG9ydAorLSBTaW1wbGlmaWVkIHRoZSBjcmMzMigpIGludGVyZmFjZS4gVGhlIHByZS0gYW5kIHBvc3QtY29uZGl0aW9uaW5nCisgIChvbmUncyBjb21wbGVtZW50KSBpcyBub3cgZG9uZSBpbnNpZGUgY3JjMzIoKS4gV0FSTklORzogdGhpcyBpcworICBpbmNvbXBhdGlibGUgd2l0aCBwcmV2aW91cyB2ZXJzaW9uczsgc2VlIHpsaWIuaCBmb3IgdGhlIG5ldyB1c2FnZQorCitDaGFuZ2VzIGluIDAuNjEgKDEyIEFwcmlsIDk1KQorLSB3b3JrYXJvdW5kIGZvciBhIGJ1ZyBpbiBUdXJib0MuIGV4YW1wbGUgYW5kIG1pbmlnemlwIG5vdyB3b3JrIG9uIE1TRE9TCisKK0NoYW5nZXMgaW4gMC42ICgxMSBBcHJpbCA5NSkKKy0gYWRkZWQgbWluaWd6aXAuYworLSBhZGRlZCBnemRvcGVuIHRvIHJlb3BlbiBhIGZpbGUgZGVzY3JpcHRvciBhcyBnekZpbGUKKy0gYWRkZWQgdHJhbnNwYXJlbnQgcmVhZGluZyBvZiBub24tZ3ppcGVkIGZpbGVzIGluIGd6cmVhZAorLSBmaXhlZCBidWcgaW4gZ3pyZWFkIChkb24ndCByZWFkIGNyYyBhcyBkYXRhKQorLSBmaXhlZCBidWcgaW4gZGVzdHJveSAoZ3ppby5jKSAoZG9uJ3QgcmV0dXJuIFpfU1RSRUFNX0VORCBmb3IgZ3pjbG9zZSkKKy0gZG9uJ3QgYWxsb2NhdGUgYmlnIGFycmF5cyBpbiB0aGUgc3RhY2sgKGZvciBNU0RPUykKKy0gZml4IHNvbWUgTVNET1MgY29tcGlsYXRpb24gcHJvYmxlbXMKKworQ2hhbmdlcyBpbiAwLjU6CistIGRvIHJlYWwgY29tcHJlc3Npb24gaW4gZGVmbGF0ZS5jLiBaX1BBUlRJQUxfRkxVU0ggaXMgc3VwcG9ydGVkIGJ1dAorICBub3QgeWV0IFpfRlVMTF9GTFVTSAorLSBzdXBwb3J0IGRlY29tcHJlc3Npb24gYnV0IG9ubHkgaW4gYSBzaW5nbGUgc3RlcCAoZm9yY2VkIFpfRklOSVNIKQorLSBhZGRlZCBvcGFxdWUgb2JqZWN0IGZvciB6YWxsb2MgYW5kIHpmcmVlCistIGFkZGVkIGRlZmxhdGVSZXNldCBhbmQgaW5mbGF0ZVJlc2V0CistIGFkZGVkIGEgdmFyaWFibGUgemxpYl92ZXJzaW9uIGZvciBjb25zaXN0ZW5jeSBjaGVja2luZworLSByZW5hbWVkIHRoZSAnZmlsdGVyJyBwYXJhbWV0ZXIgb2YgZGVmbGF0ZUluaXQyIGFzICdzdHJhdGVneScKKyAgQWRkZWQgWl9GSUxURVJFRCBhbmQgWl9IVUZGTUFOX09OTFkgY29uc3RhbnRzCisKK0NoYW5nZXMgaW4gMC40OgorLSBhdm9pZCAiemlwIiBldmVyeXdoZXJlLCB1c2UgemxpYiBpbnN0ZWFkIG9mIHppcGxpYgorLSBzdXBwcmVzcyBaX0JMT0NLX0ZMVVNILCBpbnRlcnByZXQgWl9QQVJUSUFMX0ZMVVNIIGFzIGJsb2NrIGZsdXNoCisgIGlmIGNvbXByZXNzaW9uIG1ldGhvZCA9PSA4CistIGFkZGVkIGFkbGVyMzIgYW5kIGNyYzMyCistIHJlbmFtZWQgZGVmbGF0ZU9wdGlvbnMgYXMgZGVmbGF0ZUluaXQyLCBjYWxsIG9uZSBvciB0aGUgb3RoZXIgYnV0IG5vdCBib3RoCistIGFkZGVkIHRoZSBtZXRob2QgcGFyYW1ldGVyIGZvciBkZWZsYXRlSW5pdDIKKy0gYWRkZWQgaW5mbGF0ZUluaXQyCistIHNpbXBsaWVkIGNvbnNpZGVyYWJseSBkZWZsYXRlSW5pdCBhbmQgaW5mbGF0ZUluaXQgYnkgbm90IHN1cHBvcnRpbmcKKyAgdXNlci1wcm92aWRlZCBoaXN0b3J5IGJ1ZmZlci4gVGhpcyBpcyBzdXBwb3J0ZWQgb25seSBpbiBkZWZsYXRlSW5pdDIKKyAgYW5kIGluZmxhdGVJbml0MgorCitDaGFuZ2VzIGluIDAuMzoKKy0gcHJlZml4IGFsbCBtYWNybyBuYW1lcyB3aXRoIFpfCistIHVzZSBaX0ZJTklTSCBpbnN0ZWFkIG9mIGRlZmxhdGVFbmQgdG8gZmluaXNoIGNvbXByZXNzaW9uCistIGFkZGVkIFpfSFVGRk1BTl9PTkxZCistIGFkZGVkIGd6ZXJyb3IoKQpkaWZmIC0tZ2l0IGEvc3JjL0ZBUSBiL3NyYy9GQVEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTliN2NmOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9GQVEKQEAgLTAsMCArMSwzNjggQEAKKworICAgICAgICAgICAgICAgIEZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb25zIGFib3V0IHpsaWIKKworCitJZiB5b3VyIHF1ZXN0aW9uIGlzIG5vdCB0aGVyZSwgcGxlYXNlIGNoZWNrIHRoZSB6bGliIGhvbWUgcGFnZQoraHR0cDovL3psaWIubmV0LyB3aGljaCBtYXkgaGF2ZSBtb3JlIHJlY2VudCBpbmZvcm1hdGlvbi4KK1RoZSBsYXN0ZXN0IHpsaWIgRkFRIGlzIGF0IGh0dHA6Ly96bGliLm5ldC96bGliX2ZhcS5odG1sCisKKworIDEuIElzIHpsaWIgWTJLLWNvbXBsaWFudD8KKworICAgIFllcy4gemxpYiBkb2Vzbid0IGhhbmRsZSBkYXRlcy4KKworIDIuIFdoZXJlIGNhbiBJIGdldCBhIFdpbmRvd3MgRExMIHZlcnNpb24/CisKKyAgICBUaGUgemxpYiBzb3VyY2VzIGNhbiBiZSBjb21waWxlZCB3aXRob3V0IGNoYW5nZSB0byBwcm9kdWNlIGEgRExMLiAgU2VlIHRoZQorICAgIGZpbGUgd2luMzIvRExMX0ZBUS50eHQgaW4gdGhlIHpsaWIgZGlzdHJpYnV0aW9uLiAgUG9pbnRlcnMgdG8gdGhlCisgICAgcHJlY29tcGlsZWQgRExMIGFyZSBmb3VuZCBpbiB0aGUgemxpYiB3ZWIgc2l0ZSBhdCBodHRwOi8vemxpYi5uZXQvIC4KKworIDMuIFdoZXJlIGNhbiBJIGdldCBhIFZpc3VhbCBCYXNpYyBpbnRlcmZhY2UgdG8gemxpYj8KKworICAgIFNlZQorICAgICAgICAqIGh0dHA6Ly9tYXJrbmVsc29uLnVzLzE5OTcvMDEvMDEvemxpYi1lbmdpbmUvCisgICAgICAgICogd2luMzIvRExMX0ZBUS50eHQgaW4gdGhlIHpsaWIgZGlzdHJpYnV0aW9uCisKKyA0LiBjb21wcmVzcygpIHJldHVybnMgWl9CVUZfRVJST1IuCisKKyAgICBNYWtlIHN1cmUgdGhhdCBiZWZvcmUgdGhlIGNhbGwgb2YgY29tcHJlc3MoKSwgdGhlIGxlbmd0aCBvZiB0aGUgY29tcHJlc3NlZAorICAgIGJ1ZmZlciBpcyBlcXVhbCB0byB0aGUgYXZhaWxhYmxlIHNpemUgb2YgdGhlIGNvbXByZXNzZWQgYnVmZmVyIGFuZCBub3QKKyAgICB6ZXJvLiAgRm9yIFZpc3VhbCBCYXNpYywgY2hlY2sgdGhhdCB0aGlzIHBhcmFtZXRlciBpcyBwYXNzZWQgYnkgcmVmZXJlbmNlCisgICAgKCJhcyBhbnkiKSwgbm90IGJ5IHZhbHVlICgiYXMgbG9uZyIpLgorCisgNS4gZGVmbGF0ZSgpIG9yIGluZmxhdGUoKSByZXR1cm5zIFpfQlVGX0VSUk9SLgorCisgICAgQmVmb3JlIG1ha2luZyB0aGUgY2FsbCwgbWFrZSBzdXJlIHRoYXQgYXZhaWxfaW4gYW5kIGF2YWlsX291dCBhcmUgbm90IHplcm8uCisgICAgV2hlbiBzZXR0aW5nIHRoZSBwYXJhbWV0ZXIgZmx1c2ggZXF1YWwgdG8gWl9GSU5JU0gsIGFsc28gbWFrZSBzdXJlIHRoYXQKKyAgICBhdmFpbF9vdXQgaXMgYmlnIGVub3VnaCB0byBhbGxvdyBwcm9jZXNzaW5nIGFsbCBwZW5kaW5nIGlucHV0LiAgTm90ZSB0aGF0IGEKKyAgICBaX0JVRl9FUlJPUiBpcyBub3QgZmF0YWwtLWFub3RoZXIgY2FsbCB0byBkZWZsYXRlKCkgb3IgaW5mbGF0ZSgpIGNhbiBiZQorICAgIG1hZGUgd2l0aCBtb3JlIGlucHV0IG9yIG91dHB1dCBzcGFjZS4gIEEgWl9CVUZfRVJST1IgbWF5IGluIGZhY3QgYmUKKyAgICB1bmF2b2lkYWJsZSBkZXBlbmRpbmcgb24gaG93IHRoZSBmdW5jdGlvbnMgYXJlIHVzZWQsIHNpbmNlIGl0IGlzIG5vdAorICAgIHBvc3NpYmxlIHRvIHRlbGwgd2hldGhlciBvciBub3QgdGhlcmUgaXMgbW9yZSBvdXRwdXQgcGVuZGluZyB3aGVuCisgICAgc3RybS5hdmFpbF9vdXQgcmV0dXJucyB3aXRoIHplcm8uICBTZWUgaHR0cDovL3psaWIubmV0L3psaWJfaG93Lmh0bWwgZm9yIGEKKyAgICBoZWF2aWx5IGFubm90YXRlZCBleGFtcGxlLgorCisgNi4gV2hlcmUncyB0aGUgemxpYiBkb2N1bWVudGF0aW9uIChtYW4gcGFnZXMsIGV0Yy4pPworCisgICAgSXQncyBpbiB6bGliLmggLiAgRXhhbXBsZXMgb2YgemxpYiB1c2FnZSBhcmUgaW4gdGhlIGZpbGVzIHRlc3QvZXhhbXBsZS5jCisgICAgYW5kIHRlc3QvbWluaWd6aXAuYywgd2l0aCBtb3JlIGluIGV4YW1wbGVzLyAuCisKKyA3LiBXaHkgZG9uJ3QgeW91IHVzZSBHTlUgYXV0b2NvbmYgb3IgbGlidG9vbCBvciAuLi4/CisKKyAgICBCZWNhdXNlIHdlIHdvdWxkIGxpa2UgdG8ga2VlcCB6bGliIGFzIGEgdmVyeSBzbWFsbCBhbmQgc2ltcGxlIHBhY2thZ2UuCisgICAgemxpYiBpcyByYXRoZXIgcG9ydGFibGUgYW5kIGRvZXNuJ3QgbmVlZCBtdWNoIGNvbmZpZ3VyYXRpb24uCisKKyA4LiBJIGZvdW5kIGEgYnVnIGluIHpsaWIuCisKKyAgICBNb3N0IG9mIHRoZSB0aW1lLCBzdWNoIHByb2JsZW1zIGFyZSBkdWUgdG8gYW4gaW5jb3JyZWN0IHVzYWdlIG9mIHpsaWIuCisgICAgUGxlYXNlIHRyeSB0byByZXByb2R1Y2UgdGhlIHByb2JsZW0gd2l0aCBhIHNtYWxsIHByb2dyYW0gYW5kIHNlbmQgdGhlCisgICAgY29ycmVzcG9uZGluZyBzb3VyY2UgdG8gdXMgYXQgemxpYkBnemlwLm9yZyAuICBEbyBub3Qgc2VuZCBtdWx0aS1tZWdhYnl0ZQorICAgIGRhdGEgZmlsZXMgd2l0aG91dCBwcmlvciBhZ3JlZW1lbnQuCisKKyA5LiBXaHkgZG8gSSBnZXQgInVuZGVmaW5lZCByZWZlcmVuY2UgdG8gZ3pwdXRjIj8KKworICAgIElmICJtYWtlIHRlc3QiIHByb2R1Y2VzIHNvbWV0aGluZyBsaWtlCisKKyAgICAgICBleGFtcGxlLm8oLnRleHQrMHgxNTQpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBnenB1dGMnCisKKyAgICBjaGVjayB0aGF0IHlvdSBkb24ndCBoYXZlIG9sZCBmaWxlcyBsaWJ6LiogaW4gL3Vzci9saWIsIC91c3IvbG9jYWwvbGliIG9yCisgICAgL3Vzci9YMTFSNi9saWIuIFJlbW92ZSBhbnkgb2xkIHZlcnNpb25zLCB0aGVuIGRvICJtYWtlIGluc3RhbGwiLgorCisxMC4gSSBuZWVkIGEgRGVscGhpIGludGVyZmFjZSB0byB6bGliLgorCisgICAgU2VlIHRoZSBjb250cmliL2RlbHBoaSBkaXJlY3RvcnkgaW4gdGhlIHpsaWIgZGlzdHJpYnV0aW9uLgorCisxMS4gQ2FuIHpsaWIgaGFuZGxlIC56aXAgYXJjaGl2ZXM/CisKKyAgICBOb3QgYnkgaXRzZWxmLCBuby4gIFNlZSB0aGUgZGlyZWN0b3J5IGNvbnRyaWIvbWluaXppcCBpbiB0aGUgemxpYgorICAgIGRpc3RyaWJ1dGlvbi4KKworMTIuIENhbiB6bGliIGhhbmRsZSAuWiBmaWxlcz8KKworICAgIE5vLCBzb3JyeS4gIFlvdSBoYXZlIHRvIHNwYXduIGFuIHVuY29tcHJlc3Mgb3IgZ3VuemlwIHN1YnByb2Nlc3MsIG9yIGFkYXB0CisgICAgdGhlIGNvZGUgb2YgdW5jb21wcmVzcyBvbiB5b3VyIG93bi4KKworMTMuIEhvdyBjYW4gSSBtYWtlIGEgVW5peCBzaGFyZWQgbGlicmFyeT8KKworICAgIEJ5IGRlZmF1bHQgYSBzaGFyZWQgKGFuZCBhIHN0YXRpYykgbGlicmFyeSBpcyBidWlsdCBmb3IgVW5peC4gIFNvOgorCisgICAgbWFrZSBkaXN0Y2xlYW4KKyAgICAuL2NvbmZpZ3VyZQorICAgIG1ha2UKKworMTQuIEhvdyBkbyBJIGluc3RhbGwgYSBzaGFyZWQgemxpYiBsaWJyYXJ5IG9uIFVuaXg/CisKKyAgICBBZnRlciB0aGUgYWJvdmUsIHRoZW46CisKKyAgICBtYWtlIGluc3RhbGwKKworICAgIEhvd2V2ZXIsIG1hbnkgZmxhdm9ycyBvZiBVbml4IGNvbWUgd2l0aCBhIHNoYXJlZCB6bGliIGFscmVhZHkgaW5zdGFsbGVkLgorICAgIEJlZm9yZSBnb2luZyB0byB0aGUgdHJvdWJsZSBvZiBjb21waWxpbmcgYSBzaGFyZWQgdmVyc2lvbiBvZiB6bGliIGFuZAorICAgIHRyeWluZyB0byBpbnN0YWxsIGl0LCB5b3UgbWF5IHdhbnQgdG8gY2hlY2sgaWYgaXQncyBhbHJlYWR5IHRoZXJlISAgSWYgeW91CisgICAgY2FuICNpbmNsdWRlIDx6bGliLmg+LCBpdCdzIHRoZXJlLiAgVGhlIC1seiBvcHRpb24gd2lsbCBwcm9iYWJseSBsaW5rIHRvCisgICAgaXQuICBZb3UgY2FuIGNoZWNrIHRoZSB2ZXJzaW9uIGF0IHRoZSB0b3Agb2YgemxpYi5oIG9yIHdpdGggdGhlCisgICAgWkxJQl9WRVJTSU9OIHN5bWJvbCBkZWZpbmVkIGluIHpsaWIuaCAuCisKKzE1LiBJIGhhdmUgYSBxdWVzdGlvbiBhYm91dCBPdHRvUERGLgorCisgICAgV2UgYXJlIG5vdCB0aGUgYXV0aG9ycyBvZiBPdHRvUERGLiBUaGUgcmVhbCBhdXRob3IgaXMgb24gdGhlIE90dG9QREYgd2ViCisgICAgc2l0ZTogSm9lbCBIYWlubGV5LCBqaGFpbmxleUBteW5ka3J5bWUuY29tLgorCisxNi4gQ2FuIHpsaWIgZGVjb2RlIEZsYXRlIGRhdGEgaW4gYW4gQWRvYmUgUERGIGZpbGU/CisKKyAgICBZZXMuIFNlZSBodHRwOi8vd3d3LnBkZmxpYi5jb20vIC4gVG8gbW9kaWZ5IFBERiBmb3Jtcywgc2VlCisgICAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9hY3JvZm9ybXRvb2wvIC4KKworMTcuIFdoeSBhbSBJIGdldHRpbmcgdGhpcyAicmVnaXN0ZXJfZnJhbWVfaW5mbyBub3QgZm91bmQiIGVycm9yIG9uIFNvbGFyaXM/CisKKyAgICBBZnRlciBpbnN0YWxsaW5nIHpsaWIgMS4xLjQgb24gU29sYXJpcyAyLjYsIHJ1bm5pbmcgYXBwbGljYXRpb25zIHVzaW5nIHpsaWIKKyAgICBnZW5lcmF0ZXMgYW4gZXJyb3Igc3VjaCBhczoKKworICAgICAgICBsZC5zby4xOiBycG06IGZhdGFsOiByZWxvY2F0aW9uIGVycm9yOiBmaWxlIC91c3IvbG9jYWwvbGliL2xpYnouc286CisgICAgICAgIHN5bWJvbCBfX3JlZ2lzdGVyX2ZyYW1lX2luZm86IHJlZmVyZW5jZWQgc3ltYm9sIG5vdCBmb3VuZAorCisgICAgVGhlIHN5bWJvbCBfX3JlZ2lzdGVyX2ZyYW1lX2luZm8gaXMgbm90IHBhcnQgb2YgemxpYiwgaXQgaXMgZ2VuZXJhdGVkIGJ5CisgICAgdGhlIEMgY29tcGlsZXIgKGNjIG9yIGdjYykuICBZb3UgbXVzdCByZWNvbXBpbGUgYXBwbGljYXRpb25zIHVzaW5nIHpsaWIKKyAgICB3aGljaCBoYXZlIHRoaXMgcHJvYmxlbS4gIFRoaXMgcHJvYmxlbSBpcyBzcGVjaWZpYyB0byBTb2xhcmlzLiAgU2VlCisgICAgaHR0cDovL3d3dy5zdW5mcmVld2FyZS5jb20gZm9yIFNvbGFyaXMgdmVyc2lvbnMgb2YgemxpYiBhbmQgYXBwbGljYXRpb25zCisgICAgdXNpbmcgemxpYi4KKworMTguIFdoeSBkb2VzIGd6aXAgZ2l2ZSBhbiBlcnJvciBvbiBhIGZpbGUgSSBtYWtlIHdpdGggY29tcHJlc3MvZGVmbGF0ZT8KKworICAgIFRoZSBjb21wcmVzcyBhbmQgZGVmbGF0ZSBmdW5jdGlvbnMgcHJvZHVjZSBkYXRhIGluIHRoZSB6bGliIGZvcm1hdCwgd2hpY2gKKyAgICBpcyBkaWZmZXJlbnQgYW5kIGluY29tcGF0aWJsZSB3aXRoIHRoZSBnemlwIGZvcm1hdC4gIFRoZSBneiogZnVuY3Rpb25zIGluCisgICAgemxpYiBvbiB0aGUgb3RoZXIgaGFuZCB1c2UgdGhlIGd6aXAgZm9ybWF0LiAgQm90aCB0aGUgemxpYiBhbmQgZ3ppcCBmb3JtYXRzCisgICAgdXNlIHRoZSBzYW1lIGNvbXByZXNzZWQgZGF0YSBmb3JtYXQgaW50ZXJuYWxseSwgYnV0IGhhdmUgZGlmZmVyZW50IGhlYWRlcnMKKyAgICBhbmQgdHJhaWxlcnMgYXJvdW5kIHRoZSBjb21wcmVzc2VkIGRhdGEuCisKKzE5LiBPaywgc28gd2h5IGFyZSB0aGVyZSB0d28gZGlmZmVyZW50IGZvcm1hdHM/CisKKyAgICBUaGUgZ3ppcCBmb3JtYXQgd2FzIGRlc2lnbmVkIHRvIHJldGFpbiB0aGUgZGlyZWN0b3J5IGluZm9ybWF0aW9uIGFib3V0IGEKKyAgICBzaW5nbGUgZmlsZSwgc3VjaCBhcyB0aGUgbmFtZSBhbmQgbGFzdCBtb2RpZmljYXRpb24gZGF0ZS4gIFRoZSB6bGliIGZvcm1hdAorICAgIG9uIHRoZSBvdGhlciBoYW5kIHdhcyBkZXNpZ25lZCBmb3IgaW4tbWVtb3J5IGFuZCBjb21tdW5pY2F0aW9uIGNoYW5uZWwKKyAgICBhcHBsaWNhdGlvbnMsIGFuZCBoYXMgYSBtdWNoIG1vcmUgY29tcGFjdCBoZWFkZXIgYW5kIHRyYWlsZXIgYW5kIHVzZXMgYQorICAgIGZhc3RlciBpbnRlZ3JpdHkgY2hlY2sgdGhhbiBnemlwLgorCisyMC4gV2VsbCB0aGF0J3MgbmljZSwgYnV0IGhvdyBkbyBJIG1ha2UgYSBnemlwIGZpbGUgaW4gbWVtb3J5PworCisgICAgWW91IGNhbiByZXF1ZXN0IHRoYXQgZGVmbGF0ZSB3cml0ZSB0aGUgZ3ppcCBmb3JtYXQgaW5zdGVhZCBvZiB0aGUgemxpYgorICAgIGZvcm1hdCB1c2luZyBkZWZsYXRlSW5pdDIoKS4gIFlvdSBjYW4gYWxzbyByZXF1ZXN0IHRoYXQgaW5mbGF0ZSBkZWNvZGUgdGhlCisgICAgZ3ppcCBmb3JtYXQgdXNpbmcgaW5mbGF0ZUluaXQyKCkuICBSZWFkIHpsaWIuaCBmb3IgbW9yZSBkZXRhaWxzLgorCisyMS4gSXMgemxpYiB0aHJlYWQtc2FmZT8KKworICAgIFllcy4gIEhvd2V2ZXIgYW55IGxpYnJhcnkgcm91dGluZXMgdGhhdCB6bGliIHVzZXMgYW5kIGFueSBhcHBsaWNhdGlvbi0KKyAgICBwcm92aWRlZCBtZW1vcnkgYWxsb2NhdGlvbiByb3V0aW5lcyBtdXN0IGFsc28gYmUgdGhyZWFkLXNhZmUuICB6bGliJ3MgZ3oqCisgICAgZnVuY3Rpb25zIHVzZSBzdGRpbyBsaWJyYXJ5IHJvdXRpbmVzLCBhbmQgbW9zdCBvZiB6bGliJ3MgZnVuY3Rpb25zIHVzZSB0aGUKKyAgICBsaWJyYXJ5IG1lbW9yeSBhbGxvY2F0aW9uIHJvdXRpbmVzIGJ5IGRlZmF1bHQuICB6bGliJ3MgKkluaXQqIGZ1bmN0aW9ucworICAgIGFsbG93IGZvciB0aGUgYXBwbGljYXRpb24gdG8gcHJvdmlkZSBjdXN0b20gbWVtb3J5IGFsbG9jYXRpb24gcm91dGluZXMuCisKKyAgICBPZiBjb3Vyc2UsIHlvdSBzaG91bGQgb25seSBvcGVyYXRlIG9uIGFueSBnaXZlbiB6bGliIG9yIGd6aXAgc3RyZWFtIGZyb20gYQorICAgIHNpbmdsZSB0aHJlYWQgYXQgYSB0aW1lLgorCisyMi4gQ2FuIEkgdXNlIHpsaWIgaW4gbXkgY29tbWVyY2lhbCBhcHBsaWNhdGlvbj8KKworICAgIFllcy4gIFBsZWFzZSByZWFkIHRoZSBsaWNlbnNlIGluIHpsaWIuaC4KKworMjMuIElzIHpsaWIgdW5kZXIgdGhlIEdOVSBsaWNlbnNlPworCisgICAgTm8uICBQbGVhc2UgcmVhZCB0aGUgbGljZW5zZSBpbiB6bGliLmguCisKKzI0LiBUaGUgbGljZW5zZSBzYXlzIHRoYXQgYWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSAicGxhaW5seSBtYXJrZWQiLiBTbworICAgIHdoYXQgZXhhY3RseSBkbyBJIG5lZWQgdG8gZG8gdG8gbWVldCB0aGF0IHJlcXVpcmVtZW50PworCisgICAgWW91IG5lZWQgdG8gY2hhbmdlIHRoZSBaTElCX1ZFUlNJT04gYW5kIFpMSUJfVkVSTlVNICNkZWZpbmVzIGluIHpsaWIuaC4gIEluCisgICAgcGFydGljdWxhciwgdGhlIGZpbmFsIHZlcnNpb24gbnVtYmVyIG5lZWRzIHRvIGJlIGNoYW5nZWQgdG8gImYiLCBhbmQgYW4KKyAgICBpZGVudGlmaWNhdGlvbiBzdHJpbmcgc2hvdWxkIGJlIGFwcGVuZGVkIHRvIFpMSUJfVkVSU0lPTi4gIFZlcnNpb24gbnVtYmVycworICAgIHgueC54LmYgYXJlIHJlc2VydmVkIGZvciBtb2RpZmljYXRpb25zIHRvIHpsaWIgYnkgb3RoZXJzIHRoYW4gdGhlIHpsaWIKKyAgICBtYWludGFpbmVycy4gIEZvciBleGFtcGxlLCBpZiB0aGUgdmVyc2lvbiBvZiB0aGUgYmFzZSB6bGliIHlvdSBhcmUgYWx0ZXJpbmcKKyAgICBpcyAiMS4yLjMuNCIsIHRoZW4gaW4gemxpYi5oIHlvdSBzaG91bGQgY2hhbmdlIFpMSUJfVkVSTlVNIHRvIDB4MTIzZiwgYW5kCisgICAgWkxJQl9WRVJTSU9OIHRvIHNvbWV0aGluZyBsaWtlICIxLjIuMy5mLXphY2hhcnktbW9kcy12MyIuICBZb3UgY2FuIGFsc28KKyAgICB1cGRhdGUgdGhlIHZlcnNpb24gc3RyaW5ncyBpbiBkZWZsYXRlLmMgYW5kIGluZnRyZWVzLmMuCisKKyAgICBGb3IgYWx0ZXJlZCBzb3VyY2UgZGlzdHJpYnV0aW9ucywgeW91IHNob3VsZCBhbHNvIG5vdGUgdGhlIG9yaWdpbiBhbmQKKyAgICBuYXR1cmUgb2YgdGhlIGNoYW5nZXMgaW4gemxpYi5oLCBhcyB3ZWxsIGFzIGluIENoYW5nZUxvZyBhbmQgUkVBRE1FLCBhbG9uZworICAgIHdpdGggdGhlIGRhdGVzIG9mIHRoZSBhbHRlcmF0aW9ucy4gIFRoZSBvcmlnaW4gc2hvdWxkIGluY2x1ZGUgYXQgbGVhc3QgeW91cgorICAgIG5hbWUgKG9yIHlvdXIgY29tcGFueSdzIG5hbWUpLCBhbmQgYW4gZW1haWwgYWRkcmVzcyB0byBjb250YWN0IGZvciBoZWxwIG9yCisgICAgaXNzdWVzIHdpdGggdGhlIGxpYnJhcnkuCisKKyAgICBOb3RlIHRoYXQgZGlzdHJpYnV0aW5nIGEgY29tcGlsZWQgemxpYiBsaWJyYXJ5IGFsb25nIHdpdGggemxpYi5oIGFuZAorICAgIHpjb25mLmggaXMgYWxzbyBhIHNvdXJjZSBkaXN0cmlidXRpb24sIGFuZCBzbyB5b3Ugc2hvdWxkIGNoYW5nZQorICAgIFpMSUJfVkVSU0lPTiBhbmQgWkxJQl9WRVJOVU0gYW5kIG5vdGUgdGhlIG9yaWdpbiBhbmQgbmF0dXJlIG9mIHRoZSBjaGFuZ2VzCisgICAgaW4gemxpYi5oIGFzIHlvdSB3b3VsZCBmb3IgYSBmdWxsIHNvdXJjZSBkaXN0cmlidXRpb24uCisKKzI1LiBXaWxsIHpsaWIgd29yayBvbiBhIGJpZy1lbmRpYW4gb3IgbGl0dGxlLWVuZGlhbiBhcmNoaXRlY3R1cmUsIGFuZCBjYW4gSQorICAgIGV4Y2hhbmdlIGNvbXByZXNzZWQgZGF0YSBiZXR3ZWVuIHRoZW0/CisKKyAgICBZZXMgYW5kIHllcy4KKworMjYuIFdpbGwgemxpYiB3b3JrIG9uIGEgNjQtYml0IG1hY2hpbmU/CisKKyAgICBZZXMuICBJdCBoYXMgYmVlbiB0ZXN0ZWQgb24gNjQtYml0IG1hY2hpbmVzLCBhbmQgaGFzIG5vIGRlcGVuZGVuY2Ugb24gYW55CisgICAgZGF0YSB0eXBlcyBiZWluZyBsaW1pdGVkIHRvIDMyLWJpdHMgaW4gbGVuZ3RoLiAgSWYgeW91IGhhdmUgYW55CisgICAgZGlmZmljdWx0aWVzLCBwbGVhc2UgcHJvdmlkZSBhIGNvbXBsZXRlIHByb2JsZW0gcmVwb3J0IHRvIHpsaWJAZ3ppcC5vcmcKKworMjcuIFdpbGwgemxpYiBkZWNvbXByZXNzIGRhdGEgZnJvbSB0aGUgUEtXYXJlIERhdGEgQ29tcHJlc3Npb24gTGlicmFyeT8KKworICAgIE5vLiAgVGhlIFBLV2FyZSBEQ0wgdXNlcyBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IGNvbXByZXNzZWQgZGF0YSBmb3JtYXQgdGhhbgorICAgIGRvZXMgUEtaSVAgYW5kIHpsaWIuICBIb3dldmVyLCB5b3UgY2FuIGxvb2sgaW4gemxpYidzIGNvbnRyaWIvYmxhc3QKKyAgICBkaXJlY3RvcnkgZm9yIGEgcG9zc2libGUgc29sdXRpb24gdG8geW91ciBwcm9ibGVtLgorCisyOC4gQ2FuIEkgYWNjZXNzIGRhdGEgcmFuZG9tbHkgaW4gYSBjb21wcmVzc2VkIHN0cmVhbT8KKworICAgIE5vLCBub3Qgd2l0aG91dCBzb21lIHByZXBhcmF0aW9uLiAgSWYgd2hlbiBjb21wcmVzc2luZyB5b3UgcGVyaW9kaWNhbGx5IHVzZQorICAgIFpfRlVMTF9GTFVTSCwgY2FyZWZ1bGx5IHdyaXRlIGFsbCB0aGUgcGVuZGluZyBkYXRhIGF0IHRob3NlIHBvaW50cywgYW5kCisgICAga2VlcCBhbiBpbmRleCBvZiB0aG9zZSBsb2NhdGlvbnMsIHRoZW4geW91IGNhbiBzdGFydCBkZWNvbXByZXNzaW9uIGF0IHRob3NlCisgICAgcG9pbnRzLiAgWW91IGhhdmUgdG8gYmUgY2FyZWZ1bCB0byBub3QgdXNlIFpfRlVMTF9GTFVTSCB0b28gb2Z0ZW4sIHNpbmNlIGl0CisgICAgY2FuIHNpZ25pZmljYW50bHkgZGVncmFkZSBjb21wcmVzc2lvbi4gIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gc2NhbiBhCisgICAgZGVmbGF0ZSBzdHJlYW0gb25jZSB0byBnZW5lcmF0ZSBhbiBpbmRleCwgYW5kIHRoZW4gdXNlIHRoYXQgaW5kZXggZm9yCisgICAgcmFuZG9tIGFjY2Vzcy4gIFNlZSBleGFtcGxlcy96cmFuLmMgLgorCisyOS4gRG9lcyB6bGliIHdvcmsgb24gTVZTLCBPUy8zOTAsIENJQ1MsIGV0Yy4/CisKKyAgICBJdCBoYXMgaW4gdGhlIHBhc3QsIGJ1dCB3ZSBoYXZlIG5vdCBoZWFyZCBvZiBhbnkgcmVjZW50IGV2aWRlbmNlLiAgVGhlcmUKKyAgICB3ZXJlIHdvcmtpbmcgcG9ydHMgb2YgemxpYiAxLjEuNCB0byBNVlMsIGJ1dCB0aG9zZSBsaW5rcyBubyBsb25nZXIgd29yay4KKyAgICBJZiB5b3Uga25vdyBvZiByZWNlbnQsIHN1Y2Nlc3NmdWwgYXBwbGljYXRpb25zIG9mIHpsaWIgb24gdGhlc2Ugb3BlcmF0aW5nCisgICAgc3lzdGVtcywgcGxlYXNlIGxldCB1cyBrbm93LiAgVGhhbmtzLgorCiszMC4gSXMgdGhlcmUgc29tZSBzaW1wbGVyLCBlYXNpZXIgdG8gcmVhZCB2ZXJzaW9uIG9mIGluZmxhdGUgSSBjYW4gbG9vayBhdCB0bworICAgIHVuZGVyc3RhbmQgdGhlIGRlZmxhdGUgZm9ybWF0PworCisgICAgRmlyc3Qgb2ZmLCB5b3Ugc2hvdWxkIHJlYWQgUkZDIDE5NTEuICBTZWNvbmQsIHllcy4gIExvb2sgaW4gemxpYidzCisgICAgY29udHJpYi9wdWZmIGRpcmVjdG9yeS4KKworMzEuIERvZXMgemxpYiBpbmZyaW5nZSBvbiBhbnkgcGF0ZW50cz8KKworICAgIEFzIGZhciBhcyB3ZSBrbm93LCBuby4gIEluIGZhY3QsIHRoYXQgd2FzIG9yaWdpbmFsbHkgdGhlIHdob2xlIHBvaW50IGJlaGluZAorICAgIHpsaWIuICBMb29rIGhlcmUgZm9yIHNvbWUgbW9yZSBpbmZvcm1hdGlvbjoKKworICAgIGh0dHA6Ly93d3cuZ3ppcC5vcmcvI2ZhcTExCisKKzMyLiBDYW4gemxpYiB3b3JrIHdpdGggZ3JlYXRlciB0aGFuIDQgR0Igb2YgZGF0YT8KKworICAgIFllcy4gIGluZmxhdGUoKSBhbmQgZGVmbGF0ZSgpIHdpbGwgcHJvY2VzcyBhbnkgYW1vdW50IG9mIGRhdGEgY29ycmVjdGx5LgorICAgIEVhY2ggY2FsbCBvZiBpbmZsYXRlKCkgb3IgZGVmbGF0ZSgpIGlzIGxpbWl0ZWQgdG8gaW5wdXQgYW5kIG91dHB1dCBjaHVua3MKKyAgICBvZiB0aGUgbWF4aW11bSB2YWx1ZSB0aGF0IGNhbiBiZSBzdG9yZWQgaW4gdGhlIGNvbXBpbGVyJ3MgInVuc2lnbmVkIGludCIKKyAgICB0eXBlLCBidXQgdGhlcmUgaXMgbm8gbGltaXQgdG8gdGhlIG51bWJlciBvZiBjaHVua3MuICBOb3RlIGhvd2V2ZXIgdGhhdCB0aGUKKyAgICBzdHJtLnRvdGFsX2luIGFuZCBzdHJtX3RvdGFsX291dCBjb3VudGVycyBtYXkgYmUgbGltaXRlZCB0byA0IEdCLiAgVGhlc2UKKyAgICBjb3VudGVycyBhcmUgcHJvdmlkZWQgYXMgYSBjb252ZW5pZW5jZSBhbmQgYXJlIG5vdCB1c2VkIGludGVybmFsbHkgYnkKKyAgICBpbmZsYXRlKCkgb3IgZGVmbGF0ZSgpLiAgVGhlIGFwcGxpY2F0aW9uIGNhbiBlYXNpbHkgc2V0IHVwIGl0cyBvd24gY291bnRlcnMKKyAgICB1cGRhdGVkIGFmdGVyIGVhY2ggY2FsbCBvZiBpbmZsYXRlKCkgb3IgZGVmbGF0ZSgpIHRvIGNvdW50IGJleW9uZCA0IEdCLgorICAgIGNvbXByZXNzKCkgYW5kIHVuY29tcHJlc3MoKSBtYXkgYmUgbGltaXRlZCB0byA0IEdCLCBzaW5jZSB0aGV5IG9wZXJhdGUgaW4gYQorICAgIHNpbmdsZSBjYWxsLiAgZ3pzZWVrKCkgYW5kIGd6dGVsbCgpIG1heSBiZSBsaW1pdGVkIHRvIDQgR0IgZGVwZW5kaW5nIG9uIGhvdworICAgIHpsaWIgaXMgY29tcGlsZWQuICBTZWUgdGhlIHpsaWJDb21waWxlRmxhZ3MoKSBmdW5jdGlvbiBpbiB6bGliLmguCisKKyAgICBUaGUgd29yZCAibWF5IiBhcHBlYXJzIHNldmVyYWwgdGltZXMgYWJvdmUgc2luY2UgdGhlcmUgaXMgYSA0IEdCIGxpbWl0IG9ubHkKKyAgICBpZiB0aGUgY29tcGlsZXIncyAibG9uZyIgdHlwZSBpcyAzMiBiaXRzLiAgSWYgdGhlIGNvbXBpbGVyJ3MgImxvbmciIHR5cGUgaXMKKyAgICA2NCBiaXRzLCB0aGVuIHRoZSBsaW1pdCBpcyAxNiBleGFieXRlcy4KKworMzMuIERvZXMgemxpYiBoYXZlIGFueSBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXM/CisKKyAgICBUaGUgb25seSBvbmUgdGhhdCB3ZSBhcmUgYXdhcmUgb2YgaXMgcG90ZW50aWFsbHkgaW4gZ3pwcmludGYoKS4gIElmIHpsaWIgaXMKKyAgICBjb21waWxlZCB0byB1c2Ugc3ByaW50ZigpIG9yIHZzcHJpbnRmKCksIHRoZW4gdGhlcmUgaXMgbm8gcHJvdGVjdGlvbgorICAgIGFnYWluc3QgYSBidWZmZXIgb3ZlcmZsb3cgb2YgYW4gOEsgc3RyaW5nIHNwYWNlIChvciBvdGhlciB2YWx1ZSBhcyBzZXQgYnkKKyAgICBnemJ1ZmZlcigpKSwgb3RoZXIgdGhhbiB0aGUgY2FsbGVyIG9mIGd6cHJpbnRmKCkgYXNzdXJpbmcgdGhhdCB0aGUgb3V0cHV0CisgICAgd2lsbCBub3QgZXhjZWVkIDhLLiAgT24gdGhlIG90aGVyIGhhbmQsIGlmIHpsaWIgaXMgY29tcGlsZWQgdG8gdXNlCisgICAgc25wcmludGYoKSBvciB2c25wcmludGYoKSwgd2hpY2ggc2hvdWxkIG5vcm1hbGx5IGJlIHRoZSBjYXNlLCB0aGVuIHRoZXJlIGlzCisgICAgbm8gdnVsbmVyYWJpbGl0eS4gIFRoZSAuL2NvbmZpZ3VyZSBzY3JpcHQgd2lsbCBkaXNwbGF5IHdhcm5pbmdzIGlmIGFuCisgICAgaW5zZWN1cmUgdmFyaWF0aW9uIG9mIHNwcmludGYoKSB3aWxsIGJlIHVzZWQgYnkgZ3pwcmludGYoKS4gIEFsc28gdGhlCisgICAgemxpYkNvbXBpbGVGbGFncygpIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGluZm9ybWF0aW9uIG9uIHdoYXQgdmFyaWFudCBvZgorICAgIHNwcmludGYoKSBpcyB1c2VkIGJ5IGd6cHJpbnRmKCkuCisKKyAgICBJZiB5b3UgZG9uJ3QgaGF2ZSBzbnByaW50ZigpIG9yIHZzbnByaW50ZigpIGFuZCB3b3VsZCBsaWtlIG9uZSwgeW91IGNhbgorICAgIGZpbmQgYSBwb3J0YWJsZSBpbXBsZW1lbnRhdGlvbiBoZXJlOgorCisgICAgICAgIGh0dHA6Ly93d3cuaWpzLnNpL3NvZnR3YXJlL3NucHJpbnRmLworCisgICAgTm90ZSB0aGF0IHlvdSBzaG91bGQgYmUgdXNpbmcgdGhlIG1vc3QgcmVjZW50IHZlcnNpb24gb2YgemxpYi4gIFZlcnNpb25zCisgICAgMS4xLjMgYW5kIGJlZm9yZSB3ZXJlIHN1YmplY3QgdG8gYSBkb3VibGUtZnJlZSB2dWxuZXJhYmlsaXR5LCBhbmQgdmVyc2lvbnMKKyAgICAxLjIuMSBhbmQgMS4yLjIgd2VyZSBzdWJqZWN0IHRvIGFuIGFjY2VzcyBleGNlcHRpb24gd2hlbiBkZWNvbXByZXNzaW5nCisgICAgaW52YWxpZCBjb21wcmVzc2VkIGRhdGEuCisKKzM0LiBJcyB0aGVyZSBhIEphdmEgdmVyc2lvbiBvZiB6bGliPworCisgICAgUHJvYmFibHkgd2hhdCB5b3Ugd2FudCBpcyB0byB1c2UgemxpYiBpbiBKYXZhLiB6bGliIGlzIGFscmVhZHkgaW5jbHVkZWQKKyAgICBhcyBwYXJ0IG9mIHRoZSBKYXZhIFNESyBpbiB0aGUgamF2YS51dGlsLnppcCBwYWNrYWdlLiBJZiB5b3UgcmVhbGx5IHdhbnQKKyAgICBhIHZlcnNpb24gb2YgemxpYiB3cml0dGVuIGluIHRoZSBKYXZhIGxhbmd1YWdlLCBsb29rIG9uIHRoZSB6bGliIGhvbWUKKyAgICBwYWdlIGZvciBsaW5rczogaHR0cDovL3psaWIubmV0LyAuCisKKzM1LiBJIGdldCB0aGlzIG9yIHRoYXQgY29tcGlsZXIgb3Igc291cmNlLWNvZGUgc2Nhbm5lciB3YXJuaW5nIHdoZW4gSSBjcmFuayBpdAorICAgIHVwIHRvIG1heGltYWxseS1wZWRhbnRpYy4gQ2FuJ3QgeW91IGd1eXMgd3JpdGUgcHJvcGVyIGNvZGU/CisKKyAgICBNYW55IHllYXJzIGFnbywgd2UgZ2F2ZSB1cCBhdHRlbXB0aW5nIHRvIGF2b2lkIHdhcm5pbmdzIG9uIGV2ZXJ5IGNvbXBpbGVyCisgICAgaW4gdGhlIHVuaXZlcnNlLiAgSXQganVzdCBnb3QgdG8gYmUgYSB3YXN0ZSBvZiB0aW1lLCBhbmQgc29tZSBjb21waWxlcnMKKyAgICB3ZXJlIGRvd25yaWdodCBzaWxseSBhcyB3ZWxsIGFzIGNvbnRyYWRpY3RlZCBlYWNoIG90aGVyLiAgU28gbm93LCB3ZSBzaW1wbHkKKyAgICBtYWtlIHN1cmUgdGhhdCB0aGUgY29kZSBhbHdheXMgd29ya3MuCisKKzM2LiBWYWxncmluZCAob3Igc29tZSBzaW1pbGFyIG1lbW9yeSBhY2Nlc3MgY2hlY2tlcikgc2F5cyB0aGF0IGRlZmxhdGUgaXMKKyAgICBwZXJmb3JtaW5nIGEgY29uZGl0aW9uYWwganVtcCB0aGF0IGRlcGVuZHMgb24gYW4gdW5pbml0aWFsaXplZCB2YWx1ZS4KKyAgICBJc24ndCB0aGF0IGEgYnVnPworCisgICAgTm8uICBUaGF0IGlzIGludGVudGlvbmFsIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLCBhbmQgdGhlIG91dHB1dCBvZiBkZWZsYXRlCisgICAgaXMgbm90IGFmZmVjdGVkLiAgVGhpcyBvbmx5IHN0YXJ0ZWQgc2hvd2luZyB1cCByZWNlbnRseSBzaW5jZSB6bGliIDEuMi54CisgICAgdXNlcyBtYWxsb2MoKSBieSBkZWZhdWx0IGZvciBhbGxvY2F0aW9ucywgd2hlcmVhcyBlYXJsaWVyIHZlcnNpb25zIHVzZWQKKyAgICBjYWxsb2MoKSwgd2hpY2ggemVyb3Mgb3V0IHRoZSBhbGxvY2F0ZWQgbWVtb3J5LiAgRXZlbiB0aG91Z2ggdGhlIGNvZGUgd2FzCisgICAgY29ycmVjdCwgdmVyc2lvbnMgMS4yLjQgYW5kIGxhdGVyIHdhcyBjaGFuZ2VkIHRvIG5vdCBzdGltdWxhdGUgdGhlc2UKKyAgICBjaGVja2Vycy4KKworMzcuIFdpbGwgemxpYiByZWFkIHRoZSAoaW5zZXJ0IGFueSBhbmNpZW50IG9yIGFyY2FuZSBmb3JtYXQgaGVyZSkgY29tcHJlc3NlZAorICAgIGRhdGEgZm9ybWF0PworCisgICAgUHJvYmFibHkgbm90LiBMb29rIGluIHRoZSBjb21wLmNvbXByZXNzaW9uIEZBUSBmb3IgcG9pbnRlcnMgdG8gdmFyaW91cworICAgIGZvcm1hdHMgYW5kIGFzc29jaWF0ZWQgc29mdHdhcmUuCisKKzM4LiBIb3cgY2FuIEkgZW5jcnlwdC9kZWNyeXB0IHppcCBmaWxlcyB3aXRoIHpsaWI/CisKKyAgICB6bGliIGRvZXNuJ3Qgc3VwcG9ydCBlbmNyeXB0aW9uLiAgVGhlIG9yaWdpbmFsIFBLWklQIGVuY3J5cHRpb24gaXMgdmVyeQorICAgIHdlYWsgYW5kIGNhbiBiZSBicm9rZW4gd2l0aCBmcmVlbHkgYXZhaWxhYmxlIHByb2dyYW1zLiAgVG8gZ2V0IHN0cm9uZworICAgIGVuY3J5cHRpb24sIHVzZSBHbnVQRywgaHR0cDovL3d3dy5nbnVwZy5vcmcvICwgd2hpY2ggYWxyZWFkeSBpbmNsdWRlcyB6bGliCisgICAgY29tcHJlc3Npb24uICBGb3IgUEtaSVAgY29tcGF0aWJsZSAiZW5jcnlwdGlvbiIsIGxvb2sgYXQKKyAgICBodHRwOi8vd3d3LmluZm8temlwLm9yZy8KKworMzkuIFdoYXQncyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSAiZ3ppcCIgYW5kICJkZWZsYXRlIiBIVFRQIDEuMSBlbmNvZGluZ3M/CisKKyAgICAiZ3ppcCIgaXMgdGhlIGd6aXAgZm9ybWF0LCBhbmQgImRlZmxhdGUiIGlzIHRoZSB6bGliIGZvcm1hdC4gIFRoZXkgc2hvdWxkCisgICAgcHJvYmFibHkgaGF2ZSBjYWxsZWQgdGhlIHNlY29uZCBvbmUgInpsaWIiIGluc3RlYWQgdG8gYXZvaWQgY29uZnVzaW9uIHdpdGgKKyAgICB0aGUgcmF3IGRlZmxhdGUgY29tcHJlc3NlZCBkYXRhIGZvcm1hdC4gIFdoaWxlIHRoZSBIVFRQIDEuMSBSRkMgMjYxNgorICAgIGNvcnJlY3RseSBwb2ludHMgdG8gdGhlIHpsaWIgc3BlY2lmaWNhdGlvbiBpbiBSRkMgMTk1MCBmb3IgdGhlICJkZWZsYXRlIgorICAgIHRyYW5zZmVyIGVuY29kaW5nLCB0aGVyZSBoYXZlIGJlZW4gcmVwb3J0cyBvZiBzZXJ2ZXJzIGFuZCBicm93c2VycyB0aGF0CisgICAgaW5jb3JyZWN0bHkgcHJvZHVjZSBvciBleHBlY3QgcmF3IGRlZmxhdGUgZGF0YSBwZXIgdGhlIGRlZmxhdGUKKyAgICBzcGVjaWZpY2F0aW9uIGluIFJGQyAxOTUxLCBtb3N0IG5vdGFibHkgTWljcm9zb2Z0LiAgU28gZXZlbiB0aG91Z2ggdGhlCisgICAgImRlZmxhdGUiIHRyYW5zZmVyIGVuY29kaW5nIHVzaW5nIHRoZSB6bGliIGZvcm1hdCB3b3VsZCBiZSB0aGUgbW9yZQorICAgIGVmZmljaWVudCBhcHByb2FjaCAoYW5kIGluIGZhY3QgZXhhY3RseSB3aGF0IHRoZSB6bGliIGZvcm1hdCB3YXMgZGVzaWduZWQKKyAgICBmb3IpLCB1c2luZyB0aGUgImd6aXAiIHRyYW5zZmVyIGVuY29kaW5nIGlzIHByb2JhYmx5IG1vcmUgcmVsaWFibGUgZHVlIHRvCisgICAgYW4gdW5mb3J0dW5hdGUgY2hvaWNlIG9mIG5hbWUgb24gdGhlIHBhcnQgb2YgdGhlIEhUVFAgMS4xIGF1dGhvcnMuCisKKyAgICBCb3R0b20gbGluZTogdXNlIHRoZSBnemlwIGZvcm1hdCBmb3IgSFRUUCAxLjEgZW5jb2RpbmcuCisKKzQwLiBEb2VzIHpsaWIgc3VwcG9ydCB0aGUgbmV3ICJEZWZsYXRlNjQiIGZvcm1hdCBpbnRyb2R1Y2VkIGJ5IFBLV2FyZT8KKworICAgIE5vLiAgUEtXYXJlIGhhcyBhcHBhcmVudGx5IGRlY2lkZWQgdG8ga2VlcCB0aGF0IGZvcm1hdCBwcm9wcmlldGFyeSwgc2luY2UKKyAgICB0aGV5IGhhdmUgbm90IGRvY3VtZW50ZWQgaXQgYXMgdGhleSBoYXZlIHByZXZpb3VzIGNvbXByZXNzaW9uIGZvcm1hdHMuICBJbgorICAgIGFueSBjYXNlLCB0aGUgY29tcHJlc3Npb24gaW1wcm92ZW1lbnRzIGFyZSBzbyBtb2Rlc3QgY29tcGFyZWQgdG8gb3RoZXIgbW9yZQorICAgIG1vZGVybiBhcHByb2FjaGVzLCB0aGF0IGl0J3Mgbm90IHdvcnRoIHRoZSBlZmZvcnQgdG8gaW1wbGVtZW50LgorCis0MS4gSSdtIGhhdmluZyBhIHByb2JsZW0gd2l0aCB0aGUgemlwIGZ1bmN0aW9ucyBpbiB6bGliLCBjYW4geW91IGhlbHA/CisKKyAgICBUaGVyZSBhcmUgbm8gemlwIGZ1bmN0aW9ucyBpbiB6bGliLiAgWW91IGFyZSBwcm9iYWJseSB1c2luZyBtaW5pemlwIGJ5CisgICAgR2lsZXMgVm9sbGFudCwgd2hpY2ggaXMgZm91bmQgaW4gdGhlIGNvbnRyaWIgZGlyZWN0b3J5IG9mIHpsaWIuICBJdCBpcyBub3QKKyAgICBwYXJ0IG9mIHpsaWIuICBJbiBmYWN0IG5vbmUgb2YgdGhlIHN0dWZmIGluIGNvbnRyaWIgaXMgcGFydCBvZiB6bGliLiAgVGhlCisgICAgZmlsZXMgaW4gdGhlcmUgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHpsaWIgYXV0aG9ycy4gIFlvdSBuZWVkIHRvIGNvbnRhY3QKKyAgICB0aGUgYXV0aG9ycyBvZiB0aGUgcmVzcGVjdGl2ZSBjb250cmlidXRpb24gZm9yIGhlbHAuCisKKzQyLiBUaGUgbWF0Y2guYXNtIGNvZGUgaW4gY29udHJpYiBpcyB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisgICAgU2luY2UgaXQncyBwYXJ0IG9mIHpsaWIsIGRvZXNuJ3QgdGhhdCBtZWFuIHRoYXQgYWxsIG9mIHpsaWIgZmFsbHMgdW5kZXIgdGhlCisgICAgR05VIEdQTD8KKworICAgIE5vLiAgVGhlIGZpbGVzIGluIGNvbnRyaWIgYXJlIG5vdCBwYXJ0IG9mIHpsaWIuICBUaGV5IHdlcmUgY29udHJpYnV0ZWQgYnkKKyAgICBvdGhlciBhdXRob3JzIGFuZCBhcmUgcHJvdmlkZWQgYXMgYSBjb252ZW5pZW5jZSB0byB0aGUgdXNlciB3aXRoaW4gdGhlIHpsaWIKKyAgICBkaXN0cmlidXRpb24uICBFYWNoIGl0ZW0gaW4gY29udHJpYiBoYXMgaXRzIG93biBsaWNlbnNlLgorCis0My4gSXMgemxpYiBzdWJqZWN0IHRvIGV4cG9ydCBjb250cm9scz8gIFdoYXQgaXMgaXRzIEVDQ04/CisKKyAgICB6bGliIGlzIG5vdCBzdWJqZWN0IHRvIGV4cG9ydCBjb250cm9scywgYW5kIHNvIGlzIGNsYXNzaWZpZWQgYXMgRUFSOTkuCisKKzQ0LiBDYW4geW91IHBsZWFzZSBzaWduIHRoZXNlIGxlbmd0aHkgbGVnYWwgZG9jdW1lbnRzIGFuZCBmYXggdGhlbSBiYWNrIHRvIHVzCisgICAgc28gdGhhdCB3ZSBjYW4gdXNlIHlvdXIgc29mdHdhcmUgaW4gb3VyIHByb2R1Y3Q/CisKKyAgICBOby4gR28gYXdheS4gU2hvby4KZGlmZiAtLWdpdCBhL3NyYy9JTkRFWCBiL3NyYy9JTkRFWApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmEwNjQxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL0lOREVYCkBAIC0wLDAgKzEsNjggQEAKK0NNYWtlTGlzdHMudHh0ICBjbWFrZSBidWlsZCBmaWxlCitDaGFuZ2VMb2cgICAgICAgaGlzdG9yeSBvZiBjaGFuZ2VzCitGQVEgICAgICAgICAgICAgRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvbnMgYWJvdXQgemxpYgorSU5ERVggICAgICAgICAgIHRoaXMgZmlsZQorTWFrZWZpbGUgICAgICAgIGR1bW15IE1ha2VmaWxlIHRoYXQgdGVsbHMgeW91IHRvIC4vY29uZmlndXJlCitNYWtlZmlsZS5pbiAgICAgdGVtcGxhdGUgZm9yIFVuaXggTWFrZWZpbGUKK1JFQURNRSAgICAgICAgICBndWVzcyB3aGF0Citjb25maWd1cmUgICAgICAgY29uZmlndXJlIHNjcmlwdCBmb3IgVW5peAorbWFrZV92bXMuY29tICAgIG1ha2VmaWxlIGZvciBWTVMKK3Rlc3QvZXhhbXBsZS5jICB6bGliIHVzYWdlcyBleGFtcGxlcyBmb3IgYnVpbGQgdGVzdGluZwordGVzdC9taW5pZ3ppcC5jIG1pbmltYWwgZ3ppcC1saWtlIGZ1bmN0aW9uYWxpdHkgZm9yIGJ1aWxkIHRlc3RpbmcKK3Rlc3QvaW5mY292ZXIuYyBpbmYqLmMgY29kZSBjb3ZlcmFnZSBmb3IgYnVpbGQgY292ZXJhZ2UgdGVzdGluZwordHJlZWJ1aWxkLnhtbCAgIFhNTCBkZXNjcmlwdGlvbiBvZiBzb3VyY2UgZmlsZSBkZXBlbmRlbmNpZXMKK3pjb25mLmguY21ha2VpbiB6Y29uZi5oIHRlbXBsYXRlIGZvciBjbWFrZQoremNvbmYuaC5pbiAgICAgIHpjb25mLmggdGVtcGxhdGUgZm9yIGNvbmZpZ3VyZQoremxpYi4zICAgICAgICAgIE1hbiBwYWdlIGZvciB6bGliCit6bGliLjMucGRmICAgICAgTWFuIHBhZ2UgaW4gUERGIGZvcm1hdAoremxpYi5tYXAgICAgICAgIExpbnV4IHN5bWJvbCBpbmZvcm1hdGlvbgoremxpYi5wYy5pbiAgICAgIFRlbXBsYXRlIGZvciBwa2ctY29uZmlnIGRlc2NyaXB0b3IKK3psaWIucGMuY21ha2VpbiB6bGliLnBjIHRlbXBsYXRlIGZvciBjbWFrZQoremxpYjJhbnNpICAgICAgIHBlcmwgc2NyaXB0IHRvIGNvbnZlcnQgc291cmNlIGZpbGVzIGZvciBDKysgY29tcGlsYXRpb24KKworYW1pZ2EvICAgICAgICAgIG1ha2VmaWxlcyBmb3IgQW1pZ2EgU0FTIEMKK2FzNDAwLyAgICAgICAgICBtYWtlZmlsZXMgZm9yIEFTLzQwMAorZG9jLyAgICAgICAgICAgIGRvY3VtZW50YXRpb24gZm9yIGZvcm1hdHMgYW5kIGFsZ29yaXRobXMKK21zZG9zLyAgICAgICAgICBtYWtlZmlsZXMgZm9yIE1TRE9TCituaW50ZW5kb2RzLyAgICAgbWFrZWZpbGUgZm9yIE5pbnRlbmRvIERTCitvbGQvICAgICAgICAgICAgbWFrZWZpbGVzIGZvciB2YXJpb3VzIGFyY2hpdGVjdHVyZXMgYW5kIHpsaWIgZG9jdW1lbnRhdGlvbgorICAgICAgICAgICAgICAgIGZpbGVzIHRoYXQgaGF2ZSBub3QgeWV0IGJlZW4gdXBkYXRlZCBmb3IgemxpYiAxLjIueAorcW54LyAgICAgICAgICAgIG1ha2VmaWxlcyBmb3IgUU5YCit3YXRjb20vICAgICAgICAgbWFrZWZpbGVzIGZvciBPcGVuV2F0Y29tCit3aW4zMi8gICAgICAgICAgbWFrZWZpbGVzIGZvciBXaW5kb3dzCisKKyAgICAgICAgICAgICAgICB6bGliIHB1YmxpYyBoZWFkZXIgZmlsZXMgKHJlcXVpcmVkIGZvciBsaWJyYXJ5IHVzZSk6Cit6Y29uZi5oCit6bGliLmgKKworICAgICAgICAgICAgICAgIHByaXZhdGUgc291cmNlIGZpbGVzIHVzZWQgdG8gYnVpbGQgdGhlIHpsaWIgbGlicmFyeToKK2FkbGVyMzIuYworY29tcHJlc3MuYworY3JjMzIuYworY3JjMzIuaAorZGVmbGF0ZS5jCitkZWZsYXRlLmgKK2d6Y2xvc2UuYworZ3pndXRzLmgKK2d6bGliLmMKK2d6cmVhZC5jCitnendyaXRlLmMKK2luZmJhY2suYworaW5mZmFzdC5jCitpbmZmYXN0LmgKK2luZmZpeGVkLmgKK2luZmxhdGUuYworaW5mbGF0ZS5oCitpbmZ0cmVlcy5jCitpbmZ0cmVlcy5oCit0cmVlcy5jCit0cmVlcy5oCit1bmNvbXByLmMKK3p1dGlsLmMKK3p1dGlsLmgKKworICAgICAgICAgICAgICAgIHNvdXJjZSBmaWxlcyBmb3Igc2FtcGxlIHByb2dyYW1zCitTZWUgZXhhbXBsZXMvUkVBRE1FLmV4YW1wbGVzCisKKyAgICAgICAgICAgICAgICB1bnN1cHBvcnRlZCBjb250cmlidXRpb25zIGJ5IHRoaXJkIHBhcnRpZXMKK1NlZSBjb250cmliL1JFQURNRS5jb250cmliCmRpZmYgLS1naXQgYS9zcmMvTWFrZWZpbGUgYi9zcmMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJiYTg2YwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9NYWtlZmlsZQpAQCAtMCwwICsxLDUgQEAKK2FsbDoKKwktQGVjaG8gIlBsZWFzZSB1c2UgLi9jb25maWd1cmUgZmlyc3QuICBUaGFuayB5b3UuIgorCitkaXN0Y2xlYW46CisJbWFrZSAtZiBNYWtlZmlsZS5pbiBkaXN0Y2xlYW4KZGlmZiAtLWdpdCBhL3NyYy9NYWtlZmlsZS5pbiBiL3NyYy9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDg1OGFhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNDA4IEBACisjIE1ha2VmaWxlIGZvciB6bGliCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDE3IEplYW4tbG91cCBHYWlsbHksIE1hcmsgQWRsZXIKKyMgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAorCisjIFRvIGNvbXBpbGUgYW5kIHRlc3QsIHR5cGU6CisjICAgIC4vY29uZmlndXJlOyBtYWtlIHRlc3QKKyMgTm9ybWFsbHkgY29uZmlndXJlIGJ1aWxkcyBib3RoIGEgc3RhdGljIGFuZCBhIHNoYXJlZCBsaWJyYXJ5LgorIyBJZiB5b3Ugd2FudCB0byBidWlsZCBqdXN0IGEgc3RhdGljIGxpYnJhcnksIHVzZTogLi9jb25maWd1cmUgLS1zdGF0aWMKKworIyBUbyB1c2UgdGhlIGFzbSBjb2RlLCB0eXBlOgorIyAgICBjcCBjb250cmliL2FzbT84Ni9tYXRjaC5TIC4vbWF0Y2guUworIyAgICBtYWtlIExPQz0tREFTTVYgT0JKQT1tYXRjaC5vCisKKyMgVG8gaW5zdGFsbCAvdXNyL2xvY2FsL2xpYi9saWJ6LiogYW5kIC91c3IvbG9jYWwvaW5jbHVkZS96bGliLmgsIHR5cGU6CisjICAgIG1ha2UgaW5zdGFsbAorIyBUbyBpbnN0YWxsIGluICRIT01FIGluc3RlYWQgb2YgL3Vzci9sb2NhbCwgdXNlOgorIyAgICBtYWtlIGluc3RhbGwgcHJlZml4PSRIT01FCisKK0NDPWNjCisKK0NGTEFHUz0tTworI0NGTEFHUz0tTyAtRE1BWF9XQklUUz0xNCAtRE1BWF9NRU1fTEVWRUw9NworI0NGTEFHUz0tZyAtRFpMSUJfREVCVUcKKyNDRkxBR1M9LU8zIC1XYWxsIC1Xd3JpdGUtc3RyaW5ncyAtV3BvaW50ZXItYXJpdGggLVdjb252ZXJzaW9uIFwKKyMgICAgICAgICAgIC1Xc3RyaWN0LXByb3RvdHlwZXMgLVdtaXNzaW5nLXByb3RvdHlwZXMKKworU0ZMQUdTPS1PCitMREZMQUdTPQorVEVTVF9MREZMQUdTPS1MLiBsaWJ6LmEKK0xEU0hBUkVEPSQoQ0MpCitDUFA9JChDQykgLUUKKworU1RBVElDTElCPWxpYnouYQorU0hBUkVETElCPWxpYnouc28KK1NIQVJFRExJQlY9bGliei5zby4xLjIuMTIKK1NIQVJFRExJQk09bGliei5zby4xCitMSUJTPSQoU1RBVElDTElCKSAkKFNIQVJFRExJQlYpCisKK0FSPWFyCitBUkZMQUdTPXJjCitSQU5MSUI9cmFubGliCitMRENPTkZJRz1sZGNvbmZpZworTERTSEFSRURMSUJDPS1sYworVEFSPXRhcgorU0hFTEw9L2Jpbi9zaAorRVhFPQorCitwcmVmaXggPSAvdXNyL2xvY2FsCitleGVjX3ByZWZpeCA9ICR7cHJlZml4fQorbGliZGlyID0gJHtleGVjX3ByZWZpeH0vbGliCitzaGFyZWRsaWJkaXIgPSAke2xpYmRpcn0KK2luY2x1ZGVkaXIgPSAke3ByZWZpeH0vaW5jbHVkZQorbWFuZGlyID0gJHtwcmVmaXh9L3NoYXJlL21hbgorbWFuM2RpciA9ICR7bWFuZGlyfS9tYW4zCitwa2djb25maWdkaXIgPSAke2xpYmRpcn0vcGtnY29uZmlnCitTUkNESVI9CitaSU5DPQorWklOQ09VVD0tSS4KKworT0JKWiA9IGFkbGVyMzIubyBjcmMzMi5vIGRlZmxhdGUubyBpbmZiYWNrLm8gaW5mZmFzdC5vIGluZmxhdGUubyBpbmZ0cmVlcy5vIHRyZWVzLm8genV0aWwubworT0JKRyA9IGNvbXByZXNzLm8gdW5jb21wci5vIGd6Y2xvc2UubyBnemxpYi5vIGd6cmVhZC5vIGd6d3JpdGUubworT0JKQyA9ICQoT0JKWikgJChPQkpHKQorCitQSUNfT0JKWiA9IGFkbGVyMzIubG8gY3JjMzIubG8gZGVmbGF0ZS5sbyBpbmZiYWNrLmxvIGluZmZhc3QubG8gaW5mbGF0ZS5sbyBpbmZ0cmVlcy5sbyB0cmVlcy5sbyB6dXRpbC5sbworUElDX09CSkcgPSBjb21wcmVzcy5sbyB1bmNvbXByLmxvIGd6Y2xvc2UubG8gZ3psaWIubG8gZ3pyZWFkLmxvIGd6d3JpdGUubG8KK1BJQ19PQkpDID0gJChQSUNfT0JKWikgJChQSUNfT0JKRykKKworIyB0byB1c2UgdGhlIGFzbSBjb2RlOiBtYWtlIE9CSkE9bWF0Y2gubywgUElDX09CSkE9bWF0Y2gubG8KK09CSkEgPQorUElDX09CSkEgPQorCitPQkpTID0gJChPQkpDKSAkKE9CSkEpCisKK1BJQ19PQkpTID0gJChQSUNfT0JKQykgJChQSUNfT0JKQSkKKworYWxsOiBzdGF0aWMgc2hhcmVkCisKK3N0YXRpYzogZXhhbXBsZSQoRVhFKSBtaW5pZ3ppcCQoRVhFKQorCitzaGFyZWQ6IGV4YW1wbGVzaCQoRVhFKSBtaW5pZ3ppcHNoJChFWEUpCisKK2FsbDY0OiBleGFtcGxlNjQkKEVYRSkgbWluaWd6aXA2NCQoRVhFKQorCitjaGVjazogdGVzdAorCit0ZXN0OiBhbGwgdGVzdHN0YXRpYyB0ZXN0c2hhcmVkCisKK3Rlc3RzdGF0aWM6IHN0YXRpYworCUBUTVBTVD10bXBzdF8kJDsgXAorCWlmIGVjaG8gaGVsbG8gd29ybGQgfCAuL21pbmlnemlwIHwgLi9taW5pZ3ppcCAtZCAmJiAuL2V4YW1wbGUgJCRUTVBTVCA7IHRoZW4gXAorCSAgZWNobyAnCQkqKiogemxpYiB0ZXN0IE9LICoqKic7IFwKKwllbHNlIFwKKwkgIGVjaG8gJwkJKioqIHpsaWIgdGVzdCBGQUlMRUQgKioqJzsgZmFsc2U7IFwKKwlmaQorCUBybSAtZiB0bXBzdF8kJAorCit0ZXN0c2hhcmVkOiBzaGFyZWQKKwlATERfTElCUkFSWV9QQVRIPWBwd2RgOiQoTERfTElCUkFSWV9QQVRIKSA7IGV4cG9ydCBMRF9MSUJSQVJZX1BBVEg7IFwKKwlMRF9MSUJSQVJZTjMyX1BBVEg9YHB3ZGA6JChMRF9MSUJSQVJZTjMyX1BBVEgpIDsgZXhwb3J0IExEX0xJQlJBUllOMzJfUEFUSDsgXAorCURZTERfTElCUkFSWV9QQVRIPWBwd2RgOiQoRFlMRF9MSUJSQVJZX1BBVEgpIDsgZXhwb3J0IERZTERfTElCUkFSWV9QQVRIOyBcCisJU0hMSUJfUEFUSD1gcHdkYDokKFNITElCX1BBVEgpIDsgZXhwb3J0IFNITElCX1BBVEg7IFwKKwlUTVBTSD10bXBzaF8kJDsgXAorCWlmIGVjaG8gaGVsbG8gd29ybGQgfCAuL21pbmlnemlwc2ggfCAuL21pbmlnemlwc2ggLWQgJiYgLi9leGFtcGxlc2ggJCRUTVBTSDsgdGhlbiBcCisJICBlY2hvICcJCSoqKiB6bGliIHNoYXJlZCB0ZXN0IE9LICoqKic7IFwKKwllbHNlIFwKKwkgIGVjaG8gJwkJKioqIHpsaWIgc2hhcmVkIHRlc3QgRkFJTEVEICoqKic7IGZhbHNlOyBcCisJZmkKKwlAcm0gLWYgdG1wc2hfJCQKKwordGVzdDY0OiBhbGw2NAorCUBUTVA2ND10bXA2NF8kJDsgXAorCWlmIGVjaG8gaGVsbG8gd29ybGQgfCAuL21pbmlnemlwNjQgfCAuL21pbmlnemlwNjQgLWQgJiYgLi9leGFtcGxlNjQgJCRUTVA2NDsgdGhlbiBcCisJICBlY2hvICcJCSoqKiB6bGliIDY0LWJpdCB0ZXN0IE9LICoqKic7IFwKKwllbHNlIFwKKwkgIGVjaG8gJwkJKioqIHpsaWIgNjQtYml0IHRlc3QgRkFJTEVEICoqKic7IGZhbHNlOyBcCisJZmkKKwlAcm0gLWYgdG1wNjRfJCQKKworaW5mY292ZXIubzogJChTUkNESVIpdGVzdC9pbmZjb3Zlci5jICQoU1JDRElSKXpsaWIuaCB6Y29uZi5oCisJJChDQykgJChDRkxBR1MpICQoWklOQ09VVCkgLWMgLW8gJEAgJChTUkNESVIpdGVzdC9pbmZjb3Zlci5jCisKK2luZmNvdmVyOiBpbmZjb3Zlci5vIGxpYnouYQorCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBpbmZjb3Zlci5vIGxpYnouYQorCitjb3ZlcjogaW5mY292ZXIKKwlybSAtZiAqLmdjZGEKKwkuL2luZmNvdmVyCisJZ2NvdiBpbmYqLmMKKworbGliei5hOiAkKE9CSlMpCisJJChBUikgJChBUkZMQUdTKSAkQCAkKE9CSlMpCisJLUAgKCQoUkFOTElCKSAkQCB8fCB0cnVlKSA+L2Rldi9udWxsIDI+JjEKKworbWF0Y2gubzogbWF0Y2guUworCSQoQ1BQKSBtYXRjaC5TID4gX21hdGNoLnMKKwkkKENDKSAtYyBfbWF0Y2gucworCW12IF9tYXRjaC5vIG1hdGNoLm8KKwlybSAtZiBfbWF0Y2gucworCittYXRjaC5sbzogbWF0Y2guUworCSQoQ1BQKSBtYXRjaC5TID4gX21hdGNoLnMKKwkkKENDKSAtYyAtZlBJQyBfbWF0Y2gucworCW12IF9tYXRjaC5vIG1hdGNoLmxvCisJcm0gLWYgX21hdGNoLnMKKworZXhhbXBsZS5vOiAkKFNSQ0RJUil0ZXN0L2V4YW1wbGUuYyAkKFNSQ0RJUil6bGliLmggemNvbmYuaAorCSQoQ0MpICQoQ0ZMQUdTKSAkKFpJTkNPVVQpIC1jIC1vICRAICQoU1JDRElSKXRlc3QvZXhhbXBsZS5jCisKK21pbmlnemlwLm86ICQoU1JDRElSKXRlc3QvbWluaWd6aXAuYyAkKFNSQ0RJUil6bGliLmggemNvbmYuaAorCSQoQ0MpICQoQ0ZMQUdTKSAkKFpJTkNPVVQpIC1jIC1vICRAICQoU1JDRElSKXRlc3QvbWluaWd6aXAuYworCitleGFtcGxlNjQubzogJChTUkNESVIpdGVzdC9leGFtcGxlLmMgJChTUkNESVIpemxpYi5oIHpjb25mLmgKKwkkKENDKSAkKENGTEFHUykgJChaSU5DT1VUKSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IC1jIC1vICRAICQoU1JDRElSKXRlc3QvZXhhbXBsZS5jCisKK21pbmlnemlwNjQubzogJChTUkNESVIpdGVzdC9taW5pZ3ppcC5jICQoU1JDRElSKXpsaWIuaCB6Y29uZi5oCisJJChDQykgJChDRkxBR1MpICQoWklOQ09VVCkgLURfRklMRV9PRkZTRVRfQklUUz02NCAtYyAtbyAkQCAkKFNSQ0RJUil0ZXN0L21pbmlnemlwLmMKKworCithZGxlcjMyLm86ICQoU1JDRElSKWFkbGVyMzIuYworCSQoQ0MpICQoQ0ZMQUdTKSAkKFpJTkMpIC1jIC1vICRAICQoU1JDRElSKWFkbGVyMzIuYworCitjcmMzMi5vOiAkKFNSQ0RJUiljcmMzMi5jCisJJChDQykgJChDRkxBR1MpICQoWklOQykgLWMgLW8gJEAgJChTUkNESVIpY3JjMzIuYworCitkZWZsYXRlLm86ICQoU1JDRElSKWRlZmxhdGUuYworCSQoQ0MpICQoQ0ZMQUdTKSAkKFpJTkMpIC1jIC1vICRAICQoU1JDRElSKWRlZmxhdGUuYworCitpbmZiYWNrLm86ICQoU1JDRElSKWluZmJhY2suYworCSQoQ0MpICQoQ0ZMQUdTKSAkKFpJTkMpIC1jIC1vICRAICQoU1JDRElSKWluZmJhY2suYworCitpbmZmYXN0Lm86ICQoU1JDRElSKWluZmZhc3QuYworCSQoQ0MpICQoQ0ZMQUdTKSAkKFpJTkMpIC1jIC1vICRAICQoU1JDRElSKWluZmZhc3QuYworCitpbmZsYXRlLm86ICQoU1JDRElSKWluZmxhdGUuYworCSQoQ0MpICQoQ0ZMQUdTKSAkKFpJTkMpIC1jIC1vICRAICQoU1JDRElSKWluZmxhdGUuYworCitpbmZ0cmVlcy5vOiAkKFNSQ0RJUilpbmZ0cmVlcy5jCisJJChDQykgJChDRkxBR1MpICQoWklOQykgLWMgLW8gJEAgJChTUkNESVIpaW5mdHJlZXMuYworCit0cmVlcy5vOiAkKFNSQ0RJUil0cmVlcy5jCisJJChDQykgJChDRkxBR1MpICQoWklOQykgLWMgLW8gJEAgJChTUkNESVIpdHJlZXMuYworCit6dXRpbC5vOiAkKFNSQ0RJUil6dXRpbC5jCisJJChDQykgJChDRkxBR1MpICQoWklOQykgLWMgLW8gJEAgJChTUkNESVIpenV0aWwuYworCitjb21wcmVzcy5vOiAkKFNSQ0RJUiljb21wcmVzcy5jCisJJChDQykgJChDRkxBR1MpICQoWklOQykgLWMgLW8gJEAgJChTUkNESVIpY29tcHJlc3MuYworCit1bmNvbXByLm86ICQoU1JDRElSKXVuY29tcHIuYworCSQoQ0MpICQoQ0ZMQUdTKSAkKFpJTkMpIC1jIC1vICRAICQoU1JDRElSKXVuY29tcHIuYworCitnemNsb3NlLm86ICQoU1JDRElSKWd6Y2xvc2UuYworCSQoQ0MpICQoQ0ZMQUdTKSAkKFpJTkMpIC1jIC1vICRAICQoU1JDRElSKWd6Y2xvc2UuYworCitnemxpYi5vOiAkKFNSQ0RJUilnemxpYi5jCisJJChDQykgJChDRkxBR1MpICQoWklOQykgLWMgLW8gJEAgJChTUkNESVIpZ3psaWIuYworCitnenJlYWQubzogJChTUkNESVIpZ3pyZWFkLmMKKwkkKENDKSAkKENGTEFHUykgJChaSU5DKSAtYyAtbyAkQCAkKFNSQ0RJUilnenJlYWQuYworCitnendyaXRlLm86ICQoU1JDRElSKWd6d3JpdGUuYworCSQoQ0MpICQoQ0ZMQUdTKSAkKFpJTkMpIC1jIC1vICRAICQoU1JDRElSKWd6d3JpdGUuYworCisKK2FkbGVyMzIubG86ICQoU1JDRElSKWFkbGVyMzIuYworCS1AbWtkaXIgb2JqcyAyPi9kZXYvbnVsbCB8fCB0ZXN0IC1kIG9ianMKKwkkKENDKSAkKFNGTEFHUykgJChaSU5DKSAtRFBJQyAtYyAtbyBvYmpzL2FkbGVyMzIubyAkKFNSQ0RJUilhZGxlcjMyLmMKKwktQG12IG9ianMvYWRsZXIzMi5vICRACisKK2NyYzMyLmxvOiAkKFNSQ0RJUiljcmMzMi5jCisJLUBta2RpciBvYmpzIDI+L2Rldi9udWxsIHx8IHRlc3QgLWQgb2JqcworCSQoQ0MpICQoU0ZMQUdTKSAkKFpJTkMpIC1EUElDIC1jIC1vIG9ianMvY3JjMzIubyAkKFNSQ0RJUiljcmMzMi5jCisJLUBtdiBvYmpzL2NyYzMyLm8gJEAKKworZGVmbGF0ZS5sbzogJChTUkNESVIpZGVmbGF0ZS5jCisJLUBta2RpciBvYmpzIDI+L2Rldi9udWxsIHx8IHRlc3QgLWQgb2JqcworCSQoQ0MpICQoU0ZMQUdTKSAkKFpJTkMpIC1EUElDIC1jIC1vIG9ianMvZGVmbGF0ZS5vICQoU1JDRElSKWRlZmxhdGUuYworCS1AbXYgb2Jqcy9kZWZsYXRlLm8gJEAKKworaW5mYmFjay5sbzogJChTUkNESVIpaW5mYmFjay5jCisJLUBta2RpciBvYmpzIDI+L2Rldi9udWxsIHx8IHRlc3QgLWQgb2JqcworCSQoQ0MpICQoU0ZMQUdTKSAkKFpJTkMpIC1EUElDIC1jIC1vIG9ianMvaW5mYmFjay5vICQoU1JDRElSKWluZmJhY2suYworCS1AbXYgb2Jqcy9pbmZiYWNrLm8gJEAKKworaW5mZmFzdC5sbzogJChTUkNESVIpaW5mZmFzdC5jCisJLUBta2RpciBvYmpzIDI+L2Rldi9udWxsIHx8IHRlc3QgLWQgb2JqcworCSQoQ0MpICQoU0ZMQUdTKSAkKFpJTkMpIC1EUElDIC1jIC1vIG9ianMvaW5mZmFzdC5vICQoU1JDRElSKWluZmZhc3QuYworCS1AbXYgb2Jqcy9pbmZmYXN0Lm8gJEAKKworaW5mbGF0ZS5sbzogJChTUkNESVIpaW5mbGF0ZS5jCisJLUBta2RpciBvYmpzIDI+L2Rldi9udWxsIHx8IHRlc3QgLWQgb2JqcworCSQoQ0MpICQoU0ZMQUdTKSAkKFpJTkMpIC1EUElDIC1jIC1vIG9ianMvaW5mbGF0ZS5vICQoU1JDRElSKWluZmxhdGUuYworCS1AbXYgb2Jqcy9pbmZsYXRlLm8gJEAKKworaW5mdHJlZXMubG86ICQoU1JDRElSKWluZnRyZWVzLmMKKwktQG1rZGlyIG9ianMgMj4vZGV2L251bGwgfHwgdGVzdCAtZCBvYmpzCisJJChDQykgJChTRkxBR1MpICQoWklOQykgLURQSUMgLWMgLW8gb2Jqcy9pbmZ0cmVlcy5vICQoU1JDRElSKWluZnRyZWVzLmMKKwktQG12IG9ianMvaW5mdHJlZXMubyAkQAorCit0cmVlcy5sbzogJChTUkNESVIpdHJlZXMuYworCS1AbWtkaXIgb2JqcyAyPi9kZXYvbnVsbCB8fCB0ZXN0IC1kIG9ianMKKwkkKENDKSAkKFNGTEFHUykgJChaSU5DKSAtRFBJQyAtYyAtbyBvYmpzL3RyZWVzLm8gJChTUkNESVIpdHJlZXMuYworCS1AbXYgb2Jqcy90cmVlcy5vICRACisKK3p1dGlsLmxvOiAkKFNSQ0RJUil6dXRpbC5jCisJLUBta2RpciBvYmpzIDI+L2Rldi9udWxsIHx8IHRlc3QgLWQgb2JqcworCSQoQ0MpICQoU0ZMQUdTKSAkKFpJTkMpIC1EUElDIC1jIC1vIG9ianMvenV0aWwubyAkKFNSQ0RJUil6dXRpbC5jCisJLUBtdiBvYmpzL3p1dGlsLm8gJEAKKworY29tcHJlc3MubG86ICQoU1JDRElSKWNvbXByZXNzLmMKKwktQG1rZGlyIG9ianMgMj4vZGV2L251bGwgfHwgdGVzdCAtZCBvYmpzCisJJChDQykgJChTRkxBR1MpICQoWklOQykgLURQSUMgLWMgLW8gb2Jqcy9jb21wcmVzcy5vICQoU1JDRElSKWNvbXByZXNzLmMKKwktQG12IG9ianMvY29tcHJlc3MubyAkQAorCit1bmNvbXByLmxvOiAkKFNSQ0RJUil1bmNvbXByLmMKKwktQG1rZGlyIG9ianMgMj4vZGV2L251bGwgfHwgdGVzdCAtZCBvYmpzCisJJChDQykgJChTRkxBR1MpICQoWklOQykgLURQSUMgLWMgLW8gb2Jqcy91bmNvbXByLm8gJChTUkNESVIpdW5jb21wci5jCisJLUBtdiBvYmpzL3VuY29tcHIubyAkQAorCitnemNsb3NlLmxvOiAkKFNSQ0RJUilnemNsb3NlLmMKKwktQG1rZGlyIG9ianMgMj4vZGV2L251bGwgfHwgdGVzdCAtZCBvYmpzCisJJChDQykgJChTRkxBR1MpICQoWklOQykgLURQSUMgLWMgLW8gb2Jqcy9nemNsb3NlLm8gJChTUkNESVIpZ3pjbG9zZS5jCisJLUBtdiBvYmpzL2d6Y2xvc2UubyAkQAorCitnemxpYi5sbzogJChTUkNESVIpZ3psaWIuYworCS1AbWtkaXIgb2JqcyAyPi9kZXYvbnVsbCB8fCB0ZXN0IC1kIG9ianMKKwkkKENDKSAkKFNGTEFHUykgJChaSU5DKSAtRFBJQyAtYyAtbyBvYmpzL2d6bGliLm8gJChTUkNESVIpZ3psaWIuYworCS1AbXYgb2Jqcy9nemxpYi5vICRACisKK2d6cmVhZC5sbzogJChTUkNESVIpZ3pyZWFkLmMKKwktQG1rZGlyIG9ianMgMj4vZGV2L251bGwgfHwgdGVzdCAtZCBvYmpzCisJJChDQykgJChTRkxBR1MpICQoWklOQykgLURQSUMgLWMgLW8gb2Jqcy9nenJlYWQubyAkKFNSQ0RJUilnenJlYWQuYworCS1AbXYgb2Jqcy9nenJlYWQubyAkQAorCitnendyaXRlLmxvOiAkKFNSQ0RJUilnendyaXRlLmMKKwktQG1rZGlyIG9ianMgMj4vZGV2L251bGwgfHwgdGVzdCAtZCBvYmpzCisJJChDQykgJChTRkxBR1MpICQoWklOQykgLURQSUMgLWMgLW8gb2Jqcy9nendyaXRlLm8gJChTUkNESVIpZ3p3cml0ZS5jCisJLUBtdiBvYmpzL2d6d3JpdGUubyAkQAorCisKK3BsYWNlYm8gJChTSEFSRURMSUJWKTogJChQSUNfT0JKUykgbGliei5hCisJJChMRFNIQVJFRCkgJChTRkxBR1MpIC1vICRAICQoUElDX09CSlMpICQoTERTSEFSRURMSUJDKSAkKExERkxBR1MpCisJcm0gLWYgJChTSEFSRURMSUIpICQoU0hBUkVETElCTSkKKwlsbiAtcyAkQCAkKFNIQVJFRExJQikKKwlsbiAtcyAkQCAkKFNIQVJFRExJQk0pCisJLUBybWRpciBvYmpzCisKK2V4YW1wbGUkKEVYRSk6IGV4YW1wbGUubyAkKFNUQVRJQ0xJQikKKwkkKENDKSAkKENGTEFHUykgLW8gJEAgZXhhbXBsZS5vICQoVEVTVF9MREZMQUdTKQorCittaW5pZ3ppcCQoRVhFKTogbWluaWd6aXAubyAkKFNUQVRJQ0xJQikKKwkkKENDKSAkKENGTEFHUykgLW8gJEAgbWluaWd6aXAubyAkKFRFU1RfTERGTEFHUykKKworZXhhbXBsZXNoJChFWEUpOiBleGFtcGxlLm8gJChTSEFSRURMSUJWKQorCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBleGFtcGxlLm8gLUwuICQoU0hBUkVETElCVikKKworbWluaWd6aXBzaCQoRVhFKTogbWluaWd6aXAubyAkKFNIQVJFRExJQlYpCisJJChDQykgJChDRkxBR1MpIC1vICRAIG1pbmlnemlwLm8gLUwuICQoU0hBUkVETElCVikKKworZXhhbXBsZTY0JChFWEUpOiBleGFtcGxlNjQubyAkKFNUQVRJQ0xJQikKKwkkKENDKSAkKENGTEFHUykgLW8gJEAgZXhhbXBsZTY0Lm8gJChURVNUX0xERkxBR1MpCisKK21pbmlnemlwNjQkKEVYRSk6IG1pbmlnemlwNjQubyAkKFNUQVRJQ0xJQikKKwkkKENDKSAkKENGTEFHUykgLW8gJEAgbWluaWd6aXA2NC5vICQoVEVTVF9MREZMQUdTKQorCitpbnN0YWxsLWxpYnM6ICQoTElCUykKKwktQGlmIFsgISAtZCAkKERFU1RESVIpJChleGVjX3ByZWZpeCkgIF07IHRoZW4gbWtkaXIgLXAgJChERVNURElSKSQoZXhlY19wcmVmaXgpOyBmaQorCS1AaWYgWyAhIC1kICQoREVTVERJUikkKGxpYmRpcikgICAgICAgXTsgdGhlbiBta2RpciAtcCAkKERFU1RESVIpJChsaWJkaXIpOyBmaQorCS1AaWYgWyAhIC1kICQoREVTVERJUikkKHNoYXJlZGxpYmRpcikgXTsgdGhlbiBta2RpciAtcCAkKERFU1RESVIpJChzaGFyZWRsaWJkaXIpOyBmaQorCS1AaWYgWyAhIC1kICQoREVTVERJUikkKG1hbjNkaXIpICAgICAgXTsgdGhlbiBta2RpciAtcCAkKERFU1RESVIpJChtYW4zZGlyKTsgZmkKKwktQGlmIFsgISAtZCAkKERFU1RESVIpJChwa2djb25maWdkaXIpIF07IHRoZW4gbWtkaXIgLXAgJChERVNURElSKSQocGtnY29uZmlnZGlyKTsgZmkKKwlybSAtZiAkKERFU1RESVIpJChsaWJkaXIpLyQoU1RBVElDTElCKQorCWNwICQoU1RBVElDTElCKSAkKERFU1RESVIpJChsaWJkaXIpCisJY2htb2QgNjQ0ICQoREVTVERJUikkKGxpYmRpcikvJChTVEFUSUNMSUIpCisJLUAoJChSQU5MSUIpICQoREVTVERJUikkKGxpYmRpcikvbGliei5hIHx8IHRydWUpID4vZGV2L251bGwgMj4mMQorCS1AaWYgdGVzdCAtbiAiJChTSEFSRURMSUJWKSI7IHRoZW4gXAorCSAgcm0gLWYgJChERVNURElSKSQoc2hhcmVkbGliZGlyKS8kKFNIQVJFRExJQlYpOyBcCisJICBjcCAkKFNIQVJFRExJQlYpICQoREVTVERJUikkKHNoYXJlZGxpYmRpcik7IFwKKwkgIGVjaG8gImNwICQoU0hBUkVETElCVikgJChERVNURElSKSQoc2hhcmVkbGliZGlyKSI7IFwKKwkgIGNobW9kIDc1NSAkKERFU1RESVIpJChzaGFyZWRsaWJkaXIpLyQoU0hBUkVETElCVik7IFwKKwkgIGVjaG8gImNobW9kIDc1NSAkKERFU1RESVIpJChzaGFyZWRsaWJkaXIpLyQoU0hBUkVETElCVikiOyBcCisJICBybSAtZiAkKERFU1RESVIpJChzaGFyZWRsaWJkaXIpLyQoU0hBUkVETElCKSAkKERFU1RESVIpJChzaGFyZWRsaWJkaXIpLyQoU0hBUkVETElCTSk7IFwKKwkgIGxuIC1zICQoU0hBUkVETElCVikgJChERVNURElSKSQoc2hhcmVkbGliZGlyKS8kKFNIQVJFRExJQik7IFwKKwkgIGxuIC1zICQoU0hBUkVETElCVikgJChERVNURElSKSQoc2hhcmVkbGliZGlyKS8kKFNIQVJFRExJQk0pOyBcCisJICAoJChMRENPTkZJRykgfHwgdHJ1ZSkgID4vZGV2L251bGwgMj4mMTsgXAorCWZpCisJcm0gLWYgJChERVNURElSKSQobWFuM2RpcikvemxpYi4zCisJY3AgJChTUkNESVIpemxpYi4zICQoREVTVERJUikkKG1hbjNkaXIpCisJY2htb2QgNjQ0ICQoREVTVERJUikkKG1hbjNkaXIpL3psaWIuMworCXJtIC1mICQoREVTVERJUikkKHBrZ2NvbmZpZ2RpcikvemxpYi5wYworCWNwIHpsaWIucGMgJChERVNURElSKSQocGtnY29uZmlnZGlyKQorCWNobW9kIDY0NCAkKERFU1RESVIpJChwa2djb25maWdkaXIpL3psaWIucGMKKyMgVGhlIHJhbmxpYiBpbiBpbnN0YWxsIGlzIG5lZWRlZCBvbiBOZVhUU1RFUCB3aGljaCBjaGVja3MgZmlsZSB0aW1lcworIyBsZGNvbmZpZyBpcyBmb3IgTGludXgKKworaW5zdGFsbDogaW5zdGFsbC1saWJzCisJLUBpZiBbICEgLWQgJChERVNURElSKSQoaW5jbHVkZWRpcikgICBdOyB0aGVuIG1rZGlyIC1wICQoREVTVERJUikkKGluY2x1ZGVkaXIpOyBmaQorCXJtIC1mICQoREVTVERJUikkKGluY2x1ZGVkaXIpL3psaWIuaCAkKERFU1RESVIpJChpbmNsdWRlZGlyKS96Y29uZi5oCisJY3AgJChTUkNESVIpemxpYi5oIHpjb25mLmggJChERVNURElSKSQoaW5jbHVkZWRpcikKKwljaG1vZCA2NDQgJChERVNURElSKSQoaW5jbHVkZWRpcikvemxpYi5oICQoREVTVERJUikkKGluY2x1ZGVkaXIpL3pjb25mLmgKKwordW5pbnN0YWxsOgorCWNkICQoREVTVERJUikkKGluY2x1ZGVkaXIpICYmIHJtIC1mIHpsaWIuaCB6Y29uZi5oCisJY2QgJChERVNURElSKSQobGliZGlyKSAmJiBybSAtZiBsaWJ6LmE7IFwKKwlpZiB0ZXN0IC1uICIkKFNIQVJFRExJQlYpIiAtYSAtZiAkKFNIQVJFRExJQlYpOyB0aGVuIFwKKwkgIHJtIC1mICQoU0hBUkVETElCVikgJChTSEFSRURMSUIpICQoU0hBUkVETElCTSk7IFwKKwlmaQorCWNkICQoREVTVERJUikkKG1hbjNkaXIpICYmIHJtIC1mIHpsaWIuMworCWNkICQoREVTVERJUikkKHBrZ2NvbmZpZ2RpcikgJiYgcm0gLWYgemxpYi5wYworCitkb2NzOiB6bGliLjMucGRmCisKK3psaWIuMy5wZGY6ICQoU1JDRElSKXpsaWIuMworCWdyb2ZmIC1tYW5kb2MgLWYgSCAtVCBwcyAkKFNSQ0RJUil6bGliLjMgfCBwczJwZGYgLSAkQAorCit6Y29uZi5oLmNtYWtlaW46ICQoU1JDRElSKXpjb25mLmguaW4KKwktQCBURU1QRklMRT16Y29uZmhfJCQ7IFwKKwllY2hvICIvI2RlZmluZSBaQ09ORl9ILyBhXFxcXFxuI2NtYWtlZGVmaW5lIFpfUFJFRklYXFxcXFxuI2NtYWtlZGVmaW5lIFpfSEFWRV9VTklTVERfSFxuIiA+PiAkJFRFTVBGSUxFICYmXAorCXNlZCAtZiAkJFRFTVBGSUxFICQoU1JDRElSKXpjb25mLmguaW4gPiAkQCAmJlwKKwl0b3VjaCAtciAkKFNSQ0RJUil6Y29uZi5oLmluICRAICYmXAorCXJtICQkVEVNUEZJTEUKKworemNvbmY6ICQoU1JDRElSKXpjb25mLmguaW4KKwljcCAtcCAkKFNSQ0RJUil6Y29uZi5oLmluIHpjb25mLmgKKworbW9zdGx5Y2xlYW46IGNsZWFuCitjbGVhbjoKKwlybSAtZiAqLm8gKi5sbyAqfiBcCisJICAgZXhhbXBsZSQoRVhFKSBtaW5pZ3ppcCQoRVhFKSBleGFtcGxlc2gkKEVYRSkgbWluaWd6aXBzaCQoRVhFKSBcCisJICAgZXhhbXBsZTY0JChFWEUpIG1pbmlnemlwNjQkKEVYRSkgXAorCSAgIGluZmNvdmVyIFwKKwkgICBsaWJ6LiogZm9vLmd6IHNvX2xvY2F0aW9ucyBcCisJICAgX21hdGNoLnMgbWFrZXRyZWUgY29udHJpYi9pbmZiYWNrOS8qLm8KKwlybSAtcmYgb2JqcworCXJtIC1mICouZ2NkYSAqLmdjbm8gKi5nY292CisJcm0gLWYgY29udHJpYi9pbmZiYWNrOS8qLmdjZGEgY29udHJpYi9pbmZiYWNrOS8qLmdjbm8gY29udHJpYi9pbmZiYWNrOS8qLmdjb3YKKworbWFpbnRhaW5lci1jbGVhbjogZGlzdGNsZWFuCitkaXN0Y2xlYW46IGNsZWFuIHpjb25mIHpjb25mLmguY21ha2VpbgorCXJtIC1mIE1ha2VmaWxlIHpsaWIucGMgY29uZmlndXJlLmxvZworCS1Acm0gLWYgLkRTX1N0b3JlCisJQGlmIFsgLWYgTWFrZWZpbGUuaW4gXTsgdGhlbiBcCisJcHJpbnRmICdhbGw6XG5cdC1AZWNobyAiUGxlYXNlIHVzZSAuL2NvbmZpZ3VyZSBmaXJzdC4gIFRoYW5rIHlvdS4iXG4nID4gTWFrZWZpbGUgOyBcCisJcHJpbnRmICdcbmRpc3RjbGVhbjpcblx0bWFrZSAtZiBNYWtlZmlsZS5pbiBkaXN0Y2xlYW5cbicgPj4gTWFrZWZpbGUgOyBcCisJdG91Y2ggLXIgJChTUkNESVIpTWFrZWZpbGUuaW4gTWFrZWZpbGUgOyBmaQorCit0YWdzOgorCWV0YWdzICQoU1JDRElSKSouW2NoXQorCithZGxlcjMyLm8genV0aWwubzogJChTUkNESVIpenV0aWwuaCAkKFNSQ0RJUil6bGliLmggemNvbmYuaAorZ3pjbG9zZS5vIGd6bGliLm8gZ3pyZWFkLm8gZ3p3cml0ZS5vOiAkKFNSQ0RJUil6bGliLmggemNvbmYuaCAkKFNSQ0RJUilnemd1dHMuaAorY29tcHJlc3MubyBleGFtcGxlLm8gbWluaWd6aXAubyB1bmNvbXByLm86ICQoU1JDRElSKXpsaWIuaCB6Y29uZi5oCitjcmMzMi5vOiAkKFNSQ0RJUil6dXRpbC5oICQoU1JDRElSKXpsaWIuaCB6Y29uZi5oICQoU1JDRElSKWNyYzMyLmgKK2RlZmxhdGUubzogJChTUkNESVIpZGVmbGF0ZS5oICQoU1JDRElSKXp1dGlsLmggJChTUkNESVIpemxpYi5oIHpjb25mLmgKK2luZmJhY2subyBpbmZsYXRlLm86ICQoU1JDRElSKXp1dGlsLmggJChTUkNESVIpemxpYi5oIHpjb25mLmggJChTUkNESVIpaW5mdHJlZXMuaCAkKFNSQ0RJUilpbmZsYXRlLmggJChTUkNESVIpaW5mZmFzdC5oICQoU1JDRElSKWluZmZpeGVkLmgKK2luZmZhc3QubzogJChTUkNESVIpenV0aWwuaCAkKFNSQ0RJUil6bGliLmggemNvbmYuaCAkKFNSQ0RJUilpbmZ0cmVlcy5oICQoU1JDRElSKWluZmxhdGUuaCAkKFNSQ0RJUilpbmZmYXN0LmgKK2luZnRyZWVzLm86ICQoU1JDRElSKXp1dGlsLmggJChTUkNESVIpemxpYi5oIHpjb25mLmggJChTUkNESVIpaW5mdHJlZXMuaAordHJlZXMubzogJChTUkNESVIpZGVmbGF0ZS5oICQoU1JDRElSKXp1dGlsLmggJChTUkNESVIpemxpYi5oIHpjb25mLmggJChTUkNESVIpdHJlZXMuaAorCithZGxlcjMyLmxvIHp1dGlsLmxvOiAkKFNSQ0RJUil6dXRpbC5oICQoU1JDRElSKXpsaWIuaCB6Y29uZi5oCitnemNsb3NlLmxvIGd6bGliLmxvIGd6cmVhZC5sbyBnendyaXRlLmxvOiAkKFNSQ0RJUil6bGliLmggemNvbmYuaCAkKFNSQ0RJUilnemd1dHMuaAorY29tcHJlc3MubG8gZXhhbXBsZS5sbyBtaW5pZ3ppcC5sbyB1bmNvbXByLmxvOiAkKFNSQ0RJUil6bGliLmggemNvbmYuaAorY3JjMzIubG86ICQoU1JDRElSKXp1dGlsLmggJChTUkNESVIpemxpYi5oIHpjb25mLmggJChTUkNESVIpY3JjMzIuaAorZGVmbGF0ZS5sbzogJChTUkNESVIpZGVmbGF0ZS5oICQoU1JDRElSKXp1dGlsLmggJChTUkNESVIpemxpYi5oIHpjb25mLmgKK2luZmJhY2subG8gaW5mbGF0ZS5sbzogJChTUkNESVIpenV0aWwuaCAkKFNSQ0RJUil6bGliLmggemNvbmYuaCAkKFNSQ0RJUilpbmZ0cmVlcy5oICQoU1JDRElSKWluZmxhdGUuaCAkKFNSQ0RJUilpbmZmYXN0LmggJChTUkNESVIpaW5mZml4ZWQuaAoraW5mZmFzdC5sbzogJChTUkNESVIpenV0aWwuaCAkKFNSQ0RJUil6bGliLmggemNvbmYuaCAkKFNSQ0RJUilpbmZ0cmVlcy5oICQoU1JDRElSKWluZmxhdGUuaCAkKFNSQ0RJUilpbmZmYXN0LmgKK2luZnRyZWVzLmxvOiAkKFNSQ0RJUil6dXRpbC5oICQoU1JDRElSKXpsaWIuaCB6Y29uZi5oICQoU1JDRElSKWluZnRyZWVzLmgKK3RyZWVzLmxvOiAkKFNSQ0RJUilkZWZsYXRlLmggJChTUkNESVIpenV0aWwuaCAkKFNSQ0RJUil6bGliLmggemNvbmYuaCAkKFNSQ0RJUil0cmVlcy5oCmRpZmYgLS1naXQgYS9zcmMvUkVBRE1FIGIvc3JjL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjRiNzlkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL1JFQURNRQpAQCAtMCwwICsxLDExOCBAQAorWkxJQiBEQVRBIENPTVBSRVNTSU9OIExJQlJBUlkKKworemxpYiAxLjIuMTIgaXMgYSBnZW5lcmFsIHB1cnBvc2UgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LiAgQWxsIHRoZSBjb2RlIGlzCit0aHJlYWQgc2FmZS4gIFRoZSBkYXRhIGZvcm1hdCB1c2VkIGJ5IHRoZSB6bGliIGxpYnJhcnkgaXMgZGVzY3JpYmVkIGJ5IFJGQ3MKKyhSZXF1ZXN0IGZvciBDb21tZW50cykgMTk1MCB0byAxOTUyIGluIHRoZSBmaWxlcworaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMTk1MCAoemxpYiBmb3JtYXQpLCByZmMxOTUxIChkZWZsYXRlIGZvcm1hdCkgYW5kCityZmMxOTUyIChnemlwIGZvcm1hdCkuCisKK0FsbCBmdW5jdGlvbnMgb2YgdGhlIGNvbXByZXNzaW9uIGxpYnJhcnkgYXJlIGRvY3VtZW50ZWQgaW4gdGhlIGZpbGUgemxpYi5oCisodm9sdW50ZWVyIHRvIHdyaXRlIG1hbiBwYWdlcyB3ZWxjb21lLCBjb250YWN0IHpsaWJAZ3ppcC5vcmcpLiAgQSB1c2FnZSBleGFtcGxlCitvZiB0aGUgbGlicmFyeSBpcyBnaXZlbiBpbiB0aGUgZmlsZSB0ZXN0L2V4YW1wbGUuYyB3aGljaCBhbHNvIHRlc3RzIHRoYXQKK3RoZSBsaWJyYXJ5IGlzIHdvcmtpbmcgY29ycmVjdGx5LiAgQW5vdGhlciBleGFtcGxlIGlzIGdpdmVuIGluIHRoZSBmaWxlCit0ZXN0L21pbmlnemlwLmMuICBUaGUgY29tcHJlc3Npb24gbGlicmFyeSBpdHNlbGYgaXMgY29tcG9zZWQgb2YgYWxsIHNvdXJjZQorZmlsZXMgaW4gdGhlIHJvb3QgZGlyZWN0b3J5LgorCitUbyBjb21waWxlIGFsbCBmaWxlcyBhbmQgcnVuIHRoZSB0ZXN0IHByb2dyYW0sIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGdpdmVuIGF0Cit0aGUgdG9wIG9mIE1ha2VmaWxlLmluLiAgSW4gc2hvcnQgIi4vY29uZmlndXJlOyBtYWtlIHRlc3QiLCBhbmQgaWYgdGhhdCBnb2VzCit3ZWxsLCAibWFrZSBpbnN0YWxsIiBzaG91bGQgd29yayBmb3IgbW9zdCBmbGF2b3JzIG9mIFVuaXguICBGb3IgV2luZG93cywgdXNlCitvbmUgb2YgdGhlIHNwZWNpYWwgbWFrZWZpbGVzIGluIHdpbjMyLyBvciBjb250cmliL3ZzdHVkaW8vIC4gIEZvciBWTVMsIHVzZQorbWFrZV92bXMuY29tLgorCitRdWVzdGlvbnMgYWJvdXQgemxpYiBzaG91bGQgYmUgc2VudCB0byA8emxpYkBnemlwLm9yZz4sIG9yIHRvIEdpbGxlcyBWb2xsYW50Cis8aW5mb0B3aW5pbWFnZS5jb20+IGZvciB0aGUgV2luZG93cyBETEwgdmVyc2lvbi4gIFRoZSB6bGliIGhvbWUgcGFnZSBpcworaHR0cDovL3psaWIubmV0LyAuICBCZWZvcmUgcmVwb3J0aW5nIGEgcHJvYmxlbSwgcGxlYXNlIGNoZWNrIHRoaXMgc2l0ZSB0bwordmVyaWZ5IHRoYXQgeW91IGhhdmUgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHpsaWI7IG90aGVyd2lzZSBnZXQgdGhlIGxhdGVzdAordmVyc2lvbiBhbmQgY2hlY2sgd2hldGhlciB0aGUgcHJvYmxlbSBzdGlsbCBleGlzdHMgb3Igbm90LgorCitQTEVBU0UgcmVhZCB0aGUgemxpYiBGQVEgaHR0cDovL3psaWIubmV0L3psaWJfZmFxLmh0bWwgYmVmb3JlIGFza2luZyBmb3IgaGVscC4KKworTWFyayBOZWxzb24gPG1hcmtuQGllZWUub3JnPiB3cm90ZSBhbiBhcnRpY2xlIGFib3V0IHpsaWIgZm9yIHRoZSBKYW4uICAxOTk3Citpc3N1ZSBvZiBEci4gIERvYmIncyBKb3VybmFsOyBhIGNvcHkgb2YgdGhlIGFydGljbGUgaXMgYXZhaWxhYmxlIGF0CitodHRwOi8vbWFya25lbHNvbi51cy8xOTk3LzAxLzAxL3psaWItZW5naW5lLyAuCisKK1RoZSBjaGFuZ2VzIG1hZGUgaW4gdmVyc2lvbiAxLjIuMTIgYXJlIGRvY3VtZW50ZWQgaW4gdGhlIGZpbGUgQ2hhbmdlTG9nLgorCitVbnN1cHBvcnRlZCB0aGlyZCBwYXJ0eSBjb250cmlidXRpb25zIGFyZSBwcm92aWRlZCBpbiBkaXJlY3RvcnkgY29udHJpYi8gLgorCit6bGliIGlzIGF2YWlsYWJsZSBpbiBKYXZhIHVzaW5nIHRoZSBqYXZhLnV0aWwuemlwIHBhY2thZ2UsIGRvY3VtZW50ZWQgYXQKK2h0dHA6Ly9qYXZhLnN1bi5jb20vZGV2ZWxvcGVyL3RlY2huaWNhbEFydGljbGVzL1Byb2dyYW1taW5nL2NvbXByZXNzaW9uLyAuCisKK0EgUGVybCBpbnRlcmZhY2UgdG8gemxpYiB3cml0dGVuIGJ5IFBhdWwgTWFycXVlc3MgPHBtcXNAY3Bhbi5vcmc+IGlzIGF2YWlsYWJsZQorYXQgQ1BBTiAoQ29tcHJlaGVuc2l2ZSBQZXJsIEFyY2hpdmUgTmV0d29yaykgc2l0ZXMsIGluY2x1ZGluZworaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9+cG1xcy9JTy1Db21wcmVzcy1abGliLyAuCisKK0EgUHl0aG9uIGludGVyZmFjZSB0byB6bGliIHdyaXR0ZW4gYnkgQS5NLiBLdWNobGluZyA8YW1rQGFtay5jYT4gaXMKK2F2YWlsYWJsZSBpbiBQeXRob24gMS41IGFuZCBsYXRlciB2ZXJzaW9ucywgc2VlCitodHRwOi8vZG9jcy5weXRob24ub3JnL2xpYnJhcnkvemxpYi5odG1sIC4KKworemxpYiBpcyBidWlsdCBpbnRvIHRjbDogaHR0cDovL3dpa2kudGNsLnRrLzQ2MTAgLgorCitBbiBleHBlcmltZW50YWwgcGFja2FnZSB0byByZWFkIGFuZCB3cml0ZSBmaWxlcyBpbiAuemlwIGZvcm1hdCwgd3JpdHRlbiBvbiB0b3AKK29mIHpsaWIgYnkgR2lsbGVzIFZvbGxhbnQgPGluZm9Ad2luaW1hZ2UuY29tPiwgaXMgYXZhaWxhYmxlIGluIHRoZQorY29udHJpYi9taW5pemlwIGRpcmVjdG9yeSBvZiB6bGliLgorCisKK05vdGVzIGZvciBzb21lIHRhcmdldHM6CisKKy0gRm9yIFdpbmRvd3MgRExMIHZlcnNpb25zLCBwbGVhc2Ugc2VlIHdpbjMyL0RMTF9GQVEudHh0CisKKy0gRm9yIDY0LWJpdCBJcml4LCBkZWZsYXRlLmMgbXVzdCBiZSBjb21waWxlZCB3aXRob3V0IGFueSBvcHRpbWl6YXRpb24uIFdpdGgKKyAgLU8sIG9uZSBsaWJwbmcgdGVzdCBmYWlscy4gVGhlIHRlc3Qgd29ya3MgaW4gMzIgYml0IG1vZGUgKHdpdGggdGhlIC1uMzIKKyAgY29tcGlsZXIgZmxhZykuIFRoZSBjb21waWxlciBidWcgaGFzIGJlZW4gcmVwb3J0ZWQgdG8gU0dJLgorCistIHpsaWIgZG9lc24ndCB3b3JrIHdpdGggZ2NjIDIuNi4zIG9uIGEgREVDIDMwMDAvMzAwTFggdW5kZXIgT1NGLzEgMi4xIGl0IHdvcmtzCisgIHdoZW4gY29tcGlsZWQgd2l0aCBjYy4KKworLSBPbiBEaWdpdGFsIFVuaXggNC4wRCAoZm9ybWVseSBPU0YvMSkgb24gQWxwaGFTZXJ2ZXIsIHRoZSBjYyBvcHRpb24gLXN0ZDEgaXMKKyAgbmVjZXNzYXJ5IHRvIGdldCBnenByaW50ZiB3b3JraW5nIGNvcnJlY3RseS4gVGhpcyBpcyBkb25lIGJ5IGNvbmZpZ3VyZS4KKworLSB6bGliIGRvZXNuJ3Qgd29yayBvbiBIUC1VWCA5LjA1IHdpdGggc29tZSB2ZXJzaW9ucyBvZiAvYmluL2NjLiBJdCB3b3JrcyB3aXRoCisgIG90aGVyIGNvbXBpbGVycy4gVXNlICJtYWtlIHRlc3QiIHRvIGNoZWNrIHlvdXIgY29tcGlsZXIuCisKKy0gZ3pkb3BlbiBpcyBub3Qgc3VwcG9ydGVkIG9uIFJJU0NPUyBvciBCRU9TLgorCistIEZvciBQYWxtT3MsIHNlZSBodHRwOi8vcGFsbXpsaWIuc291cmNlZm9yZ2UubmV0LworCisKK0Fja25vd2xlZGdtZW50czoKKworICBUaGUgZGVmbGF0ZSBmb3JtYXQgdXNlZCBieSB6bGliIHdhcyBkZWZpbmVkIGJ5IFBoaWwgS2F0ei4gIFRoZSBkZWZsYXRlIGFuZAorICB6bGliIHNwZWNpZmljYXRpb25zIHdlcmUgd3JpdHRlbiBieSBMLiAgUGV0ZXIgRGV1dHNjaC4gIFRoYW5rcyB0byBhbGwgdGhlCisgIHBlb3BsZSB3aG8gcmVwb3J0ZWQgcHJvYmxlbXMgYW5kIHN1Z2dlc3RlZCB2YXJpb3VzIGltcHJvdmVtZW50cyBpbiB6bGliOyB0aGV5CisgIGFyZSB0b28gbnVtZXJvdXMgdG8gY2l0ZSBoZXJlLgorCitDb3B5cmlnaHQgbm90aWNlOgorCisgKEMpIDE5OTUtMjAyMiBKZWFuLWxvdXAgR2FpbGx5IGFuZCBNYXJrIEFkbGVyCisKKyAgVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWQKKyAgd2FycmFudHkuICBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcworICBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLgorCisgIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLAorICBpbmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRlciBpdCBhbmQgcmVkaXN0cmlidXRlIGl0CisgIGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworICAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdAorICAgICBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZQorICAgICBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24gd291bGQgYmUKKyAgICAgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1aXJlZC4KKyAgMi4gQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmUKKyAgICAgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLgorICAzLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLgorCisgIEplYW4tbG91cCBHYWlsbHkgICAgICAgIE1hcmsgQWRsZXIKKyAgamxvdXBAZ3ppcC5vcmcgICAgICAgICAgbWFkbGVyQGFsdW1uaS5jYWx0ZWNoLmVkdQorCitJZiB5b3UgdXNlIHRoZSB6bGliIGxpYnJhcnkgaW4gYSBwcm9kdWN0LCB3ZSB3b3VsZCBhcHByZWNpYXRlICpub3QqIHJlY2VpdmluZworbGVuZ3RoeSBsZWdhbCBkb2N1bWVudHMgdG8gc2lnbi4gIFRoZSBzb3VyY2VzIGFyZSBwcm92aWRlZCBmb3IgZnJlZSBidXQgd2l0aG91dAord2FycmFudHkgb2YgYW55IGtpbmQuICBUaGUgbGlicmFyeSBoYXMgYmVlbiBlbnRpcmVseSB3cml0dGVuIGJ5IEplYW4tbG91cAorR2FpbGx5IGFuZCBNYXJrIEFkbGVyOyBpdCBkb2VzIG5vdCBpbmNsdWRlIHRoaXJkLXBhcnR5IGNvZGUuICBXZSBtYWtlIGFsbAorY29udHJpYnV0aW9ucyB0byBhbmQgZGlzdHJpYnV0aW9ucyBvZiB0aGlzIHByb2plY3Qgc29sZWx5IGluIG91ciBwZXJzb25hbAorY2FwYWNpdHksIGFuZCBhcmUgbm90IGNvbnZleWluZyBhbnkgcmlnaHRzIHRvIGFueSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YKK2FueSB0aGlyZCBwYXJ0aWVzLgorCitJZiB5b3UgcmVkaXN0cmlidXRlIG1vZGlmaWVkIHNvdXJjZXMsIHdlIHdvdWxkIGFwcHJlY2lhdGUgdGhhdCB5b3UgaW5jbHVkZSBpbgordGhlIGZpbGUgQ2hhbmdlTG9nIGhpc3RvcnkgaW5mb3JtYXRpb24gZG9jdW1lbnRpbmcgeW91ciBjaGFuZ2VzLiAgUGxlYXNlIHJlYWQKK3RoZSBGQVEgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIGRpc3RyaWJ1dGlvbiBvZiBtb2RpZmllZCBzb3VyY2UgdmVyc2lvbnMuCmRpZmYgLS1naXQgYS9zcmMvYWRsZXIzMi5jIGIvc3JjL2FkbGVyMzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGJlNDM4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2FkbGVyMzIuYwpAQCAtMCwwICsxLDE4NiBAQAorLyogYWRsZXIzMi5jIC0tIGNvbXB1dGUgdGhlIEFkbGVyLTMyIGNoZWNrc3VtIG9mIGEgZGF0YSBzdHJlYW0KKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDExLCAyMDE2IE1hcmsgQWRsZXIKKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKKyAqLworCisvKiBAKCMpICRJZCQgKi8KKworI2luY2x1ZGUgInp1dGlsLmgiCisKK2xvY2FsIHVMb25nIGFkbGVyMzJfY29tYmluZV8gT0YoKHVMb25nIGFkbGVyMSwgdUxvbmcgYWRsZXIyLCB6X29mZjY0X3QgbGVuMikpOworCisjZGVmaW5lIEJBU0UgNjU1MjFVICAgICAvKiBsYXJnZXN0IHByaW1lIHNtYWxsZXIgdGhhbiA2NTUzNiAqLworI2RlZmluZSBOTUFYIDU1NTIKKy8qIE5NQVggaXMgdGhlIGxhcmdlc3QgbiBzdWNoIHRoYXQgMjU1bihuKzEpLzIgKyAobisxKShCQVNFLTEpIDw9IDJeMzItMSAqLworCisjZGVmaW5lIERPMShidWYsaSkgIHthZGxlciArPSAoYnVmKVtpXTsgc3VtMiArPSBhZGxlcjt9CisjZGVmaW5lIERPMihidWYsaSkgIERPMShidWYsaSk7IERPMShidWYsaSsxKTsKKyNkZWZpbmUgRE80KGJ1ZixpKSAgRE8yKGJ1ZixpKTsgRE8yKGJ1ZixpKzIpOworI2RlZmluZSBETzgoYnVmLGkpICBETzQoYnVmLGkpOyBETzQoYnVmLGkrNCk7CisjZGVmaW5lIERPMTYoYnVmKSAgIERPOChidWYsMCk7IERPOChidWYsOCk7CisKKy8qIHVzZSBOT19ESVZJREUgaWYgeW91ciBwcm9jZXNzb3IgZG9lcyBub3QgZG8gZGl2aXNpb24gaW4gaGFyZHdhcmUgLS0KKyAgIHRyeSBpdCBib3RoIHdheXMgdG8gc2VlIHdoaWNoIGlzIGZhc3RlciAqLworI2lmZGVmIE5PX0RJVklERQorLyogbm90ZSB0aGF0IHRoaXMgYXNzdW1lcyBCQVNFIGlzIDY1NTIxLCB3aGVyZSA2NTUzNiAlIDY1NTIxID09IDE1CisgICAodGhhbmsgeW91IHRvIEpvaG4gUmVpc2VyIGZvciBwb2ludGluZyB0aGlzIG91dCkgKi8KKyMgIGRlZmluZSBDSE9QKGEpIFwKKyAgICBkbyB7IFwKKyAgICAgICAgdW5zaWduZWQgbG9uZyB0bXAgPSBhID4+IDE2OyBcCisgICAgICAgIGEgJj0gMHhmZmZmVUw7IFwKKyAgICAgICAgYSArPSAodG1wIDw8IDQpIC0gdG1wOyBcCisgICAgfSB3aGlsZSAoMCkKKyMgIGRlZmluZSBNT0QyOChhKSBcCisgICAgZG8geyBcCisgICAgICAgIENIT1AoYSk7IFwKKyAgICAgICAgaWYgKGEgPj0gQkFTRSkgYSAtPSBCQVNFOyBcCisgICAgfSB3aGlsZSAoMCkKKyMgIGRlZmluZSBNT0QoYSkgXAorICAgIGRvIHsgXAorICAgICAgICBDSE9QKGEpOyBcCisgICAgICAgIE1PRDI4KGEpOyBcCisgICAgfSB3aGlsZSAoMCkKKyMgIGRlZmluZSBNT0Q2MyhhKSBcCisgICAgZG8geyAvKiB0aGlzIGFzc3VtZXMgYSBpcyBub3QgbmVnYXRpdmUgKi8gXAorICAgICAgICB6X29mZjY0X3QgdG1wID0gYSA+PiAzMjsgXAorICAgICAgICBhICY9IDB4ZmZmZmZmZmZMOyBcCisgICAgICAgIGEgKz0gKHRtcCA8PCA4KSAtICh0bXAgPDwgNSkgKyB0bXA7IFwKKyAgICAgICAgdG1wID0gYSA+PiAxNjsgXAorICAgICAgICBhICY9IDB4ZmZmZkw7IFwKKyAgICAgICAgYSArPSAodG1wIDw8IDQpIC0gdG1wOyBcCisgICAgICAgIHRtcCA9IGEgPj4gMTY7IFwKKyAgICAgICAgYSAmPSAweGZmZmZMOyBcCisgICAgICAgIGEgKz0gKHRtcCA8PCA0KSAtIHRtcDsgXAorICAgICAgICBpZiAoYSA+PSBCQVNFKSBhIC09IEJBU0U7IFwKKyAgICB9IHdoaWxlICgwKQorI2Vsc2UKKyMgIGRlZmluZSBNT0QoYSkgYSAlPSBCQVNFCisjICBkZWZpbmUgTU9EMjgoYSkgYSAlPSBCQVNFCisjICBkZWZpbmUgTU9ENjMoYSkgYSAlPSBCQVNFCisjZW5kaWYKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwordUxvbmcgWkVYUE9SVCBhZGxlcjMyX3ooYWRsZXIsIGJ1ZiwgbGVuKQorICAgIHVMb25nIGFkbGVyOworICAgIGNvbnN0IEJ5dGVmICpidWY7CisgICAgel9zaXplX3QgbGVuOworeworICAgIHVuc2lnbmVkIGxvbmcgc3VtMjsKKyAgICB1bnNpZ25lZCBuOworCisgICAgLyogc3BsaXQgQWRsZXItMzIgaW50byBjb21wb25lbnQgc3VtcyAqLworICAgIHN1bTIgPSAoYWRsZXIgPj4gMTYpICYgMHhmZmZmOworICAgIGFkbGVyICY9IDB4ZmZmZjsKKworICAgIC8qIGluIGNhc2UgdXNlciBsaWtlcyBkb2luZyBhIGJ5dGUgYXQgYSB0aW1lLCBrZWVwIGl0IGZhc3QgKi8KKyAgICBpZiAobGVuID09IDEpIHsKKyAgICAgICAgYWRsZXIgKz0gYnVmWzBdOworICAgICAgICBpZiAoYWRsZXIgPj0gQkFTRSkKKyAgICAgICAgICAgIGFkbGVyIC09IEJBU0U7CisgICAgICAgIHN1bTIgKz0gYWRsZXI7CisgICAgICAgIGlmIChzdW0yID49IEJBU0UpCisgICAgICAgICAgICBzdW0yIC09IEJBU0U7CisgICAgICAgIHJldHVybiBhZGxlciB8IChzdW0yIDw8IDE2KTsKKyAgICB9CisKKyAgICAvKiBpbml0aWFsIEFkbGVyLTMyIHZhbHVlIChkZWZlcnJlZCBjaGVjayBmb3IgbGVuID09IDEgc3BlZWQpICovCisgICAgaWYgKGJ1ZiA9PSBaX05VTEwpCisgICAgICAgIHJldHVybiAxTDsKKworICAgIC8qIGluIGNhc2Ugc2hvcnQgbGVuZ3RocyBhcmUgcHJvdmlkZWQsIGtlZXAgaXQgc29tZXdoYXQgZmFzdCAqLworICAgIGlmIChsZW4gPCAxNikgeworICAgICAgICB3aGlsZSAobGVuLS0pIHsKKyAgICAgICAgICAgIGFkbGVyICs9ICpidWYrKzsKKyAgICAgICAgICAgIHN1bTIgKz0gYWRsZXI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGFkbGVyID49IEJBU0UpCisgICAgICAgICAgICBhZGxlciAtPSBCQVNFOworICAgICAgICBNT0QyOChzdW0yKTsgICAgICAgICAgICAvKiBvbmx5IGFkZGVkIHNvIG1hbnkgQkFTRSdzICovCisgICAgICAgIHJldHVybiBhZGxlciB8IChzdW0yIDw8IDE2KTsKKyAgICB9CisKKyAgICAvKiBkbyBsZW5ndGggTk1BWCBibG9ja3MgLS0gcmVxdWlyZXMganVzdCBvbmUgbW9kdWxvIG9wZXJhdGlvbiAqLworICAgIHdoaWxlIChsZW4gPj0gTk1BWCkgeworICAgICAgICBsZW4gLT0gTk1BWDsKKyAgICAgICAgbiA9IE5NQVggLyAxNjsgICAgICAgICAgLyogTk1BWCBpcyBkaXZpc2libGUgYnkgMTYgKi8KKyAgICAgICAgZG8geworICAgICAgICAgICAgRE8xNihidWYpOyAgICAgICAgICAvKiAxNiBzdW1zIHVucm9sbGVkICovCisgICAgICAgICAgICBidWYgKz0gMTY7CisgICAgICAgIH0gd2hpbGUgKC0tbik7CisgICAgICAgIE1PRChhZGxlcik7CisgICAgICAgIE1PRChzdW0yKTsKKyAgICB9CisKKyAgICAvKiBkbyByZW1haW5pbmcgYnl0ZXMgKGxlc3MgdGhhbiBOTUFYLCBzdGlsbCBqdXN0IG9uZSBtb2R1bG8pICovCisgICAgaWYgKGxlbikgeyAgICAgICAgICAgICAgICAgIC8qIGF2b2lkIG1vZHVsb3MgaWYgbm9uZSByZW1haW5pbmcgKi8KKyAgICAgICAgd2hpbGUgKGxlbiA+PSAxNikgeworICAgICAgICAgICAgbGVuIC09IDE2OworICAgICAgICAgICAgRE8xNihidWYpOworICAgICAgICAgICAgYnVmICs9IDE2OworICAgICAgICB9CisgICAgICAgIHdoaWxlIChsZW4tLSkgeworICAgICAgICAgICAgYWRsZXIgKz0gKmJ1ZisrOworICAgICAgICAgICAgc3VtMiArPSBhZGxlcjsKKyAgICAgICAgfQorICAgICAgICBNT0QoYWRsZXIpOworICAgICAgICBNT0Qoc3VtMik7CisgICAgfQorCisgICAgLyogcmV0dXJuIHJlY29tYmluZWQgc3VtcyAqLworICAgIHJldHVybiBhZGxlciB8IChzdW0yIDw8IDE2KTsKK30KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwordUxvbmcgWkVYUE9SVCBhZGxlcjMyKGFkbGVyLCBidWYsIGxlbikKKyAgICB1TG9uZyBhZGxlcjsKKyAgICBjb25zdCBCeXRlZiAqYnVmOworICAgIHVJbnQgbGVuOworeworICAgIHJldHVybiBhZGxlcjMyX3ooYWRsZXIsIGJ1ZiwgbGVuKTsKK30KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworbG9jYWwgdUxvbmcgYWRsZXIzMl9jb21iaW5lXyhhZGxlcjEsIGFkbGVyMiwgbGVuMikKKyAgICB1TG9uZyBhZGxlcjE7CisgICAgdUxvbmcgYWRsZXIyOworICAgIHpfb2ZmNjRfdCBsZW4yOworeworICAgIHVuc2lnbmVkIGxvbmcgc3VtMTsKKyAgICB1bnNpZ25lZCBsb25nIHN1bTI7CisgICAgdW5zaWduZWQgcmVtOworCisgICAgLyogZm9yIG5lZ2F0aXZlIGxlbiwgcmV0dXJuIGludmFsaWQgYWRsZXIzMiBhcyBhIGNsdWUgZm9yIGRlYnVnZ2luZyAqLworICAgIGlmIChsZW4yIDwgMCkKKyAgICAgICAgcmV0dXJuIDB4ZmZmZmZmZmZVTDsKKworICAgIC8qIHRoZSBkZXJpdmF0aW9uIG9mIHRoaXMgZm9ybXVsYSBpcyBsZWZ0IGFzIGFuIGV4ZXJjaXNlIGZvciB0aGUgcmVhZGVyICovCisgICAgTU9ENjMobGVuMik7ICAgICAgICAgICAgICAgIC8qIGFzc3VtZXMgbGVuMiA+PSAwICovCisgICAgcmVtID0gKHVuc2lnbmVkKWxlbjI7CisgICAgc3VtMSA9IGFkbGVyMSAmIDB4ZmZmZjsKKyAgICBzdW0yID0gcmVtICogc3VtMTsKKyAgICBNT0Qoc3VtMik7CisgICAgc3VtMSArPSAoYWRsZXIyICYgMHhmZmZmKSArIEJBU0UgLSAxOworICAgIHN1bTIgKz0gKChhZGxlcjEgPj4gMTYpICYgMHhmZmZmKSArICgoYWRsZXIyID4+IDE2KSAmIDB4ZmZmZikgKyBCQVNFIC0gcmVtOworICAgIGlmIChzdW0xID49IEJBU0UpIHN1bTEgLT0gQkFTRTsKKyAgICBpZiAoc3VtMSA+PSBCQVNFKSBzdW0xIC09IEJBU0U7CisgICAgaWYgKHN1bTIgPj0gKCh1bnNpZ25lZCBsb25nKUJBU0UgPDwgMSkpIHN1bTIgLT0gKCh1bnNpZ25lZCBsb25nKUJBU0UgPDwgMSk7CisgICAgaWYgKHN1bTIgPj0gQkFTRSkgc3VtMiAtPSBCQVNFOworICAgIHJldHVybiBzdW0xIHwgKHN1bTIgPDwgMTYpOworfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCit1TG9uZyBaRVhQT1JUIGFkbGVyMzJfY29tYmluZShhZGxlcjEsIGFkbGVyMiwgbGVuMikKKyAgICB1TG9uZyBhZGxlcjE7CisgICAgdUxvbmcgYWRsZXIyOworICAgIHpfb2ZmX3QgbGVuMjsKK3sKKyAgICByZXR1cm4gYWRsZXIzMl9jb21iaW5lXyhhZGxlcjEsIGFkbGVyMiwgbGVuMik7Cit9CisKK3VMb25nIFpFWFBPUlQgYWRsZXIzMl9jb21iaW5lNjQoYWRsZXIxLCBhZGxlcjIsIGxlbjIpCisgICAgdUxvbmcgYWRsZXIxOworICAgIHVMb25nIGFkbGVyMjsKKyAgICB6X29mZjY0X3QgbGVuMjsKK3sKKyAgICByZXR1cm4gYWRsZXIzMl9jb21iaW5lXyhhZGxlcjEsIGFkbGVyMiwgbGVuMik7Cit9CmRpZmYgLS1naXQgYS9zcmMvYW1pZ2EvTWFrZWZpbGUucHVwIGIvc3JjL2FtaWdhL01ha2VmaWxlLnB1cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTQwYzEyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2FtaWdhL01ha2VmaWxlLnB1cApAQCAtMCwwICsxLDY5IEBACisjIEFtaWdhIHBvd2VyVVAgKFRNKSBNYWtlZmlsZQorIyBtYWtlZmlsZSBmb3IgbGlicG5nIGFuZCBTQVMgQyBWNi41OC83LjAwIFBQQyBjb21waWxlcgorIyBDb3B5cmlnaHQgKEMpIDE5OTggYnkgQW5kcmVhcyBSLiBLbGVpbmVydAorCitMSUJOQU1FCT0gbGliemlwLmEKKworQ0MJPSBzY3BwYworQ0ZMQUdTCT0gTk9TVEtDSEsgTk9TSU5UIE9QVElNSVpFIE9QVEdPIE9QVFBFRVAgT1BUSU5MT0NBTCBPUFRJTkwgXAorCSAgT1BUTE9PUCBPUFRSREVQPTggT1BUREVQPTggT1BUQ09NUD04IE5PVkVSCitBUgk9IHBwYy1hbWlnYW9zLWFyIGNyCitSQU5MSUIJPSBwcGMtYW1pZ2Fvcy1yYW5saWIKK0xECT0gcHBjLWFtaWdhb3MtbGQgLXIKK0xERkxBR1MJPSAtbworTERMSUJTCT0gTElCOnNjcHBjLmEgTElCOmVuZC5vCitSTQk9IGRlbGV0ZSBxdWlldAorCitPQkpTID0gYWRsZXIzMi5vIGNvbXByZXNzLm8gY3JjMzIubyBnemNsb3NlLm8gZ3psaWIubyBnenJlYWQubyBnendyaXRlLm8gXAorICAgICAgIHVuY29tcHIubyBkZWZsYXRlLm8gdHJlZXMubyB6dXRpbC5vIGluZmxhdGUubyBpbmZiYWNrLm8gaW5mdHJlZXMubyBpbmZmYXN0Lm8KKworVEVTVF9PQkpTID0gZXhhbXBsZS5vIG1pbmlnemlwLm8KKworYWxsOiBleGFtcGxlIG1pbmlnemlwCisKK2NoZWNrOiB0ZXN0Cit0ZXN0OiBhbGwKKwlleGFtcGxlCisJZWNobyBoZWxsbyB3b3JsZCB8IG1pbmlnemlwIHwgbWluaWd6aXAgLWQKKworJChMSUJOQU1FKTogJChPQkpTKQorCSQoQVIpICRAICQoT0JKUykKKwktJChSQU5MSUIpICRACisKK2V4YW1wbGU6IGV4YW1wbGUubyAkKExJQk5BTUUpCisJJChMRCkgJChMREZMQUdTKSAkQCBMSUI6Y19wcGMubyAkQC5vICQoTElCTkFNRSkgJChMRExJQlMpCisKK21pbmlnemlwOiBtaW5pZ3ppcC5vICQoTElCTkFNRSkKKwkkKExEKSAkKExERkxBR1MpICRAIExJQjpjX3BwYy5vICRALm8gJChMSUJOQU1FKSAkKExETElCUykKKworbW9zdGx5Y2xlYW46IGNsZWFuCitjbGVhbjoKKwkkKFJNKSAqLm8gZXhhbXBsZSBtaW5pZ3ppcCAkKExJQk5BTUUpIGZvby5negorCit6aXA6CisJemlwIC11bDkgemxpYiBSRUFETUUgQ2hhbmdlTG9nIE1ha2VmaWxlIE1ha2U/Pz8/Lj8/PyBNYWtlZmlsZS4/PyBcCisJICBkZXNjcmlwLm1tcyAqLltjaF0KKwordGd6OgorCWNkIC4uOyB0YXIgY2Z6IHpsaWIvemxpYi50Z3ogemxpYi9SRUFETUUgemxpYi9DaGFuZ2VMb2cgemxpYi9NYWtlZmlsZSBcCisJICB6bGliL01ha2U/Pz8/Lj8/PyB6bGliL01ha2VmaWxlLj8/IHpsaWIvZGVzY3JpcC5tbXMgemxpYi8qLltjaF0KKworIyBETyBOT1QgREVMRVRFIFRISVMgTElORSAtLSBtYWtlIGRlcGVuZCBkZXBlbmRzIG9uIGl0LgorCithZGxlcjMyLm86IHpsaWIuaCB6Y29uZi5oCitjb21wcmVzcy5vOiB6bGliLmggemNvbmYuaAorY3JjMzIubzogY3JjMzIuaCB6bGliLmggemNvbmYuaAorZGVmbGF0ZS5vOiBkZWZsYXRlLmggenV0aWwuaCB6bGliLmggemNvbmYuaAorZXhhbXBsZS5vOiB6bGliLmggemNvbmYuaAorZ3pjbG9zZS5vOiB6bGliLmggemNvbmYuaCBnemd1dHMuaAorZ3psaWIubzogemxpYi5oIHpjb25mLmggZ3pndXRzLmgKK2d6cmVhZC5vOiB6bGliLmggemNvbmYuaCBnemd1dHMuaAorZ3p3cml0ZS5vOiB6bGliLmggemNvbmYuaCBnemd1dHMuaAoraW5mZmFzdC5vOiB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oIGluZnRyZWVzLmggaW5mbGF0ZS5oIGluZmZhc3QuaAoraW5mbGF0ZS5vOiB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oIGluZnRyZWVzLmggaW5mbGF0ZS5oIGluZmZhc3QuaAoraW5mYmFjay5vOiB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oIGluZnRyZWVzLmggaW5mbGF0ZS5oIGluZmZhc3QuaAoraW5mdHJlZXMubzogenV0aWwuaCB6bGliLmggemNvbmYuaCBpbmZ0cmVlcy5oCittaW5pZ3ppcC5vOiB6bGliLmggemNvbmYuaAordHJlZXMubzogZGVmbGF0ZS5oIHp1dGlsLmggemxpYi5oIHpjb25mLmggdHJlZXMuaAordW5jb21wci5vOiB6bGliLmggemNvbmYuaAorenV0aWwubzogenV0aWwuaCB6bGliLmggemNvbmYuaApkaWZmIC0tZ2l0IGEvc3JjL2FtaWdhL01ha2VmaWxlLnNhcyBiL3NyYy9hbWlnYS9NYWtlZmlsZS5zYXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ5ZTI5MQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9hbWlnYS9NYWtlZmlsZS5zYXMKQEAgLTAsMCArMSw2OCBAQAorIyBTTWFrZWZpbGUgZm9yIHpsaWIKKyMgTW9kaWZpZWQgZnJvbSB0aGUgc3RhbmRhcmQgVU5JWCBNYWtlZmlsZSBDb3B5cmlnaHQgSmVhbi1sb3VwIEdhaWxseQorIyBPc21hIEFodmVubGFtcGkgPE9zbWEuQWh2ZW5sYW1waUBodXQuZmk+CisjIEFtaWdhLCBTQVMvQyA2LjU2ICYgU21ha2UKKworQ0M9c2MKK0NGTEFHUz1PUFQKKyNDRkxBR1M9T1BUIENQVT02ODAzMAorI0NGTEFHUz1ERUJVRz1MSU5FCitMREZMQUdTPUxJQiB6LmxpYgorCitTQ09QVElPTlM9T1BUU0NIRUQgT1BUSU5MSU5FIE9QVEFMSUFTIE9QVFRJTUUgT1BUSU5MT0NBTCBTVFJNRVJHRSBcCisgICAgICAgTk9JQ09OUyBQQVJNUz1CT1RIIE5PU1RBQ0tDSEVDSyBVVElMTElCIE5PVkVSU0lPTiBFUlJPUlJFWFggXAorICAgICAgIERFRj1QT1NUSU5DCisKK09CSlMgPSBhZGxlcjMyLm8gY29tcHJlc3MubyBjcmMzMi5vIGd6Y2xvc2UubyBnemxpYi5vIGd6cmVhZC5vIGd6d3JpdGUubyBcCisgICAgICAgdW5jb21wci5vIGRlZmxhdGUubyB0cmVlcy5vIHp1dGlsLm8gaW5mbGF0ZS5vIGluZmJhY2subyBpbmZ0cmVlcy5vIGluZmZhc3QubworCitURVNUX09CSlMgPSBleGFtcGxlLm8gbWluaWd6aXAubworCithbGw6IFNDT1BUSU9OUyBleGFtcGxlIG1pbmlnemlwCisKK2NoZWNrOiB0ZXN0Cit0ZXN0OiBhbGwKKwlleGFtcGxlCisJZWNobyBoZWxsbyB3b3JsZCB8IG1pbmlnemlwIHwgbWluaWd6aXAgLWQKKworaW5zdGFsbDogei5saWIKKwljb3B5IGNsb25lIHpsaWIuaCB6Y29uZi5oIElOQ0xVREU6CisJY29weSBjbG9uZSB6LmxpYiBMSUI6CisKK3oubGliOiAkKE9CSlMpCisJb21sIHoubGliIHIgJChPQkpTKQorCitleGFtcGxlOiBleGFtcGxlLm8gei5saWIKKwkkKENDKSAkKENGTEFHUykgTElOSyBUTyAkQCBleGFtcGxlLm8gJChMREZMQUdTKQorCittaW5pZ3ppcDogbWluaWd6aXAubyB6LmxpYgorCSQoQ0MpICQoQ0ZMQUdTKSBMSU5LIFRPICRAIG1pbmlnemlwLm8gJChMREZMQUdTKQorCittb3N0bHljbGVhbjogY2xlYW4KK2NsZWFuOgorCS1kZWxldGUgZm9yY2UgcXVpZXQgZXhhbXBsZSBtaW5pZ3ppcCAqLm8gei5saWIgZm9vLmd6ICoubG5rIFNDT1BUSU9OUworCitTQ09QVElPTlM6IE1ha2VmaWxlLnNhcworCWNvcHkgdG8gJEAgPGZyb20gPAorJChTQ09QVElPTlMpCis8CisKKyMgRE8gTk9UIERFTEVURSBUSElTIExJTkUgLS0gbWFrZSBkZXBlbmQgZGVwZW5kcyBvbiBpdC4KKworYWRsZXIzMi5vOiB6bGliLmggemNvbmYuaAorY29tcHJlc3MubzogemxpYi5oIHpjb25mLmgKK2NyYzMyLm86IGNyYzMyLmggemxpYi5oIHpjb25mLmgKK2RlZmxhdGUubzogZGVmbGF0ZS5oIHp1dGlsLmggemxpYi5oIHpjb25mLmgKK2V4YW1wbGUubzogemxpYi5oIHpjb25mLmgKK2d6Y2xvc2UubzogemxpYi5oIHpjb25mLmggZ3pndXRzLmgKK2d6bGliLm86IHpsaWIuaCB6Y29uZi5oIGd6Z3V0cy5oCitnenJlYWQubzogemxpYi5oIHpjb25mLmggZ3pndXRzLmgKK2d6d3JpdGUubzogemxpYi5oIHpjb25mLmggZ3pndXRzLmgKK2luZmZhc3QubzogenV0aWwuaCB6bGliLmggemNvbmYuaCBpbmZ0cmVlcy5oIGluZmxhdGUuaCBpbmZmYXN0LmgKK2luZmxhdGUubzogenV0aWwuaCB6bGliLmggemNvbmYuaCBpbmZ0cmVlcy5oIGluZmxhdGUuaCBpbmZmYXN0LmgKK2luZmJhY2subzogenV0aWwuaCB6bGliLmggemNvbmYuaCBpbmZ0cmVlcy5oIGluZmxhdGUuaCBpbmZmYXN0LmgKK2luZnRyZWVzLm86IHp1dGlsLmggemxpYi5oIHpjb25mLmggaW5mdHJlZXMuaAorbWluaWd6aXAubzogemxpYi5oIHpjb25mLmgKK3RyZWVzLm86IGRlZmxhdGUuaCB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oIHRyZWVzLmgKK3VuY29tcHIubzogemxpYi5oIHpjb25mLmgKK3p1dGlsLm86IHp1dGlsLmggemxpYi5oIHpjb25mLmgKZGlmZiAtLWdpdCBhL3NyYy9jb21wcmVzcy5jIGIvc3JjL2NvbXByZXNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJkYjQwNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb21wcmVzcy5jCkBAIC0wLDAgKzEsODYgQEAKKy8qIGNvbXByZXNzLmMgLS0gY29tcHJlc3MgYSBtZW1vcnkgYnVmZmVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNSwgMjAxNCwgMjAxNiBKZWFuLWxvdXAgR2FpbGx5LCBNYXJrIEFkbGVyCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCisgKi8KKworLyogQCgjKSAkSWQkICovCisKKyNkZWZpbmUgWkxJQl9JTlRFUk5BTAorI2luY2x1ZGUgInpsaWIuaCIKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgIENvbXByZXNzZXMgdGhlIHNvdXJjZSBidWZmZXIgaW50byB0aGUgZGVzdGluYXRpb24gYnVmZmVyLiBUaGUgbGV2ZWwKKyAgIHBhcmFtZXRlciBoYXMgdGhlIHNhbWUgbWVhbmluZyBhcyBpbiBkZWZsYXRlSW5pdC4gIHNvdXJjZUxlbiBpcyB0aGUgYnl0ZQorICAgbGVuZ3RoIG9mIHRoZSBzb3VyY2UgYnVmZmVyLiBVcG9uIGVudHJ5LCBkZXN0TGVuIGlzIHRoZSB0b3RhbCBzaXplIG9mIHRoZQorICAgZGVzdGluYXRpb24gYnVmZmVyLCB3aGljaCBtdXN0IGJlIGF0IGxlYXN0IDAuMSUgbGFyZ2VyIHRoYW4gc291cmNlTGVuIHBsdXMKKyAgIDEyIGJ5dGVzLiBVcG9uIGV4aXQsIGRlc3RMZW4gaXMgdGhlIGFjdHVhbCBzaXplIG9mIHRoZSBjb21wcmVzc2VkIGJ1ZmZlci4KKworICAgICBjb21wcmVzczIgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIFpfTUVNX0VSUk9SIGlmIHRoZXJlIHdhcyBub3QgZW5vdWdoCisgICBtZW1vcnksIFpfQlVGX0VSUk9SIGlmIHRoZXJlIHdhcyBub3QgZW5vdWdoIHJvb20gaW4gdGhlIG91dHB1dCBidWZmZXIsCisgICBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgbGV2ZWwgcGFyYW1ldGVyIGlzIGludmFsaWQuCisqLworaW50IFpFWFBPUlQgY29tcHJlc3MyIChkZXN0LCBkZXN0TGVuLCBzb3VyY2UsIHNvdXJjZUxlbiwgbGV2ZWwpCisgICAgQnl0ZWYgKmRlc3Q7CisgICAgdUxvbmdmICpkZXN0TGVuOworICAgIGNvbnN0IEJ5dGVmICpzb3VyY2U7CisgICAgdUxvbmcgc291cmNlTGVuOworICAgIGludCBsZXZlbDsKK3sKKyAgICB6X3N0cmVhbSBzdHJlYW07CisgICAgaW50IGVycjsKKyAgICBjb25zdCB1SW50IG1heCA9ICh1SW50KS0xOworICAgIHVMb25nIGxlZnQ7CisKKyAgICBsZWZ0ID0gKmRlc3RMZW47CisgICAgKmRlc3RMZW4gPSAwOworCisgICAgc3RyZWFtLnphbGxvYyA9IChhbGxvY19mdW5jKTA7CisgICAgc3RyZWFtLnpmcmVlID0gKGZyZWVfZnVuYykwOworICAgIHN0cmVhbS5vcGFxdWUgPSAodm9pZHBmKTA7CisKKyAgICBlcnIgPSBkZWZsYXRlSW5pdCgmc3RyZWFtLCBsZXZlbCk7CisgICAgaWYgKGVyciAhPSBaX09LKSByZXR1cm4gZXJyOworCisgICAgc3RyZWFtLm5leHRfb3V0ID0gZGVzdDsKKyAgICBzdHJlYW0uYXZhaWxfb3V0ID0gMDsKKyAgICBzdHJlYW0ubmV4dF9pbiA9ICh6X2NvbnN0IEJ5dGVmICopc291cmNlOworICAgIHN0cmVhbS5hdmFpbF9pbiA9IDA7CisKKyAgICBkbyB7CisgICAgICAgIGlmIChzdHJlYW0uYXZhaWxfb3V0ID09IDApIHsKKyAgICAgICAgICAgIHN0cmVhbS5hdmFpbF9vdXQgPSBsZWZ0ID4gKHVMb25nKW1heCA/IG1heCA6ICh1SW50KWxlZnQ7CisgICAgICAgICAgICBsZWZ0IC09IHN0cmVhbS5hdmFpbF9vdXQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN0cmVhbS5hdmFpbF9pbiA9PSAwKSB7CisgICAgICAgICAgICBzdHJlYW0uYXZhaWxfaW4gPSBzb3VyY2VMZW4gPiAodUxvbmcpbWF4ID8gbWF4IDogKHVJbnQpc291cmNlTGVuOworICAgICAgICAgICAgc291cmNlTGVuIC09IHN0cmVhbS5hdmFpbF9pbjsKKyAgICAgICAgfQorICAgICAgICBlcnIgPSBkZWZsYXRlKCZzdHJlYW0sIHNvdXJjZUxlbiA/IFpfTk9fRkxVU0ggOiBaX0ZJTklTSCk7CisgICAgfSB3aGlsZSAoZXJyID09IFpfT0spOworCisgICAgKmRlc3RMZW4gPSBzdHJlYW0udG90YWxfb3V0OworICAgIGRlZmxhdGVFbmQoJnN0cmVhbSk7CisgICAgcmV0dXJuIGVyciA9PSBaX1NUUkVBTV9FTkQgPyBaX09LIDogZXJyOworfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworaW50IFpFWFBPUlQgY29tcHJlc3MgKGRlc3QsIGRlc3RMZW4sIHNvdXJjZSwgc291cmNlTGVuKQorICAgIEJ5dGVmICpkZXN0OworICAgIHVMb25nZiAqZGVzdExlbjsKKyAgICBjb25zdCBCeXRlZiAqc291cmNlOworICAgIHVMb25nIHNvdXJjZUxlbjsKK3sKKyAgICByZXR1cm4gY29tcHJlc3MyKGRlc3QsIGRlc3RMZW4sIHNvdXJjZSwgc291cmNlTGVuLCBaX0RFRkFVTFRfQ09NUFJFU1NJT04pOworfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAgSWYgdGhlIGRlZmF1bHQgbWVtTGV2ZWwgb3Igd2luZG93Qml0cyBmb3IgZGVmbGF0ZUluaXQoKSBpcyBjaGFuZ2VkLCB0aGVuCisgICB0aGlzIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIHVwZGF0ZWQuCisgKi8KK3VMb25nIFpFWFBPUlQgY29tcHJlc3NCb3VuZCAoc291cmNlTGVuKQorICAgIHVMb25nIHNvdXJjZUxlbjsKK3sKKyAgICByZXR1cm4gc291cmNlTGVuICsgKHNvdXJjZUxlbiA+PiAxMikgKyAoc291cmNlTGVuID4+IDE0KSArCisgICAgICAgICAgIChzb3VyY2VMZW4gPj4gMjUpICsgMTM7Cit9CmRpZmYgLS1naXQgYS9zcmMvY29uZmlndXJlIGIvc3JjL2NvbmZpZ3VyZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41MmZmNGEwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbmZpZ3VyZQpAQCAtMCwwICsxLDkyNyBAQAorIyEvYmluL3NoCisjIGNvbmZpZ3VyZSBzY3JpcHQgZm9yIHpsaWIuCisjCisjIE5vcm1hbGx5IGNvbmZpZ3VyZSBidWlsZHMgYm90aCBhIHN0YXRpYyBhbmQgYSBzaGFyZWQgbGlicmFyeS4KKyMgSWYgeW91IHdhbnQgdG8gYnVpbGQganVzdCBhIHN0YXRpYyBsaWJyYXJ5LCB1c2U6IC4vY29uZmlndXJlIC0tc3RhdGljCisjCisjIFRvIGltcG9zZSBzcGVjaWZpYyBjb21waWxlciBvciBmbGFncyBvciBpbnN0YWxsIGRpcmVjdG9yeSwgdXNlIGZvciBleGFtcGxlOgorIyAgICBwcmVmaXg9JEhPTUUgQ0M9Y2MgQ0ZMQUdTPSItTzQiIC4vY29uZmlndXJlCisjIG9yIGZvciBjc2gvdGNzaCB1c2VyczoKKyMgICAgKHNldGVudiBwcmVmaXggJEhPTUU7IHNldGVudiBDQyBjYzsgc2V0ZW52IENGTEFHUyAiLU80IjsgLi9jb25maWd1cmUpCisKKyMgSW5jb3JyZWN0IHNldHRpbmdzIG9mIENDIG9yIENGTEFHUyBtYXkgcHJldmVudCBjcmVhdGluZyBhIHNoYXJlZCBsaWJyYXJ5LgorIyBJZiB5b3UgaGF2ZSBwcm9ibGVtcywgdHJ5IHdpdGhvdXQgZGVmaW5pbmcgQ0MgYW5kIENGTEFHUyBiZWZvcmUgcmVwb3J0aW5nCisjIGFuIGVycm9yLgorCisjIHN0YXJ0IG9mZiBjb25maWd1cmUubG9nCitlY2hvIC0tLS0tLS0tLS0tLS0tLS0tLS0tID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gJDAgJCogPj4gY29uZmlndXJlLmxvZworZGF0ZSA+PiBjb25maWd1cmUubG9nCisKKyMgZ2V0IHNvdXJjZSBkaXJlY3RvcnkKK1NSQ0RJUj1gZGlybmFtZSAkMGAKK2lmIHRlc3QgJFNSQ0RJUiA9ICIuIjsgdGhlbgorICAgIFpJTkM9IiIKKyAgICBaSU5DT1VUPSItSS4iCisgICAgU1JDRElSPSIiCitlbHNlCisgICAgWklOQz0nLWluY2x1ZGUgemNvbmYuaCcKKyAgICBaSU5DT1VUPSctSS4gLUkkKFNSQ0RJUiknCisgICAgU1JDRElSPSIkU1JDRElSLyIKK2ZpCisKKyMgc2V0IGNvbW1hbmQgcHJlZml4IGZvciBjcm9zcy1jb21waWxhdGlvbgoraWYgWyAtbiAiJHtDSE9TVH0iIF07IHRoZW4KKyAgICB1bmFtZT0iYGVjaG8gIiR7Q0hPU1R9IiB8IHNlZCAtZSAncy9eW14tXSotXChbXi1dKlwpJC9cMS8nIC1lICdzL15bXi1dKi1bXi1dKi1cKFteLV0qXCkkL1wxLycgLWUgJ3MvXlteLV0qLVteLV0qLVwoW14tXSpcKS0uKiQvXDEvJ2AiCisgICAgQ1JPU1NfUFJFRklYPSIke0NIT1NUfS0iCitmaQorCisjIGRlc3RpbmF0aW9uIG5hbWUgZm9yIHN0YXRpYyBsaWJyYXJ5CitTVEFUSUNMSUI9bGliei5hCisKKyMgZXh0cmFjdCB6bGliIHZlcnNpb24gbnVtYmVycyBmcm9tIHpsaWIuaAorVkVSPWBzZWQgLW4gLWUgJy9WRVJTSU9OICIvcy8uKiJcKC4qXCkiLiovXDEvcCcgPCAke1NSQ0RJUn16bGliLmhgCitWRVIzPWBzZWQgLW4gLWUgJy9WRVJTSU9OICIvcy8uKiJcKFswLTldKlxcLlswLTldKlxcLlswLTldKlwpLiovXDEvcCcgPCAke1NSQ0RJUn16bGliLmhgCitWRVIyPWBzZWQgLW4gLWUgJy9WRVJTSU9OICIvcy8uKiJcKFswLTldKlxcLlswLTldKlwpXFwuLiovXDEvcCcgPCAke1NSQ0RJUn16bGliLmhgCitWRVIxPWBzZWQgLW4gLWUgJy9WRVJTSU9OICIvcy8uKiJcKFswLTldKlwpXFwuLiovXDEvcCcgPCAke1NSQ0RJUn16bGliLmhgCisKKyMgZXN0YWJsaXNoIGNvbW1hbmRzIGZvciBsaWJyYXJ5IGJ1aWxkaW5nCitpZiAiJHtDUk9TU19QUkVGSVh9YXIiIC0tdmVyc2lvbiA+L2Rldi9udWxsIDI+L2Rldi9udWxsIHx8IHRlc3QgJD8gLWx0IDEyNjsgdGhlbgorICAgIEFSPSR7QVItIiR7Q1JPU1NfUFJFRklYfWFyIn0KKyAgICB0ZXN0IC1uICIke0NST1NTX1BSRUZJWH0iICYmIGVjaG8gVXNpbmcgJHtBUn0gfCB0ZWUgLWEgY29uZmlndXJlLmxvZworZWxzZQorICAgIEFSPSR7QVItImFyIn0KKyAgICB0ZXN0IC1uICIke0NST1NTX1BSRUZJWH0iICYmIGVjaG8gVXNpbmcgJHtBUn0gfCB0ZWUgLWEgY29uZmlndXJlLmxvZworZmkKK0FSRkxBR1M9JHtBUkZMQUdTLSJyYyJ9CitpZiAiJHtDUk9TU19QUkVGSVh9cmFubGliIiAtLXZlcnNpb24gPi9kZXYvbnVsbCAyPi9kZXYvbnVsbCB8fCB0ZXN0ICQ/IC1sdCAxMjY7IHRoZW4KKyAgICBSQU5MSUI9JHtSQU5MSUItIiR7Q1JPU1NfUFJFRklYfXJhbmxpYiJ9CisgICAgdGVzdCAtbiAiJHtDUk9TU19QUkVGSVh9IiAmJiBlY2hvIFVzaW5nICR7UkFOTElCfSB8IHRlZSAtYSBjb25maWd1cmUubG9nCitlbHNlCisgICAgUkFOTElCPSR7UkFOTElCLSJyYW5saWIifQorZmkKK2lmICIke0NST1NTX1BSRUZJWH1ubSIgLS12ZXJzaW9uID4vZGV2L251bGwgMj4vZGV2L251bGwgfHwgdGVzdCAkPyAtbHQgMTI2OyB0aGVuCisgICAgTk09JHtOTS0iJHtDUk9TU19QUkVGSVh9bm0ifQorICAgIHRlc3QgLW4gIiR7Q1JPU1NfUFJFRklYfSIgJiYgZWNobyBVc2luZyAke05NfSB8IHRlZSAtYSBjb25maWd1cmUubG9nCitlbHNlCisgICAgTk09JHtOTS0ibm0ifQorZmkKKworIyBzZXQgZGVmYXVsdHMgYmVmb3JlIHByb2Nlc3NpbmcgY29tbWFuZCBsaW5lIG9wdGlvbnMKK0xEQ09ORklHPSR7TERDT05GSUctImxkY29uZmlnIn0KK0xEU0hBUkVETElCQz0iJHtMRFNIQVJFRExJQkMtLWxjfSIKK0FSQ0hTPQorcHJlZml4PSR7cHJlZml4LS91c3IvbG9jYWx9CitleGVjX3ByZWZpeD0ke2V4ZWNfcHJlZml4LScke3ByZWZpeH0nfQorbGliZGlyPSR7bGliZGlyLScke2V4ZWNfcHJlZml4fS9saWInfQorc2hhcmVkbGliZGlyPSR7c2hhcmVkbGliZGlyLScke2xpYmRpcn0nfQoraW5jbHVkZWRpcj0ke2luY2x1ZGVkaXItJyR7cHJlZml4fS9pbmNsdWRlJ30KK21hbmRpcj0ke21hbmRpci0nJHtwcmVmaXh9L3NoYXJlL21hbid9CitzaGFyZWRfZXh0PScuc28nCitzaGFyZWQ9MQorc29sbz0wCitjb3Zlcj0wCit6cHJlZml4PTAKK3pjb25zdD0wCitidWlsZDY0PTAKK2djYz0wCit3YXJuPTAKK2RlYnVnPTAKK3Nhbml0aXplPTAKK29sZF9jYz0iJENDIgorb2xkX2NmbGFncz0iJENGTEFHUyIKK09CSkM9JyQoT0JKWikgJChPQkpHKScKK1BJQ19PQkpDPSckKFBJQ19PQkpaKSAkKFBJQ19PQkpHKScKKworIyBsZWF2ZSB0aGlzIHNjcmlwdCwgb3B0aW9uYWxseSBpbiBhIGJhZCB3YXkKK2xlYXZlKCkKK3sKKyAgaWYgdGVzdCAiJCoiICE9ICIwIjsgdGhlbgorICAgIGVjaG8gIioqICQwIGFib3J0aW5nLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICBmaQorICBybSAtZiAkdGVzdC5bY29dICR0ZXN0ICR0ZXN0JHNoYXJlZF9leHQgJHRlc3QuZ2NubyAuLy0tdmVyc2lvbgorICBlY2hvIC0tLS0tLS0tLS0tLS0tLS0tLS0tID4+IGNvbmZpZ3VyZS5sb2cKKyAgZWNobyA+PiBjb25maWd1cmUubG9nCisgIGVjaG8gPj4gY29uZmlndXJlLmxvZworICBleGl0ICQxCit9CisKKyMgcHJvY2VzcyBjb21tYW5kIGxpbmUgb3B0aW9ucword2hpbGUgdGVzdCAkIyAtZ2UgMQorZG8KK2Nhc2UgIiQxIiBpbgorICAgIC1oKiB8IC0taGVscCkKKyAgICAgIGVjaG8gJ3VzYWdlOicgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgZWNobyAnICBjb25maWd1cmUgWy0tY29uc3RdIFstLXpwcmVmaXhdIFstLXByZWZpeD1QUkVGSVhdICBbLS1lcHJlZml4PUVYUFJFRklYXScgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgZWNobyAnICAgIFstLXN0YXRpY10gWy0tNjRdIFstLWxpYmRpcj1MSUJESVJdIFstLXNoYXJlZGxpYmRpcj1MSUJESVJdJyB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICcgICAgWy0taW5jbHVkZWRpcj1JTkNMVURFRElSXSBbLS1hcmNocz0iLWFyY2ggaTM4NiAtYXJjaCB4ODZfNjQiXScgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgICBleGl0IDAgOzsKKyAgICAtcCo9KiB8IC0tcHJlZml4PSopIHByZWZpeD1gZWNobyAkMSB8IHNlZCAncy8uKj0vLydgOyBzaGlmdCA7OworICAgIC1lKj0qIHwgLS1lcHJlZml4PSopIGV4ZWNfcHJlZml4PWBlY2hvICQxIHwgc2VkICdzLy4qPS8vJ2A7IHNoaWZ0IDs7CisgICAgLWwqPSogfCAtLWxpYmRpcj0qKSBsaWJkaXI9YGVjaG8gJDEgfCBzZWQgJ3MvLio9Ly8nYDsgc2hpZnQgOzsKKyAgICAtLXNoYXJlZGxpYmRpcj0qKSBzaGFyZWRsaWJkaXI9YGVjaG8gJDEgfCBzZWQgJ3MvLio9Ly8nYDsgc2hpZnQgOzsKKyAgICAtaSo9KiB8IC0taW5jbHVkZWRpcj0qKSBpbmNsdWRlZGlyPWBlY2hvICQxIHwgc2VkICdzLy4qPS8vJ2A7c2hpZnQgOzsKKyAgICAtdSo9KiB8IC0tdW5hbWU9KikgdW5hbWU9YGVjaG8gJDEgfCBzZWQgJ3MvLio9Ly8nYDtzaGlmdCA7OworICAgIC1wKiB8IC0tcHJlZml4KSBwcmVmaXg9IiQyIjsgc2hpZnQ7IHNoaWZ0IDs7CisgICAgLWUqIHwgLS1lcHJlZml4KSBleGVjX3ByZWZpeD0iJDIiOyBzaGlmdDsgc2hpZnQgOzsKKyAgICAtbCogfCAtLWxpYmRpcikgbGliZGlyPSIkMiI7IHNoaWZ0OyBzaGlmdCA7OworICAgIC1pKiB8IC0taW5jbHVkZWRpcikgaW5jbHVkZWRpcj0iJDIiOyBzaGlmdDsgc2hpZnQgOzsKKyAgICAtcyogfCAtLXNoYXJlZCB8IC0tZW5hYmxlLXNoYXJlZCkgc2hhcmVkPTE7IHNoaWZ0IDs7CisgICAgLXQgfCAtLXN0YXRpYykgc2hhcmVkPTA7IHNoaWZ0IDs7CisgICAgLS1zb2xvKSBzb2xvPTE7IHNoaWZ0IDs7CisgICAgLS1jb3ZlcikgY292ZXI9MTsgc2hpZnQgOzsKKyAgICAteiogfCAtLXpwcmVmaXgpIHpwcmVmaXg9MTsgc2hpZnQgOzsKKyAgICAtNiogfCAtLTY0KSBidWlsZDY0PTE7IHNoaWZ0IDs7CisgICAgLWEqPSogfCAtLWFyY2hzPSopIEFSQ0hTPWBlY2hvICQxIHwgc2VkICdzLy4qPS8vJ2A7IHNoaWZ0IDs7CisgICAgLS1zeXNjb25mZGlyPSopIGVjaG8gImlnbm9yZWQgb3B0aW9uOiAtLXN5c2NvbmZkaXIiIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2c7IHNoaWZ0IDs7CisgICAgLS1sb2NhbHN0YXRlZGlyPSopIGVjaG8gImlnbm9yZWQgb3B0aW9uOiAtLWxvY2Fsc3RhdGVkaXIiIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2c7IHNoaWZ0IDs7CisgICAgLWMqIHwgLS1jb25zdCkgemNvbnN0PTE7IHNoaWZ0IDs7CisgICAgLXcqIHwgLS13YXJuKSB3YXJuPTE7IHNoaWZ0IDs7CisgICAgLWQqIHwgLS1kZWJ1ZykgZGVidWc9MTsgc2hpZnQgOzsKKyAgICAtLXNhbml0aXplKSBzYW5pdGl6ZT0xOyBzaGlmdCA7OworICAgICopCisgICAgICBlY2hvICJ1bmtub3duIG9wdGlvbjogJDEiIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gIiQwIC0taGVscCBmb3IgaGVscCIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgbGVhdmUgMTs7CisgICAgZXNhYworZG9uZQorCisjIHRlbXBvcmFyeSBmaWxlIG5hbWUKK3Rlc3Q9enRlc3QkJAorCisjIHB1dCBhcmd1bWVudHMgaW4gbG9nLCBhbHNvIHB1dCB0ZXN0IGZpbGUgaW4gbG9nIGlmIHVzZWQgaW4gYXJndW1lbnRzCitzaG93KCkKK3sKKyAgY2FzZSAiJCoiIGluCisgICAgKiR0ZXN0LmMqKQorICAgICAgZWNobyA9PT0gJHRlc3QuYyA9PT0gPj4gY29uZmlndXJlLmxvZworICAgICAgY2F0ICR0ZXN0LmMgPj4gY29uZmlndXJlLmxvZworICAgICAgZWNobyA9PT0gPj4gY29uZmlndXJlLmxvZzs7CisgIGVzYWMKKyAgZWNobyAkKiA+PiBjb25maWd1cmUubG9nCit9CisKKyMgY2hlY2sgZm9yIGdjYyB2cy4gY2MgYW5kIHNldCBjb21waWxlIGFuZCBsaW5rIGZsYWdzIGJhc2VkIG9uIHRoZSBzeXN0ZW0gaWRlbnRpZmllZCBieSB1bmFtZQorY2F0ID4gJHRlc3QuYyA8PEVPRgorZXh0ZXJuIGludCBnZXRjaGFyKCk7CitpbnQgaGVsbG8oKSB7cmV0dXJuIGdldGNoYXIoKTt9CitFT0YKKworaWYgdGVzdCAteiAiJENDIjsgdGhlbgorICBlY2hvIENoZWNraW5nIGZvciAke0NST1NTX1BSRUZJWH1nY2MuLi4gfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICBpZiAke0NST1NTX1BSRUZJWH1nY2MgLXYgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgY2M9JHtDUk9TU19QUkVGSVh9Z2NjCisgIGVsc2UKKyAgICBjYz0ke0NST1NTX1BSRUZJWH1jYworICBmaQorZmkKK2NmbGFncz0ke0NGTEFHUy0iLU8zIn0KKyMgdG8gZm9yY2UgdGhlIGFzbSB2ZXJzaW9uIHVzZTogQ0ZMQUdTPSItTzMgLURBU01WIiAuL2NvbmZpZ3VyZQorY2FzZSAiJGNjIiBpbgorICAqZ2NjKikgZ2NjPTEgOzsKKyAgKmNsYW5nKikgZ2NjPTEgOzsKK2VzYWMKK2Nhc2UgYCRjYyAtdiAyPiYxYCBpbgorICAqZ2NjKikgZ2NjPTEgOzsKKyAgKmNsYW5nKikgZ2NjPTEgOzsKK2VzYWMKKworc2hvdyAkY2MgLWMgJHRlc3QuYworaWYgdGVzdCAiJGdjYyIgLWVxIDEgJiYgKCRjYyAtYyAkdGVzdC5jKSA+PiBjb25maWd1cmUubG9nIDI+JjE7IHRoZW4KKyAgZWNobyAuLi4gdXNpbmcgZ2NjID4+IGNvbmZpZ3VyZS5sb2cKKyAgQ0M9IiRjYyIKKyAgQ0ZMQUdTPSIke0NGTEFHUy0tTzN9IgorICBTRkxBR1M9IiR7Q0ZMQUdTLS1PM30gLWZQSUMiCisgIGlmIHRlc3QgIiRBUkNIUyI7IHRoZW4KKyAgICBDRkxBR1M9IiR7Q0ZMQUdTfSAke0FSQ0hTfSIKKyAgICBMREZMQUdTPSIke0xERkxBR1N9ICR7QVJDSFN9IgorICBmaQorICBpZiB0ZXN0ICRidWlsZDY0IC1lcSAxOyB0aGVuCisgICAgQ0ZMQUdTPSIke0NGTEFHU30gLW02NCIKKyAgICBTRkxBR1M9IiR7U0ZMQUdTfSAtbTY0IgorICBmaQorICBpZiB0ZXN0ICIkd2FybiIgLWVxIDE7IHRoZW4KKyAgICBpZiB0ZXN0ICIkemNvbnN0IiAtZXEgMTsgdGhlbgorICAgICAgQ0ZMQUdTPSIke0NGTEFHU30gLVdhbGwgLVdleHRyYSAtV2Nhc3QtcXVhbCAtcGVkYW50aWMgLURaTElCX0NPTlNUIgorICAgIGVsc2UKKyAgICAgIENGTEFHUz0iJHtDRkxBR1N9IC1XYWxsIC1XZXh0cmEgLXBlZGFudGljIgorICAgIGZpCisgIGZpCisgIGlmIHRlc3QgJHNhbml0aXplIC1lcSAxOyB0aGVuCisgICAgQ0ZMQUdTPSIke0NGTEFHU30gLWZzYW5pdGl6ZT1hZGRyZXNzIgorICBmaQorICBpZiB0ZXN0ICRkZWJ1ZyAtZXEgMTsgdGhlbgorICAgIENGTEFHUz0iJHtDRkxBR1N9IC1EWkxJQl9ERUJVRyIKKyAgICBTRkxBR1M9IiR7U0ZMQUdTfSAtRFpMSUJfREVCVUciCisgIGZpCisgIGlmIHRlc3QgLXogIiR1bmFtZSI7IHRoZW4KKyAgICB1bmFtZT1gKHVuYW1lIC1zIHx8IGVjaG8gdW5rbm93bikgMj4vZGV2L251bGxgCisgIGZpCisgIGNhc2UgIiR1bmFtZSIgaW4KKyAgTGludXgqIHwgbGludXgqIHwgR05VIHwgR05VLyogfCBzb2xhcmlzKikKKyAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0iJGNjIC1zaGFyZWQgLVdsLC1zb25hbWUsbGliei5zby4xLC0tdmVyc2lvbi1zY3JpcHQsJHtTUkNESVJ9emxpYi5tYXAifSA7OworICAqQlNEIHwgKmJzZCogfCBEcmFnb25GbHkpCisgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtIiRjYyAtc2hhcmVkIC1XbCwtc29uYW1lLGxpYnouc28uMSwtLXZlcnNpb24tc2NyaXB0LCR7U1JDRElSfXpsaWIubWFwIn0KKyAgICAgICAgTERDT05GSUc9ImxkY29uZmlnIC1tIiA7OworICBDWUdXSU4qIHwgQ3lnd2luKiB8IGN5Z3dpbiogfCBPUy8yKikKKyAgICAgICAgRVhFPScuZXhlJyA7OworICBNSU5HVyogfCBtaW5ndyopCisjIHRlbXBvcmFyeSBieXBhc3MKKyAgICAgICAgcm0gLWYgJHRlc3QuW2NvXSAkdGVzdCAkdGVzdCRzaGFyZWRfZXh0CisgICAgICAgIGVjaG8gIlBsZWFzZSB1c2Ugd2luMzIvTWFrZWZpbGUuZ2NjIGluc3RlYWQuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICAgIGxlYXZlIDEKKyAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0iJGNjIC1zaGFyZWQifQorICAgICAgICBMRFNIQVJFRExJQkM9IiIKKyAgICAgICAgRVhFPScuZXhlJyA7OworICBRTlgqKSAgIyBUaGlzIGlzIGZvciBRTlg2LiBJIHN1cHBvc2UgdGhhdCB0aGUgUU5YIHJ1bGUgYmVsb3cgaXMgZm9yIFFOWDIsUU5YNAorICAgICAgICAgIyAoYWxhaW4uYm9ubmVmb3lAaWNidC5jb20pCisgICAgICAgICAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtIiRjYyAtc2hhcmVkIC1XbCwtaGxpYnouc28uMSJ9IDs7CisgIEhQLVVYKikKKyAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtIiRjYyAtc2hhcmVkICRTRkxBR1MifQorICAgICAgICAgY2FzZSBgKHVuYW1lIC1tIHx8IGVjaG8gdW5rbm93bikgMj4vZGV2L251bGxgIGluCisgICAgICAgICBpYTY0KQorICAgICAgICAgICAgICAgICBzaGFyZWRfZXh0PScuc28nCisgICAgICAgICAgICAgICAgIFNIQVJFRExJQj0nbGliei5zbycgOzsKKyAgICAgICAgICopCisgICAgICAgICAgICAgICAgIHNoYXJlZF9leHQ9Jy5zbCcKKyAgICAgICAgICAgICAgICAgU0hBUkVETElCPSdsaWJ6LnNsJyA7OworICAgICAgICAgZXNhYyA7OworICBEYXJ3aW4qIHwgZGFyd2luKikKKyAgICAgICAgICAgICBzaGFyZWRfZXh0PScuZHlsaWInCisgICAgICAgICAgICAgU0hBUkVETElCPWxpYnokc2hhcmVkX2V4dAorICAgICAgICAgICAgIFNIQVJFRExJQlY9bGliei4kVkVSJHNoYXJlZF9leHQKKyAgICAgICAgICAgICBTSEFSRURMSUJNPWxpYnouJFZFUjEkc2hhcmVkX2V4dAorICAgICAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtIiRjYyAtZHluYW1pY2xpYiAtaW5zdGFsbF9uYW1lICRsaWJkaXIvJFNIQVJFRExJQk0gLWNvbXBhdGliaWxpdHlfdmVyc2lvbiAkVkVSMSAtY3VycmVudF92ZXJzaW9uICRWRVIzIn0KKyAgICAgICAgICAgICBpZiBsaWJ0b29sIC1WIDI+JjEgfCBncmVwIEFwcGxlID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgICAgICAgIEFSPSJsaWJ0b29sIgorICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgQVI9Ii91c3IvYmluL2xpYnRvb2wiCisgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICBBUkZMQUdTPSItbyIgOzsKKyAgKikgICAgICAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0iJGNjIC1zaGFyZWQifSA7OworICBlc2FjCitlbHNlCisgICMgZmluZCBzeXN0ZW0gbmFtZSBhbmQgY29ycmVzcG9uZGluZyBjYyBvcHRpb25zCisgIENDPSR7Q0MtY2N9CisgIGdjYz0wCisgIGVjaG8gLi4uIHVzaW5nICRDQyA+PiBjb25maWd1cmUubG9nCisgIGlmIHRlc3QgLXogIiR1bmFtZSI7IHRoZW4KKyAgICB1bmFtZT1gKHVuYW1lIC1zciB8fCBlY2hvIHVua25vd24pIDI+L2Rldi9udWxsYAorICBmaQorICBjYXNlICIkdW5hbWUiIGluCisgIEhQLVVYKikgICAgU0ZMQUdTPSR7Q0ZMQUdTLSItTyAreiJ9CisgICAgICAgICAgICAgQ0ZMQUdTPSR7Q0ZMQUdTLSItTyJ9CisjICAgICAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0ibGQgLWIgK3Zub2NvbXBhdHdhcm5pbmdzIn0KKyAgICAgICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSJsZCAtYiJ9CisgICAgICAgICBjYXNlIGAodW5hbWUgLW0gfHwgZWNobyB1bmtub3duKSAyPi9kZXYvbnVsbGAgaW4KKyAgICAgICAgIGlhNjQpCisgICAgICAgICAgICAgc2hhcmVkX2V4dD0nLnNvJworICAgICAgICAgICAgIFNIQVJFRExJQj0nbGliei5zbycgOzsKKyAgICAgICAgICopCisgICAgICAgICAgICAgc2hhcmVkX2V4dD0nLnNsJworICAgICAgICAgICAgIFNIQVJFRExJQj0nbGliei5zbCcgOzsKKyAgICAgICAgIGVzYWMgOzsKKyAgSVJJWCopICAgICBTRkxBR1M9JHtDRkxBR1MtIi1hbnNpIC1PMiAtcnBhdGggLiJ9CisgICAgICAgICAgICAgQ0ZMQUdTPSR7Q0ZMQUdTLSItYW5zaSAtTzIifQorICAgICAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtImNjIC1zaGFyZWQgLVdsLC1zb25hbWUsbGliei5zby4xIn0gOzsKKyAgT1NGMVwgVjQqKSBTRkxBR1M9JHtDRkxBR1MtIi1PIC1zdGQxIn0KKyAgICAgICAgICAgICBDRkxBR1M9JHtDRkxBR1MtIi1PIC1zdGQxIn0KKyAgICAgICAgICAgICBMREZMQUdTPSIke0xERkxBR1N9IC1XbCwtcnBhdGgsLiIKKyAgICAgICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSJjYyAtc2hhcmVkICAtV2wsLXNvbmFtZSxsaWJ6LnNvIC1XbCwtbXN5bSAtV2wsLXJwYXRoLCQobGliZGlyKSAtV2wsLXNldF92ZXJzaW9uLCR7VkVSfToxLjAifSA7OworICBPU0YxKikgICAgIFNGTEFHUz0ke0NGTEFHUy0iLU8gLXN0ZDEifQorICAgICAgICAgICAgIENGTEFHUz0ke0NGTEFHUy0iLU8gLXN0ZDEifQorICAgICAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtImNjIC1zaGFyZWQgLVdsLC1zb25hbWUsbGliei5zby4xIn0gOzsKKyAgUU5YKikgICAgICBTRkxBR1M9JHtDRkxBR1MtIi00IC1PIn0KKyAgICAgICAgICAgICBDRkxBR1M9JHtDRkxBR1MtIi00IC1PIn0KKyAgICAgICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSJjYyJ9CisgICAgICAgICAgICAgUkFOTElCPSR7UkFOTElCLSJ0cnVlIn0KKyAgICAgICAgICAgICBBUj0iY2MiCisgICAgICAgICAgICAgQVJGTEFHUz0iLUEiIDs7CisgIFNDT19TVlwgMy4yKikgU0ZMQUdTPSR7Q0ZMQUdTLSItTzMgLWR5IC1LUElDICJ9CisgICAgICAgICAgICAgQ0ZMQUdTPSR7Q0ZMQUdTLSItTzMifQorICAgICAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtImNjIC1keSAtS1BJQyAtRyJ9IDs7CisgIFN1bk9TXCA1KiB8IHNvbGFyaXMqKQorICAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0iY2MgLUcgLWggbGlieiRzaGFyZWRfZXh0LiRWRVIxIn0KKyAgICAgICAgIFNGTEFHUz0ke0NGTEFHUy0iLWZhc3QgLUtQSUMifQorICAgICAgICAgQ0ZMQUdTPSR7Q0ZMQUdTLSItZmFzdCJ9CisgICAgICAgICBpZiB0ZXN0ICRidWlsZDY0IC1lcSAxOyB0aGVuCisgICAgICAgICAgICAgIyBvbGQgdmVyc2lvbnMgb2YgU3VuUFJPL1dvcmtzaG9wL1N0dWRpbyBkb24ndCBzdXBwb3J0IC1tNjQsCisgICAgICAgICAgICAgIyBidXQgbmV3ZXIgb25lcyBkby4gIENoZWNrIGZvciBpdC4KKyAgICAgICAgICAgICBmbGFnNjQ9YCRDQyAtZmxhZ3MgfCBlZ3JlcCAtLSAnXi1tNjQnYAorICAgICAgICAgICAgIGlmIHRlc3QgeCIkZmxhZzY0IiAhPSB4IiIgOyB0aGVuCisgICAgICAgICAgICAgICAgIENGTEFHUz0iJHtDRkxBR1N9IC1tNjQiCisgICAgICAgICAgICAgICAgIFNGTEFHUz0iJHtTRkxBR1N9IC1tNjQiCisgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICBjYXNlIGAodW5hbWUgLW0gfHwgZWNobyB1bmtub3duKSAyPi9kZXYvbnVsbGAgaW4KKyAgICAgICAgICAgICAgICAgICBpODYqKQorICAgICAgICAgICAgICAgICAgICAgU0ZMQUdTPSIkU0ZMQUdTIC14YXJjaD1hbWQ2NCIKKyAgICAgICAgICAgICAgICAgICAgIENGTEFHUz0iJENGTEFHUyAteGFyY2g9YW1kNjQiIDs7CisgICAgICAgICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICAgICAgIFNGTEFHUz0iJFNGTEFHUyAteGFyY2g9djkiCisgICAgICAgICAgICAgICAgICAgICBDRkxBR1M9IiRDRkxBR1MgLXhhcmNoPXY5IiA7OworICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgZmkKKyAgICAgICAgIGZpCisgICAgICAgICBpZiB0ZXN0IC1uICIkWklOQyI7IHRoZW4KKyAgICAgICAgICAgICBaSU5DPSctSS0gLUkuIC1JJChTUkNESVIpJworICAgICAgICAgZmkKKyAgICAgICAgIDs7CisgIFN1bk9TXCA0KikgU0ZMQUdTPSR7Q0ZMQUdTLSItTzIgLVBJQyJ9CisgICAgICAgICAgICAgQ0ZMQUdTPSR7Q0ZMQUdTLSItTzIifQorICAgICAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtImxkIn0gOzsKKyAgU3VuU3R1ZGlvXCA5KikgU0ZMQUdTPSR7Q0ZMQUdTLSItZmFzdCAteGNvZGU9cGljMzIgLXh0YXJnZXQ9dWx0cmEzIC14YXJjaD12OWIifQorICAgICAgICAgICAgIENGTEFHUz0ke0NGTEFHUy0iLWZhc3QgLXh0YXJnZXQ9dWx0cmEzIC14YXJjaD12OWIifQorICAgICAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtImNjIC14YXJjaD12OWIifSA7OworICBVTklYX1N5c3RlbV9WXCA0LjIuMCkKKyAgICAgICAgICAgICBTRkxBR1M9JHtDRkxBR1MtIi1LUElDIC1PIn0KKyAgICAgICAgICAgICBDRkxBR1M9JHtDRkxBR1MtIi1PIn0KKyAgICAgICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSJjYyAtRyJ9IDs7CisgIFVOSVhfU1ZcIDQuMk1QKQorICAgICAgICAgICAgIFNGTEFHUz0ke0NGTEFHUy0iLUtjb25mb3JtX3BpYyAtTyJ9CisgICAgICAgICAgICAgQ0ZMQUdTPSR7Q0ZMQUdTLSItTyJ9CisgICAgICAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0iY2MgLUcifSA7OworICBPcGVuVU5JWFwgNSkKKyAgICAgICAgICAgICBTRkxBR1M9JHtDRkxBR1MtIi1LUElDIC1PIn0KKyAgICAgICAgICAgICBDRkxBR1M9JHtDRkxBR1MtIi1PIn0KKyAgICAgICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSJjYyAtRyJ9IDs7CisgIEFJWCopICAjIENvdXJ0ZXN5IG9mIGRiYWtrZXJAYXJyYXlhc29sdXRpb25zLmNvbQorICAgICAgICAgICAgIFNGTEFHUz0ke0NGTEFHUy0iLU8gLXFtYXhtZW09ODE5MiJ9CisgICAgICAgICAgICAgQ0ZMQUdTPSR7Q0ZMQUdTLSItTyAtcW1heG1lbT04MTkyIn0KKyAgICAgICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSJ4bGMgLUcifSA7OworICAjIHNlbmQgd29ya2luZyBvcHRpb25zIGZvciBvdGhlciBzeXN0ZW1zIHRvIHpsaWJAZ3ppcC5vcmcKKyAgKikgICAgICAgICBTRkxBR1M9JHtDRkxBR1MtIi1PIn0KKyAgICAgICAgICAgICBDRkxBR1M9JHtDRkxBR1MtIi1PIn0KKyAgICAgICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSJjYyAtc2hhcmVkIn0gOzsKKyAgZXNhYworZmkKKworIyBkZXN0aW5hdGlvbiBuYW1lcyBmb3Igc2hhcmVkIGxpYnJhcnkgaWYgbm90IGRlZmluZWQgYWJvdmUKK1NIQVJFRExJQj0ke1NIQVJFRExJQi0ibGlieiRzaGFyZWRfZXh0In0KK1NIQVJFRExJQlY9JHtTSEFSRURMSUJWLSJsaWJ6JHNoYXJlZF9leHQuJFZFUiJ9CitTSEFSRURMSUJNPSR7U0hBUkVETElCTS0ibGlieiRzaGFyZWRfZXh0LiRWRVIxIn0KKworZWNobyA+PiBjb25maWd1cmUubG9nCisKKyMgZGVmaW5lIGZ1bmN0aW9ucyBmb3IgdGVzdGluZyBjb21waWxlciBhbmQgbGlicmFyeSBjaGFyYWN0ZXJpc3RpY3MgYW5kIGxvZ2dpbmcgdGhlIHJlc3VsdHMKKworY2F0ID4gJHRlc3QuYyA8PEVPRgorI2Vycm9yIGVycm9yCitFT0YKK2lmICgkQ0MgLWMgJENGTEFHUyAkdGVzdC5jKSAyPi9kZXYvbnVsbDsgdGhlbgorICB0cnkoKQorICB7CisgICAgc2hvdyAkKgorICAgIHRlc3QgImAoICQqICkgMj4mMSB8IHRlZSAtYSBjb25maWd1cmUubG9nYCIgPSAiIgorICB9CisgIGVjaG8gLSB1c2luZyBhbnkgb3V0cHV0IGZyb20gY29tcGlsZXIgdG8gaW5kaWNhdGUgYW4gZXJyb3IgPj4gY29uZmlndXJlLmxvZworZWxzZQorICB0cnkoKQorICB7CisgICAgc2hvdyAkKgorICAgIGdvdD1gKCAkKiApIDI+JjFgCisgICAgcmV0PSQ/CisgICAgaWYgdGVzdCAiJGdvdCIgIT0gIiI7IHRoZW4KKyAgICAgIHByaW50ZiAiJXNcbiIgIiRnb3QiID4+IGNvbmZpZ3VyZS5sb2cKKyAgICBmaQorICAgIGlmIHRlc3QgJHJldCAtbmUgMDsgdGhlbgorICAgICAgZWNobyAiKGV4aXQgY29kZSAiJHJldCIpIiA+PiBjb25maWd1cmUubG9nCisgICAgZmkKKyAgICByZXR1cm4gJHJldAorICB9CitmaQorCit0cnlib3RoKCkKK3sKKyAgc2hvdyAkKgorICBnb3Q9YCggJCogKSAyPiYxYAorICByZXQ9JD8KKyAgaWYgdGVzdCAiJGdvdCIgIT0gIiI7IHRoZW4KKyAgICBwcmludGYgIiVzXG4iICIkZ290IiA+PiBjb25maWd1cmUubG9nCisgIGZpCisgIGlmIHRlc3QgJHJldCAtbmUgMDsgdGhlbgorICAgIGVjaG8gIihleGl0IGNvZGUgIiRyZXQiKSIgPj4gY29uZmlndXJlLmxvZworICAgIHJldHVybiAkcmV0CisgIGZpCisgIHRlc3QgIiRnb3QiID0gIiIKK30KKworY2F0ID4gJHRlc3QuYyA8PCBFT0YKK2ludCBmb28oKSB7IHJldHVybiAwOyB9CitFT0YKK2VjaG8gIkNoZWNraW5nIGZvciBvYnNlc3NpdmUtY29tcHVsc2l2ZSBjb21waWxlciBvcHRpb25zLi4uIiA+PiBjb25maWd1cmUubG9nCitpZiB0cnkgJENDIC1jICRDRkxBR1MgJHRlc3QuYzsgdGhlbgorICA6CitlbHNlCisgIGVjaG8gIkNvbXBpbGVyIGVycm9yIHJlcG9ydGluZyBpcyB0b28gaGFyc2ggZm9yICQwIChwZXJoYXBzIHJlbW92ZSAtV2Vycm9yKS4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgbGVhdmUgMQorZmkKKworZWNobyA+PiBjb25maWd1cmUubG9nCisKKyMgc2VlIGlmIHNoYXJlZCBsaWJyYXJ5IGJ1aWxkIHN1cHBvcnRlZAorY2F0ID4gJHRlc3QuYyA8PEVPRgorZXh0ZXJuIGludCBnZXRjaGFyKCk7CitpbnQgaGVsbG8oKSB7cmV0dXJuIGdldGNoYXIoKTt9CitFT0YKK2lmIHRlc3QgJHNoYXJlZCAtZXEgMTsgdGhlbgorICBlY2hvIENoZWNraW5nIGZvciBzaGFyZWQgbGlicmFyeSBzdXBwb3J0Li4uIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgIyB3ZSBtdXN0IHRlc3QgaW4gdHdvIHN0ZXBzIChjYyB0aGVuIGxkKSwgcmVxdWlyZWQgYXQgbGVhc3Qgb24gU3VuT1MgNC54CisgIGlmIHRyeSAkQ0MgLXcgLWMgJFNGTEFHUyAkdGVzdC5jICYmCisgICAgIHRyeSAkTERTSEFSRUQgJFNGTEFHUyAtbyAkdGVzdCRzaGFyZWRfZXh0ICR0ZXN0Lm87IHRoZW4KKyAgICBlY2hvIEJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJ5ICRTSEFSRURMSUJWIHdpdGggJENDLiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgIGVsaWYgdGVzdCAteiAiJG9sZF9jYyIgLWEgLXogIiRvbGRfY2ZsYWdzIjsgdGhlbgorICAgIGVjaG8gTm8gc2hhcmVkIGxpYnJhcnkgc3VwcG9ydC4gfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgIHNoYXJlZD0wOworICBlbHNlCisgICAgZWNobyAnTm8gc2hhcmVkIGxpYnJhcnkgc3VwcG9ydDsgdHJ5IHdpdGhvdXQgZGVmaW5pbmcgQ0MgYW5kIENGTEFHUycgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgIHNoYXJlZD0wOworICBmaQorZmkKK2lmIHRlc3QgJHNoYXJlZCAtZXEgMDsgdGhlbgorICBMRFNIQVJFRD0iJENDIgorICBBTEw9InN0YXRpYyIKKyAgVEVTVD0iYWxsIHRlc3RzdGF0aWMiCisgIFNIQVJFRExJQj0iIgorICBTSEFSRURMSUJWPSIiCisgIFNIQVJFRExJQk09IiIKKyAgZWNobyBCdWlsZGluZyBzdGF0aWMgbGlicmFyeSAkU1RBVElDTElCIHZlcnNpb24gJFZFUiB3aXRoICRDQy4gfCB0ZWUgLWEgY29uZmlndXJlLmxvZworZWxzZQorICBBTEw9InN0YXRpYyBzaGFyZWQiCisgIFRFU1Q9ImFsbCB0ZXN0c3RhdGljIHRlc3RzaGFyZWQiCitmaQorCisjIGNoZWNrIGZvciB1bmRlcnNjb3JlcyBpbiBleHRlcm5hbCBuYW1lcyBmb3IgdXNlIGJ5IGFzc2VtYmxlciBjb2RlCitDUFA9JHtDUFAtIiRDQyAtRSJ9CitjYXNlICRDRkxBR1MgaW4KKyAgKkFTTVYqKQorICAgIGVjaG8gPj4gY29uZmlndXJlLmxvZworICAgIHNob3cgIiROTSAkdGVzdC5vIHwgZ3JlcCBfaGVsbG8iCisgICAgaWYgdGVzdCAiYCROTSAkdGVzdC5vIHwgZ3JlcCBfaGVsbG8gfCB0ZWUgLWEgY29uZmlndXJlLmxvZ2AiID0gIiI7IHRoZW4KKyAgICAgIENQUD0iJENQUCAtRE5PX1VOREVSTElORSIKKyAgICAgIGVjaG8gQ2hlY2tpbmcgZm9yIHVuZGVybGluZSBpbiBleHRlcm5hbCBuYW1lcy4uLiBOby4gfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgIGVsc2UKKyAgICAgIGVjaG8gQ2hlY2tpbmcgZm9yIHVuZGVybGluZSBpbiBleHRlcm5hbCBuYW1lcy4uLiBZZXMuIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICBmaSA7OworZXNhYworCitlY2hvID4+IGNvbmZpZ3VyZS5sb2cKKworIyBjaGVjayBmb3Igc2l6ZV90CitjYXQgPiAkdGVzdC5jIDw8RU9GCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KK3NpemVfdCBkdW1teSA9IDA7CitFT0YKK2lmIHRyeSAkQ0MgLWMgJENGTEFHUyAkdGVzdC5jOyB0aGVuCisgIGVjaG8gIkNoZWNraW5nIGZvciBzaXplX3QuLi4gWWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworZWxzZQorICBlY2hvICJDaGVja2luZyBmb3Igc2l6ZV90Li4uIE5vLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAjIGZpbmQgYSBzaXplX3QgaW50ZWdlciB0eXBlCisgICMgY2hlY2sgZm9yIGxvbmcgbG9uZworICBjYXQgPiAkdGVzdC5jIDw8IEVPRgorbG9uZyBsb25nIGR1bW15ID0gMDsKK0VPRgorICBpZiB0cnkgJENDIC1jICRDRkxBR1MgJHRlc3QuYzsgdGhlbgorICAgIGVjaG8gIkNoZWNraW5nIGZvciBsb25nIGxvbmcuLi4gWWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgIGNhdCA+ICR0ZXN0LmMgPDxFT0YKKyNpbmNsdWRlIDxzdGRpby5oPgoraW50IG1haW4odm9pZCkgeworICAgIGlmIChzaXplb2Yodm9pZCAqKSA8PSBzaXplb2YoaW50KSkgcHV0cygiaW50Iik7CisgICAgZWxzZSBpZiAoc2l6ZW9mKHZvaWQgKikgPD0gc2l6ZW9mKGxvbmcpKSBwdXRzKCJsb25nIik7CisgICAgZWxzZSBwdXRzKCJ6X2xvbmdsb25nIik7CisgICAgcmV0dXJuIDA7Cit9CitFT0YKKyAgZWxzZQorICAgIGVjaG8gIkNoZWNraW5nIGZvciBsb25nIGxvbmcuLi4gTm8uIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgY2F0ID4gJHRlc3QuYyA8PEVPRgorI2luY2x1ZGUgPHN0ZGlvLmg+CitpbnQgbWFpbih2b2lkKSB7CisgICAgaWYgKHNpemVvZih2b2lkICopIDw9IHNpemVvZihpbnQpKSBwdXRzKCJpbnQiKTsKKyAgICBlbHNlIHB1dHMoImxvbmciKTsKKyAgICByZXR1cm4gMDsKK30KK0VPRgorICBmaQorICBpZiB0cnkgJENDICRDRkxBR1MgLW8gJHRlc3QgJHRlc3QuYzsgdGhlbgorICAgIHNpemV0PWAuLyR0ZXN0YAorICAgIGVjaG8gIkNoZWNraW5nIGZvciBhIHBvaW50ZXItc2l6ZSBpbnRlZ2VyIHR5cGUuLi4iICRzaXpldCIuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgQ0ZMQUdTPSIke0NGTEFHU30gLUROT19TSVpFX1Q9JHtzaXpldH0iCisgICAgU0ZMQUdTPSIke1NGTEFHU30gLUROT19TSVpFX1Q9JHtzaXpldH0iCisgIGVsc2UKKyAgICBlY2hvICJDaGVja2luZyBmb3IgYSBwb2ludGVyLXNpemUgaW50ZWdlciB0eXBlLi4uIG5vdCBmb3VuZC4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgZmkKK2ZpCisKK2VjaG8gPj4gY29uZmlndXJlLmxvZworCisjIGNoZWNrIGZvciBsYXJnZSBmaWxlIHN1cHBvcnQsIGFuZCBpZiBub25lLCBjaGVjayBmb3IgZnNlZWtvKCkKK2NhdCA+ICR0ZXN0LmMgPDxFT0YKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KK29mZjY0X3QgZHVtbXkgPSAwOworRU9GCitpZiB0cnkgJENDIC1jICRDRkxBR1MgLURfTEFSR0VGSUxFNjRfU09VUkNFPTEgJHRlc3QuYzsgdGhlbgorICBDRkxBR1M9IiR7Q0ZMQUdTfSAtRF9MQVJHRUZJTEU2NF9TT1VSQ0U9MSIKKyAgU0ZMQUdTPSIke1NGTEFHU30gLURfTEFSR0VGSUxFNjRfU09VUkNFPTEiCisgIEFMTD0iJHtBTEx9IGFsbDY0IgorICBURVNUPSIke1RFU1R9IHRlc3Q2NCIKKyAgZWNobyAiQ2hlY2tpbmcgZm9yIG9mZjY0X3QuLi4gWWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICBlY2hvICJDaGVja2luZyBmb3IgZnNlZWtvLi4uIFllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKK2Vsc2UKKyAgZWNobyAiQ2hlY2tpbmcgZm9yIG9mZjY0X3QuLi4gTm8uIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgIGVjaG8gPj4gY29uZmlndXJlLmxvZworICBjYXQgPiAkdGVzdC5jIDw8RU9GCisjaW5jbHVkZSA8c3RkaW8uaD4KK2ludCBtYWluKHZvaWQpIHsKKyAgZnNlZWtvKE5VTEwsIDAsIDApOworICByZXR1cm4gMDsKK30KK0VPRgorICBpZiB0cnkgJENDICRDRkxBR1MgLW8gJHRlc3QgJHRlc3QuYzsgdGhlbgorICAgIGVjaG8gIkNoZWNraW5nIGZvciBmc2Vla28uLi4gWWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICBlbHNlCisgICAgQ0ZMQUdTPSIke0NGTEFHU30gLUROT19GU0VFS08iCisgICAgU0ZMQUdTPSIke1NGTEFHU30gLUROT19GU0VFS08iCisgICAgZWNobyAiQ2hlY2tpbmcgZm9yIGZzZWVrby4uLiBOby4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgZmkKK2ZpCisKK2VjaG8gPj4gY29uZmlndXJlLmxvZworCisjIGNoZWNrIGZvciBzdHJlcnJvcigpIGZvciB1c2UgYnkgZ3oqIGZ1bmN0aW9ucworY2F0ID4gJHRlc3QuYyA8PEVPRgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CitpbnQgbWFpbigpIHsgcmV0dXJuIHN0cmxlbihzdHJlcnJvcihlcnJubykpOyB9CitFT0YKK2lmIHRyeSAkQ0MgJENGTEFHUyAtbyAkdGVzdCAkdGVzdC5jOyB0aGVuCisgIGVjaG8gIkNoZWNraW5nIGZvciBzdHJlcnJvci4uLiBZZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCitlbHNlCisgIENGTEFHUz0iJHtDRkxBR1N9IC1ETk9fU1RSRVJST1IiCisgIFNGTEFHUz0iJHtTRkxBR1N9IC1ETk9fU1RSRVJST1IiCisgIGVjaG8gIkNoZWNraW5nIGZvciBzdHJlcnJvci4uLiBOby4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKK2ZpCisKKyMgY29weSBjbGVhbiB6Y29uZi5oIGZvciBzdWJzZXF1ZW50IGVkaXRzCitjcCAtcCAke1NSQ0RJUn16Y29uZi5oLmluIHpjb25mLmgKKworZWNobyA+PiBjb25maWd1cmUubG9nCisKKyMgY2hlY2sgZm9yIHVuaXN0ZC5oIGFuZCBzYXZlIHJlc3VsdCBpbiB6Y29uZi5oCitjYXQgPiAkdGVzdC5jIDw8RU9GCisjaW5jbHVkZSA8dW5pc3RkLmg+CitpbnQgbWFpbigpIHsgcmV0dXJuIDA7IH0KK0VPRgoraWYgdHJ5ICRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmM7IHRoZW4KKyAgc2VkIDwgemNvbmYuaCAiL14jaWZkZWYgSEFWRV9VTklTVERfSC4qIG1heSBiZS9zL2RlZiBIQVZFX1VOSVNURF9IXCguKlwpIG1heSBiZS8gMVwxIHdhcy8iID4gemNvbmYudGVtcC5oCisgIG12IHpjb25mLnRlbXAuaCB6Y29uZi5oCisgIGVjaG8gIkNoZWNraW5nIGZvciB1bmlzdGQuaC4uLiBZZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCitlbHNlCisgIGVjaG8gIkNoZWNraW5nIGZvciB1bmlzdGQuaC4uLiBOby4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKK2ZpCisKK2VjaG8gPj4gY29uZmlndXJlLmxvZworCisjIGNoZWNrIGZvciBzdGRhcmcuaCBhbmQgc2F2ZSByZXN1bHQgaW4gemNvbmYuaAorY2F0ID4gJHRlc3QuYyA8PEVPRgorI2luY2x1ZGUgPHN0ZGFyZy5oPgoraW50IG1haW4oKSB7IHJldHVybiAwOyB9CitFT0YKK2lmIHRyeSAkQ0MgLWMgJENGTEFHUyAkdGVzdC5jOyB0aGVuCisgIHNlZCA8IHpjb25mLmggIi9eI2lmZGVmIEhBVkVfU1REQVJHX0guKiBtYXkgYmUvcy9kZWYgSEFWRV9TVERBUkdfSFwoLipcKSBtYXkgYmUvIDFcMSB3YXMvIiA+IHpjb25mLnRlbXAuaAorICBtdiB6Y29uZi50ZW1wLmggemNvbmYuaAorICBlY2hvICJDaGVja2luZyBmb3Igc3RkYXJnLmguLi4gWWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworZWxzZQorICBlY2hvICJDaGVja2luZyBmb3Igc3RkYXJnLmguLi4gTm8uIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCitmaQorCisjIGlmIHRoZSB6XyBwcmVmaXggd2FzIHJlcXVlc3RlZCwgc2F2ZSB0aGF0IGluIHpjb25mLmgKK2lmIHRlc3QgJHpwcmVmaXggLWVxIDE7IHRoZW4KKyAgc2VkIDwgemNvbmYuaCAiLyNpZmRlZiBaX1BSRUZJWC4qIG1heSBiZS9zL2RlZiBaX1BSRUZJWFwoLipcKSBtYXkgYmUvIDFcMSB3YXMvIiA+IHpjb25mLnRlbXAuaAorICBtdiB6Y29uZi50ZW1wLmggemNvbmYuaAorICBlY2hvID4+IGNvbmZpZ3VyZS5sb2cKKyAgZWNobyAiVXNpbmcgel8gcHJlZml4IG9uIGFsbCBzeW1ib2xzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworZmkKKworIyBpZiAtLXNvbG8gY29tcGlsYXRpb24gd2FzIHJlcXVlc3RlZCwgc2F2ZSB0aGF0IGluIHpjb25mLmggYW5kIHJlbW92ZSBneiBzdHVmZiBmcm9tIG9iamVjdCBsaXN0cworaWYgdGVzdCAkc29sbyAtZXEgMTsgdGhlbgorICBzZWQgJy8jZGVmaW5lIFpDT05GX0gvYVwKKyNkZWZpbmUgWl9TT0xPCisKKycgPCB6Y29uZi5oID4gemNvbmYudGVtcC5oCisgIG12IHpjb25mLnRlbXAuaCB6Y29uZi5oCitPQkpDPSckKE9CSlopJworUElDX09CSkM9JyQoUElDX09CSlopJworZmkKKworIyBpZiBjb2RlIGNvdmVyYWdlIHRlc3Rpbmcgd2FzIHJlcXVlc3RlZCwgdXNlIG9sZGVyIGdjYyBpZiBkZWZpbmVkLCBlLmcuICJnY2MtNC4yIiBvbiBNYWMgT1MgWAoraWYgdGVzdCAkY292ZXIgLWVxIDE7IHRoZW4KKyAgQ0ZMQUdTPSIke0NGTEFHU30gLWZwcm9maWxlLWFyY3MgLWZ0ZXN0LWNvdmVyYWdlIgorICBpZiB0ZXN0IC1uICIkR0NDX0NMQVNTSUMiOyB0aGVuCisgICAgQ0M9JEdDQ19DTEFTU0lDCisgIGZpCitmaQorCitlY2hvID4+IGNvbmZpZ3VyZS5sb2cKKworIyBjb25kdWN0IGEgc2VyaWVzIG9mIHRlc3RzIHRvIHJlc29sdmUgZWlnaHQgcG9zc2libGUgY2FzZXMgb2YgdXNpbmcgInZzIiBvciAicyIgcHJpbnRmIGZ1bmN0aW9ucworIyAodXNpbmcgc3RkYXJnIG9yIG5vdCksIHdpdGggb3Igd2l0aG91dCAibiIgKHByb3Zpbmcgc2l6ZSBvZiBidWZmZXIpLCBhbmQgd2l0aCBvciB3aXRob3V0IGEKKyMgcmV0dXJuIHZhbHVlLiAgVGhlIG1vc3Qgc2VjdXJlIHJlc3VsdCBpcyB2c25wcmludGYoKSB3aXRoIGEgcmV0dXJuIHZhbHVlLiAgc25wcmludGYoKSB3aXRoIGEKKyMgcmV0dXJuIHZhbHVlIGlzIHNlY3VyZSBhcyB3ZWxsLCBidXQgdGhlbiBnenByaW50ZigpIHdpbGwgYmUgbGltaXRlZCB0byAyMCBhcmd1bWVudHMuCitjYXQgPiAkdGVzdC5jIDw8RU9GCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlICJ6Y29uZi5oIgoraW50IG1haW4oKQoreworI2lmbmRlZiBTVERDCisgIGNob2tlIG1lCisjZW5kaWYKKyAgcmV0dXJuIDA7Cit9CitFT0YKK2lmIHRyeSAkQ0MgLWMgJENGTEFHUyAkdGVzdC5jOyB0aGVuCisgIGVjaG8gIkNoZWNraW5nIHdoZXRoZXIgdG8gdXNlIHZzW25dcHJpbnRmKCkgb3Igc1tuXXByaW50ZigpLi4uIHVzaW5nIHZzW25dcHJpbnRmKCkuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisKKyAgZWNobyA+PiBjb25maWd1cmUubG9nCisgIGNhdCA+ICR0ZXN0LmMgPDxFT0YKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgoraW50IG15dGVzdChjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKyAgY2hhciBidWZbMjBdOworICB2YV9saXN0IGFwOworICB2YV9zdGFydChhcCwgZm10KTsKKyAgdnNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZtdCwgYXApOworICB2YV9lbmQoYXApOworICByZXR1cm4gMDsKK30KK2ludCBtYWluKCkKK3sKKyAgcmV0dXJuIChteXRlc3QoIkhlbGxvJWRcbiIsIDEpKTsKK30KK0VPRgorICBpZiB0cnkgJENDICRDRkxBR1MgLW8gJHRlc3QgJHRlc3QuYzsgdGhlbgorICAgIGVjaG8gIkNoZWNraW5nIGZvciB2c25wcmludGYoKSBpbiBzdGRpby5oLi4uIFllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKworICAgIGVjaG8gPj4gY29uZmlndXJlLmxvZworICAgIGNhdCA+JHRlc3QuYyA8PEVPRgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CitpbnQgbXl0ZXN0KGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworICBpbnQgbjsKKyAgY2hhciBidWZbMjBdOworICB2YV9saXN0IGFwOworICB2YV9zdGFydChhcCwgZm10KTsKKyAgbiA9IHZzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBmbXQsIGFwKTsKKyAgdmFfZW5kKGFwKTsKKyAgcmV0dXJuIG47Cit9CitpbnQgbWFpbigpCit7CisgIHJldHVybiAobXl0ZXN0KCJIZWxsbyVkXG4iLCAxKSk7Cit9CitFT0YKKworICAgIGlmIHRyeSAkQ0MgLWMgJENGTEFHUyAkdGVzdC5jOyB0aGVuCisgICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHZzbnByaW50ZigpLi4uIFllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICBlbHNlCisgICAgICBDRkxBR1M9IiRDRkxBR1MgLURIQVNfdnNucHJpbnRmX3ZvaWQiCisgICAgICBTRkxBR1M9IiRTRkxBR1MgLURIQVNfdnNucHJpbnRmX3ZvaWQiCisgICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHZzbnByaW50ZigpLi4uIE5vLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgZWNobyAiICBXQVJOSU5HOiBhcHBhcmVudGx5IHZzbnByaW50ZigpIGRvZXMgbm90IHJldHVybiBhIHZhbHVlLiB6bGliIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICIgIGNhbiBidWlsZCBidXQgd2lsbCBiZSBvcGVuIHRvIHBvc3NpYmxlIHN0cmluZy1mb3JtYXQgc2VjdXJpdHkiIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gIiAgdnVsbmVyYWJpbGl0aWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgIGZpCisgIGVsc2UKKyAgICBDRkxBR1M9IiRDRkxBR1MgLUROT192c25wcmludGYiCisgICAgU0ZMQUdTPSIkU0ZMQUdTIC1ETk9fdnNucHJpbnRmIgorICAgIGVjaG8gIkNoZWNraW5nIGZvciB2c25wcmludGYoKSBpbiBzdGRpby5oLi4uIE5vLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgIGVjaG8gIiAgV0FSTklORzogdnNucHJpbnRmKCkgbm90IGZvdW5kLCBmYWxsaW5nIGJhY2sgdG8gdnNwcmludGYoKS4gemxpYiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgIGVjaG8gIiAgY2FuIGJ1aWxkIGJ1dCB3aWxsIGJlIG9wZW4gdG8gcG9zc2libGUgYnVmZmVyLW92ZXJmbG93IHNlY3VyaXR5IiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgZWNobyAiICB2dWxuZXJhYmlsaXRpZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisKKyAgICBlY2hvID4+IGNvbmZpZ3VyZS5sb2cKKyAgICBjYXQgPiR0ZXN0LmMgPDxFT0YKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgoraW50IG15dGVzdChjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKyAgaW50IG47CisgIGNoYXIgYnVmWzIwXTsKKyAgdmFfbGlzdCBhcDsKKyAgdmFfc3RhcnQoYXAsIGZtdCk7CisgIG4gPSB2c3ByaW50ZihidWYsIGZtdCwgYXApOworICB2YV9lbmQoYXApOworICByZXR1cm4gbjsKK30KK2ludCBtYWluKCkKK3sKKyAgcmV0dXJuIChteXRlc3QoIkhlbGxvJWRcbiIsIDEpKTsKK30KK0VPRgorCisgICAgaWYgdHJ5ICRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmM7IHRoZW4KKyAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2YgdnNwcmludGYoKS4uLiBZZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgZWxzZQorICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1ESEFTX3ZzcHJpbnRmX3ZvaWQiCisgICAgICBTRkxBR1M9IiRTRkxBR1MgLURIQVNfdnNwcmludGZfdm9pZCIKKyAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2YgdnNwcmludGYoKS4uLiBOby4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gIiAgV0FSTklORzogYXBwYXJlbnRseSB2c3ByaW50ZigpIGRvZXMgbm90IHJldHVybiBhIHZhbHVlLiB6bGliIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICIgIGNhbiBidWlsZCBidXQgd2lsbCBiZSBvcGVuIHRvIHBvc3NpYmxlIHN0cmluZy1mb3JtYXQgc2VjdXJpdHkiIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gIiAgdnVsbmVyYWJpbGl0aWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgIGZpCisgIGZpCitlbHNlCisgIGVjaG8gIkNoZWNraW5nIHdoZXRoZXIgdG8gdXNlIHZzW25dcHJpbnRmKCkgb3Igc1tuXXByaW50ZigpLi4uIHVzaW5nIHNbbl1wcmludGYoKS4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKworICBlY2hvID4+IGNvbmZpZ3VyZS5sb2cKKyAgY2F0ID4kdGVzdC5jIDw8RU9GCisjaW5jbHVkZSA8c3RkaW8uaD4KK2ludCBteXRlc3QoKQoreworICBjaGFyIGJ1ZlsyMF07CisgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcyIsICJmb28iKTsKKyAgcmV0dXJuIDA7Cit9CitpbnQgbWFpbigpCit7CisgIHJldHVybiAobXl0ZXN0KCkpOworfQorRU9GCisKKyAgaWYgdHJ5ICRDQyAkQ0ZMQUdTIC1vICR0ZXN0ICR0ZXN0LmM7IHRoZW4KKyAgICBlY2hvICJDaGVja2luZyBmb3Igc25wcmludGYoKSBpbiBzdGRpby5oLi4uIFllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKworICAgIGVjaG8gPj4gY29uZmlndXJlLmxvZworICAgIGNhdCA+JHRlc3QuYyA8PEVPRgorI2luY2x1ZGUgPHN0ZGlvLmg+CitpbnQgbXl0ZXN0KCkKK3sKKyAgY2hhciBidWZbMjBdOworICByZXR1cm4gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzIiwgImZvbyIpOworfQoraW50IG1haW4oKQoreworICByZXR1cm4gKG15dGVzdCgpKTsKK30KK0VPRgorCisgICAgaWYgdHJ5ICRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmM7IHRoZW4KKyAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2Ygc25wcmludGYoKS4uLiBZZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgZWxzZQorICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1ESEFTX3NucHJpbnRmX3ZvaWQiCisgICAgICBTRkxBR1M9IiRTRkxBR1MgLURIQVNfc25wcmludGZfdm9pZCIKKyAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2Ygc25wcmludGYoKS4uLiBOby4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gIiAgV0FSTklORzogYXBwYXJlbnRseSBzbnByaW50ZigpIGRvZXMgbm90IHJldHVybiBhIHZhbHVlLiB6bGliIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICIgIGNhbiBidWlsZCBidXQgd2lsbCBiZSBvcGVuIHRvIHBvc3NpYmxlIHN0cmluZy1mb3JtYXQgc2VjdXJpdHkiIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gIiAgdnVsbmVyYWJpbGl0aWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgIGZpCisgIGVsc2UKKyAgICBDRkxBR1M9IiRDRkxBR1MgLUROT19zbnByaW50ZiIKKyAgICBTRkxBR1M9IiRTRkxBR1MgLUROT19zbnByaW50ZiIKKyAgICBlY2hvICJDaGVja2luZyBmb3Igc25wcmludGYoKSBpbiBzdGRpby5oLi4uIE5vLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgIGVjaG8gIiAgV0FSTklORzogc25wcmludGYoKSBub3QgZm91bmQsIGZhbGxpbmcgYmFjayB0byBzcHJpbnRmKCkuIHpsaWIiIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICBlY2hvICIgIGNhbiBidWlsZCBidXQgd2lsbCBiZSBvcGVuIHRvIHBvc3NpYmxlIGJ1ZmZlci1vdmVyZmxvdyBzZWN1cml0eSIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgIGVjaG8gIiAgdnVsbmVyYWJpbGl0aWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworCisgICAgZWNobyA+PiBjb25maWd1cmUubG9nCisgICAgY2F0ID4kdGVzdC5jIDw8RU9GCisjaW5jbHVkZSA8c3RkaW8uaD4KK2ludCBteXRlc3QoKQoreworICBjaGFyIGJ1ZlsyMF07CisgIHJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzIiwgImZvbyIpOworfQoraW50IG1haW4oKQoreworICByZXR1cm4gKG15dGVzdCgpKTsKK30KK0VPRgorCisgICAgaWYgdHJ5ICRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmM7IHRoZW4KKyAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2Ygc3ByaW50ZigpLi4uIFllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICBlbHNlCisgICAgICBDRkxBR1M9IiRDRkxBR1MgLURIQVNfc3ByaW50Zl92b2lkIgorICAgICAgU0ZMQUdTPSIkU0ZMQUdTIC1ESEFTX3NwcmludGZfdm9pZCIKKyAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2Ygc3ByaW50ZigpLi4uIE5vLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgZWNobyAiICBXQVJOSU5HOiBhcHBhcmVudGx5IHNwcmludGYoKSBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZS4gemxpYiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgZWNobyAiICBjYW4gYnVpbGQgYnV0IHdpbGwgYmUgb3BlbiB0byBwb3NzaWJsZSBzdHJpbmctZm9ybWF0IHNlY3VyaXR5IiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICIgIHZ1bG5lcmFiaWxpdGllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICBmaQorICBmaQorZmkKKworIyBzZWUgaWYgd2UgY2FuIGhpZGUgemxpYiBpbnRlcm5hbCBzeW1ib2xzIHRoYXQgYXJlIGxpbmtlZCBiZXR3ZWVuIHNlcGFyYXRlIHNvdXJjZSBmaWxlcworaWYgdGVzdCAiJGdjYyIgLWVxIDE7IHRoZW4KKyAgZWNobyA+PiBjb25maWd1cmUubG9nCisgIGNhdCA+ICR0ZXN0LmMgPDxFT0YKKyNkZWZpbmUgWkxJQl9JTlRFUk5BTCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKQoraW50IFpMSUJfSU5URVJOQUwgZm9vOworaW50IG1haW4oKQoreworICByZXR1cm4gMDsKK30KK0VPRgorICBpZiB0cnlib3RoICRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmM7IHRoZW4KKyAgICBDRkxBR1M9IiRDRkxBR1MgLURIQVZFX0hJRERFTiIKKyAgICBTRkxBR1M9IiRTRkxBR1MgLURIQVZFX0hJRERFTiIKKyAgICBlY2hvICJDaGVja2luZyBmb3IgYXR0cmlidXRlKHZpc2liaWxpdHkpIHN1cHBvcnQuLi4gWWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICBlbHNlCisgICAgZWNobyAiQ2hlY2tpbmcgZm9yIGF0dHJpYnV0ZSh2aXNpYmlsaXR5KSBzdXBwb3J0Li4uIE5vLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICBmaQorZmkKKworIyBzaG93IHRoZSByZXN1bHRzIGluIHRoZSBsb2cKK2VjaG8gPj4gY29uZmlndXJlLmxvZworZWNobyBBTEwgPSAkQUxMID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gQVIgPSAkQVIgPj4gY29uZmlndXJlLmxvZworZWNobyBBUkZMQUdTID0gJEFSRkxBR1MgPj4gY29uZmlndXJlLmxvZworZWNobyBDQyA9ICRDQyA+PiBjb25maWd1cmUubG9nCitlY2hvIENGTEFHUyA9ICRDRkxBR1MgPj4gY29uZmlndXJlLmxvZworZWNobyBDUFAgPSAkQ1BQID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gRVhFID0gJEVYRSA+PiBjb25maWd1cmUubG9nCitlY2hvIExEQ09ORklHID0gJExEQ09ORklHID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gTERGTEFHUyA9ICRMREZMQUdTID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gTERTSEFSRUQgPSAkTERTSEFSRUQgPj4gY29uZmlndXJlLmxvZworZWNobyBMRFNIQVJFRExJQkMgPSAkTERTSEFSRURMSUJDID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gT0JKQyA9ICRPQkpDID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gUElDX09CSkMgPSAkUElDX09CSkMgPj4gY29uZmlndXJlLmxvZworZWNobyBSQU5MSUIgPSAkUkFOTElCID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gU0ZMQUdTID0gJFNGTEFHUyA+PiBjb25maWd1cmUubG9nCitlY2hvIFNIQVJFRExJQiA9ICRTSEFSRURMSUIgPj4gY29uZmlndXJlLmxvZworZWNobyBTSEFSRURMSUJNID0gJFNIQVJFRExJQk0gPj4gY29uZmlndXJlLmxvZworZWNobyBTSEFSRURMSUJWID0gJFNIQVJFRExJQlYgPj4gY29uZmlndXJlLmxvZworZWNobyBTVEFUSUNMSUIgPSAkU1RBVElDTElCID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gVEVTVCA9ICRURVNUID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gVkVSID0gJFZFUiA+PiBjb25maWd1cmUubG9nCitlY2hvIFNSQ0RJUiA9ICRTUkNESVIgPj4gY29uZmlndXJlLmxvZworZWNobyBleGVjX3ByZWZpeCA9ICRleGVjX3ByZWZpeCA+PiBjb25maWd1cmUubG9nCitlY2hvIGluY2x1ZGVkaXIgPSAkaW5jbHVkZWRpciA+PiBjb25maWd1cmUubG9nCitlY2hvIGxpYmRpciA9ICRsaWJkaXIgPj4gY29uZmlndXJlLmxvZworZWNobyBtYW5kaXIgPSAkbWFuZGlyID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gcHJlZml4ID0gJHByZWZpeCA+PiBjb25maWd1cmUubG9nCitlY2hvIHNoYXJlZGxpYmRpciA9ICRzaGFyZWRsaWJkaXIgPj4gY29uZmlndXJlLmxvZworZWNobyB1bmFtZSA9ICR1bmFtZSA+PiBjb25maWd1cmUubG9nCisKKyMgdWRwYXRlIE1ha2VmaWxlIHdpdGggdGhlIGNvbmZpZ3VyZSByZXN1bHRzCitzZWQgPCAke1NSQ0RJUn1NYWtlZmlsZS5pbiAiCisvXkNDICo9L3MjPS4qIz0kQ0MjCisvXkNGTEFHUyAqPS9zIz0uKiM9JENGTEFHUyMKKy9eU0ZMQUdTICo9L3MjPS4qIz0kU0ZMQUdTIworL15MREZMQUdTICo9L3MjPS4qIz0kTERGTEFHUyMKKy9eTERTSEFSRUQgKj0vcyM9LiojPSRMRFNIQVJFRCMKKy9eQ1BQICo9L3MjPS4qIz0kQ1BQIworL15TVEFUSUNMSUIgKj0vcyM9LiojPSRTVEFUSUNMSUIjCisvXlNIQVJFRExJQiAqPS9zIz0uKiM9JFNIQVJFRExJQiMKKy9eU0hBUkVETElCViAqPS9zIz0uKiM9JFNIQVJFRExJQlYjCisvXlNIQVJFRExJQk0gKj0vcyM9LiojPSRTSEFSRURMSUJNIworL15BUiAqPS9zIz0uKiM9JEFSIworL15BUkZMQUdTICo9L3MjPS4qIz0kQVJGTEFHUyMKKy9eUkFOTElCICo9L3MjPS4qIz0kUkFOTElCIworL15MRENPTkZJRyAqPS9zIz0uKiM9JExEQ09ORklHIworL15MRFNIQVJFRExJQkMgKj0vcyM9LiojPSRMRFNIQVJFRExJQkMjCisvXkVYRSAqPS9zIz0uKiM9JEVYRSMKKy9eU1JDRElSICo9L3MjPS4qIz0kU1JDRElSIworL15aSU5DICo9L3MjPS4qIz0kWklOQyMKKy9eWklOQ09VVCAqPS9zIz0uKiM9JFpJTkNPVVQjCisvXnByZWZpeCAqPS9zIz0uKiM9JHByZWZpeCMKKy9eZXhlY19wcmVmaXggKj0vcyM9LiojPSRleGVjX3ByZWZpeCMKKy9ebGliZGlyICo9L3MjPS4qIz0kbGliZGlyIworL15zaGFyZWRsaWJkaXIgKj0vcyM9LiojPSRzaGFyZWRsaWJkaXIjCisvXmluY2x1ZGVkaXIgKj0vcyM9LiojPSRpbmNsdWRlZGlyIworL15tYW5kaXIgKj0vcyM9LiojPSRtYW5kaXIjCisvXk9CSkMgKj0vcyM9LiojPSAkT0JKQyMKKy9eUElDX09CSkMgKj0vcyM9LiojPSAkUElDX09CSkMjCisvXmFsbDogKi9zIzouKiM6ICRBTEwjCisvXnRlc3Q6ICovcyM6LiojOiAkVEVTVCMKKyIgPiBNYWtlZmlsZQorCisjIGNyZWF0ZSB6bGliLnBjIHdpdGggdGhlIGNvbmZpZ3VyZSByZXN1bHRzCitzZWQgPCAke1NSQ0RJUn16bGliLnBjLmluICIKKy9eQ0MgKj0vcyM9LiojPSRDQyMKKy9eQ0ZMQUdTICo9L3MjPS4qIz0kQ0ZMQUdTIworL15DUFAgKj0vcyM9LiojPSRDUFAjCisvXkxEU0hBUkVEICo9L3MjPS4qIz0kTERTSEFSRUQjCisvXlNUQVRJQ0xJQiAqPS9zIz0uKiM9JFNUQVRJQ0xJQiMKKy9eU0hBUkVETElCICo9L3MjPS4qIz0kU0hBUkVETElCIworL15TSEFSRURMSUJWICo9L3MjPS4qIz0kU0hBUkVETElCViMKKy9eU0hBUkVETElCTSAqPS9zIz0uKiM9JFNIQVJFRExJQk0jCisvXkFSICo9L3MjPS4qIz0kQVIjCisvXkFSRkxBR1MgKj0vcyM9LiojPSRBUkZMQUdTIworL15SQU5MSUIgKj0vcyM9LiojPSRSQU5MSUIjCisvXkVYRSAqPS9zIz0uKiM9JEVYRSMKKy9ecHJlZml4ICo9L3MjPS4qIz0kcHJlZml4IworL15leGVjX3ByZWZpeCAqPS9zIz0uKiM9JGV4ZWNfcHJlZml4IworL15saWJkaXIgKj0vcyM9LiojPSRsaWJkaXIjCisvXnNoYXJlZGxpYmRpciAqPS9zIz0uKiM9JHNoYXJlZGxpYmRpciMKKy9eaW5jbHVkZWRpciAqPS9zIz0uKiM9JGluY2x1ZGVkaXIjCisvXm1hbmRpciAqPS9zIz0uKiM9JG1hbmRpciMKKy9eTERGTEFHUyAqPS9zIz0uKiM9JExERkxBR1MjCisiIHwgc2VkIC1lICIKK3MvXEBWRVJTSU9OXEAvJFZFUi9nOworIiA+IHpsaWIucGMKKworIyBkb25lCitsZWF2ZSAwCmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi9SRUFETUUuY29udHJpYiBiL3NyYy9jb250cmliL1JFQURNRS5jb250cmliCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNWU0MzUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29udHJpYi9SRUFETUUuY29udHJpYgpAQCAtMCwwICsxLDU3IEBACitBbGwgZmlsZXMgdW5kZXIgdGhpcyBjb250cmliIGRpcmVjdG9yeSBhcmUgVU5TVVBQT1JURUQuIFRoZXJlIHdlcmUKK3Byb3ZpZGVkIGJ5IHVzZXJzIG9mIHpsaWIgYW5kIHdlcmUgbm90IHRlc3RlZCBieSB0aGUgYXV0aG9ycyBvZiB6bGliLgorVXNlIGF0IHlvdXIgb3duIHJpc2suIFBsZWFzZSBjb250YWN0IHRoZSBhdXRob3JzIG9mIHRoZSBjb250cmlidXRpb25zCitmb3IgaGVscCBhYm91dCB0aGVzZSwgbm90IHRoZSB6bGliIGF1dGhvcnMuIFRoYW5rcy4KKworCithZGEvICAgICAgICBieSBEbWl0cml5IEFuaXNpbWtvdiA8YW5pc2lta292QHlhaG9vLmNvbT4KKyAgICAgICAgU3VwcG9ydCBmb3IgQWRhCisgICAgICAgIFNlZSBodHRwOi8vemxpYi1hZGEuc291cmNlZm9yZ2UubmV0LworCitibGFzdC8gICAgICBieSBNYXJrIEFkbGVyIDxtYWRsZXJAYWx1bW5pLmNhbHRlY2guZWR1PgorICAgICAgICBEZWNvbXByZXNzb3IgZm9yIG91dHB1dCBvZiBQS1dhcmUgRGF0YSBDb21wcmVzc2lvbiBMaWJyYXJ5IChEQ0wpCisKK2RlbHBoaS8gICAgIGJ5IENvc21pbiBUcnV0YSA8Y29zbWludEBjcy51YmJjbHVqLnJvPgorICAgICAgICBTdXBwb3J0IGZvciBEZWxwaGkgYW5kIEMrKyBCdWlsZGVyCisKK2RvdHpsaWIvICAgIGJ5IEhlbnJpayBSYXZuIDxoZW5yaWtAcmF2bi5jb20+CisgICAgICAgIFN1cHBvcnQgZm9yIE1pY3Jvc29mdCAuTmV0IGFuZCBWaXN1YWwgQysrIC5OZXQKKworZ2NjX2d2bWF0NjQvYnkgR2lsbGVzIFZvbGxhbnQgPGluZm9Ad2luaW1hZ2UuY29tPgorICAgICAgICBHQ0MgVmVyc2lvbiBvZiB4ODYgNjQtYml0IChBTUQ2NCBhbmQgSW50ZWwgRU02NHQpIGNvZGUgZm9yIHg2NAorICAgICAgICBhc3NlbWJsZXIgdG8gcmVwbGFjZSBsb25nZXN0X21hdGNoKCkgYW5kIGluZmxhdGVfZmFzdCgpCisKK2luZmJhY2s5LyAgIGJ5IE1hcmsgQWRsZXIgPG1hZGxlckBhbHVtbmkuY2FsdGVjaC5lZHU+CisgICAgICAgIFVuc3VwcG9ydGVkIGRpZmZzIHRvIGluZmJhY2sgdG8gZGVjb2RlIHRoZSBkZWZsYXRlNjQgZm9ybWF0CisKK2lvc3RyZWFtLyAgIGJ5IEtldmluIFJ1bGFuZCA8a2V2aW5Acm9kaW4ud3VzdGwuZWR1PgorICAgICAgICBBIEMrKyBJL08gc3RyZWFtcyBpbnRlcmZhY2UgdG8gdGhlIHpsaWIgZ3oqIGZ1bmN0aW9ucworCitpb3N0cmVhbTIvICBieSBUeWdlIEzDuHZzZXQgPFR5Z2UuTG92c2V0QGNtci5ubz4KKyAgICAgICAgQW5vdGhlciBDKysgSS9PIHN0cmVhbXMgaW50ZXJmYWNlCisKK2lvc3RyZWFtMy8gIGJ5IEx1ZHdpZyBTY2h3YXJkdCA8c2Nod2FyZHRAc3VuLmFjLnphPgorICAgICAgICAgICAgYW5kIEtldmluIFJ1bGFuZCA8a2V2aW5Acm9kaW4ud3VzdGwuZWR1PgorICAgICAgICBZZXQgYW5vdGhlciBDKysgSS9PIHN0cmVhbXMgaW50ZXJmYWNlCisKK21pbml6aXAvICAgIGJ5IEdpbGxlcyBWb2xsYW50IDxpbmZvQHdpbmltYWdlLmNvbT4KKyAgICAgICAgTWluaSB6aXAgYW5kIHVuemlwIGJhc2VkIG9uIHpsaWIKKyAgICAgICAgSW5jbHVkZXMgWmlwNjQgc3VwcG9ydCBieSBNYXRoaWFzIFN2ZW5zc29uIDxtYXRoaWFzQHJlc3VsdDQyLmNvbT4KKyAgICAgICAgU2VlIGh0dHA6Ly93d3cud2luaW1hZ2UuY29tL3pMaWJEbGwvbWluaXppcC5odG1sCisKK3Bhc2NhbC8gICAgIGJ5IEJvYiBEZWxsYWNhIDxib2JkbEB4dHJhLmNvLm56PiBldCBhbC4KKyAgICAgICAgU3VwcG9ydCBmb3IgUGFzY2FsCisKK3B1ZmYvICAgICAgIGJ5IE1hcmsgQWRsZXIgPG1hZGxlckBhbHVtbmkuY2FsdGVjaC5lZHU+CisgICAgICAgIFNtYWxsLCBsb3cgbWVtb3J5IHVzYWdlIGluZmxhdGUuICBBbHNvIHNlcnZlcyB0byBwcm92aWRlIGFuCisgICAgICAgIHVuYW1iaWd1b3VzIGRlc2NyaXB0aW9uIG9mIHRoZSBkZWZsYXRlIGZvcm1hdC4KKwordGVzdHpsaWIvICAgYnkgR2lsbGVzIFZvbGxhbnQgPGluZm9Ad2luaW1hZ2UuY29tPgorICAgICAgICBFeGFtcGxlIG9mIHRoZSB1c2Ugb2YgemxpYgorCit1bnRnei8gICAgICBieSBQZWRybyBBLiBBcmFuZGEgR3V0aWVycmV6IDxwYWFnQHRpZC5lcz4KKyAgICAgICAgQSB2ZXJ5IHNpbXBsZSB0YXIuZ3ogZmlsZSBleHRyYWN0b3IgdXNpbmcgemxpYgorCit2c3R1ZGlvLyAgICBieSBHaWxsZXMgVm9sbGFudCA8aW5mb0B3aW5pbWFnZS5jb20+CisgICAgICAgIEJ1aWxkaW5nIGEgbWluaXppcC1lbmhhbmNlZCB6bGliIHdpdGggTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8KKyAgICAgICAgSW5jbHVkZXMgdmMxMSBmcm9tIGtyZXV6ZXJrcmllZyBhbmQgdmMxMiBmcm9tIGRhdmlzcHVoCmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi9hZGEvYnVmZmVyX2RlbW8uYWRiIGIvc3JjL2NvbnRyaWIvYWRhL2J1ZmZlcl9kZW1vLmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmI4NjM4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbnRyaWIvYWRhL2J1ZmZlcl9kZW1vLmFkYgpAQCAtMCwwICsxLDEwNiBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIFpMaWIgZm9yIEFkYSB0aGljayBiaW5kaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gIENvcHlyaWdodCAoQykgMjAwMi0yMDA0IERtaXRyaXkgQW5pc2lta292ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gIE9wZW4gc291cmNlIGxpY2Vuc2UgaW5mb3JtYXRpb24gaXMgaW4gdGhlIHpsaWIuYWRzIGZpbGUuICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0KKy0tICAkSWQ6IGJ1ZmZlcl9kZW1vLmFkYix2IDEuMyAyMDA0LzA5LzA2IDA2OjU1OjM1IHZhZ3VsIEV4cCAkCisKKy0tICBUaGlzIGRlbW8gcHJvZ3JhbSBwcm92aWRlZCBieSBEciBTdGV2ZSBTYW5nd2luZSA8c2pzQGVzc2V4LmFjLnVrPgorLS0KKy0tICBEZW1vbnN0cmF0aW9uIG9mIGEgcHJvYmxlbSB3aXRoIFpsaWItQWRhIChhbHJlYWR5IGZpeGVkKSB3aGVuIGEgYnVmZmVyCistLSAgb2YgZXhhY3RseSB0aGUgY29ycmVjdCBzaXplIGlzIHVzZWQgZm9yIGRlY29tcHJlc3NlZCBkYXRhLCBhbmQgdGhlIGxhc3QKKy0tICBmZXcgYnl0ZXMgcGFzc2VkIGluIHRvIFpsaWIgYXJlIGNoZWNrc3VtIGJ5dGVzLgorCistLSAgVGhpcyBwcm9ncmFtIGNvbXByZXNzZXMgYSBzdHJpbmcgb2YgdGV4dCwgYW5kIHRoZW4gZGVjb21wcmVzc2VzIHRoZQorLS0gIGNvbXByZXNzZWQgdGV4dCBpbnRvIGEgYnVmZmVyIG9mIHRoZSBzYW1lIHNpemUgYXMgdGhlIG9yaWdpbmFsIHRleHQuCisKK3dpdGggQWRhLlN0cmVhbXM7IHVzZSBBZGEuU3RyZWFtczsKK3dpdGggQWRhLlRleHRfSU87CisKK3dpdGggWkxpYjsgdXNlIFpMaWI7CisKK3Byb2NlZHVyZSBCdWZmZXJfRGVtbyBpcworICAgRU9MICA6IENoYXJhY3RlciByZW5hbWVzIEFTQ0lJLkxGOworICAgVGV4dCA6IGNvbnN0YW50IFN0cmluZworICAgICA6PSAiRm91ciBzY29yZSBhbmQgc2V2ZW4geWVhcnMgYWdvIG91ciBmYXRoZXJzIGJyb3VnaHQgZm9ydGgsIiAmIEVPTCAmCisgICAgICAgICJ1cG9uIHRoaXMgY29udGluZW50LCBhIG5ldyBuYXRpb24sIGNvbmNlaXZlZCBpbiBsaWJlcnR5LCIgJiBFT0wgJgorICAgICAgICAiYW5kIGRlZGljYXRlZCB0byB0aGUgcHJvcG9zaXRpb24gdGhhdCBgYWxsIG1lbiBhcmUgY3JlYXRlZCBlcXVhbCcuIjsKKworICAgU291cmNlIDogU3RyZWFtX0VsZW1lbnRfQXJyYXkgKDEgLi4gVGV4dCdMZW5ndGgpOworICAgZm9yIFNvdXJjZSdBZGRyZXNzIHVzZSBUZXh0J0FkZHJlc3M7CisKK2JlZ2luCisgICBBZGEuVGV4dF9JTy5QdXQgKFRleHQpOworICAgQWRhLlRleHRfSU8uTmV3X0xpbmU7CisgICBBZGEuVGV4dF9JTy5QdXRfTGluZQorICAgICAoIlVuY29tcHJlc3NlZCBzaXplIDogIiAmIFBvc2l0aXZlJ0ltYWdlIChUZXh0J0xlbmd0aCkgJiAiIGJ5dGVzIik7CisKKyAgIGRlY2xhcmUKKyAgICAgIENvbXByZXNzZWRfRGF0YSA6IFN0cmVhbV9FbGVtZW50X0FycmF5ICgxIC4uIFRleHQnTGVuZ3RoKTsKKyAgICAgIEwgICAgICAgICAgICAgICA6IFN0cmVhbV9FbGVtZW50X09mZnNldDsKKyAgIGJlZ2luCisgICAgICBDb21wcmVzcyA6IGRlY2xhcmUKKyAgICAgICAgIENvbXByZXNzb3IgOiBGaWx0ZXJfVHlwZTsKKyAgICAgICAgIEkgOiBTdHJlYW1fRWxlbWVudF9PZmZzZXQ7CisgICAgICBiZWdpbgorICAgICAgICAgRGVmbGF0ZV9Jbml0IChDb21wcmVzc29yKTsKKworICAgICAgICAgLS0gIENvbXByZXNzIHRoZSB3aG9sZSBvZiBUIGF0IG9uY2UuCisKKyAgICAgICAgIFRyYW5zbGF0ZSAoQ29tcHJlc3NvciwgU291cmNlLCBJLCBDb21wcmVzc2VkX0RhdGEsIEwsIEZpbmlzaCk7CisgICAgICAgICBwcmFnbWEgQXNzZXJ0IChJID0gU291cmNlJ0xhc3QpOworCisgICAgICAgICBDbG9zZSAoQ29tcHJlc3Nvcik7CisKKyAgICAgICAgIEFkYS5UZXh0X0lPLlB1dF9MaW5lCisgICAgICAgICAgICgiQ29tcHJlc3NlZCBzaXplIDogICAiCisgICAgICAgICAgICAmIFN0cmVhbV9FbGVtZW50X09mZnNldCdJbWFnZSAoTCkgJiAiIGJ5dGVzIik7CisgICAgICBlbmQgQ29tcHJlc3M7CisKKyAgICAgIC0tICBOb3cgd2UgZGVjb21wcmVzcyB0aGUgZGF0YSwgcGFzc2luZyBzaG9ydCBibG9ja3Mgb2YgZGF0YSB0byBabGliCisgICAgICAtLSAgKGJlY2F1c2UgdGhpcyBkZW1vbnN0cmF0ZXMgdGhlIHByb2JsZW0gLSB0aGUgbGFzdCBibG9jayBwYXNzZWQgd2lsbAorICAgICAgLS0gIGNvbnRhaW4gY2hlY2tzdW0gaW5mb3JtYXRpb24gYW5kIHRoZXJlIHdpbGwgYmUgbm8gb3V0cHV0LCBvbmx5IGEKKyAgICAgIC0tICBjaGVjayBpbnNpZGUgWmxpYiB0aGF0IHRoZSBjaGVja3N1bSBpcyBjb3JyZWN0KS4KKworICAgICAgRGVjb21wcmVzcyA6IGRlY2xhcmUKKyAgICAgICAgIERlY29tcHJlc3NvciA6IEZpbHRlcl9UeXBlOworCisgICAgICAgICBVbmNvbXByZXNzZWRfRGF0YSA6IFN0cmVhbV9FbGVtZW50X0FycmF5ICgxIC4uIFRleHQnTGVuZ3RoKTsKKworICAgICAgICAgQmxvY2tfU2l6ZSA6IGNvbnN0YW50IDo9IDQ7CisgICAgICAgICAtLSAgVGhpcyBtYWtlcyBzdXJlIHRoYXQgdGhlIGxhc3QgYmxvY2sgY29udGFpbnMKKyAgICAgICAgIC0tICBvbmx5IEFkbGVyIGNoZWNrc3VtIGRhdGEuCisKKyAgICAgICAgIFAgOiBTdHJlYW1fRWxlbWVudF9PZmZzZXQgOj0gQ29tcHJlc3NlZF9EYXRhJ0ZpcnN0IC0gMTsKKyAgICAgICAgIE8gOiBTdHJlYW1fRWxlbWVudF9PZmZzZXQ7CisgICAgICBiZWdpbgorICAgICAgICAgSW5mbGF0ZV9Jbml0IChEZWNvbXByZXNzb3IpOworCisgICAgICAgICBsb29wCisgICAgICAgICAgICBUcmFuc2xhdGUKKyAgICAgICAgICAgICAgKERlY29tcHJlc3NvciwKKyAgICAgICAgICAgICAgIENvbXByZXNzZWRfRGF0YQorICAgICAgICAgICAgICAgICAoUCArIDEgLi4gU3RyZWFtX0VsZW1lbnRfT2Zmc2V0J01pbiAoUCArIEJsb2NrX1NpemUsIEwpKSwKKyAgICAgICAgICAgICAgIFAsCisgICAgICAgICAgICAgICBVbmNvbXByZXNzZWRfRGF0YQorICAgICAgICAgICAgICAgICAoVG90YWxfT3V0IChEZWNvbXByZXNzb3IpICsgMSAuLiBVbmNvbXByZXNzZWRfRGF0YSdMYXN0KSwKKyAgICAgICAgICAgICAgIE8sCisgICAgICAgICAgICAgICBOb19GbHVzaCk7CisKKyAgICAgICAgICAgICAgIEFkYS5UZXh0X0lPLlB1dF9MaW5lCisgICAgICAgICAgICAgICAgICgiVG90YWwgaW4gOiAiICYgQ291bnQnSW1hZ2UgKFRvdGFsX0luIChEZWNvbXByZXNzb3IpKSAmCisgICAgICAgICAgICAgICAgICAiLCBvdXQgOiAiICYgQ291bnQnSW1hZ2UgKFRvdGFsX091dCAoRGVjb21wcmVzc29yKSkpOworCisgICAgICAgICAgICAgICBleGl0IHdoZW4gUCA9IEw7CisgICAgICAgICBlbmQgbG9vcDsKKworICAgICAgICAgQWRhLlRleHRfSU8uTmV3X0xpbmU7CisgICAgICAgICBBZGEuVGV4dF9JTy5QdXRfTGluZQorICAgICAgICAgICAoIkRlY29tcHJlc3NlZCB0ZXh0IG1hdGNoZXMgb3JpZ2luYWwgdGV4dCA6ICIKKyAgICAgICAgICAgICAmIEJvb2xlYW4nSW1hZ2UgKFVuY29tcHJlc3NlZF9EYXRhID0gU291cmNlKSk7CisgICAgICBlbmQgRGVjb21wcmVzczsKKyAgIGVuZDsKK2VuZCBCdWZmZXJfRGVtbzsKZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL2FkYS9tdGVzdC5hZGIgYi9zcmMvY29udHJpYi9hZGEvbXRlc3QuYWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0ZGZkMDgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29udHJpYi9hZGEvbXRlc3QuYWRiCkBAIC0wLDAgKzEsMTU2IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgWkxpYiBmb3IgQWRhIHRoaWNrIGJpbmRpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMgRG1pdHJpeSBBbmlzaW1rb3YgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgT3BlbiBzb3VyY2UgbGljZW5zZSBpbmZvcm1hdGlvbiBpcyBpbiB0aGUgemxpYi5hZHMgZmlsZS4gIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQ29udGludW91cyB0ZXN0IGZvciBaTGliIG11bHRpdGhyZWFkaW5nLiBJZiB0aGUgdGVzdCB3b3VsZCBmYWlsCistLSAgd2Ugc2hvdWxkIHByb3ZpZGUgdGhyZWFkIHNhZmUgYWxsb2NhdGlvbiByb3V0aW5lcyBmb3IgdGhlIFpfU3RyZWFtLgorLS0KKy0tICAkSWQ6IG10ZXN0LmFkYix2IDEuNCAyMDA0LzA3LzIzIDA3OjQ5OjU0IHZhZ3VsIEV4cCAkCisKK3dpdGggWkxpYjsKK3dpdGggQWRhLlN0cmVhbXM7Cit3aXRoIEFkYS5OdW1lcmljcy5EaXNjcmV0ZV9SYW5kb207Cit3aXRoIEFkYS5UZXh0X0lPOword2l0aCBBZGEuRXhjZXB0aW9uczsKK3dpdGggQWRhLlRhc2tfSWRlbnRpZmljYXRpb247CisKK3Byb2NlZHVyZSBNVGVzdCBpcworICAgdXNlIEFkYS5TdHJlYW1zOworICAgdXNlIFpMaWI7CisKKyAgIFN0b3AgOiBCb29sZWFuIDo9IEZhbHNlOworCisgICBwcmFnbWEgQXRvbWljIChTdG9wKTsKKworICAgc3VidHlwZSBWaXNpYmxlX1N5bWJvbHMgaXMgU3RyZWFtX0VsZW1lbnQgcmFuZ2UgMTYjMjAjIC4uIDE2IzdFIzsKKworICAgcGFja2FnZSBSYW5kb21fRWxlbWVudHMgaXMKKyAgICAgIG5ldyBBZGEuTnVtZXJpY3MuRGlzY3JldGVfUmFuZG9tIChWaXNpYmxlX1N5bWJvbHMpOworCisgICB0YXNrIHR5cGUgVGVzdF9UYXNrOworCisgICB0YXNrIGJvZHkgVGVzdF9UYXNrIGlzCisgICAgICBCdWZmZXIgOiBTdHJlYW1fRWxlbWVudF9BcnJheSAoMSAuLiAxMDBfMDAwKTsKKyAgICAgIEdlbiA6IFJhbmRvbV9FbGVtZW50cy5HZW5lcmF0b3I7CisKKyAgICAgIEJ1ZmZlcl9GaXJzdCAgOiBTdHJlYW1fRWxlbWVudF9PZmZzZXQ7CisgICAgICBDb21wYXJlX0ZpcnN0IDogU3RyZWFtX0VsZW1lbnRfT2Zmc2V0OworCisgICAgICBEZWZsYXRlIDogRmlsdGVyX1R5cGU7CisgICAgICBJbmZsYXRlIDogRmlsdGVyX1R5cGU7CisKKyAgICAgIHByb2NlZHVyZSBGdXJ0aGVyIChJdGVtIDogaW4gU3RyZWFtX0VsZW1lbnRfQXJyYXkpOworCisgICAgICBwcm9jZWR1cmUgUmVhZF9CdWZmZXIKKyAgICAgICAgKEl0ZW0gOiBvdXQgQWRhLlN0cmVhbXMuU3RyZWFtX0VsZW1lbnRfQXJyYXk7CisgICAgICAgICBMYXN0IDogb3V0IEFkYS5TdHJlYW1zLlN0cmVhbV9FbGVtZW50X09mZnNldCk7CisKKyAgICAgIC0tLS0tLS0tLS0tLS0KKyAgICAgIC0tIEZ1cnRoZXIgLS0KKyAgICAgIC0tLS0tLS0tLS0tLS0KKworICAgICAgcHJvY2VkdXJlIEZ1cnRoZXIgKEl0ZW0gOiBpbiBTdHJlYW1fRWxlbWVudF9BcnJheSkgaXMKKworICAgICAgICAgcHJvY2VkdXJlIENvbXBhcmUgKEl0ZW0gOiBpbiBTdHJlYW1fRWxlbWVudF9BcnJheSk7CisKKyAgICAgICAgIC0tLS0tLS0tLS0tLS0KKyAgICAgICAgIC0tIENvbXBhcmUgLS0KKyAgICAgICAgIC0tLS0tLS0tLS0tLS0KKworICAgICAgICAgcHJvY2VkdXJlIENvbXBhcmUgKEl0ZW0gOiBpbiBTdHJlYW1fRWxlbWVudF9BcnJheSkgaXMKKyAgICAgICAgICAgIE5leHRfRmlyc3QgOiBTdHJlYW1fRWxlbWVudF9PZmZzZXQgOj0gQ29tcGFyZV9GaXJzdCArIEl0ZW0nTGVuZ3RoOworICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGlmIEJ1ZmZlciAoQ29tcGFyZV9GaXJzdCAuLiBOZXh0X0ZpcnN0IC0gMSkgLz0gSXRlbSB0aGVuCisgICAgICAgICAgICAgICByYWlzZSBQcm9ncmFtX0Vycm9yOworICAgICAgICAgICAgZW5kIGlmOworCisgICAgICAgICAgICBDb21wYXJlX0ZpcnN0IDo9IE5leHRfRmlyc3Q7CisgICAgICAgICBlbmQgQ29tcGFyZTsKKworICAgICAgICAgcHJvY2VkdXJlIENvbXBhcmVfV3JpdGUgaXMgbmV3IFpMaWIuV3JpdGUgKFdyaXRlID0+IENvbXBhcmUpOworICAgICAgYmVnaW4KKyAgICAgICAgIENvbXBhcmVfV3JpdGUgKEluZmxhdGUsIEl0ZW0sIE5vX0ZsdXNoKTsKKyAgICAgIGVuZCBGdXJ0aGVyOworCisgICAgICAtLS0tLS0tLS0tLS0tLS0tLQorICAgICAgLS0gUmVhZF9CdWZmZXIgLS0KKyAgICAgIC0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgIHByb2NlZHVyZSBSZWFkX0J1ZmZlcgorICAgICAgICAoSXRlbSA6IG91dCBBZGEuU3RyZWFtcy5TdHJlYW1fRWxlbWVudF9BcnJheTsKKyAgICAgICAgIExhc3QgOiBvdXQgQWRhLlN0cmVhbXMuU3RyZWFtX0VsZW1lbnRfT2Zmc2V0KQorICAgICAgaXMKKyAgICAgICAgIEJ1ZmZfRGlmZiAgIDogU3RyZWFtX0VsZW1lbnRfT2Zmc2V0IDo9IEJ1ZmZlcidMYXN0IC0gQnVmZmVyX0ZpcnN0OworICAgICAgICAgTmV4dF9GaXJzdCA6IFN0cmVhbV9FbGVtZW50X09mZnNldDsKKyAgICAgIGJlZ2luCisgICAgICAgICBpZiBJdGVtJ0xlbmd0aCA8PSBCdWZmX0RpZmYgdGhlbgorICAgICAgICAgICAgTGFzdCA6PSBJdGVtJ0xhc3Q7CisKKyAgICAgICAgICAgIE5leHRfRmlyc3QgOj0gQnVmZmVyX0ZpcnN0ICsgSXRlbSdMZW5ndGg7CisKKyAgICAgICAgICAgIEl0ZW0gOj0gQnVmZmVyIChCdWZmZXJfRmlyc3QgLi4gTmV4dF9GaXJzdCAtIDEpOworCisgICAgICAgICAgICBCdWZmZXJfRmlyc3QgOj0gTmV4dF9GaXJzdDsKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIExhc3QgOj0gSXRlbSdGaXJzdCArIEJ1ZmZfRGlmZjsKKyAgICAgICAgICAgIEl0ZW0gKEl0ZW0nRmlyc3QgLi4gTGFzdCkgOj0gQnVmZmVyIChCdWZmZXJfRmlyc3QgLi4gQnVmZmVyJ0xhc3QpOworICAgICAgICAgICAgQnVmZmVyX0ZpcnN0IDo9IEJ1ZmZlcidMYXN0ICsgMTsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgIGVuZCBSZWFkX0J1ZmZlcjsKKworICAgICAgcHJvY2VkdXJlIFRyYW5zbGF0ZSBpcyBuZXcgR2VuZXJpY19UcmFuc2xhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKERhdGFfSW4gID0+IFJlYWRfQnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YV9PdXQgPT4gRnVydGhlcik7CisKKyAgIGJlZ2luCisgICAgICBSYW5kb21fRWxlbWVudHMuUmVzZXQgKEdlbik7CisKKyAgICAgIEJ1ZmZlciA6PSAob3RoZXJzID0+IDIwKTsKKworICAgICAgTWFpbiA6IGxvb3AKKyAgICAgICAgIGZvciBKIGluIEJ1ZmZlcidSYW5nZSBsb29wCisgICAgICAgICAgICBCdWZmZXIgKEopIDo9IFJhbmRvbV9FbGVtZW50cy5SYW5kb20gKEdlbik7CisKKyAgICAgICAgICAgIERlZmxhdGVfSW5pdCAoRGVmbGF0ZSk7CisgICAgICAgICAgICBJbmZsYXRlX0luaXQgKEluZmxhdGUpOworCisgICAgICAgICAgICBCdWZmZXJfRmlyc3QgIDo9IEJ1ZmZlcidGaXJzdDsKKyAgICAgICAgICAgIENvbXBhcmVfRmlyc3QgOj0gQnVmZmVyJ0ZpcnN0OworCisgICAgICAgICAgICBUcmFuc2xhdGUgKERlZmxhdGUpOworCisgICAgICAgICAgICBpZiBDb21wYXJlX0ZpcnN0IC89IEJ1ZmZlcidMYXN0ICsgMSB0aGVuCisgICAgICAgICAgICAgICByYWlzZSBQcm9ncmFtX0Vycm9yOworICAgICAgICAgICAgZW5kIGlmOworCisgICAgICAgICAgICBBZGEuVGV4dF9JTy5QdXRfTGluZQorICAgICAgICAgICAgICAoQWRhLlRhc2tfSWRlbnRpZmljYXRpb24uSW1hZ2UKKyAgICAgICAgICAgICAgICAgKEFkYS5UYXNrX0lkZW50aWZpY2F0aW9uLkN1cnJlbnRfVGFzaykKKyAgICAgICAgICAgICAgICYgU3RyZWFtX0VsZW1lbnRfT2Zmc2V0J0ltYWdlIChKKQorICAgICAgICAgICAgICAgJiBaTGliLkNvdW50J0ltYWdlIChUb3RhbF9PdXQgKERlZmxhdGUpKSk7CisKKyAgICAgICAgICAgIENsb3NlIChEZWZsYXRlKTsKKyAgICAgICAgICAgIENsb3NlIChJbmZsYXRlKTsKKworICAgICAgICAgICAgZXhpdCBNYWluIHdoZW4gU3RvcDsKKyAgICAgICAgIGVuZCBsb29wOworICAgICAgZW5kIGxvb3AgTWFpbjsKKyAgIGV4Y2VwdGlvbgorICAgICAgd2hlbiBFIDogb3RoZXJzID0+CisgICAgICAgICBBZGEuVGV4dF9JTy5QdXRfTGluZSAoQWRhLkV4Y2VwdGlvbnMuRXhjZXB0aW9uX0luZm9ybWF0aW9uIChFKSk7CisgICAgICAgICBTdG9wIDo9IFRydWU7CisgICBlbmQgVGVzdF9UYXNrOworCisgICBUZXN0IDogYXJyYXkgKDEgLi4gNCkgb2YgVGVzdF9UYXNrOworCisgICBwcmFnbWEgVW5yZWZlcmVuY2VkIChUZXN0KTsKKworICAgRHVtbXkgOiBDaGFyYWN0ZXI7CisKK2JlZ2luCisgICBBZGEuVGV4dF9JTy5HZXRfSW1tZWRpYXRlIChEdW1teSk7CisgICBTdG9wIDo9IFRydWU7CitlbmQgTVRlc3Q7CmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi9hZGEvcmVhZC5hZGIgYi9zcmMvY29udHJpYi9hZGEvcmVhZC5hZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYyZWZiZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb250cmliL2FkYS9yZWFkLmFkYgpAQCAtMCwwICsxLDE1NiBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIFpMaWIgZm9yIEFkYSB0aGljayBiaW5kaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gIENvcHlyaWdodCAoQykgMjAwMi0yMDAzIERtaXRyaXkgQW5pc2lta292ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gIE9wZW4gc291cmNlIGxpY2Vuc2UgaW5mb3JtYXRpb24gaXMgaW4gdGhlIHpsaWIuYWRzIGZpbGUuICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistLSAgJElkOiByZWFkLmFkYix2IDEuOCAyMDA0LzA1LzMxIDEwOjUzOjQwIHZhZ3VsIEV4cCAkCisKKy0tICBUZXN0L2RlbW8gcHJvZ3JhbSBmb3IgdGhlIGdlbmVyaWMgcmVhZCBpbnRlcmZhY2UuCisKK3dpdGggQWRhLk51bWVyaWNzLkRpc2NyZXRlX1JhbmRvbTsKK3dpdGggQWRhLlN0cmVhbXM7Cit3aXRoIEFkYS5UZXh0X0lPOworCit3aXRoIFpMaWI7CisKK3Byb2NlZHVyZSBSZWFkIGlzCisKKyAgIHVzZSBBZGEuU3RyZWFtczsKKworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSAgVGVzdCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgLS0KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICBGaWxlX1NpemUgICA6IFN0cmVhbV9FbGVtZW50X09mZnNldCA6PSAxMDBfMDAwOworCisgICBDb250aW51b3VzICA6IGNvbnN0YW50IEJvb2xlYW4gICAgICAgICAgOj0gRmFsc2U7CisgICAtLSAgSWYgdGhpcyBjb25zdGFudCBpcyBUcnVlLCB0aGUgdGVzdCB3b3VsZCBiZSByZXBlYXRlZCBhZ2FpbiBhbmQgYWdhaW4sCisgICAtLSAgd2l0aCBpbmNyZW1lbnQgRmlsZV9TaXplIGZvciBldmVyeSBpdGVyYXRpb24uCisKKyAgIEhlYWRlciAgICAgIDogY29uc3RhbnQgWkxpYi5IZWFkZXJfVHlwZSA6PSBaTGliLkRlZmF1bHQ7CisgICAtLSAgRG8gbm90IHVzZSBIZWFkZXIgb3RoZXIgdGhhbiBEZWZhdWx0IGluIFpMaWIgdmVyc2lvbnMgMS4xLjQgYW5kIG9sZGVyLgorCisgICBJbml0X1JhbmRvbSA6IGNvbnN0YW50IDo9IDg7CisgICAtLSAgV2UgYXJlIHVzaW5nIHRoZSBzYW1lIHJhbmRvbSBzZXF1ZW5jZSwgaW4gY2FzZSBvZiB3ZSBjYXRjaCBidWcsCisgICAtLSAgc28gd2Ugd291bGQgYmUgYWJsZSB0byByZXByb2R1Y2UgaXQuCisKKyAgIC0tIEVuZCAtLQorCisgICBQYWNrX1NpemUgOiBTdHJlYW1fRWxlbWVudF9PZmZzZXQ7CisgICBPZmZzZXQgICAgOiBTdHJlYW1fRWxlbWVudF9PZmZzZXQ7CisKKyAgIEZpbHRlciAgICAgOiBaTGliLkZpbHRlcl9UeXBlOworCisgICBzdWJ0eXBlIFZpc2libGVfU3ltYm9scworICAgICAgaXMgU3RyZWFtX0VsZW1lbnQgcmFuZ2UgMTYjMjAjIC4uIDE2IzdFIzsKKworICAgcGFja2FnZSBSYW5kb21fRWxlbWVudHMgaXMgbmV3CisgICAgICBBZGEuTnVtZXJpY3MuRGlzY3JldGVfUmFuZG9tIChWaXNpYmxlX1N5bWJvbHMpOworCisgICBHZW4gOiBSYW5kb21fRWxlbWVudHMuR2VuZXJhdG9yOworICAgUGVyaW9kICA6IGNvbnN0YW50IFN0cmVhbV9FbGVtZW50X09mZnNldCA6PSAyMDA7CisgICAtLSAgUGVyaW9kIGNvbnN0YW50IHZhcmlhYmxlIGZvciByYW5kb20gZ2VuZXJhdG9yIG5vdCB0byBiZSB2ZXJ5IHJhbmRvbS4KKyAgIC0tICBCaWdnZXIgcGVyaW9kLCBoYXJkZXIgcmFuZG9tLgorCisgICBSZWFkX0J1ZmZlciA6IFN0cmVhbV9FbGVtZW50X0FycmF5ICgxIC4uIDIwNDgpOworICAgUmVhZF9GaXJzdCAgOiBTdHJlYW1fRWxlbWVudF9PZmZzZXQ7CisgICBSZWFkX0xhc3QgICA6IFN0cmVhbV9FbGVtZW50X09mZnNldDsKKworICAgcHJvY2VkdXJlIFJlc2V0OworCisgICBwcm9jZWR1cmUgUmVhZAorICAgICAoSXRlbSA6IG91dCBTdHJlYW1fRWxlbWVudF9BcnJheTsKKyAgICAgIExhc3QgOiBvdXQgU3RyZWFtX0VsZW1lbnRfT2Zmc2V0KTsKKyAgIC0tICB0aGlzIHByb2NlZHVyZSBpcyBmb3IgZ2VuZXJpYyBpbnN0YW50aWF0aW9uIG9mCisgICAtLSAgWkxpYi5SZWFkCisgICAtLSAgcmVhZGluZyBkYXRhIGZyb20gdGhlIEZpbGVfSW4uCisKKyAgIHByb2NlZHVyZSBSZWFkIGlzIG5ldyBaTGliLlJlYWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChSZWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRfQnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc3RfRmlyc3QgPT4gUmVhZF9GaXJzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXN0X0xhc3QgID0+IFJlYWRfTGFzdCk7CisKKyAgIC0tLS0tLS0tLS0KKyAgIC0tIFJlYWQgLS0KKyAgIC0tLS0tLS0tLS0KKworICAgcHJvY2VkdXJlIFJlYWQKKyAgICAgKEl0ZW0gOiBvdXQgU3RyZWFtX0VsZW1lbnRfQXJyYXk7CisgICAgICBMYXN0IDogb3V0IFN0cmVhbV9FbGVtZW50X09mZnNldCkgaXMKKyAgIGJlZ2luCisgICAgICBMYXN0IDo9IFN0cmVhbV9FbGVtZW50X09mZnNldCdNaW4KKyAgICAgICAgICAgICAgIChJdGVtJ0xhc3QsCisgICAgICAgICAgICAgICAgSXRlbSdGaXJzdCArIEZpbGVfU2l6ZSAtIE9mZnNldCk7CisKKyAgICAgIGZvciBKIGluIEl0ZW0nRmlyc3QgLi4gTGFzdCBsb29wCisgICAgICAgICBpZiBKIDwgSXRlbSdGaXJzdCArIFBlcmlvZCB0aGVuCisgICAgICAgICAgICBJdGVtIChKKSA6PSBSYW5kb21fRWxlbWVudHMuUmFuZG9tIChHZW4pOworICAgICAgICAgZWxzZQorICAgICAgICAgICAgSXRlbSAoSikgOj0gSXRlbSAoSiAtIFBlcmlvZCk7CisgICAgICAgICBlbmQgaWY7CisKKyAgICAgICAgIE9mZnNldCAgIDo9IE9mZnNldCArIDE7CisgICAgICBlbmQgbG9vcDsKKyAgIGVuZCBSZWFkOworCisgICAtLS0tLS0tLS0tLQorICAgLS0gUmVzZXQgLS0KKyAgIC0tLS0tLS0tLS0tCisKKyAgIHByb2NlZHVyZSBSZXNldCBpcworICAgYmVnaW4KKyAgICAgIFJhbmRvbV9FbGVtZW50cy5SZXNldCAoR2VuLCBJbml0X1JhbmRvbSk7CisgICAgICBQYWNrX1NpemUgOj0gMDsKKyAgICAgIE9mZnNldCA6PSAxOworICAgICAgUmVhZF9GaXJzdCA6PSBSZWFkX0J1ZmZlcidMYXN0ICsgMTsKKyAgICAgIFJlYWRfTGFzdCAgOj0gUmVhZF9CdWZmZXInTGFzdDsKKyAgIGVuZCBSZXNldDsKKworYmVnaW4KKyAgIEFkYS5UZXh0X0lPLlB1dF9MaW5lICgiWkxpYiAiICYgWkxpYi5WZXJzaW9uKTsKKworICAgbG9vcAorICAgICAgZm9yIExldmVsIGluIFpMaWIuQ29tcHJlc3Npb25fTGV2ZWwnUmFuZ2UgbG9vcAorCisgICAgICAgICBBZGEuVGV4dF9JTy5QdXQgKCJMZXZlbCA9IgorICAgICAgICAgICAgJiBaTGliLkNvbXByZXNzaW9uX0xldmVsJ0ltYWdlIChMZXZlbCkpOworCisgICAgICAgICAtLSAgRGVmbGF0ZSB1c2luZyBnZW5lcmljIGluc3RhbnRpYXRpb24uCisKKyAgICAgICAgIFpMaWIuRGVmbGF0ZV9Jbml0CisgICAgICAgICAgICAgICAoRmlsdGVyLAorICAgICAgICAgICAgICAgIExldmVsLAorICAgICAgICAgICAgICAgIEhlYWRlciA9PiBIZWFkZXIpOworCisgICAgICAgICBSZXNldDsKKworICAgICAgICAgQWRhLlRleHRfSU8uUHV0CisgICAgICAgICAgIChTdHJlYW1fRWxlbWVudF9PZmZzZXQnSW1hZ2UgKEZpbGVfU2l6ZSkgJiAiIC0+Iik7CisKKyAgICAgICAgIGxvb3AKKyAgICAgICAgICAgIGRlY2xhcmUKKyAgICAgICAgICAgICAgIEJ1ZmZlciA6IFN0cmVhbV9FbGVtZW50X0FycmF5ICgxIC4uIDEwMjQpOworICAgICAgICAgICAgICAgTGFzdCAgIDogU3RyZWFtX0VsZW1lbnRfT2Zmc2V0OworICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgIFJlYWQgKEZpbHRlciwgQnVmZmVyLCBMYXN0KTsKKworICAgICAgICAgICAgICAgUGFja19TaXplIDo9IFBhY2tfU2l6ZSArIExhc3QgLSBCdWZmZXInRmlyc3QgKyAxOworCisgICAgICAgICAgICAgICBleGl0IHdoZW4gTGFzdCA8IEJ1ZmZlcidMYXN0OworICAgICAgICAgICAgZW5kOworICAgICAgICAgZW5kIGxvb3A7CisKKyAgICAgICAgIEFkYS5UZXh0X0lPLlB1dF9MaW5lIChTdHJlYW1fRWxlbWVudF9PZmZzZXQnSW1hZ2UgKFBhY2tfU2l6ZSkpOworCisgICAgICAgICBaTGliLkNsb3NlIChGaWx0ZXIpOworICAgICAgZW5kIGxvb3A7CisKKyAgICAgIGV4aXQgd2hlbiBub3QgQ29udGludW91czsKKworICAgICAgRmlsZV9TaXplIDo9IEZpbGVfU2l6ZSArIDE7CisgICBlbmQgbG9vcDsKK2VuZCBSZWFkOwpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvYWRhL3JlYWRtZS50eHQgYi9zcmMvY29udHJpYi9hZGEvcmVhZG1lLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTRkMmNhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbnRyaWIvYWRhL3JlYWRtZS50eHQKQEAgLTAsMCArMSw2NSBAQAorICAgICAgICAgICAgICAgICAgICAgICAgWkxpYiBmb3IgQWRhIHRoaWNrIGJpbmRpbmcgKFpMaWIuQWRhKQorICAgICAgICAgICAgICAgICAgICAgICAgUmVsZWFzZSAxLjMKKworWkxpYi5BZGEgaXMgYSB0aGljayBiaW5kaW5nIGludGVyZmFjZSB0byB0aGUgcG9wdWxhciBaTGliIGRhdGEKK2NvbXByZXNzaW9uIGxpYnJhcnksIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lmd6aXAub3JnL3psaWIvLgorSXQgcHJvdmlkZXMgQWRhLXN0eWxlIGFjY2VzcyB0byB0aGUgWkxpYiBDIGxpYnJhcnkuCisKKworICAgICAgICBIZXJlIGFyZSB0aGUgbWFpbiBjaGFuZ2VzIHNpbmNlIFpMaWIuQWRhIDEuMjoKKworLSBBdHRlbnNpb246IFpMaWIuUmVhZCBnZW5lcmljIHJvdXRpbmUgaGF2ZSBhIGluaXRpYWxpemF0aW9uIHJlcXVpcmVtZW50CisgIGZvciBSZWFkX0xhc3QgcGFyYW1ldGVyIG5vdy4gSXQgaXMgYSBiaXQgaW5jb21wYXJ0aWJsZSB3aXRoIHByZXZpb3VzIHZlcnNpb24sCisgIGJ1dCBleHRlbmRzIGZ1bmN0aW9uYWxpdHksIHdlIGNvdWxkIHVzZSBuZXcgcGFyYW1ldGVycyBBbGxvd19SZWFkX1NvbWUgYW5kCisgIEZsdXNoIG5vdy4KKworLSBBZGRlZCBJc19PcGVuIHJvdXRpbmVzIHRvIFpMaWIgYW5kIFpMaWIuU3RyZWFtcyBwYWNrYWdlcy4KKworLSBBZGQgcHJhZ21hIEFzc2VydCB0byBjaGVjayBTdHJlYW1fRWxlbWVudCBpcyA4IGJpdC4KKworLSBGaXggZXh0cmFjdGlvbiB0byBidWZmZXIgd2l0aCBleGFjdCBrbm93biBkZWNvbXByZXNzZWQgc2l6ZS4gRXJyb3IgcmVwb3J0ZWQgYnkKKyAgU3RldmUgU2FuZ3dpbmUuCisKKy0gRml4IGRlZmluaXRpb24gb2YgVUxvbmcgKGNoYW5nZWQgdG8gdW5zaWduZWRfbG9uZyksIGZpeCByZWdyZXNzaW9uIG9uIDY0IGJpdHMKKyAgY29tcHV0ZXJzLiBQYXRjaCBwcm92aWRlZCBieSBQYXNjYWwgT2JyeS4KKworLSBBZGQgU3RhdHVzX0Vycm9yIGV4Y2VwdGlvbiBkZWZpbml0aW9uLgorCistIEFkZCBwcmFnbWEgQXNzZXJ0aW9uIHRoYXQgQWRhLlN0cmVhbXMuU3RyZWFtX0VsZW1lbnQgc2l6ZSBpcyA4IGJpdC4KKworCisgICAgICAgIEhvdyB0byBidWlsZCBaTGliLkFkYSB1bmRlciBHTkFUCisKK1lvdSBzaG91bGQgaGF2ZSB0aGUgWkxpYiBsaWJyYXJ5IGFscmVhZHkgYnVpbGQgb24geW91ciBjb21wdXRlciwgYmVmb3JlCitidWlsZGluZyBaTGliLkFkYS4gTWFrZSB0aGUgZGlyZWN0b3J5IG9mIFpMaWIuQWRhIHNvdXJjZXMgY3VycmVudCBhbmQKK2lzc3VlIHRoZSBjb21tYW5kOgorCisgIGduYXRtYWtlIHRlc3QgLWxhcmdzIC1MPGRpcmVjdG9yeSB3aGVyZSBsaWJ6LmEgaXM+IC1segorCitPciB1c2UgdGhlIEdOQVQgcHJvamVjdCBmaWxlIGJ1aWxkIGZvciBHTkFUIDMuMTUgb3IgbGF0ZXI6CisKKyAgZ25hdG1ha2UgLVB6bGliLmdwciAtTDxkaXJlY3Rvcnkgd2hlcmUgbGliei5hIGlzPgorCisKKyAgICAgICAgSG93IHRvIGJ1aWxkIFpMaWIuQWRhIHVuZGVyIEFvbml4IE9iamVjdEFkYSBmb3IgV2luMzIgNy4yLjIKKworMS4gTWFrZSBhIHByb2plY3Qgd2l0aCBhbGwgKi5hZHMgYW5kICouYWRiIGZpbGVzIGZyb20gdGhlIGRpc3RyaWJ1dGlvbi4KKzIuIEJ1aWxkIHRoZSBsaWJ6LmEgbGlicmFyeSBmcm9tIHRoZSBaTGliIEMgc291cmNlcy4KKzMuIFJlbmFtZSBsaWJ6LmEgdG8gei5saWIuCis0LiBBZGQgdGhlIGxpYnJhcnkgei5saWIgdG8gdGhlIHByb2plY3QuCis1LiBBZGQgdGhlIGxpYmMubGliIGxpYnJhcnkgZnJvbSB0aGUgT2JqZWN0QWRhIGRpc3RyaWJ1dGlvbiB0byB0aGUgcHJvamVjdC4KKzYuIEJ1aWxkIHRoZSBleGVjdXRhYmxlIHVzaW5nIHRlc3QuYWRiIGFzIGEgbWFpbiBwcm9jZWR1cmUuCisKKworICAgICAgICBIb3cgdG8gdXNlIFpMaWIuQWRhCisKK1RoZSBzb3VyY2UgZmlsZXMgdGVzdC5hZGIgYW5kIHJlYWQuYWRiIGFyZSBzbWFsbCBkZW1vIHByb2dyYW1zIHRoYXQgc2hvdwordGhlIG1haW4gZnVuY3Rpb25hbGl0eSBvZiBaTGliLkFkYS4KKworVGhlIHJvdXRpbmVzIGZyb20gdGhlIHBhY2thZ2Ugc3BlY2lmaWNhdGlvbnMgYXJlIGNvbW1lbnRlZC4KKworCitIb21lcGFnZTogaHR0cDovL3psaWItYWRhLnNvdXJjZWZvcmdlLm5ldC8KK0F1dGhvcjogRG1pdHJpeSBBbmlzaW1rb3YgPGFuaXNpbWtvdkB5YWhvby5jb20+CisKK0NvbnRyaWJ1dG9yczogUGFzY2FsIE9icnkgPHBhc2NhbEBvYnJ5Lm9yZz4sIFN0ZXZlIFNhbmd3aW5lIDxzanNAZXNzZXguYWMudWs+CmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi9hZGEvdGVzdC5hZGIgYi9zcmMvY29udHJpYi9hZGEvdGVzdC5hZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA3NzNhYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb250cmliL2FkYS90ZXN0LmFkYgpAQCAtMCwwICsxLDQ2MyBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIFpMaWIgZm9yIEFkYSB0aGljayBiaW5kaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gIENvcHlyaWdodCAoQykgMjAwMi0yMDAzIERtaXRyaXkgQW5pc2lta292ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gIE9wZW4gc291cmNlIGxpY2Vuc2UgaW5mb3JtYXRpb24gaXMgaW4gdGhlIHpsaWIuYWRzIGZpbGUuICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistLSAgJElkOiB0ZXN0LmFkYix2IDEuMTcgMjAwMy8wOC8xMiAxMjoxMzozMCB2YWd1bCBFeHAgJAorCistLSAgVGhlIHByb2dyYW0gaGFzIGEgZmV3IGFpbXMuCistLSAgMS4gVGVzdCBaTGliLkFkYTk1IHRoaWNrIGJpbmRpbmcgZnVuY3Rpb25hbGl0eS4KKy0tICAyLiBTaG93IHRoZSBleGFtcGxlIG9mIHVzZSBtYWluIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIFpMaWIuQWRhOTUgYmluZGluZy4KKy0tICAzLiBCdWlsZCB0aGlzIHByb2dyYW0gYXV0b21hdGljYWxseSBjb21waWxlIGFsbCBaTGliLkFkYTk1IHBhY2thZ2VzIHVuZGVyCistLSAgICAgR05BVCBBZGE5NSBjb21waWxlci4KKword2l0aCBaTGliLlN0cmVhbXM7Cit3aXRoIEFkYS5TdHJlYW1zLlN0cmVhbV9JTzsKK3dpdGggQWRhLk51bWVyaWNzLkRpc2NyZXRlX1JhbmRvbTsKKword2l0aCBBZGEuVGV4dF9JTzsKKword2l0aCBBZGEuQ2FsZW5kYXI7CisKK3Byb2NlZHVyZSBUZXN0IGlzCisKKyAgIHVzZSBBZGEuU3RyZWFtczsKKyAgIHVzZSBTdHJlYW1fSU87CisKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gIFRlc3QgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIC0tCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgRmlsZV9TaXplICAgOiBDb3VudCAgIDo9IDEwMF8wMDA7CisgICBDb250aW51b3VzICA6IGNvbnN0YW50IEJvb2xlYW4gOj0gRmFsc2U7CisKKyAgIEhlYWRlciAgICAgIDogY29uc3RhbnQgWkxpYi5IZWFkZXJfVHlwZSA6PSBaTGliLkRlZmF1bHQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gIFpMaWIuTm9uZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSAgWkxpYi5BdXRvOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tICBaTGliLkdaaXA7CisgICAtLSAgRG8gbm90IHVzZSBIZWFkZXIgb3RoZXIgdGhlbiBEZWZhdWx0IGluIFpMaWIgdmVyc2lvbnMgMS4xLjQKKyAgIC0tICBhbmQgb2xkZXIuCisKKyAgIFN0cmF0ZWd5ICAgIDogY29uc3RhbnQgWkxpYi5TdHJhdGVneV9UeXBlIDo9IFpMaWIuRGVmYXVsdF9TdHJhdGVneTsKKyAgIEluaXRfUmFuZG9tIDogY29uc3RhbnQgOj0gMTA7CisKKyAgIC0tIEVuZCAtLQorCisgICBJbl9GaWxlX05hbWUgIDogY29uc3RhbnQgU3RyaW5nIDo9ICJ0ZXN0emxpYi5pbiI7CisgICAtLSAgTmFtZSBvZiB0aGUgaW5wdXQgZmlsZQorCisgICBaX0ZpbGVfTmFtZSAgIDogY29uc3RhbnQgU3RyaW5nIDo9ICJ0ZXN0emxpYi56bGIiOworICAgLS0gIE5hbWUgb2YgdGhlIGNvbXByZXNzZWQgZmlsZS4KKworICAgT3V0X0ZpbGVfTmFtZSA6IGNvbnN0YW50IFN0cmluZyA6PSAidGVzdHpsaWIub3V0IjsKKyAgIC0tICBOYW1lIG9mIHRoZSBkZWNvbXByZXNzZWQgZmlsZS4KKworICAgRmlsZV9JbiAgIDogRmlsZV9UeXBlOworICAgRmlsZV9PdXQgIDogRmlsZV9UeXBlOworICAgRmlsZV9CYWNrIDogRmlsZV9UeXBlOworICAgRmlsZV9aICAgIDogWkxpYi5TdHJlYW1zLlN0cmVhbV9UeXBlOworCisgICBGaWx0ZXIgOiBaTGliLkZpbHRlcl9UeXBlOworCisgICBUaW1lX1N0YW1wIDogQWRhLkNhbGVuZGFyLlRpbWU7CisKKyAgIHByb2NlZHVyZSBHZW5lcmF0ZV9GaWxlOworICAgLS0gIEdlbmVyYXRlIGZpbGUgb2Ygc3BldHNpZmllZCBzaXplIHdpdGggc29tZSByYW5kb20gZGF0YS4KKyAgIC0tICBUaGUgcmFuZG9tIGRhdGEgaXMgcmVwZWF0YWJsZSwgZm9yIHRoZSBnb29kIGNvbXByZXNzaW9uLgorCisgICBwcm9jZWR1cmUgQ29tcGFyZV9TdHJlYW1zCisgICAgIChMZWZ0LCBSaWdodCA6IGluIG91dCBSb290X1N0cmVhbV9UeXBlJ0NsYXNzKTsKKyAgIC0tICBUaGUgcHJvY2VkdXJlIGNvbXBlYXJpbmcgZGF0YSBpbiAyIHN0cmVhbXMuCisgICAtLSAgSXQgaXMgZm9yIGNvbXBhcmUgZGF0YSBiZWZvcmUgYW5kIGFmdGVyIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24uCisKKyAgIHByb2NlZHVyZSBDb21wYXJlX0ZpbGVzIChMZWZ0LCBSaWdodCA6IFN0cmluZyk7CisgICAtLSAgQ29tcGFyZSBmaWxlcy4gQmFzZWQgb24gdGhlIENvbXBhcmVfU3RyZWFtcy4KKworICAgcHJvY2VkdXJlIENvcHlfU3RyZWFtcworICAgICAoU291cmNlLCBUYXJnZXQgOiBpbiBvdXQgUm9vdF9TdHJlYW1fVHlwZSdDbGFzczsKKyAgICAgIEJ1ZmZlcl9TaXplICAgIDogaW4gICAgIFN0cmVhbV9FbGVtZW50X09mZnNldCA6PSAxMDI0KTsKKyAgIC0tICBDb3B5aW5nIGRhdGEgZnJvbSBvbmUgc3RyZWFtIHRvIGFub3RoZXIuIEl0IGlzIGZvciB0ZXN0IHN0cmVhbQorICAgLS0gIGludGVyZmFjZSBvZiB0aGUgbGlicmFyeS4KKworICAgcHJvY2VkdXJlIERhdGFfSW4KKyAgICAgKEl0ZW0gOiBvdXQgU3RyZWFtX0VsZW1lbnRfQXJyYXk7CisgICAgICBMYXN0IDogb3V0IFN0cmVhbV9FbGVtZW50X09mZnNldCk7CisgICAtLSAgdGhpcyBwcm9jZWR1cmUgaXMgZm9yIGdlbmVyaWMgaW5zdGFudGlhdGlvbiBvZgorICAgLS0gIFpMaWIuR2VuZXJpY19UcmFuc2xhdGUuCisgICAtLSAgcmVhZGluZyBkYXRhIGZyb20gdGhlIEZpbGVfSW4uCisKKyAgIHByb2NlZHVyZSBEYXRhX091dCAoSXRlbSA6IGluIFN0cmVhbV9FbGVtZW50X0FycmF5KTsKKyAgIC0tICB0aGlzIHByb2NlZHVyZSBpcyBmb3IgZ2VuZXJpYyBpbnN0YW50aWF0aW9uIG9mCisgICAtLSAgWkxpYi5HZW5lcmljX1RyYW5zbGF0ZS4KKyAgIC0tICB3cml0aW5nIGRhdGEgdG8gdGhlIEZpbGVfT3V0LgorCisgICBwcm9jZWR1cmUgU3RhbXA7CisgICAtLSAgU3RvcmUgdGhlIHRpbWVzdGFtcCB0byB0aGUgbG9jYWwgdmFyaWFibGUuCisKKyAgIHByb2NlZHVyZSBQcmludF9TdGF0aXN0aWMgKE1zZyA6IFN0cmluZzsgRGF0YV9TaXplIDogWkxpYi5Db3VudCk7CisgICAtLSAgUHJpbnQgdGhlIHRpbWUgc3RhdGlzdGljIHdpdGggdGhlIG1lc3NhZ2UuCisKKyAgIHByb2NlZHVyZSBUcmFuc2xhdGUgaXMgbmV3IFpMaWIuR2VuZXJpY19UcmFuc2xhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKERhdGFfSW4gID0+IERhdGFfSW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhX091dCA9PiBEYXRhX091dCk7CisgICAtLSAgVGhpcyBwcm9jZWR1cmUgaXMgbW92aW5nIGRhdGEgZnJvbSBGaWxlX0luIHRvIEZpbGVfT3V0CisgICAtLSAgd2l0aCBjb21wcmVzc2lvbiBvciBkZWNvbXByZXNzaW9uLCBkZXBlbmQgb24gaW5pdGlhbGl6YXRpb24gb2YKKyAgIC0tICBGaWx0ZXIgcGFyYW1ldGVyLgorCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBDb21wYXJlX0ZpbGVzIC0tCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgIHByb2NlZHVyZSBDb21wYXJlX0ZpbGVzIChMZWZ0LCBSaWdodCA6IFN0cmluZykgaXMKKyAgICAgIExlZnRfRmlsZSwgUmlnaHRfRmlsZSA6IEZpbGVfVHlwZTsKKyAgIGJlZ2luCisgICAgICBPcGVuIChMZWZ0X0ZpbGUsIEluX0ZpbGUsIExlZnQpOworICAgICAgT3BlbiAoUmlnaHRfRmlsZSwgSW5fRmlsZSwgUmlnaHQpOworICAgICAgQ29tcGFyZV9TdHJlYW1zIChTdHJlYW0gKExlZnRfRmlsZSkuYWxsLCBTdHJlYW0gKFJpZ2h0X0ZpbGUpLmFsbCk7CisgICAgICBDbG9zZSAoTGVmdF9GaWxlKTsKKyAgICAgIENsb3NlIChSaWdodF9GaWxlKTsKKyAgIGVuZCBDb21wYXJlX0ZpbGVzOworCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIENvbXBhcmVfU3RyZWFtcyAtLQorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgIHByb2NlZHVyZSBDb21wYXJlX1N0cmVhbXMKKyAgICAgKExlZnQsIFJpZ2h0IDogaW4gb3V0IEFkYS5TdHJlYW1zLlJvb3RfU3RyZWFtX1R5cGUnQ2xhc3MpCisgICBpcworICAgICAgTGVmdF9CdWZmZXIsIFJpZ2h0X0J1ZmZlciA6IFN0cmVhbV9FbGVtZW50X0FycmF5ICgwIC4uIDE2I0ZGRiMpOworICAgICAgTGVmdF9MYXN0LCBSaWdodF9MYXN0IDogU3RyZWFtX0VsZW1lbnRfT2Zmc2V0OworICAgYmVnaW4KKyAgICAgIGxvb3AKKyAgICAgICAgIFJlYWQgKExlZnQsIExlZnRfQnVmZmVyLCBMZWZ0X0xhc3QpOworICAgICAgICAgUmVhZCAoUmlnaHQsIFJpZ2h0X0J1ZmZlciwgUmlnaHRfTGFzdCk7CisKKyAgICAgICAgIGlmIExlZnRfTGFzdCAvPSBSaWdodF9MYXN0IHRoZW4KKyAgICAgICAgICAgIEFkYS5UZXh0X0lPLlB1dF9MaW5lICgiQ29tcGFyZSBlcnJvciA6IgorICAgICAgICAgICAgICAmIFN0cmVhbV9FbGVtZW50X09mZnNldCdJbWFnZSAoTGVmdF9MYXN0KQorICAgICAgICAgICAgICAmICIgLz0gIgorICAgICAgICAgICAgICAmIFN0cmVhbV9FbGVtZW50X09mZnNldCdJbWFnZSAoUmlnaHRfTGFzdCkpOworCisgICAgICAgICAgICByYWlzZSBDb25zdHJhaW50X0Vycm9yOworCisgICAgICAgICBlbHNpZiBMZWZ0X0J1ZmZlciAoMCAuLiBMZWZ0X0xhc3QpCisgICAgICAgICAgICAgICAvPSBSaWdodF9CdWZmZXIgKDAgLi4gUmlnaHRfTGFzdCkKKyAgICAgICAgIHRoZW4KKyAgICAgICAgICAgIEFkYS5UZXh0X0lPLlB1dF9MaW5lICgiRVJST1I6IElOIGFuZCBPVVQgZmlsZXMgaXMgbm90IGVxdWFsLiIpOworICAgICAgICAgICAgcmFpc2UgQ29uc3RyYWludF9FcnJvcjsKKworICAgICAgICAgZW5kIGlmOworCisgICAgICAgICBleGl0IHdoZW4gTGVmdF9MYXN0IDwgTGVmdF9CdWZmZXInTGFzdDsKKyAgICAgIGVuZCBsb29wOworICAgZW5kIENvbXBhcmVfU3RyZWFtczsKKworICAgLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBDb3B5X1N0cmVhbXMgLS0KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLQorCisgICBwcm9jZWR1cmUgQ29weV9TdHJlYW1zCisgICAgIChTb3VyY2UsIFRhcmdldCA6IGluIG91dCBBZGEuU3RyZWFtcy5Sb290X1N0cmVhbV9UeXBlJ0NsYXNzOworICAgICAgQnVmZmVyX1NpemUgICAgOiBpbiAgICAgU3RyZWFtX0VsZW1lbnRfT2Zmc2V0IDo9IDEwMjQpCisgICBpcworICAgICAgQnVmZmVyIDogU3RyZWFtX0VsZW1lbnRfQXJyYXkgKDEgLi4gQnVmZmVyX1NpemUpOworICAgICAgTGFzdCAgIDogU3RyZWFtX0VsZW1lbnRfT2Zmc2V0OworICAgYmVnaW4KKyAgICAgIGxvb3AKKyAgICAgICAgIFJlYWQgIChTb3VyY2UsIEJ1ZmZlciwgTGFzdCk7CisgICAgICAgICBXcml0ZSAoVGFyZ2V0LCBCdWZmZXIgKDEgLi4gTGFzdCkpOworCisgICAgICAgICBleGl0IHdoZW4gTGFzdCA8IEJ1ZmZlcidMYXN0OworICAgICAgZW5kIGxvb3A7CisgICBlbmQgQ29weV9TdHJlYW1zOworCisgICAtLS0tLS0tLS0tLS0tCisgICAtLSBEYXRhX0luIC0tCisgICAtLS0tLS0tLS0tLS0tCisKKyAgIHByb2NlZHVyZSBEYXRhX0luCisgICAgIChJdGVtIDogb3V0IFN0cmVhbV9FbGVtZW50X0FycmF5OworICAgICAgTGFzdCA6IG91dCBTdHJlYW1fRWxlbWVudF9PZmZzZXQpIGlzCisgICBiZWdpbgorICAgICAgUmVhZCAoRmlsZV9JbiwgSXRlbSwgTGFzdCk7CisgICBlbmQgRGF0YV9JbjsKKworICAgLS0tLS0tLS0tLS0tLS0KKyAgIC0tIERhdGFfT3V0IC0tCisgICAtLS0tLS0tLS0tLS0tLQorCisgICBwcm9jZWR1cmUgRGF0YV9PdXQgKEl0ZW0gOiBpbiBTdHJlYW1fRWxlbWVudF9BcnJheSkgaXMKKyAgIGJlZ2luCisgICAgICBXcml0ZSAoRmlsZV9PdXQsIEl0ZW0pOworICAgZW5kIERhdGFfT3V0OworCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBHZW5lcmF0ZV9GaWxlIC0tCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgIHByb2NlZHVyZSBHZW5lcmF0ZV9GaWxlIGlzCisgICAgICBzdWJ0eXBlIFZpc2libGVfU3ltYm9scyBpcyBTdHJlYW1fRWxlbWVudCByYW5nZSAxNiMyMCMgLi4gMTYjN0UjOworCisgICAgICBwYWNrYWdlIFJhbmRvbV9FbGVtZW50cyBpcworICAgICAgICAgbmV3IEFkYS5OdW1lcmljcy5EaXNjcmV0ZV9SYW5kb20gKFZpc2libGVfU3ltYm9scyk7CisKKyAgICAgIEdlbiAgICA6IFJhbmRvbV9FbGVtZW50cy5HZW5lcmF0b3I7CisgICAgICBCdWZmZXIgOiBTdHJlYW1fRWxlbWVudF9BcnJheSA6PSAoMSAuLiA3NyA9PiAxNiMyMCMpICYgMTA7CisKKyAgICAgIEJ1ZmZlcl9Db3VudCA6IGNvbnN0YW50IENvdW50IDo9IEZpbGVfU2l6ZSAvIEJ1ZmZlcidMZW5ndGg7CisgICAgICAtLSAgTnVtYmVyIG9mIHNhbWUgYnVmZmVycyBpbiB0aGUgcGFja2V0LgorCisgICAgICBEZW5zaXR5IDogY29uc3RhbnQgQ291bnQgOj0gMzA7IC0tICBmcm9tIDAgdG8gQnVmZmVyJ0xlbmd0aCAtIDI7CisKKyAgICAgIHByb2NlZHVyZSBGaWxsX0J1ZmZlciAoSiwgRCA6IGluIENvdW50KTsKKyAgICAgIC0tICBDaGFuZ2UgdGhlIHBhcnQgb2YgdGhlIGJ1ZmZlci4KKworICAgICAgLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgIC0tIEZpbGxfQnVmZmVyIC0tCisgICAgICAtLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICBwcm9jZWR1cmUgRmlsbF9CdWZmZXIgKEosIEQgOiBpbiBDb3VudCkgaXMKKyAgICAgIGJlZ2luCisgICAgICAgICBmb3IgSyBpbiAwIC4uIEQgbG9vcAorICAgICAgICAgICAgQnVmZmVyCisgICAgICAgICAgICAgIChTdHJlYW1fRWxlbWVudF9PZmZzZXQgKChKICsgSykgbW9kIChCdWZmZXInTGVuZ3RoIC0gMSkgKyAxKSkKKyAgICAgICAgICAgICA6PSBSYW5kb21fRWxlbWVudHMuUmFuZG9tIChHZW4pOworCisgICAgICAgICBlbmQgbG9vcDsKKyAgICAgIGVuZCBGaWxsX0J1ZmZlcjsKKworICAgYmVnaW4KKyAgICAgIFJhbmRvbV9FbGVtZW50cy5SZXNldCAoR2VuLCBJbml0X1JhbmRvbSk7CisKKyAgICAgIENyZWF0ZSAoRmlsZV9JbiwgT3V0X0ZpbGUsIEluX0ZpbGVfTmFtZSk7CisKKyAgICAgIEZpbGxfQnVmZmVyICgxLCBCdWZmZXInTGVuZ3RoIC0gMik7CisKKyAgICAgIGZvciBKIGluIDEgLi4gQnVmZmVyX0NvdW50IGxvb3AKKyAgICAgICAgIFdyaXRlIChGaWxlX0luLCBCdWZmZXIpOworCisgICAgICAgICBGaWxsX0J1ZmZlciAoSiwgRGVuc2l0eSk7CisgICAgICBlbmQgbG9vcDsKKworICAgICAgLS0gIGZpbGwgcmVtYWluIHNpemUuCisKKyAgICAgIFdyaXRlCisgICAgICAgIChGaWxlX0luLAorICAgICAgICAgQnVmZmVyCisgICAgICAgICAgICgxIC4uIFN0cmVhbV9FbGVtZW50X09mZnNldAorICAgICAgICAgICAgICAgICAgIChGaWxlX1NpemUgLSBCdWZmZXInTGVuZ3RoICogQnVmZmVyX0NvdW50KSkpOworCisgICAgICBGbHVzaCAoRmlsZV9Jbik7CisgICAgICBDbG9zZSAoRmlsZV9Jbik7CisgICBlbmQgR2VuZXJhdGVfRmlsZTsKKworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBQcmludF9TdGF0aXN0aWMgLS0KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICBwcm9jZWR1cmUgUHJpbnRfU3RhdGlzdGljIChNc2cgOiBTdHJpbmc7IERhdGFfU2l6ZSA6IFpMaWIuQ291bnQpIGlzCisgICAgICB1c2UgQWRhLkNhbGVuZGFyOworICAgICAgdXNlIEFkYS5UZXh0X0lPOworCisgICAgICBwYWNrYWdlIENvdW50X0lPIGlzIG5ldyBJbnRlZ2VyX0lPIChaTGliLkNvdW50KTsKKworICAgICAgQ3Vycl9EdXIgOiBEdXJhdGlvbiA6PSBDbG9jayAtIFRpbWVfU3RhbXA7CisgICBiZWdpbgorICAgICAgUHV0IChNc2cpOworCisgICAgICBTZXRfQ29sICgyMCk7CisgICAgICBBZGEuVGV4dF9JTy5QdXQgKCJzaXplID0iKTsKKworICAgICAgQ291bnRfSU8uUHV0CisgICAgICAgIChEYXRhX1NpemUsCisgICAgICAgICBXaWR0aCA9PiBTdHJlYW1fSU8uQ291bnQnSW1hZ2UgKEZpbGVfU2l6ZSknTGVuZ3RoKTsKKworICAgICAgUHV0X0xpbmUgKCIgZHVyYXRpb24gPSIgJiBEdXJhdGlvbidJbWFnZSAoQ3Vycl9EdXIpKTsKKyAgIGVuZCBQcmludF9TdGF0aXN0aWM7CisKKyAgIC0tLS0tLS0tLS0tCisgICAtLSBTdGFtcCAtLQorICAgLS0tLS0tLS0tLS0KKworICAgcHJvY2VkdXJlIFN0YW1wIGlzCisgICBiZWdpbgorICAgICAgVGltZV9TdGFtcCA6PSBBZGEuQ2FsZW5kYXIuQ2xvY2s7CisgICBlbmQgU3RhbXA7CisKK2JlZ2luCisgICBBZGEuVGV4dF9JTy5QdXRfTGluZSAoIlpMaWIgIiAmIFpMaWIuVmVyc2lvbik7CisKKyAgIGxvb3AKKyAgICAgIEdlbmVyYXRlX0ZpbGU7CisKKyAgICAgIGZvciBMZXZlbCBpbiBaTGliLkNvbXByZXNzaW9uX0xldmVsJ1JhbmdlIGxvb3AKKworICAgICAgICAgQWRhLlRleHRfSU8uUHV0X0xpbmUgKCJMZXZlbCA9IgorICAgICAgICAgICAgJiBaTGliLkNvbXByZXNzaW9uX0xldmVsJ0ltYWdlIChMZXZlbCkpOworCisgICAgICAgICAtLSAgVGVzdCBnZW5lcmljIGludGVyZmFjZS4KKyAgICAgICAgIE9wZW4gICAoRmlsZV9JbiwgSW5fRmlsZSwgSW5fRmlsZV9OYW1lKTsKKyAgICAgICAgIENyZWF0ZSAoRmlsZV9PdXQsIE91dF9GaWxlLCBaX0ZpbGVfTmFtZSk7CisKKyAgICAgICAgIFN0YW1wOworCisgICAgICAgICAtLSAgRGVmbGF0ZSB1c2luZyBnZW5lcmljIGluc3RhbnRpYXRpb24uCisKKyAgICAgICAgIFpMaWIuRGVmbGF0ZV9Jbml0CisgICAgICAgICAgICAgICAoRmlsdGVyICAgPT4gRmlsdGVyLAorICAgICAgICAgICAgICAgIExldmVsICAgID0+IExldmVsLAorICAgICAgICAgICAgICAgIFN0cmF0ZWd5ID0+IFN0cmF0ZWd5LAorICAgICAgICAgICAgICAgIEhlYWRlciAgID0+IEhlYWRlcik7CisKKyAgICAgICAgIFRyYW5zbGF0ZSAoRmlsdGVyKTsKKyAgICAgICAgIFByaW50X1N0YXRpc3RpYyAoIkdlbmVyaWMgY29tcHJlc3MiLCBaTGliLlRvdGFsX091dCAoRmlsdGVyKSk7CisgICAgICAgICBaTGliLkNsb3NlIChGaWx0ZXIpOworCisgICAgICAgICBDbG9zZSAoRmlsZV9Jbik7CisgICAgICAgICBDbG9zZSAoRmlsZV9PdXQpOworCisgICAgICAgICBPcGVuICAgKEZpbGVfSW4sIEluX0ZpbGUsIFpfRmlsZV9OYW1lKTsKKyAgICAgICAgIENyZWF0ZSAoRmlsZV9PdXQsIE91dF9GaWxlLCBPdXRfRmlsZV9OYW1lKTsKKworICAgICAgICAgU3RhbXA7CisKKyAgICAgICAgIC0tICBJbmZsYXRlIHVzaW5nIGdlbmVyaWMgaW5zdGFudGlhdGlvbi4KKworICAgICAgICAgWkxpYi5JbmZsYXRlX0luaXQgKEZpbHRlciwgSGVhZGVyID0+IEhlYWRlcik7CisKKyAgICAgICAgIFRyYW5zbGF0ZSAoRmlsdGVyKTsKKyAgICAgICAgIFByaW50X1N0YXRpc3RpYyAoIkdlbmVyaWMgZGVjb21wcmVzcyIsIFpMaWIuVG90YWxfT3V0IChGaWx0ZXIpKTsKKworICAgICAgICAgWkxpYi5DbG9zZSAoRmlsdGVyKTsKKworICAgICAgICAgQ2xvc2UgKEZpbGVfSW4pOworICAgICAgICAgQ2xvc2UgKEZpbGVfT3V0KTsKKworICAgICAgICAgQ29tcGFyZV9GaWxlcyAoSW5fRmlsZV9OYW1lLCBPdXRfRmlsZV9OYW1lKTsKKworICAgICAgICAgLS0gIFRlc3Qgc3RyZWFtIGludGVyZmFjZS4KKworICAgICAgICAgLS0gIENvbXByZXNzIHRvIHRoZSBiYWNrIHN0cmVhbS4KKworICAgICAgICAgT3BlbiAgIChGaWxlX0luLCBJbl9GaWxlLCBJbl9GaWxlX05hbWUpOworICAgICAgICAgQ3JlYXRlIChGaWxlX0JhY2ssIE91dF9GaWxlLCBaX0ZpbGVfTmFtZSk7CisKKyAgICAgICAgIFN0YW1wOworCisgICAgICAgICBaTGliLlN0cmVhbXMuQ3JlYXRlCisgICAgICAgICAgIChTdHJlYW0gICAgICAgICAgPT4gRmlsZV9aLAorICAgICAgICAgICAgTW9kZSAgICAgICAgICAgID0+IFpMaWIuU3RyZWFtcy5PdXRfU3RyZWFtLAorICAgICAgICAgICAgQmFjayAgICAgICAgICAgID0+IFpMaWIuU3RyZWFtcy5TdHJlYW1fQWNjZXNzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU3RyZWFtIChGaWxlX0JhY2spKSwKKyAgICAgICAgICAgIEJhY2tfQ29tcHJlc3NlZCA9PiBUcnVlLAorICAgICAgICAgICAgTGV2ZWwgICAgICAgICAgID0+IExldmVsLAorICAgICAgICAgICAgU3RyYXRlZ3kgICAgICAgID0+IFN0cmF0ZWd5LAorICAgICAgICAgICAgSGVhZGVyICAgICAgICAgID0+IEhlYWRlcik7CisKKyAgICAgICAgIENvcHlfU3RyZWFtcworICAgICAgICAgICAoU291cmNlID0+IFN0cmVhbSAoRmlsZV9JbikuYWxsLAorICAgICAgICAgICAgVGFyZ2V0ID0+IEZpbGVfWik7CisKKyAgICAgICAgIC0tICBGbHVzaGluZyBpbnRlcm5hbCBidWZmZXJzIHRvIHRoZSBiYWNrIHN0cmVhbS4KKworICAgICAgICAgWkxpYi5TdHJlYW1zLkZsdXNoIChGaWxlX1osIFpMaWIuRmluaXNoKTsKKworICAgICAgICAgUHJpbnRfU3RhdGlzdGljICgiV3JpdGUgY29tcHJlc3MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBaTGliLlN0cmVhbXMuV3JpdGVfVG90YWxfT3V0IChGaWxlX1opKTsKKworICAgICAgICAgWkxpYi5TdHJlYW1zLkNsb3NlIChGaWxlX1opOworCisgICAgICAgICBDbG9zZSAoRmlsZV9Jbik7CisgICAgICAgICBDbG9zZSAoRmlsZV9CYWNrKTsKKworICAgICAgICAgLS0gIENvbXBhcmUgcmVhZGluZyBmcm9tIG9yaWdpbmFsIGZpbGUgYW5kIGZyb20KKyAgICAgICAgIC0tICBkZWNvbXByZXNzaW9uIHN0cmVhbS4KKworICAgICAgICAgT3BlbiAoRmlsZV9JbiwgICBJbl9GaWxlLCBJbl9GaWxlX05hbWUpOworICAgICAgICAgT3BlbiAoRmlsZV9CYWNrLCBJbl9GaWxlLCBaX0ZpbGVfTmFtZSk7CisKKyAgICAgICAgIFpMaWIuU3RyZWFtcy5DcmVhdGUKKyAgICAgICAgICAgKFN0cmVhbSAgICAgICAgICA9PiBGaWxlX1osCisgICAgICAgICAgICBNb2RlICAgICAgICAgICAgPT4gWkxpYi5TdHJlYW1zLkluX1N0cmVhbSwKKyAgICAgICAgICAgIEJhY2sgICAgICAgICAgICA9PiBaTGliLlN0cmVhbXMuU3RyZWFtX0FjY2VzcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFN0cmVhbSAoRmlsZV9CYWNrKSksCisgICAgICAgICAgICBCYWNrX0NvbXByZXNzZWQgPT4gVHJ1ZSwKKyAgICAgICAgICAgIEhlYWRlciAgICAgICAgICA9PiBIZWFkZXIpOworCisgICAgICAgICBTdGFtcDsKKyAgICAgICAgIENvbXBhcmVfU3RyZWFtcyAoU3RyZWFtIChGaWxlX0luKS5hbGwsIEZpbGVfWik7CisKKyAgICAgICAgIFByaW50X1N0YXRpc3RpYyAoIlJlYWQgZGVjb21wcmVzcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFpMaWIuU3RyZWFtcy5SZWFkX1RvdGFsX091dCAoRmlsZV9aKSk7CisKKyAgICAgICAgIFpMaWIuU3RyZWFtcy5DbG9zZSAoRmlsZV9aKTsKKyAgICAgICAgIENsb3NlIChGaWxlX0luKTsKKyAgICAgICAgIENsb3NlIChGaWxlX0JhY2spOworCisgICAgICAgICAtLSAgQ29tcHJlc3MgYnkgcmVhZGluZyBmcm9tIGNvbXByZXNzaW9uIHN0cmVhbS4KKworICAgICAgICAgT3BlbiAoRmlsZV9CYWNrLCBJbl9GaWxlLCBJbl9GaWxlX05hbWUpOworICAgICAgICAgQ3JlYXRlIChGaWxlX091dCwgT3V0X0ZpbGUsIFpfRmlsZV9OYW1lKTsKKworICAgICAgICAgWkxpYi5TdHJlYW1zLkNyZWF0ZQorICAgICAgICAgICAoU3RyZWFtICAgICAgICAgID0+IEZpbGVfWiwKKyAgICAgICAgICAgIE1vZGUgICAgICAgICAgICA9PiBaTGliLlN0cmVhbXMuSW5fU3RyZWFtLAorICAgICAgICAgICAgQmFjayAgICAgICAgICAgID0+IFpMaWIuU3RyZWFtcy5TdHJlYW1fQWNjZXNzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU3RyZWFtIChGaWxlX0JhY2spKSwKKyAgICAgICAgICAgIEJhY2tfQ29tcHJlc3NlZCA9PiBGYWxzZSwKKyAgICAgICAgICAgIExldmVsICAgICAgICAgICA9PiBMZXZlbCwKKyAgICAgICAgICAgIFN0cmF0ZWd5ICAgICAgICA9PiBTdHJhdGVneSwKKyAgICAgICAgICAgIEhlYWRlciAgICAgICAgICA9PiBIZWFkZXIpOworCisgICAgICAgICBTdGFtcDsKKyAgICAgICAgIENvcHlfU3RyZWFtcworICAgICAgICAgICAoU291cmNlID0+IEZpbGVfWiwKKyAgICAgICAgICAgIFRhcmdldCA9PiBTdHJlYW0gKEZpbGVfT3V0KS5hbGwpOworCisgICAgICAgICBQcmludF9TdGF0aXN0aWMgKCJSZWFkIGNvbXByZXNzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWkxpYi5TdHJlYW1zLlJlYWRfVG90YWxfT3V0IChGaWxlX1opKTsKKworICAgICAgICAgWkxpYi5TdHJlYW1zLkNsb3NlIChGaWxlX1opOworCisgICAgICAgICBDbG9zZSAoRmlsZV9PdXQpOworICAgICAgICAgQ2xvc2UgKEZpbGVfQmFjayk7CisKKyAgICAgICAgIC0tICBEZWNvbXByZXNzIHRvIGRlY29tcHJlc3Npb24gc3RyZWFtLgorCisgICAgICAgICBPcGVuICAgKEZpbGVfSW4sICAgSW5fRmlsZSwgWl9GaWxlX05hbWUpOworICAgICAgICAgQ3JlYXRlIChGaWxlX0JhY2ssIE91dF9GaWxlLCBPdXRfRmlsZV9OYW1lKTsKKworICAgICAgICAgWkxpYi5TdHJlYW1zLkNyZWF0ZQorICAgICAgICAgICAoU3RyZWFtICAgICAgICAgID0+IEZpbGVfWiwKKyAgICAgICAgICAgIE1vZGUgICAgICAgICAgICA9PiBaTGliLlN0cmVhbXMuT3V0X1N0cmVhbSwKKyAgICAgICAgICAgIEJhY2sgICAgICAgICAgICA9PiBaTGliLlN0cmVhbXMuU3RyZWFtX0FjY2VzcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFN0cmVhbSAoRmlsZV9CYWNrKSksCisgICAgICAgICAgICBCYWNrX0NvbXByZXNzZWQgPT4gRmFsc2UsCisgICAgICAgICAgICBIZWFkZXIgICAgICAgICAgPT4gSGVhZGVyKTsKKworICAgICAgICAgU3RhbXA7CisKKyAgICAgICAgIENvcHlfU3RyZWFtcworICAgICAgICAgICAoU291cmNlID0+IFN0cmVhbSAoRmlsZV9JbikuYWxsLAorICAgICAgICAgICAgVGFyZ2V0ID0+IEZpbGVfWik7CisKKyAgICAgICAgIFByaW50X1N0YXRpc3RpYyAoIldyaXRlIGRlY29tcHJlc3MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBaTGliLlN0cmVhbXMuV3JpdGVfVG90YWxfT3V0IChGaWxlX1opKTsKKworICAgICAgICAgWkxpYi5TdHJlYW1zLkNsb3NlIChGaWxlX1opOworICAgICAgICAgQ2xvc2UgKEZpbGVfSW4pOworICAgICAgICAgQ2xvc2UgKEZpbGVfQmFjayk7CisKKyAgICAgICAgIENvbXBhcmVfRmlsZXMgKEluX0ZpbGVfTmFtZSwgT3V0X0ZpbGVfTmFtZSk7CisgICAgICBlbmQgbG9vcDsKKworICAgICAgQWRhLlRleHRfSU8uUHV0X0xpbmUgKENvdW50J0ltYWdlIChGaWxlX1NpemUpICYgIiBPay4iKTsKKworICAgICAgZXhpdCB3aGVuIG5vdCBDb250aW51b3VzOworCisgICAgICBGaWxlX1NpemUgOj0gRmlsZV9TaXplICsgMTsKKyAgIGVuZCBsb29wOworZW5kIFRlc3Q7CmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi9hZGEvemxpYi1zdHJlYW1zLmFkYiBiL3NyYy9jb250cmliL2FkYS96bGliLXN0cmVhbXMuYWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2NDk3YmEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29udHJpYi9hZGEvemxpYi1zdHJlYW1zLmFkYgpAQCAtMCwwICsxLDIyNSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIFpMaWIgZm9yIEFkYSB0aGljayBiaW5kaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gIENvcHlyaWdodCAoQykgMjAwMi0yMDAzIERtaXRyaXkgQW5pc2lta292ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gIE9wZW4gc291cmNlIGxpY2Vuc2UgaW5mb3JtYXRpb24gaXMgaW4gdGhlIHpsaWIuYWRzIGZpbGUuICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistLSAgJElkOiB6bGliLXN0cmVhbXMuYWRiLHYgMS4xMCAyMDA0LzA1LzMxIDEwOjUzOjQwIHZhZ3VsIEV4cCAkCisKK3dpdGggQWRhLlVuY2hlY2tlZF9EZWFsbG9jYXRpb247CisKK3BhY2thZ2UgYm9keSBaTGliLlN0cmVhbXMgaXMKKworICAgLS0tLS0tLS0tLS0KKyAgIC0tIENsb3NlIC0tCisgICAtLS0tLS0tLS0tLQorCisgICBwcm9jZWR1cmUgQ2xvc2UgKFN0cmVhbSA6IGluIG91dCBTdHJlYW1fVHlwZSkgaXMKKyAgICAgIHByb2NlZHVyZSBGcmVlIGlzIG5ldyBBZGEuVW5jaGVja2VkX0RlYWxsb2NhdGlvbgorICAgICAgICAgKFN0cmVhbV9FbGVtZW50X0FycmF5LCBCdWZmZXJfQWNjZXNzKTsKKyAgIGJlZ2luCisgICAgICBpZiBTdHJlYW0uTW9kZSA9IE91dF9TdHJlYW0gb3IgU3RyZWFtLk1vZGUgPSBEdXBsZXggdGhlbgorICAgICAgICAgLS0gIFdlIHNob3VsZCBmbHVzaCB0aGUgZGF0YSB3cml0dGVuIGJ5IHRoZSB3cml0ZXIuCisKKyAgICAgICAgIEZsdXNoIChTdHJlYW0sIEZpbmlzaCk7CisKKyAgICAgICAgIENsb3NlIChTdHJlYW0uV3JpdGVyKTsKKyAgICAgIGVuZCBpZjsKKworICAgICAgaWYgU3RyZWFtLk1vZGUgPSBJbl9TdHJlYW0gb3IgU3RyZWFtLk1vZGUgPSBEdXBsZXggdGhlbgorICAgICAgICAgQ2xvc2UgKFN0cmVhbS5SZWFkZXIpOworICAgICAgICAgRnJlZSAoU3RyZWFtLkJ1ZmZlcik7CisgICAgICBlbmQgaWY7CisgICBlbmQgQ2xvc2U7CisKKyAgIC0tLS0tLS0tLS0tLQorICAgLS0gQ3JlYXRlIC0tCisgICAtLS0tLS0tLS0tLS0KKworICAgcHJvY2VkdXJlIENyZWF0ZQorICAgICAoU3RyZWFtICAgICAgICAgICAgOiAgICBvdXQgU3RyZWFtX1R5cGU7CisgICAgICBNb2RlICAgICAgICAgICAgICA6IGluICAgICBTdHJlYW1fTW9kZTsKKyAgICAgIEJhY2sgICAgICAgICAgICAgIDogaW4gICAgIFN0cmVhbV9BY2Nlc3M7CisgICAgICBCYWNrX0NvbXByZXNzZWQgICA6IGluICAgICBCb29sZWFuOworICAgICAgTGV2ZWwgICAgICAgICAgICAgOiBpbiAgICAgQ29tcHJlc3Npb25fTGV2ZWwgOj0gRGVmYXVsdF9Db21wcmVzc2lvbjsKKyAgICAgIFN0cmF0ZWd5ICAgICAgICAgIDogaW4gICAgIFN0cmF0ZWd5X1R5cGUgICAgIDo9IERlZmF1bHRfU3RyYXRlZ3k7CisgICAgICBIZWFkZXIgICAgICAgICAgICA6IGluICAgICBIZWFkZXJfVHlwZSAgICAgICA6PSBEZWZhdWx0OworICAgICAgUmVhZF9CdWZmZXJfU2l6ZSAgOiBpbiAgICAgQWRhLlN0cmVhbXMuU3RyZWFtX0VsZW1lbnRfT2Zmc2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6PSBEZWZhdWx0X0J1ZmZlcl9TaXplOworICAgICAgV3JpdGVfQnVmZmVyX1NpemUgOiBpbiAgICAgQWRhLlN0cmVhbXMuU3RyZWFtX0VsZW1lbnRfT2Zmc2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6PSBEZWZhdWx0X0J1ZmZlcl9TaXplKQorICAgaXMKKworICAgICAgc3VidHlwZSBCdWZmZXJfU3VidHlwZSBpcyBTdHJlYW1fRWxlbWVudF9BcnJheSAoMSAuLiBSZWFkX0J1ZmZlcl9TaXplKTsKKworICAgICAgcHJvY2VkdXJlIEluaXRfRmlsdGVyCisgICAgICAgICAoRmlsdGVyICAgOiBpbiBvdXQgRmlsdGVyX1R5cGU7CisgICAgICAgICAgQ29tcHJlc3MgOiBpbiAgICAgQm9vbGVhbik7CisKKyAgICAgIC0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAtLSBJbml0X0ZpbHRlciAtLQorICAgICAgLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgcHJvY2VkdXJlIEluaXRfRmlsdGVyCisgICAgICAgICAoRmlsdGVyICAgOiBpbiBvdXQgRmlsdGVyX1R5cGU7CisgICAgICAgICAgQ29tcHJlc3MgOiBpbiAgICAgQm9vbGVhbikgaXMKKyAgICAgIGJlZ2luCisgICAgICAgICBpZiBDb21wcmVzcyB0aGVuCisgICAgICAgICAgICBEZWZsYXRlX0luaXQKKyAgICAgICAgICAgICAgKEZpbHRlciwgTGV2ZWwsIFN0cmF0ZWd5LCBIZWFkZXIgPT4gSGVhZGVyKTsKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEluZmxhdGVfSW5pdCAoRmlsdGVyLCBIZWFkZXIgPT4gSGVhZGVyKTsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgIGVuZCBJbml0X0ZpbHRlcjsKKworICAgYmVnaW4KKyAgICAgIFN0cmVhbS5CYWNrIDo9IEJhY2s7CisgICAgICBTdHJlYW0uTW9kZSA6PSBNb2RlOworCisgICAgICBpZiBNb2RlID0gT3V0X1N0cmVhbSBvciBNb2RlID0gRHVwbGV4IHRoZW4KKyAgICAgICAgIEluaXRfRmlsdGVyIChTdHJlYW0uV3JpdGVyLCBCYWNrX0NvbXByZXNzZWQpOworICAgICAgICAgU3RyZWFtLkJ1ZmZlcl9TaXplIDo9IFdyaXRlX0J1ZmZlcl9TaXplOworICAgICAgZWxzZQorICAgICAgICAgU3RyZWFtLkJ1ZmZlcl9TaXplIDo9IDA7CisgICAgICBlbmQgaWY7CisKKyAgICAgIGlmIE1vZGUgPSBJbl9TdHJlYW0gb3IgTW9kZSA9IER1cGxleCB0aGVuCisgICAgICAgICBJbml0X0ZpbHRlciAoU3RyZWFtLlJlYWRlciwgbm90IEJhY2tfQ29tcHJlc3NlZCk7CisKKyAgICAgICAgIFN0cmVhbS5CdWZmZXIgICAgIDo9IG5ldyBCdWZmZXJfU3VidHlwZTsKKyAgICAgICAgIFN0cmVhbS5SZXN0X0ZpcnN0IDo9IFN0cmVhbS5CdWZmZXInTGFzdCArIDE7CisgICAgICAgICBTdHJlYW0uUmVzdF9MYXN0ICA6PSBTdHJlYW0uQnVmZmVyJ0xhc3Q7CisgICAgICBlbmQgaWY7CisgICBlbmQgQ3JlYXRlOworCisgICAtLS0tLS0tLS0tLQorICAgLS0gRmx1c2ggLS0KKyAgIC0tLS0tLS0tLS0tCisKKyAgIHByb2NlZHVyZSBGbHVzaAorICAgICAoU3RyZWFtIDogaW4gb3V0IFN0cmVhbV9UeXBlOworICAgICAgTW9kZSAgIDogaW4gICAgIEZsdXNoX01vZGUgOj0gU3luY19GbHVzaCkKKyAgIGlzCisgICAgICBCdWZmZXIgOiBTdHJlYW1fRWxlbWVudF9BcnJheSAoMSAuLiBTdHJlYW0uQnVmZmVyX1NpemUpOworICAgICAgTGFzdCAgIDogU3RyZWFtX0VsZW1lbnRfT2Zmc2V0OworICAgYmVnaW4KKyAgICAgIGxvb3AKKyAgICAgICAgIEZsdXNoIChTdHJlYW0uV3JpdGVyLCBCdWZmZXIsIExhc3QsIE1vZGUpOworCisgICAgICAgICBBZGEuU3RyZWFtcy5Xcml0ZSAoU3RyZWFtLkJhY2suYWxsLCBCdWZmZXIgKDEgLi4gTGFzdCkpOworCisgICAgICAgICBleGl0IHdoZW4gTGFzdCA8IEJ1ZmZlcidMYXN0OworICAgICAgZW5kIGxvb3A7CisgICBlbmQgRmx1c2g7CisKKyAgIC0tLS0tLS0tLS0tLS0KKyAgIC0tIElzX09wZW4gLS0KKyAgIC0tLS0tLS0tLS0tLS0KKworICAgZnVuY3Rpb24gSXNfT3BlbiAoU3RyZWFtIDogU3RyZWFtX1R5cGUpIHJldHVybiBCb29sZWFuIGlzCisgICBiZWdpbgorICAgICAgcmV0dXJuIElzX09wZW4gKFN0cmVhbS5SZWFkZXIpIG9yIGVsc2UgSXNfT3BlbiAoU3RyZWFtLldyaXRlcik7CisgICBlbmQgSXNfT3BlbjsKKworICAgLS0tLS0tLS0tLQorICAgLS0gUmVhZCAtLQorICAgLS0tLS0tLS0tLQorCisgICBwcm9jZWR1cmUgUmVhZAorICAgICAoU3RyZWFtIDogaW4gb3V0IFN0cmVhbV9UeXBlOworICAgICAgSXRlbSAgIDogICAgb3V0IFN0cmVhbV9FbGVtZW50X0FycmF5OworICAgICAgTGFzdCAgIDogICAgb3V0IFN0cmVhbV9FbGVtZW50X09mZnNldCkKKyAgIGlzCisKKyAgICAgIHByb2NlZHVyZSBSZWFkCisgICAgICAgIChJdGVtIDogb3V0IFN0cmVhbV9FbGVtZW50X0FycmF5OworICAgICAgICAgTGFzdCA6IG91dCBTdHJlYW1fRWxlbWVudF9PZmZzZXQpOworCisgICAgICAtLS0tLS0tLS0tCisgICAgICAtLSBSZWFkIC0tCisgICAgICAtLS0tLS0tLS0tCisKKyAgICAgIHByb2NlZHVyZSBSZWFkCisgICAgICAgIChJdGVtIDogb3V0IFN0cmVhbV9FbGVtZW50X0FycmF5OworICAgICAgICAgTGFzdCA6IG91dCBTdHJlYW1fRWxlbWVudF9PZmZzZXQpIGlzCisgICAgICBiZWdpbgorICAgICAgICAgQWRhLlN0cmVhbXMuUmVhZCAoU3RyZWFtLkJhY2suYWxsLCBJdGVtLCBMYXN0KTsKKyAgICAgIGVuZCBSZWFkOworCisgICAgICBwcm9jZWR1cmUgUmVhZCBpcyBuZXcgWkxpYi5SZWFkCisgICAgICAgICAoUmVhZCAgICAgICA9PiBSZWFkLAorICAgICAgICAgIEJ1ZmZlciAgICAgPT4gU3RyZWFtLkJ1ZmZlci5hbGwsCisgICAgICAgICAgUmVzdF9GaXJzdCA9PiBTdHJlYW0uUmVzdF9GaXJzdCwKKyAgICAgICAgICBSZXN0X0xhc3QgID0+IFN0cmVhbS5SZXN0X0xhc3QpOworCisgICBiZWdpbgorICAgICAgUmVhZCAoU3RyZWFtLlJlYWRlciwgSXRlbSwgTGFzdCk7CisgICBlbmQgUmVhZDsKKworICAgLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gUmVhZF9Ub3RhbF9JbiAtLQorICAgLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICBmdW5jdGlvbiBSZWFkX1RvdGFsX0luIChTdHJlYW0gOiBpbiBTdHJlYW1fVHlwZSkgcmV0dXJuIENvdW50IGlzCisgICBiZWdpbgorICAgICAgcmV0dXJuIFRvdGFsX0luIChTdHJlYW0uUmVhZGVyKTsKKyAgIGVuZCBSZWFkX1RvdGFsX0luOworCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gUmVhZF9Ub3RhbF9PdXQgLS0KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgIGZ1bmN0aW9uIFJlYWRfVG90YWxfT3V0IChTdHJlYW0gOiBpbiBTdHJlYW1fVHlwZSkgcmV0dXJuIENvdW50IGlzCisgICBiZWdpbgorICAgICAgcmV0dXJuIFRvdGFsX091dCAoU3RyZWFtLlJlYWRlcik7CisgICBlbmQgUmVhZF9Ub3RhbF9PdXQ7CisKKyAgIC0tLS0tLS0tLS0tCisgICAtLSBXcml0ZSAtLQorICAgLS0tLS0tLS0tLS0KKworICAgcHJvY2VkdXJlIFdyaXRlCisgICAgIChTdHJlYW0gOiBpbiBvdXQgU3RyZWFtX1R5cGU7CisgICAgICBJdGVtICAgOiBpbiAgICAgU3RyZWFtX0VsZW1lbnRfQXJyYXkpCisgICBpcworCisgICAgICBwcm9jZWR1cmUgV3JpdGUgKEl0ZW0gOiBpbiBTdHJlYW1fRWxlbWVudF9BcnJheSk7CisKKyAgICAgIC0tLS0tLS0tLS0tCisgICAgICAtLSBXcml0ZSAtLQorICAgICAgLS0tLS0tLS0tLS0KKworICAgICAgcHJvY2VkdXJlIFdyaXRlIChJdGVtIDogaW4gU3RyZWFtX0VsZW1lbnRfQXJyYXkpIGlzCisgICAgICBiZWdpbgorICAgICAgICAgQWRhLlN0cmVhbXMuV3JpdGUgKFN0cmVhbS5CYWNrLmFsbCwgSXRlbSk7CisgICAgICBlbmQgV3JpdGU7CisKKyAgICAgIHByb2NlZHVyZSBXcml0ZSBpcyBuZXcgWkxpYi5Xcml0ZQorICAgICAgICAgKFdyaXRlICAgICAgID0+IFdyaXRlLAorICAgICAgICAgIEJ1ZmZlcl9TaXplID0+IFN0cmVhbS5CdWZmZXJfU2l6ZSk7CisKKyAgIGJlZ2luCisgICAgICBXcml0ZSAoU3RyZWFtLldyaXRlciwgSXRlbSwgTm9fRmx1c2gpOworICAgZW5kIFdyaXRlOworCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gV3JpdGVfVG90YWxfSW4gLS0KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgIGZ1bmN0aW9uIFdyaXRlX1RvdGFsX0luIChTdHJlYW0gOiBpbiBTdHJlYW1fVHlwZSkgcmV0dXJuIENvdW50IGlzCisgICBiZWdpbgorICAgICAgcmV0dXJuIFRvdGFsX0luIChTdHJlYW0uV3JpdGVyKTsKKyAgIGVuZCBXcml0ZV9Ub3RhbF9JbjsKKworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBXcml0ZV9Ub3RhbF9PdXQgLS0KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICBmdW5jdGlvbiBXcml0ZV9Ub3RhbF9PdXQgKFN0cmVhbSA6IGluIFN0cmVhbV9UeXBlKSByZXR1cm4gQ291bnQgaXMKKyAgIGJlZ2luCisgICAgICByZXR1cm4gVG90YWxfT3V0IChTdHJlYW0uV3JpdGVyKTsKKyAgIGVuZCBXcml0ZV9Ub3RhbF9PdXQ7CisKK2VuZCBaTGliLlN0cmVhbXM7CmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi9hZGEvemxpYi1zdHJlYW1zLmFkcyBiL3NyYy9jb250cmliL2FkYS96bGliLXN0cmVhbXMuYWRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMjZjZDQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29udHJpYi9hZGEvemxpYi1zdHJlYW1zLmFkcwpAQCAtMCwwICsxLDExNCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIFpMaWIgZm9yIEFkYSB0aGljayBiaW5kaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gIENvcHlyaWdodCAoQykgMjAwMi0yMDAzIERtaXRyaXkgQW5pc2lta292ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gIE9wZW4gc291cmNlIGxpY2Vuc2UgaW5mb3JtYXRpb24gaXMgaW4gdGhlIHpsaWIuYWRzIGZpbGUuICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistLSAgJElkOiB6bGliLXN0cmVhbXMuYWRzLHYgMS4xMiAyMDA0LzA1LzMxIDEwOjUzOjQwIHZhZ3VsIEV4cCAkCisKK3BhY2thZ2UgWkxpYi5TdHJlYW1zIGlzCisKKyAgIHR5cGUgU3RyZWFtX01vZGUgaXMgKEluX1N0cmVhbSwgT3V0X1N0cmVhbSwgRHVwbGV4KTsKKworICAgdHlwZSBTdHJlYW1fQWNjZXNzIGlzIGFjY2VzcyBhbGwgQWRhLlN0cmVhbXMuUm9vdF9TdHJlYW1fVHlwZSdDbGFzczsKKworICAgdHlwZSBTdHJlYW1fVHlwZSBpcworICAgICAgbmV3IEFkYS5TdHJlYW1zLlJvb3RfU3RyZWFtX1R5cGUgd2l0aCBwcml2YXRlOworCisgICBwcm9jZWR1cmUgUmVhZAorICAgICAoU3RyZWFtIDogaW4gb3V0IFN0cmVhbV9UeXBlOworICAgICAgSXRlbSAgIDogICAgb3V0IEFkYS5TdHJlYW1zLlN0cmVhbV9FbGVtZW50X0FycmF5OworICAgICAgTGFzdCAgIDogICAgb3V0IEFkYS5TdHJlYW1zLlN0cmVhbV9FbGVtZW50X09mZnNldCk7CisKKyAgIHByb2NlZHVyZSBXcml0ZQorICAgICAoU3RyZWFtIDogaW4gb3V0IFN0cmVhbV9UeXBlOworICAgICAgSXRlbSAgIDogaW4gICAgIEFkYS5TdHJlYW1zLlN0cmVhbV9FbGVtZW50X0FycmF5KTsKKworICAgcHJvY2VkdXJlIEZsdXNoCisgICAgIChTdHJlYW0gOiBpbiBvdXQgU3RyZWFtX1R5cGU7CisgICAgICBNb2RlICAgOiBpbiAgICAgRmx1c2hfTW9kZSA6PSBTeW5jX0ZsdXNoKTsKKyAgIC0tICBGbHVzaCB0aGUgd3JpdHRlbiBkYXRhIHRvIHRoZSBiYWNrIHN0cmVhbSwKKyAgIC0tICBhbGwgZGF0YSBwbGFjZWQgdG8gdGhlIGNvbXByZXNzb3IgaXMgZmx1c2hpbmcgdG8gdGhlIEJhY2sgc3RyZWFtLgorICAgLS0gIFNob3VsZCBub3QgYmUgdXNlZCB1bnRpbCBuZWNlc3NhcnksIGJlY2F1c2UgaXQgaXMgZGVjcmVhc2luZworICAgLS0gIGNvbXByZXNzaW9uLgorCisgICBmdW5jdGlvbiBSZWFkX1RvdGFsX0luIChTdHJlYW0gOiBpbiBTdHJlYW1fVHlwZSkgcmV0dXJuIENvdW50OworICAgcHJhZ21hIElubGluZSAoUmVhZF9Ub3RhbF9Jbik7CisgICAtLSAgUmV0dXJuIHRvdGFsIG51bWJlciBvZiBieXRlcyByZWFkIGZyb20gYmFjayBzdHJlYW0gc28gZmFyLgorCisgICBmdW5jdGlvbiBSZWFkX1RvdGFsX091dCAoU3RyZWFtIDogaW4gU3RyZWFtX1R5cGUpIHJldHVybiBDb3VudDsKKyAgIHByYWdtYSBJbmxpbmUgKFJlYWRfVG90YWxfT3V0KTsKKyAgIC0tICBSZXR1cm4gdG90YWwgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgc28gZmFyLgorCisgICBmdW5jdGlvbiBXcml0ZV9Ub3RhbF9JbiAoU3RyZWFtIDogaW4gU3RyZWFtX1R5cGUpIHJldHVybiBDb3VudDsKKyAgIHByYWdtYSBJbmxpbmUgKFdyaXRlX1RvdGFsX0luKTsKKyAgIC0tICBSZXR1cm4gdG90YWwgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gc28gZmFyLgorCisgICBmdW5jdGlvbiBXcml0ZV9Ub3RhbF9PdXQgKFN0cmVhbSA6IGluIFN0cmVhbV9UeXBlKSByZXR1cm4gQ291bnQ7CisgICBwcmFnbWEgSW5saW5lIChXcml0ZV9Ub3RhbF9PdXQpOworICAgLS0gIFJldHVybiB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiB0byB0aGUgYmFjayBzdHJlYW0uCisKKyAgIHByb2NlZHVyZSBDcmVhdGUKKyAgICAgKFN0cmVhbSAgICAgICAgICAgIDogICAgb3V0IFN0cmVhbV9UeXBlOworICAgICAgTW9kZSAgICAgICAgICAgICAgOiBpbiAgICAgU3RyZWFtX01vZGU7CisgICAgICBCYWNrICAgICAgICAgICAgICA6IGluICAgICBTdHJlYW1fQWNjZXNzOworICAgICAgQmFja19Db21wcmVzc2VkICAgOiBpbiAgICAgQm9vbGVhbjsKKyAgICAgIExldmVsICAgICAgICAgICAgIDogaW4gICAgIENvbXByZXNzaW9uX0xldmVsIDo9IERlZmF1bHRfQ29tcHJlc3Npb247CisgICAgICBTdHJhdGVneSAgICAgICAgICA6IGluICAgICBTdHJhdGVneV9UeXBlICAgICA6PSBEZWZhdWx0X1N0cmF0ZWd5OworICAgICAgSGVhZGVyICAgICAgICAgICAgOiBpbiAgICAgSGVhZGVyX1R5cGUgICAgICAgOj0gRGVmYXVsdDsKKyAgICAgIFJlYWRfQnVmZmVyX1NpemUgIDogaW4gICAgIEFkYS5TdHJlYW1zLlN0cmVhbV9FbGVtZW50X09mZnNldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOj0gRGVmYXVsdF9CdWZmZXJfU2l6ZTsKKyAgICAgIFdyaXRlX0J1ZmZlcl9TaXplIDogaW4gICAgIEFkYS5TdHJlYW1zLlN0cmVhbV9FbGVtZW50X09mZnNldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOj0gRGVmYXVsdF9CdWZmZXJfU2l6ZSk7CisgICAtLSAgQ3JlYXRlIHRoZSBDb21yZXNzaW9uL0RlY29tcHJlc3Npb24gc3RyZWFtLgorICAgLS0gIElmIG1vZGUgaXMgSW5fU3RyZWFtIHRoZW4gV3JpdGUgb3BlcmF0aW9uIGlzIGRpc2FibGVkLgorICAgLS0gIElmIG1vZGUgaXMgT3V0X1N0cmVhbSB0aGVuIFJlYWQgb3BlcmF0aW9uIGlzIGRpc2FibGVkLgorCisgICAtLSAgSWYgQmFja19Db21wcmVzc2VkIGlzIHRydWUgdGhlbgorICAgLS0gIERhdGEgd3JpdHRlbiB0byB0aGUgU3RyZWFtIGlzIGNvbXByZXNzaW5nIHRvIHRoZSBCYWNrIHN0cmVhbQorICAgLS0gIGFuZCBkYXRhIHJlYWQgZnJvbSB0aGUgU3RyZWFtIGlzIGRlY29tcHJlc3NlZCBkYXRhIGZyb20gdGhlIEJhY2sgc3RyZWFtLgorCisgICAtLSAgSWYgQmFja19Db21wcmVzc2VkIGlzIGZhbHNlIHRoZW4KKyAgIC0tICBEYXRhIHdyaXR0ZW4gdG8gdGhlIFN0cmVhbSBpcyBkZWNvbXByZXNzaW5nIHRvIHRoZSBCYWNrIHN0cmVhbQorICAgLS0gIGFuZCBkYXRhIHJlYWQgZnJvbSB0aGUgU3RyZWFtIGlzIGNvbXByZXNzZWQgZGF0YSBmcm9tIHRoZSBCYWNrIHN0cmVhbS4KKworICAgLS0gICEhISBXaGVuIHRoZSBOZWVkX0hlYWRlciBpcyBGYWxzZSBaTGliLUFkYSBpcyB1c2luZyB1bmRvY3VtZW50ZWQKKyAgIC0tICBaTGliIDEuMS40IGZ1bmN0aW9uYWxpdHkgdG8gZG8gbm90IGNyZWF0ZS93YWl0IGZvciBaTGliIGhlYWRlcnMuCisKKyAgIGZ1bmN0aW9uIElzX09wZW4gKFN0cmVhbSA6IFN0cmVhbV9UeXBlKSByZXR1cm4gQm9vbGVhbjsKKworICAgcHJvY2VkdXJlIENsb3NlIChTdHJlYW0gOiBpbiBvdXQgU3RyZWFtX1R5cGUpOworCitwcml2YXRlCisKKyAgIHVzZSBBZGEuU3RyZWFtczsKKworICAgdHlwZSBCdWZmZXJfQWNjZXNzIGlzIGFjY2VzcyBhbGwgU3RyZWFtX0VsZW1lbnRfQXJyYXk7CisKKyAgIHR5cGUgU3RyZWFtX1R5cGUKKyAgICAgaXMgbmV3IFJvb3RfU3RyZWFtX1R5cGUgd2l0aAorICAgcmVjb3JkCisgICAgICBNb2RlICAgICAgIDogU3RyZWFtX01vZGU7CisKKyAgICAgIEJ1ZmZlciAgICAgOiBCdWZmZXJfQWNjZXNzOworICAgICAgUmVzdF9GaXJzdCA6IFN0cmVhbV9FbGVtZW50X09mZnNldDsKKyAgICAgIFJlc3RfTGFzdCAgOiBTdHJlYW1fRWxlbWVudF9PZmZzZXQ7CisgICAgICAtLSAgQnVmZmVyIGZvciBSZWFkIG9wZXJhdGlvbi4KKyAgICAgIC0tICBXZSBuZWVkIHRvIGhhdmUgdGhpcyBidWZmZXIgaW4gdGhlIHJlY29yZAorICAgICAgLS0gIGJlY2F1c2Ugbm90IGFsbCByZWFkIGRhdGEgZnJvbSBiYWNrIHN0cmVhbQorICAgICAgLS0gIGNvdWxkIGJlIHByb2Nlc3NlZCBkdXJpbmcgdGhlIHJlYWQgb3BlcmF0aW9uLgorCisgICAgICBCdWZmZXJfU2l6ZSA6IFN0cmVhbV9FbGVtZW50X09mZnNldDsKKyAgICAgIC0tICBCdWZmZXIgc2l6ZSBmb3Igd3JpdGUgb3BlcmF0aW9uLgorICAgICAgLS0gIFdlIGRvIG5vdCBuZWVkIHRvIGhhdmUgdGhpcyBidWZmZXIKKyAgICAgIC0tICBpbiB0aGUgcmVjb3JkIGJlY2F1c2UgYWxsIGRhdGEgY291bGQgYmUKKyAgICAgIC0tICBwcm9jZXNzZWQgaW4gdGhlIHdyaXRlIG9wZXJhdGlvbi4KKworICAgICAgQmFjayAgICAgICA6IFN0cmVhbV9BY2Nlc3M7CisgICAgICBSZWFkZXIgICAgIDogRmlsdGVyX1R5cGU7CisgICAgICBXcml0ZXIgICAgIDogRmlsdGVyX1R5cGU7CisgICBlbmQgcmVjb3JkOworCitlbmQgWkxpYi5TdHJlYW1zOwpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvYWRhL3psaWItdGhpbi5hZGIgYi9zcmMvY29udHJpYi9hZGEvemxpYi10aGluLmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2E0YTcxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbnRyaWIvYWRhL3psaWItdGhpbi5hZGIKQEAgLTAsMCArMSwxNDEgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBaTGliIGZvciBBZGEgdGhpY2sgYmluZGluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICBDb3B5cmlnaHQgKEMpIDIwMDItMjAwMyBEbWl0cml5IEFuaXNpbWtvdiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICBPcGVuIHNvdXJjZSBsaWNlbnNlIGluZm9ybWF0aW9uIGlzIGluIHRoZSB6bGliLmFkcyBmaWxlLiAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLS0gICRJZDogemxpYi10aGluLmFkYix2IDEuOCAyMDAzLzEyLzE0IDE4OjI3OjMxIHZhZ3VsIEV4cCAkCisKK3BhY2thZ2UgYm9keSBaTGliLlRoaW4gaXMKKworICAgWkxJQl9WRVJTSU9OICA6IGNvbnN0YW50IENoYXJzX1B0ciA6PSB6bGliVmVyc2lvbjsKKworICAgWl9TdHJlYW1fU2l6ZSA6IGNvbnN0YW50IEludCA6PSBaX1N0cmVhbSdTaXplIC8gU3lzdGVtLlN0b3JhZ2VfVW5pdDsKKworICAgLS0tLS0tLS0tLS0tLS0KKyAgIC0tIEF2YWlsX0luIC0tCisgICAtLS0tLS0tLS0tLS0tLQorCisgICBmdW5jdGlvbiBBdmFpbF9JbiAoU3RybSA6IGluIFpfU3RyZWFtKSByZXR1cm4gVUludCBpcworICAgYmVnaW4KKyAgICAgIHJldHVybiBTdHJtLkF2YWlsX0luOworICAgZW5kIEF2YWlsX0luOworCisgICAtLS0tLS0tLS0tLS0tLS0KKyAgIC0tIEF2YWlsX091dCAtLQorICAgLS0tLS0tLS0tLS0tLS0tCisKKyAgIGZ1bmN0aW9uIEF2YWlsX091dCAoU3RybSA6IGluIFpfU3RyZWFtKSByZXR1cm4gVUludCBpcworICAgYmVnaW4KKyAgICAgIHJldHVybiBTdHJtLkF2YWlsX091dDsKKyAgIGVuZCBBdmFpbF9PdXQ7CisKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gRGVmbGF0ZV9Jbml0IC0tCisgICAtLS0tLS0tLS0tLS0tLS0tLS0KKworICAgZnVuY3Rpb24gRGVmbGF0ZV9Jbml0CisgICAgIChzdHJtICAgICAgIDogWl9TdHJlYW1wOworICAgICAgbGV2ZWwgICAgICA6IEludDsKKyAgICAgIG1ldGhvZCAgICAgOiBJbnQ7CisgICAgICB3aW5kb3dCaXRzIDogSW50OworICAgICAgbWVtTGV2ZWwgICA6IEludDsKKyAgICAgIHN0cmF0ZWd5ICAgOiBJbnQpCisgICAgICByZXR1cm4gICAgICAgSW50IGlzCisgICBiZWdpbgorICAgICAgcmV0dXJuIGRlZmxhdGVJbml0MgorICAgICAgICAgICAgICAgKHN0cm0sCisgICAgICAgICAgICAgICAgbGV2ZWwsCisgICAgICAgICAgICAgICAgbWV0aG9kLAorICAgICAgICAgICAgICAgIHdpbmRvd0JpdHMsCisgICAgICAgICAgICAgICAgbWVtTGV2ZWwsCisgICAgICAgICAgICAgICAgc3RyYXRlZ3ksCisgICAgICAgICAgICAgICAgWkxJQl9WRVJTSU9OLAorICAgICAgICAgICAgICAgIFpfU3RyZWFtX1NpemUpOworICAgZW5kIERlZmxhdGVfSW5pdDsKKworICAgLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBJbmZsYXRlX0luaXQgLS0KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLQorCisgICBmdW5jdGlvbiBJbmZsYXRlX0luaXQgKHN0cm0gOiBaX1N0cmVhbXA7IHdpbmRvd0JpdHMgOiBJbnQpIHJldHVybiBJbnQgaXMKKyAgIGJlZ2luCisgICAgICByZXR1cm4gaW5mbGF0ZUluaXQyIChzdHJtLCB3aW5kb3dCaXRzLCBaTElCX1ZFUlNJT04sIFpfU3RyZWFtX1NpemUpOworICAgZW5kIEluZmxhdGVfSW5pdDsKKworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBMYXN0X0Vycm9yX01lc3NhZ2UgLS0KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICBmdW5jdGlvbiBMYXN0X0Vycm9yX01lc3NhZ2UgKFN0cm0gOiBpbiBaX1N0cmVhbSkgcmV0dXJuIFN0cmluZyBpcworICAgICAgdXNlIEludGVyZmFjZXMuQy5TdHJpbmdzOworICAgYmVnaW4KKyAgICAgIGlmIFN0cm0ubXNnID0gTnVsbF9QdHIgdGhlbgorICAgICAgICAgcmV0dXJuICIiOworICAgICAgZWxzZQorICAgICAgICAgcmV0dXJuIFZhbHVlIChTdHJtLm1zZyk7CisgICAgICBlbmQgaWY7CisgICBlbmQgTGFzdF9FcnJvcl9NZXNzYWdlOworCisgICAtLS0tLS0tLS0tLS0KKyAgIC0tIFNldF9JbiAtLQorICAgLS0tLS0tLS0tLS0tCisKKyAgIHByb2NlZHVyZSBTZXRfSW4KKyAgICAgKFN0cm0gICA6IGluIG91dCBaX1N0cmVhbTsKKyAgICAgIEJ1ZmZlciA6IGluICAgICBWb2lkcDsKKyAgICAgIFNpemUgICA6IGluICAgICBVSW50KSBpcworICAgYmVnaW4KKyAgICAgIFN0cm0uTmV4dF9JbiAgOj0gQnVmZmVyOworICAgICAgU3RybS5BdmFpbF9JbiA6PSBTaXplOworICAgZW5kIFNldF9JbjsKKworICAgLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBTZXRfTWVtX0Z1bmMgLS0KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLQorCisgICBwcm9jZWR1cmUgU2V0X01lbV9GdW5jCisgICAgIChTdHJtICAgOiBpbiBvdXQgWl9TdHJlYW07CisgICAgICBPcGFxdWUgOiBpbiAgICAgVm9pZHA7CisgICAgICBBbGxvYyAgOiBpbiAgICAgYWxsb2NfZnVuYzsKKyAgICAgIEZyZWUgICA6IGluICAgICBmcmVlX2Z1bmMpIGlzCisgICBiZWdpbgorICAgICAgU3RybS5vcGFxdWUgOj0gT3BhcXVlOworICAgICAgU3RybS56YWxsb2MgOj0gQWxsb2M7CisgICAgICBTdHJtLnpmcmVlICA6PSBGcmVlOworICAgZW5kIFNldF9NZW1fRnVuYzsKKworICAgLS0tLS0tLS0tLS0tLQorICAgLS0gU2V0X091dCAtLQorICAgLS0tLS0tLS0tLS0tLQorCisgICBwcm9jZWR1cmUgU2V0X091dAorICAgICAoU3RybSAgIDogaW4gb3V0IFpfU3RyZWFtOworICAgICAgQnVmZmVyIDogaW4gICAgIFZvaWRwOworICAgICAgU2l6ZSAgIDogaW4gICAgIFVJbnQpIGlzCisgICBiZWdpbgorICAgICAgU3RybS5OZXh0X091dCAgOj0gQnVmZmVyOworICAgICAgU3RybS5BdmFpbF9PdXQgOj0gU2l6ZTsKKyAgIGVuZCBTZXRfT3V0OworCisgICAtLS0tLS0tLS0tLS0tLQorICAgLS0gVG90YWxfSW4gLS0KKyAgIC0tLS0tLS0tLS0tLS0tCisKKyAgIGZ1bmN0aW9uIFRvdGFsX0luIChTdHJtIDogaW4gWl9TdHJlYW0pIHJldHVybiBVTG9uZyBpcworICAgYmVnaW4KKyAgICAgIHJldHVybiBTdHJtLlRvdGFsX0luOworICAgZW5kIFRvdGFsX0luOworCisgICAtLS0tLS0tLS0tLS0tLS0KKyAgIC0tIFRvdGFsX091dCAtLQorICAgLS0tLS0tLS0tLS0tLS0tCisKKyAgIGZ1bmN0aW9uIFRvdGFsX091dCAoU3RybSA6IGluIFpfU3RyZWFtKSByZXR1cm4gVUxvbmcgaXMKKyAgIGJlZ2luCisgICAgICByZXR1cm4gU3RybS5Ub3RhbF9PdXQ7CisgICBlbmQgVG90YWxfT3V0OworCitlbmQgWkxpYi5UaGluOwpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvYWRhL3psaWItdGhpbi5hZHMgYi9zcmMvY29udHJpYi9hZGEvemxpYi10aGluLmFkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTAxNzNjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbnRyaWIvYWRhL3psaWItdGhpbi5hZHMKQEAgLTAsMCArMSw0NTAgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBaTGliIGZvciBBZGEgdGhpY2sgYmluZGluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICBDb3B5cmlnaHQgKEMpIDIwMDItMjAwMyBEbWl0cml5IEFuaXNpbWtvdiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICBPcGVuIHNvdXJjZSBsaWNlbnNlIGluZm9ybWF0aW9uIGlzIGluIHRoZSB6bGliLmFkcyBmaWxlLiAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLS0gICRJZDogemxpYi10aGluLmFkcyx2IDEuMTEgMjAwNC8wNy8yMyAwNjozMzoxMSB2YWd1bCBFeHAgJAorCit3aXRoIEludGVyZmFjZXMuQy5TdHJpbmdzOworCit3aXRoIFN5c3RlbTsKKworcHJpdmF0ZSBwYWNrYWdlIFpMaWIuVGhpbiBpcworCisgICAtLSAgRnJvbSB6Y29uZi5oCisKKyAgIE1BWF9NRU1fTEVWRUwgOiBjb25zdGFudCA6PSA5OyAgICAgICAgIC0tICB6Y29uZi5oOjEwNQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gIHpjb25mLmg6MTA1CisgICBNQVhfV0JJVFMgOiBjb25zdGFudCA6PSAxNTsgICAgICAtLSAgemNvbmYuaDoxMTUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tICAzMksgTFo3NyB3aW5kb3cKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tICB6Y29uZi5oOjExNQorICAgU0VFS19TRVQgOiBjb25zdGFudCA6PSA4IzAwMDAjOyAgLS0gIHpjb25mLmg6MjQ0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSAgU2VlayBmcm9tIGJlZ2lubmluZyBvZiBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gIHpjb25mLmg6MjQ0CisgICBTRUVLX0NVUiA6IGNvbnN0YW50IDo9IDE7ICAgICAgICAtLSAgemNvbmYuaDoyNDUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tICBTZWVrIGZyb20gY3VycmVudCBwb3NpdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tICB6Y29uZi5oOjI0NQorICAgU0VFS19FTkQgOiBjb25zdGFudCA6PSAyOyAgICAgICAgLS0gIHpjb25mLmg6MjQ2CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSAgU2V0IGZpbGUgcG9pbnRlciB0byBFT0YgcGx1cyAib2Zmc2V0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gIHpjb25mLmg6MjQ2CisKKyAgIHR5cGUgQnl0ZSBpcyBuZXcgSW50ZXJmYWNlcy5DLnVuc2lnbmVkX2NoYXI7IC0tICA4IGJpdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tICB6Y29uZi5oOjIxNAorICAgdHlwZSBVSW50IGlzIG5ldyBJbnRlcmZhY2VzLkMudW5zaWduZWQ7ICAgICAgLS0gIDE2IGJpdHMgb3IgbW9yZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gIHpjb25mLmg6MjE2CisgICB0eXBlIEludCBpcyBuZXcgSW50ZXJmYWNlcy5DLmludDsKKworICAgdHlwZSBVTG9uZyBpcyBuZXcgSW50ZXJmYWNlcy5DLnVuc2lnbmVkX2xvbmc7ICAgICAtLSAgMzIgYml0cyBvciBtb3JlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tICB6Y29uZi5oOjIxNworICAgc3VidHlwZSBDaGFyc19QdHIgaXMgSW50ZXJmYWNlcy5DLlN0cmluZ3MuY2hhcnNfcHRyOworCisgICB0eXBlIFVMb25nX0FjY2VzcyBpcyBhY2Nlc3MgVUxvbmc7CisgICB0eXBlIEludF9BY2Nlc3MgaXMgYWNjZXNzIEludDsKKworICAgc3VidHlwZSBWb2lkcCBpcyBTeXN0ZW0uQWRkcmVzczsgICAgICAgICAgICAtLSAgemNvbmYuaDoyMzIKKworICAgc3VidHlwZSBCeXRlX0FjY2VzcyBpcyBWb2lkcDsKKworICAgTnVsIDogY29uc3RhbnQgVm9pZHAgOj0gU3lzdGVtLk51bGxfQWRkcmVzczsKKyAgIC0tICBlbmQgZnJvbSB6Y29uZgorCisgICBaX05PX0ZMVVNIIDogY29uc3RhbnQgOj0gOCMwMDAwIzsgICAtLSAgemxpYi5oOjEyNQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gIHpsaWIuaDoxMjUKKyAgIFpfUEFSVElBTF9GTFVTSCA6IGNvbnN0YW50IDo9IDE7ICAgICAgIC0tICB6bGliLmg6MTI2CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSAgd2lsbCBiZSByZW1vdmVkLCB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tICBaX1NZTkNfRkxVU0ggaW5zdGVhZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gIHpsaWIuaDoxMjYKKyAgIFpfU1lOQ19GTFVTSCA6IGNvbnN0YW50IDo9IDI7ICAgICAgIC0tICB6bGliLmg6MTI3CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSAgemxpYi5oOjEyNworICAgWl9GVUxMX0ZMVVNIIDogY29uc3RhbnQgOj0gMzsgICAgICAgLS0gIHpsaWIuaDoxMjgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tICB6bGliLmg6MTI4CisgICBaX0ZJTklTSCA6IGNvbnN0YW50IDo9IDQ7ICAgICAgICAtLSAgemxpYi5oOjEyOQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gIHpsaWIuaDoxMjkKKyAgIFpfT0sgOiBjb25zdGFudCA6PSA4IzAwMDAjOyAgIC0tICB6bGliLmg6MTMyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSAgemxpYi5oOjEzMgorICAgWl9TVFJFQU1fRU5EIDogY29uc3RhbnQgOj0gMTsgICAgICAgLS0gIHpsaWIuaDoxMzMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tICB6bGliLmg6MTMzCisgICBaX05FRURfRElDVCA6IGNvbnN0YW50IDo9IDI7ICAgICAgICAtLSAgemxpYi5oOjEzNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gIHpsaWIuaDoxMzQKKyAgIFpfRVJSTk8gOiBjb25zdGFudCA6PSAtMTsgICAgICAgIC0tICB6bGliLmg6MTM1CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSAgemxpYi5oOjEzNQorICAgWl9TVFJFQU1fRVJST1IgOiBjb25zdGFudCA6PSAtMjsgICAgICAgLS0gIHpsaWIuaDoxMzYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tICB6bGliLmg6MTM2CisgICBaX0RBVEFfRVJST1IgOiBjb25zdGFudCA6PSAtMzsgICAgICAtLSAgemxpYi5oOjEzNworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gIHpsaWIuaDoxMzcKKyAgIFpfTUVNX0VSUk9SIDogY29uc3RhbnQgOj0gLTQ7ICAgICAgIC0tICB6bGliLmg6MTM4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSAgemxpYi5oOjEzOAorICAgWl9CVUZfRVJST1IgOiBjb25zdGFudCA6PSAtNTsgICAgICAgLS0gIHpsaWIuaDoxMzkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tICB6bGliLmg6MTM5CisgICBaX1ZFUlNJT05fRVJST1IgOiBjb25zdGFudCA6PSAtNjsgICAgICAtLSAgemxpYi5oOjE0MAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gIHpsaWIuaDoxNDAKKyAgIFpfTk9fQ09NUFJFU1NJT04gOiBjb25zdGFudCA6PSA4IzAwMDAjOyAgIC0tICB6bGliLmg6MTQ1CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSAgemxpYi5oOjE0NQorICAgWl9CRVNUX1NQRUVEIDogY29uc3RhbnQgOj0gMTsgICAgICAgLS0gIHpsaWIuaDoxNDYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tICB6bGliLmg6MTQ2CisgICBaX0JFU1RfQ09NUFJFU1NJT04gOiBjb25zdGFudCA6PSA5OyAgICAgICAtLSAgemxpYi5oOjE0NworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gIHpsaWIuaDoxNDcKKyAgIFpfREVGQVVMVF9DT01QUkVTU0lPTiA6IGNvbnN0YW50IDo9IC0xOyAgICAgIC0tICB6bGliLmg6MTQ4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSAgemxpYi5oOjE0OAorICAgWl9GSUxURVJFRCA6IGNvbnN0YW50IDo9IDE7ICAgICAgLS0gIHpsaWIuaDoxNTEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tICB6bGliLmg6MTUxCisgICBaX0hVRkZNQU5fT05MWSA6IGNvbnN0YW50IDo9IDI7ICAgICAgICAtLSAgemxpYi5oOjE1MgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gIHpsaWIuaDoxNTIKKyAgIFpfREVGQVVMVF9TVFJBVEVHWSA6IGNvbnN0YW50IDo9IDgjMDAwMCM7IC0tICB6bGliLmg6MTUzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSAgemxpYi5oOjE1MworICAgWl9CSU5BUlkgOiBjb25zdGFudCA6PSA4IzAwMDAjOyAgLS0gIHpsaWIuaDoxNTYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tICB6bGliLmg6MTU2CisgICBaX0FTQ0lJIDogY29uc3RhbnQgOj0gMTsgICAgICAtLSAgemxpYi5oOjE1NworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gIHpsaWIuaDoxNTcKKyAgIFpfVU5LTk9XTiA6IGNvbnN0YW50IDo9IDI7ICAgICAgIC0tICB6bGliLmg6MTU4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSAgemxpYi5oOjE1OAorICAgWl9ERUZMQVRFRCA6IGNvbnN0YW50IDo9IDg7ICAgICAgLS0gIHpsaWIuaDoxNjEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tICB6bGliLmg6MTYxCisgICBaX05VTEwgOiBjb25zdGFudCA6PSA4IzAwMDAjOyAtLSAgemxpYi5oOjE2NAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gIGZvciBpbml0aWFsaXppbmcgemFsbG9jLCB6ZnJlZSwgb3BhcXVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSAgemxpYi5oOjE2NAorICAgdHlwZSBnekZpbGUgaXMgbmV3IFZvaWRwOyAgICAgICAgICAgICAgICAgIC0tICB6bGliLmg6NjQ2CisKKyAgIHR5cGUgWl9TdHJlYW0gaXMgcHJpdmF0ZTsKKworICAgdHlwZSBaX1N0cmVhbXAgaXMgYWNjZXNzIGFsbCBaX1N0cmVhbTsgICAgIC0tICB6bGliLmg6ODkKKworICAgdHlwZSBhbGxvY19mdW5jIGlzIGFjY2VzcyBmdW5jdGlvbgorICAgICAoT3BhcXVlIDogVm9pZHA7CisgICAgICBJdGVtcyAgOiBVSW50OworICAgICAgU2l6ZSAgIDogVUludCkKKyAgICAgIHJldHVybiBWb2lkcDsgLS0gIHpsaWIuaDo2MworCisgICB0eXBlIGZyZWVfZnVuYyBpcyBhY2Nlc3MgcHJvY2VkdXJlIChvcGFxdWUgOiBWb2lkcDsgYWRkcmVzcyA6IFZvaWRwKTsKKworICAgZnVuY3Rpb24gemxpYlZlcnNpb24gcmV0dXJuIENoYXJzX1B0cjsKKworICAgZnVuY3Rpb24gRGVmbGF0ZSAoc3RybSA6IFpfU3RyZWFtcDsgZmx1c2ggOiBJbnQpIHJldHVybiBJbnQ7CisKKyAgIGZ1bmN0aW9uIERlZmxhdGVFbmQgKHN0cm0gOiBaX1N0cmVhbXApIHJldHVybiBJbnQ7CisKKyAgIGZ1bmN0aW9uIEluZmxhdGUgKHN0cm0gOiBaX1N0cmVhbXA7IGZsdXNoIDogSW50KSByZXR1cm4gSW50OworCisgICBmdW5jdGlvbiBJbmZsYXRlRW5kIChzdHJtIDogWl9TdHJlYW1wKSByZXR1cm4gSW50OworCisgICBmdW5jdGlvbiBkZWZsYXRlU2V0RGljdGlvbmFyeQorICAgICAoc3RybSAgICAgICA6IFpfU3RyZWFtcDsKKyAgICAgIGRpY3Rpb25hcnkgOiBCeXRlX0FjY2VzczsKKyAgICAgIGRpY3RMZW5ndGggOiBVSW50KQorICAgICAgcmV0dXJuICAgICAgIEludDsKKworICAgZnVuY3Rpb24gZGVmbGF0ZUNvcHkgKGRlc3QgOiBaX1N0cmVhbXA7IHNvdXJjZSA6IFpfU3RyZWFtcCkgcmV0dXJuIEludDsKKyAgIC0tICB6bGliLmg6NDc4CisKKyAgIGZ1bmN0aW9uIGRlZmxhdGVSZXNldCAoc3RybSA6IFpfU3RyZWFtcCkgcmV0dXJuIEludDsgLS0gemxpYi5oOjQ5NQorCisgICBmdW5jdGlvbiBkZWZsYXRlUGFyYW1zCisgICAgIChzdHJtICAgICA6IFpfU3RyZWFtcDsKKyAgICAgIGxldmVsICAgIDogSW50OworICAgICAgc3RyYXRlZ3kgOiBJbnQpCisgICAgICByZXR1cm4gICAgIEludDsgICAgICAgLS0gemxpYi5oOjUwNgorCisgICBmdW5jdGlvbiBpbmZsYXRlU2V0RGljdGlvbmFyeQorICAgICAoc3RybSAgICAgICA6IFpfU3RyZWFtcDsKKyAgICAgIGRpY3Rpb25hcnkgOiBCeXRlX0FjY2VzczsKKyAgICAgIGRpY3RMZW5ndGggOiBVSW50KQorICAgICAgcmV0dXJuICAgICAgIEludDsgLS0gIHpsaWIuaDo1NDgKKworICAgZnVuY3Rpb24gaW5mbGF0ZVN5bmMgKHN0cm0gOiBaX1N0cmVhbXApIHJldHVybiBJbnQ7ICAtLSAgemxpYi5oOjU2NQorCisgICBmdW5jdGlvbiBpbmZsYXRlUmVzZXQgKHN0cm0gOiBaX1N0cmVhbXApIHJldHVybiBJbnQ7IC0tICB6bGliLmg6NTgwCisKKyAgIGZ1bmN0aW9uIGNvbXByZXNzCisgICAgIChkZXN0ICAgICAgOiBCeXRlX0FjY2VzczsKKyAgICAgIGRlc3RMZW4gICA6IFVMb25nX0FjY2VzczsKKyAgICAgIHNvdXJjZSAgICA6IEJ5dGVfQWNjZXNzOworICAgICAgc291cmNlTGVuIDogVUxvbmcpCisgICAgICByZXR1cm4gICAgICBJbnQ7ICAgICAgICAgICAtLSB6bGliLmg6NjAxCisKKyAgIGZ1bmN0aW9uIGNvbXByZXNzMgorICAgICAoZGVzdCAgICAgIDogQnl0ZV9BY2Nlc3M7CisgICAgICBkZXN0TGVuICAgOiBVTG9uZ19BY2Nlc3M7CisgICAgICBzb3VyY2UgICAgOiBCeXRlX0FjY2VzczsKKyAgICAgIHNvdXJjZUxlbiA6IFVMb25nOworICAgICAgbGV2ZWwgICAgIDogSW50KQorICAgICAgcmV0dXJuICAgICAgSW50OyAgICAgICAgICAtLSB6bGliLmg6NjE1CisKKyAgIGZ1bmN0aW9uIHVuY29tcHJlc3MKKyAgICAgKGRlc3QgICAgICA6IEJ5dGVfQWNjZXNzOworICAgICAgZGVzdExlbiAgIDogVUxvbmdfQWNjZXNzOworICAgICAgc291cmNlICAgIDogQnl0ZV9BY2Nlc3M7CisgICAgICBzb3VyY2VMZW4gOiBVTG9uZykKKyAgICAgIHJldHVybiAgICAgIEludDsKKworICAgZnVuY3Rpb24gZ3pvcGVuIChwYXRoIDogQ2hhcnNfUHRyOyBtb2RlIDogQ2hhcnNfUHRyKSByZXR1cm4gZ3pGaWxlOworCisgICBmdW5jdGlvbiBnemRvcGVuIChmZCA6IEludDsgbW9kZSA6IENoYXJzX1B0cikgcmV0dXJuIGd6RmlsZTsKKworICAgZnVuY3Rpb24gZ3pzZXRwYXJhbXMKKyAgICAgKGZpbGUgICAgIDogZ3pGaWxlOworICAgICAgbGV2ZWwgICAgOiBJbnQ7CisgICAgICBzdHJhdGVneSA6IEludCkKKyAgICAgIHJldHVybiAgICAgSW50OworCisgICBmdW5jdGlvbiBnenJlYWQKKyAgICAgKGZpbGUgOiBnekZpbGU7CisgICAgICBidWYgIDogVm9pZHA7CisgICAgICBsZW4gIDogVUludCkKKyAgICAgIHJldHVybiBJbnQ7CisKKyAgIGZ1bmN0aW9uIGd6d3JpdGUKKyAgICAgKGZpbGUgOiBpbiBnekZpbGU7CisgICAgICBidWYgIDogaW4gVm9pZHA7CisgICAgICBsZW4gIDogaW4gVUludCkKKyAgICAgIHJldHVybiBJbnQ7CisKKyAgIGZ1bmN0aW9uIGd6cHJpbnRmIChmaWxlIDogaW4gZ3pGaWxlOyBmb3JtYXQgOiBpbiBDaGFyc19QdHIpIHJldHVybiBJbnQ7CisKKyAgIGZ1bmN0aW9uIGd6cHV0cyAoZmlsZSA6IGluIGd6RmlsZTsgcyA6IGluIENoYXJzX1B0cikgcmV0dXJuIEludDsKKworICAgZnVuY3Rpb24gZ3pnZXRzCisgICAgIChmaWxlIDogZ3pGaWxlOworICAgICAgYnVmICA6IENoYXJzX1B0cjsKKyAgICAgIGxlbiAgOiBJbnQpCisgICAgICByZXR1cm4gQ2hhcnNfUHRyOworCisgICBmdW5jdGlvbiBnenB1dGMgKGZpbGUgOiBnekZpbGU7IGNoYXIgOiBJbnQpIHJldHVybiBJbnQ7CisKKyAgIGZ1bmN0aW9uIGd6Z2V0YyAoZmlsZSA6IGd6RmlsZSkgcmV0dXJuIEludDsKKworICAgZnVuY3Rpb24gZ3pmbHVzaCAoZmlsZSA6IGd6RmlsZTsgZmx1c2ggOiBJbnQpIHJldHVybiBJbnQ7CisKKyAgIGZ1bmN0aW9uIGd6c2VlaworICAgICAoZmlsZSAgIDogZ3pGaWxlOworICAgICAgb2Zmc2V0IDogSW50OworICAgICAgd2hlbmNlIDogSW50KQorICAgICAgcmV0dXJuICAgSW50OworCisgICBmdW5jdGlvbiBnenJld2luZCAoZmlsZSA6IGd6RmlsZSkgcmV0dXJuIEludDsKKworICAgZnVuY3Rpb24gZ3p0ZWxsIChmaWxlIDogZ3pGaWxlKSByZXR1cm4gSW50OworCisgICBmdW5jdGlvbiBnemVvZiAoZmlsZSA6IGd6RmlsZSkgcmV0dXJuIEludDsKKworICAgZnVuY3Rpb24gZ3pjbG9zZSAoZmlsZSA6IGd6RmlsZSkgcmV0dXJuIEludDsKKworICAgZnVuY3Rpb24gZ3plcnJvciAoZmlsZSA6IGd6RmlsZTsgZXJybnVtIDogSW50X0FjY2VzcykgcmV0dXJuIENoYXJzX1B0cjsKKworICAgZnVuY3Rpb24gYWRsZXIzMgorICAgICAoYWRsZXIgOiBVTG9uZzsKKyAgICAgIGJ1ZiAgIDogQnl0ZV9BY2Nlc3M7CisgICAgICBsZW4gICA6IFVJbnQpCisgICAgICByZXR1cm4gIFVMb25nOworCisgICBmdW5jdGlvbiBjcmMzMgorICAgICAoY3JjICA6IFVMb25nOworICAgICAgYnVmICA6IEJ5dGVfQWNjZXNzOworICAgICAgbGVuICA6IFVJbnQpCisgICAgICByZXR1cm4gVUxvbmc7CisKKyAgIGZ1bmN0aW9uIGRlZmxhdGVJbml0CisgICAgIChzdHJtICAgICAgICA6IFpfU3RyZWFtcDsKKyAgICAgIGxldmVsICAgICAgIDogSW50OworICAgICAgdmVyc2lvbiAgICAgOiBDaGFyc19QdHI7CisgICAgICBzdHJlYW1fc2l6ZSA6IEludCkKKyAgICAgIHJldHVybiAgICAgICAgSW50OworCisgICBmdW5jdGlvbiBkZWZsYXRlSW5pdDIKKyAgICAgKHN0cm0gICAgICAgIDogWl9TdHJlYW1wOworICAgICAgbGV2ZWwgICAgICAgOiBJbnQ7CisgICAgICBtZXRob2QgICAgICA6IEludDsKKyAgICAgIHdpbmRvd0JpdHMgIDogSW50OworICAgICAgbWVtTGV2ZWwgICAgOiBJbnQ7CisgICAgICBzdHJhdGVneSAgICA6IEludDsKKyAgICAgIHZlcnNpb24gICAgIDogQ2hhcnNfUHRyOworICAgICAgc3RyZWFtX3NpemUgOiBJbnQpCisgICAgICByZXR1cm4gICAgICAgIEludDsKKworICAgZnVuY3Rpb24gRGVmbGF0ZV9Jbml0CisgICAgIChzdHJtICAgICAgIDogWl9TdHJlYW1wOworICAgICAgbGV2ZWwgICAgICA6IEludDsKKyAgICAgIG1ldGhvZCAgICAgOiBJbnQ7CisgICAgICB3aW5kb3dCaXRzIDogSW50OworICAgICAgbWVtTGV2ZWwgICA6IEludDsKKyAgICAgIHN0cmF0ZWd5ICAgOiBJbnQpCisgICAgICByZXR1cm4gICAgICAgSW50OworICAgcHJhZ21hIElubGluZSAoRGVmbGF0ZV9Jbml0KTsKKworICAgZnVuY3Rpb24gaW5mbGF0ZUluaXQKKyAgICAgKHN0cm0gICAgICAgIDogWl9TdHJlYW1wOworICAgICAgdmVyc2lvbiAgICAgOiBDaGFyc19QdHI7CisgICAgICBzdHJlYW1fc2l6ZSA6IEludCkKKyAgICAgIHJldHVybiAgICAgICAgSW50OworCisgICBmdW5jdGlvbiBpbmZsYXRlSW5pdDIKKyAgICAgKHN0cm0gICAgICAgIDogaW4gWl9TdHJlYW1wOworICAgICAgd2luZG93Qml0cyAgOiBpbiBJbnQ7CisgICAgICB2ZXJzaW9uICAgICA6IGluIENoYXJzX1B0cjsKKyAgICAgIHN0cmVhbV9zaXplIDogaW4gSW50KQorICAgICAgcmV0dXJuICAgICAgSW50OworCisgICBmdW5jdGlvbiBpbmZsYXRlQmFja0luaXQKKyAgICAgKHN0cm0gICAgICAgIDogaW4gWl9TdHJlYW1wOworICAgICAgd2luZG93Qml0cyAgOiBpbiBJbnQ7CisgICAgICB3aW5kb3cgICAgICA6IGluIEJ5dGVfQWNjZXNzOworICAgICAgdmVyc2lvbiAgICAgOiBpbiBDaGFyc19QdHI7CisgICAgICBzdHJlYW1fc2l6ZSA6IGluIEludCkKKyAgICAgIHJldHVybiAgICAgIEludDsKKyAgIC0tICBTaXplIG9mIHdpbmRvdyBoYXZlIHRvIGJlIDIqKndpbmRvd0JpdHMuCisKKyAgIGZ1bmN0aW9uIEluZmxhdGVfSW5pdCAoc3RybSA6IFpfU3RyZWFtcDsgd2luZG93Qml0cyA6IEludCkgcmV0dXJuIEludDsKKyAgIHByYWdtYSBJbmxpbmUgKEluZmxhdGVfSW5pdCk7CisKKyAgIGZ1bmN0aW9uIHpFcnJvciAoZXJyIDogSW50KSByZXR1cm4gQ2hhcnNfUHRyOworCisgICBmdW5jdGlvbiBpbmZsYXRlU3luY1BvaW50ICh6IDogWl9TdHJlYW1wKSByZXR1cm4gSW50OworCisgICBmdW5jdGlvbiBnZXRfY3JjX3RhYmxlIHJldHVybiBVTG9uZ19BY2Nlc3M7CisKKyAgIC0tICBJbnRlcmZhY2UgdG8gdGhlIGF2YWlsYWJsZSBmaWVsZHMgb2YgdGhlIHpfc3RyZWFtIHN0cnVjdHVyZS4KKyAgIC0tICBUaGUgYXBwbGljYXRpb24gbXVzdCB1cGRhdGUgbmV4dF9pbiBhbmQgYXZhaWxfaW4gd2hlbiBhdmFpbF9pbiBoYXMKKyAgIC0tICBkcm9wcGVkIHRvIHplcm8uIEl0IG11c3QgdXBkYXRlIG5leHRfb3V0IGFuZCBhdmFpbF9vdXQgd2hlbiBhdmFpbF9vdXQKKyAgIC0tICBoYXMgZHJvcHBlZCB0byB6ZXJvLiBUaGUgYXBwbGljYXRpb24gbXVzdCBpbml0aWFsaXplIHphbGxvYywgemZyZWUgYW5kCisgICAtLSAgb3BhcXVlIGJlZm9yZSBjYWxsaW5nIHRoZSBpbml0IGZ1bmN0aW9uLgorCisgICBwcm9jZWR1cmUgU2V0X0luCisgICAgIChTdHJtICAgOiBpbiBvdXQgWl9TdHJlYW07CisgICAgICBCdWZmZXIgOiBpbiBWb2lkcDsKKyAgICAgIFNpemUgICA6IGluIFVJbnQpOworICAgcHJhZ21hIElubGluZSAoU2V0X0luKTsKKworICAgcHJvY2VkdXJlIFNldF9PdXQKKyAgICAgKFN0cm0gICA6IGluIG91dCBaX1N0cmVhbTsKKyAgICAgIEJ1ZmZlciA6IGluIFZvaWRwOworICAgICAgU2l6ZSAgIDogaW4gVUludCk7CisgICBwcmFnbWEgSW5saW5lIChTZXRfT3V0KTsKKworICAgcHJvY2VkdXJlIFNldF9NZW1fRnVuYworICAgICAoU3RybSAgIDogaW4gb3V0IFpfU3RyZWFtOworICAgICAgT3BhcXVlIDogaW4gVm9pZHA7CisgICAgICBBbGxvYyAgOiBpbiBhbGxvY19mdW5jOworICAgICAgRnJlZSAgIDogaW4gZnJlZV9mdW5jKTsKKyAgIHByYWdtYSBJbmxpbmUgKFNldF9NZW1fRnVuYyk7CisKKyAgIGZ1bmN0aW9uIExhc3RfRXJyb3JfTWVzc2FnZSAoU3RybSA6IGluIFpfU3RyZWFtKSByZXR1cm4gU3RyaW5nOworICAgcHJhZ21hIElubGluZSAoTGFzdF9FcnJvcl9NZXNzYWdlKTsKKworICAgZnVuY3Rpb24gQXZhaWxfT3V0IChTdHJtIDogaW4gWl9TdHJlYW0pIHJldHVybiBVSW50OworICAgcHJhZ21hIElubGluZSAoQXZhaWxfT3V0KTsKKworICAgZnVuY3Rpb24gQXZhaWxfSW4gKFN0cm0gOiBpbiBaX1N0cmVhbSkgcmV0dXJuIFVJbnQ7CisgICBwcmFnbWEgSW5saW5lIChBdmFpbF9Jbik7CisKKyAgIGZ1bmN0aW9uIFRvdGFsX0luIChTdHJtIDogaW4gWl9TdHJlYW0pIHJldHVybiBVTG9uZzsKKyAgIHByYWdtYSBJbmxpbmUgKFRvdGFsX0luKTsKKworICAgZnVuY3Rpb24gVG90YWxfT3V0IChTdHJtIDogaW4gWl9TdHJlYW0pIHJldHVybiBVTG9uZzsKKyAgIHByYWdtYSBJbmxpbmUgKFRvdGFsX091dCk7CisKKyAgIGZ1bmN0aW9uIGluZmxhdGVDb3B5CisgICAgIChkZXN0ICAgOiBpbiBaX1N0cmVhbXA7CisgICAgICBTb3VyY2UgOiBpbiBaX1N0cmVhbXApCisgICAgICByZXR1cm4gSW50OworCisgICBmdW5jdGlvbiBjb21wcmVzc0JvdW5kIChTb3VyY2VfTGVuIDogaW4gVUxvbmcpIHJldHVybiBVTG9uZzsKKworICAgZnVuY3Rpb24gZGVmbGF0ZUJvdW5kCisgICAgIChTdHJtICAgICAgIDogaW4gWl9TdHJlYW1wOworICAgICAgU291cmNlX0xlbiA6IGluIFVMb25nKQorICAgICAgcmV0dXJuICAgICBVTG9uZzsKKworICAgZnVuY3Rpb24gZ3p1bmdldGMgKEMgOiBpbiBJbnQ7IEZpbGUgOiBpbiAgZ3pGaWxlKSByZXR1cm4gSW50OworCisgICBmdW5jdGlvbiB6bGliQ29tcGlsZUZsYWdzIHJldHVybiBVTG9uZzsKKworcHJpdmF0ZQorCisgICB0eXBlIFpfU3RyZWFtIGlzIHJlY29yZCAgICAgICAgICAgIC0tIHpsaWIuaDo2OAorICAgICAgTmV4dF9JbiAgIDogVm9pZHAgICAgICA6PSBOdWw7ICAtLSBuZXh0IGlucHV0IGJ5dGUKKyAgICAgIEF2YWlsX0luICA6IFVJbnQgICAgICAgOj0gMDsgICAgLS0gbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSBhdCBuZXh0X2luCisgICAgICBUb3RhbF9JbiAgOiBVTG9uZyAgICAgIDo9IDA7ICAgIC0tIHRvdGFsIG5iIG9mIGlucHV0IGJ5dGVzIHJlYWQgc28gZmFyCisgICAgICBOZXh0X091dCAgOiBWb2lkcCAgICAgIDo9IE51bDsgIC0tIG5leHQgb3V0cHV0IGJ5dGUgc2hvdWxkIGJlIHB1dCB0aGVyZQorICAgICAgQXZhaWxfT3V0IDogVUludCAgICAgICA6PSAwOyAgICAtLSByZW1haW5pbmcgZnJlZSBzcGFjZSBhdCBuZXh0X291dAorICAgICAgVG90YWxfT3V0IDogVUxvbmcgICAgICA6PSAwOyAgICAtLSB0b3RhbCBuYiBvZiBieXRlcyBvdXRwdXQgc28gZmFyCisgICAgICBtc2cgICAgICAgOiBDaGFyc19QdHI7ICAgICAgICAgIC0tIGxhc3QgZXJyb3IgbWVzc2FnZSwgTlVMTCBpZiBubyBlcnJvcgorICAgICAgc3RhdGUgICAgIDogVm9pZHA7ICAgICAgICAgICAgICAtLSBub3QgdmlzaWJsZSBieSBhcHBsaWNhdGlvbnMKKyAgICAgIHphbGxvYyAgICA6IGFsbG9jX2Z1bmMgOj0gbnVsbDsgLS0gdXNlZCB0byBhbGxvY2F0ZSB0aGUgaW50ZXJuYWwgc3RhdGUKKyAgICAgIHpmcmVlICAgICA6IGZyZWVfZnVuYyAgOj0gbnVsbDsgLS0gdXNlZCB0byBmcmVlIHRoZSBpbnRlcm5hbCBzdGF0ZQorICAgICAgb3BhcXVlICAgIDogVm9pZHA7ICAgICAgICAgICAgICAtLSBwcml2YXRlIGRhdGEgb2JqZWN0IHBhc3NlZCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSAgemFsbG9jIGFuZCB6ZnJlZQorICAgICAgZGF0YV90eXBlIDogSW50OyAgICAgICAgICAgICAgICAtLSBiZXN0IGd1ZXNzIGFib3V0IHRoZSBkYXRhIHR5cGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tICBhc2NpaSBvciBiaW5hcnkKKyAgICAgIGFkbGVyICAgICA6IFVMb25nOyAgICAgICAgICAgICAgLS0gYWRsZXIzMiB2YWx1ZSBvZiB0aGUgdW5jb21wcmVzc2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tICBkYXRhCisgICAgICByZXNlcnZlZCAgOiBVTG9uZzsgICAgICAgICAgICAgIC0tIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlCisgICBlbmQgcmVjb3JkOworCisgICBwcmFnbWEgQ29udmVudGlvbiAoQywgWl9TdHJlYW0pOworCisgICBwcmFnbWEgSW1wb3J0IChDLCB6bGliVmVyc2lvbiwgInpsaWJWZXJzaW9uIik7CisgICBwcmFnbWEgSW1wb3J0IChDLCBEZWZsYXRlLCAiZGVmbGF0ZSIpOworICAgcHJhZ21hIEltcG9ydCAoQywgRGVmbGF0ZUVuZCwgImRlZmxhdGVFbmQiKTsKKyAgIHByYWdtYSBJbXBvcnQgKEMsIEluZmxhdGUsICJpbmZsYXRlIik7CisgICBwcmFnbWEgSW1wb3J0IChDLCBJbmZsYXRlRW5kLCAiaW5mbGF0ZUVuZCIpOworICAgcHJhZ21hIEltcG9ydCAoQywgZGVmbGF0ZVNldERpY3Rpb25hcnksICJkZWZsYXRlU2V0RGljdGlvbmFyeSIpOworICAgcHJhZ21hIEltcG9ydCAoQywgZGVmbGF0ZUNvcHksICJkZWZsYXRlQ29weSIpOworICAgcHJhZ21hIEltcG9ydCAoQywgZGVmbGF0ZVJlc2V0LCAiZGVmbGF0ZVJlc2V0Iik7CisgICBwcmFnbWEgSW1wb3J0IChDLCBkZWZsYXRlUGFyYW1zLCAiZGVmbGF0ZVBhcmFtcyIpOworICAgcHJhZ21hIEltcG9ydCAoQywgaW5mbGF0ZVNldERpY3Rpb25hcnksICJpbmZsYXRlU2V0RGljdGlvbmFyeSIpOworICAgcHJhZ21hIEltcG9ydCAoQywgaW5mbGF0ZVN5bmMsICJpbmZsYXRlU3luYyIpOworICAgcHJhZ21hIEltcG9ydCAoQywgaW5mbGF0ZVJlc2V0LCAiaW5mbGF0ZVJlc2V0Iik7CisgICBwcmFnbWEgSW1wb3J0IChDLCBjb21wcmVzcywgImNvbXByZXNzIik7CisgICBwcmFnbWEgSW1wb3J0IChDLCBjb21wcmVzczIsICJjb21wcmVzczIiKTsKKyAgIHByYWdtYSBJbXBvcnQgKEMsIHVuY29tcHJlc3MsICJ1bmNvbXByZXNzIik7CisgICBwcmFnbWEgSW1wb3J0IChDLCBnem9wZW4sICJnem9wZW4iKTsKKyAgIHByYWdtYSBJbXBvcnQgKEMsIGd6ZG9wZW4sICJnemRvcGVuIik7CisgICBwcmFnbWEgSW1wb3J0IChDLCBnenNldHBhcmFtcywgImd6c2V0cGFyYW1zIik7CisgICBwcmFnbWEgSW1wb3J0IChDLCBnenJlYWQsICJnenJlYWQiKTsKKyAgIHByYWdtYSBJbXBvcnQgKEMsIGd6d3JpdGUsICJnendyaXRlIik7CisgICBwcmFnbWEgSW1wb3J0IChDLCBnenByaW50ZiwgImd6cHJpbnRmIik7CisgICBwcmFnbWEgSW1wb3J0IChDLCBnenB1dHMsICJnenB1dHMiKTsKKyAgIHByYWdtYSBJbXBvcnQgKEMsIGd6Z2V0cywgImd6Z2V0cyIpOworICAgcHJhZ21hIEltcG9ydCAoQywgZ3pwdXRjLCAiZ3pwdXRjIik7CisgICBwcmFnbWEgSW1wb3J0IChDLCBnemdldGMsICJnemdldGMiKTsKKyAgIHByYWdtYSBJbXBvcnQgKEMsIGd6Zmx1c2gsICJnemZsdXNoIik7CisgICBwcmFnbWEgSW1wb3J0IChDLCBnenNlZWssICJnenNlZWsiKTsKKyAgIHByYWdtYSBJbXBvcnQgKEMsIGd6cmV3aW5kLCAiZ3pyZXdpbmQiKTsKKyAgIHByYWdtYSBJbXBvcnQgKEMsIGd6dGVsbCwgImd6dGVsbCIpOworICAgcHJhZ21hIEltcG9ydCAoQywgZ3plb2YsICJnemVvZiIpOworICAgcHJhZ21hIEltcG9ydCAoQywgZ3pjbG9zZSwgImd6Y2xvc2UiKTsKKyAgIHByYWdtYSBJbXBvcnQgKEMsIGd6ZXJyb3IsICJnemVycm9yIik7CisgICBwcmFnbWEgSW1wb3J0IChDLCBhZGxlcjMyLCAiYWRsZXIzMiIpOworICAgcHJhZ21hIEltcG9ydCAoQywgY3JjMzIsICJjcmMzMiIpOworICAgcHJhZ21hIEltcG9ydCAoQywgZGVmbGF0ZUluaXQsICJkZWZsYXRlSW5pdF8iKTsKKyAgIHByYWdtYSBJbXBvcnQgKEMsIGluZmxhdGVJbml0LCAiaW5mbGF0ZUluaXRfIik7CisgICBwcmFnbWEgSW1wb3J0IChDLCBkZWZsYXRlSW5pdDIsICJkZWZsYXRlSW5pdDJfIik7CisgICBwcmFnbWEgSW1wb3J0IChDLCBpbmZsYXRlSW5pdDIsICJpbmZsYXRlSW5pdDJfIik7CisgICBwcmFnbWEgSW1wb3J0IChDLCB6RXJyb3IsICJ6RXJyb3IiKTsKKyAgIHByYWdtYSBJbXBvcnQgKEMsIGluZmxhdGVTeW5jUG9pbnQsICJpbmZsYXRlU3luY1BvaW50Iik7CisgICBwcmFnbWEgSW1wb3J0IChDLCBnZXRfY3JjX3RhYmxlLCAiZ2V0X2NyY190YWJsZSIpOworCisgICAtLSAgc2luY2UgemxpYiAxLjIuMDoKKworICAgcHJhZ21hIEltcG9ydCAoQywgaW5mbGF0ZUNvcHksICJpbmZsYXRlQ29weSIpOworICAgcHJhZ21hIEltcG9ydCAoQywgY29tcHJlc3NCb3VuZCwgImNvbXByZXNzQm91bmQiKTsKKyAgIHByYWdtYSBJbXBvcnQgKEMsIGRlZmxhdGVCb3VuZCwgImRlZmxhdGVCb3VuZCIpOworICAgcHJhZ21hIEltcG9ydCAoQywgZ3p1bmdldGMsICJnenVuZ2V0YyIpOworICAgcHJhZ21hIEltcG9ydCAoQywgemxpYkNvbXBpbGVGbGFncywgInpsaWJDb21waWxlRmxhZ3MiKTsKKworICAgcHJhZ21hIEltcG9ydCAoQywgaW5mbGF0ZUJhY2tJbml0LCAiaW5mbGF0ZUJhY2tJbml0XyIpOworCisgICAtLSAgSSBzdG9wcGVkIGJpbmRpbmcgdGhlIGluZmxhdGVCYWNrIHJvdXRpbmVzLCBiZWNhdXNlIHJlYWxpemUgdGhhdAorICAgLS0gIGl0IGRvZXMgbm90IHN1cHBvcnQgemxpYiBhbmQgZ3ppcCBoZWFkZXJzIGZvciBub3csIGFuZCBoYXZlIG5vCisgICAtLSAgc3ltbWV0cmljIGRlZmxhdGVCYWNrIHJvdXRpbmVzLgorICAgLS0gIFpMaWItQWRhIGlzIHN5bW1ldHJpYyByZWdhcmRpbmcgZGVmbGF0ZS9pbmZsYXRlIGRhdGEgdHJhbnNmb3JtYXRpb24KKyAgIC0tICBhbmQgaGFzIGEgc2ltaWxhciBnZW5lcmljIGNhbGxiYWNrIGludGVyZmFjZSBmb3IgdGhlCisgICAtLSAgZGVmbGF0ZS9pbmZsYXRlIHRyYW5zZm9ybWF0aW9uIGJhc2VkIG9uIHRoZSByZWd1bGFyIERlZmxhdGUvSW5mbGF0ZQorICAgLS0gIHJvdXRpbmVzLgorCisgICAtLSAgcHJhZ21hIEltcG9ydCAoQywgaW5mbGF0ZUJhY2ssICJpbmZsYXRlQmFjayIpOworICAgLS0gIHByYWdtYSBJbXBvcnQgKEMsIGluZmxhdGVCYWNrRW5kLCAiaW5mbGF0ZUJhY2tFbmQiKTsKKworZW5kIFpMaWIuVGhpbjsKZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL2FkYS96bGliLmFkYiBiL3NyYy9jb250cmliL2FkYS96bGliLmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjZmZDY4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbnRyaWIvYWRhL3psaWIuYWRiCkBAIC0wLDAgKzEsNzAxIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgWkxpYiBmb3IgQWRhIHRoaWNrIGJpbmRpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDQgRG1pdHJpeSBBbmlzaW1rb3YgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgT3BlbiBzb3VyY2UgbGljZW5zZSBpbmZvcm1hdGlvbiBpcyBpbiB0aGUgemxpYi5hZHMgZmlsZS4gIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy0tICAkSWQ6IHpsaWIuYWRiLHYgMS4zMSAyMDA0LzA5LzA2IDA2OjUzOjE5IHZhZ3VsIEV4cCAkCisKK3dpdGggQWRhLkV4Y2VwdGlvbnM7Cit3aXRoIEFkYS5VbmNoZWNrZWRfQ29udmVyc2lvbjsKK3dpdGggQWRhLlVuY2hlY2tlZF9EZWFsbG9jYXRpb247CisKK3dpdGggSW50ZXJmYWNlcy5DLlN0cmluZ3M7CisKK3dpdGggWkxpYi5UaGluOworCitwYWNrYWdlIGJvZHkgWkxpYiBpcworCisgICB1c2UgdHlwZSBUaGluLkludDsKKworICAgdHlwZSBaX1N0cmVhbSBpcyBuZXcgVGhpbi5aX1N0cmVhbTsKKworICAgdHlwZSBSZXR1cm5fQ29kZV9FbnVtIGlzCisgICAgICAoT0ssCisgICAgICAgU1RSRUFNX0VORCwKKyAgICAgICBORUVEX0RJQ1QsCisgICAgICAgRVJSTk8sCisgICAgICAgU1RSRUFNX0VSUk9SLAorICAgICAgIERBVEFfRVJST1IsCisgICAgICAgTUVNX0VSUk9SLAorICAgICAgIEJVRl9FUlJPUiwKKyAgICAgICBWRVJTSU9OX0VSUk9SKTsKKworICAgdHlwZSBGbGF0ZV9TdGVwX0Z1bmN0aW9uIGlzIGFjY2VzcworICAgICBmdW5jdGlvbiAoU3RybSA6IGluIFRoaW4uWl9TdHJlYW1wOyBGbHVzaCA6IGluIFRoaW4uSW50KSByZXR1cm4gVGhpbi5JbnQ7CisgICBwcmFnbWEgQ29udmVudGlvbiAoQywgRmxhdGVfU3RlcF9GdW5jdGlvbik7CisKKyAgIHR5cGUgRmxhdGVfRW5kX0Z1bmN0aW9uIGlzIGFjY2VzcworICAgICAgZnVuY3Rpb24gKEN0cm0gOiBpbiBUaGluLlpfU3RyZWFtcCkgcmV0dXJuIFRoaW4uSW50OworICAgcHJhZ21hIENvbnZlbnRpb24gKEMsIEZsYXRlX0VuZF9GdW5jdGlvbik7CisKKyAgIHR5cGUgRmxhdGVfVHlwZSBpcyByZWNvcmQKKyAgICAgIFN0ZXAgOiBGbGF0ZV9TdGVwX0Z1bmN0aW9uOworICAgICAgRG9uZSA6IEZsYXRlX0VuZF9GdW5jdGlvbjsKKyAgIGVuZCByZWNvcmQ7CisKKyAgIHN1YnR5cGUgRm9vdGVyX0FycmF5IGlzIFN0cmVhbV9FbGVtZW50X0FycmF5ICgxIC4uIDgpOworCisgICBTaW1wbGVfR1ppcF9IZWFkZXIgOiBjb25zdGFudCBTdHJlYW1fRWxlbWVudF9BcnJheSAoMSAuLiAxMCkKKyAgICAgOj0gKDE2IzFmIywgMTYjOGIjLCAgICAgICAgICAgICAgICAgLS0gIE1hZ2ljIGhlYWRlcgorICAgICAgICAgMTYjMDgjLCAgICAgICAgICAgICAgICAgICAgICAgICAtLSAgWl9ERUZMQVRFRAorICAgICAgICAgMTYjMDAjLCAgICAgICAgICAgICAgICAgICAgICAgICAtLSAgRmxhZ3MKKyAgICAgICAgIDE2IzAwIywgMTYjMDAjLCAxNiMwMCMsIDE2IzAwIywgLS0gIFRpbWUKKyAgICAgICAgIDE2IzAwIywgICAgICAgICAgICAgICAgICAgICAgICAgLS0gIFhGbGFncworICAgICAgICAgMTYjMDMjICAgICAgICAgICAgICAgICAgICAgICAgICAtLSAgT1MgY29kZQorICAgICAgICApOworICAgLS0gIFRoZSBzaW1wbGVzdCBnemlwIGhlYWRlciBpcyBub3QgZm9yIGluZm9ybWF0aW9uYWwsIGJ1dCBqdXN0IGZvcgorICAgLS0gIGd6aXAgZm9ybWF0IGNvbXBhdGliaWxpdHkuCisgICAtLSAgTm90ZSB0aGF0IHNvbWUgY29kZSBiZWxvdyBpcyB1c2luZyBhc3N1bXB0aW9uCisgICAtLSAgU2ltcGxlX0daaXBfSGVhZGVyJ0xhc3QgPiBGb290ZXJfQXJyYXknTGFzdCwgc28gZG8gbm90IG1ha2UKKyAgIC0tICBTaW1wbGVfR1ppcF9IZWFkZXInTGFzdCA8PSBGb290ZXJfQXJyYXknTGFzdC4KKworICAgUmV0dXJuX0NvZGUgOiBjb25zdGFudCBhcnJheSAoVGhpbi5JbnQgcmFuZ2UgPD4pIG9mIFJldHVybl9Db2RlX0VudW0KKyAgICAgOj0gKDAgPT4gT0ssCisgICAgICAgICAxID0+IFNUUkVBTV9FTkQsCisgICAgICAgICAyID0+IE5FRURfRElDVCwKKyAgICAgICAgLTEgPT4gRVJSTk8sCisgICAgICAgIC0yID0+IFNUUkVBTV9FUlJPUiwKKyAgICAgICAgLTMgPT4gREFUQV9FUlJPUiwKKyAgICAgICAgLTQgPT4gTUVNX0VSUk9SLAorICAgICAgICAtNSA9PiBCVUZfRVJST1IsCisgICAgICAgIC02ID0+IFZFUlNJT05fRVJST1IpOworCisgICBGbGF0ZSA6IGNvbnN0YW50IGFycmF5IChCb29sZWFuKSBvZiBGbGF0ZV9UeXBlCisgICAgIDo9IChUcnVlICA9PiAoU3RlcCA9PiBUaGluLkRlZmxhdGUnQWNjZXNzLAorICAgICAgICAgICAgICAgICAgIERvbmUgPT4gVGhpbi5EZWZsYXRlRW5kJ0FjY2VzcyksCisgICAgICAgICBGYWxzZSA9PiAoU3RlcCA9PiBUaGluLkluZmxhdGUnQWNjZXNzLAorICAgICAgICAgICAgICAgICAgIERvbmUgPT4gVGhpbi5JbmZsYXRlRW5kJ0FjY2VzcykpOworCisgICBGbHVzaF9GaW5pc2ggOiBjb25zdGFudCBhcnJheSAoQm9vbGVhbikgb2YgRmx1c2hfTW9kZQorICAgICA6PSAoVHJ1ZSA9PiBGaW5pc2gsIEZhbHNlID0+IE5vX0ZsdXNoKTsKKworICAgcHJvY2VkdXJlIFJhaXNlX0Vycm9yIChTdHJlYW0gOiBpbiBaX1N0cmVhbSk7CisgICBwcmFnbWEgSW5saW5lIChSYWlzZV9FcnJvcik7CisKKyAgIHByb2NlZHVyZSBSYWlzZV9FcnJvciAoTWVzc2FnZSA6IGluIFN0cmluZyk7CisgICBwcmFnbWEgSW5saW5lIChSYWlzZV9FcnJvcik7CisKKyAgIHByb2NlZHVyZSBDaGVja19FcnJvciAoU3RyZWFtIDogaW4gWl9TdHJlYW07IENvZGUgOiBpbiBUaGluLkludCk7CisKKyAgIHByb2NlZHVyZSBGcmVlIGlzIG5ldyBBZGEuVW5jaGVja2VkX0RlYWxsb2NhdGlvbgorICAgICAgKFpfU3RyZWFtLCBaX1N0cmVhbV9BY2Nlc3MpOworCisgICBmdW5jdGlvbiBUb19UaGluX0FjY2VzcyBpcyBuZXcgQWRhLlVuY2hlY2tlZF9Db252ZXJzaW9uCisgICAgIChaX1N0cmVhbV9BY2Nlc3MsIFRoaW4uWl9TdHJlYW1wKTsKKworICAgcHJvY2VkdXJlIFRyYW5zbGF0ZV9HWmlwCisgICAgIChGaWx0ZXIgICAgOiBpbiBvdXQgRmlsdGVyX1R5cGU7CisgICAgICBJbl9EYXRhICAgOiBpbiAgICAgQWRhLlN0cmVhbXMuU3RyZWFtX0VsZW1lbnRfQXJyYXk7CisgICAgICBJbl9MYXN0ICAgOiAgICBvdXQgQWRhLlN0cmVhbXMuU3RyZWFtX0VsZW1lbnRfT2Zmc2V0OworICAgICAgT3V0X0RhdGEgIDogICAgb3V0IEFkYS5TdHJlYW1zLlN0cmVhbV9FbGVtZW50X0FycmF5OworICAgICAgT3V0X0xhc3QgIDogICAgb3V0IEFkYS5TdHJlYW1zLlN0cmVhbV9FbGVtZW50X09mZnNldDsKKyAgICAgIEZsdXNoICAgICA6IGluICAgICBGbHVzaF9Nb2RlKTsKKyAgIC0tICBTZXBhcmF0ZSB0cmFuc2xhdGUgcm91dGluZSBmb3IgbWFrZSBnemlwIGhlYWRlci4KKworICAgcHJvY2VkdXJlIFRyYW5zbGF0ZV9BdXRvCisgICAgIChGaWx0ZXIgICAgOiBpbiBvdXQgRmlsdGVyX1R5cGU7CisgICAgICBJbl9EYXRhICAgOiBpbiAgICAgQWRhLlN0cmVhbXMuU3RyZWFtX0VsZW1lbnRfQXJyYXk7CisgICAgICBJbl9MYXN0ICAgOiAgICBvdXQgQWRhLlN0cmVhbXMuU3RyZWFtX0VsZW1lbnRfT2Zmc2V0OworICAgICAgT3V0X0RhdGEgIDogICAgb3V0IEFkYS5TdHJlYW1zLlN0cmVhbV9FbGVtZW50X0FycmF5OworICAgICAgT3V0X0xhc3QgIDogICAgb3V0IEFkYS5TdHJlYW1zLlN0cmVhbV9FbGVtZW50X09mZnNldDsKKyAgICAgIEZsdXNoICAgICA6IGluICAgICBGbHVzaF9Nb2RlKTsKKyAgIC0tICB0cmFuc2xhdGUgcm91dGluZSB3aXRob3V0IGFkZGl0aW9uYWwgaGVhZGVycy4KKworICAgLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIENoZWNrX0Vycm9yIC0tCisgICAtLS0tLS0tLS0tLS0tLS0tLQorCisgICBwcm9jZWR1cmUgQ2hlY2tfRXJyb3IgKFN0cmVhbSA6IGluIFpfU3RyZWFtOyBDb2RlIDogaW4gVGhpbi5JbnQpIGlzCisgICAgICB1c2UgdHlwZSBUaGluLkludDsKKyAgIGJlZ2luCisgICAgICBpZiBDb2RlIC89IFRoaW4uWl9PSyB0aGVuCisgICAgICAgICBSYWlzZV9FcnJvcgorICAgICAgICAgICAgKFJldHVybl9Db2RlX0VudW0nSW1hZ2UgKFJldHVybl9Db2RlIChDb2RlKSkKKyAgICAgICAgICAgICAgJiAiOiAiICYgTGFzdF9FcnJvcl9NZXNzYWdlIChTdHJlYW0pKTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBDaGVja19FcnJvcjsKKworICAgLS0tLS0tLS0tLS0KKyAgIC0tIENsb3NlIC0tCisgICAtLS0tLS0tLS0tLQorCisgICBwcm9jZWR1cmUgQ2xvc2UKKyAgICAgKEZpbHRlciAgICAgICA6IGluIG91dCBGaWx0ZXJfVHlwZTsKKyAgICAgIElnbm9yZV9FcnJvciA6IGluICAgICBCb29sZWFuIDo9IEZhbHNlKQorICAgaXMKKyAgICAgIENvZGUgOiBUaGluLkludDsKKyAgIGJlZ2luCisgICAgICBpZiBub3QgSWdub3JlX0Vycm9yIGFuZCB0aGVuIG5vdCBJc19PcGVuIChGaWx0ZXIpIHRoZW4KKyAgICAgICAgIHJhaXNlIFN0YXR1c19FcnJvcjsKKyAgICAgIGVuZCBpZjsKKworICAgICAgQ29kZSA6PSBGbGF0ZSAoRmlsdGVyLkNvbXByZXNzaW9uKS5Eb25lIChUb19UaGluX0FjY2VzcyAoRmlsdGVyLlN0cm0pKTsKKworICAgICAgaWYgSWdub3JlX0Vycm9yIG9yIGVsc2UgQ29kZSA9IFRoaW4uWl9PSyB0aGVuCisgICAgICAgICBGcmVlIChGaWx0ZXIuU3RybSk7CisgICAgICBlbHNlCisgICAgICAgICBkZWNsYXJlCisgICAgICAgICAgICBFcnJvcl9NZXNzYWdlIDogY29uc3RhbnQgU3RyaW5nCisgICAgICAgICAgICAgIDo9IExhc3RfRXJyb3JfTWVzc2FnZSAoRmlsdGVyLlN0cm0uYWxsKTsKKyAgICAgICAgIGJlZ2luCisgICAgICAgICAgICBGcmVlIChGaWx0ZXIuU3RybSk7CisgICAgICAgICAgICBBZGEuRXhjZXB0aW9ucy5SYWlzZV9FeGNlcHRpb24KKyAgICAgICAgICAgICAgIChaTGliX0Vycm9yJ0lkZW50aXR5LAorICAgICAgICAgICAgICAgIFJldHVybl9Db2RlX0VudW0nSW1hZ2UgKFJldHVybl9Db2RlIChDb2RlKSkKKyAgICAgICAgICAgICAgICAgICYgIjogIiAmIEVycm9yX01lc3NhZ2UpOworICAgICAgICAgZW5kOworICAgICAgZW5kIGlmOworICAgZW5kIENsb3NlOworCisgICAtLS0tLS0tLS0tLQorICAgLS0gQ1JDMzIgLS0KKyAgIC0tLS0tLS0tLS0tCisKKyAgIGZ1bmN0aW9uIENSQzMyCisgICAgIChDUkMgIDogaW4gVW5zaWduZWRfMzI7CisgICAgICBEYXRhIDogaW4gQWRhLlN0cmVhbXMuU3RyZWFtX0VsZW1lbnRfQXJyYXkpCisgICAgICByZXR1cm4gVW5zaWduZWRfMzIKKyAgIGlzCisgICAgICB1c2UgVGhpbjsKKyAgIGJlZ2luCisgICAgICByZXR1cm4gVW5zaWduZWRfMzIgKGNyYzMyIChVTG9uZyAoQ1JDKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEnQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEnTGVuZ3RoKSk7CisgICBlbmQgQ1JDMzI7CisKKyAgIHByb2NlZHVyZSBDUkMzMgorICAgICAoQ1JDICA6IGluIG91dCBVbnNpZ25lZF8zMjsKKyAgICAgIERhdGEgOiBpbiAgICAgQWRhLlN0cmVhbXMuU3RyZWFtX0VsZW1lbnRfQXJyYXkpIGlzCisgICBiZWdpbgorICAgICAgQ1JDIDo9IENSQzMyIChDUkMsIERhdGEpOworICAgZW5kIENSQzMyOworCisgICAtLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIERlZmxhdGVfSW5pdCAtLQorICAgLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgIHByb2NlZHVyZSBEZWZsYXRlX0luaXQKKyAgICAgKEZpbHRlciAgICAgICA6IGluIG91dCBGaWx0ZXJfVHlwZTsKKyAgICAgIExldmVsICAgICAgICA6IGluICAgICBDb21wcmVzc2lvbl9MZXZlbCAgOj0gRGVmYXVsdF9Db21wcmVzc2lvbjsKKyAgICAgIFN0cmF0ZWd5ICAgICA6IGluICAgICBTdHJhdGVneV9UeXBlICAgICAgOj0gRGVmYXVsdF9TdHJhdGVneTsKKyAgICAgIE1ldGhvZCAgICAgICA6IGluICAgICBDb21wcmVzc2lvbl9NZXRob2QgOj0gRGVmbGF0ZWQ7CisgICAgICBXaW5kb3dfQml0cyAgOiBpbiAgICAgV2luZG93X0JpdHNfVHlwZSAgIDo9IERlZmF1bHRfV2luZG93X0JpdHM7CisgICAgICBNZW1vcnlfTGV2ZWwgOiBpbiAgICAgTWVtb3J5X0xldmVsX1R5cGUgIDo9IERlZmF1bHRfTWVtb3J5X0xldmVsOworICAgICAgSGVhZGVyICAgICAgIDogaW4gICAgIEhlYWRlcl9UeXBlICAgICAgICA6PSBEZWZhdWx0KQorICAgaXMKKyAgICAgIHVzZSB0eXBlIFRoaW4uSW50OworICAgICAgV2luX0JpdHMgOiBUaGluLkludCA6PSBUaGluLkludCAoV2luZG93X0JpdHMpOworICAgYmVnaW4KKyAgICAgIGlmIElzX09wZW4gKEZpbHRlcikgdGhlbgorICAgICAgICAgcmFpc2UgU3RhdHVzX0Vycm9yOworICAgICAgZW5kIGlmOworCisgICAgICAtLSAgV2UgYWxsb3cgWkxpYiB0byBtYWtlIGhlYWRlciBvbmx5IGluIGNhc2Ugb2YgZGVmYXVsdCBoZWFkZXIgdHlwZS4KKyAgICAgIC0tICBPdGhlcndpc2Ugd2Ugd291bGQgZWl0aGVyIGRvIGhlYWRlciBieSBvdXJzZWxmcywgb3IgZG8gbm90IGRvCisgICAgICAtLSAgaGVhZGVyIGF0IGFsbC4KKworICAgICAgaWYgSGVhZGVyID0gTm9uZSBvciBlbHNlIEhlYWRlciA9IEdaaXAgdGhlbgorICAgICAgICAgV2luX0JpdHMgOj0gLVdpbl9CaXRzOworICAgICAgZW5kIGlmOworCisgICAgICAtLSAgRm9yIHRoZSBHWmlwIENSQyBjYWxjdWxhdGlvbiBhbmQgbWFrZSBoZWFkZXJzLgorCisgICAgICBpZiBIZWFkZXIgPSBHWmlwIHRoZW4KKyAgICAgICAgIEZpbHRlci5DUkMgICAgOj0gMDsKKyAgICAgICAgIEZpbHRlci5PZmZzZXQgOj0gU2ltcGxlX0daaXBfSGVhZGVyJ0ZpcnN0OworICAgICAgZWxzZQorICAgICAgICAgRmlsdGVyLk9mZnNldCA6PSBTaW1wbGVfR1ppcF9IZWFkZXInTGFzdCArIDE7CisgICAgICBlbmQgaWY7CisKKyAgICAgIEZpbHRlci5TdHJtICAgICAgICA6PSBuZXcgWl9TdHJlYW07CisgICAgICBGaWx0ZXIuQ29tcHJlc3Npb24gOj0gVHJ1ZTsKKyAgICAgIEZpbHRlci5TdHJlYW1fRW5kICA6PSBGYWxzZTsKKyAgICAgIEZpbHRlci5IZWFkZXIgICAgICA6PSBIZWFkZXI7CisKKyAgICAgIGlmIFRoaW4uRGVmbGF0ZV9Jbml0CisgICAgICAgICAgIChUb19UaGluX0FjY2VzcyAoRmlsdGVyLlN0cm0pLAorICAgICAgICAgICAgTGV2ZWwgICAgICA9PiBUaGluLkludCAoTGV2ZWwpLAorICAgICAgICAgICAgbWV0aG9kICAgICA9PiBUaGluLkludCAoTWV0aG9kKSwKKyAgICAgICAgICAgIHdpbmRvd0JpdHMgPT4gV2luX0JpdHMsCisgICAgICAgICAgICBtZW1MZXZlbCAgID0+IFRoaW4uSW50IChNZW1vcnlfTGV2ZWwpLAorICAgICAgICAgICAgc3RyYXRlZ3kgICA9PiBUaGluLkludCAoU3RyYXRlZ3kpKSAvPSBUaGluLlpfT0sKKyAgICAgIHRoZW4KKyAgICAgICAgIFJhaXNlX0Vycm9yIChGaWx0ZXIuU3RybS5hbGwpOworICAgICAgZW5kIGlmOworICAgZW5kIERlZmxhdGVfSW5pdDsKKworICAgLS0tLS0tLS0tLS0KKyAgIC0tIEZsdXNoIC0tCisgICAtLS0tLS0tLS0tLQorCisgICBwcm9jZWR1cmUgRmx1c2gKKyAgICAgKEZpbHRlciAgICA6IGluIG91dCBGaWx0ZXJfVHlwZTsKKyAgICAgIE91dF9EYXRhICA6ICAgIG91dCBBZGEuU3RyZWFtcy5TdHJlYW1fRWxlbWVudF9BcnJheTsKKyAgICAgIE91dF9MYXN0ICA6ICAgIG91dCBBZGEuU3RyZWFtcy5TdHJlYW1fRWxlbWVudF9PZmZzZXQ7CisgICAgICBGbHVzaCAgICAgOiBpbiAgICAgRmx1c2hfTW9kZSkKKyAgIGlzCisgICAgICBOb19EYXRhIDogU3RyZWFtX0VsZW1lbnRfQXJyYXkgOj0gKDEgLi4gMCA9PiAwKTsKKyAgICAgIExhc3QgICAgOiBTdHJlYW1fRWxlbWVudF9PZmZzZXQ7CisgICBiZWdpbgorICAgICAgVHJhbnNsYXRlIChGaWx0ZXIsIE5vX0RhdGEsIExhc3QsIE91dF9EYXRhLCBPdXRfTGFzdCwgRmx1c2gpOworICAgZW5kIEZsdXNoOworCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gR2VuZXJpY19UcmFuc2xhdGUgLS0KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgIHByb2NlZHVyZSBHZW5lcmljX1RyYW5zbGF0ZQorICAgICAoRmlsdGVyICAgICAgICAgIDogaW4gb3V0IFpMaWIuRmlsdGVyX1R5cGU7CisgICAgICBJbl9CdWZmZXJfU2l6ZSAgOiBpbiAgICAgSW50ZWdlciA6PSBEZWZhdWx0X0J1ZmZlcl9TaXplOworICAgICAgT3V0X0J1ZmZlcl9TaXplIDogaW4gICAgIEludGVnZXIgOj0gRGVmYXVsdF9CdWZmZXJfU2l6ZSkKKyAgIGlzCisgICAgICBJbl9CdWZmZXIgIDogU3RyZWFtX0VsZW1lbnRfQXJyYXkKKyAgICAgICAgICAgICAgICAgICAgICgxIC4uIFN0cmVhbV9FbGVtZW50X09mZnNldCAoSW5fQnVmZmVyX1NpemUpKTsKKyAgICAgIE91dF9CdWZmZXIgOiBTdHJlYW1fRWxlbWVudF9BcnJheQorICAgICAgICAgICAgICAgICAgICAgKDEgLi4gU3RyZWFtX0VsZW1lbnRfT2Zmc2V0IChPdXRfQnVmZmVyX1NpemUpKTsKKyAgICAgIExhc3QgICAgICAgOiBTdHJlYW1fRWxlbWVudF9PZmZzZXQ7CisgICAgICBJbl9MYXN0ICAgIDogU3RyZWFtX0VsZW1lbnRfT2Zmc2V0OworICAgICAgSW5fRmlyc3QgICA6IFN0cmVhbV9FbGVtZW50X09mZnNldDsKKyAgICAgIE91dF9MYXN0ICAgOiBTdHJlYW1fRWxlbWVudF9PZmZzZXQ7CisgICBiZWdpbgorICAgICAgTWFpbiA6IGxvb3AKKyAgICAgICAgIERhdGFfSW4gKEluX0J1ZmZlciwgTGFzdCk7CisKKyAgICAgICAgIEluX0ZpcnN0IDo9IEluX0J1ZmZlcidGaXJzdDsKKworICAgICAgICAgbG9vcAorICAgICAgICAgICAgVHJhbnNsYXRlCisgICAgICAgICAgICAgIChGaWx0ZXIgICA9PiBGaWx0ZXIsCisgICAgICAgICAgICAgICBJbl9EYXRhICA9PiBJbl9CdWZmZXIgKEluX0ZpcnN0IC4uIExhc3QpLAorICAgICAgICAgICAgICAgSW5fTGFzdCAgPT4gSW5fTGFzdCwKKyAgICAgICAgICAgICAgIE91dF9EYXRhID0+IE91dF9CdWZmZXIsCisgICAgICAgICAgICAgICBPdXRfTGFzdCA9PiBPdXRfTGFzdCwKKyAgICAgICAgICAgICAgIEZsdXNoICAgID0+IEZsdXNoX0ZpbmlzaCAoTGFzdCA8IEluX0J1ZmZlcidGaXJzdCkpOworCisgICAgICAgICAgICBpZiBPdXRfQnVmZmVyJ0ZpcnN0IDw9IE91dF9MYXN0IHRoZW4KKyAgICAgICAgICAgICAgIERhdGFfT3V0IChPdXRfQnVmZmVyIChPdXRfQnVmZmVyJ0ZpcnN0IC4uIE91dF9MYXN0KSk7CisgICAgICAgICAgICBlbmQgaWY7CisKKyAgICAgICAgICAgIGV4aXQgTWFpbiB3aGVuIFN0cmVhbV9FbmQgKEZpbHRlcik7CisKKyAgICAgICAgICAgIC0tICBUaGUgZW5kIG9mIGluIGJ1ZmZlci4KKworICAgICAgICAgICAgZXhpdCB3aGVuIEluX0xhc3QgPSBMYXN0OworCisgICAgICAgICAgICBJbl9GaXJzdCA6PSBJbl9MYXN0ICsgMTsKKyAgICAgICAgIGVuZCBsb29wOworICAgICAgZW5kIGxvb3AgTWFpbjsKKworICAgZW5kIEdlbmVyaWNfVHJhbnNsYXRlOworCisgICAtLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIEluZmxhdGVfSW5pdCAtLQorICAgLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgIHByb2NlZHVyZSBJbmZsYXRlX0luaXQKKyAgICAgKEZpbHRlciAgICAgIDogaW4gb3V0IEZpbHRlcl9UeXBlOworICAgICAgV2luZG93X0JpdHMgOiBpbiAgICAgV2luZG93X0JpdHNfVHlwZSA6PSBEZWZhdWx0X1dpbmRvd19CaXRzOworICAgICAgSGVhZGVyICAgICAgOiBpbiAgICAgSGVhZGVyX1R5cGUgICAgICA6PSBEZWZhdWx0KQorICAgaXMKKyAgICAgIHVzZSB0eXBlIFRoaW4uSW50OworICAgICAgV2luX0JpdHMgOiBUaGluLkludCA6PSBUaGluLkludCAoV2luZG93X0JpdHMpOworCisgICAgICBwcm9jZWR1cmUgQ2hlY2tfVmVyc2lvbjsKKyAgICAgIC0tICBDaGVjayB0aGUgbGF0ZXN0IGhlYWRlciB0eXBlcyBjb21wYXRpYmlsaXR5LgorCisgICAgICBwcm9jZWR1cmUgQ2hlY2tfVmVyc2lvbiBpcworICAgICAgYmVnaW4KKyAgICAgICAgIGlmIFZlcnNpb24gPD0gIjEuMS40IiB0aGVuCisgICAgICAgICAgICBSYWlzZV9FcnJvcgorICAgICAgICAgICAgICAoIkluZmxhdGUgaGVhZGVyIHR5cGUgIiAmIEhlYWRlcl9UeXBlJ0ltYWdlIChIZWFkZXIpCisgICAgICAgICAgICAgICAmICIgaW5jb21wYXRpYmxlIHdpdGggWkxpYiB2ZXJzaW9uICIgJiBWZXJzaW9uKTsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgIGVuZCBDaGVja19WZXJzaW9uOworCisgICBiZWdpbgorICAgICAgaWYgSXNfT3BlbiAoRmlsdGVyKSB0aGVuCisgICAgICAgICByYWlzZSBTdGF0dXNfRXJyb3I7CisgICAgICBlbmQgaWY7CisKKyAgICAgIGNhc2UgSGVhZGVyIGlzCisgICAgICAgICB3aGVuIE5vbmUgPT4KKyAgICAgICAgICAgIENoZWNrX1ZlcnNpb247CisKKyAgICAgICAgICAgIC0tICBJbmZsYXRlIGRhdGEgd2l0aG91dCBoZWFkZXJzIGRldGVybWluZWQKKyAgICAgICAgICAgIC0tICBieSBuZWdhdGl2ZSBXaW5fQml0cy4KKworICAgICAgICAgICAgV2luX0JpdHMgOj0gLVdpbl9CaXRzOworICAgICAgICAgd2hlbiBHWmlwID0+CisgICAgICAgICAgICBDaGVja19WZXJzaW9uOworCisgICAgICAgICAgICAtLSAgSW5mbGF0ZSBnemlwIGRhdGEgZGVmaW5lZCBieSBmbGFnIDE2LgorCisgICAgICAgICAgICBXaW5fQml0cyA6PSBXaW5fQml0cyArIDE2OworICAgICAgICAgd2hlbiBBdXRvID0+CisgICAgICAgICAgICBDaGVja19WZXJzaW9uOworCisgICAgICAgICAgICAtLSAgSW5mbGF0ZSB3aXRoIGF1dG9tYXRpYyBkZXRlY3Rpb24KKyAgICAgICAgICAgIC0tICBvZiBnemlwIG9yIG5hdGl2ZSBoZWFkZXIgZGVmaW5lZCBieSBmbGFnIDMyLgorCisgICAgICAgICAgICBXaW5fQml0cyA6PSBXaW5fQml0cyArIDMyOworICAgICAgICAgd2hlbiBEZWZhdWx0ID0+IG51bGw7CisgICAgICBlbmQgY2FzZTsKKworICAgICAgRmlsdGVyLlN0cm0gICAgICAgIDo9IG5ldyBaX1N0cmVhbTsKKyAgICAgIEZpbHRlci5Db21wcmVzc2lvbiA6PSBGYWxzZTsKKyAgICAgIEZpbHRlci5TdHJlYW1fRW5kICA6PSBGYWxzZTsKKyAgICAgIEZpbHRlci5IZWFkZXIgICAgICA6PSBIZWFkZXI7CisKKyAgICAgIGlmIFRoaW4uSW5mbGF0ZV9Jbml0CisgICAgICAgICAoVG9fVGhpbl9BY2Nlc3MgKEZpbHRlci5TdHJtKSwgV2luX0JpdHMpIC89IFRoaW4uWl9PSworICAgICAgdGhlbgorICAgICAgICAgUmFpc2VfRXJyb3IgKEZpbHRlci5TdHJtLmFsbCk7CisgICAgICBlbmQgaWY7CisgICBlbmQgSW5mbGF0ZV9Jbml0OworCisgICAtLS0tLS0tLS0tLS0tCisgICAtLSBJc19PcGVuIC0tCisgICAtLS0tLS0tLS0tLS0tCisKKyAgIGZ1bmN0aW9uIElzX09wZW4gKEZpbHRlciA6IGluIEZpbHRlcl9UeXBlKSByZXR1cm4gQm9vbGVhbiBpcworICAgYmVnaW4KKyAgICAgIHJldHVybiBGaWx0ZXIuU3RybSAvPSBudWxsOworICAgZW5kIElzX09wZW47CisKKyAgIC0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBSYWlzZV9FcnJvciAtLQorICAgLS0tLS0tLS0tLS0tLS0tLS0KKworICAgcHJvY2VkdXJlIFJhaXNlX0Vycm9yIChNZXNzYWdlIDogaW4gU3RyaW5nKSBpcworICAgYmVnaW4KKyAgICAgIEFkYS5FeGNlcHRpb25zLlJhaXNlX0V4Y2VwdGlvbiAoWkxpYl9FcnJvcidJZGVudGl0eSwgTWVzc2FnZSk7CisgICBlbmQgUmFpc2VfRXJyb3I7CisKKyAgIHByb2NlZHVyZSBSYWlzZV9FcnJvciAoU3RyZWFtIDogaW4gWl9TdHJlYW0pIGlzCisgICBiZWdpbgorICAgICAgUmFpc2VfRXJyb3IgKExhc3RfRXJyb3JfTWVzc2FnZSAoU3RyZWFtKSk7CisgICBlbmQgUmFpc2VfRXJyb3I7CisKKyAgIC0tLS0tLS0tLS0KKyAgIC0tIFJlYWQgLS0KKyAgIC0tLS0tLS0tLS0KKworICAgcHJvY2VkdXJlIFJlYWQKKyAgICAgKEZpbHRlciA6IGluIG91dCBGaWx0ZXJfVHlwZTsKKyAgICAgIEl0ZW0gICA6ICAgIG91dCBBZGEuU3RyZWFtcy5TdHJlYW1fRWxlbWVudF9BcnJheTsKKyAgICAgIExhc3QgICA6ICAgIG91dCBBZGEuU3RyZWFtcy5TdHJlYW1fRWxlbWVudF9PZmZzZXQ7CisgICAgICBGbHVzaCAgOiBpbiAgICAgRmx1c2hfTW9kZSA6PSBOb19GbHVzaCkKKyAgIGlzCisgICAgICBJbl9MYXN0ICAgIDogU3RyZWFtX0VsZW1lbnRfT2Zmc2V0OworICAgICAgSXRlbV9GaXJzdCA6IEFkYS5TdHJlYW1zLlN0cmVhbV9FbGVtZW50X09mZnNldCA6PSBJdGVtJ0ZpcnN0OworICAgICAgVl9GbHVzaCAgICA6IEZsdXNoX01vZGUgOj0gRmx1c2g7CisKKyAgIGJlZ2luCisgICAgICBwcmFnbWEgQXNzZXJ0IChSZXN0X0ZpcnN0IGluIEJ1ZmZlcidGaXJzdCAuLiBCdWZmZXInTGFzdCArIDEpOworICAgICAgcHJhZ21hIEFzc2VydCAoUmVzdF9MYXN0IGluIEJ1ZmZlcidGaXJzdCAtIDEgLi4gQnVmZmVyJ0xhc3QpOworCisgICAgICBsb29wCisgICAgICAgICBpZiBSZXN0X0xhc3QgPSBCdWZmZXInRmlyc3QgLSAxIHRoZW4KKyAgICAgICAgICAgIFZfRmx1c2ggOj0gRmluaXNoOworCisgICAgICAgICBlbHNpZiBSZXN0X0ZpcnN0ID4gUmVzdF9MYXN0IHRoZW4KKyAgICAgICAgICAgIFJlYWQgKEJ1ZmZlciwgUmVzdF9MYXN0KTsKKyAgICAgICAgICAgIFJlc3RfRmlyc3QgOj0gQnVmZmVyJ0ZpcnN0OworCisgICAgICAgICAgICBpZiBSZXN0X0xhc3QgPCBCdWZmZXInRmlyc3QgdGhlbgorICAgICAgICAgICAgICAgVl9GbHVzaCA6PSBGaW5pc2g7CisgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICBlbmQgaWY7CisKKyAgICAgICAgIFRyYW5zbGF0ZQorICAgICAgICAgICAoRmlsdGVyICAgPT4gRmlsdGVyLAorICAgICAgICAgICAgSW5fRGF0YSAgPT4gQnVmZmVyIChSZXN0X0ZpcnN0IC4uIFJlc3RfTGFzdCksCisgICAgICAgICAgICBJbl9MYXN0ICA9PiBJbl9MYXN0LAorICAgICAgICAgICAgT3V0X0RhdGEgPT4gSXRlbSAoSXRlbV9GaXJzdCAuLiBJdGVtJ0xhc3QpLAorICAgICAgICAgICAgT3V0X0xhc3QgPT4gTGFzdCwKKyAgICAgICAgICAgIEZsdXNoICAgID0+IFZfRmx1c2gpOworCisgICAgICAgICBSZXN0X0ZpcnN0IDo9IEluX0xhc3QgKyAxOworCisgICAgICAgICBleGl0IHdoZW4gU3RyZWFtX0VuZCAoRmlsdGVyKQorICAgICAgICAgICBvciBlbHNlIExhc3QgPSBJdGVtJ0xhc3QKKyAgICAgICAgICAgb3IgZWxzZSAoTGFzdCA+PSBJdGVtJ0ZpcnN0IGFuZCB0aGVuIEFsbG93X1JlYWRfU29tZSk7CisKKyAgICAgICAgIEl0ZW1fRmlyc3QgOj0gTGFzdCArIDE7CisgICAgICBlbmQgbG9vcDsKKyAgIGVuZCBSZWFkOworCisgICAtLS0tLS0tLS0tLS0tLS0tCisgICAtLSBTdHJlYW1fRW5kIC0tCisgICAtLS0tLS0tLS0tLS0tLS0tCisKKyAgIGZ1bmN0aW9uIFN0cmVhbV9FbmQgKEZpbHRlciA6IGluIEZpbHRlcl9UeXBlKSByZXR1cm4gQm9vbGVhbiBpcworICAgYmVnaW4KKyAgICAgIGlmIEZpbHRlci5IZWFkZXIgPSBHWmlwIGFuZCBGaWx0ZXIuQ29tcHJlc3Npb24gdGhlbgorICAgICAgICAgcmV0dXJuIEZpbHRlci5TdHJlYW1fRW5kCisgICAgICAgICAgICBhbmQgdGhlbiBGaWx0ZXIuT2Zmc2V0ID0gRm9vdGVyX0FycmF5J0xhc3QgKyAxOworICAgICAgZWxzZQorICAgICAgICAgcmV0dXJuIEZpbHRlci5TdHJlYW1fRW5kOworICAgICAgZW5kIGlmOworICAgZW5kIFN0cmVhbV9FbmQ7CisKKyAgIC0tLS0tLS0tLS0tLS0tCisgICAtLSBUb3RhbF9JbiAtLQorICAgLS0tLS0tLS0tLS0tLS0KKworICAgZnVuY3Rpb24gVG90YWxfSW4gKEZpbHRlciA6IGluIEZpbHRlcl9UeXBlKSByZXR1cm4gQ291bnQgaXMKKyAgIGJlZ2luCisgICAgICByZXR1cm4gQ291bnQgKFRoaW4uVG90YWxfSW4gKFRvX1RoaW5fQWNjZXNzIChGaWx0ZXIuU3RybSkuYWxsKSk7CisgICBlbmQgVG90YWxfSW47CisKKyAgIC0tLS0tLS0tLS0tLS0tLQorICAgLS0gVG90YWxfT3V0IC0tCisgICAtLS0tLS0tLS0tLS0tLS0KKworICAgZnVuY3Rpb24gVG90YWxfT3V0IChGaWx0ZXIgOiBpbiBGaWx0ZXJfVHlwZSkgcmV0dXJuIENvdW50IGlzCisgICBiZWdpbgorICAgICAgcmV0dXJuIENvdW50IChUaGluLlRvdGFsX091dCAoVG9fVGhpbl9BY2Nlc3MgKEZpbHRlci5TdHJtKS5hbGwpKTsKKyAgIGVuZCBUb3RhbF9PdXQ7CisKKyAgIC0tLS0tLS0tLS0tLS0tLQorICAgLS0gVHJhbnNsYXRlIC0tCisgICAtLS0tLS0tLS0tLS0tLS0KKworICAgcHJvY2VkdXJlIFRyYW5zbGF0ZQorICAgICAoRmlsdGVyICAgIDogaW4gb3V0IEZpbHRlcl9UeXBlOworICAgICAgSW5fRGF0YSAgIDogaW4gICAgIEFkYS5TdHJlYW1zLlN0cmVhbV9FbGVtZW50X0FycmF5OworICAgICAgSW5fTGFzdCAgIDogICAgb3V0IEFkYS5TdHJlYW1zLlN0cmVhbV9FbGVtZW50X09mZnNldDsKKyAgICAgIE91dF9EYXRhICA6ICAgIG91dCBBZGEuU3RyZWFtcy5TdHJlYW1fRWxlbWVudF9BcnJheTsKKyAgICAgIE91dF9MYXN0ICA6ICAgIG91dCBBZGEuU3RyZWFtcy5TdHJlYW1fRWxlbWVudF9PZmZzZXQ7CisgICAgICBGbHVzaCAgICAgOiBpbiAgICAgRmx1c2hfTW9kZSkgaXMKKyAgIGJlZ2luCisgICAgICBpZiBGaWx0ZXIuSGVhZGVyID0gR1ppcCBhbmQgdGhlbiBGaWx0ZXIuQ29tcHJlc3Npb24gdGhlbgorICAgICAgICAgVHJhbnNsYXRlX0daaXAKKyAgICAgICAgICAgKEZpbHRlciAgID0+IEZpbHRlciwKKyAgICAgICAgICAgIEluX0RhdGEgID0+IEluX0RhdGEsCisgICAgICAgICAgICBJbl9MYXN0ICA9PiBJbl9MYXN0LAorICAgICAgICAgICAgT3V0X0RhdGEgPT4gT3V0X0RhdGEsCisgICAgICAgICAgICBPdXRfTGFzdCA9PiBPdXRfTGFzdCwKKyAgICAgICAgICAgIEZsdXNoICAgID0+IEZsdXNoKTsKKyAgICAgIGVsc2UKKyAgICAgICAgIFRyYW5zbGF0ZV9BdXRvCisgICAgICAgICAgIChGaWx0ZXIgICA9PiBGaWx0ZXIsCisgICAgICAgICAgICBJbl9EYXRhICA9PiBJbl9EYXRhLAorICAgICAgICAgICAgSW5fTGFzdCAgPT4gSW5fTGFzdCwKKyAgICAgICAgICAgIE91dF9EYXRhID0+IE91dF9EYXRhLAorICAgICAgICAgICAgT3V0X0xhc3QgPT4gT3V0X0xhc3QsCisgICAgICAgICAgICBGbHVzaCAgICA9PiBGbHVzaCk7CisgICAgICBlbmQgaWY7CisgICBlbmQgVHJhbnNsYXRlOworCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gVHJhbnNsYXRlX0F1dG8gLS0KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgIHByb2NlZHVyZSBUcmFuc2xhdGVfQXV0bworICAgICAoRmlsdGVyICAgIDogaW4gb3V0IEZpbHRlcl9UeXBlOworICAgICAgSW5fRGF0YSAgIDogaW4gICAgIEFkYS5TdHJlYW1zLlN0cmVhbV9FbGVtZW50X0FycmF5OworICAgICAgSW5fTGFzdCAgIDogICAgb3V0IEFkYS5TdHJlYW1zLlN0cmVhbV9FbGVtZW50X09mZnNldDsKKyAgICAgIE91dF9EYXRhICA6ICAgIG91dCBBZGEuU3RyZWFtcy5TdHJlYW1fRWxlbWVudF9BcnJheTsKKyAgICAgIE91dF9MYXN0ICA6ICAgIG91dCBBZGEuU3RyZWFtcy5TdHJlYW1fRWxlbWVudF9PZmZzZXQ7CisgICAgICBGbHVzaCAgICAgOiBpbiAgICAgRmx1c2hfTW9kZSkKKyAgIGlzCisgICAgICB1c2UgdHlwZSBUaGluLkludDsKKyAgICAgIENvZGUgOiBUaGluLkludDsKKworICAgYmVnaW4KKyAgICAgIGlmIG5vdCBJc19PcGVuIChGaWx0ZXIpIHRoZW4KKyAgICAgICAgIHJhaXNlIFN0YXR1c19FcnJvcjsKKyAgICAgIGVuZCBpZjsKKworICAgICAgaWYgT3V0X0RhdGEnTGVuZ3RoID0gMCBhbmQgdGhlbiBJbl9EYXRhJ0xlbmd0aCA9IDAgdGhlbgorICAgICAgICAgcmFpc2UgQ29uc3RyYWludF9FcnJvcjsKKyAgICAgIGVuZCBpZjsKKworICAgICAgU2V0X091dCAoRmlsdGVyLlN0cm0uYWxsLCBPdXRfRGF0YSdBZGRyZXNzLCBPdXRfRGF0YSdMZW5ndGgpOworICAgICAgU2V0X0luICAoRmlsdGVyLlN0cm0uYWxsLCBJbl9EYXRhJ0FkZHJlc3MsIEluX0RhdGEnTGVuZ3RoKTsKKworICAgICAgQ29kZSA6PSBGbGF0ZSAoRmlsdGVyLkNvbXByZXNzaW9uKS5TdGVwCisgICAgICAgIChUb19UaGluX0FjY2VzcyAoRmlsdGVyLlN0cm0pLAorICAgICAgICAgVGhpbi5JbnQgKEZsdXNoKSk7CisKKyAgICAgIGlmIENvZGUgPSBUaGluLlpfU1RSRUFNX0VORCB0aGVuCisgICAgICAgICBGaWx0ZXIuU3RyZWFtX0VuZCA6PSBUcnVlOworICAgICAgZWxzZQorICAgICAgICAgQ2hlY2tfRXJyb3IgKEZpbHRlci5TdHJtLmFsbCwgQ29kZSk7CisgICAgICBlbmQgaWY7CisKKyAgICAgIEluX0xhc3QgIDo9IEluX0RhdGEnTGFzdAorICAgICAgICAgLSBTdHJlYW1fRWxlbWVudF9PZmZzZXQgKEF2YWlsX0luIChGaWx0ZXIuU3RybS5hbGwpKTsKKyAgICAgIE91dF9MYXN0IDo9IE91dF9EYXRhJ0xhc3QKKyAgICAgICAgIC0gU3RyZWFtX0VsZW1lbnRfT2Zmc2V0IChBdmFpbF9PdXQgKEZpbHRlci5TdHJtLmFsbCkpOworICAgZW5kIFRyYW5zbGF0ZV9BdXRvOworCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gVHJhbnNsYXRlX0daaXAgLS0KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgIHByb2NlZHVyZSBUcmFuc2xhdGVfR1ppcAorICAgICAoRmlsdGVyICAgIDogaW4gb3V0IEZpbHRlcl9UeXBlOworICAgICAgSW5fRGF0YSAgIDogaW4gICAgIEFkYS5TdHJlYW1zLlN0cmVhbV9FbGVtZW50X0FycmF5OworICAgICAgSW5fTGFzdCAgIDogICAgb3V0IEFkYS5TdHJlYW1zLlN0cmVhbV9FbGVtZW50X09mZnNldDsKKyAgICAgIE91dF9EYXRhICA6ICAgIG91dCBBZGEuU3RyZWFtcy5TdHJlYW1fRWxlbWVudF9BcnJheTsKKyAgICAgIE91dF9MYXN0ICA6ICAgIG91dCBBZGEuU3RyZWFtcy5TdHJlYW1fRWxlbWVudF9PZmZzZXQ7CisgICAgICBGbHVzaCAgICAgOiBpbiAgICAgRmx1c2hfTW9kZSkKKyAgIGlzCisgICAgICBPdXRfRmlyc3QgOiBTdHJlYW1fRWxlbWVudF9PZmZzZXQ7CisKKyAgICAgIHByb2NlZHVyZSBBZGRfRGF0YSAoRGF0YSA6IGluIFN0cmVhbV9FbGVtZW50X0FycmF5KTsKKyAgICAgIC0tICBBZGQgZGF0YSB0byBzdHJlYW0gZnJvbSB0aGUgRmlsdGVyLk9mZnNldCB0aWxsIG5lY2Vzc2FyeSwKKyAgICAgIC0tICB1c2VkIGZvciBhZGQgZ3ppcCBoZWFkci9mb290ZXIuCisKKyAgICAgIHByb2NlZHVyZSBQdXRfMzIKKyAgICAgICAgKEl0ZW0gOiBpbiBvdXQgU3RyZWFtX0VsZW1lbnRfQXJyYXk7CisgICAgICAgICBEYXRhIDogaW4gICAgIFVuc2lnbmVkXzMyKTsKKyAgICAgIHByYWdtYSBJbmxpbmUgKFB1dF8zMik7CisKKyAgICAgIC0tLS0tLS0tLS0tLS0tCisgICAgICAtLSBBZGRfRGF0YSAtLQorICAgICAgLS0tLS0tLS0tLS0tLS0KKworICAgICAgcHJvY2VkdXJlIEFkZF9EYXRhIChEYXRhIDogaW4gU3RyZWFtX0VsZW1lbnRfQXJyYXkpIGlzCisgICAgICAgICBEYXRhX0ZpcnN0IDogU3RyZWFtX0VsZW1lbnRfT2Zmc2V0IHJlbmFtZXMgRmlsdGVyLk9mZnNldDsKKyAgICAgICAgIERhdGFfTGFzdCAgOiBTdHJlYW1fRWxlbWVudF9PZmZzZXQ7CisgICAgICAgICBEYXRhX0xlbiAgIDogU3RyZWFtX0VsZW1lbnRfT2Zmc2V0OyAtLSAgLTEKKyAgICAgICAgIE91dF9MZW4gICAgOiBTdHJlYW1fRWxlbWVudF9PZmZzZXQ7IC0tICAtMQorICAgICAgYmVnaW4KKyAgICAgICAgIE91dF9GaXJzdCA6PSBPdXRfTGFzdCArIDE7CisKKyAgICAgICAgIGlmIERhdGFfRmlyc3QgPiBEYXRhJ0xhc3QgdGhlbgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgZW5kIGlmOworCisgICAgICAgICBEYXRhX0xlbiAgOj0gRGF0YSdMYXN0ICAgICAtIERhdGFfRmlyc3Q7CisgICAgICAgICBPdXRfTGVuICAgOj0gT3V0X0RhdGEnTGFzdCAtIE91dF9GaXJzdDsKKworICAgICAgICAgaWYgRGF0YV9MZW4gPD0gT3V0X0xlbiB0aGVuCisgICAgICAgICAgICBPdXRfTGFzdCAgOj0gT3V0X0ZpcnN0ICArIERhdGFfTGVuOworICAgICAgICAgICAgRGF0YV9MYXN0IDo9IERhdGEnTGFzdDsKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIE91dF9MYXN0ICA6PSBPdXRfRGF0YSdMYXN0OworICAgICAgICAgICAgRGF0YV9MYXN0IDo9IERhdGFfRmlyc3QgKyBPdXRfTGVuOworICAgICAgICAgZW5kIGlmOworCisgICAgICAgICBPdXRfRGF0YSAoT3V0X0ZpcnN0IC4uIE91dF9MYXN0KSA6PSBEYXRhIChEYXRhX0ZpcnN0IC4uIERhdGFfTGFzdCk7CisKKyAgICAgICAgIERhdGFfRmlyc3QgOj0gRGF0YV9MYXN0ICsgMTsKKyAgICAgICAgIE91dF9GaXJzdCAgOj0gT3V0X0xhc3QgKyAxOworICAgICAgZW5kIEFkZF9EYXRhOworCisgICAgICAtLS0tLS0tLS0tLS0KKyAgICAgIC0tIFB1dF8zMiAtLQorICAgICAgLS0tLS0tLS0tLS0tCisKKyAgICAgIHByb2NlZHVyZSBQdXRfMzIKKyAgICAgICAgKEl0ZW0gOiBpbiBvdXQgU3RyZWFtX0VsZW1lbnRfQXJyYXk7CisgICAgICAgICBEYXRhIDogaW4gICAgIFVuc2lnbmVkXzMyKQorICAgICAgaXMKKyAgICAgICAgIEQgOiBVbnNpZ25lZF8zMiA6PSBEYXRhOworICAgICAgYmVnaW4KKyAgICAgICAgIGZvciBKIGluIEl0ZW0nRmlyc3QgLi4gSXRlbSdGaXJzdCArIDMgbG9vcAorICAgICAgICAgICAgSXRlbSAoSikgOj0gU3RyZWFtX0VsZW1lbnQgKEQgYW5kIDE2I0ZGIyk7CisgICAgICAgICAgICBEIDo9IFNoaWZ0X1JpZ2h0IChELCA4KTsKKyAgICAgICAgIGVuZCBsb29wOworICAgICAgZW5kIFB1dF8zMjsKKworICAgYmVnaW4KKyAgICAgIE91dF9MYXN0IDo9IE91dF9EYXRhJ0ZpcnN0IC0gMTsKKworICAgICAgaWYgbm90IEZpbHRlci5TdHJlYW1fRW5kIHRoZW4KKyAgICAgICAgIEFkZF9EYXRhIChTaW1wbGVfR1ppcF9IZWFkZXIpOworCisgICAgICAgICBUcmFuc2xhdGVfQXV0bworICAgICAgICAgICAoRmlsdGVyICAgPT4gRmlsdGVyLAorICAgICAgICAgICAgSW5fRGF0YSAgPT4gSW5fRGF0YSwKKyAgICAgICAgICAgIEluX0xhc3QgID0+IEluX0xhc3QsCisgICAgICAgICAgICBPdXRfRGF0YSA9PiBPdXRfRGF0YSAoT3V0X0ZpcnN0IC4uIE91dF9EYXRhJ0xhc3QpLAorICAgICAgICAgICAgT3V0X0xhc3QgPT4gT3V0X0xhc3QsCisgICAgICAgICAgICBGbHVzaCAgICA9PiBGbHVzaCk7CisKKyAgICAgICAgIENSQzMyIChGaWx0ZXIuQ1JDLCBJbl9EYXRhIChJbl9EYXRhJ0ZpcnN0IC4uIEluX0xhc3QpKTsKKyAgICAgIGVuZCBpZjsKKworICAgICAgaWYgRmlsdGVyLlN0cmVhbV9FbmQgYW5kIHRoZW4gT3V0X0xhc3QgPD0gT3V0X0RhdGEnTGFzdCB0aGVuCisgICAgICAgICAtLSAgVGhpcyBkZXRlY3Rpb24gbWV0aG9kIHdvdWxkIHdvcmsgb25seSB3aGVuCisgICAgICAgICAtLSAgU2ltcGxlX0daaXBfSGVhZGVyJ0xhc3QgPiBGb290ZXJfQXJyYXknTGFzdAorCisgICAgICAgICBpZiBGaWx0ZXIuT2Zmc2V0ID0gU2ltcGxlX0daaXBfSGVhZGVyJ0xhc3QgKyAxIHRoZW4KKyAgICAgICAgICAgIEZpbHRlci5PZmZzZXQgOj0gRm9vdGVyX0FycmF5J0ZpcnN0OworICAgICAgICAgZW5kIGlmOworCisgICAgICAgICBkZWNsYXJlCisgICAgICAgICAgICBGb290ZXIgOiBGb290ZXJfQXJyYXk7CisgICAgICAgICBiZWdpbgorICAgICAgICAgICAgUHV0XzMyIChGb290ZXIsIEZpbHRlci5DUkMpOworICAgICAgICAgICAgUHV0XzMyIChGb290ZXIgKEZvb3RlcidGaXJzdCArIDQgLi4gRm9vdGVyJ0xhc3QpLAorICAgICAgICAgICAgICAgICAgICBVbnNpZ25lZF8zMiAoVG90YWxfSW4gKEZpbHRlcikpKTsKKyAgICAgICAgICAgIEFkZF9EYXRhIChGb290ZXIpOworICAgICAgICAgZW5kOworICAgICAgZW5kIGlmOworICAgZW5kIFRyYW5zbGF0ZV9HWmlwOworCisgICAtLS0tLS0tLS0tLS0tCisgICAtLSBWZXJzaW9uIC0tCisgICAtLS0tLS0tLS0tLS0tCisKKyAgIGZ1bmN0aW9uIFZlcnNpb24gcmV0dXJuIFN0cmluZyBpcworICAgYmVnaW4KKyAgICAgIHJldHVybiBJbnRlcmZhY2VzLkMuU3RyaW5ncy5WYWx1ZSAoVGhpbi56bGliVmVyc2lvbik7CisgICBlbmQgVmVyc2lvbjsKKworICAgLS0tLS0tLS0tLS0KKyAgIC0tIFdyaXRlIC0tCisgICAtLS0tLS0tLS0tLQorCisgICBwcm9jZWR1cmUgV3JpdGUKKyAgICAgKEZpbHRlciA6IGluIG91dCBGaWx0ZXJfVHlwZTsKKyAgICAgIEl0ZW0gICA6IGluICAgICBBZGEuU3RyZWFtcy5TdHJlYW1fRWxlbWVudF9BcnJheTsKKyAgICAgIEZsdXNoICA6IGluICAgICBGbHVzaF9Nb2RlIDo9IE5vX0ZsdXNoKQorICAgaXMKKyAgICAgIEJ1ZmZlciAgIDogU3RyZWFtX0VsZW1lbnRfQXJyYXkgKDEgLi4gQnVmZmVyX1NpemUpOworICAgICAgSW5fTGFzdCAgOiBTdHJlYW1fRWxlbWVudF9PZmZzZXQ7CisgICAgICBPdXRfTGFzdCA6IFN0cmVhbV9FbGVtZW50X09mZnNldDsKKyAgICAgIEluX0ZpcnN0IDogU3RyZWFtX0VsZW1lbnRfT2Zmc2V0IDo9IEl0ZW0nRmlyc3Q7CisgICBiZWdpbgorICAgICAgaWYgSXRlbSdMZW5ndGggPSAwIGFuZCBGbHVzaCA9IE5vX0ZsdXNoIHRoZW4KKyAgICAgICAgIHJldHVybjsKKyAgICAgIGVuZCBpZjsKKworICAgICAgbG9vcAorICAgICAgICAgVHJhbnNsYXRlCisgICAgICAgICAgIChGaWx0ZXIgICA9PiBGaWx0ZXIsCisgICAgICAgICAgICBJbl9EYXRhICA9PiBJdGVtIChJbl9GaXJzdCAuLiBJdGVtJ0xhc3QpLAorICAgICAgICAgICAgSW5fTGFzdCAgPT4gSW5fTGFzdCwKKyAgICAgICAgICAgIE91dF9EYXRhID0+IEJ1ZmZlciwKKyAgICAgICAgICAgIE91dF9MYXN0ID0+IE91dF9MYXN0LAorICAgICAgICAgICAgRmx1c2ggICAgPT4gRmx1c2gpOworCisgICAgICAgICBpZiBPdXRfTGFzdCA+PSBCdWZmZXInRmlyc3QgdGhlbgorICAgICAgICAgICAgV3JpdGUgKEJ1ZmZlciAoMSAuLiBPdXRfTGFzdCkpOworICAgICAgICAgZW5kIGlmOworCisgICAgICAgICBleGl0IHdoZW4gSW5fTGFzdCA9IEl0ZW0nTGFzdCBvciBTdHJlYW1fRW5kIChGaWx0ZXIpOworCisgICAgICAgICBJbl9GaXJzdCA6PSBJbl9MYXN0ICsgMTsKKyAgICAgIGVuZCBsb29wOworICAgZW5kIFdyaXRlOworCitlbmQgWkxpYjsKZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL2FkYS96bGliLmFkcyBiL3NyYy9jb250cmliL2FkYS96bGliLmFkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWZmYzQwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbnRyaWIvYWRhL3psaWIuYWRzCkBAIC0wLDAgKzEsMzI4IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgIFpMaWIgZm9yIEFkYSB0aGljayBiaW5kaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDQgRG1pdHJpeSBBbmlzaW1rb3YgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAgIC0tCistLSAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAgLS0KKy0tICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgICAtLQorLS0gIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0ICAgICAtLQorLS0gIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICAgICAgIC0tCistLSAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgICAgICAgLS0KKy0tICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICAgLS0KKy0tICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCAtLQorLS0gIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZSBnZW5lcmljcyBmcm9tIHRoaXMgICAtLQorLS0gIHVuaXQsIG9yIHlvdSBsaW5rIHRoaXMgdW5pdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgIC0tCistLSAgdGhpcyAgdW5pdCAgZG9lcyBub3QgIGJ5IGl0c2VsZiBjYXVzZSAgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlICAgLS0KKy0tICBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gVGhpcyBleGNlcHRpb24gZG9lcyBub3QgICAgICAtLQorLS0gIGhvd2V2ZXIgaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSAgbWlnaHQgYmUgIC0tCistLSAgY292ZXJlZCBieSB0aGUgIEdOVSBQdWJsaWMgTGljZW5zZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistLSAgJElkOiB6bGliLmFkcyx2IDEuMjYgMjAwNC8wOS8wNiAwNjo1MzoxOSB2YWd1bCBFeHAgJAorCit3aXRoIEFkYS5TdHJlYW1zOworCit3aXRoIEludGVyZmFjZXM7CisKK3BhY2thZ2UgWkxpYiBpcworCisgICBaTGliX0Vycm9yICAgOiBleGNlcHRpb247CisgICBTdGF0dXNfRXJyb3IgOiBleGNlcHRpb247CisKKyAgIHR5cGUgQ29tcHJlc3Npb25fTGV2ZWwgaXMgbmV3IEludGVnZXIgcmFuZ2UgLTEgLi4gOTsKKworICAgdHlwZSBGbHVzaF9Nb2RlIGlzIHByaXZhdGU7CisKKyAgIHR5cGUgQ29tcHJlc3Npb25fTWV0aG9kIGlzIHByaXZhdGU7CisKKyAgIHR5cGUgV2luZG93X0JpdHNfVHlwZSBpcyBuZXcgSW50ZWdlciByYW5nZSA4IC4uIDE1OworCisgICB0eXBlIE1lbW9yeV9MZXZlbF9UeXBlIGlzIG5ldyBJbnRlZ2VyIHJhbmdlIDEgLi4gOTsKKworICAgdHlwZSBVbnNpZ25lZF8zMiBpcyBuZXcgSW50ZXJmYWNlcy5VbnNpZ25lZF8zMjsKKworICAgdHlwZSBTdHJhdGVneV9UeXBlIGlzIHByaXZhdGU7CisKKyAgIHR5cGUgSGVhZGVyX1R5cGUgaXMgKE5vbmUsIEF1dG8sIERlZmF1bHQsIEdaaXApOworICAgLS0gIEhlYWRlciB0eXBlIHVzYWdlIGhhdmUgYSBzb21lIGxpbWl0YXRpb24gZm9yIGluZmxhdGUuCisgICAtLSAgU2VlIGNvbW1lbnQgZm9yIEluZmxhdGVfSW5pdC4KKworICAgc3VidHlwZSBDb3VudCBpcyBBZGEuU3RyZWFtcy5TdHJlYW1fRWxlbWVudF9Db3VudDsKKworICAgRGVmYXVsdF9NZW1vcnlfTGV2ZWwgOiBjb25zdGFudCBNZW1vcnlfTGV2ZWxfVHlwZSA6PSA4OworICAgRGVmYXVsdF9XaW5kb3dfQml0cyAgOiBjb25zdGFudCBXaW5kb3dfQml0c19UeXBlICA6PSAxNTsKKworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gQ29tcHJlc3Npb24gbWV0aG9kIGNvbnN0YW50cyAtLQorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICBEZWZsYXRlZCA6IGNvbnN0YW50IENvbXByZXNzaW9uX01ldGhvZDsKKyAgIC0tICBPbmx5IG9uZSBtZXRob2QgYWxsb3dlZCBpbiB0aGlzIFpMaWIgdmVyc2lvbgorCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIENvbXByZXNzaW9uIGxldmVsIGNvbnN0YW50cyAtLQorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgIE5vX0NvbXByZXNzaW9uICAgICAgOiBjb25zdGFudCBDb21wcmVzc2lvbl9MZXZlbCA6PSAwOworICAgQmVzdF9TcGVlZCAgICAgICAgICA6IGNvbnN0YW50IENvbXByZXNzaW9uX0xldmVsIDo9IDE7CisgICBCZXN0X0NvbXByZXNzaW9uICAgIDogY29uc3RhbnQgQ29tcHJlc3Npb25fTGV2ZWwgOj0gOTsKKyAgIERlZmF1bHRfQ29tcHJlc3Npb24gOiBjb25zdGFudCBDb21wcmVzc2lvbl9MZXZlbCA6PSAtMTsKKworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIEZsdXNoIG1vZGUgY29uc3RhbnRzIC0tCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICBOb19GbHVzaCAgICAgIDogY29uc3RhbnQgRmx1c2hfTW9kZTsKKyAgIC0tICBSZWd1bGFyIHdheSBmb3IgY29tcHJlc3Npb24sIG5vIGZsdXNoCisKKyAgIFBhcnRpYWxfRmx1c2ggOiBjb25zdGFudCBGbHVzaF9Nb2RlOworICAgLS0gIFdpbGwgYmUgcmVtb3ZlZCwgdXNlIFpfU1lOQ19GTFVTSCBpbnN0ZWFkCisKKyAgIFN5bmNfRmx1c2ggICAgOiBjb25zdGFudCBGbHVzaF9Nb2RlOworICAgLS0gIEFsbCBwZW5kaW5nIG91dHB1dCBpcyBmbHVzaGVkIHRvIHRoZSBvdXRwdXQgYnVmZmVyIGFuZCB0aGUgb3V0cHV0CisgICAtLSAgaXMgYWxpZ25lZCBvbiBhIGJ5dGUgYm91bmRhcnksIHNvIHRoYXQgdGhlIGRlY29tcHJlc3NvciBjYW4gZ2V0IGFsbAorICAgLS0gIGlucHV0IGRhdGEgYXZhaWxhYmxlIHNvIGZhci4gKEluIHBhcnRpY3VsYXIgYXZhaWxfaW4gaXMgemVybyBhZnRlciB0aGUKKyAgIC0tICBjYWxsIGlmIGVub3VnaCBvdXRwdXQgc3BhY2UgaGFzIGJlZW4gcHJvdmlkZWQgIGJlZm9yZSB0aGUgY2FsbC4pCisgICAtLSAgRmx1c2hpbmcgbWF5IGRlZ3JhZGUgY29tcHJlc3Npb24gZm9yIHNvbWUgY29tcHJlc3Npb24gYWxnb3JpdGhtcyBhbmQgc28KKyAgIC0tICBpdCBzaG91bGQgYmUgdXNlZCBvbmx5IHdoZW4gbmVjZXNzYXJ5LgorCisgICBCbG9ja19GbHVzaCAgIDogY29uc3RhbnQgRmx1c2hfTW9kZTsKKyAgIC0tICBaX0JMT0NLIHJlcXVlc3RzIHRoYXQgaW5mbGF0ZSgpIHN0b3AKKyAgIC0tICBpZiBhbmQgd2hlbiBpdCBnZXQgdG8gdGhlIG5leHQgZGVmbGF0ZSBibG9jayBib3VuZGFyeS4gV2hlbiBkZWNvZGluZyB0aGUKKyAgIC0tICB6bGliIG9yIGd6aXAgZm9ybWF0LCB0aGlzIHdpbGwgY2F1c2UgaW5mbGF0ZSgpIHRvIHJldHVybiBpbW1lZGlhdGVseQorICAgLS0gIGFmdGVyIHRoZSBoZWFkZXIgYW5kIGJlZm9yZSB0aGUgZmlyc3QgYmxvY2suIFdoZW4gZG9pbmcgYSByYXcgaW5mbGF0ZSwKKyAgIC0tICBpbmZsYXRlKCkgd2lsbCBnbyBhaGVhZCBhbmQgcHJvY2VzcyB0aGUgZmlyc3QgYmxvY2ssIGFuZCB3aWxsIHJldHVybgorICAgLS0gIHdoZW4gaXQgZ2V0cyB0byB0aGUgZW5kIG9mIHRoYXQgYmxvY2ssIG9yIHdoZW4gaXQgcnVucyBvdXQgb2YgZGF0YS4KKworICAgRnVsbF9GbHVzaCAgICA6IGNvbnN0YW50IEZsdXNoX01vZGU7CisgICAtLSAgQWxsIG91dHB1dCBpcyBmbHVzaGVkIGFzIHdpdGggU1lOQ19GTFVTSCwgYW5kIHRoZSBjb21wcmVzc2lvbiBzdGF0ZQorICAgLS0gIGlzIHJlc2V0IHNvIHRoYXQgZGVjb21wcmVzc2lvbiBjYW4gcmVzdGFydCBmcm9tIHRoaXMgcG9pbnQgaWYgcHJldmlvdXMKKyAgIC0tICBjb21wcmVzc2VkIGRhdGEgaGFzIGJlZW4gZGFtYWdlZCBvciBpZiByYW5kb20gYWNjZXNzIGlzIGRlc2lyZWQuIFVzaW5nCisgICAtLSAgRnVsbF9GbHVzaCB0b28gb2Z0ZW4gY2FuIHNlcmlvdXNseSBkZWdyYWRlIHRoZSBjb21wcmVzc2lvbi4KKworICAgRmluaXNoICAgICAgICA6IGNvbnN0YW50IEZsdXNoX01vZGU7CisgICAtLSAgSnVzdCBmb3IgdGVsbCB0aGUgY29tcHJlc3NvciB0aGF0IGlucHV0IGRhdGEgaXMgY29tcGxldGUuCisKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gQ29tcHJlc3Npb24gc3RyYXRlZ3kgY29uc3RhbnRzIC0tCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgLS0gIFJMRSBzdGF0ZWd5IGNvdWxkIGJlIHVzZWQgb25seSBpbiB2ZXJzaW9uIDEuMi4wIGFuZCBsYXRlci4KKworICAgRmlsdGVyZWQgICAgICAgICA6IGNvbnN0YW50IFN0cmF0ZWd5X1R5cGU7CisgICBIdWZmbWFuX09ubHkgICAgIDogY29uc3RhbnQgU3RyYXRlZ3lfVHlwZTsKKyAgIFJMRSAgICAgICAgICAgICAgOiBjb25zdGFudCBTdHJhdGVneV9UeXBlOworICAgRGVmYXVsdF9TdHJhdGVneSA6IGNvbnN0YW50IFN0cmF0ZWd5X1R5cGU7CisKKyAgIERlZmF1bHRfQnVmZmVyX1NpemUgOiBjb25zdGFudCA6PSA0MDk2OworCisgICB0eXBlIEZpbHRlcl9UeXBlIGlzIHRhZ2dlZCBsaW1pdGVkIHByaXZhdGU7CisgICAtLSAgVGhlIGZpbHRlciBpcyBmb3IgY29tcHJlc3Npb24gYW5kIGZvciBkZWNvbXByZXNzaW9uLgorICAgLS0gIFRoZSB1c2FnZSBvZiB0aGUgdHlwZSBpcyBkZXBlbmQgb2YgaXRzIGluaXRpYWxpemF0aW9uLgorCisgICBmdW5jdGlvbiBWZXJzaW9uIHJldHVybiBTdHJpbmc7CisgICBwcmFnbWEgSW5saW5lIChWZXJzaW9uKTsKKyAgIC0tICBSZXR1cm4gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBaTGliIHZlcnNpb24uCisKKyAgIHByb2NlZHVyZSBEZWZsYXRlX0luaXQKKyAgICAgKEZpbHRlciAgICAgICA6IGluIG91dCBGaWx0ZXJfVHlwZTsKKyAgICAgIExldmVsICAgICAgICA6IGluICAgICBDb21wcmVzc2lvbl9MZXZlbCAgOj0gRGVmYXVsdF9Db21wcmVzc2lvbjsKKyAgICAgIFN0cmF0ZWd5ICAgICA6IGluICAgICBTdHJhdGVneV9UeXBlICAgICAgOj0gRGVmYXVsdF9TdHJhdGVneTsKKyAgICAgIE1ldGhvZCAgICAgICA6IGluICAgICBDb21wcmVzc2lvbl9NZXRob2QgOj0gRGVmbGF0ZWQ7CisgICAgICBXaW5kb3dfQml0cyAgOiBpbiAgICAgV2luZG93X0JpdHNfVHlwZSAgIDo9IERlZmF1bHRfV2luZG93X0JpdHM7CisgICAgICBNZW1vcnlfTGV2ZWwgOiBpbiAgICAgTWVtb3J5X0xldmVsX1R5cGUgIDo9IERlZmF1bHRfTWVtb3J5X0xldmVsOworICAgICAgSGVhZGVyICAgICAgIDogaW4gICAgIEhlYWRlcl9UeXBlICAgICAgICA6PSBEZWZhdWx0KTsKKyAgIC0tICBDb21wcmVzc29yIGluaXRpYWxpemF0aW9uLgorICAgLS0gIFdoZW4gSGVhZGVyIHBhcmFtZXRlciBpcyBBdXRvIG9yIERlZmF1bHQsIHRoZW4gZGVmYXVsdCB6bGliIGhlYWRlcgorICAgLS0gIHdvdWxkIGJlIHByb3ZpZGVkIGZvciBjb21wcmVzc2VkIGRhdGEuCisgICAtLSAgV2hlbiBIZWFkZXIgaXMgR1ppcCwgdGhlbiBnemlwIGhlYWRlciB3b3VsZCBiZSBzZXQgaW5zdGVhZCBvZgorICAgLS0gIGRlZmF1bHQgaGVhZGVyLgorICAgLS0gIFdoZW4gSGVhZGVyIGlzIE5vbmUsIG5vIGhlYWRlciB3b3VsZCBiZSBzZXQgZm9yIGNvbXByZXNzZWQgZGF0YS4KKworICAgcHJvY2VkdXJlIEluZmxhdGVfSW5pdAorICAgICAoRmlsdGVyICAgICAgOiBpbiBvdXQgRmlsdGVyX1R5cGU7CisgICAgICBXaW5kb3dfQml0cyA6IGluICAgICBXaW5kb3dfQml0c19UeXBlIDo9IERlZmF1bHRfV2luZG93X0JpdHM7CisgICAgICBIZWFkZXIgICAgICA6IGluICAgICBIZWFkZXJfVHlwZSAgICAgIDo9IERlZmF1bHQpOworICAgLS0gIERlY29tcHJlc3NvciBpbml0aWFsaXphdGlvbi4KKyAgIC0tICBEZWZhdWx0IGhlYWRlciB0eXBlIG1lYW4gdGhhdCBaTGliIGRlZmF1bHQgaGVhZGVyIGlzIGV4cGVjdGluZyBpbiB0aGUKKyAgIC0tICBpbnB1dCBjb21wcmVzc2VkIHN0cmVhbS4KKyAgIC0tICBIZWFkZXIgdHlwZSBOb25lIG1lYW4gdGhhdCBubyBoZWFkZXIgaXMgZXhwZWN0aW5nIGluIHRoZSBpbnB1dCBzdHJlYW0uCisgICAtLSAgR1ppcCBoZWFkZXIgdHlwZSBtZWFuIHRoYXQgR1ppcCBoZWFkZXIgaXMgZXhwZWN0aW5nIGluIHRoZQorICAgLS0gIGlucHV0IGNvbXByZXNzZWQgc3RyZWFtLgorICAgLS0gIEF1dG8gaGVhZGVyIHR5cGUgbWVhbiB0aGF0IGhlYWRlciB0eXBlIChHWmlwIG9yIE5hdGl2ZSkgd291bGQgYmUKKyAgIC0tICBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5IGluIHRoZSBpbnB1dCBzdHJlYW0uCisgICAtLSAgTm90ZSB0aGF0IGhlYWRlciB0eXBlcyBwYXJhbWV0ZXIgdmFsdWVzIE5vbmUsIEdaaXAgYW5kIEF1dG8gYXJlCisgICAtLSAgc3VwcG9ydGVkIGZvciBpbmZsYXRlIHJvdXRpbmUgb25seSBpbiBaTGliIHZlcnNpb25zIDEuMi4wLjIgYW5kIGxhdGVyLgorICAgLS0gIERlZmxhdGVfSW5pdCBpcyBzdXBwb3J0aW5nIGFsbCBoZWFkZXIgdHlwZXMuCisKKyAgIGZ1bmN0aW9uIElzX09wZW4gKEZpbHRlciA6IGluIEZpbHRlcl9UeXBlKSByZXR1cm4gQm9vbGVhbjsKKyAgIHByYWdtYSBJbmxpbmUgKElzX09wZW4pOworICAgLS0gIElzIHRoZSBmaWx0ZXIgb3BlbmVkIGZvciBjb21wcmVzc2lvbiBvciBkZWNvbXByZXNzaW9uLgorCisgICBwcm9jZWR1cmUgQ2xvc2UKKyAgICAgKEZpbHRlciAgICAgICA6IGluIG91dCBGaWx0ZXJfVHlwZTsKKyAgICAgIElnbm9yZV9FcnJvciA6IGluICAgICBCb29sZWFuIDo9IEZhbHNlKTsKKyAgIC0tICBDbG9zaW5nIHRoZSBjb21wcmVzc2lvbiBvciBkZWNvbXByZXNzb3IuCisgICAtLSAgSWYgc3RyZWFtIGlzIGNsb3NpbmcgYmVmb3JlIHRoZSBjb21wbGV0ZSBhbmQgSWdub3JlX0Vycm9yIGlzIEZhbHNlLAorICAgLS0gIFRoZSBleGNlcHRpb24gd291bGQgYmUgcmFpc2VkLgorCisgICBnZW5lcmljCisgICAgICB3aXRoIHByb2NlZHVyZSBEYXRhX0luCisgICAgICAgIChJdGVtIDogb3V0IEFkYS5TdHJlYW1zLlN0cmVhbV9FbGVtZW50X0FycmF5OworICAgICAgICAgTGFzdCA6IG91dCBBZGEuU3RyZWFtcy5TdHJlYW1fRWxlbWVudF9PZmZzZXQpOworICAgICAgd2l0aCBwcm9jZWR1cmUgRGF0YV9PdXQKKyAgICAgICAgKEl0ZW0gOiBpbiBBZGEuU3RyZWFtcy5TdHJlYW1fRWxlbWVudF9BcnJheSk7CisgICBwcm9jZWR1cmUgR2VuZXJpY19UcmFuc2xhdGUKKyAgICAgKEZpbHRlciAgICAgICAgICA6IGluIG91dCBGaWx0ZXJfVHlwZTsKKyAgICAgIEluX0J1ZmZlcl9TaXplICA6IGluICAgICBJbnRlZ2VyIDo9IERlZmF1bHRfQnVmZmVyX1NpemU7CisgICAgICBPdXRfQnVmZmVyX1NpemUgOiBpbiAgICAgSW50ZWdlciA6PSBEZWZhdWx0X0J1ZmZlcl9TaXplKTsKKyAgIC0tICBDb21wcmVzcy9kZWNvbXByZXNzIGRhdGEgZmV0Y2ggZnJvbSBEYXRhX0luIHJvdXRpbmUgYW5kIHBhc3MgdGhlIHJlc3VsdAorICAgLS0gIHRvIHRoZSBEYXRhX091dCByb3V0aW5lLiBVc2VyIHNob3VsZCBwcm92aWRlIERhdGFfSW4gYW5kIERhdGFfT3V0CisgICAtLSAgZm9yIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gZGF0YSBmbG93LgorICAgLS0gIENvbXByZXNzaW9uIG9yIGRlY29tcHJlc3Npb24gZGVwZW5kIG9uIEZpbHRlciBpbml0aWFsaXphdGlvbi4KKworICAgZnVuY3Rpb24gVG90YWxfSW4gKEZpbHRlciA6IGluIEZpbHRlcl9UeXBlKSByZXR1cm4gQ291bnQ7CisgICBwcmFnbWEgSW5saW5lIChUb3RhbF9Jbik7CisgICAtLSAgUmV0dXJucyB0b3RhbCBudW1iZXIgb2YgaW5wdXQgYnl0ZXMgcmVhZCBzbyBmYXIKKworICAgZnVuY3Rpb24gVG90YWxfT3V0IChGaWx0ZXIgOiBpbiBGaWx0ZXJfVHlwZSkgcmV0dXJuIENvdW50OworICAgcHJhZ21hIElubGluZSAoVG90YWxfT3V0KTsKKyAgIC0tICBSZXR1cm5zIHRvdGFsIG51bWJlciBvZiBieXRlcyBvdXRwdXQgc28gZmFyCisKKyAgIGZ1bmN0aW9uIENSQzMyCisgICAgIChDUkMgICAgOiBpbiBVbnNpZ25lZF8zMjsKKyAgICAgIERhdGEgICA6IGluIEFkYS5TdHJlYW1zLlN0cmVhbV9FbGVtZW50X0FycmF5KQorICAgICAgcmV0dXJuIFVuc2lnbmVkXzMyOworICAgcHJhZ21hIElubGluZSAoQ1JDMzIpOworICAgLS0gIENvbXB1dGUgQ1JDMzIsIGl0IGNvdWxkIGJlIG5lY2Vzc2FyeSBmb3IgbWFrZSBnemlwIGZvcm1hdAorCisgICBwcm9jZWR1cmUgQ1JDMzIKKyAgICAgKENSQyAgOiBpbiBvdXQgVW5zaWduZWRfMzI7CisgICAgICBEYXRhIDogaW4gICAgIEFkYS5TdHJlYW1zLlN0cmVhbV9FbGVtZW50X0FycmF5KTsKKyAgIHByYWdtYSBJbmxpbmUgKENSQzMyKTsKKyAgIC0tICBDb21wdXRlIENSQzMyLCBpdCBjb3VsZCBiZSBuZWNlc3NhcnkgZm9yIG1ha2UgZ3ppcCBmb3JtYXQKKworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gIEJlbG93IGlzIG1vcmUgY29tcGxleCBsb3cgbGV2ZWwgcm91dGluZXMuICAtLQorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICBwcm9jZWR1cmUgVHJhbnNsYXRlCisgICAgIChGaWx0ZXIgICAgOiBpbiBvdXQgRmlsdGVyX1R5cGU7CisgICAgICBJbl9EYXRhICAgOiBpbiAgICAgQWRhLlN0cmVhbXMuU3RyZWFtX0VsZW1lbnRfQXJyYXk7CisgICAgICBJbl9MYXN0ICAgOiAgICBvdXQgQWRhLlN0cmVhbXMuU3RyZWFtX0VsZW1lbnRfT2Zmc2V0OworICAgICAgT3V0X0RhdGEgIDogICAgb3V0IEFkYS5TdHJlYW1zLlN0cmVhbV9FbGVtZW50X0FycmF5OworICAgICAgT3V0X0xhc3QgIDogICAgb3V0IEFkYS5TdHJlYW1zLlN0cmVhbV9FbGVtZW50X09mZnNldDsKKyAgICAgIEZsdXNoICAgICA6IGluICAgICBGbHVzaF9Nb2RlKTsKKyAgIC0tICBDb21wcmVzcy9kZWNvbXByZXNzIHRoZSBJbl9EYXRhIGJ1ZmZlciBhbmQgcGxhY2UgdGhlIHJlc3VsdCBpbnRvCisgICAtLSAgT3V0X0RhdGEuIEluX0xhc3QgaXMgdGhlIGluZGV4IG9mIGxhc3QgZWxlbWVudCBmcm9tIEluX0RhdGEgYWNjZXB0ZWQgYnkKKyAgIC0tICB0aGUgRmlsdGVyLiBPdXRfTGFzdCBpcyB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSByZWNlaXZlZCBkYXRhIGZyb20KKyAgIC0tICBGaWx0ZXIuIFRvIHRlbGwgdGhlIGZpbHRlciB0aGF0IGluY29taW5nIGRhdGEgYXJlIGNvbXBsZXRlIHB1dCB0aGUKKyAgIC0tICBGbHVzaCBwYXJhbWV0ZXIgdG8gRmluaXNoLgorCisgICBmdW5jdGlvbiBTdHJlYW1fRW5kIChGaWx0ZXIgOiBpbiBGaWx0ZXJfVHlwZSkgcmV0dXJuIEJvb2xlYW47CisgICBwcmFnbWEgSW5saW5lIChTdHJlYW1fRW5kKTsKKyAgIC0tICBSZXR1cm4gdGhlIHRydWUgd2hlbiB0aGUgc3RyZWFtIGlzIGNvbXBsZXRlLgorCisgICBwcm9jZWR1cmUgRmx1c2gKKyAgICAgKEZpbHRlciAgICA6IGluIG91dCBGaWx0ZXJfVHlwZTsKKyAgICAgIE91dF9EYXRhICA6ICAgIG91dCBBZGEuU3RyZWFtcy5TdHJlYW1fRWxlbWVudF9BcnJheTsKKyAgICAgIE91dF9MYXN0ICA6ICAgIG91dCBBZGEuU3RyZWFtcy5TdHJlYW1fRWxlbWVudF9PZmZzZXQ7CisgICAgICBGbHVzaCAgICAgOiBpbiAgICAgRmx1c2hfTW9kZSk7CisgICBwcmFnbWEgSW5saW5lIChGbHVzaCk7CisgICAtLSAgRmx1c2hpbmcgdGhlIGRhdGEgZnJvbSB0aGUgY29tcHJlc3Nvci4KKworICAgZ2VuZXJpYworICAgICAgd2l0aCBwcm9jZWR1cmUgV3JpdGUKKyAgICAgICAgKEl0ZW0gOiBpbiBBZGEuU3RyZWFtcy5TdHJlYW1fRWxlbWVudF9BcnJheSk7CisgICAgICAtLSAgVXNlciBzaG91bGQgcHJvdmlkZSB0aGlzIHJvdXRpbmUgZm9yIGFjY2VwdAorICAgICAgLS0gIGNvbXByZXNzZWQvZGVjb21wcmVzc2VkIGRhdGEuCisKKyAgICAgIEJ1ZmZlcl9TaXplIDogaW4gQWRhLlN0cmVhbXMuU3RyZWFtX0VsZW1lbnRfT2Zmc2V0CisgICAgICAgICA6PSBEZWZhdWx0X0J1ZmZlcl9TaXplOworICAgICAgLS0gIEJ1ZmZlciBzaXplIGZvciBXcml0ZSB1c2VyIHJvdXRpbmUuCisKKyAgIHByb2NlZHVyZSBXcml0ZQorICAgICAoRmlsdGVyICA6IGluIG91dCBGaWx0ZXJfVHlwZTsKKyAgICAgIEl0ZW0gICAgOiBpbiAgICAgQWRhLlN0cmVhbXMuU3RyZWFtX0VsZW1lbnRfQXJyYXk7CisgICAgICBGbHVzaCAgIDogaW4gICAgIEZsdXNoX01vZGUgOj0gTm9fRmx1c2gpOworICAgLS0gIENvbXByZXNzL0RlY29tcHJlc3MgZGF0YSBmcm9tIEl0ZW0gdG8gdGhlIGdlbmVyaWMgcGFyYW1ldGVyIHByb2NlZHVyZQorICAgLS0gIFdyaXRlLiBPdXRwdXQgYnVmZmVyIHNpemUgY291bGQgYmUgc2V0IGluIEJ1ZmZlcl9TaXplIGdlbmVyaWMgcGFyYW1ldGVyLgorCisgICBnZW5lcmljCisgICAgICB3aXRoIHByb2NlZHVyZSBSZWFkCisgICAgICAgIChJdGVtIDogb3V0IEFkYS5TdHJlYW1zLlN0cmVhbV9FbGVtZW50X0FycmF5OworICAgICAgICAgTGFzdCA6IG91dCBBZGEuU3RyZWFtcy5TdHJlYW1fRWxlbWVudF9PZmZzZXQpOworICAgICAgLS0gIFVzZXIgc2hvdWxkIHByb3ZpZGUgZGF0YSBmb3IgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbgorICAgICAgLS0gIHRocnUgdGhpcyByb3V0aW5lLgorCisgICAgICBCdWZmZXIgOiBpbiBvdXQgQWRhLlN0cmVhbXMuU3RyZWFtX0VsZW1lbnRfQXJyYXk7CisgICAgICAtLSAgQnVmZmVyIGZvciBrZWVwIHJlbWFpbmluZyBkYXRhIGZyb20gdGhlIHByZXZpb3VzCisgICAgICAtLSAgYmFjayByZWFkLgorCisgICAgICBSZXN0X0ZpcnN0LCBSZXN0X0xhc3QgOiBpbiBvdXQgQWRhLlN0cmVhbXMuU3RyZWFtX0VsZW1lbnRfT2Zmc2V0OworICAgICAgLS0gIFJlc3RfRmlyc3QgaGF2ZSB0byBiZSBpbml0aWFsaXplZCB0byBCdWZmZXInTGFzdCArIDEKKyAgICAgIC0tICBSZXN0X0xhc3QgaGF2ZSB0byBiZSBpbml0aWFsaXplZCB0byBCdWZmZXInTGFzdAorICAgICAgLS0gIGJlZm9yZSB1c2FnZS4KKworICAgICAgQWxsb3dfUmVhZF9Tb21lIDogaW4gQm9vbGVhbiA6PSBGYWxzZTsKKyAgICAgIC0tICBJcyBpdCBhbGxvd2VkIHRvIHJldHVybiBMYXN0IDwgSXRlbSdMYXN0IGJlZm9yZSBlbmQgb2YgZGF0YS4KKworICAgcHJvY2VkdXJlIFJlYWQKKyAgICAgKEZpbHRlciA6IGluIG91dCBGaWx0ZXJfVHlwZTsKKyAgICAgIEl0ZW0gICA6ICAgIG91dCBBZGEuU3RyZWFtcy5TdHJlYW1fRWxlbWVudF9BcnJheTsKKyAgICAgIExhc3QgICA6ICAgIG91dCBBZGEuU3RyZWFtcy5TdHJlYW1fRWxlbWVudF9PZmZzZXQ7CisgICAgICBGbHVzaCAgOiBpbiAgICAgRmx1c2hfTW9kZSA6PSBOb19GbHVzaCk7CisgICAtLSAgQ29tcHJlc3MvRGVjb21wcmVzcyBkYXRhIGZyb20gZ2VuZXJpYyBwYXJhbWV0ZXIgcHJvY2VkdXJlIFJlYWQgdG8gdGhlCisgICAtLSAgSXRlbS4gVXNlciBzaG91bGQgcHJvdmlkZSBCdWZmZXIgYW5kIGluaXRpYWxpemVkIFJlc3RfRmlyc3QsIFJlc3RfTGFzdAorICAgLS0gIGluZGljYXRvcnMuIElmIEFsbG93X1JlYWRfU29tZSBpcyBUcnVlLCBSZWFkIHJvdXRpbmVzIGNvdWxkIHJldHVybgorICAgLS0gIExhc3QgPCBJdGVtJ0xhc3Qgb25seSBhdCBlbmQgb2Ygc3RyZWFtLgorCitwcml2YXRlCisKKyAgIHVzZSBBZGEuU3RyZWFtczsKKworICAgcHJhZ21hIEFzc2VydCAoQWRhLlN0cmVhbXMuU3RyZWFtX0VsZW1lbnQnU2l6ZSAgICA9ICAgIDgpOworICAgcHJhZ21hIEFzc2VydCAoQWRhLlN0cmVhbXMuU3RyZWFtX0VsZW1lbnQnTW9kdWx1cyA9IDIqKjgpOworCisgICB0eXBlIEZsdXNoX01vZGUgaXMgbmV3IEludGVnZXIgcmFuZ2UgMCAuLiA1OworCisgICB0eXBlIENvbXByZXNzaW9uX01ldGhvZCBpcyBuZXcgSW50ZWdlciByYW5nZSA4IC4uIDg7CisKKyAgIHR5cGUgU3RyYXRlZ3lfVHlwZSBpcyBuZXcgSW50ZWdlciByYW5nZSAwIC4uIDM7CisKKyAgIE5vX0ZsdXNoICAgICAgOiBjb25zdGFudCBGbHVzaF9Nb2RlIDo9IDA7CisgICBQYXJ0aWFsX0ZsdXNoIDogY29uc3RhbnQgRmx1c2hfTW9kZSA6PSAxOworICAgU3luY19GbHVzaCAgICA6IGNvbnN0YW50IEZsdXNoX01vZGUgOj0gMjsKKyAgIEZ1bGxfRmx1c2ggICAgOiBjb25zdGFudCBGbHVzaF9Nb2RlIDo9IDM7CisgICBGaW5pc2ggICAgICAgIDogY29uc3RhbnQgRmx1c2hfTW9kZSA6PSA0OworICAgQmxvY2tfRmx1c2ggICA6IGNvbnN0YW50IEZsdXNoX01vZGUgOj0gNTsKKworICAgRmlsdGVyZWQgICAgICAgICA6IGNvbnN0YW50IFN0cmF0ZWd5X1R5cGUgOj0gMTsKKyAgIEh1ZmZtYW5fT25seSAgICAgOiBjb25zdGFudCBTdHJhdGVneV9UeXBlIDo9IDI7CisgICBSTEUgICAgICAgICAgICAgIDogY29uc3RhbnQgU3RyYXRlZ3lfVHlwZSA6PSAzOworICAgRGVmYXVsdF9TdHJhdGVneSA6IGNvbnN0YW50IFN0cmF0ZWd5X1R5cGUgOj0gMDsKKworICAgRGVmbGF0ZWQgOiBjb25zdGFudCBDb21wcmVzc2lvbl9NZXRob2QgOj0gODsKKworICAgdHlwZSBaX1N0cmVhbTsKKworICAgdHlwZSBaX1N0cmVhbV9BY2Nlc3MgaXMgYWNjZXNzIGFsbCBaX1N0cmVhbTsKKworICAgdHlwZSBGaWx0ZXJfVHlwZSBpcyB0YWdnZWQgbGltaXRlZCByZWNvcmQKKyAgICAgIFN0cm0gICAgICAgIDogWl9TdHJlYW1fQWNjZXNzOworICAgICAgQ29tcHJlc3Npb24gOiBCb29sZWFuOworICAgICAgU3RyZWFtX0VuZCAgOiBCb29sZWFuOworICAgICAgSGVhZGVyICAgICAgOiBIZWFkZXJfVHlwZTsKKyAgICAgIENSQyAgICAgICAgIDogVW5zaWduZWRfMzI7CisgICAgICBPZmZzZXQgICAgICA6IFN0cmVhbV9FbGVtZW50X09mZnNldDsKKyAgICAgIC0tICBPZmZzZXQgZm9yIGd6aXAgaGVhZGVyL2Zvb3RlciBvdXRwdXQuCisgICBlbmQgcmVjb3JkOworCitlbmQgWkxpYjsKZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL2FkYS96bGliLmdwciBiL3NyYy9jb250cmliL2FkYS96bGliLmdwcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTZiMjJhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbnRyaWIvYWRhL3psaWIuZ3ByCkBAIC0wLDAgKzEsMjAgQEAKK3Byb2plY3QgWmxpYiBpcworCisgICBmb3IgTGFuZ3VhZ2VzIHVzZSAoIkFkYSIpOworICAgZm9yIFNvdXJjZV9EaXJzIHVzZSAoIi4iKTsKKyAgIGZvciBPYmplY3RfRGlyIHVzZSAiLiI7CisgICBmb3IgTWFpbiB1c2UgKCJ0ZXN0LmFkYiIsICJtdGVzdC5hZGIiLCAicmVhZC5hZGIiLCAiYnVmZmVyX2RlbW8iKTsKKworICAgcGFja2FnZSBDb21waWxlciBpcworICAgICAgZm9yIERlZmF1bHRfU3dpdGNoZXMgKCJhZGEiKSB1c2UgKCItZ25hdHdjZmlsb3BydSIsICItZ25hdFZjZGZpbW9yc3QiLCAiLWduYXR5YWJjZWZoaWtsbW5vcHJzdCIpOworICAgZW5kIENvbXBpbGVyOworCisgICBwYWNrYWdlIExpbmtlciBpcworICAgICAgZm9yIERlZmF1bHRfU3dpdGNoZXMgKCJhZGEiKSB1c2UgKCItbHoiKTsKKyAgIGVuZCBMaW5rZXI7CisKKyAgIHBhY2thZ2UgQnVpbGRlciBpcworICAgICAgZm9yIERlZmF1bHRfU3dpdGNoZXMgKCJhZGEiKSB1c2UgKCItcyIsICItZ25hdFEiKTsKKyAgIGVuZCBCdWlsZGVyOworCitlbmQgWmxpYjsKZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL2JsYXN0L01ha2VmaWxlIGIvc3JjL2NvbnRyaWIvYmxhc3QvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJlODBiYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb250cmliL2JsYXN0L01ha2VmaWxlCkBAIC0wLDAgKzEsOCBAQAorYmxhc3Q6IGJsYXN0LmMgYmxhc3QuaAorCWNjIC1EVEVTVCAtbyBibGFzdCBibGFzdC5jCisKK3Rlc3Q6IGJsYXN0CisJYmxhc3QgPCB0ZXN0LnBrIHwgY21wIC0gdGVzdC50eHQKKworY2xlYW46CisJcm0gLWYgYmxhc3QgYmxhc3QubwpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvYmxhc3QvUkVBRE1FIGIvc3JjL2NvbnRyaWIvYmxhc3QvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzYTYwYjMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29udHJpYi9ibGFzdC9SRUFETUUKQEAgLTAsMCArMSw0IEBACitSZWFkIGJsYXN0LmggZm9yIHB1cnBvc2UgYW5kIHVzYWdlLgorCitNYXJrIEFkbGVyCittYWRsZXJAYWx1bW5pLmNhbHRlY2guZWR1CmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi9ibGFzdC9ibGFzdC5jIGIvc3JjL2NvbnRyaWIvYmxhc3QvYmxhc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmU2NTkwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbnRyaWIvYmxhc3QvYmxhc3QuYwpAQCAtMCwwICsxLDQ2NiBAQAorLyogYmxhc3QuYworICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDEyLCAyMDEzIE1hcmsgQWRsZXIKKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBibGFzdC5oCisgKiB2ZXJzaW9uIDEuMywgMjQgQXVnIDIwMTMKKyAqCisgKiBibGFzdC5jIGRlY29tcHJlc3NlcyBkYXRhIGNvbXByZXNzZWQgYnkgdGhlIFBLV2FyZSBDb21wcmVzc2lvbiBMaWJyYXJ5LgorICogVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IHNpbWlsYXIgdG8gdGhlIGV4cGxvZGUoKSBmdW5jdGlvbiBvZgorICogdGhlIFBLV2FyZSBsaWJyYXJ5LCBoZW5jZSB0aGUgbmFtZSAiYmxhc3QiLgorICoKKyAqIFRoaXMgZGVjb21wcmVzc29yIGlzIGJhc2VkIG9uIHRoZSBleGNlbGxlbnQgZm9ybWF0IGRlc2NyaXB0aW9uIHByb3ZpZGVkIGJ5CisgKiBCZW4gUnVkaWFrLUdvdWxkIGluIGNvbXAuY29tcHJlc3Npb24gb24gQXVndXN0IDEzLCAyMDAxLiAgSW50ZXJlc3RpbmdseSwgdGhlCisgKiBleGFtcGxlIEJlbiBwcm92aWRlZCBpbiB0aGUgcG9zdCBpcyBpbmNvcnJlY3QuICBUaGUgZGlzdGFuY2UgMTEwMDAxIHNob3VsZAorICogaW5zdGVhZCBiZSAxMTEwMDAuICBXaGVuIGNvcnJlY3RlZCwgdGhlIGV4YW1wbGUgYnl0ZSBzdHJlYW0gYmVjb21lczoKKyAqCisgKiAgICAwMCAwNCA4MiAyNCAyNSA4ZiA4MCA3ZgorICoKKyAqIHdoaWNoIGRlY29tcHJlc3NlcyB0byAiQUlBSUFJQUlBSUFJQSIgKHdpdGhvdXQgdGhlIHF1b3RlcykuCisgKi8KKworLyoKKyAqIENoYW5nZSBoaXN0b3J5OgorICoKKyAqIDEuMCAgMTIgRmViIDIwMDMgICAgIC0gRmlyc3QgdmVyc2lvbgorICogMS4xICAxNiBGZWIgMjAwMyAgICAgLSBGaXhlZCBkaXN0YW5jZSBjaGVjayBmb3IgPiA0IEdCIHVuY29tcHJlc3NlZCBkYXRhCisgKiAxLjIgIDI0IE9jdCAyMDEyICAgICAtIEFkZCBub3RlIGFib3V0IHVzaW5nIGJpbmFyeSBtb2RlIGluIHN0ZGlvCisgKiAgICAgICAgICAgICAgICAgICAgICAtIEZpeCBjb21wYXJpc29ucyBvZiBkaWZmZXJlbnRseSBzaWduZWQgaW50ZWdlcnMKKyAqIDEuMyAgMjQgQXVnIDIwMTMgICAgIC0gUmV0dXJuIHVudXNlZCBpbnB1dCBmcm9tIGJsYXN0KCkKKyAqICAgICAgICAgICAgICAgICAgICAgIC0gRml4IHRlc3QgY29kZSB0byBjb3JyZWN0bHkgcmVwb3J0IHVudXNlZCBpbnB1dAorICogICAgICAgICAgICAgICAgICAgICAgLSBFbmFibGUgdGhlIHByb3Zpc2lvbiBvZiBpbml0aWFsIGlucHV0IHRvIGJsYXN0KCkKKyAqLworCisjaW5jbHVkZSA8c3RkZGVmLmg+ICAgICAgICAgICAgIC8qIGZvciBOVUxMICovCisjaW5jbHVkZSA8c2V0am1wLmg+ICAgICAgICAgICAgIC8qIGZvciBzZXRqbXAoKSwgbG9uZ2ptcCgpLCBhbmQgam1wX2J1ZiAqLworI2luY2x1ZGUgImJsYXN0LmgiICAgICAgICAgICAgICAvKiBwcm90b3R5cGUgZm9yIGJsYXN0KCkgKi8KKworI2RlZmluZSBsb2NhbCBzdGF0aWMgICAgICAgICAgICAvKiBmb3IgbG9jYWwgZnVuY3Rpb24gZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTUFYQklUUyAxMyAgICAgICAgICAgICAgLyogbWF4aW11bSBjb2RlIGxlbmd0aCAqLworI2RlZmluZSBNQVhXSU4gNDA5NiAgICAgICAgICAgICAvKiBtYXhpbXVtIHdpbmRvdyBzaXplICovCisKKy8qIGlucHV0IGFuZCBvdXRwdXQgc3RhdGUgKi8KK3N0cnVjdCBzdGF0ZSB7CisgICAgLyogaW5wdXQgc3RhdGUgKi8KKyAgICBibGFzdF9pbiBpbmZ1bjsgICAgICAgICAgICAgLyogaW5wdXQgZnVuY3Rpb24gcHJvdmlkZWQgYnkgdXNlciAqLworICAgIHZvaWQgKmluaG93OyAgICAgICAgICAgICAgICAvKiBvcGFxdWUgaW5mb3JtYXRpb24gcGFzc2VkIHRvIGluZnVuKCkgKi8KKyAgICB1bnNpZ25lZCBjaGFyICppbjsgICAgICAgICAgLyogbmV4dCBpbnB1dCBsb2NhdGlvbiAqLworICAgIHVuc2lnbmVkIGxlZnQ7ICAgICAgICAgICAgICAvKiBhdmFpbGFibGUgaW5wdXQgYXQgaW4gKi8KKyAgICBpbnQgYml0YnVmOyAgICAgICAgICAgICAgICAgLyogYml0IGJ1ZmZlciAqLworICAgIGludCBiaXRjbnQ7ICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgYml0cyBpbiBiaXQgYnVmZmVyICovCisKKyAgICAvKiBpbnB1dCBsaW1pdCBlcnJvciByZXR1cm4gc3RhdGUgZm9yIGJpdHMoKSBhbmQgZGVjb2RlKCkgKi8KKyAgICBqbXBfYnVmIGVudjsKKworICAgIC8qIG91dHB1dCBzdGF0ZSAqLworICAgIGJsYXN0X291dCBvdXRmdW47ICAgICAgICAgICAvKiBvdXRwdXQgZnVuY3Rpb24gcHJvdmlkZWQgYnkgdXNlciAqLworICAgIHZvaWQgKm91dGhvdzsgICAgICAgICAgICAgICAvKiBvcGFxdWUgaW5mb3JtYXRpb24gcGFzc2VkIHRvIG91dGZ1bigpICovCisgICAgdW5zaWduZWQgbmV4dDsgICAgICAgICAgICAgIC8qIGluZGV4IG9mIG5leHQgd3JpdGUgbG9jYXRpb24gaW4gb3V0W10gKi8KKyAgICBpbnQgZmlyc3Q7ICAgICAgICAgICAgICAgICAgLyogdHJ1ZSB0byBjaGVjayBkaXN0YW5jZXMgKGZvciBmaXJzdCA0SykgKi8KKyAgICB1bnNpZ25lZCBjaGFyIG91dFtNQVhXSU5dOyAgLyogb3V0cHV0IGJ1ZmZlciBhbmQgc2xpZGluZyB3aW5kb3cgKi8KK307CisKKy8qCisgKiBSZXR1cm4gbmVlZCBiaXRzIGZyb20gdGhlIGlucHV0IHN0cmVhbS4gIFRoaXMgYWx3YXlzIGxlYXZlcyBsZXNzIHRoYW4KKyAqIGVpZ2h0IGJpdHMgaW4gdGhlIGJ1ZmZlci4gIGJpdHMoKSB3b3JrcyBwcm9wZXJseSBmb3IgbmVlZCA9PSAwLgorICoKKyAqIEZvcm1hdCBub3RlczoKKyAqCisgKiAtIEJpdHMgYXJlIHN0b3JlZCBpbiBieXRlcyBmcm9tIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQgdG8gdGhlIG1vc3QKKyAqICAgc2lnbmlmaWNhbnQgYml0LiAgVGhlcmVmb3JlIGJpdHMgYXJlIGRyb3BwZWQgZnJvbSB0aGUgYm90dG9tIG9mIHRoZSBiaXQKKyAqICAgYnVmZmVyLCB1c2luZyBzaGlmdCByaWdodCwgYW5kIG5ldyBieXRlcyBhcmUgYXBwZW5kZWQgdG8gdGhlIHRvcCBvZiB0aGUKKyAqICAgYml0IGJ1ZmZlciwgdXNpbmcgc2hpZnQgbGVmdC4KKyAqLworbG9jYWwgaW50IGJpdHMoc3RydWN0IHN0YXRlICpzLCBpbnQgbmVlZCkKK3sKKyAgICBpbnQgdmFsOyAgICAgICAgICAgIC8qIGJpdCBhY2N1bXVsYXRvciAqLworCisgICAgLyogbG9hZCBhdCBsZWFzdCBuZWVkIGJpdHMgaW50byB2YWwgKi8KKyAgICB2YWwgPSBzLT5iaXRidWY7CisgICAgd2hpbGUgKHMtPmJpdGNudCA8IG5lZWQpIHsKKyAgICAgICAgaWYgKHMtPmxlZnQgPT0gMCkgeworICAgICAgICAgICAgcy0+bGVmdCA9IHMtPmluZnVuKHMtPmluaG93LCAmKHMtPmluKSk7CisgICAgICAgICAgICBpZiAocy0+bGVmdCA9PSAwKSBsb25nam1wKHMtPmVudiwgMSk7ICAgICAgIC8qIG91dCBvZiBpbnB1dCAqLworICAgICAgICB9CisgICAgICAgIHZhbCB8PSAoaW50KSgqKHMtPmluKSsrKSA8PCBzLT5iaXRjbnQ7ICAgICAgICAgIC8qIGxvYWQgZWlnaHQgYml0cyAqLworICAgICAgICBzLT5sZWZ0LS07CisgICAgICAgIHMtPmJpdGNudCArPSA4OworICAgIH0KKworICAgIC8qIGRyb3AgbmVlZCBiaXRzIGFuZCB1cGRhdGUgYnVmZmVyLCBhbHdheXMgemVybyB0byBzZXZlbiBiaXRzIGxlZnQgKi8KKyAgICBzLT5iaXRidWYgPSB2YWwgPj4gbmVlZDsKKyAgICBzLT5iaXRjbnQgLT0gbmVlZDsKKworICAgIC8qIHJldHVybiBuZWVkIGJpdHMsIHplcm9pbmcgdGhlIGJpdHMgYWJvdmUgdGhhdCAqLworICAgIHJldHVybiB2YWwgJiAoKDEgPDwgbmVlZCkgLSAxKTsKK30KKworLyoKKyAqIEh1ZmZtYW4gY29kZSBkZWNvZGluZyB0YWJsZXMuICBjb3VudFsxLi5NQVhCSVRTXSBpcyB0aGUgbnVtYmVyIG9mIHN5bWJvbHMgb2YKKyAqIGVhY2ggbGVuZ3RoLCB3aGljaCBmb3IgYSBjYW5vbmljYWwgY29kZSBhcmUgc3RlcHBlZCB0aHJvdWdoIGluIG9yZGVyLgorICogc3ltYm9sW10gYXJlIHRoZSBzeW1ib2wgdmFsdWVzIGluIGNhbm9uaWNhbCBvcmRlciwgd2hlcmUgdGhlIG51bWJlciBvZgorICogZW50cmllcyBpcyB0aGUgc3VtIG9mIHRoZSBjb3VudHMgaW4gY291bnRbXS4gIFRoZSBkZWNvZGluZyBwcm9jZXNzIGNhbiBiZQorICogc2VlbiBpbiB0aGUgZnVuY3Rpb24gZGVjb2RlKCkgYmVsb3cuCisgKi8KK3N0cnVjdCBodWZmbWFuIHsKKyAgICBzaG9ydCAqY291bnQ7ICAgICAgIC8qIG51bWJlciBvZiBzeW1ib2xzIG9mIGVhY2ggbGVuZ3RoICovCisgICAgc2hvcnQgKnN5bWJvbDsgICAgICAvKiBjYW5vbmljYWxseSBvcmRlcmVkIHN5bWJvbHMgKi8KK307CisKKy8qCisgKiBEZWNvZGUgYSBjb2RlIGZyb20gdGhlIHN0cmVhbSBzIHVzaW5nIGh1ZmZtYW4gdGFibGUgaC4gIFJldHVybiB0aGUgc3ltYm9sIG9yCisgKiBhIG5lZ2F0aXZlIHZhbHVlIGlmIHRoZXJlIGlzIGFuIGVycm9yLiAgSWYgYWxsIG9mIHRoZSBsZW5ndGhzIGFyZSB6ZXJvLCBpLmUuCisgKiBhbiBlbXB0eSBjb2RlLCBvciBpZiB0aGUgY29kZSBpcyBpbmNvbXBsZXRlIGFuZCBhbiBpbnZhbGlkIGNvZGUgaXMgcmVjZWl2ZWQsCisgKiB0aGVuIC05IGlzIHJldHVybmVkIGFmdGVyIHJlYWRpbmcgTUFYQklUUyBiaXRzLgorICoKKyAqIEZvcm1hdCBub3RlczoKKyAqCisgKiAtIFRoZSBjb2RlcyBhcyBzdG9yZWQgaW4gdGhlIGNvbXByZXNzZWQgZGF0YSBhcmUgYml0LXJldmVyc2VkIHJlbGF0aXZlIHRvCisgKiAgIGEgc2ltcGxlIGludGVnZXIgb3JkZXJpbmcgb2YgY29kZXMgb2YgdGhlIHNhbWUgbGVuZ3Rocy4gIEhlbmNlIGJlbG93IHRoZQorICogICBiaXRzIGFyZSBwdWxsZWQgZnJvbSB0aGUgY29tcHJlc3NlZCBkYXRhIG9uZSBhdCBhIHRpbWUgYW5kIHVzZWQgdG8KKyAqICAgYnVpbGQgdGhlIGNvZGUgdmFsdWUgcmV2ZXJzZWQgZnJvbSB3aGF0IGlzIGluIHRoZSBzdHJlYW0gaW4gb3JkZXIgdG8KKyAqICAgcGVybWl0IHNpbXBsZSBpbnRlZ2VyIGNvbXBhcmlzb25zIGZvciBkZWNvZGluZy4KKyAqCisgKiAtIFRoZSBmaXJzdCBjb2RlIGZvciB0aGUgc2hvcnRlc3QgbGVuZ3RoIGlzIGFsbCBvbmVzLiAgU3Vic2VxdWVudCBjb2RlcyBvZgorICogICB0aGUgc2FtZSBsZW5ndGggYXJlIHNpbXBseSBpbnRlZ2VyIGRlY3JlbWVudHMgb2YgdGhlIHByZXZpb3VzIGNvZGUuICBXaGVuCisgKiAgIG1vdmluZyB1cCBhIGxlbmd0aCwgYSBvbmUgYml0IGlzIGFwcGVuZGVkIHRvIHRoZSBjb2RlLiAgRm9yIGEgY29tcGxldGUKKyAqICAgY29kZSwgdGhlIGxhc3QgY29kZSBvZiB0aGUgbG9uZ2VzdCBsZW5ndGggd2lsbCBiZSBhbGwgemVyb3MuICBUbyBzdXBwb3J0CisgKiAgIHRoaXMgb3JkZXJpbmcsIHRoZSBiaXRzIHB1bGxlZCBkdXJpbmcgZGVjb2RpbmcgYXJlIGludmVydGVkIHRvIGFwcGx5IHRoZQorICogICBtb3JlICJuYXR1cmFsIiBvcmRlcmluZyBzdGFydGluZyB3aXRoIGFsbCB6ZXJvcyBhbmQgaW5jcmVtZW50aW5nLgorICovCitsb2NhbCBpbnQgZGVjb2RlKHN0cnVjdCBzdGF0ZSAqcywgc3RydWN0IGh1ZmZtYW4gKmgpCit7CisgICAgaW50IGxlbjsgICAgICAgICAgICAvKiBjdXJyZW50IG51bWJlciBvZiBiaXRzIGluIGNvZGUgKi8KKyAgICBpbnQgY29kZTsgICAgICAgICAgIC8qIGxlbiBiaXRzIGJlaW5nIGRlY29kZWQgKi8KKyAgICBpbnQgZmlyc3Q7ICAgICAgICAgIC8qIGZpcnN0IGNvZGUgb2YgbGVuZ3RoIGxlbiAqLworICAgIGludCBjb3VudDsgICAgICAgICAgLyogbnVtYmVyIG9mIGNvZGVzIG9mIGxlbmd0aCBsZW4gKi8KKyAgICBpbnQgaW5kZXg7ICAgICAgICAgIC8qIGluZGV4IG9mIGZpcnN0IGNvZGUgb2YgbGVuZ3RoIGxlbiBpbiBzeW1ib2wgdGFibGUgKi8KKyAgICBpbnQgYml0YnVmOyAgICAgICAgIC8qIGJpdHMgZnJvbSBzdHJlYW0gKi8KKyAgICBpbnQgbGVmdDsgICAgICAgICAgIC8qIGJpdHMgbGVmdCBpbiBuZXh0IG9yIGxlZnQgdG8gcHJvY2VzcyAqLworICAgIHNob3J0ICpuZXh0OyAgICAgICAgLyogbmV4dCBudW1iZXIgb2YgY29kZXMgKi8KKworICAgIGJpdGJ1ZiA9IHMtPmJpdGJ1ZjsKKyAgICBsZWZ0ID0gcy0+Yml0Y250OworICAgIGNvZGUgPSBmaXJzdCA9IGluZGV4ID0gMDsKKyAgICBsZW4gPSAxOworICAgIG5leHQgPSBoLT5jb3VudCArIDE7CisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgd2hpbGUgKGxlZnQtLSkgeworICAgICAgICAgICAgY29kZSB8PSAoYml0YnVmICYgMSkgXiAxOyAgIC8qIGludmVydCBjb2RlICovCisgICAgICAgICAgICBiaXRidWYgPj49IDE7CisgICAgICAgICAgICBjb3VudCA9ICpuZXh0Kys7CisgICAgICAgICAgICBpZiAoY29kZSA8IGZpcnN0ICsgY291bnQpIHsgLyogaWYgbGVuZ3RoIGxlbiwgcmV0dXJuIHN5bWJvbCAqLworICAgICAgICAgICAgICAgIHMtPmJpdGJ1ZiA9IGJpdGJ1ZjsKKyAgICAgICAgICAgICAgICBzLT5iaXRjbnQgPSAocy0+Yml0Y250IC0gbGVuKSAmIDc7CisgICAgICAgICAgICAgICAgcmV0dXJuIGgtPnN5bWJvbFtpbmRleCArIChjb2RlIC0gZmlyc3QpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGluZGV4ICs9IGNvdW50OyAgICAgICAgICAgICAvKiBlbHNlIHVwZGF0ZSBmb3IgbmV4dCBsZW5ndGggKi8KKyAgICAgICAgICAgIGZpcnN0ICs9IGNvdW50OworICAgICAgICAgICAgZmlyc3QgPDw9IDE7CisgICAgICAgICAgICBjb2RlIDw8PSAxOworICAgICAgICAgICAgbGVuKys7CisgICAgICAgIH0KKyAgICAgICAgbGVmdCA9IChNQVhCSVRTKzEpIC0gbGVuOworICAgICAgICBpZiAobGVmdCA9PSAwKSBicmVhazsKKyAgICAgICAgaWYgKHMtPmxlZnQgPT0gMCkgeworICAgICAgICAgICAgcy0+bGVmdCA9IHMtPmluZnVuKHMtPmluaG93LCAmKHMtPmluKSk7CisgICAgICAgICAgICBpZiAocy0+bGVmdCA9PSAwKSBsb25nam1wKHMtPmVudiwgMSk7ICAgICAgIC8qIG91dCBvZiBpbnB1dCAqLworICAgICAgICB9CisgICAgICAgIGJpdGJ1ZiA9ICoocy0+aW4pKys7CisgICAgICAgIHMtPmxlZnQtLTsKKyAgICAgICAgaWYgKGxlZnQgPiA4KSBsZWZ0ID0gODsKKyAgICB9CisgICAgcmV0dXJuIC05OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmFuIG91dCBvZiBjb2RlcyAqLworfQorCisvKgorICogR2l2ZW4gYSBsaXN0IG9mIHJlcGVhdGVkIGNvZGUgbGVuZ3RocyByZXBbMC4ubi0xXSwgd2hlcmUgZWFjaCBieXRlIGlzIGEKKyAqIGNvdW50IChoaWdoIGZvdXIgYml0cyArIDEpIGFuZCBhIGNvZGUgbGVuZ3RoIChsb3cgZm91ciBiaXRzKSwgZ2VuZXJhdGUgdGhlCisgKiBsaXN0IG9mIGNvZGUgbGVuZ3Rocy4gIFRoaXMgY29tcGFjdGlvbiByZWR1Y2VzIHRoZSBzaXplIG9mIHRoZSBvYmplY3QgY29kZS4KKyAqIFRoZW4gZ2l2ZW4gdGhlIGxpc3Qgb2YgY29kZSBsZW5ndGhzIGxlbmd0aFswLi5uLTFdIHJlcHJlc2VudGluZyBhIGNhbm9uaWNhbAorICogSHVmZm1hbiBjb2RlIGZvciBuIHN5bWJvbHMsIGNvbnN0cnVjdCB0aGUgdGFibGVzIHJlcXVpcmVkIHRvIGRlY29kZSB0aG9zZQorICogY29kZXMuICBUaG9zZSB0YWJsZXMgYXJlIHRoZSBudW1iZXIgb2YgY29kZXMgb2YgZWFjaCBsZW5ndGgsIGFuZCB0aGUgc3ltYm9scworICogc29ydGVkIGJ5IGxlbmd0aCwgcmV0YWluaW5nIHRoZWlyIG9yaWdpbmFsIG9yZGVyIHdpdGhpbiBlYWNoIGxlbmd0aC4gIFRoZQorICogcmV0dXJuIHZhbHVlIGlzIHplcm8gZm9yIGEgY29tcGxldGUgY29kZSBzZXQsIG5lZ2F0aXZlIGZvciBhbiBvdmVyLQorICogc3Vic2NyaWJlZCBjb2RlIHNldCwgYW5kIHBvc2l0aXZlIGZvciBhbiBpbmNvbXBsZXRlIGNvZGUgc2V0LiAgVGhlIHRhYmxlcworICogY2FuIGJlIHVzZWQgaWYgdGhlIHJldHVybiB2YWx1ZSBpcyB6ZXJvIG9yIHBvc2l0aXZlLCBidXQgdGhleSBjYW5ub3QgYmUgdXNlZAorICogaWYgdGhlIHJldHVybiB2YWx1ZSBpcyBuZWdhdGl2ZS4gIElmIHRoZSByZXR1cm4gdmFsdWUgaXMgemVybywgaXQgaXMgbm90CisgKiBwb3NzaWJsZSBmb3IgZGVjb2RlKCkgdXNpbmcgdGhhdCB0YWJsZSB0byByZXR1cm4gYW4gZXJyb3ItLWFueSBzdHJlYW0gb2YKKyAqIGVub3VnaCBiaXRzIHdpbGwgcmVzb2x2ZSB0byBhIHN5bWJvbC4gIElmIHRoZSByZXR1cm4gdmFsdWUgaXMgcG9zaXRpdmUsIHRoZW4KKyAqIGl0IGlzIHBvc3NpYmxlIGZvciBkZWNvZGUoKSB1c2luZyB0aGF0IHRhYmxlIHRvIHJldHVybiBhbiBlcnJvciBmb3IgcmVjZWl2ZWQKKyAqIGNvZGVzIHBhc3QgdGhlIGVuZCBvZiB0aGUgaW5jb21wbGV0ZSBsZW5ndGhzLgorICovCitsb2NhbCBpbnQgY29uc3RydWN0KHN0cnVjdCBodWZmbWFuICpoLCBjb25zdCB1bnNpZ25lZCBjaGFyICpyZXAsIGludCBuKQoreworICAgIGludCBzeW1ib2w7ICAgICAgICAgLyogY3VycmVudCBzeW1ib2wgd2hlbiBzdGVwcGluZyB0aHJvdWdoIGxlbmd0aFtdICovCisgICAgaW50IGxlbjsgICAgICAgICAgICAvKiBjdXJyZW50IGxlbmd0aCB3aGVuIHN0ZXBwaW5nIHRocm91Z2ggaC0+Y291bnRbXSAqLworICAgIGludCBsZWZ0OyAgICAgICAgICAgLyogbnVtYmVyIG9mIHBvc3NpYmxlIGNvZGVzIGxlZnQgb2YgY3VycmVudCBsZW5ndGggKi8KKyAgICBzaG9ydCBvZmZzW01BWEJJVFMrMV07ICAgICAgLyogb2Zmc2V0cyBpbiBzeW1ib2wgdGFibGUgZm9yIGVhY2ggbGVuZ3RoICovCisgICAgc2hvcnQgbGVuZ3RoWzI1Nl07ICAvKiBjb2RlIGxlbmd0aHMgKi8KKworICAgIC8qIGNvbnZlcnQgY29tcGFjdCByZXBlYXQgY291bnRzIGludG8gc3ltYm9sIGJpdCBsZW5ndGggbGlzdCAqLworICAgIHN5bWJvbCA9IDA7CisgICAgZG8geworICAgICAgICBsZW4gPSAqcmVwKys7CisgICAgICAgIGxlZnQgPSAobGVuID4+IDQpICsgMTsKKyAgICAgICAgbGVuICY9IDE1OworICAgICAgICBkbyB7CisgICAgICAgICAgICBsZW5ndGhbc3ltYm9sKytdID0gbGVuOworICAgICAgICB9IHdoaWxlICgtLWxlZnQpOworICAgIH0gd2hpbGUgKC0tbik7CisgICAgbiA9IHN5bWJvbDsKKworICAgIC8qIGNvdW50IG51bWJlciBvZiBjb2RlcyBvZiBlYWNoIGxlbmd0aCAqLworICAgIGZvciAobGVuID0gMDsgbGVuIDw9IE1BWEJJVFM7IGxlbisrKQorICAgICAgICBoLT5jb3VudFtsZW5dID0gMDsKKyAgICBmb3IgKHN5bWJvbCA9IDA7IHN5bWJvbCA8IG47IHN5bWJvbCsrKQorICAgICAgICAoaC0+Y291bnRbbGVuZ3RoW3N5bWJvbF1dKSsrOyAgIC8qIGFzc3VtZXMgbGVuZ3RocyBhcmUgd2l0aGluIGJvdW5kcyAqLworICAgIGlmIChoLT5jb3VudFswXSA9PSBuKSAgICAgICAgICAgICAgIC8qIG5vIGNvZGVzISAqLworICAgICAgICByZXR1cm4gMDsgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbXBsZXRlLCBidXQgZGVjb2RlKCkgd2lsbCBmYWlsICovCisKKyAgICAvKiBjaGVjayBmb3IgYW4gb3Zlci1zdWJzY3JpYmVkIG9yIGluY29tcGxldGUgc2V0IG9mIGxlbmd0aHMgKi8KKyAgICBsZWZ0ID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvbmUgcG9zc2libGUgY29kZSBvZiB6ZXJvIGxlbmd0aCAqLworICAgIGZvciAobGVuID0gMTsgbGVuIDw9IE1BWEJJVFM7IGxlbisrKSB7CisgICAgICAgIGxlZnQgPDw9IDE7ICAgICAgICAgICAgICAgICAgICAgLyogb25lIG1vcmUgYml0LCBkb3VibGUgY29kZXMgbGVmdCAqLworICAgICAgICBsZWZ0IC09IGgtPmNvdW50W2xlbl07ICAgICAgICAgIC8qIGRlZHVjdCBjb3VudCBmcm9tIHBvc3NpYmxlIGNvZGVzICovCisgICAgICAgIGlmIChsZWZ0IDwgMCkgcmV0dXJuIGxlZnQ7ICAgICAgLyogb3Zlci1zdWJzY3JpYmVkLS1yZXR1cm4gbmVnYXRpdmUgKi8KKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsZWZ0ID4gMCBtZWFucyBpbmNvbXBsZXRlICovCisKKyAgICAvKiBnZW5lcmF0ZSBvZmZzZXRzIGludG8gc3ltYm9sIHRhYmxlIGZvciBlYWNoIGxlbmd0aCBmb3Igc29ydGluZyAqLworICAgIG9mZnNbMV0gPSAwOworICAgIGZvciAobGVuID0gMTsgbGVuIDwgTUFYQklUUzsgbGVuKyspCisgICAgICAgIG9mZnNbbGVuICsgMV0gPSBvZmZzW2xlbl0gKyBoLT5jb3VudFtsZW5dOworCisgICAgLyoKKyAgICAgKiBwdXQgc3ltYm9scyBpbiB0YWJsZSBzb3J0ZWQgYnkgbGVuZ3RoLCBieSBzeW1ib2wgb3JkZXIgd2l0aGluIGVhY2gKKyAgICAgKiBsZW5ndGgKKyAgICAgKi8KKyAgICBmb3IgKHN5bWJvbCA9IDA7IHN5bWJvbCA8IG47IHN5bWJvbCsrKQorICAgICAgICBpZiAobGVuZ3RoW3N5bWJvbF0gIT0gMCkKKyAgICAgICAgICAgIGgtPnN5bWJvbFtvZmZzW2xlbmd0aFtzeW1ib2xdXSsrXSA9IHN5bWJvbDsKKworICAgIC8qIHJldHVybiB6ZXJvIGZvciBjb21wbGV0ZSBzZXQsIHBvc2l0aXZlIGZvciBpbmNvbXBsZXRlIHNldCAqLworICAgIHJldHVybiBsZWZ0OworfQorCisvKgorICogRGVjb2RlIFBLV2FyZSBDb21wcmVzc2lvbiBMaWJyYXJ5IHN0cmVhbS4KKyAqCisgKiBGb3JtYXQgbm90ZXM6CisgKgorICogLSBGaXJzdCBieXRlIGlzIDAgaWYgbGl0ZXJhbHMgYXJlIHVuY29kZWQgb3IgMSBpZiB0aGV5IGFyZSBjb2RlZC4gIFNlY29uZAorICogICBieXRlIGlzIDQsIDUsIG9yIDYgZm9yIHRoZSBudW1iZXIgb2YgZXh0cmEgYml0cyBpbiB0aGUgZGlzdGFuY2UgY29kZS4KKyAqICAgVGhpcyBpcyB0aGUgYmFzZS0yIGxvZ2FyaXRobSBvZiB0aGUgZGljdGlvbmFyeSBzaXplIG1pbnVzIHNpeC4KKyAqCisgKiAtIENvbXByZXNzZWQgZGF0YSBpcyBhIGNvbWJpbmF0aW9uIG9mIGxpdGVyYWxzIGFuZCBsZW5ndGgvZGlzdGFuY2UgcGFpcnMKKyAqICAgdGVybWluYXRlZCBieSBhbiBlbmQgY29kZS4gIExpdGVyYWxzIGFyZSBlaXRoZXIgSHVmZm1hbiBjb2RlZCBvcgorICogICB1bmNvZGVkIGJ5dGVzLiAgQSBsZW5ndGgvZGlzdGFuY2UgcGFpciBpcyBhIGNvZGVkIGxlbmd0aCBmb2xsb3dlZCBieSBhCisgKiAgIGNvZGVkIGRpc3RhbmNlIHRvIHJlcHJlc2VudCBhIHN0cmluZyB0aGF0IG9jY3VycyBlYXJsaWVyIGluIHRoZQorICogICB1bmNvbXByZXNzZWQgZGF0YSB0aGF0IG9jY3VycyBhZ2FpbiBhdCB0aGUgY3VycmVudCBsb2NhdGlvbi4KKyAqCisgKiAtIEEgYml0IHByZWNlZGluZyBhIGxpdGVyYWwgb3IgbGVuZ3RoL2Rpc3RhbmNlIHBhaXIgaW5kaWNhdGVzIHdoaWNoIGNvbWVzCisgKiAgIG5leHQsIDAgZm9yIGxpdGVyYWxzLCAxIGZvciBsZW5ndGgvZGlzdGFuY2UuCisgKgorICogLSBJZiBsaXRlcmFscyBhcmUgdW5jb2RlZCwgdGhlbiB0aGUgbmV4dCBlaWdodCBiaXRzIGFyZSB0aGUgbGl0ZXJhbCwgaW4gdGhlCisgKiAgIG5vcm1hbCBiaXQgb3JkZXIgaW4gdGhlIHN0cmVhbSwgaS5lLiBubyBiaXQtcmV2ZXJzYWwgaXMgbmVlZGVkLiBTaW1pbGFybHksCisgKiAgIG5vIGJpdCByZXZlcnNhbCBpcyBuZWVkZWQgZm9yIGVpdGhlciB0aGUgbGVuZ3RoIGV4dHJhIGJpdHMgb3IgdGhlIGRpc3RhbmNlCisgKiAgIGV4dHJhIGJpdHMuCisgKgorICogLSBMaXRlcmFsIGJ5dGVzIGFyZSBzaW1wbHkgd3JpdHRlbiB0byB0aGUgb3V0cHV0LiAgQSBsZW5ndGgvZGlzdGFuY2UgcGFpciBpcworICogICBhbiBpbnN0cnVjdGlvbiB0byBjb3B5IHByZXZpb3VzbHkgdW5jb21wcmVzc2VkIGJ5dGVzIHRvIHRoZSBvdXRwdXQuICBUaGUKKyAqICAgY29weSBpcyBmcm9tIGRpc3RhbmNlIGJ5dGVzIGJhY2sgaW4gdGhlIG91dHB1dCBzdHJlYW0sIGNvcHlpbmcgZm9yIGxlbmd0aAorICogICBieXRlcy4KKyAqCisgKiAtIERpc3RhbmNlcyBwb2ludGluZyBiZWZvcmUgdGhlIGJlZ2lubmluZyBvZiB0aGUgb3V0cHV0IGRhdGEgYXJlIG5vdAorICogICBwZXJtaXR0ZWQuCisgKgorICogLSBPdmVybGFwcGVkIGNvcGllcywgd2hlcmUgdGhlIGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gdGhlIGRpc3RhbmNlLCBhcmUKKyAqICAgYWxsb3dlZCBhbmQgY29tbW9uLiAgRm9yIGV4YW1wbGUsIGEgZGlzdGFuY2Ugb2Ygb25lIGFuZCBhIGxlbmd0aCBvZiA1MTgKKyAqICAgc2ltcGx5IGNvcGllcyB0aGUgbGFzdCBieXRlIDUxOCB0aW1lcy4gIEEgZGlzdGFuY2Ugb2YgZm91ciBhbmQgYSBsZW5ndGggb2YKKyAqICAgdHdlbHZlIGNvcGllcyB0aGUgbGFzdCBmb3VyIGJ5dGVzIHRocmVlIHRpbWVzLiAgQSBzaW1wbGUgZm9yd2FyZCBjb3B5CisgKiAgIGlnbm9yaW5nIHdoZXRoZXIgdGhlIGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gdGhlIGRpc3RhbmNlIG9yIG5vdCBpbXBsZW1lbnRzCisgKiAgIHRoaXMgY29ycmVjdGx5LgorICovCitsb2NhbCBpbnQgZGVjb21wKHN0cnVjdCBzdGF0ZSAqcykKK3sKKyAgICBpbnQgbGl0OyAgICAgICAgICAgIC8qIHRydWUgaWYgbGl0ZXJhbHMgYXJlIGNvZGVkICovCisgICAgaW50IGRpY3Q7ICAgICAgICAgICAvKiBsb2cyKGRpY3Rpb25hcnkgc2l6ZSkgLSA2ICovCisgICAgaW50IHN5bWJvbDsgICAgICAgICAvKiBkZWNvZGVkIHN5bWJvbCwgZXh0cmEgYml0cyBmb3IgZGlzdGFuY2UgKi8KKyAgICBpbnQgbGVuOyAgICAgICAgICAgIC8qIGxlbmd0aCBmb3IgY29weSAqLworICAgIHVuc2lnbmVkIGRpc3Q7ICAgICAgLyogZGlzdGFuY2UgZm9yIGNvcHkgKi8KKyAgICBpbnQgY29weTsgICAgICAgICAgIC8qIGNvcHkgY291bnRlciAqLworICAgIHVuc2lnbmVkIGNoYXIgKmZyb20sICp0bzsgICAvKiBjb3B5IHBvaW50ZXJzICovCisgICAgc3RhdGljIGludCB2aXJnaW4gPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJ1aWxkIHRhYmxlcyBvbmNlICovCisgICAgc3RhdGljIHNob3J0IGxpdGNudFtNQVhCSVRTKzFdLCBsaXRzeW1bMjU2XTsgICAgICAgIC8qIGxpdGNvZGUgbWVtb3J5ICovCisgICAgc3RhdGljIHNob3J0IGxlbmNudFtNQVhCSVRTKzFdLCBsZW5zeW1bMTZdOyAgICAgICAgIC8qIGxlbmNvZGUgbWVtb3J5ICovCisgICAgc3RhdGljIHNob3J0IGRpc3RjbnRbTUFYQklUUysxXSwgZGlzdHN5bVs2NF07ICAgICAgIC8qIGRpc3Rjb2RlIG1lbW9yeSAqLworICAgIHN0YXRpYyBzdHJ1Y3QgaHVmZm1hbiBsaXRjb2RlID0ge2xpdGNudCwgbGl0c3ltfTsgICAvKiBsZW5ndGggY29kZSAqLworICAgIHN0YXRpYyBzdHJ1Y3QgaHVmZm1hbiBsZW5jb2RlID0ge2xlbmNudCwgbGVuc3ltfTsgICAvKiBsZW5ndGggY29kZSAqLworICAgIHN0YXRpYyBzdHJ1Y3QgaHVmZm1hbiBkaXN0Y29kZSA9IHtkaXN0Y250LCBkaXN0c3ltfTsvKiBkaXN0YW5jZSBjb2RlICovCisgICAgICAgIC8qIGJpdCBsZW5ndGhzIG9mIGxpdGVyYWwgY29kZXMgKi8KKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBsaXRsZW5bXSA9IHsKKyAgICAgICAgMTEsIDEyNCwgOCwgNywgMjgsIDcsIDE4OCwgMTMsIDc2LCA0LCAxMCwgOCwgMTIsIDEwLCAxMiwgMTAsIDgsIDIzLCA4LAorICAgICAgICA5LCA3LCA2LCA3LCA4LCA3LCA2LCA1NSwgOCwgMjMsIDI0LCAxMiwgMTEsIDcsIDksIDExLCAxMiwgNiwgNywgMjIsIDUsCisgICAgICAgIDcsIDI0LCA2LCAxMSwgOSwgNiwgNywgMjIsIDcsIDExLCAzOCwgNywgOSwgOCwgMjUsIDExLCA4LCAxMSwgOSwgMTIsCisgICAgICAgIDgsIDEyLCA1LCAzOCwgNSwgMzgsIDUsIDExLCA3LCA1LCA2LCAyMSwgNiwgMTAsIDUzLCA4LCA3LCAyNCwgMTAsIDI3LAorICAgICAgICA0NCwgMjUzLCAyNTMsIDI1MywgMjUyLCAyNTIsIDI1MiwgMTMsIDEyLCA0NSwgMTIsIDQ1LCAxMiwgNjEsIDEyLCA0NSwKKyAgICAgICAgNDQsIDE3M307CisgICAgICAgIC8qIGJpdCBsZW5ndGhzIG9mIGxlbmd0aCBjb2RlcyAwLi4xNSAqLworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGxlbmxlbltdID0gezIsIDM1LCAzNiwgNTMsIDM4LCAyM307CisgICAgICAgIC8qIGJpdCBsZW5ndGhzIG9mIGRpc3RhbmNlIGNvZGVzIDAuLjYzICovCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGlzdGxlbltdID0gezIsIDIwLCA1MywgMjMwLCAyNDcsIDE1MSwgMjQ4fTsKKyAgICBzdGF0aWMgY29uc3Qgc2hvcnQgYmFzZVsxNl0gPSB7ICAgICAvKiBiYXNlIGZvciBsZW5ndGggY29kZXMgKi8KKyAgICAgICAgMywgMiwgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDEyLCAxNiwgMjQsIDQwLCA3MiwgMTM2LCAyNjR9OworICAgIHN0YXRpYyBjb25zdCBjaGFyIGV4dHJhWzE2XSA9IHsgICAgIC8qIGV4dHJhIGJpdHMgZm9yIGxlbmd0aCBjb2RlcyAqLworICAgICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4fTsKKworICAgIC8qIHNldCB1cCBkZWNvZGluZyB0YWJsZXMgKG9uY2UtLW1pZ2h0IG5vdCBiZSB0aHJlYWQtc2FmZSkgKi8KKyAgICBpZiAodmlyZ2luKSB7CisgICAgICAgIGNvbnN0cnVjdCgmbGl0Y29kZSwgbGl0bGVuLCBzaXplb2YobGl0bGVuKSk7CisgICAgICAgIGNvbnN0cnVjdCgmbGVuY29kZSwgbGVubGVuLCBzaXplb2YobGVubGVuKSk7CisgICAgICAgIGNvbnN0cnVjdCgmZGlzdGNvZGUsIGRpc3RsZW4sIHNpemVvZihkaXN0bGVuKSk7CisgICAgICAgIHZpcmdpbiA9IDA7CisgICAgfQorCisgICAgLyogcmVhZCBoZWFkZXIgKi8KKyAgICBsaXQgPSBiaXRzKHMsIDgpOworICAgIGlmIChsaXQgPiAxKSByZXR1cm4gLTE7CisgICAgZGljdCA9IGJpdHMocywgOCk7CisgICAgaWYgKGRpY3QgPCA0IHx8IGRpY3QgPiA2KSByZXR1cm4gLTI7CisKKyAgICAvKiBkZWNvZGUgbGl0ZXJhbHMgYW5kIGxlbmd0aC9kaXN0YW5jZSBwYWlycyAqLworICAgIGRvIHsKKyAgICAgICAgaWYgKGJpdHMocywgMSkpIHsKKyAgICAgICAgICAgIC8qIGdldCBsZW5ndGggKi8KKyAgICAgICAgICAgIHN5bWJvbCA9IGRlY29kZShzLCAmbGVuY29kZSk7CisgICAgICAgICAgICBsZW4gPSBiYXNlW3N5bWJvbF0gKyBiaXRzKHMsIGV4dHJhW3N5bWJvbF0pOworICAgICAgICAgICAgaWYgKGxlbiA9PSA1MTkpIGJyZWFrOyAgICAgICAgICAgICAgLyogZW5kIGNvZGUgKi8KKworICAgICAgICAgICAgLyogZ2V0IGRpc3RhbmNlICovCisgICAgICAgICAgICBzeW1ib2wgPSBsZW4gPT0gMiA/IDIgOiBkaWN0OworICAgICAgICAgICAgZGlzdCA9IGRlY29kZShzLCAmZGlzdGNvZGUpIDw8IHN5bWJvbDsKKyAgICAgICAgICAgIGRpc3QgKz0gYml0cyhzLCBzeW1ib2wpOworICAgICAgICAgICAgZGlzdCsrOworICAgICAgICAgICAgaWYgKHMtPmZpcnN0ICYmIGRpc3QgPiBzLT5uZXh0KQorICAgICAgICAgICAgICAgIHJldHVybiAtMzsgICAgICAgICAgICAgIC8qIGRpc3RhbmNlIHRvbyBmYXIgYmFjayAqLworCisgICAgICAgICAgICAvKiBjb3B5IGxlbmd0aCBieXRlcyBmcm9tIGRpc3RhbmNlIGJ5dGVzIGJhY2sgKi8KKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICB0byA9IHMtPm91dCArIHMtPm5leHQ7CisgICAgICAgICAgICAgICAgZnJvbSA9IHRvIC0gZGlzdDsKKyAgICAgICAgICAgICAgICBjb3B5ID0gTUFYV0lOOworICAgICAgICAgICAgICAgIGlmIChzLT5uZXh0IDwgZGlzdCkgeworICAgICAgICAgICAgICAgICAgICBmcm9tICs9IGNvcHk7CisgICAgICAgICAgICAgICAgICAgIGNvcHkgPSBkaXN0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb3B5IC09IHMtPm5leHQ7CisgICAgICAgICAgICAgICAgaWYgKGNvcHkgPiBsZW4pIGNvcHkgPSBsZW47CisgICAgICAgICAgICAgICAgbGVuIC09IGNvcHk7CisgICAgICAgICAgICAgICAgcy0+bmV4dCArPSBjb3B5OworICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgKnRvKysgPSAqZnJvbSsrOworICAgICAgICAgICAgICAgIH0gd2hpbGUgKC0tY29weSk7CisgICAgICAgICAgICAgICAgaWYgKHMtPm5leHQgPT0gTUFYV0lOKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzLT5vdXRmdW4ocy0+b3V0aG93LCBzLT5vdXQsIHMtPm5leHQpKSByZXR1cm4gMTsKKyAgICAgICAgICAgICAgICAgICAgcy0+bmV4dCA9IDA7CisgICAgICAgICAgICAgICAgICAgIHMtPmZpcnN0ID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IHdoaWxlIChsZW4gIT0gMCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKiBnZXQgbGl0ZXJhbCBhbmQgd3JpdGUgaXQgKi8KKyAgICAgICAgICAgIHN5bWJvbCA9IGxpdCA/IGRlY29kZShzLCAmbGl0Y29kZSkgOiBiaXRzKHMsIDgpOworICAgICAgICAgICAgcy0+b3V0W3MtPm5leHQrK10gPSBzeW1ib2w7CisgICAgICAgICAgICBpZiAocy0+bmV4dCA9PSBNQVhXSU4pIHsKKyAgICAgICAgICAgICAgICBpZiAocy0+b3V0ZnVuKHMtPm91dGhvdywgcy0+b3V0LCBzLT5uZXh0KSkgcmV0dXJuIDE7CisgICAgICAgICAgICAgICAgcy0+bmV4dCA9IDA7CisgICAgICAgICAgICAgICAgcy0+Zmlyc3QgPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSB3aGlsZSAoMSk7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qIFNlZSBjb21tZW50cyBpbiBibGFzdC5oICovCitpbnQgYmxhc3QoYmxhc3RfaW4gaW5mdW4sIHZvaWQgKmluaG93LCBibGFzdF9vdXQgb3V0ZnVuLCB2b2lkICpvdXRob3csCisgICAgICAgICAgdW5zaWduZWQgKmxlZnQsIHVuc2lnbmVkIGNoYXIgKippbikKK3sKKyAgICBzdHJ1Y3Qgc3RhdGUgczsgICAgICAgICAgICAgLyogaW5wdXQvb3V0cHV0IHN0YXRlICovCisgICAgaW50IGVycjsgICAgICAgICAgICAgICAgICAgIC8qIHJldHVybiB2YWx1ZSAqLworCisgICAgLyogaW5pdGlhbGl6ZSBpbnB1dCBzdGF0ZSAqLworICAgIHMuaW5mdW4gPSBpbmZ1bjsKKyAgICBzLmluaG93ID0gaW5ob3c7CisgICAgaWYgKGxlZnQgIT0gTlVMTCAmJiAqbGVmdCkgeworICAgICAgICBzLmxlZnQgPSAqbGVmdDsKKyAgICAgICAgcy5pbiA9ICppbjsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBzLmxlZnQgPSAwOworICAgIHMuYml0YnVmID0gMDsKKyAgICBzLmJpdGNudCA9IDA7CisKKyAgICAvKiBpbml0aWFsaXplIG91dHB1dCBzdGF0ZSAqLworICAgIHMub3V0ZnVuID0gb3V0ZnVuOworICAgIHMub3V0aG93ID0gb3V0aG93OworICAgIHMubmV4dCA9IDA7CisgICAgcy5maXJzdCA9IDE7CisKKyAgICAvKiByZXR1cm4gaWYgYml0cygpIG9yIGRlY29kZSgpIHRyaWVzIHRvIHJlYWQgcGFzdCBhdmFpbGFibGUgaW5wdXQgKi8KKyAgICBpZiAoc2V0am1wKHMuZW52KSAhPSAwKSAgICAgICAgICAgICAvKiBpZiBjYW1lIGJhY2sgaGVyZSB2aWEgbG9uZ2ptcCgpLCAqLworICAgICAgICBlcnIgPSAyOyAgICAgICAgICAgICAgICAgICAgICAgIC8qICB0aGVuIHNraXAgZGVjb21wKCksIHJldHVybiBlcnJvciAqLworICAgIGVsc2UKKyAgICAgICAgZXJyID0gZGVjb21wKCZzKTsgICAgICAgICAgICAgICAvKiBkZWNvbXByZXNzICovCisKKyAgICAvKiByZXR1cm4gdW51c2VkIGlucHV0ICovCisgICAgaWYgKGxlZnQgIT0gTlVMTCkKKyAgICAgICAgKmxlZnQgPSBzLmxlZnQ7CisgICAgaWYgKGluICE9IE5VTEwpCisgICAgICAgICppbiA9IHMubGVmdCA/IHMuaW4gOiBOVUxMOworCisgICAgLyogd3JpdGUgYW55IGxlZnRvdmVyIG91dHB1dCBhbmQgdXBkYXRlIHRoZSBlcnJvciBjb2RlIGlmIG5lZWRlZCAqLworICAgIGlmIChlcnIgIT0gMSAmJiBzLm5leHQgJiYgcy5vdXRmdW4ocy5vdXRob3csIHMub3V0LCBzLm5leHQpICYmIGVyciA9PSAwKQorICAgICAgICBlcnIgPSAxOworICAgIHJldHVybiBlcnI7Cit9CisKKyNpZmRlZiBURVNUCisvKiBFeGFtcGxlIG9mIGhvdyB0byB1c2UgYmxhc3QoKSAqLworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNkZWZpbmUgQ0hVTksgMTYzODQKKworbG9jYWwgdW5zaWduZWQgaW5mKHZvaWQgKmhvdywgdW5zaWduZWQgY2hhciAqKmJ1ZikKK3sKKyAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBob2xkW0NIVU5LXTsKKworICAgICpidWYgPSBob2xkOworICAgIHJldHVybiBmcmVhZChob2xkLCAxLCBDSFVOSywgKEZJTEUgKilob3cpOworfQorCitsb2NhbCBpbnQgb3V0Zih2b2lkICpob3csIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVuKQoreworICAgIHJldHVybiBmd3JpdGUoYnVmLCAxLCBsZW4sIChGSUxFICopaG93KSAhPSBsZW47Cit9CisKKy8qIERlY29tcHJlc3MgYSBQS1dhcmUgQ29tcHJlc3Npb24gTGlicmFyeSBzdHJlYW0gZnJvbSBzdGRpbiB0byBzdGRvdXQgKi8KK2ludCBtYWluKHZvaWQpCit7CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBsZWZ0OworCisgICAgLyogZGVjb21wcmVzcyB0byBzdGRvdXQgKi8KKyAgICBsZWZ0ID0gMDsKKyAgICByZXQgPSBibGFzdChpbmYsIHN0ZGluLCBvdXRmLCBzdGRvdXQsICZsZWZ0LCBOVUxMKTsKKyAgICBpZiAocmV0ICE9IDApCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiYmxhc3QgZXJyb3I6ICVkXG4iLCByZXQpOworCisgICAgLyogY291bnQgYW55IGxlZnRvdmVyIGJ5dGVzICovCisgICAgd2hpbGUgKGdldGNoYXIoKSAhPSBFT0YpCisgICAgICAgIGxlZnQrKzsKKyAgICBpZiAobGVmdCkKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJibGFzdCB3YXJuaW5nOiAldSB1bnVzZWQgYnl0ZXMgb2YgaW5wdXRcbiIsIGxlZnQpOworCisgICAgLyogcmV0dXJuIGJsYXN0KCkgZXJyb3IgY29kZSAqLworICAgIHJldHVybiByZXQ7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL2JsYXN0L2JsYXN0LmggYi9zcmMvY29udHJpYi9ibGFzdC9ibGFzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmODU0NGMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29udHJpYi9ibGFzdC9ibGFzdC5oCkBAIC0wLDAgKzEsODMgQEAKKy8qIGJsYXN0LmggLS0gaW50ZXJmYWNlIGZvciBibGFzdC5jCisgIENvcHlyaWdodCAoQykgMjAwMywgMjAxMiwgMjAxMyBNYXJrIEFkbGVyCisgIHZlcnNpb24gMS4zLCAyNCBBdWcgMjAxMworCisgIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkCisgIHdhcnJhbnR5LiAgSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9yIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcworICBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLgorCisgIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLAorICBpbmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRlciBpdCBhbmQgcmVkaXN0cmlidXRlIGl0CisgIGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworICAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdAorICAgICBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZQorICAgICBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24gd291bGQgYmUKKyAgICAgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1aXJlZC4KKyAgMi4gQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmUKKyAgICAgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLgorICAzLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLgorCisgIE1hcmsgQWRsZXIgICAgbWFkbGVyQGFsdW1uaS5jYWx0ZWNoLmVkdQorICovCisKKworLyoKKyAqIGJsYXN0KCkgZGVjb21wcmVzc2VzIHRoZSBQS1dhcmUgRGF0YSBDb21wcmVzc2lvbiBMaWJyYXJ5IChEQ0wpIGNvbXByZXNzZWQKKyAqIGZvcm1hdC4gIEl0IHByb3ZpZGVzIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkgYXMgdGhlIGV4cGxvZGUoKSBmdW5jdGlvbiBpbgorICogdGhhdCBsaWJyYXJ5LiAgKE5vdGU6IFBLV2FyZSBvdmVydXNlZCB0aGUgImltcGxvZGUiIHZlcmIsIGFuZCB0aGUgZm9ybWF0CisgKiB1c2VkIGJ5IHRoZWlyIGxpYnJhcnkgaW1wbG9kZSgpIGZ1bmN0aW9uIGlzIGNvbXBsZXRlbHkgZGlmZmVyZW50IGFuZAorICogaW5jb21wYXRpYmxlIHdpdGggdGhlIGltcGxvZGUgY29tcHJlc3Npb24gbWV0aG9kIHN1cHBvcnRlZCBieSBQS1pJUC4pCisgKgorICogVGhlIGJpbmFyeSBtb2RlIGZvciBzdGRpbyBmdW5jdGlvbnMgc2hvdWxkIGJlIHVzZWQgdG8gYXNzdXJlIHRoYXQgdGhlCisgKiBjb21wcmVzc2VkIGRhdGEgaXMgbm90IGNvcnJ1cHRlZCB3aGVuIHJlYWQgb3Igd3JpdHRlbi4gIEZvciBleGFtcGxlOgorICogZm9wZW4oLi4uLCAicmIiKSBhbmQgZm9wZW4oLi4uLCAid2IiKS4KKyAqLworCisKK3R5cGVkZWYgdW5zaWduZWQgKCpibGFzdF9pbikodm9pZCAqaG93LCB1bnNpZ25lZCBjaGFyICoqYnVmKTsKK3R5cGVkZWYgaW50ICgqYmxhc3Rfb3V0KSh2b2lkICpob3csIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVuKTsKKy8qIERlZmluaXRpb25zIGZvciBpbnB1dC9vdXRwdXQgZnVuY3Rpb25zIHBhc3NlZCB0byBibGFzdCgpLiAgU2VlIGJlbG93IGZvcgorICogd2hhdCB0aGUgcHJvdmlkZWQgZnVuY3Rpb25zIG5lZWQgdG8gZG8uCisgKi8KKworCitpbnQgYmxhc3QoYmxhc3RfaW4gaW5mdW4sIHZvaWQgKmluaG93LCBibGFzdF9vdXQgb3V0ZnVuLCB2b2lkICpvdXRob3csCisgICAgICAgICAgdW5zaWduZWQgKmxlZnQsIHVuc2lnbmVkIGNoYXIgKippbik7CisvKiBEZWNvbXByZXNzIGlucHV0IHRvIG91dHB1dCB1c2luZyB0aGUgcHJvdmlkZWQgaW5mdW4oKSBhbmQgb3V0ZnVuKCkgY2FsbHMuCisgKiBPbiBzdWNjZXNzLCB0aGUgcmV0dXJuIHZhbHVlIG9mIGJsYXN0KCkgaXMgemVyby4gIElmIHRoZXJlIGlzIGFuIGVycm9yIGluCisgKiB0aGUgc291cmNlIGRhdGEsIGkuZS4gaXQgaXMgbm90IGluIHRoZSBwcm9wZXIgZm9ybWF0LCB0aGVuIGEgbmVnYXRpdmUgdmFsdWUKKyAqIGlzIHJldHVybmVkLiAgSWYgdGhlcmUgaXMgbm90IGVub3VnaCBpbnB1dCBhdmFpbGFibGUgb3IgdGhlcmUgaXMgbm90IGVub3VnaAorICogb3V0cHV0IHNwYWNlLCB0aGVuIGEgcG9zaXRpdmUgZXJyb3IgaXMgcmV0dXJuZWQuCisgKgorICogVGhlIGlucHV0IGZ1bmN0aW9uIGlzIGludm9rZWQ6IGxlbiA9IGluZnVuKGhvdywgJmJ1ZiksIHdoZXJlIGJ1ZiBpcyBzZXQgYnkKKyAqIGluZnVuKCkgdG8gcG9pbnQgdG8gdGhlIGlucHV0IGJ1ZmZlciwgYW5kIGluZnVuKCkgcmV0dXJucyB0aGUgbnVtYmVyIG9mCisgKiBhdmFpbGFibGUgYnl0ZXMgdGhlcmUuICBJZiBpbmZ1bigpIHJldHVybnMgemVybywgdGhlbiBibGFzdCgpIHJldHVybnMgd2l0aAorICogYW4gaW5wdXQgZXJyb3IuICAoYmxhc3QoKSBvbmx5IGFza3MgZm9yIGlucHV0IGlmIGl0IG5lZWRzIGl0LikgIGluaG93IGlzIGZvcgorICogdXNlIGJ5IHRoZSBhcHBsaWNhdGlvbiB0byBwYXNzIGFuIGlucHV0IGRlc2NyaXB0b3IgdG8gaW5mdW4oKSwgaWYgZGVzaXJlZC4KKyAqCisgKiBJZiBsZWZ0IGFuZCBpbiBhcmUgbm90IE5VTEwgYW5kICpsZWZ0IGlzIG5vdCB6ZXJvIHdoZW4gYmxhc3QoKSBpcyBjYWxsZWQsCisgKiB0aGVuIHRoZSAqbGVmdCBieXRlcyBhdCAqaW4gYXJlIGNvbnN1bWVkIGZvciBpbnB1dCBiZWZvcmUgaW5mdW4oKSBpcyB1c2VkLgorICoKKyAqIFRoZSBvdXRwdXQgZnVuY3Rpb24gaXMgaW52b2tlZDogZXJyID0gb3V0ZnVuKGhvdywgYnVmLCBsZW4pLCB3aGVyZSB0aGUgYnl0ZXMKKyAqIHRvIGJlIHdyaXR0ZW4gYXJlIGJ1ZlswLi5sZW4tMV0uICBJZiBlcnIgaXMgbm90IHplcm8sIHRoZW4gYmxhc3QoKSByZXR1cm5zCisgKiB3aXRoIGFuIG91dHB1dCBlcnJvci4gIG91dGZ1bigpIGlzIGFsd2F5cyBjYWxsZWQgd2l0aCBsZW4gPD0gNDA5Ni4gIG91dGhvdworICogaXMgZm9yIHVzZSBieSB0aGUgYXBwbGljYXRpb24gdG8gcGFzcyBhbiBvdXRwdXQgZGVzY3JpcHRvciB0byBvdXRmdW4oKSwgaWYKKyAqIGRlc2lyZWQuCisgKgorICogSWYgdGhlcmUgaXMgYW55IHVudXNlZCBpbnB1dCwgKmxlZnQgaXMgc2V0IHRvIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3ZXJlCisgKiByZWFkIGFuZCAqaW4gcG9pbnRzIHRvIHRoZW0uICBPdGhlcndpc2UgKmxlZnQgaXMgc2V0IHRvIHplcm8gYW5kICppbiBpcyBzZXQKKyAqIHRvIE5VTEwuICBJZiBsZWZ0IG9yIGluIGFyZSBOVUxMLCB0aGVuIHRoZXkgYXJlIG5vdCBzZXQuCisgKgorICogVGhlIHJldHVybiBjb2RlcyBhcmU6CisgKgorICogICAyOiAgcmFuIG91dCBvZiBpbnB1dCBiZWZvcmUgY29tcGxldGluZyBkZWNvbXByZXNzaW9uCisgKiAgIDE6ICBvdXRwdXQgZXJyb3IgYmVmb3JlIGNvbXBsZXRpbmcgZGVjb21wcmVzc2lvbgorICogICAwOiAgc3VjY2Vzc2Z1bCBkZWNvbXByZXNzaW9uCisgKiAgLTE6ICBsaXRlcmFsIGZsYWcgbm90IHplcm8gb3Igb25lCisgKiAgLTI6ICBkaWN0aW9uYXJ5IHNpemUgbm90IGluIDQuLjYKKyAqICAtMzogIGRpc3RhbmNlIGlzIHRvbyBmYXIgYmFjaworICoKKyAqIEF0IHRoZSBib3R0b20gb2YgYmxhc3QuYyBpcyBhbiBleGFtcGxlIHByb2dyYW0gdGhhdCB1c2VzIGJsYXN0KCkgdGhhdCBjYW4gYmUKKyAqIGNvbXBpbGVkIHRvIHByb2R1Y2UgYSBjb21tYW5kLWxpbmUgZGVjb21wcmVzc2lvbiBmaWx0ZXIgYnkgZGVmaW5pbmcgVEVTVC4KKyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvYmxhc3QvdGVzdC5wayBiL3NyYy9jb250cmliL2JsYXN0L3Rlc3QucGsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUxMGIyYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb250cmliL2JsYXN0L3Rlc3QucGsKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvYmxhc3QvdGVzdC50eHQgYi9zcmMvY29udHJpYi9ibGFzdC90ZXN0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmRmMWM1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbnRyaWIvYmxhc3QvdGVzdC50eHQKQEAgLTAsMCArMSBAQAorQUlBSUFJQUlBSUFJQQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL2RlbHBoaS9aTGliLnBhcyBiL3NyYy9jb250cmliL2RlbHBoaS9aTGliLnBhcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDBkYWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbnRyaWIvZGVscGhpL1pMaWIucGFzCkBAIC0wLDAgKzEsNTU3IEBACit7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKn0KK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoreyAgICAgICBCb3JsYW5kIERlbHBoaSBTdXBwbGVtZW50YWwgQ29tcG9uZW50cyAgICAgICAgICB9Cit7ICAgICAgIFpMSUIgRGF0YSBDb21wcmVzc2lvbiBJbnRlcmZhY2UgVW5pdCAgICAgICAgICAgIH0KK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoreyAgICAgICBDb3B5cmlnaHQgKGMpIDE5OTcsOTkgQm9ybGFuZCBDb3Jwb3JhdGlvbiAgICAgICB9Cit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KK3sqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfQorCit7IFVwZGF0ZWQgZm9yIHpsaWIgMS4yLnggYnkgQ29zbWluIFRydXRhIDxjb3NtaW50QGNzLnViYmNsdWoucm8+IH0KKwordW5pdCBaTGliOworCitpbnRlcmZhY2UKKwordXNlcyBTeXNVdGlscywgQ2xhc3NlczsKKwordHlwZQorICBUQWxsb2MgPSBmdW5jdGlvbiAoQXBwRGF0YTogUG9pbnRlcjsgSXRlbXMsIFNpemU6IEludGVnZXIpOiBQb2ludGVyOyBjZGVjbDsKKyAgVEZyZWUgPSBwcm9jZWR1cmUgKEFwcERhdGEsIEJsb2NrOiBQb2ludGVyKTsgY2RlY2w7CisKKyAgLy8gSW50ZXJuYWwgc3RydWN0dXJlLiAgSWdub3JlLgorICBUWlN0cmVhbVJlYyA9IHBhY2tlZCByZWNvcmQKKyAgICBuZXh0X2luOiBQQ2hhcjsgICAgICAgLy8gbmV4dCBpbnB1dCBieXRlCisgICAgYXZhaWxfaW46IEludGVnZXI7ICAgIC8vIG51bWJlciBvZiBieXRlcyBhdmFpbGFibGUgYXQgbmV4dF9pbgorICAgIHRvdGFsX2luOiBMb25naW50OyAgICAvLyB0b3RhbCBuYiBvZiBpbnB1dCBieXRlcyByZWFkIHNvIGZhcgorCisgICAgbmV4dF9vdXQ6IFBDaGFyOyAgICAgIC8vIG5leHQgb3V0cHV0IGJ5dGUgc2hvdWxkIGJlIHB1dCBoZXJlCisgICAgYXZhaWxfb3V0OiBJbnRlZ2VyOyAgIC8vIHJlbWFpbmluZyBmcmVlIHNwYWNlIGF0IG5leHRfb3V0CisgICAgdG90YWxfb3V0OiBMb25naW50OyAgIC8vIHRvdGFsIG5iIG9mIGJ5dGVzIG91dHB1dCBzbyBmYXIKKworICAgIG1zZzogUENoYXI7ICAgICAgICAgICAvLyBsYXN0IGVycm9yIG1lc3NhZ2UsIE5VTEwgaWYgbm8gZXJyb3IKKyAgICBpbnRlcm5hbDogUG9pbnRlcjsgICAgLy8gbm90IHZpc2libGUgYnkgYXBwbGljYXRpb25zCisKKyAgICB6YWxsb2M6IFRBbGxvYzsgICAgICAgLy8gdXNlZCB0byBhbGxvY2F0ZSB0aGUgaW50ZXJuYWwgc3RhdGUKKyAgICB6ZnJlZTogVEZyZWU7ICAgICAgICAgLy8gdXNlZCB0byBmcmVlIHRoZSBpbnRlcm5hbCBzdGF0ZQorICAgIEFwcERhdGE6IFBvaW50ZXI7ICAgICAvLyBwcml2YXRlIGRhdGEgb2JqZWN0IHBhc3NlZCB0byB6YWxsb2MgYW5kIHpmcmVlCisKKyAgICBkYXRhX3R5cGU6IEludGVnZXI7ICAgLy8gYmVzdCBndWVzcyBhYm91dCB0aGUgZGF0YSB0eXBlOiBhc2NpaSBvciBiaW5hcnkKKyAgICBhZGxlcjogTG9uZ2ludDsgICAgICAgLy8gYWRsZXIzMiB2YWx1ZSBvZiB0aGUgdW5jb21wcmVzc2VkIGRhdGEKKyAgICByZXNlcnZlZDogTG9uZ2ludDsgICAgLy8gcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UKKyAgZW5kOworCisgIC8vIEFic3RyYWN0IGFuY2VzdG9yIGNsYXNzCisgIFRDdXN0b21abGliU3RyZWFtID0gY2xhc3MoVFN0cmVhbSkKKyAgcHJpdmF0ZQorICAgIEZTdHJtOiBUU3RyZWFtOworICAgIEZTdHJtUG9zOiBJbnRlZ2VyOworICAgIEZPblByb2dyZXNzOiBUTm90aWZ5RXZlbnQ7CisgICAgRlpSZWM6IFRaU3RyZWFtUmVjOworICAgIEZCdWZmZXI6IGFycmF5IFtXb3JkXSBvZiBDaGFyOworICBwcm90ZWN0ZWQKKyAgICBwcm9jZWR1cmUgUHJvZ3Jlc3MoU2VuZGVyOiBUT2JqZWN0KTsgZHluYW1pYzsKKyAgICBwcm9wZXJ0eSBPblByb2dyZXNzOiBUTm90aWZ5RXZlbnQgcmVhZCBGT25Qcm9ncmVzcyB3cml0ZSBGT25Qcm9ncmVzczsKKyAgICBjb25zdHJ1Y3RvciBDcmVhdGUoU3RybTogVFN0cmVhbSk7CisgIGVuZDsKKworeyBUQ29tcHJlc3Npb25TdHJlYW0gY29tcHJlc3NlcyBkYXRhIG9uIHRoZSBmbHkgYXMgZGF0YSBpcyB3cml0dGVuIHRvIGl0LCBhbmQKKyAgc3RvcmVzIHRoZSBjb21wcmVzc2VkIGRhdGEgdG8gYW5vdGhlciBzdHJlYW0uCisKKyAgVENvbXByZXNzaW9uU3RyZWFtIGlzIHdyaXRlLW9ubHkgYW5kIHN0cmljdGx5IHNlcXVlbnRpYWwuIFJlYWRpbmcgZnJvbSB0aGUKKyAgc3RyZWFtIHdpbGwgcmFpc2UgYW4gZXhjZXB0aW9uLiBVc2luZyBTZWVrIHRvIG1vdmUgdGhlIHN0cmVhbSBwb2ludGVyCisgIHdpbGwgcmFpc2UgYW4gZXhjZXB0aW9uLgorCisgIE91dHB1dCBkYXRhIGlzIGNhY2hlZCBpbnRlcm5hbGx5LCB3cml0dGVuIHRvIHRoZSBvdXRwdXQgc3RyZWFtIG9ubHkgd2hlbgorICB0aGUgaW50ZXJuYWwgb3V0cHV0IGJ1ZmZlciBpcyBmdWxsLiAgQWxsIHBlbmRpbmcgb3V0cHV0IGRhdGEgaXMgZmx1c2hlZAorICB3aGVuIHRoZSBzdHJlYW0gaXMgZGVzdHJveWVkLgorCisgIFRoZSBQb3NpdGlvbiBwcm9wZXJ0eSByZXR1cm5zIHRoZSBudW1iZXIgb2YgdW5jb21wcmVzc2VkIGJ5dGVzIG9mCisgIGRhdGEgdGhhdCBoYXZlIGJlZW4gd3JpdHRlbiB0byB0aGUgc3RyZWFtIHNvIGZhci4KKworICBDb21wcmVzc2lvblJhdGUgcmV0dXJucyB0aGUgb24tdGhlLWZseSBwZXJjZW50YWdlIGJ5IHdoaWNoIHRoZSBvcmlnaW5hbAorICBkYXRhIGhhcyBiZWVuIGNvbXByZXNzZWQ6ICAoMSAtIChDb21wcmVzc2VkQnl0ZXMgLyBVbmNvbXByZXNzZWRCeXRlcykpICogMTAwCisgIElmIHJhdyBkYXRhIHNpemUgPSAxMDAgYW5kIGNvbXByZXNzZWQgZGF0YSBzaXplID0gMjUsIHRoZSBDb21wcmVzc2lvblJhdGUKKyAgaXMgNzUlCisKKyAgVGhlIE9uUHJvZ3Jlc3MgZXZlbnQgaXMgY2FsbGVkIGVhY2ggdGltZSB0aGUgb3V0cHV0IGJ1ZmZlciBpcyBmaWxsZWQgYW5kCisgIHdyaXR0ZW4gdG8gdGhlIG91dHB1dCBzdHJlYW0uICBUaGlzIGlzIHVzZWZ1bCBmb3IgdXBkYXRpbmcgYSBwcm9ncmVzcworICBpbmRpY2F0b3Igd2hlbiB5b3UgYXJlIHdyaXRpbmcgYSBsYXJnZSBjaHVuayBvZiBkYXRhIHRvIHRoZSBjb21wcmVzc2lvbgorICBzdHJlYW0gaW4gYSBzaW5nbGUgY2FsbC59CisKKworICBUQ29tcHJlc3Npb25MZXZlbCA9IChjbE5vbmUsIGNsRmFzdGVzdCwgY2xEZWZhdWx0LCBjbE1heCk7CisKKyAgVENvbXByZXNzaW9uU3RyZWFtID0gY2xhc3MoVEN1c3RvbVpsaWJTdHJlYW0pCisgIHByaXZhdGUKKyAgICBmdW5jdGlvbiBHZXRDb21wcmVzc2lvblJhdGU6IFNpbmdsZTsKKyAgcHVibGljCisgICAgY29uc3RydWN0b3IgQ3JlYXRlKENvbXByZXNzaW9uTGV2ZWw6IFRDb21wcmVzc2lvbkxldmVsOyBEZXN0OiBUU3RyZWFtKTsKKyAgICBkZXN0cnVjdG9yIERlc3Ryb3k7IG92ZXJyaWRlOworICAgIGZ1bmN0aW9uIFJlYWQodmFyIEJ1ZmZlcjsgQ291bnQ6IExvbmdpbnQpOiBMb25naW50OyBvdmVycmlkZTsKKyAgICBmdW5jdGlvbiBXcml0ZShjb25zdCBCdWZmZXI7IENvdW50OiBMb25naW50KTogTG9uZ2ludDsgb3ZlcnJpZGU7CisgICAgZnVuY3Rpb24gU2VlayhPZmZzZXQ6IExvbmdpbnQ7IE9yaWdpbjogV29yZCk6IExvbmdpbnQ7IG92ZXJyaWRlOworICAgIHByb3BlcnR5IENvbXByZXNzaW9uUmF0ZTogU2luZ2xlIHJlYWQgR2V0Q29tcHJlc3Npb25SYXRlOworICAgIHByb3BlcnR5IE9uUHJvZ3Jlc3M7CisgIGVuZDsKKworeyBURGVjb21wcmVzc2lvblN0cmVhbSBkZWNvbXByZXNzZXMgZGF0YSBvbiB0aGUgZmx5IGFzIGRhdGEgaXMgcmVhZCBmcm9tIGl0LgorCisgIENvbXByZXNzZWQgZGF0YSBjb21lcyBmcm9tIGEgc2VwYXJhdGUgc291cmNlIHN0cmVhbS4gIFREZWNvbXByZXNzaW9uU3RyZWFtCisgIGlzIHJlYWQtb25seSBhbmQgdW5pZGlyZWN0aW9uYWw7IHlvdSBjYW4gc2VlayBmb3J3YXJkIGluIHRoZSBzdHJlYW0sIGJ1dCBub3QKKyAgYmFja3dhcmRzLiAgVGhlIHNwZWNpYWwgY2FzZSBvZiBzZXR0aW5nIHRoZSBzdHJlYW0gcG9zaXRpb24gdG8gemVybyBpcworICBhbGxvd2VkLiAgU2Vla2luZyBmb3J3YXJkIGRlY29tcHJlc3NlcyBkYXRhIHVudGlsIHRoZSByZXF1ZXN0ZWQgcG9zaXRpb24gaW4KKyAgdGhlIHVuY29tcHJlc3NlZCBkYXRhIGhhcyBiZWVuIHJlYWNoZWQuICBTZWVraW5nIGJhY2t3YXJkcywgc2Vla2luZyByZWxhdGl2ZQorICB0byB0aGUgZW5kIG9mIHRoZSBzdHJlYW0sIHJlcXVlc3RpbmcgdGhlIHNpemUgb2YgdGhlIHN0cmVhbSwgYW5kIHdyaXRpbmcgdG8KKyAgdGhlIHN0cmVhbSB3aWxsIHJhaXNlIGFuIGV4Y2VwdGlvbi4KKworICBUaGUgUG9zaXRpb24gcHJvcGVydHkgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9mIHVuY29tcHJlc3NlZCBkYXRhIHRoYXQKKyAgaGF2ZSBiZWVuIHJlYWQgZnJvbSB0aGUgc3RyZWFtIHNvIGZhci4KKworICBUaGUgT25Qcm9ncmVzcyBldmVudCBpcyBjYWxsZWQgZWFjaCB0aW1lIHRoZSBpbnRlcm5hbCBpbnB1dCBidWZmZXIgb2YKKyAgY29tcHJlc3NlZCBkYXRhIGlzIGV4aGF1c3RlZCBhbmQgdGhlIG5leHQgYmxvY2sgaXMgcmVhZCBmcm9tIHRoZSBpbnB1dCBzdHJlYW0uCisgIFRoaXMgaXMgdXNlZnVsIGZvciB1cGRhdGluZyBhIHByb2dyZXNzIGluZGljYXRvciB3aGVuIHlvdSBhcmUgcmVhZGluZyBhCisgIGxhcmdlIGNodW5rIG9mIGRhdGEgZnJvbSB0aGUgZGVjb21wcmVzc2lvbiBzdHJlYW0gaW4gYSBzaW5nbGUgY2FsbC59CisKKyAgVERlY29tcHJlc3Npb25TdHJlYW0gPSBjbGFzcyhUQ3VzdG9tWmxpYlN0cmVhbSkKKyAgcHVibGljCisgICAgY29uc3RydWN0b3IgQ3JlYXRlKFNvdXJjZTogVFN0cmVhbSk7CisgICAgZGVzdHJ1Y3RvciBEZXN0cm95OyBvdmVycmlkZTsKKyAgICBmdW5jdGlvbiBSZWFkKHZhciBCdWZmZXI7IENvdW50OiBMb25naW50KTogTG9uZ2ludDsgb3ZlcnJpZGU7CisgICAgZnVuY3Rpb24gV3JpdGUoY29uc3QgQnVmZmVyOyBDb3VudDogTG9uZ2ludCk6IExvbmdpbnQ7IG92ZXJyaWRlOworICAgIGZ1bmN0aW9uIFNlZWsoT2Zmc2V0OiBMb25naW50OyBPcmlnaW46IFdvcmQpOiBMb25naW50OyBvdmVycmlkZTsKKyAgICBwcm9wZXJ0eSBPblByb2dyZXNzOworICBlbmQ7CisKKworCit7IENvbXByZXNzQnVmIGNvbXByZXNzZXMgZGF0YSwgYnVmZmVyIHRvIGJ1ZmZlciwgaW4gb25lIGNhbGwuCisgICBJbjogSW5CdWYgPSBwdHIgdG8gY29tcHJlc3NlZCBkYXRhCisgICAgICAgSW5CeXRlcyA9IG51bWJlciBvZiBieXRlcyBpbiBJbkJ1ZgorICBPdXQ6IE91dEJ1ZiA9IHB0ciB0byBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIGNvbnRhaW5pbmcgZGVjb21wcmVzc2VkIGRhdGEKKyAgICAgICBPdXRCeXRlcyA9IG51bWJlciBvZiBieXRlcyBpbiBPdXRCdWYgICB9Citwcm9jZWR1cmUgQ29tcHJlc3NCdWYoY29uc3QgSW5CdWY6IFBvaW50ZXI7IEluQnl0ZXM6IEludGVnZXI7CisgICAgICAgICAgICAgICAgICAgICAgb3V0IE91dEJ1ZjogUG9pbnRlcjsgb3V0IE91dEJ5dGVzOiBJbnRlZ2VyKTsKKworCit7IERlY29tcHJlc3NCdWYgZGVjb21wcmVzc2VzIGRhdGEsIGJ1ZmZlciB0byBidWZmZXIsIGluIG9uZSBjYWxsLgorICAgSW46IEluQnVmID0gcHRyIHRvIGNvbXByZXNzZWQgZGF0YQorICAgICAgIEluQnl0ZXMgPSBudW1iZXIgb2YgYnl0ZXMgaW4gSW5CdWYKKyAgICAgICBPdXRFc3RpbWF0ZSA9IHplcm8sIG9yIGVzdC4gc2l6ZSBvZiB0aGUgZGVjb21wcmVzc2VkIGRhdGEKKyAgT3V0OiBPdXRCdWYgPSBwdHIgdG8gbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBjb250YWluaW5nIGRlY29tcHJlc3NlZCBkYXRhCisgICAgICAgT3V0Qnl0ZXMgPSBudW1iZXIgb2YgYnl0ZXMgaW4gT3V0QnVmICAgfQorcHJvY2VkdXJlIERlY29tcHJlc3NCdWYoY29uc3QgSW5CdWY6IFBvaW50ZXI7IEluQnl0ZXM6IEludGVnZXI7CisgT3V0RXN0aW1hdGU6IEludGVnZXI7IG91dCBPdXRCdWY6IFBvaW50ZXI7IG91dCBPdXRCeXRlczogSW50ZWdlcik7CisKK3sgRGVjb21wcmVzc1RvVXNlckJ1ZiBkZWNvbXByZXNzZXMgZGF0YSwgYnVmZmVyIHRvIGJ1ZmZlciwgaW4gb25lIGNhbGwuCisgICBJbjogSW5CdWYgPSBwdHIgdG8gY29tcHJlc3NlZCBkYXRhCisgICAgICAgSW5CeXRlcyA9IG51bWJlciBvZiBieXRlcyBpbiBJbkJ1ZgorICBPdXQ6IE91dEJ1ZiA9IHB0ciB0byB1c2VyLWFsbG9jYXRlZCBidWZmZXIgdG8gY29udGFpbiBkZWNvbXByZXNzZWQgZGF0YQorICAgICAgIEJ1ZlNpemUgPSBudW1iZXIgb2YgYnl0ZXMgaW4gT3V0QnVmICAgfQorcHJvY2VkdXJlIERlY29tcHJlc3NUb1VzZXJCdWYoY29uc3QgSW5CdWY6IFBvaW50ZXI7IEluQnl0ZXM6IEludGVnZXI7CisgIGNvbnN0IE91dEJ1ZjogUG9pbnRlcjsgQnVmU2l6ZTogSW50ZWdlcik7CisKK2NvbnN0CisgIHpsaWJfdmVyc2lvbiA9ICcxLjIuMTInOworCit0eXBlCisgIEVabGliRXJyb3IgPSBjbGFzcyhFeGNlcHRpb24pOworICBFQ29tcHJlc3Npb25FcnJvciA9IGNsYXNzKEVabGliRXJyb3IpOworICBFRGVjb21wcmVzc2lvbkVycm9yID0gY2xhc3MoRVpsaWJFcnJvcik7CisKK2ltcGxlbWVudGF0aW9uCisKK3VzZXMgWkxpYkNvbnN0OworCitjb25zdAorICBaX05PX0ZMVVNIICAgICAgPSAwOworICBaX1BBUlRJQUxfRkxVU0ggPSAxOworICBaX1NZTkNfRkxVU0ggICAgPSAyOworICBaX0ZVTExfRkxVU0ggICAgPSAzOworICBaX0ZJTklTSCAgICAgICAgPSA0OworCisgIFpfT0sgICAgICAgICAgICA9IDA7CisgIFpfU1RSRUFNX0VORCAgICA9IDE7CisgIFpfTkVFRF9ESUNUICAgICA9IDI7CisgIFpfRVJSTk8gICAgICAgICA9ICgtMSk7CisgIFpfU1RSRUFNX0VSUk9SICA9ICgtMik7CisgIFpfREFUQV9FUlJPUiAgICA9ICgtMyk7CisgIFpfTUVNX0VSUk9SICAgICA9ICgtNCk7CisgIFpfQlVGX0VSUk9SICAgICA9ICgtNSk7CisgIFpfVkVSU0lPTl9FUlJPUiA9ICgtNik7CisKKyAgWl9OT19DT01QUkVTU0lPTiAgICAgICA9ICAgMDsKKyAgWl9CRVNUX1NQRUVEICAgICAgICAgICA9ICAgMTsKKyAgWl9CRVNUX0NPTVBSRVNTSU9OICAgICA9ICAgOTsKKyAgWl9ERUZBVUxUX0NPTVBSRVNTSU9OICA9ICgtMSk7CisKKyAgWl9GSUxURVJFRCAgICAgICAgICAgID0gMTsKKyAgWl9IVUZGTUFOX09OTFkgICAgICAgID0gMjsKKyAgWl9STEUgICAgICAgICAgICAgICAgID0gMzsKKyAgWl9ERUZBVUxUX1NUUkFURUdZICAgID0gMDsKKworICBaX0JJTkFSWSAgID0gMDsKKyAgWl9BU0NJSSAgICA9IDE7CisgIFpfVU5LTk9XTiAgPSAyOworCisgIFpfREVGTEFURUQgPSA4OworCisKK3skTCBhZGxlcjMyLm9ian0KK3skTCBjb21wcmVzcy5vYmp9Cit7JEwgY3JjMzIub2JqfQoreyRMIGRlZmxhdGUub2JqfQoreyRMIGluZmJhY2sub2JqfQoreyRMIGluZmZhc3Qub2JqfQoreyRMIGluZmxhdGUub2JqfQoreyRMIGluZnRyZWVzLm9ian0KK3skTCB0cmVlcy5vYmp9Cit7JEwgdW5jb21wci5vYmp9Cit7JEwgenV0aWwub2JqfQorCitwcm9jZWR1cmUgYWRsZXIzMjsgZXh0ZXJuYWw7Citwcm9jZWR1cmUgY29tcHJlc3NCb3VuZDsgZXh0ZXJuYWw7Citwcm9jZWR1cmUgY3JjMzI7IGV4dGVybmFsOworcHJvY2VkdXJlIGRlZmxhdGVJbml0Ml87IGV4dGVybmFsOworcHJvY2VkdXJlIGRlZmxhdGVQYXJhbXM7IGV4dGVybmFsOworCitmdW5jdGlvbiBfbWFsbG9jKFNpemU6IEludGVnZXIpOiBQb2ludGVyOyBjZGVjbDsKK2JlZ2luCisgIFJlc3VsdCA6PSBBbGxvY01lbShTaXplKTsKK2VuZDsKKworcHJvY2VkdXJlIF9mcmVlKEJsb2NrOiBQb2ludGVyKTsgY2RlY2w7CitiZWdpbgorICBGcmVlTWVtKEJsb2NrKTsKK2VuZDsKKworcHJvY2VkdXJlIF9tZW1zZXQoUDogUG9pbnRlcjsgQjogQnl0ZTsgY291bnQ6IEludGVnZXIpOyBjZGVjbDsKK2JlZ2luCisgIEZpbGxDaGFyKFBeLCBjb3VudCwgQik7CitlbmQ7CisKK3Byb2NlZHVyZSBfbWVtY3B5KGRlc3QsIHNvdXJjZTogUG9pbnRlcjsgY291bnQ6IEludGVnZXIpOyBjZGVjbDsKK2JlZ2luCisgIE1vdmUoc291cmNlXiwgZGVzdF4sIGNvdW50KTsKK2VuZDsKKworCisKKy8vIGRlZmxhdGUgY29tcHJlc3NlcyBkYXRhCitmdW5jdGlvbiBkZWZsYXRlSW5pdF8odmFyIHN0cm06IFRaU3RyZWFtUmVjOyBsZXZlbDogSW50ZWdlcjsgdmVyc2lvbjogUENoYXI7CisgIHJlY3NpemU6IEludGVnZXIpOiBJbnRlZ2VyOyBleHRlcm5hbDsKK2Z1bmN0aW9uIGRlZmxhdGUodmFyIHN0cm06IFRaU3RyZWFtUmVjOyBmbHVzaDogSW50ZWdlcik6IEludGVnZXI7IGV4dGVybmFsOworZnVuY3Rpb24gZGVmbGF0ZUVuZCh2YXIgc3RybTogVFpTdHJlYW1SZWMpOiBJbnRlZ2VyOyBleHRlcm5hbDsKKworLy8gaW5mbGF0ZSBkZWNvbXByZXNzZXMgZGF0YQorZnVuY3Rpb24gaW5mbGF0ZUluaXRfKHZhciBzdHJtOiBUWlN0cmVhbVJlYzsgdmVyc2lvbjogUENoYXI7CisgIHJlY3NpemU6IEludGVnZXIpOiBJbnRlZ2VyOyBleHRlcm5hbDsKK2Z1bmN0aW9uIGluZmxhdGUodmFyIHN0cm06IFRaU3RyZWFtUmVjOyBmbHVzaDogSW50ZWdlcik6IEludGVnZXI7IGV4dGVybmFsOworZnVuY3Rpb24gaW5mbGF0ZUVuZCh2YXIgc3RybTogVFpTdHJlYW1SZWMpOiBJbnRlZ2VyOyBleHRlcm5hbDsKK2Z1bmN0aW9uIGluZmxhdGVSZXNldCh2YXIgc3RybTogVFpTdHJlYW1SZWMpOiBJbnRlZ2VyOyBleHRlcm5hbDsKKworCitmdW5jdGlvbiB6bGliQWxsb2NNZW0oQXBwRGF0YTogUG9pbnRlcjsgSXRlbXMsIFNpemU6IEludGVnZXIpOiBQb2ludGVyOyBjZGVjbDsKK2JlZ2luCisvLyAgR2V0TWVtKFJlc3VsdCwgSXRlbXMqU2l6ZSk7CisgIFJlc3VsdCA6PSBBbGxvY01lbShJdGVtcyAqIFNpemUpOworZW5kOworCitwcm9jZWR1cmUgemxpYkZyZWVNZW0oQXBwRGF0YSwgQmxvY2s6IFBvaW50ZXIpOyBjZGVjbDsKK2JlZ2luCisgIEZyZWVNZW0oQmxvY2spOworZW5kOworCit7ZnVuY3Rpb24gemxpYkNoZWNrKGNvZGU6IEludGVnZXIpOiBJbnRlZ2VyOworYmVnaW4KKyAgUmVzdWx0IDo9IGNvZGU7CisgIGlmIGNvZGUgPCAwIHRoZW4KKyAgICByYWlzZSBFWmxpYkVycm9yLkNyZWF0ZSgnZXJyb3InKTsgICAgLy8hIQorZW5kO30KKworZnVuY3Rpb24gQ0NoZWNrKGNvZGU6IEludGVnZXIpOiBJbnRlZ2VyOworYmVnaW4KKyAgUmVzdWx0IDo9IGNvZGU7CisgIGlmIGNvZGUgPCAwIHRoZW4KKyAgICByYWlzZSBFQ29tcHJlc3Npb25FcnJvci5DcmVhdGUoJ2Vycm9yJyk7IC8vISEKK2VuZDsKKworZnVuY3Rpb24gRENoZWNrKGNvZGU6IEludGVnZXIpOiBJbnRlZ2VyOworYmVnaW4KKyAgUmVzdWx0IDo9IGNvZGU7CisgIGlmIGNvZGUgPCAwIHRoZW4KKyAgICByYWlzZSBFRGVjb21wcmVzc2lvbkVycm9yLkNyZWF0ZSgnZXJyb3InKTsgIC8vISEKK2VuZDsKKworcHJvY2VkdXJlIENvbXByZXNzQnVmKGNvbnN0IEluQnVmOiBQb2ludGVyOyBJbkJ5dGVzOiBJbnRlZ2VyOworICAgICAgICAgICAgICAgICAgICAgIG91dCBPdXRCdWY6IFBvaW50ZXI7IG91dCBPdXRCeXRlczogSW50ZWdlcik7Cit2YXIKKyAgc3RybTogVFpTdHJlYW1SZWM7CisgIFA6IFBvaW50ZXI7CitiZWdpbgorICBGaWxsQ2hhcihzdHJtLCBzaXplb2Yoc3RybSksIDApOworICBzdHJtLnphbGxvYyA6PSB6bGliQWxsb2NNZW07CisgIHN0cm0uemZyZWUgOj0gemxpYkZyZWVNZW07CisgIE91dEJ5dGVzIDo9ICgoSW5CeXRlcyArIChJbkJ5dGVzIGRpdiAxMCkgKyAxMikgKyAyNTUpIGFuZCBub3QgMjU1OworICBHZXRNZW0oT3V0QnVmLCBPdXRCeXRlcyk7CisgIHRyeQorICAgIHN0cm0ubmV4dF9pbiA6PSBJbkJ1ZjsKKyAgICBzdHJtLmF2YWlsX2luIDo9IEluQnl0ZXM7CisgICAgc3RybS5uZXh0X291dCA6PSBPdXRCdWY7CisgICAgc3RybS5hdmFpbF9vdXQgOj0gT3V0Qnl0ZXM7CisgICAgQ0NoZWNrKGRlZmxhdGVJbml0XyhzdHJtLCBaX0JFU1RfQ09NUFJFU1NJT04sIHpsaWJfdmVyc2lvbiwgc2l6ZW9mKHN0cm0pKSk7CisgICAgdHJ5CisgICAgICB3aGlsZSBDQ2hlY2soZGVmbGF0ZShzdHJtLCBaX0ZJTklTSCkpIDw+IFpfU1RSRUFNX0VORCBkbworICAgICAgYmVnaW4KKyAgICAgICAgUCA6PSBPdXRCdWY7CisgICAgICAgIEluYyhPdXRCeXRlcywgMjU2KTsKKyAgICAgICAgUmVhbGxvY01lbShPdXRCdWYsIE91dEJ5dGVzKTsKKyAgICAgICAgc3RybS5uZXh0X291dCA6PSBQQ2hhcihJbnRlZ2VyKE91dEJ1ZikgKyAoSW50ZWdlcihzdHJtLm5leHRfb3V0KSAtIEludGVnZXIoUCkpKTsKKyAgICAgICAgc3RybS5hdmFpbF9vdXQgOj0gMjU2OworICAgICAgZW5kOworICAgIGZpbmFsbHkKKyAgICAgIENDaGVjayhkZWZsYXRlRW5kKHN0cm0pKTsKKyAgICBlbmQ7CisgICAgUmVhbGxvY01lbShPdXRCdWYsIHN0cm0udG90YWxfb3V0KTsKKyAgICBPdXRCeXRlcyA6PSBzdHJtLnRvdGFsX291dDsKKyAgZXhjZXB0CisgICAgRnJlZU1lbShPdXRCdWYpOworICAgIHJhaXNlCisgIGVuZDsKK2VuZDsKKworCitwcm9jZWR1cmUgRGVjb21wcmVzc0J1Zihjb25zdCBJbkJ1ZjogUG9pbnRlcjsgSW5CeXRlczogSW50ZWdlcjsKKyAgT3V0RXN0aW1hdGU6IEludGVnZXI7IG91dCBPdXRCdWY6IFBvaW50ZXI7IG91dCBPdXRCeXRlczogSW50ZWdlcik7Cit2YXIKKyAgc3RybTogVFpTdHJlYW1SZWM7CisgIFA6IFBvaW50ZXI7CisgIEJ1ZkluYzogSW50ZWdlcjsKK2JlZ2luCisgIEZpbGxDaGFyKHN0cm0sIHNpemVvZihzdHJtKSwgMCk7CisgIHN0cm0uemFsbG9jIDo9IHpsaWJBbGxvY01lbTsKKyAgc3RybS56ZnJlZSA6PSB6bGliRnJlZU1lbTsKKyAgQnVmSW5jIDo9IChJbkJ5dGVzICsgMjU1KSBhbmQgbm90IDI1NTsKKyAgaWYgT3V0RXN0aW1hdGUgPSAwIHRoZW4KKyAgICBPdXRCeXRlcyA6PSBCdWZJbmMKKyAgZWxzZQorICAgIE91dEJ5dGVzIDo9IE91dEVzdGltYXRlOworICBHZXRNZW0oT3V0QnVmLCBPdXRCeXRlcyk7CisgIHRyeQorICAgIHN0cm0ubmV4dF9pbiA6PSBJbkJ1ZjsKKyAgICBzdHJtLmF2YWlsX2luIDo9IEluQnl0ZXM7CisgICAgc3RybS5uZXh0X291dCA6PSBPdXRCdWY7CisgICAgc3RybS5hdmFpbF9vdXQgOj0gT3V0Qnl0ZXM7CisgICAgRENoZWNrKGluZmxhdGVJbml0XyhzdHJtLCB6bGliX3ZlcnNpb24sIHNpemVvZihzdHJtKSkpOworICAgIHRyeQorICAgICAgd2hpbGUgRENoZWNrKGluZmxhdGUoc3RybSwgWl9OT19GTFVTSCkpIDw+IFpfU1RSRUFNX0VORCBkbworICAgICAgYmVnaW4KKyAgICAgICAgUCA6PSBPdXRCdWY7CisgICAgICAgIEluYyhPdXRCeXRlcywgQnVmSW5jKTsKKyAgICAgICAgUmVhbGxvY01lbShPdXRCdWYsIE91dEJ5dGVzKTsKKyAgICAgICAgc3RybS5uZXh0X291dCA6PSBQQ2hhcihJbnRlZ2VyKE91dEJ1ZikgKyAoSW50ZWdlcihzdHJtLm5leHRfb3V0KSAtIEludGVnZXIoUCkpKTsKKyAgICAgICAgc3RybS5hdmFpbF9vdXQgOj0gQnVmSW5jOworICAgICAgZW5kOworICAgIGZpbmFsbHkKKyAgICAgIERDaGVjayhpbmZsYXRlRW5kKHN0cm0pKTsKKyAgICBlbmQ7CisgICAgUmVhbGxvY01lbShPdXRCdWYsIHN0cm0udG90YWxfb3V0KTsKKyAgICBPdXRCeXRlcyA6PSBzdHJtLnRvdGFsX291dDsKKyAgZXhjZXB0CisgICAgRnJlZU1lbShPdXRCdWYpOworICAgIHJhaXNlCisgIGVuZDsKK2VuZDsKKworcHJvY2VkdXJlIERlY29tcHJlc3NUb1VzZXJCdWYoY29uc3QgSW5CdWY6IFBvaW50ZXI7IEluQnl0ZXM6IEludGVnZXI7CisgIGNvbnN0IE91dEJ1ZjogUG9pbnRlcjsgQnVmU2l6ZTogSW50ZWdlcik7Cit2YXIKKyAgc3RybTogVFpTdHJlYW1SZWM7CitiZWdpbgorICBGaWxsQ2hhcihzdHJtLCBzaXplb2Yoc3RybSksIDApOworICBzdHJtLnphbGxvYyA6PSB6bGliQWxsb2NNZW07CisgIHN0cm0uemZyZWUgOj0gemxpYkZyZWVNZW07CisgIHN0cm0ubmV4dF9pbiA6PSBJbkJ1ZjsKKyAgc3RybS5hdmFpbF9pbiA6PSBJbkJ5dGVzOworICBzdHJtLm5leHRfb3V0IDo9IE91dEJ1ZjsKKyAgc3RybS5hdmFpbF9vdXQgOj0gQnVmU2l6ZTsKKyAgRENoZWNrKGluZmxhdGVJbml0XyhzdHJtLCB6bGliX3ZlcnNpb24sIHNpemVvZihzdHJtKSkpOworICB0cnkKKyAgICBpZiBEQ2hlY2soaW5mbGF0ZShzdHJtLCBaX0ZJTklTSCkpIDw+IFpfU1RSRUFNX0VORCB0aGVuCisgICAgICByYWlzZSBFWmxpYkVycm9yLkNyZWF0ZVJlcyhAc1RhcmdldEJ1ZmZlclRvb1NtYWxsKTsKKyAgZmluYWxseQorICAgIERDaGVjayhpbmZsYXRlRW5kKHN0cm0pKTsKKyAgZW5kOworZW5kOworCisvLyBUQ3VzdG9tWmxpYlN0cmVhbQorCitjb25zdHJ1Y3RvciBUQ3VzdG9tWkxpYlN0cmVhbS5DcmVhdGUoU3RybTogVFN0cmVhbSk7CitiZWdpbgorICBpbmhlcml0ZWQgQ3JlYXRlOworICBGU3RybSA6PSBTdHJtOworICBGU3RybVBvcyA6PSBTdHJtLlBvc2l0aW9uOworICBGWlJlYy56YWxsb2MgOj0gemxpYkFsbG9jTWVtOworICBGWlJlYy56ZnJlZSA6PSB6bGliRnJlZU1lbTsKK2VuZDsKKworcHJvY2VkdXJlIFRDdXN0b21aTGliU3RyZWFtLlByb2dyZXNzKFNlbmRlcjogVE9iamVjdCk7CitiZWdpbgorICBpZiBBc3NpZ25lZChGT25Qcm9ncmVzcykgdGhlbiBGT25Qcm9ncmVzcyhTZW5kZXIpOworZW5kOworCisKKy8vIFRDb21wcmVzc2lvblN0cmVhbQorCitjb25zdHJ1Y3RvciBUQ29tcHJlc3Npb25TdHJlYW0uQ3JlYXRlKENvbXByZXNzaW9uTGV2ZWw6IFRDb21wcmVzc2lvbkxldmVsOworICBEZXN0OiBUU3RyZWFtKTsKK2NvbnN0CisgIExldmVsczogYXJyYXkgW1RDb21wcmVzc2lvbkxldmVsXSBvZiBTaG9ydEludCA9CisgICAgKFpfTk9fQ09NUFJFU1NJT04sIFpfQkVTVF9TUEVFRCwgWl9ERUZBVUxUX0NPTVBSRVNTSU9OLCBaX0JFU1RfQ09NUFJFU1NJT04pOworYmVnaW4KKyAgaW5oZXJpdGVkIENyZWF0ZShEZXN0KTsKKyAgRlpSZWMubmV4dF9vdXQgOj0gRkJ1ZmZlcjsKKyAgRlpSZWMuYXZhaWxfb3V0IDo9IHNpemVvZihGQnVmZmVyKTsKKyAgQ0NoZWNrKGRlZmxhdGVJbml0XyhGWlJlYywgTGV2ZWxzW0NvbXByZXNzaW9uTGV2ZWxdLCB6bGliX3ZlcnNpb24sIHNpemVvZihGWlJlYykpKTsKK2VuZDsKKworZGVzdHJ1Y3RvciBUQ29tcHJlc3Npb25TdHJlYW0uRGVzdHJveTsKK2JlZ2luCisgIEZaUmVjLm5leHRfaW4gOj0gbmlsOworICBGWlJlYy5hdmFpbF9pbiA6PSAwOworICB0cnkKKyAgICBpZiBGU3RybS5Qb3NpdGlvbiA8PiBGU3RybVBvcyB0aGVuIEZTdHJtLlBvc2l0aW9uIDo9IEZTdHJtUG9zOworICAgIHdoaWxlIChDQ2hlY2soZGVmbGF0ZShGWlJlYywgWl9GSU5JU0gpKSA8PiBaX1NUUkVBTV9FTkQpCisgICAgICBhbmQgKEZaUmVjLmF2YWlsX291dCA9IDApIGRvCisgICAgYmVnaW4KKyAgICAgIEZTdHJtLldyaXRlQnVmZmVyKEZCdWZmZXIsIHNpemVvZihGQnVmZmVyKSk7CisgICAgICBGWlJlYy5uZXh0X291dCA6PSBGQnVmZmVyOworICAgICAgRlpSZWMuYXZhaWxfb3V0IDo9IHNpemVvZihGQnVmZmVyKTsKKyAgICBlbmQ7CisgICAgaWYgRlpSZWMuYXZhaWxfb3V0IDwgc2l6ZW9mKEZCdWZmZXIpIHRoZW4KKyAgICAgIEZTdHJtLldyaXRlQnVmZmVyKEZCdWZmZXIsIHNpemVvZihGQnVmZmVyKSAtIEZaUmVjLmF2YWlsX291dCk7CisgIGZpbmFsbHkKKyAgICBkZWZsYXRlRW5kKEZaUmVjKTsKKyAgZW5kOworICBpbmhlcml0ZWQgRGVzdHJveTsKK2VuZDsKKworZnVuY3Rpb24gVENvbXByZXNzaW9uU3RyZWFtLlJlYWQodmFyIEJ1ZmZlcjsgQ291bnQ6IExvbmdpbnQpOiBMb25naW50OworYmVnaW4KKyAgcmFpc2UgRUNvbXByZXNzaW9uRXJyb3IuQ3JlYXRlUmVzKEBzSW52YWxpZFN0cmVhbU9wKTsKK2VuZDsKKworZnVuY3Rpb24gVENvbXByZXNzaW9uU3RyZWFtLldyaXRlKGNvbnN0IEJ1ZmZlcjsgQ291bnQ6IExvbmdpbnQpOiBMb25naW50OworYmVnaW4KKyAgRlpSZWMubmV4dF9pbiA6PSBAQnVmZmVyOworICBGWlJlYy5hdmFpbF9pbiA6PSBDb3VudDsKKyAgaWYgRlN0cm0uUG9zaXRpb24gPD4gRlN0cm1Qb3MgdGhlbiBGU3RybS5Qb3NpdGlvbiA6PSBGU3RybVBvczsKKyAgd2hpbGUgKEZaUmVjLmF2YWlsX2luID4gMCkgZG8KKyAgYmVnaW4KKyAgICBDQ2hlY2soZGVmbGF0ZShGWlJlYywgMCkpOworICAgIGlmIEZaUmVjLmF2YWlsX291dCA9IDAgdGhlbgorICAgIGJlZ2luCisgICAgICBGU3RybS5Xcml0ZUJ1ZmZlcihGQnVmZmVyLCBzaXplb2YoRkJ1ZmZlcikpOworICAgICAgRlpSZWMubmV4dF9vdXQgOj0gRkJ1ZmZlcjsKKyAgICAgIEZaUmVjLmF2YWlsX291dCA6PSBzaXplb2YoRkJ1ZmZlcik7CisgICAgICBGU3RybVBvcyA6PSBGU3RybS5Qb3NpdGlvbjsKKyAgICAgIFByb2dyZXNzKFNlbGYpOworICAgIGVuZDsKKyAgZW5kOworICBSZXN1bHQgOj0gQ291bnQ7CitlbmQ7CisKK2Z1bmN0aW9uIFRDb21wcmVzc2lvblN0cmVhbS5TZWVrKE9mZnNldDogTG9uZ2ludDsgT3JpZ2luOiBXb3JkKTogTG9uZ2ludDsKK2JlZ2luCisgIGlmIChPZmZzZXQgPSAwKSBhbmQgKE9yaWdpbiA9IHNvRnJvbUN1cnJlbnQpIHRoZW4KKyAgICBSZXN1bHQgOj0gRlpSZWMudG90YWxfaW4KKyAgZWxzZQorICAgIHJhaXNlIEVDb21wcmVzc2lvbkVycm9yLkNyZWF0ZVJlcyhAc0ludmFsaWRTdHJlYW1PcCk7CitlbmQ7CisKK2Z1bmN0aW9uIFRDb21wcmVzc2lvblN0cmVhbS5HZXRDb21wcmVzc2lvblJhdGU6IFNpbmdsZTsKK2JlZ2luCisgIGlmIEZaUmVjLnRvdGFsX2luID0gMCB0aGVuCisgICAgUmVzdWx0IDo9IDAKKyAgZWxzZQorICAgIFJlc3VsdCA6PSAoMS4wIC0gKEZaUmVjLnRvdGFsX291dCAvIEZaUmVjLnRvdGFsX2luKSkgKiAxMDAuMDsKK2VuZDsKKworCisvLyBURGVjb21wcmVzc2lvblN0cmVhbQorCitjb25zdHJ1Y3RvciBURGVjb21wcmVzc2lvblN0cmVhbS5DcmVhdGUoU291cmNlOiBUU3RyZWFtKTsKK2JlZ2luCisgIGluaGVyaXRlZCBDcmVhdGUoU291cmNlKTsKKyAgRlpSZWMubmV4dF9pbiA6PSBGQnVmZmVyOworICBGWlJlYy5hdmFpbF9pbiA6PSAwOworICBEQ2hlY2soaW5mbGF0ZUluaXRfKEZaUmVjLCB6bGliX3ZlcnNpb24sIHNpemVvZihGWlJlYykpKTsKK2VuZDsKKworZGVzdHJ1Y3RvciBURGVjb21wcmVzc2lvblN0cmVhbS5EZXN0cm95OworYmVnaW4KKyAgRlN0cm0uU2VlaygtRlpSZWMuYXZhaWxfaW4sIDEpOworICBpbmZsYXRlRW5kKEZaUmVjKTsKKyAgaW5oZXJpdGVkIERlc3Ryb3k7CitlbmQ7CisKK2Z1bmN0aW9uIFREZWNvbXByZXNzaW9uU3RyZWFtLlJlYWQodmFyIEJ1ZmZlcjsgQ291bnQ6IExvbmdpbnQpOiBMb25naW50OworYmVnaW4KKyAgRlpSZWMubmV4dF9vdXQgOj0gQEJ1ZmZlcjsKKyAgRlpSZWMuYXZhaWxfb3V0IDo9IENvdW50OworICBpZiBGU3RybS5Qb3NpdGlvbiA8PiBGU3RybVBvcyB0aGVuIEZTdHJtLlBvc2l0aW9uIDo9IEZTdHJtUG9zOworICB3aGlsZSAoRlpSZWMuYXZhaWxfb3V0ID4gMCkgZG8KKyAgYmVnaW4KKyAgICBpZiBGWlJlYy5hdmFpbF9pbiA9IDAgdGhlbgorICAgIGJlZ2luCisgICAgICBGWlJlYy5hdmFpbF9pbiA6PSBGU3RybS5SZWFkKEZCdWZmZXIsIHNpemVvZihGQnVmZmVyKSk7CisgICAgICBpZiBGWlJlYy5hdmFpbF9pbiA9IDAgdGhlbgorICAgICAgYmVnaW4KKyAgICAgICAgUmVzdWx0IDo9IENvdW50IC0gRlpSZWMuYXZhaWxfb3V0OworICAgICAgICBFeGl0OworICAgICAgZW5kOworICAgICAgRlpSZWMubmV4dF9pbiA6PSBGQnVmZmVyOworICAgICAgRlN0cm1Qb3MgOj0gRlN0cm0uUG9zaXRpb247CisgICAgICBQcm9ncmVzcyhTZWxmKTsKKyAgICBlbmQ7CisgICAgQ0NoZWNrKGluZmxhdGUoRlpSZWMsIDApKTsKKyAgZW5kOworICBSZXN1bHQgOj0gQ291bnQ7CitlbmQ7CisKK2Z1bmN0aW9uIFREZWNvbXByZXNzaW9uU3RyZWFtLldyaXRlKGNvbnN0IEJ1ZmZlcjsgQ291bnQ6IExvbmdpbnQpOiBMb25naW50OworYmVnaW4KKyAgcmFpc2UgRURlY29tcHJlc3Npb25FcnJvci5DcmVhdGVSZXMoQHNJbnZhbGlkU3RyZWFtT3ApOworZW5kOworCitmdW5jdGlvbiBURGVjb21wcmVzc2lvblN0cmVhbS5TZWVrKE9mZnNldDogTG9uZ2ludDsgT3JpZ2luOiBXb3JkKTogTG9uZ2ludDsKK3ZhcgorICBJOiBJbnRlZ2VyOworICBCdWY6IGFycmF5IFswLi40MDk1XSBvZiBDaGFyOworYmVnaW4KKyAgaWYgKE9mZnNldCA9IDApIGFuZCAoT3JpZ2luID0gc29Gcm9tQmVnaW5uaW5nKSB0aGVuCisgIGJlZ2luCisgICAgRENoZWNrKGluZmxhdGVSZXNldChGWlJlYykpOworICAgIEZaUmVjLm5leHRfaW4gOj0gRkJ1ZmZlcjsKKyAgICBGWlJlYy5hdmFpbF9pbiA6PSAwOworICAgIEZTdHJtLlBvc2l0aW9uIDo9IDA7CisgICAgRlN0cm1Qb3MgOj0gMDsKKyAgZW5kCisgIGVsc2UgaWYgKCAoT2Zmc2V0ID49IDApIGFuZCAoT3JpZ2luID0gc29Gcm9tQ3VycmVudCkpIG9yCisgICAgICAgICAgKCAoKE9mZnNldCAtIEZaUmVjLnRvdGFsX291dCkgPiAwKSBhbmQgKE9yaWdpbiA9IHNvRnJvbUJlZ2lubmluZykpIHRoZW4KKyAgYmVnaW4KKyAgICBpZiBPcmlnaW4gPSBzb0Zyb21CZWdpbm5pbmcgdGhlbiBEZWMoT2Zmc2V0LCBGWlJlYy50b3RhbF9vdXQpOworICAgIGlmIE9mZnNldCA+IDAgdGhlbgorICAgIGJlZ2luCisgICAgICBmb3IgSSA6PSAxIHRvIE9mZnNldCBkaXYgc2l6ZW9mKEJ1ZikgZG8KKyAgICAgICAgUmVhZEJ1ZmZlcihCdWYsIHNpemVvZihCdWYpKTsKKyAgICAgIFJlYWRCdWZmZXIoQnVmLCBPZmZzZXQgbW9kIHNpemVvZihCdWYpKTsKKyAgICBlbmQ7CisgIGVuZAorICBlbHNlCisgICAgcmFpc2UgRURlY29tcHJlc3Npb25FcnJvci5DcmVhdGVSZXMoQHNJbnZhbGlkU3RyZWFtT3ApOworICBSZXN1bHQgOj0gRlpSZWMudG90YWxfb3V0OworZW5kOworCisKK2VuZC4KZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL2RlbHBoaS9aTGliQ29uc3QucGFzIGIvc3JjL2NvbnRyaWIvZGVscGhpL1pMaWJDb25zdC5wYXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RmZTEzNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb250cmliL2RlbHBoaS9aTGliQ29uc3QucGFzCkBAIC0wLDAgKzEsMTEgQEAKK3VuaXQgWkxpYkNvbnN0OworCitpbnRlcmZhY2UKKworcmVzb3VyY2VzdHJpbmcKKyAgc1RhcmdldEJ1ZmZlclRvb1NtYWxsID0gJ1pMaWIgZXJyb3I6IHRhcmdldCBidWZmZXIgbWF5IGJlIHRvbyBzbWFsbCc7CisgIHNJbnZhbGlkU3RyZWFtT3AgPSAnSW52YWxpZCBzdHJlYW0gb3BlcmF0aW9uJzsKKworaW1wbGVtZW50YXRpb24KKworZW5kLgpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvZGVscGhpL3JlYWRtZS50eHQgYi9zcmMvY29udHJpYi9kZWxwaGkvcmVhZG1lLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGM5YThiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbnRyaWIvZGVscGhpL3JlYWRtZS50eHQKQEAgLTAsMCArMSw3NiBAQAorCitPdmVydmlldworPT09PT09PT0KKworVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgYW4gdXBkYXRlIHRvIHRoZSBaTGliIGludGVyZmFjZSB1bml0LAorZGlzdHJpYnV0ZWQgYnkgQm9ybGFuZCBhcyBhIERlbHBoaSBzdXBwbGVtZW50YWwgY29tcG9uZW50LgorCitUaGUgb3JpZ2luYWwgWkxpYiB1bml0IGlzIENvcHlyaWdodCAoYykgMTk5Nyw5OSBCb3JsYW5kIENvcnAuLAorYW5kIGlzIGJhc2VkIG9uIHpsaWIgdmVyc2lvbiAxLjAuNC4gIFRoZXJlIGFyZSBhIHNlcmllcyBvZiBidWdzCithbmQgc2VjdXJpdHkgcHJvYmxlbXMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgb2xkIHpsaWIgdmVyc2lvbiwgYW5kCit3ZSByZWNvbW1lbmQgdGhlIHVzZXJzIHRvIHVwZGF0ZSB0aGVpciBaTGliIHVuaXQuCisKKworU3VtbWFyeSBvZiBtb2RpZmljYXRpb25zCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworLSBJbXByb3ZlZCBtYWtlZmlsZSwgYWRhcHRlZCB0byB6bGliIHZlcnNpb24gMS4yLjEuCisKKy0gU29tZSBmaWVsZCB0eXBlcyBmcm9tIFRaU3RyZWFtUmVjIGFyZSBjaGFuZ2VkIGZyb20gSW50ZWdlciB0bworICBMb25naW50LCBmb3IgY29uc2lzdGVuY3kgd2l0aCB0aGUgemxpYi5oIGhlYWRlciwgYW5kIGZvciA2NC1iaXQKKyAgcmVhZGluZXNzLgorCistIFRoZSB6bGliX3ZlcnNpb24gY29uc3RhbnQgaXMgdXBkYXRlZC4KKworLSBUaGUgbmV3IFpfUkxFIHN0cmF0ZWd5IGhhcyBpdHMgY29ycmVzcG9uZGluZyBzeW1ib2xpYyBjb25zdGFudC4KKworLSBUaGUgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIGZ1bmN0aW9ucyBhbmQgZnVuY3Rpb24gdHlwZXMKKyAgKFRBbGxvYywgVEZyZWUsIHpsaWJBbGxvY01lbSBhbmQgemxpYkZyZWVNZW0pIGFyZSBub3cgY2RlY2wsCisgIGFuZCBfbWFsbG9jIGFuZCBfZnJlZSBhcmUgYWRkZWQgYXMgQyBSVEwgc3R1YnMuICBBcyBhIHJlc3VsdCwKKyAgdGhlIG9yaWdpbmFsIEMgc291cmNlcyBvZiB6bGliIGNhbiBiZSBjb21waWxlZCBvdXQgb2YgdGhlIGJveCwKKyAgYW5kIGxpbmtlZCB0byB0aGUgWkxpYiB1bml0LgorCisKK1N1Z2dlc3Rpb25zIGZvciBpbXByb3ZlbWVudHMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQ3VycmVudGx5LCB0aGUgWkxpYiB1bml0IHByb3ZpZGVzIG9ubHkgYSBsaW1pdGVkIHdyYXBwZXIgYXJvdW5kCit0aGUgemxpYiBsaWJyYXJ5LCBhbmQgbXVjaCBvZiB0aGUgb3JpZ2luYWwgemxpYiBmdW5jdGlvbmFsaXR5IGlzCittaXNzaW5nLiAgSGFuZGxpbmcgY29tcHJlc3NlZCBmaWxlIGZvcm1hdHMgbGlrZSBaSVAvR1pJUCBvciBQTkcKK2Nhbm5vdCBiZSBpbXBsZW1lbnRlZCB3aXRob3V0IGhhdmluZyB0aGlzIGZ1bmN0aW9uYWxpdHkuCitBcHBsaWNhdGlvbnMgdGhhdCBoYW5kbGUgdGhlc2UgZm9ybWF0cyBhcmUgZWl0aGVyIHVzaW5nIHRoZWlyIG93biwKK2R1cGxpY2F0ZWQgY29kZSwgb3Igbm90IHVzaW5nIHRoZSBaTGliIHVuaXQgYXQgYWxsLgorCitIZXJlIGFyZSBhIGZldyBzdWdnZXN0aW9uczoKKworLSBDaGVja3N1bSBjbGFzcyB3cmFwcGVycyBhcm91bmQgYWRsZXIzMigpIGFuZCBjcmMzMigpLCBzaW1pbGFyCisgIHRvIHRoZSBKYXZhIGNsYXNzZXMgdGhhdCBpbXBsZW1lbnQgdGhlIGphdmEudXRpbC56aXAuQ2hlY2tzdW0KKyAgaW50ZXJmYWNlLgorCistIFRoZSBhYmlsaXR5IHRvIHJlYWQgYW5kIHdyaXRlIHJhdyBkZWZsYXRlIHN0cmVhbXMsIHdpdGhvdXQgdGhlCisgIHpsaWIgc3RyZWFtIGhlYWRlciBhbmQgdHJhaWxlci4gIFJhdyBkZWZsYXRlIHN0cmVhbXMgYXJlIHVzZWQKKyAgaW4gdGhlIFpJUCBmaWxlIGZvcm1hdC4KKworLSBUaGUgYWJpbGl0eSB0byByZWFkIGFuZCB3cml0ZSBnemlwIHN0cmVhbXMsIHVzZWQgaW4gdGhlIEdaSVAKKyAgZmlsZSBmb3JtYXQsIGFuZCBub3JtYWxseSBwcm9kdWNlZCBieSB0aGUgZ3ppcCBwcm9ncmFtLgorCistIFRoZSBhYmlsaXR5IHRvIHNlbGVjdCBhIGRpZmZlcmVudCBjb21wcmVzc2lvbiBzdHJhdGVneSwgdXNlZnVsCisgIHRvIFBORyBhbmQgTU5HIGltYWdlIGNvbXByZXNzaW9uLCBhbmQgdG8gbXVsdGltZWRpYSBjb21wcmVzc2lvbgorICBpbiBnZW5lcmFsLiAgQmVzaWRlcyB0aGUgY29tcHJlc3Npb24gbGV2ZWwKKworICAgIFRDb21wcmVzc2lvbkxldmVsID0gKGNsTm9uZSwgY2xGYXN0ZXN0LCBjbERlZmF1bHQsIGNsTWF4KTsKKworICB3aGljaCwgaW4gZmFjdCwgY291bGQgaGF2ZSB1c2VkIHRoZSAneicgcHJlZml4IGFuZCBhdm9pZGVkCisgIFRDb2xvci1saWtlIHN5bWJvbHMKKworICAgIFRDb21wcmVzc2lvbkxldmVsID0gKHpjTm9uZSwgemNGYXN0ZXN0LCB6Y0RlZmF1bHQsIHpjTWF4KTsKKworICB0aGVyZSBjb3VsZCBiZSBhIGNvbXByZXNzaW9uIHN0cmF0ZWd5CisKKyAgICBUQ29tcHJlc3Npb25TdHJhdGVneSA9ICh6c0RlZmF1bHQsIHpzRmlsdGVyZWQsIHpzSHVmZm1hbk9ubHksIHpzUmxlKTsKKworLSBaSVAgYW5kIEdaSVAgc3RyZWFtIGhhbmRsaW5nIHZpYSBUU3RyZWFtcy4KKworCistLQorQ29zbWluIFRydXRhIDxjb3NtaW50QGNzLnViYmNsdWoucm8+CmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi9kZWxwaGkvemxpYmQzMi5tYWsgYi9zcmMvY29udHJpYi9kZWxwaGkvemxpYmQzMi5tYWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiMDBiNwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb250cmliL2RlbHBoaS96bGliZDMyLm1hawpAQCAtMCwwICsxLDk5IEBACisjIE1ha2VmaWxlIGZvciB6bGliCisjIEZvciB1c2Ugd2l0aCBEZWxwaGkgYW5kIEMrKyBCdWlsZGVyIHVuZGVyIFdpbjMyCisjIFVwZGF0ZWQgZm9yIHpsaWIgMS4yLnggYnkgQ29zbWluIFRydXRhCisKKyMgLS0tLS0tLS0tLS0tIEJvcmxhbmQgQysrIC0tLS0tLS0tLS0tLQorCisjIFRoaXMgcHJvamVjdCB1c2VzIHRoZSBEZWxwaGkgKGZhc3RjYWxsL3JlZ2lzdGVyKSBjYWxsaW5nIGNvbnZlbnRpb246CitMT0MgPSAtRFpFWFBPUlQ9X19mYXN0Y2FsbCAtRFpFWFBPUlRWQT1fX2NkZWNsCisKK0NDID0gYmNjMzIKK0xEID0gYmNjMzIKK0FSID0gdGxpYgorIyBkbyBub3QgdXNlICItcHIiIGluIENGTEFHUworQ0ZMQUdTID0gLWEgLWQgLWstIC1PMiAkKExPQykKK0xERkxBR1MgPQorCisKKyMgdmFyaWFibGVzCitaTElCX0xJQiA9IHpsaWIubGliCisKK09CSjEgPSBhZGxlcjMyLm9iaiBjb21wcmVzcy5vYmogY3JjMzIub2JqIGRlZmxhdGUub2JqIGd6Y2xvc2Uub2JqIGd6bGliLm9iaiBnenJlYWQub2JqCitPQkoyID0gZ3p3cml0ZS5vYmogaW5mYmFjay5vYmogaW5mZmFzdC5vYmogaW5mbGF0ZS5vYmogaW5mdHJlZXMub2JqIHRyZWVzLm9iaiB1bmNvbXByLm9iaiB6dXRpbC5vYmoKK09CSlAxID0gK2FkbGVyMzIub2JqK2NvbXByZXNzLm9iaitjcmMzMi5vYmorZGVmbGF0ZS5vYmorZ3pjbG9zZS5vYmorZ3psaWIub2JqK2d6cmVhZC5vYmoKK09CSlAyID0gK2d6d3JpdGUub2JqK2luZmJhY2sub2JqK2luZmZhc3Qub2JqK2luZmxhdGUub2JqK2luZnRyZWVzLm9iait0cmVlcy5vYmordW5jb21wci5vYmorenV0aWwub2JqCisKKworIyB0YXJnZXRzCithbGw6ICQoWkxJQl9MSUIpIGV4YW1wbGUuZXhlIG1pbmlnemlwLmV4ZQorCisuYy5vYmo6CisJJChDQykgLWMgJChDRkxBR1MpICQqLmMKKworYWRsZXIzMi5vYmo6IGFkbGVyMzIuYyB6bGliLmggemNvbmYuaAorCitjb21wcmVzcy5vYmo6IGNvbXByZXNzLmMgemxpYi5oIHpjb25mLmgKKworY3JjMzIub2JqOiBjcmMzMi5jIHpsaWIuaCB6Y29uZi5oIGNyYzMyLmgKKworZGVmbGF0ZS5vYmo6IGRlZmxhdGUuYyBkZWZsYXRlLmggenV0aWwuaCB6bGliLmggemNvbmYuaAorCitnemNsb3NlLm9iajogZ3pjbG9zZS5jIHpsaWIuaCB6Y29uZi5oIGd6Z3V0cy5oCisKK2d6bGliLm9iajogZ3psaWIuYyB6bGliLmggemNvbmYuaCBnemd1dHMuaAorCitnenJlYWQub2JqOiBnenJlYWQuYyB6bGliLmggemNvbmYuaCBnemd1dHMuaAorCitnendyaXRlLm9iajogZ3p3cml0ZS5jIHpsaWIuaCB6Y29uZi5oIGd6Z3V0cy5oCisKK2luZmJhY2sub2JqOiBpbmZiYWNrLmMgenV0aWwuaCB6bGliLmggemNvbmYuaCBpbmZ0cmVlcy5oIGluZmxhdGUuaCBcCisgaW5mZmFzdC5oIGluZmZpeGVkLmgKKworaW5mZmFzdC5vYmo6IGluZmZhc3QuYyB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oIGluZnRyZWVzLmggaW5mbGF0ZS5oIFwKKyBpbmZmYXN0LmgKKworaW5mbGF0ZS5vYmo6IGluZmxhdGUuYyB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oIGluZnRyZWVzLmggaW5mbGF0ZS5oIFwKKyBpbmZmYXN0LmggaW5mZml4ZWQuaAorCitpbmZ0cmVlcy5vYmo6IGluZnRyZWVzLmMgenV0aWwuaCB6bGliLmggemNvbmYuaCBpbmZ0cmVlcy5oCisKK3RyZWVzLm9iajogdHJlZXMuYyB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oIGRlZmxhdGUuaCB0cmVlcy5oCisKK3VuY29tcHIub2JqOiB1bmNvbXByLmMgemxpYi5oIHpjb25mLmgKKworenV0aWwub2JqOiB6dXRpbC5jIHp1dGlsLmggemxpYi5oIHpjb25mLmgKKworZXhhbXBsZS5vYmo6IHRlc3QvZXhhbXBsZS5jIHpsaWIuaCB6Y29uZi5oCisKK21pbmlnemlwLm9iajogdGVzdC9taW5pZ3ppcC5jIHpsaWIuaCB6Y29uZi5oCisKKworIyBGb3IgdGhlIHNha2Ugb2YgdGhlIG9sZCBCb3JsYW5kIG1ha2UsCisjIHRoZSBjb21tYW5kIGxpbmUgaXMgY3V0IHRvIGZpdCBpbiB0aGUgTVMtRE9TIDEyOCBieXRlIGxpbWl0OgorJChaTElCX0xJQik6ICQoT0JKMSkgJChPQkoyKQorCS1kZWwgJChaTElCX0xJQikKKwkkKEFSKSAkKFpMSUJfTElCKSAkKE9CSlAxKQorCSQoQVIpICQoWkxJQl9MSUIpICQoT0JKUDIpCisKKworIyB0ZXN0aW5nCit0ZXN0OiBleGFtcGxlLmV4ZSBtaW5pZ3ppcC5leGUKKwlleGFtcGxlCisJZWNobyBoZWxsbyB3b3JsZCB8IG1pbmlnemlwIHwgbWluaWd6aXAgLWQKKworZXhhbXBsZS5leGU6IGV4YW1wbGUub2JqICQoWkxJQl9MSUIpCisJJChMRCkgJChMREZMQUdTKSBleGFtcGxlLm9iaiAkKFpMSUJfTElCKQorCittaW5pZ3ppcC5leGU6IG1pbmlnemlwLm9iaiAkKFpMSUJfTElCKQorCSQoTEQpICQoTERGTEFHUykgbWluaWd6aXAub2JqICQoWkxJQl9MSUIpCisKKworIyBjbGVhbnVwCitjbGVhbjoKKwktZGVsICoub2JqCisJLWRlbCAqLmV4ZQorCS1kZWwgKi5saWIKKwktZGVsICoudGRzCisJLWRlbCB6bGliLmJhaworCS1kZWwgZm9vLmd6CisKZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL2RvdHpsaWIvRG90WkxpYi5idWlsZCBiL3NyYy9jb250cmliL2RvdHpsaWIvRG90WkxpYi5idWlsZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjkwZDZiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbnRyaWIvZG90emxpYi9Eb3RaTGliLmJ1aWxkCkBAIC0wLDAgKzEsMzMgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiA/Pg0KKzxwcm9qZWN0IG5hbWU9IkRvdFpMaWIiIGRlZmF1bHQ9ImJ1aWxkIiBiYXNlZGlyPSIuL0RvdFpMaWIiPg0KKwk8ZGVzY3JpcHRpb24+QSAuTmV0IHdyYXBwZXIgbGlicmFyeSBhcm91bmQgWkxpYjEuZGxsPC9kZXNjcmlwdGlvbj4NCisNCisJPHByb3BlcnR5IG5hbWU9Im51bml0LmxvY2F0aW9uIiB2YWx1ZT0iYzovcHJvZ3JhbSBmaWxlcy9OVW5pdCBWMi4xL2JpbiIgLz4NCisJPHByb3BlcnR5IG5hbWU9ImJ1aWxkLnJvb3QiIHZhbHVlPSJiaW4iIC8+DQorDQorCTxwcm9wZXJ0eSBuYW1lPSJkZWJ1ZyIgdmFsdWU9InRydWUiIC8+DQorCTxwcm9wZXJ0eSBuYW1lPSJudW5pdCIgdmFsdWU9InRydWUiIC8+DQorDQorCTxwcm9wZXJ0eSBuYW1lPSJidWlsZC5mb2xkZXIiIHZhbHVlPSIke2J1aWxkLnJvb3R9L2RlYnVnLyIgaWY9IiR7ZGVidWd9IiAvPg0KKwk8cHJvcGVydHkgbmFtZT0iYnVpbGQuZm9sZGVyIiB2YWx1ZT0iJHtidWlsZC5yb290fS9yZWxlYXNlLyIgdW5sZXNzPSIke2RlYnVnfSIgLz4NCisNCisJPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVzY3JpcHRpb249IlJlbW92ZSBhbGwgZ2VuZXJhdGVkIGZpbGVzIj4NCisJCTxkZWxldGUgZGlyPSIke2J1aWxkLnJvb3R9IiBmYWlsb25lcnJvcj0iZmFsc2UiIC8+DQorCTwvdGFyZ2V0Pg0KKw0KKwk8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXNjcmlwdGlvbj0iY29tcGlsZXMgdGhlIHNvdXJjZSBjb2RlIj4NCisNCisJCTxta2RpciBkaXI9IiR7YnVpbGQuZm9sZGVyfSIgLz4NCisJCTxjc2MgdGFyZ2V0PSJsaWJyYXJ5IiBvdXRwdXQ9IiR7YnVpbGQuZm9sZGVyfURvdFpMaWIuZGxsIiBkZWJ1Zz0iJHtkZWJ1Z30iPg0KKwkJCTxyZWZlcmVuY2VzIGJhc2VkaXI9IiR7bnVuaXQubG9jYXRpb259Ij4NCisJCQkJPGluY2x1ZGVzIGlmPSIke251bml0fSIgbmFtZT0ibnVuaXQuZnJhbWV3b3JrLmRsbCIgLz4NCisJCQk8L3JlZmVyZW5jZXM+DQorCQkJPHNvdXJjZXM+DQorCQkJCTxpbmNsdWRlcyBuYW1lPSIqLmNzIiAvPg0KKwkJCQk8ZXhjbHVkZXMgbmFtZT0iVW5pdFRlc3RzLmNzIiB1bmxlc3M9IiR7bnVuaXR9IiAvPg0KKwkJCTwvc291cmNlcz4NCisJCQk8YXJnIHZhbHVlPSIvZDpudW5pdCIgaWY9IiR7bnVuaXR9IiAvPg0KKwkJPC9jc2M+DQorCTwvdGFyZ2V0Pg0KKw0KKzwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi9kb3R6bGliL0RvdFpMaWIuY2htIGIvc3JjL2NvbnRyaWIvZG90emxpYi9Eb3RaTGliLmNobQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjE0YTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbnRyaWIvZG90emxpYi9Eb3RaTGliLmNobQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi9kb3R6bGliL0RvdFpMaWIuc2xuIGIvc3JjL2NvbnRyaWIvZG90emxpYi9Eb3RaTGliLnNsbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzQ1Y2EwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbnRyaWIvZG90emxpYi9Eb3RaTGliLnNsbgpAQCAtMCwwICsxLDIxIEBACitNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyBTb2x1dGlvbiBGaWxlLCBGb3JtYXQgVmVyc2lvbiA4LjAwDQorUHJvamVjdCgie0ZBRTA0RUMwLTMwMUYtMTFEMy1CRjRCLTAwQzA0Rjc5RUZCQ30iKSA9ICJEb3RaTGliIiwgIkRvdFpMaWJcRG90WkxpYi5jc3Byb2oiLCAie0JCMUVFMEIxLTE4MDgtNDZDQi1CNzg2LTk0OUQ5MTExN0ZDNX0iDQorCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCisJRW5kUHJvamVjdFNlY3Rpb24NCitFbmRQcm9qZWN0DQorR2xvYmFsDQorCUdsb2JhbFNlY3Rpb24oU29sdXRpb25Db25maWd1cmF0aW9uKSA9IHByZVNvbHV0aW9uDQorCQlEZWJ1ZyA9IERlYnVnDQorCQlSZWxlYXNlID0gUmVsZWFzZQ0KKwlFbmRHbG9iYWxTZWN0aW9uDQorCUdsb2JhbFNlY3Rpb24oUHJvamVjdENvbmZpZ3VyYXRpb24pID0gcG9zdFNvbHV0aW9uDQorCQl7QkIxRUUwQjEtMTgwOC00NkNCLUI3ODYtOTQ5RDkxMTE3RkM1fS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3wuTkVUDQorCQl7QkIxRUUwQjEtMTgwOC00NkNCLUI3ODYtOTQ5RDkxMTE3RkM1fS5EZWJ1Zy5CdWlsZC4wID0gRGVidWd8Lk5FVA0KKwkJe0JCMUVFMEIxLTE4MDgtNDZDQi1CNzg2LTk0OUQ5MTExN0ZDNX0uUmVsZWFzZS5BY3RpdmVDZmcgPSBSZWxlYXNlfC5ORVQNCisJCXtCQjFFRTBCMS0xODA4LTQ2Q0ItQjc4Ni05NDlEOTExMTdGQzV9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8Lk5FVA0KKwlFbmRHbG9iYWxTZWN0aW9uDQorCUdsb2JhbFNlY3Rpb24oRXh0ZW5zaWJpbGl0eUdsb2JhbHMpID0gcG9zdFNvbHV0aW9uDQorCUVuZEdsb2JhbFNlY3Rpb24NCisJR2xvYmFsU2VjdGlvbihFeHRlbnNpYmlsaXR5QWRkSW5zKSA9IHBvc3RTb2x1dGlvbg0KKwlFbmRHbG9iYWxTZWN0aW9uDQorRW5kR2xvYmFsDQpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvZG90emxpYi9Eb3RaTGliL0Fzc2VtYmx5SW5mby5jcyBiL3NyYy9jb250cmliL2RvdHpsaWIvRG90WkxpYi9Bc3NlbWJseUluZm8uY3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ5MWJmYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb250cmliL2RvdHpsaWIvRG90WkxpYi9Bc3NlbWJseUluZm8uY3MKQEAgLTAsMCArMSw1OCBAQAordXNpbmcgU3lzdGVtLlJlZmxlY3Rpb247DQordXNpbmcgU3lzdGVtLlJ1bnRpbWUuQ29tcGlsZXJTZXJ2aWNlczsNCisNCisvLw0KKy8vIEdlbmVyYWwgSW5mb3JtYXRpb24gYWJvdXQgYW4gYXNzZW1ibHkgaXMgY29udHJvbGxlZCB0aHJvdWdoIHRoZSBmb2xsb3dpbmcNCisvLyBzZXQgb2YgYXR0cmlidXRlcy4gQ2hhbmdlIHRoZXNlIGF0dHJpYnV0ZSB2YWx1ZXMgdG8gbW9kaWZ5IHRoZSBpbmZvcm1hdGlvbg0KKy8vIGFzc29jaWF0ZWQgd2l0aCBhbiBhc3NlbWJseS4NCisvLw0KK1thc3NlbWJseTogQXNzZW1ibHlUaXRsZSgiRG90WkxpYiIpXQ0KK1thc3NlbWJseTogQXNzZW1ibHlEZXNjcmlwdGlvbigiLk5ldCBiaW5kaW5ncyBmb3IgWkxpYiBjb21wcmVzc2lvbiBkbGwgMS4yLngiKV0NCitbYXNzZW1ibHk6IEFzc2VtYmx5Q29uZmlndXJhdGlvbigiIildDQorW2Fzc2VtYmx5OiBBc3NlbWJseUNvbXBhbnkoIkhlbnJpayBSYXZuIildDQorW2Fzc2VtYmx5OiBBc3NlbWJseVByb2R1Y3QoIiIpXQ0KK1thc3NlbWJseTogQXNzZW1ibHlDb3B5cmlnaHQoIihjKSAyMDA0IGJ5IEhlbnJpayBSYXZuIildDQorW2Fzc2VtYmx5OiBBc3NlbWJseVRyYWRlbWFyaygiIildDQorW2Fzc2VtYmx5OiBBc3NlbWJseUN1bHR1cmUoIiIpXQ0KKw0KKy8vDQorLy8gVmVyc2lvbiBpbmZvcm1hdGlvbiBmb3IgYW4gYXNzZW1ibHkgY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBmb3VyIHZhbHVlczoNCisvLw0KKy8vICAgICAgTWFqb3IgVmVyc2lvbg0KKy8vICAgICAgTWlub3IgVmVyc2lvbg0KKy8vICAgICAgQnVpbGQgTnVtYmVyDQorLy8gICAgICBSZXZpc2lvbg0KKy8vDQorLy8gWW91IGNhbiBzcGVjaWZ5IGFsbCB0aGUgdmFsdWVzIG9yIHlvdSBjYW4gZGVmYXVsdCB0aGUgUmV2aXNpb24gYW5kIEJ1aWxkIE51bWJlcnMNCisvLyBieSB1c2luZyB0aGUgJyonIGFzIHNob3duIGJlbG93Og0KKw0KK1thc3NlbWJseTogQXNzZW1ibHlWZXJzaW9uKCIxLjAuKiIpXQ0KKw0KKy8vDQorLy8gSW4gb3JkZXIgdG8gc2lnbiB5b3VyIGFzc2VtYmx5IHlvdSBtdXN0IHNwZWNpZnkgYSBrZXkgdG8gdXNlLiBSZWZlciB0byB0aGUNCisvLyBNaWNyb3NvZnQgLk5FVCBGcmFtZXdvcmsgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBhc3NlbWJseSBzaWduaW5nLg0KKy8vDQorLy8gVXNlIHRoZSBhdHRyaWJ1dGVzIGJlbG93IHRvIGNvbnRyb2wgd2hpY2gga2V5IGlzIHVzZWQgZm9yIHNpZ25pbmcuDQorLy8NCisvLyBOb3RlczoNCisvLyAgICgqKSBJZiBubyBrZXkgaXMgc3BlY2lmaWVkLCB0aGUgYXNzZW1ibHkgaXMgbm90IHNpZ25lZC4NCisvLyAgICgqKSBLZXlOYW1lIHJlZmVycyB0byBhIGtleSB0aGF0IGhhcyBiZWVuIGluc3RhbGxlZCBpbiB0aGUgQ3J5cHRvIFNlcnZpY2UNCisvLyAgICAgICBQcm92aWRlciAoQ1NQKSBvbiB5b3VyIG1hY2hpbmUuIEtleUZpbGUgcmVmZXJzIHRvIGEgZmlsZSB3aGljaCBjb250YWlucw0KKy8vICAgICAgIGEga2V5Lg0KKy8vICAgKCopIElmIHRoZSBLZXlGaWxlIGFuZCB0aGUgS2V5TmFtZSB2YWx1ZXMgYXJlIGJvdGggc3BlY2lmaWVkLCB0aGUNCisvLyAgICAgICBmb2xsb3dpbmcgcHJvY2Vzc2luZyBvY2N1cnM6DQorLy8gICAgICAgKDEpIElmIHRoZSBLZXlOYW1lIGNhbiBiZSBmb3VuZCBpbiB0aGUgQ1NQLCB0aGF0IGtleSBpcyB1c2VkLg0KKy8vICAgICAgICgyKSBJZiB0aGUgS2V5TmFtZSBkb2VzIG5vdCBleGlzdCBhbmQgdGhlIEtleUZpbGUgZG9lcyBleGlzdCwgdGhlIGtleQ0KKy8vICAgICAgICAgICBpbiB0aGUgS2V5RmlsZSBpcyBpbnN0YWxsZWQgaW50byB0aGUgQ1NQIGFuZCB1c2VkLg0KKy8vICAgKCopIEluIG9yZGVyIHRvIGNyZWF0ZSBhIEtleUZpbGUsIHlvdSBjYW4gdXNlIHRoZSBzbi5leGUgKFN0cm9uZyBOYW1lKSB1dGlsaXR5Lg0KKy8vICAgICAgIFdoZW4gc3BlY2lmeWluZyB0aGUgS2V5RmlsZSwgdGhlIGxvY2F0aW9uIG9mIHRoZSBLZXlGaWxlIHNob3VsZCBiZQ0KKy8vICAgICAgIHJlbGF0aXZlIHRvIHRoZSBwcm9qZWN0IG91dHB1dCBkaXJlY3Rvcnkgd2hpY2ggaXMNCisvLyAgICAgICAlUHJvamVjdCBEaXJlY3RvcnklXG9ialw8Y29uZmlndXJhdGlvbj4uIEZvciBleGFtcGxlLCBpZiB5b3VyIEtleUZpbGUgaXMNCisvLyAgICAgICBsb2NhdGVkIGluIHRoZSBwcm9qZWN0IGRpcmVjdG9yeSwgeW91IHdvdWxkIHNwZWNpZnkgdGhlIEFzc2VtYmx5S2V5RmlsZQ0KKy8vICAgICAgIGF0dHJpYnV0ZSBhcyBbYXNzZW1ibHk6IEFzc2VtYmx5S2V5RmlsZSgiLi5cXC4uXFxteWtleS5zbmsiKV0NCisvLyAgICgqKSBEZWxheSBTaWduaW5nIGlzIGFuIGFkdmFuY2VkIG9wdGlvbiAtIHNlZSB0aGUgTWljcm9zb2Z0IC5ORVQgRnJhbWV3b3JrDQorLy8gICAgICAgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzLg0KKy8vDQorW2Fzc2VtYmx5OiBBc3NlbWJseURlbGF5U2lnbihmYWxzZSldDQorW2Fzc2VtYmx5OiBBc3NlbWJseUtleUZpbGUoIiIpXQ0KK1thc3NlbWJseTogQXNzZW1ibHlLZXlOYW1lKCIiKV0NCmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi9kb3R6bGliL0RvdFpMaWIvQ2hlY2tzdW1JbXBsLmNzIGIvc3JjL2NvbnRyaWIvZG90emxpYi9Eb3RaTGliL0NoZWNrc3VtSW1wbC5jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODhiMmZjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbnRyaWIvZG90emxpYi9Eb3RaTGliL0NoZWNrc3VtSW1wbC5jcwpAQCAtMCwwICsxLDIwMiBAQAorLy8NCisvLyCpIENvcHlyaWdodCBIZW5yaWsgUmF2biAyMDA0DQorLy8NCisvLyBVc2UsIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4NCisvLyAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkNCisvLw0KKw0KK3VzaW5nIFN5c3RlbTsNCit1c2luZyBTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXM7DQordXNpbmcgU3lzdGVtLlRleHQ7DQorDQorDQorbmFtZXNwYWNlIERvdFpMaWINCit7DQorICAgICNyZWdpb24gQ2hlY2tzdW1HZW5lcmF0b3JCYXNlDQorICAgIC8vLyA8c3VtbWFyeT4NCisgICAgLy8vIEltcGxlbWVudHMgdGhlIGNvbW1vbiBmdW5jdGlvbmFsaXR5IG5lZWRlZCBmb3IgYWxsIDxzZWUgY3JlZj0iQ2hlY2tzdW1HZW5lcmF0b3IiLz5zDQorICAgIC8vLyA8L3N1bW1hcnk+DQorICAgIC8vLyA8ZXhhbXBsZT48L2V4YW1wbGU+DQorICAgIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBDaGVja3N1bUdlbmVyYXRvckJhc2UgOiBDaGVja3N1bUdlbmVyYXRvcg0KKyAgICB7DQorICAgICAgICAvLy8gPHN1bW1hcnk+DQorICAgICAgICAvLy8gVGhlIHZhbHVlIG9mIHRoZSBjdXJyZW50IGNoZWNrc3VtDQorICAgICAgICAvLy8gPC9zdW1tYXJ5Pg0KKyAgICAgICAgcHJvdGVjdGVkIHVpbnQgX2N1cnJlbnQ7DQorDQorICAgICAgICAvLy8gPHN1bW1hcnk+DQorICAgICAgICAvLy8gSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGNoZWNrc3VtIGdlbmVyYXRvciBiYXNlIC0gdGhlIGN1cnJlbnQgY2hlY2tzdW0gaXMNCisgICAgICAgIC8vLyBzZXQgdG8gemVybw0KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4NCisgICAgICAgIHB1YmxpYyBDaGVja3N1bUdlbmVyYXRvckJhc2UoKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIF9jdXJyZW50ID0gMDsNCisgICAgICAgIH0NCisNCisgICAgICAgIC8vLyA8c3VtbWFyeT4NCisgICAgICAgIC8vLyBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgY2hlY2tzdW0gZ2VuZXJhdG9yIGJhc2V3aXRoIGEgc3BlY2lmaWVkIHZhbHVlDQorICAgICAgICAvLy8gPC9zdW1tYXJ5Pg0KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJpbml0aWFsVmFsdWUiPlRoZSB2YWx1ZSB0byBzZXQgdGhlIGN1cnJlbnQgY2hlY2tzdW0gdG88L3BhcmFtPg0KKyAgICAgICAgcHVibGljIENoZWNrc3VtR2VuZXJhdG9yQmFzZSh1aW50IGluaXRpYWxWYWx1ZSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBfY3VycmVudCA9IGluaXRpYWxWYWx1ZTsNCisgICAgICAgIH0NCisNCisgICAgICAgIC8vLyA8c3VtbWFyeT4NCisgICAgICAgIC8vLyBSZXNldHMgdGhlIGN1cnJlbnQgY2hlY2tzdW0gdG8gemVybw0KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4NCisgICAgICAgIHB1YmxpYyB2b2lkIFJlc2V0KCkgeyBfY3VycmVudCA9IDA7IH0NCisNCisgICAgICAgIC8vLyA8c3VtbWFyeT4NCisgICAgICAgIC8vLyBHZXRzIHRoZSBjdXJyZW50IGNoZWNrc3VtIHZhbHVlDQorICAgICAgICAvLy8gPC9zdW1tYXJ5Pg0KKyAgICAgICAgcHVibGljIHVpbnQgVmFsdWUgeyBnZXQgeyByZXR1cm4gX2N1cnJlbnQ7IH0gfQ0KKw0KKyAgICAgICAgLy8vIDxzdW1tYXJ5Pg0KKyAgICAgICAgLy8vIFVwZGF0ZXMgdGhlIGN1cnJlbnQgY2hlY2tzdW0gd2l0aCBwYXJ0IG9mIGFuIGFycmF5IG9mIGJ5dGVzDQorICAgICAgICAvLy8gPC9zdW1tYXJ5Pg0KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJkYXRhIj5UaGUgZGF0YSB0byB1cGRhdGUgdGhlIGNoZWNrc3VtIHdpdGg8L3BhcmFtPg0KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJvZmZzZXQiPldoZXJlIGluIDxjPmRhdGE8L2M+IHRvIHN0YXJ0IHVwZGF0aW5nPC9wYXJhbT4NCisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iY291bnQiPlRoZSBudW1iZXIgb2YgYnl0ZXMgZnJvbSA8Yz5kYXRhPC9jPiB0byB1c2U8L3BhcmFtPg0KKyAgICAgICAgLy8vIDxleGNlcHRpb24gY3JlZj0iQXJndW1lbnRFeGNlcHRpb24iPlRoZSBzdW0gb2Ygb2Zmc2V0IGFuZCBjb3VudCBpcyBsYXJnZXIgdGhhbiB0aGUgbGVuZ3RoIG9mIDxjPmRhdGE8L2M+PC9leGNlcHRpb24+DQorICAgICAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJOdWxsUmVmZXJlbmNlRXhjZXB0aW9uIj48Yz5kYXRhPC9jPiBpcyBhIG51bGwgcmVmZXJlbmNlPC9leGNlcHRpb24+DQorICAgICAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcmd1bWVudE91dE9mUmFuZ2VFeGNlcHRpb24iPk9mZnNldCBvciBjb3VudCBpcyBuZWdhdGl2ZS48L2V4Y2VwdGlvbj4NCisgICAgICAgIC8vLyA8cmVtYXJrcz5BbGwgdGhlIG90aGVyIDxjPlVwZGF0ZTwvYz4gbWV0aG9kcyBhcmUgaW1wbG1lbmV0ZWQgaW4gdGVybXMgb2YgdGhpcyBvbmUuDQorICAgICAgICAvLy8gVGhpcyBpcyB0aGVyZWZvcmUgdGhlIG9ubHkgbWV0aG9kIGEgZGVyaXZlZCBjbGFzcyBoYXMgdG8gaW1wbGVtZW50PC9yZW1hcmtzPg0KKyAgICAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgVXBkYXRlKGJ5dGVbXSBkYXRhLCBpbnQgb2Zmc2V0LCBpbnQgY291bnQpOw0KKw0KKyAgICAgICAgLy8vIDxzdW1tYXJ5Pg0KKyAgICAgICAgLy8vIFVwZGF0ZXMgdGhlIGN1cnJlbnQgY2hlY2tzdW0gd2l0aCBhbiBhcnJheSBvZiBieXRlcy4NCisgICAgICAgIC8vLyA8L3N1bW1hcnk+DQorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImRhdGEiPlRoZSBkYXRhIHRvIHVwZGF0ZSB0aGUgY2hlY2tzdW0gd2l0aDwvcGFyYW0+DQorICAgICAgICBwdWJsaWMgdm9pZCBVcGRhdGUoYnl0ZVtdIGRhdGEpDQorICAgICAgICB7DQorICAgICAgICAgICAgVXBkYXRlKGRhdGEsIDAsIGRhdGEuTGVuZ3RoKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIC8vLyA8c3VtbWFyeT4NCisgICAgICAgIC8vLyBVcGRhdGVzIHRoZSBjdXJyZW50IGNoZWNrc3VtIHdpdGggdGhlIGRhdGEgZnJvbSBhIHN0cmluZw0KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4NCisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iZGF0YSI+VGhlIHN0cmluZyB0byB1cGRhdGUgdGhlIGNoZWNrc3VtIHdpdGg8L3BhcmFtPg0KKyAgICAgICAgLy8vIDxyZW1hcmtzPlRoZSBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIGNvbnZlcnRlZCBieSB0aGUgVVRGLTggZW5jb2Rpbmc8L3JlbWFya3M+DQorICAgICAgICBwdWJsaWMgdm9pZCBVcGRhdGUoc3RyaW5nIGRhdGEpDQorICAgICAgICB7DQorCQkJVXBkYXRlKEVuY29kaW5nLlVURjguR2V0Qnl0ZXMoZGF0YSkpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgLy8vIDxzdW1tYXJ5Pg0KKyAgICAgICAgLy8vIFVwZGF0ZXMgdGhlIGN1cnJlbnQgY2hlY2tzdW0gd2l0aCB0aGUgZGF0YSBmcm9tIGEgc3RyaW5nLCB1c2luZyBhIHNwZWNpZmljIGVuY29kaW5nDQorICAgICAgICAvLy8gPC9zdW1tYXJ5Pg0KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJkYXRhIj5UaGUgc3RyaW5nIHRvIHVwZGF0ZSB0aGUgY2hlY2tzdW0gd2l0aDwvcGFyYW0+DQorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImVuY29kaW5nIj5UaGUgZW5jb2RpbmcgdG8gdXNlPC9wYXJhbT4NCisgICAgICAgIHB1YmxpYyB2b2lkIFVwZGF0ZShzdHJpbmcgZGF0YSwgRW5jb2RpbmcgZW5jb2RpbmcpDQorICAgICAgICB7DQorICAgICAgICAgICAgVXBkYXRlKGVuY29kaW5nLkdldEJ5dGVzKGRhdGEpKTsNCisgICAgICAgIH0NCisNCisgICAgfQ0KKyAgICAjZW5kcmVnaW9uDQorDQorICAgICNyZWdpb24gQ1JDMzINCisgICAgLy8vIDxzdW1tYXJ5Pg0KKyAgICAvLy8gSW1wbGVtZW50cyBhIENSQzMyIGNoZWNrc3VtIGdlbmVyYXRvcg0KKyAgICAvLy8gPC9zdW1tYXJ5Pg0KKyAgICBwdWJsaWMgc2VhbGVkIGNsYXNzIENSQzMyQ2hlY2tzdW0gOiBDaGVja3N1bUdlbmVyYXRvckJhc2UNCisgICAgew0KKyAgICAgICAgI3JlZ2lvbiBETEwgaW1wb3J0cw0KKw0KKyAgICAgICAgW0RsbEltcG9ydCgiWkxJQjEuZGxsIiwgQ2FsbGluZ0NvbnZlbnRpb249Q2FsbGluZ0NvbnZlbnRpb24uQ2RlY2wpXQ0KKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZXh0ZXJuIHVpbnQgY3JjMzIodWludCBjcmMsIGludCBkYXRhLCB1aW50IGxlbmd0aCk7DQorDQorICAgICAgICAjZW5kcmVnaW9uDQorDQorICAgICAgICAvLy8gPHN1bW1hcnk+DQorICAgICAgICAvLy8gSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIENSQzMyIGNoZWNrc3VtIGdlbmVyYXRvcg0KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4NCisgICAgICAgIHB1YmxpYyBDUkMzMkNoZWNrc3VtKCkgOiBiYXNlKCkge30NCisNCisgICAgICAgIC8vLyA8c3VtbWFyeT4NCisgICAgICAgIC8vLyBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgQ1JDMzIgY2hlY2tzdW0gZ2VuZXJhdG9yIHdpdGggYSBzcGVjaWZpZWQgdmFsdWUNCisgICAgICAgIC8vLyA8L3N1bW1hcnk+DQorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImluaXRpYWxWYWx1ZSI+VGhlIHZhbHVlIHRvIHNldCB0aGUgY3VycmVudCBjaGVja3N1bSB0bzwvcGFyYW0+DQorICAgICAgICBwdWJsaWMgQ1JDMzJDaGVja3N1bSh1aW50IGluaXRpYWxWYWx1ZSkgOiBiYXNlKGluaXRpYWxWYWx1ZSkge30NCisNCisgICAgICAgIC8vLyA8c3VtbWFyeT4NCisgICAgICAgIC8vLyBVcGRhdGVzIHRoZSBjdXJyZW50IGNoZWNrc3VtIHdpdGggcGFydCBvZiBhbiBhcnJheSBvZiBieXRlcw0KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4NCisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iZGF0YSI+VGhlIGRhdGEgdG8gdXBkYXRlIHRoZSBjaGVja3N1bSB3aXRoPC9wYXJhbT4NCisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ib2Zmc2V0Ij5XaGVyZSBpbiA8Yz5kYXRhPC9jPiB0byBzdGFydCB1cGRhdGluZzwvcGFyYW0+DQorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImNvdW50Ij5UaGUgbnVtYmVyIG9mIGJ5dGVzIGZyb20gPGM+ZGF0YTwvYz4gdG8gdXNlPC9wYXJhbT4NCisgICAgICAgIC8vLyA8ZXhjZXB0aW9uIGNyZWY9IkFyZ3VtZW50RXhjZXB0aW9uIj5UaGUgc3VtIG9mIG9mZnNldCBhbmQgY291bnQgaXMgbGFyZ2VyIHRoYW4gdGhlIGxlbmd0aCBvZiA8Yz5kYXRhPC9jPjwvZXhjZXB0aW9uPg0KKyAgICAgICAgLy8vIDxleGNlcHRpb24gY3JlZj0iTnVsbFJlZmVyZW5jZUV4Y2VwdGlvbiI+PGM+ZGF0YTwvYz4gaXMgYSBudWxsIHJlZmVyZW5jZTwvZXhjZXB0aW9uPg0KKyAgICAgICAgLy8vIDxleGNlcHRpb24gY3JlZj0iQXJndW1lbnRPdXRPZlJhbmdlRXhjZXB0aW9uIj5PZmZzZXQgb3IgY291bnQgaXMgbmVnYXRpdmUuPC9leGNlcHRpb24+DQorICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgdm9pZCBVcGRhdGUoYnl0ZVtdIGRhdGEsIGludCBvZmZzZXQsIGludCBjb3VudCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBpZiAob2Zmc2V0IDwgMCB8fCBjb3VudCA8IDApIHRocm93IG5ldyBBcmd1bWVudE91dE9mUmFuZ2VFeGNlcHRpb24oKTsNCisgICAgICAgICAgICBpZiAoKG9mZnNldCtjb3VudCkgPiBkYXRhLkxlbmd0aCkgdGhyb3cgbmV3IEFyZ3VtZW50RXhjZXB0aW9uKCk7DQorICAgICAgICAgICAgR0NIYW5kbGUgaERhdGEgPSBHQ0hhbmRsZS5BbGxvYyhkYXRhLCBHQ0hhbmRsZVR5cGUuUGlubmVkKTsNCisgICAgICAgICAgICB0cnkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIF9jdXJyZW50ID0gY3JjMzIoX2N1cnJlbnQsIGhEYXRhLkFkZHJPZlBpbm5lZE9iamVjdCgpLlRvSW50MzIoKStvZmZzZXQsICh1aW50KWNvdW50KTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgZmluYWxseQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgaERhdGEuRnJlZSgpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisNCisgICAgfQ0KKyAgICAjZW5kcmVnaW9uDQorDQorICAgICNyZWdpb24gQWRsZXINCisgICAgLy8vIDxzdW1tYXJ5Pg0KKyAgICAvLy8gSW1wbGVtZW50cyBhIGNoZWNrc3VtIGdlbmVyYXRvciB0aGF0IGNvbXB1dGVzIHRoZSBBZGxlciBjaGVja3N1bSBvbiBkYXRhDQorICAgIC8vLyA8L3N1bW1hcnk+DQorICAgIHB1YmxpYyBzZWFsZWQgY2xhc3MgQWRsZXJDaGVja3N1bSA6IENoZWNrc3VtR2VuZXJhdG9yQmFzZQ0KKyAgICB7DQorICAgICAgICAjcmVnaW9uIERMTCBpbXBvcnRzDQorDQorICAgICAgICBbRGxsSW1wb3J0KCJaTElCMS5kbGwiLCBDYWxsaW5nQ29udmVudGlvbj1DYWxsaW5nQ29udmVudGlvbi5DZGVjbCldDQorICAgICAgICBwcml2YXRlIHN0YXRpYyBleHRlcm4gdWludCBhZGxlcjMyKHVpbnQgYWRsZXIsIGludCBkYXRhLCB1aW50IGxlbmd0aCk7DQorDQorICAgICAgICAjZW5kcmVnaW9uDQorDQorICAgICAgICAvLy8gPHN1bW1hcnk+DQorICAgICAgICAvLy8gSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIEFkbGVyIGNoZWNrc3VtIGdlbmVyYXRvcg0KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4NCisgICAgICAgIHB1YmxpYyBBZGxlckNoZWNrc3VtKCkgOiBiYXNlKCkge30NCisNCisgICAgICAgIC8vLyA8c3VtbWFyeT4NCisgICAgICAgIC8vLyBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgQWRsZXIgY2hlY2tzdW0gZ2VuZXJhdG9yIHdpdGggYSBzcGVjaWZpZWQgdmFsdWUNCisgICAgICAgIC8vLyA8L3N1bW1hcnk+DQorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImluaXRpYWxWYWx1ZSI+VGhlIHZhbHVlIHRvIHNldCB0aGUgY3VycmVudCBjaGVja3N1bSB0bzwvcGFyYW0+DQorICAgICAgICBwdWJsaWMgQWRsZXJDaGVja3N1bSh1aW50IGluaXRpYWxWYWx1ZSkgOiBiYXNlKGluaXRpYWxWYWx1ZSkge30NCisNCisgICAgICAgIC8vLyA8c3VtbWFyeT4NCisgICAgICAgIC8vLyBVcGRhdGVzIHRoZSBjdXJyZW50IGNoZWNrc3VtIHdpdGggcGFydCBvZiBhbiBhcnJheSBvZiBieXRlcw0KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4NCisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iZGF0YSI+VGhlIGRhdGEgdG8gdXBkYXRlIHRoZSBjaGVja3N1bSB3aXRoPC9wYXJhbT4NCisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ib2Zmc2V0Ij5XaGVyZSBpbiA8Yz5kYXRhPC9jPiB0byBzdGFydCB1cGRhdGluZzwvcGFyYW0+DQorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImNvdW50Ij5UaGUgbnVtYmVyIG9mIGJ5dGVzIGZyb20gPGM+ZGF0YTwvYz4gdG8gdXNlPC9wYXJhbT4NCisgICAgICAgIC8vLyA8ZXhjZXB0aW9uIGNyZWY9IkFyZ3VtZW50RXhjZXB0aW9uIj5UaGUgc3VtIG9mIG9mZnNldCBhbmQgY291bnQgaXMgbGFyZ2VyIHRoYW4gdGhlIGxlbmd0aCBvZiA8Yz5kYXRhPC9jPjwvZXhjZXB0aW9uPg0KKyAgICAgICAgLy8vIDxleGNlcHRpb24gY3JlZj0iTnVsbFJlZmVyZW5jZUV4Y2VwdGlvbiI+PGM+ZGF0YTwvYz4gaXMgYSBudWxsIHJlZmVyZW5jZTwvZXhjZXB0aW9uPg0KKyAgICAgICAgLy8vIDxleGNlcHRpb24gY3JlZj0iQXJndW1lbnRPdXRPZlJhbmdlRXhjZXB0aW9uIj5PZmZzZXQgb3IgY291bnQgaXMgbmVnYXRpdmUuPC9leGNlcHRpb24+DQorICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgdm9pZCBVcGRhdGUoYnl0ZVtdIGRhdGEsIGludCBvZmZzZXQsIGludCBjb3VudCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBpZiAob2Zmc2V0IDwgMCB8fCBjb3VudCA8IDApIHRocm93IG5ldyBBcmd1bWVudE91dE9mUmFuZ2VFeGNlcHRpb24oKTsNCisgICAgICAgICAgICBpZiAoKG9mZnNldCtjb3VudCkgPiBkYXRhLkxlbmd0aCkgdGhyb3cgbmV3IEFyZ3VtZW50RXhjZXB0aW9uKCk7DQorICAgICAgICAgICAgR0NIYW5kbGUgaERhdGEgPSBHQ0hhbmRsZS5BbGxvYyhkYXRhLCBHQ0hhbmRsZVR5cGUuUGlubmVkKTsNCisgICAgICAgICAgICB0cnkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIF9jdXJyZW50ID0gYWRsZXIzMihfY3VycmVudCwgaERhdGEuQWRkck9mUGlubmVkT2JqZWN0KCkuVG9JbnQzMigpK29mZnNldCwgKHVpbnQpY291bnQpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBmaW5hbGx5DQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBoRGF0YS5GcmVlKCk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKw0KKyAgICB9DQorICAgICNlbmRyZWdpb24NCisNCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvZG90emxpYi9Eb3RaTGliL0NpcmN1bGFyQnVmZmVyLmNzIGIvc3JjL2NvbnRyaWIvZG90emxpYi9Eb3RaTGliL0NpcmN1bGFyQnVmZmVyLmNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxY2FiM2EKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29udHJpYi9kb3R6bGliL0RvdFpMaWIvQ2lyY3VsYXJCdWZmZXIuY3MKQEAgLTAsMCArMSw4MyBAQAorLy8NCisvLyCpIENvcHlyaWdodCBIZW5yaWsgUmF2biAyMDA0DQorLy8NCisvLyBVc2UsIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4NCisvLyAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkNCisvLw0KKw0KK3VzaW5nIFN5c3RlbTsNCit1c2luZyBTeXN0ZW0uRGlhZ25vc3RpY3M7DQorDQorbmFtZXNwYWNlIERvdFpMaWINCit7DQorDQorCS8vLyA8c3VtbWFyeT4NCisJLy8vIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBhIGNpcmN1bGFyIGJ1ZmZlcg0KKwkvLy8gPC9zdW1tYXJ5Pg0KKwlpbnRlcm5hbCBjbGFzcyBDaXJjdWxhckJ1ZmZlcg0KKwl7DQorICAgICAgICAjcmVnaW9uIFByaXZhdGUgZGF0YQ0KKyAgICAgICAgcHJpdmF0ZSBpbnQgX2NhcGFjaXR5Ow0KKyAgICAgICAgcHJpdmF0ZSBpbnQgX2hlYWQ7DQorICAgICAgICBwcml2YXRlIGludCBfdGFpbDsNCisgICAgICAgIHByaXZhdGUgaW50IF9zaXplOw0KKyAgICAgICAgcHJpdmF0ZSBieXRlW10gX2J1ZmZlcjsNCisgICAgICAgICNlbmRyZWdpb24NCisNCisgICAgICAgIHB1YmxpYyBDaXJjdWxhckJ1ZmZlcihpbnQgY2FwYWNpdHkpDQorICAgICAgICB7DQorICAgICAgICAgICAgRGVidWcuQXNzZXJ0KCBjYXBhY2l0eSA+IDAgKTsNCisgICAgICAgICAgICBfYnVmZmVyID0gbmV3IGJ5dGVbY2FwYWNpdHldOw0KKyAgICAgICAgICAgIF9jYXBhY2l0eSA9IGNhcGFjaXR5Ow0KKyAgICAgICAgICAgIF9oZWFkID0gMDsNCisgICAgICAgICAgICBfdGFpbCA9IDA7DQorICAgICAgICAgICAgX3NpemUgPSAwOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgcHVibGljIGludCBTaXplIHsgZ2V0IHsgcmV0dXJuIF9zaXplOyB9IH0NCisNCisgICAgICAgIHB1YmxpYyBpbnQgUHV0KGJ5dGVbXSBzb3VyY2UsIGludCBvZmZzZXQsIGludCBjb3VudCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBEZWJ1Zy5Bc3NlcnQoIGNvdW50ID4gMCApOw0KKyAgICAgICAgICAgIGludCB0cnVlQ291bnQgPSBNYXRoLk1pbihjb3VudCwgX2NhcGFjaXR5IC0gU2l6ZSk7DQorICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0cnVlQ291bnQ7ICsraSkNCisgICAgICAgICAgICAgICAgX2J1ZmZlclsoX3RhaWwraSkgJSBfY2FwYWNpdHldID0gc291cmNlW29mZnNldCtpXTsNCisgICAgICAgICAgICBfdGFpbCArPSB0cnVlQ291bnQ7DQorICAgICAgICAgICAgX3RhaWwgJT0gX2NhcGFjaXR5Ow0KKyAgICAgICAgICAgIF9zaXplICs9IHRydWVDb3VudDsNCisgICAgICAgICAgICByZXR1cm4gdHJ1ZUNvdW50Ow0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgcHVibGljIGJvb2wgUHV0KGJ5dGUgYikNCisgICAgICAgIHsNCisgICAgICAgICAgICBpZiAoU2l6ZSA9PSBfY2FwYWNpdHkpIC8vIG5vIHJvb20NCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICAgICAgICAgIF9idWZmZXJbX3RhaWwrK10gPSBiOw0KKyAgICAgICAgICAgIF90YWlsICU9IF9jYXBhY2l0eTsNCisgICAgICAgICAgICArK19zaXplOw0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgcHVibGljIGludCBHZXQoYnl0ZVtdIGRlc3RpbmF0aW9uLCBpbnQgb2Zmc2V0LCBpbnQgY291bnQpDQorICAgICAgICB7DQorICAgICAgICAgICAgaW50IHRydWVDb3VudCA9IE1hdGguTWluKGNvdW50LFNpemUpOw0KKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHJ1ZUNvdW50OyArK2kpDQorICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uW29mZnNldCArIGldID0gX2J1ZmZlclsoX2hlYWQraSkgJSBfY2FwYWNpdHldOw0KKyAgICAgICAgICAgIF9oZWFkICs9IHRydWVDb3VudDsNCisgICAgICAgICAgICBfaGVhZCAlPSBfY2FwYWNpdHk7DQorICAgICAgICAgICAgX3NpemUgLT0gdHJ1ZUNvdW50Ow0KKyAgICAgICAgICAgIHJldHVybiB0cnVlQ291bnQ7DQorICAgICAgICB9DQorDQorICAgICAgICBwdWJsaWMgaW50IEdldCgpDQorICAgICAgICB7DQorICAgICAgICAgICAgaWYgKFNpemUgPT0gMCkNCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KKw0KKyAgICAgICAgICAgIGludCByZXN1bHQgPSAoaW50KV9idWZmZXJbX2hlYWQrKyAlIF9jYXBhY2l0eV07DQorICAgICAgICAgICAgLS1fc2l6ZTsNCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0Ow0KKyAgICAgICAgfQ0KKw0KKyAgICB9DQorfQ0KZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL2RvdHpsaWIvRG90WkxpYi9Db2RlY0Jhc2UuY3MgYi9zcmMvY29udHJpYi9kb3R6bGliL0RvdFpMaWIvQ29kZWNCYXNlLmNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyZTZkYTMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29udHJpYi9kb3R6bGliL0RvdFpMaWIvQ29kZWNCYXNlLmNzCkBAIC0wLDAgKzEsMTk4IEBACisvLw0KKy8vIKkgQ29weXJpZ2h0IEhlbnJpayBSYXZuIDIwMDQNCisvLw0KKy8vIFVzZSwgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gYXJlIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLg0KKy8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQ0KKy8vDQorDQordXNpbmcgU3lzdGVtOw0KK3VzaW5nIFN5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNlczsNCisNCituYW1lc3BhY2UgRG90WkxpYg0KK3sNCisJLy8vIDxzdW1tYXJ5Pg0KKwkvLy8gSW1wbGVtZW50cyB0aGUgY29tbW9uIGZ1bmN0aW9uYWxpdHkgbmVlZGVkIGZvciBhbGwgPHNlZSBjcmVmPSJDb2RlYyIvPnMNCisJLy8vIDwvc3VtbWFyeT4NCisJcHVibGljIGFic3RyYWN0IGNsYXNzIENvZGVjQmFzZSA6IENvZGVjLCBJRGlzcG9zYWJsZQ0KKwl7DQorDQorICAgICAgICAjcmVnaW9uIERhdGEgbWVtYmVycw0KKw0KKyAgICAgICAgLy8vIDxzdW1tYXJ5Pg0KKyAgICAgICAgLy8vIEluc3RhbmNlIG9mIHRoZSBpbnRlcm5hbCB6bGliIGJ1ZmZlciBzdHJ1Y3R1cmUgdGhhdCBpcw0KKyAgICAgICAgLy8vIHBhc3NlZCB0byBhbGwgZnVuY3Rpb25zIGluIHRoZSB6bGliIGRsbA0KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4NCisgICAgICAgIGludGVybmFsIFpTdHJlYW0gX3p0cmVhbSA9IG5ldyBaU3RyZWFtKCk7DQorDQorICAgICAgICAvLy8gPHN1bW1hcnk+DQorICAgICAgICAvLy8gVHJ1ZSBpZiB0aGUgb2JqZWN0IGluc3RhbmNlIGhhcyBiZWVuIGRpc3Bvc2VkLCBmYWxzZSBvdGhlcndpc2UNCisgICAgICAgIC8vLyA8L3N1bW1hcnk+DQorICAgICAgICBwcm90ZWN0ZWQgYm9vbCBfaXNEaXNwb3NlZCA9IGZhbHNlOw0KKw0KKyAgICAgICAgLy8vIDxzdW1tYXJ5Pg0KKyAgICAgICAgLy8vIFRoZSBzaXplIG9mIHRoZSBpbnRlcm5hbCBidWZmZXJzDQorICAgICAgICAvLy8gPC9zdW1tYXJ5Pg0KKyAgICAgICAgcHJvdGVjdGVkIGNvbnN0IGludCBrQnVmZmVyU2l6ZSA9IDE2Mzg0Ow0KKw0KKyAgICAgICAgcHJpdmF0ZSBieXRlW10gX291dEJ1ZmZlciA9IG5ldyBieXRlW2tCdWZmZXJTaXplXTsNCisgICAgICAgIHByaXZhdGUgYnl0ZVtdIF9pbkJ1ZmZlciA9IG5ldyBieXRlW2tCdWZmZXJTaXplXTsNCisNCisgICAgICAgIHByaXZhdGUgR0NIYW5kbGUgX2hJbnB1dDsNCisgICAgICAgIHByaXZhdGUgR0NIYW5kbGUgX2hPdXRwdXQ7DQorDQorICAgICAgICBwcml2YXRlIHVpbnQgX2NoZWNrc3VtID0gMDsNCisNCisgICAgICAgICNlbmRyZWdpb24NCisNCisgICAgICAgIC8vLyA8c3VtbWFyeT4NCisgICAgICAgIC8vLyBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgPGM+Q29kZUJhc2U8L2M+IGNsYXNzLg0KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4NCisJCXB1YmxpYyBDb2RlY0Jhc2UoKQ0KKwkJew0KKyAgICAgICAgICAgIHRyeQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgX2hJbnB1dCA9IEdDSGFuZGxlLkFsbG9jKF9pbkJ1ZmZlciwgR0NIYW5kbGVUeXBlLlBpbm5lZCk7DQorICAgICAgICAgICAgICAgIF9oT3V0cHV0ID0gR0NIYW5kbGUuQWxsb2MoX291dEJ1ZmZlciwgR0NIYW5kbGVUeXBlLlBpbm5lZCk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24pDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBDbGVhblVwKGZhbHNlKTsNCisgICAgICAgICAgICAgICAgdGhyb3c7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKw0KKw0KKyAgICAgICAgI3JlZ2lvbiBDb2RlYyBNZW1iZXJzDQorDQorICAgICAgICAvLy8gPHN1bW1hcnk+DQorICAgICAgICAvLy8gT2NjdXJzIHdoZW4gbW9yZSBwcm9jZXNzZWQgZGF0YSBhcmUgYXZhaWxhYmxlLg0KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4NCisgICAgICAgIHB1YmxpYyBldmVudCBEYXRhQXZhaWxhYmxlSGFuZGxlciBEYXRhQXZhaWxhYmxlOw0KKw0KKyAgICAgICAgLy8vIDxzdW1tYXJ5Pg0KKyAgICAgICAgLy8vIEZpcmVzIHRoZSA8c2VlIGNyZWY9IkRhdGFBdmFpbGFibGUiLz4gZXZlbnQNCisgICAgICAgIC8vLyA8L3N1bW1hcnk+DQorICAgICAgICBwcm90ZWN0ZWQgdm9pZCBPbkRhdGFBdmFpbGFibGUoKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlmIChfenRyZWFtLnRvdGFsX291dCA+IDApDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBpZiAoRGF0YUF2YWlsYWJsZSAhPSBudWxsKQ0KKyAgICAgICAgICAgICAgICAgICAgRGF0YUF2YWlsYWJsZSggX291dEJ1ZmZlciwgMCwgKGludClfenRyZWFtLnRvdGFsX291dCk7DQorICAgICAgICAgICAgICAgIHJlc2V0T3V0cHV0KCk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgLy8vIDxzdW1tYXJ5Pg0KKyAgICAgICAgLy8vIEFkZHMgbW9yZSBkYXRhIHRvIHRoZSBjb2RlYyB0byBiZSBwcm9jZXNzZWQuDQorICAgICAgICAvLy8gPC9zdW1tYXJ5Pg0KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJkYXRhIj5CeXRlIGFycmF5IGNvbnRhaW5pbmcgdGhlIGRhdGEgdG8gYmUgYWRkZWQgdG8gdGhlIGNvZGVjPC9wYXJhbT4NCisgICAgICAgIC8vLyA8cmVtYXJrcz5BZGRpbmcgZGF0YSBtYXksIG9yIG1heSBub3QsIHJhaXNlIHRoZSA8Yz5EYXRhQXZhaWxhYmxlPC9jPiBldmVudDwvcmVtYXJrcz4NCisgICAgICAgIHB1YmxpYyB2b2lkIEFkZChieXRlW10gZGF0YSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBBZGQoZGF0YSwwLGRhdGEuTGVuZ3RoKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIC8vLyA8c3VtbWFyeT4NCisgICAgICAgIC8vLyBBZGRzIG1vcmUgZGF0YSB0byB0aGUgY29kZWMgdG8gYmUgcHJvY2Vzc2VkLg0KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4NCisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iZGF0YSI+Qnl0ZSBhcnJheSBjb250YWluaW5nIHRoZSBkYXRhIHRvIGJlIGFkZGVkIHRvIHRoZSBjb2RlYzwvcGFyYW0+DQorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9Im9mZnNldCI+VGhlIGluZGV4IG9mIHRoZSBmaXJzdCBieXRlIHRvIGFkZCBmcm9tIDxjPmRhdGE8L2M+PC9wYXJhbT4NCisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iY291bnQiPlRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gYWRkPC9wYXJhbT4NCisgICAgICAgIC8vLyA8cmVtYXJrcz5BZGRpbmcgZGF0YSBtYXksIG9yIG1heSBub3QsIHJhaXNlIHRoZSA8Yz5EYXRhQXZhaWxhYmxlPC9jPiBldmVudDwvcmVtYXJrcz4NCisgICAgICAgIC8vLyA8cmVtYXJrcz5UaGlzIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgYSBkZXJpdmVkIGNsYXNzPC9yZW1hcmtzPg0KKyAgICAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgQWRkKGJ5dGVbXSBkYXRhLCBpbnQgb2Zmc2V0LCBpbnQgY291bnQpOw0KKw0KKyAgICAgICAgLy8vIDxzdW1tYXJ5Pg0KKyAgICAgICAgLy8vIEZpbmlzaGVzIHVwIGFueSBwZW5kaW5nIGRhdGEgdGhhdCBuZWVkcyB0byBiZSBwcm9jZXNzZWQgYW5kIGhhbmRsZWQuDQorICAgICAgICAvLy8gPC9zdW1tYXJ5Pg0KKyAgICAgICAgLy8vIDxyZW1hcmtzPlRoaXMgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBhIGRlcml2ZWQgY2xhc3M8L3JlbWFya3M+DQorICAgICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBGaW5pc2goKTsNCisNCisgICAgICAgIC8vLyA8c3VtbWFyeT4NCisgICAgICAgIC8vLyBHZXRzIHRoZSBjaGVja3N1bSBvZiB0aGUgZGF0YSB0aGF0IGhhcyBiZWVuIGFkZGVkIHNvIGZhcg0KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4NCisgICAgICAgIHB1YmxpYyB1aW50IENoZWNrc3VtIHsgZ2V0IHsgcmV0dXJuIF9jaGVja3N1bTsgfSB9DQorDQorICAgICAgICAjZW5kcmVnaW9uDQorDQorICAgICAgICAjcmVnaW9uIERlc3RydWN0b3IgJiBJRGlzcG9zYWJsZSBzdHVmZg0KKw0KKyAgICAgICAgLy8vIDxzdW1tYXJ5Pg0KKyAgICAgICAgLy8vIERlc3Ryb3lzIHRoaXMgaW5zdGFuY2UNCisgICAgICAgIC8vLyA8L3N1bW1hcnk+DQorICAgICAgICB+Q29kZWNCYXNlKCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBDbGVhblVwKGZhbHNlKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIC8vLyA8c3VtbWFyeT4NCisgICAgICAgIC8vLyBSZWxlYXNlcyBhbnkgdW5tYW5hZ2VkIHJlc291cmNlcyBhbmQgY2FsbHMgdGhlIDxzZWUgY3JlZj0iQ2xlYW5VcCgpIi8+IG1ldGhvZCBvZiB0aGUgZGVyaXZlZCBjbGFzcw0KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4NCisgICAgICAgIHB1YmxpYyB2b2lkIERpc3Bvc2UoKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIENsZWFuVXAodHJ1ZSk7DQorICAgICAgICB9DQorDQorICAgICAgICAvLy8gPHN1bW1hcnk+DQorICAgICAgICAvLy8gUGVyZm9ybXMgYW55IGNvZGVjIHNwZWNpZmljIGNsZWFudXANCisgICAgICAgIC8vLyA8L3N1bW1hcnk+DQorICAgICAgICAvLy8gPHJlbWFya3M+VGhpcyBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGEgZGVyaXZlZCBjbGFzczwvcmVtYXJrcz4NCisgICAgICAgIHByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIENsZWFuVXAoKTsNCisNCisgICAgICAgIC8vIHBlcmZvcm1zIHRoZSByZWxlYXNlIG9mIHRoZSBoYW5kbGVzIGFuZCBjYWxscyB0aGUgZGVyZWl2ZWQgQ2xlYW5VcCgpDQorICAgICAgICBwcml2YXRlIHZvaWQgQ2xlYW5VcChib29sIGlzRGlzcG9zaW5nKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlmICghX2lzRGlzcG9zZWQpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBDbGVhblVwKCk7DQorICAgICAgICAgICAgICAgIGlmIChfaElucHV0LklzQWxsb2NhdGVkKQ0KKyAgICAgICAgICAgICAgICAgICAgX2hJbnB1dC5GcmVlKCk7DQorICAgICAgICAgICAgICAgIGlmIChfaE91dHB1dC5Jc0FsbG9jYXRlZCkNCisgICAgICAgICAgICAgICAgICAgIF9oT3V0cHV0LkZyZWUoKTsNCisNCisgICAgICAgICAgICAgICAgX2lzRGlzcG9zZWQgPSB0cnVlOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisNCisNCisgICAgICAgICNlbmRyZWdpb24NCisNCisgICAgICAgICNyZWdpb24gSGVscGVyIG1ldGhvZHMNCisNCisgICAgICAgIC8vLyA8c3VtbWFyeT4NCisgICAgICAgIC8vLyBDb3BpZXMgYSBudW1iZXIgb2YgYnl0ZXMgdG8gdGhlIGludGVybmFsIGNvZGVjIGJ1ZmZlciAtIHJlYWR5IGZvciBwcm9jY2VzaW5nDQorICAgICAgICAvLy8gPC9zdW1tYXJ5Pg0KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJkYXRhIj5UaGUgYnl0ZSBhcnJheSB0aGF0IGNvbnRhaW5zIHRoZSBkYXRhIHRvIGNvcHk8L3BhcmFtPg0KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJzdGFydEluZGV4Ij5UaGUgaW5kZXggb2YgdGhlIGZpcnN0IGJ5dGUgdG8gY29weTwvcGFyYW0+DQorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImNvdW50Ij5UaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkgZnJvbSA8Yz5kYXRhPC9jPjwvcGFyYW0+DQorICAgICAgICBwcm90ZWN0ZWQgdm9pZCBjb3B5SW5wdXQoYnl0ZVtdIGRhdGEsIGludCBzdGFydEluZGV4LCBpbnQgY291bnQpDQorICAgICAgICB7DQorICAgICAgICAgICAgQXJyYXkuQ29weShkYXRhLCBzdGFydEluZGV4LCBfaW5CdWZmZXIsMCwgY291bnQpOw0KKyAgICAgICAgICAgIF96dHJlYW0ubmV4dF9pbiA9IF9oSW5wdXQuQWRkck9mUGlubmVkT2JqZWN0KCk7DQorICAgICAgICAgICAgX3p0cmVhbS50b3RhbF9pbiA9IDA7DQorICAgICAgICAgICAgX3p0cmVhbS5hdmFpbF9pbiA9ICh1aW50KWNvdW50Ow0KKw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgLy8vIDxzdW1tYXJ5Pg0KKyAgICAgICAgLy8vIFJlc2V0cyB0aGUgaW50ZXJuYWwgb3V0cHV0IGJ1ZmZlcnMgdG8gYSBrbm93biBzdGF0ZSAtIHJlYWR5IGZvciBwcm9jZXNzaW5nDQorICAgICAgICAvLy8gPC9zdW1tYXJ5Pg0KKyAgICAgICAgcHJvdGVjdGVkIHZvaWQgcmVzZXRPdXRwdXQoKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIF96dHJlYW0udG90YWxfb3V0ID0gMDsNCisgICAgICAgICAgICBfenRyZWFtLmF2YWlsX291dCA9IGtCdWZmZXJTaXplOw0KKyAgICAgICAgICAgIF96dHJlYW0ubmV4dF9vdXQgPSBfaE91dHB1dC5BZGRyT2ZQaW5uZWRPYmplY3QoKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIC8vLyA8c3VtbWFyeT4NCisgICAgICAgIC8vLyBVcGRhdGVzIHRoZSBydW5uaW5nIGNoZWNrc3VtIHByb3BlcnR5DQorICAgICAgICAvLy8gPC9zdW1tYXJ5Pg0KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJuZXdTdW0iPlRoZSBuZXcgY2hlY2tzdW0gdmFsdWU8L3BhcmFtPg0KKyAgICAgICAgcHJvdGVjdGVkIHZvaWQgc2V0Q2hlY2tzdW0odWludCBuZXdTdW0pDQorICAgICAgICB7DQorICAgICAgICAgICAgX2NoZWNrc3VtID0gbmV3U3VtOw0KKyAgICAgICAgfQ0KKyAgICAgICAgI2VuZHJlZ2lvbg0KKw0KKyAgICB9DQorfQ0KZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL2RvdHpsaWIvRG90WkxpYi9EZWZsYXRlci5jcyBiL3NyYy9jb250cmliL2RvdHpsaWIvRG90WkxpYi9EZWZsYXRlci5jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjQ3NzkyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbnRyaWIvZG90emxpYi9Eb3RaTGliL0RlZmxhdGVyLmNzCkBAIC0wLDAgKzEsMTA2IEBACisvLw0KKy8vIKkgQ29weXJpZ2h0IEhlbnJpayBSYXZuIDIwMDQNCisvLw0KKy8vIFVzZSwgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gYXJlIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLg0KKy8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQ0KKy8vDQorDQordXNpbmcgU3lzdGVtOw0KK3VzaW5nIFN5c3RlbS5EaWFnbm9zdGljczsNCit1c2luZyBTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXM7DQorDQorbmFtZXNwYWNlIERvdFpMaWINCit7DQorDQorICAgIC8vLyA8c3VtbWFyeT4NCisgICAgLy8vIEltcGxlbWVudHMgYSBkYXRhIGNvbXByZXNzb3IsIHVzaW5nIHRoZSBkZWZsYXRlIGFsZ29yaXRobSBpbiB0aGUgWkxpYiBkbGwNCisgICAgLy8vIDwvc3VtbWFyeT4NCisJcHVibGljIHNlYWxlZCBjbGFzcyBEZWZsYXRlciA6IENvZGVjQmFzZQ0KKwl7DQorICAgICAgICAjcmVnaW9uIERsbCBpbXBvcnRzDQorICAgICAgICBbRGxsSW1wb3J0KCJaTElCMS5kbGwiLCBDYWxsaW5nQ29udmVudGlvbj1DYWxsaW5nQ29udmVudGlvbi5DZGVjbCwgQ2hhclNldD1DaGFyU2V0LkFuc2kpXQ0KKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZXh0ZXJuIGludCBkZWZsYXRlSW5pdF8ocmVmIFpTdHJlYW0gc3osIGludCBsZXZlbCwgc3RyaW5nIHZzLCBpbnQgc2l6ZSk7DQorDQorICAgICAgICBbRGxsSW1wb3J0KCJaTElCMS5kbGwiLCBDYWxsaW5nQ29udmVudGlvbj1DYWxsaW5nQ29udmVudGlvbi5DZGVjbCldDQorICAgICAgICBwcml2YXRlIHN0YXRpYyBleHRlcm4gaW50IGRlZmxhdGUocmVmIFpTdHJlYW0gc3osIGludCBmbHVzaCk7DQorDQorICAgICAgICBbRGxsSW1wb3J0KCJaTElCMS5kbGwiLCBDYWxsaW5nQ29udmVudGlvbj1DYWxsaW5nQ29udmVudGlvbi5DZGVjbCldDQorICAgICAgICBwcml2YXRlIHN0YXRpYyBleHRlcm4gaW50IGRlZmxhdGVSZXNldChyZWYgWlN0cmVhbSBzeik7DQorDQorICAgICAgICBbRGxsSW1wb3J0KCJaTElCMS5kbGwiLCBDYWxsaW5nQ29udmVudGlvbj1DYWxsaW5nQ29udmVudGlvbi5DZGVjbCldDQorICAgICAgICBwcml2YXRlIHN0YXRpYyBleHRlcm4gaW50IGRlZmxhdGVFbmQocmVmIFpTdHJlYW0gc3opOw0KKyAgICAgICAgI2VuZHJlZ2lvbg0KKw0KKyAgICAgICAgLy8vIDxzdW1tYXJ5Pg0KKyAgICAgICAgLy8vIENvbnN0cnVjdHMgYW4gbmV3IGluc3RhbmNlIG9mIHRoZSA8Yz5EZWZsYXRlcjwvYz4NCisgICAgICAgIC8vLyA8L3N1bW1hcnk+DQorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImxldmVsIj5UaGUgY29tcHJlc3Npb24gbGV2ZWwgdG8gdXNlIGZvciB0aGlzIDxjPkRlZmxhdGVyPC9jPjwvcGFyYW0+DQorCQlwdWJsaWMgRGVmbGF0ZXIoQ29tcHJlc3NMZXZlbCBsZXZlbCkgOiBiYXNlKCkNCisJCXsNCisgICAgICAgICAgICBpbnQgcmV0dmFsID0gZGVmbGF0ZUluaXRfKHJlZiBfenRyZWFtLCAoaW50KWxldmVsLCBJbmZvLlZlcnNpb24sIE1hcnNoYWwuU2l6ZU9mKF96dHJlYW0pKTsNCisgICAgICAgICAgICBpZiAocmV0dmFsICE9IDApDQorICAgICAgICAgICAgICAgIHRocm93IG5ldyBaTGliRXhjZXB0aW9uKHJldHZhbCwgIkNvdWxkIG5vdCBpbml0aWFsaXplIGRlZmxhdGVyIik7DQorDQorICAgICAgICAgICAgcmVzZXRPdXRwdXQoKTsNCisJCX0NCisNCisgICAgICAgIC8vLyA8c3VtbWFyeT4NCisgICAgICAgIC8vLyBBZGRzIG1vcmUgZGF0YSB0byB0aGUgY29kZWMgdG8gYmUgcHJvY2Vzc2VkLg0KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4NCisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iZGF0YSI+Qnl0ZSBhcnJheSBjb250YWluaW5nIHRoZSBkYXRhIHRvIGJlIGFkZGVkIHRvIHRoZSBjb2RlYzwvcGFyYW0+DQorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9Im9mZnNldCI+VGhlIGluZGV4IG9mIHRoZSBmaXJzdCBieXRlIHRvIGFkZCBmcm9tIDxjPmRhdGE8L2M+PC9wYXJhbT4NCisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iY291bnQiPlRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gYWRkPC9wYXJhbT4NCisgICAgICAgIC8vLyA8cmVtYXJrcz5BZGRpbmcgZGF0YSBtYXksIG9yIG1heSBub3QsIHJhaXNlIHRoZSA8Yz5EYXRhQXZhaWxhYmxlPC9jPiBldmVudDwvcmVtYXJrcz4NCisgICAgICAgIHB1YmxpYyBvdmVycmlkZSB2b2lkIEFkZChieXRlW10gZGF0YSwgaW50IG9mZnNldCwgaW50IGNvdW50KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlmIChkYXRhID09IG51bGwpIHRocm93IG5ldyBBcmd1bWVudE51bGxFeGNlcHRpb24oKTsNCisgICAgICAgICAgICBpZiAob2Zmc2V0IDwgMCB8fCBjb3VudCA8IDApIHRocm93IG5ldyBBcmd1bWVudE91dE9mUmFuZ2VFeGNlcHRpb24oKTsNCisgICAgICAgICAgICBpZiAoKG9mZnNldCtjb3VudCkgPiBkYXRhLkxlbmd0aCkgdGhyb3cgbmV3IEFyZ3VtZW50RXhjZXB0aW9uKCk7DQorDQorICAgICAgICAgICAgaW50IHRvdGFsID0gY291bnQ7DQorICAgICAgICAgICAgaW50IGlucHV0SW5kZXggPSBvZmZzZXQ7DQorICAgICAgICAgICAgaW50IGVyciA9IDA7DQorDQorICAgICAgICAgICAgd2hpbGUgKGVyciA+PSAwICYmIGlucHV0SW5kZXggPCB0b3RhbCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGNvcHlJbnB1dChkYXRhLCBpbnB1dEluZGV4LCBNYXRoLk1pbih0b3RhbCAtIGlucHV0SW5kZXgsIGtCdWZmZXJTaXplKSk7DQorICAgICAgICAgICAgICAgIHdoaWxlIChlcnIgPj0gMCAmJiBfenRyZWFtLmF2YWlsX2luID4gMCkNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgZXJyID0gZGVmbGF0ZShyZWYgX3p0cmVhbSwgKGludClGbHVzaFR5cGVzLk5vbmUpOw0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGVyciA9PSAwKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChfenRyZWFtLmF2YWlsX291dCA9PSAwKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT25EYXRhQXZhaWxhYmxlKCk7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IGRlZmxhdGUocmVmIF96dHJlYW0sIChpbnQpRmx1c2hUeXBlcy5Ob25lKTsNCisgICAgICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICBpbnB1dEluZGV4ICs9IChpbnQpX3p0cmVhbS50b3RhbF9pbjsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBzZXRDaGVja3N1bSggX3p0cmVhbS5hZGxlciApOw0KKyAgICAgICAgfQ0KKw0KKw0KKyAgICAgICAgLy8vIDxzdW1tYXJ5Pg0KKyAgICAgICAgLy8vIEZpbmlzaGVzIHVwIGFueSBwZW5kaW5nIGRhdGEgdGhhdCBuZWVkcyB0byBiZSBwcm9jZXNzZWQgYW5kIGhhbmRsZWQuDQorICAgICAgICAvLy8gPC9zdW1tYXJ5Pg0KKyAgICAgICAgcHVibGljIG92ZXJyaWRlIHZvaWQgRmluaXNoKCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBpbnQgZXJyOw0KKyAgICAgICAgICAgIGRvDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBlcnIgPSBkZWZsYXRlKHJlZiBfenRyZWFtLCAoaW50KUZsdXNoVHlwZXMuRmluaXNoKTsNCisgICAgICAgICAgICAgICAgT25EYXRhQXZhaWxhYmxlKCk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIHdoaWxlIChlcnIgPT0gMCk7DQorICAgICAgICAgICAgc2V0Q2hlY2tzdW0oIF96dHJlYW0uYWRsZXIgKTsNCisgICAgICAgICAgICBkZWZsYXRlUmVzZXQocmVmIF96dHJlYW0pOw0KKyAgICAgICAgICAgIHJlc2V0T3V0cHV0KCk7DQorICAgICAgICB9DQorDQorICAgICAgICAvLy8gPHN1bW1hcnk+DQorICAgICAgICAvLy8gQ2xvc2VzIHRoZSBpbnRlcm5hbCB6bGliIGRlZmxhdGUgc3RyZWFtDQorICAgICAgICAvLy8gPC9zdW1tYXJ5Pg0KKyAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIHZvaWQgQ2xlYW5VcCgpIHsgZGVmbGF0ZUVuZChyZWYgX3p0cmVhbSk7IH0NCisNCisgICAgfQ0KK30NCmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi9kb3R6bGliL0RvdFpMaWIvRG90WkxpYi5jcyBiL3NyYy9jb250cmliL2RvdHpsaWIvRG90WkxpYi9Eb3RaTGliLmNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMTg0YjQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29udHJpYi9kb3R6bGliL0RvdFpMaWIvRG90WkxpYi5jcwpAQCAtMCwwICsxLDI4OCBAQAorLy8NCisvLyCpIENvcHlyaWdodCBIZW5yaWsgUmF2biAyMDA0DQorLy8NCisvLyBVc2UsIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4NCisvLyAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkNCisvLw0KKw0KK3VzaW5nIFN5c3RlbTsNCit1c2luZyBTeXN0ZW0uSU87DQordXNpbmcgU3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzOw0KK3VzaW5nIFN5c3RlbS5UZXh0Ow0KKw0KKw0KK25hbWVzcGFjZSBEb3RaTGliDQorew0KKw0KKyAgICAjcmVnaW9uIEludGVybmFsIHR5cGVzDQorDQorICAgIC8vLyA8c3VtbWFyeT4NCisgICAgLy8vIERlZmluZXMgY29uc3RhbnRzIGZvciB0aGUgdmFyaW91cyBmbHVzaCB0eXBlcyB1c2VkIHdpdGggemxpYg0KKyAgICAvLy8gPC9zdW1tYXJ5Pg0KKyAgICBpbnRlcm5hbCBlbnVtIEZsdXNoVHlwZXMNCisgICAgew0KKyAgICAgICAgTm9uZSwgIFBhcnRpYWwsICBTeW5jLCAgRnVsbCwgIEZpbmlzaCwgIEJsb2NrDQorICAgIH0NCisNCisgICAgI3JlZ2lvbiBaU3RyZWFtIHN0cnVjdHVyZQ0KKyAgICAvLyBpbnRlcm5hbCBtYXBwaW5nIG9mIHRoZSB6bGliIHpzdHJlYW0gc3RydWN0dXJlIGZvciBtYXJzaGFsbGluZw0KKyAgICBbU3RydWN0TGF5b3V0QXR0cmlidXRlKExheW91dEtpbmQuU2VxdWVudGlhbCwgUGFjaz00LCBTaXplPTAsIENoYXJTZXQ9Q2hhclNldC5BbnNpKV0NCisgICAgaW50ZXJuYWwgc3RydWN0IFpTdHJlYW0NCisgICAgew0KKyAgICAgICAgcHVibGljIEludFB0ciBuZXh0X2luOw0KKyAgICAgICAgcHVibGljIHVpbnQgYXZhaWxfaW47DQorICAgICAgICBwdWJsaWMgdWludCB0b3RhbF9pbjsNCisNCisgICAgICAgIHB1YmxpYyBJbnRQdHIgbmV4dF9vdXQ7DQorICAgICAgICBwdWJsaWMgdWludCBhdmFpbF9vdXQ7DQorICAgICAgICBwdWJsaWMgdWludCB0b3RhbF9vdXQ7DQorDQorICAgICAgICBbTWFyc2hhbEFzKFVubWFuYWdlZFR5cGUuTFBTdHIpXQ0KKyAgICAgICAgc3RyaW5nIG1zZzsNCisgICAgICAgIHVpbnQgc3RhdGU7DQorDQorICAgICAgICB1aW50IHphbGxvYzsNCisgICAgICAgIHVpbnQgemZyZWU7DQorICAgICAgICB1aW50IG9wYXF1ZTsNCisNCisgICAgICAgIGludCBkYXRhX3R5cGU7DQorICAgICAgICBwdWJsaWMgdWludCBhZGxlcjsNCisgICAgICAgIHVpbnQgcmVzZXJ2ZWQ7DQorICAgIH0NCisNCisgICAgI2VuZHJlZ2lvbg0KKw0KKyAgICAjZW5kcmVnaW9uDQorDQorICAgICNyZWdpb24gUHVibGljIGVudW1zDQorICAgIC8vLyA8c3VtbWFyeT4NCisgICAgLy8vIERlZmluZXMgY29uc3RhbnRzIGZvciB0aGUgYXZhaWxhYmxlIGNvbXByZXNzaW9uIGxldmVscyBpbiB6bGliDQorICAgIC8vLyA8L3N1bW1hcnk+DQorICAgIHB1YmxpYyBlbnVtIENvbXByZXNzTGV2ZWwgOiBpbnQNCisgICAgew0KKyAgICAgICAgLy8vIDxzdW1tYXJ5Pg0KKyAgICAgICAgLy8vIFRoZSBkZWZhdWx0IGNvbXByZXNzaW9uIGxldmVsIHdpdGggYSByZWFzb25hYmxlIGNvbXByb21pc2UgYmV0d2VlbiBjb21wcmVzc2lvbiBhbmQgc3BlZWQNCisgICAgICAgIC8vLyA8L3N1bW1hcnk+DQorICAgICAgICBEZWZhdWx0ID0gLTEsDQorICAgICAgICAvLy8gPHN1bW1hcnk+DQorICAgICAgICAvLy8gTm8gY29tcHJlc3Npb24gYXQgYWxsLiBUaGUgZGF0YSBhcmUgcGFzc2VkIHN0cmFpZ2h0IHRocm91Z2guDQorICAgICAgICAvLy8gPC9zdW1tYXJ5Pg0KKyAgICAgICAgTm9uZSA9IDAsDQorICAgICAgICAvLy8gPHN1bW1hcnk+DQorICAgICAgICAvLy8gVGhlIG1heGltdW0gY29tcHJlc3Npb24gcmF0ZSBhdmFpbGFibGUuDQorICAgICAgICAvLy8gPC9zdW1tYXJ5Pg0KKyAgICAgICAgQmVzdCA9IDksDQorICAgICAgICAvLy8gPHN1bW1hcnk+DQorICAgICAgICAvLy8gVGhlIGZhc3Rlc3QgYXZhaWxhYmxlIGNvbXByZXNzaW9uIGxldmVsLg0KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4NCisgICAgICAgIEZhc3Rlc3QgPSAxDQorICAgIH0NCisgICAgI2VuZHJlZ2lvbg0KKw0KKyAgICAjcmVnaW9uIEV4Y2VwdGlvbiBjbGFzc2VzDQorICAgIC8vLyA8c3VtbWFyeT4NCisgICAgLy8vIFRoZSBleGNlcHRpb24gdGhhdCBpcyB0aHJvd24gd2hlbiBhbiBlcnJvciBvY2N1cnMgb24gdGhlIHpsaWIgZGxsDQorICAgIC8vLyA8L3N1bW1hcnk+DQorICAgIHB1YmxpYyBjbGFzcyBaTGliRXhjZXB0aW9uIDogQXBwbGljYXRpb25FeGNlcHRpb24NCisgICAgew0KKyAgICAgICAgLy8vIDxzdW1tYXJ5Pg0KKyAgICAgICAgLy8vIEluaXRpYWxpemVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSA8c2VlIGNyZWY9IlpMaWJFeGNlcHRpb24iLz4gY2xhc3Mgd2l0aCBhIHNwZWNpZmllZA0KKyAgICAgICAgLy8vIGVycm9yIG1lc3NhZ2UgYW5kIGVycm9yIGNvZGUNCisgICAgICAgIC8vLyA8L3N1bW1hcnk+DQorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImVycm9yQ29kZSI+VGhlIHpsaWIgZXJyb3IgY29kZSB0aGF0IGNhdXNlZCB0aGUgZXhjZXB0aW9uPC9wYXJhbT4NCisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ibXNnIj5BIG1lc3NhZ2UgdGhhdCAoaG9wZWZ1bGx5KSBkZXNjcmliZXMgdGhlIGVycm9yPC9wYXJhbT4NCisgICAgICAgIHB1YmxpYyBaTGliRXhjZXB0aW9uKGludCBlcnJvckNvZGUsIHN0cmluZyBtc2cpIDogYmFzZShTdHJpbmcuRm9ybWF0KCJaTGliIGVycm9yIHswfSB7MX0iLCBlcnJvckNvZGUsIG1zZykpDQorICAgICAgICB7DQorICAgICAgICB9DQorDQorICAgICAgICAvLy8gPHN1bW1hcnk+DQorICAgICAgICAvLy8gSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIDxzZWUgY3JlZj0iWkxpYkV4Y2VwdGlvbiIvPiBjbGFzcyB3aXRoIGEgc3BlY2lmaWVkDQorICAgICAgICAvLy8gZXJyb3IgY29kZQ0KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4NCisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iZXJyb3JDb2RlIj5UaGUgemxpYiBlcnJvciBjb2RlIHRoYXQgY2F1c2VkIHRoZSBleGNlcHRpb248L3BhcmFtPg0KKyAgICAgICAgcHVibGljIFpMaWJFeGNlcHRpb24oaW50IGVycm9yQ29kZSkgOiBiYXNlKFN0cmluZy5Gb3JtYXQoIlpMaWIgZXJyb3IgezB9IiwgZXJyb3JDb2RlKSkNCisgICAgICAgIHsNCisgICAgICAgIH0NCisgICAgfQ0KKyAgICAjZW5kcmVnaW9uDQorDQorICAgICNyZWdpb24gSW50ZXJmYWNlcw0KKw0KKyAgICAvLy8gPHN1bW1hcnk+DQorICAgIC8vLyBEZWNsYXJlcyBtZXRob2RzIGFuZCBwcm9wZXJ0aWVzIHRoYXQgZW5hYmxlcyBhIHJ1bm5pbmcgY2hlY2tzdW0gdG8gYmUgY2FsY3VsYXRlZA0KKyAgICAvLy8gPC9zdW1tYXJ5Pg0KKyAgICBwdWJsaWMgaW50ZXJmYWNlIENoZWNrc3VtR2VuZXJhdG9yDQorICAgIHsNCisgICAgICAgIC8vLyA8c3VtbWFyeT4NCisgICAgICAgIC8vLyBHZXRzIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBjaGVja3N1bQ0KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4NCisgICAgICAgIHVpbnQgVmFsdWUgeyBnZXQ7IH0NCisNCisgICAgICAgIC8vLyA8c3VtbWFyeT4NCisgICAgICAgIC8vLyBDbGVhcnMgdGhlIGN1cnJlbnQgY2hlY2tzdW0gdG8gMA0KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4NCisgICAgICAgIHZvaWQgUmVzZXQoKTsNCisNCisgICAgICAgIC8vLyA8c3VtbWFyeT4NCisgICAgICAgIC8vLyBVcGRhdGVzIHRoZSBjdXJyZW50IGNoZWNrc3VtIHdpdGggYW4gYXJyYXkgb2YgYnl0ZXMNCisgICAgICAgIC8vLyA8L3N1bW1hcnk+DQorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImRhdGEiPlRoZSBkYXRhIHRvIHVwZGF0ZSB0aGUgY2hlY2tzdW0gd2l0aDwvcGFyYW0+DQorICAgICAgICB2b2lkIFVwZGF0ZShieXRlW10gZGF0YSk7DQorDQorICAgICAgICAvLy8gPHN1bW1hcnk+DQorICAgICAgICAvLy8gVXBkYXRlcyB0aGUgY3VycmVudCBjaGVja3N1bSB3aXRoIHBhcnQgb2YgYW4gYXJyYXkgb2YgYnl0ZXMNCisgICAgICAgIC8vLyA8L3N1bW1hcnk+DQorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImRhdGEiPlRoZSBkYXRhIHRvIHVwZGF0ZSB0aGUgY2hlY2tzdW0gd2l0aDwvcGFyYW0+DQorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9Im9mZnNldCI+V2hlcmUgaW4gPGM+ZGF0YTwvYz4gdG8gc3RhcnQgdXBkYXRpbmc8L3BhcmFtPg0KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJjb3VudCI+VGhlIG51bWJlciBvZiBieXRlcyBmcm9tIDxjPmRhdGE8L2M+IHRvIHVzZTwvcGFyYW0+DQorICAgICAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcmd1bWVudEV4Y2VwdGlvbiI+VGhlIHN1bSBvZiBvZmZzZXQgYW5kIGNvdW50IGlzIGxhcmdlciB0aGFuIHRoZSBsZW5ndGggb2YgPGM+ZGF0YTwvYz48L2V4Y2VwdGlvbj4NCisgICAgICAgIC8vLyA8ZXhjZXB0aW9uIGNyZWY9IkFyZ3VtZW50TnVsbEV4Y2VwdGlvbiI+PGM+ZGF0YTwvYz4gaXMgYSBudWxsIHJlZmVyZW5jZTwvZXhjZXB0aW9uPg0KKyAgICAgICAgLy8vIDxleGNlcHRpb24gY3JlZj0iQXJndW1lbnRPdXRPZlJhbmdlRXhjZXB0aW9uIj5PZmZzZXQgb3IgY291bnQgaXMgbmVnYXRpdmUuPC9leGNlcHRpb24+DQorICAgICAgICB2b2lkIFVwZGF0ZShieXRlW10gZGF0YSwgaW50IG9mZnNldCwgaW50IGNvdW50KTsNCisNCisgICAgICAgIC8vLyA8c3VtbWFyeT4NCisgICAgICAgIC8vLyBVcGRhdGVzIHRoZSBjdXJyZW50IGNoZWNrc3VtIHdpdGggdGhlIGRhdGEgZnJvbSBhIHN0cmluZw0KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4NCisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iZGF0YSI+VGhlIHN0cmluZyB0byB1cGRhdGUgdGhlIGNoZWNrc3VtIHdpdGg8L3BhcmFtPg0KKyAgICAgICAgLy8vIDxyZW1hcmtzPlRoZSBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIGNvbnZlcnRlZCBieSB0aGUgVVRGLTggZW5jb2Rpbmc8L3JlbWFya3M+DQorICAgICAgICB2b2lkIFVwZGF0ZShzdHJpbmcgZGF0YSk7DQorDQorICAgICAgICAvLy8gPHN1bW1hcnk+DQorICAgICAgICAvLy8gVXBkYXRlcyB0aGUgY3VycmVudCBjaGVja3N1bSB3aXRoIHRoZSBkYXRhIGZyb20gYSBzdHJpbmcsIHVzaW5nIGEgc3BlY2lmaWMgZW5jb2RpbmcNCisgICAgICAgIC8vLyA8L3N1bW1hcnk+DQorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImRhdGEiPlRoZSBzdHJpbmcgdG8gdXBkYXRlIHRoZSBjaGVja3N1bSB3aXRoPC9wYXJhbT4NCisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iZW5jb2RpbmciPlRoZSBlbmNvZGluZyB0byB1c2U8L3BhcmFtPg0KKyAgICAgICAgdm9pZCBVcGRhdGUoc3RyaW5nIGRhdGEsIEVuY29kaW5nIGVuY29kaW5nKTsNCisgICAgfQ0KKw0KKw0KKyAgICAvLy8gPHN1bW1hcnk+DQorICAgIC8vLyBSZXByZXNlbnRzIHRoZSBtZXRob2QgdGhhdCB3aWxsIGJlIGNhbGxlZCBmcm9tIGEgY29kZWMgd2hlbiBuZXcgZGF0YQ0KKyAgICAvLy8gYXJlIGF2YWlsYWJsZS4NCisgICAgLy8vIDwvc3VtbWFyeT4NCisgICAgLy8vIDxwYXJhbXJlZiBuYW1lPSJkYXRhIj5UaGUgYnl0ZSBhcnJheSBjb250YWluaW5nIHRoZSBwcm9jZXNzZWQgZGF0YTwvcGFyYW1yZWY+DQorICAgIC8vLyA8cGFyYW1yZWYgbmFtZT0ic3RhcnRJbmRleCI+VGhlIGluZGV4IG9mIHRoZSBmaXJzdCBwcm9jZXNzZWQgYnl0ZSBpbiA8Yz5kYXRhPC9jPjwvcGFyYW1yZWY+DQorICAgIC8vLyA8cGFyYW1yZWYgbmFtZT0iY291bnQiPlRoZSBudW1iZXIgb2YgcHJvY2Vzc2VkIGJ5dGVzIGF2YWlsYWJsZTwvcGFyYW1yZWY+DQorICAgIC8vLyA8cmVtYXJrcz5PbiByZXR1cm4gZnJvbSB0aGlzIG1ldGhvZCwgdGhlIGRhdGEgbWF5IGJlIG92ZXJ3cml0dGVuLCBzbyBncmFiIGl0IHdoaWxlIHlvdSBjYW4uDQorICAgIC8vLyBZb3UgY2Fubm90IGFzc3VtZSB0aGF0IHN0YXJ0SW5kZXggd2lsbCBiZSB6ZXJvLg0KKyAgICAvLy8gPC9yZW1hcmtzPg0KKyAgICBwdWJsaWMgZGVsZWdhdGUgdm9pZCBEYXRhQXZhaWxhYmxlSGFuZGxlcihieXRlW10gZGF0YSwgaW50IHN0YXJ0SW5kZXgsIGludCBjb3VudCk7DQorDQorICAgIC8vLyA8c3VtbWFyeT4NCisgICAgLy8vIERlY2xhcmVzIG1ldGhvZHMgYW5kIGV2ZW50cyBmb3IgaW1wbGVtZW50aW5nIGNvbXByZXNzb3JzL2RlY29tcHJlc3NvcnMNCisgICAgLy8vIDwvc3VtbWFyeT4NCisgICAgcHVibGljIGludGVyZmFjZSBDb2RlYw0KKyAgICB7DQorICAgICAgICAvLy8gPHN1bW1hcnk+DQorICAgICAgICAvLy8gT2NjdXJzIHdoZW4gbW9yZSBwcm9jZXNzZWQgZGF0YSBhcmUgYXZhaWxhYmxlLg0KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4NCisgICAgICAgIGV2ZW50IERhdGFBdmFpbGFibGVIYW5kbGVyIERhdGFBdmFpbGFibGU7DQorDQorICAgICAgICAvLy8gPHN1bW1hcnk+DQorICAgICAgICAvLy8gQWRkcyBtb3JlIGRhdGEgdG8gdGhlIGNvZGVjIHRvIGJlIHByb2Nlc3NlZC4NCisgICAgICAgIC8vLyA8L3N1bW1hcnk+DQorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImRhdGEiPkJ5dGUgYXJyYXkgY29udGFpbmluZyB0aGUgZGF0YSB0byBiZSBhZGRlZCB0byB0aGUgY29kZWM8L3BhcmFtPg0KKyAgICAgICAgLy8vIDxyZW1hcmtzPkFkZGluZyBkYXRhIG1heSwgb3IgbWF5IG5vdCwgcmFpc2UgdGhlIDxjPkRhdGFBdmFpbGFibGU8L2M+IGV2ZW50PC9yZW1hcmtzPg0KKyAgICAgICAgdm9pZCBBZGQoYnl0ZVtdIGRhdGEpOw0KKw0KKyAgICAgICAgLy8vIDxzdW1tYXJ5Pg0KKyAgICAgICAgLy8vIEFkZHMgbW9yZSBkYXRhIHRvIHRoZSBjb2RlYyB0byBiZSBwcm9jZXNzZWQuDQorICAgICAgICAvLy8gPC9zdW1tYXJ5Pg0KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJkYXRhIj5CeXRlIGFycmF5IGNvbnRhaW5pbmcgdGhlIGRhdGEgdG8gYmUgYWRkZWQgdG8gdGhlIGNvZGVjPC9wYXJhbT4NCisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ib2Zmc2V0Ij5UaGUgaW5kZXggb2YgdGhlIGZpcnN0IGJ5dGUgdG8gYWRkIGZyb20gPGM+ZGF0YTwvYz48L3BhcmFtPg0KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJjb3VudCI+VGhlIG51bWJlciBvZiBieXRlcyB0byBhZGQ8L3BhcmFtPg0KKyAgICAgICAgLy8vIDxyZW1hcmtzPkFkZGluZyBkYXRhIG1heSwgb3IgbWF5IG5vdCwgcmFpc2UgdGhlIDxjPkRhdGFBdmFpbGFibGU8L2M+IGV2ZW50PC9yZW1hcmtzPg0KKyAgICAgICAgdm9pZCBBZGQoYnl0ZVtdIGRhdGEsIGludCBvZmZzZXQsIGludCBjb3VudCk7DQorDQorICAgICAgICAvLy8gPHN1bW1hcnk+DQorICAgICAgICAvLy8gRmluaXNoZXMgdXAgYW55IHBlbmRpbmcgZGF0YSB0aGF0IG5lZWRzIHRvIGJlIHByb2Nlc3NlZCBhbmQgaGFuZGxlZC4NCisgICAgICAgIC8vLyA8L3N1bW1hcnk+DQorICAgICAgICB2b2lkIEZpbmlzaCgpOw0KKw0KKyAgICAgICAgLy8vIDxzdW1tYXJ5Pg0KKyAgICAgICAgLy8vIEdldHMgdGhlIGNoZWNrc3VtIG9mIHRoZSBkYXRhIHRoYXQgaGFzIGJlZW4gYWRkZWQgc28gZmFyDQorICAgICAgICAvLy8gPC9zdW1tYXJ5Pg0KKyAgICAgICAgdWludCBDaGVja3N1bSB7IGdldDsgfQ0KKw0KKw0KKyAgICB9DQorDQorICAgICNlbmRyZWdpb24NCisNCisgICAgI3JlZ2lvbiBDbGFzc2VzDQorICAgIC8vLyA8c3VtbWFyeT4NCisgICAgLy8vIEVuY2Fwc3VsYXRlcyBnZW5lcmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBaTGliIGxpYnJhcnkNCisgICAgLy8vIDwvc3VtbWFyeT4NCisgICAgcHVibGljIGNsYXNzIEluZm8NCisgICAgew0KKyAgICAgICAgI3JlZ2lvbiBETEwgaW1wb3J0cw0KKyAgICAgICAgW0RsbEltcG9ydCgiWkxJQjEuZGxsIiwgQ2FsbGluZ0NvbnZlbnRpb249Q2FsbGluZ0NvbnZlbnRpb24uQ2RlY2wpXQ0KKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZXh0ZXJuIHVpbnQgemxpYkNvbXBpbGVGbGFncygpOw0KKw0KKyAgICAgICAgW0RsbEltcG9ydCgiWkxJQjEuZGxsIiwgQ2FsbGluZ0NvbnZlbnRpb249Q2FsbGluZ0NvbnZlbnRpb24uQ2RlY2wpXQ0KKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZXh0ZXJuIHN0cmluZyB6bGliVmVyc2lvbigpOw0KKyAgICAgICAgI2VuZHJlZ2lvbg0KKw0KKyAgICAgICAgI3JlZ2lvbiBQcml2YXRlIHN0dWZmDQorICAgICAgICBwcml2YXRlIHVpbnQgX2ZsYWdzOw0KKw0KKyAgICAgICAgLy8gaGVscGVyIGZ1bmN0aW9uIHRoYXQgdW5wYWNrcyBhIGJpdHNpemUgbWFzaw0KKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGJpdFNpemUodWludCBiaXRzKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHN3aXRjaCAoYml0cykNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIDE2Ow0KKyAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiAzMjsNCisgICAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gNjQ7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIHJldHVybiAtMTsNCisgICAgICAgIH0NCisgICAgICAgICNlbmRyZWdpb24NCisNCisgICAgICAgIC8vLyA8c3VtbWFyeT4NCisgICAgICAgIC8vLyBDb25zdHJ1Y3RzIGFuIGluc3RhbmNlIG9mIHRoZSA8Yz5JbmZvPC9jPiBjbGFzcy4NCisgICAgICAgIC8vLyA8L3N1bW1hcnk+DQorICAgICAgICBwdWJsaWMgSW5mbygpDQorICAgICAgICB7DQorICAgICAgICAgICAgX2ZsYWdzID0gemxpYkNvbXBpbGVGbGFncygpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgLy8vIDxzdW1tYXJ5Pg0KKyAgICAgICAgLy8vIFRydWUgaWYgdGhlIGxpYnJhcnkgaXMgY29tcGlsZWQgd2l0aCBkZWJ1ZyBpbmZvDQorICAgICAgICAvLy8gPC9zdW1tYXJ5Pg0KKyAgICAgICAgcHVibGljIGJvb2wgSGFzRGVidWdJbmZvIHsgZ2V0IHsgcmV0dXJuIDAgIT0gKF9mbGFncyAmIDB4MTAwKTsgfSB9DQorDQorICAgICAgICAvLy8gPHN1bW1hcnk+DQorICAgICAgICAvLy8gVHJ1ZSBpZiB0aGUgbGlicmFyeSBpcyBjb21waWxlZCB3aXRoIGFzc2VtYmx5IG9wdGltaXphdGlvbnMNCisgICAgICAgIC8vLyA8L3N1bW1hcnk+DQorICAgICAgICBwdWJsaWMgYm9vbCBVc2VzQXNzZW1ibHlDb2RlIHsgZ2V0IHsgcmV0dXJuIDAgIT0gKF9mbGFncyAmIDB4MjAwKTsgfSB9DQorDQorICAgICAgICAvLy8gPHN1bW1hcnk+DQorICAgICAgICAvLy8gR2V0cyB0aGUgc2l6ZSBvZiB0aGUgdW5zaWduZWQgaW50IHRoYXQgd2FzIGNvbXBpbGVkIGludG8gWmxpYg0KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4NCisgICAgICAgIHB1YmxpYyBpbnQgU2l6ZU9mVUludCB7IGdldCB7IHJldHVybiBiaXRTaXplKF9mbGFncyAmIDMpOyB9IH0NCisNCisgICAgICAgIC8vLyA8c3VtbWFyeT4NCisgICAgICAgIC8vLyBHZXRzIHRoZSBzaXplIG9mIHRoZSB1bnNpZ25lZCBsb25nIHRoYXQgd2FzIGNvbXBpbGVkIGludG8gWmxpYg0KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4NCisgICAgICAgIHB1YmxpYyBpbnQgU2l6ZU9mVUxvbmcgeyBnZXQgeyByZXR1cm4gYml0U2l6ZSgoX2ZsYWdzID4+IDIpICYgMyk7IH0gfQ0KKw0KKyAgICAgICAgLy8vIDxzdW1tYXJ5Pg0KKyAgICAgICAgLy8vIEdldHMgdGhlIHNpemUgb2YgdGhlIHBvaW50ZXJzIHRoYXQgd2VyZSBjb21waWxlZCBpbnRvIFpsaWINCisgICAgICAgIC8vLyA8L3N1bW1hcnk+DQorICAgICAgICBwdWJsaWMgaW50IFNpemVPZlBvaW50ZXIgeyBnZXQgeyByZXR1cm4gYml0U2l6ZSgoX2ZsYWdzID4+IDQpICYgMyk7IH0gfQ0KKw0KKyAgICAgICAgLy8vIDxzdW1tYXJ5Pg0KKyAgICAgICAgLy8vIEdldHMgdGhlIHNpemUgb2YgdGhlIHpfb2ZmX3QgdHlwZSB0aGF0IHdhcyBjb21waWxlZCBpbnRvIFpsaWINCisgICAgICAgIC8vLyA8L3N1bW1hcnk+DQorICAgICAgICBwdWJsaWMgaW50IFNpemVPZk9mZnNldCB7IGdldCB7IHJldHVybiBiaXRTaXplKChfZmxhZ3MgPj4gNikgJiAzKTsgfSB9DQorDQorICAgICAgICAvLy8gPHN1bW1hcnk+DQorICAgICAgICAvLy8gR2V0cyB0aGUgdmVyc2lvbiBvZiBaTGliIGFzIGEgc3RyaW5nLCBlLmcuICIxLjIuMSINCisgICAgICAgIC8vLyA8L3N1bW1hcnk+DQorICAgICAgICBwdWJsaWMgc3RhdGljIHN0cmluZyBWZXJzaW9uIHsgZ2V0IHsgcmV0dXJuIHpsaWJWZXJzaW9uKCk7IH0gfQ0KKyAgICB9DQorDQorICAgICNlbmRyZWdpb24NCisNCit9DQpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvZG90emxpYi9Eb3RaTGliL0RvdFpMaWIuY3Nwcm9qIGIvc3JjL2NvbnRyaWIvZG90emxpYi9Eb3RaTGliL0RvdFpMaWIuY3Nwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZWViODUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29udHJpYi9kb3R6bGliL0RvdFpMaWIvRG90WkxpYi5jc3Byb2oKQEAgLTAsMCArMSwxNDEgQEAKKzxWaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KKyAgICA8Q1NIQVJQDQorICAgICAgICBQcm9qZWN0VHlwZSA9ICJMb2NhbCINCisgICAgICAgIFByb2R1Y3RWZXJzaW9uID0gIjcuMTAuMzA3NyINCisgICAgICAgIFNjaGVtYVZlcnNpb24gPSAiMi4wIg0KKyAgICAgICAgUHJvamVjdEd1aWQgPSAie0JCMUVFMEIxLTE4MDgtNDZDQi1CNzg2LTk0OUQ5MTExN0ZDNX0iDQorICAgID4NCisgICAgICAgIDxCdWlsZD4NCisgICAgICAgICAgICA8U2V0dGluZ3MNCisgICAgICAgICAgICAgICAgQXBwbGljYXRpb25JY29uID0gIiINCisgICAgICAgICAgICAgICAgQXNzZW1ibHlLZXlDb250YWluZXJOYW1lID0gIiINCisgICAgICAgICAgICAgICAgQXNzZW1ibHlOYW1lID0gIkRvdFpMaWIiDQorICAgICAgICAgICAgICAgIEFzc2VtYmx5T3JpZ2luYXRvcktleUZpbGUgPSAiIg0KKyAgICAgICAgICAgICAgICBEZWZhdWx0Q2xpZW50U2NyaXB0ID0gIkpTY3JpcHQiDQorICAgICAgICAgICAgICAgIERlZmF1bHRIVE1MUGFnZUxheW91dCA9ICJHcmlkIg0KKyAgICAgICAgICAgICAgICBEZWZhdWx0VGFyZ2V0U2NoZW1hID0gIklFNTAiDQorICAgICAgICAgICAgICAgIERlbGF5U2lnbiA9ICJmYWxzZSINCisgICAgICAgICAgICAgICAgT3V0cHV0VHlwZSA9ICJMaWJyYXJ5Ig0KKyAgICAgICAgICAgICAgICBQcmVCdWlsZEV2ZW50ID0gIiINCisgICAgICAgICAgICAgICAgUG9zdEJ1aWxkRXZlbnQgPSAiIg0KKyAgICAgICAgICAgICAgICBSb290TmFtZXNwYWNlID0gIkRvdFpMaWIiDQorICAgICAgICAgICAgICAgIFJ1blBvc3RCdWlsZEV2ZW50ID0gIk9uQnVpbGRTdWNjZXNzIg0KKyAgICAgICAgICAgICAgICBTdGFydHVwT2JqZWN0ID0gIiINCisgICAgICAgICAgICA+DQorICAgICAgICAgICAgICAgIDxDb25maWcNCisgICAgICAgICAgICAgICAgICAgIE5hbWUgPSAiRGVidWciDQorICAgICAgICAgICAgICAgICAgICBBbGxvd1Vuc2FmZUJsb2NrcyA9ICJmYWxzZSINCisgICAgICAgICAgICAgICAgICAgIEJhc2VBZGRyZXNzID0gIjI4NTIxMjY3MiINCisgICAgICAgICAgICAgICAgICAgIENoZWNrRm9yT3ZlcmZsb3dVbmRlcmZsb3cgPSAiZmFsc2UiDQorICAgICAgICAgICAgICAgICAgICBDb25maWd1cmF0aW9uT3ZlcnJpZGVGaWxlID0gIiINCisgICAgICAgICAgICAgICAgICAgIERlZmluZUNvbnN0YW50cyA9ICJERUJVRztUUkFDRSINCisgICAgICAgICAgICAgICAgICAgIERvY3VtZW50YXRpb25GaWxlID0gImRvY3NcRG90WkxpYi54bWwiDQorICAgICAgICAgICAgICAgICAgICBEZWJ1Z1N5bWJvbHMgPSAidHJ1ZSINCisgICAgICAgICAgICAgICAgICAgIEZpbGVBbGlnbm1lbnQgPSAiNDA5NiINCisgICAgICAgICAgICAgICAgICAgIEluY3JlbWVudGFsQnVpbGQgPSAiZmFsc2UiDQorICAgICAgICAgICAgICAgICAgICBOb1N0ZExpYiA9ICJmYWxzZSINCisgICAgICAgICAgICAgICAgICAgIE5vV2FybiA9ICIxNTkxIg0KKyAgICAgICAgICAgICAgICAgICAgT3B0aW1pemUgPSAiZmFsc2UiDQorICAgICAgICAgICAgICAgICAgICBPdXRwdXRQYXRoID0gImJpblxEZWJ1Z1wiDQorICAgICAgICAgICAgICAgICAgICBSZWdpc3RlckZvckNvbUludGVyb3AgPSAiZmFsc2UiDQorICAgICAgICAgICAgICAgICAgICBSZW1vdmVJbnRlZ2VyQ2hlY2tzID0gImZhbHNlIg0KKyAgICAgICAgICAgICAgICAgICAgVHJlYXRXYXJuaW5nc0FzRXJyb3JzID0gImZhbHNlIg0KKyAgICAgICAgICAgICAgICAgICAgV2FybmluZ0xldmVsID0gIjQiDQorICAgICAgICAgICAgICAgIC8+DQorICAgICAgICAgICAgICAgIDxDb25maWcNCisgICAgICAgICAgICAgICAgICAgIE5hbWUgPSAiUmVsZWFzZSINCisgICAgICAgICAgICAgICAgICAgIEFsbG93VW5zYWZlQmxvY2tzID0gImZhbHNlIg0KKyAgICAgICAgICAgICAgICAgICAgQmFzZUFkZHJlc3MgPSAiMjg1MjEyNjcyIg0KKyAgICAgICAgICAgICAgICAgICAgQ2hlY2tGb3JPdmVyZmxvd1VuZGVyZmxvdyA9ICJmYWxzZSINCisgICAgICAgICAgICAgICAgICAgIENvbmZpZ3VyYXRpb25PdmVycmlkZUZpbGUgPSAiIg0KKyAgICAgICAgICAgICAgICAgICAgRGVmaW5lQ29uc3RhbnRzID0gIlRSQUNFIg0KKyAgICAgICAgICAgICAgICAgICAgRG9jdW1lbnRhdGlvbkZpbGUgPSAiZG9jc1xEb3RaTGliLnhtbCINCisgICAgICAgICAgICAgICAgICAgIERlYnVnU3ltYm9scyA9ICJmYWxzZSINCisgICAgICAgICAgICAgICAgICAgIEZpbGVBbGlnbm1lbnQgPSAiNDA5NiINCisgICAgICAgICAgICAgICAgICAgIEluY3JlbWVudGFsQnVpbGQgPSAiZmFsc2UiDQorICAgICAgICAgICAgICAgICAgICBOb1N0ZExpYiA9ICJmYWxzZSINCisgICAgICAgICAgICAgICAgICAgIE5vV2FybiA9ICIiDQorICAgICAgICAgICAgICAgICAgICBPcHRpbWl6ZSA9ICJ0cnVlIg0KKyAgICAgICAgICAgICAgICAgICAgT3V0cHV0UGF0aCA9ICJiaW5cUmVsZWFzZVwiDQorICAgICAgICAgICAgICAgICAgICBSZWdpc3RlckZvckNvbUludGVyb3AgPSAiZmFsc2UiDQorICAgICAgICAgICAgICAgICAgICBSZW1vdmVJbnRlZ2VyQ2hlY2tzID0gImZhbHNlIg0KKyAgICAgICAgICAgICAgICAgICAgVHJlYXRXYXJuaW5nc0FzRXJyb3JzID0gImZhbHNlIg0KKyAgICAgICAgICAgICAgICAgICAgV2FybmluZ0xldmVsID0gIjQiDQorICAgICAgICAgICAgICAgIC8+DQorICAgICAgICAgICAgPC9TZXR0aW5ncz4NCisgICAgICAgICAgICA8UmVmZXJlbmNlcz4NCisgICAgICAgICAgICAgICAgPFJlZmVyZW5jZQ0KKyAgICAgICAgICAgICAgICAgICAgTmFtZSA9ICJTeXN0ZW0iDQorICAgICAgICAgICAgICAgICAgICBBc3NlbWJseU5hbWUgPSAiU3lzdGVtIg0KKyAgICAgICAgICAgICAgICAgICAgSGludFBhdGggPSAiQzpcV0lOTlRcTWljcm9zb2Z0Lk5FVFxGcmFtZXdvcmtcdjEuMS40MzIyXFN5c3RlbS5kbGwiDQorICAgICAgICAgICAgICAgIC8+DQorICAgICAgICAgICAgICAgIDxSZWZlcmVuY2UNCisgICAgICAgICAgICAgICAgICAgIE5hbWUgPSAiU3lzdGVtLkRhdGEiDQorICAgICAgICAgICAgICAgICAgICBBc3NlbWJseU5hbWUgPSAiU3lzdGVtLkRhdGEiDQorICAgICAgICAgICAgICAgICAgICBIaW50UGF0aCA9ICJDOlxXSU5OVFxNaWNyb3NvZnQuTkVUXEZyYW1ld29ya1x2MS4xLjQzMjJcU3lzdGVtLkRhdGEuZGxsIg0KKyAgICAgICAgICAgICAgICAvPg0KKyAgICAgICAgICAgICAgICA8UmVmZXJlbmNlDQorICAgICAgICAgICAgICAgICAgICBOYW1lID0gIlN5c3RlbS5YTUwiDQorICAgICAgICAgICAgICAgICAgICBBc3NlbWJseU5hbWUgPSAiU3lzdGVtLlhtbCINCisgICAgICAgICAgICAgICAgICAgIEhpbnRQYXRoID0gIkM6XFdJTk5UXE1pY3Jvc29mdC5ORVRcRnJhbWV3b3JrXHYxLjEuNDMyMlxTeXN0ZW0uWE1MLmRsbCINCisgICAgICAgICAgICAgICAgLz4NCisgICAgICAgICAgICAgICAgPFJlZmVyZW5jZQ0KKyAgICAgICAgICAgICAgICAgICAgTmFtZSA9ICJudW5pdC5mcmFtZXdvcmsiDQorICAgICAgICAgICAgICAgICAgICBBc3NlbWJseU5hbWUgPSAibnVuaXQuZnJhbWV3b3JrIg0KKyAgICAgICAgICAgICAgICAgICAgSGludFBhdGggPSAiRTpcYXBwc1xOVW5pdCBWMi4xXFxiaW5cbnVuaXQuZnJhbWV3b3JrLmRsbCINCisgICAgICAgICAgICAgICAgICAgIEFzc2VtYmx5Rm9sZGVyS2V5ID0gImhrbG1cZG5cbnVuaXQuZnJhbWV3b3JrIg0KKyAgICAgICAgICAgICAgICAvPg0KKyAgICAgICAgICAgIDwvUmVmZXJlbmNlcz4NCisgICAgICAgIDwvQnVpbGQ+DQorICAgICAgICA8RmlsZXM+DQorICAgICAgICAgICAgPEluY2x1ZGU+DQorICAgICAgICAgICAgICAgIDxGaWxlDQorICAgICAgICAgICAgICAgICAgICBSZWxQYXRoID0gIkFzc2VtYmx5SW5mby5jcyINCisgICAgICAgICAgICAgICAgICAgIFN1YlR5cGUgPSAiQ29kZSINCisgICAgICAgICAgICAgICAgICAgIEJ1aWxkQWN0aW9uID0gIkNvbXBpbGUiDQorICAgICAgICAgICAgICAgIC8+DQorICAgICAgICAgICAgICAgIDxGaWxlDQorICAgICAgICAgICAgICAgICAgICBSZWxQYXRoID0gIkNoZWNrc3VtSW1wbC5jcyINCisgICAgICAgICAgICAgICAgICAgIFN1YlR5cGUgPSAiQ29kZSINCisgICAgICAgICAgICAgICAgICAgIEJ1aWxkQWN0aW9uID0gIkNvbXBpbGUiDQorICAgICAgICAgICAgICAgIC8+DQorICAgICAgICAgICAgICAgIDxGaWxlDQorICAgICAgICAgICAgICAgICAgICBSZWxQYXRoID0gIkNpcmN1bGFyQnVmZmVyLmNzIg0KKyAgICAgICAgICAgICAgICAgICAgU3ViVHlwZSA9ICJDb2RlIg0KKyAgICAgICAgICAgICAgICAgICAgQnVpbGRBY3Rpb24gPSAiQ29tcGlsZSINCisgICAgICAgICAgICAgICAgLz4NCisgICAgICAgICAgICAgICAgPEZpbGUNCisgICAgICAgICAgICAgICAgICAgIFJlbFBhdGggPSAiQ29kZWNCYXNlLmNzIg0KKyAgICAgICAgICAgICAgICAgICAgU3ViVHlwZSA9ICJDb2RlIg0KKyAgICAgICAgICAgICAgICAgICAgQnVpbGRBY3Rpb24gPSAiQ29tcGlsZSINCisgICAgICAgICAgICAgICAgLz4NCisgICAgICAgICAgICAgICAgPEZpbGUNCisgICAgICAgICAgICAgICAgICAgIFJlbFBhdGggPSAiRGVmbGF0ZXIuY3MiDQorICAgICAgICAgICAgICAgICAgICBTdWJUeXBlID0gIkNvZGUiDQorICAgICAgICAgICAgICAgICAgICBCdWlsZEFjdGlvbiA9ICJDb21waWxlIg0KKyAgICAgICAgICAgICAgICAvPg0KKyAgICAgICAgICAgICAgICA8RmlsZQ0KKyAgICAgICAgICAgICAgICAgICAgUmVsUGF0aCA9ICJEb3RaTGliLmNzIg0KKyAgICAgICAgICAgICAgICAgICAgU3ViVHlwZSA9ICJDb2RlIg0KKyAgICAgICAgICAgICAgICAgICAgQnVpbGRBY3Rpb24gPSAiQ29tcGlsZSINCisgICAgICAgICAgICAgICAgLz4NCisgICAgICAgICAgICAgICAgPEZpbGUNCisgICAgICAgICAgICAgICAgICAgIFJlbFBhdGggPSAiR1ppcFN0cmVhbS5jcyINCisgICAgICAgICAgICAgICAgICAgIFN1YlR5cGUgPSAiQ29kZSINCisgICAgICAgICAgICAgICAgICAgIEJ1aWxkQWN0aW9uID0gIkNvbXBpbGUiDQorICAgICAgICAgICAgICAgIC8+DQorICAgICAgICAgICAgICAgIDxGaWxlDQorICAgICAgICAgICAgICAgICAgICBSZWxQYXRoID0gIkluZmxhdGVyLmNzIg0KKyAgICAgICAgICAgICAgICAgICAgU3ViVHlwZSA9ICJDb2RlIg0KKyAgICAgICAgICAgICAgICAgICAgQnVpbGRBY3Rpb24gPSAiQ29tcGlsZSINCisgICAgICAgICAgICAgICAgLz4NCisgICAgICAgICAgICAgICAgPEZpbGUNCisgICAgICAgICAgICAgICAgICAgIFJlbFBhdGggPSAiVW5pdFRlc3RzLmNzIg0KKyAgICAgICAgICAgICAgICAgICAgU3ViVHlwZSA9ICJDb2RlIg0KKyAgICAgICAgICAgICAgICAgICAgQnVpbGRBY3Rpb24gPSAiQ29tcGlsZSINCisgICAgICAgICAgICAgICAgLz4NCisgICAgICAgICAgICA8L0luY2x1ZGU+DQorICAgICAgICA8L0ZpbGVzPg0KKyAgICA8L0NTSEFSUD4NCis8L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQorDQpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvZG90emxpYi9Eb3RaTGliL0daaXBTdHJlYW0uY3MgYi9zcmMvY29udHJpYi9kb3R6bGliL0RvdFpMaWIvR1ppcFN0cmVhbS5jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTYxMzAwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbnRyaWIvZG90emxpYi9Eb3RaTGliL0daaXBTdHJlYW0uY3MKQEAgLTAsMCArMSwzMDEgQEAKKy8vDQorLy8gqSBDb3B5cmlnaHQgSGVucmlrIFJhdm4gMjAwNA0KKy8vDQorLy8gVXNlLCBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBhcmUgc3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuDQorLy8gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpDQorLy8NCisNCit1c2luZyBTeXN0ZW07DQordXNpbmcgU3lzdGVtLklPOw0KK3VzaW5nIFN5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNlczsNCisNCituYW1lc3BhY2UgRG90WkxpYg0KK3sNCisJLy8vIDxzdW1tYXJ5Pg0KKwkvLy8gSW1wbGVtZW50cyBhIGNvbXByZXNzZWQgPHNlZSBjcmVmPSJTdHJlYW0iLz4sIGluIEdaaXAgKC5neikgZm9ybWF0Lg0KKwkvLy8gPC9zdW1tYXJ5Pg0KKwlwdWJsaWMgY2xhc3MgR1ppcFN0cmVhbSA6IFN0cmVhbSwgSURpc3Bvc2FibGUNCisJew0KKyAgICAgICAgI3JlZ2lvbiBEbGwgSW1wb3J0cw0KKyAgICAgICAgW0RsbEltcG9ydCgiWkxJQjEuZGxsIiwgQ2FsbGluZ0NvbnZlbnRpb249Q2FsbGluZ0NvbnZlbnRpb24uQ2RlY2wsIENoYXJTZXQ9Q2hhclNldC5BbnNpKV0NCisgICAgICAgIHByaXZhdGUgc3RhdGljIGV4dGVybiBJbnRQdHIgZ3pvcGVuKHN0cmluZyBuYW1lLCBzdHJpbmcgbW9kZSk7DQorDQorICAgICAgICBbRGxsSW1wb3J0KCJaTElCMS5kbGwiLCBDYWxsaW5nQ29udmVudGlvbj1DYWxsaW5nQ29udmVudGlvbi5DZGVjbCldDQorICAgICAgICBwcml2YXRlIHN0YXRpYyBleHRlcm4gaW50IGd6Y2xvc2UoSW50UHRyIGd6RmlsZSk7DQorDQorICAgICAgICBbRGxsSW1wb3J0KCJaTElCMS5kbGwiLCBDYWxsaW5nQ29udmVudGlvbj1DYWxsaW5nQ29udmVudGlvbi5DZGVjbCldDQorICAgICAgICBwcml2YXRlIHN0YXRpYyBleHRlcm4gaW50IGd6d3JpdGUoSW50UHRyIGd6RmlsZSwgaW50IGRhdGEsIGludCBsZW5ndGgpOw0KKw0KKyAgICAgICAgW0RsbEltcG9ydCgiWkxJQjEuZGxsIiwgQ2FsbGluZ0NvbnZlbnRpb249Q2FsbGluZ0NvbnZlbnRpb24uQ2RlY2wpXQ0KKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZXh0ZXJuIGludCBnenJlYWQoSW50UHRyIGd6RmlsZSwgaW50IGRhdGEsIGludCBsZW5ndGgpOw0KKw0KKyAgICAgICAgW0RsbEltcG9ydCgiWkxJQjEuZGxsIiwgQ2FsbGluZ0NvbnZlbnRpb249Q2FsbGluZ0NvbnZlbnRpb24uQ2RlY2wpXQ0KKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZXh0ZXJuIGludCBnemdldGMoSW50UHRyIGd6RmlsZSk7DQorDQorICAgICAgICBbRGxsSW1wb3J0KCJaTElCMS5kbGwiLCBDYWxsaW5nQ29udmVudGlvbj1DYWxsaW5nQ29udmVudGlvbi5DZGVjbCldDQorICAgICAgICBwcml2YXRlIHN0YXRpYyBleHRlcm4gaW50IGd6cHV0YyhJbnRQdHIgZ3pGaWxlLCBpbnQgYyk7DQorDQorICAgICAgICAjZW5kcmVnaW9uDQorDQorICAgICAgICAjcmVnaW9uIFByaXZhdGUgZGF0YQ0KKyAgICAgICAgcHJpdmF0ZSBJbnRQdHIgX2d6RmlsZTsNCisgICAgICAgIHByaXZhdGUgYm9vbCBfaXNEaXNwb3NlZCA9IGZhbHNlOw0KKyAgICAgICAgcHJpdmF0ZSBib29sIF9pc1dyaXRpbmc7DQorICAgICAgICAjZW5kcmVnaW9uDQorDQorICAgICAgICAjcmVnaW9uIENvbnN0cnVjdG9ycw0KKyAgICAgICAgLy8vIDxzdW1tYXJ5Pg0KKyAgICAgICAgLy8vIENyZWF0ZXMgYSBuZXcgZmlsZSBhcyBhIHdyaXRlYWJsZSBHWmlwU3RyZWFtDQorICAgICAgICAvLy8gPC9zdW1tYXJ5Pg0KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJmaWxlTmFtZSI+VGhlIG5hbWUgb2YgdGhlIGNvbXByZXNzZWQgZmlsZSB0byBjcmVhdGU8L3BhcmFtPg0KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJsZXZlbCI+VGhlIGNvbXByZXNzaW9uIGxldmVsIHRvIHVzZSB3aGVuIGFkZGluZyBkYXRhPC9wYXJhbT4NCisgICAgICAgIC8vLyA8ZXhjZXB0aW9uIGNyZWY9IlpMaWJFeGNlcHRpb24iPklmIGFuIGVycm9yIG9jY3VycmVkIGluIHRoZSBpbnRlcm5hbCB6bGliIGZ1bmN0aW9uPC9leGNlcHRpb24+DQorCQlwdWJsaWMgR1ppcFN0cmVhbShzdHJpbmcgZmlsZU5hbWUsIENvbXByZXNzTGV2ZWwgbGV2ZWwpDQorCQl7DQorICAgICAgICAgICAgX2lzV3JpdGluZyA9IHRydWU7DQorICAgICAgICAgICAgX2d6RmlsZSA9IGd6b3BlbihmaWxlTmFtZSwgU3RyaW5nLkZvcm1hdCgid2J7MH0iLCAoaW50KWxldmVsKSk7DQorICAgICAgICAgICAgaWYgKF9nekZpbGUgPT0gSW50UHRyLlplcm8pDQorICAgICAgICAgICAgICAgIHRocm93IG5ldyBaTGliRXhjZXB0aW9uKC0xLCAiQ291bGQgbm90IG9wZW4gIiArIGZpbGVOYW1lKTsNCisJCX0NCisNCisgICAgICAgIC8vLyA8c3VtbWFyeT4NCisgICAgICAgIC8vLyBPcGVucyBhbiBleGlzdGluZyBmaWxlIGFzIGEgcmVhZGFibGUgR1ppcFN0cmVhbQ0KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4NCisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iZmlsZU5hbWUiPlRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIG9wZW48L3BhcmFtPg0KKyAgICAgICAgLy8vIDxleGNlcHRpb24gY3JlZj0iWkxpYkV4Y2VwdGlvbiI+SWYgYW4gZXJyb3Igb2NjdXJyZWQgaW4gdGhlIGludGVybmFsIHpsaWIgZnVuY3Rpb248L2V4Y2VwdGlvbj4NCisgICAgICAgIHB1YmxpYyBHWmlwU3RyZWFtKHN0cmluZyBmaWxlTmFtZSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBfaXNXcml0aW5nID0gZmFsc2U7DQorICAgICAgICAgICAgX2d6RmlsZSA9IGd6b3BlbihmaWxlTmFtZSwgInJiIik7DQorICAgICAgICAgICAgaWYgKF9nekZpbGUgPT0gSW50UHRyLlplcm8pDQorICAgICAgICAgICAgICAgIHRocm93IG5ldyBaTGliRXhjZXB0aW9uKC0xLCAiQ291bGQgbm90IG9wZW4gIiArIGZpbGVOYW1lKTsNCisNCisgICAgICAgIH0NCisgICAgICAgICNlbmRyZWdpb24NCisNCisgICAgICAgICNyZWdpb24gQWNjZXNzIHByb3BlcnRpZXMNCisgICAgICAgIC8vLyA8c3VtbWFyeT4NCisgICAgICAgIC8vLyBSZXR1cm5zIHRydWUgb2YgdGhpcyBzdHJlYW0gY2FuIGJlIHJlYWQgZnJvbSwgZmFsc2Ugb3RoZXJ3aXNlDQorICAgICAgICAvLy8gPC9zdW1tYXJ5Pg0KKyAgICAgICAgcHVibGljIG92ZXJyaWRlIGJvb2wgQ2FuUmVhZA0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGdldA0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgcmV0dXJuICFfaXNXcml0aW5nOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisNCisNCisgICAgICAgIC8vLyA8c3VtbWFyeT4NCisgICAgICAgIC8vLyBSZXR1cm5zIGZhbHNlLg0KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4NCisgICAgICAgIHB1YmxpYyBvdmVycmlkZSBib29sIENhblNlZWsNCisgICAgICAgIHsNCisgICAgICAgICAgICBnZXQNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorDQorICAgICAgICAvLy8gPHN1bW1hcnk+DQorICAgICAgICAvLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgdHNyZWFtIGlzIHdyaXRlYWJsZSwgZmFsc2Ugb3RoZXJ3aXNlDQorICAgICAgICAvLy8gPC9zdW1tYXJ5Pg0KKyAgICAgICAgcHVibGljIG92ZXJyaWRlIGJvb2wgQ2FuV3JpdGUNCisgICAgICAgIHsNCisgICAgICAgICAgICBnZXQNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHJldHVybiBfaXNXcml0aW5nOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgICAgICNlbmRyZWdpb24NCisNCisgICAgICAgICNyZWdpb24gRGVzdHJ1Y3RvciAmIElEaXNwb3NlIHN0dWZmDQorDQorICAgICAgICAvLy8gPHN1bW1hcnk+DQorICAgICAgICAvLy8gRGVzdHJveXMgdGhpcyBpbnN0YW5jZQ0KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4NCisgICAgICAgIH5HWmlwU3RyZWFtKCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBjbGVhblVwKGZhbHNlKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIC8vLyA8c3VtbWFyeT4NCisgICAgICAgIC8vLyBDbG9zZXMgdGhlIGV4dGVybmFsIGZpbGUgaGFuZGxlDQorICAgICAgICAvLy8gPC9zdW1tYXJ5Pg0KKyAgICAgICAgcHVibGljIHZvaWQgRGlzcG9zZSgpDQorICAgICAgICB7DQorICAgICAgICAgICAgY2xlYW5VcCh0cnVlKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIC8vIERvZXMgdGhlIGFjdHVhbCBjbG9zaW5nIG9mIHRoZSBmaWxlIGhhbmRsZS4NCisgICAgICAgIHByaXZhdGUgdm9pZCBjbGVhblVwKGJvb2wgaXNEaXNwb3NpbmcpDQorICAgICAgICB7DQorICAgICAgICAgICAgaWYgKCFfaXNEaXNwb3NlZCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGd6Y2xvc2UoX2d6RmlsZSk7DQorICAgICAgICAgICAgICAgIF9pc0Rpc3Bvc2VkID0gdHJ1ZTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgICAgICAjZW5kcmVnaW9uDQorDQorICAgICAgICAjcmVnaW9uIEJhc2ljIHJlYWRpbmcgYW5kIHdyaXRpbmcNCisgICAgICAgIC8vLyA8c3VtbWFyeT4NCisgICAgICAgIC8vLyBBdHRlbXB0cyB0byByZWFkIGEgbnVtYmVyIG9mIGJ5dGVzIGZyb20gdGhlIHN0cmVhbS4NCisgICAgICAgIC8vLyA8L3N1bW1hcnk+DQorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImJ1ZmZlciI+VGhlIGRlc3RpbmF0aW9uIGRhdGEgYnVmZmVyPC9wYXJhbT4NCisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ib2Zmc2V0Ij5UaGUgaW5kZXggb2YgdGhlIGZpcnN0IGRlc3RpbmF0aW9uIGJ5dGUgaW4gPGM+YnVmZmVyPC9jPjwvcGFyYW0+DQorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImNvdW50Ij5UaGUgbnVtYmVyIG9mIGJ5dGVzIHJlcXVlc3RlZDwvcGFyYW0+DQorICAgICAgICAvLy8gPHJldHVybnM+VGhlIG51bWJlciBvZiBieXRlcyByZWFkPC9yZXR1cm5zPg0KKyAgICAgICAgLy8vIDxleGNlcHRpb24gY3JlZj0iQXJndW1lbnROdWxsRXhjZXB0aW9uIj5JZiA8Yz5idWZmZXI8L2M+IGlzIG51bGw8L2V4Y2VwdGlvbj4NCisgICAgICAgIC8vLyA8ZXhjZXB0aW9uIGNyZWY9IkFyZ3VtZW50T3V0T2ZSYW5nZUV4Y2VwdGlvbiI+SWYgPGM+Y291bnQ8L2M+IG9yIDxjPm9mZnNldDwvYz4gYXJlIG5lZ2F0aXZlPC9leGNlcHRpb24+DQorICAgICAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcmd1bWVudEV4Y2VwdGlvbiI+SWYgPGM+b2Zmc2V0PC9jPiAgKyA8Yz5jb3VudDwvYz4gaXMgJmd0OyBidWZmZXIuTGVuZ3RoPC9leGNlcHRpb24+DQorICAgICAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJOb3RTdXBwb3J0ZWRFeGNlcHRpb24iPklmIHRoaXMgc3RyZWFtIGlzIG5vdCByZWFkYWJsZS48L2V4Y2VwdGlvbj4NCisgICAgICAgIC8vLyA8ZXhjZXB0aW9uIGNyZWY9Ik9iamVjdERpc3Bvc2VkRXhjZXB0aW9uIj5JZiB0aGlzIHN0cmVhbSBoYXMgYmVlbiBkaXNwb3NlZC48L2V4Y2VwdGlvbj4NCisgICAgICAgIHB1YmxpYyBvdmVycmlkZSBpbnQgUmVhZChieXRlW10gYnVmZmVyLCBpbnQgb2Zmc2V0LCBpbnQgY291bnQpDQorICAgICAgICB7DQorICAgICAgICAgICAgaWYgKCFDYW5SZWFkKSB0aHJvdyBuZXcgTm90U3VwcG9ydGVkRXhjZXB0aW9uKCk7DQorICAgICAgICAgICAgaWYgKGJ1ZmZlciA9PSBudWxsKSB0aHJvdyBuZXcgQXJndW1lbnROdWxsRXhjZXB0aW9uKCk7DQorICAgICAgICAgICAgaWYgKG9mZnNldCA8IDAgfHwgY291bnQgPCAwKSB0aHJvdyBuZXcgQXJndW1lbnRPdXRPZlJhbmdlRXhjZXB0aW9uKCk7DQorICAgICAgICAgICAgaWYgKChvZmZzZXQrY291bnQpID4gYnVmZmVyLkxlbmd0aCkgdGhyb3cgbmV3IEFyZ3VtZW50RXhjZXB0aW9uKCk7DQorICAgICAgICAgICAgaWYgKF9pc0Rpc3Bvc2VkKSB0aHJvdyBuZXcgT2JqZWN0RGlzcG9zZWRFeGNlcHRpb24oIkdaaXBTdHJlYW0iKTsNCisNCisgICAgICAgICAgICBHQ0hhbmRsZSBoID0gR0NIYW5kbGUuQWxsb2MoYnVmZmVyLCBHQ0hhbmRsZVR5cGUuUGlubmVkKTsNCisgICAgICAgICAgICBpbnQgcmVzdWx0Ow0KKyAgICAgICAgICAgIHRyeQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gZ3pyZWFkKF9nekZpbGUsIGguQWRkck9mUGlubmVkT2JqZWN0KCkuVG9JbnQzMigpICsgb2Zmc2V0LCBjb3VudCk7DQorICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPCAwKQ0KKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGZpbmFsbHkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGguRnJlZSgpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0Ow0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgLy8vIDxzdW1tYXJ5Pg0KKyAgICAgICAgLy8vIEF0dGVtcHRzIHRvIHJlYWQgYSBzaW5nbGUgYnl0ZSBmcm9tIHRoZSBzdHJlYW0uDQorICAgICAgICAvLy8gPC9zdW1tYXJ5Pg0KKyAgICAgICAgLy8vIDxyZXR1cm5zPlRoZSBieXRlIHRoYXQgd2FzIHJlYWQsIG9yIC0xIGluIGNhc2Ugb2YgZXJyb3Igb3IgRW5kLU9mLUZpbGU8L3JldHVybnM+DQorICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgaW50IFJlYWRCeXRlKCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBpZiAoIUNhblJlYWQpIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFeGNlcHRpb24oKTsNCisgICAgICAgICAgICBpZiAoX2lzRGlzcG9zZWQpIHRocm93IG5ldyBPYmplY3REaXNwb3NlZEV4Y2VwdGlvbigiR1ppcFN0cmVhbSIpOw0KKyAgICAgICAgICAgIHJldHVybiBnemdldGMoX2d6RmlsZSk7DQorICAgICAgICB9DQorDQorICAgICAgICAvLy8gPHN1bW1hcnk+DQorICAgICAgICAvLy8gV3JpdGVzIGEgbnVtYmVyIG9mIGJ5dGVzIHRvIHRoZSBzdHJlYW0NCisgICAgICAgIC8vLyA8L3N1bW1hcnk+DQorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImJ1ZmZlciI+PC9wYXJhbT4NCisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ib2Zmc2V0Ij48L3BhcmFtPg0KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJjb3VudCI+PC9wYXJhbT4NCisgICAgICAgIC8vLyA8ZXhjZXB0aW9uIGNyZWY9IkFyZ3VtZW50TnVsbEV4Y2VwdGlvbiI+SWYgPGM+YnVmZmVyPC9jPiBpcyBudWxsPC9leGNlcHRpb24+DQorICAgICAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcmd1bWVudE91dE9mUmFuZ2VFeGNlcHRpb24iPklmIDxjPmNvdW50PC9jPiBvciA8Yz5vZmZzZXQ8L2M+IGFyZSBuZWdhdGl2ZTwvZXhjZXB0aW9uPg0KKyAgICAgICAgLy8vIDxleGNlcHRpb24gY3JlZj0iQXJndW1lbnRFeGNlcHRpb24iPklmIDxjPm9mZnNldDwvYz4gICsgPGM+Y291bnQ8L2M+IGlzICZndDsgYnVmZmVyLkxlbmd0aDwvZXhjZXB0aW9uPg0KKyAgICAgICAgLy8vIDxleGNlcHRpb24gY3JlZj0iTm90U3VwcG9ydGVkRXhjZXB0aW9uIj5JZiB0aGlzIHN0cmVhbSBpcyBub3Qgd3JpdGVhYmxlLjwvZXhjZXB0aW9uPg0KKyAgICAgICAgLy8vIDxleGNlcHRpb24gY3JlZj0iT2JqZWN0RGlzcG9zZWRFeGNlcHRpb24iPklmIHRoaXMgc3RyZWFtIGhhcyBiZWVuIGRpc3Bvc2VkLjwvZXhjZXB0aW9uPg0KKyAgICAgICAgcHVibGljIG92ZXJyaWRlIHZvaWQgV3JpdGUoYnl0ZVtdIGJ1ZmZlciwgaW50IG9mZnNldCwgaW50IGNvdW50KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlmICghQ2FuV3JpdGUpIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFeGNlcHRpb24oKTsNCisgICAgICAgICAgICBpZiAoYnVmZmVyID09IG51bGwpIHRocm93IG5ldyBBcmd1bWVudE51bGxFeGNlcHRpb24oKTsNCisgICAgICAgICAgICBpZiAob2Zmc2V0IDwgMCB8fCBjb3VudCA8IDApIHRocm93IG5ldyBBcmd1bWVudE91dE9mUmFuZ2VFeGNlcHRpb24oKTsNCisgICAgICAgICAgICBpZiAoKG9mZnNldCtjb3VudCkgPiBidWZmZXIuTGVuZ3RoKSB0aHJvdyBuZXcgQXJndW1lbnRFeGNlcHRpb24oKTsNCisgICAgICAgICAgICBpZiAoX2lzRGlzcG9zZWQpIHRocm93IG5ldyBPYmplY3REaXNwb3NlZEV4Y2VwdGlvbigiR1ppcFN0cmVhbSIpOw0KKw0KKyAgICAgICAgICAgIEdDSGFuZGxlIGggPSBHQ0hhbmRsZS5BbGxvYyhidWZmZXIsIEdDSGFuZGxlVHlwZS5QaW5uZWQpOw0KKyAgICAgICAgICAgIHRyeQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgaW50IHJlc3VsdCA9IGd6d3JpdGUoX2d6RmlsZSwgaC5BZGRyT2ZQaW5uZWRPYmplY3QoKS5Ub0ludDMyKCkgKyBvZmZzZXQsIGNvdW50KTsNCisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA8IDApDQorICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oKTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgZmluYWxseQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgaC5GcmVlKCk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgLy8vIDxzdW1tYXJ5Pg0KKyAgICAgICAgLy8vIFdyaXRlcyBhIHNpbmdsZSBieXRlIHRvIHRoZSBzdHJlYW0NCisgICAgICAgIC8vLyA8L3N1bW1hcnk+DQorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InZhbHVlIj5UaGUgYnl0ZSB0byBhZGQgdG8gdGhlIHN0cmVhbS48L3BhcmFtPg0KKyAgICAgICAgLy8vIDxleGNlcHRpb24gY3JlZj0iTm90U3VwcG9ydGVkRXhjZXB0aW9uIj5JZiB0aGlzIHN0cmVhbSBpcyBub3Qgd3JpdGVhYmxlLjwvZXhjZXB0aW9uPg0KKyAgICAgICAgLy8vIDxleGNlcHRpb24gY3JlZj0iT2JqZWN0RGlzcG9zZWRFeGNlcHRpb24iPklmIHRoaXMgc3RyZWFtIGhhcyBiZWVuIGRpc3Bvc2VkLjwvZXhjZXB0aW9uPg0KKyAgICAgICAgcHVibGljIG92ZXJyaWRlIHZvaWQgV3JpdGVCeXRlKGJ5dGUgdmFsdWUpDQorICAgICAgICB7DQorICAgICAgICAgICAgaWYgKCFDYW5Xcml0ZSkgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZEV4Y2VwdGlvbigpOw0KKyAgICAgICAgICAgIGlmIChfaXNEaXNwb3NlZCkgdGhyb3cgbmV3IE9iamVjdERpc3Bvc2VkRXhjZXB0aW9uKCJHWmlwU3RyZWFtIik7DQorDQorICAgICAgICAgICAgaW50IHJlc3VsdCA9IGd6cHV0YyhfZ3pGaWxlLCAoaW50KXZhbHVlKTsNCisgICAgICAgICAgICBpZiAocmVzdWx0IDwgMCkNCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCk7DQorICAgICAgICB9DQorICAgICAgICAjZW5kcmVnaW9uDQorDQorICAgICAgICAjcmVnaW9uIFBvc2l0aW9uICYgbGVuZ3RoIHN0dWZmDQorICAgICAgICAvLy8gPHN1bW1hcnk+DQorICAgICAgICAvLy8gTm90IHN1cHBvcnRlZC4NCisgICAgICAgIC8vLyA8L3N1bW1hcnk+DQorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InZhbHVlIj48L3BhcmFtPg0KKyAgICAgICAgLy8vIDxleGNlcHRpb24gY3JlZj0iTm90U3VwcG9ydGVkRXhjZXB0aW9uIj5BbHdheXMgdGhyb3duPC9leGNlcHRpb24+DQorICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgdm9pZCBTZXRMZW5ndGgobG9uZyB2YWx1ZSkNCisgICAgICAgIHsNCisgICAgICAgICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkRXhjZXB0aW9uKCk7DQorICAgICAgICB9DQorDQorICAgICAgICAvLy8gPHN1bW1hcnk+DQorICAgICAgICAvLy8gIE5vdCBzdXBwcG9ydGVkLg0KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4NCisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ib2Zmc2V0Ij48L3BhcmFtPg0KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJvcmlnaW4iPjwvcGFyYW0+DQorICAgICAgICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPg0KKyAgICAgICAgLy8vIDxleGNlcHRpb24gY3JlZj0iTm90U3VwcG9ydGVkRXhjZXB0aW9uIj5BbHdheXMgdGhyb3duPC9leGNlcHRpb24+DQorICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgbG9uZyBTZWVrKGxvbmcgb2Zmc2V0LCBTZWVrT3JpZ2luIG9yaWdpbikNCisgICAgICAgIHsNCisgICAgICAgICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkRXhjZXB0aW9uKCk7DQorICAgICAgICB9DQorDQorICAgICAgICAvLy8gPHN1bW1hcnk+DQorICAgICAgICAvLy8gRmx1c2hlcyB0aGUgPGM+R1ppcFN0cmVhbTwvYz4uDQorICAgICAgICAvLy8gPC9zdW1tYXJ5Pg0KKyAgICAgICAgLy8vIDxyZW1hcmtzPkluIHRoaXMgaW1wbGVtZW50YXRpb24sIHRoaXMgbWV0aG9kIGRvZXMgbm90aGluZy4gVGhpcyBpcyBiZWNhdXNlIGV4Y2Vzc2l2ZQ0KKyAgICAgICAgLy8vIGZsdXNoaW5nIG1heSBkZWdyYWRlIHRoZSBhY2hpZXZhYmxlIGNvbXByZXNzaW9uIHJhdGVzLjwvcmVtYXJrcz4NCisgICAgICAgIHB1YmxpYyBvdmVycmlkZSB2b2lkIEZsdXNoKCkNCisgICAgICAgIHsNCisgICAgICAgICAgICAvLyBsZWZ0IGVtcHR5IG9uIHB1cnBvc2UNCisgICAgICAgIH0NCisNCisgICAgICAgIC8vLyA8c3VtbWFyeT4NCisgICAgICAgIC8vLyBHZXRzL3NldHMgdGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIDxjPkdaaXBTdHJlYW08L2M+LiBOb3Qgc3VwcHBvcnRlZC4NCisgICAgICAgIC8vLyA8L3N1bW1hcnk+DQorICAgICAgICAvLy8gPHJlbWFya3M+SW4gdGhpcyBpbXBsZW1lbnRhdGlvbiB0aGlzIHByb3BlcnR5IGlzIG5vdCBzdXBwb3J0ZWQ8L3JlbWFya3M+DQorICAgICAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJOb3RTdXBwb3J0ZWRFeGNlcHRpb24iPkFsd2F5cyB0aHJvd248L2V4Y2VwdGlvbj4NCisgICAgICAgIHB1YmxpYyBvdmVycmlkZSBsb25nIFBvc2l0aW9uDQorICAgICAgICB7DQorICAgICAgICAgICAgZ2V0DQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkRXhjZXB0aW9uKCk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIHNldA0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZEV4Y2VwdGlvbigpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisNCisgICAgICAgIC8vLyA8c3VtbWFyeT4NCisgICAgICAgIC8vLyBHZXRzIHRoZSBzaXplIG9mIHRoZSBzdHJlYW0uIE5vdCBzdXBwcG9ydGVkLg0KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4NCisgICAgICAgIC8vLyA8cmVtYXJrcz5JbiB0aGlzIGltcGxlbWVudGF0aW9uIHRoaXMgcHJvcGVydHkgaXMgbm90IHN1cHBvcnRlZDwvcmVtYXJrcz4NCisgICAgICAgIC8vLyA8ZXhjZXB0aW9uIGNyZWY9Ik5vdFN1cHBvcnRlZEV4Y2VwdGlvbiI+QWx3YXlzIHRocm93bjwvZXhjZXB0aW9uPg0KKyAgICAgICAgcHVibGljIG92ZXJyaWRlIGxvbmcgTGVuZ3RoDQorICAgICAgICB7DQorICAgICAgICAgICAgZ2V0DQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkRXhjZXB0aW9uKCk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICAgICAgI2VuZHJlZ2lvbg0KKyAgICB9DQorfQ0KZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL2RvdHpsaWIvRG90WkxpYi9JbmZsYXRlci5jcyBiL3NyYy9jb250cmliL2RvdHpsaWIvRG90WkxpYi9JbmZsYXRlci5jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWQ1NDUxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbnRyaWIvZG90emxpYi9Eb3RaTGliL0luZmxhdGVyLmNzCkBAIC0wLDAgKzEsMTA1IEBACisvLw0KKy8vIKkgQ29weXJpZ2h0IEhlbnJpayBSYXZuIDIwMDQNCisvLw0KKy8vIFVzZSwgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gYXJlIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLg0KKy8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQ0KKy8vDQorDQordXNpbmcgU3lzdGVtOw0KK3VzaW5nIFN5c3RlbS5EaWFnbm9zdGljczsNCit1c2luZyBTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXM7DQorDQorbmFtZXNwYWNlIERvdFpMaWINCit7DQorDQorICAgIC8vLyA8c3VtbWFyeT4NCisgICAgLy8vIEltcGxlbWVudHMgYSBkYXRhIGRlY29tcHJlc3NvciwgdXNpbmcgdGhlIGluZmxhdGUgYWxnb3JpdGhtIGluIHRoZSBaTGliIGRsbA0KKyAgICAvLy8gPC9zdW1tYXJ5Pg0KKyAgICBwdWJsaWMgY2xhc3MgSW5mbGF0ZXIgOiBDb2RlY0Jhc2UNCisJew0KKyAgICAgICAgI3JlZ2lvbiBEbGwgaW1wb3J0cw0KKyAgICAgICAgW0RsbEltcG9ydCgiWkxJQjEuZGxsIiwgQ2FsbGluZ0NvbnZlbnRpb249Q2FsbGluZ0NvbnZlbnRpb24uQ2RlY2wsIENoYXJTZXQ9Q2hhclNldC5BbnNpKV0NCisgICAgICAgIHByaXZhdGUgc3RhdGljIGV4dGVybiBpbnQgaW5mbGF0ZUluaXRfKHJlZiBaU3RyZWFtIHN6LCBzdHJpbmcgdnMsIGludCBzaXplKTsNCisNCisgICAgICAgIFtEbGxJbXBvcnQoIlpMSUIxLmRsbCIsIENhbGxpbmdDb252ZW50aW9uPUNhbGxpbmdDb252ZW50aW9uLkNkZWNsKV0NCisgICAgICAgIHByaXZhdGUgc3RhdGljIGV4dGVybiBpbnQgaW5mbGF0ZShyZWYgWlN0cmVhbSBzeiwgaW50IGZsdXNoKTsNCisNCisgICAgICAgIFtEbGxJbXBvcnQoIlpMSUIxLmRsbCIsIENhbGxpbmdDb252ZW50aW9uPUNhbGxpbmdDb252ZW50aW9uLkNkZWNsKV0NCisgICAgICAgIHByaXZhdGUgc3RhdGljIGV4dGVybiBpbnQgaW5mbGF0ZVJlc2V0KHJlZiBaU3RyZWFtIHN6KTsNCisNCisgICAgICAgIFtEbGxJbXBvcnQoIlpMSUIxLmRsbCIsIENhbGxpbmdDb252ZW50aW9uPUNhbGxpbmdDb252ZW50aW9uLkNkZWNsKV0NCisgICAgICAgIHByaXZhdGUgc3RhdGljIGV4dGVybiBpbnQgaW5mbGF0ZUVuZChyZWYgWlN0cmVhbSBzeik7DQorICAgICAgICAjZW5kcmVnaW9uDQorDQorICAgICAgICAvLy8gPHN1bW1hcnk+DQorICAgICAgICAvLy8gQ29uc3RydWN0cyBhbiBuZXcgaW5zdGFuY2Ugb2YgdGhlIDxjPkluZmxhdGVyPC9jPg0KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4NCisgICAgICAgIHB1YmxpYyBJbmZsYXRlcigpIDogYmFzZSgpDQorCQl7DQorICAgICAgICAgICAgaW50IHJldHZhbCA9IGluZmxhdGVJbml0XyhyZWYgX3p0cmVhbSwgSW5mby5WZXJzaW9uLCBNYXJzaGFsLlNpemVPZihfenRyZWFtKSk7DQorICAgICAgICAgICAgaWYgKHJldHZhbCAhPSAwKQ0KKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgWkxpYkV4Y2VwdGlvbihyZXR2YWwsICJDb3VsZCBub3QgaW5pdGlhbGl6ZSBpbmZsYXRlciIpOw0KKw0KKyAgICAgICAgICAgIHJlc2V0T3V0cHV0KCk7DQorICAgICAgICB9DQorDQorDQorICAgICAgICAvLy8gPHN1bW1hcnk+DQorICAgICAgICAvLy8gQWRkcyBtb3JlIGRhdGEgdG8gdGhlIGNvZGVjIHRvIGJlIHByb2Nlc3NlZC4NCisgICAgICAgIC8vLyA8L3N1bW1hcnk+DQorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImRhdGEiPkJ5dGUgYXJyYXkgY29udGFpbmluZyB0aGUgZGF0YSB0byBiZSBhZGRlZCB0byB0aGUgY29kZWM8L3BhcmFtPg0KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJvZmZzZXQiPlRoZSBpbmRleCBvZiB0aGUgZmlyc3QgYnl0ZSB0byBhZGQgZnJvbSA8Yz5kYXRhPC9jPjwvcGFyYW0+DQorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImNvdW50Ij5UaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGFkZDwvcGFyYW0+DQorICAgICAgICAvLy8gPHJlbWFya3M+QWRkaW5nIGRhdGEgbWF5LCBvciBtYXkgbm90LCByYWlzZSB0aGUgPGM+RGF0YUF2YWlsYWJsZTwvYz4gZXZlbnQ8L3JlbWFya3M+DQorICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgdm9pZCBBZGQoYnl0ZVtdIGRhdGEsIGludCBvZmZzZXQsIGludCBjb3VudCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBpZiAoZGF0YSA9PSBudWxsKSB0aHJvdyBuZXcgQXJndW1lbnROdWxsRXhjZXB0aW9uKCk7DQorICAgICAgICAgICAgaWYgKG9mZnNldCA8IDAgfHwgY291bnQgPCAwKSB0aHJvdyBuZXcgQXJndW1lbnRPdXRPZlJhbmdlRXhjZXB0aW9uKCk7DQorICAgICAgICAgICAgaWYgKChvZmZzZXQrY291bnQpID4gZGF0YS5MZW5ndGgpIHRocm93IG5ldyBBcmd1bWVudEV4Y2VwdGlvbigpOw0KKw0KKyAgICAgICAgICAgIGludCB0b3RhbCA9IGNvdW50Ow0KKyAgICAgICAgICAgIGludCBpbnB1dEluZGV4ID0gb2Zmc2V0Ow0KKyAgICAgICAgICAgIGludCBlcnIgPSAwOw0KKw0KKyAgICAgICAgICAgIHdoaWxlIChlcnIgPj0gMCAmJiBpbnB1dEluZGV4IDwgdG90YWwpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBjb3B5SW5wdXQoZGF0YSwgaW5wdXRJbmRleCwgTWF0aC5NaW4odG90YWwgLSBpbnB1dEluZGV4LCBrQnVmZmVyU2l6ZSkpOw0KKyAgICAgICAgICAgICAgICBlcnIgPSBpbmZsYXRlKHJlZiBfenRyZWFtLCAoaW50KUZsdXNoVHlwZXMuTm9uZSk7DQorICAgICAgICAgICAgICAgIGlmIChlcnIgPT0gMCkNCisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChfenRyZWFtLmF2YWlsX291dCA9PSAwKQ0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uRGF0YUF2YWlsYWJsZSgpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IGluZmxhdGUocmVmIF96dHJlYW0sIChpbnQpRmx1c2hUeXBlcy5Ob25lKTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgaW5wdXRJbmRleCArPSAoaW50KV96dHJlYW0udG90YWxfaW47DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIHNldENoZWNrc3VtKCBfenRyZWFtLmFkbGVyICk7DQorICAgICAgICB9DQorDQorDQorICAgICAgICAvLy8gPHN1bW1hcnk+DQorICAgICAgICAvLy8gRmluaXNoZXMgdXAgYW55IHBlbmRpbmcgZGF0YSB0aGF0IG5lZWRzIHRvIGJlIHByb2Nlc3NlZCBhbmQgaGFuZGxlZC4NCisgICAgICAgIC8vLyA8L3N1bW1hcnk+DQorICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgdm9pZCBGaW5pc2goKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGludCBlcnI7DQorICAgICAgICAgICAgZG8NCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGVyciA9IGluZmxhdGUocmVmIF96dHJlYW0sIChpbnQpRmx1c2hUeXBlcy5GaW5pc2gpOw0KKyAgICAgICAgICAgICAgICBPbkRhdGFBdmFpbGFibGUoKTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgd2hpbGUgKGVyciA9PSAwKTsNCisgICAgICAgICAgICBzZXRDaGVja3N1bSggX3p0cmVhbS5hZGxlciApOw0KKyAgICAgICAgICAgIGluZmxhdGVSZXNldChyZWYgX3p0cmVhbSk7DQorICAgICAgICAgICAgcmVzZXRPdXRwdXQoKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIC8vLyA8c3VtbWFyeT4NCisgICAgICAgIC8vLyBDbG9zZXMgdGhlIGludGVybmFsIHpsaWIgaW5mbGF0ZSBzdHJlYW0NCisgICAgICAgIC8vLyA8L3N1bW1hcnk+DQorICAgICAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdm9pZCBDbGVhblVwKCkgeyBpbmZsYXRlRW5kKHJlZiBfenRyZWFtKTsgfQ0KKw0KKw0KKwl9DQorfQ0KZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL2RvdHpsaWIvRG90WkxpYi9Vbml0VGVzdHMuY3MgYi9zcmMvY29udHJpYi9kb3R6bGliL0RvdFpMaWIvVW5pdFRlc3RzLmNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2NWM4MDIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29udHJpYi9kb3R6bGliL0RvdFpMaWIvVW5pdFRlc3RzLmNzCkBAIC0wLDAgKzEsMjc0IEBACisvLw0KKy8vIMKpIENvcHlyaWdodCBIZW5yaWsgUmF2biAyMDA0DQorLy8NCisvLyBVc2UsIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4NCisvLyAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkNCisvLw0KKw0KK3VzaW5nIFN5c3RlbTsNCit1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnM7DQordXNpbmcgU3lzdGVtLklPOw0KKw0KKy8vIHVuY29tbWVudCB0aGUgZGVmaW5lIGJlbG93IHRvIGluY2x1ZGUgdW5pdCB0ZXN0cw0KKy8vI2RlZmluZSBudW5pdA0KKyNpZiBudW5pdA0KK3VzaW5nIE5Vbml0LkZyYW1ld29yazsNCisNCisvLyBVbml0IHRlc3RzIGZvciB0aGUgRG90WkxpYiBjbGFzcyBsaWJyYXJ5DQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vDQorLy8gVXNlIHRoaXMgd2l0aCBOVW5pdCAyIGZyb20gaHR0cDovL3d3dy5udW5pdC5vcmcNCisvLw0KKw0KK25hbWVzcGFjZSBEb3RaTGliVGVzdHMNCit7DQorICAgIHVzaW5nIERvdFpMaWI7DQorDQorICAgIC8vIGhlbHBlciBtZXRob2RzDQorICAgIGludGVybmFsIGNsYXNzIFV0aWxzDQorICAgIHsNCisgICAgICAgIHB1YmxpYyBzdGF0aWMgYm9vbCBieXRlQXJyRXF1YWwoIGJ5dGVbXSBsaHMsIGJ5dGVbXSByaHMgKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlmIChsaHMuTGVuZ3RoICE9IHJocy5MZW5ndGgpDQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgICAgICAgICBmb3IgKGludCBpID0gbGhzLkxlbmd0aC0xOyBpID49IDA7IC0taSkNCisgICAgICAgICAgICAgICAgaWYgKGxoc1tpXSAhPSByaHNbaV0pDQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgICAgICAgICAgcmV0dXJuIHRydWU7DQorICAgICAgICB9DQorDQorICAgIH0NCisNCisNCisgICAgW1Rlc3RGaXh0dXJlXQ0KKyAgICBwdWJsaWMgY2xhc3MgQ2lyY0J1ZmZlclRlc3RzDQorICAgIHsNCisgICAgICAgICNyZWdpb24gQ2lyY3VsYXIgYnVmZmVyIHRlc3RzDQorICAgICAgICBbVGVzdF0NCisgICAgICAgIHB1YmxpYyB2b2lkIFNpbmdsZVB1dEdldCgpDQorICAgICAgICB7DQorICAgICAgICAgICAgQ2lyY3VsYXJCdWZmZXIgYnVmID0gbmV3IENpcmN1bGFyQnVmZmVyKDEwKTsNCisgICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoIDAsIGJ1Zi5TaXplICk7DQorICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKCAtMSwgYnVmLkdldCgpICk7DQorDQorICAgICAgICAgICAgQXNzZXJ0LklzVHJ1ZShidWYuUHV0KCAxICkpOw0KKyAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCggMSwgYnVmLlNpemUgKTsNCisgICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoIDEsIGJ1Zi5HZXQoKSApOw0KKyAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCggMCwgYnVmLlNpemUgKTsNCisgICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoIC0xLCBidWYuR2V0KCkgKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIFtUZXN0XQ0KKyAgICAgICAgcHVibGljIHZvaWQgQmxvY2tQdXRHZXQoKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIENpcmN1bGFyQnVmZmVyIGJ1ZiA9IG5ldyBDaXJjdWxhckJ1ZmZlcigxMCk7DQorICAgICAgICAgICAgYnl0ZVtdIGFyciA9IHsxLDIsMyw0LDUsNiw3LDgsOSwxMH07DQorICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKCAxMCwgYnVmLlB1dChhcnIsMCwxMCkgKTsNCisgICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoIDEwLCBidWYuU2l6ZSApOw0KKyAgICAgICAgICAgIEFzc2VydC5Jc0ZhbHNlKCBidWYuUHV0KDExKSApOw0KKyAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCggMSwgYnVmLkdldCgpICk7DQorICAgICAgICAgICAgQXNzZXJ0LklzVHJ1ZSggYnVmLlB1dCgxMSkgKTsNCisNCisgICAgICAgICAgICBieXRlW10gYXJyMiA9IChieXRlW10pYXJyLkNsb25lKCk7DQorICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKCA5LCBidWYuR2V0KGFycjIsMSw5KSApOw0KKyAgICAgICAgICAgIEFzc2VydC5Jc1RydWUoIFV0aWxzLmJ5dGVBcnJFcXVhbChhcnIsYXJyMikgKTsNCisgICAgICAgIH0NCisNCisgICAgICAgICNlbmRyZWdpb24NCisgICAgfQ0KKw0KKyAgICBbVGVzdEZpeHR1cmVdDQorICAgIHB1YmxpYyBjbGFzcyBDaGVja3N1bVRlc3RzDQorICAgIHsNCisgICAgICAgICNyZWdpb24gQ1JDMzIgVGVzdHMNCisgICAgICAgIFtUZXN0XQ0KKyAgICAgICAgcHVibGljIHZvaWQgQ1JDMzJfTnVsbCgpDQorICAgICAgICB7DQorICAgICAgICAgICAgQ1JDMzJDaGVja3N1bSBjcmMzMiA9IG5ldyBDUkMzMkNoZWNrc3VtKCk7DQorICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKCAwLCBjcmMzMi5WYWx1ZSApOw0KKw0KKyAgICAgICAgICAgIGNyYzMyID0gbmV3IENSQzMyQ2hlY2tzdW0oMSk7DQorICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKCAxLCBjcmMzMi5WYWx1ZSApOw0KKw0KKyAgICAgICAgICAgIGNyYzMyID0gbmV3IENSQzMyQ2hlY2tzdW0oNTU2KTsNCisgICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoIDU1NiwgY3JjMzIuVmFsdWUgKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIFtUZXN0XQ0KKyAgICAgICAgcHVibGljIHZvaWQgQ1JDMzJfRGF0YSgpDQorICAgICAgICB7DQorICAgICAgICAgICAgQ1JDMzJDaGVja3N1bSBjcmMzMiA9IG5ldyBDUkMzMkNoZWNrc3VtKCk7DQorICAgICAgICAgICAgYnl0ZVtdIGRhdGEgPSB7IDEsMiwzLDQsNSw2LDcgfTsNCisgICAgICAgICAgICBjcmMzMi5VcGRhdGUoZGF0YSk7DQorICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKCAweDcwZTQ2ODg4LCBjcmMzMi5WYWx1ZSAgKTsNCisNCisgICAgICAgICAgICBjcmMzMiA9IG5ldyBDUkMzMkNoZWNrc3VtKCk7DQorICAgICAgICAgICAgY3JjMzIuVXBkYXRlKCJwZW5ndWluIik7DQorICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKCAweDBlNWMxYTEyMCwgY3JjMzIuVmFsdWUgKTsNCisNCisgICAgICAgICAgICBjcmMzMiA9IG5ldyBDUkMzMkNoZWNrc3VtKDEpOw0KKyAgICAgICAgICAgIGNyYzMyLlVwZGF0ZSgicGVuZ3VpbiIpOw0KKyAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgweDQzYjZhYTk0LCBjcmMzMi5WYWx1ZSk7DQorDQorICAgICAgICB9DQorICAgICAgICAjZW5kcmVnaW9uDQorDQorICAgICAgICAjcmVnaW9uIEFkbGVyIHRlc3RzDQorDQorICAgICAgICBbVGVzdF0NCisgICAgICAgIHB1YmxpYyB2b2lkIEFkbGVyX051bGwoKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIEFkbGVyQ2hlY2tzdW0gYWRsZXIgPSBuZXcgQWRsZXJDaGVja3N1bSgpOw0KKyAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgwLCBhZGxlci5WYWx1ZSk7DQorDQorICAgICAgICAgICAgYWRsZXIgPSBuZXcgQWRsZXJDaGVja3N1bSgxKTsNCisgICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoIDEsIGFkbGVyLlZhbHVlICk7DQorDQorICAgICAgICAgICAgYWRsZXIgPSBuZXcgQWRsZXJDaGVja3N1bSg1NTYpOw0KKyAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCggNTU2LCBhZGxlci5WYWx1ZSApOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgW1Rlc3RdDQorICAgICAgICBwdWJsaWMgdm9pZCBBZGxlcl9EYXRhKCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBBZGxlckNoZWNrc3VtIGFkbGVyID0gbmV3IEFkbGVyQ2hlY2tzdW0oMSk7DQorICAgICAgICAgICAgYnl0ZVtdIGRhdGEgPSB7IDEsMiwzLDQsNSw2LDcgfTsNCisgICAgICAgICAgICBhZGxlci5VcGRhdGUoZGF0YSk7DQorICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKCAweDViMDAxZCwgYWRsZXIuVmFsdWUgICk7DQorDQorICAgICAgICAgICAgYWRsZXIgPSBuZXcgQWRsZXJDaGVja3N1bSgpOw0KKyAgICAgICAgICAgIGFkbGVyLlVwZGF0ZSgicGVuZ3VpbiIpOw0KKyAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgweDBiY2YwMmY2LCBhZGxlci5WYWx1ZSApOw0KKw0KKyAgICAgICAgICAgIGFkbGVyID0gbmV3IEFkbGVyQ2hlY2tzdW0oMSk7DQorICAgICAgICAgICAgYWRsZXIuVXBkYXRlKCJwZW5ndWluIik7DQorICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDB4MGJkNjAyZjcsIGFkbGVyLlZhbHVlKTsNCisNCisgICAgICAgIH0NCisgICAgICAgICNlbmRyZWdpb24NCisgICAgfQ0KKw0KKyAgICBbVGVzdEZpeHR1cmVdDQorICAgIHB1YmxpYyBjbGFzcyBJbmZvVGVzdHMNCisgICAgew0KKyAgICAgICAgI3JlZ2lvbiBJbmZvIHRlc3RzDQorICAgICAgICBbVGVzdF0NCisgICAgICAgIHB1YmxpYyB2b2lkIEluZm9fVmVyc2lvbigpDQorICAgICAgICB7DQorICAgICAgICAgICAgSW5mbyBpbmZvID0gbmV3IEluZm8oKTsNCisgICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoIjEuMi4xMiIsIEluZm8uVmVyc2lvbik7DQorICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDMyLCBpbmZvLlNpemVPZlVJbnQpOw0KKyAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgzMiwgaW5mby5TaXplT2ZVTG9uZyk7DQorICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDMyLCBpbmZvLlNpemVPZlBvaW50ZXIpOw0KKyAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgzMiwgaW5mby5TaXplT2ZPZmZzZXQpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgI2VuZHJlZ2lvbg0KKyAgICB9DQorDQorICAgIFtUZXN0Rml4dHVyZV0NCisgICAgcHVibGljIGNsYXNzIERlZmxhdGVJbmZsYXRlVGVzdHMNCisgICAgew0KKyAgICAgICAgI3JlZ2lvbiBEZWZsYXRlIHRlc3RzDQorICAgICAgICBbVGVzdF0NCisgICAgICAgIHB1YmxpYyB2b2lkIERlZmxhdGVfSW5pdCgpDQorICAgICAgICB7DQorICAgICAgICAgICAgdXNpbmcgKERlZmxhdGVyIGRlZiA9IG5ldyBEZWZsYXRlcihDb21wcmVzc0xldmVsLkRlZmF1bHQpKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorDQorICAgICAgICBwcml2YXRlIEFycmF5TGlzdCBjb21wcmVzc2VkRGF0YSA9IG5ldyBBcnJheUxpc3QoKTsNCisgICAgICAgIHByaXZhdGUgdWludCBhZGxlcjE7DQorDQorICAgICAgICBwcml2YXRlIEFycmF5TGlzdCB1bmNvbXByZXNzZWREYXRhID0gbmV3IEFycmF5TGlzdCgpOw0KKyAgICAgICAgcHJpdmF0ZSB1aW50IGFkbGVyMjsNCisNCisgICAgICAgIHB1YmxpYyB2b2lkIENEYXRhQXZhaWwoYnl0ZVtdIGRhdGEsIGludCBzdGFydEluZGV4LCBpbnQgY291bnQpDQorICAgICAgICB7DQorICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQ0KKyAgICAgICAgICAgICAgICBjb21wcmVzc2VkRGF0YS5BZGQoZGF0YVtpK3N0YXJ0SW5kZXhdKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIFtUZXN0XQ0KKyAgICAgICAgcHVibGljIHZvaWQgRGVmbGF0ZV9Db21wcmVzcygpDQorICAgICAgICB7DQorICAgICAgICAgICAgY29tcHJlc3NlZERhdGEuQ2xlYXIoKTsNCisNCisgICAgICAgICAgICBieXRlW10gdGVzdERhdGEgPSBuZXcgYnl0ZVszNTAwMF07DQorICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0ZXN0RGF0YS5MZW5ndGg7ICsraSkNCisgICAgICAgICAgICAgICAgdGVzdERhdGFbaV0gPSA1Ow0KKw0KKyAgICAgICAgICAgIHVzaW5nIChEZWZsYXRlciBkZWYgPSBuZXcgRGVmbGF0ZXIoKENvbXByZXNzTGV2ZWwpNSkpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBkZWYuRGF0YUF2YWlsYWJsZSArPSBuZXcgRGF0YUF2YWlsYWJsZUhhbmRsZXIoQ0RhdGFBdmFpbCk7DQorICAgICAgICAgICAgICAgIGRlZi5BZGQodGVzdERhdGEpOw0KKyAgICAgICAgICAgICAgICBkZWYuRmluaXNoKCk7DQorICAgICAgICAgICAgICAgIGFkbGVyMSA9IGRlZi5DaGVja3N1bTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgICAgICAjZW5kcmVnaW9uDQorDQorICAgICAgICAjcmVnaW9uIEluZmxhdGUgdGVzdHMNCisgICAgICAgIFtUZXN0XQ0KKyAgICAgICAgcHVibGljIHZvaWQgSW5mbGF0ZV9Jbml0KCkNCisgICAgICAgIHsNCisgICAgICAgICAgICB1c2luZyAoSW5mbGF0ZXIgaW5mID0gbmV3IEluZmxhdGVyKCkpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisNCisgICAgICAgIHByaXZhdGUgdm9pZCBERGF0YUF2YWlsKGJ5dGVbXSBkYXRhLCBpbnQgc3RhcnRJbmRleCwgaW50IGNvdW50KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkNCisgICAgICAgICAgICAgICAgdW5jb21wcmVzc2VkRGF0YS5BZGQoZGF0YVtpK3N0YXJ0SW5kZXhdKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIFtUZXN0XQ0KKyAgICAgICAgcHVibGljIHZvaWQgSW5mbGF0ZV9FeHBhbmQoKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHVuY29tcHJlc3NlZERhdGEuQ2xlYXIoKTsNCisNCisgICAgICAgICAgICB1c2luZyAoSW5mbGF0ZXIgaW5mID0gbmV3IEluZmxhdGVyKCkpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBpbmYuRGF0YUF2YWlsYWJsZSArPSBuZXcgRGF0YUF2YWlsYWJsZUhhbmRsZXIoRERhdGFBdmFpbCk7DQorICAgICAgICAgICAgICAgIGluZi5BZGQoKGJ5dGVbXSljb21wcmVzc2VkRGF0YS5Ub0FycmF5KHR5cGVvZihieXRlKSkpOw0KKyAgICAgICAgICAgICAgICBpbmYuRmluaXNoKCk7DQorICAgICAgICAgICAgICAgIGFkbGVyMiA9IGluZi5DaGVja3N1bTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKCBhZGxlcjEsIGFkbGVyMiApOw0KKyAgICAgICAgfQ0KKyAgICAgICAgI2VuZHJlZ2lvbg0KKyAgICB9DQorDQorICAgIFtUZXN0Rml4dHVyZV0NCisgICAgcHVibGljIGNsYXNzIEdaaXBTdHJlYW1UZXN0cw0KKyAgICB7DQorICAgICAgICAjcmVnaW9uIEdaaXBTdHJlYW0gdGVzdA0KKyAgICAgICAgW1Rlc3RdDQorICAgICAgICBwdWJsaWMgdm9pZCBHWmlwU3RyZWFtX1dyaXRlUmVhZCgpDQorICAgICAgICB7DQorICAgICAgICAgICAgdXNpbmcgKEdaaXBTdHJlYW0gZ3pPdXQgPSBuZXcgR1ppcFN0cmVhbSgiZ3pzdHJlYW0uZ3oiLCBDb21wcmVzc0xldmVsLkJlc3QpKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgQmluYXJ5V3JpdGVyIHdyaXRlciA9IG5ldyBCaW5hcnlXcml0ZXIoZ3pPdXQpOw0KKyAgICAgICAgICAgICAgICB3cml0ZXIuV3JpdGUoImhpIHRoZXJlIik7DQorICAgICAgICAgICAgICAgIHdyaXRlci5Xcml0ZShNYXRoLlBJKTsNCisgICAgICAgICAgICAgICAgd3JpdGVyLldyaXRlKDQyKTsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgdXNpbmcgKEdaaXBTdHJlYW0gZ3pJbiA9IG5ldyBHWmlwU3RyZWFtKCJnenN0cmVhbS5neiIpKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgQmluYXJ5UmVhZGVyIHJlYWRlciA9IG5ldyBCaW5hcnlSZWFkZXIoZ3pJbik7DQorICAgICAgICAgICAgICAgIHN0cmluZyBzID0gcmVhZGVyLlJlYWRTdHJpbmcoKTsNCisgICAgICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKCJoaSB0aGVyZSIscyk7DQorICAgICAgICAgICAgICAgIGRvdWJsZSBkID0gcmVhZGVyLlJlYWREb3VibGUoKTsNCisgICAgICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKE1hdGguUEksIGQpOw0KKyAgICAgICAgICAgICAgICBpbnQgaSA9IHJlYWRlci5SZWFkSW50MzIoKTsNCisgICAgICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDQyLGkpOw0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgIH0NCisgICAgICAgICNlbmRyZWdpb24NCisJfQ0KK30NCisNCisjZW5kaWYNCmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi9kb3R6bGliL0xJQ0VOU0VfMV8wLnR4dCBiL3NyYy9jb250cmliL2RvdHpsaWIvTElDRU5TRV8xXzAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwYWFjMmMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29udHJpYi9kb3R6bGliL0xJQ0VOU0VfMV8wLnR4dApAQCAtMCwwICsxLDIzIEBACitCb29zdCBTb2Z0d2FyZSBMaWNlbnNlIC0gVmVyc2lvbiAxLjAgLSBBdWd1c3QgMTd0aCwgMjAwMw0KKw0KK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9yIG9yZ2FuaXphdGlvbg0KK29idGFpbmluZyBhIGNvcHkgb2YgdGhlIHNvZnR3YXJlIGFuZCBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiBjb3ZlcmVkIGJ5DQordGhpcyBsaWNlbnNlICh0aGUgIlNvZnR3YXJlIikgdG8gdXNlLCByZXByb2R1Y2UsIGRpc3BsYXksIGRpc3RyaWJ1dGUsDQorZXhlY3V0ZSwgYW5kIHRyYW5zbWl0IHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUNCitTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCB0aGlyZC1wYXJ0aWVzIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0bw0KK2RvIHNvLCBhbGwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nOg0KKw0KK1RoZSBjb3B5cmlnaHQgbm90aWNlcyBpbiB0aGUgU29mdHdhcmUgYW5kIHRoaXMgZW50aXJlIHN0YXRlbWVudCwgaW5jbHVkaW5nDQordGhlIGFib3ZlIGxpY2Vuc2UgZ3JhbnQsIHRoaXMgcmVzdHJpY3Rpb24gYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwNCittdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBpbiB3aG9sZSBvciBpbiBwYXJ0LCBhbmQNCithbGwgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU29mdHdhcmUsIHVubGVzcyBzdWNoIGNvcGllcyBvciBkZXJpdmF0aXZlDQord29ya3MgYXJlIHNvbGVseSBpbiB0aGUgZm9ybSBvZiBtYWNoaW5lLWV4ZWN1dGFibGUgb2JqZWN0IGNvZGUgZ2VuZXJhdGVkIGJ5DQorYSBzb3VyY2UgbGFuZ3VhZ2UgcHJvY2Vzc29yLg0KKw0KK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SDQorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksDQorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIFRJVExFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVA0KK1NIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUiBBTllPTkUgRElTVFJJQlVUSU5HIFRIRSBTT0ZUV0FSRSBCRSBMSUFCTEUNCitGT1IgQU5ZIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwNCitBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVINCitERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvZG90emxpYi9yZWFkbWUudHh0IGIvc3JjL2NvbnRyaWIvZG90emxpYi9yZWFkbWUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyMzk1NzIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29udHJpYi9kb3R6bGliL3JlYWRtZS50eHQKQEAgLTAsMCArMSw1OCBAQAorVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgYSAuTmV0IHdyYXBwZXIgY2xhc3MgbGlicmFyeSBmb3IgdGhlIFpMaWIxLmRsbA0KKw0KK1RoZSB3cmFwcGVyIGluY2x1ZGVzIHN1cHBvcnQgZm9yIGluZmxhdGluZy9kZWZsYXRpbmcgbWVtb3J5IGJ1ZmZlcnMsDQorLk5ldCBzdHJlYW1pbmcgd3JhcHBlcnMgZm9yIHRoZSBneiBzdHJlYW1zIHBhcnQgb2YgemxpYiwgYW5kIHdyYXBwZXJzDQorZm9yIHRoZSBjaGVja3N1bSBwYXJ0cyBvZiB6bGliLiBTZWUgRG90WkxpYi9Vbml0VGVzdHMuY3MgZm9yIGV4YW1wbGVzLg0KKw0KK0RpcmVjdG9yeSBzdHJ1Y3R1cmU6DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisNCitMSUNFTlNFXzFfMC50eHQgICAgICAgLSBMaWNlbnNlIGZpbGUuDQorcmVhZG1lLnR4dCAgICAgICAgICAgIC0gVGhpcyBmaWxlLg0KK0RvdFpMaWIuY2htICAgICAgICAgICAtIENsYXNzIGxpYnJhcnkgZG9jdW1lbnRhdGlvbg0KK0RvdFpMaWIuYnVpbGQgICAgICAgICAtIE5BbnQgYnVpbGQgZmlsZQ0KK0RvdFpMaWIuc2xuICAgICAgICAgICAtIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDIwMDMgc29sdXRpb24gZmlsZQ0KKw0KK0RvdFpMaWJcKi5jcyAgICAgICAgICAtIFNvdXJjZSBmaWxlcyBmb3IgdGhlIGNsYXNzIGxpYnJhcnkNCisNCitVbml0IHRlc3RzOg0KKy0tLS0tLS0tLS0tDQorVGhlIGZpbGUgRG90WkxpYi9Vbml0VGVzdHMuY3MgY29udGFpbnMgdW5pdCB0ZXN0cyBmb3IgdXNlIHdpdGggTlVuaXQgMi4xIG9yIGhpZ2hlci4NCitUbyBpbmNsdWRlIHVuaXQgdGVzdHMgaW4gdGhlIGJ1aWxkLCBkZWZpbmUgbnVuaXQgYmVmb3JlIGJ1aWxkaW5nLg0KKw0KKw0KK0J1aWxkIGluc3RydWN0aW9uczoNCistLS0tLS0tLS0tLS0tLS0tLS0tDQorDQorMS4gVXNpbmcgVmlzdWFsIFN0dWRpby5OZXQgMjAwMzoNCisgICBPcGVuIERvdFpMaWIuc2xuIGluIFZTLk5ldCBhbmQgYnVpbGQgZnJvbSB0aGVyZS4gT3V0cHV0IGZpbGUgKERvdFpMaWIuZGxsKQ0KKyAgIHdpbGwgYmUgZm91bmQgLi9Eb3RaTGliL2Jpbi9yZWxlYXNlIG9yIC4vRG90WkxpYi9iaW4vZGVidWcsIGRlcGVuZGluZyBvbg0KKyAgIHlvdSBhcmUgYnVpbGRpbmcgdGhlIHJlbGVhc2Ugb3IgZGVidWcgdmVyc2lvbiBvZiB0aGUgbGlicmFyeS4gQ2hlY2sNCisgICBEb3RaTGliL1VuaXRUZXN0cy5jcyBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBpbmNsdWRlIHVuaXQgdGVzdHMgaW4gdGhlDQorICAgYnVpbGQuDQorDQorMi4gVXNpbmcgTkFudDoNCisgICBPcGVuIGEgY29tbWFuZCBwcm9tcHQgd2l0aCBhY2Nlc3MgdG8gdGhlIGJ1aWxkIGVudmlyb25tZW50IGFuZCBydW4gbmFudA0KKyAgIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgRG90WkxpYi5idWlsZCBmaWxlLg0KKyAgIFlvdSBjYW4gZGVmaW5lIDIgcHJvcGVydGllcyBvbiB0aGUgbmFudCBjb21tYW5kLWxpbmUgdG8gY29udHJvbCB0aGUgYnVpbGQ6DQorICAgZGVidWc9e3RydWV8ZmFsc2V9IHRvIHRvZ2dsZSBiZXR3ZWVuIHJlbGVhc2UvZGVidWcgYnVpbGRzIChkZWZhdWx0PXRydWUpLg0KKyAgIG51bml0PXt0cnVlfGZhbHNlfSB0byBpbmNsdWRlIG9yIGVzY2x1ZGUgdW5pdCB0ZXN0cyAoZGVmYXVsdD10cnVlKS4NCisgICBBbHNvIHRoZSB0YXJnZXQgY2xlYW4gd2lsbCByZW1vdmUgYmluYXJpZXMuDQorICAgT3V0cHV0IGZpbGUgKERvdFpMaWIuZGxsKSB3aWxsIGJlIGZvdW5kIGluIGVpdGhlciAuL0RvdFpMaWIvYmluL3JlbGVhc2UNCisgICBvciAuL0RvdFpMaWIvYmluL2RlYnVnLCBkZXBlbmRpbmcgb24gd2hldGhlciB5b3UgYXJlIGJ1aWxkaW5nIHRoZSByZWxlYXNlDQorICAgb3IgZGVidWcgdmVyc2lvbiBvZiB0aGUgbGlicmFyeS4NCisNCisgICBFeGFtcGxlczoNCisgICAgIG5hbnQgLUQ6ZGVidWc9ZmFsc2UgLUQ6bnVuaXQ9ZmFsc2UNCisgICAgICAgd2lsbCBidWlsZCBhIHJlbGVhc2UgbW9kZSB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IHdpdGhvdXQgdW5pdCB0ZXN0cy4NCisgICAgIG5hbnQNCisgICAgICAgd2lsbCBidWlsZCBhIGRlYnVnIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgd2l0aCB1bml0IHRlc3RzDQorICAgICBuYW50IGNsZWFuDQorICAgICAgIHdpbGwgcmVtb3ZlIGFsbCBwcmV2aW91c2x5IGJ1aWx0IGZpbGVzLg0KKw0KKw0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK0NvcHlyaWdodCAoYykgSGVucmlrIFJhdm4gMjAwNA0KKw0KK1VzZSwgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gYXJlIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLg0KKyhTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQ0KZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL2djY19ndm1hdDY0L2d2bWF0NjQuUyBiL3NyYy9jb250cmliL2djY19ndm1hdDY0L2d2bWF0NjQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDg1OGRkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbnRyaWIvZ2NjX2d2bWF0NjQvZ3ZtYXQ2NC5TCkBAIC0wLDAgKzEsNTc0IEBACisvKg0KKzt1SW50IGxvbmdlc3RfbWF0Y2hfeDY0KA0KKzsgICAgZGVmbGF0ZV9zdGF0ZSAqcywNCis7ICAgIElQb3MgY3VyX21hdGNoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGN1cnJlbnQgbWF0Y2ggDQorDQorOyBndm1hdDY0LlMgLS0gQXNtIHBvcnRpb24gb2YgdGhlIG9wdGltaXplZCBsb25nZXN0X21hdGNoIGZvciAzMiBiaXRzIHg4Nl82NA0KKzsgIChBTUQ2NCBvbiBBdGhsb24gNjQsIE9wdGVyb24sIFBoZW5vbQ0KKzsgICAgIGFuZCBJbnRlbCBFTTY0VCBvbiBQZW50aXVtIDQgd2l0aCBFTTY0VCwgUGVudGl1bSBELCBDb3JlIDIgRHVvLCBDb3JlIEk1L0k3KQ0KKzsgdGhpcyBmaWxlIGlzIHRyYW5zbGF0aW9uIGZyb20gZ3ZtYXQ2NC5hc20gdG8gR0NDIDQueCAoZm9yIExpbnV4LCBNYWMgWENvZGUpDQorOyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMCBKZWFuLWxvdXAgR2FpbGx5LCBCcmlhbiBSYWl0ZXIgYW5kIEdpbGxlcyBWb2xsYW50Lg0KKzsNCis7IEZpbGUgd3JpdHRlbiBieSBHaWxsZXMgVm9sbGFudCwgYnkgY29udmVydGluZyB0byBhc3NlbWJseSB0aGUgbG9uZ2VzdF9tYXRjaA0KKzsgIGZyb20gSmVhbi1sb3VwIEdhaWxseSBpbiBkZWZsYXRlLmMgb2YgekxpYiBhbmQgaW5mb1ppcCB6aXAuDQorOyAgYW5kIGJ5IHRha2luZyBpbnNwaXJhdGlvbiBvbiBhc202ODYgd2l0aCBtYXNtLCBvcHRpbWlzZWQgYXNzZW1ibHkgY29kZQ0KKzsgICAgICAgIGZyb20gQnJpYW4gUmFpdGVyLCB3cml0dGVuIDE5OTgNCis7DQorOyAgVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWQNCis7ICB3YXJyYW50eS4gIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzDQorOyAgYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS4NCis7DQorOyAgUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UsDQorOyAgaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdA0KKzsgIGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoNCis7DQorOyAgMS4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCBub3QNCis7ICAgICBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZQ0KKzsgICAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZQ0KKzsgICAgIGFwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuDQorOyAgMi4gQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmUNCis7ICAgICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUNCis7ICAzLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLg0KKzsNCis7ICAgICAgICAgaHR0cDovL3d3dy56bGliLm5ldA0KKzsgICAgICAgICBodHRwOi8vd3d3LndpbmltYWdlLmNvbS96TGliRGxsDQorOyAgICAgICAgIGh0dHA6Ly93d3cubXVwcGV0bGFicy5jb20vfmJyZWFkYm94L3NvZnR3YXJlL2Fzc2VtYmx5Lmh0bWwNCis7DQorOyB0byBjb21waWxlIHRoaXMgZmlsZSBmb3IgekxpYiwgSSB1c2Ugb3B0aW9uOg0KKzsgICBnY2MgLWMgLWFyY2ggeDg2XzY0IGd2bWF0NjQuUw0KKw0KKw0KKzt1SW50IGxvbmdlc3RfbWF0Y2gocywgY3VyX21hdGNoKQ0KKzsgICAgZGVmbGF0ZV9zdGF0ZSAqczsNCis7ICAgIElQb3MgY3VyX21hdGNoOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY3VycmVudCBtYXRjaCAvDQorOw0KKzsgd2l0aCBYQ29kZSBmb3IgTWFjLCBJIGhhZCBzdHJhbmdlIGVycm9yIHdpdGggc29tZSBqdW1wIG9uIGludGVsIHN5bnRheA0KKzsgdGhpcyBpcyB3aHkgQkVGT1JFX0pNUCBhbmQgQUZURVJfSk1QIGFyZSB1c2VkDQorICovDQorDQorDQorI2RlZmluZSBCRUZPUkVfSk1QIC5hdHRfc3ludGF4DQorI2RlZmluZSBBRlRFUl9KTVAgLmludGVsX3N5bnRheCBub3ByZWZpeA0KKw0KKyNpZm5kZWYgTk9fVU5ERVJMSU5FDQorIwlkZWZpbmUJbWF0Y2hfaW5pdAlfbWF0Y2hfaW5pdA0KKyMJZGVmaW5lCWxvbmdlc3RfbWF0Y2gJX2xvbmdlc3RfbWF0Y2gNCisjZW5kaWYNCisNCisuaW50ZWxfc3ludGF4IG5vcHJlZml4DQorDQorLmdsb2JsCW1hdGNoX2luaXQsIGxvbmdlc3RfbWF0Y2gNCisudGV4dA0KK2xvbmdlc3RfbWF0Y2g6DQorDQorDQorDQorI2RlZmluZSBMb2NhbFZhcnNTaXplIDk2DQorLyoNCis7IHJlZ2lzdGVyIHVzZWQgOiByYXgscmJ4LHJjeCxyZHgscnNpLHJkaSxyOCxyOSxyMTAscjExLHIxMg0KKzsgZnJlZSByZWdpc3RlciA6ICByMTQscjE1DQorOyByZWdpc3RlciBjYW4gYmUgc2F2ZWQgOiByc3ANCisqLw0KKw0KKyNkZWZpbmUgY2hhaW5sZW53bWFzayAgICAgKHJzcCArIDggLSBMb2NhbFZhcnNTaXplKQ0KKyNkZWZpbmUgbmljZW1hdGNoICAgICAgICAgKHJzcCArIDE2IC0gTG9jYWxWYXJzU2l6ZSkNCisNCisjZGVmaW5lIHNhdmVfcmRpICAgICAgICAocnNwICsgMjQgLSBMb2NhbFZhcnNTaXplKQ0KKyNkZWZpbmUgc2F2ZV9yc2kgICAgICAgIChyc3AgKyAzMiAtIExvY2FsVmFyc1NpemUpDQorI2RlZmluZSBzYXZlX3JieCAgICAgICAgKHJzcCArIDQwIC0gTG9jYWxWYXJzU2l6ZSkNCisjZGVmaW5lIHNhdmVfcmJwICAgICAgICAocnNwICsgNDggLSBMb2NhbFZhcnNTaXplKQ0KKyNkZWZpbmUgc2F2ZV9yMTIgICAgICAgIChyc3AgKyA1NiAtIExvY2FsVmFyc1NpemUpDQorI2RlZmluZSBzYXZlX3IxMyAgICAgICAgKHJzcCArIDY0IC0gTG9jYWxWYXJzU2l6ZSkNCisjZGVmaW5lIHNhdmVfcjE0ICAgICAgICAocnNwICsgNzIgLSBMb2NhbFZhcnNTaXplKQ0KKyNkZWZpbmUgc2F2ZV9yMTUgICAgICAgIChyc3AgKyA4MCAtIExvY2FsVmFyc1NpemUpDQorDQorDQorLyoNCis7ICBhbGwgdGhlICs0IG9mZnNldHMgYXJlIGR1ZSB0byB0aGUgYWRkaXRpb24gb2YgcGVuZGluZ19idWZfc2l6ZSAoaW4gemxpYg0KKzsgIGluIHRoZSBkZWZsYXRlX3N0YXRlIHN0cnVjdHVyZSBzaW5jZSB0aGUgYXNtIGNvZGUgd2FzIGZpcnN0IHdyaXR0ZW4NCis7ICAoaWYgeW91IGNvbXBpbGUgd2l0aCB6bGliIDEuMC40IG9yIG9sZGVyLCByZW1vdmUgdGhlICs0KS4NCis7ICBOb3RlIDogdGhlc2UgdmFsdWUgYXJlIGdvb2Qgd2l0aCBhIDggYnl0ZXMgYm91bmRhcnkgcGFjayBzdHJ1Y3R1cmUNCisqLw0KKw0KKyNkZWZpbmUgICAgTUFYX01BVENIICAgICAgICAgICAgICAyNTgNCisjZGVmaW5lICAgIE1JTl9NQVRDSCAgICAgICAgICAgICAgMw0KKyNkZWZpbmUgICAgTUlOX0xPT0tBSEVBRCAgICAgICAgICAoTUFYX01BVENIK01JTl9NQVRDSCsxKQ0KKw0KKy8qDQorOzs7IE9mZnNldHMgZm9yIGZpZWxkcyBpbiB0aGUgZGVmbGF0ZV9zdGF0ZSBzdHJ1Y3R1cmUuIFRoZXNlIG51bWJlcnMNCis7OzsgYXJlIGNhbGN1bGF0ZWQgZnJvbSB0aGUgZGVmaW5pdGlvbiBvZiBkZWZsYXRlX3N0YXRlLCB3aXRoIHRoZQ0KKzs7OyBhc3N1bXB0aW9uIHRoYXQgdGhlIGNvbXBpbGVyIHdpbGwgZHdvcmQtYWxpZ24gdGhlIGZpZWxkcy4gKFRodXMsDQorOzs7IGNoYW5naW5nIHRoZSBkZWZpbml0aW9uIG9mIGRlZmxhdGVfc3RhdGUgY291bGQgZWFzaWx5IGNhdXNlIHRoaXMNCis7OzsgcHJvZ3JhbSB0byBjcmFzaCBob3JyaWJseSwgd2l0aG91dCBzbyBtdWNoIGFzIGEgd2FybmluZyBhdA0KKzs7OyBjb21waWxlIHRpbWUuIFNpZ2guKQ0KKw0KKzsgIGFsbCB0aGUgK3psaWIxMjIyYWRkIG9mZnNldHMgYXJlIGR1ZSB0byB0aGUgYWRkaXRpb24gb2YgZmllbGRzDQorOyAgaW4gemxpYiBpbiB0aGUgZGVmbGF0ZV9zdGF0ZSBzdHJ1Y3R1cmUgc2luY2UgdGhlIGFzbSBjb2RlIHdhcyBmaXJzdCB3cml0dGVuDQorOyAgKGlmIHlvdSBjb21waWxlIHdpdGggemxpYiAxLjAuNCBvciBvbGRlciwgdXNlICJ6bGliMTIyMmFkZCBlcXUgKC00KSIpLg0KKzsgIChpZiB5b3UgY29tcGlsZSB3aXRoIHpsaWIgYmV0d2VlbiAxLjAuNSBhbmQgMS4yLjIuMSwgdXNlICJ6bGliMTIyMmFkZCBlcXUgMCIpLg0KKzsgIGlmIHlvdSBjb21waWxlIHdpdGggemxpYiAxLjIuMi4yIG9yIGxhdGVyICwgdXNlICJ6bGliMTIyMmFkZCBlcXUgOCIpLg0KKyovDQorDQorDQorDQorLyogeW91IGNhbiBjaGVjayB0aGUgc3RydWN0dXJlIG9mZnNldCBieSBydW5uaW5nDQorDQorI2luY2x1ZGUgPHN0ZGxpYi5oPg0KKyNpbmNsdWRlIDxzdGRpby5oPg0KKyNpbmNsdWRlICJkZWZsYXRlLmgiDQorDQordm9pZCBwcmludF9kZXBsKCkNCit7DQorZGVmbGF0ZV9zdGF0ZSBkczsNCitkZWZsYXRlX3N0YXRlICpzPSZkczsNCitwcmludGYoInNpemUgcG9pbnRlcj0ldVxuIiwoaW50KXNpemVvZih2b2lkKikpOw0KKw0KK3ByaW50ZigiI2RlZmluZSBkc1dTaXplICAgICAgICAgJXVcbiIsKGludCkoKChjaGFyKikmKHMtPndfc2l6ZSkpLSgoY2hhciopcykpKTsNCitwcmludGYoIiNkZWZpbmUgZHNXTWFzayAgICAgICAgICV1XG4iLChpbnQpKCgoY2hhciopJihzLT53X21hc2spKS0oKGNoYXIqKXMpKSk7DQorcHJpbnRmKCIjZGVmaW5lIGRzV2luZG93ICAgICAgICAldVxuIiwoaW50KSgoKGNoYXIqKSYocy0+d2luZG93KSktKChjaGFyKilzKSkpOw0KK3ByaW50ZigiI2RlZmluZSBkc1ByZXYgICAgICAgICAgJXVcbiIsKGludCkoKChjaGFyKikmKHMtPnByZXYpKS0oKGNoYXIqKXMpKSk7DQorcHJpbnRmKCIjZGVmaW5lIGRzTWF0Y2hMZW4gICAgICAldVxuIiwoaW50KSgoKGNoYXIqKSYocy0+bWF0Y2hfbGVuZ3RoKSktKChjaGFyKilzKSkpOw0KK3ByaW50ZigiI2RlZmluZSBkc1ByZXZNYXRjaCAgICAgJXVcbiIsKGludCkoKChjaGFyKikmKHMtPnByZXZfbWF0Y2gpKS0oKGNoYXIqKXMpKSk7DQorcHJpbnRmKCIjZGVmaW5lIGRzU3RyU3RhcnQgICAgICAldVxuIiwoaW50KSgoKGNoYXIqKSYocy0+c3Ryc3RhcnQpKS0oKGNoYXIqKXMpKSk7DQorcHJpbnRmKCIjZGVmaW5lIGRzTWF0Y2hTdGFydCAgICAldVxuIiwoaW50KSgoKGNoYXIqKSYocy0+bWF0Y2hfc3RhcnQpKS0oKGNoYXIqKXMpKSk7DQorcHJpbnRmKCIjZGVmaW5lIGRzTG9va2FoZWFkICAgICAldVxuIiwoaW50KSgoKGNoYXIqKSYocy0+bG9va2FoZWFkKSktKChjaGFyKilzKSkpOw0KK3ByaW50ZigiI2RlZmluZSBkc1ByZXZMZW4gICAgICAgJXVcbiIsKGludCkoKChjaGFyKikmKHMtPnByZXZfbGVuZ3RoKSktKChjaGFyKilzKSkpOw0KK3ByaW50ZigiI2RlZmluZSBkc01heENoYWluTGVuICAgJXVcbiIsKGludCkoKChjaGFyKikmKHMtPm1heF9jaGFpbl9sZW5ndGgpKS0oKGNoYXIqKXMpKSk7DQorcHJpbnRmKCIjZGVmaW5lIGRzR29vZE1hdGNoICAgICAldVxuIiwoaW50KSgoKGNoYXIqKSYocy0+Z29vZF9tYXRjaCkpLSgoY2hhciopcykpKTsNCitwcmludGYoIiNkZWZpbmUgZHNOaWNlTWF0Y2ggICAgICV1XG4iLChpbnQpKCgoY2hhciopJihzLT5uaWNlX21hdGNoKSktKChjaGFyKilzKSkpOw0KK30NCisqLw0KKw0KKyNkZWZpbmUgZHNXU2l6ZSAgICAgICAgICA2OA0KKyNkZWZpbmUgZHNXTWFzayAgICAgICAgICA3Ng0KKyNkZWZpbmUgZHNXaW5kb3cgICAgICAgICA4MA0KKyNkZWZpbmUgZHNQcmV2ICAgICAgICAgICA5Ng0KKyNkZWZpbmUgZHNNYXRjaExlbiAgICAgICAxNDQNCisjZGVmaW5lIGRzUHJldk1hdGNoICAgICAgMTQ4DQorI2RlZmluZSBkc1N0clN0YXJ0ICAgICAgIDE1Ng0KKyNkZWZpbmUgZHNNYXRjaFN0YXJ0ICAgICAxNjANCisjZGVmaW5lIGRzTG9va2FoZWFkICAgICAgMTY0DQorI2RlZmluZSBkc1ByZXZMZW4gICAgICAgIDE2OA0KKyNkZWZpbmUgZHNNYXhDaGFpbkxlbiAgICAxNzINCisjZGVmaW5lIGRzR29vZE1hdGNoICAgICAgMTg4DQorI2RlZmluZSBkc05pY2VNYXRjaCAgICAgIDE5Mg0KKw0KKyNkZWZpbmUgd2luZG93X3NpemUgICAgICBbIHJjeCArIGRzV1NpemVdDQorI2RlZmluZSBXTWFzayAgICAgICAgICAgIFsgcmN4ICsgZHNXTWFza10NCisjZGVmaW5lIHdpbmRvd19hZCAgICAgICAgWyByY3ggKyBkc1dpbmRvd10NCisjZGVmaW5lIHByZXZfYWQgICAgICAgICAgWyByY3ggKyBkc1ByZXZdDQorI2RlZmluZSBzdHJzdGFydCAgICAgICAgIFsgcmN4ICsgZHNTdHJTdGFydF0NCisjZGVmaW5lIG1hdGNoX3N0YXJ0ICAgICAgWyByY3ggKyBkc01hdGNoU3RhcnRdDQorI2RlZmluZSBMb29rYWhlYWQgICAgICAgIFsgcmN4ICsgZHNMb29rYWhlYWRdIC8vOyAwZmZmZmZmZmZoIG9uIGluZm96aXANCisjZGVmaW5lIHByZXZfbGVuZ3RoICAgICAgWyByY3ggKyBkc1ByZXZMZW5dDQorI2RlZmluZSBtYXhfY2hhaW5fbGVuZ3RoIFsgcmN4ICsgZHNNYXhDaGFpbkxlbl0NCisjZGVmaW5lIGdvb2RfbWF0Y2ggICAgICAgWyByY3ggKyBkc0dvb2RNYXRjaF0NCisjZGVmaW5lIG5pY2VfbWF0Y2ggICAgICAgWyByY3ggKyBkc05pY2VNYXRjaF0NCisNCisvKg0KKzsgd2luZG93czoNCis7IHBhcmFtZXRlciAxIGluIHJjeChkZWZsYXRlIHN0YXRlIHMpLCBwYXJhbSAyIGluIHJkeCAoY3VyIG1hdGNoKQ0KKw0KKzsgc2VlIGh0dHA6Ly93ZWJsb2dzLmFzcC5uZXQvb2xkbmV3dGhpbmcvYXJjaGl2ZS8yMDA0LzAxLzE0LzU4NTc5LmFzcHggYW5kDQorOyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnkvZW4tdXMva21hcmNoL2hoL2ttYXJjaC82NGJpdEFNRF84ZTk1MWRkMi1lZTc3LTQ3MjgtODcwMi01NWNlNGI1ZGQyNGEueG1sLmFzcA0KKzsNCis7IEFsbCByZWdpc3RlcnMgbXVzdCBiZSBwcmVzZXJ2ZWQgYWNyb3NzIHRoZSBjYWxsLCBleGNlcHQgZm9yDQorOyAgIHJheCwgcmN4LCByZHgsIHI4LCByOSwgcjEwLCBhbmQgcjExLCB3aGljaCBhcmUgc2NyYXRjaC4NCisNCis7DQorOyBnY2Mgb24gbWFjb3N4LWxpbnV4Og0KKzsgc2VlIGh0dHA6Ly93d3cueDg2LTY0Lm9yZy9kb2N1bWVudGF0aW9uL2FiaS0wLjk5LnBkZg0KKzsgcGFyYW0gMSBpbiByZGksIHBhcmFtIDIgaW4gcnNpDQorOyByYngsIHJzcCwgcmJwLCByMTIgdG8gcjE1IG11c3QgYmUgcHJlc2VydmVkDQorDQorOzs7IFNhdmUgcmVnaXN0ZXJzIHRoYXQgdGhlIGNvbXBpbGVyIG1heSBiZSB1c2luZywgYW5kIGFkanVzdCBlc3AgdG8NCis7OzsgbWFrZSByb29tIGZvciBvdXIgc3RhY2sgZnJhbWUuDQorDQorDQorOzs7IFJldHJpZXZlIHRoZSBmdW5jdGlvbiBhcmd1bWVudHMuIHI4ZCB3aWxsIGhvbGQgY3VyX21hdGNoDQorOzs7IHRocm91Z2hvdXQgdGhlIGVudGlyZSBmdW5jdGlvbi4gZWR4IHdpbGwgaG9sZCB0aGUgcG9pbnRlciB0byB0aGUNCis7OzsgZGVmbGF0ZV9zdGF0ZSBzdHJ1Y3R1cmUgZHVyaW5nIHRoZSBmdW5jdGlvbidzIHNldHVwIChiZWZvcmUNCis7OzsgZW50ZXJpbmcgdGhlIG1haW4gbG9vcC4NCisNCis7IG1zOiBwYXJhbWV0ZXIgMSBpbiByY3ggKGRlZmxhdGVfc3RhdGUqIHMpLCBwYXJhbSAyIGluIGVkeCAtPiByOCAoY3VyIG1hdGNoKQ0KKzsgbWFjOiBwYXJhbSAxIGluIHJkaSwgcGFyYW0gMiByc2kNCis7IHRoaXMgY2xlYXIgaGlnaCAzMiBiaXRzIG9mIHI4LCB3aGljaCBjYW4gYmUgZ2FyYmFnZSBpbiBib3RoIHI4IGFuZCByZHgNCisqLw0KKyAgICAgICAgbW92IFtzYXZlX3JieF0scmJ4DQorICAgICAgICBtb3YgW3NhdmVfcmJwXSxyYnANCisNCisNCisgICAgICAgIG1vdiByY3gscmRpDQorDQorICAgICAgICBtb3YgcjhkLGVzaQ0KKw0KKw0KKyAgICAgICAgbW92IFtzYXZlX3IxMl0scjEyDQorICAgICAgICBtb3YgW3NhdmVfcjEzXSxyMTMNCisgICAgICAgIG1vdiBbc2F2ZV9yMTRdLHIxNA0KKyAgICAgICAgbW92IFtzYXZlX3IxNV0scjE1DQorDQorDQorLy87OzsgdUludCB3bWFzayA9IHMtPndfbWFzazsNCisvLzs7OyB1bnNpZ25lZCBjaGFpbl9sZW5ndGggPSBzLT5tYXhfY2hhaW5fbGVuZ3RoOw0KKy8vOzs7IGlmIChzLT5wcmV2X2xlbmd0aCA+PSBzLT5nb29kX21hdGNoKSB7DQorLy87OzsgICAgIGNoYWluX2xlbmd0aCA+Pj0gMjsNCisvLzs7OyB9DQorDQorDQorICAgICAgICBtb3YgZWRpLCBwcmV2X2xlbmd0aA0KKyAgICAgICAgbW92IGVzaSwgZ29vZF9tYXRjaA0KKyAgICAgICAgbW92IGVheCwgV01hc2sNCisgICAgICAgIG1vdiBlYngsIG1heF9jaGFpbl9sZW5ndGgNCisgICAgICAgIGNtcCBlZGksIGVzaQ0KKyAgICAgICAgamwgIExhc3RNYXRjaEdvb2QNCisgICAgICAgIHNociBlYngsIDINCitMYXN0TWF0Y2hHb29kOg0KKw0KKy8vOzs7IGNoYWlubGVuIGlzIGRlY3JlbWVudGVkIG9uY2UgYmVmb3JlaGFuZCBzbyB0aGF0IHRoZSBmdW5jdGlvbiBjYW4NCisvLzs7OyB1c2UgdGhlIHNpZ24gZmxhZyBpbnN0ZWFkIG9mIHRoZSB6ZXJvIGZsYWcgZm9yIHRoZSBleGl0IHRlc3QuDQorLy87OzsgSXQgaXMgdGhlbiBzaGlmdGVkIGludG8gdGhlIGhpZ2ggd29yZCwgdG8gbWFrZSByb29tIGZvciB0aGUgd21hc2sNCisvLzs7OyB2YWx1ZSwgd2hpY2ggaXQgd2lsbCBhbHdheXMgYWNjb21wYW55Lg0KKw0KKyAgICAgICAgZGVjIGVieA0KKyAgICAgICAgc2hsIGVieCwgMTYNCisgICAgICAgIG9yICBlYngsIGVheA0KKw0KKy8vOzs7IG9uIHpsaWIgb25seQ0KKy8vOzs7IGlmICgodUludCluaWNlX21hdGNoID4gcy0+bG9va2FoZWFkKSBuaWNlX21hdGNoID0gcy0+bG9va2FoZWFkOw0KKw0KKw0KKw0KKyAgICAgICAgbW92IGVheCwgbmljZV9tYXRjaA0KKyAgICAgICAgbW92IFtjaGFpbmxlbndtYXNrXSwgZWJ4DQorICAgICAgICBtb3YgcjEwZCwgTG9va2FoZWFkDQorICAgICAgICBjbXAgcjEwZCwgZWF4DQorICAgICAgICBjbW92bmwgcjEwZCwgZWF4DQorICAgICAgICBtb3YgW25pY2VtYXRjaF0scjEwZA0KKw0KKw0KKw0KKy8vOzs7IHJlZ2lzdGVyIEJ5dGVmICpzY2FuID0gcy0+d2luZG93ICsgcy0+c3Ryc3RhcnQ7DQorICAgICAgICBtb3YgcjEwLCB3aW5kb3dfYWQNCisgICAgICAgIG1vdiBlYnAsIHN0cnN0YXJ0DQorICAgICAgICBsZWEgcjEzLCBbcjEwICsgcmJwXQ0KKw0KKy8vOzs7IERldGVybWluZSBob3cgbWFueSBieXRlcyB0aGUgc2NhbiBwdHIgaXMgb2ZmIGZyb20gYmVpbmcNCisvLzs7OyBkd29yZC1hbGlnbmVkLg0KKw0KKyAgICAgICAgIG1vdiByOSxyMTMNCisgICAgICAgICBuZWcgcjEzDQorICAgICAgICAgYW5kIHIxMywzDQorDQorLy87OzsgSVBvcyBsaW1pdCA9IHMtPnN0cnN0YXJ0ID4gKElQb3MpTUFYX0RJU1QocykgPw0KKy8vOzs7ICAgICBzLT5zdHJzdGFydCAtIChJUG9zKU1BWF9ESVNUKHMpIDogTklMOw0KKw0KKw0KKyAgICAgICAgbW92IGVheCwgd2luZG93X3NpemUNCisgICAgICAgIHN1YiBlYXgsIE1JTl9MT09LQUhFQUQNCisNCisNCisgICAgICAgIHhvciBlZGksZWRpDQorICAgICAgICBzdWIgZWJwLCBlYXgNCisNCisgICAgICAgIG1vdiByMTFkLCBwcmV2X2xlbmd0aA0KKw0KKyAgICAgICAgY21vdm5nIGVicCxlZGkNCisNCisvLzs7OyBpbnQgYmVzdF9sZW4gPSBzLT5wcmV2X2xlbmd0aDsNCisNCisNCisvLzs7OyBTdG9yZSB0aGUgc3VtIG9mIHMtPndpbmRvdyArIGJlc3RfbGVuIGluIGVzaSBsb2NhbGx5LCBhbmQgaW4gZXNpLg0KKw0KKyAgICAgICBsZWEgIHJzaSxbcjEwK3IxMV0NCisNCisvLzs7OyByZWdpc3RlciB1c2ggc2Nhbl9zdGFydCA9ICoodXNoZiopc2NhbjsNCisvLzs7OyByZWdpc3RlciB1c2ggc2Nhbl9lbmQgICA9ICoodXNoZiopKHNjYW4rYmVzdF9sZW4tMSk7DQorLy87OzsgUG9zZiAqcHJldiA9IHMtPnByZXY7DQorDQorICAgICAgICBtb3Z6eCByMTJkLHdvcmQgcHRyIFtyOV0NCisgICAgICAgIG1vdnp4IGVieCwgd29yZCBwdHIgW3I5ICsgcjExIC0gMV0NCisNCisgICAgICAgIG1vdiByZGksIHByZXZfYWQNCisNCisvLzs7OyBKdW1wIGludG8gdGhlIG1haW4gbG9vcC4NCisNCisgICAgICAgIG1vdiBlZHgsIFtjaGFpbmxlbndtYXNrXQ0KKw0KKyAgICAgICAgY21wIGJ4LHdvcmQgcHRyIFtyc2kgKyByOCAtIDFdDQorICAgICAgICBqeiAgTG9va3VwTG9vcElzWmVybw0KKwkJCQkNCisJCQkJCQkNCisJCQkJCQkNCitMb29rdXBMb29wMToNCisgICAgICAgIGFuZCByOGQsIGVkeA0KKw0KKyAgICAgICAgbW92enggICByOGQsIHdvcmQgcHRyIFtyZGkgKyByOCoyXQ0KKyAgICAgICAgY21wIHI4ZCwgZWJwDQorICAgICAgICBqYmUgTGVhdmVOb3cNCisJCQ0KKwkJDQorCQkNCisgICAgICAgIHN1YiBlZHgsIDB4MDAwMTAwMDANCisJCUJFRk9SRV9KTVANCisgICAgICAgIGpzICBMZWF2ZU5vdw0KKwkJQUZURVJfSk1QDQorDQorTG9vcEVudHJ5MToNCisgICAgICAgIGNtcCBieCx3b3JkIHB0ciBbcnNpICsgcjggLSAxXQ0KKwkJQkVGT1JFX0pNUA0KKyAgICAgICAganogIExvb2t1cExvb3BJc1plcm8NCisJCUFGVEVSX0pNUA0KKw0KK0xvb2t1cExvb3AyOg0KKyAgICAgICAgYW5kIHI4ZCwgZWR4DQorDQorICAgICAgICBtb3Z6eCAgIHI4ZCwgd29yZCBwdHIgW3JkaSArIHI4KjJdDQorICAgICAgICBjbXAgcjhkLCBlYnANCisJCUJFRk9SRV9KTVANCisgICAgICAgIGpiZSBMZWF2ZU5vdw0KKwkJQUZURVJfSk1QDQorICAgICAgICBzdWIgZWR4LCAweDAwMDEwMDAwDQorCQlCRUZPUkVfSk1QDQorICAgICAgICBqcyAgTGVhdmVOb3cNCisJCUFGVEVSX0pNUA0KKw0KK0xvb3BFbnRyeTI6DQorICAgICAgICBjbXAgYngsd29yZCBwdHIgW3JzaSArIHI4IC0gMV0NCisJCUJFRk9SRV9KTVANCisgICAgICAgIGp6ICBMb29rdXBMb29wSXNaZXJvDQorCQlBRlRFUl9KTVANCisNCitMb29rdXBMb29wNDoNCisgICAgICAgIGFuZCByOGQsIGVkeA0KKw0KKyAgICAgICAgbW92enggICByOGQsIHdvcmQgcHRyIFtyZGkgKyByOCoyXQ0KKyAgICAgICAgY21wIHI4ZCwgZWJwDQorCQlCRUZPUkVfSk1QDQorICAgICAgICBqYmUgTGVhdmVOb3cNCisJCUFGVEVSX0pNUA0KKyAgICAgICAgc3ViIGVkeCwgMHgwMDAxMDAwMA0KKwkJQkVGT1JFX0pNUA0KKyAgICAgICAganMgIExlYXZlTm93DQorCQlBRlRFUl9KTVANCisNCitMb29wRW50cnk0Og0KKw0KKyAgICAgICAgY21wIGJ4LHdvcmQgcHRyIFtyc2kgKyByOCAtIDFdDQorCQlCRUZPUkVfSk1QDQorICAgICAgICBqbnogTG9va3VwTG9vcDENCisgICAgICAgIGptcCBMb29rdXBMb29wSXNaZXJvDQorCQlBRlRFUl9KTVANCisvKg0KKzs7OyBkbyB7DQorOzs7ICAgICBtYXRjaCA9IHMtPndpbmRvdyArIGN1cl9tYXRjaDsNCis7OzsgICAgIGlmICgqKHVzaGYqKShtYXRjaCtiZXN0X2xlbi0xKSAhPSBzY2FuX2VuZCB8fA0KKzs7OyAgICAgICAgICoodXNoZiopbWF0Y2ggIT0gc2Nhbl9zdGFydCkgY29udGludWU7DQorOzs7ICAgICBbLi4uXQ0KKzs7OyB9IHdoaWxlICgoY3VyX21hdGNoID0gcHJldltjdXJfbWF0Y2ggJiB3bWFza10pID4gbGltaXQNCis7OzsgICAgICAgICAgJiYgLS1jaGFpbl9sZW5ndGggIT0gMCk7DQorOzs7DQorOzs7IEhlcmUgaXMgdGhlIGlubmVyIGxvb3Agb2YgdGhlIGZ1bmN0aW9uLiBUaGUgZnVuY3Rpb24gd2lsbCBzcGVuZCB0aGUNCis7OzsgbWFqb3JpdHkgb2YgaXRzIHRpbWUgaW4gdGhpcyBsb29wLCBhbmQgbWFqb3JpdHkgb2YgdGhhdCB0aW1lIHdpbGwNCis7OzsgYmUgc3BlbnQgaW4gdGhlIGZpcnN0IHRlbiBpbnN0cnVjdGlvbnMuDQorOzs7DQorOzs7IFdpdGhpbiB0aGlzIGxvb3A6DQorOzs7IGVieCA9IHNjYW5lbmQNCis7OzsgcjhkID0gY3VybWF0Y2gNCis7OzsgZWR4ID0gY2hhaW5sZW53bWFzayAtIGkuZS4sICgoY2hhaW5sZW4gPDwgMTYpIHwgd21hc2spDQorOzs7IGVzaSA9IHdpbmRvd2Jlc3RsZW4gLSBpLmUuLCAod2luZG93ICsgYmVzdGxlbikNCis7OzsgZWRpID0gcHJldg0KKzs7OyBlYnAgPSBsaW1pdA0KKyovDQorLmJhbGlnbiAxNg0KK0xvb2t1cExvb3A6DQorICAgICAgICBhbmQgcjhkLCBlZHgNCisNCisgICAgICAgIG1vdnp4ICAgcjhkLCB3b3JkIHB0ciBbcmRpICsgcjgqMl0NCisgICAgICAgIGNtcCByOGQsIGVicA0KKwkJQkVGT1JFX0pNUA0KKyAgICAgICAgamJlIExlYXZlTm93DQorCQlBRlRFUl9KTVANCisgICAgICAgIHN1YiBlZHgsIDB4MDAwMTAwMDANCisJCUJFRk9SRV9KTVANCisgICAgICAgIGpzICBMZWF2ZU5vdw0KKwkJQUZURVJfSk1QDQorDQorTG9vcEVudHJ5Og0KKw0KKyAgICAgICAgY21wIGJ4LHdvcmQgcHRyIFtyc2kgKyByOCAtIDFdDQorCQlCRUZPUkVfSk1QDQorICAgICAgICBqbnogTG9va3VwTG9vcDENCisJCUFGVEVSX0pNUA0KK0xvb2t1cExvb3BJc1plcm86DQorICAgICAgICBjbXAgICAgIHIxMncsIHdvcmQgcHRyIFtyMTAgKyByOF0NCisJCUJFRk9SRV9KTVANCisgICAgICAgIGpueiBMb29rdXBMb29wMQ0KKwkJQUZURVJfSk1QDQorDQorDQorLy87OzsgU3RvcmUgdGhlIGN1cnJlbnQgdmFsdWUgb2YgY2hhaW5sZW4uDQorICAgICAgICBtb3YgW2NoYWlubGVud21hc2tdLCBlZHgNCisvKg0KKzs7OyBQb2ludCBlZGkgdG8gdGhlIHN0cmluZyB1bmRlciBzY3J1dGlueSwgYW5kIGVzaSB0byB0aGUgc3RyaW5nIHdlDQorOzs7IGFyZSBob3BpbmcgdG8gbWF0Y2ggaXQgdXAgd2l0aC4gSW4gYWN0dWFsaXR5LCBlc2kgYW5kIGVkaSBhcmUNCis7OzsgYm90aCBwb2ludGVkIChNQVhfTUFUQ0hfOCAtIHNjYW5hbGlnbikgYnl0ZXMgYWhlYWQsIGFuZCBlZHggaXMNCis7OzsgaW5pdGlhbGl6ZWQgdG8gLShNQVhfTUFUQ0hfOCAtIHNjYW5hbGlnbikuDQorKi8NCisgICAgICAgIGxlYSByc2ksW3I4K3IxMF0NCisgICAgICAgIG1vdiByZHgsIDB4ZmZmZmZmZmZmZmZmZmVmOCAvLzsgLShNQVhfTUFUQ0hfOCkNCisgICAgICAgIGxlYSByc2ksIFtyc2kgKyByMTMgKyAweDAxMDhdIC8vO01BWF9NQVRDSF84XQ0KKyAgICAgICAgbGVhIHJkaSwgW3I5ICsgcjEzICsgMHgwMTA4XSAvLztNQVhfTUFUQ0hfOF0NCisNCisgICAgICAgIHByZWZldGNodDEgW3JzaStyZHhdDQorICAgICAgICBwcmVmZXRjaHQxIFtyZGkrcmR4XQ0KKw0KKy8qDQorOzs7IFRlc3QgdGhlIHN0cmluZ3MgZm9yIGVxdWFsaXR5LCA4IGJ5dGVzIGF0IGEgdGltZS4gQXQgdGhlIGVuZCwNCis7OzsgYWRqdXN0IHJkeCBzbyB0aGF0IGl0IGlzIG9mZnNldCB0byB0aGUgZXhhY3QgYnl0ZSB0aGF0IG1pc21hdGNoZWQuDQorOzs7DQorOzs7IFdlIGFscmVhZHkga25vdyBhdCB0aGlzIHBvaW50IHRoYXQgdGhlIGZpcnN0IHRocmVlIGJ5dGVzIG9mIHRoZQ0KKzs7OyBzdHJpbmdzIG1hdGNoIGVhY2ggb3RoZXIsIGFuZCB0aGV5IGNhbiBiZSBzYWZlbHkgcGFzc2VkIG92ZXIgYmVmb3JlDQorOzs7IHN0YXJ0aW5nIHRoZSBjb21wYXJlIGxvb3AuIFNvIHdoYXQgdGhpcyBjb2RlIGRvZXMgaXMgc2tpcCBvdmVyIDAtMw0KKzs7OyBieXRlcywgYXMgbXVjaCBhcyBuZWNlc3NhcnkgaW4gb3JkZXIgdG8gZHdvcmQtYWxpZ24gdGhlIGVkaQ0KKzs7OyBwb2ludGVyLiAocnNpIHdpbGwgc3RpbGwgYmUgbWlzYWxpZ25lZCB0aHJlZSB0aW1lcyBvdXQgb2YgZm91ci4pDQorOzs7DQorOzs7IEl0IHNob3VsZCBiZSBjb25mZXNzZWQgdGhhdCB0aGlzIGxvb3AgdXN1YWxseSBkb2VzIG5vdCByZXByZXNlbnQNCis7OzsgbXVjaCBvZiB0aGUgdG90YWwgcnVubmluZyB0aW1lLiBSZXBsYWNpbmcgaXQgd2l0aCBhIG1vcmUNCis7Ozsgc3RyYWlnaHRmb3J3YXJkICJyZXAgY21wc2IiIHdvdWxkIG5vdCBkcmFzdGljYWxseSBkZWdyYWRlDQorOzs7IHBlcmZvcm1hbmNlLg0KKyovDQorDQorTG9vcENtcHM6DQorICAgICAgICBtb3YgcmF4LCBbcnNpICsgcmR4XQ0KKyAgICAgICAgeG9yIHJheCwgW3JkaSArIHJkeF0NCisgICAgICAgIGpueiBMZWF2ZUxvb3BDbXBzDQorDQorICAgICAgICBtb3YgcmF4LCBbcnNpICsgcmR4ICsgOF0NCisgICAgICAgIHhvciByYXgsIFtyZGkgKyByZHggKyA4XQ0KKyAgICAgICAgam56IExlYXZlTG9vcENtcHM4DQorDQorDQorICAgICAgICBtb3YgcmF4LCBbcnNpICsgcmR4ICsgOCs4XQ0KKyAgICAgICAgeG9yIHJheCwgW3JkaSArIHJkeCArIDgrOF0NCisgICAgICAgIGpueiBMZWF2ZUxvb3BDbXBzMTYNCisNCisgICAgICAgIGFkZCByZHgsOCs4KzgNCisNCisJCUJFRk9SRV9KTVANCisgICAgICAgIGpueiAgTG9vcENtcHMNCisgICAgICAgIGptcCAgTGVuTWF4aW11bQ0KKwkJQUZURVJfSk1QDQorCQkNCitMZWF2ZUxvb3BDbXBzMTY6IGFkZCByZHgsOA0KK0xlYXZlTG9vcENtcHM4OiBhZGQgcmR4LDgNCitMZWF2ZUxvb3BDbXBzOg0KKw0KKyAgICAgICAgdGVzdCAgICBlYXgsIDB4MDAwMEZGRkYNCisgICAgICAgIGpueiBMZW5Mb3dlcg0KKw0KKyAgICAgICAgdGVzdCBlYXgsMHhmZmZmZmZmZg0KKw0KKyAgICAgICAgam56IExlbkxvd2VyMzINCisNCisgICAgICAgIGFkZCByZHgsNA0KKyAgICAgICAgc2hyIHJheCwzMg0KKyAgICAgICAgb3IgYXgsYXgNCisJCUJFRk9SRV9KTVANCisgICAgICAgIGpueiBMZW5Mb3dlcg0KKwkJQUZURVJfSk1QDQorDQorTGVuTG93ZXIzMjoNCisgICAgICAgIHNociBlYXgsMTYNCisgICAgICAgIGFkZCByZHgsMg0KKwkJDQorTGVuTG93ZXI6CQkNCisgICAgICAgIHN1YiBhbCwgMQ0KKyAgICAgICAgYWRjIHJkeCwgMA0KKy8vOzs7IENhbGN1bGF0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBtYXRjaC4gSWYgaXQgaXMgbG9uZ2VyIHRoYW4gTUFYX01BVENILA0KKy8vOzs7IHRoZW4gYXV0b21hdGljYWxseSBhY2NlcHQgaXQgYXMgdGhlIGJlc3QgcG9zc2libGUgbWF0Y2ggYW5kIGxlYXZlLg0KKw0KKyAgICAgICAgbGVhIHJheCwgW3JkaSArIHJkeF0NCisgICAgICAgIHN1YiByYXgsIHI5DQorICAgICAgICBjbXAgZWF4LCBNQVhfTUFUQ0gNCisJCUJFRk9SRV9KTVANCisgICAgICAgIGpnZSBMZW5NYXhpbXVtDQorCQlBRlRFUl9KTVANCisvKg0KKzs7OyBJZiB0aGUgbGVuZ3RoIG9mIHRoZSBtYXRjaCBpcyBub3QgbG9uZ2VyIHRoYW4gdGhlIGJlc3QgbWF0Y2ggd2UNCis7OzsgaGF2ZSBzbyBmYXIsIHRoZW4gZm9yZ2V0IGl0IGFuZCByZXR1cm4gdG8gdGhlIGxvb2t1cCBsb29wLg0KKzsvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KKyovDQorICAgICAgICBjbXAgZWF4LCByMTFkDQorICAgICAgICBqZyAgTG9uZ2VyTWF0Y2gNCisNCisgICAgICAgIGxlYSByc2ksW3IxMCtyMTFdDQorDQorICAgICAgICBtb3YgcmRpLCBwcmV2X2FkDQorICAgICAgICBtb3YgZWR4LCBbY2hhaW5sZW53bWFza10NCisJCUJFRk9SRV9KTVANCisgICAgICAgIGptcCBMb29rdXBMb29wDQorCQlBRlRFUl9KTVANCisvKg0KKzs7OyAgICAgICAgIHMtPm1hdGNoX3N0YXJ0ID0gY3VyX21hdGNoOw0KKzs7OyAgICAgICAgIGJlc3RfbGVuID0gbGVuOw0KKzs7OyAgICAgICAgIGlmIChsZW4gPj0gbmljZV9tYXRjaCkgYnJlYWs7DQorOzs7ICAgICAgICAgc2Nhbl9lbmQgPSAqKHVzaGYqKShzY2FuK2Jlc3RfbGVuLTEpOw0KKyovDQorTG9uZ2VyTWF0Y2g6DQorICAgICAgICBtb3YgcjExZCwgZWF4DQorICAgICAgICBtb3YgbWF0Y2hfc3RhcnQsIHI4ZA0KKyAgICAgICAgY21wIGVheCwgW25pY2VtYXRjaF0NCisJCUJFRk9SRV9KTVANCisgICAgICAgIGpnZSBMZWF2ZU5vdw0KKwkJQUZURVJfSk1QDQorDQorICAgICAgICBsZWEgcnNpLFtyMTArcmF4XQ0KKw0KKyAgICAgICAgbW92enggICBlYngsIHdvcmQgcHRyIFtyOSArIHJheCAtIDFdDQorICAgICAgICBtb3YgcmRpLCBwcmV2X2FkDQorICAgICAgICBtb3YgZWR4LCBbY2hhaW5sZW53bWFza10NCisJCUJFRk9SRV9KTVANCisgICAgICAgIGptcCBMb29rdXBMb29wDQorCQlBRlRFUl9KTVANCisNCisvLzs7OyBBY2NlcHQgdGhlIGN1cnJlbnQgc3RyaW5nLCB3aXRoIHRoZSBtYXhpbXVtIHBvc3NpYmxlIGxlbmd0aC4NCisNCitMZW5NYXhpbXVtOg0KKyAgICAgICAgbW92IHIxMWQsTUFYX01BVENIDQorICAgICAgICBtb3YgbWF0Y2hfc3RhcnQsIHI4ZA0KKw0KKy8vOzs7IGlmICgodUludCliZXN0X2xlbiA8PSBzLT5sb29rYWhlYWQpIHJldHVybiAodUludCliZXN0X2xlbjsNCisvLzs7OyByZXR1cm4gcy0+bG9va2FoZWFkOw0KKw0KK0xlYXZlTm93Og0KKyAgICAgICAgbW92IGVheCwgTG9va2FoZWFkDQorICAgICAgICBjbXAgcjExZCwgZWF4DQorICAgICAgICBjbW92bmcgZWF4LCByMTFkDQorDQorDQorDQorLy87OzsgUmVzdG9yZSB0aGUgc3RhY2sgYW5kIHJldHVybiBmcm9tIHdoZW5jZSB3ZSBjYW1lLg0KKw0KKw0KKy8vICAgICAgICBtb3YgcnNpLFtzYXZlX3JzaV0NCisvLyAgICAgICAgbW92IHJkaSxbc2F2ZV9yZGldDQorICAgICAgICBtb3YgcmJ4LFtzYXZlX3JieF0NCisgICAgICAgIG1vdiByYnAsW3NhdmVfcmJwXQ0KKyAgICAgICAgbW92IHIxMixbc2F2ZV9yMTJdDQorICAgICAgICBtb3YgcjEzLFtzYXZlX3IxM10NCisgICAgICAgIG1vdiByMTQsW3NhdmVfcjE0XQ0KKyAgICAgICAgbW92IHIxNSxbc2F2ZV9yMTVdDQorDQorDQorICAgICAgICByZXQgMA0KKy8vOyBwbGVhc2UgZG9uJ3QgcmVtb3ZlIHRoaXMgc3RyaW5nICENCisvLzsgWW91ciBjYW4gZnJlZWx5IHVzZSBndm1hdDY0IGluIGFueSBmcmVlIG9yIGNvbW1lcmNpYWwgYXBwDQorLy87IGJ1dCBpdCBpcyBmYXIgYmV0dGVyIGRvbid0IHJlbW92ZSB0aGUgc3RyaW5nIGluIHRoZSBiaW5hcnkhDQorIC8vICAgZGIgICAgIDBkaCwwYWgsImFzbTY4NiB3aXRoIG1hc20sIG9wdGltaXNlZCBhc3NlbWJseSBjb2RlIGZyb20gQnJpYW4gUmFpdGVyLCB3cml0dGVuIDE5OTgsIGNvbnZlcnRlZCB0byBhbWQgNjQgYnkgR2lsbGVzIFZvbGxhbnQgMjAwNSIsMGRoLDBhaCwwDQorDQorDQorbWF0Y2hfaW5pdDoNCisgIHJldCAwDQorDQorDQpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvaW5mYmFjazkvUkVBRE1FIGIvc3JjL2NvbnRyaWIvaW5mYmFjazkvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3NWVkMTMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29udHJpYi9pbmZiYWNrOS9SRUFETUUKQEAgLTAsMCArMSBAQAorU2VlIGluZmJhY2s5LmggZm9yIHdoYXQgdGhpcyBpcyBhbmQgaG93IHRvIHVzZSBpdC4KZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL2luZmJhY2s5L2luZmJhY2s5LmMgYi9zcmMvY29udHJpYi9pbmZiYWNrOS9pbmZiYWNrOS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1ZmIzZTMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29udHJpYi9pbmZiYWNrOS9pbmZiYWNrOS5jCkBAIC0wLDAgKzEsNjE1IEBACisvKiBpbmZiYWNrOS5jIC0tIGluZmxhdGUgZGVmbGF0ZTY0IGRhdGEgdXNpbmcgYSBjYWxsLWJhY2sgaW50ZXJmYWNlCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwOCBNYXJrIEFkbGVyCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCisgKi8KKworI2luY2x1ZGUgInp1dGlsLmgiCisjaW5jbHVkZSAiaW5mYmFjazkuaCIKKyNpbmNsdWRlICJpbmZ0cmVlOS5oIgorI2luY2x1ZGUgImluZmxhdGU5LmgiCisKKyNkZWZpbmUgV1NJWkUgNjU1MzZVTAorCisvKgorICAgc3RybSBwcm92aWRlcyBtZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbnMgaW4gemFsbG9jIGFuZCB6ZnJlZSwgb3IKKyAgIFpfTlVMTCB0byB1c2UgdGhlIGxpYnJhcnkgbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb25zLgorCisgICB3aW5kb3cgaXMgYSB1c2VyLXN1cHBsaWVkIHdpbmRvdyBhbmQgb3V0cHV0IGJ1ZmZlciB0aGF0IGlzIDY0SyBieXRlcy4KKyAqLworaW50IFpFWFBPUlQgaW5mbGF0ZUJhY2s5SW5pdF8oc3RybSwgd2luZG93LCB2ZXJzaW9uLCBzdHJlYW1fc2l6ZSkKK3pfc3RyZWFtIEZBUiAqc3RybTsKK3Vuc2lnbmVkIGNoYXIgRkFSICp3aW5kb3c7Citjb25zdCBjaGFyICp2ZXJzaW9uOworaW50IHN0cmVhbV9zaXplOworeworICAgIHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqc3RhdGU7CisKKyAgICBpZiAodmVyc2lvbiA9PSBaX05VTEwgfHwgdmVyc2lvblswXSAhPSBaTElCX1ZFUlNJT05bMF0gfHwKKyAgICAgICAgc3RyZWFtX3NpemUgIT0gKGludCkoc2l6ZW9mKHpfc3RyZWFtKSkpCisgICAgICAgIHJldHVybiBaX1ZFUlNJT05fRVJST1I7CisgICAgaWYgKHN0cm0gPT0gWl9OVUxMIHx8IHdpbmRvdyA9PSBaX05VTEwpCisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyAgICBzdHJtLT5tc2cgPSBaX05VTEw7ICAgICAgICAgICAgICAgICAvKiBpbiBjYXNlIHdlIHJldHVybiBhbiBlcnJvciAqLworICAgIGlmIChzdHJtLT56YWxsb2MgPT0gKGFsbG9jX2Z1bmMpMCkgeworICAgICAgICBzdHJtLT56YWxsb2MgPSB6Y2FsbG9jOworICAgICAgICBzdHJtLT5vcGFxdWUgPSAodm9pZHBmKTA7CisgICAgfQorICAgIGlmIChzdHJtLT56ZnJlZSA9PSAoZnJlZV9mdW5jKTApIHN0cm0tPnpmcmVlID0gemNmcmVlOworICAgIHN0YXRlID0gKHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqKVpBTExPQyhzdHJtLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGluZmxhdGVfc3RhdGUpKTsKKyAgICBpZiAoc3RhdGUgPT0gWl9OVUxMKSByZXR1cm4gWl9NRU1fRVJST1I7CisgICAgVHJhY2V2KChzdGRlcnIsICJpbmZsYXRlOiBhbGxvY2F0ZWRcbiIpKTsKKyAgICBzdHJtLT5zdGF0ZSA9ICh2b2lkcGYpc3RhdGU7CisgICAgc3RhdGUtPndpbmRvdyA9IHdpbmRvdzsKKyAgICByZXR1cm4gWl9PSzsKK30KKworLyoKKyAgIEJ1aWxkIGFuZCBvdXRwdXQgbGVuZ3RoIGFuZCBkaXN0YW5jZSBkZWNvZGluZyB0YWJsZXMgZm9yIGZpeGVkIGNvZGUKKyAgIGRlY29kaW5nLgorICovCisjaWZkZWYgTUFLRUZJWEVECisjaW5jbHVkZSA8c3RkaW8uaD4KKwordm9pZCBtYWtlZml4ZWQ5KHZvaWQpCit7CisgICAgdW5zaWduZWQgc3ltLCBiaXRzLCBsb3csIHNpemU7CisgICAgY29kZSAqbmV4dCwgKmxlbmZpeCwgKmRpc3RmaXg7CisgICAgc3RydWN0IGluZmxhdGVfc3RhdGUgc3RhdGU7CisgICAgY29kZSBmaXhlZFs1NDRdOworCisgICAgLyogbGl0ZXJhbC9sZW5ndGggdGFibGUgKi8KKyAgICBzeW0gPSAwOworICAgIHdoaWxlIChzeW0gPCAxNDQpIHN0YXRlLmxlbnNbc3ltKytdID0gODsKKyAgICB3aGlsZSAoc3ltIDwgMjU2KSBzdGF0ZS5sZW5zW3N5bSsrXSA9IDk7CisgICAgd2hpbGUgKHN5bSA8IDI4MCkgc3RhdGUubGVuc1tzeW0rK10gPSA3OworICAgIHdoaWxlIChzeW0gPCAyODgpIHN0YXRlLmxlbnNbc3ltKytdID0gODsKKyAgICBuZXh0ID0gZml4ZWQ7CisgICAgbGVuZml4ID0gbmV4dDsKKyAgICBiaXRzID0gOTsKKyAgICBpbmZsYXRlX3RhYmxlOShMRU5TLCBzdGF0ZS5sZW5zLCAyODgsICYobmV4dCksICYoYml0cyksIHN0YXRlLndvcmspOworCisgICAgLyogZGlzdGFuY2UgdGFibGUgKi8KKyAgICBzeW0gPSAwOworICAgIHdoaWxlIChzeW0gPCAzMikgc3RhdGUubGVuc1tzeW0rK10gPSA1OworICAgIGRpc3RmaXggPSBuZXh0OworICAgIGJpdHMgPSA1OworICAgIGluZmxhdGVfdGFibGU5KERJU1RTLCBzdGF0ZS5sZW5zLCAzMiwgJihuZXh0KSwgJihiaXRzKSwgc3RhdGUud29yayk7CisKKyAgICAvKiB3cml0ZSB0YWJsZXMgKi8KKyAgICBwdXRzKCIgICAgLyogaW5mZml4OS5oIC0tIHRhYmxlIGZvciBkZWNvZGluZyBkZWZsYXRlNjQgZml4ZWQgY29kZXMiKTsKKyAgICBwdXRzKCIgICAgICogR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgbWFrZWZpeGVkOSgpLiIpOworICAgIHB1dHMoIiAgICAgKi8iKTsKKyAgICBwdXRzKCIiKTsKKyAgICBwdXRzKCIgICAgLyogV0FSTklORzogdGhpcyBmaWxlIHNob3VsZCAqbm90KiBiZSB1c2VkIGJ5IGFwcGxpY2F0aW9ucy4iKTsKKyAgICBwdXRzKCIgICAgICAgSXQgaXMgcGFydCBvZiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBsaWJyYXJ5IGFuZCBpcyIpOworICAgIHB1dHMoIiAgICAgICBzdWJqZWN0IHRvIGNoYW5nZS4gQXBwbGljYXRpb25zIHNob3VsZCBvbmx5IHVzZSB6bGliLmguIik7CisgICAgcHV0cygiICAgICAqLyIpOworICAgIHB1dHMoIiIpOworICAgIHNpemUgPSAxVSA8PCA5OworICAgIHByaW50ZigiICAgIHN0YXRpYyBjb25zdCBjb2RlIGxlbmZpeFsldV0gPSB7Iiwgc2l6ZSk7CisgICAgbG93ID0gMDsKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGlmICgobG93ICUgNikgPT0gMCkgcHJpbnRmKCJcbiAgICAgICAgIik7CisgICAgICAgIHByaW50ZigieyV1LCV1LCVkfSIsIGxlbmZpeFtsb3ddLm9wLCBsZW5maXhbbG93XS5iaXRzLAorICAgICAgICAgICAgICAgbGVuZml4W2xvd10udmFsKTsKKyAgICAgICAgaWYgKCsrbG93ID09IHNpemUpIGJyZWFrOworICAgICAgICBwdXRjaGFyKCcsJyk7CisgICAgfQorICAgIHB1dHMoIlxuICAgIH07Iik7CisgICAgc2l6ZSA9IDFVIDw8IDU7CisgICAgcHJpbnRmKCJcbiAgICBzdGF0aWMgY29uc3QgY29kZSBkaXN0Zml4WyV1XSA9IHsiLCBzaXplKTsKKyAgICBsb3cgPSAwOworICAgIGZvciAoOzspIHsKKyAgICAgICAgaWYgKChsb3cgJSA1KSA9PSAwKSBwcmludGYoIlxuICAgICAgICAiKTsKKyAgICAgICAgcHJpbnRmKCJ7JXUsJXUsJWR9IiwgZGlzdGZpeFtsb3ddLm9wLCBkaXN0Zml4W2xvd10uYml0cywKKyAgICAgICAgICAgICAgIGRpc3RmaXhbbG93XS52YWwpOworICAgICAgICBpZiAoKytsb3cgPT0gc2l6ZSkgYnJlYWs7CisgICAgICAgIHB1dGNoYXIoJywnKTsKKyAgICB9CisgICAgcHV0cygiXG4gICAgfTsiKTsKK30KKyNlbmRpZiAvKiBNQUtFRklYRUQgKi8KKworLyogTWFjcm9zIGZvciBpbmZsYXRlQmFjaygpOiAqLworCisvKiBDbGVhciB0aGUgaW5wdXQgYml0IGFjY3VtdWxhdG9yICovCisjZGVmaW5lIElOSVRCSVRTKCkgXAorICAgIGRvIHsgXAorICAgICAgICBob2xkID0gMDsgXAorICAgICAgICBiaXRzID0gMDsgXAorICAgIH0gd2hpbGUgKDApCisKKy8qIEFzc3VyZSB0aGF0IHNvbWUgaW5wdXQgaXMgYXZhaWxhYmxlLiAgSWYgaW5wdXQgaXMgcmVxdWVzdGVkLCBidXQgZGVuaWVkLAorICAgdGhlbiByZXR1cm4gYSBaX0JVRl9FUlJPUiBmcm9tIGluZmxhdGVCYWNrKCkuICovCisjZGVmaW5lIFBVTEwoKSBcCisgICAgZG8geyBcCisgICAgICAgIGlmIChoYXZlID09IDApIHsgXAorICAgICAgICAgICAgaGF2ZSA9IGluKGluX2Rlc2MsICZuZXh0KTsgXAorICAgICAgICAgICAgaWYgKGhhdmUgPT0gMCkgeyBcCisgICAgICAgICAgICAgICAgbmV4dCA9IFpfTlVMTDsgXAorICAgICAgICAgICAgICAgIHJldCA9IFpfQlVGX0VSUk9SOyBcCisgICAgICAgICAgICAgICAgZ290byBpbmZfbGVhdmU7IFwKKyAgICAgICAgICAgIH0gXAorICAgICAgICB9IFwKKyAgICB9IHdoaWxlICgwKQorCisvKiBHZXQgYSBieXRlIG9mIGlucHV0IGludG8gdGhlIGJpdCBhY2N1bXVsYXRvciwgb3IgcmV0dXJuIGZyb20gaW5mbGF0ZUJhY2soKQorICAgd2l0aCBhbiBlcnJvciBpZiB0aGVyZSBpcyBubyBpbnB1dCBhdmFpbGFibGUuICovCisjZGVmaW5lIFBVTExCWVRFKCkgXAorICAgIGRvIHsgXAorICAgICAgICBQVUxMKCk7IFwKKyAgICAgICAgaGF2ZS0tOyBcCisgICAgICAgIGhvbGQgKz0gKHVuc2lnbmVkIGxvbmcpKCpuZXh0KyspIDw8IGJpdHM7IFwKKyAgICAgICAgYml0cyArPSA4OyBcCisgICAgfSB3aGlsZSAoMCkKKworLyogQXNzdXJlIHRoYXQgdGhlcmUgYXJlIGF0IGxlYXN0IG4gYml0cyBpbiB0aGUgYml0IGFjY3VtdWxhdG9yLiAgSWYgdGhlcmUgaXMKKyAgIG5vdCBlbm91Z2ggYXZhaWxhYmxlIGlucHV0IHRvIGRvIHRoYXQsIHRoZW4gcmV0dXJuIGZyb20gaW5mbGF0ZUJhY2soKSB3aXRoCisgICBhbiBlcnJvci4gKi8KKyNkZWZpbmUgTkVFREJJVFMobikgXAorICAgIGRvIHsgXAorICAgICAgICB3aGlsZSAoYml0cyA8ICh1bnNpZ25lZCkobikpIFwKKyAgICAgICAgICAgIFBVTExCWVRFKCk7IFwKKyAgICB9IHdoaWxlICgwKQorCisvKiBSZXR1cm4gdGhlIGxvdyBuIGJpdHMgb2YgdGhlIGJpdCBhY2N1bXVsYXRvciAobiA8PSAxNikgKi8KKyNkZWZpbmUgQklUUyhuKSBcCisgICAgKCh1bnNpZ25lZClob2xkICYgKCgxVSA8PCAobikpIC0gMSkpCisKKy8qIFJlbW92ZSBuIGJpdHMgZnJvbSB0aGUgYml0IGFjY3VtdWxhdG9yICovCisjZGVmaW5lIERST1BCSVRTKG4pIFwKKyAgICBkbyB7IFwKKyAgICAgICAgaG9sZCA+Pj0gKG4pOyBcCisgICAgICAgIGJpdHMgLT0gKHVuc2lnbmVkKShuKTsgXAorICAgIH0gd2hpbGUgKDApCisKKy8qIFJlbW92ZSB6ZXJvIHRvIHNldmVuIGJpdHMgYXMgbmVlZGVkIHRvIGdvIHRvIGEgYnl0ZSBib3VuZGFyeSAqLworI2RlZmluZSBCWVRFQklUUygpIFwKKyAgICBkbyB7IFwKKyAgICAgICAgaG9sZCA+Pj0gYml0cyAmIDc7IFwKKyAgICAgICAgYml0cyAtPSBiaXRzICYgNzsgXAorICAgIH0gd2hpbGUgKDApCisKKy8qIEFzc3VyZSB0aGF0IHNvbWUgb3V0cHV0IHNwYWNlIGlzIGF2YWlsYWJsZSwgYnkgd3JpdGluZyBvdXQgdGhlIHdpbmRvdworICAgaWYgaXQncyBmdWxsLiAgSWYgdGhlIHdyaXRlIGZhaWxzLCByZXR1cm4gZnJvbSBpbmZsYXRlQmFjaygpIHdpdGggYQorICAgWl9CVUZfRVJST1IuICovCisjZGVmaW5lIFJPT00oKSBcCisgICAgZG8geyBcCisgICAgICAgIGlmIChsZWZ0ID09IDApIHsgXAorICAgICAgICAgICAgcHV0ID0gd2luZG93OyBcCisgICAgICAgICAgICBsZWZ0ID0gV1NJWkU7IFwKKyAgICAgICAgICAgIHdyYXAgPSAxOyBcCisgICAgICAgICAgICBpZiAob3V0KG91dF9kZXNjLCBwdXQsICh1bnNpZ25lZClsZWZ0KSkgeyBcCisgICAgICAgICAgICAgICAgcmV0ID0gWl9CVUZfRVJST1I7IFwKKyAgICAgICAgICAgICAgICBnb3RvIGluZl9sZWF2ZTsgXAorICAgICAgICAgICAgfSBcCisgICAgICAgIH0gXAorICAgIH0gd2hpbGUgKDApCisKKy8qCisgICBzdHJtIHByb3ZpZGVzIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbnMgYW5kIHdpbmRvdyBidWZmZXIgb24gaW5wdXQsCisgICBhbmQgcHJvdmlkZXMgaW5mb3JtYXRpb24gb24gdGhlIHVudXNlZCBpbnB1dCBvbiByZXR1cm4uICBGb3IgWl9EQVRBX0VSUk9SCisgICByZXR1cm5zLCBzdHJtIHdpbGwgYWxzbyBwcm92aWRlIGFuIGVycm9yIG1lc3NhZ2UuCisKKyAgIGluKCkgYW5kIG91dCgpIGFyZSB0aGUgY2FsbC1iYWNrIGlucHV0IGFuZCBvdXRwdXQgZnVuY3Rpb25zLiAgV2hlbgorICAgaW5mbGF0ZUJhY2soKSBuZWVkcyBtb3JlIGlucHV0LCBpdCBjYWxscyBpbigpLiAgV2hlbiBpbmZsYXRlQmFjaygpIGhhcworICAgZmlsbGVkIHRoZSB3aW5kb3cgd2l0aCBvdXRwdXQsIG9yIHdoZW4gaXQgY29tcGxldGVzIHdpdGggZGF0YSBpbiB0aGUKKyAgIHdpbmRvdywgaXQgY2FsbHMgb3V0KCkgdG8gd3JpdGUgb3V0IHRoZSBkYXRhLiAgVGhlIGFwcGxpY2F0aW9uIG11c3Qgbm90CisgICBjaGFuZ2UgdGhlIHByb3ZpZGVkIGlucHV0IHVudGlsIGluKCkgaXMgY2FsbGVkIGFnYWluIG9yIGluZmxhdGVCYWNrKCkKKyAgIHJldHVybnMuICBUaGUgYXBwbGljYXRpb24gbXVzdCBub3QgY2hhbmdlIHRoZSB3aW5kb3cvb3V0cHV0IGJ1ZmZlciB1bnRpbAorICAgaW5mbGF0ZUJhY2soKSByZXR1cm5zLgorCisgICBpbigpIGFuZCBvdXQoKSBhcmUgY2FsbGVkIHdpdGggYSBkZXNjcmlwdG9yIHBhcmFtZXRlciBwcm92aWRlZCBpbiB0aGUKKyAgIGluZmxhdGVCYWNrKCkgY2FsbC4gIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHN0cnVjdHVyZSB0aGF0IHByb3ZpZGVzIHRoZQorICAgaW5mb3JtYXRpb24gcmVxdWlyZWQgdG8gZG8gdGhlIHJlYWQgb3Igd3JpdGUsIGFzIHdlbGwgYXMgYWNjdW11bGF0ZWQKKyAgIGluZm9ybWF0aW9uIG9uIHRoZSBpbnB1dCBhbmQgb3V0cHV0IHN1Y2ggYXMgdG90YWxzIGFuZCBjaGVjayB2YWx1ZXMuCisKKyAgIGluKCkgc2hvdWxkIHJldHVybiB6ZXJvIG9uIGZhaWx1cmUuICBvdXQoKSBzaG91bGQgcmV0dXJuIG5vbi16ZXJvIG9uCisgICBmYWlsdXJlLiAgSWYgZWl0aGVyIGluKCkgb3Igb3V0KCkgZmFpbHMsIHRoYW4gaW5mbGF0ZUJhY2soKSByZXR1cm5zIGEKKyAgIFpfQlVGX0VSUk9SLiAgc3RybS0+bmV4dF9pbiBjYW4gYmUgY2hlY2tlZCBmb3IgWl9OVUxMIHRvIHNlZSB3aGV0aGVyIGl0CisgICB3YXMgaW4oKSBvciBvdXQoKSB0aGF0IGNhdXNlZCBpbiB0aGUgZXJyb3IuICBPdGhlcndpc2UsICBpbmZsYXRlQmFjaygpCisgICByZXR1cm5zIFpfU1RSRUFNX0VORCBvbiBzdWNjZXNzLCBaX0RBVEFfRVJST1IgZm9yIGFuIGRlZmxhdGUgZm9ybWF0CisgICBlcnJvciwgb3IgWl9NRU1fRVJST1IgaWYgaXQgY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIHN0YXRlLgorICAgaW5mbGF0ZUJhY2soKSBjYW4gYWxzbyByZXR1cm4gWl9TVFJFQU1fRVJST1IgaWYgdGhlIGlucHV0IHBhcmFtZXRlcnMKKyAgIGFyZSBub3QgY29ycmVjdCwgaS5lLiBzdHJtIGlzIFpfTlVMTCBvciB0aGUgc3RhdGUgd2FzIG5vdCBpbml0aWFsaXplZC4KKyAqLworaW50IFpFWFBPUlQgaW5mbGF0ZUJhY2s5KHN0cm0sIGluLCBpbl9kZXNjLCBvdXQsIG91dF9kZXNjKQorel9zdHJlYW0gRkFSICpzdHJtOworaW5fZnVuYyBpbjsKK3ZvaWQgRkFSICppbl9kZXNjOworb3V0X2Z1bmMgb3V0Owordm9pZCBGQVIgKm91dF9kZXNjOworeworICAgIHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqc3RhdGU7CisgICAgel9jb25zdCB1bnNpZ25lZCBjaGFyIEZBUiAqbmV4dDsgICAgLyogbmV4dCBpbnB1dCAqLworICAgIHVuc2lnbmVkIGNoYXIgRkFSICpwdXQ7ICAgICAvKiBuZXh0IG91dHB1dCAqLworICAgIHVuc2lnbmVkIGhhdmU7ICAgICAgICAgICAgICAvKiBhdmFpbGFibGUgaW5wdXQgKi8KKyAgICB1bnNpZ25lZCBsb25nIGxlZnQ7ICAgICAgICAgLyogYXZhaWxhYmxlIG91dHB1dCAqLworICAgIGluZmxhdGVfbW9kZSBtb2RlOyAgICAgICAgICAvKiBjdXJyZW50IGluZmxhdGUgbW9kZSAqLworICAgIGludCBsYXN0YmxvY2s7ICAgICAgICAgICAgICAvKiB0cnVlIGlmIHByb2Nlc3NpbmcgbGFzdCBibG9jayAqLworICAgIGludCB3cmFwOyAgICAgICAgICAgICAgICAgICAvKiB0cnVlIGlmIHRoZSB3aW5kb3cgaGFzIHdyYXBwZWQgKi8KKyAgICB1bnNpZ25lZCBjaGFyIEZBUiAqd2luZG93OyAgLyogYWxsb2NhdGVkIHNsaWRpbmcgd2luZG93LCBpZiBuZWVkZWQgKi8KKyAgICB1bnNpZ25lZCBsb25nIGhvbGQ7ICAgICAgICAgLyogYml0IGJ1ZmZlciAqLworICAgIHVuc2lnbmVkIGJpdHM7ICAgICAgICAgICAgICAvKiBiaXRzIGluIGJpdCBidWZmZXIgKi8KKyAgICB1bnNpZ25lZCBleHRyYTsgICAgICAgICAgICAgLyogZXh0cmEgYml0cyBuZWVkZWQgKi8KKyAgICB1bnNpZ25lZCBsb25nIGxlbmd0aDsgICAgICAgLyogbGl0ZXJhbCBvciBsZW5ndGggb2YgZGF0YSB0byBjb3B5ICovCisgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQ7ICAgICAgIC8qIGRpc3RhbmNlIGJhY2sgdG8gY29weSBzdHJpbmcgZnJvbSAqLworICAgIHVuc2lnbmVkIGxvbmcgY29weTsgICAgICAgICAvKiBudW1iZXIgb2Ygc3RvcmVkIG9yIG1hdGNoIGJ5dGVzIHRvIGNvcHkgKi8KKyAgICB1bnNpZ25lZCBjaGFyIEZBUiAqZnJvbTsgICAgLyogd2hlcmUgdG8gY29weSBtYXRjaCBieXRlcyBmcm9tICovCisgICAgY29kZSBjb25zdCBGQVIgKmxlbmNvZGU7ICAgIC8qIHN0YXJ0aW5nIHRhYmxlIGZvciBsZW5ndGgvbGl0ZXJhbCBjb2RlcyAqLworICAgIGNvZGUgY29uc3QgRkFSICpkaXN0Y29kZTsgICAvKiBzdGFydGluZyB0YWJsZSBmb3IgZGlzdGFuY2UgY29kZXMgKi8KKyAgICB1bnNpZ25lZCBsZW5iaXRzOyAgICAgICAgICAgLyogaW5kZXggYml0cyBmb3IgbGVuY29kZSAqLworICAgIHVuc2lnbmVkIGRpc3RiaXRzOyAgICAgICAgICAvKiBpbmRleCBiaXRzIGZvciBkaXN0Y29kZSAqLworICAgIGNvZGUgaGVyZTsgICAgICAgICAgICAgICAgICAvKiBjdXJyZW50IGRlY29kaW5nIHRhYmxlIGVudHJ5ICovCisgICAgY29kZSBsYXN0OyAgICAgICAgICAgICAgICAgIC8qIHBhcmVudCB0YWJsZSBlbnRyeSAqLworICAgIHVuc2lnbmVkIGxlbjsgICAgICAgICAgICAgICAvKiBsZW5ndGggdG8gY29weSBmb3IgcmVwZWF0cywgYml0cyB0byBkcm9wICovCisgICAgaW50IHJldDsgICAgICAgICAgICAgICAgICAgIC8qIHJldHVybiBjb2RlICovCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG9yZGVyWzE5XSA9IC8qIHBlcm11dGF0aW9uIG9mIGNvZGUgbGVuZ3RocyAqLworICAgICAgICB7MTYsIDE3LCAxOCwgMCwgOCwgNywgOSwgNiwgMTAsIDUsIDExLCA0LCAxMiwgMywgMTMsIDIsIDE0LCAxLCAxNX07CisjaW5jbHVkZSAiaW5mZml4OS5oIgorCisgICAgLyogQ2hlY2sgdGhhdCB0aGUgc3RybSBleGlzdHMgYW5kIHRoYXQgdGhlIHN0YXRlIHdhcyBpbml0aWFsaXplZCAqLworICAgIGlmIChzdHJtID09IFpfTlVMTCB8fCBzdHJtLT5zdGF0ZSA9PSBaX05VTEwpCisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyAgICBzdGF0ZSA9IChzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKilzdHJtLT5zdGF0ZTsKKworICAgIC8qIFJlc2V0IHRoZSBzdGF0ZSAqLworICAgIHN0cm0tPm1zZyA9IFpfTlVMTDsKKyAgICBtb2RlID0gVFlQRTsKKyAgICBsYXN0YmxvY2sgPSAwOworICAgIHdyYXAgPSAwOworICAgIHdpbmRvdyA9IHN0YXRlLT53aW5kb3c7CisgICAgbmV4dCA9IHN0cm0tPm5leHRfaW47CisgICAgaGF2ZSA9IG5leHQgIT0gWl9OVUxMID8gc3RybS0+YXZhaWxfaW4gOiAwOworICAgIGhvbGQgPSAwOworICAgIGJpdHMgPSAwOworICAgIHB1dCA9IHdpbmRvdzsKKyAgICBsZWZ0ID0gV1NJWkU7CisgICAgbGVuY29kZSA9IFpfTlVMTDsKKyAgICBkaXN0Y29kZSA9IFpfTlVMTDsKKworICAgIC8qIEluZmxhdGUgdW50aWwgZW5kIG9mIGJsb2NrIG1hcmtlZCBhcyBsYXN0ICovCisgICAgZm9yICg7OykKKyAgICAgICAgc3dpdGNoIChtb2RlKSB7CisgICAgICAgIGNhc2UgVFlQRToKKyAgICAgICAgICAgIC8qIGRldGVybWluZSBhbmQgZGlzcGF0Y2ggYmxvY2sgdHlwZSAqLworICAgICAgICAgICAgaWYgKGxhc3RibG9jaykgeworICAgICAgICAgICAgICAgIEJZVEVCSVRTKCk7CisgICAgICAgICAgICAgICAgbW9kZSA9IERPTkU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBORUVEQklUUygzKTsKKyAgICAgICAgICAgIGxhc3RibG9jayA9IEJJVFMoMSk7CisgICAgICAgICAgICBEUk9QQklUUygxKTsKKyAgICAgICAgICAgIHN3aXRjaCAoQklUUygyKSkgeworICAgICAgICAgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3RvcmVkIGJsb2NrICovCisgICAgICAgICAgICAgICAgVHJhY2V2KChzdGRlcnIsICJpbmZsYXRlOiAgICAgc3RvcmVkIGJsb2NrJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBsYXN0YmxvY2sgPyAiIChsYXN0KSIgOiAiIikpOworICAgICAgICAgICAgICAgIG1vZGUgPSBTVE9SRUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmaXhlZCBibG9jayAqLworICAgICAgICAgICAgICAgIGxlbmNvZGUgPSBsZW5maXg7CisgICAgICAgICAgICAgICAgbGVuYml0cyA9IDk7CisgICAgICAgICAgICAgICAgZGlzdGNvZGUgPSBkaXN0Zml4OworICAgICAgICAgICAgICAgIGRpc3RiaXRzID0gNTsKKyAgICAgICAgICAgICAgICBUcmFjZXYoKHN0ZGVyciwgImluZmxhdGU6ICAgICBmaXhlZCBjb2RlcyBibG9jayVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgbGFzdGJsb2NrID8gIiAobGFzdCkiIDogIiIpKTsKKyAgICAgICAgICAgICAgICBtb2RlID0gTEVOOyAgICAgICAgICAgICAgICAgICAgIC8qIGRlY29kZSBjb2RlcyAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZHluYW1pYyBibG9jayAqLworICAgICAgICAgICAgICAgIFRyYWNldigoc3RkZXJyLCAiaW5mbGF0ZTogICAgIGR5bmFtaWMgY29kZXMgYmxvY2slc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RibG9jayA/ICIgKGxhc3QpIiA6ICIiKSk7CisgICAgICAgICAgICAgICAgbW9kZSA9IFRBQkxFOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgIHN0cm0tPm1zZyA9IChjaGFyICopImludmFsaWQgYmxvY2sgdHlwZSI7CisgICAgICAgICAgICAgICAgbW9kZSA9IEJBRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIERST1BCSVRTKDIpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTVE9SRUQ6CisgICAgICAgICAgICAvKiBnZXQgYW5kIHZlcmlmeSBzdG9yZWQgYmxvY2sgbGVuZ3RoICovCisgICAgICAgICAgICBCWVRFQklUUygpOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBnbyB0byBieXRlIGJvdW5kYXJ5ICovCisgICAgICAgICAgICBORUVEQklUUygzMik7CisgICAgICAgICAgICBpZiAoKGhvbGQgJiAweGZmZmYpICE9ICgoaG9sZCA+PiAxNikgXiAweGZmZmYpKSB7CisgICAgICAgICAgICAgICAgc3RybS0+bXNnID0gKGNoYXIgKikiaW52YWxpZCBzdG9yZWQgYmxvY2sgbGVuZ3RocyI7CisgICAgICAgICAgICAgICAgbW9kZSA9IEJBRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxlbmd0aCA9ICh1bnNpZ25lZClob2xkICYgMHhmZmZmOworICAgICAgICAgICAgVHJhY2V2KChzdGRlcnIsICJpbmZsYXRlOiAgICAgICBzdG9yZWQgbGVuZ3RoICVsdVxuIiwKKyAgICAgICAgICAgICAgICAgICAgbGVuZ3RoKSk7CisgICAgICAgICAgICBJTklUQklUUygpOworCisgICAgICAgICAgICAvKiBjb3B5IHN0b3JlZCBibG9jayBmcm9tIGlucHV0IHRvIG91dHB1dCAqLworICAgICAgICAgICAgd2hpbGUgKGxlbmd0aCAhPSAwKSB7CisgICAgICAgICAgICAgICAgY29weSA9IGxlbmd0aDsKKyAgICAgICAgICAgICAgICBQVUxMKCk7CisgICAgICAgICAgICAgICAgUk9PTSgpOworICAgICAgICAgICAgICAgIGlmIChjb3B5ID4gaGF2ZSkgY29weSA9IGhhdmU7CisgICAgICAgICAgICAgICAgaWYgKGNvcHkgPiBsZWZ0KSBjb3B5ID0gbGVmdDsKKyAgICAgICAgICAgICAgICB6bWVtY3B5KHB1dCwgbmV4dCwgY29weSk7CisgICAgICAgICAgICAgICAgaGF2ZSAtPSBjb3B5OworICAgICAgICAgICAgICAgIG5leHQgKz0gY29weTsKKyAgICAgICAgICAgICAgICBsZWZ0IC09IGNvcHk7CisgICAgICAgICAgICAgICAgcHV0ICs9IGNvcHk7CisgICAgICAgICAgICAgICAgbGVuZ3RoIC09IGNvcHk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBUcmFjZXYoKHN0ZGVyciwgImluZmxhdGU6ICAgICAgIHN0b3JlZCBlbmRcbiIpKTsKKyAgICAgICAgICAgIG1vZGUgPSBUWVBFOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUQUJMRToKKyAgICAgICAgICAgIC8qIGdldCBkeW5hbWljIHRhYmxlIGVudHJpZXMgZGVzY3JpcHRvciAqLworICAgICAgICAgICAgTkVFREJJVFMoMTQpOworICAgICAgICAgICAgc3RhdGUtPm5sZW4gPSBCSVRTKDUpICsgMjU3OworICAgICAgICAgICAgRFJPUEJJVFMoNSk7CisgICAgICAgICAgICBzdGF0ZS0+bmRpc3QgPSBCSVRTKDUpICsgMTsKKyAgICAgICAgICAgIERST1BCSVRTKDUpOworICAgICAgICAgICAgc3RhdGUtPm5jb2RlID0gQklUUyg0KSArIDQ7CisgICAgICAgICAgICBEUk9QQklUUyg0KTsKKyAgICAgICAgICAgIGlmIChzdGF0ZS0+bmxlbiA+IDI4NikgeworICAgICAgICAgICAgICAgIHN0cm0tPm1zZyA9IChjaGFyICopInRvbyBtYW55IGxlbmd0aCBzeW1ib2xzIjsKKyAgICAgICAgICAgICAgICBtb2RlID0gQkFEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgVHJhY2V2KChzdGRlcnIsICJpbmZsYXRlOiAgICAgICB0YWJsZSBzaXplcyBva1xuIikpOworCisgICAgICAgICAgICAvKiBnZXQgY29kZSBsZW5ndGggY29kZSBsZW5ndGhzIChub3QgYSB0eXBvKSAqLworICAgICAgICAgICAgc3RhdGUtPmhhdmUgPSAwOworICAgICAgICAgICAgd2hpbGUgKHN0YXRlLT5oYXZlIDwgc3RhdGUtPm5jb2RlKSB7CisgICAgICAgICAgICAgICAgTkVFREJJVFMoMyk7CisgICAgICAgICAgICAgICAgc3RhdGUtPmxlbnNbb3JkZXJbc3RhdGUtPmhhdmUrK11dID0gKHVuc2lnbmVkIHNob3J0KUJJVFMoMyk7CisgICAgICAgICAgICAgICAgRFJPUEJJVFMoMyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aGlsZSAoc3RhdGUtPmhhdmUgPCAxOSkKKyAgICAgICAgICAgICAgICBzdGF0ZS0+bGVuc1tvcmRlcltzdGF0ZS0+aGF2ZSsrXV0gPSAwOworICAgICAgICAgICAgc3RhdGUtPm5leHQgPSBzdGF0ZS0+Y29kZXM7CisgICAgICAgICAgICBsZW5jb2RlID0gKGNvZGUgY29uc3QgRkFSICopKHN0YXRlLT5uZXh0KTsKKyAgICAgICAgICAgIGxlbmJpdHMgPSA3OworICAgICAgICAgICAgcmV0ID0gaW5mbGF0ZV90YWJsZTkoQ09ERVMsIHN0YXRlLT5sZW5zLCAxOSwgJihzdGF0ZS0+bmV4dCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYobGVuYml0cyksIHN0YXRlLT53b3JrKTsKKyAgICAgICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAgICAgICAgICBzdHJtLT5tc2cgPSAoY2hhciAqKSJpbnZhbGlkIGNvZGUgbGVuZ3RocyBzZXQiOworICAgICAgICAgICAgICAgIG1vZGUgPSBCQUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBUcmFjZXYoKHN0ZGVyciwgImluZmxhdGU6ICAgICAgIGNvZGUgbGVuZ3RocyBva1xuIikpOworCisgICAgICAgICAgICAvKiBnZXQgbGVuZ3RoIGFuZCBkaXN0YW5jZSBjb2RlIGNvZGUgbGVuZ3RocyAqLworICAgICAgICAgICAgc3RhdGUtPmhhdmUgPSAwOworICAgICAgICAgICAgd2hpbGUgKHN0YXRlLT5oYXZlIDwgc3RhdGUtPm5sZW4gKyBzdGF0ZS0+bmRpc3QpIHsKKyAgICAgICAgICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgICAgICAgIGhlcmUgPSBsZW5jb2RlW0JJVFMobGVuYml0cyldOworICAgICAgICAgICAgICAgICAgICBpZiAoKHVuc2lnbmVkKShoZXJlLmJpdHMpIDw9IGJpdHMpIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBQVUxMQllURSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoaGVyZS52YWwgPCAxNikgeworICAgICAgICAgICAgICAgICAgICBORUVEQklUUyhoZXJlLmJpdHMpOworICAgICAgICAgICAgICAgICAgICBEUk9QQklUUyhoZXJlLmJpdHMpOworICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+bGVuc1tzdGF0ZS0+aGF2ZSsrXSA9IGhlcmUudmFsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGhlcmUudmFsID09IDE2KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBORUVEQklUUyhoZXJlLmJpdHMgKyAyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIERST1BCSVRTKGhlcmUuYml0cyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUtPmhhdmUgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm0tPm1zZyA9IChjaGFyICopImludmFsaWQgYml0IGxlbmd0aCByZXBlYXQiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgPSBCQUQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBsZW4gPSAodW5zaWduZWQpKHN0YXRlLT5sZW5zW3N0YXRlLT5oYXZlIC0gMV0pOworICAgICAgICAgICAgICAgICAgICAgICAgY29weSA9IDMgKyBCSVRTKDIpOworICAgICAgICAgICAgICAgICAgICAgICAgRFJPUEJJVFMoMik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaGVyZS52YWwgPT0gMTcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5FRURCSVRTKGhlcmUuYml0cyArIDMpOworICAgICAgICAgICAgICAgICAgICAgICAgRFJPUEJJVFMoaGVyZS5iaXRzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlbiA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBjb3B5ID0gMyArIEJJVFMoMyk7CisgICAgICAgICAgICAgICAgICAgICAgICBEUk9QQklUUygzKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5FRURCSVRTKGhlcmUuYml0cyArIDcpOworICAgICAgICAgICAgICAgICAgICAgICAgRFJPUEJJVFMoaGVyZS5iaXRzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlbiA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBjb3B5ID0gMTEgKyBCSVRTKDcpOworICAgICAgICAgICAgICAgICAgICAgICAgRFJPUEJJVFMoNyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLT5oYXZlICsgY29weSA+IHN0YXRlLT5ubGVuICsgc3RhdGUtPm5kaXN0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJtLT5tc2cgPSAoY2hhciAqKSJpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0IjsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgPSBCQUQ7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY29weS0tKQorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmxlbnNbc3RhdGUtPmhhdmUrK10gPSAodW5zaWduZWQgc2hvcnQpbGVuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogaGFuZGxlIGVycm9yIGJyZWFrcyBpbiB3aGlsZSAqLworICAgICAgICAgICAgaWYgKG1vZGUgPT0gQkFEKSBicmVhazsKKworICAgICAgICAgICAgLyogY2hlY2sgZm9yIGVuZC1vZi1ibG9jayBjb2RlIChiZXR0ZXIgaGF2ZSBvbmUpICovCisgICAgICAgICAgICBpZiAoc3RhdGUtPmxlbnNbMjU2XSA9PSAwKSB7CisgICAgICAgICAgICAgICAgc3RybS0+bXNnID0gKGNoYXIgKikiaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrIjsKKyAgICAgICAgICAgICAgICBtb2RlID0gQkFEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBidWlsZCBjb2RlIHRhYmxlcyAtLSBub3RlOiBkbyBub3QgY2hhbmdlIHRoZSBsZW5iaXRzIG9yIGRpc3RiaXRzCisgICAgICAgICAgICAgICB2YWx1ZXMgaGVyZSAoOSBhbmQgNikgd2l0aG91dCByZWFkaW5nIHRoZSBjb21tZW50cyBpbiBpbmZ0cmVlOS5oCisgICAgICAgICAgICAgICBjb25jZXJuaW5nIHRoZSBFTk9VR0ggY29uc3RhbnRzLCB3aGljaCBkZXBlbmQgb24gdGhvc2UgdmFsdWVzICovCisgICAgICAgICAgICBzdGF0ZS0+bmV4dCA9IHN0YXRlLT5jb2RlczsKKyAgICAgICAgICAgIGxlbmNvZGUgPSAoY29kZSBjb25zdCBGQVIgKikoc3RhdGUtPm5leHQpOworICAgICAgICAgICAgbGVuYml0cyA9IDk7CisgICAgICAgICAgICByZXQgPSBpbmZsYXRlX3RhYmxlOShMRU5TLCBzdGF0ZS0+bGVucywgc3RhdGUtPm5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihzdGF0ZS0+bmV4dCksICYobGVuYml0cyksIHN0YXRlLT53b3JrKTsKKyAgICAgICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAgICAgICAgICBzdHJtLT5tc2cgPSAoY2hhciAqKSJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RocyBzZXQiOworICAgICAgICAgICAgICAgIG1vZGUgPSBCQUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkaXN0Y29kZSA9IChjb2RlIGNvbnN0IEZBUiAqKShzdGF0ZS0+bmV4dCk7CisgICAgICAgICAgICBkaXN0Yml0cyA9IDY7CisgICAgICAgICAgICByZXQgPSBpbmZsYXRlX3RhYmxlOShESVNUUywgc3RhdGUtPmxlbnMgKyBzdGF0ZS0+bmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+bmRpc3QsICYoc3RhdGUtPm5leHQpLCAmKGRpc3RiaXRzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+d29yayk7CisgICAgICAgICAgICBpZiAocmV0KSB7CisgICAgICAgICAgICAgICAgc3RybS0+bXNnID0gKGNoYXIgKikiaW52YWxpZCBkaXN0YW5jZXMgc2V0IjsKKyAgICAgICAgICAgICAgICBtb2RlID0gQkFEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgVHJhY2V2KChzdGRlcnIsICJpbmZsYXRlOiAgICAgICBjb2RlcyBva1xuIikpOworICAgICAgICAgICAgbW9kZSA9IExFTjsKKworICAgICAgICBjYXNlIExFTjoKKyAgICAgICAgICAgIC8qIGdldCBhIGxpdGVyYWwsIGxlbmd0aCwgb3IgZW5kLW9mLWJsb2NrIGNvZGUgKi8KKyAgICAgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgICAgICBoZXJlID0gbGVuY29kZVtCSVRTKGxlbmJpdHMpXTsKKyAgICAgICAgICAgICAgICBpZiAoKHVuc2lnbmVkKShoZXJlLmJpdHMpIDw9IGJpdHMpIGJyZWFrOworICAgICAgICAgICAgICAgIFBVTExCWVRFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaGVyZS5vcCAmJiAoaGVyZS5vcCAmIDB4ZjApID09IDApIHsKKyAgICAgICAgICAgICAgICBsYXN0ID0gaGVyZTsKKyAgICAgICAgICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgICAgICAgIGhlcmUgPSBsZW5jb2RlW2xhc3QudmFsICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQklUUyhsYXN0LmJpdHMgKyBsYXN0Lm9wKSA+PiBsYXN0LmJpdHMpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCh1bnNpZ25lZCkobGFzdC5iaXRzICsgaGVyZS5iaXRzKSA8PSBiaXRzKSBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgUFVMTEJZVEUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgRFJPUEJJVFMobGFzdC5iaXRzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIERST1BCSVRTKGhlcmUuYml0cyk7CisgICAgICAgICAgICBsZW5ndGggPSAodW5zaWduZWQpaGVyZS52YWw7CisKKyAgICAgICAgICAgIC8qIHByb2Nlc3MgbGl0ZXJhbCAqLworICAgICAgICAgICAgaWYgKGhlcmUub3AgPT0gMCkgeworICAgICAgICAgICAgICAgIFRyYWNldnYoKHN0ZGVyciwgaGVyZS52YWwgPj0gMHgyMCAmJiBoZXJlLnZhbCA8IDB4N2YgPworICAgICAgICAgICAgICAgICAgICAgICAgImluZmxhdGU6ICAgICAgICAgbGl0ZXJhbCAnJWMnXG4iIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICJpbmZsYXRlOiAgICAgICAgIGxpdGVyYWwgMHglMDJ4XG4iLCBoZXJlLnZhbCkpOworICAgICAgICAgICAgICAgIFJPT00oKTsKKyAgICAgICAgICAgICAgICAqcHV0KysgPSAodW5zaWduZWQgY2hhcikobGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBsZWZ0LS07CisgICAgICAgICAgICAgICAgbW9kZSA9IExFTjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogcHJvY2VzcyBlbmQgb2YgYmxvY2sgKi8KKyAgICAgICAgICAgIGlmIChoZXJlLm9wICYgMzIpIHsKKyAgICAgICAgICAgICAgICBUcmFjZXZ2KChzdGRlcnIsICJpbmZsYXRlOiAgICAgICAgIGVuZCBvZiBibG9ja1xuIikpOworICAgICAgICAgICAgICAgIG1vZGUgPSBUWVBFOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBpbnZhbGlkIGNvZGUgKi8KKyAgICAgICAgICAgIGlmIChoZXJlLm9wICYgNjQpIHsKKyAgICAgICAgICAgICAgICBzdHJtLT5tc2cgPSAoY2hhciAqKSJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUiOworICAgICAgICAgICAgICAgIG1vZGUgPSBCQUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIGxlbmd0aCBjb2RlIC0tIGdldCBleHRyYSBiaXRzLCBpZiBhbnkgKi8KKyAgICAgICAgICAgIGV4dHJhID0gKHVuc2lnbmVkKShoZXJlLm9wKSAmIDMxOworICAgICAgICAgICAgaWYgKGV4dHJhICE9IDApIHsKKyAgICAgICAgICAgICAgICBORUVEQklUUyhleHRyYSk7CisgICAgICAgICAgICAgICAgbGVuZ3RoICs9IEJJVFMoZXh0cmEpOworICAgICAgICAgICAgICAgIERST1BCSVRTKGV4dHJhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFRyYWNldnYoKHN0ZGVyciwgImluZmxhdGU6ICAgICAgICAgbGVuZ3RoICVsdVxuIiwgbGVuZ3RoKSk7CisKKyAgICAgICAgICAgIC8qIGdldCBkaXN0YW5jZSBjb2RlICovCisgICAgICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgICAgaGVyZSA9IGRpc3Rjb2RlW0JJVFMoZGlzdGJpdHMpXTsKKyAgICAgICAgICAgICAgICBpZiAoKHVuc2lnbmVkKShoZXJlLmJpdHMpIDw9IGJpdHMpIGJyZWFrOworICAgICAgICAgICAgICAgIFBVTExCWVRFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKGhlcmUub3AgJiAweGYwKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgbGFzdCA9IGhlcmU7CisgICAgICAgICAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgICAgICAgICBoZXJlID0gZGlzdGNvZGVbbGFzdC52YWwgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCSVRTKGxhc3QuYml0cyArIGxhc3Qub3ApID4+IGxhc3QuYml0cyldOworICAgICAgICAgICAgICAgICAgICBpZiAoKHVuc2lnbmVkKShsYXN0LmJpdHMgKyBoZXJlLmJpdHMpIDw9IGJpdHMpIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBQVUxMQllURSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBEUk9QQklUUyhsYXN0LmJpdHMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgRFJPUEJJVFMoaGVyZS5iaXRzKTsKKyAgICAgICAgICAgIGlmIChoZXJlLm9wICYgNjQpIHsKKyAgICAgICAgICAgICAgICBzdHJtLT5tc2cgPSAoY2hhciAqKSJpbnZhbGlkIGRpc3RhbmNlIGNvZGUiOworICAgICAgICAgICAgICAgIG1vZGUgPSBCQUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvZmZzZXQgPSAodW5zaWduZWQpaGVyZS52YWw7CisKKyAgICAgICAgICAgIC8qIGdldCBkaXN0YW5jZSBleHRyYSBiaXRzLCBpZiBhbnkgKi8KKyAgICAgICAgICAgIGV4dHJhID0gKHVuc2lnbmVkKShoZXJlLm9wKSAmIDE1OworICAgICAgICAgICAgaWYgKGV4dHJhICE9IDApIHsKKyAgICAgICAgICAgICAgICBORUVEQklUUyhleHRyYSk7CisgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IEJJVFMoZXh0cmEpOworICAgICAgICAgICAgICAgIERST1BCSVRTKGV4dHJhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChvZmZzZXQgPiBXU0laRSAtICh3cmFwID8gMDogbGVmdCkpIHsKKyAgICAgICAgICAgICAgICBzdHJtLT5tc2cgPSAoY2hhciAqKSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayI7CisgICAgICAgICAgICAgICAgbW9kZSA9IEJBRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFRyYWNldnYoKHN0ZGVyciwgImluZmxhdGU6ICAgICAgICAgZGlzdGFuY2UgJWx1XG4iLCBvZmZzZXQpKTsKKworICAgICAgICAgICAgLyogY29weSBtYXRjaCBmcm9tIHdpbmRvdyB0byBvdXRwdXQgKi8KKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBST09NKCk7CisgICAgICAgICAgICAgICAgY29weSA9IFdTSVpFIC0gb2Zmc2V0OworICAgICAgICAgICAgICAgIGlmIChjb3B5IDwgbGVmdCkgeworICAgICAgICAgICAgICAgICAgICBmcm9tID0gcHV0ICsgY29weTsKKyAgICAgICAgICAgICAgICAgICAgY29weSA9IGxlZnQgLSBjb3B5OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZnJvbSA9IHB1dCAtIG9mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgY29weSA9IGxlZnQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChjb3B5ID4gbGVuZ3RoKSBjb3B5ID0gbGVuZ3RoOworICAgICAgICAgICAgICAgIGxlbmd0aCAtPSBjb3B5OworICAgICAgICAgICAgICAgIGxlZnQgLT0gY29weTsKKyAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgICpwdXQrKyA9ICpmcm9tKys7CisgICAgICAgICAgICAgICAgfSB3aGlsZSAoLS1jb3B5KTsKKyAgICAgICAgICAgIH0gd2hpbGUgKGxlbmd0aCAhPSAwKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRE9ORToKKyAgICAgICAgICAgIC8qIGluZmxhdGUgc3RyZWFtIHRlcm1pbmF0ZWQgcHJvcGVybHkgLS0gd3JpdGUgbGVmdG92ZXIgb3V0cHV0ICovCisgICAgICAgICAgICByZXQgPSBaX1NUUkVBTV9FTkQ7CisgICAgICAgICAgICBpZiAobGVmdCA8IFdTSVpFKSB7CisgICAgICAgICAgICAgICAgaWYgKG91dChvdXRfZGVzYywgd2luZG93LCAodW5zaWduZWQpKFdTSVpFIC0gbGVmdCkpKQorICAgICAgICAgICAgICAgICAgICByZXQgPSBaX0JVRl9FUlJPUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdvdG8gaW5mX2xlYXZlOworCisgICAgICAgIGNhc2UgQkFEOgorICAgICAgICAgICAgcmV0ID0gWl9EQVRBX0VSUk9SOworICAgICAgICAgICAgZ290byBpbmZfbGVhdmU7CisKKyAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgLyogY2FuJ3QgaGFwcGVuLCBidXQgbWFrZXMgY29tcGlsZXJzIGhhcHB5ICovCisgICAgICAgICAgICByZXQgPSBaX1NUUkVBTV9FUlJPUjsKKyAgICAgICAgICAgIGdvdG8gaW5mX2xlYXZlOworICAgICAgICB9CisKKyAgICAvKiBSZXR1cm4gdW51c2VkIGlucHV0ICovCisgIGluZl9sZWF2ZToKKyAgICBzdHJtLT5uZXh0X2luID0gbmV4dDsKKyAgICBzdHJtLT5hdmFpbF9pbiA9IGhhdmU7CisgICAgcmV0dXJuIHJldDsKK30KKworaW50IFpFWFBPUlQgaW5mbGF0ZUJhY2s5RW5kKHN0cm0pCit6X3N0cmVhbSBGQVIgKnN0cm07Cit7CisgICAgaWYgKHN0cm0gPT0gWl9OVUxMIHx8IHN0cm0tPnN0YXRlID09IFpfTlVMTCB8fCBzdHJtLT56ZnJlZSA9PSAoZnJlZV9mdW5jKTApCisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyAgICBaRlJFRShzdHJtLCBzdHJtLT5zdGF0ZSk7CisgICAgc3RybS0+c3RhdGUgPSBaX05VTEw7CisgICAgVHJhY2V2KChzdGRlcnIsICJpbmZsYXRlOiBlbmRcbiIpKTsKKyAgICByZXR1cm4gWl9PSzsKK30KZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL2luZmJhY2s5L2luZmJhY2s5LmggYi9zcmMvY29udHJpYi9pbmZiYWNrOS9pbmZiYWNrOS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwNzNjMGEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29udHJpYi9pbmZiYWNrOS9pbmZiYWNrOS5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qIGluZmJhY2s5LmggLS0gaGVhZGVyIGZvciB1c2luZyBpbmZsYXRlQmFjazkgZnVuY3Rpb25zCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgTWFyayBBZGxlcgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAorICovCisKKy8qCisgKiBUaGlzIGhlYWRlciBmaWxlIGFuZCBhc3NvY2lhdGVkIHBhdGNoZXMgcHJvdmlkZSBhIGRlY29kZXIgZm9yIFBLV2FyZSdzCisgKiB1bmRvY3VtZW50ZWQgZGVmbGF0ZTY0IGNvbXByZXNzaW9uIG1ldGhvZCAobWV0aG9kIDkpLiAgVXNlIHdpdGggaW5mYmFjazkuYywKKyAqIGluZnRyZWU5LmgsIGluZnRyZWU5LmMsIGFuZCBpbmZmaXg5LmguICBUaGVzZSBwYXRjaGVzIGFyZSBub3Qgc3VwcG9ydGVkLgorICogVGhpcyBzaG91bGQgYmUgY29tcGlsZWQgd2l0aCB6bGliLCBzaW5jZSBpdCB1c2VzIHp1dGlsLmggYW5kIHp1dGlsLm8uCisgKiBUaGlzIGNvZGUgaGFzIG5vdCB5ZXQgYmVlbiB0ZXN0ZWQgb24gMTYtYml0IGFyY2hpdGVjdHVyZXMuICBTZWUgdGhlCisgKiBjb21tZW50cyBpbiB6bGliLmggZm9yIGluZmxhdGVCYWNrKCkgdXNhZ2UuICBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQKKyAqIGlkZW50aWNhbGx5LCBleGNlcHQgdGhhdCB0aGVyZSBpcyBubyB3aW5kb3dCaXRzIHBhcmFtZXRlciwgYW5kIGEgNjRLCisgKiB3aW5kb3cgbXVzdCBiZSBwcm92aWRlZC4gIEFsc28gaWYgaW50J3MgYXJlIDE2IGJpdHMsIHRoZW4gYSB6ZXJvIGZvcgorICogdGhlIHRoaXJkIHBhcmFtZXRlciBvZiB0aGUgIm91dCIgZnVuY3Rpb24gYWN0dWFsbHkgbWVhbnMgNjU1MzZVTC4KKyAqIHpsaWIuaCBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZSB0aGlzIGhlYWRlciBmaWxlLgorICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRlQmFjazkgT0YoKHpfc3RyZWFtIEZBUiAqc3RybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluX2Z1bmMgaW4sIHZvaWQgRkFSICppbl9kZXNjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0X2Z1bmMgb3V0LCB2b2lkIEZBUiAqb3V0X2Rlc2MpKTsKK1pFWFRFUk4gaW50IFpFWFBPUlQgaW5mbGF0ZUJhY2s5RW5kIE9GKCh6X3N0cmVhbSBGQVIgKnN0cm0pKTsKK1pFWFRFUk4gaW50IFpFWFBPUlQgaW5mbGF0ZUJhY2s5SW5pdF8gT0YoKHpfc3RyZWFtIEZBUiAqc3RybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBGQVIgKndpbmRvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0cmVhbV9zaXplKSk7CisjZGVmaW5lIGluZmxhdGVCYWNrOUluaXQoc3RybSwgd2luZG93KSBcCisgICAgICAgIGluZmxhdGVCYWNrOUluaXRfKChzdHJtKSwgKHdpbmRvdyksIFwKKyAgICAgICAgWkxJQl9WRVJTSU9OLCBzaXplb2Yoel9zdHJlYW0pKQorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvaW5mYmFjazkvaW5mZml4OS5oIGIvc3JjL2NvbnRyaWIvaW5mYmFjazkvaW5mZml4OS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNTY3MWQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29udHJpYi9pbmZiYWNrOS9pbmZmaXg5LmgKQEAgLTAsMCArMSwxMDcgQEAKKyAgICAvKiBpbmZmaXg5LmggLS0gdGFibGUgZm9yIGRlY29kaW5nIGRlZmxhdGU2NCBmaXhlZCBjb2RlcworICAgICAqIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IG1ha2VmaXhlZDkoKS4KKyAgICAgKi8KKworICAgIC8qIFdBUk5JTkc6IHRoaXMgZmlsZSBzaG91bGQgKm5vdCogYmUgdXNlZCBieSBhcHBsaWNhdGlvbnMuCisgICAgICAgSXQgaXMgcGFydCBvZiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBsaWJyYXJ5IGFuZCBpcworICAgICAgIHN1YmplY3QgdG8gY2hhbmdlLiBBcHBsaWNhdGlvbnMgc2hvdWxkIG9ubHkgdXNlIHpsaWIuaC4KKyAgICAgKi8KKworICAgIHN0YXRpYyBjb25zdCBjb2RlIGxlbmZpeFs1MTJdID0geworICAgICAgICB7OTYsNywwfSx7MCw4LDgwfSx7MCw4LDE2fSx7MTMyLDgsMTE1fSx7MTMwLDcsMzF9LHswLDgsMTEyfSwKKyAgICAgICAgezAsOCw0OH0sezAsOSwxOTJ9LHsxMjgsNywxMH0sezAsOCw5Nn0sezAsOCwzMn0sezAsOSwxNjB9LAorICAgICAgICB7MCw4LDB9LHswLDgsMTI4fSx7MCw4LDY0fSx7MCw5LDIyNH0sezEyOCw3LDZ9LHswLDgsODh9LAorICAgICAgICB7MCw4LDI0fSx7MCw5LDE0NH0sezEzMSw3LDU5fSx7MCw4LDEyMH0sezAsOCw1Nn0sezAsOSwyMDh9LAorICAgICAgICB7MTI5LDcsMTd9LHswLDgsMTA0fSx7MCw4LDQwfSx7MCw5LDE3Nn0sezAsOCw4fSx7MCw4LDEzNn0sCisgICAgICAgIHswLDgsNzJ9LHswLDksMjQwfSx7MTI4LDcsNH0sezAsOCw4NH0sezAsOCwyMH0sezEzMyw4LDIyN30sCisgICAgICAgIHsxMzEsNyw0M30sezAsOCwxMTZ9LHswLDgsNTJ9LHswLDksMjAwfSx7MTI5LDcsMTN9LHswLDgsMTAwfSwKKyAgICAgICAgezAsOCwzNn0sezAsOSwxNjh9LHswLDgsNH0sezAsOCwxMzJ9LHswLDgsNjh9LHswLDksMjMyfSwKKyAgICAgICAgezEyOCw3LDh9LHswLDgsOTJ9LHswLDgsMjh9LHswLDksMTUyfSx7MTMyLDcsODN9LHswLDgsMTI0fSwKKyAgICAgICAgezAsOCw2MH0sezAsOSwyMTZ9LHsxMzAsNywyM30sezAsOCwxMDh9LHswLDgsNDR9LHswLDksMTg0fSwKKyAgICAgICAgezAsOCwxMn0sezAsOCwxNDB9LHswLDgsNzZ9LHswLDksMjQ4fSx7MTI4LDcsM30sezAsOCw4Mn0sCisgICAgICAgIHswLDgsMTh9LHsxMzMsOCwxNjN9LHsxMzEsNywzNX0sezAsOCwxMTR9LHswLDgsNTB9LHswLDksMTk2fSwKKyAgICAgICAgezEyOSw3LDExfSx7MCw4LDk4fSx7MCw4LDM0fSx7MCw5LDE2NH0sezAsOCwyfSx7MCw4LDEzMH0sCisgICAgICAgIHswLDgsNjZ9LHswLDksMjI4fSx7MTI4LDcsN30sezAsOCw5MH0sezAsOCwyNn0sezAsOSwxNDh9LAorICAgICAgICB7MTMyLDcsNjd9LHswLDgsMTIyfSx7MCw4LDU4fSx7MCw5LDIxMn0sezEzMCw3LDE5fSx7MCw4LDEwNn0sCisgICAgICAgIHswLDgsNDJ9LHswLDksMTgwfSx7MCw4LDEwfSx7MCw4LDEzOH0sezAsOCw3NH0sezAsOSwyNDR9LAorICAgICAgICB7MTI4LDcsNX0sezAsOCw4Nn0sezAsOCwyMn0sezY1LDgsMH0sezEzMSw3LDUxfSx7MCw4LDExOH0sCisgICAgICAgIHswLDgsNTR9LHswLDksMjA0fSx7MTI5LDcsMTV9LHswLDgsMTAyfSx7MCw4LDM4fSx7MCw5LDE3Mn0sCisgICAgICAgIHswLDgsNn0sezAsOCwxMzR9LHswLDgsNzB9LHswLDksMjM2fSx7MTI4LDcsOX0sezAsOCw5NH0sCisgICAgICAgIHswLDgsMzB9LHswLDksMTU2fSx7MTMyLDcsOTl9LHswLDgsMTI2fSx7MCw4LDYyfSx7MCw5LDIyMH0sCisgICAgICAgIHsxMzAsNywyN30sezAsOCwxMTB9LHswLDgsNDZ9LHswLDksMTg4fSx7MCw4LDE0fSx7MCw4LDE0Mn0sCisgICAgICAgIHswLDgsNzh9LHswLDksMjUyfSx7OTYsNywwfSx7MCw4LDgxfSx7MCw4LDE3fSx7MTMzLDgsMTMxfSwKKyAgICAgICAgezEzMCw3LDMxfSx7MCw4LDExM30sezAsOCw0OX0sezAsOSwxOTR9LHsxMjgsNywxMH0sezAsOCw5N30sCisgICAgICAgIHswLDgsMzN9LHswLDksMTYyfSx7MCw4LDF9LHswLDgsMTI5fSx7MCw4LDY1fSx7MCw5LDIyNn0sCisgICAgICAgIHsxMjgsNyw2fSx7MCw4LDg5fSx7MCw4LDI1fSx7MCw5LDE0Nn0sezEzMSw3LDU5fSx7MCw4LDEyMX0sCisgICAgICAgIHswLDgsNTd9LHswLDksMjEwfSx7MTI5LDcsMTd9LHswLDgsMTA1fSx7MCw4LDQxfSx7MCw5LDE3OH0sCisgICAgICAgIHswLDgsOX0sezAsOCwxMzd9LHswLDgsNzN9LHswLDksMjQyfSx7MTI4LDcsNH0sezAsOCw4NX0sCisgICAgICAgIHswLDgsMjF9LHsxNDQsOCwzfSx7MTMxLDcsNDN9LHswLDgsMTE3fSx7MCw4LDUzfSx7MCw5LDIwMn0sCisgICAgICAgIHsxMjksNywxM30sezAsOCwxMDF9LHswLDgsMzd9LHswLDksMTcwfSx7MCw4LDV9LHswLDgsMTMzfSwKKyAgICAgICAgezAsOCw2OX0sezAsOSwyMzR9LHsxMjgsNyw4fSx7MCw4LDkzfSx7MCw4LDI5fSx7MCw5LDE1NH0sCisgICAgICAgIHsxMzIsNyw4M30sezAsOCwxMjV9LHswLDgsNjF9LHswLDksMjE4fSx7MTMwLDcsMjN9LHswLDgsMTA5fSwKKyAgICAgICAgezAsOCw0NX0sezAsOSwxODZ9LHswLDgsMTN9LHswLDgsMTQxfSx7MCw4LDc3fSx7MCw5LDI1MH0sCisgICAgICAgIHsxMjgsNywzfSx7MCw4LDgzfSx7MCw4LDE5fSx7MTMzLDgsMTk1fSx7MTMxLDcsMzV9LHswLDgsMTE1fSwKKyAgICAgICAgezAsOCw1MX0sezAsOSwxOTh9LHsxMjksNywxMX0sezAsOCw5OX0sezAsOCwzNX0sezAsOSwxNjZ9LAorICAgICAgICB7MCw4LDN9LHswLDgsMTMxfSx7MCw4LDY3fSx7MCw5LDIzMH0sezEyOCw3LDd9LHswLDgsOTF9LAorICAgICAgICB7MCw4LDI3fSx7MCw5LDE1MH0sezEzMiw3LDY3fSx7MCw4LDEyM30sezAsOCw1OX0sezAsOSwyMTR9LAorICAgICAgICB7MTMwLDcsMTl9LHswLDgsMTA3fSx7MCw4LDQzfSx7MCw5LDE4Mn0sezAsOCwxMX0sezAsOCwxMzl9LAorICAgICAgICB7MCw4LDc1fSx7MCw5LDI0Nn0sezEyOCw3LDV9LHswLDgsODd9LHswLDgsMjN9LHs3Nyw4LDB9LAorICAgICAgICB7MTMxLDcsNTF9LHswLDgsMTE5fSx7MCw4LDU1fSx7MCw5LDIwNn0sezEyOSw3LDE1fSx7MCw4LDEwM30sCisgICAgICAgIHswLDgsMzl9LHswLDksMTc0fSx7MCw4LDd9LHswLDgsMTM1fSx7MCw4LDcxfSx7MCw5LDIzOH0sCisgICAgICAgIHsxMjgsNyw5fSx7MCw4LDk1fSx7MCw4LDMxfSx7MCw5LDE1OH0sezEzMiw3LDk5fSx7MCw4LDEyN30sCisgICAgICAgIHswLDgsNjN9LHswLDksMjIyfSx7MTMwLDcsMjd9LHswLDgsMTExfSx7MCw4LDQ3fSx7MCw5LDE5MH0sCisgICAgICAgIHswLDgsMTV9LHswLDgsMTQzfSx7MCw4LDc5fSx7MCw5LDI1NH0sezk2LDcsMH0sezAsOCw4MH0sCisgICAgICAgIHswLDgsMTZ9LHsxMzIsOCwxMTV9LHsxMzAsNywzMX0sezAsOCwxMTJ9LHswLDgsNDh9LHswLDksMTkzfSwKKyAgICAgICAgezEyOCw3LDEwfSx7MCw4LDk2fSx7MCw4LDMyfSx7MCw5LDE2MX0sezAsOCwwfSx7MCw4LDEyOH0sCisgICAgICAgIHswLDgsNjR9LHswLDksMjI1fSx7MTI4LDcsNn0sezAsOCw4OH0sezAsOCwyNH0sezAsOSwxNDV9LAorICAgICAgICB7MTMxLDcsNTl9LHswLDgsMTIwfSx7MCw4LDU2fSx7MCw5LDIwOX0sezEyOSw3LDE3fSx7MCw4LDEwNH0sCisgICAgICAgIHswLDgsNDB9LHswLDksMTc3fSx7MCw4LDh9LHswLDgsMTM2fSx7MCw4LDcyfSx7MCw5LDI0MX0sCisgICAgICAgIHsxMjgsNyw0fSx7MCw4LDg0fSx7MCw4LDIwfSx7MTMzLDgsMjI3fSx7MTMxLDcsNDN9LHswLDgsMTE2fSwKKyAgICAgICAgezAsOCw1Mn0sezAsOSwyMDF9LHsxMjksNywxM30sezAsOCwxMDB9LHswLDgsMzZ9LHswLDksMTY5fSwKKyAgICAgICAgezAsOCw0fSx7MCw4LDEzMn0sezAsOCw2OH0sezAsOSwyMzN9LHsxMjgsNyw4fSx7MCw4LDkyfSwKKyAgICAgICAgezAsOCwyOH0sezAsOSwxNTN9LHsxMzIsNyw4M30sezAsOCwxMjR9LHswLDgsNjB9LHswLDksMjE3fSwKKyAgICAgICAgezEzMCw3LDIzfSx7MCw4LDEwOH0sezAsOCw0NH0sezAsOSwxODV9LHswLDgsMTJ9LHswLDgsMTQwfSwKKyAgICAgICAgezAsOCw3Nn0sezAsOSwyNDl9LHsxMjgsNywzfSx7MCw4LDgyfSx7MCw4LDE4fSx7MTMzLDgsMTYzfSwKKyAgICAgICAgezEzMSw3LDM1fSx7MCw4LDExNH0sezAsOCw1MH0sezAsOSwxOTd9LHsxMjksNywxMX0sezAsOCw5OH0sCisgICAgICAgIHswLDgsMzR9LHswLDksMTY1fSx7MCw4LDJ9LHswLDgsMTMwfSx7MCw4LDY2fSx7MCw5LDIyOX0sCisgICAgICAgIHsxMjgsNyw3fSx7MCw4LDkwfSx7MCw4LDI2fSx7MCw5LDE0OX0sezEzMiw3LDY3fSx7MCw4LDEyMn0sCisgICAgICAgIHswLDgsNTh9LHswLDksMjEzfSx7MTMwLDcsMTl9LHswLDgsMTA2fSx7MCw4LDQyfSx7MCw5LDE4MX0sCisgICAgICAgIHswLDgsMTB9LHswLDgsMTM4fSx7MCw4LDc0fSx7MCw5LDI0NX0sezEyOCw3LDV9LHswLDgsODZ9LAorICAgICAgICB7MCw4LDIyfSx7NjUsOCwwfSx7MTMxLDcsNTF9LHswLDgsMTE4fSx7MCw4LDU0fSx7MCw5LDIwNX0sCisgICAgICAgIHsxMjksNywxNX0sezAsOCwxMDJ9LHswLDgsMzh9LHswLDksMTczfSx7MCw4LDZ9LHswLDgsMTM0fSwKKyAgICAgICAgezAsOCw3MH0sezAsOSwyMzd9LHsxMjgsNyw5fSx7MCw4LDk0fSx7MCw4LDMwfSx7MCw5LDE1N30sCisgICAgICAgIHsxMzIsNyw5OX0sezAsOCwxMjZ9LHswLDgsNjJ9LHswLDksMjIxfSx7MTMwLDcsMjd9LHswLDgsMTEwfSwKKyAgICAgICAgezAsOCw0Nn0sezAsOSwxODl9LHswLDgsMTR9LHswLDgsMTQyfSx7MCw4LDc4fSx7MCw5LDI1M30sCisgICAgICAgIHs5Niw3LDB9LHswLDgsODF9LHswLDgsMTd9LHsxMzMsOCwxMzF9LHsxMzAsNywzMX0sezAsOCwxMTN9LAorICAgICAgICB7MCw4LDQ5fSx7MCw5LDE5NX0sezEyOCw3LDEwfSx7MCw4LDk3fSx7MCw4LDMzfSx7MCw5LDE2M30sCisgICAgICAgIHswLDgsMX0sezAsOCwxMjl9LHswLDgsNjV9LHswLDksMjI3fSx7MTI4LDcsNn0sezAsOCw4OX0sCisgICAgICAgIHswLDgsMjV9LHswLDksMTQ3fSx7MTMxLDcsNTl9LHswLDgsMTIxfSx7MCw4LDU3fSx7MCw5LDIxMX0sCisgICAgICAgIHsxMjksNywxN30sezAsOCwxMDV9LHswLDgsNDF9LHswLDksMTc5fSx7MCw4LDl9LHswLDgsMTM3fSwKKyAgICAgICAgezAsOCw3M30sezAsOSwyNDN9LHsxMjgsNyw0fSx7MCw4LDg1fSx7MCw4LDIxfSx7MTQ0LDgsM30sCisgICAgICAgIHsxMzEsNyw0M30sezAsOCwxMTd9LHswLDgsNTN9LHswLDksMjAzfSx7MTI5LDcsMTN9LHswLDgsMTAxfSwKKyAgICAgICAgezAsOCwzN30sezAsOSwxNzF9LHswLDgsNX0sezAsOCwxMzN9LHswLDgsNjl9LHswLDksMjM1fSwKKyAgICAgICAgezEyOCw3LDh9LHswLDgsOTN9LHswLDgsMjl9LHswLDksMTU1fSx7MTMyLDcsODN9LHswLDgsMTI1fSwKKyAgICAgICAgezAsOCw2MX0sezAsOSwyMTl9LHsxMzAsNywyM30sezAsOCwxMDl9LHswLDgsNDV9LHswLDksMTg3fSwKKyAgICAgICAgezAsOCwxM30sezAsOCwxNDF9LHswLDgsNzd9LHswLDksMjUxfSx7MTI4LDcsM30sezAsOCw4M30sCisgICAgICAgIHswLDgsMTl9LHsxMzMsOCwxOTV9LHsxMzEsNywzNX0sezAsOCwxMTV9LHswLDgsNTF9LHswLDksMTk5fSwKKyAgICAgICAgezEyOSw3LDExfSx7MCw4LDk5fSx7MCw4LDM1fSx7MCw5LDE2N30sezAsOCwzfSx7MCw4LDEzMX0sCisgICAgICAgIHswLDgsNjd9LHswLDksMjMxfSx7MTI4LDcsN30sezAsOCw5MX0sezAsOCwyN30sezAsOSwxNTF9LAorICAgICAgICB7MTMyLDcsNjd9LHswLDgsMTIzfSx7MCw4LDU5fSx7MCw5LDIxNX0sezEzMCw3LDE5fSx7MCw4LDEwN30sCisgICAgICAgIHswLDgsNDN9LHswLDksMTgzfSx7MCw4LDExfSx7MCw4LDEzOX0sezAsOCw3NX0sezAsOSwyNDd9LAorICAgICAgICB7MTI4LDcsNX0sezAsOCw4N30sezAsOCwyM30sezc3LDgsMH0sezEzMSw3LDUxfSx7MCw4LDExOX0sCisgICAgICAgIHswLDgsNTV9LHswLDksMjA3fSx7MTI5LDcsMTV9LHswLDgsMTAzfSx7MCw4LDM5fSx7MCw5LDE3NX0sCisgICAgICAgIHswLDgsN30sezAsOCwxMzV9LHswLDgsNzF9LHswLDksMjM5fSx7MTI4LDcsOX0sezAsOCw5NX0sCisgICAgICAgIHswLDgsMzF9LHswLDksMTU5fSx7MTMyLDcsOTl9LHswLDgsMTI3fSx7MCw4LDYzfSx7MCw5LDIyM30sCisgICAgICAgIHsxMzAsNywyN30sezAsOCwxMTF9LHswLDgsNDd9LHswLDksMTkxfSx7MCw4LDE1fSx7MCw4LDE0M30sCisgICAgICAgIHswLDgsNzl9LHswLDksMjU1fQorICAgIH07CisKKyAgICBzdGF0aWMgY29uc3QgY29kZSBkaXN0Zml4WzMyXSA9IHsKKyAgICAgICAgezEyOCw1LDF9LHsxMzUsNSwyNTd9LHsxMzEsNSwxN30sezEzOSw1LDQwOTd9LHsxMjksNSw1fSwKKyAgICAgICAgezEzNyw1LDEwMjV9LHsxMzMsNSw2NX0sezE0MSw1LDE2Mzg1fSx7MTI4LDUsM30sezEzNiw1LDUxM30sCisgICAgICAgIHsxMzIsNSwzM30sezE0MCw1LDgxOTN9LHsxMzAsNSw5fSx7MTM4LDUsMjA0OX0sezEzNCw1LDEyOX0sCisgICAgICAgIHsxNDIsNSwzMjc2OX0sezEyOCw1LDJ9LHsxMzUsNSwzODV9LHsxMzEsNSwyNX0sezEzOSw1LDYxNDV9LAorICAgICAgICB7MTI5LDUsN30sezEzNyw1LDE1Mzd9LHsxMzMsNSw5N30sezE0MSw1LDI0NTc3fSx7MTI4LDUsNH0sCisgICAgICAgIHsxMzYsNSw3Njl9LHsxMzIsNSw0OX0sezE0MCw1LDEyMjg5fSx7MTMwLDUsMTN9LHsxMzgsNSwzMDczfSwKKyAgICAgICAgezEzNCw1LDE5M30sezE0Miw1LDQ5MTUzfQorICAgIH07CmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi9pbmZiYWNrOS9pbmZsYXRlOS5oIGIvc3JjL2NvbnRyaWIvaW5mYmFjazkvaW5mbGF0ZTkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTlhNzkzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbnRyaWIvaW5mYmFjazkvaW5mbGF0ZTkuaApAQCAtMCwwICsxLDQ3IEBACisvKiBpbmZsYXRlOS5oIC0tIGludGVybmFsIGluZmxhdGUgc3RhdGUgZGVmaW5pdGlvbgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDMgTWFyayBBZGxlcgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAorICovCisKKy8qIFdBUk5JTkc6IHRoaXMgZmlsZSBzaG91bGQgKm5vdCogYmUgdXNlZCBieSBhcHBsaWNhdGlvbnMuIEl0IGlzCisgICBwYXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgY29tcHJlc3Npb24gbGlicmFyeSBhbmQgaXMKKyAgIHN1YmplY3QgdG8gY2hhbmdlLiBBcHBsaWNhdGlvbnMgc2hvdWxkIG9ubHkgdXNlIHpsaWIuaC4KKyAqLworCisvKiBQb3NzaWJsZSBpbmZsYXRlIG1vZGVzIGJldHdlZW4gaW5mbGF0ZSgpIGNhbGxzICovCit0eXBlZGVmIGVudW0geworICAgICAgICBUWVBFLCAgICAgICAvKiBpOiB3YWl0aW5nIGZvciB0eXBlIGJpdHMsIGluY2x1ZGluZyBsYXN0LWZsYWcgYml0ICovCisgICAgICAgIFNUT1JFRCwgICAgIC8qIGk6IHdhaXRpbmcgZm9yIHN0b3JlZCBzaXplIChsZW5ndGggYW5kIGNvbXBsZW1lbnQpICovCisgICAgICAgIFRBQkxFLCAgICAgIC8qIGk6IHdhaXRpbmcgZm9yIGR5bmFtaWMgYmxvY2sgdGFibGUgbGVuZ3RocyAqLworICAgICAgICAgICAgTEVOLCAgICAgICAgLyogaTogd2FpdGluZyBmb3IgbGVuZ3RoL2xpdCBjb2RlICovCisgICAgRE9ORSwgICAgICAgLyogZmluaXNoZWQgY2hlY2ssIGRvbmUgLS0gcmVtYWluIGhlcmUgdW50aWwgcmVzZXQgKi8KKyAgICBCQUQgICAgICAgICAvKiBnb3QgYSBkYXRhIGVycm9yIC0tIHJlbWFpbiBoZXJlIHVudGlsIHJlc2V0ICovCit9IGluZmxhdGVfbW9kZTsKKworLyoKKyAgICBTdGF0ZSB0cmFuc2l0aW9ucyBiZXR3ZWVuIGFib3ZlIG1vZGVzIC0KKworICAgIChtb3N0IG1vZGVzIGNhbiBnbyB0byB0aGUgQkFEIG1vZGUgLS0gbm90IHNob3duIGZvciBjbGFyaXR5KQorCisgICAgUmVhZCBkZWZsYXRlIGJsb2NrczoKKyAgICAgICAgICAgIFRZUEUgLT4gU1RPUkVEIG9yIFRBQkxFIG9yIExFTiBvciBET05FCisgICAgICAgICAgICBTVE9SRUQgLT4gVFlQRQorICAgICAgICAgICAgVEFCTEUgLT4gTEVOTEVOUyAtPiBDT0RFTEVOUyAtPiBMRU4KKyAgICBSZWFkIGRlZmxhdGUgY29kZXM6CisgICAgICAgICAgICAgICAgTEVOIC0+IExFTiBvciBUWVBFCisgKi8KKworLyogc3RhdGUgbWFpbnRhaW5lZCBiZXR3ZWVuIGluZmxhdGUoKSBjYWxscy4gIEFwcHJveGltYXRlbHkgN0sgYnl0ZXMuICovCitzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSB7CisgICAgICAgIC8qIHNsaWRpbmcgd2luZG93ICovCisgICAgdW5zaWduZWQgY2hhciBGQVIgKndpbmRvdzsgIC8qIGFsbG9jYXRlZCBzbGlkaW5nIHdpbmRvdywgaWYgbmVlZGVkICovCisgICAgICAgIC8qIGR5bmFtaWMgdGFibGUgYnVpbGRpbmcgKi8KKyAgICB1bnNpZ25lZCBuY29kZTsgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGNvZGUgbGVuZ3RoIGNvZGUgbGVuZ3RocyAqLworICAgIHVuc2lnbmVkIG5sZW47ICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgbGVuZ3RoIGNvZGUgbGVuZ3RocyAqLworICAgIHVuc2lnbmVkIG5kaXN0OyAgICAgICAgICAgICAvKiBudW1iZXIgb2YgZGlzdGFuY2UgY29kZSBsZW5ndGhzICovCisgICAgdW5zaWduZWQgaGF2ZTsgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBjb2RlIGxlbmd0aHMgaW4gbGVuc1tdICovCisgICAgY29kZSBGQVIgKm5leHQ7ICAgICAgICAgICAgIC8qIG5leHQgYXZhaWxhYmxlIHNwYWNlIGluIGNvZGVzW10gKi8KKyAgICB1bnNpZ25lZCBzaG9ydCBsZW5zWzMyMF07ICAgLyogdGVtcG9yYXJ5IHN0b3JhZ2UgZm9yIGNvZGUgbGVuZ3RocyAqLworICAgIHVuc2lnbmVkIHNob3J0IHdvcmtbMjg4XTsgICAvKiB3b3JrIGFyZWEgZm9yIGNvZGUgdGFibGUgYnVpbGRpbmcgKi8KKyAgICBjb2RlIGNvZGVzW0VOT1VHSF07ICAgICAgICAgLyogc3BhY2UgZm9yIGNvZGUgdGFibGVzICovCit9OwpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvaW5mYmFjazkvaW5mdHJlZTkuYyBiL3NyYy9jb250cmliL2luZmJhY2s5L2luZnRyZWU5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU1MDYwNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb250cmliL2luZmJhY2s5L2luZnRyZWU5LmMKQEAgLTAsMCArMSwzMjQgQEAKKy8qIGluZnRyZWU5LmMgLS0gZ2VuZXJhdGUgSHVmZm1hbiB0cmVlcyBmb3IgZWZmaWNpZW50IGRlY29kaW5nCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMiBNYXJrIEFkbGVyCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCisgKi8KKworI2luY2x1ZGUgInp1dGlsLmgiCisjaW5jbHVkZSAiaW5mdHJlZTkuaCIKKworI2RlZmluZSBNQVhCSVRTIDE1CisKK2NvbnN0IGNoYXIgaW5mbGF0ZTlfY29weXJpZ2h0W10gPQorICAgIiBpbmZsYXRlOSAxLjIuMTIgQ29weXJpZ2h0IDE5OTUtMjAyMiBNYXJrIEFkbGVyICI7CisvKgorICBJZiB5b3UgdXNlIHRoZSB6bGliIGxpYnJhcnkgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpcyB3ZWxjb21lCisgIGluIHRoZSBkb2N1bWVudGF0aW9uIG9mIHlvdXIgcHJvZHVjdC4gSWYgZm9yIHNvbWUgcmVhc29uIHlvdSBjYW5ub3QKKyAgaW5jbHVkZSBzdWNoIGFuIGFja25vd2xlZGdtZW50LCBJIHdvdWxkIGFwcHJlY2lhdGUgdGhhdCB5b3Uga2VlcCB0aGlzCisgIGNvcHlyaWdodCBzdHJpbmcgaW4gdGhlIGV4ZWN1dGFibGUgb2YgeW91ciBwcm9kdWN0LgorICovCisKKy8qCisgICBCdWlsZCBhIHNldCBvZiB0YWJsZXMgdG8gZGVjb2RlIHRoZSBwcm92aWRlZCBjYW5vbmljYWwgSHVmZm1hbiBjb2RlLgorICAgVGhlIGNvZGUgbGVuZ3RocyBhcmUgbGVuc1swLi5jb2Rlcy0xXS4gIFRoZSByZXN1bHQgc3RhcnRzIGF0ICp0YWJsZSwKKyAgIHdob3NlIGluZGljZXMgYXJlIDAuLjJeYml0cy0xLiAgd29yayBpcyBhIHdyaXRhYmxlIGFycmF5IG9mIGF0IGxlYXN0CisgICBsZW5zIHNob3J0cywgd2hpY2ggaXMgdXNlZCBhcyBhIHdvcmsgYXJlYS4gIHR5cGUgaXMgdGhlIHR5cGUgb2YgY29kZQorICAgdG8gYmUgZ2VuZXJhdGVkLCBDT0RFUywgTEVOUywgb3IgRElTVFMuICBPbiByZXR1cm4sIHplcm8gaXMgc3VjY2VzcywKKyAgIC0xIGlzIGFuIGludmFsaWQgY29kZSwgYW5kICsxIG1lYW5zIHRoYXQgRU5PVUdIIGlzbid0IGVub3VnaC4gIHRhYmxlCisgICBvbiByZXR1cm4gcG9pbnRzIHRvIHRoZSBuZXh0IGF2YWlsYWJsZSBlbnRyeSdzIGFkZHJlc3MuICBiaXRzIGlzIHRoZQorICAgcmVxdWVzdGVkIHJvb3QgdGFibGUgaW5kZXggYml0cywgYW5kIG9uIHJldHVybiBpdCBpcyB0aGUgYWN0dWFsIHJvb3QKKyAgIHRhYmxlIGluZGV4IGJpdHMuICBJdCB3aWxsIGRpZmZlciBpZiB0aGUgcmVxdWVzdCBpcyBncmVhdGVyIHRoYW4gdGhlCisgICBsb25nZXN0IGNvZGUgb3IgaWYgaXQgaXMgbGVzcyB0aGFuIHRoZSBzaG9ydGVzdCBjb2RlLgorICovCitpbnQgaW5mbGF0ZV90YWJsZTkodHlwZSwgbGVucywgY29kZXMsIHRhYmxlLCBiaXRzLCB3b3JrKQorY29kZXR5cGUgdHlwZTsKK3Vuc2lnbmVkIHNob3J0IEZBUiAqbGVuczsKK3Vuc2lnbmVkIGNvZGVzOworY29kZSBGQVIgKiBGQVIgKnRhYmxlOwordW5zaWduZWQgRkFSICpiaXRzOwordW5zaWduZWQgc2hvcnQgRkFSICp3b3JrOworeworICAgIHVuc2lnbmVkIGxlbjsgICAgICAgICAgICAgICAvKiBhIGNvZGUncyBsZW5ndGggaW4gYml0cyAqLworICAgIHVuc2lnbmVkIHN5bTsgICAgICAgICAgICAgICAvKiBpbmRleCBvZiBjb2RlIHN5bWJvbHMgKi8KKyAgICB1bnNpZ25lZCBtaW4sIG1heDsgICAgICAgICAgLyogbWluaW11bSBhbmQgbWF4aW11bSBjb2RlIGxlbmd0aHMgKi8KKyAgICB1bnNpZ25lZCByb290OyAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGluZGV4IGJpdHMgZm9yIHJvb3QgdGFibGUgKi8KKyAgICB1bnNpZ25lZCBjdXJyOyAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGluZGV4IGJpdHMgZm9yIGN1cnJlbnQgdGFibGUgKi8KKyAgICB1bnNpZ25lZCBkcm9wOyAgICAgICAgICAgICAgLyogY29kZSBiaXRzIHRvIGRyb3AgZm9yIHN1Yi10YWJsZSAqLworICAgIGludCBsZWZ0OyAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgcHJlZml4IGNvZGVzIGF2YWlsYWJsZSAqLworICAgIHVuc2lnbmVkIHVzZWQ7ICAgICAgICAgICAgICAvKiBjb2RlIGVudHJpZXMgaW4gdGFibGUgdXNlZCAqLworICAgIHVuc2lnbmVkIGh1ZmY7ICAgICAgICAgICAgICAvKiBIdWZmbWFuIGNvZGUgKi8KKyAgICB1bnNpZ25lZCBpbmNyOyAgICAgICAgICAgICAgLyogZm9yIGluY3JlbWVudGluZyBjb2RlLCBpbmRleCAqLworICAgIHVuc2lnbmVkIGZpbGw7ICAgICAgICAgICAgICAvKiBpbmRleCBmb3IgcmVwbGljYXRpbmcgZW50cmllcyAqLworICAgIHVuc2lnbmVkIGxvdzsgICAgICAgICAgICAgICAvKiBsb3cgYml0cyBmb3IgY3VycmVudCByb290IGVudHJ5ICovCisgICAgdW5zaWduZWQgbWFzazsgICAgICAgICAgICAgIC8qIG1hc2sgZm9yIGxvdyByb290IGJpdHMgKi8KKyAgICBjb2RlIHRoaXM7ICAgICAgICAgICAgICAgICAgLyogdGFibGUgZW50cnkgZm9yIGR1cGxpY2F0aW9uICovCisgICAgY29kZSBGQVIgKm5leHQ7ICAgICAgICAgICAgIC8qIG5leHQgYXZhaWxhYmxlIHNwYWNlIGluIHRhYmxlICovCisgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgRkFSICpiYXNlOyAgICAgLyogYmFzZSB2YWx1ZSB0YWJsZSB0byB1c2UgKi8KKyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBGQVIgKmV4dHJhOyAgICAvKiBleHRyYSBiaXRzIHRhYmxlIHRvIHVzZSAqLworICAgIGludCBlbmQ7ICAgICAgICAgICAgICAgICAgICAvKiB1c2UgYmFzZSBhbmQgZXh0cmEgZm9yIHN5bWJvbCA+IGVuZCAqLworICAgIHVuc2lnbmVkIHNob3J0IGNvdW50W01BWEJJVFMrMV07ICAgIC8qIG51bWJlciBvZiBjb2RlcyBvZiBlYWNoIGxlbmd0aCAqLworICAgIHVuc2lnbmVkIHNob3J0IG9mZnNbTUFYQklUUysxXTsgICAgIC8qIG9mZnNldHMgaW4gdGFibGUgZm9yIGVhY2ggbGVuZ3RoICovCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGxiYXNlWzMxXSA9IHsgLyogTGVuZ3RoIGNvZGVzIDI1Ny4uMjg1IGJhc2UgKi8KKyAgICAgICAgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMywgMTUsIDE3LAorICAgICAgICAxOSwgMjMsIDI3LCAzMSwgMzUsIDQzLCA1MSwgNTksIDY3LCA4MywgOTksIDExNSwKKyAgICAgICAgMTMxLCAxNjMsIDE5NSwgMjI3LCAzLCAwLCAwfTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbGV4dFszMV0gPSB7IC8qIExlbmd0aCBjb2RlcyAyNTcuLjI4NSBleHRyYSAqLworICAgICAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI5LCAxMjksIDEyOSwgMTI5LAorICAgICAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMyLCAxMzIsIDEzMiwgMTMyLAorICAgICAgICAxMzMsIDEzMywgMTMzLCAxMzMsIDE0NCwgMTk5LCAyMDJ9OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBkYmFzZVszMl0gPSB7IC8qIERpc3RhbmNlIGNvZGVzIDAuLjMxIGJhc2UgKi8KKyAgICAgICAgMSwgMiwgMywgNCwgNSwgNywgOSwgMTMsIDE3LCAyNSwgMzMsIDQ5LAorICAgICAgICA2NSwgOTcsIDEyOSwgMTkzLCAyNTcsIDM4NSwgNTEzLCA3NjksIDEwMjUsIDE1MzcsIDIwNDksIDMwNzMsCisgICAgICAgIDQwOTcsIDYxNDUsIDgxOTMsIDEyMjg5LCAxNjM4NSwgMjQ1NzcsIDMyNzY5LCA0OTE1M307CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGRleHRbMzJdID0geyAvKiBEaXN0YW5jZSBjb2RlcyAwLi4zMSBleHRyYSAqLworICAgICAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOSwgMTI5LCAxMzAsIDEzMCwgMTMxLCAxMzEsIDEzMiwgMTMyLAorICAgICAgICAxMzMsIDEzMywgMTM0LCAxMzQsIDEzNSwgMTM1LCAxMzYsIDEzNiwgMTM3LCAxMzcsIDEzOCwgMTM4LAorICAgICAgICAxMzksIDEzOSwgMTQwLCAxNDAsIDE0MSwgMTQxLCAxNDIsIDE0Mn07CisKKyAgICAvKgorICAgICAgIFByb2Nlc3MgYSBzZXQgb2YgY29kZSBsZW5ndGhzIHRvIGNyZWF0ZSBhIGNhbm9uaWNhbCBIdWZmbWFuIGNvZGUuICBUaGUKKyAgICAgICBjb2RlIGxlbmd0aHMgYXJlIGxlbnNbMC4uY29kZXMtMV0uICBFYWNoIGxlbmd0aCBjb3JyZXNwb25kcyB0byB0aGUKKyAgICAgICBzeW1ib2xzIDAuLmNvZGVzLTEuICBUaGUgSHVmZm1hbiBjb2RlIGlzIGdlbmVyYXRlZCBieSBmaXJzdCBzb3J0aW5nIHRoZQorICAgICAgIHN5bWJvbHMgYnkgbGVuZ3RoIGZyb20gc2hvcnQgdG8gbG9uZywgYW5kIHJldGFpbmluZyB0aGUgc3ltYm9sIG9yZGVyCisgICAgICAgZm9yIGNvZGVzIHdpdGggZXF1YWwgbGVuZ3Rocy4gIFRoZW4gdGhlIGNvZGUgc3RhcnRzIHdpdGggYWxsIHplcm8gYml0cworICAgICAgIGZvciB0aGUgZmlyc3QgY29kZSBvZiB0aGUgc2hvcnRlc3QgbGVuZ3RoLCBhbmQgdGhlIGNvZGVzIGFyZSBpbnRlZ2VyCisgICAgICAgaW5jcmVtZW50cyBmb3IgdGhlIHNhbWUgbGVuZ3RoLCBhbmQgemVyb3MgYXJlIGFwcGVuZGVkIGFzIHRoZSBsZW5ndGgKKyAgICAgICBpbmNyZWFzZXMuICBGb3IgdGhlIGRlZmxhdGUgZm9ybWF0LCB0aGVzZSBiaXRzIGFyZSBzdG9yZWQgYmFja3dhcmRzCisgICAgICAgZnJvbSB0aGVpciBtb3JlIG5hdHVyYWwgaW50ZWdlciBpbmNyZW1lbnQgb3JkZXJpbmcsIGFuZCBzbyB3aGVuIHRoZQorICAgICAgIGRlY29kaW5nIHRhYmxlcyBhcmUgYnVpbHQgaW4gdGhlIGxhcmdlIGxvb3AgYmVsb3csIHRoZSBpbnRlZ2VyIGNvZGVzCisgICAgICAgYXJlIGluY3JlbWVudGVkIGJhY2t3YXJkcy4KKworICAgICAgIFRoaXMgcm91dGluZSBhc3N1bWVzLCBidXQgZG9lcyBub3QgY2hlY2ssIHRoYXQgYWxsIG9mIHRoZSBlbnRyaWVzIGluCisgICAgICAgbGVuc1tdIGFyZSBpbiB0aGUgcmFuZ2UgMC4uTUFYQklUUy4gIFRoZSBjYWxsZXIgbXVzdCBhc3N1cmUgdGhpcy4KKyAgICAgICAxLi5NQVhCSVRTIGlzIGludGVycHJldGVkIGFzIHRoYXQgY29kZSBsZW5ndGguICB6ZXJvIG1lYW5zIHRoYXQgdGhhdAorICAgICAgIHN5bWJvbCBkb2VzIG5vdCBvY2N1ciBpbiB0aGlzIGNvZGUuCisKKyAgICAgICBUaGUgY29kZXMgYXJlIHNvcnRlZCBieSBjb21wdXRpbmcgYSBjb3VudCBvZiBjb2RlcyBmb3IgZWFjaCBsZW5ndGgsCisgICAgICAgY3JlYXRpbmcgZnJvbSB0aGF0IGEgdGFibGUgb2Ygc3RhcnRpbmcgaW5kaWNlcyBmb3IgZWFjaCBsZW5ndGggaW4gdGhlCisgICAgICAgc29ydGVkIHRhYmxlLCBhbmQgdGhlbiBlbnRlcmluZyB0aGUgc3ltYm9scyBpbiBvcmRlciBpbiB0aGUgc29ydGVkCisgICAgICAgdGFibGUuICBUaGUgc29ydGVkIHRhYmxlIGlzIHdvcmtbXSwgd2l0aCB0aGF0IHNwYWNlIGJlaW5nIHByb3ZpZGVkIGJ5CisgICAgICAgdGhlIGNhbGxlci4KKworICAgICAgIFRoZSBsZW5ndGggY291bnRzIGFyZSB1c2VkIGZvciBvdGhlciBwdXJwb3NlcyBhcyB3ZWxsLCBpLmUuIGZpbmRpbmcKKyAgICAgICB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBsZW5ndGggY29kZXMsIGRldGVybWluaW5nIGlmIHRoZXJlIGFyZSBhbnkKKyAgICAgICBjb2RlcyBhdCBhbGwsIGNoZWNraW5nIGZvciBhIHZhbGlkIHNldCBvZiBsZW5ndGhzLCBhbmQgbG9va2luZyBhaGVhZAorICAgICAgIGF0IGxlbmd0aCBjb3VudHMgdG8gZGV0ZXJtaW5lIHN1Yi10YWJsZSBzaXplcyB3aGVuIGJ1aWxkaW5nIHRoZQorICAgICAgIGRlY29kaW5nIHRhYmxlcy4KKyAgICAgKi8KKworICAgIC8qIGFjY3VtdWxhdGUgbGVuZ3RocyBmb3IgY29kZXMgKGFzc3VtZXMgbGVuc1tdIGFsbCBpbiAwLi5NQVhCSVRTKSAqLworICAgIGZvciAobGVuID0gMDsgbGVuIDw9IE1BWEJJVFM7IGxlbisrKQorICAgICAgICBjb3VudFtsZW5dID0gMDsKKyAgICBmb3IgKHN5bSA9IDA7IHN5bSA8IGNvZGVzOyBzeW0rKykKKyAgICAgICAgY291bnRbbGVuc1tzeW1dXSsrOworCisgICAgLyogYm91bmQgY29kZSBsZW5ndGhzLCBmb3JjZSByb290IHRvIGJlIHdpdGhpbiBjb2RlIGxlbmd0aHMgKi8KKyAgICByb290ID0gKmJpdHM7CisgICAgZm9yIChtYXggPSBNQVhCSVRTOyBtYXggPj0gMTsgbWF4LS0pCisgICAgICAgIGlmIChjb3VudFttYXhdICE9IDApIGJyZWFrOworICAgIGlmIChyb290ID4gbWF4KSByb290ID0gbWF4OworICAgIGlmIChtYXggPT0gMCkgcmV0dXJuIC0xOyAgICAgICAgICAgIC8qIG5vIGNvZGVzISAqLworICAgIGZvciAobWluID0gMTsgbWluIDw9IE1BWEJJVFM7IG1pbisrKQorICAgICAgICBpZiAoY291bnRbbWluXSAhPSAwKSBicmVhazsKKyAgICBpZiAocm9vdCA8IG1pbikgcm9vdCA9IG1pbjsKKworICAgIC8qIGNoZWNrIGZvciBhbiBvdmVyLXN1YnNjcmliZWQgb3IgaW5jb21wbGV0ZSBzZXQgb2YgbGVuZ3RocyAqLworICAgIGxlZnQgPSAxOworICAgIGZvciAobGVuID0gMTsgbGVuIDw9IE1BWEJJVFM7IGxlbisrKSB7CisgICAgICAgIGxlZnQgPDw9IDE7CisgICAgICAgIGxlZnQgLT0gY291bnRbbGVuXTsKKyAgICAgICAgaWYgKGxlZnQgPCAwKSByZXR1cm4gLTE7ICAgICAgICAvKiBvdmVyLXN1YnNjcmliZWQgKi8KKyAgICB9CisgICAgaWYgKGxlZnQgPiAwICYmICh0eXBlID09IENPREVTIHx8IG1heCAhPSAxKSkKKyAgICAgICAgcmV0dXJuIC0xOyAgICAgICAgICAgICAgICAgICAgICAvKiBpbmNvbXBsZXRlIHNldCAqLworCisgICAgLyogZ2VuZXJhdGUgb2Zmc2V0cyBpbnRvIHN5bWJvbCB0YWJsZSBmb3IgZWFjaCBsZW5ndGggZm9yIHNvcnRpbmcgKi8KKyAgICBvZmZzWzFdID0gMDsKKyAgICBmb3IgKGxlbiA9IDE7IGxlbiA8IE1BWEJJVFM7IGxlbisrKQorICAgICAgICBvZmZzW2xlbiArIDFdID0gb2Zmc1tsZW5dICsgY291bnRbbGVuXTsKKworICAgIC8qIHNvcnQgc3ltYm9scyBieSBsZW5ndGgsIGJ5IHN5bWJvbCBvcmRlciB3aXRoaW4gZWFjaCBsZW5ndGggKi8KKyAgICBmb3IgKHN5bSA9IDA7IHN5bSA8IGNvZGVzOyBzeW0rKykKKyAgICAgICAgaWYgKGxlbnNbc3ltXSAhPSAwKSB3b3JrW29mZnNbbGVuc1tzeW1dXSsrXSA9ICh1bnNpZ25lZCBzaG9ydClzeW07CisKKyAgICAvKgorICAgICAgIENyZWF0ZSBhbmQgZmlsbCBpbiBkZWNvZGluZyB0YWJsZXMuICBJbiB0aGlzIGxvb3AsIHRoZSB0YWJsZSBiZWluZworICAgICAgIGZpbGxlZCBpcyBhdCBuZXh0IGFuZCBoYXMgY3VyciBpbmRleCBiaXRzLiAgVGhlIGNvZGUgYmVpbmcgdXNlZCBpcyBodWZmCisgICAgICAgd2l0aCBsZW5ndGggbGVuLiAgVGhhdCBjb2RlIGlzIGNvbnZlcnRlZCB0byBhbiBpbmRleCBieSBkcm9wcGluZyBkcm9wCisgICAgICAgYml0cyBvZmYgb2YgdGhlIGJvdHRvbS4gIEZvciBjb2RlcyB3aGVyZSBsZW4gaXMgbGVzcyB0aGFuIGRyb3AgKyBjdXJyLAorICAgICAgIHRob3NlIHRvcCBkcm9wICsgY3VyciAtIGxlbiBiaXRzIGFyZSBpbmNyZW1lbnRlZCB0aHJvdWdoIGFsbCB2YWx1ZXMgdG8KKyAgICAgICBmaWxsIHRoZSB0YWJsZSB3aXRoIHJlcGxpY2F0ZWQgZW50cmllcy4KKworICAgICAgIHJvb3QgaXMgdGhlIG51bWJlciBvZiBpbmRleCBiaXRzIGZvciB0aGUgcm9vdCB0YWJsZS4gIFdoZW4gbGVuIGV4Y2VlZHMKKyAgICAgICByb290LCBzdWItdGFibGVzIGFyZSBjcmVhdGVkIHBvaW50ZWQgdG8gYnkgdGhlIHJvb3QgZW50cnkgd2l0aCBhbiBpbmRleAorICAgICAgIG9mIHRoZSBsb3cgcm9vdCBiaXRzIG9mIGh1ZmYuICBUaGlzIGlzIHNhdmVkIGluIGxvdyB0byBjaGVjayBmb3Igd2hlbiBhCisgICAgICAgbmV3IHN1Yi10YWJsZSBzaG91bGQgYmUgc3RhcnRlZC4gIGRyb3AgaXMgemVybyB3aGVuIHRoZSByb290IHRhYmxlIGlzCisgICAgICAgYmVpbmcgZmlsbGVkLCBhbmQgZHJvcCBpcyByb290IHdoZW4gc3ViLXRhYmxlcyBhcmUgYmVpbmcgZmlsbGVkLgorCisgICAgICAgV2hlbiBhIG5ldyBzdWItdGFibGUgaXMgbmVlZGVkLCBpdCBpcyBuZWNlc3NhcnkgdG8gbG9vayBhaGVhZCBpbiB0aGUKKyAgICAgICBjb2RlIGxlbmd0aHMgdG8gZGV0ZXJtaW5lIHdoYXQgc2l6ZSBzdWItdGFibGUgaXMgbmVlZGVkLiAgVGhlIGxlbmd0aAorICAgICAgIGNvdW50cyBhcmUgdXNlZCBmb3IgdGhpcywgYW5kIHNvIGNvdW50W10gaXMgZGVjcmVtZW50ZWQgYXMgY29kZXMgYXJlCisgICAgICAgZW50ZXJlZCBpbiB0aGUgdGFibGVzLgorCisgICAgICAgdXNlZCBrZWVwcyB0cmFjayBvZiBob3cgbWFueSB0YWJsZSBlbnRyaWVzIGhhdmUgYmVlbiBhbGxvY2F0ZWQgZnJvbSB0aGUKKyAgICAgICBwcm92aWRlZCAqdGFibGUgc3BhY2UuICBJdCBpcyBjaGVja2VkIGZvciBMRU5TIGFuZCBESVNUIHRhYmxlcyBhZ2FpbnN0CisgICAgICAgdGhlIGNvbnN0YW50cyBFTk9VR0hfTEVOUyBhbmQgRU5PVUdIX0RJU1RTIHRvIGd1YXJkIGFnYWluc3QgY2hhbmdlcyBpbgorICAgICAgIHRoZSBpbml0aWFsIHJvb3QgdGFibGUgc2l6ZSBjb25zdGFudHMuICBTZWUgdGhlIGNvbW1lbnRzIGluIGluZnRyZWU5LmgKKyAgICAgICBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworICAgICAgIHN5bSBpbmNyZW1lbnRzIHRocm91Z2ggYWxsIHN5bWJvbHMsIGFuZCB0aGUgbG9vcCB0ZXJtaW5hdGVzIHdoZW4KKyAgICAgICBhbGwgY29kZXMgb2YgbGVuZ3RoIG1heCwgaS5lLiBhbGwgY29kZXMsIGhhdmUgYmVlbiBwcm9jZXNzZWQuICBUaGlzCisgICAgICAgcm91dGluZSBwZXJtaXRzIGluY29tcGxldGUgY29kZXMsIHNvIGFub3RoZXIgbG9vcCBhZnRlciB0aGlzIG9uZSBmaWxscworICAgICAgIGluIHRoZSByZXN0IG9mIHRoZSBkZWNvZGluZyB0YWJsZXMgd2l0aCBpbnZhbGlkIGNvZGUgbWFya2Vycy4KKyAgICAgKi8KKworICAgIC8qIHNldCB1cCBmb3IgY29kZSB0eXBlICovCisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBDT0RFUzoKKyAgICAgICAgYmFzZSA9IGV4dHJhID0gd29yazsgICAgLyogZHVtbXkgdmFsdWUtLW5vdCB1c2VkICovCisgICAgICAgIGVuZCA9IDE5OworICAgICAgICBicmVhazsKKyAgICBjYXNlIExFTlM6CisgICAgICAgIGJhc2UgPSBsYmFzZTsKKyAgICAgICAgYmFzZSAtPSAyNTc7CisgICAgICAgIGV4dHJhID0gbGV4dDsKKyAgICAgICAgZXh0cmEgLT0gMjU3OworICAgICAgICBlbmQgPSAyNTY7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6ICAgICAgICAgICAgLyogRElTVFMgKi8KKyAgICAgICAgYmFzZSA9IGRiYXNlOworICAgICAgICBleHRyYSA9IGRleHQ7CisgICAgICAgIGVuZCA9IC0xOworICAgIH0KKworICAgIC8qIGluaXRpYWxpemUgc3RhdGUgZm9yIGxvb3AgKi8KKyAgICBodWZmID0gMDsgICAgICAgICAgICAgICAgICAgLyogc3RhcnRpbmcgY29kZSAqLworICAgIHN5bSA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiBzdGFydGluZyBjb2RlIHN5bWJvbCAqLworICAgIGxlbiA9IG1pbjsgICAgICAgICAgICAgICAgICAvKiBzdGFydGluZyBjb2RlIGxlbmd0aCAqLworICAgIG5leHQgPSAqdGFibGU7ICAgICAgICAgICAgICAvKiBjdXJyZW50IHRhYmxlIHRvIGZpbGwgaW4gKi8KKyAgICBjdXJyID0gcm9vdDsgICAgICAgICAgICAgICAgLyogY3VycmVudCB0YWJsZSBpbmRleCBiaXRzICovCisgICAgZHJvcCA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIGN1cnJlbnQgYml0cyB0byBkcm9wIGZyb20gY29kZSBmb3IgaW5kZXggKi8KKyAgICBsb3cgPSAodW5zaWduZWQpKC0xKTsgICAgICAgLyogdHJpZ2dlciBuZXcgc3ViLXRhYmxlIHdoZW4gbGVuID4gcm9vdCAqLworICAgIHVzZWQgPSAxVSA8PCByb290OyAgICAgICAgICAvKiB1c2Ugcm9vdCB0YWJsZSBlbnRyaWVzICovCisgICAgbWFzayA9IHVzZWQgLSAxOyAgICAgICAgICAgIC8qIG1hc2sgZm9yIGNvbXBhcmluZyBsb3cgKi8KKworICAgIC8qIGNoZWNrIGF2YWlsYWJsZSB0YWJsZSBzcGFjZSAqLworICAgIGlmICgodHlwZSA9PSBMRU5TICYmIHVzZWQgPj0gRU5PVUdIX0xFTlMpIHx8CisgICAgICAgICh0eXBlID09IERJU1RTICYmIHVzZWQgPj0gRU5PVUdIX0RJU1RTKSkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICAvKiBwcm9jZXNzIGFsbCBjb2RlcyBhbmQgbWFrZSB0YWJsZSBlbnRyaWVzICovCisgICAgZm9yICg7OykgeworICAgICAgICAvKiBjcmVhdGUgdGFibGUgZW50cnkgKi8KKyAgICAgICAgdGhpcy5iaXRzID0gKHVuc2lnbmVkIGNoYXIpKGxlbiAtIGRyb3ApOworICAgICAgICBpZiAoKGludCkod29ya1tzeW1dKSA8IGVuZCkgeworICAgICAgICAgICAgdGhpcy5vcCA9ICh1bnNpZ25lZCBjaGFyKTA7CisgICAgICAgICAgICB0aGlzLnZhbCA9IHdvcmtbc3ltXTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgoaW50KSh3b3JrW3N5bV0pID4gZW5kKSB7CisgICAgICAgICAgICB0aGlzLm9wID0gKHVuc2lnbmVkIGNoYXIpKGV4dHJhW3dvcmtbc3ltXV0pOworICAgICAgICAgICAgdGhpcy52YWwgPSBiYXNlW3dvcmtbc3ltXV07CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLm9wID0gKHVuc2lnbmVkIGNoYXIpKDMyICsgNjQpOyAgICAgICAgIC8qIGVuZCBvZiBibG9jayAqLworICAgICAgICAgICAgdGhpcy52YWwgPSAwOworICAgICAgICB9CisKKyAgICAgICAgLyogcmVwbGljYXRlIGZvciB0aG9zZSBpbmRpY2VzIHdpdGggbG93IGxlbiBiaXRzIGVxdWFsIHRvIGh1ZmYgKi8KKyAgICAgICAgaW5jciA9IDFVIDw8IChsZW4gLSBkcm9wKTsKKyAgICAgICAgZmlsbCA9IDFVIDw8IGN1cnI7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGZpbGwgLT0gaW5jcjsKKyAgICAgICAgICAgIG5leHRbKGh1ZmYgPj4gZHJvcCkgKyBmaWxsXSA9IHRoaXM7CisgICAgICAgIH0gd2hpbGUgKGZpbGwgIT0gMCk7CisKKyAgICAgICAgLyogYmFja3dhcmRzIGluY3JlbWVudCB0aGUgbGVuLWJpdCBjb2RlIGh1ZmYgKi8KKyAgICAgICAgaW5jciA9IDFVIDw8IChsZW4gLSAxKTsKKyAgICAgICAgd2hpbGUgKGh1ZmYgJiBpbmNyKQorICAgICAgICAgICAgaW5jciA+Pj0gMTsKKyAgICAgICAgaWYgKGluY3IgIT0gMCkgeworICAgICAgICAgICAgaHVmZiAmPSBpbmNyIC0gMTsKKyAgICAgICAgICAgIGh1ZmYgKz0gaW5jcjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBodWZmID0gMDsKKworICAgICAgICAvKiBnbyB0byBuZXh0IHN5bWJvbCwgdXBkYXRlIGNvdW50LCBsZW4gKi8KKyAgICAgICAgc3ltKys7CisgICAgICAgIGlmICgtLShjb3VudFtsZW5dKSA9PSAwKSB7CisgICAgICAgICAgICBpZiAobGVuID09IG1heCkgYnJlYWs7CisgICAgICAgICAgICBsZW4gPSBsZW5zW3dvcmtbc3ltXV07CisgICAgICAgIH0KKworICAgICAgICAvKiBjcmVhdGUgbmV3IHN1Yi10YWJsZSBpZiBuZWVkZWQgKi8KKyAgICAgICAgaWYgKGxlbiA+IHJvb3QgJiYgKGh1ZmYgJiBtYXNrKSAhPSBsb3cpIHsKKyAgICAgICAgICAgIC8qIGlmIGZpcnN0IHRpbWUsIHRyYW5zaXRpb24gdG8gc3ViLXRhYmxlcyAqLworICAgICAgICAgICAgaWYgKGRyb3AgPT0gMCkKKyAgICAgICAgICAgICAgICBkcm9wID0gcm9vdDsKKworICAgICAgICAgICAgLyogaW5jcmVtZW50IHBhc3QgbGFzdCB0YWJsZSAqLworICAgICAgICAgICAgbmV4dCArPSAxVSA8PCBjdXJyOworCisgICAgICAgICAgICAvKiBkZXRlcm1pbmUgbGVuZ3RoIG9mIG5leHQgdGFibGUgKi8KKyAgICAgICAgICAgIGN1cnIgPSBsZW4gLSBkcm9wOworICAgICAgICAgICAgbGVmdCA9IChpbnQpKDEgPDwgY3Vycik7CisgICAgICAgICAgICB3aGlsZSAoY3VyciArIGRyb3AgPCBtYXgpIHsKKyAgICAgICAgICAgICAgICBsZWZ0IC09IGNvdW50W2N1cnIgKyBkcm9wXTsKKyAgICAgICAgICAgICAgICBpZiAobGVmdCA8PSAwKSBicmVhazsKKyAgICAgICAgICAgICAgICBjdXJyKys7CisgICAgICAgICAgICAgICAgbGVmdCA8PD0gMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogY2hlY2sgZm9yIGVub3VnaCBzcGFjZSAqLworICAgICAgICAgICAgdXNlZCArPSAxVSA8PCBjdXJyOworICAgICAgICAgICAgaWYgKCh0eXBlID09IExFTlMgJiYgdXNlZCA+PSBFTk9VR0hfTEVOUykgfHwKKyAgICAgICAgICAgICAgICAodHlwZSA9PSBESVNUUyAmJiB1c2VkID49IEVOT1VHSF9ESVNUUykpCisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgICAgICAgIC8qIHBvaW50IGVudHJ5IGluIHJvb3QgdGFibGUgdG8gc3ViLXRhYmxlICovCisgICAgICAgICAgICBsb3cgPSBodWZmICYgbWFzazsKKyAgICAgICAgICAgICgqdGFibGUpW2xvd10ub3AgPSAodW5zaWduZWQgY2hhciljdXJyOworICAgICAgICAgICAgKCp0YWJsZSlbbG93XS5iaXRzID0gKHVuc2lnbmVkIGNoYXIpcm9vdDsKKyAgICAgICAgICAgICgqdGFibGUpW2xvd10udmFsID0gKHVuc2lnbmVkIHNob3J0KShuZXh0IC0gKnRhYmxlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qCisgICAgICAgRmlsbCBpbiByZXN0IG9mIHRhYmxlIGZvciBpbmNvbXBsZXRlIGNvZGVzLiAgVGhpcyBsb29wIGlzIHNpbWlsYXIgdG8gdGhlCisgICAgICAgbG9vcCBhYm92ZSBpbiBpbmNyZW1lbnRpbmcgaHVmZiBmb3IgdGFibGUgaW5kaWNlcy4gIEl0IGlzIGFzc3VtZWQgdGhhdAorICAgICAgIGxlbiBpcyBlcXVhbCB0byBjdXJyICsgZHJvcCwgc28gdGhlcmUgaXMgbm8gbG9vcCBuZWVkZWQgdG8gaW5jcmVtZW50CisgICAgICAgdGhyb3VnaCBoaWdoIGluZGV4IGJpdHMuICBXaGVuIHRoZSBjdXJyZW50IHN1Yi10YWJsZSBpcyBmaWxsZWQsIHRoZSBsb29wCisgICAgICAgZHJvcHMgYmFjayB0byB0aGUgcm9vdCB0YWJsZSB0byBmaWxsIGluIGFueSByZW1haW5pbmcgZW50cmllcyB0aGVyZS4KKyAgICAgKi8KKyAgICB0aGlzLm9wID0gKHVuc2lnbmVkIGNoYXIpNjQ7ICAgICAgICAgICAgICAgIC8qIGludmFsaWQgY29kZSBtYXJrZXIgKi8KKyAgICB0aGlzLmJpdHMgPSAodW5zaWduZWQgY2hhcikobGVuIC0gZHJvcCk7CisgICAgdGhpcy52YWwgPSAodW5zaWduZWQgc2hvcnQpMDsKKyAgICB3aGlsZSAoaHVmZiAhPSAwKSB7CisgICAgICAgIC8qIHdoZW4gZG9uZSB3aXRoIHN1Yi10YWJsZSwgZHJvcCBiYWNrIHRvIHJvb3QgdGFibGUgKi8KKyAgICAgICAgaWYgKGRyb3AgIT0gMCAmJiAoaHVmZiAmIG1hc2spICE9IGxvdykgeworICAgICAgICAgICAgZHJvcCA9IDA7CisgICAgICAgICAgICBsZW4gPSByb290OworICAgICAgICAgICAgbmV4dCA9ICp0YWJsZTsKKyAgICAgICAgICAgIGN1cnIgPSByb290OworICAgICAgICAgICAgdGhpcy5iaXRzID0gKHVuc2lnbmVkIGNoYXIpbGVuOworICAgICAgICB9CisKKyAgICAgICAgLyogcHV0IGludmFsaWQgY29kZSBtYXJrZXIgaW4gdGFibGUgKi8KKyAgICAgICAgbmV4dFtodWZmID4+IGRyb3BdID0gdGhpczsKKworICAgICAgICAvKiBiYWNrd2FyZHMgaW5jcmVtZW50IHRoZSBsZW4tYml0IGNvZGUgaHVmZiAqLworICAgICAgICBpbmNyID0gMVUgPDwgKGxlbiAtIDEpOworICAgICAgICB3aGlsZSAoaHVmZiAmIGluY3IpCisgICAgICAgICAgICBpbmNyID4+PSAxOworICAgICAgICBpZiAoaW5jciAhPSAwKSB7CisgICAgICAgICAgICBodWZmICY9IGluY3IgLSAxOworICAgICAgICAgICAgaHVmZiArPSBpbmNyOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGh1ZmYgPSAwOworICAgIH0KKworICAgIC8qIHNldCByZXR1cm4gcGFyYW1ldGVycyAqLworICAgICp0YWJsZSArPSB1c2VkOworICAgICpiaXRzID0gcm9vdDsKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL2luZmJhY2s5L2luZnRyZWU5LmggYi9zcmMvY29udHJpYi9pbmZiYWNrOS9pbmZ0cmVlOS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhYjIxZjAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29udHJpYi9pbmZiYWNrOS9pbmZ0cmVlOS5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qIGluZnRyZWU5LmggLS0gaGVhZGVyIHRvIHVzZSBpbmZ0cmVlOS5jCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwOCBNYXJrIEFkbGVyCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCisgKi8KKworLyogV0FSTklORzogdGhpcyBmaWxlIHNob3VsZCAqbm90KiBiZSB1c2VkIGJ5IGFwcGxpY2F0aW9ucy4gSXQgaXMKKyAgIHBhcnQgb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBjb21wcmVzc2lvbiBsaWJyYXJ5IGFuZCBpcworICAgc3ViamVjdCB0byBjaGFuZ2UuIEFwcGxpY2F0aW9ucyBzaG91bGQgb25seSB1c2UgemxpYi5oLgorICovCisKKy8qIFN0cnVjdHVyZSBmb3IgZGVjb2RpbmcgdGFibGVzLiAgRWFjaCBlbnRyeSBwcm92aWRlcyBlaXRoZXIgdGhlCisgICBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gZG8gdGhlIG9wZXJhdGlvbiByZXF1ZXN0ZWQgYnkgdGhlIGNvZGUgdGhhdAorICAgaW5kZXhlZCB0aGF0IHRhYmxlIGVudHJ5LCBvciBpdCBwcm92aWRlcyBhIHBvaW50ZXIgdG8gYW5vdGhlcgorICAgdGFibGUgdGhhdCBpbmRleGVzIG1vcmUgYml0cyBvZiB0aGUgY29kZS4gIG9wIGluZGljYXRlcyB3aGV0aGVyCisgICB0aGUgZW50cnkgaXMgYSBwb2ludGVyIHRvIGFub3RoZXIgdGFibGUsIGEgbGl0ZXJhbCwgYSBsZW5ndGggb3IKKyAgIGRpc3RhbmNlLCBhbiBlbmQtb2YtYmxvY2ssIG9yIGFuIGludmFsaWQgY29kZS4gIEZvciBhIHRhYmxlCisgICBwb2ludGVyLCB0aGUgbG93IGZvdXIgYml0cyBvZiBvcCBpcyB0aGUgbnVtYmVyIG9mIGluZGV4IGJpdHMgb2YKKyAgIHRoYXQgdGFibGUuICBGb3IgYSBsZW5ndGggb3IgZGlzdGFuY2UsIHRoZSBsb3cgZm91ciBiaXRzIG9mIG9wCisgICBpcyB0aGUgbnVtYmVyIG9mIGV4dHJhIGJpdHMgdG8gZ2V0IGFmdGVyIHRoZSBjb2RlLiAgYml0cyBpcworICAgdGhlIG51bWJlciBvZiBiaXRzIGluIHRoaXMgY29kZSBvciBwYXJ0IG9mIHRoZSBjb2RlIHRvIGRyb3Agb2ZmCisgICBvZiB0aGUgYml0IGJ1ZmZlci4gIHZhbCBpcyB0aGUgYWN0dWFsIGJ5dGUgdG8gb3V0cHV0IGluIHRoZSBjYXNlCisgICBvZiBhIGxpdGVyYWwsIHRoZSBiYXNlIGxlbmd0aCBvciBkaXN0YW5jZSwgb3IgdGhlIG9mZnNldCBmcm9tCisgICB0aGUgY3VycmVudCB0YWJsZSB0byB0aGUgbmV4dCB0YWJsZS4gIEVhY2ggZW50cnkgaXMgZm91ciBieXRlcy4gKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICB1bnNpZ25lZCBjaGFyIG9wOyAgICAgICAgICAgLyogb3BlcmF0aW9uLCBleHRyYSBiaXRzLCB0YWJsZSBiaXRzICovCisgICAgdW5zaWduZWQgY2hhciBiaXRzOyAgICAgICAgIC8qIGJpdHMgaW4gdGhpcyBwYXJ0IG9mIHRoZSBjb2RlICovCisgICAgdW5zaWduZWQgc2hvcnQgdmFsOyAgICAgICAgIC8qIG9mZnNldCBpbiB0YWJsZSBvciBjb2RlIHZhbHVlICovCit9IGNvZGU7CisKKy8qIG9wIHZhbHVlcyBhcyBzZXQgYnkgaW5mbGF0ZV90YWJsZSgpOgorICAgIDAwMDAwMDAwIC0gbGl0ZXJhbAorICAgIDAwMDB0dHR0IC0gdGFibGUgbGluaywgdHR0dCAhPSAwIGlzIHRoZSBudW1iZXIgb2YgdGFibGUgaW5kZXggYml0cworICAgIDEwMGVlZWVlIC0gbGVuZ3RoIG9yIGRpc3RhbmNlLCBlZWVlIGlzIHRoZSBudW1iZXIgb2YgZXh0cmEgYml0cworICAgIDAxMTAwMDAwIC0gZW5kIG9mIGJsb2NrCisgICAgMDEwMDAwMDAgLSBpbnZhbGlkIGNvZGUKKyAqLworCisvKiBNYXhpbXVtIHNpemUgb2YgdGhlIGR5bmFtaWMgdGFibGUuICBUaGUgbWF4aW11bSBudW1iZXIgb2YgY29kZSBzdHJ1Y3R1cmVzIGlzCisgICAxNDQ2LCB3aGljaCBpcyB0aGUgc3VtIG9mIDg1MiBmb3IgbGl0ZXJhbC9sZW5ndGggY29kZXMgYW5kIDU5NCBmb3IgZGlzdGFuY2UKKyAgIGNvZGVzLiAgVGhlc2UgdmFsdWVzIHdlcmUgZm91bmQgYnkgZXhoYXVzdGl2ZSBzZWFyY2hlcyB1c2luZyB0aGUgcHJvZ3JhbQorICAgZXhhbXBsZXMvZW5vdWdoLmMgZm91bmQgaW4gdGhlIHpsaWIgZGlzdHJpYnR1dGlvbi4gIFRoZSBhcmd1bWVudHMgdG8gdGhhdAorICAgcHJvZ3JhbSBhcmUgdGhlIG51bWJlciBvZiBzeW1ib2xzLCB0aGUgaW5pdGlhbCByb290IHRhYmxlIHNpemUsIGFuZCB0aGUKKyAgIG1heGltdW0gYml0IGxlbmd0aCBvZiBhIGNvZGUuICAiZW5vdWdoIDI4NiA5IDE1IiBmb3IgbGl0ZXJhbC9sZW5ndGggY29kZXMKKyAgIHJldHVybnMgcmV0dXJucyA4NTIsIGFuZCAiZW5vdWdoIDMyIDYgMTUiIGZvciBkaXN0YW5jZSBjb2RlcyByZXR1cm5zIDU5NC4KKyAgIFRoZSBpbml0aWFsIHJvb3QgdGFibGUgc2l6ZSAoOSBvciA2KSBpcyBmb3VuZCBpbiB0aGUgZmlmdGggYXJndW1lbnQgb2YgdGhlCisgICBpbmZsYXRlX3RhYmxlKCkgY2FsbHMgaW4gaW5mYmFjazkuYy4gIElmIHRoZSByb290IHRhYmxlIHNpemUgaXMgY2hhbmdlZCwKKyAgIHRoZW4gdGhlc2UgbWF4aW11bSBzaXplcyB3b3VsZCBiZSBuZWVkIHRvIGJlIHJlY2FsY3VsYXRlZCBhbmQgdXBkYXRlZC4gKi8KKyNkZWZpbmUgRU5PVUdIX0xFTlMgODUyCisjZGVmaW5lIEVOT1VHSF9ESVNUUyA1OTQKKyNkZWZpbmUgRU5PVUdIIChFTk9VR0hfTEVOUytFTk9VR0hfRElTVFMpCisKKy8qIFR5cGUgb2YgY29kZSB0byBidWlsZCBmb3IgaW5mbGF0ZV90YWJsZTkoKSAqLwordHlwZWRlZiBlbnVtIHsKKyAgICBDT0RFUywKKyAgICBMRU5TLAorICAgIERJU1RTCit9IGNvZGV0eXBlOworCitleHRlcm4gaW50IGluZmxhdGVfdGFibGU5IE9GKChjb2RldHlwZSB0eXBlLCB1bnNpZ25lZCBzaG9ydCBGQVIgKmxlbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvZGVzLCBjb2RlIEZBUiAqIEZBUiAqdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIEZBUiAqYml0cywgdW5zaWduZWQgc2hvcnQgRkFSICp3b3JrKSk7CmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi9pb3N0cmVhbS90ZXN0LmNwcCBiL3NyYy9jb250cmliL2lvc3RyZWFtL3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMjY1YjMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29udHJpYi9pb3N0cmVhbS90ZXN0LmNwcApAQCAtMCwwICsxLDI0IEBACisKKyNpbmNsdWRlICJ6ZnN0cmVhbS5oIgorCitpbnQgbWFpbigpIHsKKworICAvLyBDb25zdHJ1Y3QgYSBzdHJlYW0gb2JqZWN0IHdpdGggdGhpcyBmaWxlYnVmZmVyLiAgQW55dGhpbmcgc2VudAorICAvLyB0byB0aGlzIHN0cmVhbSB3aWxsIGdvIHRvIHN0YW5kYXJkIG91dC4KKyAgZ3pvZnN0cmVhbSBvcyggMSwgaW9zOjpvdXQgKTsKKworICAvLyBUaGlzIHRleHQgaXMgZ2V0dGluZyBjb21wcmVzc2VkIGFuZCBzZW50IHRvIHN0ZG91dC4KKyAgLy8gVG8gcHJvdmUgdGhpcywgcnVuICd0ZXN0IHwgemNhdCcuCisgIG9zIDw8ICJIZWxsbywgTW9tbXkiIDw8IGVuZGw7CisKKyAgb3MgPDwgc2V0Y29tcHJlc3Npb25sZXZlbCggWl9OT19DT01QUkVTU0lPTiApOworICBvcyA8PCAiaGVsbG8sIGhlbGxvLCBoaSwgaG8hIiA8PCBlbmRsOworCisgIHNldGNvbXByZXNzaW9ubGV2ZWwoIG9zLCBaX0RFRkFVTFRfQ09NUFJFU1NJT04gKQorICAgIDw8ICJJJ20gY29tcHJlc3NpbmcgYWdhaW4iIDw8IGVuZGw7CisKKyAgb3MuY2xvc2UoKTsKKworICByZXR1cm4gMDsKKworfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvaW9zdHJlYW0vemZzdHJlYW0uY3BwIGIvc3JjL2NvbnRyaWIvaW9zdHJlYW0vemZzdHJlYW0uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwY2Q4NWYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29udHJpYi9pb3N0cmVhbS96ZnN0cmVhbS5jcHAKQEAgLTAsMCArMSwzMjkgQEAKKworI2luY2x1ZGUgInpmc3RyZWFtLmgiCisKK2d6ZmlsZWJ1Zjo6Z3pmaWxlYnVmKCkgOgorICBmaWxlKE5VTEwpLAorICBtb2RlKDApLAorICBvd25fZmlsZV9kZXNjcmlwdG9yKDApCit7IH0KKworZ3pmaWxlYnVmOjp+Z3pmaWxlYnVmKCkgeworCisgIHN5bmMoKTsKKyAgaWYgKCBvd25fZmlsZV9kZXNjcmlwdG9yICkKKyAgICBjbG9zZSgpOworCit9CisKK2d6ZmlsZWJ1ZiAqZ3pmaWxlYnVmOjpvcGVuKCBjb25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpb19tb2RlICkgeworCisgIGlmICggaXNfb3BlbigpICkKKyAgICByZXR1cm4gTlVMTDsKKworICBjaGFyIGNoYXJfbW9kZVsxMF07CisgIGNoYXIgKnAgPSBjaGFyX21vZGU7CisKKyAgaWYgKCBpb19tb2RlICYgaW9zOjppbiApIHsKKyAgICBtb2RlID0gaW9zOjppbjsKKyAgICAqcCsrID0gJ3InOworICB9IGVsc2UgaWYgKCBpb19tb2RlICYgaW9zOjphcHAgKSB7CisgICAgbW9kZSA9IGlvczo6YXBwOworICAgICpwKysgPSAnYSc7CisgIH0gZWxzZSB7CisgICAgbW9kZSA9IGlvczo6b3V0OworICAgICpwKysgPSAndyc7CisgIH0KKworICBpZiAoIGlvX21vZGUgJiBpb3M6OmJpbmFyeSApIHsKKyAgICBtb2RlIHw9IGlvczo6YmluYXJ5OworICAgICpwKysgPSAnYic7CisgIH0KKworICAvLyBIYXJkIGNvZGUgdGhlIGNvbXByZXNzaW9uIGxldmVsCisgIGlmICggaW9fbW9kZSAmIChpb3M6Om91dHxpb3M6OmFwcCApKSB7CisgICAgKnArKyA9ICc5JzsKKyAgfQorCisgIC8vIFB1dCB0aGUgZW5kLW9mLXN0cmluZyBpbmRpY2F0b3IKKyAgKnAgPSAnXDAnOworCisgIGlmICggKGZpbGUgPSBnem9wZW4obmFtZSwgY2hhcl9tb2RlKSkgPT0gTlVMTCApCisgICAgcmV0dXJuIE5VTEw7CisKKyAgb3duX2ZpbGVfZGVzY3JpcHRvciA9IDE7CisKKyAgcmV0dXJuIHRoaXM7CisKK30KKworZ3pmaWxlYnVmICpnemZpbGVidWY6OmF0dGFjaCggaW50IGZpbGVfZGVzY3JpcHRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpb19tb2RlICkgeworCisgIGlmICggaXNfb3BlbigpICkKKyAgICByZXR1cm4gTlVMTDsKKworICBjaGFyIGNoYXJfbW9kZVsxMF07CisgIGNoYXIgKnAgPSBjaGFyX21vZGU7CisKKyAgaWYgKCBpb19tb2RlICYgaW9zOjppbiApIHsKKyAgICBtb2RlID0gaW9zOjppbjsKKyAgICAqcCsrID0gJ3InOworICB9IGVsc2UgaWYgKCBpb19tb2RlICYgaW9zOjphcHAgKSB7CisgICAgbW9kZSA9IGlvczo6YXBwOworICAgICpwKysgPSAnYSc7CisgIH0gZWxzZSB7CisgICAgbW9kZSA9IGlvczo6b3V0OworICAgICpwKysgPSAndyc7CisgIH0KKworICBpZiAoIGlvX21vZGUgJiBpb3M6OmJpbmFyeSApIHsKKyAgICBtb2RlIHw9IGlvczo6YmluYXJ5OworICAgICpwKysgPSAnYic7CisgIH0KKworICAvLyBIYXJkIGNvZGUgdGhlIGNvbXByZXNzaW9uIGxldmVsCisgIGlmICggaW9fbW9kZSAmIChpb3M6Om91dHxpb3M6OmFwcCApKSB7CisgICAgKnArKyA9ICc5JzsKKyAgfQorCisgIC8vIFB1dCB0aGUgZW5kLW9mLXN0cmluZyBpbmRpY2F0b3IKKyAgKnAgPSAnXDAnOworCisgIGlmICggKGZpbGUgPSBnemRvcGVuKGZpbGVfZGVzY3JpcHRvciwgY2hhcl9tb2RlKSkgPT0gTlVMTCApCisgICAgcmV0dXJuIE5VTEw7CisKKyAgb3duX2ZpbGVfZGVzY3JpcHRvciA9IDA7CisKKyAgcmV0dXJuIHRoaXM7CisKK30KKworZ3pmaWxlYnVmICpnemZpbGVidWY6OmNsb3NlKCkgeworCisgIGlmICggaXNfb3BlbigpICkgeworCisgICAgc3luYygpOworICAgIGd6Y2xvc2UoIGZpbGUgKTsKKyAgICBmaWxlID0gTlVMTDsKKworICB9CisKKyAgcmV0dXJuIHRoaXM7CisKK30KKworaW50IGd6ZmlsZWJ1Zjo6c2V0Y29tcHJlc3Npb25sZXZlbCggaW50IGNvbXBfbGV2ZWwgKSB7CisKKyAgcmV0dXJuIGd6c2V0cGFyYW1zKGZpbGUsIGNvbXBfbGV2ZWwsIC0yKTsKKworfQorCitpbnQgZ3pmaWxlYnVmOjpzZXRjb21wcmVzc2lvbnN0cmF0ZWd5KCBpbnQgY29tcF9zdHJhdGVneSApIHsKKworICByZXR1cm4gZ3pzZXRwYXJhbXMoZmlsZSwgLTIsIGNvbXBfc3RyYXRlZ3kpOworCit9CisKKworc3RyZWFtcG9zIGd6ZmlsZWJ1Zjo6c2Vla29mZiggc3RyZWFtb2ZmIG9mZiwgaW9zOjpzZWVrX2RpciBkaXIsIGludCB3aGljaCApIHsKKworICByZXR1cm4gc3RyZWFtcG9zKEVPRik7CisKK30KKworaW50IGd6ZmlsZWJ1Zjo6dW5kZXJmbG93KCkgeworCisgIC8vIElmIHRoZSBmaWxlIGhhc24ndCBiZWVuIG9wZW5lZCBmb3IgcmVhZGluZywgZXJyb3IuCisgIGlmICggIWlzX29wZW4oKSB8fCAhKG1vZGUgJiBpb3M6OmluKSApCisgICAgcmV0dXJuIEVPRjsKKworICAvLyBpZiBhIGJ1ZmZlciBkb2Vzbid0IGV4aXN0cywgYWxsb2NhdGUgb25lLgorICBpZiAoICFiYXNlKCkgKSB7CisKKyAgICBpZiAoIChhbGxvY2F0ZSgpKSA9PSBFT0YgKQorICAgICAgcmV0dXJuIEVPRjsKKyAgICBzZXRwKDAsMCk7CisKKyAgfSBlbHNlIHsKKworICAgIGlmICggaW5fYXZhaWwoKSApCisgICAgICByZXR1cm4gKHVuc2lnbmVkIGNoYXIpICpncHRyKCk7CisKKyAgICBpZiAoIG91dF93YWl0aW5nKCkgKSB7CisgICAgICBpZiAoIGZsdXNoYnVmKCkgPT0gRU9GICkKKyAgICAgICAgcmV0dXJuIEVPRjsKKyAgICB9CisKKyAgfQorCisgIC8vIEF0dGVtcHQgdG8gZmlsbCB0aGUgYnVmZmVyLgorCisgIGludCByZXN1bHQgPSBmaWxsYnVmKCk7CisgIGlmICggcmVzdWx0ID09IEVPRiApIHsKKyAgICAvLyBkaXNhYmxlIGdldCBhcmVhCisgICAgc2V0ZygwLDAsMCk7CisgICAgcmV0dXJuIEVPRjsKKyAgfQorCisgIHJldHVybiAodW5zaWduZWQgY2hhcikgKmdwdHIoKTsKKworfQorCitpbnQgZ3pmaWxlYnVmOjpvdmVyZmxvdyggaW50IGMgKSB7CisKKyAgaWYgKCAhaXNfb3BlbigpIHx8ICEobW9kZSAmIGlvczo6b3V0KSApCisgICAgcmV0dXJuIEVPRjsKKworICBpZiAoICFiYXNlKCkgKSB7CisgICAgaWYgKCBhbGxvY2F0ZSgpID09IEVPRiApCisgICAgICByZXR1cm4gRU9GOworICAgIHNldGcoMCwwLDApOworICB9IGVsc2UgeworICAgIGlmIChpbl9hdmFpbCgpKSB7CisgICAgICAgIHJldHVybiBFT0Y7CisgICAgfQorICAgIGlmIChvdXRfd2FpdGluZygpKSB7CisgICAgICBpZiAoZmx1c2hidWYoKSA9PSBFT0YpCisgICAgICAgIHJldHVybiBFT0Y7CisgICAgfQorICB9CisKKyAgaW50IGJsID0gYmxlbigpOworICBzZXRwKCBiYXNlKCksIGJhc2UoKSArIGJsKTsKKworICBpZiAoIGMgIT0gRU9GICkgeworCisgICAgKnBwdHIoKSA9IGM7CisgICAgcGJ1bXAoMSk7CisKKyAgfQorCisgIHJldHVybiAwOworCit9CisKK2ludCBnemZpbGVidWY6OnN5bmMoKSB7CisKKyAgaWYgKCAhaXNfb3BlbigpICkKKyAgICByZXR1cm4gRU9GOworCisgIGlmICggb3V0X3dhaXRpbmcoKSApCisgICAgcmV0dXJuIGZsdXNoYnVmKCk7CisKKyAgcmV0dXJuIDA7CisKK30KKworaW50IGd6ZmlsZWJ1Zjo6Zmx1c2hidWYoKSB7CisKKyAgaW50IG47CisgIGNoYXIgKnE7CisKKyAgcSA9IHBiYXNlKCk7CisgIG4gPSBwcHRyKCkgLSBxOworCisgIGlmICggZ3p3cml0ZSggZmlsZSwgcSwgbikgPCBuICkKKyAgICByZXR1cm4gRU9GOworCisgIHNldHAoMCwwKTsKKworICByZXR1cm4gMDsKKworfQorCitpbnQgZ3pmaWxlYnVmOjpmaWxsYnVmKCkgeworCisgIGludCByZXF1aXJlZDsKKyAgY2hhciAqcDsKKworICBwID0gYmFzZSgpOworCisgIHJlcXVpcmVkID0gYmxlbigpOworCisgIGludCB0ID0gZ3pyZWFkKCBmaWxlLCBwLCByZXF1aXJlZCApOworCisgIGlmICggdCA8PSAwKSByZXR1cm4gRU9GOworCisgIHNldGcoIGJhc2UoKSwgYmFzZSgpLCBiYXNlKCkrdCk7CisKKyAgcmV0dXJuIHQ7CisKK30KKworZ3pmaWxlc3RyZWFtX2NvbW1vbjo6Z3pmaWxlc3RyZWFtX2NvbW1vbigpIDoKKyAgaW9zKCBnemZpbGVzdHJlYW1fY29tbW9uOjpyZGJ1ZigpICkKK3sgfQorCitnemZpbGVzdHJlYW1fY29tbW9uOjp+Z3pmaWxlc3RyZWFtX2NvbW1vbigpCit7IH0KKwordm9pZCBnemZpbGVzdHJlYW1fY29tbW9uOjphdHRhY2goIGludCBmZCwgaW50IGlvX21vZGUgKSB7CisKKyAgaWYgKCAhYnVmZmVyLmF0dGFjaCggZmQsIGlvX21vZGUpICkKKyAgICBjbGVhciggaW9zOjpmYWlsYml0IHwgaW9zOjpiYWRiaXQgKTsKKyAgZWxzZQorICAgIGNsZWFyKCk7CisKK30KKwordm9pZCBnemZpbGVzdHJlYW1fY29tbW9uOjpvcGVuKCBjb25zdCBjaGFyICpuYW1lLCBpbnQgaW9fbW9kZSApIHsKKworICBpZiAoICFidWZmZXIub3BlbiggbmFtZSwgaW9fbW9kZSApICkKKyAgICBjbGVhciggaW9zOjpmYWlsYml0IHwgaW9zOjpiYWRiaXQgKTsKKyAgZWxzZQorICAgIGNsZWFyKCk7CisKK30KKwordm9pZCBnemZpbGVzdHJlYW1fY29tbW9uOjpjbG9zZSgpIHsKKworICBpZiAoICFidWZmZXIuY2xvc2UoKSApCisgICAgY2xlYXIoIGlvczo6ZmFpbGJpdCB8IGlvczo6YmFkYml0ICk7CisKK30KKworZ3pmaWxlYnVmICpnemZpbGVzdHJlYW1fY29tbW9uOjpyZGJ1ZigpCit7CisgIHJldHVybiAmYnVmZmVyOworfQorCitnemlmc3RyZWFtOjpnemlmc3RyZWFtKCkgOgorICBpb3MoIGd6ZmlsZXN0cmVhbV9jb21tb246OnJkYnVmKCkgKQoreworICBjbGVhciggaW9zOjpiYWRiaXQgKTsKK30KKworZ3ppZnN0cmVhbTo6Z3ppZnN0cmVhbSggY29uc3QgY2hhciAqbmFtZSwgaW50IGlvX21vZGUgKSA6CisgIGlvcyggZ3pmaWxlc3RyZWFtX2NvbW1vbjo6cmRidWYoKSApCit7CisgIGd6ZmlsZXN0cmVhbV9jb21tb246Om9wZW4oIG5hbWUsIGlvX21vZGUgKTsKK30KKworZ3ppZnN0cmVhbTo6Z3ppZnN0cmVhbSggaW50IGZkLCBpbnQgaW9fbW9kZSApIDoKKyAgaW9zKCBnemZpbGVzdHJlYW1fY29tbW9uOjpyZGJ1ZigpICkKK3sKKyAgZ3pmaWxlc3RyZWFtX2NvbW1vbjo6YXR0YWNoKCBmZCwgaW9fbW9kZSApOworfQorCitnemlmc3RyZWFtOjp+Z3ppZnN0cmVhbSgpIHsgfQorCitnem9mc3RyZWFtOjpnem9mc3RyZWFtKCkgOgorICBpb3MoIGd6ZmlsZXN0cmVhbV9jb21tb246OnJkYnVmKCkgKQoreworICBjbGVhciggaW9zOjpiYWRiaXQgKTsKK30KKworZ3pvZnN0cmVhbTo6Z3pvZnN0cmVhbSggY29uc3QgY2hhciAqbmFtZSwgaW50IGlvX21vZGUgKSA6CisgIGlvcyggZ3pmaWxlc3RyZWFtX2NvbW1vbjo6cmRidWYoKSApCit7CisgIGd6ZmlsZXN0cmVhbV9jb21tb246Om9wZW4oIG5hbWUsIGlvX21vZGUgKTsKK30KKworZ3pvZnN0cmVhbTo6Z3pvZnN0cmVhbSggaW50IGZkLCBpbnQgaW9fbW9kZSApIDoKKyAgaW9zKCBnemZpbGVzdHJlYW1fY29tbW9uOjpyZGJ1ZigpICkKK3sKKyAgZ3pmaWxlc3RyZWFtX2NvbW1vbjo6YXR0YWNoKCBmZCwgaW9fbW9kZSApOworfQorCitnem9mc3RyZWFtOjp+Z3pvZnN0cmVhbSgpIHsgfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvaW9zdHJlYW0vemZzdHJlYW0uaCBiL3NyYy9jb250cmliL2lvc3RyZWFtL3pmc3RyZWFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ3OTA5OAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb250cmliL2lvc3RyZWFtL3pmc3RyZWFtLmgKQEAgLTAsMCArMSwxMjggQEAKKworI2lmbmRlZiB6ZnN0cmVhbV9oCisjZGVmaW5lIHpmc3RyZWFtX2gKKworI2luY2x1ZGUgPGZzdHJlYW0uaD4KKyNpbmNsdWRlICJ6bGliLmgiCisKK2NsYXNzIGd6ZmlsZWJ1ZiA6IHB1YmxpYyBzdHJlYW1idWYgeworCitwdWJsaWM6CisKKyAgZ3pmaWxlYnVmKCApOworICB2aXJ0dWFsIH5nemZpbGVidWYoKTsKKworICBnemZpbGVidWYgKm9wZW4oIGNvbnN0IGNoYXIgKm5hbWUsIGludCBpb19tb2RlICk7CisgIGd6ZmlsZWJ1ZiAqYXR0YWNoKCBpbnQgZmlsZV9kZXNjcmlwdG9yLCBpbnQgaW9fbW9kZSApOworICBnemZpbGVidWYgKmNsb3NlKCk7CisKKyAgaW50IHNldGNvbXByZXNzaW9ubGV2ZWwoIGludCBjb21wX2xldmVsICk7CisgIGludCBzZXRjb21wcmVzc2lvbnN0cmF0ZWd5KCBpbnQgY29tcF9zdHJhdGVneSApOworCisgIGlubGluZSBpbnQgaXNfb3BlbigpIGNvbnN0IHsgcmV0dXJuIChmaWxlICE9TlVMTCk7IH0KKworICB2aXJ0dWFsIHN0cmVhbXBvcyBzZWVrb2ZmKCBzdHJlYW1vZmYsIGlvczo6c2Vla19kaXIsIGludCApOworCisgIHZpcnR1YWwgaW50IHN5bmMoKTsKKworcHJvdGVjdGVkOgorCisgIHZpcnR1YWwgaW50IHVuZGVyZmxvdygpOworICB2aXJ0dWFsIGludCBvdmVyZmxvdyggaW50ID0gRU9GICk7CisKK3ByaXZhdGU6CisKKyAgZ3pGaWxlIGZpbGU7CisgIHNob3J0IG1vZGU7CisgIHNob3J0IG93bl9maWxlX2Rlc2NyaXB0b3I7CisKKyAgaW50IGZsdXNoYnVmKCk7CisgIGludCBmaWxsYnVmKCk7CisKK307CisKK2NsYXNzIGd6ZmlsZXN0cmVhbV9jb21tb24gOiB2aXJ0dWFsIHB1YmxpYyBpb3MgeworCisgIGZyaWVuZCBjbGFzcyBnemlmc3RyZWFtOworICBmcmllbmQgY2xhc3MgZ3pvZnN0cmVhbTsKKyAgZnJpZW5kIGd6b2ZzdHJlYW0gJnNldGNvbXByZXNzaW9ubGV2ZWwoIGd6b2ZzdHJlYW0gJiwgaW50ICk7CisgIGZyaWVuZCBnem9mc3RyZWFtICZzZXRjb21wcmVzc2lvbnN0cmF0ZWd5KCBnem9mc3RyZWFtICYsIGludCApOworCitwdWJsaWM6CisgIHZpcnR1YWwgfmd6ZmlsZXN0cmVhbV9jb21tb24oKTsKKworICB2b2lkIGF0dGFjaCggaW50IGZkLCBpbnQgaW9fbW9kZSApOworICB2b2lkIG9wZW4oIGNvbnN0IGNoYXIgKm5hbWUsIGludCBpb19tb2RlICk7CisgIHZvaWQgY2xvc2UoKTsKKworcHJvdGVjdGVkOgorICBnemZpbGVzdHJlYW1fY29tbW9uKCk7CisKK3ByaXZhdGU6CisgIGd6ZmlsZWJ1ZiAqcmRidWYoKTsKKworICBnemZpbGVidWYgYnVmZmVyOworCit9OworCitjbGFzcyBnemlmc3RyZWFtIDogcHVibGljIGd6ZmlsZXN0cmVhbV9jb21tb24sIHB1YmxpYyBpc3RyZWFtIHsKKworcHVibGljOgorCisgIGd6aWZzdHJlYW0oKTsKKyAgZ3ppZnN0cmVhbSggY29uc3QgY2hhciAqbmFtZSwgaW50IGlvX21vZGUgPSBpb3M6OmluICk7CisgIGd6aWZzdHJlYW0oIGludCBmZCwgaW50IGlvX21vZGUgPSBpb3M6OmluICk7CisKKyAgdmlydHVhbCB+Z3ppZnN0cmVhbSgpOworCit9OworCitjbGFzcyBnem9mc3RyZWFtIDogcHVibGljIGd6ZmlsZXN0cmVhbV9jb21tb24sIHB1YmxpYyBvc3RyZWFtIHsKKworcHVibGljOgorCisgIGd6b2ZzdHJlYW0oKTsKKyAgZ3pvZnN0cmVhbSggY29uc3QgY2hhciAqbmFtZSwgaW50IGlvX21vZGUgPSBpb3M6Om91dCApOworICBnem9mc3RyZWFtKCBpbnQgZmQsIGludCBpb19tb2RlID0gaW9zOjpvdXQgKTsKKworICB2aXJ0dWFsIH5nem9mc3RyZWFtKCk7CisKK307CisKK3RlbXBsYXRlPGNsYXNzIFQ+IGNsYXNzIGd6b21hbmlwIHsKKyAgZnJpZW5kIGd6b2ZzdHJlYW0gJm9wZXJhdG9yPDwoZ3pvZnN0cmVhbSAmLCBjb25zdCBnem9tYW5pcDxUPiAmKTsKK3B1YmxpYzoKKyAgZ3pvbWFuaXAoZ3pvZnN0cmVhbSAmKCpmKShnem9mc3RyZWFtICYsIFQpLCBUIHYpIDogZnVuYyhmKSwgdmFsKHYpIHsgfQorcHJpdmF0ZToKKyAgZ3pvZnN0cmVhbSAmKCpmdW5jKShnem9mc3RyZWFtICYsIFQpOworICBUIHZhbDsKK307CisKK3RlbXBsYXRlPGNsYXNzIFQ+IGd6b2ZzdHJlYW0gJm9wZXJhdG9yPDwoZ3pvZnN0cmVhbSAmcywgY29uc3QgZ3pvbWFuaXA8VD4gJm0pCit7CisgIHJldHVybiAoKm0uZnVuYykocywgbS52YWwpOworfQorCitpbmxpbmUgZ3pvZnN0cmVhbSAmc2V0Y29tcHJlc3Npb25sZXZlbCggZ3pvZnN0cmVhbSAmcywgaW50IGwgKQoreworICAocy5yZGJ1ZigpKS0+c2V0Y29tcHJlc3Npb25sZXZlbChsKTsKKyAgcmV0dXJuIHM7Cit9CisKK2lubGluZSBnem9mc3RyZWFtICZzZXRjb21wcmVzc2lvbnN0cmF0ZWd5KCBnem9mc3RyZWFtICZzLCBpbnQgbCApCit7CisgIChzLnJkYnVmKCkpLT5zZXRjb21wcmVzc2lvbnN0cmF0ZWd5KGwpOworICByZXR1cm4gczsKK30KKworaW5saW5lIGd6b21hbmlwPGludD4gc2V0Y29tcHJlc3Npb25sZXZlbChpbnQgbCkKK3sKKyAgcmV0dXJuIGd6b21hbmlwPGludD4oJnNldGNvbXByZXNzaW9ubGV2ZWwsbCk7Cit9CisKK2lubGluZSBnem9tYW5pcDxpbnQ+IHNldGNvbXByZXNzaW9uc3RyYXRlZ3koaW50IGwpCit7CisgIHJldHVybiBnem9tYW5pcDxpbnQ+KCZzZXRjb21wcmVzc2lvbnN0cmF0ZWd5LGwpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL2lvc3RyZWFtMi96c3RyZWFtLmggYi9zcmMvY29udHJpYi9pb3N0cmVhbTIvenN0cmVhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzZDIzMzIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29udHJpYi9pb3N0cmVhbTIvenN0cmVhbS5oCkBAIC0wLDAgKzEsMzA3IEBACisvKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NworICogQ2hyaXN0aWFuIE1pY2hlbHNlbiBSZXNlYXJjaCBBUworICogQWR2YW5jZWQgQ29tcHV0aW5nCisgKiBGYW50b2Z0dmVnZW4gMzgsIDUwMzYgQkVSR0VOLCBOb3J3YXkKKyAqIGh0dHA6Ly93d3cuY21yLm5vCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBDaHJpc3RpYW4gTWljaGVsc2VuIFJlc2VhcmNoIEFTIG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICovCisKKyNpZm5kZWYgWlNUUkVBTV9fSAorI2RlZmluZSBaU1RSRUFNX19ICisKKy8qCisgKiB6c3RyZWFtLmggLSBDKysgaW50ZXJmYWNlIHRvIHRoZSAnemxpYicgZ2VuZXJhbCBwdXJwb3NlIGNvbXByZXNzaW9uIGxpYnJhcnkKKyAqICRJZDogenN0cmVhbS5oIDEuMSAxOTk3LTA2LTI1IDEyOjAwOjU2KzAyIHR5Z2UgRXhwIHR5Z2UgJAorICovCisKKyNpbmNsdWRlIDxzdHJzdHJlYW0uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgInpsaWIuaCIKKworI2lmIGRlZmluZWQoX1dJTjMyKQorIyAgIGluY2x1ZGUgPGZjbnRsLmg+CisjICAgaW5jbHVkZSA8aW8uaD4KKyMgICBkZWZpbmUgU0VUX0JJTkFSWV9NT0RFKGZpbGUpIHNldG1vZGUoZmlsZW5vKGZpbGUpLCBPX0JJTkFSWSkKKyNlbHNlCisjICAgZGVmaW5lIFNFVF9CSU5BUllfTU9ERShmaWxlKQorI2VuZGlmCisKK2NsYXNzIHpzdHJpbmdsZW4geworcHVibGljOgorICAgIHpzdHJpbmdsZW4oY2xhc3MgaXpzdHJlYW0mKTsKKyAgICB6c3RyaW5nbGVuKGNsYXNzIG96c3RyZWFtJiwgY29uc3QgY2hhciopOworICAgIHNpemVfdCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIHZhbC53b3JkOyB9Citwcml2YXRlOgorICAgIHN0cnVjdCBWYWwgeyB1bnNpZ25lZCBjaGFyIGJ5dGU7IHNpemVfdCB3b3JkOyB9IHZhbDsKK307CisKKy8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBpenN0cmVhbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBpenN0cmVhbQoreworICAgIHB1YmxpYzoKKyAgICAgICAgaXpzdHJlYW0oKSA6IG1fZnAoMCkge30KKyAgICAgICAgaXpzdHJlYW0oRklMRSogZnApIDogbV9mcCgwKSB7IG9wZW4oZnApOyB9CisgICAgICAgIGl6c3RyZWFtKGNvbnN0IGNoYXIqIG5hbWUpIDogbV9mcCgwKSB7IG9wZW4obmFtZSk7IH0KKyAgICAgICAgfml6c3RyZWFtKCkgeyBjbG9zZSgpOyB9CisKKyAgICAgICAgLyogT3BlbnMgYSBnemlwICguZ3opIGZpbGUgZm9yIHJlYWRpbmcuCisgICAgICAgICAqIG9wZW4oKSBjYW4gYmUgdXNlZCB0byByZWFkIGEgZmlsZSB3aGljaCBpcyBub3QgaW4gZ3ppcCBmb3JtYXQ7CisgICAgICAgICAqIGluIHRoaXMgY2FzZSByZWFkKCkgd2lsbCBkaXJlY3RseSByZWFkIGZyb20gdGhlIGZpbGUgd2l0aG91dAorICAgICAgICAgKiBkZWNvbXByZXNzaW9uLiBlcnJubyBjYW4gYmUgY2hlY2tlZCB0byBkaXN0aW5ndWlzaCB0d28gZXJyb3IKKyAgICAgICAgICogY2FzZXMgKGlmIGVycm5vIGlzIHplcm8sIHRoZSB6bGliIGVycm9yIGlzIFpfTUVNX0VSUk9SKS4KKyAgICAgICAgICovCisgICAgICAgIHZvaWQgb3Blbihjb25zdCBjaGFyKiBuYW1lKSB7CisgICAgICAgICAgICBpZiAobV9mcCkgY2xvc2UoKTsKKyAgICAgICAgICAgIG1fZnAgPSA6Omd6b3BlbihuYW1lLCAicmIiKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgb3BlbihGSUxFKiBmcCkgeworICAgICAgICAgICAgU0VUX0JJTkFSWV9NT0RFKGZwKTsKKyAgICAgICAgICAgIGlmIChtX2ZwKSBjbG9zZSgpOworICAgICAgICAgICAgbV9mcCA9IDo6Z3pkb3BlbihmaWxlbm8oZnApLCAicmIiKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIEZsdXNoZXMgYWxsIHBlbmRpbmcgaW5wdXQgaWYgbmVjZXNzYXJ5LCBjbG9zZXMgdGhlIGNvbXByZXNzZWQgZmlsZQorICAgICAgICAgKiBhbmQgZGVhbGxvY2F0ZXMgYWxsIHRoZSAoZGUpY29tcHJlc3Npb24gc3RhdGUuIFRoZSByZXR1cm4gdmFsdWUgaXMKKyAgICAgICAgICogdGhlIHpsaWIgZXJyb3IgbnVtYmVyIChzZWUgZnVuY3Rpb24gZXJyb3IoKSBiZWxvdykuCisgICAgICAgICAqLworICAgICAgICBpbnQgY2xvc2UoKSB7CisgICAgICAgICAgICBpbnQgciA9IDo6Z3pjbG9zZShtX2ZwKTsKKyAgICAgICAgICAgIG1fZnAgPSAwOyByZXR1cm4gcjsKKyAgICAgICAgfQorCisgICAgICAgIC8qIEJpbmFyeSByZWFkIHRoZSBnaXZlbiBudW1iZXIgb2YgYnl0ZXMgZnJvbSB0aGUgY29tcHJlc3NlZCBmaWxlLgorICAgICAgICAgKi8KKyAgICAgICAgaW50IHJlYWQodm9pZCogYnVmLCBzaXplX3QgbGVuKSB7CisgICAgICAgICAgICByZXR1cm4gOjpnenJlYWQobV9mcCwgYnVmLCBsZW4pOworICAgICAgICB9CisKKyAgICAgICAgLyogUmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZSBmb3IgdGhlIGxhc3QgZXJyb3Igd2hpY2ggb2NjdXJyZWQgb24gdGhlCisgICAgICAgICAqIGdpdmVuIGNvbXByZXNzZWQgZmlsZS4gZXJybnVtIGlzIHNldCB0byB6bGliIGVycm9yIG51bWJlci4gSWYgYW4KKyAgICAgICAgICogZXJyb3Igb2NjdXJyZWQgaW4gdGhlIGZpbGUgc3lzdGVtIGFuZCBub3QgaW4gdGhlIGNvbXByZXNzaW9uIGxpYnJhcnksCisgICAgICAgICAqIGVycm51bSBpcyBzZXQgdG8gWl9FUlJOTyBhbmQgdGhlIGFwcGxpY2F0aW9uIG1heSBjb25zdWx0IGVycm5vCisgICAgICAgICAqIHRvIGdldCB0aGUgZXhhY3QgZXJyb3IgY29kZS4KKyAgICAgICAgICovCisgICAgICAgIGNvbnN0IGNoYXIqIGVycm9yKGludCogZXJybnVtKSB7CisgICAgICAgICAgICByZXR1cm4gOjpnemVycm9yKG1fZnAsIGVycm51bSk7CisgICAgICAgIH0KKworICAgICAgICBnekZpbGUgZnAoKSB7IHJldHVybiBtX2ZwOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBnekZpbGUgbV9mcDsKK307CisKKy8qCisgKiBCaW5hcnkgcmVhZCB0aGUgZ2l2ZW4gKGFycmF5IG9mKSBvYmplY3QocykgZnJvbSB0aGUgY29tcHJlc3NlZCBmaWxlLgorICogSWYgdGhlIGlucHV0IGZpbGUgd2FzIG5vdCBpbiBnemlwIGZvcm1hdCwgcmVhZCgpIGNvcGllcyB0aGUgb2JqZWN0cyBudW1iZXIKKyAqIG9mIGJ5dGVzIGludG8gdGhlIGJ1ZmZlci4KKyAqIHJldHVybnMgdGhlIG51bWJlciBvZiB1bmNvbXByZXNzZWQgYnl0ZXMgYWN0dWFsbHkgcmVhZAorICogKDAgZm9yIGVuZCBvZiBmaWxlLCAtMSBmb3IgZXJyb3IpLgorICovCit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgSXRlbXM+CitpbmxpbmUgaW50IHJlYWQoaXpzdHJlYW0mIHpzLCBUKiB4LCBJdGVtcyBpdGVtcykgeworICAgIHJldHVybiA6Omd6cmVhZCh6cy5mcCgpLCB4LCBpdGVtcypzaXplb2YoVCkpOworfQorCisvKgorICogQmluYXJ5IGlucHV0IHdpdGggdGhlICc+JyBvcGVyYXRvci4KKyAqLwordGVtcGxhdGUgPGNsYXNzIFQ+CitpbmxpbmUgaXpzdHJlYW0mIG9wZXJhdG9yPihpenN0cmVhbSYgenMsIFQmIHgpIHsKKyAgICA6Omd6cmVhZCh6cy5mcCgpLCAmeCwgc2l6ZW9mKFQpKTsKKyAgICByZXR1cm4genM7Cit9CisKKworaW5saW5lIHpzdHJpbmdsZW46OnpzdHJpbmdsZW4oaXpzdHJlYW0mIHpzKSB7CisgICAgenMgPiB2YWwuYnl0ZTsKKyAgICBpZiAodmFsLmJ5dGUgPT0gMjU1KSB6cyA+IHZhbC53b3JkOworICAgIGVsc2UgdmFsLndvcmQgPSB2YWwuYnl0ZTsKK30KKworLyoKKyAqIFJlYWQgbGVuZ3RoIG9mIHN0cmluZyArIHRoZSBzdHJpbmcgd2l0aCB0aGUgJz4nIG9wZXJhdG9yLgorICovCitpbmxpbmUgaXpzdHJlYW0mIG9wZXJhdG9yPihpenN0cmVhbSYgenMsIGNoYXIqIHgpIHsKKyAgICB6c3RyaW5nbGVuIGxlbih6cyk7CisgICAgOjpnenJlYWQoenMuZnAoKSwgeCwgbGVuLnZhbHVlKCkpOworICAgIHhbbGVuLnZhbHVlKCldID0gJ1wwJzsKKyAgICByZXR1cm4genM7Cit9CisKK2lubGluZSBjaGFyKiByZWFkX3N0cmluZyhpenN0cmVhbSYgenMpIHsKKyAgICB6c3RyaW5nbGVuIGxlbih6cyk7CisgICAgY2hhciogeCA9IG5ldyBjaGFyW2xlbi52YWx1ZSgpKzFdOworICAgIDo6Z3pyZWFkKHpzLmZwKCksIHgsIGxlbi52YWx1ZSgpKTsKKyAgICB4W2xlbi52YWx1ZSgpXSA9ICdcMCc7CisgICAgcmV0dXJuIHg7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG96c3RyZWFtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIG96c3RyZWFtCit7CisgICAgcHVibGljOgorICAgICAgICBvenN0cmVhbSgpIDogbV9mcCgwKSwgbV9vcygwKSB7CisgICAgICAgIH0KKyAgICAgICAgb3pzdHJlYW0oRklMRSogZnAsIGludCBsZXZlbCA9IFpfREVGQVVMVF9DT01QUkVTU0lPTikKKyAgICAgICAgICAgIDogbV9mcCgwKSwgbV9vcygwKSB7CisgICAgICAgICAgICBvcGVuKGZwLCBsZXZlbCk7CisgICAgICAgIH0KKyAgICAgICAgb3pzdHJlYW0oY29uc3QgY2hhciogbmFtZSwgaW50IGxldmVsID0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OKQorICAgICAgICAgICAgOiBtX2ZwKDApLCBtX29zKDApIHsKKyAgICAgICAgICAgIG9wZW4obmFtZSwgbGV2ZWwpOworICAgICAgICB9CisgICAgICAgIH5venN0cmVhbSgpIHsKKyAgICAgICAgICAgIGNsb3NlKCk7CisgICAgICAgIH0KKworICAgICAgICAvKiBPcGVucyBhIGd6aXAgKC5neikgZmlsZSBmb3Igd3JpdGluZy4KKyAgICAgICAgICogVGhlIGNvbXByZXNzaW9uIGxldmVsIHBhcmFtZXRlciBzaG91bGQgYmUgaW4gMC4uOQorICAgICAgICAgKiBlcnJubyBjYW4gYmUgY2hlY2tlZCB0byBkaXN0aW5ndWlzaCB0d28gZXJyb3IgY2FzZXMKKyAgICAgICAgICogKGlmIGVycm5vIGlzIHplcm8sIHRoZSB6bGliIGVycm9yIGlzIFpfTUVNX0VSUk9SKS4KKyAgICAgICAgICovCisgICAgICAgIHZvaWQgb3Blbihjb25zdCBjaGFyKiBuYW1lLCBpbnQgbGV2ZWwgPSBaX0RFRkFVTFRfQ09NUFJFU1NJT04pIHsKKyAgICAgICAgICAgIGNoYXIgbW9kZVs0XSA9ICJ3YlwwIjsKKyAgICAgICAgICAgIGlmIChsZXZlbCAhPSBaX0RFRkFVTFRfQ09NUFJFU1NJT04pIG1vZGVbMl0gPSAnMCcrbGV2ZWw7CisgICAgICAgICAgICBpZiAobV9mcCkgY2xvc2UoKTsKKyAgICAgICAgICAgIG1fZnAgPSA6Omd6b3BlbihuYW1lLCBtb2RlKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIG9wZW4gZnJvbSBhIEZJTEUgcG9pbnRlci4KKyAgICAgICAgICovCisgICAgICAgIHZvaWQgb3BlbihGSUxFKiBmcCwgaW50IGxldmVsID0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OKSB7CisgICAgICAgICAgICBTRVRfQklOQVJZX01PREUoZnApOworICAgICAgICAgICAgY2hhciBtb2RlWzRdID0gIndiXDAiOworICAgICAgICAgICAgaWYgKGxldmVsICE9IFpfREVGQVVMVF9DT01QUkVTU0lPTikgbW9kZVsyXSA9ICcwJytsZXZlbDsKKyAgICAgICAgICAgIGlmIChtX2ZwKSBjbG9zZSgpOworICAgICAgICAgICAgbV9mcCA9IDo6Z3pkb3BlbihmaWxlbm8oZnApLCBtb2RlKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIEZsdXNoZXMgYWxsIHBlbmRpbmcgb3V0cHV0IGlmIG5lY2Vzc2FyeSwgY2xvc2VzIHRoZSBjb21wcmVzc2VkIGZpbGUKKyAgICAgICAgICogYW5kIGRlYWxsb2NhdGVzIGFsbCB0aGUgKGRlKWNvbXByZXNzaW9uIHN0YXRlLiBUaGUgcmV0dXJuIHZhbHVlIGlzCisgICAgICAgICAqIHRoZSB6bGliIGVycm9yIG51bWJlciAoc2VlIGZ1bmN0aW9uIGVycm9yKCkgYmVsb3cpLgorICAgICAgICAgKi8KKyAgICAgICAgaW50IGNsb3NlKCkgeworICAgICAgICAgICAgaWYgKG1fb3MpIHsKKyAgICAgICAgICAgICAgICA6Omd6d3JpdGUobV9mcCwgbV9vcy0+c3RyKCksIG1fb3MtPnBjb3VudCgpKTsKKyAgICAgICAgICAgICAgICBkZWxldGVbXSBtX29zLT5zdHIoKTsgZGVsZXRlIG1fb3M7IG1fb3MgPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50IHIgPSA6Omd6Y2xvc2UobV9mcCk7IG1fZnAgPSAwOyByZXR1cm4gcjsKKyAgICAgICAgfQorCisgICAgICAgIC8qIEJpbmFyeSB3cml0ZSB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGJ5dGVzIGludG8gdGhlIGNvbXByZXNzZWQgZmlsZS4KKyAgICAgICAgICovCisgICAgICAgIGludCB3cml0ZShjb25zdCB2b2lkKiBidWYsIHNpemVfdCBsZW4pIHsKKyAgICAgICAgICAgIHJldHVybiA6Omd6d3JpdGUobV9mcCwgKHZvaWRwKSBidWYsIGxlbik7CisgICAgICAgIH0KKworICAgICAgICAvKiBGbHVzaGVzIGFsbCBwZW5kaW5nIG91dHB1dCBpbnRvIHRoZSBjb21wcmVzc2VkIGZpbGUuIFRoZSBwYXJhbWV0ZXIKKyAgICAgICAgICogX2ZsdXNoIGlzIGFzIGluIHRoZSBkZWZsYXRlKCkgZnVuY3Rpb24uIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIHpsaWIKKyAgICAgICAgICogZXJyb3IgbnVtYmVyIChzZWUgZnVuY3Rpb24gZ3plcnJvciBiZWxvdykuIGZsdXNoKCkgcmV0dXJucyBaX09LIGlmCisgICAgICAgICAqIHRoZSBmbHVzaF8gcGFyYW1ldGVyIGlzIFpfRklOSVNIIGFuZCBhbGwgb3V0cHV0IGNvdWxkIGJlIGZsdXNoZWQuCisgICAgICAgICAqIGZsdXNoKCkgc2hvdWxkIGJlIGNhbGxlZCBvbmx5IHdoZW4gc3RyaWN0bHkgbmVjZXNzYXJ5IGJlY2F1c2UgaXQgY2FuCisgICAgICAgICAqIGRlZ3JhZGUgY29tcHJlc3Npb24uCisgICAgICAgICAqLworICAgICAgICBpbnQgZmx1c2goaW50IF9mbHVzaCkgeworICAgICAgICAgICAgb3NfZmx1c2goKTsKKyAgICAgICAgICAgIHJldHVybiA6Omd6Zmx1c2gobV9mcCwgX2ZsdXNoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFJldHVybnMgdGhlIGVycm9yIG1lc3NhZ2UgZm9yIHRoZSBsYXN0IGVycm9yIHdoaWNoIG9jY3VycmVkIG9uIHRoZQorICAgICAgICAgKiBnaXZlbiBjb21wcmVzc2VkIGZpbGUuIGVycm51bSBpcyBzZXQgdG8gemxpYiBlcnJvciBudW1iZXIuIElmIGFuCisgICAgICAgICAqIGVycm9yIG9jY3VycmVkIGluIHRoZSBmaWxlIHN5c3RlbSBhbmQgbm90IGluIHRoZSBjb21wcmVzc2lvbiBsaWJyYXJ5LAorICAgICAgICAgKiBlcnJudW0gaXMgc2V0IHRvIFpfRVJSTk8gYW5kIHRoZSBhcHBsaWNhdGlvbiBtYXkgY29uc3VsdCBlcnJubworICAgICAgICAgKiB0byBnZXQgdGhlIGV4YWN0IGVycm9yIGNvZGUuCisgICAgICAgICAqLworICAgICAgICBjb25zdCBjaGFyKiBlcnJvcihpbnQqIGVycm51bSkgeworICAgICAgICAgICAgcmV0dXJuIDo6Z3plcnJvcihtX2ZwLCBlcnJudW0pOworICAgICAgICB9CisKKyAgICAgICAgZ3pGaWxlIGZwKCkgeyByZXR1cm4gbV9mcDsgfQorCisgICAgICAgIG9zdHJlYW0mIG9zKCkgeworICAgICAgICAgICAgaWYgKG1fb3MgPT0gMCkgbV9vcyA9IG5ldyBvc3Ryc3RyZWFtOworICAgICAgICAgICAgcmV0dXJuICptX29zOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBvc19mbHVzaCgpIHsKKyAgICAgICAgICAgIGlmIChtX29zICYmIG1fb3MtPnBjb3VudCgpPjApIHsKKyAgICAgICAgICAgICAgICBvc3Ryc3RyZWFtKiBvc3MgPSBuZXcgb3N0cnN0cmVhbTsKKyAgICAgICAgICAgICAgICBvc3MtPmZpbGwobV9vcy0+ZmlsbCgpKTsKKyAgICAgICAgICAgICAgICBvc3MtPmZsYWdzKG1fb3MtPmZsYWdzKCkpOworICAgICAgICAgICAgICAgIG9zcy0+cHJlY2lzaW9uKG1fb3MtPnByZWNpc2lvbigpKTsKKyAgICAgICAgICAgICAgICBvc3MtPndpZHRoKG1fb3MtPndpZHRoKCkpOworICAgICAgICAgICAgICAgIDo6Z3p3cml0ZShtX2ZwLCBtX29zLT5zdHIoKSwgbV9vcy0+cGNvdW50KCkpOworICAgICAgICAgICAgICAgIGRlbGV0ZVtdIG1fb3MtPnN0cigpOyBkZWxldGUgbV9vczsgbV9vcyA9IG9zczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgZ3pGaWxlIG1fZnA7CisgICAgICAgIG9zdHJzdHJlYW0qIG1fb3M7Cit9OworCisvKgorICogQmluYXJ5IHdyaXRlIHRoZSBnaXZlbiAoYXJyYXkgb2YpIG9iamVjdChzKSBpbnRvIHRoZSBjb21wcmVzc2VkIGZpbGUuCisgKiByZXR1cm5zIHRoZSBudW1iZXIgb2YgdW5jb21wcmVzc2VkIGJ5dGVzIGFjdHVhbGx5IHdyaXR0ZW4KKyAqICgwIGluIGNhc2Ugb2YgZXJyb3IpLgorICovCit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgSXRlbXM+CitpbmxpbmUgaW50IHdyaXRlKG96c3RyZWFtJiB6cywgY29uc3QgVCogeCwgSXRlbXMgaXRlbXMpIHsKKyAgICByZXR1cm4gOjpnendyaXRlKHpzLmZwKCksICh2b2lkcCkgeCwgaXRlbXMqc2l6ZW9mKFQpKTsKK30KKworLyoKKyAqIEJpbmFyeSBvdXRwdXQgd2l0aCB0aGUgJzwnIG9wZXJhdG9yLgorICovCit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK2lubGluZSBvenN0cmVhbSYgb3BlcmF0b3I8KG96c3RyZWFtJiB6cywgY29uc3QgVCYgeCkgeworICAgIDo6Z3p3cml0ZSh6cy5mcCgpLCAodm9pZHApICZ4LCBzaXplb2YoVCkpOworICAgIHJldHVybiB6czsKK30KKworaW5saW5lIHpzdHJpbmdsZW46OnpzdHJpbmdsZW4ob3pzdHJlYW0mIHpzLCBjb25zdCBjaGFyKiB4KSB7CisgICAgdmFsLmJ5dGUgPSAyNTU7ICB2YWwud29yZCA9IDo6c3RybGVuKHgpOworICAgIGlmICh2YWwud29yZCA8IDI1NSkgenMgPCAodmFsLmJ5dGUgPSB2YWwud29yZCk7CisgICAgZWxzZSB6cyA8IHZhbDsKK30KKworLyoKKyAqIFdyaXRlIGxlbmd0aCBvZiBzdHJpbmcgKyB0aGUgc3RyaW5nIHdpdGggdGhlICc8JyBvcGVyYXRvci4KKyAqLworaW5saW5lIG96c3RyZWFtJiBvcGVyYXRvcjwob3pzdHJlYW0mIHpzLCBjb25zdCBjaGFyKiB4KSB7CisgICAgenN0cmluZ2xlbiBsZW4oenMsIHgpOworICAgIDo6Z3p3cml0ZSh6cy5mcCgpLCAodm9pZHApIHgsIGxlbi52YWx1ZSgpKTsKKyAgICByZXR1cm4genM7Cit9CisKKyNpZmRlZiBfTVNDX1ZFUgoraW5saW5lIG96c3RyZWFtJiBvcGVyYXRvcjwob3pzdHJlYW0mIHpzLCBjaGFyKiBjb25zdCYgeCkgeworICAgIHJldHVybiB6cyA8IChjb25zdCBjaGFyKikgeDsKK30KKyNlbmRpZgorCisvKgorICogQXNjaWkgd3JpdGUgd2l0aCB0aGUgPDwgb3BlcmF0b3I7CisgKi8KK3RlbXBsYXRlIDxjbGFzcyBUPgoraW5saW5lIG9zdHJlYW0mIG9wZXJhdG9yPDwob3pzdHJlYW0mIHpzLCBjb25zdCBUJiB4KSB7CisgICAgenMub3NfZmx1c2goKTsKKyAgICByZXR1cm4genMub3MoKSA8PCB4OworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL2lvc3RyZWFtMi96c3RyZWFtX3Rlc3QuY3BwIGIvc3JjL2NvbnRyaWIvaW9zdHJlYW0yL3pzdHJlYW1fdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI3M2Y2MgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb250cmliL2lvc3RyZWFtMi96c3RyZWFtX3Rlc3QuY3BwCkBAIC0wLDAgKzEsMjUgQEAKKyNpbmNsdWRlICJ6c3RyZWFtLmgiCisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGlvbWFuaXAuaD4KKwordm9pZCBtYWluKCkgeworICAgIGNoYXIgaFsyNTZdID0gIkhlbGxvIjsKKyAgICBjaGFyKiBnID0gIkdvb2RieWUiOworICAgIG96c3RyZWFtIG91dCgidGVtcC5neiIpOworICAgIG91dCA8ICJUaGlzIHdvcmtzIHdlbGwiIDwgaCA8IGc7CisgICAgb3V0LmNsb3NlKCk7CisKKyAgICBpenN0cmVhbSBpbigidGVtcC5neiIpOyAvLyByZWFkIGl0IGJhY2sKKyAgICBjaGFyICp4ID0gcmVhZF9zdHJpbmcoaW4pLCAqeSA9IG5ldyBjaGFyWzI1Nl0sIHpbMjU2XTsKKyAgICBpbiA+IHkgPiB6OworICAgIGluLmNsb3NlKCk7CisgICAgY291dCA8PCB4IDw8IGVuZGwgPDwgeSA8PCBlbmRsIDw8IHogPDwgZW5kbDsKKworICAgIG91dC5vcGVuKCJ0ZW1wLmd6Iik7IC8vIHRyeSBhc2NpaSBvdXRwdXQ7IHpjYXQgdGVtcC5neiB0byBzZWUgdGhlIHJlc3VsdHMKKyAgICBvdXQgPDwgc2V0dyg1MCkgPDwgc2V0ZmlsbCgnIycpIDw8IHNldHByZWNpc2lvbigyMCkgPDwgeCA8PCBlbmRsIDw8IHkgPDwgZW5kbCA8PCB6IDw8IGVuZGw7CisgICAgb3V0IDw8IHogPDwgZW5kbCA8PCB5IDw8IGVuZGwgPDwgeCA8PCBlbmRsOworICAgIG91dCA8PCAxLjEyMzQ1Njc4OTAxMjM0NTY3ODkgPDwgZW5kbDsKKworICAgIGRlbGV0ZVtdIHg7IGRlbGV0ZVtdIHk7Cit9CmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi9pb3N0cmVhbTMvUkVBRE1FIGIvc3JjL2NvbnRyaWIvaW9zdHJlYW0zL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2IzMTlhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbnRyaWIvaW9zdHJlYW0zL1JFQURNRQpAQCAtMCwwICsxLDM1IEBACitUaGVzZSBjbGFzc2VzIHByb3ZpZGUgYSBDKysgc3RyZWFtIGludGVyZmFjZSB0byB0aGUgemxpYiBsaWJyYXJ5LiBJdCBhbGxvd3MgeW91Cit0byBkbyB0aGluZ3MgbGlrZToKKworICBnem9mc3RyZWFtIG91dGYoImJsYWguZ3oiKTsKKyAgb3V0ZiA8PCAiVGhlc2UgZ28gaW50byB0aGUgZ3ppcCBmaWxlICIgPDwgMTIzIDw8IGVuZGw7CisKK0l0IGRvZXMgdGhpcyBieSBkZXJpdmluZyBhIHNwZWNpYWxpemVkIHN0cmVhbSBidWZmZXIgZm9yIGd6aXBwZWQgZmlsZXMsIHdoaWNoIGlzCit0aGUgd2F5IFN0cm91c3RydXAgd291bGQgaGF2ZSBkb25lIGl0LiA6LT4KKworVGhlIGd6aWZzdHJlYW0gYW5kIGd6b2ZzdHJlYW0gY2xhc3NlcyB3ZXJlIG9yaWdpbmFsbHkgd3JpdHRlbiBieSBLZXZpbiBSdWxhbmQKK2FuZCBtYWRlIGF2YWlsYWJsZSBpbiB0aGUgemxpYiBjb250cmliL2lvc3RyZWFtIGRpcmVjdG9yeS4gVGhlIG9sZGVyIHZlcnNpb24gc3RpbGwKK2NvbXBpbGVzIHVuZGVyIGdjYyAyLnh4LCBidXQgbm90IHVuZGVyIGdjYyAzLnh4LCB3aGljaCBzcGFya2VkIHRoZSBkZXZlbG9wbWVudCBvZgordGhpcyB2ZXJzaW9uLgorCitUaGUgbmV3IGNsYXNzZXMgYXJlIGFzIHN0YW5kYXJkLWNvbXBsaWFudCBhcyBwb3NzaWJsZSwgY2xvc2VseSBmb2xsb3dpbmcgdGhlCithcHByb2FjaCBvZiB0aGUgc3RhbmRhcmQgbGlicmFyeSdzIGZzdHJlYW0gY2xhc3Nlcy4gSXQgY29tcGlsZXMgdW5kZXIgZ2NjIHZlcnNpb25zCiszLjIgYW5kIDMuMywgYnV0IG5vdCB1bmRlciBnY2MgMi54eC4gVGhpcyBpcyBtYWlubHkgZHVlIHRvIGNoYW5nZXMgaW4gdGhlIHN0YW5kYXJkCitsaWJyYXJ5IG5hbWluZyBzY2hlbWUuIFRoZSBuZXcgdmVyc2lvbiBvZiBnemlmc3RyZWFtL2d6b2ZzdHJlYW0vZ3pmaWxlYnVmIGRpZmZlcnMKK2Zyb20gdGhlIHByZXZpb3VzIG9uZSBpbiB0aGUgZm9sbG93aW5nIHJlc3BlY3RzOgorLSBhZGRlZCBzaG93bWFueWMKKy0gYWRkZWQgc2V0YnVmLCB3aXRoIHN1cHBvcnQgZm9yIHVuYnVmZmVyZWQgb3V0cHV0IHZpYSBzZXRidWYoMCwwKQorLSBhIGZldyBidWcgZml4ZXMgb2Ygc3RyZWFtIGJlaGF2aW9yCistIGd6aXBwZWQgb3V0cHV0IGZpbGUgb3BlbmVkIHdpdGggZGVmYXVsdCBjb21wcmVzc2lvbiBsZXZlbCBpbnN0ZWFkIG9mIG1heGltdW0gbGV2ZWwKKy0gc2V0Y29tcHJlc3Npb25sZXZlbCgpL3N0cmF0ZWd5KCkgbWVtYmVycyByZXBsYWNlZCBieSBzaW5nbGUgc2V0Y29tcHJlc3Npb24oKQorCitUaGUgY29kZSBpcyBwcm92aWRlZCAiYXMgaXMiLCB3aXRoIHRoZSBwZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlCithbmQgc2VsbCBpdCBmb3IgYW55IHB1cnBvc2Ugd2l0aG91dCBmZWUuCisKK0x1ZHdpZyBTY2h3YXJkdAorPHNjaHdhcmR0QHN1bi5hYy56YT4KKworRFNQIExhYgorRWxlY3RyaWNhbCAmIEVsZWN0cm9uaWMgRW5naW5lZXJpbmcgRGVwYXJ0bWVudAorVW5pdmVyc2l0eSBvZiBTdGVsbGVuYm9zY2gKK1NvdXRoIEFmcmljYQpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvaW9zdHJlYW0zL1RPRE8gYi9zcmMvY29udHJpYi9pb3N0cmVhbTMvVE9ETwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDMyZjk3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbnRyaWIvaW9zdHJlYW0zL1RPRE8KQEAgLTAsMCArMSwxNyBAQAorUG9zc2libGUgdXBncmFkZXMgdG8gZ3pmaWxlYnVmOgorCistIFRoZSBhYmlsaXR5IHRvIGRvIHB1dGJhY2sgKGUuZy4gcHV0YmFja2ZhaWwpCisKKy0gVGhlIGFiaWxpdHkgdG8gc2VlayAoemxpYiBzdXBwb3J0cyB0aGlzLCBidXQgY291bGQgYmUgc2xvdy90cmlja3kpCisKKy0gU2ltdWx0YW5lb3VzIHJlYWQvd3JpdGUgYWNjZXNzIChkb2VzIGl0IG1ha2Ugc2Vuc2U/KQorCistIFN1cHBvcnQgZm9yIGlvc19iYXNlOjphdGUgb3BlbiBtb2RlCisKKy0gTG9jYWxlIHN1cHBvcnQ/CisKKy0gQ2hlY2sgcHVibGljIGludGVyZmFjZSB0byBzZWUgd2hpY2ggY2FsbHMgZ2l2ZSBwcm9ibGVtcworICAoZHVlIHRvIGRlcGVuZGVuY2Ugb24gbGlicmFyeSBpbnRlcm5hbHMpCisKKy0gT3ZlcnJpZGUgb3BlcmF0b3I8PChvc3RyZWFtJiwgZ3pmaWxlYnVmKikgdG8gYWxsb3cgZGlyZWN0IGNvcHlpbmcKKyAgb2Ygc3RyZWFtIGJ1ZmZlciB0byBzdHJlYW0gKCBpLmUuIG9zIDw8IGlzLnJkYnVmKCk7ICkKZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL2lvc3RyZWFtMy90ZXN0LmNjIGIvc3JjL2NvbnRyaWIvaW9zdHJlYW0zL3Rlc3QuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQyMzUzMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb250cmliL2lvc3RyZWFtMy90ZXN0LmNjCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBUZXN0IHByb2dyYW0gZm9yIGd6aWZzdHJlYW0gYW5kIGd6b2ZzdHJlYW0KKyAqCisgKiBieSBMdWR3aWcgU2Nod2FyZHQgPHNjaHdhcmR0QHN1bi5hYy56YT4KKyAqIG9yaWdpbmFsIHZlcnNpb24gYnkgS2V2aW4gUnVsYW5kIDxrZXZpbkByb2Rpbi53dXN0bC5lZHU+CisgKi8KKworI2luY2x1ZGUgInpmc3RyZWFtLmgiCisjaW5jbHVkZSA8aW9zdHJlYW0+ICAgICAgLy8gZm9yIGNvdXQKKworaW50IG1haW4oKSB7CisKKyAgZ3pvZnN0cmVhbSBvdXRmOworICBnemlmc3RyZWFtIGluZjsKKyAgY2hhciBidWZbODBdOworCisgIG91dGYub3BlbigidGVzdDEudHh0Lmd6Iik7CisgIG91dGYgPDwgIlRoZSBxdWljayBicm93biBmb3ggc2lkZXN0ZXBwZWQgdGhlIGxhenkgY2FuaW5lXG4iCisgICAgICAgPDwgMS4zIDw8ICJcblBsYW4gIiA8PCA5IDw8IHN0ZDo6ZW5kbDsKKyAgb3V0Zi5jbG9zZSgpOworICBzdGQ6OmNvdXQgPDwgIldyb3RlIHRoZSBmb2xsb3dpbmcgbWVzc2FnZSB0byAndGVzdDEudHh0Lmd6JyAoY2hlY2sgd2l0aCB6Y2F0IG9yIHpsZXNzKTpcbiIKKyAgICAgICAgICAgIDw8ICJUaGUgcXVpY2sgYnJvd24gZm94IHNpZGVzdGVwcGVkIHRoZSBsYXp5IGNhbmluZVxuIgorICAgICAgICAgICAgPDwgMS4zIDw8ICJcblBsYW4gIiA8PCA5IDw8IHN0ZDo6ZW5kbDsKKworICBzdGQ6OmNvdXQgPDwgIlxuUmVhZGluZyAndGVzdDEudHh0Lmd6JyAoYnVmZmVyZWQpIHByb2R1Y2VzOlxuIjsKKyAgaW5mLm9wZW4oInRlc3QxLnR4dC5neiIpOworICB3aGlsZSAoaW5mLmdldGxpbmUoYnVmLDgwLCdcbicpKSB7CisgICAgc3RkOjpjb3V0IDw8IGJ1ZiA8PCAiXHQoIiA8PCBpbmYucmRidWYoKS0+aW5fYXZhaWwoKSA8PCAiIGNoYXJzIGxlZnQgaW4gYnVmZmVyKVxuIjsKKyAgfQorICBpbmYuY2xvc2UoKTsKKworICBvdXRmLnJkYnVmKCktPnB1YnNldGJ1ZigwLDApOworICBvdXRmLm9wZW4oInRlc3QyLnR4dC5neiIpOworICBvdXRmIDw8IHNldGNvbXByZXNzaW9uKFpfTk9fQ09NUFJFU1NJT04pCisgICAgICAgPDwgIlRoZSBxdWljayBicm93biBmb3ggc2lkZXN0ZXBwZWQgdGhlIGxhenkgY2FuaW5lXG4iCisgICAgICAgPDwgMS4zIDw8ICJcblBsYW4gIiA8PCA5IDw8IHN0ZDo6ZW5kbDsKKyAgb3V0Zi5jbG9zZSgpOworICBzdGQ6OmNvdXQgPDwgIlxuV3JvdGUgdGhlIHNhbWUgbWVzc2FnZSB0byAndGVzdDIudHh0Lmd6JyBpbiB1bmNvbXByZXNzZWQgZm9ybSI7CisKKyAgc3RkOjpjb3V0IDw8ICJcblJlYWRpbmcgJ3Rlc3QyLnR4dC5neicgKHVuYnVmZmVyZWQpIHByb2R1Y2VzOlxuIjsKKyAgaW5mLnJkYnVmKCktPnB1YnNldGJ1ZigwLDApOworICBpbmYub3BlbigidGVzdDIudHh0Lmd6Iik7CisgIHdoaWxlIChpbmYuZ2V0bGluZShidWYsODAsJ1xuJykpIHsKKyAgICBzdGQ6OmNvdXQgPDwgYnVmIDw8ICJcdCgiIDw8IGluZi5yZGJ1ZigpLT5pbl9hdmFpbCgpIDw8ICIgY2hhcnMgbGVmdCBpbiBidWZmZXIpXG4iOworICB9CisgIGluZi5jbG9zZSgpOworCisgIHJldHVybiAwOworCit9CmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi9pb3N0cmVhbTMvemZzdHJlYW0uY2MgYi9zcmMvY29udHJpYi9pb3N0cmVhbTMvemZzdHJlYW0uY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRlYjkzMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb250cmliL2lvc3RyZWFtMy96ZnN0cmVhbS5jYwpAQCAtMCwwICsxLDQ3OSBAQAorLyoKKyAqIEEgQysrIEkvTyBzdHJlYW1zIGludGVyZmFjZSB0byB0aGUgemxpYiBneiogZnVuY3Rpb25zCisgKgorICogYnkgTHVkd2lnIFNjaHdhcmR0IDxzY2h3YXJkdEBzdW4uYWMuemE+CisgKiBvcmlnaW5hbCB2ZXJzaW9uIGJ5IEtldmluIFJ1bGFuZCA8a2V2aW5Acm9kaW4ud3VzdGwuZWR1PgorICoKKyAqIFRoaXMgdmVyc2lvbiBpcyBzdGFuZGFyZC1jb21wbGlhbnQgYW5kIGNvbXBhdGlibGUgd2l0aCBnY2MgMy54LgorICovCisKKyNpbmNsdWRlICJ6ZnN0cmVhbS5oIgorI2luY2x1ZGUgPGNzdHJpbmc+ICAgICAgICAgIC8vIGZvciBzdHJjcHksIHN0cmNhdCwgc3RybGVuIChtb2RlIHN0cmluZ3MpCisjaW5jbHVkZSA8Y3N0ZGlvPiAgICAgICAgICAgLy8gZm9yIEJVRlNJWgorCisvLyBJbnRlcm5hbCBidWZmZXIgc2l6ZXMgKGRlZmF1bHQgYW5kICJ1bmJ1ZmZlcmVkIiB2ZXJzaW9ucykKKyNkZWZpbmUgQklHQlVGU0laRSBCVUZTSVoKKyNkZWZpbmUgU01BTExCVUZTSVpFIDEKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyBEZWZhdWx0IGNvbnN0cnVjdG9yCitnemZpbGVidWY6Omd6ZmlsZWJ1ZigpCis6IGZpbGUoTlVMTCksIGlvX21vZGUoc3RkOjppb3NfYmFzZTo6b3Blbm1vZGUoMCkpLCBvd25fZmQoZmFsc2UpLAorICBidWZmZXIoTlVMTCksIGJ1ZmZlcl9zaXplKEJJR0JVRlNJWkUpLCBvd25fYnVmZmVyKHRydWUpCit7CisgIC8vIE5vIGJ1ZmZlcnMgdG8gc3RhcnQgd2l0aAorICB0aGlzLT5kaXNhYmxlX2J1ZmZlcigpOworfQorCisvLyBEZXN0cnVjdG9yCitnemZpbGVidWY6On5nemZpbGVidWYoKQoreworICAvLyBTeW5jIG91dHB1dCBidWZmZXIgYW5kIGNsb3NlIG9ubHkgaWYgcmVzcG9uc2libGUgZm9yIGZpbGUKKyAgLy8gKGkuZS4gYXR0YWNoZWQgc3RyZWFtcyBzaG91bGQgYmUgbGVmdCBvcGVuIGF0IHRoaXMgc3RhZ2UpCisgIHRoaXMtPnN5bmMoKTsKKyAgaWYgKG93bl9mZCkKKyAgICB0aGlzLT5jbG9zZSgpOworICAvLyBNYWtlIHN1cmUgaW50ZXJuYWwgYnVmZmVyIGlzIGRlYWxsb2NhdGVkCisgIHRoaXMtPmRpc2FibGVfYnVmZmVyKCk7Cit9CisKKy8vIFNldCBjb21wcmVzc2lvbiBsZXZlbCBhbmQgc3RyYXRlZ3kKK2ludAorZ3pmaWxlYnVmOjpzZXRjb21wcmVzc2lvbihpbnQgY29tcF9sZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbXBfc3RyYXRlZ3kpCit7CisgIHJldHVybiBnenNldHBhcmFtcyhmaWxlLCBjb21wX2xldmVsLCBjb21wX3N0cmF0ZWd5KTsKK30KKworLy8gT3BlbiBnemlwcGVkIGZpbGUKK2d6ZmlsZWJ1ZioKK2d6ZmlsZWJ1Zjo6b3Blbihjb25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgIHN0ZDo6aW9zX2Jhc2U6Om9wZW5tb2RlIG1vZGUpCit7CisgIC8vIEZhaWwgaWYgZmlsZSBhbHJlYWR5IG9wZW4KKyAgaWYgKHRoaXMtPmlzX29wZW4oKSkKKyAgICByZXR1cm4gTlVMTDsKKyAgLy8gRG9uJ3Qgc3VwcG9ydCBzaW11bHRhbmVvdXMgcmVhZC93cml0ZSBhY2Nlc3MgKHlldCkKKyAgaWYgKChtb2RlICYgc3RkOjppb3NfYmFzZTo6aW4pICYmIChtb2RlICYgc3RkOjppb3NfYmFzZTo6b3V0KSkKKyAgICByZXR1cm4gTlVMTDsKKworICAvLyBCdWlsZCBtb2RlIHN0cmluZyBmb3IgZ3pvcGVuIGFuZCBjaGVjayBpdCBbMjcuOC4xLjMuMl0KKyAgY2hhciBjaGFyX21vZGVbNl0gPSAiXDBcMFwwXDBcMCI7CisgIGlmICghdGhpcy0+b3Blbl9tb2RlKG1vZGUsIGNoYXJfbW9kZSkpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgLy8gQXR0ZW1wdCB0byBvcGVuIGZpbGUKKyAgaWYgKChmaWxlID0gZ3pvcGVuKG5hbWUsIGNoYXJfbW9kZSkpID09IE5VTEwpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgLy8gT24gc3VjY2VzcywgYWxsb2NhdGUgaW50ZXJuYWwgYnVmZmVyIGFuZCBzZXQgZmxhZ3MKKyAgdGhpcy0+ZW5hYmxlX2J1ZmZlcigpOworICBpb19tb2RlID0gbW9kZTsKKyAgb3duX2ZkID0gdHJ1ZTsKKyAgcmV0dXJuIHRoaXM7Cit9CisKKy8vIEF0dGFjaCB0byBnemlwcGVkIGZpbGUKK2d6ZmlsZWJ1ZioKK2d6ZmlsZWJ1Zjo6YXR0YWNoKGludCBmZCwKKyAgICAgICAgICAgICAgICAgIHN0ZDo6aW9zX2Jhc2U6Om9wZW5tb2RlIG1vZGUpCit7CisgIC8vIEZhaWwgaWYgZmlsZSBhbHJlYWR5IG9wZW4KKyAgaWYgKHRoaXMtPmlzX29wZW4oKSkKKyAgICByZXR1cm4gTlVMTDsKKyAgLy8gRG9uJ3Qgc3VwcG9ydCBzaW11bHRhbmVvdXMgcmVhZC93cml0ZSBhY2Nlc3MgKHlldCkKKyAgaWYgKChtb2RlICYgc3RkOjppb3NfYmFzZTo6aW4pICYmIChtb2RlICYgc3RkOjppb3NfYmFzZTo6b3V0KSkKKyAgICByZXR1cm4gTlVMTDsKKworICAvLyBCdWlsZCBtb2RlIHN0cmluZyBmb3IgZ3pkb3BlbiBhbmQgY2hlY2sgaXQgWzI3LjguMS4zLjJdCisgIGNoYXIgY2hhcl9tb2RlWzZdID0gIlwwXDBcMFwwXDAiOworICBpZiAoIXRoaXMtPm9wZW5fbW9kZShtb2RlLCBjaGFyX21vZGUpKQorICAgIHJldHVybiBOVUxMOworCisgIC8vIEF0dGVtcHQgdG8gYXR0YWNoIHRvIGZpbGUKKyAgaWYgKChmaWxlID0gZ3pkb3BlbihmZCwgY2hhcl9tb2RlKSkgPT0gTlVMTCkKKyAgICByZXR1cm4gTlVMTDsKKworICAvLyBPbiBzdWNjZXNzLCBhbGxvY2F0ZSBpbnRlcm5hbCBidWZmZXIgYW5kIHNldCBmbGFncworICB0aGlzLT5lbmFibGVfYnVmZmVyKCk7CisgIGlvX21vZGUgPSBtb2RlOworICBvd25fZmQgPSBmYWxzZTsKKyAgcmV0dXJuIHRoaXM7Cit9CisKKy8vIENsb3NlIGd6aXBwZWQgZmlsZQorZ3pmaWxlYnVmKgorZ3pmaWxlYnVmOjpjbG9zZSgpCit7CisgIC8vIEZhaWwgaW1tZWRpYXRlbHkgaWYgbm8gZmlsZSBpcyBvcGVuCisgIGlmICghdGhpcy0+aXNfb3BlbigpKQorICAgIHJldHVybiBOVUxMOworICAvLyBBc3N1bWUgc3VjY2VzcworICBnemZpbGVidWYqIHJldHZhbCA9IHRoaXM7CisgIC8vIEF0dGVtcHQgdG8gc3luYyBhbmQgY2xvc2UgZ3ppcHBlZCBmaWxlCisgIGlmICh0aGlzLT5zeW5jKCkgPT0gLTEpCisgICAgcmV0dmFsID0gTlVMTDsKKyAgaWYgKGd6Y2xvc2UoZmlsZSkgPCAwKQorICAgIHJldHZhbCA9IE5VTEw7CisgIC8vIEZpbGUgaXMgbm93IGdvbmUgYW55d2F5IChwb3N0Y29uZGl0aW9uIFsyNy44LjEuMy44XSkKKyAgZmlsZSA9IE5VTEw7CisgIG93bl9mZCA9IGZhbHNlOworICAvLyBEZXN0cm95IGludGVybmFsIGJ1ZmZlciBpZiBpdCBleGlzdHMKKyAgdGhpcy0+ZGlzYWJsZV9idWZmZXIoKTsKKyAgcmV0dXJuIHJldHZhbDsKK30KKworLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCisvLyBDb252ZXJ0IGludCBvcGVuIG1vZGUgdG8gbW9kZSBzdHJpbmcKK2Jvb2wKK2d6ZmlsZWJ1Zjo6b3Blbl9tb2RlKHN0ZDo6aW9zX2Jhc2U6Om9wZW5tb2RlIG1vZGUsCisgICAgICAgICAgICAgICAgICAgICBjaGFyKiBjX21vZGUpIGNvbnN0Cit7CisgIGJvb2wgdGVzdGIgPSBtb2RlICYgc3RkOjppb3NfYmFzZTo6YmluYXJ5OworICBib29sIHRlc3RpID0gbW9kZSAmIHN0ZDo6aW9zX2Jhc2U6OmluOworICBib29sIHRlc3RvID0gbW9kZSAmIHN0ZDo6aW9zX2Jhc2U6Om91dDsKKyAgYm9vbCB0ZXN0dCA9IG1vZGUgJiBzdGQ6Omlvc19iYXNlOjp0cnVuYzsKKyAgYm9vbCB0ZXN0YSA9IG1vZGUgJiBzdGQ6Omlvc19iYXNlOjphcHA7CisKKyAgLy8gQ2hlY2sgZm9yIHZhbGlkIGZsYWcgY29tYmluYXRpb25zIC0gc2VlIFsyNy44LjEuMy4yXSAoVGFibGUgOTIpCisgIC8vIE9yaWdpbmFsIHpmc3RyZWFtIGhhcmRjb2RlZCB0aGUgY29tcHJlc3Npb24gbGV2ZWwgdG8gbWF4aW11bSBoZXJlLi4uCisgIC8vIERvdWJsZSB0aGUgdGltZSBmb3IgbGVzcyB0aGFuIDElIHNpemUgaW1wcm92ZW1lbnQgc2VlbXMKKyAgLy8gZXhjZXNzaXZlIHRob3VnaCAtIGtlZXBpbmcgaXQgYXQgdGhlIGRlZmF1bHQgbGV2ZWwKKyAgLy8gVG8gY2hhbmdlIGJhY2ssIGp1c3QgYXBwZW5kICI5IiB0byB0aGUgbmV4dCB0aHJlZSBtb2RlIHN0cmluZ3MKKyAgaWYgKCF0ZXN0aSAmJiB0ZXN0byAmJiAhdGVzdHQgJiYgIXRlc3RhKQorICAgIHN0cmNweShjX21vZGUsICJ3Iik7CisgIGlmICghdGVzdGkgJiYgdGVzdG8gJiYgIXRlc3R0ICYmIHRlc3RhKQorICAgIHN0cmNweShjX21vZGUsICJhIik7CisgIGlmICghdGVzdGkgJiYgdGVzdG8gJiYgdGVzdHQgJiYgIXRlc3RhKQorICAgIHN0cmNweShjX21vZGUsICJ3Iik7CisgIGlmICh0ZXN0aSAmJiAhdGVzdG8gJiYgIXRlc3R0ICYmICF0ZXN0YSkKKyAgICBzdHJjcHkoY19tb2RlLCAiciIpOworICAvLyBObyByZWFkL3dyaXRlIG1vZGUgeWV0CisvLyAgaWYgKHRlc3RpICYmIHRlc3RvICYmICF0ZXN0dCAmJiAhdGVzdGEpCisvLyAgICBzdHJjcHkoY19tb2RlLCAicisiKTsKKy8vICBpZiAodGVzdGkgJiYgdGVzdG8gJiYgdGVzdHQgJiYgIXRlc3RhKQorLy8gICAgc3RyY3B5KGNfbW9kZSwgIncrIik7CisKKyAgLy8gTW9kZSBzdHJpbmcgc2hvdWxkIGJlIGVtcHR5IGZvciBpbnZhbGlkIGNvbWJpbmF0aW9uIG9mIGZsYWdzCisgIGlmIChzdHJsZW4oY19tb2RlKSA9PSAwKQorICAgIHJldHVybiBmYWxzZTsKKyAgaWYgKHRlc3RiKQorICAgIHN0cmNhdChjX21vZGUsICJiIik7CisgIHJldHVybiB0cnVlOworfQorCisvLyBEZXRlcm1pbmUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gaW50ZXJuYWwgZ2V0IGJ1ZmZlcgorc3RkOjpzdHJlYW1zaXplCitnemZpbGVidWY6OnNob3dtYW55YygpCit7CisgIC8vIENhbGxzIHRvIHVuZGVyZmxvdyB3aWxsIGZhaWwgaWYgZmlsZSBub3Qgb3BlbmVkIGZvciByZWFkaW5nCisgIGlmICghdGhpcy0+aXNfb3BlbigpIHx8ICEoaW9fbW9kZSAmIHN0ZDo6aW9zX2Jhc2U6OmluKSkKKyAgICByZXR1cm4gLTE7CisgIC8vIE1ha2Ugc3VyZSBnZXQgYXJlYSBpcyBpbiB1c2UKKyAgaWYgKHRoaXMtPmdwdHIoKSAmJiAodGhpcy0+Z3B0cigpIDwgdGhpcy0+ZWdwdHIoKSkpCisgICAgcmV0dXJuIHN0ZDo6c3RyZWFtc2l6ZSh0aGlzLT5lZ3B0cigpIC0gdGhpcy0+Z3B0cigpKTsKKyAgZWxzZQorICAgIHJldHVybiAwOworfQorCisvLyBGaWxsIGdldCBhcmVhIGZyb20gZ3ppcHBlZCBmaWxlCitnemZpbGVidWY6OmludF90eXBlCitnemZpbGVidWY6OnVuZGVyZmxvdygpCit7CisgIC8vIElmIHNvbWV0aGluZyBpcyBsZWZ0IGluIHRoZSBnZXQgYXJlYSBieSBjaGFuY2UsIHJldHVybiBpdAorICAvLyAodGhpcyBzaG91bGRuJ3Qgbm9ybWFsbHkgaGFwcGVuLCBhcyB1bmRlcmZsb3cgaXMgb25seSBzdXBwb3NlZAorICAvLyB0byBiZSBjYWxsZWQgd2hlbiBncHRyID49IGVncHRyLCBidXQgaXQgc2VydmVzIGFzIGVycm9yIGNoZWNrKQorICBpZiAodGhpcy0+Z3B0cigpICYmICh0aGlzLT5ncHRyKCkgPCB0aGlzLT5lZ3B0cigpKSkKKyAgICByZXR1cm4gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCoodGhpcy0+Z3B0cigpKSk7CisKKyAgLy8gSWYgdGhlIGZpbGUgaGFzbid0IGJlZW4gb3BlbmVkIGZvciByZWFkaW5nLCBwcm9kdWNlIGVycm9yCisgIGlmICghdGhpcy0+aXNfb3BlbigpIHx8ICEoaW9fbW9kZSAmIHN0ZDo6aW9zX2Jhc2U6OmluKSkKKyAgICByZXR1cm4gdHJhaXRzX3R5cGU6OmVvZigpOworCisgIC8vIEF0dGVtcHQgdG8gZmlsbCBpbnRlcm5hbCBidWZmZXIgZnJvbSBnemlwcGVkIGZpbGUKKyAgLy8gKGJ1ZmZlciBtdXN0IGJlIGd1YXJhbnRlZWQgdG8gZXhpc3QuLi4pCisgIGludCBieXRlc19yZWFkID0gZ3pyZWFkKGZpbGUsIGJ1ZmZlciwgYnVmZmVyX3NpemUpOworICAvLyBJbmRpY2F0ZXMgZXJyb3Igb3IgRU9GCisgIGlmIChieXRlc19yZWFkIDw9IDApCisgIHsKKyAgICAvLyBSZXNldCBnZXQgYXJlYQorICAgIHRoaXMtPnNldGcoYnVmZmVyLCBidWZmZXIsIGJ1ZmZlcik7CisgICAgcmV0dXJuIHRyYWl0c190eXBlOjplb2YoKTsKKyAgfQorICAvLyBNYWtlIGFsbCBieXRlcyByZWFkIGZyb20gZmlsZSBhdmFpbGFibGUgYXMgZ2V0IGFyZWEKKyAgdGhpcy0+c2V0ZyhidWZmZXIsIGJ1ZmZlciwgYnVmZmVyICsgYnl0ZXNfcmVhZCk7CisKKyAgLy8gUmV0dXJuIG5leHQgY2hhcmFjdGVyIGluIGdldCBhcmVhCisgIHJldHVybiB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoKih0aGlzLT5ncHRyKCkpKTsKK30KKworLy8gV3JpdGUgcHV0IGFyZWEgdG8gZ3ppcHBlZCBmaWxlCitnemZpbGVidWY6OmludF90eXBlCitnemZpbGVidWY6Om92ZXJmbG93KGludF90eXBlIGMpCit7CisgIC8vIERldGVybWluZSB3aGV0aGVyIHB1dCBhcmVhIGlzIGluIHVzZQorICBpZiAodGhpcy0+cGJhc2UoKSkKKyAgeworICAgIC8vIERvdWJsZS1jaGVjayBwb2ludGVyIHJhbmdlCisgICAgaWYgKHRoaXMtPnBwdHIoKSA+IHRoaXMtPmVwcHRyKCkgfHwgdGhpcy0+cHB0cigpIDwgdGhpcy0+cGJhc2UoKSkKKyAgICAgIHJldHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7CisgICAgLy8gQWRkIGV4dHJhIGNoYXJhY3RlciB0byBidWZmZXIgaWYgbm90IEVPRgorICAgIGlmICghdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKGMsIHRyYWl0c190eXBlOjplb2YoKSkpCisgICAgeworICAgICAgKih0aGlzLT5wcHRyKCkpID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShjKTsKKyAgICAgIHRoaXMtPnBidW1wKDEpOworICAgIH0KKyAgICAvLyBOdW1iZXIgb2YgY2hhcmFjdGVycyB0byB3cml0ZSB0byBmaWxlCisgICAgaW50IGJ5dGVzX3RvX3dyaXRlID0gdGhpcy0+cHB0cigpIC0gdGhpcy0+cGJhc2UoKTsKKyAgICAvLyBPdmVyZmxvdyBkb2Vzbid0IGZhaWwgaWYgbm90aGluZyBpcyB0byBiZSB3cml0dGVuCisgICAgaWYgKGJ5dGVzX3RvX3dyaXRlID4gMCkKKyAgICB7CisgICAgICAvLyBJZiB0aGUgZmlsZSBoYXNuJ3QgYmVlbiBvcGVuZWQgZm9yIHdyaXRpbmcsIHByb2R1Y2UgZXJyb3IKKyAgICAgIGlmICghdGhpcy0+aXNfb3BlbigpIHx8ICEoaW9fbW9kZSAmIHN0ZDo6aW9zX2Jhc2U6Om91dCkpCisgICAgICAgIHJldHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7CisgICAgICAvLyBJZiBnemlwcGVkIGZpbGUgd29uJ3QgYWNjZXB0IGFsbCBieXRlcyB3cml0dGVuIHRvIGl0LCBmYWlsCisgICAgICBpZiAoZ3p3cml0ZShmaWxlLCB0aGlzLT5wYmFzZSgpLCBieXRlc190b193cml0ZSkgIT0gYnl0ZXNfdG9fd3JpdGUpCisgICAgICAgIHJldHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7CisgICAgICAvLyBSZXNldCBuZXh0IHBvaW50ZXIgdG8gcG9pbnQgdG8gcGJhc2Ugb24gc3VjY2VzcworICAgICAgdGhpcy0+cGJ1bXAoLWJ5dGVzX3RvX3dyaXRlKTsKKyAgICB9CisgIH0KKyAgLy8gV3JpdGUgZXh0cmEgY2hhcmFjdGVyIHRvIGZpbGUgaWYgbm90IEVPRgorICBlbHNlIGlmICghdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKGMsIHRyYWl0c190eXBlOjplb2YoKSkpCisgIHsKKyAgICAvLyBJZiB0aGUgZmlsZSBoYXNuJ3QgYmVlbiBvcGVuZWQgZm9yIHdyaXRpbmcsIHByb2R1Y2UgZXJyb3IKKyAgICBpZiAoIXRoaXMtPmlzX29wZW4oKSB8fCAhKGlvX21vZGUgJiBzdGQ6Omlvc19iYXNlOjpvdXQpKQorICAgICAgcmV0dXJuIHRyYWl0c190eXBlOjplb2YoKTsKKyAgICAvLyBJbXByb21wdHUgY2hhciBidWZmZXIgKGFsbG93cyAidW5idWZmZXJlZCIgb3V0cHV0KQorICAgIGNoYXJfdHlwZSBsYXN0X2NoYXIgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKGMpOworICAgIC8vIElmIGd6aXBwZWQgZmlsZSB3b24ndCBhY2NlcHQgdGhpcyBjaGFyYWN0ZXIsIGZhaWwKKyAgICBpZiAoZ3p3cml0ZShmaWxlLCAmbGFzdF9jaGFyLCAxKSAhPSAxKQorICAgICAgcmV0dXJuIHRyYWl0c190eXBlOjplb2YoKTsKKyAgfQorCisgIC8vIElmIHlvdSBnb3QgaGVyZSwgeW91IGhhdmUgc3VjY2VlZGVkIChldmVuIGlmIGMgd2FzIEVPRikKKyAgLy8gVGhlIHJldHVybiB2YWx1ZSBzaG91bGQgdGhlcmVmb3JlIGJlIG5vbi1FT0YKKyAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShjLCB0cmFpdHNfdHlwZTo6ZW9mKCkpKQorICAgIHJldHVybiB0cmFpdHNfdHlwZTo6bm90X2VvZihjKTsKKyAgZWxzZQorICAgIHJldHVybiBjOworfQorCisvLyBBc3NpZ24gbmV3IGJ1ZmZlcgorc3RkOjpzdHJlYW1idWYqCitnemZpbGVidWY6OnNldGJ1ZihjaGFyX3R5cGUqIHAsCisgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmVhbXNpemUgbikKK3sKKyAgLy8gRmlyc3QgbWFrZSBzdXJlIHN0dWZmIGlzIHN5bmMnZWQsIGZvciBzYWZldHkKKyAgaWYgKHRoaXMtPnN5bmMoKSA9PSAtMSkKKyAgICByZXR1cm4gTlVMTDsKKyAgLy8gSWYgYnVmZmVyaW5nIGlzIHR1cm5lZCBvZmYgb24gcHVycG9zZSB2aWEgc2V0YnVmKDAsMCksIHN0aWxsIGFsbG9jYXRlIG9uZS4uLgorICAvLyAiVW5idWZmZXJlZCIgb25seSByZWFsbHkgcmVmZXJzIHRvIHB1dCBbMjcuOC4xLjQuMTBdLCB3aGlsZSBnZXQgbmVlZHMgYXQKKyAgLy8gbGVhc3QgYSBidWZmZXIgb2Ygc2l6ZSAxICh2ZXJ5IGluZWZmaWNpZW50IHRob3VnaCwgdGhlcmVmb3JlIG1ha2UgaXQgYmlnZ2VyPykKKyAgLy8gVGhpcyBmb2xsb3dzIGZyb20gWzI3LjUuMi40LjNdLzEyIChncHRyIG5lZWRzIHRvIHBvaW50IGF0IHNvbWV0aGluZywgaXQgc2VlbXMpCisgIGlmICghcCB8fCAhbikKKyAgeworICAgIC8vIFJlcGxhY2UgZXhpc3RpbmcgYnVmZmVyIChpZiBhbnkpIHdpdGggc21hbGwgaW50ZXJuYWwgYnVmZmVyCisgICAgdGhpcy0+ZGlzYWJsZV9idWZmZXIoKTsKKyAgICBidWZmZXIgPSBOVUxMOworICAgIGJ1ZmZlcl9zaXplID0gMDsKKyAgICBvd25fYnVmZmVyID0gdHJ1ZTsKKyAgICB0aGlzLT5lbmFibGVfYnVmZmVyKCk7CisgIH0KKyAgZWxzZQorICB7CisgICAgLy8gUmVwbGFjZSBleGlzdGluZyBidWZmZXIgKGlmIGFueSkgd2l0aCBleHRlcm5hbCBidWZmZXIKKyAgICB0aGlzLT5kaXNhYmxlX2J1ZmZlcigpOworICAgIGJ1ZmZlciA9IHA7CisgICAgYnVmZmVyX3NpemUgPSBuOworICAgIG93bl9idWZmZXIgPSBmYWxzZTsKKyAgICB0aGlzLT5lbmFibGVfYnVmZmVyKCk7CisgIH0KKyAgcmV0dXJuIHRoaXM7Cit9CisKKy8vIFdyaXRlIHB1dCBhcmVhIHRvIGd6aXBwZWQgZmlsZSAoaS5lLiBlbnN1cmVzIHRoYXQgcHV0IGFyZWEgaXMgZW1wdHkpCitpbnQKK2d6ZmlsZWJ1Zjo6c3luYygpCit7CisgIHJldHVybiB0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUodGhpcy0+b3ZlcmZsb3coKSwgdHJhaXRzX3R5cGU6OmVvZigpKSA/IC0xIDogMDsKK30KKworLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCisvLyBBbGxvY2F0ZSBpbnRlcm5hbCBidWZmZXIKK3ZvaWQKK2d6ZmlsZWJ1Zjo6ZW5hYmxlX2J1ZmZlcigpCit7CisgIC8vIElmIGludGVybmFsIGJ1ZmZlciByZXF1aXJlZCwgYWxsb2NhdGUgb25lCisgIGlmIChvd25fYnVmZmVyICYmICFidWZmZXIpCisgIHsKKyAgICAvLyBDaGVjayBmb3IgYnVmZmVyZWQgdnMuICJ1bmJ1ZmZlcmVkIgorICAgIGlmIChidWZmZXJfc2l6ZSA+IDApCisgICAgeworICAgICAgLy8gQWxsb2NhdGUgaW50ZXJuYWwgYnVmZmVyCisgICAgICBidWZmZXIgPSBuZXcgY2hhcl90eXBlW2J1ZmZlcl9zaXplXTsKKyAgICAgIC8vIEdldCBhcmVhIHN0YXJ0cyBlbXB0eSBhbmQgd2lsbCBiZSBleHBhbmRlZCBieSB1bmRlcmZsb3cgYXMgbmVlZCBhcmlzZXMKKyAgICAgIHRoaXMtPnNldGcoYnVmZmVyLCBidWZmZXIsIGJ1ZmZlcik7CisgICAgICAvLyBTZXR1cCBlbnRpcmUgaW50ZXJuYWwgYnVmZmVyIGFzIHB1dCBhcmVhLgorICAgICAgLy8gVGhlIG9uZS1wYXN0LWVuZCBwb2ludGVyIGFjdHVhbGx5IHBvaW50cyB0byB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBidWZmZXIsCisgICAgICAvLyBzbyB0aGF0IG92ZXJmbG93KGMpIGNhbiBzYWZlbHkgYWRkIHRoZSBleHRyYSBjaGFyYWN0ZXIgYyB0byB0aGUgc2VxdWVuY2UuCisgICAgICAvLyBUaGVzZSBwb2ludGVycyByZW1haW4gaW4gcGxhY2UgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYnVmZmVyCisgICAgICB0aGlzLT5zZXRwKGJ1ZmZlciwgYnVmZmVyICsgYnVmZmVyX3NpemUgLSAxKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIC8vIEV2ZW4gaW4gInVuYnVmZmVyZWQiIGNhc2UsIChzbWFsbD8pIGdldCBidWZmZXIgaXMgc3RpbGwgcmVxdWlyZWQKKyAgICAgIGJ1ZmZlcl9zaXplID0gU01BTExCVUZTSVpFOworICAgICAgYnVmZmVyID0gbmV3IGNoYXJfdHlwZVtidWZmZXJfc2l6ZV07CisgICAgICB0aGlzLT5zZXRnKGJ1ZmZlciwgYnVmZmVyLCBidWZmZXIpOworICAgICAgLy8gIlVuYnVmZmVyZWQiIG1lYW5zIG5vIHB1dCBidWZmZXIKKyAgICAgIHRoaXMtPnNldHAoMCwgMCk7CisgICAgfQorICB9CisgIGVsc2UKKyAgeworICAgIC8vIElmIGJ1ZmZlciBhbHJlYWR5IGFsbG9jYXRlZCwgcmVzZXQgYnVmZmVyIHBvaW50ZXJzIGp1c3QgdG8gbWFrZSBzdXJlIG5vCisgICAgLy8gc3RhbGUgY2hhcnMgYXJlIGx5aW5nIGFyb3VuZAorICAgIHRoaXMtPnNldGcoYnVmZmVyLCBidWZmZXIsIGJ1ZmZlcik7CisgICAgdGhpcy0+c2V0cChidWZmZXIsIGJ1ZmZlciArIGJ1ZmZlcl9zaXplIC0gMSk7CisgIH0KK30KKworLy8gRGVzdHJveSBpbnRlcm5hbCBidWZmZXIKK3ZvaWQKK2d6ZmlsZWJ1Zjo6ZGlzYWJsZV9idWZmZXIoKQoreworICAvLyBJZiBpbnRlcm5hbCBidWZmZXIgZXhpc3RzLCBkZWFsbG9jYXRlIGl0CisgIGlmIChvd25fYnVmZmVyICYmIGJ1ZmZlcikKKyAgeworICAgIC8vIFByZXNlcnZlIHVuYnVmZmVyZWQgc3RhdHVzIGJ5IHplcm9pbmcgc2l6ZQorICAgIGlmICghdGhpcy0+cGJhc2UoKSkKKyAgICAgIGJ1ZmZlcl9zaXplID0gMDsKKyAgICBkZWxldGVbXSBidWZmZXI7CisgICAgYnVmZmVyID0gTlVMTDsKKyAgICB0aGlzLT5zZXRnKDAsIDAsIDApOworICAgIHRoaXMtPnNldHAoMCwgMCk7CisgIH0KKyAgZWxzZQorICB7CisgICAgLy8gUmVzZXQgYnVmZmVyIHBvaW50ZXJzIHRvIGluaXRpYWwgc3RhdGUgaWYgZXh0ZXJuYWwgYnVmZmVyIGV4aXN0cworICAgIHRoaXMtPnNldGcoYnVmZmVyLCBidWZmZXIsIGJ1ZmZlcik7CisgICAgaWYgKGJ1ZmZlcikKKyAgICAgIHRoaXMtPnNldHAoYnVmZmVyLCBidWZmZXIgKyBidWZmZXJfc2l6ZSAtIDEpOworICAgIGVsc2UKKyAgICAgIHRoaXMtPnNldHAoMCwgMCk7CisgIH0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyBEZWZhdWx0IGNvbnN0cnVjdG9yIGluaXRpYWxpemVzIHN0cmVhbSBidWZmZXIKK2d6aWZzdHJlYW06Omd6aWZzdHJlYW0oKQorOiBzdGQ6OmlzdHJlYW0oTlVMTCksIHNiKCkKK3sgdGhpcy0+aW5pdCgmc2IpOyB9CisKKy8vIEluaXRpYWxpemUgc3RyZWFtIGJ1ZmZlciBhbmQgb3BlbiBmaWxlCitnemlmc3RyZWFtOjpnemlmc3RyZWFtKGNvbnN0IGNoYXIqIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6aW9zX2Jhc2U6Om9wZW5tb2RlIG1vZGUpCis6IHN0ZDo6aXN0cmVhbShOVUxMKSwgc2IoKQoreworICB0aGlzLT5pbml0KCZzYik7CisgIHRoaXMtPm9wZW4obmFtZSwgbW9kZSk7Cit9CisKKy8vIEluaXRpYWxpemUgc3RyZWFtIGJ1ZmZlciBhbmQgYXR0YWNoIHRvIGZpbGUKK2d6aWZzdHJlYW06Omd6aWZzdHJlYW0oaW50IGZkLAorICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Omlvc19iYXNlOjpvcGVubW9kZSBtb2RlKQorOiBzdGQ6OmlzdHJlYW0oTlVMTCksIHNiKCkKK3sKKyAgdGhpcy0+aW5pdCgmc2IpOworICB0aGlzLT5hdHRhY2goZmQsIG1vZGUpOworfQorCisvLyBPcGVuIGZpbGUgYW5kIGdvIGludG8gZmFpbCgpIHN0YXRlIGlmIHVuc3VjY2Vzc2Z1bAordm9pZAorZ3ppZnN0cmVhbTo6b3Blbihjb25zdCBjaGFyKiBuYW1lLAorICAgICAgICAgICAgICAgICBzdGQ6Omlvc19iYXNlOjpvcGVubW9kZSBtb2RlKQoreworICBpZiAoIXNiLm9wZW4obmFtZSwgbW9kZSB8IHN0ZDo6aW9zX2Jhc2U6OmluKSkKKyAgICB0aGlzLT5zZXRzdGF0ZShzdGQ6Omlvc19iYXNlOjpmYWlsYml0KTsKKyAgZWxzZQorICAgIHRoaXMtPmNsZWFyKCk7Cit9CisKKy8vIEF0dGFjaCB0byBmaWxlIGFuZCBnbyBpbnRvIGZhaWwoKSBzdGF0ZSBpZiB1bnN1Y2Nlc3NmdWwKK3ZvaWQKK2d6aWZzdHJlYW06OmF0dGFjaChpbnQgZmQsCisgICAgICAgICAgICAgICAgICAgc3RkOjppb3NfYmFzZTo6b3Blbm1vZGUgbW9kZSkKK3sKKyAgaWYgKCFzYi5hdHRhY2goZmQsIG1vZGUgfCBzdGQ6Omlvc19iYXNlOjppbikpCisgICAgdGhpcy0+c2V0c3RhdGUoc3RkOjppb3NfYmFzZTo6ZmFpbGJpdCk7CisgIGVsc2UKKyAgICB0aGlzLT5jbGVhcigpOworfQorCisvLyBDbG9zZSBmaWxlCit2b2lkCitnemlmc3RyZWFtOjpjbG9zZSgpCit7CisgIGlmICghc2IuY2xvc2UoKSkKKyAgICB0aGlzLT5zZXRzdGF0ZShzdGQ6Omlvc19iYXNlOjpmYWlsYml0KTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyBEZWZhdWx0IGNvbnN0cnVjdG9yIGluaXRpYWxpemVzIHN0cmVhbSBidWZmZXIKK2d6b2ZzdHJlYW06Omd6b2ZzdHJlYW0oKQorOiBzdGQ6Om9zdHJlYW0oTlVMTCksIHNiKCkKK3sgdGhpcy0+aW5pdCgmc2IpOyB9CisKKy8vIEluaXRpYWxpemUgc3RyZWFtIGJ1ZmZlciBhbmQgb3BlbiBmaWxlCitnem9mc3RyZWFtOjpnem9mc3RyZWFtKGNvbnN0IGNoYXIqIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6aW9zX2Jhc2U6Om9wZW5tb2RlIG1vZGUpCis6IHN0ZDo6b3N0cmVhbShOVUxMKSwgc2IoKQoreworICB0aGlzLT5pbml0KCZzYik7CisgIHRoaXMtPm9wZW4obmFtZSwgbW9kZSk7Cit9CisKKy8vIEluaXRpYWxpemUgc3RyZWFtIGJ1ZmZlciBhbmQgYXR0YWNoIHRvIGZpbGUKK2d6b2ZzdHJlYW06Omd6b2ZzdHJlYW0oaW50IGZkLAorICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Omlvc19iYXNlOjpvcGVubW9kZSBtb2RlKQorOiBzdGQ6Om9zdHJlYW0oTlVMTCksIHNiKCkKK3sKKyAgdGhpcy0+aW5pdCgmc2IpOworICB0aGlzLT5hdHRhY2goZmQsIG1vZGUpOworfQorCisvLyBPcGVuIGZpbGUgYW5kIGdvIGludG8gZmFpbCgpIHN0YXRlIGlmIHVuc3VjY2Vzc2Z1bAordm9pZAorZ3pvZnN0cmVhbTo6b3Blbihjb25zdCBjaGFyKiBuYW1lLAorICAgICAgICAgICAgICAgICBzdGQ6Omlvc19iYXNlOjpvcGVubW9kZSBtb2RlKQoreworICBpZiAoIXNiLm9wZW4obmFtZSwgbW9kZSB8IHN0ZDo6aW9zX2Jhc2U6Om91dCkpCisgICAgdGhpcy0+c2V0c3RhdGUoc3RkOjppb3NfYmFzZTo6ZmFpbGJpdCk7CisgIGVsc2UKKyAgICB0aGlzLT5jbGVhcigpOworfQorCisvLyBBdHRhY2ggdG8gZmlsZSBhbmQgZ28gaW50byBmYWlsKCkgc3RhdGUgaWYgdW5zdWNjZXNzZnVsCit2b2lkCitnem9mc3RyZWFtOjphdHRhY2goaW50IGZkLAorICAgICAgICAgICAgICAgICAgIHN0ZDo6aW9zX2Jhc2U6Om9wZW5tb2RlIG1vZGUpCit7CisgIGlmICghc2IuYXR0YWNoKGZkLCBtb2RlIHwgc3RkOjppb3NfYmFzZTo6b3V0KSkKKyAgICB0aGlzLT5zZXRzdGF0ZShzdGQ6Omlvc19iYXNlOjpmYWlsYml0KTsKKyAgZWxzZQorICAgIHRoaXMtPmNsZWFyKCk7Cit9CisKKy8vIENsb3NlIGZpbGUKK3ZvaWQKK2d6b2ZzdHJlYW06OmNsb3NlKCkKK3sKKyAgaWYgKCFzYi5jbG9zZSgpKQorICAgIHRoaXMtPnNldHN0YXRlKHN0ZDo6aW9zX2Jhc2U6OmZhaWxiaXQpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvaW9zdHJlYW0zL3pmc3RyZWFtLmggYi9zcmMvY29udHJpYi9pb3N0cmVhbTMvemZzdHJlYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTc0NDc5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbnRyaWIvaW9zdHJlYW0zL3pmc3RyZWFtLmgKQEAgLTAsMCArMSw0NjYgQEAKKy8qCisgKiBBIEMrKyBJL08gc3RyZWFtcyBpbnRlcmZhY2UgdG8gdGhlIHpsaWIgZ3oqIGZ1bmN0aW9ucworICoKKyAqIGJ5IEx1ZHdpZyBTY2h3YXJkdCA8c2Nod2FyZHRAc3VuLmFjLnphPgorICogb3JpZ2luYWwgdmVyc2lvbiBieSBLZXZpbiBSdWxhbmQgPGtldmluQHJvZGluLnd1c3RsLmVkdT4KKyAqCisgKiBUaGlzIHZlcnNpb24gaXMgc3RhbmRhcmQtY29tcGxpYW50IGFuZCBjb21wYXRpYmxlIHdpdGggZ2NjIDMueC4KKyAqLworCisjaWZuZGVmIFpGU1RSRUFNX0gKKyNkZWZpbmUgWkZTVFJFQU1fSAorCisjaW5jbHVkZSA8aXN0cmVhbT4gIC8vIG5vdCBpb3N0cmVhbSwgc2luY2Ugd2UgZG9uJ3QgbmVlZCBjaW4vY291dAorI2luY2x1ZGUgPG9zdHJlYW0+CisjaW5jbHVkZSAiemxpYi5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogIEBicmllZiAgR3ppcHBlZCBmaWxlIHN0cmVhbSBidWZmZXIgY2xhc3MuCisgKgorICogIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBiYXNpY19maWxlYnVmIGZvciBnemlwcGVkIGZpbGVzLiBJdCBkb2Vzbid0IHlldCBzdXBwb3J0CisgKiAgc2Vla2luZyAoYWxsb3dlZCBieSB6bGliIGJ1dCBzbG93L2xpbWl0ZWQpLCBwdXRiYWNrIGFuZCByZWFkL3dyaXRlIGFjY2VzcworICogICh0cmlja3kpLiBPdGhlcndpc2UsIGl0IGF0dGVtcHRzIHRvIGJlIGEgZHJvcC1pbiByZXBsYWNlbWVudCBmb3IgdGhlIHN0YW5kYXJkCisgKiAgZmlsZSBzdHJlYW1idWYuCisqLworY2xhc3MgZ3pmaWxlYnVmIDogcHVibGljIHN0ZDo6c3RyZWFtYnVmCit7CitwdWJsaWM6CisgIC8vICBEZWZhdWx0IGNvbnN0cnVjdG9yLgorICBnemZpbGVidWYoKTsKKworICAvLyAgRGVzdHJ1Y3Rvci4KKyAgdmlydHVhbAorICB+Z3pmaWxlYnVmKCk7CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFNldCBjb21wcmVzc2lvbiBsZXZlbCBhbmQgc3RyYXRlZ3kgb24gdGhlIGZseS4KKyAgICogIEBwYXJhbSAgY29tcF9sZXZlbCAgQ29tcHJlc3Npb24gbGV2ZWwgKHNlZSB6bGliLmggZm9yIGFsbG93ZWQgdmFsdWVzKQorICAgKiAgQHBhcmFtICBjb21wX3N0cmF0ZWd5ICBDb21wcmVzc2lvbiBzdHJhdGVneSAoc2VlIHpsaWIuaCBmb3IgYWxsb3dlZCB2YWx1ZXMpCisgICAqICBAcmV0dXJuICBaX09LIG9uIHN1Y2Nlc3MsIFpfU1RSRUFNX0VSUk9SIG90aGVyd2lzZS4KKyAgICoKKyAgICogIFVuZm9ydHVuYXRlbHksIHRoZXNlIHBhcmFtZXRlcnMgY2Fubm90IGJlIG1vZGlmaWVkIHNlcGFyYXRlbHksIGFzIHRoZQorICAgKiAgcHJldmlvdXMgemZzdHJlYW0gdmVyc2lvbiBhc3N1bWVkLiBTaW5jZSB0aGUgc3RyYXRlZ3kgaXMgc2VsZG9tIGNoYW5nZWQsCisgICAqICBpdCBjYW4gZGVmYXVsdCBhbmQgc2V0Y29tcHJlc3Npb24obGV2ZWwpIHRoZW4gYmVjb21lcyBsaWtlIHRoZSBvbGQKKyAgICogIHNldGNvbXByZXNzaW9ubGV2ZWwobGV2ZWwpLgorICAqLworICBpbnQKKyAgc2V0Y29tcHJlc3Npb24oaW50IGNvbXBfbGV2ZWwsCisgICAgICAgICAgICAgICAgIGludCBjb21wX3N0cmF0ZWd5ID0gWl9ERUZBVUxUX1NUUkFURUdZKTsKKworICAvKioKKyAgICogIEBicmllZiAgQ2hlY2sgaWYgZmlsZSBpcyBvcGVuLgorICAgKiAgQHJldHVybiAgVHJ1ZSBpZiBmaWxlIGlzIG9wZW4uCisgICovCisgIGJvb2wKKyAgaXNfb3BlbigpIGNvbnN0IHsgcmV0dXJuIChmaWxlICE9IE5VTEwpOyB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIE9wZW4gZ3ppcHBlZCBmaWxlLgorICAgKiAgQHBhcmFtICBuYW1lICBGaWxlIG5hbWUuCisgICAqICBAcGFyYW0gIG1vZGUgIE9wZW4gbW9kZSBmbGFncy4KKyAgICogIEByZXR1cm4gIEBjIHRoaXMgb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlLgorICAqLworICBnemZpbGVidWYqCisgIG9wZW4oY29uc3QgY2hhciogbmFtZSwKKyAgICAgICBzdGQ6Omlvc19iYXNlOjpvcGVubW9kZSBtb2RlKTsKKworICAvKioKKyAgICogIEBicmllZiAgQXR0YWNoIHRvIGFscmVhZHkgb3BlbiBnemlwcGVkIGZpbGUuCisgICAqICBAcGFyYW0gIGZkICBGaWxlIGRlc2NyaXB0b3IuCisgICAqICBAcGFyYW0gIG1vZGUgIE9wZW4gbW9kZSBmbGFncy4KKyAgICogIEByZXR1cm4gIEBjIHRoaXMgb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlLgorICAqLworICBnemZpbGVidWYqCisgIGF0dGFjaChpbnQgZmQsCisgICAgICAgICBzdGQ6Omlvc19iYXNlOjpvcGVubW9kZSBtb2RlKTsKKworICAvKioKKyAgICogIEBicmllZiAgQ2xvc2UgZ3ppcHBlZCBmaWxlLgorICAgKiAgQHJldHVybiAgQGMgdGhpcyBvbiBzdWNjZXNzLCBOVUxMIG9uIGZhaWx1cmUuCisgICovCisgIGd6ZmlsZWJ1ZioKKyAgY2xvc2UoKTsKKworcHJvdGVjdGVkOgorICAvKioKKyAgICogIEBicmllZiAgQ29udmVydCBpb3Mgb3BlbiBtb2RlIGludCB0byBtb2RlIHN0cmluZyB1c2VkIGJ5IHpsaWIuCisgICAqICBAcmV0dXJuICBUcnVlIGlmIHZhbGlkIG1vZGUgZmxhZyBjb21iaW5hdGlvbi4KKyAgKi8KKyAgYm9vbAorICBvcGVuX21vZGUoc3RkOjppb3NfYmFzZTo6b3Blbm1vZGUgbW9kZSwKKyAgICAgICAgICAgIGNoYXIqIGNfbW9kZSkgY29uc3Q7CisKKyAgLyoqCisgICAqICBAYnJpZWYgIE51bWJlciBvZiBjaGFyYWN0ZXJzIGF2YWlsYWJsZSBpbiBzdHJlYW0gYnVmZmVyLgorICAgKiAgQHJldHVybiAgTnVtYmVyIG9mIGNoYXJhY3RlcnMuCisgICAqCisgICAqICBUaGlzIGluZGljYXRlcyBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiBnZXQgYXJlYSBvZiBzdHJlYW0gYnVmZmVyLgorICAgKiAgVGhlc2UgY2hhcmFjdGVycyBjYW4gYmUgcmVhZCB3aXRob3V0IGFjY2Vzc2luZyB0aGUgZ3ppcHBlZCBmaWxlLgorICAqLworICB2aXJ0dWFsIHN0ZDo6c3RyZWFtc2l6ZQorICBzaG93bWFueWMoKTsKKworICAvKioKKyAgICogIEBicmllZiAgRmlsbCBnZXQgYXJlYSBmcm9tIGd6aXBwZWQgZmlsZS4KKyAgICogIEByZXR1cm4gIEZpcnN0IGNoYXJhY3RlciBpbiBnZXQgYXJlYSBvbiBzdWNjZXNzLCBFT0Ygb24gZXJyb3IuCisgICAqCisgICAqICBUaGlzIGFjdHVhbGx5IHJlYWRzIGNoYXJhY3RlcnMgZnJvbSBnemlwcGVkIGZpbGUgdG8gc3RyZWFtCisgICAqICBidWZmZXIuIEFsd2F5cyBidWZmZXJlZC4KKyAgKi8KKyAgdmlydHVhbCBpbnRfdHlwZQorICB1bmRlcmZsb3coKTsKKworICAvKioKKyAgICogIEBicmllZiAgV3JpdGUgcHV0IGFyZWEgdG8gZ3ppcHBlZCBmaWxlLgorICAgKiAgQHBhcmFtICBjICBFeHRyYSBjaGFyYWN0ZXIgdG8gYWRkIHRvIGJ1ZmZlciBjb250ZW50cy4KKyAgICogIEByZXR1cm4gIE5vbi1FT0Ygb24gc3VjY2VzcywgRU9GIG9uIGVycm9yLgorICAgKgorICAgKiAgVGhpcyBhY3R1YWxseSB3cml0ZXMgY2hhcmFjdGVycyBpbiBzdHJlYW0gYnVmZmVyIHRvCisgICAqICBnemlwcGVkIGZpbGUuIFdpdGggdW5idWZmZXJlZCBvdXRwdXQgdGhpcyBpcyBkb25lIG9uZQorICAgKiAgY2hhcmFjdGVyIGF0IGEgdGltZS4KKyAgKi8KKyAgdmlydHVhbCBpbnRfdHlwZQorICBvdmVyZmxvdyhpbnRfdHlwZSBjID0gdHJhaXRzX3R5cGU6OmVvZigpKTsKKworICAvKioKKyAgICogIEBicmllZiAgSW5zdGFsbHMgZXh0ZXJuYWwgc3RyZWFtIGJ1ZmZlci4KKyAgICogIEBwYXJhbSAgcCAgUG9pbnRlciB0byBjaGFyIGJ1ZmZlci4KKyAgICogIEBwYXJhbSAgbiAgU2l6ZSBvZiBleHRlcm5hbCBidWZmZXIuCisgICAqICBAcmV0dXJuICBAYyB0aGlzIG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZS4KKyAgICoKKyAgICogIENhbGwgc2V0YnVmKDAsMCkgdG8gZW5hYmxlIHVuYnVmZmVyZWQgb3V0cHV0LgorICAqLworICB2aXJ0dWFsIHN0ZDo6c3RyZWFtYnVmKgorICBzZXRidWYoY2hhcl90eXBlKiBwLAorICAgICAgICAgc3RkOjpzdHJlYW1zaXplIG4pOworCisgIC8qKgorICAgKiAgQGJyaWVmICBGbHVzaCBzdHJlYW0gYnVmZmVyIHRvIGZpbGUuCisgICAqICBAcmV0dXJuICAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yLgorICAgKgorICAgKiAgVGhpcyBjYWxscyB1bmRlcmZsb3coRU9GKSB0byBkbyB0aGUgam9iLgorICAqLworICB2aXJ0dWFsIGludAorICBzeW5jKCk7CisKKy8vCisvLyBTb21lIGZ1dHVyZSBlbmhhbmNlbWVudHMKKy8vCisvLyAgdmlydHVhbCBpbnRfdHlwZSB1ZmxvdygpOworLy8gIHZpcnR1YWwgaW50X3R5cGUgcGJhY2tmYWlsKGludF90eXBlIGMgPSB0cmFpdHNfdHlwZTo6ZW9mKCkpOworLy8gIHZpcnR1YWwgcG9zX3R5cGUKKy8vICBzZWVrb2ZmKG9mZl90eXBlIG9mZiwKKy8vICAgICAgICAgIHN0ZDo6aW9zX2Jhc2U6OnNlZWtkaXIgd2F5LAorLy8gICAgICAgICAgc3RkOjppb3NfYmFzZTo6b3Blbm1vZGUgbW9kZSA9IHN0ZDo6aW9zX2Jhc2U6OmlufHN0ZDo6aW9zX2Jhc2U6Om91dCk7CisvLyAgdmlydHVhbCBwb3NfdHlwZQorLy8gIHNlZWtwb3MocG9zX3R5cGUgc3AsCisvLyAgICAgICAgICBzdGQ6Omlvc19iYXNlOjpvcGVubW9kZSBtb2RlID0gc3RkOjppb3NfYmFzZTo6aW58c3RkOjppb3NfYmFzZTo6b3V0KTsKKworcHJpdmF0ZToKKyAgLyoqCisgICAqICBAYnJpZWYgIEFsbG9jYXRlIGludGVybmFsIGJ1ZmZlci4KKyAgICoKKyAgICogIFRoaXMgZnVuY3Rpb24gaXMgc2FmZSB0byBjYWxsIG11bHRpcGxlIHRpbWVzLiBJdCB3aWxsIGVuc3VyZQorICAgKiAgdGhhdCBhIHByb3BlciBpbnRlcm5hbCBidWZmZXIgZXhpc3RzIGlmIGl0IGlzIHJlcXVpcmVkLiBJZiB0aGUKKyAgICogIGJ1ZmZlciBhbHJlYWR5IGV4aXN0cyBvciBpcyBleHRlcm5hbCwgdGhlIGJ1ZmZlciBwb2ludGVycyB3aWxsIGJlCisgICAqICByZXNldCB0byB0aGVpciBvcmlnaW5hbCBzdGF0ZS4KKyAgKi8KKyAgdm9pZAorICBlbmFibGVfYnVmZmVyKCk7CisKKyAgLyoqCisgICAqICBAYnJpZWYgIERlc3Ryb3kgaW50ZXJuYWwgYnVmZmVyLgorICAgKgorICAgKiAgVGhpcyBmdW5jdGlvbiBpcyBzYWZlIHRvIGNhbGwgbXVsdGlwbGUgdGltZXMuIEl0IHdpbGwgZW5zdXJlCisgICAqICB0aGF0IHRoZSBpbnRlcm5hbCBidWZmZXIgaXMgZGVhbGxvY2F0ZWQgaWYgaXQgZXhpc3RzLiBJbiBhbnkKKyAgICogIGNhc2UsIGl0IHdpbGwgYWxzbyByZXNldCB0aGUgYnVmZmVyIHBvaW50ZXJzLgorICAqLworICB2b2lkCisgIGRpc2FibGVfYnVmZmVyKCk7CisKKyAgLyoqCisgICAqICBVbmRlcmx5aW5nIGZpbGUgcG9pbnRlci4KKyAgKi8KKyAgZ3pGaWxlIGZpbGU7CisKKyAgLyoqCisgICAqICBNb2RlIGluIHdoaWNoIGZpbGUgd2FzIG9wZW5lZC4KKyAgKi8KKyAgc3RkOjppb3NfYmFzZTo6b3Blbm1vZGUgaW9fbW9kZTsKKworICAvKioKKyAgICogIEBicmllZiAgVHJ1ZSBpZiB0aGlzIG9iamVjdCBvd25zIGZpbGUgZGVzY3JpcHRvci4KKyAgICoKKyAgICogIFRoaXMgbWFrZXMgdGhlIGNsYXNzIHJlc3BvbnNpYmxlIGZvciBjbG9zaW5nIHRoZSBmaWxlCisgICAqICB1cG9uIGRlc3RydWN0aW9uLgorICAqLworICBib29sIG93bl9mZDsKKworICAvKioKKyAgICogIEBicmllZiAgU3RyZWFtIGJ1ZmZlci4KKyAgICoKKyAgICogIEZvciBzaW1wbGljaXR5IHRoaXMgcmVtYWlucyBhbGxvY2F0ZWQgb24gdGhlIGZyZWUgc3RvcmUgZm9yIHRoZQorICAgKiAgZW50aXJlIGxpZmUgc3BhbiBvZiB0aGUgZ3pmaWxlYnVmIG9iamVjdCwgdW5sZXNzIHJlcGxhY2VkIGJ5IHNldGJ1Zi4KKyAgKi8KKyAgY2hhcl90eXBlKiBidWZmZXI7CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFN0cmVhbSBidWZmZXIgc2l6ZS4KKyAgICoKKyAgICogIERlZmF1bHRzIHRvIHN5c3RlbSBkZWZhdWx0IGJ1ZmZlciBzaXplICh0eXBpY2FsbHkgODE5MiBieXRlcykuCisgICAqICBNb2RpZmllZCBieSBzZXRidWYuCisgICovCisgIHN0ZDo6c3RyZWFtc2l6ZSBidWZmZXJfc2l6ZTsKKworICAvKioKKyAgICogIEBicmllZiAgVHJ1ZSBpZiB0aGlzIG9iamVjdCBvd25zIHN0cmVhbSBidWZmZXIuCisgICAqCisgICAqICBUaGlzIG1ha2VzIHRoZSBjbGFzcyByZXNwb25zaWJsZSBmb3IgZGVsZXRpbmcgdGhlIGJ1ZmZlcgorICAgKiAgdXBvbiBkZXN0cnVjdGlvbi4KKyAgKi8KKyAgYm9vbCBvd25fYnVmZmVyOworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqICBAYnJpZWYgIEd6aXBwZWQgZmlsZSBpbnB1dCBzdHJlYW0gY2xhc3MuCisgKgorICogIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBpZnN0cmVhbSBmb3IgZ3ppcHBlZCBmaWxlcy4gU2Vla2luZyBhbmQgcHV0YmFjaworICogIGlzIG5vdCBzdXBwb3J0ZWQgeWV0LgorKi8KK2NsYXNzIGd6aWZzdHJlYW0gOiBwdWJsaWMgc3RkOjppc3RyZWFtCit7CitwdWJsaWM6CisgIC8vICBEZWZhdWx0IGNvbnN0cnVjdG9yCisgIGd6aWZzdHJlYW0oKTsKKworICAvKioKKyAgICogIEBicmllZiAgQ29uc3RydWN0IHN0cmVhbSBvbiBnemlwcGVkIGZpbGUgdG8gYmUgb3BlbmVkLgorICAgKiAgQHBhcmFtICBuYW1lICBGaWxlIG5hbWUuCisgICAqICBAcGFyYW0gIG1vZGUgIE9wZW4gbW9kZSBmbGFncyAoZm9yY2VkIHRvIGNvbnRhaW4gaW9zOjppbikuCisgICovCisgIGV4cGxpY2l0CisgIGd6aWZzdHJlYW0oY29uc3QgY2hhciogbmFtZSwKKyAgICAgICAgICAgICBzdGQ6Omlvc19iYXNlOjpvcGVubW9kZSBtb2RlID0gc3RkOjppb3NfYmFzZTo6aW4pOworCisgIC8qKgorICAgKiAgQGJyaWVmICBDb25zdHJ1Y3Qgc3RyZWFtIG9uIGFscmVhZHkgb3BlbiBnemlwcGVkIGZpbGUuCisgICAqICBAcGFyYW0gIGZkICAgIEZpbGUgZGVzY3JpcHRvci4KKyAgICogIEBwYXJhbSAgbW9kZSAgT3BlbiBtb2RlIGZsYWdzIChmb3JjZWQgdG8gY29udGFpbiBpb3M6OmluKS4KKyAgKi8KKyAgZXhwbGljaXQKKyAgZ3ppZnN0cmVhbShpbnQgZmQsCisgICAgICAgICAgICAgc3RkOjppb3NfYmFzZTo6b3Blbm1vZGUgbW9kZSA9IHN0ZDo6aW9zX2Jhc2U6OmluKTsKKworICAvKioKKyAgICogIE9idGFpbiB1bmRlcmx5aW5nIHN0cmVhbSBidWZmZXIuCisgICovCisgIGd6ZmlsZWJ1ZioKKyAgcmRidWYoKSBjb25zdAorICB7IHJldHVybiBjb25zdF9jYXN0PGd6ZmlsZWJ1Zio+KCZzYik7IH0KKworICAvKioKKyAgICogIEBicmllZiAgQ2hlY2sgaWYgZmlsZSBpcyBvcGVuLgorICAgKiAgQHJldHVybiAgVHJ1ZSBpZiBmaWxlIGlzIG9wZW4uCisgICovCisgIGJvb2wKKyAgaXNfb3BlbigpIHsgcmV0dXJuIHNiLmlzX29wZW4oKTsgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBPcGVuIGd6aXBwZWQgZmlsZS4KKyAgICogIEBwYXJhbSAgbmFtZSAgRmlsZSBuYW1lLgorICAgKiAgQHBhcmFtICBtb2RlICBPcGVuIG1vZGUgZmxhZ3MgKGZvcmNlZCB0byBjb250YWluIGlvczo6aW4pLgorICAgKgorICAgKiAgU3RyZWFtIHdpbGwgYmUgaW4gc3RhdGUgZ29vZCgpIGlmIGZpbGUgb3BlbnMgc3VjY2Vzc2Z1bGx5OworICAgKiAgb3RoZXJ3aXNlIGluIHN0YXRlIGZhaWwoKS4gVGhpcyBkaWZmZXJzIGZyb20gdGhlIGJlaGF2aW9yIG9mCisgICAqICBpZnN0cmVhbSwgd2hpY2ggbmV2ZXIgc2V0cyB0aGUgc3RhdGUgdG8gZ29vZCgpIGFuZCB0aGVyZWZvcmUKKyAgICogIHdvbid0IGFsbG93IHlvdSB0byByZXVzZSB0aGUgc3RyZWFtIGZvciBhIHNlY29uZCBmaWxlIHVubGVzcworICAgKiAgeW91IG1hbnVhbGx5IGNsZWFyKCkgdGhlIHN0YXRlLiBUaGUgY2hvaWNlIGlzIGEgbWF0dGVyIG9mCisgICAqICBjb252ZW5pZW5jZS4KKyAgKi8KKyAgdm9pZAorICBvcGVuKGNvbnN0IGNoYXIqIG5hbWUsCisgICAgICAgc3RkOjppb3NfYmFzZTo6b3Blbm1vZGUgbW9kZSA9IHN0ZDo6aW9zX2Jhc2U6OmluKTsKKworICAvKioKKyAgICogIEBicmllZiAgQXR0YWNoIHRvIGFscmVhZHkgb3BlbiBnemlwcGVkIGZpbGUuCisgICAqICBAcGFyYW0gIGZkICBGaWxlIGRlc2NyaXB0b3IuCisgICAqICBAcGFyYW0gIG1vZGUgIE9wZW4gbW9kZSBmbGFncyAoZm9yY2VkIHRvIGNvbnRhaW4gaW9zOjppbikuCisgICAqCisgICAqICBTdHJlYW0gd2lsbCBiZSBpbiBzdGF0ZSBnb29kKCkgaWYgYXR0YWNoIHN1Y2NlZWRlZDsgb3RoZXJ3aXNlCisgICAqICBpbiBzdGF0ZSBmYWlsKCkuCisgICovCisgIHZvaWQKKyAgYXR0YWNoKGludCBmZCwKKyAgICAgICAgIHN0ZDo6aW9zX2Jhc2U6Om9wZW5tb2RlIG1vZGUgPSBzdGQ6Omlvc19iYXNlOjppbik7CisKKyAgLyoqCisgICAqICBAYnJpZWYgIENsb3NlIGd6aXBwZWQgZmlsZS4KKyAgICoKKyAgICogIFN0cmVhbSB3aWxsIGJlIGluIHN0YXRlIGZhaWwoKSBpZiBjbG9zZSBmYWlsZWQuCisgICovCisgIHZvaWQKKyAgY2xvc2UoKTsKKworcHJpdmF0ZToKKyAgLyoqCisgICAqICBVbmRlcmx5aW5nIHN0cmVhbSBidWZmZXIuCisgICovCisgIGd6ZmlsZWJ1ZiBzYjsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiAgQGJyaWVmICBHemlwcGVkIGZpbGUgb3V0cHV0IHN0cmVhbSBjbGFzcy4KKyAqCisgKiAgVGhpcyBjbGFzcyBpbXBsZW1lbnRzIG9mc3RyZWFtIGZvciBnemlwcGVkIGZpbGVzLiBTZWVraW5nIGFuZCBwdXRiYWNrCisgKiAgaXMgbm90IHN1cHBvcnRlZCB5ZXQuCisqLworY2xhc3MgZ3pvZnN0cmVhbSA6IHB1YmxpYyBzdGQ6Om9zdHJlYW0KK3sKK3B1YmxpYzoKKyAgLy8gIERlZmF1bHQgY29uc3RydWN0b3IKKyAgZ3pvZnN0cmVhbSgpOworCisgIC8qKgorICAgKiAgQGJyaWVmICBDb25zdHJ1Y3Qgc3RyZWFtIG9uIGd6aXBwZWQgZmlsZSB0byBiZSBvcGVuZWQuCisgICAqICBAcGFyYW0gIG5hbWUgIEZpbGUgbmFtZS4KKyAgICogIEBwYXJhbSAgbW9kZSAgT3BlbiBtb2RlIGZsYWdzIChmb3JjZWQgdG8gY29udGFpbiBpb3M6Om91dCkuCisgICovCisgIGV4cGxpY2l0CisgIGd6b2ZzdHJlYW0oY29uc3QgY2hhciogbmFtZSwKKyAgICAgICAgICAgICBzdGQ6Omlvc19iYXNlOjpvcGVubW9kZSBtb2RlID0gc3RkOjppb3NfYmFzZTo6b3V0KTsKKworICAvKioKKyAgICogIEBicmllZiAgQ29uc3RydWN0IHN0cmVhbSBvbiBhbHJlYWR5IG9wZW4gZ3ppcHBlZCBmaWxlLgorICAgKiAgQHBhcmFtICBmZCAgICBGaWxlIGRlc2NyaXB0b3IuCisgICAqICBAcGFyYW0gIG1vZGUgIE9wZW4gbW9kZSBmbGFncyAoZm9yY2VkIHRvIGNvbnRhaW4gaW9zOjpvdXQpLgorICAqLworICBleHBsaWNpdAorICBnem9mc3RyZWFtKGludCBmZCwKKyAgICAgICAgICAgICBzdGQ6Omlvc19iYXNlOjpvcGVubW9kZSBtb2RlID0gc3RkOjppb3NfYmFzZTo6b3V0KTsKKworICAvKioKKyAgICogIE9idGFpbiB1bmRlcmx5aW5nIHN0cmVhbSBidWZmZXIuCisgICovCisgIGd6ZmlsZWJ1ZioKKyAgcmRidWYoKSBjb25zdAorICB7IHJldHVybiBjb25zdF9jYXN0PGd6ZmlsZWJ1Zio+KCZzYik7IH0KKworICAvKioKKyAgICogIEBicmllZiAgQ2hlY2sgaWYgZmlsZSBpcyBvcGVuLgorICAgKiAgQHJldHVybiAgVHJ1ZSBpZiBmaWxlIGlzIG9wZW4uCisgICovCisgIGJvb2wKKyAgaXNfb3BlbigpIHsgcmV0dXJuIHNiLmlzX29wZW4oKTsgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBPcGVuIGd6aXBwZWQgZmlsZS4KKyAgICogIEBwYXJhbSAgbmFtZSAgRmlsZSBuYW1lLgorICAgKiAgQHBhcmFtICBtb2RlICBPcGVuIG1vZGUgZmxhZ3MgKGZvcmNlZCB0byBjb250YWluIGlvczo6b3V0KS4KKyAgICoKKyAgICogIFN0cmVhbSB3aWxsIGJlIGluIHN0YXRlIGdvb2QoKSBpZiBmaWxlIG9wZW5zIHN1Y2Nlc3NmdWxseTsKKyAgICogIG90aGVyd2lzZSBpbiBzdGF0ZSBmYWlsKCkuIFRoaXMgZGlmZmVycyBmcm9tIHRoZSBiZWhhdmlvciBvZgorICAgKiAgb2ZzdHJlYW0sIHdoaWNoIG5ldmVyIHNldHMgdGhlIHN0YXRlIHRvIGdvb2QoKSBhbmQgdGhlcmVmb3JlCisgICAqICB3b24ndCBhbGxvdyB5b3UgdG8gcmV1c2UgdGhlIHN0cmVhbSBmb3IgYSBzZWNvbmQgZmlsZSB1bmxlc3MKKyAgICogIHlvdSBtYW51YWxseSBjbGVhcigpIHRoZSBzdGF0ZS4gVGhlIGNob2ljZSBpcyBhIG1hdHRlciBvZgorICAgKiAgY29udmVuaWVuY2UuCisgICovCisgIHZvaWQKKyAgb3Blbihjb25zdCBjaGFyKiBuYW1lLAorICAgICAgIHN0ZDo6aW9zX2Jhc2U6Om9wZW5tb2RlIG1vZGUgPSBzdGQ6Omlvc19iYXNlOjpvdXQpOworCisgIC8qKgorICAgKiAgQGJyaWVmICBBdHRhY2ggdG8gYWxyZWFkeSBvcGVuIGd6aXBwZWQgZmlsZS4KKyAgICogIEBwYXJhbSAgZmQgIEZpbGUgZGVzY3JpcHRvci4KKyAgICogIEBwYXJhbSAgbW9kZSAgT3BlbiBtb2RlIGZsYWdzIChmb3JjZWQgdG8gY29udGFpbiBpb3M6Om91dCkuCisgICAqCisgICAqICBTdHJlYW0gd2lsbCBiZSBpbiBzdGF0ZSBnb29kKCkgaWYgYXR0YWNoIHN1Y2NlZWRlZDsgb3RoZXJ3aXNlCisgICAqICBpbiBzdGF0ZSBmYWlsKCkuCisgICovCisgIHZvaWQKKyAgYXR0YWNoKGludCBmZCwKKyAgICAgICAgIHN0ZDo6aW9zX2Jhc2U6Om9wZW5tb2RlIG1vZGUgPSBzdGQ6Omlvc19iYXNlOjpvdXQpOworCisgIC8qKgorICAgKiAgQGJyaWVmICBDbG9zZSBnemlwcGVkIGZpbGUuCisgICAqCisgICAqICBTdHJlYW0gd2lsbCBiZSBpbiBzdGF0ZSBmYWlsKCkgaWYgY2xvc2UgZmFpbGVkLgorICAqLworICB2b2lkCisgIGNsb3NlKCk7CisKK3ByaXZhdGU6CisgIC8qKgorICAgKiAgVW5kZXJseWluZyBzdHJlYW0gYnVmZmVyLgorICAqLworICBnemZpbGVidWYgc2I7Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogIEBicmllZiAgR3ppcHBlZCBmaWxlIG91dHB1dCBzdHJlYW0gbWFuaXB1bGF0b3IgY2xhc3MuCisgKgorICogIFRoaXMgY2xhc3MgZGVmaW5lcyBhIHR3by1hcmd1bWVudCBtYW5pcHVsYXRvciBmb3IgZ3pvZnN0cmVhbS4gSXQgaXMgdXNlZAorICogIGFzIGJhc2UgZm9yIHRoZSBzZXRjb21wcmVzc2lvbihpbnQsaW50KSBtYW5pcHVsYXRvci4KKyovCit0ZW1wbGF0ZTx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDI+CisgIGNsYXNzIGd6b21hbmlwMgorICB7CisgIHB1YmxpYzoKKyAgICAvLyBBbGxvd3MgaW5zZXJ0b3IgdG8gcGVlayBhdCBpbnRlcm5hbHMKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVGEsIHR5cGVuYW1lIFRiPgorICAgICAgZnJpZW5kIGd6b2ZzdHJlYW0mCisgICAgICBvcGVyYXRvcjw8KGd6b2ZzdHJlYW0mLAorICAgICAgICAgICAgICAgICBjb25zdCBnem9tYW5pcDI8VGEsVGI+Jik7CisKKyAgICAvLyBDb25zdHJ1Y3RvcgorICAgIGd6b21hbmlwMihnem9mc3RyZWFtJiAoKmYpKGd6b2ZzdHJlYW0mLCBUMSwgVDIpLAorICAgICAgICAgICAgICBUMSB2MSwKKyAgICAgICAgICAgICAgVDIgdjIpOworICBwcml2YXRlOgorICAgIC8vIFVuZGVybHlpbmcgbWFuaXB1bGF0b3IgZnVuY3Rpb24KKyAgICBnem9mc3RyZWFtJgorICAgICgqZnVuYykoZ3pvZnN0cmVhbSYsIFQxLCBUMik7CisKKyAgICAvLyBBcmd1bWVudHMgZm9yIG1hbmlwdWxhdG9yIGZ1bmN0aW9uCisgICAgVDEgdmFsMTsKKyAgICBUMiB2YWwyOworICB9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vIE1hbmlwdWxhdG9yIGZ1bmN0aW9uIHRodW5rcyB0aHJvdWdoIHRvIHN0cmVhbSBidWZmZXIKK2lubGluZSBnem9mc3RyZWFtJgorc2V0Y29tcHJlc3Npb24oZ3pvZnN0cmVhbSAmZ3pzLCBpbnQgbCwgaW50IHMgPSBaX0RFRkFVTFRfU1RSQVRFR1kpCit7CisgIChnenMucmRidWYoKSktPnNldGNvbXByZXNzaW9uKGwsIHMpOworICByZXR1cm4gZ3pzOworfQorCisvLyBNYW5pcHVsYXRvciBjb25zdHJ1Y3RvciBzdG9yZXMgYXJndW1lbnRzCit0ZW1wbGF0ZTx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDI+CisgIGlubGluZQorICBnem9tYW5pcDI8VDEsVDI+Ojpnem9tYW5pcDIoZ3pvZnN0cmVhbSAmKCpmKShnem9mc3RyZWFtICYsIFQxLCBUMiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUMSB2MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFQyIHYyKQorICA6IGZ1bmMoZiksIHZhbDEodjEpLCB2YWwyKHYyKQorICB7IH0KKworLy8gSW5zZXJ0b3IgYXBwbGllcyB1bmRlcmx5aW5nIG1hbmlwdWxhdG9yIGZ1bmN0aW9uIHRvIHN0cmVhbQordGVtcGxhdGU8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyPgorICBpbmxpbmUgZ3pvZnN0cmVhbSYKKyAgb3BlcmF0b3I8PChnem9mc3RyZWFtJiBzLCBjb25zdCBnem9tYW5pcDI8VDEsVDI+JiBtKQorICB7IHJldHVybiAoKm0uZnVuYykocywgbS52YWwxLCBtLnZhbDIpOyB9CisKKy8vIEluc2VydCB0aGlzIG9udG8gc3RyZWFtIHRvIHNpbXBsaWZ5IHNldHRpbmcgb2YgY29tcHJlc3Npb24gbGV2ZWwKK2lubGluZSBnem9tYW5pcDI8aW50LGludD4KK3NldGNvbXByZXNzaW9uKGludCBsLCBpbnQgcyA9IFpfREVGQVVMVF9TVFJBVEVHWSkKK3sgcmV0dXJuIGd6b21hbmlwMjxpbnQsaW50Pigmc2V0Y29tcHJlc3Npb24sIGwsIHMpOyB9CisKKyNlbmRpZiAvLyBaRlNUUkVBTV9ICmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi9taW5pemlwL01ha2VmaWxlIGIvc3JjL2NvbnRyaWIvbWluaXppcC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWM3NmUwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbnRyaWIvbWluaXppcC9NYWtlZmlsZQpAQCAtMCwwICsxLDI5IEBACitDQz1jYworQ0ZMQUdTIDo9ICQoQ0ZMQUdTKSAtTyAtSS4uLy4uCisKK1VOWl9PQkpTID0gbWluaXVuei5vIHVuemlwLm8gaW9hcGkubyAuLi8uLi9saWJ6LmEKK1pJUF9PQkpTID0gbWluaXppcC5vIHppcC5vICAgaW9hcGkubyAuLi8uLi9saWJ6LmEKKworLmMubzoKKwkkKENDKSAtYyAkKENGTEFHUykgJCouYworCithbGw6IG1pbml1bnogbWluaXppcAorCittaW5pdW56OiAgJChVTlpfT0JKUykKKwkkKENDKSAkKENGTEFHUykgLW8gJEAgJChVTlpfT0JKUykKKworbWluaXppcDogICQoWklQX09CSlMpCisJJChDQykgJChDRkxBR1MpIC1vICRAICQoWklQX09CSlMpCisKK3Rlc3Q6CW1pbml1bnogbWluaXppcAorCUBybSAtZiB0ZXN0LioKKwlAZWNobyBoZWxsbyBoZWxsbyBoZWxsbyA+IHRlc3QudHh0CisJLi9taW5pemlwIHRlc3QgdGVzdC50eHQKKwkuL21pbml1bnogLWwgdGVzdC56aXAKKwlAbXYgdGVzdC50eHQgdGVzdC5vbGQKKwkuL21pbml1bnogdGVzdC56aXAKKwlAY21wIHRlc3QudHh0IHRlc3Qub2xkCisJQHJtIC1mIHRlc3QuKgorCitjbGVhbjoKKwkvYmluL3JtIC1mICoubyAqfiBtaW5pemlwIG1pbml1bnogdGVzdC4qCmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi9taW5pemlwL01ha2VmaWxlLmFtIGIvc3JjL2NvbnRyaWIvbWluaXppcC9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzQzMDExCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbnRyaWIvbWluaXppcC9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDQ1IEBACitsaWJfTFRMSUJSQVJJRVMgPSBsaWJtaW5pemlwLmxhCisKK2lmIENPTkRfREVNT1MKK2Jpbl9QUk9HUkFNUyA9IG1pbml1bnppcCBtaW5pemlwCitlbmRpZgorCit6bGliX3RvcF9zcmNkaXIgPSAkKHRvcF9zcmNkaXIpLy4uLy4uCit6bGliX3RvcF9idWlsZGRpciA9ICQodG9wX2J1aWxkZGlyKS8uLi8uLgorCitBTV9DUFBGTEFHUyA9IC1JJCh6bGliX3RvcF9zcmNkaXIpCitBTV9MREZMQUdTID0gLUwkKHpsaWJfdG9wX2J1aWxkZGlyKQorCitpZiBXSU4zMgoraW93aW4zMl9zcmMgPSBpb3dpbjMyLmMKK2lvd2luMzJfaCA9IGlvd2luMzIuaAorZW5kaWYKKworbGlibWluaXppcF9sYV9TT1VSQ0VTID0gXAorCWlvYXBpLmMgXAorCW16dG9vbHMuYyBcCisJdW56aXAuYyBcCisJemlwLmMgXAorCSR7aW93aW4zMl9zcmN9CisKK2xpYm1pbml6aXBfbGFfTERGTEFHUyA9ICQoQU1fTERGTEFHUykgLXZlcnNpb24taW5mbyAxOjA6MCAtbHoKKworbWluaXppcF9pbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9taW5pemlwCittaW5pemlwX2luY2x1ZGVfSEVBREVSUyA9IFwKKwljcnlwdC5oIFwKKwlpb2FwaS5oIFwKKwltenRvb2xzLmggXAorCXVuemlwLmggXAorCXppcC5oIFwKKwkke2lvd2luMzJfaH0KKworcGtnY29uZmlnZGlyID0gJChsaWJkaXIpL3BrZ2NvbmZpZworcGtnY29uZmlnX0RBVEEgPSBtaW5pemlwLnBjCisKK0VYVFJBX1BST0dSQU1TID0gbWluaXVuemlwIG1pbml6aXAKKworbWluaXVuemlwX1NPVVJDRVMgPSBtaW5pdW56LmMKK21pbml1bnppcF9MREFERCA9IGxpYm1pbml6aXAubGEKKworbWluaXppcF9TT1VSQ0VTID0gbWluaXppcC5jCittaW5pemlwX0xEQUREID0gbGlibWluaXppcC5sYSAtbHoKZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL21pbml6aXAvTWluaVppcDY0X0NoYW5nZXMudHh0IGIvc3JjL2NvbnRyaWIvbWluaXppcC9NaW5pWmlwNjRfQ2hhbmdlcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNhMWJkOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb250cmliL21pbml6aXAvTWluaVppcDY0X0NoYW5nZXMudHh0CkBAIC0wLDAgKzEsNiBAQAorCitNaW5pWmlwIDEuMSB3YXMgZGVycml2ZWQgZnJvbSBNaW5pWmlwIGF0IHZlcnNpb24gMS4wMWYKKworQ2hhbmdlIGluIDEuMCAoT2t0IDIwMDkpCisgLSAqKlRPRE8gLSBBZGQgaGlzdG9yeSoqCisKZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL21pbml6aXAvTWluaVppcDY0X2luZm8udHh0IGIvc3JjL2NvbnRyaWIvbWluaXppcC9NaW5pWmlwNjRfaW5mby50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdkNzE1MgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb250cmliL21pbml6aXAvTWluaVppcDY0X2luZm8udHh0CkBAIC0wLDAgKzEsNzQgQEAKK01pbmlaaXAgLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAxMCAtIGJ5IEdpbGxlcyBWb2xsYW50IC0gdmVyc2lvbiAxLjEgNjQgYml0cyBmcm9tIE1hdGhpYXMgU3ZlbnNzb24KKworSW50cm9kdWN0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KK01pbmlaaXAgMS4xIGlzIGJ1aWx0IGZyb20gTWluaVppcCAxLjAgYnkgR2lsbGVzIFZvbGxhbnQgKCBodHRwOi8vd3d3LndpbmltYWdlLmNvbS96TGliRGxsL21pbml6aXAuaHRtbCApCisKK1doZW4gYWRkaW5nIFpJUDY0IHN1cHBvcnQgaW50byBtaW5pemlwIGl0IHdvdWxkIHJlc3VsdCBpbnRvIHJpc2sgb2YgYnJlYWtpbmcgY29tcGF0aWJpbGl0eSB3aXRoIG1pbml6aXAgMS4wLgorQWxsIHBvc3NpYmxlIHdvcmsgd2FzIGRvbmUgZm9yIGNvbXBhdGliaWxpdHkuCisKKworQmFja2dyb3VuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitXaGVuIGFkZGluZyBaSVA2NCBzdXBwb3J0IE1hdGhpYXMgU3ZlbnNzb24gZm91bmQgdGhhdCBFdmVuIFJvdWF1bHQgaGF2ZSBhZGRlZCBaSVA2NCAKK3N1cHBvcnQgZm9yIHVuemlwLmMgaW50byBtaW5pemlwIGZvciBhIG9wZW4gc291cmNlIHByb2plY3QgY2FsbGVkIGdkYWwgKCBodHRwOi8vd3d3LmdkYWwub3JnLyApCisKK1RoYXQgd2FzIHVzZWQgYXMgYSBzdGFydGluZyBwb2ludC4gQW5kIGFmdGVyIHRoYXQgWklQNjQgc3VwcG9ydCB3YXMgYWRkZWQgdG8gemlwLmMKK3NvbWUgcmVmYWN0b3JpbmcgYW5kIGNvZGUgY2xlYW51cCB3YXMgYWxzbyBkb25lLgorCisKK0NoYW5nZWQgZnJvbSBNaW5pWmlwIDEuMCB0byBNaW5pWmlwIDEuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIEFkZGVkIFpJUDY0IHN1cHBvcnQgZm9yIHVuemlwICggYnkgRXZlbiBSb3VhdWx0ICkKKyogQWRkZWQgWklQNjQgc3VwcG9ydCBmb3IgemlwICggYnkgTWF0aGlhcyBTdmVuc3NvbiApCisqIFJldmVydGVkIHNvbWUgY2hhbmdlZCB0aGF0IEV2ZW4gUm91YXVsdCBkaWQuCisqIEJ1bmNoIG9mIHBhdGNoZXMgcmVjZWl2ZWQgZnJvbSBHdWxsZXMgVm9sbGFudCB0aGF0IGhlIHJlY2VpdmVkIGZvciBNaW5pWmlwIGZyb20gdmFyaW91cyB1c2Vycy4KKyogQWRkZWQgdW56aXAgcGF0Y2ggZm9yIEJaSVAgQ29tcHJlc3Npb24gbWV0aG9kIChwYXRjaCBjcmVhdGUgYnkgRGFuaWVsIEJvcmNhKQorKiBBZGRlZCBCWklQIENvbXByZXNzIG1ldGhvZCBmb3IgemlwCisqIERpZCBzb21lIHJlZmFjdG9yaW5nIGFuZCBjb2RlIGNsZWFudXAKKworCitDcmVkaXRzCisKKyBHaWxsZXMgVm9sbGFudCAgICAtIE9yaWdpbmFsIE1pbmlaaXAgYXV0aG9yCisgRXZlbiBSb3VhdWx0ICAgICAgLSBaSVA2NCB1bnppcCBTdXBwb3J0CisgRGFuaWVsIEJvcmNhICAgICAgLSBCWmlwIENvbXByZXNzaW9uIG1ldGhvZCBzdXBwb3J0IGluIHVuemlwCisgTWF0aGlhcyBTdmVuc3NvbiAgLSBaSVA2NCB6aXAgc3VwcG9ydAorIE1hdGhpYXMgU3ZlbnNzb24gIC0gQlppcCBDb21wcmVzc2lvbiBtZXRob2Qgc3VwcG9ydCBpbiB6aXAKKworIFJlc291cmNlcworCisgWmlwTGF5b3V0ICAgaHR0cDovL3Jlc3VsdDQyLmNvbS9wcm9qZWN0cy9aaXBGaWxlTGF5b3V0CisgICAgICAgICAgICAgQ29tbWFuZCBsaW5lIHRvb2wgZm9yIFdpbmRvd3MgdGhhdCBzaG93cyB0aGUgbGF5b3V0IGFuZCBpbmZvcm1hdGlvbiBvZiB0aGUgaGVhZGVycyBpbiBhIHppcCBhcmNoaXZlLgorICAgICAgICAgICAgIFVzZWQgd2hlbiBkZWJ1Z2dpbmcgYW5kIHZhbGlkYXRpbmcgdGhlIGNyZWF0aW9uIG9mIHppcCBmaWxlcyB1c2luZyBNaW5pWmlwNjQKKworCisgWklQIEFwcCBOb3RlICBodHRwOi8vd3d3LnBrd2FyZS5jb20vZG9jdW1lbnRzL2Nhc2VzdHVkaWVzL0FQUE5PVEUuVFhUCisgICAgICAgICAgICAgICBaaXAgRmlsZSBzcGVjaWZpY2F0aW9uCisKKworTm90ZXMuCisgKiBUbyBiZSBhYmxlIHRvIHVzZSBCWmlwIGNvbXByZXNzaW9uIG1ldGhvZCBpbiB6aXA2NC5jIG9yIHVuemlwNjQuYyB0aGUgQlpJUDIgbGliIGlzIG5lZWRlZCBhbmQgSEFWRV9CWklQMiBuZWVkIHRvIGJlIGRlZmluZWQuCisKK0xpY2Vuc2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIENvbmRpdGlvbiBvZiB1c2UgYW5kIGRpc3RyaWJ1dGlvbiBhcmUgdGhlIHNhbWUgdGhhbiB6bGliIDoKKworICBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZAorICB3YXJyYW50eS4gIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzCisgIGFyaXNpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuCisKKyAgUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UsCisgIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXQKKyAgZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCisgIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90CisgICAgIGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlCisgICAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZQorICAgICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLgorICAyLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZQorICAgICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuCisgIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvbWluaXppcC9jb25maWd1cmUuYWMgYi9zcmMvY29udHJpYi9taW5pemlwL2NvbmZpZ3VyZS5hYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDA5YWJjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbnRyaWIvbWluaXppcC9jb25maWd1cmUuYWMKQEAgLTAsMCArMSwzMiBAQAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9jb25mIHRvIHByb2R1Y2UgYSBjb25maWd1cmUgc2NyaXB0LgorCitBQ19JTklUKFttaW5pemlwXSwgWzEuMi4xMl0sIFtidWd6aWxsYS5yZWRoYXQuY29tXSkKK0FDX0NPTkZJR19TUkNESVIoW21pbml6aXAuY10pCitBTV9JTklUX0FVVE9NQUtFKFtmb3JlaWduXSkKK0xUX0lOSVQKKworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIGV4YW1wbGUgcHJvZ3JhbXNdKQorQUNfQVJHX0VOQUJMRShbZGVtb3NdLCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtZGVtb3NdLCBbYnVpbGQgZXhhbXBsZSBwcm9ncmFtc10pKQorQU1fQ09ORElUSU9OQUwoW0NPTkRfREVNT1NdLCBbdGVzdCAiJGVuYWJsZV9kZW1vcyIgPSB5ZXNdKQoraWYgdGVzdCAiJGVuYWJsZV9kZW1vcyIgPSB5ZXMKK3RoZW4KKwlBQ19NU0dfUkVTVUxUKFt5ZXNdKQorZWxzZQorCUFDX01TR19SRVNVTFQoW25vXSkKK2ZpCisKK2Nhc2UgIiR7aG9zdH0iIGluCisJKi1taW5ndyogfCBtaW5ndyopCisJCVdJTjMyPSJ5ZXMiCisJCTs7CisJKikKKwkJOzsKK2VzYWMKK0FNX0NPTkRJVElPTkFMKFtXSU4zMl0sIFt0ZXN0ICIke1dJTjMyfSIgPSAieWVzIl0pCisKKworQUNfU1VCU1QoW0hBVkVfVU5JU1REX0hdLCBbMF0pCitBQ19DSEVDS19IRUFERVIoW3VuaXN0ZC5oXSwgW0hBVkVfVU5JU1REX0g9MV0sIFtdKQorQUNfQ09ORklHX0ZJTEVTKFtNYWtlZmlsZSBtaW5pemlwLnBjXSkKK0FDX09VVFBVVApkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvbWluaXppcC9jcnlwdC5oIGIvc3JjL2NvbnRyaWIvbWluaXppcC9jcnlwdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkYTE1MzcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29udHJpYi9taW5pemlwL2NyeXB0LmgKQEAgLTAsMCArMSwxMzIgQEAKKy8qIGNyeXB0LmggLS0gYmFzZSBjb2RlIGZvciBjcnlwdC91bmNyeXB0IFpJUGZpbGUKKworCisgICBWZXJzaW9uIDEuMDFlLCBGZWJydWFyeSAxMnRoLCAyMDA1CisKKyAgIENvcHlyaWdodCAoQykgMTk5OC0yMDA1IEdpbGxlcyBWb2xsYW50CisKKyAgIFRoaXMgY29kZSBpcyBhIG1vZGlmaWVkIHZlcnNpb24gb2YgY3J5cHRpbmcgY29kZSBpbiBJbmZvemlwIGRpc3RyaWJ1dGlvbgorCisgICBUaGUgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIHBhcnRzIG9mIHRoaXMgc291cmNlIGNvZGUgKGFzIG9wcG9zZWQgdG8gdGhlCisgICBub24tZWNob2luZyBwYXNzd29yZCBwYXJ0cykgd2VyZSBvcmlnaW5hbGx5IHdyaXR0ZW4gaW4gRXVyb3BlLiAgVGhlCisgICB3aG9sZSBzb3VyY2UgcGFja2FnZSBjYW4gYmUgZnJlZWx5IGRpc3RyaWJ1dGVkLCBpbmNsdWRpbmcgZnJvbSB0aGUgVVNBLgorICAgKFByaW9yIHRvIEphbnVhcnkgMjAwMCwgcmUtZXhwb3J0IGZyb20gdGhlIFVTIHdhcyBhIHZpb2xhdGlvbiBvZiBVUyBsYXcuKQorCisgICBUaGlzIGVuY3J5cHRpb24gY29kZSBpcyBhIGRpcmVjdCB0cmFuc2NyaXB0aW9uIG9mIHRoZSBhbGdvcml0aG0gZnJvbQorICAgUm9nZXIgU2NobGFmbHksIGRlc2NyaWJlZCBieSBQaGlsIEthdHogaW4gdGhlIGZpbGUgYXBwbm90ZS50eHQuICBUaGlzCisgICBmaWxlIChhcHBub3RlLnR4dCkgaXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGUgUEtaSVAgcHJvZ3JhbSAoZXZlbiBpbiB0aGUKKyAgIHZlcnNpb24gd2l0aG91dCBlbmNyeXB0aW9uIGNhcGFiaWxpdGllcykuCisKKyAgIElmIHlvdSBkb24ndCBuZWVkIGNyeXB0aW5nIGluIHlvdXIgYXBwbGljYXRpb24sIGp1c3QgZGVmaW5lIHN5bWJvbHMKKyAgIE5PQ1JZUFQgYW5kIE5PVU5DUllQVC4KKworICAgVGhpcyBjb2RlIHN1cHBvcnQgdGhlICJUcmFkaXRpb25hbCBQS1dBUkUgRW5jcnlwdGlvbiIuCisKKyAgIFRoZSBuZXcgQUVTIGVuY3J5cHRpb24gYWRkZWQgb24gWmlwIGZvcm1hdCBieSBXaW56aXAgKHNlZSB0aGUgcGFnZQorICAgaHR0cDovL3d3dy53aW56aXAuY29tL2Flc19pbmZvLmh0bSApIGFuZCBQS1dhcmUgUEtaaXAgNS54IFN0cm9uZworICAgRW5jcnlwdGlvbiBpcyBub3Qgc3VwcG9ydGVkLgorKi8KKworI2RlZmluZSBDUkMzMihjLCBiKSAoKCoocGNyY18zMl90YWIrKCgoaW50KShjKSBeIChiKSkgJiAweGZmKSkpIF4gKChjKSA+PiA4KSkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSZXR1cm4gdGhlIG5leHQgYnl0ZSBpbiB0aGUgcHNldWRvLXJhbmRvbSBzZXF1ZW5jZQorICovCitzdGF0aWMgaW50IGRlY3J5cHRfYnl0ZSh1bnNpZ25lZCBsb25nKiBwa2V5cywgY29uc3Qgel9jcmNfdCogcGNyY18zMl90YWIpCit7CisgICAgdW5zaWduZWQgdGVtcDsgIC8qIFBPVEVOVElBTCBCVUc6ICB0ZW1wKih0ZW1wXjEpIG1heSBvdmVyZmxvdyBpbiBhbgorICAgICAgICAgICAgICAgICAgICAgKiB1bnByZWRpY3RhYmxlIG1hbm5lciBvbiAxNi1iaXQgc3lzdGVtczsgbm90IGEgcHJvYmxlbQorICAgICAgICAgICAgICAgICAgICAgKiB3aXRoIGFueSBrbm93biBjb21waWxlciBzbyBmYXIsIHRob3VnaCAqLworCisgICAgKHZvaWQpcGNyY18zMl90YWI7CisgICAgdGVtcCA9ICgodW5zaWduZWQpKCoocGtleXMrMikpICYgMHhmZmZmKSB8IDI7CisgICAgcmV0dXJuIChpbnQpKCgodGVtcCAqICh0ZW1wIF4gMSkpID4+IDgpICYgMHhmZik7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVXBkYXRlIHRoZSBlbmNyeXB0aW9uIGtleXMgd2l0aCB0aGUgbmV4dCBieXRlIG9mIHBsYWluIHRleHQKKyAqLworc3RhdGljIGludCB1cGRhdGVfa2V5cyh1bnNpZ25lZCBsb25nKiBwa2V5cyxjb25zdCB6X2NyY190KiBwY3JjXzMyX3RhYixpbnQgYykKK3sKKyAgICAoKihwa2V5cyswKSkgPSBDUkMzMigoKihwa2V5cyswKSksIGMpOworICAgICgqKHBrZXlzKzEpKSArPSAoKihwa2V5cyswKSkgJiAweGZmOworICAgICgqKHBrZXlzKzEpKSA9ICgqKHBrZXlzKzEpKSAqIDEzNDc3NTgxM0wgKyAxOworICAgIHsKKyAgICAgIHJlZ2lzdGVyIGludCBrZXlzaGlmdCA9IChpbnQpKCgqKHBrZXlzKzEpKSA+PiAyNCk7CisgICAgICAoKihwa2V5cysyKSkgPSBDUkMzMigoKihwa2V5cysyKSksIGtleXNoaWZ0KTsKKyAgICB9CisgICAgcmV0dXJuIGM7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBJbml0aWFsaXplIHRoZSBlbmNyeXB0aW9uIGtleXMgYW5kIHRoZSByYW5kb20gaGVhZGVyIGFjY29yZGluZyB0bworICogdGhlIGdpdmVuIHBhc3N3b3JkLgorICovCitzdGF0aWMgdm9pZCBpbml0X2tleXMoY29uc3QgY2hhciogcGFzc3dkLHVuc2lnbmVkIGxvbmcqIHBrZXlzLGNvbnN0IHpfY3JjX3QqIHBjcmNfMzJfdGFiKQoreworICAgICoocGtleXMrMCkgPSAzMDU0MTk4OTZMOworICAgICoocGtleXMrMSkgPSA1OTE3NTEwNDlMOworICAgICoocGtleXMrMikgPSA4NzgwODIxOTJMOworICAgIHdoaWxlICgqcGFzc3dkICE9ICdcMCcpIHsKKyAgICAgICAgdXBkYXRlX2tleXMocGtleXMscGNyY18zMl90YWIsKGludCkqcGFzc3dkKTsKKyAgICAgICAgcGFzc3dkKys7CisgICAgfQorfQorCisjZGVmaW5lIHpkZWNvZGUocGtleXMscGNyY18zMl90YWIsYykgXAorICAgICh1cGRhdGVfa2V5cyhwa2V5cyxwY3JjXzMyX3RhYixjIF49IGRlY3J5cHRfYnl0ZShwa2V5cyxwY3JjXzMyX3RhYikpKQorCisjZGVmaW5lIHplbmNvZGUocGtleXMscGNyY18zMl90YWIsYyx0KSBcCisgICAgKHQ9ZGVjcnlwdF9ieXRlKHBrZXlzLHBjcmNfMzJfdGFiKSwgdXBkYXRlX2tleXMocGtleXMscGNyY18zMl90YWIsYyksIChCeXRlKXReKGMpKQorCisjaWZkZWYgSU5DTFVERUNSWVBUSU5HQ09ERV9JRkNSWVBUQUxMT1dFRAorCisjZGVmaW5lIFJBTkRfSEVBRF9MRU4gIDEyCisgICAvKiAibGFzdCByZXNvcnQiIHNvdXJjZSBmb3Igc2Vjb25kIHBhcnQgb2YgY3J5cHQgc2VlZCBwYXR0ZXJuICovCisjICBpZm5kZWYgWkNSX1NFRUQyCisjICAgIGRlZmluZSBaQ1JfU0VFRDIgMzE0MTU5MjY1NEwgICAgICAgLyogdXNlIFBJIGFzIGRlZmF1bHQgcGF0dGVybiAqLworIyAgZW5kaWYKKworc3RhdGljIHVuc2lnbmVkIGNyeXB0aGVhZChjb25zdCBjaGFyKiBwYXNzd2QsICAgICAgIC8qIHBhc3N3b3JkIHN0cmluZyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBidWYsICAgICAgIC8qIHdoZXJlIHRvIHdyaXRlIGhlYWRlciAqLworICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYnVmU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyogcGtleXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHpfY3JjX3QqIHBjcmNfMzJfdGFiLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGNyY0ZvckNyeXB0aW5nKQoreworICAgIHVuc2lnbmVkIG47ICAgICAgICAgICAgICAgICAgLyogaW5kZXggaW4gcmFuZG9tIGhlYWRlciAqLworICAgIGludCB0OyAgICAgICAgICAgICAgICAgICAgICAgLyogdGVtcG9yYXJ5ICovCisgICAgaW50IGM7ICAgICAgICAgICAgICAgICAgICAgICAvKiByYW5kb20gYnl0ZSAqLworICAgIHVuc2lnbmVkIGNoYXIgaGVhZGVyW1JBTkRfSEVBRF9MRU4tMl07IC8qIHJhbmRvbSBoZWFkZXIgKi8KKyAgICBzdGF0aWMgdW5zaWduZWQgY2FsbHMgPSAwOyAgIC8qIGVuc3VyZSBkaWZmZXJlbnQgcmFuZG9tIGhlYWRlciBlYWNoIHRpbWUgKi8KKworICAgIGlmIChidWZTaXplPFJBTkRfSEVBRF9MRU4pCisgICAgICByZXR1cm4gMDsKKworICAgIC8qIEZpcnN0IGdlbmVyYXRlIFJBTkRfSEVBRF9MRU4tMiByYW5kb20gYnl0ZXMuIFdlIGVuY3J5cHQgdGhlCisgICAgICogb3V0cHV0IG9mIHJhbmQoKSB0byBnZXQgbGVzcyBwcmVkaWN0YWJpbGl0eSwgc2luY2UgcmFuZCgpIGlzCisgICAgICogb2Z0ZW4gcG9vcmx5IGltcGxlbWVudGVkLgorICAgICAqLworICAgIGlmICgrK2NhbGxzID09IDEpCisgICAgeworICAgICAgICBzcmFuZCgodW5zaWduZWQpKHRpbWUoTlVMTCkgXiBaQ1JfU0VFRDIpKTsKKyAgICB9CisgICAgaW5pdF9rZXlzKHBhc3N3ZCwgcGtleXMsIHBjcmNfMzJfdGFiKTsKKyAgICBmb3IgKG4gPSAwOyBuIDwgUkFORF9IRUFEX0xFTi0yOyBuKyspCisgICAgeworICAgICAgICBjID0gKHJhbmQoKSA+PiA3KSAmIDB4ZmY7CisgICAgICAgIGhlYWRlcltuXSA9ICh1bnNpZ25lZCBjaGFyKXplbmNvZGUocGtleXMsIHBjcmNfMzJfdGFiLCBjLCB0KTsKKyAgICB9CisgICAgLyogRW5jcnlwdCByYW5kb20gaGVhZGVyIChsYXN0IHR3byBieXRlcyBpcyBoaWdoIHdvcmQgb2YgY3JjKSAqLworICAgIGluaXRfa2V5cyhwYXNzd2QsIHBrZXlzLCBwY3JjXzMyX3RhYik7CisgICAgZm9yIChuID0gMDsgbiA8IFJBTkRfSEVBRF9MRU4tMjsgbisrKQorICAgIHsKKyAgICAgICAgYnVmW25dID0gKHVuc2lnbmVkIGNoYXIpemVuY29kZShwa2V5cywgcGNyY18zMl90YWIsIGhlYWRlcltuXSwgdCk7CisgICAgfQorICAgIGJ1ZltuKytdID0gKHVuc2lnbmVkIGNoYXIpemVuY29kZShwa2V5cywgcGNyY18zMl90YWIsIChpbnQpKGNyY0ZvckNyeXB0aW5nID4+IDE2KSAmIDB4ZmYsIHQpOworICAgIGJ1ZltuKytdID0gKHVuc2lnbmVkIGNoYXIpemVuY29kZShwa2V5cywgcGNyY18zMl90YWIsIChpbnQpKGNyY0ZvckNyeXB0aW5nID4+IDI0KSAmIDB4ZmYsIHQpOworICAgIHJldHVybiBuOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL21pbml6aXAvaW9hcGkuYyBiL3NyYy9jb250cmliL21pbml6aXAvaW9hcGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjY2ZTVhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbnRyaWIvbWluaXppcC9pb2FwaS5jCkBAIC0wLDAgKzEsMjU3IEBACisvKiBpb2FwaS5oIC0tIElPIGJhc2UgZnVuY3Rpb24gaGVhZGVyIGZvciBjb21wcmVzcy91bmNvbXByZXNzIC56aXAKKyAgIHBhcnQgb2YgdGhlIE1pbmlaaXAgcHJvamVjdCAtICggaHR0cDovL3d3dy53aW5pbWFnZS5jb20vekxpYkRsbC9taW5pemlwLmh0bWwgKQorCisgICAgICAgICBDb3B5cmlnaHQgKEMpIDE5OTgtMjAxMCBHaWxsZXMgVm9sbGFudCAobWluaXppcCkgKCBodHRwOi8vd3d3LndpbmltYWdlLmNvbS96TGliRGxsL21pbml6aXAuaHRtbCApCisKKyAgICAgICAgIE1vZGlmaWNhdGlvbnMgZm9yIFppcDY0IHN1cHBvcnQKKyAgICAgICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIE1hdGhpYXMgU3ZlbnNzb24gKCBodHRwOi8vcmVzdWx0NDIuY29tICkKKworICAgICAgICAgRm9yIG1vcmUgaW5mbyByZWFkIE1pbmlaaXBfaW5mby50eHQKKworKi8KKworI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAoIShkZWZpbmVkKF9DUlRfU0VDVVJFX05PX1dBUk5JTkdTKSkpCisgICAgICAgICNkZWZpbmUgX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoSU9BUElfTk9fNjQpCisvLyBJbiBkYXJ3aW4gYW5kIHBlcmhhcHMgb3RoZXIgQlNEIHZhcmlhbnRzIG9mZl90IGlzIGEgNjQgYml0IHZhbHVlLCBoZW5jZSBubyBuZWVkIGZvciBzcGVjaWZpYyA2NCBiaXQgZnVuY3Rpb25zCisjZGVmaW5lIEZPUEVOX0ZVTkMoZmlsZW5hbWUsIG1vZGUpIGZvcGVuKGZpbGVuYW1lLCBtb2RlKQorI2RlZmluZSBGVEVMTE9fRlVOQyhzdHJlYW0pIGZ0ZWxsbyhzdHJlYW0pCisjZGVmaW5lIEZTRUVLT19GVU5DKHN0cmVhbSwgb2Zmc2V0LCBvcmlnaW4pIGZzZWVrbyhzdHJlYW0sIG9mZnNldCwgb3JpZ2luKQorI2Vsc2UKKyNkZWZpbmUgRk9QRU5fRlVOQyhmaWxlbmFtZSwgbW9kZSkgZm9wZW42NChmaWxlbmFtZSwgbW9kZSkKKyNkZWZpbmUgRlRFTExPX0ZVTkMoc3RyZWFtKSBmdGVsbG82NChzdHJlYW0pCisjZGVmaW5lIEZTRUVLT19GVU5DKHN0cmVhbSwgb2Zmc2V0LCBvcmlnaW4pIGZzZWVrbzY0KHN0cmVhbSwgb2Zmc2V0LCBvcmlnaW4pCisjZW5kaWYKKworCisjaW5jbHVkZSAiaW9hcGkuaCIKKwordm9pZHBmIGNhbGxfem9wZW42NCAoY29uc3QgemxpYl9maWxlZnVuYzY0XzMyX2RlZiogcGZpbGVmdW5jLGNvbnN0IHZvaWQqZmlsZW5hbWUsaW50IG1vZGUpCit7CisgICAgaWYgKHBmaWxlZnVuYy0+emZpbGVfZnVuYzY0LnpvcGVuNjRfZmlsZSAhPSBOVUxMKQorICAgICAgICByZXR1cm4gKCoocGZpbGVmdW5jLT56ZmlsZV9mdW5jNjQuem9wZW42NF9maWxlKSkgKHBmaWxlZnVuYy0+emZpbGVfZnVuYzY0Lm9wYXF1ZSxmaWxlbmFtZSxtb2RlKTsKKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gKCoocGZpbGVmdW5jLT56b3BlbjMyX2ZpbGUpKShwZmlsZWZ1bmMtPnpmaWxlX2Z1bmM2NC5vcGFxdWUsKGNvbnN0IGNoYXIqKWZpbGVuYW1lLG1vZGUpOworICAgIH0KK30KKworbG9uZyBjYWxsX3pzZWVrNjQgKGNvbnN0IHpsaWJfZmlsZWZ1bmM2NF8zMl9kZWYqIHBmaWxlZnVuYyx2b2lkcGYgZmlsZXN0cmVhbSwgWlBPUzY0X1Qgb2Zmc2V0LCBpbnQgb3JpZ2luKQoreworICAgIGlmIChwZmlsZWZ1bmMtPnpmaWxlX2Z1bmM2NC56c2VlazY0X2ZpbGUgIT0gTlVMTCkKKyAgICAgICAgcmV0dXJuICgqKHBmaWxlZnVuYy0+emZpbGVfZnVuYzY0LnpzZWVrNjRfZmlsZSkpIChwZmlsZWZ1bmMtPnpmaWxlX2Z1bmM2NC5vcGFxdWUsZmlsZXN0cmVhbSxvZmZzZXQsb3JpZ2luKTsKKyAgICBlbHNlCisgICAgeworICAgICAgICB1TG9uZyBvZmZzZXRUcnVuY2F0ZWQgPSAodUxvbmcpb2Zmc2V0OworICAgICAgICBpZiAob2Zmc2V0VHJ1bmNhdGVkICE9IG9mZnNldCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuICgqKHBmaWxlZnVuYy0+enNlZWszMl9maWxlKSkocGZpbGVmdW5jLT56ZmlsZV9mdW5jNjQub3BhcXVlLGZpbGVzdHJlYW0sb2Zmc2V0VHJ1bmNhdGVkLG9yaWdpbik7CisgICAgfQorfQorCitaUE9TNjRfVCBjYWxsX3p0ZWxsNjQgKGNvbnN0IHpsaWJfZmlsZWZ1bmM2NF8zMl9kZWYqIHBmaWxlZnVuYyx2b2lkcGYgZmlsZXN0cmVhbSkKK3sKKyAgICBpZiAocGZpbGVmdW5jLT56ZmlsZV9mdW5jNjQuenNlZWs2NF9maWxlICE9IE5VTEwpCisgICAgICAgIHJldHVybiAoKihwZmlsZWZ1bmMtPnpmaWxlX2Z1bmM2NC56dGVsbDY0X2ZpbGUpKSAocGZpbGVmdW5jLT56ZmlsZV9mdW5jNjQub3BhcXVlLGZpbGVzdHJlYW0pOworICAgIGVsc2UKKyAgICB7CisgICAgICAgIHVMb25nIHRlbGxfdUxvbmcgPSAodUxvbmcpKCoocGZpbGVmdW5jLT56dGVsbDMyX2ZpbGUpKShwZmlsZWZ1bmMtPnpmaWxlX2Z1bmM2NC5vcGFxdWUsZmlsZXN0cmVhbSk7CisgICAgICAgIGlmICgodGVsbF91TG9uZykgPT0gTUFYVTMyKQorICAgICAgICAgICAgcmV0dXJuIChaUE9TNjRfVCktMTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIHRlbGxfdUxvbmc7CisgICAgfQorfQorCit2b2lkIGZpbGxfemxpYl9maWxlZnVuYzY0XzMyX2RlZl9mcm9tX2ZpbGVmdW5jMzIoemxpYl9maWxlZnVuYzY0XzMyX2RlZiogcF9maWxlZnVuYzY0XzMyLGNvbnN0IHpsaWJfZmlsZWZ1bmNfZGVmKiBwX2ZpbGVmdW5jMzIpCit7CisgICAgcF9maWxlZnVuYzY0XzMyLT56ZmlsZV9mdW5jNjQuem9wZW42NF9maWxlID0gTlVMTDsKKyAgICBwX2ZpbGVmdW5jNjRfMzItPnpvcGVuMzJfZmlsZSA9IHBfZmlsZWZ1bmMzMi0+em9wZW5fZmlsZTsKKyAgICBwX2ZpbGVmdW5jNjRfMzItPnpmaWxlX2Z1bmM2NC56ZXJyb3JfZmlsZSA9IHBfZmlsZWZ1bmMzMi0+emVycm9yX2ZpbGU7CisgICAgcF9maWxlZnVuYzY0XzMyLT56ZmlsZV9mdW5jNjQuenJlYWRfZmlsZSA9IHBfZmlsZWZ1bmMzMi0+enJlYWRfZmlsZTsKKyAgICBwX2ZpbGVmdW5jNjRfMzItPnpmaWxlX2Z1bmM2NC56d3JpdGVfZmlsZSA9IHBfZmlsZWZ1bmMzMi0+endyaXRlX2ZpbGU7CisgICAgcF9maWxlZnVuYzY0XzMyLT56ZmlsZV9mdW5jNjQuenRlbGw2NF9maWxlID0gTlVMTDsKKyAgICBwX2ZpbGVmdW5jNjRfMzItPnpmaWxlX2Z1bmM2NC56c2VlazY0X2ZpbGUgPSBOVUxMOworICAgIHBfZmlsZWZ1bmM2NF8zMi0+emZpbGVfZnVuYzY0LnpjbG9zZV9maWxlID0gcF9maWxlZnVuYzMyLT56Y2xvc2VfZmlsZTsKKyAgICBwX2ZpbGVmdW5jNjRfMzItPnpmaWxlX2Z1bmM2NC56ZXJyb3JfZmlsZSA9IHBfZmlsZWZ1bmMzMi0+emVycm9yX2ZpbGU7CisgICAgcF9maWxlZnVuYzY0XzMyLT56ZmlsZV9mdW5jNjQub3BhcXVlID0gcF9maWxlZnVuYzMyLT5vcGFxdWU7CisgICAgcF9maWxlZnVuYzY0XzMyLT56c2VlazMyX2ZpbGUgPSBwX2ZpbGVmdW5jMzItPnpzZWVrX2ZpbGU7CisgICAgcF9maWxlZnVuYzY0XzMyLT56dGVsbDMyX2ZpbGUgPSBwX2ZpbGVmdW5jMzItPnp0ZWxsX2ZpbGU7Cit9CisKKworCitzdGF0aWMgdm9pZHBmICBaQ0FMTEJBQ0sgZm9wZW5fZmlsZV9mdW5jIE9GKCh2b2lkcGYgb3BhcXVlLCBjb25zdCBjaGFyKiBmaWxlbmFtZSwgaW50IG1vZGUpKTsKK3N0YXRpYyB1TG9uZyAgIFpDQUxMQkFDSyBmcmVhZF9maWxlX2Z1bmMgT0YoKHZvaWRwZiBvcGFxdWUsIHZvaWRwZiBzdHJlYW0sIHZvaWQqIGJ1ZiwgdUxvbmcgc2l6ZSkpOworc3RhdGljIHVMb25nICAgWkNBTExCQUNLIGZ3cml0ZV9maWxlX2Z1bmMgT0YoKHZvaWRwZiBvcGFxdWUsIHZvaWRwZiBzdHJlYW0sIGNvbnN0IHZvaWQqIGJ1Zix1TG9uZyBzaXplKSk7CitzdGF0aWMgWlBPUzY0X1QgWkNBTExCQUNLIGZ0ZWxsNjRfZmlsZV9mdW5jIE9GKCh2b2lkcGYgb3BhcXVlLCB2b2lkcGYgc3RyZWFtKSk7CitzdGF0aWMgbG9uZyAgICBaQ0FMTEJBQ0sgZnNlZWs2NF9maWxlX2Z1bmMgT0YoKHZvaWRwZiBvcGFxdWUsIHZvaWRwZiBzdHJlYW0sIFpQT1M2NF9UIG9mZnNldCwgaW50IG9yaWdpbikpOworc3RhdGljIGludCAgICAgWkNBTExCQUNLIGZjbG9zZV9maWxlX2Z1bmMgT0YoKHZvaWRwZiBvcGFxdWUsIHZvaWRwZiBzdHJlYW0pKTsKK3N0YXRpYyBpbnQgICAgIFpDQUxMQkFDSyBmZXJyb3JfZmlsZV9mdW5jIE9GKCh2b2lkcGYgb3BhcXVlLCB2b2lkcGYgc3RyZWFtKSk7CisKK3N0YXRpYyB2b2lkcGYgWkNBTExCQUNLIGZvcGVuX2ZpbGVfZnVuYyAodm9pZHBmIG9wYXF1ZSwgY29uc3QgY2hhciogZmlsZW5hbWUsIGludCBtb2RlKQoreworICAgICh2b2lkKW9wYXF1ZTsKKyAgICBGSUxFKiBmaWxlID0gTlVMTDsKKyAgICBjb25zdCBjaGFyKiBtb2RlX2ZvcGVuID0gTlVMTDsKKyAgICBpZiAoKG1vZGUgJiBaTElCX0ZJTEVGVU5DX01PREVfUkVBRFdSSVRFRklMVEVSKT09WkxJQl9GSUxFRlVOQ19NT0RFX1JFQUQpCisgICAgICAgIG1vZGVfZm9wZW4gPSAicmIiOworICAgIGVsc2UKKyAgICBpZiAobW9kZSAmIFpMSUJfRklMRUZVTkNfTU9ERV9FWElTVElORykKKyAgICAgICAgbW9kZV9mb3BlbiA9ICJyK2IiOworICAgIGVsc2UKKyAgICBpZiAobW9kZSAmIFpMSUJfRklMRUZVTkNfTU9ERV9DUkVBVEUpCisgICAgICAgIG1vZGVfZm9wZW4gPSAid2IiOworCisgICAgaWYgKChmaWxlbmFtZSE9TlVMTCkgJiYgKG1vZGVfZm9wZW4gIT0gTlVMTCkpCisgICAgICAgIGZpbGUgPSBmb3BlbihmaWxlbmFtZSwgbW9kZV9mb3Blbik7CisgICAgcmV0dXJuIGZpbGU7Cit9CisKK3N0YXRpYyB2b2lkcGYgWkNBTExCQUNLIGZvcGVuNjRfZmlsZV9mdW5jICh2b2lkcGYgb3BhcXVlLCBjb25zdCB2b2lkKiBmaWxlbmFtZSwgaW50IG1vZGUpCit7CisgICAgKHZvaWQpb3BhcXVlOworICAgIEZJTEUqIGZpbGUgPSBOVUxMOworICAgIGNvbnN0IGNoYXIqIG1vZGVfZm9wZW4gPSBOVUxMOworICAgIGlmICgobW9kZSAmIFpMSUJfRklMRUZVTkNfTU9ERV9SRUFEV1JJVEVGSUxURVIpPT1aTElCX0ZJTEVGVU5DX01PREVfUkVBRCkKKyAgICAgICAgbW9kZV9mb3BlbiA9ICJyYiI7CisgICAgZWxzZQorICAgIGlmIChtb2RlICYgWkxJQl9GSUxFRlVOQ19NT0RFX0VYSVNUSU5HKQorICAgICAgICBtb2RlX2ZvcGVuID0gInIrYiI7CisgICAgZWxzZQorICAgIGlmIChtb2RlICYgWkxJQl9GSUxFRlVOQ19NT0RFX0NSRUFURSkKKyAgICAgICAgbW9kZV9mb3BlbiA9ICJ3YiI7CisKKyAgICBpZiAoKGZpbGVuYW1lIT1OVUxMKSAmJiAobW9kZV9mb3BlbiAhPSBOVUxMKSkKKyAgICAgICAgZmlsZSA9IEZPUEVOX0ZVTkMoKGNvbnN0IGNoYXIqKWZpbGVuYW1lLCBtb2RlX2ZvcGVuKTsKKyAgICByZXR1cm4gZmlsZTsKK30KKworCitzdGF0aWMgdUxvbmcgWkNBTExCQUNLIGZyZWFkX2ZpbGVfZnVuYyAodm9pZHBmIG9wYXF1ZSwgdm9pZHBmIHN0cmVhbSwgdm9pZCogYnVmLCB1TG9uZyBzaXplKQoreworICAgICh2b2lkKW9wYXF1ZTsKKyAgICB1TG9uZyByZXQ7CisgICAgcmV0ID0gKHVMb25nKWZyZWFkKGJ1ZiwgMSwgKHNpemVfdClzaXplLCAoRklMRSAqKXN0cmVhbSk7CisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIHVMb25nIFpDQUxMQkFDSyBmd3JpdGVfZmlsZV9mdW5jICh2b2lkcGYgb3BhcXVlLCB2b2lkcGYgc3RyZWFtLCBjb25zdCB2b2lkKiBidWYsIHVMb25nIHNpemUpCit7CisgICAgKHZvaWQpb3BhcXVlOworICAgIHVMb25nIHJldDsKKyAgICByZXQgPSAodUxvbmcpZndyaXRlKGJ1ZiwgMSwgKHNpemVfdClzaXplLCAoRklMRSAqKXN0cmVhbSk7CisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGxvbmcgWkNBTExCQUNLIGZ0ZWxsX2ZpbGVfZnVuYyAodm9pZHBmIG9wYXF1ZSwgdm9pZHBmIHN0cmVhbSkKK3sKKyAgICAodm9pZClvcGFxdWU7CisgICAgbG9uZyByZXQ7CisgICAgcmV0ID0gZnRlbGwoKEZJTEUgKilzdHJlYW0pOworICAgIHJldHVybiByZXQ7Cit9CisKKworc3RhdGljIFpQT1M2NF9UIFpDQUxMQkFDSyBmdGVsbDY0X2ZpbGVfZnVuYyAodm9pZHBmIG9wYXF1ZSwgdm9pZHBmIHN0cmVhbSkKK3sKKyAgICAodm9pZClvcGFxdWU7CisgICAgWlBPUzY0X1QgcmV0OworICAgIHJldCA9IChaUE9TNjRfVClGVEVMTE9fRlVOQygoRklMRSAqKXN0cmVhbSk7CisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGxvbmcgWkNBTExCQUNLIGZzZWVrX2ZpbGVfZnVuYyAodm9pZHBmICBvcGFxdWUsIHZvaWRwZiBzdHJlYW0sIHVMb25nIG9mZnNldCwgaW50IG9yaWdpbikKK3sKKyAgICAodm9pZClvcGFxdWU7CisgICAgaW50IGZzZWVrX29yaWdpbj0wOworICAgIGxvbmcgcmV0OworICAgIHN3aXRjaCAob3JpZ2luKQorICAgIHsKKyAgICBjYXNlIFpMSUJfRklMRUZVTkNfU0VFS19DVVIgOgorICAgICAgICBmc2Vla19vcmlnaW4gPSBTRUVLX0NVUjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBaTElCX0ZJTEVGVU5DX1NFRUtfRU5EIDoKKyAgICAgICAgZnNlZWtfb3JpZ2luID0gU0VFS19FTkQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWkxJQl9GSUxFRlVOQ19TRUVLX1NFVCA6CisgICAgICAgIGZzZWVrX29yaWdpbiA9IFNFRUtfU0VUOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OiByZXR1cm4gLTE7CisgICAgfQorICAgIHJldCA9IDA7CisgICAgaWYgKGZzZWVrKChGSUxFICopc3RyZWFtLCAobG9uZylvZmZzZXQsIGZzZWVrX29yaWdpbikgIT0gMCkKKyAgICAgICAgcmV0ID0gLTE7CisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGxvbmcgWkNBTExCQUNLIGZzZWVrNjRfZmlsZV9mdW5jICh2b2lkcGYgIG9wYXF1ZSwgdm9pZHBmIHN0cmVhbSwgWlBPUzY0X1Qgb2Zmc2V0LCBpbnQgb3JpZ2luKQoreworICAgICh2b2lkKW9wYXF1ZTsKKyAgICBpbnQgZnNlZWtfb3JpZ2luPTA7CisgICAgbG9uZyByZXQ7CisgICAgc3dpdGNoIChvcmlnaW4pCisgICAgeworICAgIGNhc2UgWkxJQl9GSUxFRlVOQ19TRUVLX0NVUiA6CisgICAgICAgIGZzZWVrX29yaWdpbiA9IFNFRUtfQ1VSOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFpMSUJfRklMRUZVTkNfU0VFS19FTkQgOgorICAgICAgICBmc2Vla19vcmlnaW4gPSBTRUVLX0VORDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBaTElCX0ZJTEVGVU5DX1NFRUtfU0VUIDoKKyAgICAgICAgZnNlZWtfb3JpZ2luID0gU0VFS19TRVQ7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6IHJldHVybiAtMTsKKyAgICB9CisgICAgcmV0ID0gMDsKKworICAgIGlmKEZTRUVLT19GVU5DKChGSUxFICopc3RyZWFtLCAobG9uZylvZmZzZXQsIGZzZWVrX29yaWdpbikgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IC0xOworCisgICAgcmV0dXJuIHJldDsKK30KKworCitzdGF0aWMgaW50IFpDQUxMQkFDSyBmY2xvc2VfZmlsZV9mdW5jICh2b2lkcGYgb3BhcXVlLCB2b2lkcGYgc3RyZWFtKQoreworICAgICh2b2lkKW9wYXF1ZTsKKyAgICBpbnQgcmV0OworICAgIHJldCA9IGZjbG9zZSgoRklMRSAqKXN0cmVhbSk7CisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBaQ0FMTEJBQ0sgZmVycm9yX2ZpbGVfZnVuYyAodm9pZHBmIG9wYXF1ZSwgdm9pZHBmIHN0cmVhbSkKK3sKKyAgICAodm9pZClvcGFxdWU7CisgICAgaW50IHJldDsKKyAgICByZXQgPSBmZXJyb3IoKEZJTEUgKilzdHJlYW0pOworICAgIHJldHVybiByZXQ7Cit9CisKK3ZvaWQgZmlsbF9mb3Blbl9maWxlZnVuYyAocHpsaWJfZmlsZWZ1bmNfZGVmKQorICB6bGliX2ZpbGVmdW5jX2RlZiogcHpsaWJfZmlsZWZ1bmNfZGVmOworeworICAgIHB6bGliX2ZpbGVmdW5jX2RlZi0+em9wZW5fZmlsZSA9IGZvcGVuX2ZpbGVfZnVuYzsKKyAgICBwemxpYl9maWxlZnVuY19kZWYtPnpyZWFkX2ZpbGUgPSBmcmVhZF9maWxlX2Z1bmM7CisgICAgcHpsaWJfZmlsZWZ1bmNfZGVmLT56d3JpdGVfZmlsZSA9IGZ3cml0ZV9maWxlX2Z1bmM7CisgICAgcHpsaWJfZmlsZWZ1bmNfZGVmLT56dGVsbF9maWxlID0gZnRlbGxfZmlsZV9mdW5jOworICAgIHB6bGliX2ZpbGVmdW5jX2RlZi0+enNlZWtfZmlsZSA9IGZzZWVrX2ZpbGVfZnVuYzsKKyAgICBwemxpYl9maWxlZnVuY19kZWYtPnpjbG9zZV9maWxlID0gZmNsb3NlX2ZpbGVfZnVuYzsKKyAgICBwemxpYl9maWxlZnVuY19kZWYtPnplcnJvcl9maWxlID0gZmVycm9yX2ZpbGVfZnVuYzsKKyAgICBwemxpYl9maWxlZnVuY19kZWYtPm9wYXF1ZSA9IE5VTEw7Cit9CisKK3ZvaWQgZmlsbF9mb3BlbjY0X2ZpbGVmdW5jICh6bGliX2ZpbGVmdW5jNjRfZGVmKiAgcHpsaWJfZmlsZWZ1bmNfZGVmKQoreworICAgIHB6bGliX2ZpbGVmdW5jX2RlZi0+em9wZW42NF9maWxlID0gZm9wZW42NF9maWxlX2Z1bmM7CisgICAgcHpsaWJfZmlsZWZ1bmNfZGVmLT56cmVhZF9maWxlID0gZnJlYWRfZmlsZV9mdW5jOworICAgIHB6bGliX2ZpbGVmdW5jX2RlZi0+endyaXRlX2ZpbGUgPSBmd3JpdGVfZmlsZV9mdW5jOworICAgIHB6bGliX2ZpbGVmdW5jX2RlZi0+enRlbGw2NF9maWxlID0gZnRlbGw2NF9maWxlX2Z1bmM7CisgICAgcHpsaWJfZmlsZWZ1bmNfZGVmLT56c2VlazY0X2ZpbGUgPSBmc2VlazY0X2ZpbGVfZnVuYzsKKyAgICBwemxpYl9maWxlZnVuY19kZWYtPnpjbG9zZV9maWxlID0gZmNsb3NlX2ZpbGVfZnVuYzsKKyAgICBwemxpYl9maWxlZnVuY19kZWYtPnplcnJvcl9maWxlID0gZmVycm9yX2ZpbGVfZnVuYzsKKyAgICBwemxpYl9maWxlZnVuY19kZWYtPm9wYXF1ZSA9IE5VTEw7Cit9CmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi9taW5pemlwL2lvYXBpLmggYi9zcmMvY29udHJpYi9taW5pemlwL2lvYXBpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE0YmZhYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb250cmliL21pbml6aXAvaW9hcGkuaApAQCAtMCwwICsxLDIxMCBAQAorLyogaW9hcGkuaCAtLSBJTyBiYXNlIGZ1bmN0aW9uIGhlYWRlciBmb3IgY29tcHJlc3MvdW5jb21wcmVzcyAuemlwCisgICBwYXJ0IG9mIHRoZSBNaW5pWmlwIHByb2plY3QgLSAoIGh0dHA6Ly93d3cud2luaW1hZ2UuY29tL3pMaWJEbGwvbWluaXppcC5odG1sICkKKworICAgICAgICAgQ29weXJpZ2h0IChDKSAxOTk4LTIwMTAgR2lsbGVzIFZvbGxhbnQgKG1pbml6aXApICggaHR0cDovL3d3dy53aW5pbWFnZS5jb20vekxpYkRsbC9taW5pemlwLmh0bWwgKQorCisgICAgICAgICBNb2RpZmljYXRpb25zIGZvciBaaXA2NCBzdXBwb3J0CisgICAgICAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBNYXRoaWFzIFN2ZW5zc29uICggaHR0cDovL3Jlc3VsdDQyLmNvbSApCisKKyAgICAgICAgIEZvciBtb3JlIGluZm8gcmVhZCBNaW5pWmlwX2luZm8udHh0CisKKyAgICAgICAgIENoYW5nZXMKKworICAgIE9jdC0yMDA5IC0gRGVmaW5lZCBaUE9TNjRfVCB0byBmcG9zX3Qgb24gd2luZG93cyBhbmQgdV9pbnQ2NF90IG9uIGxpbnV4LiAobWlnaHQgbmVlZCB0byBmaW5kIGEgYmV0dGVyIHdoeSBmb3IgdGhpcykKKyAgICBPY3QtMjAwOSAtIENoYW5nZSB0byBmc2Vla282NCwgZnRlbGxvNjQgYW5kIGZvcGVuNjQgc28gbGFyZ2UgZmlsZXMgd291bGQgd29yayBvbiBsaW51eC4KKyAgICAgICAgICAgICAgIE1vcmUgaWYvZGVmIHNlY3Rpb24gbWF5IGJlIG5lZWRlZCB0byBzdXBwb3J0IG90aGVyIHBsYXRmb3JtcworICAgIE9jdC0yMDA5IC0gRGVmaW5lZCBmeHh4eDY0IGNhbGxzIHRvIG5vcm1hbCBmb3Blbi9mdGVsbC9mc2VlayBzbyB0aGV5IHdvdWxkIGNvbXBpbGUgb24gd2luZG93cy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGJ1dCB5b3Ugc2hvdWxkIHVzZSBpb3dpbjMyLmMgZm9yIHdpbmRvd3MgaW5zdGVhZCkKKworKi8KKworI2lmbmRlZiBfWkxJQklPQVBJNjRfSAorI2RlZmluZSBfWkxJQklPQVBJNjRfSAorCisjaWYgKCFkZWZpbmVkKF9XSU4zMikpICYmICghZGVmaW5lZChXSU4zMikpICYmICghZGVmaW5lZChfX0FQUExFX18pKQorCisgIC8vIExpbnV4IG5lZWRzIHRoaXMgdG8gc3VwcG9ydCBmaWxlIG9wZXJhdGlvbiBvbiBmaWxlcyBsYXJnZXIgdGhlbiA0K0dCCisgIC8vIEJ1dCBtaWdodCBuZWVkIGJldHRlciBpZi9kZWYgdG8gc2VsZWN0IGp1c3QgdGhlIHBsYXRmb3JtcyB0aGF0IG5lZWRzIHRoZW0uCisKKyAgICAgICAgI2lmbmRlZiBfX1VTRV9GSUxFX09GRlNFVDY0CisgICAgICAgICAgICAgICAgI2RlZmluZSBfX1VTRV9GSUxFX09GRlNFVDY0CisgICAgICAgICNlbmRpZgorICAgICAgICAjaWZuZGVmIF9fVVNFX0xBUkdFRklMRTY0CisgICAgICAgICAgICAgICAgI2RlZmluZSBfX1VTRV9MQVJHRUZJTEU2NAorICAgICAgICAjZW5kaWYKKyAgICAgICAgI2lmbmRlZiBfTEFSR0VGSUxFNjRfU09VUkNFCisgICAgICAgICAgICAgICAgI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFCisgICAgICAgICNlbmRpZgorICAgICAgICAjaWZuZGVmIF9GSUxFX09GRlNFVF9CSVQKKyAgICAgICAgICAgICAgICAjZGVmaW5lIF9GSUxFX09GRlNFVF9CSVQgNjQKKyAgICAgICAgI2VuZGlmCisKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJ6bGliLmgiCisKKyNpZiBkZWZpbmVkKFVTRV9GSUxFMzJBUEkpCisjZGVmaW5lIGZvcGVuNjQgZm9wZW4KKyNkZWZpbmUgZnRlbGxvNjQgZnRlbGwKKyNkZWZpbmUgZnNlZWtvNjQgZnNlZWsKKyNlbHNlCisjaWZkZWYgX19GcmVlQlNEX18KKyNkZWZpbmUgZm9wZW42NCBmb3BlbgorI2RlZmluZSBmdGVsbG82NCBmdGVsbG8KKyNkZWZpbmUgZnNlZWtvNjQgZnNlZWtvCisjZW5kaWYKKyNpZmRlZiBfTVNDX1ZFUgorICNkZWZpbmUgZm9wZW42NCBmb3BlbgorICNpZiAoX01TQ19WRVIgPj0gMTQwMCkgJiYgKCEoZGVmaW5lZChOT19NU0NWRVJfRklMRTY0X0ZVTkMpKSkKKyAgI2RlZmluZSBmdGVsbG82NCBfZnRlbGxpNjQKKyAgI2RlZmluZSBmc2Vla282NCBfZnNlZWtpNjQKKyAjZWxzZSAvLyBvbGQgTVNDCisgICNkZWZpbmUgZnRlbGxvNjQgZnRlbGwKKyAgI2RlZmluZSBmc2Vla282NCBmc2VlaworICNlbmRpZgorI2VuZGlmCisjZW5kaWYKKworLyoKKyNpZm5kZWYgWlBPUzY0X1QKKyAgI2lmZGVmIF9XSU4zMgorICAgICAgICAgICAgICAgICNkZWZpbmUgWlBPUzY0X1QgZnBvc190CisgICNlbHNlCisgICAgI2luY2x1ZGUgPHN0ZGludC5oPgorICAgICNkZWZpbmUgWlBPUzY0X1QgdWludDY0X3QKKyAgI2VuZGlmCisjZW5kaWYKKyovCisKKyNpZmRlZiBIQVZFX01JTklaSVA2NF9DT05GX0gKKyNpbmNsdWRlICJtejY0Y29uZi5oIgorI2VuZGlmCisKKy8qIGEgdHlwZSBjaG9vc2VuIGJ5IERFRklORSAqLworI2lmZGVmIEhBVkVfNjRCSVRfSU5UX0NVU1RPTQordHlwZWRlZiAgNjRCSVRfSU5UX0NVU1RPTV9UWVBFIFpQT1M2NF9UOworI2Vsc2UKKyNpZmRlZiBIQVNfU1RESU5UX0gKKyNpbmNsdWRlICJzdGRpbnQuaCIKK3R5cGVkZWYgdWludDY0X3QgWlBPUzY0X1Q7CisjZWxzZQorCisKKworI2lmIGRlZmluZWQoX01TQ19WRVIpIHx8IGRlZmluZWQoX19CT1JMQU5EQ19fKQordHlwZWRlZiB1bnNpZ25lZCBfX2ludDY0IFpQT1M2NF9UOworI2Vsc2UKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBaUE9TNjRfVDsKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKworLyogTWF4aW11bSB1bnNpZ25lZCAzMi1iaXQgdmFsdWUgdXNlZCBhcyBwbGFjZWhvbGRlciBmb3IgemlwNjQgKi8KKyNpZm5kZWYgTUFYVTMyCisjZGVmaW5lIE1BWFUzMiAoMHhmZmZmZmZmZikKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKworI2RlZmluZSBaTElCX0ZJTEVGVU5DX1NFRUtfQ1VSICgxKQorI2RlZmluZSBaTElCX0ZJTEVGVU5DX1NFRUtfRU5EICgyKQorI2RlZmluZSBaTElCX0ZJTEVGVU5DX1NFRUtfU0VUICgwKQorCisjZGVmaW5lIFpMSUJfRklMRUZVTkNfTU9ERV9SRUFEICAgICAgKDEpCisjZGVmaW5lIFpMSUJfRklMRUZVTkNfTU9ERV9XUklURSAgICAgKDIpCisjZGVmaW5lIFpMSUJfRklMRUZVTkNfTU9ERV9SRUFEV1JJVEVGSUxURVIgKDMpCisKKyNkZWZpbmUgWkxJQl9GSUxFRlVOQ19NT0RFX0VYSVNUSU5HICg0KQorI2RlZmluZSBaTElCX0ZJTEVGVU5DX01PREVfQ1JFQVRFICAgKDgpCisKKworI2lmbmRlZiBaQ0FMTEJBQ0sKKyAjaWYgKGRlZmluZWQoV0lOMzIpIHx8IGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkIChXSU5ET1dTKSB8fCBkZWZpbmVkIChfV0lORE9XUykpICYmIGRlZmluZWQoQ0FMTEJBQ0spICYmIGRlZmluZWQgKFVTRVdJTkRPV1NfQ0FMTEJBQ0spCisgICAjZGVmaW5lIFpDQUxMQkFDSyBDQUxMQkFDSworICNlbHNlCisgICAjZGVmaW5lIFpDQUxMQkFDSworICNlbmRpZgorI2VuZGlmCisKKworCisKK3R5cGVkZWYgdm9pZHBmICAgKFpDQUxMQkFDSyAqb3Blbl9maWxlX2Z1bmMpICAgICAgT0YoKHZvaWRwZiBvcGFxdWUsIGNvbnN0IGNoYXIqIGZpbGVuYW1lLCBpbnQgbW9kZSkpOwordHlwZWRlZiB1TG9uZyAgICAoWkNBTExCQUNLICpyZWFkX2ZpbGVfZnVuYykgICAgICBPRigodm9pZHBmIG9wYXF1ZSwgdm9pZHBmIHN0cmVhbSwgdm9pZCogYnVmLCB1TG9uZyBzaXplKSk7Cit0eXBlZGVmIHVMb25nICAgIChaQ0FMTEJBQ0sgKndyaXRlX2ZpbGVfZnVuYykgICAgIE9GKCh2b2lkcGYgb3BhcXVlLCB2b2lkcGYgc3RyZWFtLCBjb25zdCB2b2lkKiBidWYsIHVMb25nIHNpemUpKTsKK3R5cGVkZWYgaW50ICAgICAgKFpDQUxMQkFDSyAqY2xvc2VfZmlsZV9mdW5jKSAgICAgT0YoKHZvaWRwZiBvcGFxdWUsIHZvaWRwZiBzdHJlYW0pKTsKK3R5cGVkZWYgaW50ICAgICAgKFpDQUxMQkFDSyAqdGVzdGVycm9yX2ZpbGVfZnVuYykgT0YoKHZvaWRwZiBvcGFxdWUsIHZvaWRwZiBzdHJlYW0pKTsKKwordHlwZWRlZiBsb25nICAgICAoWkNBTExCQUNLICp0ZWxsX2ZpbGVfZnVuYykgICAgICBPRigodm9pZHBmIG9wYXF1ZSwgdm9pZHBmIHN0cmVhbSkpOwordHlwZWRlZiBsb25nICAgICAoWkNBTExCQUNLICpzZWVrX2ZpbGVfZnVuYykgICAgICBPRigodm9pZHBmIG9wYXF1ZSwgdm9pZHBmIHN0cmVhbSwgdUxvbmcgb2Zmc2V0LCBpbnQgb3JpZ2luKSk7CisKKworLyogaGVyZSBpcyB0aGUgIm9sZCIgMzIgYml0cyBzdHJ1Y3R1cmUgc3RydWN0dXJlICovCit0eXBlZGVmIHN0cnVjdCB6bGliX2ZpbGVmdW5jX2RlZl9zCit7CisgICAgb3Blbl9maWxlX2Z1bmMgICAgICB6b3Blbl9maWxlOworICAgIHJlYWRfZmlsZV9mdW5jICAgICAgenJlYWRfZmlsZTsKKyAgICB3cml0ZV9maWxlX2Z1bmMgICAgIHp3cml0ZV9maWxlOworICAgIHRlbGxfZmlsZV9mdW5jICAgICAgenRlbGxfZmlsZTsKKyAgICBzZWVrX2ZpbGVfZnVuYyAgICAgIHpzZWVrX2ZpbGU7CisgICAgY2xvc2VfZmlsZV9mdW5jICAgICB6Y2xvc2VfZmlsZTsKKyAgICB0ZXN0ZXJyb3JfZmlsZV9mdW5jIHplcnJvcl9maWxlOworICAgIHZvaWRwZiAgICAgICAgICAgICAgb3BhcXVlOworfSB6bGliX2ZpbGVmdW5jX2RlZjsKKwordHlwZWRlZiBaUE9TNjRfVCAoWkNBTExCQUNLICp0ZWxsNjRfZmlsZV9mdW5jKSAgICBPRigodm9pZHBmIG9wYXF1ZSwgdm9pZHBmIHN0cmVhbSkpOwordHlwZWRlZiBsb25nICAgICAoWkNBTExCQUNLICpzZWVrNjRfZmlsZV9mdW5jKSAgICBPRigodm9pZHBmIG9wYXF1ZSwgdm9pZHBmIHN0cmVhbSwgWlBPUzY0X1Qgb2Zmc2V0LCBpbnQgb3JpZ2luKSk7Cit0eXBlZGVmIHZvaWRwZiAgIChaQ0FMTEJBQ0sgKm9wZW42NF9maWxlX2Z1bmMpICAgIE9GKCh2b2lkcGYgb3BhcXVlLCBjb25zdCB2b2lkKiBmaWxlbmFtZSwgaW50IG1vZGUpKTsKKwordHlwZWRlZiBzdHJ1Y3QgemxpYl9maWxlZnVuYzY0X2RlZl9zCit7CisgICAgb3BlbjY0X2ZpbGVfZnVuYyAgICB6b3BlbjY0X2ZpbGU7CisgICAgcmVhZF9maWxlX2Z1bmMgICAgICB6cmVhZF9maWxlOworICAgIHdyaXRlX2ZpbGVfZnVuYyAgICAgendyaXRlX2ZpbGU7CisgICAgdGVsbDY0X2ZpbGVfZnVuYyAgICB6dGVsbDY0X2ZpbGU7CisgICAgc2VlazY0X2ZpbGVfZnVuYyAgICB6c2VlazY0X2ZpbGU7CisgICAgY2xvc2VfZmlsZV9mdW5jICAgICB6Y2xvc2VfZmlsZTsKKyAgICB0ZXN0ZXJyb3JfZmlsZV9mdW5jIHplcnJvcl9maWxlOworICAgIHZvaWRwZiAgICAgICAgICAgICAgb3BhcXVlOworfSB6bGliX2ZpbGVmdW5jNjRfZGVmOworCit2b2lkIGZpbGxfZm9wZW42NF9maWxlZnVuYyBPRigoemxpYl9maWxlZnVuYzY0X2RlZiogcHpsaWJfZmlsZWZ1bmNfZGVmKSk7Cit2b2lkIGZpbGxfZm9wZW5fZmlsZWZ1bmMgT0YoKHpsaWJfZmlsZWZ1bmNfZGVmKiBwemxpYl9maWxlZnVuY19kZWYpKTsKKworLyogbm93IGludGVybmFsIGRlZmluaXRpb24sIG9ubHkgZm9yIHppcC5jIGFuZCB1bnppcC5oICovCit0eXBlZGVmIHN0cnVjdCB6bGliX2ZpbGVmdW5jNjRfMzJfZGVmX3MKK3sKKyAgICB6bGliX2ZpbGVmdW5jNjRfZGVmIHpmaWxlX2Z1bmM2NDsKKyAgICBvcGVuX2ZpbGVfZnVuYyAgICAgIHpvcGVuMzJfZmlsZTsKKyAgICB0ZWxsX2ZpbGVfZnVuYyAgICAgIHp0ZWxsMzJfZmlsZTsKKyAgICBzZWVrX2ZpbGVfZnVuYyAgICAgIHpzZWVrMzJfZmlsZTsKK30gemxpYl9maWxlZnVuYzY0XzMyX2RlZjsKKworCisjZGVmaW5lIFpSRUFENjQoZmlsZWZ1bmMsZmlsZXN0cmVhbSxidWYsc2l6ZSkgICAgICgoKigoZmlsZWZ1bmMpLnpmaWxlX2Z1bmM2NC56cmVhZF9maWxlKSkgICAoKGZpbGVmdW5jKS56ZmlsZV9mdW5jNjQub3BhcXVlLGZpbGVzdHJlYW0sYnVmLHNpemUpKQorI2RlZmluZSBaV1JJVEU2NChmaWxlZnVuYyxmaWxlc3RyZWFtLGJ1ZixzaXplKSAgICAoKCooKGZpbGVmdW5jKS56ZmlsZV9mdW5jNjQuendyaXRlX2ZpbGUpKSAgKChmaWxlZnVuYykuemZpbGVfZnVuYzY0Lm9wYXF1ZSxmaWxlc3RyZWFtLGJ1ZixzaXplKSkKKy8vI2RlZmluZSBaVEVMTDY0KGZpbGVmdW5jLGZpbGVzdHJlYW0pICAgICAgICAgICAgKCgqKChmaWxlZnVuYykuenRlbGw2NF9maWxlKSkgKChmaWxlZnVuYykub3BhcXVlLGZpbGVzdHJlYW0pKQorLy8jZGVmaW5lIFpTRUVLNjQoZmlsZWZ1bmMsZmlsZXN0cmVhbSxwb3MsbW9kZSkgICAoKCooKGZpbGVmdW5jKS56c2VlazY0X2ZpbGUpKSAoKGZpbGVmdW5jKS5vcGFxdWUsZmlsZXN0cmVhbSxwb3MsbW9kZSkpCisjZGVmaW5lIFpDTE9TRTY0KGZpbGVmdW5jLGZpbGVzdHJlYW0pICAgICAgICAgICAgICgoKigoZmlsZWZ1bmMpLnpmaWxlX2Z1bmM2NC56Y2xvc2VfZmlsZSkpICAoKGZpbGVmdW5jKS56ZmlsZV9mdW5jNjQub3BhcXVlLGZpbGVzdHJlYW0pKQorI2RlZmluZSBaRVJST1I2NChmaWxlZnVuYyxmaWxlc3RyZWFtKSAgICAgICAgICAgICAoKCooKGZpbGVmdW5jKS56ZmlsZV9mdW5jNjQuemVycm9yX2ZpbGUpKSAgKChmaWxlZnVuYykuemZpbGVfZnVuYzY0Lm9wYXF1ZSxmaWxlc3RyZWFtKSkKKwordm9pZHBmIGNhbGxfem9wZW42NCBPRigoY29uc3QgemxpYl9maWxlZnVuYzY0XzMyX2RlZiogcGZpbGVmdW5jLGNvbnN0IHZvaWQqZmlsZW5hbWUsaW50IG1vZGUpKTsKK2xvbmcgICAgY2FsbF96c2VlazY0IE9GKChjb25zdCB6bGliX2ZpbGVmdW5jNjRfMzJfZGVmKiBwZmlsZWZ1bmMsdm9pZHBmIGZpbGVzdHJlYW0sIFpQT1M2NF9UIG9mZnNldCwgaW50IG9yaWdpbikpOworWlBPUzY0X1QgY2FsbF96dGVsbDY0IE9GKChjb25zdCB6bGliX2ZpbGVmdW5jNjRfMzJfZGVmKiBwZmlsZWZ1bmMsdm9pZHBmIGZpbGVzdHJlYW0pKTsKKwordm9pZCAgICBmaWxsX3psaWJfZmlsZWZ1bmM2NF8zMl9kZWZfZnJvbV9maWxlZnVuYzMyKHpsaWJfZmlsZWZ1bmM2NF8zMl9kZWYqIHBfZmlsZWZ1bmM2NF8zMixjb25zdCB6bGliX2ZpbGVmdW5jX2RlZiogcF9maWxlZnVuYzMyKTsKKworI2RlZmluZSBaT1BFTjY0KGZpbGVmdW5jLGZpbGVuYW1lLG1vZGUpICAgICAgICAgKGNhbGxfem9wZW42NCgoJihmaWxlZnVuYykpLChmaWxlbmFtZSksKG1vZGUpKSkKKyNkZWZpbmUgWlRFTEw2NChmaWxlZnVuYyxmaWxlc3RyZWFtKSAgICAgICAgICAgIChjYWxsX3p0ZWxsNjQoKCYoZmlsZWZ1bmMpKSwoZmlsZXN0cmVhbSkpKQorI2RlZmluZSBaU0VFSzY0KGZpbGVmdW5jLGZpbGVzdHJlYW0scG9zLG1vZGUpICAgKGNhbGxfenNlZWs2NCgoJihmaWxlZnVuYykpLChmaWxlc3RyZWFtKSwocG9zKSwobW9kZSkpKQorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL21pbml6aXAvaW93aW4zMi5jIGIvc3JjL2NvbnRyaWIvbWluaXppcC9pb3dpbjMyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc0ZjM5ZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb250cmliL21pbml6aXAvaW93aW4zMi5jCkBAIC0wLDAgKzEsNDYyIEBACisvKiBpb3dpbjMyLmMgLS0gSU8gYmFzZSBmdW5jdGlvbiBoZWFkZXIgZm9yIGNvbXByZXNzL3VuY29tcHJlc3MgLnppcAorICAgICBWZXJzaW9uIDEuMSwgRmVicnVhcnkgMTRoLCAyMDEwCisgICAgIHBhcnQgb2YgdGhlIE1pbmlaaXAgcHJvamVjdCAtICggaHR0cDovL3d3dy53aW5pbWFnZS5jb20vekxpYkRsbC9taW5pemlwLmh0bWwgKQorCisgICAgICAgICBDb3B5cmlnaHQgKEMpIDE5OTgtMjAxMCBHaWxsZXMgVm9sbGFudCAobWluaXppcCkgKCBodHRwOi8vd3d3LndpbmltYWdlLmNvbS96TGliRGxsL21pbml6aXAuaHRtbCApCisKKyAgICAgICAgIE1vZGlmaWNhdGlvbnMgZm9yIFppcDY0IHN1cHBvcnQKKyAgICAgICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIE1hdGhpYXMgU3ZlbnNzb24gKCBodHRwOi8vcmVzdWx0NDIuY29tICkKKworICAgICBGb3IgbW9yZSBpbmZvIHJlYWQgTWluaVppcF9pbmZvLnR4dAorCisqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlICJ6bGliLmgiCisjaW5jbHVkZSAiaW9hcGkuaCIKKyNpbmNsdWRlICJpb3dpbjMyLmgiCisKKyNpZm5kZWYgSU5WQUxJRF9IQU5ETEVfVkFMVUUKKyNkZWZpbmUgSU5WQUxJRF9IQU5ETEVfVkFMVUUgKDB4RkZGRkZGRkYpCisjZW5kaWYKKworI2lmbmRlZiBJTlZBTElEX1NFVF9GSUxFX1BPSU5URVIKKyNkZWZpbmUgSU5WQUxJRF9TRVRfRklMRV9QT0lOVEVSICgoRFdPUkQpLTEpCisjZW5kaWYKKworCisvLyBzZWUgSW5jbHVkZS9zaGFyZWQvd2luYXBpZmFtaWx5LmggaW4gdGhlIFdpbmRvd3MgS2l0CisjaWYgZGVmaW5lZChXSU5BUElfRkFNSUxZX1BBUlRJVElPTikgJiYgKCEoZGVmaW5lZChJT1dJTjMyX1VTSU5HX1dJTlJUX0FQSSkpKQorI2lmIFdJTkFQSV9GQU1JTFlfT05FX1BBUlRJVElPTihXSU5BUElfRkFNSUxZLCBXSU5BUElfUEFSVElUSU9OX0FQUCkKKyNkZWZpbmUgSU9XSU4zMl9VU0lOR19XSU5SVF9BUEkgMQorI2VuZGlmCisjZW5kaWYKKwordm9pZHBmICBaQ0FMTEJBQ0sgd2luMzJfb3Blbl9maWxlX2Z1bmMgIE9GKCh2b2lkcGYgb3BhcXVlLCBjb25zdCBjaGFyKiBmaWxlbmFtZSwgaW50IG1vZGUpKTsKK3VMb25nICAgWkNBTExCQUNLIHdpbjMyX3JlYWRfZmlsZV9mdW5jICBPRigodm9pZHBmIG9wYXF1ZSwgdm9pZHBmIHN0cmVhbSwgdm9pZCogYnVmLCB1TG9uZyBzaXplKSk7Cit1TG9uZyAgIFpDQUxMQkFDSyB3aW4zMl93cml0ZV9maWxlX2Z1bmMgT0YoKHZvaWRwZiBvcGFxdWUsIHZvaWRwZiBzdHJlYW0sIGNvbnN0IHZvaWQqIGJ1ZiwgdUxvbmcgc2l6ZSkpOworWlBPUzY0X1QgWkNBTExCQUNLIHdpbjMyX3RlbGw2NF9maWxlX2Z1bmMgIE9GKCh2b2lkcGYgb3BhcXVlLCB2b2lkcGYgc3RyZWFtKSk7Citsb25nICAgIFpDQUxMQkFDSyB3aW4zMl9zZWVrNjRfZmlsZV9mdW5jICBPRigodm9pZHBmIG9wYXF1ZSwgdm9pZHBmIHN0cmVhbSwgWlBPUzY0X1Qgb2Zmc2V0LCBpbnQgb3JpZ2luKSk7CitpbnQgICAgIFpDQUxMQkFDSyB3aW4zMl9jbG9zZV9maWxlX2Z1bmMgT0YoKHZvaWRwZiBvcGFxdWUsIHZvaWRwZiBzdHJlYW0pKTsKK2ludCAgICAgWkNBTExCQUNLIHdpbjMyX2Vycm9yX2ZpbGVfZnVuYyBPRigodm9pZHBmIG9wYXF1ZSwgdm9pZHBmIHN0cmVhbSkpOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIEhBTkRMRSBoZjsKKyAgICBpbnQgZXJyb3I7Cit9IFdJTjMyRklMRV9JT1dJTjsKKworCitzdGF0aWMgdm9pZCB3aW4zMl90cmFuc2xhdGVfb3Blbl9tb2RlKGludCBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRCogbHBkd0Rlc2lyZWRBY2Nlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERXT1JEKiBscGR3Q3JlYXRpb25EaXNwb3NpdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkQqIGxwZHdTaGFyZU1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERXT1JEKiBscGR3RmxhZ3NBbmRBdHRyaWJ1dGVzKQoreworICAgICpscGR3RGVzaXJlZEFjY2VzcyA9ICpscGR3U2hhcmVNb2RlID0gKmxwZHdGbGFnc0FuZEF0dHJpYnV0ZXMgPSAqbHBkd0NyZWF0aW9uRGlzcG9zaXRpb24gPSAwOworCisgICAgaWYgKChtb2RlICYgWkxJQl9GSUxFRlVOQ19NT0RFX1JFQURXUklURUZJTFRFUik9PVpMSUJfRklMRUZVTkNfTU9ERV9SRUFEKQorICAgIHsKKyAgICAgICAgKmxwZHdEZXNpcmVkQWNjZXNzID0gR0VORVJJQ19SRUFEOworICAgICAgICAqbHBkd0NyZWF0aW9uRGlzcG9zaXRpb24gPSBPUEVOX0VYSVNUSU5HOworICAgICAgICAqbHBkd1NoYXJlTW9kZSA9IEZJTEVfU0hBUkVfUkVBRDsKKyAgICB9CisgICAgZWxzZSBpZiAobW9kZSAmIFpMSUJfRklMRUZVTkNfTU9ERV9FWElTVElORykKKyAgICB7CisgICAgICAgICpscGR3RGVzaXJlZEFjY2VzcyA9IEdFTkVSSUNfV1JJVEUgfCBHRU5FUklDX1JFQUQ7CisgICAgICAgICpscGR3Q3JlYXRpb25EaXNwb3NpdGlvbiA9IE9QRU5fRVhJU1RJTkc7CisgICAgfQorICAgIGVsc2UgaWYgKG1vZGUgJiBaTElCX0ZJTEVGVU5DX01PREVfQ1JFQVRFKQorICAgIHsKKyAgICAgICAgKmxwZHdEZXNpcmVkQWNjZXNzID0gR0VORVJJQ19XUklURSB8IEdFTkVSSUNfUkVBRDsKKyAgICAgICAgKmxwZHdDcmVhdGlvbkRpc3Bvc2l0aW9uID0gQ1JFQVRFX0FMV0FZUzsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkcGYgd2luMzJfYnVpbGRfaW93aW4oSEFORExFIGhGaWxlKQoreworICAgIHZvaWRwZiByZXQ9TlVMTDsKKworICAgIGlmICgoaEZpbGUgIT0gTlVMTCkgJiYgKGhGaWxlICE9IElOVkFMSURfSEFORExFX1ZBTFVFKSkKKyAgICB7CisgICAgICAgIFdJTjMyRklMRV9JT1dJTiB3MzJmaW93OworICAgICAgICB3MzJmaW93LmhmID0gaEZpbGU7CisgICAgICAgIHczMmZpb3cuZXJyb3IgPSAwOworICAgICAgICByZXQgPSBtYWxsb2Moc2l6ZW9mKFdJTjMyRklMRV9JT1dJTikpOworCisgICAgICAgIGlmIChyZXQ9PU5VTEwpCisgICAgICAgICAgICBDbG9zZUhhbmRsZShoRmlsZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICooKFdJTjMyRklMRV9JT1dJTiopcmV0KSA9IHczMmZpb3c7CisgICAgfQorICAgIHJldHVybiByZXQ7Cit9CisKK3ZvaWRwZiBaQ0FMTEJBQ0sgd2luMzJfb3BlbjY0X2ZpbGVfZnVuYyAodm9pZHBmIG9wYXF1ZSxjb25zdCB2b2lkKiBmaWxlbmFtZSxpbnQgbW9kZSkKK3sKKyAgICBjb25zdCBjaGFyKiBtb2RlX2ZvcGVuID0gTlVMTDsKKyAgICBEV09SRCBkd0Rlc2lyZWRBY2Nlc3MsZHdDcmVhdGlvbkRpc3Bvc2l0aW9uLGR3U2hhcmVNb2RlLGR3RmxhZ3NBbmRBdHRyaWJ1dGVzIDsKKyAgICBIQU5ETEUgaEZpbGUgPSBOVUxMOworCisgICAgd2luMzJfdHJhbnNsYXRlX29wZW5fbW9kZShtb2RlLCZkd0Rlc2lyZWRBY2Nlc3MsJmR3Q3JlYXRpb25EaXNwb3NpdGlvbiwmZHdTaGFyZU1vZGUsJmR3RmxhZ3NBbmRBdHRyaWJ1dGVzKTsKKworI2lmZGVmIElPV0lOMzJfVVNJTkdfV0lOUlRfQVBJCisjaWZkZWYgVU5JQ09ERQorICAgIGlmICgoZmlsZW5hbWUhPU5VTEwpICYmIChkd0Rlc2lyZWRBY2Nlc3MgIT0gMCkpCisgICAgICAgIGhGaWxlID0gQ3JlYXRlRmlsZTIoKExQQ1RTVFIpZmlsZW5hbWUsIGR3RGVzaXJlZEFjY2VzcywgZHdTaGFyZU1vZGUsIGR3Q3JlYXRpb25EaXNwb3NpdGlvbiwgTlVMTCk7CisjZWxzZQorICAgIGlmICgoZmlsZW5hbWUhPU5VTEwpICYmIChkd0Rlc2lyZWRBY2Nlc3MgIT0gMCkpCisgICAgeworICAgICAgICBXQ0hBUiBmaWxlbmFtZVdbRklMRU5BTUVfTUFYICsgMHgyMDAgKyAxXTsKKyAgICAgICAgTXVsdGlCeXRlVG9XaWRlQ2hhcihDUF9BQ1AsMCwoY29uc3QgY2hhciopZmlsZW5hbWUsLTEsZmlsZW5hbWVXLEZJTEVOQU1FX01BWCArIDB4MjAwKTsKKyAgICAgICAgaEZpbGUgPSBDcmVhdGVGaWxlMihmaWxlbmFtZVcsIGR3RGVzaXJlZEFjY2VzcywgZHdTaGFyZU1vZGUsIGR3Q3JlYXRpb25EaXNwb3NpdGlvbiwgTlVMTCk7CisgICAgfQorI2VuZGlmCisjZWxzZQorICAgIGlmICgoZmlsZW5hbWUhPU5VTEwpICYmIChkd0Rlc2lyZWRBY2Nlc3MgIT0gMCkpCisgICAgICAgIGhGaWxlID0gQ3JlYXRlRmlsZSgoTFBDVFNUUilmaWxlbmFtZSwgZHdEZXNpcmVkQWNjZXNzLCBkd1NoYXJlTW9kZSwgTlVMTCwgZHdDcmVhdGlvbkRpc3Bvc2l0aW9uLCBkd0ZsYWdzQW5kQXR0cmlidXRlcywgTlVMTCk7CisjZW5kaWYKKworICAgIHJldHVybiB3aW4zMl9idWlsZF9pb3dpbihoRmlsZSk7Cit9CisKKwordm9pZHBmIFpDQUxMQkFDSyB3aW4zMl9vcGVuNjRfZmlsZV9mdW5jQSAodm9pZHBmIG9wYXF1ZSxjb25zdCB2b2lkKiBmaWxlbmFtZSxpbnQgbW9kZSkKK3sKKyAgICBjb25zdCBjaGFyKiBtb2RlX2ZvcGVuID0gTlVMTDsKKyAgICBEV09SRCBkd0Rlc2lyZWRBY2Nlc3MsZHdDcmVhdGlvbkRpc3Bvc2l0aW9uLGR3U2hhcmVNb2RlLGR3RmxhZ3NBbmRBdHRyaWJ1dGVzIDsKKyAgICBIQU5ETEUgaEZpbGUgPSBOVUxMOworCisgICAgd2luMzJfdHJhbnNsYXRlX29wZW5fbW9kZShtb2RlLCZkd0Rlc2lyZWRBY2Nlc3MsJmR3Q3JlYXRpb25EaXNwb3NpdGlvbiwmZHdTaGFyZU1vZGUsJmR3RmxhZ3NBbmRBdHRyaWJ1dGVzKTsKKworI2lmZGVmIElPV0lOMzJfVVNJTkdfV0lOUlRfQVBJCisgICAgaWYgKChmaWxlbmFtZSE9TlVMTCkgJiYgKGR3RGVzaXJlZEFjY2VzcyAhPSAwKSkKKyAgICB7CisgICAgICAgIFdDSEFSIGZpbGVuYW1lV1tGSUxFTkFNRV9NQVggKyAweDIwMCArIDFdOworICAgICAgICBNdWx0aUJ5dGVUb1dpZGVDaGFyKENQX0FDUCwwLChjb25zdCBjaGFyKilmaWxlbmFtZSwtMSxmaWxlbmFtZVcsRklMRU5BTUVfTUFYICsgMHgyMDApOworICAgICAgICBoRmlsZSA9IENyZWF0ZUZpbGUyKGZpbGVuYW1lVywgZHdEZXNpcmVkQWNjZXNzLCBkd1NoYXJlTW9kZSwgZHdDcmVhdGlvbkRpc3Bvc2l0aW9uLCBOVUxMKTsKKyAgICB9CisjZWxzZQorICAgIGlmICgoZmlsZW5hbWUhPU5VTEwpICYmIChkd0Rlc2lyZWRBY2Nlc3MgIT0gMCkpCisgICAgICAgIGhGaWxlID0gQ3JlYXRlRmlsZUEoKExQQ1NUUilmaWxlbmFtZSwgZHdEZXNpcmVkQWNjZXNzLCBkd1NoYXJlTW9kZSwgTlVMTCwgZHdDcmVhdGlvbkRpc3Bvc2l0aW9uLCBkd0ZsYWdzQW5kQXR0cmlidXRlcywgTlVMTCk7CisjZW5kaWYKKworICAgIHJldHVybiB3aW4zMl9idWlsZF9pb3dpbihoRmlsZSk7Cit9CisKKwordm9pZHBmIFpDQUxMQkFDSyB3aW4zMl9vcGVuNjRfZmlsZV9mdW5jVyAodm9pZHBmIG9wYXF1ZSxjb25zdCB2b2lkKiBmaWxlbmFtZSxpbnQgbW9kZSkKK3sKKyAgICBjb25zdCBjaGFyKiBtb2RlX2ZvcGVuID0gTlVMTDsKKyAgICBEV09SRCBkd0Rlc2lyZWRBY2Nlc3MsZHdDcmVhdGlvbkRpc3Bvc2l0aW9uLGR3U2hhcmVNb2RlLGR3RmxhZ3NBbmRBdHRyaWJ1dGVzIDsKKyAgICBIQU5ETEUgaEZpbGUgPSBOVUxMOworCisgICAgd2luMzJfdHJhbnNsYXRlX29wZW5fbW9kZShtb2RlLCZkd0Rlc2lyZWRBY2Nlc3MsJmR3Q3JlYXRpb25EaXNwb3NpdGlvbiwmZHdTaGFyZU1vZGUsJmR3RmxhZ3NBbmRBdHRyaWJ1dGVzKTsKKworI2lmZGVmIElPV0lOMzJfVVNJTkdfV0lOUlRfQVBJCisgICAgaWYgKChmaWxlbmFtZSE9TlVMTCkgJiYgKGR3RGVzaXJlZEFjY2VzcyAhPSAwKSkKKyAgICAgICAgaEZpbGUgPSBDcmVhdGVGaWxlMigoTFBDV1NUUilmaWxlbmFtZSwgZHdEZXNpcmVkQWNjZXNzLCBkd1NoYXJlTW9kZSwgZHdDcmVhdGlvbkRpc3Bvc2l0aW9uLE5VTEwpOworI2Vsc2UKKyAgICBpZiAoKGZpbGVuYW1lIT1OVUxMKSAmJiAoZHdEZXNpcmVkQWNjZXNzICE9IDApKQorICAgICAgICBoRmlsZSA9IENyZWF0ZUZpbGVXKChMUENXU1RSKWZpbGVuYW1lLCBkd0Rlc2lyZWRBY2Nlc3MsIGR3U2hhcmVNb2RlLCBOVUxMLCBkd0NyZWF0aW9uRGlzcG9zaXRpb24sIGR3RmxhZ3NBbmRBdHRyaWJ1dGVzLCBOVUxMKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIHdpbjMyX2J1aWxkX2lvd2luKGhGaWxlKTsKK30KKworCit2b2lkcGYgWkNBTExCQUNLIHdpbjMyX29wZW5fZmlsZV9mdW5jICh2b2lkcGYgb3BhcXVlLGNvbnN0IGNoYXIqIGZpbGVuYW1lLGludCBtb2RlKQoreworICAgIGNvbnN0IGNoYXIqIG1vZGVfZm9wZW4gPSBOVUxMOworICAgIERXT1JEIGR3RGVzaXJlZEFjY2Vzcyxkd0NyZWF0aW9uRGlzcG9zaXRpb24sZHdTaGFyZU1vZGUsZHdGbGFnc0FuZEF0dHJpYnV0ZXMgOworICAgIEhBTkRMRSBoRmlsZSA9IE5VTEw7CisKKyAgICB3aW4zMl90cmFuc2xhdGVfb3Blbl9tb2RlKG1vZGUsJmR3RGVzaXJlZEFjY2VzcywmZHdDcmVhdGlvbkRpc3Bvc2l0aW9uLCZkd1NoYXJlTW9kZSwmZHdGbGFnc0FuZEF0dHJpYnV0ZXMpOworCisjaWZkZWYgSU9XSU4zMl9VU0lOR19XSU5SVF9BUEkKKyNpZmRlZiBVTklDT0RFCisgICAgaWYgKChmaWxlbmFtZSE9TlVMTCkgJiYgKGR3RGVzaXJlZEFjY2VzcyAhPSAwKSkKKyAgICAgICAgaEZpbGUgPSBDcmVhdGVGaWxlMigoTFBDVFNUUilmaWxlbmFtZSwgZHdEZXNpcmVkQWNjZXNzLCBkd1NoYXJlTW9kZSwgZHdDcmVhdGlvbkRpc3Bvc2l0aW9uLCBOVUxMKTsKKyNlbHNlCisgICAgaWYgKChmaWxlbmFtZSE9TlVMTCkgJiYgKGR3RGVzaXJlZEFjY2VzcyAhPSAwKSkKKyAgICB7CisgICAgICAgIFdDSEFSIGZpbGVuYW1lV1tGSUxFTkFNRV9NQVggKyAweDIwMCArIDFdOworICAgICAgICBNdWx0aUJ5dGVUb1dpZGVDaGFyKENQX0FDUCwwLChjb25zdCBjaGFyKilmaWxlbmFtZSwtMSxmaWxlbmFtZVcsRklMRU5BTUVfTUFYICsgMHgyMDApOworICAgICAgICBoRmlsZSA9IENyZWF0ZUZpbGUyKGZpbGVuYW1lVywgZHdEZXNpcmVkQWNjZXNzLCBkd1NoYXJlTW9kZSwgZHdDcmVhdGlvbkRpc3Bvc2l0aW9uLCBOVUxMKTsKKyAgICB9CisjZW5kaWYKKyNlbHNlCisgICAgaWYgKChmaWxlbmFtZSE9TlVMTCkgJiYgKGR3RGVzaXJlZEFjY2VzcyAhPSAwKSkKKyAgICAgICAgaEZpbGUgPSBDcmVhdGVGaWxlKChMUENUU1RSKWZpbGVuYW1lLCBkd0Rlc2lyZWRBY2Nlc3MsIGR3U2hhcmVNb2RlLCBOVUxMLCBkd0NyZWF0aW9uRGlzcG9zaXRpb24sIGR3RmxhZ3NBbmRBdHRyaWJ1dGVzLCBOVUxMKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIHdpbjMyX2J1aWxkX2lvd2luKGhGaWxlKTsKK30KKworCit1TG9uZyBaQ0FMTEJBQ0sgd2luMzJfcmVhZF9maWxlX2Z1bmMgKHZvaWRwZiBvcGFxdWUsIHZvaWRwZiBzdHJlYW0sIHZvaWQqIGJ1Zix1TG9uZyBzaXplKQoreworICAgIHVMb25nIHJldD0wOworICAgIEhBTkRMRSBoRmlsZSA9IE5VTEw7CisgICAgaWYgKHN0cmVhbSE9TlVMTCkKKyAgICAgICAgaEZpbGUgPSAoKFdJTjMyRklMRV9JT1dJTiopc3RyZWFtKSAtPiBoZjsKKworICAgIGlmIChoRmlsZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgaWYgKCFSZWFkRmlsZShoRmlsZSwgYnVmLCBzaXplLCAmcmV0LCBOVUxMKSkKKyAgICAgICAgeworICAgICAgICAgICAgRFdPUkQgZHdFcnIgPSBHZXRMYXN0RXJyb3IoKTsKKyAgICAgICAgICAgIGlmIChkd0VyciA9PSBFUlJPUl9IQU5ETEVfRU9GKQorICAgICAgICAgICAgICAgIGR3RXJyID0gMDsKKyAgICAgICAgICAgICgoV0lOMzJGSUxFX0lPV0lOKilzdHJlYW0pIC0+IGVycm9yPShpbnQpZHdFcnI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCisKK3VMb25nIFpDQUxMQkFDSyB3aW4zMl93cml0ZV9maWxlX2Z1bmMgKHZvaWRwZiBvcGFxdWUsdm9pZHBmIHN0cmVhbSxjb25zdCB2b2lkKiBidWYsdUxvbmcgc2l6ZSkKK3sKKyAgICB1TG9uZyByZXQ9MDsKKyAgICBIQU5ETEUgaEZpbGUgPSBOVUxMOworICAgIGlmIChzdHJlYW0hPU5VTEwpCisgICAgICAgIGhGaWxlID0gKChXSU4zMkZJTEVfSU9XSU4qKXN0cmVhbSkgLT4gaGY7CisKKyAgICBpZiAoaEZpbGUgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIGlmICghV3JpdGVGaWxlKGhGaWxlLCBidWYsIHNpemUsICZyZXQsIE5VTEwpKQorICAgICAgICB7CisgICAgICAgICAgICBEV09SRCBkd0VyciA9IEdldExhc3RFcnJvcigpOworICAgICAgICAgICAgaWYgKGR3RXJyID09IEVSUk9SX0hBTkRMRV9FT0YpCisgICAgICAgICAgICAgICAgZHdFcnIgPSAwOworICAgICAgICAgICAgKChXSU4zMkZJTEVfSU9XSU4qKXN0cmVhbSkgLT4gZXJyb3I9KGludClkd0VycjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBCT09MIE15U2V0RmlsZVBvaW50ZXJFeChIQU5ETEUgaEZpbGUsIExBUkdFX0lOVEVHRVIgcG9zLCBMQVJHRV9JTlRFR0VSICpuZXdQb3MsICBEV09SRCBkd01vdmVNZXRob2QpCit7CisjaWZkZWYgSU9XSU4zMl9VU0lOR19XSU5SVF9BUEkKKyAgICByZXR1cm4gU2V0RmlsZVBvaW50ZXJFeChoRmlsZSwgcG9zLCBuZXdQb3MsIGR3TW92ZU1ldGhvZCk7CisjZWxzZQorICAgIExPTkcgbEhpZ2ggPSBwb3MuSGlnaFBhcnQ7CisgICAgRFdPUkQgZHdOZXdQb3MgPSBTZXRGaWxlUG9pbnRlcihoRmlsZSwgcG9zLkxvd1BhcnQsICZsSGlnaCwgZHdNb3ZlTWV0aG9kKTsKKyAgICBCT09MIGZPayA9IFRSVUU7CisgICAgaWYgKGR3TmV3UG9zID09IDB4RkZGRkZGRkYpCisgICAgICAgIGlmIChHZXRMYXN0RXJyb3IoKSAhPSBOT19FUlJPUikKKyAgICAgICAgICAgIGZPayA9IEZBTFNFOworICAgIGlmICgobmV3UG9zICE9IE5VTEwpICYmIChmT2spKQorICAgIHsKKyAgICAgICAgbmV3UG9zLT5Mb3dQYXJ0ID0gZHdOZXdQb3M7CisgICAgICAgIG5ld1Bvcy0+SGlnaFBhcnQgPSBsSGlnaDsKKyAgICB9CisgICAgcmV0dXJuIGZPazsKKyNlbmRpZgorfQorCitsb25nIFpDQUxMQkFDSyB3aW4zMl90ZWxsX2ZpbGVfZnVuYyAodm9pZHBmIG9wYXF1ZSx2b2lkcGYgc3RyZWFtKQoreworICAgIGxvbmcgcmV0PS0xOworICAgIEhBTkRMRSBoRmlsZSA9IE5VTEw7CisgICAgaWYgKHN0cmVhbSE9TlVMTCkKKyAgICAgICAgaEZpbGUgPSAoKFdJTjMyRklMRV9JT1dJTiopc3RyZWFtKSAtPiBoZjsKKyAgICBpZiAoaEZpbGUgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIExBUkdFX0lOVEVHRVIgcG9zOworICAgICAgICBwb3MuUXVhZFBhcnQgPSAwOworCisgICAgICAgIGlmICghTXlTZXRGaWxlUG9pbnRlckV4KGhGaWxlLCBwb3MsICZwb3MsIEZJTEVfQ1VSUkVOVCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIERXT1JEIGR3RXJyID0gR2V0TGFzdEVycm9yKCk7CisgICAgICAgICAgICAoKFdJTjMyRklMRV9JT1dJTiopc3RyZWFtKSAtPiBlcnJvcj0oaW50KWR3RXJyOworICAgICAgICAgICAgcmV0ID0gLTE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0PShsb25nKXBvcy5Mb3dQYXJ0OworICAgIH0KKyAgICByZXR1cm4gcmV0OworfQorCitaUE9TNjRfVCBaQ0FMTEJBQ0sgd2luMzJfdGVsbDY0X2ZpbGVfZnVuYyAodm9pZHBmIG9wYXF1ZSwgdm9pZHBmIHN0cmVhbSkKK3sKKyAgICBaUE9TNjRfVCByZXQ9IChaUE9TNjRfVCktMTsKKyAgICBIQU5ETEUgaEZpbGUgPSBOVUxMOworICAgIGlmIChzdHJlYW0hPU5VTEwpCisgICAgICAgIGhGaWxlID0gKChXSU4zMkZJTEVfSU9XSU4qKXN0cmVhbSktPmhmOworCisgICAgaWYgKGhGaWxlKQorICAgIHsKKyAgICAgICAgTEFSR0VfSU5URUdFUiBwb3M7CisgICAgICAgIHBvcy5RdWFkUGFydCA9IDA7CisKKyAgICAgICAgaWYgKCFNeVNldEZpbGVQb2ludGVyRXgoaEZpbGUsIHBvcywgJnBvcywgRklMRV9DVVJSRU5UKSkKKyAgICAgICAgeworICAgICAgICAgICAgRFdPUkQgZHdFcnIgPSBHZXRMYXN0RXJyb3IoKTsKKyAgICAgICAgICAgICgoV0lOMzJGSUxFX0lPV0lOKilzdHJlYW0pIC0+IGVycm9yPShpbnQpZHdFcnI7CisgICAgICAgICAgICByZXQgPSAoWlBPUzY0X1QpLTE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0PXBvcy5RdWFkUGFydDsKKyAgICB9CisgICAgcmV0dXJuIHJldDsKK30KKworCitsb25nIFpDQUxMQkFDSyB3aW4zMl9zZWVrX2ZpbGVfZnVuYyAodm9pZHBmIG9wYXF1ZSx2b2lkcGYgc3RyZWFtLHVMb25nIG9mZnNldCxpbnQgb3JpZ2luKQoreworICAgIERXT1JEIGR3TW92ZU1ldGhvZD0weEZGRkZGRkZGOworICAgIEhBTkRMRSBoRmlsZSA9IE5VTEw7CisKKyAgICBsb25nIHJldD0tMTsKKyAgICBpZiAoc3RyZWFtIT1OVUxMKQorICAgICAgICBoRmlsZSA9ICgoV0lOMzJGSUxFX0lPV0lOKilzdHJlYW0pIC0+IGhmOworICAgIHN3aXRjaCAob3JpZ2luKQorICAgIHsKKyAgICBjYXNlIFpMSUJfRklMRUZVTkNfU0VFS19DVVIgOgorICAgICAgICBkd01vdmVNZXRob2QgPSBGSUxFX0NVUlJFTlQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWkxJQl9GSUxFRlVOQ19TRUVLX0VORCA6CisgICAgICAgIGR3TW92ZU1ldGhvZCA9IEZJTEVfRU5EOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFpMSUJfRklMRUZVTkNfU0VFS19TRVQgOgorICAgICAgICBkd01vdmVNZXRob2QgPSBGSUxFX0JFR0lOOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OiByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKGhGaWxlICE9IE5VTEwpCisgICAgeworICAgICAgICBMQVJHRV9JTlRFR0VSIHBvczsKKyAgICAgICAgcG9zLlF1YWRQYXJ0ID0gb2Zmc2V0OworICAgICAgICBpZiAoIU15U2V0RmlsZVBvaW50ZXJFeChoRmlsZSwgcG9zLCBOVUxMLCBkd01vdmVNZXRob2QpKQorICAgICAgICB7CisgICAgICAgICAgICBEV09SRCBkd0VyciA9IEdldExhc3RFcnJvcigpOworICAgICAgICAgICAgKChXSU4zMkZJTEVfSU9XSU4qKXN0cmVhbSkgLT4gZXJyb3I9KGludClkd0VycjsKKyAgICAgICAgICAgIHJldCA9IC0xOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldD0wOworICAgIH0KKyAgICByZXR1cm4gcmV0OworfQorCitsb25nIFpDQUxMQkFDSyB3aW4zMl9zZWVrNjRfZmlsZV9mdW5jICh2b2lkcGYgb3BhcXVlLCB2b2lkcGYgc3RyZWFtLFpQT1M2NF9UIG9mZnNldCxpbnQgb3JpZ2luKQoreworICAgIERXT1JEIGR3TW92ZU1ldGhvZD0weEZGRkZGRkZGOworICAgIEhBTkRMRSBoRmlsZSA9IE5VTEw7CisgICAgbG9uZyByZXQ9LTE7CisKKyAgICBpZiAoc3RyZWFtIT1OVUxMKQorICAgICAgICBoRmlsZSA9ICgoV0lOMzJGSUxFX0lPV0lOKilzdHJlYW0pLT5oZjsKKworICAgIHN3aXRjaCAob3JpZ2luKQorICAgIHsKKyAgICAgICAgY2FzZSBaTElCX0ZJTEVGVU5DX1NFRUtfQ1VSIDoKKyAgICAgICAgICAgIGR3TW92ZU1ldGhvZCA9IEZJTEVfQ1VSUkVOVDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFpMSUJfRklMRUZVTkNfU0VFS19FTkQgOgorICAgICAgICAgICAgZHdNb3ZlTWV0aG9kID0gRklMRV9FTkQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBaTElCX0ZJTEVGVU5DX1NFRUtfU0VUIDoKKyAgICAgICAgICAgIGR3TW92ZU1ldGhvZCA9IEZJTEVfQkVHSU47CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDogcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmIChoRmlsZSkKKyAgICB7CisgICAgICAgIExBUkdFX0lOVEVHRVIgcG9zOworICAgICAgICBwb3MuUXVhZFBhcnQgPSBvZmZzZXQ7CisgICAgICAgIGlmICghTXlTZXRGaWxlUG9pbnRlckV4KGhGaWxlLCBwb3MsIE5VTEwsIGR3TW92ZU1ldGhvZCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIERXT1JEIGR3RXJyID0gR2V0TGFzdEVycm9yKCk7CisgICAgICAgICAgICAoKFdJTjMyRklMRV9JT1dJTiopc3RyZWFtKSAtPiBlcnJvcj0oaW50KWR3RXJyOworICAgICAgICAgICAgcmV0ID0gLTE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0PTA7CisgICAgfQorICAgIHJldHVybiByZXQ7Cit9CisKK2ludCBaQ0FMTEJBQ0sgd2luMzJfY2xvc2VfZmlsZV9mdW5jICh2b2lkcGYgb3BhcXVlLCB2b2lkcGYgc3RyZWFtKQoreworICAgIGludCByZXQ9LTE7CisKKyAgICBpZiAoc3RyZWFtIT1OVUxMKQorICAgIHsKKyAgICAgICAgSEFORExFIGhGaWxlOworICAgICAgICBoRmlsZSA9ICgoV0lOMzJGSUxFX0lPV0lOKilzdHJlYW0pIC0+IGhmOworICAgICAgICBpZiAoaEZpbGUgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgQ2xvc2VIYW5kbGUoaEZpbGUpOworICAgICAgICAgICAgcmV0PTA7CisgICAgICAgIH0KKyAgICAgICAgZnJlZShzdHJlYW0pOworICAgIH0KKyAgICByZXR1cm4gcmV0OworfQorCitpbnQgWkNBTExCQUNLIHdpbjMyX2Vycm9yX2ZpbGVfZnVuYyAodm9pZHBmIG9wYXF1ZSx2b2lkcGYgc3RyZWFtKQoreworICAgIGludCByZXQ9LTE7CisgICAgaWYgKHN0cmVhbSE9TlVMTCkKKyAgICB7CisgICAgICAgIHJldCA9ICgoV0lOMzJGSUxFX0lPV0lOKilzdHJlYW0pIC0+IGVycm9yOworICAgIH0KKyAgICByZXR1cm4gcmV0OworfQorCit2b2lkIGZpbGxfd2luMzJfZmlsZWZ1bmMgKHpsaWJfZmlsZWZ1bmNfZGVmKiBwemxpYl9maWxlZnVuY19kZWYpCit7CisgICAgcHpsaWJfZmlsZWZ1bmNfZGVmLT56b3Blbl9maWxlID0gd2luMzJfb3Blbl9maWxlX2Z1bmM7CisgICAgcHpsaWJfZmlsZWZ1bmNfZGVmLT56cmVhZF9maWxlID0gd2luMzJfcmVhZF9maWxlX2Z1bmM7CisgICAgcHpsaWJfZmlsZWZ1bmNfZGVmLT56d3JpdGVfZmlsZSA9IHdpbjMyX3dyaXRlX2ZpbGVfZnVuYzsKKyAgICBwemxpYl9maWxlZnVuY19kZWYtPnp0ZWxsX2ZpbGUgPSB3aW4zMl90ZWxsX2ZpbGVfZnVuYzsKKyAgICBwemxpYl9maWxlZnVuY19kZWYtPnpzZWVrX2ZpbGUgPSB3aW4zMl9zZWVrX2ZpbGVfZnVuYzsKKyAgICBwemxpYl9maWxlZnVuY19kZWYtPnpjbG9zZV9maWxlID0gd2luMzJfY2xvc2VfZmlsZV9mdW5jOworICAgIHB6bGliX2ZpbGVmdW5jX2RlZi0+emVycm9yX2ZpbGUgPSB3aW4zMl9lcnJvcl9maWxlX2Z1bmM7CisgICAgcHpsaWJfZmlsZWZ1bmNfZGVmLT5vcGFxdWUgPSBOVUxMOworfQorCit2b2lkIGZpbGxfd2luMzJfZmlsZWZ1bmM2NCh6bGliX2ZpbGVmdW5jNjRfZGVmKiBwemxpYl9maWxlZnVuY19kZWYpCit7CisgICAgcHpsaWJfZmlsZWZ1bmNfZGVmLT56b3BlbjY0X2ZpbGUgPSB3aW4zMl9vcGVuNjRfZmlsZV9mdW5jOworICAgIHB6bGliX2ZpbGVmdW5jX2RlZi0+enJlYWRfZmlsZSA9IHdpbjMyX3JlYWRfZmlsZV9mdW5jOworICAgIHB6bGliX2ZpbGVmdW5jX2RlZi0+endyaXRlX2ZpbGUgPSB3aW4zMl93cml0ZV9maWxlX2Z1bmM7CisgICAgcHpsaWJfZmlsZWZ1bmNfZGVmLT56dGVsbDY0X2ZpbGUgPSB3aW4zMl90ZWxsNjRfZmlsZV9mdW5jOworICAgIHB6bGliX2ZpbGVmdW5jX2RlZi0+enNlZWs2NF9maWxlID0gd2luMzJfc2VlazY0X2ZpbGVfZnVuYzsKKyAgICBwemxpYl9maWxlZnVuY19kZWYtPnpjbG9zZV9maWxlID0gd2luMzJfY2xvc2VfZmlsZV9mdW5jOworICAgIHB6bGliX2ZpbGVmdW5jX2RlZi0+emVycm9yX2ZpbGUgPSB3aW4zMl9lcnJvcl9maWxlX2Z1bmM7CisgICAgcHpsaWJfZmlsZWZ1bmNfZGVmLT5vcGFxdWUgPSBOVUxMOworfQorCisKK3ZvaWQgZmlsbF93aW4zMl9maWxlZnVuYzY0QSh6bGliX2ZpbGVmdW5jNjRfZGVmKiBwemxpYl9maWxlZnVuY19kZWYpCit7CisgICAgcHpsaWJfZmlsZWZ1bmNfZGVmLT56b3BlbjY0X2ZpbGUgPSB3aW4zMl9vcGVuNjRfZmlsZV9mdW5jQTsKKyAgICBwemxpYl9maWxlZnVuY19kZWYtPnpyZWFkX2ZpbGUgPSB3aW4zMl9yZWFkX2ZpbGVfZnVuYzsKKyAgICBwemxpYl9maWxlZnVuY19kZWYtPnp3cml0ZV9maWxlID0gd2luMzJfd3JpdGVfZmlsZV9mdW5jOworICAgIHB6bGliX2ZpbGVmdW5jX2RlZi0+enRlbGw2NF9maWxlID0gd2luMzJfdGVsbDY0X2ZpbGVfZnVuYzsKKyAgICBwemxpYl9maWxlZnVuY19kZWYtPnpzZWVrNjRfZmlsZSA9IHdpbjMyX3NlZWs2NF9maWxlX2Z1bmM7CisgICAgcHpsaWJfZmlsZWZ1bmNfZGVmLT56Y2xvc2VfZmlsZSA9IHdpbjMyX2Nsb3NlX2ZpbGVfZnVuYzsKKyAgICBwemxpYl9maWxlZnVuY19kZWYtPnplcnJvcl9maWxlID0gd2luMzJfZXJyb3JfZmlsZV9mdW5jOworICAgIHB6bGliX2ZpbGVmdW5jX2RlZi0+b3BhcXVlID0gTlVMTDsKK30KKworCit2b2lkIGZpbGxfd2luMzJfZmlsZWZ1bmM2NFcoemxpYl9maWxlZnVuYzY0X2RlZiogcHpsaWJfZmlsZWZ1bmNfZGVmKQoreworICAgIHB6bGliX2ZpbGVmdW5jX2RlZi0+em9wZW42NF9maWxlID0gd2luMzJfb3BlbjY0X2ZpbGVfZnVuY1c7CisgICAgcHpsaWJfZmlsZWZ1bmNfZGVmLT56cmVhZF9maWxlID0gd2luMzJfcmVhZF9maWxlX2Z1bmM7CisgICAgcHpsaWJfZmlsZWZ1bmNfZGVmLT56d3JpdGVfZmlsZSA9IHdpbjMyX3dyaXRlX2ZpbGVfZnVuYzsKKyAgICBwemxpYl9maWxlZnVuY19kZWYtPnp0ZWxsNjRfZmlsZSA9IHdpbjMyX3RlbGw2NF9maWxlX2Z1bmM7CisgICAgcHpsaWJfZmlsZWZ1bmNfZGVmLT56c2VlazY0X2ZpbGUgPSB3aW4zMl9zZWVrNjRfZmlsZV9mdW5jOworICAgIHB6bGliX2ZpbGVmdW5jX2RlZi0+emNsb3NlX2ZpbGUgPSB3aW4zMl9jbG9zZV9maWxlX2Z1bmM7CisgICAgcHpsaWJfZmlsZWZ1bmNfZGVmLT56ZXJyb3JfZmlsZSA9IHdpbjMyX2Vycm9yX2ZpbGVfZnVuYzsKKyAgICBwemxpYl9maWxlZnVuY19kZWYtPm9wYXF1ZSA9IE5VTEw7Cit9CmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi9taW5pemlwL2lvd2luMzIuaCBiL3NyYy9jb250cmliL21pbml6aXAvaW93aW4zMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjYTA5NjkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29udHJpYi9taW5pemlwL2lvd2luMzIuaApAQCAtMCwwICsxLDI4IEBACisvKiBpb3dpbjMyLmggLS0gSU8gYmFzZSBmdW5jdGlvbiBoZWFkZXIgZm9yIGNvbXByZXNzL3VuY29tcHJlc3MgLnppcAorICAgICBWZXJzaW9uIDEuMSwgRmVicnVhcnkgMTRoLCAyMDEwCisgICAgIHBhcnQgb2YgdGhlIE1pbmlaaXAgcHJvamVjdCAtICggaHR0cDovL3d3dy53aW5pbWFnZS5jb20vekxpYkRsbC9taW5pemlwLmh0bWwgKQorCisgICAgICAgICBDb3B5cmlnaHQgKEMpIDE5OTgtMjAxMCBHaWxsZXMgVm9sbGFudCAobWluaXppcCkgKCBodHRwOi8vd3d3LndpbmltYWdlLmNvbS96TGliRGxsL21pbml6aXAuaHRtbCApCisKKyAgICAgICAgIE1vZGlmaWNhdGlvbnMgZm9yIFppcDY0IHN1cHBvcnQKKyAgICAgICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIE1hdGhpYXMgU3ZlbnNzb24gKCBodHRwOi8vcmVzdWx0NDIuY29tICkKKworICAgICAgICAgRm9yIG1vcmUgaW5mbyByZWFkIE1pbmlaaXBfaW5mby50eHQKKworKi8KKworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK3ZvaWQgZmlsbF93aW4zMl9maWxlZnVuYyBPRigoemxpYl9maWxlZnVuY19kZWYqIHB6bGliX2ZpbGVmdW5jX2RlZikpOwordm9pZCBmaWxsX3dpbjMyX2ZpbGVmdW5jNjQgT0YoKHpsaWJfZmlsZWZ1bmM2NF9kZWYqIHB6bGliX2ZpbGVmdW5jX2RlZikpOwordm9pZCBmaWxsX3dpbjMyX2ZpbGVmdW5jNjRBIE9GKCh6bGliX2ZpbGVmdW5jNjRfZGVmKiBwemxpYl9maWxlZnVuY19kZWYpKTsKK3ZvaWQgZmlsbF93aW4zMl9maWxlZnVuYzY0VyBPRigoemxpYl9maWxlZnVuYzY0X2RlZiogcHpsaWJfZmlsZWZ1bmNfZGVmKSk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi9taW5pemlwL21ha2Vfdm1zLmNvbSBiL3NyYy9jb250cmliL21pbml6aXAvbWFrZV92bXMuY29tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhYzEzYTkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29udHJpYi9taW5pemlwL21ha2Vfdm1zLmNvbQpAQCAtMCwwICsxLDI1IEBACiskIGlmIGYkc2VhcmNoKCJpb2FwaS5oX29yaWciKSAuZXFzLiAiIiB0aGVuIGNvcHkgaW9hcGkuaCBpb2FwaS5oX29yaWcKKyQgb3Blbi93cml0ZSB6ZGVmIHZtc2RlZnMuaAorJCBjb3B5IHN5cyRpbnB1dDogemRlZgorJCBkZWNrCisjZGVmaW5lIHVuaXgKKyNkZWZpbmUgZmlsbF96bGliX2ZpbGVmdW5jNjRfMzJfZGVmX2Zyb21fZmlsZWZ1bmMzMiBmaWxsemZmdW5jNjRmcm9tCisjZGVmaW5lIFdyaXRlX1ppcDY0RW5kT2ZDZW50cmFsRGlyZWN0b3J5TG9jYXRvciBXcml0ZV9aaXA2NEVvRExvY2F0b3IKKyNkZWZpbmUgV3JpdGVfWmlwNjRFbmRPZkNlbnRyYWxEaXJlY3RvcnlSZWNvcmQgV3JpdGVfWmlwNjRFb0RSZWNvcmQKKyNkZWZpbmUgV3JpdGVfRW5kT2ZDZW50cmFsRGlyZWN0b3J5UmVjb3JkIFdyaXRlX0VvRFJlY29yZAorJCBlb2QKKyQgY2xvc2UgemRlZgorJCBjb3B5IHZtc2RlZnMuaCxpb2FwaS5oX29yaWcgaW9hcGkuaAorJCBjYy9pbmNsdWRlPVstLV0vcHJlZml4PWFsbCBpb2FwaS5jCiskIGNjL2luY2x1ZGU9Wy0tXS9wcmVmaXg9YWxsIG1pbml1bnouYworJCBjYy9pbmNsdWRlPVstLV0vcHJlZml4PWFsbCB1bnppcC5jCiskIGNjL2luY2x1ZGU9Wy0tXS9wcmVmaXg9YWxsIG1pbml6aXAuYworJCBjYy9pbmNsdWRlPVstLV0vcHJlZml4PWFsbCB6aXAuYworJCBsaW5rIG1pbml1bnosdW56aXAsaW9hcGksWy0tXWxpYnoub2xiL2xpYgorJCBsaW5rIG1pbml6aXAsemlwLGlvYXBpLFstLV1saWJ6Lm9sYi9saWIKKyQgbWNyIFtdbWluaXppcCB0ZXN0IG1pbml6aXBfaW5mby50eHQKKyQgbWNyIFtdbWluaXVueiAtbCB0ZXN0LnppcAorJCByZW5hbWUgbWluaXppcF9pbmZvLnR4dDsgbWluaXppcF9pbmZvLnR4dF9vbGQKKyQgbWNyIFtdbWluaXVueiB0ZXN0LnppcAorJCBkZWxldGUgdGVzdC56aXA7KgorJGV4aXQKZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL21pbml6aXAvbWluaXVuei5jIGIvc3JjL2NvbnRyaWIvbWluaXppcC9taW5pdW56LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjEwMzgxNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb250cmliL21pbml6aXAvbWluaXVuei5jCkBAIC0wLDAgKzEsNjU5IEBACisvKgorICAgbWluaXVuei5jCisgICBWZXJzaW9uIDEuMSwgRmVicnVhcnkgMTRoLCAyMDEwCisgICBzYW1wbGUgcGFydCBvZiB0aGUgTWluaVppcCBwcm9qZWN0IC0gKCBodHRwOi8vd3d3LndpbmltYWdlLmNvbS96TGliRGxsL21pbml6aXAuaHRtbCApCisKKyAgICAgICAgIENvcHlyaWdodCAoQykgMTk5OC0yMDEwIEdpbGxlcyBWb2xsYW50IChtaW5pemlwKSAoIGh0dHA6Ly93d3cud2luaW1hZ2UuY29tL3pMaWJEbGwvbWluaXppcC5odG1sICkKKworICAgICAgICAgTW9kaWZpY2F0aW9ucyBvZiBVbnppcCBmb3IgWmlwNjQKKyAgICAgICAgIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IEV2ZW4gUm91YXVsdAorCisgICAgICAgICBNb2RpZmljYXRpb25zIGZvciBaaXA2NCBzdXBwb3J0IG9uIGJvdGggemlwIGFuZCB1bnppcAorICAgICAgICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgTWF0aGlhcyBTdmVuc3NvbiAoIGh0dHA6Ly9yZXN1bHQ0Mi5jb20gKQorKi8KKworI2lmICghZGVmaW5lZChfV0lOMzIpKSAmJiAoIWRlZmluZWQoV0lOMzIpKSAmJiAoIWRlZmluZWQoX19BUFBMRV9fKSkKKyAgICAgICAgI2lmbmRlZiBfX1VTRV9GSUxFX09GRlNFVDY0CisgICAgICAgICAgICAgICAgI2RlZmluZSBfX1VTRV9GSUxFX09GRlNFVDY0CisgICAgICAgICNlbmRpZgorICAgICAgICAjaWZuZGVmIF9fVVNFX0xBUkdFRklMRTY0CisgICAgICAgICAgICAgICAgI2RlZmluZSBfX1VTRV9MQVJHRUZJTEU2NAorICAgICAgICAjZW5kaWYKKyAgICAgICAgI2lmbmRlZiBfTEFSR0VGSUxFNjRfU09VUkNFCisgICAgICAgICAgICAgICAgI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFCisgICAgICAgICNlbmRpZgorICAgICAgICAjaWZuZGVmIF9GSUxFX09GRlNFVF9CSVQKKyAgICAgICAgICAgICAgICAjZGVmaW5lIF9GSUxFX09GRlNFVF9CSVQgNjQKKyAgICAgICAgI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIF9fQVBQTEVfXworLy8gSW4gZGFyd2luIGFuZCBwZXJoYXBzIG90aGVyIEJTRCB2YXJpYW50cyBvZmZfdCBpcyBhIDY0IGJpdCB2YWx1ZSwgaGVuY2Ugbm8gbmVlZCBmb3Igc3BlY2lmaWMgNjQgYml0IGZ1bmN0aW9ucworI2RlZmluZSBGT1BFTl9GVU5DKGZpbGVuYW1lLCBtb2RlKSBmb3BlbihmaWxlbmFtZSwgbW9kZSkKKyNkZWZpbmUgRlRFTExPX0ZVTkMoc3RyZWFtKSBmdGVsbG8oc3RyZWFtKQorI2RlZmluZSBGU0VFS09fRlVOQyhzdHJlYW0sIG9mZnNldCwgb3JpZ2luKSBmc2Vla28oc3RyZWFtLCBvZmZzZXQsIG9yaWdpbikKKyNlbHNlCisjZGVmaW5lIEZPUEVOX0ZVTkMoZmlsZW5hbWUsIG1vZGUpIGZvcGVuNjQoZmlsZW5hbWUsIG1vZGUpCisjZGVmaW5lIEZURUxMT19GVU5DKHN0cmVhbSkgZnRlbGxvNjQoc3RyZWFtKQorI2RlZmluZSBGU0VFS09fRlVOQyhzdHJlYW0sIG9mZnNldCwgb3JpZ2luKSBmc2Vla282NChzdHJlYW0sIG9mZnNldCwgb3JpZ2luKQorI2VuZGlmCisKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCisjaWZkZWYgX1dJTjMyCisjIGluY2x1ZGUgPGRpcmVjdC5oPgorIyBpbmNsdWRlIDxpby5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisjIGluY2x1ZGUgPHV0aW1lLmg+CisjZW5kaWYKKworCisjaW5jbHVkZSAidW56aXAuaCIKKworI2RlZmluZSBDQVNFU0VOU0lUSVZJVFkgKDApCisjZGVmaW5lIFdSSVRFQlVGRkVSU0laRSAoODE5MikKKyNkZWZpbmUgTUFYRklMRU5BTUUgKDI1NikKKworI2lmZGVmIF9XSU4zMgorI2RlZmluZSBVU0VXSU4zMklPQVBJCisjaW5jbHVkZSAiaW93aW4zMi5oIgorI2VuZGlmCisvKgorICBtaW5pIHVuemlwLCBkZW1vIG9mIHVuemlwIHBhY2thZ2UKKworICB1c2FnZSA6CisgIFVzYWdlIDogbWluaXVueiBbLWV4dmxvXSBmaWxlLnppcCBbZmlsZV90b19leHRyYWN0XSBbLWQgZXh0cmFjdGRpcl0KKworICBsaXN0IHRoZSBmaWxlIGluIHRoZSB6aXBmaWxlLCBhbmQgcHJpbnQgdGhlIGNvbnRlbnQgb2YgRklMRV9JRC5aSVAgb3IgUkVBRE1FLlRYVAorICAgIGlmIGl0IGV4aXN0cworKi8KKworCisvKiBjaGFuZ2VfZmlsZV9kYXRlIDogY2hhbmdlIHRoZSBkYXRlL3RpbWUgb2YgYSBmaWxlCisgICAgZmlsZW5hbWUgOiB0aGUgZmlsZW5hbWUgb2YgdGhlIGZpbGUgd2hlcmUgZGF0ZS90aW1lIG11c3QgYmUgbW9kaWZpZWQKKyAgICBkb3NkYXRlIDogdGhlIG5ldyBkYXRlIGF0IHRoZSBNU0RvcyBmb3JtYXQgKDQgYnl0ZXMpCisgICAgdG11X2RhdGUgOiB0aGUgU0FNRSBuZXcgZGF0ZSBhdCB0aGUgdG1fdW56IGZvcm1hdCAqLworc3RhdGljIHZvaWQgY2hhbmdlX2ZpbGVfZGF0ZShmaWxlbmFtZSxkb3NkYXRlLHRtdV9kYXRlKQorICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lOworICAgIHVMb25nIGRvc2RhdGU7CisgICAgdG1fdW56IHRtdV9kYXRlOworeworI2lmZGVmIF9XSU4zMgorICBIQU5ETEUgaEZpbGU7CisgIEZJTEVUSU1FIGZ0bSxmdExvY2FsLGZ0Q3JlYXRlLGZ0TGFzdEFjYyxmdExhc3RXcml0ZTsKKworICBoRmlsZSA9IENyZWF0ZUZpbGVBKGZpbGVuYW1lLEdFTkVSSUNfUkVBRCB8IEdFTkVSSUNfV1JJVEUsCisgICAgICAgICAgICAgICAgICAgICAgMCxOVUxMLE9QRU5fRVhJU1RJTkcsMCxOVUxMKTsKKyAgR2V0RmlsZVRpbWUoaEZpbGUsJmZ0Q3JlYXRlLCZmdExhc3RBY2MsJmZ0TGFzdFdyaXRlKTsKKyAgRG9zRGF0ZVRpbWVUb0ZpbGVUaW1lKChXT1JEKShkb3NkYXRlPj4xNiksKFdPUkQpZG9zZGF0ZSwmZnRMb2NhbCk7CisgIExvY2FsRmlsZVRpbWVUb0ZpbGVUaW1lKCZmdExvY2FsLCZmdG0pOworICBTZXRGaWxlVGltZShoRmlsZSwmZnRtLCZmdExhc3RBY2MsJmZ0bSk7CisgIENsb3NlSGFuZGxlKGhGaWxlKTsKKyNlbHNlCisjaWYgZGVmaW5lZCh1bml4KSB8fCBkZWZpbmVkKF9fQVBQTEVfXykKKyAgKHZvaWQpZG9zZGF0ZTsKKyAgc3RydWN0IHV0aW1idWYgdXQ7CisgIHN0cnVjdCB0bSBuZXdkYXRlOworICBuZXdkYXRlLnRtX3NlYyA9IHRtdV9kYXRlLnRtX3NlYzsKKyAgbmV3ZGF0ZS50bV9taW49dG11X2RhdGUudG1fbWluOworICBuZXdkYXRlLnRtX2hvdXI9dG11X2RhdGUudG1faG91cjsKKyAgbmV3ZGF0ZS50bV9tZGF5PXRtdV9kYXRlLnRtX21kYXk7CisgIG5ld2RhdGUudG1fbW9uPXRtdV9kYXRlLnRtX21vbjsKKyAgaWYgKHRtdV9kYXRlLnRtX3llYXIgPiAxOTAwKQorICAgICAgbmV3ZGF0ZS50bV95ZWFyPXRtdV9kYXRlLnRtX3llYXIgLSAxOTAwOworICBlbHNlCisgICAgICBuZXdkYXRlLnRtX3llYXI9dG11X2RhdGUudG1feWVhciA7CisgIG5ld2RhdGUudG1faXNkc3Q9LTE7CisKKyAgdXQuYWN0aW1lPXV0Lm1vZHRpbWU9bWt0aW1lKCZuZXdkYXRlKTsKKyAgdXRpbWUoZmlsZW5hbWUsJnV0KTsKKyNlbmRpZgorI2VuZGlmCit9CisKKworLyogbXlta2RpciBhbmQgY2hhbmdlX2ZpbGVfZGF0ZSBhcmUgbm90IDEwMCAlIHBvcnRhYmxlCisgICBBcyBJIGRvbid0IGtub3cgd2VsbCBVbml4LCBJIHdhaXQgZmVlZGJhY2sgZm9yIHRoZSB1bml4IHBvcnRpb24gKi8KKworc3RhdGljIGludCBteW1rZGlyKGRpcm5hbWUpCisgICAgY29uc3QgY2hhciogZGlybmFtZTsKK3sKKyAgICBpbnQgcmV0PTA7CisjaWZkZWYgX1dJTjMyCisgICAgcmV0ID0gX21rZGlyKGRpcm5hbWUpOworI2VsaWYgdW5peAorICAgIHJldCA9IG1rZGlyIChkaXJuYW1lLDA3NzUpOworI2VsaWYgX19BUFBMRV9fCisgICAgcmV0ID0gbWtkaXIgKGRpcm5hbWUsMDc3NSk7CisjZW5kaWYKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG1ha2VkaXIgKG5ld2RpcikKKyAgICBjb25zdCBjaGFyICpuZXdkaXI7Cit7CisgIGNoYXIgKmJ1ZmZlciA7CisgIGNoYXIgKnA7CisgIHNpemVfdCBsZW4gPSBzdHJsZW4obmV3ZGlyKTsKKworICBpZiAobGVuID09IDApCisgICAgcmV0dXJuIDA7CisKKyAgYnVmZmVyID0gKGNoYXIqKW1hbGxvYyhsZW4rMSk7CisgICAgICAgIGlmIChidWZmZXI9PU5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIkVycm9yIGFsbG9jYXRpbmcgbWVtb3J5XG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gVU5aX0lOVEVSTkFMRVJST1I7CisgICAgICAgIH0KKyAgc3RyY3B5KGJ1ZmZlcixuZXdkaXIpOworCisgIGlmIChidWZmZXJbbGVuLTFdID09ICcvJykgeworICAgIGJ1ZmZlcltsZW4tMV0gPSAnXDAnOworICB9CisgIGlmIChteW1rZGlyKGJ1ZmZlcikgPT0gMCkKKyAgICB7CisgICAgICBmcmVlKGJ1ZmZlcik7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgcCA9IGJ1ZmZlcisxOworICB3aGlsZSAoMSkKKyAgICB7CisgICAgICBjaGFyIGhvbGQ7CisKKyAgICAgIHdoaWxlKCpwICYmICpwICE9ICdcXCcgJiYgKnAgIT0gJy8nKQorICAgICAgICBwKys7CisgICAgICBob2xkID0gKnA7CisgICAgICAqcCA9IDA7CisgICAgICBpZiAoKG15bWtkaXIoYnVmZmVyKSA9PSAtMSkgJiYgKGVycm5vID09IEVOT0VOVCkpCisgICAgICAgIHsKKyAgICAgICAgICBwcmludGYoImNvdWxkbid0IGNyZWF0ZSBkaXJlY3RvcnkgJXNcbiIsYnVmZmVyKTsKKyAgICAgICAgICBmcmVlKGJ1ZmZlcik7CisgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgIGlmIChob2xkID09IDApCisgICAgICAgIGJyZWFrOworICAgICAgKnArKyA9IGhvbGQ7CisgICAgfQorICBmcmVlKGJ1ZmZlcik7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBkb19iYW5uZXIoKQoreworICAgIHByaW50ZigiTWluaVVueiAxLjAxYiwgZGVtbyBvZiB6TGliICsgVW56IHBhY2thZ2Ugd3JpdHRlbiBieSBHaWxsZXMgVm9sbGFudFxuIik7CisgICAgcHJpbnRmKCJtb3JlIGluZm8gYXQgaHR0cDovL3d3dy53aW5pbWFnZS5jb20vekxpYkRsbC91bnppcC5odG1sXG5cbiIpOworfQorCitzdGF0aWMgdm9pZCBkb19oZWxwKCkKK3sKKyAgICBwcmludGYoIlVzYWdlIDogbWluaXVueiBbLWVdIFsteF0gWy12XSBbLWxdIFstb10gWy1wIHBhc3N3b3JkXSBmaWxlLnppcCBbZmlsZV90b19leHRyLl0gWy1kIGV4dHJhY3RkaXJdXG5cbiIgXAorICAgICAgICAgICAiICAtZSAgRXh0cmFjdCB3aXRob3V0IHBhdGhuYW1lIChqdW5rIHBhdGhzKVxuIiBcCisgICAgICAgICAgICIgIC14ICBFeHRyYWN0IHdpdGggcGF0aG5hbWVcbiIgXAorICAgICAgICAgICAiICAtdiAgbGlzdCBmaWxlc1xuIiBcCisgICAgICAgICAgICIgIC1sICBsaXN0IGZpbGVzXG4iIFwKKyAgICAgICAgICAgIiAgLWQgIGRpcmVjdG9yeSB0byBleHRyYWN0IGludG9cbiIgXAorICAgICAgICAgICAiICAtbyAgb3ZlcndyaXRlIGZpbGVzIHdpdGhvdXQgcHJvbXB0aW5nXG4iIFwKKyAgICAgICAgICAgIiAgLXAgIGV4dHJhY3QgY3J5cHRlZCBmaWxlIHVzaW5nIHBhc3N3b3JkXG5cbiIpOworfQorCitzdGF0aWMgdm9pZCBEaXNwbGF5NjRCaXRzU2l6ZShaUE9TNjRfVCBuLCBpbnQgc2l6ZV9jaGFyKQoreworICAvKiB0byBhdm9pZCBjb21wYXRpYmlsaXR5IHByb2JsZW0gLCB3ZSBkbyBoZXJlIHRoZSBjb252ZXJzaW9uICovCisgIGNoYXIgbnVtYmVyWzIxXTsKKyAgaW50IG9mZnNldD0xOTsKKyAgaW50IHBvc19zdHJpbmcgPSAxOTsKKyAgbnVtYmVyWzIwXT0wOworICBmb3IgKDs7KSB7CisgICAgICBudW1iZXJbb2Zmc2V0XT0oY2hhcikoKG4lMTApKycwJyk7CisgICAgICBpZiAobnVtYmVyW29mZnNldF0gIT0gJzAnKQorICAgICAgICAgIHBvc19zdHJpbmc9b2Zmc2V0OworICAgICAgbi89MTA7CisgICAgICBpZiAob2Zmc2V0PT0wKQorICAgICAgICAgIGJyZWFrOworICAgICAgb2Zmc2V0LS07CisgIH0KKyAgeworICAgICAgaW50IHNpemVfZGlzcGxheV9zdHJpbmcgPSAxOS1wb3Nfc3RyaW5nOworICAgICAgd2hpbGUgKHNpemVfY2hhciA+IHNpemVfZGlzcGxheV9zdHJpbmcpCisgICAgICB7CisgICAgICAgICAgc2l6ZV9jaGFyLS07CisgICAgICAgICAgcHJpbnRmKCIgIik7CisgICAgICB9CisgIH0KKworICBwcmludGYoIiVzIiwmbnVtYmVyW3Bvc19zdHJpbmddKTsKK30KKworc3RhdGljIGludCBkb19saXN0KHVmKQorICAgIHVuekZpbGUgdWY7Cit7CisgICAgdUxvbmcgaTsKKyAgICB1bnpfZ2xvYmFsX2luZm82NCBnaTsKKyAgICBpbnQgZXJyOworCisgICAgZXJyID0gdW56R2V0R2xvYmFsSW5mbzY0KHVmLCZnaSk7CisgICAgaWYgKGVyciE9VU5aX09LKQorICAgICAgICBwcmludGYoImVycm9yICVkIHdpdGggemlwZmlsZSBpbiB1bnpHZXRHbG9iYWxJbmZvIFxuIixlcnIpOworICAgIHByaW50ZigiICBMZW5ndGggIE1ldGhvZCAgICAgU2l6ZSBSYXRpbyAgIERhdGUgICAgVGltZSAgIENSQy0zMiAgICAgTmFtZVxuIik7CisgICAgcHJpbnRmKCIgIC0tLS0tLSAgLS0tLS0tICAgICAtLS0tIC0tLS0tICAgLS0tLSAgICAtLS0tICAgLS0tLS0tICAgICAtLS0tXG4iKTsKKyAgICBmb3IgKGk9MDtpPGdpLm51bWJlcl9lbnRyeTtpKyspCisgICAgeworICAgICAgICBjaGFyIGZpbGVuYW1lX2luemlwWzI1Nl07CisgICAgICAgIHVuel9maWxlX2luZm82NCBmaWxlX2luZm87CisgICAgICAgIHVMb25nIHJhdGlvPTA7CisgICAgICAgIGNvbnN0IGNoYXIgKnN0cmluZ19tZXRob2Q7CisgICAgICAgIGNoYXIgY2hhckNyeXB0PScgJzsKKyAgICAgICAgZXJyID0gdW56R2V0Q3VycmVudEZpbGVJbmZvNjQodWYsJmZpbGVfaW5mbyxmaWxlbmFtZV9pbnppcCxzaXplb2YoZmlsZW5hbWVfaW56aXApLE5VTEwsMCxOVUxMLDApOworICAgICAgICBpZiAoZXJyIT1VTlpfT0spCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50ZigiZXJyb3IgJWQgd2l0aCB6aXBmaWxlIGluIHVuekdldEN1cnJlbnRGaWxlSW5mb1xuIixlcnIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZpbGVfaW5mby51bmNvbXByZXNzZWRfc2l6ZT4wKQorICAgICAgICAgICAgcmF0aW8gPSAodUxvbmcpKChmaWxlX2luZm8uY29tcHJlc3NlZF9zaXplKjEwMCkvZmlsZV9pbmZvLnVuY29tcHJlc3NlZF9zaXplKTsKKworICAgICAgICAvKiBkaXNwbGF5IGEgJyonIGlmIHRoZSBmaWxlIGlzIGNyeXB0ZWQgKi8KKyAgICAgICAgaWYgKChmaWxlX2luZm8uZmxhZyAmIDEpICE9IDApCisgICAgICAgICAgICBjaGFyQ3J5cHQ9JyonOworCisgICAgICAgIGlmIChmaWxlX2luZm8uY29tcHJlc3Npb25fbWV0aG9kPT0wKQorICAgICAgICAgICAgc3RyaW5nX21ldGhvZD0iU3RvcmVkIjsKKyAgICAgICAgZWxzZQorICAgICAgICBpZiAoZmlsZV9pbmZvLmNvbXByZXNzaW9uX21ldGhvZD09Wl9ERUZMQVRFRCkKKyAgICAgICAgeworICAgICAgICAgICAgdUludCBpTGV2ZWw9KHVJbnQpKChmaWxlX2luZm8uZmxhZyAmIDB4NikvMik7CisgICAgICAgICAgICBpZiAoaUxldmVsPT0wKQorICAgICAgICAgICAgICBzdHJpbmdfbWV0aG9kPSJEZWZsOk4iOworICAgICAgICAgICAgZWxzZSBpZiAoaUxldmVsPT0xKQorICAgICAgICAgICAgICBzdHJpbmdfbWV0aG9kPSJEZWZsOlgiOworICAgICAgICAgICAgZWxzZSBpZiAoKGlMZXZlbD09MikgfHwgKGlMZXZlbD09MykpCisgICAgICAgICAgICAgIHN0cmluZ19tZXRob2Q9IkRlZmw6RiI7IC8qIDI6ZmFzdCAsIDMgOiBleHRyYSBmYXN0Ki8KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIGlmIChmaWxlX2luZm8uY29tcHJlc3Npb25fbWV0aG9kPT1aX0JaSVAyRUQpCisgICAgICAgIHsKKyAgICAgICAgICAgICAgc3RyaW5nX21ldGhvZD0iQlppcDIgIjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBzdHJpbmdfbWV0aG9kPSJVbmtuLiAiOworCisgICAgICAgIERpc3BsYXk2NEJpdHNTaXplKGZpbGVfaW5mby51bmNvbXByZXNzZWRfc2l6ZSw3KTsKKyAgICAgICAgcHJpbnRmKCIgICU2cyVjIixzdHJpbmdfbWV0aG9kLGNoYXJDcnlwdCk7CisgICAgICAgIERpc3BsYXk2NEJpdHNTaXplKGZpbGVfaW5mby5jb21wcmVzc2VkX3NpemUsNyk7CisgICAgICAgIHByaW50ZigiICUzbHUlJSAgJTIuMmx1LSUyLjJsdS0lMi4ybHUgICUyLjJsdTolMi4ybHUgICU4LjhseCAgICVzXG4iLAorICAgICAgICAgICAgICAgIHJhdGlvLAorICAgICAgICAgICAgICAgICh1TG9uZylmaWxlX2luZm8udG11X2RhdGUudG1fbW9uICsgMSwKKyAgICAgICAgICAgICAgICAodUxvbmcpZmlsZV9pbmZvLnRtdV9kYXRlLnRtX21kYXksCisgICAgICAgICAgICAgICAgKHVMb25nKWZpbGVfaW5mby50bXVfZGF0ZS50bV95ZWFyICUgMTAwLAorICAgICAgICAgICAgICAgICh1TG9uZylmaWxlX2luZm8udG11X2RhdGUudG1faG91ciwodUxvbmcpZmlsZV9pbmZvLnRtdV9kYXRlLnRtX21pbiwKKyAgICAgICAgICAgICAgICAodUxvbmcpZmlsZV9pbmZvLmNyYyxmaWxlbmFtZV9pbnppcCk7CisgICAgICAgIGlmICgoaSsxKTxnaS5udW1iZXJfZW50cnkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVyciA9IHVuekdvVG9OZXh0RmlsZSh1Zik7CisgICAgICAgICAgICBpZiAoZXJyIT1VTlpfT0spCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJlcnJvciAlZCB3aXRoIHppcGZpbGUgaW4gdW56R29Ub05leHRGaWxlXG4iLGVycik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IGRvX2V4dHJhY3RfY3VycmVudGZpbGUodWYscG9wdF9leHRyYWN0X3dpdGhvdXRfcGF0aCxwb3B0X292ZXJ3cml0ZSxwYXNzd29yZCkKKyAgICB1bnpGaWxlIHVmOworICAgIGNvbnN0IGludCogcG9wdF9leHRyYWN0X3dpdGhvdXRfcGF0aDsKKyAgICBpbnQqIHBvcHRfb3ZlcndyaXRlOworICAgIGNvbnN0IGNoYXIqIHBhc3N3b3JkOworeworICAgIGNoYXIgZmlsZW5hbWVfaW56aXBbMjU2XTsKKyAgICBjaGFyKiBmaWxlbmFtZV93aXRob3V0cGF0aDsKKyAgICBjaGFyKiBwOworICAgIGludCBlcnI9VU5aX09LOworICAgIEZJTEUgKmZvdXQ9TlVMTDsKKyAgICB2b2lkKiBidWY7CisgICAgdUludCBzaXplX2J1ZjsKKworICAgIHVuel9maWxlX2luZm82NCBmaWxlX2luZm87CisgICAgZXJyID0gdW56R2V0Q3VycmVudEZpbGVJbmZvNjQodWYsJmZpbGVfaW5mbyxmaWxlbmFtZV9pbnppcCxzaXplb2YoZmlsZW5hbWVfaW56aXApLE5VTEwsMCxOVUxMLDApOworCisgICAgaWYgKGVyciE9VU5aX09LKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCJlcnJvciAlZCB3aXRoIHppcGZpbGUgaW4gdW56R2V0Q3VycmVudEZpbGVJbmZvXG4iLGVycik7CisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgc2l6ZV9idWYgPSBXUklURUJVRkZFUlNJWkU7CisgICAgYnVmID0gKHZvaWQqKW1hbGxvYyhzaXplX2J1Zik7CisgICAgaWYgKGJ1Zj09TlVMTCkKKyAgICB7CisgICAgICAgIHByaW50ZigiRXJyb3IgYWxsb2NhdGluZyBtZW1vcnlcbiIpOworICAgICAgICByZXR1cm4gVU5aX0lOVEVSTkFMRVJST1I7CisgICAgfQorCisgICAgcCA9IGZpbGVuYW1lX3dpdGhvdXRwYXRoID0gZmlsZW5hbWVfaW56aXA7CisgICAgd2hpbGUgKCgqcCkgIT0gJ1wwJykKKyAgICB7CisgICAgICAgIGlmICgoKCpwKT09Jy8nKSB8fCAoKCpwKT09J1xcJykpCisgICAgICAgICAgICBmaWxlbmFtZV93aXRob3V0cGF0aCA9IHArMTsKKyAgICAgICAgcCsrOworICAgIH0KKworICAgIGlmICgoKmZpbGVuYW1lX3dpdGhvdXRwYXRoKT09J1wwJykKKyAgICB7CisgICAgICAgIGlmICgoKnBvcHRfZXh0cmFjdF93aXRob3V0X3BhdGgpPT0wKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludGYoImNyZWF0aW5nIGRpcmVjdG9yeTogJXNcbiIsZmlsZW5hbWVfaW56aXApOworICAgICAgICAgICAgbXlta2RpcihmaWxlbmFtZV9pbnppcCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgY29uc3QgY2hhciogd3JpdGVfZmlsZW5hbWU7CisgICAgICAgIGludCBza2lwPTA7CisKKyAgICAgICAgaWYgKCgqcG9wdF9leHRyYWN0X3dpdGhvdXRfcGF0aCk9PTApCisgICAgICAgICAgICB3cml0ZV9maWxlbmFtZSA9IGZpbGVuYW1lX2luemlwOworICAgICAgICBlbHNlCisgICAgICAgICAgICB3cml0ZV9maWxlbmFtZSA9IGZpbGVuYW1lX3dpdGhvdXRwYXRoOworCisgICAgICAgIGVyciA9IHVuek9wZW5DdXJyZW50RmlsZVBhc3N3b3JkKHVmLHBhc3N3b3JkKTsKKyAgICAgICAgaWYgKGVyciE9VU5aX09LKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludGYoImVycm9yICVkIHdpdGggemlwZmlsZSBpbiB1bnpPcGVuQ3VycmVudEZpbGVQYXNzd29yZFxuIixlcnIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCgoKnBvcHRfb3ZlcndyaXRlKT09MCkgJiYgKGVycj09VU5aX09LKSkKKyAgICAgICAgeworICAgICAgICAgICAgY2hhciByZXA9MDsKKyAgICAgICAgICAgIEZJTEUqIGZ0ZXN0ZXhpc3Q7CisgICAgICAgICAgICBmdGVzdGV4aXN0ID0gRk9QRU5fRlVOQyh3cml0ZV9maWxlbmFtZSwicmIiKTsKKyAgICAgICAgICAgIGlmIChmdGVzdGV4aXN0IT1OVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZjbG9zZShmdGVzdGV4aXN0KTsKKyAgICAgICAgICAgICAgICBkbworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY2hhciBhbnN3ZXJbMTI4XTsKKyAgICAgICAgICAgICAgICAgICAgaW50IHJldDsKKworICAgICAgICAgICAgICAgICAgICBwcmludGYoIlRoZSBmaWxlICVzIGV4aXN0cy4gT3ZlcndyaXRlID8gW3ldZXMsIFtuXW8sIFtBXWxsOiAiLHdyaXRlX2ZpbGVuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gc2NhbmYoIiUxcyIsYW5zd2VyKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJldCAhPSAxKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXAgPSBhbnN3ZXJbMF0gOworICAgICAgICAgICAgICAgICAgICBpZiAoKHJlcD49J2EnKSAmJiAocmVwPD0neicpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVwIC09IDB4MjA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHdoaWxlICgocmVwIT0nWScpICYmIChyZXAhPSdOJykgJiYgKHJlcCE9J0EnKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChyZXAgPT0gJ04nKQorICAgICAgICAgICAgICAgIHNraXAgPSAxOworCisgICAgICAgICAgICBpZiAocmVwID09ICdBJykKKyAgICAgICAgICAgICAgICAqcG9wdF9vdmVyd3JpdGU9MTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgoc2tpcD09MCkgJiYgKGVycj09VU5aX09LKSkKKyAgICAgICAgeworICAgICAgICAgICAgZm91dD1GT1BFTl9GVU5DKHdyaXRlX2ZpbGVuYW1lLCJ3YiIpOworICAgICAgICAgICAgLyogc29tZSB6aXBmaWxlIGRvbid0IGNvbnRhaW4gZGlyZWN0b3J5IGFsb25lIGJlZm9yZSBmaWxlICovCisgICAgICAgICAgICBpZiAoKGZvdXQ9PU5VTEwpICYmICgoKnBvcHRfZXh0cmFjdF93aXRob3V0X3BhdGgpPT0wKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmlsZW5hbWVfd2l0aG91dHBhdGghPShjaGFyKilmaWxlbmFtZV9pbnppcCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2hhciBjPSooZmlsZW5hbWVfd2l0aG91dHBhdGgtMSk7CisgICAgICAgICAgICAgICAgKihmaWxlbmFtZV93aXRob3V0cGF0aC0xKT0nXDAnOworICAgICAgICAgICAgICAgIG1ha2VkaXIod3JpdGVfZmlsZW5hbWUpOworICAgICAgICAgICAgICAgICooZmlsZW5hbWVfd2l0aG91dHBhdGgtMSk9YzsKKyAgICAgICAgICAgICAgICBmb3V0PUZPUEVOX0ZVTkMod3JpdGVfZmlsZW5hbWUsIndiIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChmb3V0PT1OVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHByaW50ZigiZXJyb3Igb3BlbmluZyAlc1xuIix3cml0ZV9maWxlbmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoZm91dCE9TlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnRmKCIgZXh0cmFjdGluZzogJXNcbiIsd3JpdGVfZmlsZW5hbWUpOworCisgICAgICAgICAgICBkbworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVyciA9IHVuelJlYWRDdXJyZW50RmlsZSh1ZixidWYsc2l6ZV9idWYpOworICAgICAgICAgICAgICAgIGlmIChlcnI8MCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiZXJyb3IgJWQgd2l0aCB6aXBmaWxlIGluIHVuelJlYWRDdXJyZW50RmlsZVxuIixlcnIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGVycj4wKQorICAgICAgICAgICAgICAgICAgICBpZiAoZndyaXRlKGJ1ZiwodW5zaWduZWQpZXJyLDEsZm91dCkhPTEpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiZXJyb3IgaW4gd3JpdGluZyBleHRyYWN0ZWQgZmlsZVxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBlcnI9VU5aX0VSUk5POworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdoaWxlIChlcnI+MCk7CisgICAgICAgICAgICBpZiAoZm91dCkKKyAgICAgICAgICAgICAgICAgICAgZmNsb3NlKGZvdXQpOworCisgICAgICAgICAgICBpZiAoZXJyPT0wKQorICAgICAgICAgICAgICAgIGNoYW5nZV9maWxlX2RhdGUod3JpdGVfZmlsZW5hbWUsZmlsZV9pbmZvLmRvc0RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX2luZm8udG11X2RhdGUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGVycj09VU5aX09LKQorICAgICAgICB7CisgICAgICAgICAgICBlcnIgPSB1bnpDbG9zZUN1cnJlbnRGaWxlICh1Zik7CisgICAgICAgICAgICBpZiAoZXJyIT1VTlpfT0spCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJlcnJvciAlZCB3aXRoIHppcGZpbGUgaW4gdW56Q2xvc2VDdXJyZW50RmlsZVxuIixlcnIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHVuekNsb3NlQ3VycmVudEZpbGUodWYpOyAvKiBkb24ndCBsb3NlIHRoZSBlcnJvciAqLworICAgIH0KKworICAgIGZyZWUoYnVmKTsKKyAgICByZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyBpbnQgZG9fZXh0cmFjdCh1ZixvcHRfZXh0cmFjdF93aXRob3V0X3BhdGgsb3B0X292ZXJ3cml0ZSxwYXNzd29yZCkKKyAgICB1bnpGaWxlIHVmOworICAgIGludCBvcHRfZXh0cmFjdF93aXRob3V0X3BhdGg7CisgICAgaW50IG9wdF9vdmVyd3JpdGU7CisgICAgY29uc3QgY2hhciogcGFzc3dvcmQ7Cit7CisgICAgdUxvbmcgaTsKKyAgICB1bnpfZ2xvYmFsX2luZm82NCBnaTsKKyAgICBpbnQgZXJyOworCisgICAgZXJyID0gdW56R2V0R2xvYmFsSW5mbzY0KHVmLCZnaSk7CisgICAgaWYgKGVyciE9VU5aX09LKQorICAgICAgICBwcmludGYoImVycm9yICVkIHdpdGggemlwZmlsZSBpbiB1bnpHZXRHbG9iYWxJbmZvIFxuIixlcnIpOworCisgICAgZm9yIChpPTA7aTxnaS5udW1iZXJfZW50cnk7aSsrKQorICAgIHsKKyAgICAgICAgaWYgKGRvX2V4dHJhY3RfY3VycmVudGZpbGUodWYsJm9wdF9leHRyYWN0X3dpdGhvdXRfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9wdF9vdmVyd3JpdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkKSAhPSBVTlpfT0spCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoKGkrMSk8Z2kubnVtYmVyX2VudHJ5KQorICAgICAgICB7CisgICAgICAgICAgICBlcnIgPSB1bnpHb1RvTmV4dEZpbGUodWYpOworICAgICAgICAgICAgaWYgKGVyciE9VU5aX09LKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHByaW50ZigiZXJyb3IgJWQgd2l0aCB6aXBmaWxlIGluIHVuekdvVG9OZXh0RmlsZVxuIixlcnIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZG9fZXh0cmFjdF9vbmVmaWxlKHVmLGZpbGVuYW1lLG9wdF9leHRyYWN0X3dpdGhvdXRfcGF0aCxvcHRfb3ZlcndyaXRlLHBhc3N3b3JkKQorICAgIHVuekZpbGUgdWY7CisgICAgY29uc3QgY2hhciogZmlsZW5hbWU7CisgICAgaW50IG9wdF9leHRyYWN0X3dpdGhvdXRfcGF0aDsKKyAgICBpbnQgb3B0X292ZXJ3cml0ZTsKKyAgICBjb25zdCBjaGFyKiBwYXNzd29yZDsKK3sKKyAgICBpZiAodW56TG9jYXRlRmlsZSh1ZixmaWxlbmFtZSxDQVNFU0VOU0lUSVZJVFkpIT1VTlpfT0spCisgICAgeworICAgICAgICBwcmludGYoImZpbGUgJXMgbm90IGZvdW5kIGluIHRoZSB6aXBmaWxlXG4iLGZpbGVuYW1lKTsKKyAgICAgICAgcmV0dXJuIDI7CisgICAgfQorCisgICAgaWYgKGRvX2V4dHJhY3RfY3VycmVudGZpbGUodWYsJm9wdF9leHRyYWN0X3dpdGhvdXRfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9wdF9vdmVyd3JpdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkKSA9PSBVTlpfT0spCisgICAgICAgIHJldHVybiAwOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIDE7Cit9CisKKworaW50IG1haW4oYXJnYyxhcmd2KQorICAgIGludCBhcmdjOworICAgIGNoYXIgKmFyZ3ZbXTsKK3sKKyAgICBjb25zdCBjaGFyICp6aXBmaWxlbmFtZT1OVUxMOworICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lX3RvX2V4dHJhY3Q9TlVMTDsKKyAgICBjb25zdCBjaGFyICpwYXNzd29yZD1OVUxMOworICAgIGNoYXIgZmlsZW5hbWVfdHJ5W01BWEZJTEVOQU1FKzE2XSA9ICIiOworICAgIGludCBpOworICAgIGludCByZXRfdmFsdWU9MDsKKyAgICBpbnQgb3B0X2RvX2xpc3Q9MDsKKyAgICBpbnQgb3B0X2RvX2V4dHJhY3Q9MTsKKyAgICBpbnQgb3B0X2RvX2V4dHJhY3Rfd2l0aG91dHBhdGg9MDsKKyAgICBpbnQgb3B0X292ZXJ3cml0ZT0wOworICAgIGludCBvcHRfZXh0cmFjdGRpcj0wOworICAgIGNvbnN0IGNoYXIgKmRpcm5hbWU9TlVMTDsKKyAgICB1bnpGaWxlIHVmPU5VTEw7CisKKyAgICBkb19iYW5uZXIoKTsKKyAgICBpZiAoYXJnYz09MSkKKyAgICB7CisgICAgICAgIGRvX2hlbHAoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGZvciAoaT0xO2k8YXJnYztpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgoKmFyZ3ZbaV0pPT0nLScpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcD1hcmd2W2ldKzE7CisKKyAgICAgICAgICAgICAgICB3aGlsZSAoKCpwKSE9J1wwJykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNoYXIgYz0qKHArKyk7OworICAgICAgICAgICAgICAgICAgICBpZiAoKGM9PSdsJykgfHwgKGM9PSdMJykpCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRfZG9fbGlzdCA9IDE7CisgICAgICAgICAgICAgICAgICAgIGlmICgoYz09J3YnKSB8fCAoYz09J1YnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdF9kb19saXN0ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChjPT0neCcpIHx8IChjPT0nWCcpKQorICAgICAgICAgICAgICAgICAgICAgICAgb3B0X2RvX2V4dHJhY3QgPSAxOworICAgICAgICAgICAgICAgICAgICBpZiAoKGM9PSdlJykgfHwgKGM9PSdFJykpCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRfZG9fZXh0cmFjdCA9IG9wdF9kb19leHRyYWN0X3dpdGhvdXRwYXRoID0gMTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChjPT0nbycpIHx8IChjPT0nTycpKQorICAgICAgICAgICAgICAgICAgICAgICAgb3B0X292ZXJ3cml0ZT0xOworICAgICAgICAgICAgICAgICAgICBpZiAoKGM9PSdkJykgfHwgKGM9PSdEJykpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdF9leHRyYWN0ZGlyPTE7CisgICAgICAgICAgICAgICAgICAgICAgICBkaXJuYW1lPWFyZ3ZbaSsxXTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmICgoKGM9PSdwJykgfHwgKGM9PSdQJykpICYmIChpKzE8YXJnYykpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkPWFyZ3ZbaSsxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoemlwZmlsZW5hbWUgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgemlwZmlsZW5hbWUgPSBhcmd2W2ldOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKChmaWxlbmFtZV90b19leHRyYWN0PT1OVUxMKSAmJiAoIW9wdF9leHRyYWN0ZGlyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lX3RvX2V4dHJhY3QgPSBhcmd2W2ldIDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh6aXBmaWxlbmFtZSE9TlVMTCkKKyAgICB7CisKKyMgICAgICAgIGlmZGVmIFVTRVdJTjMySU9BUEkKKyAgICAgICAgemxpYl9maWxlZnVuYzY0X2RlZiBmZnVuYzsKKyMgICAgICAgIGVuZGlmCisKKyAgICAgICAgc3RybmNweShmaWxlbmFtZV90cnksIHppcGZpbGVuYW1lLE1BWEZJTEVOQU1FLTEpOworICAgICAgICAvKiBzdHJuY3B5IGRvZXNudCBhcHBlbmQgdGhlIHRyYWlsaW5nIE5VTEwsIG9mIHRoZSBzdHJpbmcgaXMgdG9vIGxvbmcuICovCisgICAgICAgIGZpbGVuYW1lX3RyeVsgTUFYRklMRU5BTUUgXSA9ICdcMCc7CisKKyMgICAgICAgIGlmZGVmIFVTRVdJTjMySU9BUEkKKyAgICAgICAgZmlsbF93aW4zMl9maWxlZnVuYzY0QSgmZmZ1bmMpOworICAgICAgICB1ZiA9IHVuek9wZW4yXzY0KHppcGZpbGVuYW1lLCZmZnVuYyk7CisjICAgICAgICBlbHNlCisgICAgICAgIHVmID0gdW56T3BlbjY0KHppcGZpbGVuYW1lKTsKKyMgICAgICAgIGVuZGlmCisgICAgICAgIGlmICh1Zj09TlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgc3RyY2F0KGZpbGVuYW1lX3RyeSwiLnppcCIpOworIyAgICAgICAgICAgIGlmZGVmIFVTRVdJTjMySU9BUEkKKyAgICAgICAgICAgIHVmID0gdW56T3BlbjJfNjQoZmlsZW5hbWVfdHJ5LCZmZnVuYyk7CisjICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgdWYgPSB1bnpPcGVuNjQoZmlsZW5hbWVfdHJ5KTsKKyMgICAgICAgICAgICBlbmRpZgorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHVmPT1OVUxMKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCJDYW5ub3Qgb3BlbiAlcyBvciAlcy56aXBcbiIsemlwZmlsZW5hbWUsemlwZmlsZW5hbWUpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgcHJpbnRmKCIlcyBvcGVuZWRcbiIsZmlsZW5hbWVfdHJ5KTsKKworICAgIGlmIChvcHRfZG9fbGlzdD09MSkKKyAgICAgICAgcmV0X3ZhbHVlID0gZG9fbGlzdCh1Zik7CisgICAgZWxzZSBpZiAob3B0X2RvX2V4dHJhY3Q9PTEpCisgICAgeworI2lmZGVmIF9XSU4zMgorICAgICAgICBpZiAob3B0X2V4dHJhY3RkaXIgJiYgX2NoZGlyKGRpcm5hbWUpKQorI2Vsc2UKKyAgICAgICAgaWYgKG9wdF9leHRyYWN0ZGlyICYmIGNoZGlyKGRpcm5hbWUpKQorI2VuZGlmCisgICAgICAgIHsKKyAgICAgICAgICBwcmludGYoIkVycm9yIGNoYW5naW5nIGludG8gJXMsIGFib3J0aW5nXG4iLCBkaXJuYW1lKTsKKyAgICAgICAgICBleGl0KC0xKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChmaWxlbmFtZV90b19leHRyYWN0ID09IE5VTEwpCisgICAgICAgICAgICByZXRfdmFsdWUgPSBkb19leHRyYWN0KHVmLCBvcHRfZG9fZXh0cmFjdF93aXRob3V0cGF0aCwgb3B0X292ZXJ3cml0ZSwgcGFzc3dvcmQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXRfdmFsdWUgPSBkb19leHRyYWN0X29uZWZpbGUodWYsIGZpbGVuYW1lX3RvX2V4dHJhY3QsIG9wdF9kb19leHRyYWN0X3dpdGhvdXRwYXRoLCBvcHRfb3ZlcndyaXRlLCBwYXNzd29yZCk7CisgICAgfQorCisgICAgdW56Q2xvc2UodWYpOworCisgICAgcmV0dXJuIHJldF92YWx1ZTsKK30KZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL21pbml6aXAvbWluaXVuemlwLjEgYi9zcmMvY29udHJpYi9taW5pemlwL21pbml1bnppcC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMWFjNjkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29udHJpYi9taW5pemlwL21pbml1bnppcC4xCkBAIC0wLDAgKzEsNjMgQEAKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGV5LCBFTUFDUzogLSotIG5yb2ZmIC0qLQorLlRIIG1pbml1bnppcCAxICJOb3YgNywgMjAwMSIKKy5cIiBQbGVhc2UgYWRqdXN0IHRoaXMgZGF0ZSB3aGVuZXZlciByZXZpc2luZyB0aGUgbWFucGFnZS4KKy5cIgorLlwiIFNvbWUgcm9mZiBtYWNyb3MsIGZvciByZWZlcmVuY2U6CisuXCIgLm5oICAgICAgICBkaXNhYmxlIGh5cGhlbmF0aW9uCisuXCIgLmh5ICAgICAgICBlbmFibGUgaHlwaGVuYXRpb24KKy5cIiAuYWQgbCAgICAgIGxlZnQganVzdGlmeQorLlwiIC5hZCBiICAgICAganVzdGlmeSB0byBib3RoIGxlZnQgYW5kIHJpZ2h0IG1hcmdpbnMKKy5cIiAubmYgICAgICAgIGRpc2FibGUgZmlsbGluZworLlwiIC5maSAgICAgICAgZW5hYmxlIGZpbGxpbmcKKy5cIiAuYnIgICAgICAgIGluc2VydCBsaW5lIGJyZWFrCisuXCIgLnNwIDxuPiAgICBpbnNlcnQgbisxIGVtcHR5IGxpbmVzCisuXCIgZm9yIG1hbnBhZ2Utc3BlY2lmaWMgbWFjcm9zLCBzZWUgbWFuKDcpCisuU0ggTkFNRQorbWluaXVuemlwIC0gdW5jb21wcmVzcyBhbmQgZXhhbWluZSBaSVAgYXJjaGl2ZXMKKy5TSCBTWU5PUFNJUworLkIgbWluaXVuemlwCisuUkkgWyAtZXh2bG8gXQoremlwZmlsZSBbIGZpbGVzX3RvX2V4dHJhY3QgXSBbLWQgdGVtcGRpcl0KKy5TSCBERVNDUklQVElPTgorLkIgbWluaXppcAoraXMgYSBzaW1wbGUgdG9vbCB3aGljaCBhbGxvd3MgdGhlIGV4dHJhY3Rpb24gb2YgY29tcHJlc3NlZCBmaWxlCithcmNoaXZlcyBpbiB0aGUgWklQIGZvcm1hdCB1c2VkIGJ5IHRoZSBNUy1ET1MgdXRpbGl0eSBQS1pJUC4gIEl0IHdhcword3JpdHRlbiBhcyBhIGRlbW9uc3RyYXRpb24gb2YgdGhlCisuSVIgemxpYiAoMykKK2xpYnJhcnkgYW5kIHRoZXJlZm9yZSBsYWNrIG1hbnkgb2YgdGhlIGZlYXR1cmVzIG9mIHRoZQorLklSIHVuemlwICgxKQorcHJvZ3JhbS4KKy5TSCBPUFRJT05TCitBIG51bWJlciBvZiBvcHRpb25zIGFyZSBzdXBwb3J0ZWQuICBXaXRoIHRoZSBleGNlcHRpb24gb2YKKy5CSSBcLWRcICB0ZW1wZGlyCit0aGVzZSBtdXN0IGJlIHN1cHBsaWVkIGJlZm9yZSBhbnkKK290aGVyIGFyZ3VtZW50cyBhbmQgYXJlOgorLlRQCisuQkkgXC1sXCAsXCBcLVwtdgorTGlzdCB0aGUgZmlsZXMgaW4gdGhlIGFyY2hpdmUgd2l0aG91dCBleHRyYWN0aW5nIHRoZW0uCisuVFAKKy5CIFwtbworT3ZlcndyaXRlIGZpbGVzIHdpdGhvdXQgcHJvbXB0aW5nIGZvciBjb25maXJtYXRpb24uCisuVFAKKy5CIFwteAorRXh0cmFjdCBmaWxlcyAoZGVmYXVsdCkuCisuUFAKK1RoZQorLkkgemlwZmlsZQorYXJndW1lbnQgaXMgdGhlIG5hbWUgb2YgdGhlIGFyY2hpdmUgdG8gcHJvY2Vzcy4gVGhlIG5leHQgYXJndW1lbnQgY2FuIGJlIHVzZWQKK3RvIHNwZWNpZnkgYSBzaW5nbGUgZmlsZSB0byBleHRyYWN0IGZyb20gdGhlIGFyY2hpdmUuCisKK0xhc3RseSwgdGhlIGZvbGxvd2luZyBvcHRpb24gY2FuIGJlIHNwZWNpZmllZCBhdCB0aGUgZW5kIG9mIHRoZSBjb21tYW5kLWxpbmU6CisuVFAKKy5CSSBcLWRcICB0ZW1wZGlyCitFeHRyYWN0IHRoZSBhcmNoaXZlIGluIHRoZSBkaXJlY3RvcnkKKy5JIHRlbXBkaXIKK3JhdGhlciB0aGFuIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKy5TSCBTRUUgQUxTTworLkJSIG1pbml6aXAgKDEpLAorLkJSIHpsaWIgKDMpLAorLkJSIHVuemlwICgxKS4KKy5TSCBBVVRIT1IKK1RoaXMgcHJvZ3JhbSB3YXMgd3JpdHRlbiBieSBHaWxsZXMgVm9sbGFudC4gIFRoaXMgbWFudWFsIHBhZ2Ugd2FzCit3cml0dGVuIGJ5IE1hcmsgQnJvd24gPGJyb29uaWVAc2lyZW5hLm9yZy51az4uIFRoZSAtZCB0ZW1wZGlyIG9wdGlvbgord2FzIGFkZGVkIGJ5IERpcmsgRWRkZWxidWV0dGVsIDxlZGRAZGViaWFuLm9yZz4uCmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi9taW5pemlwL21pbml6aXAuMSBiL3NyYy9jb250cmliL21pbml6aXAvbWluaXppcC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExNTQ0ODQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29udHJpYi9taW5pemlwL21pbml6aXAuMQpAQCAtMCwwICsxLDQ2IEBACisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhleSwgRU1BQ1M6IC0qLSBucm9mZiAtKi0KKy5USCBtaW5pemlwIDEgIk1heSAyLCAyMDAxIgorLlwiIFBsZWFzZSBhZGp1c3QgdGhpcyBkYXRlIHdoZW5ldmVyIHJldmlzaW5nIHRoZSBtYW5wYWdlLgorLlwiCisuXCIgU29tZSByb2ZmIG1hY3JvcywgZm9yIHJlZmVyZW5jZToKKy5cIiAubmggICAgICAgIGRpc2FibGUgaHlwaGVuYXRpb24KKy5cIiAuaHkgICAgICAgIGVuYWJsZSBoeXBoZW5hdGlvbgorLlwiIC5hZCBsICAgICAgbGVmdCBqdXN0aWZ5CisuXCIgLmFkIGIgICAgICBqdXN0aWZ5IHRvIGJvdGggbGVmdCBhbmQgcmlnaHQgbWFyZ2lucworLlwiIC5uZiAgICAgICAgZGlzYWJsZSBmaWxsaW5nCisuXCIgLmZpICAgICAgICBlbmFibGUgZmlsbGluZworLlwiIC5iciAgICAgICAgaW5zZXJ0IGxpbmUgYnJlYWsKKy5cIiAuc3AgPG4+ICAgIGluc2VydCBuKzEgZW1wdHkgbGluZXMKKy5cIiBmb3IgbWFucGFnZS1zcGVjaWZpYyBtYWNyb3MsIHNlZSBtYW4oNykKKy5TSCBOQU1FCittaW5pemlwIC0gY3JlYXRlIFpJUCBhcmNoaXZlcworLlNIIFNZTk9QU0lTCisuQiBtaW5pemlwCisuUkkgWyAtbyBdCit6aXBmaWxlIFsgIiBmaWxlcyIgLi4uIF0KKy5TSCBERVNDUklQVElPTgorLkIgbWluaXppcAoraXMgYSBzaW1wbGUgdG9vbCB3aGljaCBhbGxvd3MgdGhlIGNyZWF0aW9uIG9mIGNvbXByZXNzZWQgZmlsZSBhcmNoaXZlcworaW4gdGhlIFpJUCBmb3JtYXQgdXNlZCBieSB0aGUgTVMtRE9TIHV0aWxpdHkgUEtaSVAuICBJdCB3YXMgd3JpdHRlbiBhcworYSBkZW1vbnN0cmF0aW9uIG9mIHRoZQorLklSIHpsaWIgKDMpCitsaWJyYXJ5IGFuZCB0aGVyZWZvcmUgbGFjayBtYW55IG9mIHRoZSBmZWF0dXJlcyBvZiB0aGUKKy5JUiB6aXAgKDEpCitwcm9ncmFtLgorLlNIIE9QVElPTlMKK1RoZSBmaXJzdCBhcmd1bWVudCBzdXBwbGllZCBpcyB0aGUgbmFtZSBvZiB0aGUgWklQIGFyY2hpdmUgdG8gY3JlYXRlIG9yCisuUkkgLW8KK2luIHdoaWNoIGNhc2UgaXQgaXMgaWdub3JlZCBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCB0cmVhdGVkIGFzIHRoZQorbmFtZSBvZiB0aGUgWklQIGZpbGUuICBJZiB0aGUgWklQIGZpbGUgYWxyZWFkeSBleGlzdHMgaXQgd2lsbCBiZQorb3ZlcndyaXR0ZW4uCisuUFAKK1N1YnNlcXVlbnQgYXJndW1lbnRzIHNwZWNpZnkgYSBsaXN0IG9mIGZpbGVzIHRvIHBsYWNlIGluIHRoZSBaSVAKK2FyY2hpdmUuICBJZiBub25lIGFyZSBzcGVjaWZpZWQgdGhlbiBhbiBlbXB0eSBhcmNoaXZlIHdpbGwgYmUgY3JlYXRlZC4KKy5TSCBTRUUgQUxTTworLkJSIG1pbml1bnppcCAoMSksCisuQlIgemxpYiAoMyksCisuQlIgemlwICgxKS4KKy5TSCBBVVRIT1IKK1RoaXMgcHJvZ3JhbSB3YXMgd3JpdHRlbiBieSBHaWxsZXMgVm9sbGFudC4gIFRoaXMgbWFudWFsIHBhZ2Ugd2FzCit3cml0dGVuIGJ5IE1hcmsgQnJvd24gPGJyb29uaWVAc2lyZW5hLm9yZy51az4uCisKZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL21pbml6aXAvbWluaXppcC5jIGIvc3JjL2NvbnRyaWIvbWluaXppcC9taW5pemlwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y5MzdhYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb250cmliL21pbml6aXAvbWluaXppcC5jCkBAIC0wLDAgKzEsNTIxIEBACisvKgorICAgbWluaXppcC5jCisgICBWZXJzaW9uIDEuMSwgRmVicnVhcnkgMTRoLCAyMDEwCisgICBzYW1wbGUgcGFydCBvZiB0aGUgTWluaVppcCBwcm9qZWN0IC0gKCBodHRwOi8vd3d3LndpbmltYWdlLmNvbS96TGliRGxsL21pbml6aXAuaHRtbCApCisKKyAgICAgICAgIENvcHlyaWdodCAoQykgMTk5OC0yMDEwIEdpbGxlcyBWb2xsYW50IChtaW5pemlwKSAoIGh0dHA6Ly93d3cud2luaW1hZ2UuY29tL3pMaWJEbGwvbWluaXppcC5odG1sICkKKworICAgICAgICAgTW9kaWZpY2F0aW9ucyBvZiBVbnppcCBmb3IgWmlwNjQKKyAgICAgICAgIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IEV2ZW4gUm91YXVsdAorCisgICAgICAgICBNb2RpZmljYXRpb25zIGZvciBaaXA2NCBzdXBwb3J0IG9uIGJvdGggemlwIGFuZCB1bnppcAorICAgICAgICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgTWF0aGlhcyBTdmVuc3NvbiAoIGh0dHA6Ly9yZXN1bHQ0Mi5jb20gKQorKi8KKworCisjaWYgKCFkZWZpbmVkKF9XSU4zMikpICYmICghZGVmaW5lZChXSU4zMikpICYmICghZGVmaW5lZChfX0FQUExFX18pKQorICAgICAgICAjaWZuZGVmIF9fVVNFX0ZJTEVfT0ZGU0VUNjQKKyAgICAgICAgICAgICAgICAjZGVmaW5lIF9fVVNFX0ZJTEVfT0ZGU0VUNjQKKyAgICAgICAgI2VuZGlmCisgICAgICAgICNpZm5kZWYgX19VU0VfTEFSR0VGSUxFNjQKKyAgICAgICAgICAgICAgICAjZGVmaW5lIF9fVVNFX0xBUkdFRklMRTY0CisgICAgICAgICNlbmRpZgorICAgICAgICAjaWZuZGVmIF9MQVJHRUZJTEU2NF9TT1VSQ0UKKyAgICAgICAgICAgICAgICAjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UKKyAgICAgICAgI2VuZGlmCisgICAgICAgICNpZm5kZWYgX0ZJTEVfT0ZGU0VUX0JJVAorICAgICAgICAgICAgICAgICNkZWZpbmUgX0ZJTEVfT0ZGU0VUX0JJVCA2NAorICAgICAgICAjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgX19BUFBMRV9fCisvLyBJbiBkYXJ3aW4gYW5kIHBlcmhhcHMgb3RoZXIgQlNEIHZhcmlhbnRzIG9mZl90IGlzIGEgNjQgYml0IHZhbHVlLCBoZW5jZSBubyBuZWVkIGZvciBzcGVjaWZpYyA2NCBiaXQgZnVuY3Rpb25zCisjZGVmaW5lIEZPUEVOX0ZVTkMoZmlsZW5hbWUsIG1vZGUpIGZvcGVuKGZpbGVuYW1lLCBtb2RlKQorI2RlZmluZSBGVEVMTE9fRlVOQyhzdHJlYW0pIGZ0ZWxsbyhzdHJlYW0pCisjZGVmaW5lIEZTRUVLT19GVU5DKHN0cmVhbSwgb2Zmc2V0LCBvcmlnaW4pIGZzZWVrbyhzdHJlYW0sIG9mZnNldCwgb3JpZ2luKQorI2Vsc2UKKyNkZWZpbmUgRk9QRU5fRlVOQyhmaWxlbmFtZSwgbW9kZSkgZm9wZW42NChmaWxlbmFtZSwgbW9kZSkKKyNkZWZpbmUgRlRFTExPX0ZVTkMoc3RyZWFtKSBmdGVsbG82NChzdHJlYW0pCisjZGVmaW5lIEZTRUVLT19GVU5DKHN0cmVhbSwgb2Zmc2V0LCBvcmlnaW4pIGZzZWVrbzY0KHN0cmVhbSwgb2Zmc2V0LCBvcmlnaW4pCisjZW5kaWYKKworCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisKKyNpZmRlZiBfV0lOMzIKKyMgaW5jbHVkZSA8ZGlyZWN0Lmg+CisjIGluY2x1ZGUgPGlvLmg+CisjZWxzZQorIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyMgaW5jbHVkZSA8dXRpbWUuaD4KKyMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjIGluY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKKworI2luY2x1ZGUgInppcC5oIgorCisjaWZkZWYgX1dJTjMyCisgICAgICAgICNkZWZpbmUgVVNFV0lOMzJJT0FQSQorICAgICAgICAjaW5jbHVkZSAiaW93aW4zMi5oIgorI2VuZGlmCisKKworCisjZGVmaW5lIFdSSVRFQlVGRkVSU0laRSAoMTYzODQpCisjZGVmaW5lIE1BWEZJTEVOQU1FICgyNTYpCisKKyNpZmRlZiBfV0lOMzIKK3N0YXRpYyBpbnQgZmlsZXRpbWUoZiwgdG16aXAsIGR0KQorICAgIGNvbnN0IGNoYXIgKmY7ICAgICAgICAgIC8qIG5hbWUgb2YgZmlsZSB0byBnZXQgaW5mbyBvbiAqLworICAgIHRtX3ppcCAqdG16aXA7ICAgICAgICAgICAgIC8qIHJldHVybiB2YWx1ZTogYWNjZXNzLCBtb2RpZmljLiBhbmQgY3JlYXRpb24gdGltZXMgKi8KKyAgICB1TG9uZyAqZHQ7ICAgICAgICAgICAgIC8qIGRvc3RpbWUgKi8KK3sKKyAgaW50IHJldCA9IDA7CisgIHsKKyAgICAgIEZJTEVUSU1FIGZ0TG9jYWw7CisgICAgICBIQU5ETEUgaEZpbmQ7CisgICAgICBXSU4zMl9GSU5EX0RBVEFBIGZmMzI7CisKKyAgICAgIGhGaW5kID0gRmluZEZpcnN0RmlsZUEoZiwmZmYzMik7CisgICAgICBpZiAoaEZpbmQgIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCisgICAgICB7CisgICAgICAgIEZpbGVUaW1lVG9Mb2NhbEZpbGVUaW1lKCYoZmYzMi5mdExhc3RXcml0ZVRpbWUpLCZmdExvY2FsKTsKKyAgICAgICAgRmlsZVRpbWVUb0Rvc0RhdGVUaW1lKCZmdExvY2FsLCgoTFBXT1JEKWR0KSsxLCgoTFBXT1JEKWR0KSswKTsKKyAgICAgICAgRmluZENsb3NlKGhGaW5kKTsKKyAgICAgICAgcmV0ID0gMTsKKyAgICAgIH0KKyAgfQorICByZXR1cm4gcmV0OworfQorI2Vsc2UKKyNpZiBkZWZpbmVkKHVuaXgpIHx8IGRlZmluZWQoX19BUFBMRV9fKQorc3RhdGljIGludCBmaWxldGltZShmLCB0bXppcCwgZHQpCisgICAgY29uc3QgY2hhciAqZjsgICAgICAgICAvKiBuYW1lIG9mIGZpbGUgdG8gZ2V0IGluZm8gb24gKi8KKyAgICB0bV96aXAgKnRtemlwOyAgICAgICAgIC8qIHJldHVybiB2YWx1ZTogYWNjZXNzLCBtb2RpZmljLiBhbmQgY3JlYXRpb24gdGltZXMgKi8KKyAgICB1TG9uZyAqZHQ7ICAgICAgICAgICAgIC8qIGRvc3RpbWUgKi8KK3sKKyAgKHZvaWQpZHQ7CisgIGludCByZXQ9MDsKKyAgc3RydWN0IHN0YXQgczsgICAgICAgIC8qIHJlc3VsdHMgb2Ygc3RhdCgpICovCisgIHN0cnVjdCB0bSogZmlsZWRhdGU7CisgIHRpbWVfdCB0bV90PTA7CisKKyAgaWYgKHN0cmNtcChmLCItIikhPTApCisgIHsKKyAgICBjaGFyIG5hbWVbTUFYRklMRU5BTUUrMV07CisgICAgc2l6ZV90IGxlbiA9IHN0cmxlbihmKTsKKyAgICBpZiAobGVuID4gTUFYRklMRU5BTUUpCisgICAgICBsZW4gPSBNQVhGSUxFTkFNRTsKKworICAgIHN0cm5jcHkobmFtZSwgZixNQVhGSUxFTkFNRS0xKTsKKyAgICAvKiBzdHJuY3B5IGRvZXNudCBhcHBlbmQgdGhlIHRyYWlsaW5nIE5VTEwsIG9mIHRoZSBzdHJpbmcgaXMgdG9vIGxvbmcuICovCisgICAgbmFtZVsgTUFYRklMRU5BTUUgXSA9ICdcMCc7CisKKyAgICBpZiAobmFtZVtsZW4gLSAxXSA9PSAnLycpCisgICAgICBuYW1lW2xlbiAtIDFdID0gJ1wwJzsKKyAgICAvKiBub3QgYWxsIHN5c3RlbXMgYWxsb3cgc3RhdCdpbmcgYSBmaWxlIHdpdGggLyBhcHBlbmRlZCAqLworICAgIGlmIChzdGF0KG5hbWUsJnMpPT0wKQorICAgIHsKKyAgICAgIHRtX3QgPSBzLnN0X210aW1lOworICAgICAgcmV0ID0gMTsKKyAgICB9CisgIH0KKyAgZmlsZWRhdGUgPSBsb2NhbHRpbWUoJnRtX3QpOworCisgIHRtemlwLT50bV9zZWMgID0gZmlsZWRhdGUtPnRtX3NlYzsKKyAgdG16aXAtPnRtX21pbiAgPSBmaWxlZGF0ZS0+dG1fbWluOworICB0bXppcC0+dG1faG91ciA9IGZpbGVkYXRlLT50bV9ob3VyOworICB0bXppcC0+dG1fbWRheSA9IGZpbGVkYXRlLT50bV9tZGF5OworICB0bXppcC0+dG1fbW9uICA9IGZpbGVkYXRlLT50bV9tb24gOworICB0bXppcC0+dG1feWVhciA9IGZpbGVkYXRlLT50bV95ZWFyOworCisgIHJldHVybiByZXQ7Cit9CisjZWxzZQordUxvbmcgZmlsZXRpbWUoZiwgdG16aXAsIGR0KQorICAgIGNvbnN0IGNoYXIgKmY7ICAgICAgICAgIC8qIG5hbWUgb2YgZmlsZSB0byBnZXQgaW5mbyBvbiAqLworICAgIHRtX3ppcCAqdG16aXA7ICAgICAgICAgICAgIC8qIHJldHVybiB2YWx1ZTogYWNjZXNzLCBtb2RpZmljLiBhbmQgY3JlYXRpb24gdGltZXMgKi8KKyAgICB1TG9uZyAqZHQ7ICAgICAgICAgICAgIC8qIGRvc3RpbWUgKi8KK3sKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgorI2VuZGlmCisKKworCisKK3N0YXRpYyBpbnQgY2hlY2tfZXhpc3RfZmlsZShmaWxlbmFtZSkKKyAgICBjb25zdCBjaGFyKiBmaWxlbmFtZTsKK3sKKyAgICBGSUxFKiBmdGVzdGV4aXN0OworICAgIGludCByZXQgPSAxOworICAgIGZ0ZXN0ZXhpc3QgPSBGT1BFTl9GVU5DKGZpbGVuYW1lLCJyYiIpOworICAgIGlmIChmdGVzdGV4aXN0PT1OVUxMKQorICAgICAgICByZXQgPSAwOworICAgIGVsc2UKKyAgICAgICAgZmNsb3NlKGZ0ZXN0ZXhpc3QpOworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGRvX2Jhbm5lcigpCit7CisgICAgcHJpbnRmKCJNaW5pWmlwIDEuMSwgZGVtbyBvZiB6TGliICsgTWluaVppcDY0IHBhY2thZ2UsIHdyaXR0ZW4gYnkgR2lsbGVzIFZvbGxhbnRcbiIpOworICAgIHByaW50ZigibW9yZSBpbmZvIG9uIE1pbmlaaXAgYXQgaHR0cDovL3d3dy53aW5pbWFnZS5jb20vekxpYkRsbC9taW5pemlwLmh0bWxcblxuIik7Cit9CisKK3N0YXRpYyB2b2lkIGRvX2hlbHAoKQoreworICAgIHByaW50ZigiVXNhZ2UgOiBtaW5pemlwIFstb10gWy1hXSBbLTAgdG8gLTldIFstcCBwYXNzd29yZF0gWy1qXSBmaWxlLnppcCBbZmlsZXNfdG9fYWRkXVxuXG4iIFwKKyAgICAgICAgICAgIiAgLW8gIE92ZXJ3cml0ZSBleGlzdGluZyBmaWxlLnppcFxuIiBcCisgICAgICAgICAgICIgIC1hICBBcHBlbmQgdG8gZXhpc3RpbmcgZmlsZS56aXBcbiIgXAorICAgICAgICAgICAiICAtMCAgU3RvcmUgb25seVxuIiBcCisgICAgICAgICAgICIgIC0xICBDb21wcmVzcyBmYXN0ZXJcbiIgXAorICAgICAgICAgICAiICAtOSAgQ29tcHJlc3MgYmV0dGVyXG5cbiIgXAorICAgICAgICAgICAiICAtaiAgZXhjbHVkZSBwYXRoLiBzdG9yZSBvbmx5IHRoZSBmaWxlIG5hbWUuXG5cbiIpOworfQorCisvKiBjYWxjdWxhdGUgdGhlIENSQzMyIG9mIGEgZmlsZSwKKyAgIGJlY2F1c2UgdG8gZW5jcnlwdCBhIGZpbGUsIHdlIG5lZWQga25vd24gdGhlIENSQzMyIG9mIHRoZSBmaWxlIGJlZm9yZSAqLworc3RhdGljIGludCBnZXRGaWxlQ3JjKGNvbnN0IGNoYXIqIGZpbGVuYW1laW56aXAsdm9pZCpidWYsdW5zaWduZWQgbG9uZyBzaXplX2J1Zix1bnNpZ25lZCBsb25nKiByZXN1bHRfY3JjKQoreworICAgdW5zaWduZWQgbG9uZyBjYWxjdWxhdGVfY3JjPTA7CisgICBpbnQgZXJyPVpJUF9PSzsKKyAgIEZJTEUgKiBmaW4gPSBGT1BFTl9GVU5DKGZpbGVuYW1laW56aXAsInJiIik7CisKKyAgIHVuc2lnbmVkIGxvbmcgc2l6ZV9yZWFkID0gMDsKKyAgIHVuc2lnbmVkIGxvbmcgdG90YWxfcmVhZCA9IDA7CisgICBpZiAoZmluPT1OVUxMKQorICAgeworICAgICAgIGVyciA9IFpJUF9FUlJOTzsKKyAgIH0KKworICAgIGlmIChlcnIgPT0gWklQX09LKQorICAgICAgICBkbworICAgICAgICB7CisgICAgICAgICAgICBlcnIgPSBaSVBfT0s7CisgICAgICAgICAgICBzaXplX3JlYWQgPSBmcmVhZChidWYsMSxzaXplX2J1ZixmaW4pOworICAgICAgICAgICAgaWYgKHNpemVfcmVhZCA8IHNpemVfYnVmKQorICAgICAgICAgICAgICAgIGlmIChmZW9mKGZpbik9PTApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJlcnJvciBpbiByZWFkaW5nICVzXG4iLGZpbGVuYW1laW56aXApOworICAgICAgICAgICAgICAgIGVyciA9IFpJUF9FUlJOTzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHNpemVfcmVhZD4wKQorICAgICAgICAgICAgICAgIGNhbGN1bGF0ZV9jcmMgPSBjcmMzMl96KGNhbGN1bGF0ZV9jcmMsYnVmLHNpemVfcmVhZCk7CisgICAgICAgICAgICB0b3RhbF9yZWFkICs9IHNpemVfcmVhZDsKKworICAgICAgICB9IHdoaWxlICgoZXJyID09IFpJUF9PSykgJiYgKHNpemVfcmVhZD4wKSk7CisKKyAgICBpZiAoZmluKQorICAgICAgICBmY2xvc2UoZmluKTsKKworICAgICpyZXN1bHRfY3JjPWNhbGN1bGF0ZV9jcmM7CisgICAgcHJpbnRmKCJmaWxlICVzIGNyYyAlbHhcbiIsIGZpbGVuYW1laW56aXAsIGNhbGN1bGF0ZV9jcmMpOworICAgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgaXNMYXJnZUZpbGUoY29uc3QgY2hhciogZmlsZW5hbWUpCit7CisgIGludCBsYXJnZUZpbGUgPSAwOworICBaUE9TNjRfVCBwb3MgPSAwOworICBGSUxFKiBwRmlsZSA9IEZPUEVOX0ZVTkMoZmlsZW5hbWUsICJyYiIpOworCisgIGlmKHBGaWxlICE9IE5VTEwpCisgIHsKKyAgICBGU0VFS09fRlVOQyhwRmlsZSwgMCwgU0VFS19FTkQpOworICAgIHBvcyA9IChaUE9TNjRfVClGVEVMTE9fRlVOQyhwRmlsZSk7CisKKyAgICAgICAgICAgICAgICBwcmludGYoIkZpbGUgOiAlcyBpcyAlbGxkIGJ5dGVzXG4iLCBmaWxlbmFtZSwgcG9zKTsKKworICAgIGlmKHBvcyA+PSAweGZmZmZmZmZmKQorICAgICBsYXJnZUZpbGUgPSAxOworCisgICAgICAgICAgICAgICAgZmNsb3NlKHBGaWxlKTsKKyAgfQorCisgcmV0dXJuIGxhcmdlRmlsZTsKK30KKworaW50IG1haW4oYXJnYyxhcmd2KQorICAgIGludCBhcmdjOworICAgIGNoYXIgKmFyZ3ZbXTsKK3sKKyAgICBpbnQgaTsKKyAgICBpbnQgb3B0X292ZXJ3cml0ZT0wOworICAgIGludCBvcHRfY29tcHJlc3NfbGV2ZWw9Wl9ERUZBVUxUX0NPTVBSRVNTSU9OOworICAgIGludCBvcHRfZXhjbHVkZV9wYXRoPTA7CisgICAgaW50IHppcGZpbGVuYW1lYXJnID0gMDsKKyAgICBjaGFyIGZpbGVuYW1lX3RyeVtNQVhGSUxFTkFNRSsxNl07CisgICAgaW50IHppcG9rOworICAgIGludCBlcnI9MDsKKyAgICBzaXplX3Qgc2l6ZV9idWY9MDsKKyAgICB2b2lkKiBidWY9TlVMTDsKKyAgICBjb25zdCBjaGFyKiBwYXNzd29yZD1OVUxMOworCisKKyAgICBkb19iYW5uZXIoKTsKKyAgICBpZiAoYXJnYz09MSkKKyAgICB7CisgICAgICAgIGRvX2hlbHAoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGZvciAoaT0xO2k8YXJnYztpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgoKmFyZ3ZbaV0pPT0nLScpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcD1hcmd2W2ldKzE7CisKKyAgICAgICAgICAgICAgICB3aGlsZSAoKCpwKSE9J1wwJykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNoYXIgYz0qKHArKyk7OworICAgICAgICAgICAgICAgICAgICBpZiAoKGM9PSdvJykgfHwgKGM9PSdPJykpCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRfb3ZlcndyaXRlID0gMTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChjPT0nYScpIHx8IChjPT0nQScpKQorICAgICAgICAgICAgICAgICAgICAgICAgb3B0X292ZXJ3cml0ZSA9IDI7CisgICAgICAgICAgICAgICAgICAgIGlmICgoYz49JzAnKSAmJiAoYzw9JzknKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdF9jb21wcmVzc19sZXZlbCA9IGMtJzAnOworICAgICAgICAgICAgICAgICAgICBpZiAoKGM9PSdqJykgfHwgKGM9PSdKJykpCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRfZXhjbHVkZV9wYXRoID0gMTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoKChjPT0ncCcpIHx8IChjPT0nUCcpKSAmJiAoaSsxPGFyZ2MpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzd29yZD1hcmd2W2krMV07CisgICAgICAgICAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHppcGZpbGVuYW1lYXJnID09IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB6aXBmaWxlbmFtZWFyZyA9IGkgOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHNpemVfYnVmID0gV1JJVEVCVUZGRVJTSVpFOworICAgIGJ1ZiA9ICh2b2lkKiltYWxsb2Moc2l6ZV9idWYpOworICAgIGlmIChidWY9PU5VTEwpCisgICAgeworICAgICAgICBwcmludGYoIkVycm9yIGFsbG9jYXRpbmcgbWVtb3J5XG4iKTsKKyAgICAgICAgcmV0dXJuIFpJUF9JTlRFUk5BTEVSUk9SOworICAgIH0KKworICAgIGlmICh6aXBmaWxlbmFtZWFyZz09MCkKKyAgICB7CisgICAgICAgIHppcG9rPTA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGludCBpLGxlbjsKKyAgICAgICAgaW50IGRvdF9mb3VuZD0wOworCisgICAgICAgIHppcG9rID0gMSA7CisgICAgICAgIHN0cm5jcHkoZmlsZW5hbWVfdHJ5LCBhcmd2W3ppcGZpbGVuYW1lYXJnXSxNQVhGSUxFTkFNRS0xKTsKKyAgICAgICAgLyogc3RybmNweSBkb2VzbnQgYXBwZW5kIHRoZSB0cmFpbGluZyBOVUxMLCBvZiB0aGUgc3RyaW5nIGlzIHRvbyBsb25nLiAqLworICAgICAgICBmaWxlbmFtZV90cnlbIE1BWEZJTEVOQU1FIF0gPSAnXDAnOworCisgICAgICAgIGxlbj0oaW50KXN0cmxlbihmaWxlbmFtZV90cnkpOworICAgICAgICBmb3IgKGk9MDtpPGxlbjtpKyspCisgICAgICAgICAgICBpZiAoZmlsZW5hbWVfdHJ5W2ldPT0nLicpCisgICAgICAgICAgICAgICAgZG90X2ZvdW5kPTE7CisKKyAgICAgICAgaWYgKGRvdF9mb3VuZD09MCkKKyAgICAgICAgICAgIHN0cmNhdChmaWxlbmFtZV90cnksIi56aXAiKTsKKworICAgICAgICBpZiAob3B0X292ZXJ3cml0ZT09MikKKyAgICAgICAgeworICAgICAgICAgICAgLyogaWYgdGhlIGZpbGUgZG9uJ3QgZXhpc3QsIHdlIG5vdCBhcHBlbmQgZmlsZSAqLworICAgICAgICAgICAgaWYgKGNoZWNrX2V4aXN0X2ZpbGUoZmlsZW5hbWVfdHJ5KT09MCkKKyAgICAgICAgICAgICAgICBvcHRfb3ZlcndyaXRlPTE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICBpZiAob3B0X292ZXJ3cml0ZT09MCkKKyAgICAgICAgICAgIGlmIChjaGVja19leGlzdF9maWxlKGZpbGVuYW1lX3RyeSkhPTApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2hhciByZXA9MDsKKyAgICAgICAgICAgICAgICBkbworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY2hhciBhbnN3ZXJbMTI4XTsKKyAgICAgICAgICAgICAgICAgICAgaW50IHJldDsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJUaGUgZmlsZSAlcyBleGlzdHMuIE92ZXJ3cml0ZSA/IFt5XWVzLCBbbl1vLCBbYV1wcGVuZCA6ICIsZmlsZW5hbWVfdHJ5KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gc2NhbmYoIiUxcyIsYW5zd2VyKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJldCAhPSAxKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXAgPSBhbnN3ZXJbMF0gOworICAgICAgICAgICAgICAgICAgICBpZiAoKHJlcD49J2EnKSAmJiAocmVwPD0neicpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVwIC09IDB4MjA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHdoaWxlICgocmVwIT0nWScpICYmIChyZXAhPSdOJykgJiYgKHJlcCE9J0EnKSk7CisgICAgICAgICAgICAgICAgaWYgKHJlcD09J04nKQorICAgICAgICAgICAgICAgICAgICB6aXBvayA9IDA7CisgICAgICAgICAgICAgICAgaWYgKHJlcD09J0EnKQorICAgICAgICAgICAgICAgICAgICBvcHRfb3ZlcndyaXRlID0gMjsKKyAgICAgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoemlwb2s9PTEpCisgICAgeworICAgICAgICB6aXBGaWxlIHpmOworICAgICAgICBpbnQgZXJyY2xvc2U7CisjICAgICAgICBpZmRlZiBVU0VXSU4zMklPQVBJCisgICAgICAgIHpsaWJfZmlsZWZ1bmM2NF9kZWYgZmZ1bmM7CisgICAgICAgIGZpbGxfd2luMzJfZmlsZWZ1bmM2NEEoJmZmdW5jKTsKKyAgICAgICAgemYgPSB6aXBPcGVuMl82NChmaWxlbmFtZV90cnksKG9wdF9vdmVyd3JpdGU9PTIpID8gMiA6IDAsTlVMTCwmZmZ1bmMpOworIyAgICAgICAgZWxzZQorICAgICAgICB6ZiA9IHppcE9wZW42NChmaWxlbmFtZV90cnksKG9wdF9vdmVyd3JpdGU9PTIpID8gMiA6IDApOworIyAgICAgICAgZW5kaWYKKworICAgICAgICBpZiAoemYgPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnRmKCJlcnJvciBvcGVuaW5nICVzXG4iLGZpbGVuYW1lX3RyeSk7CisgICAgICAgICAgICBlcnI9IFpJUF9FUlJOTzsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBwcmludGYoImNyZWF0aW5nICVzXG4iLGZpbGVuYW1lX3RyeSk7CisKKyAgICAgICAgZm9yIChpPXppcGZpbGVuYW1lYXJnKzE7KGk8YXJnYykgJiYgKGVycj09WklQX09LKTtpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghKCgoKCooYXJndltpXSkpPT0nLScpIHx8ICgoKihhcmd2W2ldKSk9PScvJykpICYmCisgICAgICAgICAgICAgICAgICAoKGFyZ3ZbaV1bMV09PSdvJykgfHwgKGFyZ3ZbaV1bMV09PSdPJykgfHwKKyAgICAgICAgICAgICAgICAgICAoYXJndltpXVsxXT09J2EnKSB8fCAoYXJndltpXVsxXT09J0EnKSB8fAorICAgICAgICAgICAgICAgICAgIChhcmd2W2ldWzFdPT0ncCcpIHx8IChhcmd2W2ldWzFdPT0nUCcpIHx8CisgICAgICAgICAgICAgICAgICAgKChhcmd2W2ldWzFdPj0nMCcpIHx8IChhcmd2W2ldWzFdPD0nOScpKSkgJiYKKyAgICAgICAgICAgICAgICAgIChzdHJsZW4oYXJndltpXSkgPT0gMikpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZJTEUgKiBmaW47CisgICAgICAgICAgICAgICAgc2l6ZV90IHNpemVfcmVhZDsKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBmaWxlbmFtZWluemlwID0gYXJndltpXTsKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzYXZlZmlsZW5hbWVpbnppcDsKKyAgICAgICAgICAgICAgICB6aXBfZmlsZWluZm8gemk7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBjcmNGaWxlPTA7CisgICAgICAgICAgICAgICAgaW50IHppcDY0ID0gMDsKKworICAgICAgICAgICAgICAgIHppLnRtel9kYXRlLnRtX3NlYyA9IHppLnRtel9kYXRlLnRtX21pbiA9IHppLnRtel9kYXRlLnRtX2hvdXIgPQorICAgICAgICAgICAgICAgIHppLnRtel9kYXRlLnRtX21kYXkgPSB6aS50bXpfZGF0ZS50bV9tb24gPSB6aS50bXpfZGF0ZS50bV95ZWFyID0gMDsKKyAgICAgICAgICAgICAgICB6aS5kb3NEYXRlID0gMDsKKyAgICAgICAgICAgICAgICB6aS5pbnRlcm5hbF9mYSA9IDA7CisgICAgICAgICAgICAgICAgemkuZXh0ZXJuYWxfZmEgPSAwOworICAgICAgICAgICAgICAgIGZpbGV0aW1lKGZpbGVuYW1laW56aXAsJnppLnRtel9kYXRlLCZ6aS5kb3NEYXRlKTsKKworLyoKKyAgICAgICAgICAgICAgICBlcnIgPSB6aXBPcGVuTmV3RmlsZUluWmlwKHpmLGZpbGVuYW1laW56aXAsJnppLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwwLE5VTEwsMCxOVUxMIC8gKiBjb21tZW50ICogLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcHRfY29tcHJlc3NfbGV2ZWwgIT0gMCkgPyBaX0RFRkxBVEVEIDogMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdF9jb21wcmVzc19sZXZlbCk7CisqLworICAgICAgICAgICAgICAgIGlmICgocGFzc3dvcmQgIT0gTlVMTCkgJiYgKGVycj09WklQX09LKSkKKyAgICAgICAgICAgICAgICAgICAgZXJyID0gZ2V0RmlsZUNyYyhmaWxlbmFtZWluemlwLGJ1ZixzaXplX2J1ZiwmY3JjRmlsZSk7CisKKyAgICAgICAgICAgICAgICB6aXA2NCA9IGlzTGFyZ2VGaWxlKGZpbGVuYW1laW56aXApOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGUgcGF0aCBuYW1lIHNhdmVkLCBzaG91bGQgbm90IGluY2x1ZGUgYSBsZWFkaW5nIHNsYXNoLiAqLworICAgICAgICAgICAgICAgLyppZiBpdCBkaWQsIHdpbmRvd3MveHAgYW5kIGR5bmF6aXAgY291bGRuJ3QgcmVhZCB0aGUgemlwIGZpbGUuICovCisgICAgICAgICAgICAgICAgIHNhdmVmaWxlbmFtZWluemlwID0gZmlsZW5hbWVpbnppcDsKKyAgICAgICAgICAgICAgICAgd2hpbGUoIHNhdmVmaWxlbmFtZWluemlwWzBdID09ICdcXCcgfHwgc2F2ZWZpbGVuYW1laW56aXBbMF0gPT0gJy8nICkKKyAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgc2F2ZWZpbGVuYW1laW56aXArKzsKKyAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgIC8qc2hvdWxkIHRoZSB6aXAgZmlsZSBjb250YWluIGFueSBwYXRoIGF0IGFsbD8qLworICAgICAgICAgICAgICAgICBpZiggb3B0X2V4Y2x1ZGVfcGF0aCApCisgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnRtcHB0cjsKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmxhc3RzbGFzaCA9IDA7CisgICAgICAgICAgICAgICAgICAgICBmb3IoIHRtcHB0ciA9IHNhdmVmaWxlbmFtZWluemlwOyAqdG1wcHRyOyB0bXBwdHIrKykKKyAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICBpZiggKnRtcHB0ciA9PSAnXFwnIHx8ICp0bXBwdHIgPT0gJy8nKQorICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdHNsYXNoID0gdG1wcHRyOworICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgIGlmKCBsYXN0c2xhc2ggIT0gTlVMTCApCisgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZWZpbGVuYW1laW56aXAgPSBsYXN0c2xhc2grMTsgLy8gYmFzZSBmaWxlbmFtZSBmb2xsb3dzIGxhc3Qgc2xhc2guCisgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAvKiovCisgICAgICAgICAgICAgICAgZXJyID0gemlwT3Blbk5ld0ZpbGVJblppcDNfNjQoemYsc2F2ZWZpbGVuYW1laW56aXAsJnppLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwwLE5VTEwsMCxOVUxMIC8qIGNvbW1lbnQqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcHRfY29tcHJlc3NfbGV2ZWwgIT0gMCkgPyBaX0RFRkxBVEVEIDogMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdF9jb21wcmVzc19sZXZlbCwwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLU1BWF9XQklUUywgREVGX01FTV9MRVZFTCwgWl9ERUZBVUxUX1NUUkFURUdZLCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLU1BWF9XQklUUywgREVGX01FTV9MRVZFTCwgWl9ERUZBVUxUX1NUUkFURUdZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQsY3JjRmlsZSwgemlwNjQpOworCisgICAgICAgICAgICAgICAgaWYgKGVyciAhPSBaSVBfT0spCisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiZXJyb3IgaW4gb3BlbmluZyAlcyBpbiB6aXBmaWxlXG4iLGZpbGVuYW1laW56aXApOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZpbiA9IEZPUEVOX0ZVTkMoZmlsZW5hbWVpbnppcCwicmIiKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZpbj09TlVMTCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZXJyPVpJUF9FUlJOTzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiZXJyb3IgaW4gb3BlbmluZyAlcyBmb3IgcmVhZGluZ1xuIixmaWxlbmFtZWluemlwKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChlcnIgPT0gWklQX09LKQorICAgICAgICAgICAgICAgICAgICBkbworICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSBaSVBfT0s7CisgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3JlYWQgPSBmcmVhZChidWYsMSxzaXplX2J1ZixmaW4pOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNpemVfcmVhZCA8IHNpemVfYnVmKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmZW9mKGZpbik9PTApCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJlcnJvciBpbiByZWFkaW5nICVzXG4iLGZpbGVuYW1laW56aXApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IFpJUF9FUlJOTzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNpemVfcmVhZD4wKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IHppcFdyaXRlSW5GaWxlSW5aaXAgKHpmLGJ1ZiwodW5zaWduZWQpc2l6ZV9yZWFkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyPDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoImVycm9yIGluIHdyaXRpbmcgJXMgaW4gdGhlIHppcGZpbGVcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWVpbnppcCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKChlcnIgPT0gWklQX09LKSAmJiAoc2l6ZV9yZWFkPjApKTsKKworICAgICAgICAgICAgICAgIGlmIChmaW4pCisgICAgICAgICAgICAgICAgICAgIGZjbG9zZShmaW4pOworCisgICAgICAgICAgICAgICAgaWYgKGVycjwwKQorICAgICAgICAgICAgICAgICAgICBlcnI9WklQX0VSUk5POworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGVyciA9IHppcENsb3NlRmlsZUluWmlwKHpmKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVyciE9WklQX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJlcnJvciBpbiBjbG9zaW5nICVzIGluIHRoZSB6aXBmaWxlXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWVpbnppcCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVycmNsb3NlID0gemlwQ2xvc2UoemYsTlVMTCk7CisgICAgICAgIGlmIChlcnJjbG9zZSAhPSBaSVBfT0spCisgICAgICAgICAgICBwcmludGYoImVycm9yIGluIGNsb3NpbmcgJXNcbiIsZmlsZW5hbWVfdHJ5KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICBkb19oZWxwKCk7CisgICAgfQorCisgICAgZnJlZShidWYpOworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvbWluaXppcC9taW5pemlwLnBjLmluIGIvc3JjL2NvbnRyaWIvbWluaXppcC9taW5pemlwLnBjLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5YjViN2YKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29udHJpYi9taW5pemlwL21pbml6aXAucGMuaW4KQEAgLTAsMCArMSwxMiBAQAorcHJlZml4PUBwcmVmaXhACitleGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACitsaWJkaXI9QGxpYmRpckAKK2luY2x1ZGVkaXI9QGluY2x1ZGVkaXJAL21pbml6aXAKKworTmFtZTogbWluaXppcAorRGVzY3JpcHRpb246IE1pbml6aXAgemlwIGZpbGUgbWFuaXB1bGF0aW9uIGxpYnJhcnkKK1JlcXVpcmVzOgorVmVyc2lvbjogQFBBQ0tBR0VfVkVSU0lPTkAKK0xpYnM6IC1MJHtsaWJkaXJ9IC1sbWluaXppcAorTGlicy5wcml2YXRlOiAtbHoKK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9CmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi9taW5pemlwL216dG9vbHMuYyBiL3NyYy9jb250cmliL21pbml6aXAvbXp0b29scy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ODkxYzIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29udHJpYi9taW5pemlwL216dG9vbHMuYwpAQCAtMCwwICsxLDI5MSBAQAorLyoKKyAgQWRkaXRpb25hbCB0b29scyBmb3IgTWluaXppcAorICBDb2RlOiBYYXZpZXIgUm9jaGUgJzIwMDQKKyAgTGljZW5zZTogU2FtZSBhcyBaTElCICh3d3cuZ3ppcC5vcmcpCisqLworCisvKiBDb2RlICovCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlICJ6bGliLmgiCisjaW5jbHVkZSAidW56aXAuaCIKKworI2RlZmluZSBSRUFEXzgoYWRyKSAgKCh1bnNpZ25lZCBjaGFyKSooYWRyKSkKKyNkZWZpbmUgUkVBRF8xNihhZHIpICggUkVBRF84KGFkcikgfCAoUkVBRF84KGFkcisxKSA8PCA4KSApCisjZGVmaW5lIFJFQURfMzIoYWRyKSAoIFJFQURfMTYoYWRyKSB8IChSRUFEXzE2KChhZHIpKzIpIDw8IDE2KSApCisKKyNkZWZpbmUgV1JJVEVfOChidWZmLCBuKSBkbyB7IFwKKyAgKigodW5zaWduZWQgY2hhciopKGJ1ZmYpKSA9ICh1bnNpZ25lZCBjaGFyKSAoKG4pICYgMHhmZik7IFwKK30gd2hpbGUoMCkKKyNkZWZpbmUgV1JJVEVfMTYoYnVmZiwgbikgZG8geyBcCisgIFdSSVRFXzgoKHVuc2lnbmVkIGNoYXIqKShidWZmKSwgbik7IFwKKyAgV1JJVEVfOCgoKHVuc2lnbmVkIGNoYXIqKShidWZmKSkgKyAxLCAobikgPj4gOCk7IFwKK30gd2hpbGUoMCkKKyNkZWZpbmUgV1JJVEVfMzIoYnVmZiwgbikgZG8geyBcCisgIFdSSVRFXzE2KCh1bnNpZ25lZCBjaGFyKikoYnVmZiksIChuKSAmIDB4ZmZmZik7IFwKKyAgV1JJVEVfMTYoKHVuc2lnbmVkIGNoYXIqKShidWZmKSArIDIsIChuKSA+PiAxNik7IFwKK30gd2hpbGUoMCkKKworZXh0ZXJuIGludCBaRVhQT1JUIHVuelJlcGFpcihmaWxlLCBmaWxlT3V0LCBmaWxlT3V0VG1wLCBuUmVjb3ZlcmVkLCBieXRlc1JlY292ZXJlZCkKK2NvbnN0IGNoYXIqIGZpbGU7Citjb25zdCBjaGFyKiBmaWxlT3V0OworY29uc3QgY2hhciogZmlsZU91dFRtcDsKK3VMb25nKiBuUmVjb3ZlcmVkOwordUxvbmcqIGJ5dGVzUmVjb3ZlcmVkOworeworICBpbnQgZXJyID0gWl9PSzsKKyAgRklMRSogZnBaaXAgPSBmb3BlbihmaWxlLCAicmIiKTsKKyAgRklMRSogZnBPdXQgPSBmb3BlbihmaWxlT3V0LCAid2IiKTsKKyAgRklMRSogZnBPdXRDRCA9IGZvcGVuKGZpbGVPdXRUbXAsICJ3YiIpOworICBpZiAoZnBaaXAgIT0gTlVMTCAmJiAgZnBPdXQgIT0gTlVMTCkgeworICAgIGludCBlbnRyaWVzID0gMDsKKyAgICB1TG9uZyB0b3RhbEJ5dGVzID0gMDsKKyAgICBjaGFyIGhlYWRlclszMF07CisgICAgY2hhciBmaWxlbmFtZVsxMDI0XTsKKyAgICBjaGFyIGV4dHJhWzEwMjRdOworICAgIGludCBvZmZzZXQgPSAwOworICAgIGludCBvZmZzZXRDRCA9IDA7CisgICAgd2hpbGUgKCBmcmVhZChoZWFkZXIsIDEsIDMwLCBmcFppcCkgPT0gMzAgKSB7CisgICAgICBpbnQgY3VycmVudE9mZnNldCA9IG9mZnNldDsKKworICAgICAgLyogRmlsZSBlbnRyeSAqLworICAgICAgaWYgKFJFQURfMzIoaGVhZGVyKSA9PSAweDA0MDM0YjUwKSB7CisgICAgICAgIHVuc2lnbmVkIGludCB2ZXJzaW9uID0gUkVBRF8xNihoZWFkZXIgKyA0KTsKKyAgICAgICAgdW5zaWduZWQgaW50IGdwZmxhZyA9IFJFQURfMTYoaGVhZGVyICsgNik7CisgICAgICAgIHVuc2lnbmVkIGludCBtZXRob2QgPSBSRUFEXzE2KGhlYWRlciArIDgpOworICAgICAgICB1bnNpZ25lZCBpbnQgZmlsZXRpbWUgPSBSRUFEXzE2KGhlYWRlciArIDEwKTsKKyAgICAgICAgdW5zaWduZWQgaW50IGZpbGVkYXRlID0gUkVBRF8xNihoZWFkZXIgKyAxMik7CisgICAgICAgIHVuc2lnbmVkIGludCBjcmMgPSBSRUFEXzMyKGhlYWRlciArIDE0KTsgLyogY3JjICovCisgICAgICAgIHVuc2lnbmVkIGludCBjcHNpemUgPSBSRUFEXzMyKGhlYWRlciArIDE4KTsgLyogY29tcHJlc3NlZCBzaXplICovCisgICAgICAgIHVuc2lnbmVkIGludCB1bmNwc2l6ZSA9IFJFQURfMzIoaGVhZGVyICsgMjIpOyAvKiB1bmNvbXByZXNzZWQgc3ogKi8KKyAgICAgICAgdW5zaWduZWQgaW50IGZuc2l6ZSA9IFJFQURfMTYoaGVhZGVyICsgMjYpOyAvKiBmaWxlIG5hbWUgbGVuZ3RoICovCisgICAgICAgIHVuc2lnbmVkIGludCBleHRzaXplID0gUkVBRF8xNihoZWFkZXIgKyAyOCk7IC8qIGV4dHJhIGZpZWxkIGxlbmd0aCAqLworICAgICAgICBmaWxlbmFtZVswXSA9IGV4dHJhWzBdID0gJ1wwJzsKKworICAgICAgICAvKiBIZWFkZXIgKi8KKyAgICAgICAgaWYgKGZ3cml0ZShoZWFkZXIsIDEsIDMwLCBmcE91dCkgPT0gMzApIHsKKyAgICAgICAgICBvZmZzZXQgKz0gMzA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgZXJyID0gWl9FUlJOTzsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8qIEZpbGVuYW1lICovCisgICAgICAgIGlmIChmbnNpemUgPiAwKSB7CisgICAgICAgICAgaWYgKGZuc2l6ZSA8IHNpemVvZihmaWxlbmFtZSkpIHsKKyAgICAgICAgICAgIGlmIChmcmVhZChmaWxlbmFtZSwgMSwgZm5zaXplLCBmcFppcCkgPT0gZm5zaXplKSB7CisgICAgICAgICAgICAgICAgaWYgKGZ3cml0ZShmaWxlbmFtZSwgMSwgZm5zaXplLCBmcE91dCkgPT0gZm5zaXplKSB7CisgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IGZuc2l6ZTsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlcnIgPSBaX0VSUk5POworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICBlcnIgPSBaX0VSUk5POworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZXJyID0gWl9FUlJOTzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBlcnIgPSBaX1NUUkVBTV9FUlJPUjsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8qIEV4dHJhIGZpZWxkICovCisgICAgICAgIGlmIChleHRzaXplID4gMCkgeworICAgICAgICAgIGlmIChleHRzaXplIDwgc2l6ZW9mKGV4dHJhKSkgeworICAgICAgICAgICAgaWYgKGZyZWFkKGV4dHJhLCAxLCBleHRzaXplLCBmcFppcCkgPT0gZXh0c2l6ZSkgeworICAgICAgICAgICAgICBpZiAoZndyaXRlKGV4dHJhLCAxLCBleHRzaXplLCBmcE91dCkgPT0gZXh0c2l6ZSkgeworICAgICAgICAgICAgICAgIG9mZnNldCArPSBleHRzaXplOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZXJyID0gWl9FUlJOTzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgZXJyID0gWl9FUlJOTzsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGVyciA9IFpfRVJSTk87CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiBEYXRhICovCisgICAgICAgIHsKKyAgICAgICAgICBpbnQgZGF0YVNpemUgPSBjcHNpemU7CisgICAgICAgICAgaWYgKGRhdGFTaXplID09IDApIHsKKyAgICAgICAgICAgIGRhdGFTaXplID0gdW5jcHNpemU7CisgICAgICAgICAgfQorICAgICAgICAgIGlmIChkYXRhU2l6ZSA+IDApIHsKKyAgICAgICAgICAgIGNoYXIqIGRhdGEgPSBtYWxsb2MoZGF0YVNpemUpOworICAgICAgICAgICAgaWYgKGRhdGEgIT0gTlVMTCkgeworICAgICAgICAgICAgICBpZiAoKGludClmcmVhZChkYXRhLCAxLCBkYXRhU2l6ZSwgZnBaaXApID09IGRhdGFTaXplKSB7CisgICAgICAgICAgICAgICAgaWYgKChpbnQpZndyaXRlKGRhdGEsIDEsIGRhdGFTaXplLCBmcE91dCkgPT0gZGF0YVNpemUpIHsKKyAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBkYXRhU2l6ZTsKKyAgICAgICAgICAgICAgICAgIHRvdGFsQnl0ZXMgKz0gZGF0YVNpemU7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgIGVyciA9IFpfRVJSTk87CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVyciA9IFpfRVJSTk87CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZnJlZShkYXRhKTsKKyAgICAgICAgICAgICAgaWYgKGVyciAhPSBaX09LKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIGVyciA9IFpfTUVNX0VSUk9SOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiBDZW50cmFsIGRpcmVjdG9yeSBlbnRyeSAqLworICAgICAgICB7CisgICAgICAgICAgY2hhciBoZWFkZXJbNDZdOworICAgICAgICAgIGNoYXIqIGNvbW1lbnQgPSAiIjsKKyAgICAgICAgICBpbnQgY29tc2l6ZSA9IChpbnQpIHN0cmxlbihjb21tZW50KTsKKyAgICAgICAgICBXUklURV8zMihoZWFkZXIsIDB4MDIwMTRiNTApOworICAgICAgICAgIFdSSVRFXzE2KGhlYWRlciArIDQsIHZlcnNpb24pOworICAgICAgICAgIFdSSVRFXzE2KGhlYWRlciArIDYsIHZlcnNpb24pOworICAgICAgICAgIFdSSVRFXzE2KGhlYWRlciArIDgsIGdwZmxhZyk7CisgICAgICAgICAgV1JJVEVfMTYoaGVhZGVyICsgMTAsIG1ldGhvZCk7CisgICAgICAgICAgV1JJVEVfMTYoaGVhZGVyICsgMTIsIGZpbGV0aW1lKTsKKyAgICAgICAgICBXUklURV8xNihoZWFkZXIgKyAxNCwgZmlsZWRhdGUpOworICAgICAgICAgIFdSSVRFXzMyKGhlYWRlciArIDE2LCBjcmMpOworICAgICAgICAgIFdSSVRFXzMyKGhlYWRlciArIDIwLCBjcHNpemUpOworICAgICAgICAgIFdSSVRFXzMyKGhlYWRlciArIDI0LCB1bmNwc2l6ZSk7CisgICAgICAgICAgV1JJVEVfMTYoaGVhZGVyICsgMjgsIGZuc2l6ZSk7CisgICAgICAgICAgV1JJVEVfMTYoaGVhZGVyICsgMzAsIGV4dHNpemUpOworICAgICAgICAgIFdSSVRFXzE2KGhlYWRlciArIDMyLCBjb21zaXplKTsKKyAgICAgICAgICBXUklURV8xNihoZWFkZXIgKyAzNCwgMCk7ICAgICAvKiBkaXNrICMgKi8KKyAgICAgICAgICBXUklURV8xNihoZWFkZXIgKyAzNiwgMCk7ICAgICAvKiBpbnQgYXR0cmIgKi8KKyAgICAgICAgICBXUklURV8zMihoZWFkZXIgKyAzOCwgMCk7ICAgICAvKiBleHQgYXR0cmIgKi8KKyAgICAgICAgICBXUklURV8zMihoZWFkZXIgKyA0MiwgY3VycmVudE9mZnNldCk7CisgICAgICAgICAgLyogSGVhZGVyICovCisgICAgICAgICAgaWYgKGZ3cml0ZShoZWFkZXIsIDEsIDQ2LCBmcE91dENEKSA9PSA0NikgeworICAgICAgICAgICAgb2Zmc2V0Q0QgKz0gNDY7CisKKyAgICAgICAgICAgIC8qIEZpbGVuYW1lICovCisgICAgICAgICAgICBpZiAoZm5zaXplID4gMCkgeworICAgICAgICAgICAgICBpZiAoZndyaXRlKGZpbGVuYW1lLCAxLCBmbnNpemUsIGZwT3V0Q0QpID09IGZuc2l6ZSkgeworICAgICAgICAgICAgICAgIG9mZnNldENEICs9IGZuc2l6ZTsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlcnIgPSBaX0VSUk5POworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICBlcnIgPSBaX1NUUkVBTV9FUlJPUjsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIEV4dHJhIGZpZWxkICovCisgICAgICAgICAgICBpZiAoZXh0c2l6ZSA+IDApIHsKKyAgICAgICAgICAgICAgaWYgKGZ3cml0ZShleHRyYSwgMSwgZXh0c2l6ZSwgZnBPdXRDRCkgPT0gZXh0c2l6ZSkgeworICAgICAgICAgICAgICAgIG9mZnNldENEICs9IGV4dHNpemU7CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZXJyID0gWl9FUlJOTzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBDb21tZW50IGZpZWxkICovCisgICAgICAgICAgICBpZiAoY29tc2l6ZSA+IDApIHsKKyAgICAgICAgICAgICAgaWYgKChpbnQpZndyaXRlKGNvbW1lbnQsIDEsIGNvbXNpemUsIGZwT3V0Q0QpID09IGNvbXNpemUpIHsKKyAgICAgICAgICAgICAgICBvZmZzZXRDRCArPSBjb21zaXplOworICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVyciA9IFpfRVJSTk87CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworCisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGVyciA9IFpfRVJSTk87CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiBTdWNjZXNzICovCisgICAgICAgIGVudHJpZXMrKzsKKworICAgICAgfSBlbHNlIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorCisgICAgLyogRmluYWwgY2VudHJhbCBkaXJlY3RvcnkgICovCisgICAgeworICAgICAgaW50IGVudHJpZXNaaXAgPSBlbnRyaWVzOworICAgICAgY2hhciBoZWFkZXJbMjJdOworICAgICAgY2hhciogY29tbWVudCA9ICIiOyAvLyAiWklQIEZpbGUgcmVjb3ZlcmVkIGJ5IHpsaWIvbWluaXppcC9tenRvb2xzIjsKKyAgICAgIGludCBjb21zaXplID0gKGludCkgc3RybGVuKGNvbW1lbnQpOworICAgICAgaWYgKGVudHJpZXNaaXAgPiAweGZmZmYpIHsKKyAgICAgICAgZW50cmllc1ppcCA9IDB4ZmZmZjsKKyAgICAgIH0KKyAgICAgIFdSSVRFXzMyKGhlYWRlciwgMHgwNjA1NGI1MCk7CisgICAgICBXUklURV8xNihoZWFkZXIgKyA0LCAwKTsgICAgLyogZGlzayAjICovCisgICAgICBXUklURV8xNihoZWFkZXIgKyA2LCAwKTsgICAgLyogZGlzayAjICovCisgICAgICBXUklURV8xNihoZWFkZXIgKyA4LCBlbnRyaWVzWmlwKTsgICAvKiBoYWNrICovCisgICAgICBXUklURV8xNihoZWFkZXIgKyAxMCwgZW50cmllc1ppcCk7ICAvKiBoYWNrICovCisgICAgICBXUklURV8zMihoZWFkZXIgKyAxMiwgb2Zmc2V0Q0QpOyAgICAvKiBzaXplIG9mIENEICovCisgICAgICBXUklURV8zMihoZWFkZXIgKyAxNiwgb2Zmc2V0KTsgICAgICAvKiBvZmZzZXQgdG8gQ0QgKi8KKyAgICAgIFdSSVRFXzE2KGhlYWRlciArIDIwLCBjb21zaXplKTsgICAgIC8qIGNvbW1lbnQgKi8KKworICAgICAgLyogSGVhZGVyICovCisgICAgICBpZiAoZndyaXRlKGhlYWRlciwgMSwgMjIsIGZwT3V0Q0QpID09IDIyKSB7CisKKyAgICAgICAgLyogQ29tbWVudCBmaWVsZCAqLworICAgICAgICBpZiAoY29tc2l6ZSA+IDApIHsKKyAgICAgICAgICBpZiAoKGludClmd3JpdGUoY29tbWVudCwgMSwgY29tc2l6ZSwgZnBPdXRDRCkgIT0gY29tc2l6ZSkgeworICAgICAgICAgICAgZXJyID0gWl9FUlJOTzsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgfSBlbHNlIHsKKyAgICAgICAgZXJyID0gWl9FUlJOTzsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiBGaW5hbCBtZXJnZSAoZmlsZSArIGNlbnRyYWwgZGlyZWN0b3J5KSAqLworICAgIGZjbG9zZShmcE91dENEKTsKKyAgICBpZiAoZXJyID09IFpfT0spIHsKKyAgICAgIGZwT3V0Q0QgPSBmb3BlbihmaWxlT3V0VG1wLCAicmIiKTsKKyAgICAgIGlmIChmcE91dENEICE9IE5VTEwpIHsKKyAgICAgICAgaW50IG5SZWFkOworICAgICAgICBjaGFyIGJ1ZmZlcls4MTkyXTsKKyAgICAgICAgd2hpbGUgKCAoblJlYWQgPSAoaW50KWZyZWFkKGJ1ZmZlciwgMSwgc2l6ZW9mKGJ1ZmZlciksIGZwT3V0Q0QpKSA+IDApIHsKKyAgICAgICAgICBpZiAoKGludClmd3JpdGUoYnVmZmVyLCAxLCBuUmVhZCwgZnBPdXQpICE9IG5SZWFkKSB7CisgICAgICAgICAgICBlcnIgPSBaX0VSUk5POworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZjbG9zZShmcE91dENEKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiBDbG9zZSAqLworICAgIGZjbG9zZShmcFppcCk7CisgICAgZmNsb3NlKGZwT3V0KTsKKworICAgIC8qIFdpcGUgdGVtcG9yYXJ5IGZpbGUgKi8KKyAgICAodm9pZClyZW1vdmUoZmlsZU91dFRtcCk7CisKKyAgICAvKiBOdW1iZXIgb2YgcmVjb3ZlcmVkIGVudHJpZXMgKi8KKyAgICBpZiAoZXJyID09IFpfT0spIHsKKyAgICAgIGlmIChuUmVjb3ZlcmVkICE9IE5VTEwpIHsKKyAgICAgICAgKm5SZWNvdmVyZWQgPSBlbnRyaWVzOworICAgICAgfQorICAgICAgaWYgKGJ5dGVzUmVjb3ZlcmVkICE9IE5VTEwpIHsKKyAgICAgICAgKmJ5dGVzUmVjb3ZlcmVkID0gdG90YWxCeXRlczsKKyAgICAgIH0KKyAgICB9CisgIH0gZWxzZSB7CisgICAgZXJyID0gWl9TVFJFQU1fRVJST1I7CisgIH0KKyAgcmV0dXJuIGVycjsKK30KZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL21pbml6aXAvbXp0b29scy5oIGIvc3JjL2NvbnRyaWIvbWluaXppcC9tenRvb2xzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ5YTQyNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb250cmliL21pbml6aXAvbXp0b29scy5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgIEFkZGl0aW9uYWwgdG9vbHMgZm9yIE1pbml6aXAKKyAgQ29kZTogWGF2aWVyIFJvY2hlICcyMDA0CisgIExpY2Vuc2U6IFNhbWUgYXMgWkxJQiAod3d3Lmd6aXAub3JnKQorKi8KKworI2lmbmRlZiBfemlwX3Rvb2xzX0gKKyNkZWZpbmUgX3ppcF90b29sc19ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2lmbmRlZiBfWkxJQl9ICisjaW5jbHVkZSAiemxpYi5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJ1bnppcC5oIgorCisvKiBSZXBhaXIgYSBaSVAgZmlsZSAobWlzc2luZyBjZW50cmFsIGRpcmVjdG9yeSkKKyAgIGZpbGU6IGZpbGUgdG8gcmVjb3ZlcgorICAgZmlsZU91dDogb3V0cHV0IGZpbGUgYWZ0ZXIgcmVjb3ZlcnkKKyAgIGZpbGVPdXRUbXA6IHRlbXBvcmFyeSBmaWxlIG5hbWUgdXNlZCBmb3IgcmVjb3ZlcnkKKyovCitleHRlcm4gaW50IFpFWFBPUlQgdW56UmVwYWlyKGNvbnN0IGNoYXIqIGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGZpbGVPdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGZpbGVPdXRUbXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVMb25nKiBuUmVjb3ZlcmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1TG9uZyogYnl0ZXNSZWNvdmVyZWQpOworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi9taW5pemlwL3VuemlwLmMgYi9zcmMvY29udHJpYi9taW5pemlwL3VuemlwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWUxMmU0NwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb250cmliL21pbml6aXAvdW56aXAuYwpAQCAtMCwwICsxLDIxMjggQEAKKy8qIHVuemlwLmMgLS0gSU8gZm9yIHVuY29tcHJlc3MgLnppcCBmaWxlcyB1c2luZyB6bGliCisgICBWZXJzaW9uIDEuMSwgRmVicnVhcnkgMTRoLCAyMDEwCisgICBwYXJ0IG9mIHRoZSBNaW5pWmlwIHByb2plY3QgLSAoIGh0dHA6Ly93d3cud2luaW1hZ2UuY29tL3pMaWJEbGwvbWluaXppcC5odG1sICkKKworICAgICAgICAgQ29weXJpZ2h0IChDKSAxOTk4LTIwMTAgR2lsbGVzIFZvbGxhbnQgKG1pbml6aXApICggaHR0cDovL3d3dy53aW5pbWFnZS5jb20vekxpYkRsbC9taW5pemlwLmh0bWwgKQorCisgICAgICAgICBNb2RpZmljYXRpb25zIG9mIFVuemlwIGZvciBaaXA2NAorICAgICAgICAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggRXZlbiBSb3VhdWx0CisKKyAgICAgICAgIE1vZGlmaWNhdGlvbnMgZm9yIFppcDY0IHN1cHBvcnQgb24gYm90aCB6aXAgYW5kIHVuemlwCisgICAgICAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBNYXRoaWFzIFN2ZW5zc29uICggaHR0cDovL3Jlc3VsdDQyLmNvbSApCisKKyAgICAgICAgIEZvciBtb3JlIGluZm8gcmVhZCBNaW5pWmlwX2luZm8udHh0CisKKworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgRGVjcnlwdGlvbiBjb2RlIGNvbWVzIGZyb20gY3J5cHQuYyBieSBJbmZvLVpJUCBidXQgaGFzIGJlZW4gZ3JlYXRseSByZWR1Y2VkIGluIHRlcm1zIG9mCisgIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBzb2Z0d2FyZS4gVGhlIGZvbGxvd2luZyBpcyBmcm9tIHRoZSBvcmlnaW5hbCBjcnlwdC5jLgorICBDb2RlIHdvdmVuIGluIGJ5IFRlcnJ5IFRob3JzZW4gMS8yMDAzLgorCisgIENvcHlyaWdodCAoYykgMTk5MC0yMDAwIEluZm8tWklQLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICBTZWUgdGhlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0UsIHZlcnNpb24gMjAwMC1BcHItMDkgb3IgbGF0ZXIKKyAgKHRoZSBjb250ZW50cyBvZiB3aGljaCBhcmUgYWxzbyBpbmNsdWRlZCBpbiB6aXAuaCkgZm9yIHRlcm1zIG9mIHVzZS4KKyAgSWYsIGZvciBzb21lIHJlYXNvbiwgYWxsIHRoZXNlIGZpbGVzIGFyZSBtaXNzaW5nLCB0aGUgSW5mby1aSVAgbGljZW5zZQorICBhbHNvIG1heSBiZSBmb3VuZCBhdDogIGZ0cDovL2Z0cC5pbmZvLXppcC5vcmcvcHViL2luZm96aXAvbGljZW5zZS5odG1sCisKKyAgICAgICAgY3J5cHQuYyAoZnVsbCB2ZXJzaW9uKSBieSBJbmZvLVpJUC4gICAgICBMYXN0IHJldmlzZWQ6ICBbc2VlIGNyeXB0LmhdCisKKyAgVGhlIGVuY3J5cHRpb24vZGVjcnlwdGlvbiBwYXJ0cyBvZiB0aGlzIHNvdXJjZSBjb2RlIChhcyBvcHBvc2VkIHRvIHRoZQorICBub24tZWNob2luZyBwYXNzd29yZCBwYXJ0cykgd2VyZSBvcmlnaW5hbGx5IHdyaXR0ZW4gaW4gRXVyb3BlLiAgVGhlCisgIHdob2xlIHNvdXJjZSBwYWNrYWdlIGNhbiBiZSBmcmVlbHkgZGlzdHJpYnV0ZWQsIGluY2x1ZGluZyBmcm9tIHRoZSBVU0EuCisgIChQcmlvciB0byBKYW51YXJ5IDIwMDAsIHJlLWV4cG9ydCBmcm9tIHRoZSBVUyB3YXMgYSB2aW9sYXRpb24gb2YgVVMgbGF3LikKKworICAgICAgICBUaGlzIGVuY3J5cHRpb24gY29kZSBpcyBhIGRpcmVjdCB0cmFuc2NyaXB0aW9uIG9mIHRoZSBhbGdvcml0aG0gZnJvbQorICBSb2dlciBTY2hsYWZseSwgZGVzY3JpYmVkIGJ5IFBoaWwgS2F0eiBpbiB0aGUgZmlsZSBhcHBub3RlLnR4dC4gIFRoaXMKKyAgZmlsZSAoYXBwbm90ZS50eHQpIGlzIGRpc3RyaWJ1dGVkIHdpdGggdGhlIFBLWklQIHByb2dyYW0gKGV2ZW4gaW4gdGhlCisgIHZlcnNpb24gd2l0aG91dCBlbmNyeXB0aW9uIGNhcGFiaWxpdGllcykuCisKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAgQ2hhbmdlcyBpbiB1bnppcC5jCisKKyAgICAgICAgMjAwNy0yMDA4IC0gRXZlbiBSb3VhdWx0IC0gQWRkaXRpb24gb2YgY3BsX3VuekdldEN1cnJlbnRGaWxlWlN0cmVhbVBvcworICAyMDA3LTIwMDggLSBFdmVuIFJvdWF1bHQgLSBEZWNvcmF0aW9uIG9mIHN5bWJvbCBuYW1lcyB1bnoqIC0+IGNwbF91bnoqCisgIDIwMDctMjAwOCAtIEV2ZW4gUm91YXVsdCAtIFJlbW92ZSBvbGQgQyBzdHlsZSBmdW5jdGlvbiBwcm90b3R5cGVzCisgIDIwMDctMjAwOCAtIEV2ZW4gUm91YXVsdCAtIEFkZCB1bnppcCBzdXBwb3J0IGZvciBaSVA2NAorCisgICAgICAgIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IEV2ZW4gUm91YXVsdAorCisKKyAgICAgICAgT2N0LTIwMDkgLSBNYXRoaWFzIFN2ZW5zc29uIC0gUmVtb3ZlZCBjcGxfKiBmcm9tIHN5bWJvbCBuYW1lcyAoRXZlbiBSb3VhdWx0IGFkZGVkIHRoZW0gYnV0IHNpbmNlIHRoaXMgaXMgbm93IG1vdmVkIHRvIGEgbmV3IHByb2plY3QgKG1pbml6aXA2NCkgSSByZW5hbWVkIHRoZW0gYWdhaW4pLgorICBPY3QtMjAwOSAtIE1hdGhpYXMgU3ZlbnNzb24gLSBGaXhlZCBwcm9ibGVtIGlmIHVuY29tcHJlc3NlZCBzaXplIHdhcyA+IDRHIGFuZCBjb21wcmVzc2VkIHNpemUgd2FzIDw0RworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGQgb25seSByZWFkIHRoZSBjb21wcmVzc2VkL3VuY29tcHJlc3NlZCBzaXplIGZyb20gdGhlIFppcDY0IGZvcm1hdCBpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc2l6ZSBmcm9tIG5vcm1hbCBoZWFkZXIgd2FzIDB4RkZGRkZGRkYKKyAgT2N0LTIwMDkgLSBNYXRoaWFzIFN2ZW5zc29uIC0gQXBwbGllZCBzb21lIGJ1ZyBmaXhlcyBmcm9tIHBhY2hlcyByZWNpdmVkIGZyb20gR2lsbGVzIFZvbGxhbnQKKyAgICAgICAgT2N0LTIwMDkgLSBNYXRoaWFzIFN2ZW5zc29uIC0gQXBwbGllZCBzdXBwb3J0IHRvIHVuemlwIGZpbGVzIHdpdGggY29tcHJlc3Npb24gbWF0aG9kIEJaSVAyIChiemlwMiBsaWIgaXMgcmVxdWlyZWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhdGNoIGNyZWF0ZWQgYnkgRGFuaWVsIEJvcmNhCisKKyAgSmFuLTIwMTAgLSBiYWNrIHRvIHVuemlwIGFuZCBtaW5pemlwIDEuMCBuYW1lIHNjaGVtZSwgd2l0aCBjb21wYXRpYmlsaXR5IGxheWVyCisKKyAgQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMCBHaWxsZXMgVm9sbGFudCwgRXZlbiBSb3VhdWx0LCBNYXRoaWFzIFN2ZW5zc29uCisKKyovCisKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZm5kZWYgTk9VTkNSWVBUCisgICAgICAgICNkZWZpbmUgTk9VTkNSWVBUCisjZW5kaWYKKworI2luY2x1ZGUgInpsaWIuaCIKKyNpbmNsdWRlICJ1bnppcC5oIgorCisjaWZkZWYgU1REQworIyAgaW5jbHVkZSA8c3RkZGVmLmg+CisjICBpbmNsdWRlIDxzdHJpbmcuaD4KKyMgIGluY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWZkZWYgTk9fRVJSTk9fSAorICAgIGV4dGVybiBpbnQgZXJybm87CisjZWxzZQorIyAgIGluY2x1ZGUgPGVycm5vLmg+CisjZW5kaWYKKworCisjaWZuZGVmIGxvY2FsCisjICBkZWZpbmUgbG9jYWwgc3RhdGljCisjZW5kaWYKKy8qIGNvbXBpbGUgd2l0aCAtRGxvY2FsIGlmIHlvdXIgZGVidWdnZXIgY2FuJ3QgZmluZCBzdGF0aWMgc3ltYm9scyAqLworCisKKyNpZm5kZWYgQ0FTRVNFTlNJVElWSVRZREVGQVVMVF9OTworIyAgaWYgIWRlZmluZWQodW5peCkgJiYgIWRlZmluZWQoQ0FTRVNFTlNJVElWSVRZREVGQVVMVF9ZRVMpCisjICAgIGRlZmluZSBDQVNFU0VOU0lUSVZJVFlERUZBVUxUX05PCisjICBlbmRpZgorI2VuZGlmCisKKworI2lmbmRlZiBVTlpfQlVGU0laRQorI2RlZmluZSBVTlpfQlVGU0laRSAoMTYzODQpCisjZW5kaWYKKworI2lmbmRlZiBVTlpfTUFYRklMRU5BTUVJTlpJUAorI2RlZmluZSBVTlpfTUFYRklMRU5BTUVJTlpJUCAoMjU2KQorI2VuZGlmCisKKyNpZm5kZWYgQUxMT0MKKyMgZGVmaW5lIEFMTE9DKHNpemUpIChtYWxsb2Moc2l6ZSkpCisjZW5kaWYKKyNpZm5kZWYgVFJZRlJFRQorIyBkZWZpbmUgVFJZRlJFRShwKSB7aWYgKHApIGZyZWUocCk7fQorI2VuZGlmCisKKyNkZWZpbmUgU0laRUNFTlRSQUxESVJJVEVNICgweDJlKQorI2RlZmluZSBTSVpFWklQTE9DQUxIRUFERVIgKDB4MWUpCisKKworY29uc3QgY2hhciB1bnpfY29weXJpZ2h0W10gPQorICAgIiB1bnppcCAxLjAxIENvcHlyaWdodCAxOTk4LTIwMDQgR2lsbGVzIFZvbGxhbnQgLSBodHRwOi8vd3d3LndpbmltYWdlLmNvbS96TGliRGxsIjsKKworLyogdW56X2ZpbGVfaW5mb19pbnRlcm50YWwgY29udGFpbiBpbnRlcm5hbCBpbmZvIGFib3V0IGEgZmlsZSBpbiB6aXBmaWxlKi8KK3R5cGVkZWYgc3RydWN0IHVuel9maWxlX2luZm82NF9pbnRlcm5hbF9zCit7CisgICAgWlBPUzY0X1Qgb2Zmc2V0X2N1cmZpbGU7LyogcmVsYXRpdmUgb2Zmc2V0IG9mIGxvY2FsIGhlYWRlciA4IGJ5dGVzICovCit9IHVuel9maWxlX2luZm82NF9pbnRlcm5hbDsKKworCisvKiBmaWxlX2luX3ppcF9yZWFkX2luZm9fcyBjb250YWluIGludGVybmFsIGluZm9ybWF0aW9uIGFib3V0IGEgZmlsZSBpbiB6aXBmaWxlLAorICAgIHdoZW4gcmVhZGluZyBhbmQgZGVjb21wcmVzcyBpdCAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBjaGFyICAqcmVhZF9idWZmZXI7ICAgICAgICAgLyogaW50ZXJuYWwgYnVmZmVyIGZvciBjb21wcmVzc2VkIGRhdGEgKi8KKyAgICB6X3N0cmVhbSBzdHJlYW07ICAgICAgICAgICAgLyogekxpYiBzdHJlYW0gc3RydWN0dXJlIGZvciBpbmZsYXRlICovCisKKyNpZmRlZiBIQVZFX0JaSVAyCisgICAgYnpfc3RyZWFtIGJzdHJlYW07ICAgICAgICAgIC8qIGJ6TGliIHN0cmVhbSBzdHJ1Y3R1cmUgZm9yIGJ6aXBlZCAqLworI2VuZGlmCisKKyAgICBaUE9TNjRfVCBwb3NfaW5femlwZmlsZTsgICAgICAgLyogcG9zaXRpb24gaW4gYnl0ZSBvbiB0aGUgemlwZmlsZSwgZm9yIGZzZWVrKi8KKyAgICB1TG9uZyBzdHJlYW1faW5pdGlhbGlzZWQ7ICAgLyogZmxhZyBzZXQgaWYgc3RyZWFtIHN0cnVjdHVyZSBpcyBpbml0aWFsaXNlZCovCisKKyAgICBaUE9TNjRfVCBvZmZzZXRfbG9jYWxfZXh0cmFmaWVsZDsvKiBvZmZzZXQgb2YgdGhlIGxvY2FsIGV4dHJhIGZpZWxkICovCisgICAgdUludCAgc2l6ZV9sb2NhbF9leHRyYWZpZWxkOy8qIHNpemUgb2YgdGhlIGxvY2FsIGV4dHJhIGZpZWxkICovCisgICAgWlBPUzY0X1QgcG9zX2xvY2FsX2V4dHJhZmllbGQ7ICAgLyogcG9zaXRpb24gaW4gdGhlIGxvY2FsIGV4dHJhIGZpZWxkIGluIHJlYWQqLworICAgIFpQT1M2NF9UIHRvdGFsX291dF82NDsKKworICAgIHVMb25nIGNyYzMyOyAgICAgICAgICAgICAgICAvKiBjcmMzMiBvZiBhbGwgZGF0YSB1bmNvbXByZXNzZWQgKi8KKyAgICB1TG9uZyBjcmMzMl93YWl0OyAgICAgICAgICAgLyogY3JjMzIgd2UgbXVzdCBvYnRhaW4gYWZ0ZXIgZGVjb21wcmVzcyBhbGwgKi8KKyAgICBaUE9TNjRfVCByZXN0X3JlYWRfY29tcHJlc3NlZDsgLyogbnVtYmVyIG9mIGJ5dGUgdG8gYmUgZGVjb21wcmVzc2VkICovCisgICAgWlBPUzY0X1QgcmVzdF9yZWFkX3VuY29tcHJlc3NlZDsvKm51bWJlciBvZiBieXRlIHRvIGJlIG9idGFpbmVkIGFmdGVyIGRlY29tcCovCisgICAgemxpYl9maWxlZnVuYzY0XzMyX2RlZiB6X2ZpbGVmdW5jOworICAgIHZvaWRwZiBmaWxlc3RyZWFtOyAgICAgICAgLyogaW8gc3RydWN0b3JlIG9mIHRoZSB6aXBmaWxlICovCisgICAgdUxvbmcgY29tcHJlc3Npb25fbWV0aG9kOyAgIC8qIGNvbXByZXNzaW9uIG1ldGhvZCAoMD09c3RvcmUpICovCisgICAgWlBPUzY0X1QgYnl0ZV9iZWZvcmVfdGhlX3ppcGZpbGU7LyogYnl0ZSBiZWZvcmUgdGhlIHppcGZpbGUsICg+MCBmb3Igc2Z4KSovCisgICAgaW50ICAgcmF3OworfSBmaWxlX2luX3ppcDY0X3JlYWRfaW5mb19zOworCisKKy8qIHVuejY0X3MgY29udGFpbiBpbnRlcm5hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgemlwZmlsZQorKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgemxpYl9maWxlZnVuYzY0XzMyX2RlZiB6X2ZpbGVmdW5jOworICAgIGludCBpczY0Yml0T3BlbkZ1bmN0aW9uOworICAgIHZvaWRwZiBmaWxlc3RyZWFtOyAgICAgICAgLyogaW8gc3RydWN0b3JlIG9mIHRoZSB6aXBmaWxlICovCisgICAgdW56X2dsb2JhbF9pbmZvNjQgZ2k7ICAgICAgIC8qIHB1YmxpYyBnbG9iYWwgaW5mb3JtYXRpb24gKi8KKyAgICBaUE9TNjRfVCBieXRlX2JlZm9yZV90aGVfemlwZmlsZTsvKiBieXRlIGJlZm9yZSB0aGUgemlwZmlsZSwgKD4wIGZvciBzZngpKi8KKyAgICBaUE9TNjRfVCBudW1fZmlsZTsgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHRoZSBjdXJyZW50IGZpbGUgaW4gdGhlIHppcGZpbGUqLworICAgIFpQT1M2NF9UIHBvc19pbl9jZW50cmFsX2RpcjsgICAvKiBwb3Mgb2YgdGhlIGN1cnJlbnQgZmlsZSBpbiB0aGUgY2VudHJhbCBkaXIqLworICAgIFpQT1M2NF9UIGN1cnJlbnRfZmlsZV9vazsgICAgICAvKiBmbGFnIGFib3V0IHRoZSB1c2FiaWxpdHkgb2YgdGhlIGN1cnJlbnQgZmlsZSovCisgICAgWlBPUzY0X1QgY2VudHJhbF9wb3M7ICAgICAgICAgIC8qIHBvc2l0aW9uIG9mIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGNlbnRyYWwgZGlyKi8KKworICAgIFpQT1M2NF9UIHNpemVfY2VudHJhbF9kaXI7ICAgICAvKiBzaXplIG9mIHRoZSBjZW50cmFsIGRpcmVjdG9yeSAgKi8KKyAgICBaUE9TNjRfVCBvZmZzZXRfY2VudHJhbF9kaXI7ICAgLyogb2Zmc2V0IG9mIHN0YXJ0IG9mIGNlbnRyYWwgZGlyZWN0b3J5IHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcGVjdCB0byB0aGUgc3RhcnRpbmcgZGlzayBudW1iZXIgKi8KKworICAgIHVuel9maWxlX2luZm82NCBjdXJfZmlsZV9pbmZvOyAvKiBwdWJsaWMgaW5mbyBhYm91dCB0aGUgY3VycmVudCBmaWxlIGluIHppcCovCisgICAgdW56X2ZpbGVfaW5mbzY0X2ludGVybmFsIGN1cl9maWxlX2luZm9faW50ZXJuYWw7IC8qIHByaXZhdGUgaW5mbyBhYm91dCBpdCovCisgICAgZmlsZV9pbl96aXA2NF9yZWFkX2luZm9fcyogcGZpbGVfaW5femlwX3JlYWQ7IC8qIHN0cnVjdHVyZSBhYm91dCB0aGUgY3VycmVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgaWYgd2UgYXJlIGRlY29tcHJlc3NpbmcgaXQgKi8KKyAgICBpbnQgZW5jcnlwdGVkOworCisgICAgaW50IGlzWmlwNjQ7CisKKyMgICAgaWZuZGVmIE5PVU5DUllQVAorICAgIHVuc2lnbmVkIGxvbmcga2V5c1szXTsgICAgIC8qIGtleXMgZGVmaW5pbmcgdGhlIHBzZXVkby1yYW5kb20gc2VxdWVuY2UgKi8KKyAgICBjb25zdCB6X2NyY190KiBwY3JjXzMyX3RhYjsKKyMgICAgZW5kaWYKK30gdW56NjRfczsKKworCisjaWZuZGVmIE5PVU5DUllQVAorI2luY2x1ZGUgImNyeXB0LmgiCisjZW5kaWYKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgIFJlYWQgYSBieXRlIGZyb20gYSBnel9zdHJlYW07IHVwZGF0ZSBuZXh0X2luIGFuZCBhdmFpbF9pbi4gUmV0dXJuIEVPRgorICAgZm9yIGVuZCBvZiBmaWxlLgorICAgSU4gYXNzZXJ0aW9uOiB0aGUgc3RyZWFtIHMgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IG9wZW5lZCBmb3IgcmVhZGluZy4KKyovCisKKworbG9jYWwgaW50IHVuejY0bG9jYWxfZ2V0Qnl0ZSBPRigoCisgICAgY29uc3QgemxpYl9maWxlZnVuYzY0XzMyX2RlZiogcHpsaWJfZmlsZWZ1bmNfZGVmLAorICAgIHZvaWRwZiBmaWxlc3RyZWFtLAorICAgIGludCAqcGkpKTsKKworbG9jYWwgaW50IHVuejY0bG9jYWxfZ2V0Qnl0ZShjb25zdCB6bGliX2ZpbGVmdW5jNjRfMzJfZGVmKiBwemxpYl9maWxlZnVuY19kZWYsIHZvaWRwZiBmaWxlc3RyZWFtLCBpbnQgKnBpKQoreworICAgIHVuc2lnbmVkIGNoYXIgYzsKKyAgICBpbnQgZXJyID0gKGludClaUkVBRDY0KCpwemxpYl9maWxlZnVuY19kZWYsZmlsZXN0cmVhbSwmYywxKTsKKyAgICBpZiAoZXJyPT0xKQorICAgIHsKKyAgICAgICAgKnBpID0gKGludCljOworICAgICAgICByZXR1cm4gVU5aX09LOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAoWkVSUk9SNjQoKnB6bGliX2ZpbGVmdW5jX2RlZixmaWxlc3RyZWFtKSkKKyAgICAgICAgICAgIHJldHVybiBVTlpfRVJSTk87CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBVTlpfRU9GOworICAgIH0KK30KKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIFJlYWRzIGEgbG9uZyBpbiBMU0Igb3JkZXIgZnJvbSB0aGUgZ2l2ZW4gZ3pfc3RyZWFtLiBTZXRzCisqLworbG9jYWwgaW50IHVuejY0bG9jYWxfZ2V0U2hvcnQgT0YoKAorICAgIGNvbnN0IHpsaWJfZmlsZWZ1bmM2NF8zMl9kZWYqIHB6bGliX2ZpbGVmdW5jX2RlZiwKKyAgICB2b2lkcGYgZmlsZXN0cmVhbSwKKyAgICB1TG9uZyAqcFgpKTsKKworbG9jYWwgaW50IHVuejY0bG9jYWxfZ2V0U2hvcnQgKGNvbnN0IHpsaWJfZmlsZWZ1bmM2NF8zMl9kZWYqIHB6bGliX2ZpbGVmdW5jX2RlZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZHBmIGZpbGVzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVMb25nICpwWCkKK3sKKyAgICB1TG9uZyB4IDsKKyAgICBpbnQgaSA9IDA7CisgICAgaW50IGVycjsKKworICAgIGVyciA9IHVuejY0bG9jYWxfZ2V0Qnl0ZShwemxpYl9maWxlZnVuY19kZWYsZmlsZXN0cmVhbSwmaSk7CisgICAgeCA9ICh1TG9uZylpOworCisgICAgaWYgKGVycj09VU5aX09LKQorICAgICAgICBlcnIgPSB1bno2NGxvY2FsX2dldEJ5dGUocHpsaWJfZmlsZWZ1bmNfZGVmLGZpbGVzdHJlYW0sJmkpOworICAgIHggfD0gKCh1TG9uZylpKTw8ODsKKworICAgIGlmIChlcnI9PVVOWl9PSykKKyAgICAgICAgKnBYID0geDsKKyAgICBlbHNlCisgICAgICAgICpwWCA9IDA7CisgICAgcmV0dXJuIGVycjsKK30KKworbG9jYWwgaW50IHVuejY0bG9jYWxfZ2V0TG9uZyBPRigoCisgICAgY29uc3QgemxpYl9maWxlZnVuYzY0XzMyX2RlZiogcHpsaWJfZmlsZWZ1bmNfZGVmLAorICAgIHZvaWRwZiBmaWxlc3RyZWFtLAorICAgIHVMb25nICpwWCkpOworCitsb2NhbCBpbnQgdW56NjRsb2NhbF9nZXRMb25nIChjb25zdCB6bGliX2ZpbGVmdW5jNjRfMzJfZGVmKiBwemxpYl9maWxlZnVuY19kZWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZHBmIGZpbGVzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdUxvbmcgKnBYKQoreworICAgIHVMb25nIHggOworICAgIGludCBpID0gMDsKKyAgICBpbnQgZXJyOworCisgICAgZXJyID0gdW56NjRsb2NhbF9nZXRCeXRlKHB6bGliX2ZpbGVmdW5jX2RlZixmaWxlc3RyZWFtLCZpKTsKKyAgICB4ID0gKHVMb25nKWk7CisKKyAgICBpZiAoZXJyPT1VTlpfT0spCisgICAgICAgIGVyciA9IHVuejY0bG9jYWxfZ2V0Qnl0ZShwemxpYl9maWxlZnVuY19kZWYsZmlsZXN0cmVhbSwmaSk7CisgICAgeCB8PSAoKHVMb25nKWkpPDw4OworCisgICAgaWYgKGVycj09VU5aX09LKQorICAgICAgICBlcnIgPSB1bno2NGxvY2FsX2dldEJ5dGUocHpsaWJfZmlsZWZ1bmNfZGVmLGZpbGVzdHJlYW0sJmkpOworICAgIHggfD0gKCh1TG9uZylpKTw8MTY7CisKKyAgICBpZiAoZXJyPT1VTlpfT0spCisgICAgICAgIGVyciA9IHVuejY0bG9jYWxfZ2V0Qnl0ZShwemxpYl9maWxlZnVuY19kZWYsZmlsZXN0cmVhbSwmaSk7CisgICAgeCArPSAoKHVMb25nKWkpPDwyNDsKKworICAgIGlmIChlcnI9PVVOWl9PSykKKyAgICAgICAgKnBYID0geDsKKyAgICBlbHNlCisgICAgICAgICpwWCA9IDA7CisgICAgcmV0dXJuIGVycjsKK30KKworbG9jYWwgaW50IHVuejY0bG9jYWxfZ2V0TG9uZzY0IE9GKCgKKyAgICBjb25zdCB6bGliX2ZpbGVmdW5jNjRfMzJfZGVmKiBwemxpYl9maWxlZnVuY19kZWYsCisgICAgdm9pZHBmIGZpbGVzdHJlYW0sCisgICAgWlBPUzY0X1QgKnBYKSk7CisKKworbG9jYWwgaW50IHVuejY0bG9jYWxfZ2V0TG9uZzY0IChjb25zdCB6bGliX2ZpbGVmdW5jNjRfMzJfZGVmKiBwemxpYl9maWxlZnVuY19kZWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZHBmIGZpbGVzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWlBPUzY0X1QgKnBYKQoreworICAgIFpQT1M2NF9UIHggOworICAgIGludCBpID0gMDsKKyAgICBpbnQgZXJyOworCisgICAgZXJyID0gdW56NjRsb2NhbF9nZXRCeXRlKHB6bGliX2ZpbGVmdW5jX2RlZixmaWxlc3RyZWFtLCZpKTsKKyAgICB4ID0gKFpQT1M2NF9UKWk7CisKKyAgICBpZiAoZXJyPT1VTlpfT0spCisgICAgICAgIGVyciA9IHVuejY0bG9jYWxfZ2V0Qnl0ZShwemxpYl9maWxlZnVuY19kZWYsZmlsZXN0cmVhbSwmaSk7CisgICAgeCB8PSAoKFpQT1M2NF9UKWkpPDw4OworCisgICAgaWYgKGVycj09VU5aX09LKQorICAgICAgICBlcnIgPSB1bno2NGxvY2FsX2dldEJ5dGUocHpsaWJfZmlsZWZ1bmNfZGVmLGZpbGVzdHJlYW0sJmkpOworICAgIHggfD0gKChaUE9TNjRfVClpKTw8MTY7CisKKyAgICBpZiAoZXJyPT1VTlpfT0spCisgICAgICAgIGVyciA9IHVuejY0bG9jYWxfZ2V0Qnl0ZShwemxpYl9maWxlZnVuY19kZWYsZmlsZXN0cmVhbSwmaSk7CisgICAgeCB8PSAoKFpQT1M2NF9UKWkpPDwyNDsKKworICAgIGlmIChlcnI9PVVOWl9PSykKKyAgICAgICAgZXJyID0gdW56NjRsb2NhbF9nZXRCeXRlKHB6bGliX2ZpbGVmdW5jX2RlZixmaWxlc3RyZWFtLCZpKTsKKyAgICB4IHw9ICgoWlBPUzY0X1QpaSk8PDMyOworCisgICAgaWYgKGVycj09VU5aX09LKQorICAgICAgICBlcnIgPSB1bno2NGxvY2FsX2dldEJ5dGUocHpsaWJfZmlsZWZ1bmNfZGVmLGZpbGVzdHJlYW0sJmkpOworICAgIHggfD0gKChaUE9TNjRfVClpKTw8NDA7CisKKyAgICBpZiAoZXJyPT1VTlpfT0spCisgICAgICAgIGVyciA9IHVuejY0bG9jYWxfZ2V0Qnl0ZShwemxpYl9maWxlZnVuY19kZWYsZmlsZXN0cmVhbSwmaSk7CisgICAgeCB8PSAoKFpQT1M2NF9UKWkpPDw0ODsKKworICAgIGlmIChlcnI9PVVOWl9PSykKKyAgICAgICAgZXJyID0gdW56NjRsb2NhbF9nZXRCeXRlKHB6bGliX2ZpbGVmdW5jX2RlZixmaWxlc3RyZWFtLCZpKTsKKyAgICB4IHw9ICgoWlBPUzY0X1QpaSk8PDU2OworCisgICAgaWYgKGVycj09VU5aX09LKQorICAgICAgICAqcFggPSB4OworICAgIGVsc2UKKyAgICAgICAgKnBYID0gMDsKKyAgICByZXR1cm4gZXJyOworfQorCisvKiBNeSBvd24gc3RyY21waSAvIHN0cmNhc2VjbXAgKi8KK2xvY2FsIGludCBzdHJjbXBjYXNlbm9zZW5zaXRpdmVfaW50ZXJuYWwgKGNvbnN0IGNoYXIqIGZpbGVOYW1lMSwgY29uc3QgY2hhciogZmlsZU5hbWUyKQoreworICAgIGZvciAoOzspCisgICAgeworICAgICAgICBjaGFyIGMxPSooZmlsZU5hbWUxKyspOworICAgICAgICBjaGFyIGMyPSooZmlsZU5hbWUyKyspOworICAgICAgICBpZiAoKGMxPj0nYScpICYmIChjMTw9J3onKSkKKyAgICAgICAgICAgIGMxIC09IDB4MjA7CisgICAgICAgIGlmICgoYzI+PSdhJykgJiYgKGMyPD0neicpKQorICAgICAgICAgICAgYzIgLT0gMHgyMDsKKyAgICAgICAgaWYgKGMxPT0nXDAnKQorICAgICAgICAgICAgcmV0dXJuICgoYzI9PSdcMCcpID8gMCA6IC0xKTsKKyAgICAgICAgaWYgKGMyPT0nXDAnKQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGlmIChjMTxjMikKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKGMxPmMyKQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgfQorfQorCisKKyNpZmRlZiAgQ0FTRVNFTlNJVElWSVRZREVGQVVMVF9OTworI2RlZmluZSBDQVNFU0VOU0lUSVZJVFlERUZBVUxUVkFMVUUgMgorI2Vsc2UKKyNkZWZpbmUgQ0FTRVNFTlNJVElWSVRZREVGQVVMVFZBTFVFIDEKKyNlbmRpZgorCisjaWZuZGVmIFNUUkNNUENBU0VOT1NFTlRJVkVGVU5DVElPTgorI2RlZmluZSBTVFJDTVBDQVNFTk9TRU5USVZFRlVOQ1RJT04gc3RyY21wY2FzZW5vc2Vuc2l0aXZlX2ludGVybmFsCisjZW5kaWYKKworLyoKKyAgIENvbXBhcmUgdHdvIGZpbGVuYW1lIChmaWxlTmFtZTEsZmlsZU5hbWUyKS4KKyAgIElmIGlDYXNlU2VuaXNpdml0eSA9IDEsIGNvbXBhcmlzaW9uIGlzIGNhc2Ugc2Vuc2l0aXZpdHkgKGxpa2Ugc3RyY21wKQorICAgSWYgaUNhc2VTZW5pc2l2aXR5ID0gMiwgY29tcGFyaXNpb24gaXMgbm90IGNhc2Ugc2Vuc2l0aXZpdHkgKGxpa2Ugc3RyY21waQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIHN0cmNhc2VjbXApCisgICBJZiBpQ2FzZVNlbmlzaXZpdHkgPSAwLCBjYXNlIHNlbnNpdGl2aXR5IGlzIGRlZmF1dCBvZiB5b3VyIG9wZXJhdGluZyBzeXN0ZW0KKyAgICAgICAgKGxpa2UgMSBvbiBVbml4LCAyIG9uIFdpbmRvd3MpCisKKyovCitleHRlcm4gaW50IFpFWFBPUlQgdW56U3RyaW5nRmlsZU5hbWVDb21wYXJlIChjb25zdCBjaGFyKiAgZmlsZU5hbWUxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICBmaWxlTmFtZTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlDYXNlU2Vuc2l0aXZpdHkpCisKK3sKKyAgICBpZiAoaUNhc2VTZW5zaXRpdml0eT09MCkKKyAgICAgICAgaUNhc2VTZW5zaXRpdml0eT1DQVNFU0VOU0lUSVZJVFlERUZBVUxUVkFMVUU7CisKKyAgICBpZiAoaUNhc2VTZW5zaXRpdml0eT09MSkKKyAgICAgICAgcmV0dXJuIHN0cmNtcChmaWxlTmFtZTEsZmlsZU5hbWUyKTsKKworICAgIHJldHVybiBTVFJDTVBDQVNFTk9TRU5USVZFRlVOQ1RJT04oZmlsZU5hbWUxLGZpbGVOYW1lMik7Cit9CisKKyNpZm5kZWYgQlVGUkVBRENPTU1FTlQKKyNkZWZpbmUgQlVGUkVBRENPTU1FTlQgKDB4NDAwKQorI2VuZGlmCisKKy8qCisgIExvY2F0ZSB0aGUgQ2VudHJhbCBkaXJlY3Rvcnkgb2YgYSB6aXBmaWxlIChhdCB0aGUgZW5kLCBqdXN0IGJlZm9yZQorICAgIHRoZSBnbG9iYWwgY29tbWVudCkKKyovCitsb2NhbCBaUE9TNjRfVCB1bno2NGxvY2FsX1NlYXJjaENlbnRyYWxEaXIgT0YoKGNvbnN0IHpsaWJfZmlsZWZ1bmM2NF8zMl9kZWYqIHB6bGliX2ZpbGVmdW5jX2RlZiwgdm9pZHBmIGZpbGVzdHJlYW0pKTsKK2xvY2FsIFpQT1M2NF9UIHVuejY0bG9jYWxfU2VhcmNoQ2VudHJhbERpcihjb25zdCB6bGliX2ZpbGVmdW5jNjRfMzJfZGVmKiBwemxpYl9maWxlZnVuY19kZWYsIHZvaWRwZiBmaWxlc3RyZWFtKQoreworICAgIHVuc2lnbmVkIGNoYXIqIGJ1ZjsKKyAgICBaUE9TNjRfVCB1U2l6ZUZpbGU7CisgICAgWlBPUzY0X1QgdUJhY2tSZWFkOworICAgIFpQT1M2NF9UIHVNYXhCYWNrPTB4ZmZmZjsgLyogbWF4aW11bSBzaXplIG9mIGdsb2JhbCBjb21tZW50ICovCisgICAgWlBPUzY0X1QgdVBvc0ZvdW5kPTA7CisKKyAgICBpZiAoWlNFRUs2NCgqcHpsaWJfZmlsZWZ1bmNfZGVmLGZpbGVzdHJlYW0sMCxaTElCX0ZJTEVGVU5DX1NFRUtfRU5EKSAhPSAwKQorICAgICAgICByZXR1cm4gMDsKKworCisgICAgdVNpemVGaWxlID0gWlRFTEw2NCgqcHpsaWJfZmlsZWZ1bmNfZGVmLGZpbGVzdHJlYW0pOworCisgICAgaWYgKHVNYXhCYWNrPnVTaXplRmlsZSkKKyAgICAgICAgdU1heEJhY2sgPSB1U2l6ZUZpbGU7CisKKyAgICBidWYgPSAodW5zaWduZWQgY2hhciopQUxMT0MoQlVGUkVBRENPTU1FTlQrNCk7CisgICAgaWYgKGJ1Zj09TlVMTCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICB1QmFja1JlYWQgPSA0OworICAgIHdoaWxlICh1QmFja1JlYWQ8dU1heEJhY2spCisgICAgeworICAgICAgICB1TG9uZyB1UmVhZFNpemU7CisgICAgICAgIFpQT1M2NF9UIHVSZWFkUG9zIDsKKyAgICAgICAgaW50IGk7CisgICAgICAgIGlmICh1QmFja1JlYWQrQlVGUkVBRENPTU1FTlQ+dU1heEJhY2spCisgICAgICAgICAgICB1QmFja1JlYWQgPSB1TWF4QmFjazsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdUJhY2tSZWFkKz1CVUZSRUFEQ09NTUVOVDsKKyAgICAgICAgdVJlYWRQb3MgPSB1U2l6ZUZpbGUtdUJhY2tSZWFkIDsKKworICAgICAgICB1UmVhZFNpemUgPSAoKEJVRlJFQURDT01NRU5UKzQpIDwgKHVTaXplRmlsZS11UmVhZFBvcykpID8KKyAgICAgICAgICAgICAgICAgICAgIChCVUZSRUFEQ09NTUVOVCs0KSA6ICh1TG9uZykodVNpemVGaWxlLXVSZWFkUG9zKTsKKyAgICAgICAgaWYgKFpTRUVLNjQoKnB6bGliX2ZpbGVmdW5jX2RlZixmaWxlc3RyZWFtLHVSZWFkUG9zLFpMSUJfRklMRUZVTkNfU0VFS19TRVQpIT0wKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKFpSRUFENjQoKnB6bGliX2ZpbGVmdW5jX2RlZixmaWxlc3RyZWFtLGJ1Zix1UmVhZFNpemUpIT11UmVhZFNpemUpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBmb3IgKGk9KGludCl1UmVhZFNpemUtMzsgKGktLSk+MDspCisgICAgICAgICAgICBpZiAoKCgqKGJ1ZitpKSk9PTB4NTApICYmICgoKihidWYraSsxKSk9PTB4NGIpICYmCisgICAgICAgICAgICAgICAgKCgqKGJ1ZitpKzIpKT09MHgwNSkgJiYgKCgqKGJ1ZitpKzMpKT09MHgwNikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdVBvc0ZvdW5kID0gdVJlYWRQb3MrKHVuc2lnbmVkKWk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgaWYgKHVQb3NGb3VuZCE9MCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBUUllGUkVFKGJ1Zik7CisgICAgcmV0dXJuIHVQb3NGb3VuZDsKK30KKworCisvKgorICBMb2NhdGUgdGhlIENlbnRyYWwgZGlyZWN0b3J5IDY0IG9mIGEgemlwZmlsZSAoYXQgdGhlIGVuZCwganVzdCBiZWZvcmUKKyAgICB0aGUgZ2xvYmFsIGNvbW1lbnQpCisqLworbG9jYWwgWlBPUzY0X1QgdW56NjRsb2NhbF9TZWFyY2hDZW50cmFsRGlyNjQgT0YoKAorICAgIGNvbnN0IHpsaWJfZmlsZWZ1bmM2NF8zMl9kZWYqIHB6bGliX2ZpbGVmdW5jX2RlZiwKKyAgICB2b2lkcGYgZmlsZXN0cmVhbSkpOworCitsb2NhbCBaUE9TNjRfVCB1bno2NGxvY2FsX1NlYXJjaENlbnRyYWxEaXI2NChjb25zdCB6bGliX2ZpbGVmdW5jNjRfMzJfZGVmKiBwemxpYl9maWxlZnVuY19kZWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWRwZiBmaWxlc3RyZWFtKQoreworICAgIHVuc2lnbmVkIGNoYXIqIGJ1ZjsKKyAgICBaUE9TNjRfVCB1U2l6ZUZpbGU7CisgICAgWlBPUzY0X1QgdUJhY2tSZWFkOworICAgIFpQT1M2NF9UIHVNYXhCYWNrPTB4ZmZmZjsgLyogbWF4aW11bSBzaXplIG9mIGdsb2JhbCBjb21tZW50ICovCisgICAgWlBPUzY0X1QgdVBvc0ZvdW5kPTA7CisgICAgdUxvbmcgdUw7CisgICAgICAgICAgICAgICAgWlBPUzY0X1QgcmVsYXRpdmVPZmZzZXQ7CisKKyAgICBpZiAoWlNFRUs2NCgqcHpsaWJfZmlsZWZ1bmNfZGVmLGZpbGVzdHJlYW0sMCxaTElCX0ZJTEVGVU5DX1NFRUtfRU5EKSAhPSAwKQorICAgICAgICByZXR1cm4gMDsKKworCisgICAgdVNpemVGaWxlID0gWlRFTEw2NCgqcHpsaWJfZmlsZWZ1bmNfZGVmLGZpbGVzdHJlYW0pOworCisgICAgaWYgKHVNYXhCYWNrPnVTaXplRmlsZSkKKyAgICAgICAgdU1heEJhY2sgPSB1U2l6ZUZpbGU7CisKKyAgICBidWYgPSAodW5zaWduZWQgY2hhciopQUxMT0MoQlVGUkVBRENPTU1FTlQrNCk7CisgICAgaWYgKGJ1Zj09TlVMTCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICB1QmFja1JlYWQgPSA0OworICAgIHdoaWxlICh1QmFja1JlYWQ8dU1heEJhY2spCisgICAgeworICAgICAgICB1TG9uZyB1UmVhZFNpemU7CisgICAgICAgIFpQT1M2NF9UIHVSZWFkUG9zOworICAgICAgICBpbnQgaTsKKyAgICAgICAgaWYgKHVCYWNrUmVhZCtCVUZSRUFEQ09NTUVOVD51TWF4QmFjaykKKyAgICAgICAgICAgIHVCYWNrUmVhZCA9IHVNYXhCYWNrOworICAgICAgICBlbHNlCisgICAgICAgICAgICB1QmFja1JlYWQrPUJVRlJFQURDT01NRU5UOworICAgICAgICB1UmVhZFBvcyA9IHVTaXplRmlsZS11QmFja1JlYWQgOworCisgICAgICAgIHVSZWFkU2l6ZSA9ICgoQlVGUkVBRENPTU1FTlQrNCkgPCAodVNpemVGaWxlLXVSZWFkUG9zKSkgPworICAgICAgICAgICAgICAgICAgICAgKEJVRlJFQURDT01NRU5UKzQpIDogKHVMb25nKSh1U2l6ZUZpbGUtdVJlYWRQb3MpOworICAgICAgICBpZiAoWlNFRUs2NCgqcHpsaWJfZmlsZWZ1bmNfZGVmLGZpbGVzdHJlYW0sdVJlYWRQb3MsWkxJQl9GSUxFRlVOQ19TRUVLX1NFVCkhPTApCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoWlJFQUQ2NCgqcHpsaWJfZmlsZWZ1bmNfZGVmLGZpbGVzdHJlYW0sYnVmLHVSZWFkU2l6ZSkhPXVSZWFkU2l6ZSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGZvciAoaT0oaW50KXVSZWFkU2l6ZS0zOyAoaS0tKT4wOykKKyAgICAgICAgICAgIGlmICgoKCooYnVmK2kpKT09MHg1MCkgJiYgKCgqKGJ1ZitpKzEpKT09MHg0YikgJiYKKyAgICAgICAgICAgICAgICAoKCooYnVmK2krMikpPT0weDA2KSAmJiAoKCooYnVmK2krMykpPT0weDA3KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1UG9zRm91bmQgPSB1UmVhZFBvcysodW5zaWduZWQpaTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICBpZiAodVBvc0ZvdW5kIT0wKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIFRSWUZSRUUoYnVmKTsKKyAgICBpZiAodVBvc0ZvdW5kID09IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgLyogWmlwNjQgZW5kIG9mIGNlbnRyYWwgZGlyZWN0b3J5IGxvY2F0b3IgKi8KKyAgICBpZiAoWlNFRUs2NCgqcHpsaWJfZmlsZWZ1bmNfZGVmLGZpbGVzdHJlYW0sIHVQb3NGb3VuZCxaTElCX0ZJTEVGVU5DX1NFRUtfU0VUKSE9MCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvKiB0aGUgc2lnbmF0dXJlLCBhbHJlYWR5IGNoZWNrZWQgKi8KKyAgICBpZiAodW56NjRsb2NhbF9nZXRMb25nKHB6bGliX2ZpbGVmdW5jX2RlZixmaWxlc3RyZWFtLCZ1TCkhPVVOWl9PSykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvKiBudW1iZXIgb2YgdGhlIGRpc2sgd2l0aCB0aGUgc3RhcnQgb2YgdGhlIHppcDY0IGVuZCBvZiAgY2VudHJhbCBkaXJlY3RvcnkgKi8KKyAgICBpZiAodW56NjRsb2NhbF9nZXRMb25nKHB6bGliX2ZpbGVmdW5jX2RlZixmaWxlc3RyZWFtLCZ1TCkhPVVOWl9PSykKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKHVMICE9IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgLyogcmVsYXRpdmUgb2Zmc2V0IG9mIHRoZSB6aXA2NCBlbmQgb2YgY2VudHJhbCBkaXJlY3RvcnkgcmVjb3JkICovCisgICAgaWYgKHVuejY0bG9jYWxfZ2V0TG9uZzY0KHB6bGliX2ZpbGVmdW5jX2RlZixmaWxlc3RyZWFtLCZyZWxhdGl2ZU9mZnNldCkhPVVOWl9PSykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvKiB0b3RhbCBudW1iZXIgb2YgZGlza3MgKi8KKyAgICBpZiAodW56NjRsb2NhbF9nZXRMb25nKHB6bGliX2ZpbGVmdW5jX2RlZixmaWxlc3RyZWFtLCZ1TCkhPVVOWl9PSykKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKHVMICE9IDEpCisgICAgICAgIHJldHVybiAwOworCisgICAgLyogR290byBlbmQgb2YgY2VudHJhbCBkaXJlY3RvcnkgcmVjb3JkICovCisgICAgaWYgKFpTRUVLNjQoKnB6bGliX2ZpbGVmdW5jX2RlZixmaWxlc3RyZWFtLCByZWxhdGl2ZU9mZnNldCxaTElCX0ZJTEVGVU5DX1NFRUtfU0VUKSE9MCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgLyogdGhlIHNpZ25hdHVyZSAqLworICAgIGlmICh1bno2NGxvY2FsX2dldExvbmcocHpsaWJfZmlsZWZ1bmNfZGVmLGZpbGVzdHJlYW0sJnVMKSE9VU5aX09LKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmICh1TCAhPSAweDA2MDY0YjUwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiByZWxhdGl2ZU9mZnNldDsKK30KKworLyoKKyAgT3BlbiBhIFppcCBmaWxlLiBwYXRoIGNvbnRhaW4gdGhlIGZ1bGwgcGF0aG5hbWUgKGJ5IGV4YW1wbGUsCisgICAgIG9uIGEgV2luZG93cyBOVCBjb21wdXRlciAiYzpcXHRlc3RcXHpsaWIxMTQuemlwIiBvciBvbiBhbiBVbml4IGNvbXB1dGVyCisgICAgICJ6bGliL3psaWIxMTQuemlwIi4KKyAgICAgSWYgdGhlIHppcGZpbGUgY2Fubm90IGJlIG9wZW5lZCAoZmlsZSBkb2Vzbid0IGV4aXN0IG9yIGluIG5vdCB2YWxpZCksIHRoZQorICAgICAgIHJldHVybiB2YWx1ZSBpcyBOVUxMLgorICAgICBFbHNlLCB0aGUgcmV0dXJuIHZhbHVlIGlzIGEgdW56RmlsZSBIYW5kbGUsIHVzYWJsZSB3aXRoIG90aGVyIGZ1bmN0aW9uCisgICAgICAgb2YgdGhpcyB1bnppcCBwYWNrYWdlLgorKi8KK2xvY2FsIHVuekZpbGUgdW56T3BlbkludGVybmFsIChjb25zdCB2b2lkICpwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpsaWJfZmlsZWZ1bmM2NF8zMl9kZWYqIHB6bGliX2ZpbGVmdW5jNjRfMzJfZGVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpczY0Yml0T3BlbkZ1bmN0aW9uKQoreworICAgIHVuejY0X3MgdXM7CisgICAgdW56NjRfcyAqczsKKyAgICBaUE9TNjRfVCBjZW50cmFsX3BvczsKKyAgICB1TG9uZyAgIHVMOworCisgICAgdUxvbmcgbnVtYmVyX2Rpc2s7ICAgICAgICAgIC8qIG51bWJlciBvZiB0aGUgY3VycmVudCBkaXN0LCB1c2VkIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFuaW5nIFpJUCwgdW5zdXBwb3J0ZWQsIGFsd2F5cyAwKi8KKyAgICB1TG9uZyBudW1iZXJfZGlza193aXRoX0NEOyAgLyogbnVtYmVyIHRoZSB0aGUgZGlzayB3aXRoIGNlbnRyYWwgZGlyLCB1c2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBzcGFuaW5nIFpJUCwgdW5zdXBwb3J0ZWQsIGFsd2F5cyAwKi8KKyAgICBaUE9TNjRfVCBudW1iZXJfZW50cnlfQ0Q7ICAgICAgLyogdG90YWwgbnVtYmVyIG9mIGVudHJpZXMgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNlbnRyYWwgZGlyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzYW1lIHRoYW4gbnVtYmVyX2VudHJ5IG9uIG5vc3BhbikgKi8KKworICAgIGludCBlcnI9VU5aX09LOworCisgICAgaWYgKHVuel9jb3B5cmlnaHRbMF0hPScgJykKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICB1cy56X2ZpbGVmdW5jLnpzZWVrMzJfZmlsZSA9IE5VTEw7CisgICAgdXMuel9maWxlZnVuYy56dGVsbDMyX2ZpbGUgPSBOVUxMOworICAgIGlmIChwemxpYl9maWxlZnVuYzY0XzMyX2RlZj09TlVMTCkKKyAgICAgICAgZmlsbF9mb3BlbjY0X2ZpbGVmdW5jKCZ1cy56X2ZpbGVmdW5jLnpmaWxlX2Z1bmM2NCk7CisgICAgZWxzZQorICAgICAgICB1cy56X2ZpbGVmdW5jID0gKnB6bGliX2ZpbGVmdW5jNjRfMzJfZGVmOworICAgIHVzLmlzNjRiaXRPcGVuRnVuY3Rpb24gPSBpczY0Yml0T3BlbkZ1bmN0aW9uOworCisKKworICAgIHVzLmZpbGVzdHJlYW0gPSBaT1BFTjY0KHVzLnpfZmlsZWZ1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBaTElCX0ZJTEVGVU5DX01PREVfUkVBRCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWkxJQl9GSUxFRlVOQ19NT0RFX0VYSVNUSU5HKTsKKyAgICBpZiAodXMuZmlsZXN0cmVhbT09TlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBjZW50cmFsX3BvcyA9IHVuejY0bG9jYWxfU2VhcmNoQ2VudHJhbERpcjY0KCZ1cy56X2ZpbGVmdW5jLHVzLmZpbGVzdHJlYW0pOworICAgIGlmIChjZW50cmFsX3BvcykKKyAgICB7CisgICAgICAgIHVMb25nIHVTOworICAgICAgICBaUE9TNjRfVCB1TDY0OworCisgICAgICAgIHVzLmlzWmlwNjQgPSAxOworCisgICAgICAgIGlmIChaU0VFSzY0KHVzLnpfZmlsZWZ1bmMsIHVzLmZpbGVzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbnRyYWxfcG9zLFpMSUJfRklMRUZVTkNfU0VFS19TRVQpIT0wKQorICAgICAgICBlcnI9VU5aX0VSUk5POworCisgICAgICAgIC8qIHRoZSBzaWduYXR1cmUsIGFscmVhZHkgY2hlY2tlZCAqLworICAgICAgICBpZiAodW56NjRsb2NhbF9nZXRMb25nKCZ1cy56X2ZpbGVmdW5jLCB1cy5maWxlc3RyZWFtLCZ1TCkhPVVOWl9PSykKKyAgICAgICAgICAgIGVycj1VTlpfRVJSTk87CisKKyAgICAgICAgLyogc2l6ZSBvZiB6aXA2NCBlbmQgb2YgY2VudHJhbCBkaXJlY3RvcnkgcmVjb3JkICovCisgICAgICAgIGlmICh1bno2NGxvY2FsX2dldExvbmc2NCgmdXMuel9maWxlZnVuYywgdXMuZmlsZXN0cmVhbSwmdUw2NCkhPVVOWl9PSykKKyAgICAgICAgICAgIGVycj1VTlpfRVJSTk87CisKKyAgICAgICAgLyogdmVyc2lvbiBtYWRlIGJ5ICovCisgICAgICAgIGlmICh1bno2NGxvY2FsX2dldFNob3J0KCZ1cy56X2ZpbGVmdW5jLCB1cy5maWxlc3RyZWFtLCZ1UykhPVVOWl9PSykKKyAgICAgICAgICAgIGVycj1VTlpfRVJSTk87CisKKyAgICAgICAgLyogdmVyc2lvbiBuZWVkZWQgdG8gZXh0cmFjdCAqLworICAgICAgICBpZiAodW56NjRsb2NhbF9nZXRTaG9ydCgmdXMuel9maWxlZnVuYywgdXMuZmlsZXN0cmVhbSwmdVMpIT1VTlpfT0spCisgICAgICAgICAgICBlcnI9VU5aX0VSUk5POworCisgICAgICAgIC8qIG51bWJlciBvZiB0aGlzIGRpc2sgKi8KKyAgICAgICAgaWYgKHVuejY0bG9jYWxfZ2V0TG9uZygmdXMuel9maWxlZnVuYywgdXMuZmlsZXN0cmVhbSwmbnVtYmVyX2Rpc2spIT1VTlpfT0spCisgICAgICAgICAgICBlcnI9VU5aX0VSUk5POworCisgICAgICAgIC8qIG51bWJlciBvZiB0aGUgZGlzayB3aXRoIHRoZSBzdGFydCBvZiB0aGUgY2VudHJhbCBkaXJlY3RvcnkgKi8KKyAgICAgICAgaWYgKHVuejY0bG9jYWxfZ2V0TG9uZygmdXMuel9maWxlZnVuYywgdXMuZmlsZXN0cmVhbSwmbnVtYmVyX2Rpc2tfd2l0aF9DRCkhPVVOWl9PSykKKyAgICAgICAgICAgIGVycj1VTlpfRVJSTk87CisKKyAgICAgICAgLyogdG90YWwgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGNlbnRyYWwgZGlyZWN0b3J5IG9uIHRoaXMgZGlzayAqLworICAgICAgICBpZiAodW56NjRsb2NhbF9nZXRMb25nNjQoJnVzLnpfZmlsZWZ1bmMsIHVzLmZpbGVzdHJlYW0sJnVzLmdpLm51bWJlcl9lbnRyeSkhPVVOWl9PSykKKyAgICAgICAgICAgIGVycj1VTlpfRVJSTk87CisKKyAgICAgICAgLyogdG90YWwgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGNlbnRyYWwgZGlyZWN0b3J5ICovCisgICAgICAgIGlmICh1bno2NGxvY2FsX2dldExvbmc2NCgmdXMuel9maWxlZnVuYywgdXMuZmlsZXN0cmVhbSwmbnVtYmVyX2VudHJ5X0NEKSE9VU5aX09LKQorICAgICAgICAgICAgZXJyPVVOWl9FUlJOTzsKKworICAgICAgICBpZiAoKG51bWJlcl9lbnRyeV9DRCE9dXMuZ2kubnVtYmVyX2VudHJ5KSB8fAorICAgICAgICAgICAgKG51bWJlcl9kaXNrX3dpdGhfQ0QhPTApIHx8CisgICAgICAgICAgICAobnVtYmVyX2Rpc2shPTApKQorICAgICAgICAgICAgZXJyPVVOWl9CQURaSVBGSUxFOworCisgICAgICAgIC8qIHNpemUgb2YgdGhlIGNlbnRyYWwgZGlyZWN0b3J5ICovCisgICAgICAgIGlmICh1bno2NGxvY2FsX2dldExvbmc2NCgmdXMuel9maWxlZnVuYywgdXMuZmlsZXN0cmVhbSwmdXMuc2l6ZV9jZW50cmFsX2RpcikhPVVOWl9PSykKKyAgICAgICAgICAgIGVycj1VTlpfRVJSTk87CisKKyAgICAgICAgLyogb2Zmc2V0IG9mIHN0YXJ0IG9mIGNlbnRyYWwgZGlyZWN0b3J5IHdpdGggcmVzcGVjdCB0byB0aGUKKyAgICAgICAgICBzdGFydGluZyBkaXNrIG51bWJlciAqLworICAgICAgICBpZiAodW56NjRsb2NhbF9nZXRMb25nNjQoJnVzLnpfZmlsZWZ1bmMsIHVzLmZpbGVzdHJlYW0sJnVzLm9mZnNldF9jZW50cmFsX2RpcikhPVVOWl9PSykKKyAgICAgICAgICAgIGVycj1VTlpfRVJSTk87CisKKyAgICAgICAgdXMuZ2kuc2l6ZV9jb21tZW50ID0gMDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgY2VudHJhbF9wb3MgPSB1bno2NGxvY2FsX1NlYXJjaENlbnRyYWxEaXIoJnVzLnpfZmlsZWZ1bmMsdXMuZmlsZXN0cmVhbSk7CisgICAgICAgIGlmIChjZW50cmFsX3Bvcz09MCkKKyAgICAgICAgICAgIGVycj1VTlpfRVJSTk87CisKKyAgICAgICAgdXMuaXNaaXA2NCA9IDA7CisKKyAgICAgICAgaWYgKFpTRUVLNjQodXMuel9maWxlZnVuYywgdXMuZmlsZXN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZW50cmFsX3BvcyxaTElCX0ZJTEVGVU5DX1NFRUtfU0VUKSE9MCkKKyAgICAgICAgICAgIGVycj1VTlpfRVJSTk87CisKKyAgICAgICAgLyogdGhlIHNpZ25hdHVyZSwgYWxyZWFkeSBjaGVja2VkICovCisgICAgICAgIGlmICh1bno2NGxvY2FsX2dldExvbmcoJnVzLnpfZmlsZWZ1bmMsIHVzLmZpbGVzdHJlYW0sJnVMKSE9VU5aX09LKQorICAgICAgICAgICAgZXJyPVVOWl9FUlJOTzsKKworICAgICAgICAvKiBudW1iZXIgb2YgdGhpcyBkaXNrICovCisgICAgICAgIGlmICh1bno2NGxvY2FsX2dldFNob3J0KCZ1cy56X2ZpbGVmdW5jLCB1cy5maWxlc3RyZWFtLCZudW1iZXJfZGlzaykhPVVOWl9PSykKKyAgICAgICAgICAgIGVycj1VTlpfRVJSTk87CisKKyAgICAgICAgLyogbnVtYmVyIG9mIHRoZSBkaXNrIHdpdGggdGhlIHN0YXJ0IG9mIHRoZSBjZW50cmFsIGRpcmVjdG9yeSAqLworICAgICAgICBpZiAodW56NjRsb2NhbF9nZXRTaG9ydCgmdXMuel9maWxlZnVuYywgdXMuZmlsZXN0cmVhbSwmbnVtYmVyX2Rpc2tfd2l0aF9DRCkhPVVOWl9PSykKKyAgICAgICAgICAgIGVycj1VTlpfRVJSTk87CisKKyAgICAgICAgLyogdG90YWwgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGNlbnRyYWwgZGlyIG9uIHRoaXMgZGlzayAqLworICAgICAgICBpZiAodW56NjRsb2NhbF9nZXRTaG9ydCgmdXMuel9maWxlZnVuYywgdXMuZmlsZXN0cmVhbSwmdUwpIT1VTlpfT0spCisgICAgICAgICAgICBlcnI9VU5aX0VSUk5POworICAgICAgICB1cy5naS5udW1iZXJfZW50cnkgPSB1TDsKKworICAgICAgICAvKiB0b3RhbCBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgY2VudHJhbCBkaXIgKi8KKyAgICAgICAgaWYgKHVuejY0bG9jYWxfZ2V0U2hvcnQoJnVzLnpfZmlsZWZ1bmMsIHVzLmZpbGVzdHJlYW0sJnVMKSE9VU5aX09LKQorICAgICAgICAgICAgZXJyPVVOWl9FUlJOTzsKKyAgICAgICAgbnVtYmVyX2VudHJ5X0NEID0gdUw7CisKKyAgICAgICAgaWYgKChudW1iZXJfZW50cnlfQ0QhPXVzLmdpLm51bWJlcl9lbnRyeSkgfHwKKyAgICAgICAgICAgIChudW1iZXJfZGlza193aXRoX0NEIT0wKSB8fAorICAgICAgICAgICAgKG51bWJlcl9kaXNrIT0wKSkKKyAgICAgICAgICAgIGVycj1VTlpfQkFEWklQRklMRTsKKworICAgICAgICAvKiBzaXplIG9mIHRoZSBjZW50cmFsIGRpcmVjdG9yeSAqLworICAgICAgICBpZiAodW56NjRsb2NhbF9nZXRMb25nKCZ1cy56X2ZpbGVmdW5jLCB1cy5maWxlc3RyZWFtLCZ1TCkhPVVOWl9PSykKKyAgICAgICAgICAgIGVycj1VTlpfRVJSTk87CisgICAgICAgIHVzLnNpemVfY2VudHJhbF9kaXIgPSB1TDsKKworICAgICAgICAvKiBvZmZzZXQgb2Ygc3RhcnQgb2YgY2VudHJhbCBkaXJlY3Rvcnkgd2l0aCByZXNwZWN0IHRvIHRoZQorICAgICAgICAgICAgc3RhcnRpbmcgZGlzayBudW1iZXIgKi8KKyAgICAgICAgaWYgKHVuejY0bG9jYWxfZ2V0TG9uZygmdXMuel9maWxlZnVuYywgdXMuZmlsZXN0cmVhbSwmdUwpIT1VTlpfT0spCisgICAgICAgICAgICBlcnI9VU5aX0VSUk5POworICAgICAgICB1cy5vZmZzZXRfY2VudHJhbF9kaXIgPSB1TDsKKworICAgICAgICAvKiB6aXBmaWxlIGNvbW1lbnQgbGVuZ3RoICovCisgICAgICAgIGlmICh1bno2NGxvY2FsX2dldFNob3J0KCZ1cy56X2ZpbGVmdW5jLCB1cy5maWxlc3RyZWFtLCZ1cy5naS5zaXplX2NvbW1lbnQpIT1VTlpfT0spCisgICAgICAgICAgICBlcnI9VU5aX0VSUk5POworICAgIH0KKworICAgIGlmICgoY2VudHJhbF9wb3M8dXMub2Zmc2V0X2NlbnRyYWxfZGlyK3VzLnNpemVfY2VudHJhbF9kaXIpICYmCisgICAgICAgIChlcnI9PVVOWl9PSykpCisgICAgICAgIGVycj1VTlpfQkFEWklQRklMRTsKKworICAgIGlmIChlcnIhPVVOWl9PSykKKyAgICB7CisgICAgICAgIFpDTE9TRTY0KHVzLnpfZmlsZWZ1bmMsIHVzLmZpbGVzdHJlYW0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICB1cy5ieXRlX2JlZm9yZV90aGVfemlwZmlsZSA9IGNlbnRyYWxfcG9zIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAodXMub2Zmc2V0X2NlbnRyYWxfZGlyK3VzLnNpemVfY2VudHJhbF9kaXIpOworICAgIHVzLmNlbnRyYWxfcG9zID0gY2VudHJhbF9wb3M7CisgICAgdXMucGZpbGVfaW5femlwX3JlYWQgPSBOVUxMOworICAgIHVzLmVuY3J5cHRlZCA9IDA7CisKKworICAgIHM9KHVuejY0X3MqKUFMTE9DKHNpemVvZih1bno2NF9zKSk7CisgICAgaWYoIHMgIT0gTlVMTCkKKyAgICB7CisgICAgICAgICpzPXVzOworICAgICAgICB1bnpHb1RvRmlyc3RGaWxlKCh1bnpGaWxlKXMpOworICAgIH0KKyAgICByZXR1cm4gKHVuekZpbGUpczsKK30KKworCitleHRlcm4gdW56RmlsZSBaRVhQT1JUIHVuek9wZW4yIChjb25zdCBjaGFyICpwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpsaWJfZmlsZWZ1bmNfZGVmKiBwemxpYl9maWxlZnVuYzMyX2RlZikKK3sKKyAgICBpZiAocHpsaWJfZmlsZWZ1bmMzMl9kZWYgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIHpsaWJfZmlsZWZ1bmM2NF8zMl9kZWYgemxpYl9maWxlZnVuYzY0XzMyX2RlZl9maWxsOworICAgICAgICBmaWxsX3psaWJfZmlsZWZ1bmM2NF8zMl9kZWZfZnJvbV9maWxlZnVuYzMyKCZ6bGliX2ZpbGVmdW5jNjRfMzJfZGVmX2ZpbGwscHpsaWJfZmlsZWZ1bmMzMl9kZWYpOworICAgICAgICByZXR1cm4gdW56T3BlbkludGVybmFsKHBhdGgsICZ6bGliX2ZpbGVmdW5jNjRfMzJfZGVmX2ZpbGwsIDApOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHJldHVybiB1bnpPcGVuSW50ZXJuYWwocGF0aCwgTlVMTCwgMCk7Cit9CisKK2V4dGVybiB1bnpGaWxlIFpFWFBPUlQgdW56T3BlbjJfNjQgKGNvbnN0IHZvaWQgKnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemxpYl9maWxlZnVuYzY0X2RlZiogcHpsaWJfZmlsZWZ1bmNfZGVmKQoreworICAgIGlmIChwemxpYl9maWxlZnVuY19kZWYgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIHpsaWJfZmlsZWZ1bmM2NF8zMl9kZWYgemxpYl9maWxlZnVuYzY0XzMyX2RlZl9maWxsOworICAgICAgICB6bGliX2ZpbGVmdW5jNjRfMzJfZGVmX2ZpbGwuemZpbGVfZnVuYzY0ID0gKnB6bGliX2ZpbGVmdW5jX2RlZjsKKyAgICAgICAgemxpYl9maWxlZnVuYzY0XzMyX2RlZl9maWxsLnp0ZWxsMzJfZmlsZSA9IE5VTEw7CisgICAgICAgIHpsaWJfZmlsZWZ1bmM2NF8zMl9kZWZfZmlsbC56c2VlazMyX2ZpbGUgPSBOVUxMOworICAgICAgICByZXR1cm4gdW56T3BlbkludGVybmFsKHBhdGgsICZ6bGliX2ZpbGVmdW5jNjRfMzJfZGVmX2ZpbGwsIDEpOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHJldHVybiB1bnpPcGVuSW50ZXJuYWwocGF0aCwgTlVMTCwgMSk7Cit9CisKK2V4dGVybiB1bnpGaWxlIFpFWFBPUlQgdW56T3BlbiAoY29uc3QgY2hhciAqcGF0aCkKK3sKKyAgICByZXR1cm4gdW56T3BlbkludGVybmFsKHBhdGgsIE5VTEwsIDApOworfQorCitleHRlcm4gdW56RmlsZSBaRVhQT1JUIHVuek9wZW42NCAoY29uc3Qgdm9pZCAqcGF0aCkKK3sKKyAgICByZXR1cm4gdW56T3BlbkludGVybmFsKHBhdGgsIE5VTEwsIDEpOworfQorCisvKgorICBDbG9zZSBhIFppcEZpbGUgb3BlbmVkIHdpdGggdW56T3Blbi4KKyAgSWYgdGhlcmUgaXMgZmlsZXMgaW5zaWRlIHRoZSAuWmlwIG9wZW5lZCB3aXRoIHVuek9wZW5DdXJyZW50RmlsZSAoc2VlIGxhdGVyKSwKKyAgICB0aGVzZSBmaWxlcyBNVVNUIGJlIGNsb3NlZCB3aXRoIHVuekNsb3NlQ3VycmVudEZpbGUgYmVmb3JlIGNhbGwgdW56Q2xvc2UuCisgIHJldHVybiBVTlpfT0sgaWYgdGhlcmUgaXMgbm8gcHJvYmxlbS4gKi8KK2V4dGVybiBpbnQgWkVYUE9SVCB1bnpDbG9zZSAodW56RmlsZSBmaWxlKQoreworICAgIHVuejY0X3MqIHM7CisgICAgaWYgKGZpbGU9PU5VTEwpCisgICAgICAgIHJldHVybiBVTlpfUEFSQU1FUlJPUjsKKyAgICBzPSh1bno2NF9zKilmaWxlOworCisgICAgaWYgKHMtPnBmaWxlX2luX3ppcF9yZWFkIT1OVUxMKQorICAgICAgICB1bnpDbG9zZUN1cnJlbnRGaWxlKGZpbGUpOworCisgICAgWkNMT1NFNjQocy0+el9maWxlZnVuYywgcy0+ZmlsZXN0cmVhbSk7CisgICAgVFJZRlJFRShzKTsKKyAgICByZXR1cm4gVU5aX09LOworfQorCisKKy8qCisgIFdyaXRlIGluZm8gYWJvdXQgdGhlIFppcEZpbGUgaW4gdGhlICpwZ2xvYmFsX2luZm8gc3RydWN0dXJlLgorICBObyBwcmVwYXJhdGlvbiBvZiB0aGUgc3RydWN0dXJlIGlzIG5lZWRlZAorICByZXR1cm4gVU5aX09LIGlmIHRoZXJlIGlzIG5vIHByb2JsZW0uICovCitleHRlcm4gaW50IFpFWFBPUlQgdW56R2V0R2xvYmFsSW5mbzY0ICh1bnpGaWxlIGZpbGUsIHVuel9nbG9iYWxfaW5mbzY0KiBwZ2xvYmFsX2luZm8pCit7CisgICAgdW56NjRfcyogczsKKyAgICBpZiAoZmlsZT09TlVMTCkKKyAgICAgICAgcmV0dXJuIFVOWl9QQVJBTUVSUk9SOworICAgIHM9KHVuejY0X3MqKWZpbGU7CisgICAgKnBnbG9iYWxfaW5mbz1zLT5naTsKKyAgICByZXR1cm4gVU5aX09LOworfQorCitleHRlcm4gaW50IFpFWFBPUlQgdW56R2V0R2xvYmFsSW5mbyAodW56RmlsZSBmaWxlLCB1bnpfZ2xvYmFsX2luZm8qIHBnbG9iYWxfaW5mbzMyKQoreworICAgIHVuejY0X3MqIHM7CisgICAgaWYgKGZpbGU9PU5VTEwpCisgICAgICAgIHJldHVybiBVTlpfUEFSQU1FUlJPUjsKKyAgICBzPSh1bno2NF9zKilmaWxlOworICAgIC8qIHRvIGRvIDogY2hlY2sgaWYgbnVtYmVyX2VudHJ5IGlzIG5vdCB0cnVuY2F0ZWQgKi8KKyAgICBwZ2xvYmFsX2luZm8zMi0+bnVtYmVyX2VudHJ5ID0gKHVMb25nKXMtPmdpLm51bWJlcl9lbnRyeTsKKyAgICBwZ2xvYmFsX2luZm8zMi0+c2l6ZV9jb21tZW50ID0gcy0+Z2kuc2l6ZV9jb21tZW50OworICAgIHJldHVybiBVTlpfT0s7Cit9CisvKgorICAgVHJhbnNsYXRlIGRhdGUvdGltZSBmcm9tIERvcyBmb3JtYXQgdG8gdG1fdW56IChyZWFkYWJsZSBtb3JlIGVhc2lsdHkpCisqLworbG9jYWwgdm9pZCB1bno2NGxvY2FsX0Rvc0RhdGVUb1RtdURhdGUgKFpQT1M2NF9UIHVsRG9zRGF0ZSwgdG1fdW56KiBwdG0pCit7CisgICAgWlBPUzY0X1QgdURhdGU7CisgICAgdURhdGUgPSAoWlBPUzY0X1QpKHVsRG9zRGF0ZT4+MTYpOworICAgIHB0bS0+dG1fbWRheSA9IChpbnQpKHVEYXRlJjB4MWYpIDsKKyAgICBwdG0tPnRtX21vbiA9ICAoaW50KSgoKCh1RGF0ZSkmMHgxRTApLzB4MjApLTEpIDsKKyAgICBwdG0tPnRtX3llYXIgPSAoaW50KSgoKHVEYXRlJjB4MEZFMDApLzB4MDIwMCkrMTk4MCkgOworCisgICAgcHRtLT50bV9ob3VyID0gKGludCkgKCh1bERvc0RhdGUgJjB4RjgwMCkvMHg4MDApOworICAgIHB0bS0+dG1fbWluID0gIChpbnQpICgodWxEb3NEYXRlJjB4N0UwKS8weDIwKSA7CisgICAgcHRtLT50bV9zZWMgPSAgKGludCkgKDIqKHVsRG9zRGF0ZSYweDFmKSkgOworfQorCisvKgorICBHZXQgSW5mbyBhYm91dCB0aGUgY3VycmVudCBmaWxlIGluIHRoZSB6aXBmaWxlLCB3aXRoIGludGVybmFsIG9ubHkgaW5mbworKi8KK2xvY2FsIGludCB1bno2NGxvY2FsX0dldEN1cnJlbnRGaWxlSW5mb0ludGVybmFsIE9GKCh1bnpGaWxlIGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuel9maWxlX2luZm82NCAqcGZpbGVfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW56X2ZpbGVfaW5mbzY0X2ludGVybmFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwZmlsZV9pbmZvX2ludGVybmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpzekZpbGVOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1TG9uZyBmaWxlTmFtZUJ1ZmZlclNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmV4dHJhRmllbGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVMb25nIGV4dHJhRmllbGRCdWZmZXJTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpzekNvbW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVMb25nIGNvbW1lbnRCdWZmZXJTaXplKSk7CisKK2xvY2FsIGludCB1bno2NGxvY2FsX0dldEN1cnJlbnRGaWxlSW5mb0ludGVybmFsICh1bnpGaWxlIGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuel9maWxlX2luZm82NCAqcGZpbGVfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW56X2ZpbGVfaW5mbzY0X2ludGVybmFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwZmlsZV9pbmZvX2ludGVybmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpzekZpbGVOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1TG9uZyBmaWxlTmFtZUJ1ZmZlclNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmV4dHJhRmllbGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVMb25nIGV4dHJhRmllbGRCdWZmZXJTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpzekNvbW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVMb25nIGNvbW1lbnRCdWZmZXJTaXplKQoreworICAgIHVuejY0X3MqIHM7CisgICAgdW56X2ZpbGVfaW5mbzY0IGZpbGVfaW5mbzsKKyAgICB1bnpfZmlsZV9pbmZvNjRfaW50ZXJuYWwgZmlsZV9pbmZvX2ludGVybmFsOworICAgIGludCBlcnI9VU5aX09LOworICAgIHVMb25nIHVNYWdpYzsKKyAgICBsb25nIGxTZWVrPTA7CisgICAgdUxvbmcgdUw7CisKKyAgICBpZiAoZmlsZT09TlVMTCkKKyAgICAgICAgcmV0dXJuIFVOWl9QQVJBTUVSUk9SOworICAgIHM9KHVuejY0X3MqKWZpbGU7CisgICAgaWYgKFpTRUVLNjQocy0+el9maWxlZnVuYywgcy0+ZmlsZXN0cmVhbSwKKyAgICAgICAgICAgICAgcy0+cG9zX2luX2NlbnRyYWxfZGlyK3MtPmJ5dGVfYmVmb3JlX3RoZV96aXBmaWxlLAorICAgICAgICAgICAgICBaTElCX0ZJTEVGVU5DX1NFRUtfU0VUKSE9MCkKKyAgICAgICAgZXJyPVVOWl9FUlJOTzsKKworCisgICAgLyogd2UgY2hlY2sgdGhlIG1hZ2ljICovCisgICAgaWYgKGVycj09VU5aX09LKQorICAgIHsKKyAgICAgICAgaWYgKHVuejY0bG9jYWxfZ2V0TG9uZygmcy0+el9maWxlZnVuYywgcy0+ZmlsZXN0cmVhbSwmdU1hZ2ljKSAhPSBVTlpfT0spCisgICAgICAgICAgICBlcnI9VU5aX0VSUk5POworICAgICAgICBlbHNlIGlmICh1TWFnaWMhPTB4MDIwMTRiNTApCisgICAgICAgICAgICBlcnI9VU5aX0JBRFpJUEZJTEU7CisgICAgfQorCisgICAgaWYgKHVuejY0bG9jYWxfZ2V0U2hvcnQoJnMtPnpfZmlsZWZ1bmMsIHMtPmZpbGVzdHJlYW0sJmZpbGVfaW5mby52ZXJzaW9uKSAhPSBVTlpfT0spCisgICAgICAgIGVycj1VTlpfRVJSTk87CisKKyAgICBpZiAodW56NjRsb2NhbF9nZXRTaG9ydCgmcy0+el9maWxlZnVuYywgcy0+ZmlsZXN0cmVhbSwmZmlsZV9pbmZvLnZlcnNpb25fbmVlZGVkKSAhPSBVTlpfT0spCisgICAgICAgIGVycj1VTlpfRVJSTk87CisKKyAgICBpZiAodW56NjRsb2NhbF9nZXRTaG9ydCgmcy0+el9maWxlZnVuYywgcy0+ZmlsZXN0cmVhbSwmZmlsZV9pbmZvLmZsYWcpICE9IFVOWl9PSykKKyAgICAgICAgZXJyPVVOWl9FUlJOTzsKKworICAgIGlmICh1bno2NGxvY2FsX2dldFNob3J0KCZzLT56X2ZpbGVmdW5jLCBzLT5maWxlc3RyZWFtLCZmaWxlX2luZm8uY29tcHJlc3Npb25fbWV0aG9kKSAhPSBVTlpfT0spCisgICAgICAgIGVycj1VTlpfRVJSTk87CisKKyAgICBpZiAodW56NjRsb2NhbF9nZXRMb25nKCZzLT56X2ZpbGVmdW5jLCBzLT5maWxlc3RyZWFtLCZmaWxlX2luZm8uZG9zRGF0ZSkgIT0gVU5aX09LKQorICAgICAgICBlcnI9VU5aX0VSUk5POworCisgICAgdW56NjRsb2NhbF9Eb3NEYXRlVG9UbXVEYXRlKGZpbGVfaW5mby5kb3NEYXRlLCZmaWxlX2luZm8udG11X2RhdGUpOworCisgICAgaWYgKHVuejY0bG9jYWxfZ2V0TG9uZygmcy0+el9maWxlZnVuYywgcy0+ZmlsZXN0cmVhbSwmZmlsZV9pbmZvLmNyYykgIT0gVU5aX09LKQorICAgICAgICBlcnI9VU5aX0VSUk5POworCisgICAgaWYgKHVuejY0bG9jYWxfZ2V0TG9uZygmcy0+el9maWxlZnVuYywgcy0+ZmlsZXN0cmVhbSwmdUwpICE9IFVOWl9PSykKKyAgICAgICAgZXJyPVVOWl9FUlJOTzsKKyAgICBmaWxlX2luZm8uY29tcHJlc3NlZF9zaXplID0gdUw7CisKKyAgICBpZiAodW56NjRsb2NhbF9nZXRMb25nKCZzLT56X2ZpbGVmdW5jLCBzLT5maWxlc3RyZWFtLCZ1TCkgIT0gVU5aX09LKQorICAgICAgICBlcnI9VU5aX0VSUk5POworICAgIGZpbGVfaW5mby51bmNvbXByZXNzZWRfc2l6ZSA9IHVMOworCisgICAgaWYgKHVuejY0bG9jYWxfZ2V0U2hvcnQoJnMtPnpfZmlsZWZ1bmMsIHMtPmZpbGVzdHJlYW0sJmZpbGVfaW5mby5zaXplX2ZpbGVuYW1lKSAhPSBVTlpfT0spCisgICAgICAgIGVycj1VTlpfRVJSTk87CisKKyAgICBpZiAodW56NjRsb2NhbF9nZXRTaG9ydCgmcy0+el9maWxlZnVuYywgcy0+ZmlsZXN0cmVhbSwmZmlsZV9pbmZvLnNpemVfZmlsZV9leHRyYSkgIT0gVU5aX09LKQorICAgICAgICBlcnI9VU5aX0VSUk5POworCisgICAgaWYgKHVuejY0bG9jYWxfZ2V0U2hvcnQoJnMtPnpfZmlsZWZ1bmMsIHMtPmZpbGVzdHJlYW0sJmZpbGVfaW5mby5zaXplX2ZpbGVfY29tbWVudCkgIT0gVU5aX09LKQorICAgICAgICBlcnI9VU5aX0VSUk5POworCisgICAgaWYgKHVuejY0bG9jYWxfZ2V0U2hvcnQoJnMtPnpfZmlsZWZ1bmMsIHMtPmZpbGVzdHJlYW0sJmZpbGVfaW5mby5kaXNrX251bV9zdGFydCkgIT0gVU5aX09LKQorICAgICAgICBlcnI9VU5aX0VSUk5POworCisgICAgaWYgKHVuejY0bG9jYWxfZ2V0U2hvcnQoJnMtPnpfZmlsZWZ1bmMsIHMtPmZpbGVzdHJlYW0sJmZpbGVfaW5mby5pbnRlcm5hbF9mYSkgIT0gVU5aX09LKQorICAgICAgICBlcnI9VU5aX0VSUk5POworCisgICAgaWYgKHVuejY0bG9jYWxfZ2V0TG9uZygmcy0+el9maWxlZnVuYywgcy0+ZmlsZXN0cmVhbSwmZmlsZV9pbmZvLmV4dGVybmFsX2ZhKSAhPSBVTlpfT0spCisgICAgICAgIGVycj1VTlpfRVJSTk87CisKKyAgICAgICAgICAgICAgICAvLyByZWxhdGl2ZSBvZmZzZXQgb2YgbG9jYWwgaGVhZGVyCisgICAgaWYgKHVuejY0bG9jYWxfZ2V0TG9uZygmcy0+el9maWxlZnVuYywgcy0+ZmlsZXN0cmVhbSwmdUwpICE9IFVOWl9PSykKKyAgICAgICAgZXJyPVVOWl9FUlJOTzsKKyAgICBmaWxlX2luZm9faW50ZXJuYWwub2Zmc2V0X2N1cmZpbGUgPSB1TDsKKworICAgIGxTZWVrKz1maWxlX2luZm8uc2l6ZV9maWxlbmFtZTsKKyAgICBpZiAoKGVycj09VU5aX09LKSAmJiAoc3pGaWxlTmFtZSE9TlVMTCkpCisgICAgeworICAgICAgICB1TG9uZyB1U2l6ZVJlYWQgOworICAgICAgICBpZiAoZmlsZV9pbmZvLnNpemVfZmlsZW5hbWU8ZmlsZU5hbWVCdWZmZXJTaXplKQorICAgICAgICB7CisgICAgICAgICAgICAqKHN6RmlsZU5hbWUrZmlsZV9pbmZvLnNpemVfZmlsZW5hbWUpPSdcMCc7CisgICAgICAgICAgICB1U2l6ZVJlYWQgPSBmaWxlX2luZm8uc2l6ZV9maWxlbmFtZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICB1U2l6ZVJlYWQgPSBmaWxlTmFtZUJ1ZmZlclNpemU7CisKKyAgICAgICAgaWYgKChmaWxlX2luZm8uc2l6ZV9maWxlbmFtZT4wKSAmJiAoZmlsZU5hbWVCdWZmZXJTaXplPjApKQorICAgICAgICAgICAgaWYgKFpSRUFENjQocy0+el9maWxlZnVuYywgcy0+ZmlsZXN0cmVhbSxzekZpbGVOYW1lLHVTaXplUmVhZCkhPXVTaXplUmVhZCkKKyAgICAgICAgICAgICAgICBlcnI9VU5aX0VSUk5POworICAgICAgICBsU2VlayAtPSB1U2l6ZVJlYWQ7CisgICAgfQorCisgICAgLy8gUmVhZCBleHRyYWZpZWxkCisgICAgaWYgKChlcnI9PVVOWl9PSykgJiYgKGV4dHJhRmllbGQhPU5VTEwpKQorICAgIHsKKyAgICAgICAgWlBPUzY0X1QgdVNpemVSZWFkIDsKKyAgICAgICAgaWYgKGZpbGVfaW5mby5zaXplX2ZpbGVfZXh0cmE8ZXh0cmFGaWVsZEJ1ZmZlclNpemUpCisgICAgICAgICAgICB1U2l6ZVJlYWQgPSBmaWxlX2luZm8uc2l6ZV9maWxlX2V4dHJhOworICAgICAgICBlbHNlCisgICAgICAgICAgICB1U2l6ZVJlYWQgPSBleHRyYUZpZWxkQnVmZmVyU2l6ZTsKKworICAgICAgICBpZiAobFNlZWshPTApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChaU0VFSzY0KHMtPnpfZmlsZWZ1bmMsIHMtPmZpbGVzdHJlYW0sKFpQT1M2NF9UKWxTZWVrLFpMSUJfRklMRUZVTkNfU0VFS19DVVIpPT0wKQorICAgICAgICAgICAgICAgIGxTZWVrPTA7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZXJyPVVOWl9FUlJOTzsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgoZmlsZV9pbmZvLnNpemVfZmlsZV9leHRyYT4wKSAmJiAoZXh0cmFGaWVsZEJ1ZmZlclNpemU+MCkpCisgICAgICAgICAgICBpZiAoWlJFQUQ2NChzLT56X2ZpbGVmdW5jLCBzLT5maWxlc3RyZWFtLGV4dHJhRmllbGQsKHVMb25nKXVTaXplUmVhZCkhPXVTaXplUmVhZCkKKyAgICAgICAgICAgICAgICBlcnI9VU5aX0VSUk5POworCisgICAgICAgIGxTZWVrICs9IGZpbGVfaW5mby5zaXplX2ZpbGVfZXh0cmEgLSAodUxvbmcpdVNpemVSZWFkOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIGxTZWVrICs9IGZpbGVfaW5mby5zaXplX2ZpbGVfZXh0cmE7CisKKworICAgIGlmICgoZXJyPT1VTlpfT0spICYmIChmaWxlX2luZm8uc2l6ZV9maWxlX2V4dHJhICE9IDApKQorICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdUxvbmcgYWNjID0gMDsKKworICAgICAgICAvLyBzaW5jZSBsU2VlayBub3cgcG9pbnRzIHRvIGFmdGVyIHRoZSBleHRyYSBmaWVsZCB3ZSBuZWVkIHRvIG1vdmUgYmFjaworICAgICAgICBsU2VlayAtPSBmaWxlX2luZm8uc2l6ZV9maWxlX2V4dHJhOworCisgICAgICAgIGlmIChsU2VlayE9MCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKFpTRUVLNjQocy0+el9maWxlZnVuYywgcy0+ZmlsZXN0cmVhbSwoWlBPUzY0X1QpbFNlZWssWkxJQl9GSUxFRlVOQ19TRUVLX0NVUik9PTApCisgICAgICAgICAgICAgICAgbFNlZWs9MDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBlcnI9VU5aX0VSUk5POworICAgICAgICB9CisKKyAgICAgICAgd2hpbGUoYWNjIDwgZmlsZV9pbmZvLnNpemVfZmlsZV9leHRyYSkKKyAgICAgICAgeworICAgICAgICAgICAgdUxvbmcgaGVhZGVySWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1TG9uZyBkYXRhU2l6ZTsKKworICAgICAgICAgICAgaWYgKHVuejY0bG9jYWxfZ2V0U2hvcnQoJnMtPnpfZmlsZWZ1bmMsIHMtPmZpbGVzdHJlYW0sJmhlYWRlcklkKSAhPSBVTlpfT0spCisgICAgICAgICAgICAgICAgZXJyPVVOWl9FUlJOTzsKKworICAgICAgICAgICAgaWYgKHVuejY0bG9jYWxfZ2V0U2hvcnQoJnMtPnpfZmlsZWZ1bmMsIHMtPmZpbGVzdHJlYW0sJmRhdGFTaXplKSAhPSBVTlpfT0spCisgICAgICAgICAgICAgICAgZXJyPVVOWl9FUlJOTzsKKworICAgICAgICAgICAgLyogWklQNjQgZXh0cmEgZmllbGRzICovCisgICAgICAgICAgICBpZiAoaGVhZGVySWQgPT0gMHgwMDAxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1TG9uZyB1TDsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGZpbGVfaW5mby51bmNvbXByZXNzZWRfc2l6ZSA9PSBNQVhVMzIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVuejY0bG9jYWxfZ2V0TG9uZzY0KCZzLT56X2ZpbGVmdW5jLCBzLT5maWxlc3RyZWFtLCZmaWxlX2luZm8udW5jb21wcmVzc2VkX3NpemUpICE9IFVOWl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnI9VU5aX0VSUk5POworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGZpbGVfaW5mby5jb21wcmVzc2VkX3NpemUgPT0gTUFYVTMyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1bno2NGxvY2FsX2dldExvbmc2NCgmcy0+el9maWxlZnVuYywgcy0+ZmlsZXN0cmVhbSwmZmlsZV9pbmZvLmNvbXByZXNzZWRfc2l6ZSkgIT0gVU5aX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycj1VTlpfRVJSTk87CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZmlsZV9pbmZvX2ludGVybmFsLm9mZnNldF9jdXJmaWxlID09IE1BWFUzMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZWxhdGl2ZSBIZWFkZXIgb2Zmc2V0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodW56NjRsb2NhbF9nZXRMb25nNjQoJnMtPnpfZmlsZWZ1bmMsIHMtPmZpbGVzdHJlYW0sJmZpbGVfaW5mb19pbnRlcm5hbC5vZmZzZXRfY3VyZmlsZSkgIT0gVU5aX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnI9VU5aX0VSUk5POworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGZpbGVfaW5mby5kaXNrX251bV9zdGFydCA9PSBNQVhVMzIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGlzayBTdGFydCBOdW1iZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1bno2NGxvY2FsX2dldExvbmcoJnMtPnpfZmlsZWZ1bmMsIHMtPmZpbGVzdHJlYW0sJnVMKSAhPSBVTlpfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycj1VTlpfRVJSTk87CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKFpTRUVLNjQocy0+el9maWxlZnVuYywgcy0+ZmlsZXN0cmVhbSxkYXRhU2l6ZSxaTElCX0ZJTEVGVU5DX1NFRUtfQ1VSKSE9MCkKKyAgICAgICAgICAgICAgICAgICAgZXJyPVVOWl9FUlJOTzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYWNjICs9IDIgKyAyICsgZGF0YVNpemU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoKGVycj09VU5aX09LKSAmJiAoc3pDb21tZW50IT1OVUxMKSkKKyAgICB7CisgICAgICAgIHVMb25nIHVTaXplUmVhZCA7CisgICAgICAgIGlmIChmaWxlX2luZm8uc2l6ZV9maWxlX2NvbW1lbnQ8Y29tbWVudEJ1ZmZlclNpemUpCisgICAgICAgIHsKKyAgICAgICAgICAgICooc3pDb21tZW50K2ZpbGVfaW5mby5zaXplX2ZpbGVfY29tbWVudCk9J1wwJzsKKyAgICAgICAgICAgIHVTaXplUmVhZCA9IGZpbGVfaW5mby5zaXplX2ZpbGVfY29tbWVudDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICB1U2l6ZVJlYWQgPSBjb21tZW50QnVmZmVyU2l6ZTsKKworICAgICAgICBpZiAobFNlZWshPTApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChaU0VFSzY0KHMtPnpfZmlsZWZ1bmMsIHMtPmZpbGVzdHJlYW0sKFpQT1M2NF9UKWxTZWVrLFpMSUJfRklMRUZVTkNfU0VFS19DVVIpPT0wKQorICAgICAgICAgICAgICAgIGxTZWVrPTA7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZXJyPVVOWl9FUlJOTzsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgoZmlsZV9pbmZvLnNpemVfZmlsZV9jb21tZW50PjApICYmIChjb21tZW50QnVmZmVyU2l6ZT4wKSkKKyAgICAgICAgICAgIGlmIChaUkVBRDY0KHMtPnpfZmlsZWZ1bmMsIHMtPmZpbGVzdHJlYW0sc3pDb21tZW50LHVTaXplUmVhZCkhPXVTaXplUmVhZCkKKyAgICAgICAgICAgICAgICBlcnI9VU5aX0VSUk5POworICAgICAgICBsU2Vlays9ZmlsZV9pbmZvLnNpemVfZmlsZV9jb21tZW50IC0gdVNpemVSZWFkOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIGxTZWVrKz1maWxlX2luZm8uc2l6ZV9maWxlX2NvbW1lbnQ7CisKKworICAgIGlmICgoZXJyPT1VTlpfT0spICYmIChwZmlsZV9pbmZvIT1OVUxMKSkKKyAgICAgICAgKnBmaWxlX2luZm89ZmlsZV9pbmZvOworCisgICAgaWYgKChlcnI9PVVOWl9PSykgJiYgKHBmaWxlX2luZm9faW50ZXJuYWwhPU5VTEwpKQorICAgICAgICAqcGZpbGVfaW5mb19pbnRlcm5hbD1maWxlX2luZm9faW50ZXJuYWw7CisKKyAgICByZXR1cm4gZXJyOworfQorCisKKworLyoKKyAgV3JpdGUgaW5mbyBhYm91dCB0aGUgWmlwRmlsZSBpbiB0aGUgKnBnbG9iYWxfaW5mbyBzdHJ1Y3R1cmUuCisgIE5vIHByZXBhcmF0aW9uIG9mIHRoZSBzdHJ1Y3R1cmUgaXMgbmVlZGVkCisgIHJldHVybiBVTlpfT0sgaWYgdGhlcmUgaXMgbm8gcHJvYmxlbS4KKyovCitleHRlcm4gaW50IFpFWFBPUlQgdW56R2V0Q3VycmVudEZpbGVJbmZvNjQgKHVuekZpbGUgZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuel9maWxlX2luZm82NCAqIHBmaWxlX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICogc3pGaWxlTmFtZSwgdUxvbmcgZmlsZU5hbWVCdWZmZXJTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZXh0cmFGaWVsZCwgdUxvbmcgZXh0cmFGaWVsZEJ1ZmZlclNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiBzekNvbW1lbnQsICB1TG9uZyBjb21tZW50QnVmZmVyU2l6ZSkKK3sKKyAgICByZXR1cm4gdW56NjRsb2NhbF9HZXRDdXJyZW50RmlsZUluZm9JbnRlcm5hbChmaWxlLHBmaWxlX2luZm8sTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN6RmlsZU5hbWUsZmlsZU5hbWVCdWZmZXJTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFGaWVsZCxleHRyYUZpZWxkQnVmZmVyU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN6Q29tbWVudCxjb21tZW50QnVmZmVyU2l6ZSk7Cit9CisKK2V4dGVybiBpbnQgWkVYUE9SVCB1bnpHZXRDdXJyZW50RmlsZUluZm8gKHVuekZpbGUgZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuel9maWxlX2luZm8gKiBwZmlsZV9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqIHN6RmlsZU5hbWUsIHVMb25nIGZpbGVOYW1lQnVmZmVyU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmV4dHJhRmllbGQsIHVMb25nIGV4dHJhRmllbGRCdWZmZXJTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogc3pDb21tZW50LCAgdUxvbmcgY29tbWVudEJ1ZmZlclNpemUpCit7CisgICAgaW50IGVycjsKKyAgICB1bnpfZmlsZV9pbmZvNjQgZmlsZV9pbmZvNjQ7CisgICAgZXJyID0gdW56NjRsb2NhbF9HZXRDdXJyZW50RmlsZUluZm9JbnRlcm5hbChmaWxlLCZmaWxlX2luZm82NCxOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3pGaWxlTmFtZSxmaWxlTmFtZUJ1ZmZlclNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYUZpZWxkLGV4dHJhRmllbGRCdWZmZXJTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3pDb21tZW50LGNvbW1lbnRCdWZmZXJTaXplKTsKKyAgICBpZiAoKGVycj09VU5aX09LKSAmJiAocGZpbGVfaW5mbyAhPSBOVUxMKSkKKyAgICB7CisgICAgICAgIHBmaWxlX2luZm8tPnZlcnNpb24gPSBmaWxlX2luZm82NC52ZXJzaW9uOworICAgICAgICBwZmlsZV9pbmZvLT52ZXJzaW9uX25lZWRlZCA9IGZpbGVfaW5mbzY0LnZlcnNpb25fbmVlZGVkOworICAgICAgICBwZmlsZV9pbmZvLT5mbGFnID0gZmlsZV9pbmZvNjQuZmxhZzsKKyAgICAgICAgcGZpbGVfaW5mby0+Y29tcHJlc3Npb25fbWV0aG9kID0gZmlsZV9pbmZvNjQuY29tcHJlc3Npb25fbWV0aG9kOworICAgICAgICBwZmlsZV9pbmZvLT5kb3NEYXRlID0gZmlsZV9pbmZvNjQuZG9zRGF0ZTsKKyAgICAgICAgcGZpbGVfaW5mby0+Y3JjID0gZmlsZV9pbmZvNjQuY3JjOworCisgICAgICAgIHBmaWxlX2luZm8tPnNpemVfZmlsZW5hbWUgPSBmaWxlX2luZm82NC5zaXplX2ZpbGVuYW1lOworICAgICAgICBwZmlsZV9pbmZvLT5zaXplX2ZpbGVfZXh0cmEgPSBmaWxlX2luZm82NC5zaXplX2ZpbGVfZXh0cmE7CisgICAgICAgIHBmaWxlX2luZm8tPnNpemVfZmlsZV9jb21tZW50ID0gZmlsZV9pbmZvNjQuc2l6ZV9maWxlX2NvbW1lbnQ7CisKKyAgICAgICAgcGZpbGVfaW5mby0+ZGlza19udW1fc3RhcnQgPSBmaWxlX2luZm82NC5kaXNrX251bV9zdGFydDsKKyAgICAgICAgcGZpbGVfaW5mby0+aW50ZXJuYWxfZmEgPSBmaWxlX2luZm82NC5pbnRlcm5hbF9mYTsKKyAgICAgICAgcGZpbGVfaW5mby0+ZXh0ZXJuYWxfZmEgPSBmaWxlX2luZm82NC5leHRlcm5hbF9mYTsKKworICAgICAgICBwZmlsZV9pbmZvLT50bXVfZGF0ZSA9IGZpbGVfaW5mbzY0LnRtdV9kYXRlLAorCisKKyAgICAgICAgcGZpbGVfaW5mby0+Y29tcHJlc3NlZF9zaXplID0gKHVMb25nKWZpbGVfaW5mbzY0LmNvbXByZXNzZWRfc2l6ZTsKKyAgICAgICAgcGZpbGVfaW5mby0+dW5jb21wcmVzc2VkX3NpemUgPSAodUxvbmcpZmlsZV9pbmZvNjQudW5jb21wcmVzc2VkX3NpemU7CisKKyAgICB9CisgICAgcmV0dXJuIGVycjsKK30KKy8qCisgIFNldCB0aGUgY3VycmVudCBmaWxlIG9mIHRoZSB6aXBmaWxlIHRvIHRoZSBmaXJzdCBmaWxlLgorICByZXR1cm4gVU5aX09LIGlmIHRoZXJlIGlzIG5vIHByb2JsZW0KKyovCitleHRlcm4gaW50IFpFWFBPUlQgdW56R29Ub0ZpcnN0RmlsZSAodW56RmlsZSBmaWxlKQoreworICAgIGludCBlcnI9VU5aX09LOworICAgIHVuejY0X3MqIHM7CisgICAgaWYgKGZpbGU9PU5VTEwpCisgICAgICAgIHJldHVybiBVTlpfUEFSQU1FUlJPUjsKKyAgICBzPSh1bno2NF9zKilmaWxlOworICAgIHMtPnBvc19pbl9jZW50cmFsX2Rpcj1zLT5vZmZzZXRfY2VudHJhbF9kaXI7CisgICAgcy0+bnVtX2ZpbGU9MDsKKyAgICBlcnI9dW56NjRsb2NhbF9HZXRDdXJyZW50RmlsZUluZm9JbnRlcm5hbChmaWxlLCZzLT5jdXJfZmlsZV9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnMtPmN1cl9maWxlX2luZm9faW50ZXJuYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLDAsTlVMTCwwLE5VTEwsMCk7CisgICAgcy0+Y3VycmVudF9maWxlX29rID0gKGVyciA9PSBVTlpfT0spOworICAgIHJldHVybiBlcnI7Cit9CisKKy8qCisgIFNldCB0aGUgY3VycmVudCBmaWxlIG9mIHRoZSB6aXBmaWxlIHRvIHRoZSBuZXh0IGZpbGUuCisgIHJldHVybiBVTlpfT0sgaWYgdGhlcmUgaXMgbm8gcHJvYmxlbQorICByZXR1cm4gVU5aX0VORF9PRl9MSVNUX09GX0ZJTEUgaWYgdGhlIGFjdHVhbCBmaWxlIHdhcyB0aGUgbGF0ZXN0LgorKi8KK2V4dGVybiBpbnQgWkVYUE9SVCB1bnpHb1RvTmV4dEZpbGUgKHVuekZpbGUgIGZpbGUpCit7CisgICAgdW56NjRfcyogczsKKyAgICBpbnQgZXJyOworCisgICAgaWYgKGZpbGU9PU5VTEwpCisgICAgICAgIHJldHVybiBVTlpfUEFSQU1FUlJPUjsKKyAgICBzPSh1bno2NF9zKilmaWxlOworICAgIGlmICghcy0+Y3VycmVudF9maWxlX29rKQorICAgICAgICByZXR1cm4gVU5aX0VORF9PRl9MSVNUX09GX0ZJTEU7CisgICAgaWYgKHMtPmdpLm51bWJlcl9lbnRyeSAhPSAweGZmZmYpICAgIC8qIDJeMTYgZmlsZXMgb3ZlcmZsb3cgaGFjayAqLworICAgICAgaWYgKHMtPm51bV9maWxlKzE9PXMtPmdpLm51bWJlcl9lbnRyeSkKKyAgICAgICAgcmV0dXJuIFVOWl9FTkRfT0ZfTElTVF9PRl9GSUxFOworCisgICAgcy0+cG9zX2luX2NlbnRyYWxfZGlyICs9IFNJWkVDRU5UUkFMRElSSVRFTSArIHMtPmN1cl9maWxlX2luZm8uc2l6ZV9maWxlbmFtZSArCisgICAgICAgICAgICBzLT5jdXJfZmlsZV9pbmZvLnNpemVfZmlsZV9leHRyYSArIHMtPmN1cl9maWxlX2luZm8uc2l6ZV9maWxlX2NvbW1lbnQgOworICAgIHMtPm51bV9maWxlKys7CisgICAgZXJyID0gdW56NjRsb2NhbF9HZXRDdXJyZW50RmlsZUluZm9JbnRlcm5hbChmaWxlLCZzLT5jdXJfZmlsZV9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcy0+Y3VyX2ZpbGVfaW5mb19pbnRlcm5hbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwwLE5VTEwsMCxOVUxMLDApOworICAgIHMtPmN1cnJlbnRfZmlsZV9vayA9IChlcnIgPT0gVU5aX09LKTsKKyAgICByZXR1cm4gZXJyOworfQorCisKKy8qCisgIFRyeSBsb2NhdGUgdGhlIGZpbGUgc3pGaWxlTmFtZSBpbiB0aGUgemlwZmlsZS4KKyAgRm9yIHRoZSBpQ2FzZVNlbnNpdGl2aXR5IHNpZ25pZmljYXRpb24sIHNlZSB1bnpTdHJpbmdGaWxlTmFtZUNvbXBhcmUKKworICByZXR1cm4gdmFsdWUgOgorICBVTlpfT0sgaWYgdGhlIGZpbGUgaXMgZm91bmQuIEl0IGJlY29tZXMgdGhlIGN1cnJlbnQgZmlsZS4KKyAgVU5aX0VORF9PRl9MSVNUX09GX0ZJTEUgaWYgdGhlIGZpbGUgaXMgbm90IGZvdW5kCisqLworZXh0ZXJuIGludCBaRVhQT1JUIHVuekxvY2F0ZUZpbGUgKHVuekZpbGUgZmlsZSwgY29uc3QgY2hhciAqc3pGaWxlTmFtZSwgaW50IGlDYXNlU2Vuc2l0aXZpdHkpCit7CisgICAgdW56NjRfcyogczsKKyAgICBpbnQgZXJyOworCisgICAgLyogV2UgcmVtZW1iZXIgdGhlICdjdXJyZW50JyBwb3NpdGlvbiBpbiB0aGUgZmlsZSBzbyB0aGF0IHdlIGNhbiBqdW1wCisgICAgICogYmFjayB0aGVyZSBpZiB3ZSBmYWlsLgorICAgICAqLworICAgIHVuel9maWxlX2luZm82NCBjdXJfZmlsZV9pbmZvU2F2ZWQ7CisgICAgdW56X2ZpbGVfaW5mbzY0X2ludGVybmFsIGN1cl9maWxlX2luZm9faW50ZXJuYWxTYXZlZDsKKyAgICBaUE9TNjRfVCBudW1fZmlsZVNhdmVkOworICAgIFpQT1M2NF9UIHBvc19pbl9jZW50cmFsX2RpclNhdmVkOworCisKKyAgICBpZiAoZmlsZT09TlVMTCkKKyAgICAgICAgcmV0dXJuIFVOWl9QQVJBTUVSUk9SOworCisgICAgaWYgKHN0cmxlbihzekZpbGVOYW1lKT49VU5aX01BWEZJTEVOQU1FSU5aSVApCisgICAgICAgIHJldHVybiBVTlpfUEFSQU1FUlJPUjsKKworICAgIHM9KHVuejY0X3MqKWZpbGU7CisgICAgaWYgKCFzLT5jdXJyZW50X2ZpbGVfb2spCisgICAgICAgIHJldHVybiBVTlpfRU5EX09GX0xJU1RfT0ZfRklMRTsKKworICAgIC8qIFNhdmUgdGhlIGN1cnJlbnQgc3RhdGUgKi8KKyAgICBudW1fZmlsZVNhdmVkID0gcy0+bnVtX2ZpbGU7CisgICAgcG9zX2luX2NlbnRyYWxfZGlyU2F2ZWQgPSBzLT5wb3NfaW5fY2VudHJhbF9kaXI7CisgICAgY3VyX2ZpbGVfaW5mb1NhdmVkID0gcy0+Y3VyX2ZpbGVfaW5mbzsKKyAgICBjdXJfZmlsZV9pbmZvX2ludGVybmFsU2F2ZWQgPSBzLT5jdXJfZmlsZV9pbmZvX2ludGVybmFsOworCisgICAgZXJyID0gdW56R29Ub0ZpcnN0RmlsZShmaWxlKTsKKworICAgIHdoaWxlIChlcnIgPT0gVU5aX09LKQorICAgIHsKKyAgICAgICAgY2hhciBzekN1cnJlbnRGaWxlTmFtZVtVTlpfTUFYRklMRU5BTUVJTlpJUCsxXTsKKyAgICAgICAgZXJyID0gdW56R2V0Q3VycmVudEZpbGVJbmZvNjQoZmlsZSxOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3pDdXJyZW50RmlsZU5hbWUsc2l6ZW9mKHN6Q3VycmVudEZpbGVOYW1lKS0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwwLE5VTEwsMCk7CisgICAgICAgIGlmIChlcnIgPT0gVU5aX09LKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodW56U3RyaW5nRmlsZU5hbWVDb21wYXJlKHN6Q3VycmVudEZpbGVOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzekZpbGVOYW1lLGlDYXNlU2Vuc2l0aXZpdHkpPT0wKQorICAgICAgICAgICAgICAgIHJldHVybiBVTlpfT0s7CisgICAgICAgICAgICBlcnIgPSB1bnpHb1RvTmV4dEZpbGUoZmlsZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBXZSBmYWlsZWQsIHNvIHJlc3RvcmUgdGhlIHN0YXRlIG9mIHRoZSAnY3VycmVudCBmaWxlJyB0byB3aGVyZSB3ZQorICAgICAqIHdlcmUuCisgICAgICovCisgICAgcy0+bnVtX2ZpbGUgPSBudW1fZmlsZVNhdmVkIDsKKyAgICBzLT5wb3NfaW5fY2VudHJhbF9kaXIgPSBwb3NfaW5fY2VudHJhbF9kaXJTYXZlZCA7CisgICAgcy0+Y3VyX2ZpbGVfaW5mbyA9IGN1cl9maWxlX2luZm9TYXZlZDsKKyAgICBzLT5jdXJfZmlsZV9pbmZvX2ludGVybmFsID0gY3VyX2ZpbGVfaW5mb19pbnRlcm5hbFNhdmVkOworICAgIHJldHVybiBlcnI7Cit9CisKKworLyoKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIENvbnRyaWJ1dGVkIGJ5IFJ5YW4gSGFrc2kgKG1haWx0bzovL2NyeW9nZW5AaW5mb3NlcnZlLm5ldCkKKy8vIEkgbmVlZCByYW5kb20gYWNjZXNzCisvLworLy8gRnVydGhlciBvcHRpbWl6YXRpb24gY291bGQgYmUgcmVhbGl6ZWQgYnkgYWRkaW5nIGFuIGFiaWxpdHkKKy8vIHRvIGNhY2hlIHRoZSBkaXJlY3RvcnkgaW4gbWVtb3J5LiBUaGUgZ29hbCBiZWluZyBhIHNpbmdsZQorLy8gY29tcHJlaGVuc2l2ZSBmaWxlIHJlYWQgdG8gcHV0IHRoZSBmaWxlIEkgbmVlZCBpbiBhIG1lbW9yeS4KKyovCisKKy8qCit0eXBlZGVmIHN0cnVjdCB1bnpfZmlsZV9wb3NfcworeworICAgIFpQT1M2NF9UIHBvc19pbl96aXBfZGlyZWN0b3J5OyAgIC8vIG9mZnNldCBpbiBmaWxlCisgICAgWlBPUzY0X1QgbnVtX29mX2ZpbGU7ICAgICAgICAgICAgLy8gIyBvZiBmaWxlCit9IHVuel9maWxlX3BvczsKKyovCisKK2V4dGVybiBpbnQgWkVYUE9SVCB1bnpHZXRGaWxlUG9zNjQodW56RmlsZSBmaWxlLCB1bno2NF9maWxlX3BvcyogIGZpbGVfcG9zKQoreworICAgIHVuejY0X3MqIHM7CisKKyAgICBpZiAoZmlsZT09TlVMTCB8fCBmaWxlX3Bvcz09TlVMTCkKKyAgICAgICAgcmV0dXJuIFVOWl9QQVJBTUVSUk9SOworICAgIHM9KHVuejY0X3MqKWZpbGU7CisgICAgaWYgKCFzLT5jdXJyZW50X2ZpbGVfb2spCisgICAgICAgIHJldHVybiBVTlpfRU5EX09GX0xJU1RfT0ZfRklMRTsKKworICAgIGZpbGVfcG9zLT5wb3NfaW5femlwX2RpcmVjdG9yeSAgPSBzLT5wb3NfaW5fY2VudHJhbF9kaXI7CisgICAgZmlsZV9wb3MtPm51bV9vZl9maWxlICAgICAgICAgICA9IHMtPm51bV9maWxlOworCisgICAgcmV0dXJuIFVOWl9PSzsKK30KKworZXh0ZXJuIGludCBaRVhQT1JUIHVuekdldEZpbGVQb3MoCisgICAgdW56RmlsZSBmaWxlLAorICAgIHVuel9maWxlX3BvcyogZmlsZV9wb3MpCit7CisgICAgdW56NjRfZmlsZV9wb3MgZmlsZV9wb3M2NDsKKyAgICBpbnQgZXJyID0gdW56R2V0RmlsZVBvczY0KGZpbGUsJmZpbGVfcG9zNjQpOworICAgIGlmIChlcnI9PVVOWl9PSykKKyAgICB7CisgICAgICAgIGZpbGVfcG9zLT5wb3NfaW5femlwX2RpcmVjdG9yeSA9ICh1TG9uZylmaWxlX3BvczY0LnBvc19pbl96aXBfZGlyZWN0b3J5OworICAgICAgICBmaWxlX3Bvcy0+bnVtX29mX2ZpbGUgPSAodUxvbmcpZmlsZV9wb3M2NC5udW1fb2ZfZmlsZTsKKyAgICB9CisgICAgcmV0dXJuIGVycjsKK30KKworZXh0ZXJuIGludCBaRVhQT1JUIHVuekdvVG9GaWxlUG9zNjQodW56RmlsZSBmaWxlLCBjb25zdCB1bno2NF9maWxlX3BvcyogZmlsZV9wb3MpCit7CisgICAgdW56NjRfcyogczsKKyAgICBpbnQgZXJyOworCisgICAgaWYgKGZpbGU9PU5VTEwgfHwgZmlsZV9wb3M9PU5VTEwpCisgICAgICAgIHJldHVybiBVTlpfUEFSQU1FUlJPUjsKKyAgICBzPSh1bno2NF9zKilmaWxlOworCisgICAgLyoganVtcCB0byB0aGUgcmlnaHQgc3BvdCAqLworICAgIHMtPnBvc19pbl9jZW50cmFsX2RpciA9IGZpbGVfcG9zLT5wb3NfaW5femlwX2RpcmVjdG9yeTsKKyAgICBzLT5udW1fZmlsZSAgICAgICAgICAgPSBmaWxlX3Bvcy0+bnVtX29mX2ZpbGU7CisKKyAgICAvKiBzZXQgdGhlIGN1cnJlbnQgZmlsZSAqLworICAgIGVyciA9IHVuejY0bG9jYWxfR2V0Q3VycmVudEZpbGVJbmZvSW50ZXJuYWwoZmlsZSwmcy0+Y3VyX2ZpbGVfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnMtPmN1cl9maWxlX2luZm9faW50ZXJuYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsMCxOVUxMLDAsTlVMTCwwKTsKKyAgICAvKiByZXR1cm4gcmVzdWx0cyAqLworICAgIHMtPmN1cnJlbnRfZmlsZV9vayA9IChlcnIgPT0gVU5aX09LKTsKKyAgICByZXR1cm4gZXJyOworfQorCitleHRlcm4gaW50IFpFWFBPUlQgdW56R29Ub0ZpbGVQb3MoCisgICAgdW56RmlsZSBmaWxlLAorICAgIHVuel9maWxlX3BvcyogZmlsZV9wb3MpCit7CisgICAgdW56NjRfZmlsZV9wb3MgZmlsZV9wb3M2NDsKKyAgICBpZiAoZmlsZV9wb3MgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIFVOWl9QQVJBTUVSUk9SOworCisgICAgZmlsZV9wb3M2NC5wb3NfaW5femlwX2RpcmVjdG9yeSA9IGZpbGVfcG9zLT5wb3NfaW5femlwX2RpcmVjdG9yeTsKKyAgICBmaWxlX3BvczY0Lm51bV9vZl9maWxlID0gZmlsZV9wb3MtPm51bV9vZl9maWxlOworICAgIHJldHVybiB1bnpHb1RvRmlsZVBvczY0KGZpbGUsJmZpbGVfcG9zNjQpOworfQorCisvKgorLy8gVW56aXAgSGVscGVyIEZ1bmN0aW9ucyAtIHNob3VsZCBiZSBoZXJlPworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKi8KKworLyoKKyAgUmVhZCB0aGUgbG9jYWwgaGVhZGVyIG9mIHRoZSBjdXJyZW50IHppcGZpbGUKKyAgQ2hlY2sgdGhlIGNvaGVyZW5jeSBvZiB0aGUgbG9jYWwgaGVhZGVyIGFuZCBpbmZvIGluIHRoZSBlbmQgb2YgY2VudHJhbAorICAgICAgICBkaXJlY3RvcnkgYWJvdXQgdGhpcyBmaWxlCisgIHN0b3JlIGluICpwaVNpemVWYXIgdGhlIHNpemUgb2YgZXh0cmEgaW5mbyBpbiBsb2NhbCBoZWFkZXIKKyAgICAgICAgKGZpbGVuYW1lIGFuZCBzaXplIG9mIGV4dHJhIGZpZWxkIGRhdGEpCisqLworbG9jYWwgaW50IHVuejY0bG9jYWxfQ2hlY2tDdXJyZW50RmlsZUNvaGVyZW5jeUhlYWRlciAodW56NjRfcyogcywgdUludCogcGlTaXplVmFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpQT1M2NF9UICogcG9mZnNldF9sb2NhbF9leHRyYWZpZWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVJbnQgICogcHNpemVfbG9jYWxfZXh0cmFmaWVsZCkKK3sKKyAgICB1TG9uZyB1TWFnaWMsdURhdGEsdUZsYWdzOworICAgIHVMb25nIHNpemVfZmlsZW5hbWU7CisgICAgdUxvbmcgc2l6ZV9leHRyYV9maWVsZDsKKyAgICBpbnQgZXJyPVVOWl9PSzsKKworICAgICpwaVNpemVWYXIgPSAwOworICAgICpwb2Zmc2V0X2xvY2FsX2V4dHJhZmllbGQgPSAwOworICAgICpwc2l6ZV9sb2NhbF9leHRyYWZpZWxkID0gMDsKKworICAgIGlmIChaU0VFSzY0KHMtPnpfZmlsZWZ1bmMsIHMtPmZpbGVzdHJlYW0scy0+Y3VyX2ZpbGVfaW5mb19pbnRlcm5hbC5vZmZzZXRfY3VyZmlsZSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPmJ5dGVfYmVmb3JlX3RoZV96aXBmaWxlLFpMSUJfRklMRUZVTkNfU0VFS19TRVQpIT0wKQorICAgICAgICByZXR1cm4gVU5aX0VSUk5POworCisKKyAgICBpZiAoZXJyPT1VTlpfT0spCisgICAgeworICAgICAgICBpZiAodW56NjRsb2NhbF9nZXRMb25nKCZzLT56X2ZpbGVmdW5jLCBzLT5maWxlc3RyZWFtLCZ1TWFnaWMpICE9IFVOWl9PSykKKyAgICAgICAgICAgIGVycj1VTlpfRVJSTk87CisgICAgICAgIGVsc2UgaWYgKHVNYWdpYyE9MHgwNDAzNGI1MCkKKyAgICAgICAgICAgIGVycj1VTlpfQkFEWklQRklMRTsKKyAgICB9CisKKyAgICBpZiAodW56NjRsb2NhbF9nZXRTaG9ydCgmcy0+el9maWxlZnVuYywgcy0+ZmlsZXN0cmVhbSwmdURhdGEpICE9IFVOWl9PSykKKyAgICAgICAgZXJyPVVOWl9FUlJOTzsKKy8qCisgICAgZWxzZSBpZiAoKGVycj09VU5aX09LKSAmJiAodURhdGEhPXMtPmN1cl9maWxlX2luZm8ud1ZlcnNpb24pKQorICAgICAgICBlcnI9VU5aX0JBRFpJUEZJTEU7CisqLworICAgIGlmICh1bno2NGxvY2FsX2dldFNob3J0KCZzLT56X2ZpbGVmdW5jLCBzLT5maWxlc3RyZWFtLCZ1RmxhZ3MpICE9IFVOWl9PSykKKyAgICAgICAgZXJyPVVOWl9FUlJOTzsKKworICAgIGlmICh1bno2NGxvY2FsX2dldFNob3J0KCZzLT56X2ZpbGVmdW5jLCBzLT5maWxlc3RyZWFtLCZ1RGF0YSkgIT0gVU5aX09LKQorICAgICAgICBlcnI9VU5aX0VSUk5POworICAgIGVsc2UgaWYgKChlcnI9PVVOWl9PSykgJiYgKHVEYXRhIT1zLT5jdXJfZmlsZV9pbmZvLmNvbXByZXNzaW9uX21ldGhvZCkpCisgICAgICAgIGVycj1VTlpfQkFEWklQRklMRTsKKworICAgIGlmICgoZXJyPT1VTlpfT0spICYmIChzLT5jdXJfZmlsZV9pbmZvLmNvbXByZXNzaW9uX21ldGhvZCE9MCkgJiYKKy8qICNpZmRlZiBIQVZFX0JaSVAyICovCisgICAgICAgICAgICAgICAgICAgICAgICAgKHMtPmN1cl9maWxlX2luZm8uY29tcHJlc3Npb25fbWV0aG9kIT1aX0JaSVAyRUQpICYmCisvKiAjZW5kaWYgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAocy0+Y3VyX2ZpbGVfaW5mby5jb21wcmVzc2lvbl9tZXRob2QhPVpfREVGTEFURUQpKQorICAgICAgICBlcnI9VU5aX0JBRFpJUEZJTEU7CisKKyAgICBpZiAodW56NjRsb2NhbF9nZXRMb25nKCZzLT56X2ZpbGVmdW5jLCBzLT5maWxlc3RyZWFtLCZ1RGF0YSkgIT0gVU5aX09LKSAvKiBkYXRlL3RpbWUgKi8KKyAgICAgICAgZXJyPVVOWl9FUlJOTzsKKworICAgIGlmICh1bno2NGxvY2FsX2dldExvbmcoJnMtPnpfZmlsZWZ1bmMsIHMtPmZpbGVzdHJlYW0sJnVEYXRhKSAhPSBVTlpfT0spIC8qIGNyYyAqLworICAgICAgICBlcnI9VU5aX0VSUk5POworICAgIGVsc2UgaWYgKChlcnI9PVVOWl9PSykgJiYgKHVEYXRhIT1zLT5jdXJfZmlsZV9pbmZvLmNyYykgJiYgKCh1RmxhZ3MgJiA4KT09MCkpCisgICAgICAgIGVycj1VTlpfQkFEWklQRklMRTsKKworICAgIGlmICh1bno2NGxvY2FsX2dldExvbmcoJnMtPnpfZmlsZWZ1bmMsIHMtPmZpbGVzdHJlYW0sJnVEYXRhKSAhPSBVTlpfT0spIC8qIHNpemUgY29tcHIgKi8KKyAgICAgICAgZXJyPVVOWl9FUlJOTzsKKyAgICBlbHNlIGlmICh1RGF0YSAhPSAweEZGRkZGRkZGICYmIChlcnI9PVVOWl9PSykgJiYgKHVEYXRhIT1zLT5jdXJfZmlsZV9pbmZvLmNvbXByZXNzZWRfc2l6ZSkgJiYgKCh1RmxhZ3MgJiA4KT09MCkpCisgICAgICAgIGVycj1VTlpfQkFEWklQRklMRTsKKworICAgIGlmICh1bno2NGxvY2FsX2dldExvbmcoJnMtPnpfZmlsZWZ1bmMsIHMtPmZpbGVzdHJlYW0sJnVEYXRhKSAhPSBVTlpfT0spIC8qIHNpemUgdW5jb21wciAqLworICAgICAgICBlcnI9VU5aX0VSUk5POworICAgIGVsc2UgaWYgKHVEYXRhICE9IDB4RkZGRkZGRkYgJiYgKGVycj09VU5aX09LKSAmJiAodURhdGEhPXMtPmN1cl9maWxlX2luZm8udW5jb21wcmVzc2VkX3NpemUpICYmICgodUZsYWdzICYgOCk9PTApKQorICAgICAgICBlcnI9VU5aX0JBRFpJUEZJTEU7CisKKyAgICBpZiAodW56NjRsb2NhbF9nZXRTaG9ydCgmcy0+el9maWxlZnVuYywgcy0+ZmlsZXN0cmVhbSwmc2l6ZV9maWxlbmFtZSkgIT0gVU5aX09LKQorICAgICAgICBlcnI9VU5aX0VSUk5POworICAgIGVsc2UgaWYgKChlcnI9PVVOWl9PSykgJiYgKHNpemVfZmlsZW5hbWUhPXMtPmN1cl9maWxlX2luZm8uc2l6ZV9maWxlbmFtZSkpCisgICAgICAgIGVycj1VTlpfQkFEWklQRklMRTsKKworICAgICpwaVNpemVWYXIgKz0gKHVJbnQpc2l6ZV9maWxlbmFtZTsKKworICAgIGlmICh1bno2NGxvY2FsX2dldFNob3J0KCZzLT56X2ZpbGVmdW5jLCBzLT5maWxlc3RyZWFtLCZzaXplX2V4dHJhX2ZpZWxkKSAhPSBVTlpfT0spCisgICAgICAgIGVycj1VTlpfRVJSTk87CisgICAgKnBvZmZzZXRfbG9jYWxfZXh0cmFmaWVsZD0gcy0+Y3VyX2ZpbGVfaW5mb19pbnRlcm5hbC5vZmZzZXRfY3VyZmlsZSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSVpFWklQTE9DQUxIRUFERVIgKyBzaXplX2ZpbGVuYW1lOworICAgICpwc2l6ZV9sb2NhbF9leHRyYWZpZWxkID0gKHVJbnQpc2l6ZV9leHRyYV9maWVsZDsKKworICAgICpwaVNpemVWYXIgKz0gKHVJbnQpc2l6ZV9leHRyYV9maWVsZDsKKworICAgIHJldHVybiBlcnI7Cit9CisKKy8qCisgIE9wZW4gZm9yIHJlYWRpbmcgZGF0YSB0aGUgY3VycmVudCBmaWxlIGluIHRoZSB6aXBmaWxlLgorICBJZiB0aGVyZSBpcyBubyBlcnJvciBhbmQgdGhlIGZpbGUgaXMgb3BlbmVkLCB0aGUgcmV0dXJuIHZhbHVlIGlzIFVOWl9PSy4KKyovCitleHRlcm4gaW50IFpFWFBPUlQgdW56T3BlbkN1cnJlbnRGaWxlMyAodW56RmlsZSBmaWxlLCBpbnQqIG1ldGhvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBsZXZlbCwgaW50IHJhdywgY29uc3QgY2hhciogcGFzc3dvcmQpCit7CisgICAgaW50IGVycj1VTlpfT0s7CisgICAgdUludCBpU2l6ZVZhcjsKKyAgICB1bno2NF9zKiBzOworICAgIGZpbGVfaW5femlwNjRfcmVhZF9pbmZvX3MqIHBmaWxlX2luX3ppcF9yZWFkX2luZm87CisgICAgWlBPUzY0X1Qgb2Zmc2V0X2xvY2FsX2V4dHJhZmllbGQ7ICAvKiBvZmZzZXQgb2YgdGhlIGxvY2FsIGV4dHJhIGZpZWxkICovCisgICAgdUludCAgc2l6ZV9sb2NhbF9leHRyYWZpZWxkOyAgICAvKiBzaXplIG9mIHRoZSBsb2NhbCBleHRyYSBmaWVsZCAqLworIyAgICBpZm5kZWYgTk9VTkNSWVBUCisgICAgY2hhciBzb3VyY2VbMTJdOworIyAgICBlbHNlCisgICAgaWYgKHBhc3N3b3JkICE9IE5VTEwpCisgICAgICAgIHJldHVybiBVTlpfUEFSQU1FUlJPUjsKKyMgICAgZW5kaWYKKworICAgIGlmIChmaWxlPT1OVUxMKQorICAgICAgICByZXR1cm4gVU5aX1BBUkFNRVJST1I7CisgICAgcz0odW56NjRfcyopZmlsZTsKKyAgICBpZiAoIXMtPmN1cnJlbnRfZmlsZV9vaykKKyAgICAgICAgcmV0dXJuIFVOWl9QQVJBTUVSUk9SOworCisgICAgaWYgKHMtPnBmaWxlX2luX3ppcF9yZWFkICE9IE5VTEwpCisgICAgICAgIHVuekNsb3NlQ3VycmVudEZpbGUoZmlsZSk7CisKKyAgICBpZiAodW56NjRsb2NhbF9DaGVja0N1cnJlbnRGaWxlQ29oZXJlbmN5SGVhZGVyKHMsJmlTaXplVmFyLCAmb2Zmc2V0X2xvY2FsX2V4dHJhZmllbGQsJnNpemVfbG9jYWxfZXh0cmFmaWVsZCkhPVVOWl9PSykKKyAgICAgICAgcmV0dXJuIFVOWl9CQURaSVBGSUxFOworCisgICAgcGZpbGVfaW5femlwX3JlYWRfaW5mbyA9IChmaWxlX2luX3ppcDY0X3JlYWRfaW5mb19zKilBTExPQyhzaXplb2YoZmlsZV9pbl96aXA2NF9yZWFkX2luZm9fcykpOworICAgIGlmIChwZmlsZV9pbl96aXBfcmVhZF9pbmZvPT1OVUxMKQorICAgICAgICByZXR1cm4gVU5aX0lOVEVSTkFMRVJST1I7CisKKyAgICBwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT5yZWFkX2J1ZmZlcj0oY2hhciopQUxMT0MoVU5aX0JVRlNJWkUpOworICAgIHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPm9mZnNldF9sb2NhbF9leHRyYWZpZWxkID0gb2Zmc2V0X2xvY2FsX2V4dHJhZmllbGQ7CisgICAgcGZpbGVfaW5femlwX3JlYWRfaW5mby0+c2l6ZV9sb2NhbF9leHRyYWZpZWxkID0gc2l6ZV9sb2NhbF9leHRyYWZpZWxkOworICAgIHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPnBvc19sb2NhbF9leHRyYWZpZWxkPTA7CisgICAgcGZpbGVfaW5femlwX3JlYWRfaW5mby0+cmF3PXJhdzsKKworICAgIGlmIChwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT5yZWFkX2J1ZmZlcj09TlVMTCkKKyAgICB7CisgICAgICAgIFRSWUZSRUUocGZpbGVfaW5femlwX3JlYWRfaW5mbyk7CisgICAgICAgIHJldHVybiBVTlpfSU5URVJOQUxFUlJPUjsKKyAgICB9CisKKyAgICBwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT5zdHJlYW1faW5pdGlhbGlzZWQ9MDsKKworICAgIGlmIChtZXRob2QhPU5VTEwpCisgICAgICAgICptZXRob2QgPSAoaW50KXMtPmN1cl9maWxlX2luZm8uY29tcHJlc3Npb25fbWV0aG9kOworCisgICAgaWYgKGxldmVsIT1OVUxMKQorICAgIHsKKyAgICAgICAgKmxldmVsID0gNjsKKyAgICAgICAgc3dpdGNoIChzLT5jdXJfZmlsZV9pbmZvLmZsYWcgJiAweDA2KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSA2IDogKmxldmVsID0gMTsgYnJlYWs7CisgICAgICAgICAgY2FzZSA0IDogKmxldmVsID0gMjsgYnJlYWs7CisgICAgICAgICAgY2FzZSAyIDogKmxldmVsID0gOTsgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoKHMtPmN1cl9maWxlX2luZm8uY29tcHJlc3Npb25fbWV0aG9kIT0wKSAmJgorLyogI2lmZGVmIEhBVkVfQlpJUDIgKi8KKyAgICAgICAgKHMtPmN1cl9maWxlX2luZm8uY29tcHJlc3Npb25fbWV0aG9kIT1aX0JaSVAyRUQpICYmCisvKiAjZW5kaWYgKi8KKyAgICAgICAgKHMtPmN1cl9maWxlX2luZm8uY29tcHJlc3Npb25fbWV0aG9kIT1aX0RFRkxBVEVEKSkKKworICAgICAgICBlcnI9VU5aX0JBRFpJUEZJTEU7CisKKyAgICBwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT5jcmMzMl93YWl0PXMtPmN1cl9maWxlX2luZm8uY3JjOworICAgIHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPmNyYzMyPTA7CisgICAgcGZpbGVfaW5femlwX3JlYWRfaW5mby0+dG90YWxfb3V0XzY0PTA7CisgICAgcGZpbGVfaW5femlwX3JlYWRfaW5mby0+Y29tcHJlc3Npb25fbWV0aG9kID0gcy0+Y3VyX2ZpbGVfaW5mby5jb21wcmVzc2lvbl9tZXRob2Q7CisgICAgcGZpbGVfaW5femlwX3JlYWRfaW5mby0+ZmlsZXN0cmVhbT1zLT5maWxlc3RyZWFtOworICAgIHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPnpfZmlsZWZ1bmM9cy0+el9maWxlZnVuYzsKKyAgICBwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT5ieXRlX2JlZm9yZV90aGVfemlwZmlsZT1zLT5ieXRlX2JlZm9yZV90aGVfemlwZmlsZTsKKworICAgIHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPnN0cmVhbS50b3RhbF9vdXQgPSAwOworCisgICAgaWYgKChzLT5jdXJfZmlsZV9pbmZvLmNvbXByZXNzaW9uX21ldGhvZD09Wl9CWklQMkVEKSAmJiAoIXJhdykpCisgICAgeworI2lmZGVmIEhBVkVfQlpJUDIKKyAgICAgIHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPmJzdHJlYW0uYnphbGxvYyA9ICh2b2lkICooKikgKHZvaWQgKiwgaW50LCBpbnQpKTA7CisgICAgICBwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT5ic3RyZWFtLmJ6ZnJlZSA9IChmcmVlX2Z1bmMpMDsKKyAgICAgIHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPmJzdHJlYW0ub3BhcXVlID0gKHZvaWRwZikwOworICAgICAgcGZpbGVfaW5femlwX3JlYWRfaW5mby0+YnN0cmVhbS5zdGF0ZSA9ICh2b2lkcGYpMDsKKworICAgICAgcGZpbGVfaW5femlwX3JlYWRfaW5mby0+c3RyZWFtLnphbGxvYyA9IChhbGxvY19mdW5jKTA7CisgICAgICBwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT5zdHJlYW0uemZyZWUgPSAoZnJlZV9mdW5jKTA7CisgICAgICBwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT5zdHJlYW0ub3BhcXVlID0gKHZvaWRwZikwOworICAgICAgcGZpbGVfaW5femlwX3JlYWRfaW5mby0+c3RyZWFtLm5leHRfaW4gPSAodm9pZHBmKTA7CisgICAgICBwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT5zdHJlYW0uYXZhaWxfaW4gPSAwOworCisgICAgICBlcnI9QloyX2J6RGVjb21wcmVzc0luaXQoJnBmaWxlX2luX3ppcF9yZWFkX2luZm8tPmJzdHJlYW0sIDAsIDApOworICAgICAgaWYgKGVyciA9PSBaX09LKQorICAgICAgICBwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT5zdHJlYW1faW5pdGlhbGlzZWQ9Wl9CWklQMkVEOworICAgICAgZWxzZQorICAgICAgeworICAgICAgICBUUllGUkVFKHBmaWxlX2luX3ppcF9yZWFkX2luZm8pOworICAgICAgICByZXR1cm4gZXJyOworICAgICAgfQorI2Vsc2UKKyAgICAgIHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPnJhdz0xOworI2VuZGlmCisgICAgfQorICAgIGVsc2UgaWYgKChzLT5jdXJfZmlsZV9pbmZvLmNvbXByZXNzaW9uX21ldGhvZD09Wl9ERUZMQVRFRCkgJiYgKCFyYXcpKQorICAgIHsKKyAgICAgIHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPnN0cmVhbS56YWxsb2MgPSAoYWxsb2NfZnVuYykwOworICAgICAgcGZpbGVfaW5femlwX3JlYWRfaW5mby0+c3RyZWFtLnpmcmVlID0gKGZyZWVfZnVuYykwOworICAgICAgcGZpbGVfaW5femlwX3JlYWRfaW5mby0+c3RyZWFtLm9wYXF1ZSA9ICh2b2lkcGYpMDsKKyAgICAgIHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPnN0cmVhbS5uZXh0X2luID0gMDsKKyAgICAgIHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPnN0cmVhbS5hdmFpbF9pbiA9IDA7CisKKyAgICAgIGVycj1pbmZsYXRlSW5pdDIoJnBmaWxlX2luX3ppcF9yZWFkX2luZm8tPnN0cmVhbSwgLU1BWF9XQklUUyk7CisgICAgICBpZiAoZXJyID09IFpfT0spCisgICAgICAgIHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPnN0cmVhbV9pbml0aWFsaXNlZD1aX0RFRkxBVEVEOworICAgICAgZWxzZQorICAgICAgeworICAgICAgICBUUllGUkVFKHBmaWxlX2luX3ppcF9yZWFkX2luZm8pOworICAgICAgICByZXR1cm4gZXJyOworICAgICAgfQorICAgICAgICAvKiB3aW5kb3dCaXRzIGlzIHBhc3NlZCA8IDAgdG8gdGVsbCB0aGF0IHRoZXJlIGlzIG5vIHpsaWIgaGVhZGVyLgorICAgICAgICAgKiBOb3RlIHRoYXQgaW4gdGhpcyBjYXNlIGluZmxhdGUgKnJlcXVpcmVzKiBhbiBleHRyYSAiZHVtbXkiIGJ5dGUKKyAgICAgICAgICogYWZ0ZXIgdGhlIGNvbXByZXNzZWQgc3RyZWFtIGluIG9yZGVyIHRvIGNvbXBsZXRlIGRlY29tcHJlc3Npb24gYW5kCisgICAgICAgICAqIHJldHVybiBaX1NUUkVBTV9FTkQuCisgICAgICAgICAqIEluIHVuemlwLCBpIGRvbid0IHdhaXQgYWJzb2x1dGVseSBaX1NUUkVBTV9FTkQgYmVjYXVzZSBJIGtub3duIHRoZQorICAgICAgICAgKiBzaXplIG9mIGJvdGggY29tcHJlc3NlZCBhbmQgdW5jb21wcmVzc2VkIGRhdGEKKyAgICAgICAgICovCisgICAgfQorICAgIHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPnJlc3RfcmVhZF9jb21wcmVzc2VkID0KKyAgICAgICAgICAgIHMtPmN1cl9maWxlX2luZm8uY29tcHJlc3NlZF9zaXplIDsKKyAgICBwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT5yZXN0X3JlYWRfdW5jb21wcmVzc2VkID0KKyAgICAgICAgICAgIHMtPmN1cl9maWxlX2luZm8udW5jb21wcmVzc2VkX3NpemUgOworCisKKyAgICBwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT5wb3NfaW5femlwZmlsZSA9CisgICAgICAgICAgICBzLT5jdXJfZmlsZV9pbmZvX2ludGVybmFsLm9mZnNldF9jdXJmaWxlICsgU0laRVpJUExPQ0FMSEVBREVSICsKKyAgICAgICAgICAgICAgaVNpemVWYXI7CisKKyAgICBwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT5zdHJlYW0uYXZhaWxfaW4gPSAodUludCkwOworCisgICAgcy0+cGZpbGVfaW5femlwX3JlYWQgPSBwZmlsZV9pbl96aXBfcmVhZF9pbmZvOworICAgICAgICAgICAgICAgIHMtPmVuY3J5cHRlZCA9IDA7CisKKyMgICAgaWZuZGVmIE5PVU5DUllQVAorICAgIGlmIChwYXNzd29yZCAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgaW50IGk7CisgICAgICAgIHMtPnBjcmNfMzJfdGFiID0gZ2V0X2NyY190YWJsZSgpOworICAgICAgICBpbml0X2tleXMocGFzc3dvcmQscy0+a2V5cyxzLT5wY3JjXzMyX3RhYik7CisgICAgICAgIGlmIChaU0VFSzY0KHMtPnpfZmlsZWZ1bmMsIHMtPmZpbGVzdHJlYW0sCisgICAgICAgICAgICAgICAgICBzLT5wZmlsZV9pbl96aXBfcmVhZC0+cG9zX2luX3ppcGZpbGUgKworICAgICAgICAgICAgICAgICAgICAgcy0+cGZpbGVfaW5femlwX3JlYWQtPmJ5dGVfYmVmb3JlX3RoZV96aXBmaWxlLAorICAgICAgICAgICAgICAgICAgU0VFS19TRVQpIT0wKQorICAgICAgICAgICAgcmV0dXJuIFVOWl9JTlRFUk5BTEVSUk9SOworICAgICAgICBpZihaUkVBRDY0KHMtPnpfZmlsZWZ1bmMsIHMtPmZpbGVzdHJlYW0sc291cmNlLCAxMik8MTIpCisgICAgICAgICAgICByZXR1cm4gVU5aX0lOVEVSTkFMRVJST1I7CisKKyAgICAgICAgZm9yIChpID0gMDsgaTwxMjsgaSsrKQorICAgICAgICAgICAgemRlY29kZShzLT5rZXlzLHMtPnBjcmNfMzJfdGFiLHNvdXJjZVtpXSk7CisKKyAgICAgICAgcy0+cGZpbGVfaW5femlwX3JlYWQtPnBvc19pbl96aXBmaWxlKz0xMjsKKyAgICAgICAgcy0+ZW5jcnlwdGVkPTE7CisgICAgfQorIyAgICBlbmRpZgorCisKKyAgICByZXR1cm4gVU5aX09LOworfQorCitleHRlcm4gaW50IFpFWFBPUlQgdW56T3BlbkN1cnJlbnRGaWxlICh1bnpGaWxlIGZpbGUpCit7CisgICAgcmV0dXJuIHVuek9wZW5DdXJyZW50RmlsZTMoZmlsZSwgTlVMTCwgTlVMTCwgMCwgTlVMTCk7Cit9CisKK2V4dGVybiBpbnQgWkVYUE9SVCB1bnpPcGVuQ3VycmVudEZpbGVQYXNzd29yZCAodW56RmlsZSBmaWxlLCBjb25zdCBjaGFyKiAgcGFzc3dvcmQpCit7CisgICAgcmV0dXJuIHVuek9wZW5DdXJyZW50RmlsZTMoZmlsZSwgTlVMTCwgTlVMTCwgMCwgcGFzc3dvcmQpOworfQorCitleHRlcm4gaW50IFpFWFBPUlQgdW56T3BlbkN1cnJlbnRGaWxlMiAodW56RmlsZSBmaWxlLCBpbnQqIG1ldGhvZCwgaW50KiBsZXZlbCwgaW50IHJhdykKK3sKKyAgICByZXR1cm4gdW56T3BlbkN1cnJlbnRGaWxlMyhmaWxlLCBtZXRob2QsIGxldmVsLCByYXcsIE5VTEwpOworfQorCisvKiogQWRkaXRpb24gZm9yIEdEQUwgOiBTVEFSVCAqLworCitleHRlcm4gWlBPUzY0X1QgWkVYUE9SVCB1bnpHZXRDdXJyZW50RmlsZVpTdHJlYW1Qb3M2NCggdW56RmlsZSBmaWxlKQoreworICAgIHVuejY0X3MqIHM7CisgICAgZmlsZV9pbl96aXA2NF9yZWFkX2luZm9fcyogcGZpbGVfaW5femlwX3JlYWRfaW5mbzsKKyAgICBzPSh1bno2NF9zKilmaWxlOworICAgIGlmIChmaWxlPT1OVUxMKQorICAgICAgICByZXR1cm4gMDsgLy9VTlpfUEFSQU1FUlJPUjsKKyAgICBwZmlsZV9pbl96aXBfcmVhZF9pbmZvPXMtPnBmaWxlX2luX3ppcF9yZWFkOworICAgIGlmIChwZmlsZV9pbl96aXBfcmVhZF9pbmZvPT1OVUxMKQorICAgICAgICByZXR1cm4gMDsgLy9VTlpfUEFSQU1FUlJPUjsKKyAgICByZXR1cm4gcGZpbGVfaW5femlwX3JlYWRfaW5mby0+cG9zX2luX3ppcGZpbGUgKworICAgICAgICAgICAgICAgICAgICAgICAgIHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPmJ5dGVfYmVmb3JlX3RoZV96aXBmaWxlOworfQorCisvKiogQWRkaXRpb24gZm9yIEdEQUwgOiBFTkQgKi8KKworLyoKKyAgUmVhZCBieXRlcyBmcm9tIHRoZSBjdXJyZW50IGZpbGUuCisgIGJ1ZiBjb250YWluIGJ1ZmZlciB3aGVyZSBkYXRhIG11c3QgYmUgY29waWVkCisgIGxlbiB0aGUgc2l6ZSBvZiBidWYuCisKKyAgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZSBjb3BpZWQgaWYgc29tZXMgYnl0ZXMgYXJlIGNvcGllZAorICByZXR1cm4gMCBpZiB0aGUgZW5kIG9mIGZpbGUgd2FzIHJlYWNoZWQKKyAgcmV0dXJuIDwwIHdpdGggZXJyb3IgY29kZSBpZiB0aGVyZSBpcyBhbiBlcnJvcgorICAgIChVTlpfRVJSTk8gZm9yIElPIGVycm9yLCBvciB6TGliIGVycm9yIGZvciB1bmNvbXByZXNzIGVycm9yKQorKi8KK2V4dGVybiBpbnQgWkVYUE9SVCB1bnpSZWFkQ3VycmVudEZpbGUgICh1bnpGaWxlIGZpbGUsIHZvaWRwIGJ1ZiwgdW5zaWduZWQgbGVuKQoreworICAgIGludCBlcnI9VU5aX09LOworICAgIHVJbnQgaVJlYWQgPSAwOworICAgIHVuejY0X3MqIHM7CisgICAgZmlsZV9pbl96aXA2NF9yZWFkX2luZm9fcyogcGZpbGVfaW5femlwX3JlYWRfaW5mbzsKKyAgICBpZiAoZmlsZT09TlVMTCkKKyAgICAgICAgcmV0dXJuIFVOWl9QQVJBTUVSUk9SOworICAgIHM9KHVuejY0X3MqKWZpbGU7CisgICAgcGZpbGVfaW5femlwX3JlYWRfaW5mbz1zLT5wZmlsZV9pbl96aXBfcmVhZDsKKworICAgIGlmIChwZmlsZV9pbl96aXBfcmVhZF9pbmZvPT1OVUxMKQorICAgICAgICByZXR1cm4gVU5aX1BBUkFNRVJST1I7CisKKworICAgIGlmIChwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT5yZWFkX2J1ZmZlciA9PSBOVUxMKQorICAgICAgICByZXR1cm4gVU5aX0VORF9PRl9MSVNUX09GX0ZJTEU7CisgICAgaWYgKGxlbj09MCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT5zdHJlYW0ubmV4dF9vdXQgPSAoQnl0ZWYqKWJ1ZjsKKworICAgIHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPnN0cmVhbS5hdmFpbF9vdXQgPSAodUludClsZW47CisKKyAgICBpZiAoKGxlbj5wZmlsZV9pbl96aXBfcmVhZF9pbmZvLT5yZXN0X3JlYWRfdW5jb21wcmVzc2VkKSAmJgorICAgICAgICAoIShwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT5yYXcpKSkKKyAgICAgICAgcGZpbGVfaW5femlwX3JlYWRfaW5mby0+c3RyZWFtLmF2YWlsX291dCA9CisgICAgICAgICAgICAodUludClwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT5yZXN0X3JlYWRfdW5jb21wcmVzc2VkOworCisgICAgaWYgKChsZW4+cGZpbGVfaW5femlwX3JlYWRfaW5mby0+cmVzdF9yZWFkX2NvbXByZXNzZWQrCisgICAgICAgICAgIHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPnN0cmVhbS5hdmFpbF9pbikgJiYKKyAgICAgICAgIChwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT5yYXcpKQorICAgICAgICBwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT5zdHJlYW0uYXZhaWxfb3V0ID0KKyAgICAgICAgICAgICh1SW50KXBmaWxlX2luX3ppcF9yZWFkX2luZm8tPnJlc3RfcmVhZF9jb21wcmVzc2VkKworICAgICAgICAgICAgcGZpbGVfaW5femlwX3JlYWRfaW5mby0+c3RyZWFtLmF2YWlsX2luOworCisgICAgd2hpbGUgKHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPnN0cmVhbS5hdmFpbF9vdXQ+MCkKKyAgICB7CisgICAgICAgIGlmICgocGZpbGVfaW5femlwX3JlYWRfaW5mby0+c3RyZWFtLmF2YWlsX2luPT0wKSAmJgorICAgICAgICAgICAgKHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPnJlc3RfcmVhZF9jb21wcmVzc2VkPjApKQorICAgICAgICB7CisgICAgICAgICAgICB1SW50IHVSZWFkVGhpcyA9IFVOWl9CVUZTSVpFOworICAgICAgICAgICAgaWYgKHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPnJlc3RfcmVhZF9jb21wcmVzc2VkPHVSZWFkVGhpcykKKyAgICAgICAgICAgICAgICB1UmVhZFRoaXMgPSAodUludClwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT5yZXN0X3JlYWRfY29tcHJlc3NlZDsKKyAgICAgICAgICAgIGlmICh1UmVhZFRoaXMgPT0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gVU5aX0VPRjsKKyAgICAgICAgICAgIGlmIChaU0VFSzY0KHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPnpfZmlsZWZ1bmMsCisgICAgICAgICAgICAgICAgICAgICAgcGZpbGVfaW5femlwX3JlYWRfaW5mby0+ZmlsZXN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICBwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT5wb3NfaW5femlwZmlsZSArCisgICAgICAgICAgICAgICAgICAgICAgICAgcGZpbGVfaW5femlwX3JlYWRfaW5mby0+Ynl0ZV9iZWZvcmVfdGhlX3ppcGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgWkxJQl9GSUxFRlVOQ19TRUVLX1NFVCkhPTApCisgICAgICAgICAgICAgICAgcmV0dXJuIFVOWl9FUlJOTzsKKyAgICAgICAgICAgIGlmIChaUkVBRDY0KHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPnpfZmlsZWZ1bmMsCisgICAgICAgICAgICAgICAgICAgICAgcGZpbGVfaW5femlwX3JlYWRfaW5mby0+ZmlsZXN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICBwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT5yZWFkX2J1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICB1UmVhZFRoaXMpIT11UmVhZFRoaXMpCisgICAgICAgICAgICAgICAgcmV0dXJuIFVOWl9FUlJOTzsKKworCisjICAgICAgICAgICAgaWZuZGVmIE5PVU5DUllQVAorICAgICAgICAgICAgaWYocy0+ZW5jcnlwdGVkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVJbnQgaTsKKyAgICAgICAgICAgICAgICBmb3IoaT0wO2k8dVJlYWRUaGlzO2krKykKKyAgICAgICAgICAgICAgICAgIHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPnJlYWRfYnVmZmVyW2ldID0KKyAgICAgICAgICAgICAgICAgICAgICB6ZGVjb2RlKHMtPmtleXMscy0+cGNyY18zMl90YWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT5yZWFkX2J1ZmZlcltpXSk7CisgICAgICAgICAgICB9CisjICAgICAgICAgICAgZW5kaWYKKworCisgICAgICAgICAgICBwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT5wb3NfaW5femlwZmlsZSArPSB1UmVhZFRoaXM7CisKKyAgICAgICAgICAgIHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPnJlc3RfcmVhZF9jb21wcmVzc2VkLT11UmVhZFRoaXM7CisKKyAgICAgICAgICAgIHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPnN0cmVhbS5uZXh0X2luID0KKyAgICAgICAgICAgICAgICAoQnl0ZWYqKXBmaWxlX2luX3ppcF9yZWFkX2luZm8tPnJlYWRfYnVmZmVyOworICAgICAgICAgICAgcGZpbGVfaW5femlwX3JlYWRfaW5mby0+c3RyZWFtLmF2YWlsX2luID0gKHVJbnQpdVJlYWRUaGlzOworICAgICAgICB9CisKKyAgICAgICAgaWYgKChwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT5jb21wcmVzc2lvbl9tZXRob2Q9PTApIHx8IChwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT5yYXcpKQorICAgICAgICB7CisgICAgICAgICAgICB1SW50IHVEb0NvcHksaSA7CisKKyAgICAgICAgICAgIGlmICgocGZpbGVfaW5femlwX3JlYWRfaW5mby0+c3RyZWFtLmF2YWlsX2luID09IDApICYmCisgICAgICAgICAgICAgICAgKHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPnJlc3RfcmVhZF9jb21wcmVzc2VkID09IDApKQorICAgICAgICAgICAgICAgIHJldHVybiAoaVJlYWQ9PTApID8gVU5aX0VPRiA6IChpbnQpaVJlYWQ7CisKKyAgICAgICAgICAgIGlmIChwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT5zdHJlYW0uYXZhaWxfb3V0IDwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT5zdHJlYW0uYXZhaWxfaW4pCisgICAgICAgICAgICAgICAgdURvQ29weSA9IHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPnN0cmVhbS5hdmFpbF9vdXQgOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHVEb0NvcHkgPSBwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT5zdHJlYW0uYXZhaWxfaW4gOworCisgICAgICAgICAgICBmb3IgKGk9MDtpPHVEb0NvcHk7aSsrKQorICAgICAgICAgICAgICAgICoocGZpbGVfaW5femlwX3JlYWRfaW5mby0+c3RyZWFtLm5leHRfb3V0K2kpID0KKyAgICAgICAgICAgICAgICAgICAgICAgICoocGZpbGVfaW5femlwX3JlYWRfaW5mby0+c3RyZWFtLm5leHRfaW4raSk7CisKKyAgICAgICAgICAgIHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPnRvdGFsX291dF82NCA9IHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPnRvdGFsX291dF82NCArIHVEb0NvcHk7CisKKyAgICAgICAgICAgIHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPmNyYzMyID0gY3JjMzIocGZpbGVfaW5femlwX3JlYWRfaW5mby0+Y3JjMzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPnN0cmVhbS5uZXh0X291dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdURvQ29weSk7CisgICAgICAgICAgICBwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT5yZXN0X3JlYWRfdW5jb21wcmVzc2VkLT11RG9Db3B5OworICAgICAgICAgICAgcGZpbGVfaW5femlwX3JlYWRfaW5mby0+c3RyZWFtLmF2YWlsX2luIC09IHVEb0NvcHk7CisgICAgICAgICAgICBwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT5zdHJlYW0uYXZhaWxfb3V0IC09IHVEb0NvcHk7CisgICAgICAgICAgICBwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT5zdHJlYW0ubmV4dF9vdXQgKz0gdURvQ29weTsKKyAgICAgICAgICAgIHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPnN0cmVhbS5uZXh0X2luICs9IHVEb0NvcHk7CisgICAgICAgICAgICBwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT5zdHJlYW0udG90YWxfb3V0ICs9IHVEb0NvcHk7CisgICAgICAgICAgICBpUmVhZCArPSB1RG9Db3B5OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPmNvbXByZXNzaW9uX21ldGhvZD09Wl9CWklQMkVEKQorICAgICAgICB7CisjaWZkZWYgSEFWRV9CWklQMgorICAgICAgICAgICAgdUxvbmcgdVRvdGFsT3V0QmVmb3JlLHVUb3RhbE91dEFmdGVyOworICAgICAgICAgICAgY29uc3QgQnl0ZWYgKmJ1ZkJlZm9yZTsKKyAgICAgICAgICAgIHVMb25nIHVPdXRUaGlzOworCisgICAgICAgICAgICBwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT5ic3RyZWFtLm5leHRfaW4gICAgICAgID0gKGNoYXIqKXBmaWxlX2luX3ppcF9yZWFkX2luZm8tPnN0cmVhbS5uZXh0X2luOworICAgICAgICAgICAgcGZpbGVfaW5femlwX3JlYWRfaW5mby0+YnN0cmVhbS5hdmFpbF9pbiAgICAgICA9IHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPnN0cmVhbS5hdmFpbF9pbjsKKyAgICAgICAgICAgIHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPmJzdHJlYW0udG90YWxfaW5fbG8zMiAgPSBwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT5zdHJlYW0udG90YWxfaW47CisgICAgICAgICAgICBwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT5ic3RyZWFtLnRvdGFsX2luX2hpMzIgID0gMDsKKyAgICAgICAgICAgIHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPmJzdHJlYW0ubmV4dF9vdXQgICAgICAgPSAoY2hhciopcGZpbGVfaW5femlwX3JlYWRfaW5mby0+c3RyZWFtLm5leHRfb3V0OworICAgICAgICAgICAgcGZpbGVfaW5femlwX3JlYWRfaW5mby0+YnN0cmVhbS5hdmFpbF9vdXQgICAgICA9IHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPnN0cmVhbS5hdmFpbF9vdXQ7CisgICAgICAgICAgICBwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT5ic3RyZWFtLnRvdGFsX291dF9sbzMyID0gcGZpbGVfaW5femlwX3JlYWRfaW5mby0+c3RyZWFtLnRvdGFsX291dDsKKyAgICAgICAgICAgIHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPmJzdHJlYW0udG90YWxfb3V0X2hpMzIgPSAwOworCisgICAgICAgICAgICB1VG90YWxPdXRCZWZvcmUgPSBwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT5ic3RyZWFtLnRvdGFsX291dF9sbzMyOworICAgICAgICAgICAgYnVmQmVmb3JlID0gKGNvbnN0IEJ5dGVmICopcGZpbGVfaW5femlwX3JlYWRfaW5mby0+YnN0cmVhbS5uZXh0X291dDsKKworICAgICAgICAgICAgZXJyPUJaMl9iekRlY29tcHJlc3MoJnBmaWxlX2luX3ppcF9yZWFkX2luZm8tPmJzdHJlYW0pOworCisgICAgICAgICAgICB1VG90YWxPdXRBZnRlciA9IHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPmJzdHJlYW0udG90YWxfb3V0X2xvMzI7CisgICAgICAgICAgICB1T3V0VGhpcyA9IHVUb3RhbE91dEFmdGVyLXVUb3RhbE91dEJlZm9yZTsKKworICAgICAgICAgICAgcGZpbGVfaW5femlwX3JlYWRfaW5mby0+dG90YWxfb3V0XzY0ID0gcGZpbGVfaW5femlwX3JlYWRfaW5mby0+dG90YWxfb3V0XzY0ICsgdU91dFRoaXM7CisKKyAgICAgICAgICAgIHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPmNyYzMyID0gY3JjMzIocGZpbGVfaW5femlwX3JlYWRfaW5mby0+Y3JjMzIsYnVmQmVmb3JlLCAodUludCkodU91dFRoaXMpKTsKKyAgICAgICAgICAgIHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPnJlc3RfcmVhZF91bmNvbXByZXNzZWQgLT0gdU91dFRoaXM7CisgICAgICAgICAgICBpUmVhZCArPSAodUludCkodVRvdGFsT3V0QWZ0ZXIgLSB1VG90YWxPdXRCZWZvcmUpOworCisgICAgICAgICAgICBwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT5zdHJlYW0ubmV4dF9pbiAgID0gKEJ5dGVmKilwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT5ic3RyZWFtLm5leHRfaW47CisgICAgICAgICAgICBwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT5zdHJlYW0uYXZhaWxfaW4gID0gcGZpbGVfaW5femlwX3JlYWRfaW5mby0+YnN0cmVhbS5hdmFpbF9pbjsKKyAgICAgICAgICAgIHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPnN0cmVhbS50b3RhbF9pbiAgPSBwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT5ic3RyZWFtLnRvdGFsX2luX2xvMzI7CisgICAgICAgICAgICBwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT5zdHJlYW0ubmV4dF9vdXQgID0gKEJ5dGVmKilwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT5ic3RyZWFtLm5leHRfb3V0OworICAgICAgICAgICAgcGZpbGVfaW5femlwX3JlYWRfaW5mby0+c3RyZWFtLmF2YWlsX291dCA9IHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPmJzdHJlYW0uYXZhaWxfb3V0OworICAgICAgICAgICAgcGZpbGVfaW5femlwX3JlYWRfaW5mby0+c3RyZWFtLnRvdGFsX291dCA9IHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPmJzdHJlYW0udG90YWxfb3V0X2xvMzI7CisKKyAgICAgICAgICAgIGlmIChlcnI9PUJaX1NUUkVBTV9FTkQpCisgICAgICAgICAgICAgIHJldHVybiAoaVJlYWQ9PTApID8gVU5aX0VPRiA6IGlSZWFkOworICAgICAgICAgICAgaWYgKGVyciE9QlpfT0spCisgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgICAgIH0gLy8gZW5kIFpfQlpJUDJFRAorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFpQT1M2NF9UIHVUb3RhbE91dEJlZm9yZSx1VG90YWxPdXRBZnRlcjsKKyAgICAgICAgICAgIGNvbnN0IEJ5dGVmICpidWZCZWZvcmU7CisgICAgICAgICAgICBaUE9TNjRfVCB1T3V0VGhpczsKKyAgICAgICAgICAgIGludCBmbHVzaD1aX1NZTkNfRkxVU0g7CisKKyAgICAgICAgICAgIHVUb3RhbE91dEJlZm9yZSA9IHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPnN0cmVhbS50b3RhbF9vdXQ7CisgICAgICAgICAgICBidWZCZWZvcmUgPSBwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT5zdHJlYW0ubmV4dF9vdXQ7CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICBpZiAoKHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPnJlc3RfcmVhZF91bmNvbXByZXNzZWQgPT0KKyAgICAgICAgICAgICAgICAgICAgIHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPnN0cmVhbS5hdmFpbF9vdXQpICYmCisgICAgICAgICAgICAgICAgKHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPnJlc3RfcmVhZF9jb21wcmVzc2VkID09IDApKQorICAgICAgICAgICAgICAgIGZsdXNoID0gWl9GSU5JU0g7CisgICAgICAgICAgICAqLworICAgICAgICAgICAgZXJyPWluZmxhdGUoJnBmaWxlX2luX3ppcF9yZWFkX2luZm8tPnN0cmVhbSxmbHVzaCk7CisKKyAgICAgICAgICAgIGlmICgoZXJyPj0wKSAmJiAocGZpbGVfaW5femlwX3JlYWRfaW5mby0+c3RyZWFtLm1zZyE9TlVMTCkpCisgICAgICAgICAgICAgIGVyciA9IFpfREFUQV9FUlJPUjsKKworICAgICAgICAgICAgdVRvdGFsT3V0QWZ0ZXIgPSBwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT5zdHJlYW0udG90YWxfb3V0OworICAgICAgICAgICAgLyogRGV0ZWN0IG92ZXJmbG93LCBiZWNhdXNlIHpfc3RyZWFtLnRvdGFsX291dCBpcyB1TG9uZyAoMzIgYml0cykgKi8KKyAgICAgICAgICAgIGlmICh1VG90YWxPdXRBZnRlcjx1VG90YWxPdXRCZWZvcmUpCisgICAgICAgICAgICAgICAgdVRvdGFsT3V0QWZ0ZXIgKz0gMUxMIDw8IDMyOyAvKiBBZGQgbWF4aW11bSB2YWx1ZSBvZiB1TG9uZyArIDEgKi8KKyAgICAgICAgICAgIHVPdXRUaGlzID0gdVRvdGFsT3V0QWZ0ZXItdVRvdGFsT3V0QmVmb3JlOworCisgICAgICAgICAgICBwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT50b3RhbF9vdXRfNjQgPSBwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT50b3RhbF9vdXRfNjQgKyB1T3V0VGhpczsKKworICAgICAgICAgICAgcGZpbGVfaW5femlwX3JlYWRfaW5mby0+Y3JjMzIgPQorICAgICAgICAgICAgICAgIGNyYzMyKHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPmNyYzMyLGJ1ZkJlZm9yZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh1SW50KSh1T3V0VGhpcykpOworCisgICAgICAgICAgICBwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT5yZXN0X3JlYWRfdW5jb21wcmVzc2VkIC09CisgICAgICAgICAgICAgICAgdU91dFRoaXM7CisKKyAgICAgICAgICAgIGlSZWFkICs9ICh1SW50KSh1VG90YWxPdXRBZnRlciAtIHVUb3RhbE91dEJlZm9yZSk7CisKKyAgICAgICAgICAgIGlmIChlcnI9PVpfU1RSRUFNX0VORCkKKyAgICAgICAgICAgICAgICByZXR1cm4gKGlSZWFkPT0wKSA/IFVOWl9FT0YgOiAoaW50KWlSZWFkOworICAgICAgICAgICAgaWYgKGVyciE9Wl9PSykKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChlcnI9PVpfT0spCisgICAgICAgIHJldHVybiAoaW50KWlSZWFkOworICAgIHJldHVybiBlcnI7Cit9CisKKworLyoKKyAgR2l2ZSB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB1bmNvbXByZXNzZWQgZGF0YQorKi8KK2V4dGVybiB6X29mZl90IFpFWFBPUlQgdW56dGVsbCAodW56RmlsZSBmaWxlKQoreworICAgIHVuejY0X3MqIHM7CisgICAgZmlsZV9pbl96aXA2NF9yZWFkX2luZm9fcyogcGZpbGVfaW5femlwX3JlYWRfaW5mbzsKKyAgICBpZiAoZmlsZT09TlVMTCkKKyAgICAgICAgcmV0dXJuIFVOWl9QQVJBTUVSUk9SOworICAgIHM9KHVuejY0X3MqKWZpbGU7CisgICAgcGZpbGVfaW5femlwX3JlYWRfaW5mbz1zLT5wZmlsZV9pbl96aXBfcmVhZDsKKworICAgIGlmIChwZmlsZV9pbl96aXBfcmVhZF9pbmZvPT1OVUxMKQorICAgICAgICByZXR1cm4gVU5aX1BBUkFNRVJST1I7CisKKyAgICByZXR1cm4gKHpfb2ZmX3QpcGZpbGVfaW5femlwX3JlYWRfaW5mby0+c3RyZWFtLnRvdGFsX291dDsKK30KKworZXh0ZXJuIFpQT1M2NF9UIFpFWFBPUlQgdW56dGVsbDY0ICh1bnpGaWxlIGZpbGUpCit7CisKKyAgICB1bno2NF9zKiBzOworICAgIGZpbGVfaW5femlwNjRfcmVhZF9pbmZvX3MqIHBmaWxlX2luX3ppcF9yZWFkX2luZm87CisgICAgaWYgKGZpbGU9PU5VTEwpCisgICAgICAgIHJldHVybiAoWlBPUzY0X1QpLTE7CisgICAgcz0odW56NjRfcyopZmlsZTsKKyAgICBwZmlsZV9pbl96aXBfcmVhZF9pbmZvPXMtPnBmaWxlX2luX3ppcF9yZWFkOworCisgICAgaWYgKHBmaWxlX2luX3ppcF9yZWFkX2luZm89PU5VTEwpCisgICAgICAgIHJldHVybiAoWlBPUzY0X1QpLTE7CisKKyAgICByZXR1cm4gcGZpbGVfaW5femlwX3JlYWRfaW5mby0+dG90YWxfb3V0XzY0OworfQorCisKKy8qCisgIHJldHVybiAxIGlmIHRoZSBlbmQgb2YgZmlsZSB3YXMgcmVhY2hlZCwgMCBlbHNld2hlcmUKKyovCitleHRlcm4gaW50IFpFWFBPUlQgdW56ZW9mICh1bnpGaWxlIGZpbGUpCit7CisgICAgdW56NjRfcyogczsKKyAgICBmaWxlX2luX3ppcDY0X3JlYWRfaW5mb19zKiBwZmlsZV9pbl96aXBfcmVhZF9pbmZvOworICAgIGlmIChmaWxlPT1OVUxMKQorICAgICAgICByZXR1cm4gVU5aX1BBUkFNRVJST1I7CisgICAgcz0odW56NjRfcyopZmlsZTsKKyAgICBwZmlsZV9pbl96aXBfcmVhZF9pbmZvPXMtPnBmaWxlX2luX3ppcF9yZWFkOworCisgICAgaWYgKHBmaWxlX2luX3ppcF9yZWFkX2luZm89PU5VTEwpCisgICAgICAgIHJldHVybiBVTlpfUEFSQU1FUlJPUjsKKworICAgIGlmIChwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT5yZXN0X3JlYWRfdW5jb21wcmVzc2VkID09IDApCisgICAgICAgIHJldHVybiAxOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKKworCisvKgorUmVhZCBleHRyYSBmaWVsZCBmcm9tIHRoZSBjdXJyZW50IGZpbGUgKG9wZW5lZCBieSB1bnpPcGVuQ3VycmVudEZpbGUpCitUaGlzIGlzIHRoZSBsb2NhbC1oZWFkZXIgdmVyc2lvbiBvZiB0aGUgZXh0cmEgZmllbGQgKHNvbWV0aW1lcywgdGhlcmUgaXMKK21vcmUgaW5mbyBpbiB0aGUgbG9jYWwtaGVhZGVyIHZlcnNpb24gdGhhbiBpbiB0aGUgY2VudHJhbC1oZWFkZXIpCisKKyAgaWYgYnVmPT1OVUxMLCBpdCByZXR1cm4gdGhlIHNpemUgb2YgdGhlIGxvY2FsIGV4dHJhIGZpZWxkIHRoYXQgY2FuIGJlIHJlYWQKKworICBpZiBidWYhPU5VTEwsIGxlbiBpcyB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyLCB0aGUgZXh0cmEgaGVhZGVyIGlzIGNvcGllZCBpbgorICAgIGJ1Zi4KKyAgdGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBpbiBidWYsIG9yIChpZiA8MCkKKyAgICB0aGUgZXJyb3IgY29kZQorKi8KK2V4dGVybiBpbnQgWkVYUE9SVCB1bnpHZXRMb2NhbEV4dHJhZmllbGQgKHVuekZpbGUgZmlsZSwgdm9pZHAgYnVmLCB1bnNpZ25lZCBsZW4pCit7CisgICAgdW56NjRfcyogczsKKyAgICBmaWxlX2luX3ppcDY0X3JlYWRfaW5mb19zKiBwZmlsZV9pbl96aXBfcmVhZF9pbmZvOworICAgIHVJbnQgcmVhZF9ub3c7CisgICAgWlBPUzY0X1Qgc2l6ZV90b19yZWFkOworCisgICAgaWYgKGZpbGU9PU5VTEwpCisgICAgICAgIHJldHVybiBVTlpfUEFSQU1FUlJPUjsKKyAgICBzPSh1bno2NF9zKilmaWxlOworICAgIHBmaWxlX2luX3ppcF9yZWFkX2luZm89cy0+cGZpbGVfaW5femlwX3JlYWQ7CisKKyAgICBpZiAocGZpbGVfaW5femlwX3JlYWRfaW5mbz09TlVMTCkKKyAgICAgICAgcmV0dXJuIFVOWl9QQVJBTUVSUk9SOworCisgICAgc2l6ZV90b19yZWFkID0gKHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPnNpemVfbG9jYWxfZXh0cmFmaWVsZCAtCisgICAgICAgICAgICAgICAgcGZpbGVfaW5femlwX3JlYWRfaW5mby0+cG9zX2xvY2FsX2V4dHJhZmllbGQpOworCisgICAgaWYgKGJ1Zj09TlVMTCkKKyAgICAgICAgcmV0dXJuIChpbnQpc2l6ZV90b19yZWFkOworCisgICAgaWYgKGxlbj5zaXplX3RvX3JlYWQpCisgICAgICAgIHJlYWRfbm93ID0gKHVJbnQpc2l6ZV90b19yZWFkOworICAgIGVsc2UKKyAgICAgICAgcmVhZF9ub3cgPSAodUludClsZW4gOworCisgICAgaWYgKHJlYWRfbm93PT0wKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChaU0VFSzY0KHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPnpfZmlsZWZ1bmMsCisgICAgICAgICAgICAgIHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPmZpbGVzdHJlYW0sCisgICAgICAgICAgICAgIHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPm9mZnNldF9sb2NhbF9leHRyYWZpZWxkICsKKyAgICAgICAgICAgICAgcGZpbGVfaW5femlwX3JlYWRfaW5mby0+cG9zX2xvY2FsX2V4dHJhZmllbGQsCisgICAgICAgICAgICAgIFpMSUJfRklMRUZVTkNfU0VFS19TRVQpIT0wKQorICAgICAgICByZXR1cm4gVU5aX0VSUk5POworCisgICAgaWYgKFpSRUFENjQocGZpbGVfaW5femlwX3JlYWRfaW5mby0+el9maWxlZnVuYywKKyAgICAgICAgICAgICAgcGZpbGVfaW5femlwX3JlYWRfaW5mby0+ZmlsZXN0cmVhbSwKKyAgICAgICAgICAgICAgYnVmLHJlYWRfbm93KSE9cmVhZF9ub3cpCisgICAgICAgIHJldHVybiBVTlpfRVJSTk87CisKKyAgICByZXR1cm4gKGludClyZWFkX25vdzsKK30KKworLyoKKyAgQ2xvc2UgdGhlIGZpbGUgaW4gemlwIG9wZW5lZCB3aXRoIHVuek9wZW5DdXJyZW50RmlsZQorICBSZXR1cm4gVU5aX0NSQ0VSUk9SIGlmIGFsbCB0aGUgZmlsZSB3YXMgcmVhZCBidXQgdGhlIENSQyBpcyBub3QgZ29vZAorKi8KK2V4dGVybiBpbnQgWkVYUE9SVCB1bnpDbG9zZUN1cnJlbnRGaWxlICh1bnpGaWxlIGZpbGUpCit7CisgICAgaW50IGVycj1VTlpfT0s7CisKKyAgICB1bno2NF9zKiBzOworICAgIGZpbGVfaW5femlwNjRfcmVhZF9pbmZvX3MqIHBmaWxlX2luX3ppcF9yZWFkX2luZm87CisgICAgaWYgKGZpbGU9PU5VTEwpCisgICAgICAgIHJldHVybiBVTlpfUEFSQU1FUlJPUjsKKyAgICBzPSh1bno2NF9zKilmaWxlOworICAgIHBmaWxlX2luX3ppcF9yZWFkX2luZm89cy0+cGZpbGVfaW5femlwX3JlYWQ7CisKKyAgICBpZiAocGZpbGVfaW5femlwX3JlYWRfaW5mbz09TlVMTCkKKyAgICAgICAgcmV0dXJuIFVOWl9QQVJBTUVSUk9SOworCisKKyAgICBpZiAoKHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPnJlc3RfcmVhZF91bmNvbXByZXNzZWQgPT0gMCkgJiYKKyAgICAgICAgKCFwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT5yYXcpKQorICAgIHsKKyAgICAgICAgaWYgKHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPmNyYzMyICE9IHBmaWxlX2luX3ppcF9yZWFkX2luZm8tPmNyYzMyX3dhaXQpCisgICAgICAgICAgICBlcnI9VU5aX0NSQ0VSUk9SOworICAgIH0KKworCisgICAgVFJZRlJFRShwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT5yZWFkX2J1ZmZlcik7CisgICAgcGZpbGVfaW5femlwX3JlYWRfaW5mby0+cmVhZF9idWZmZXIgPSBOVUxMOworICAgIGlmIChwZmlsZV9pbl96aXBfcmVhZF9pbmZvLT5zdHJlYW1faW5pdGlhbGlzZWQgPT0gWl9ERUZMQVRFRCkKKyAgICAgICAgaW5mbGF0ZUVuZCgmcGZpbGVfaW5femlwX3JlYWRfaW5mby0+c3RyZWFtKTsKKyNpZmRlZiBIQVZFX0JaSVAyCisgICAgZWxzZSBpZiAocGZpbGVfaW5femlwX3JlYWRfaW5mby0+c3RyZWFtX2luaXRpYWxpc2VkID09IFpfQlpJUDJFRCkKKyAgICAgICAgQloyX2J6RGVjb21wcmVzc0VuZCgmcGZpbGVfaW5femlwX3JlYWRfaW5mby0+YnN0cmVhbSk7CisjZW5kaWYKKworCisgICAgcGZpbGVfaW5femlwX3JlYWRfaW5mby0+c3RyZWFtX2luaXRpYWxpc2VkID0gMDsKKyAgICBUUllGUkVFKHBmaWxlX2luX3ppcF9yZWFkX2luZm8pOworCisgICAgcy0+cGZpbGVfaW5femlwX3JlYWQ9TlVMTDsKKworICAgIHJldHVybiBlcnI7Cit9CisKKworLyoKKyAgR2V0IHRoZSBnbG9iYWwgY29tbWVudCBzdHJpbmcgb2YgdGhlIFppcEZpbGUsIGluIHRoZSBzekNvbW1lbnQgYnVmZmVyLgorICB1U2l6ZUJ1ZiBpcyB0aGUgc2l6ZSBvZiB0aGUgc3pDb21tZW50IGJ1ZmZlci4KKyAgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZSBjb3BpZWQgb3IgYW4gZXJyb3IgY29kZSA8MAorKi8KK2V4dGVybiBpbnQgWkVYUE9SVCB1bnpHZXRHbG9iYWxDb21tZW50ICh1bnpGaWxlIGZpbGUsIGNoYXIgKiBzekNvbW1lbnQsIHVMb25nIHVTaXplQnVmKQoreworICAgIHVuejY0X3MqIHM7CisgICAgdUxvbmcgdVJlYWRUaGlzIDsKKyAgICBpZiAoZmlsZT09TlVMTCkKKyAgICAgICAgcmV0dXJuIChpbnQpVU5aX1BBUkFNRVJST1I7CisgICAgcz0odW56NjRfcyopZmlsZTsKKworICAgIHVSZWFkVGhpcyA9IHVTaXplQnVmOworICAgIGlmICh1UmVhZFRoaXM+cy0+Z2kuc2l6ZV9jb21tZW50KQorICAgICAgICB1UmVhZFRoaXMgPSBzLT5naS5zaXplX2NvbW1lbnQ7CisKKyAgICBpZiAoWlNFRUs2NChzLT56X2ZpbGVmdW5jLHMtPmZpbGVzdHJlYW0scy0+Y2VudHJhbF9wb3MrMjIsWkxJQl9GSUxFRlVOQ19TRUVLX1NFVCkhPTApCisgICAgICAgIHJldHVybiBVTlpfRVJSTk87CisKKyAgICBpZiAodVJlYWRUaGlzPjApCisgICAgeworICAgICAgKnN6Q29tbWVudD0nXDAnOworICAgICAgaWYgKFpSRUFENjQocy0+el9maWxlZnVuYyxzLT5maWxlc3RyZWFtLHN6Q29tbWVudCx1UmVhZFRoaXMpIT11UmVhZFRoaXMpCisgICAgICAgIHJldHVybiBVTlpfRVJSTk87CisgICAgfQorCisgICAgaWYgKChzekNvbW1lbnQgIT0gTlVMTCkgJiYgKHVTaXplQnVmID4gcy0+Z2kuc2l6ZV9jb21tZW50KSkKKyAgICAgICAgKihzekNvbW1lbnQrcy0+Z2kuc2l6ZV9jb21tZW50KT0nXDAnOworICAgIHJldHVybiAoaW50KXVSZWFkVGhpczsKK30KKworLyogQWRkaXRpb25zIGJ5IFJYICcyMDA0ICovCitleHRlcm4gWlBPUzY0X1QgWkVYUE9SVCB1bnpHZXRPZmZzZXQ2NCh1bnpGaWxlIGZpbGUpCit7CisgICAgdW56NjRfcyogczsKKworICAgIGlmIChmaWxlPT1OVUxMKQorICAgICAgICAgIHJldHVybiAwOyAvL1VOWl9QQVJBTUVSUk9SOworICAgIHM9KHVuejY0X3MqKWZpbGU7CisgICAgaWYgKCFzLT5jdXJyZW50X2ZpbGVfb2spCisgICAgICByZXR1cm4gMDsKKyAgICBpZiAocy0+Z2kubnVtYmVyX2VudHJ5ICE9IDAgJiYgcy0+Z2kubnVtYmVyX2VudHJ5ICE9IDB4ZmZmZikKKyAgICAgIGlmIChzLT5udW1fZmlsZT09cy0+Z2kubnVtYmVyX2VudHJ5KQorICAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHMtPnBvc19pbl9jZW50cmFsX2RpcjsKK30KKworZXh0ZXJuIHVMb25nIFpFWFBPUlQgdW56R2V0T2Zmc2V0ICh1bnpGaWxlIGZpbGUpCit7CisgICAgWlBPUzY0X1Qgb2Zmc2V0NjQ7CisKKyAgICBpZiAoZmlsZT09TlVMTCkKKyAgICAgICAgICByZXR1cm4gMDsgLy9VTlpfUEFSQU1FUlJPUjsKKyAgICBvZmZzZXQ2NCA9IHVuekdldE9mZnNldDY0KGZpbGUpOworICAgIHJldHVybiAodUxvbmcpb2Zmc2V0NjQ7Cit9CisKK2V4dGVybiBpbnQgWkVYUE9SVCB1bnpTZXRPZmZzZXQ2NCh1bnpGaWxlIGZpbGUsIFpQT1M2NF9UIHBvcykKK3sKKyAgICB1bno2NF9zKiBzOworICAgIGludCBlcnI7CisKKyAgICBpZiAoZmlsZT09TlVMTCkKKyAgICAgICAgcmV0dXJuIFVOWl9QQVJBTUVSUk9SOworICAgIHM9KHVuejY0X3MqKWZpbGU7CisKKyAgICBzLT5wb3NfaW5fY2VudHJhbF9kaXIgPSBwb3M7CisgICAgcy0+bnVtX2ZpbGUgPSBzLT5naS5udW1iZXJfZW50cnk7ICAgICAgLyogaGFjayAqLworICAgIGVyciA9IHVuejY0bG9jYWxfR2V0Q3VycmVudEZpbGVJbmZvSW50ZXJuYWwoZmlsZSwmcy0+Y3VyX2ZpbGVfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcy0+Y3VyX2ZpbGVfaW5mb19pbnRlcm5hbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLDAsTlVMTCwwLE5VTEwsMCk7CisgICAgcy0+Y3VycmVudF9maWxlX29rID0gKGVyciA9PSBVTlpfT0spOworICAgIHJldHVybiBlcnI7Cit9CisKK2V4dGVybiBpbnQgWkVYUE9SVCB1bnpTZXRPZmZzZXQgKHVuekZpbGUgZmlsZSwgdUxvbmcgcG9zKQoreworICAgIHJldHVybiB1bnpTZXRPZmZzZXQ2NChmaWxlLHBvcyk7Cit9CmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi9taW5pemlwL3VuemlwLmggYi9zcmMvY29udHJpYi9taW5pemlwL3VuemlwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY5NWU5NAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb250cmliL21pbml6aXAvdW56aXAuaApAQCAtMCwwICsxLDQzNyBAQAorLyogdW56aXAuaCAtLSBJTyBmb3IgdW5jb21wcmVzcyAuemlwIGZpbGVzIHVzaW5nIHpsaWIKKyAgIFZlcnNpb24gMS4xLCBGZWJydWFyeSAxNGgsIDIwMTAKKyAgIHBhcnQgb2YgdGhlIE1pbmlaaXAgcHJvamVjdCAtICggaHR0cDovL3d3dy53aW5pbWFnZS5jb20vekxpYkRsbC9taW5pemlwLmh0bWwgKQorCisgICAgICAgICBDb3B5cmlnaHQgKEMpIDE5OTgtMjAxMCBHaWxsZXMgVm9sbGFudCAobWluaXppcCkgKCBodHRwOi8vd3d3LndpbmltYWdlLmNvbS96TGliRGxsL21pbml6aXAuaHRtbCApCisKKyAgICAgICAgIE1vZGlmaWNhdGlvbnMgb2YgVW56aXAgZm9yIFppcDY0CisgICAgICAgICBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBFdmVuIFJvdWF1bHQKKworICAgICAgICAgTW9kaWZpY2F0aW9ucyBmb3IgWmlwNjQgc3VwcG9ydCBvbiBib3RoIHppcCBhbmQgdW56aXAKKyAgICAgICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIE1hdGhpYXMgU3ZlbnNzb24gKCBodHRwOi8vcmVzdWx0NDIuY29tICkKKworICAgICAgICAgRm9yIG1vcmUgaW5mbyByZWFkIE1pbmlaaXBfaW5mby50eHQKKworICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAgQ29uZGl0aW9uIG9mIHVzZSBhbmQgZGlzdHJpYnV0aW9uIGFyZSB0aGUgc2FtZSB0aGFuIHpsaWIgOgorCisgIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkCisgIHdhcnJhbnR5LiAgSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMKKyAgYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS4KKworICBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSwKKyAgaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdAorICBmcmVlbHksIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKKyAgMS4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCBub3QKKyAgICAgY2xhaW0gdGhhdCB5b3Ugd3JvdGUgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLiBJZiB5b3UgdXNlIHRoaXMgc29mdHdhcmUKKyAgICAgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVjdCBkb2N1bWVudGF0aW9uIHdvdWxkIGJlCisgICAgIGFwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuCisgIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlCisgICAgIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4KKyAgMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi4KKworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgICBDaGFuZ2VzCisKKyAgICAgICAgU2VlIGhlYWRlciBvZiB1bnppcDY0LmMKKworKi8KKworI2lmbmRlZiBfdW56NjRfSAorI2RlZmluZSBfdW56NjRfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNpZm5kZWYgX1pMSUJfSAorI2luY2x1ZGUgInpsaWIuaCIKKyNlbmRpZgorCisjaWZuZGVmICBfWkxJQklPQVBJX0gKKyNpbmNsdWRlICJpb2FwaS5oIgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0JaSVAyCisjaW5jbHVkZSAiYnpsaWIuaCIKKyNlbmRpZgorCisjZGVmaW5lIFpfQlpJUDJFRCAxMgorCisjaWYgZGVmaW5lZChTVFJJQ1RVTlpJUCkgfHwgZGVmaW5lZChTVFJJQ1RaSVBVTlpJUCkKKy8qIGxpa2UgdGhlIFNUUklDVCBvZiBXSU4zMiwgd2UgZGVmaW5lIGEgcG9pbnRlciB0aGF0IGNhbm5vdCBiZSBjb252ZXJ0ZWQKKyAgICBmcm9tICh2b2lkKikgd2l0aG91dCBjYXN0ICovCit0eXBlZGVmIHN0cnVjdCBUYWd1bnpGaWxlX18geyBpbnQgdW51c2VkOyB9IHVuekZpbGVfXzsKK3R5cGVkZWYgdW56RmlsZV9fICp1bnpGaWxlOworI2Vsc2UKK3R5cGVkZWYgdm9pZHAgdW56RmlsZTsKKyNlbmRpZgorCisKKyNkZWZpbmUgVU5aX09LICAgICAgICAgICAgICAgICAgICAgICAgICAoMCkKKyNkZWZpbmUgVU5aX0VORF9PRl9MSVNUX09GX0ZJTEUgICAgICAgICAoLTEwMCkKKyNkZWZpbmUgVU5aX0VSUk5PICAgICAgICAgICAgICAgICAgICAgICAoWl9FUlJOTykKKyNkZWZpbmUgVU5aX0VPRiAgICAgICAgICAgICAgICAgICAgICAgICAoMCkKKyNkZWZpbmUgVU5aX1BBUkFNRVJST1IgICAgICAgICAgICAgICAgICAoLTEwMikKKyNkZWZpbmUgVU5aX0JBRFpJUEZJTEUgICAgICAgICAgICAgICAgICAoLTEwMykKKyNkZWZpbmUgVU5aX0lOVEVSTkFMRVJST1IgICAgICAgICAgICAgICAoLTEwNCkKKyNkZWZpbmUgVU5aX0NSQ0VSUk9SICAgICAgICAgICAgICAgICAgICAoLTEwNSkKKworLyogdG1fdW56IGNvbnRhaW4gZGF0ZS90aW1lIGluZm8gKi8KK3R5cGVkZWYgc3RydWN0IHRtX3Vuel9zCit7CisgICAgaW50IHRtX3NlYzsgICAgICAgICAgICAgLyogc2Vjb25kcyBhZnRlciB0aGUgbWludXRlIC0gWzAsNTldICovCisgICAgaW50IHRtX21pbjsgICAgICAgICAgICAgLyogbWludXRlcyBhZnRlciB0aGUgaG91ciAtIFswLDU5XSAqLworICAgIGludCB0bV9ob3VyOyAgICAgICAgICAgIC8qIGhvdXJzIHNpbmNlIG1pZG5pZ2h0IC0gWzAsMjNdICovCisgICAgaW50IHRtX21kYXk7ICAgICAgICAgICAgLyogZGF5IG9mIHRoZSBtb250aCAtIFsxLDMxXSAqLworICAgIGludCB0bV9tb247ICAgICAgICAgICAgIC8qIG1vbnRocyBzaW5jZSBKYW51YXJ5IC0gWzAsMTFdICovCisgICAgaW50IHRtX3llYXI7ICAgICAgICAgICAgLyogeWVhcnMgLSBbMTk4MC4uMjA0NF0gKi8KK30gdG1fdW56OworCisvKiB1bnpfZ2xvYmFsX2luZm8gc3RydWN0dXJlIGNvbnRhaW4gZ2xvYmFsIGRhdGEgYWJvdXQgdGhlIFpJUGZpbGUKKyAgIFRoZXNlIGRhdGEgY29tZXMgZnJvbSB0aGUgZW5kIG9mIGNlbnRyYWwgZGlyICovCit0eXBlZGVmIHN0cnVjdCB1bnpfZ2xvYmFsX2luZm82NF9zCit7CisgICAgWlBPUzY0X1QgbnVtYmVyX2VudHJ5OyAgICAgICAgIC8qIHRvdGFsIG51bWJlciBvZiBlbnRyaWVzIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNlbnRyYWwgZGlyIG9uIHRoaXMgZGlzayAqLworICAgIHVMb25nIHNpemVfY29tbWVudDsgICAgICAgICAvKiBzaXplIG9mIHRoZSBnbG9iYWwgY29tbWVudCBvZiB0aGUgemlwZmlsZSAqLworfSB1bnpfZ2xvYmFsX2luZm82NDsKKwordHlwZWRlZiBzdHJ1Y3QgdW56X2dsb2JhbF9pbmZvX3MKK3sKKyAgICB1TG9uZyBudW1iZXJfZW50cnk7ICAgICAgICAgLyogdG90YWwgbnVtYmVyIG9mIGVudHJpZXMgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY2VudHJhbCBkaXIgb24gdGhpcyBkaXNrICovCisgICAgdUxvbmcgc2l6ZV9jb21tZW50OyAgICAgICAgIC8qIHNpemUgb2YgdGhlIGdsb2JhbCBjb21tZW50IG9mIHRoZSB6aXBmaWxlICovCit9IHVuel9nbG9iYWxfaW5mbzsKKworLyogdW56X2ZpbGVfaW5mbyBjb250YWluIGluZm9ybWF0aW9uIGFib3V0IGEgZmlsZSBpbiB0aGUgemlwZmlsZSAqLwordHlwZWRlZiBzdHJ1Y3QgdW56X2ZpbGVfaW5mbzY0X3MKK3sKKyAgICB1TG9uZyB2ZXJzaW9uOyAgICAgICAgICAgICAgLyogdmVyc2lvbiBtYWRlIGJ5ICAgICAgICAgICAgICAgICAyIGJ5dGVzICovCisgICAgdUxvbmcgdmVyc2lvbl9uZWVkZWQ7ICAgICAgIC8qIHZlcnNpb24gbmVlZGVkIHRvIGV4dHJhY3QgICAgICAgMiBieXRlcyAqLworICAgIHVMb25nIGZsYWc7ICAgICAgICAgICAgICAgICAvKiBnZW5lcmFsIHB1cnBvc2UgYml0IGZsYWcgICAgICAgIDIgYnl0ZXMgKi8KKyAgICB1TG9uZyBjb21wcmVzc2lvbl9tZXRob2Q7ICAgLyogY29tcHJlc3Npb24gbWV0aG9kICAgICAgICAgICAgICAyIGJ5dGVzICovCisgICAgdUxvbmcgZG9zRGF0ZTsgICAgICAgICAgICAgIC8qIGxhc3QgbW9kIGZpbGUgZGF0ZSBpbiBEb3MgZm10ICAgNCBieXRlcyAqLworICAgIHVMb25nIGNyYzsgICAgICAgICAgICAgICAgICAvKiBjcmMtMzIgICAgICAgICAgICAgICAgICAgICAgICAgIDQgYnl0ZXMgKi8KKyAgICBaUE9TNjRfVCBjb21wcmVzc2VkX3NpemU7ICAgLyogY29tcHJlc3NlZCBzaXplICAgICAgICAgICAgICAgICA4IGJ5dGVzICovCisgICAgWlBPUzY0X1QgdW5jb21wcmVzc2VkX3NpemU7IC8qIHVuY29tcHJlc3NlZCBzaXplICAgICAgICAgICAgICAgOCBieXRlcyAqLworICAgIHVMb25nIHNpemVfZmlsZW5hbWU7ICAgICAgICAvKiBmaWxlbmFtZSBsZW5ndGggICAgICAgICAgICAgICAgIDIgYnl0ZXMgKi8KKyAgICB1TG9uZyBzaXplX2ZpbGVfZXh0cmE7ICAgICAgLyogZXh0cmEgZmllbGQgbGVuZ3RoICAgICAgICAgICAgICAyIGJ5dGVzICovCisgICAgdUxvbmcgc2l6ZV9maWxlX2NvbW1lbnQ7ICAgIC8qIGZpbGUgY29tbWVudCBsZW5ndGggICAgICAgICAgICAgMiBieXRlcyAqLworCisgICAgdUxvbmcgZGlza19udW1fc3RhcnQ7ICAgICAgIC8qIGRpc2sgbnVtYmVyIHN0YXJ0ICAgICAgICAgICAgICAgMiBieXRlcyAqLworICAgIHVMb25nIGludGVybmFsX2ZhOyAgICAgICAgICAvKiBpbnRlcm5hbCBmaWxlIGF0dHJpYnV0ZXMgICAgICAgIDIgYnl0ZXMgKi8KKyAgICB1TG9uZyBleHRlcm5hbF9mYTsgICAgICAgICAgLyogZXh0ZXJuYWwgZmlsZSBhdHRyaWJ1dGVzICAgICAgICA0IGJ5dGVzICovCisKKyAgICB0bV91bnogdG11X2RhdGU7Cit9IHVuel9maWxlX2luZm82NDsKKwordHlwZWRlZiBzdHJ1Y3QgdW56X2ZpbGVfaW5mb19zCit7CisgICAgdUxvbmcgdmVyc2lvbjsgICAgICAgICAgICAgIC8qIHZlcnNpb24gbWFkZSBieSAgICAgICAgICAgICAgICAgMiBieXRlcyAqLworICAgIHVMb25nIHZlcnNpb25fbmVlZGVkOyAgICAgICAvKiB2ZXJzaW9uIG5lZWRlZCB0byBleHRyYWN0ICAgICAgIDIgYnl0ZXMgKi8KKyAgICB1TG9uZyBmbGFnOyAgICAgICAgICAgICAgICAgLyogZ2VuZXJhbCBwdXJwb3NlIGJpdCBmbGFnICAgICAgICAyIGJ5dGVzICovCisgICAgdUxvbmcgY29tcHJlc3Npb25fbWV0aG9kOyAgIC8qIGNvbXByZXNzaW9uIG1ldGhvZCAgICAgICAgICAgICAgMiBieXRlcyAqLworICAgIHVMb25nIGRvc0RhdGU7ICAgICAgICAgICAgICAvKiBsYXN0IG1vZCBmaWxlIGRhdGUgaW4gRG9zIGZtdCAgIDQgYnl0ZXMgKi8KKyAgICB1TG9uZyBjcmM7ICAgICAgICAgICAgICAgICAgLyogY3JjLTMyICAgICAgICAgICAgICAgICAgICAgICAgICA0IGJ5dGVzICovCisgICAgdUxvbmcgY29tcHJlc3NlZF9zaXplOyAgICAgIC8qIGNvbXByZXNzZWQgc2l6ZSAgICAgICAgICAgICAgICAgNCBieXRlcyAqLworICAgIHVMb25nIHVuY29tcHJlc3NlZF9zaXplOyAgICAvKiB1bmNvbXByZXNzZWQgc2l6ZSAgICAgICAgICAgICAgIDQgYnl0ZXMgKi8KKyAgICB1TG9uZyBzaXplX2ZpbGVuYW1lOyAgICAgICAgLyogZmlsZW5hbWUgbGVuZ3RoICAgICAgICAgICAgICAgICAyIGJ5dGVzICovCisgICAgdUxvbmcgc2l6ZV9maWxlX2V4dHJhOyAgICAgIC8qIGV4dHJhIGZpZWxkIGxlbmd0aCAgICAgICAgICAgICAgMiBieXRlcyAqLworICAgIHVMb25nIHNpemVfZmlsZV9jb21tZW50OyAgICAvKiBmaWxlIGNvbW1lbnQgbGVuZ3RoICAgICAgICAgICAgIDIgYnl0ZXMgKi8KKworICAgIHVMb25nIGRpc2tfbnVtX3N0YXJ0OyAgICAgICAvKiBkaXNrIG51bWJlciBzdGFydCAgICAgICAgICAgICAgIDIgYnl0ZXMgKi8KKyAgICB1TG9uZyBpbnRlcm5hbF9mYTsgICAgICAgICAgLyogaW50ZXJuYWwgZmlsZSBhdHRyaWJ1dGVzICAgICAgICAyIGJ5dGVzICovCisgICAgdUxvbmcgZXh0ZXJuYWxfZmE7ICAgICAgICAgIC8qIGV4dGVybmFsIGZpbGUgYXR0cmlidXRlcyAgICAgICAgNCBieXRlcyAqLworCisgICAgdG1fdW56IHRtdV9kYXRlOworfSB1bnpfZmlsZV9pbmZvOworCitleHRlcm4gaW50IFpFWFBPUlQgdW56U3RyaW5nRmlsZU5hbWVDb21wYXJlIE9GICgoY29uc3QgY2hhciogZmlsZU5hbWUxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGZpbGVOYW1lMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaUNhc2VTZW5zaXRpdml0eSkpOworLyoKKyAgIENvbXBhcmUgdHdvIGZpbGVuYW1lIChmaWxlTmFtZTEsZmlsZU5hbWUyKS4KKyAgIElmIGlDYXNlU2VuaXNpdml0eSA9IDEsIGNvbXBhcmlzaW9uIGlzIGNhc2Ugc2Vuc2l0aXZpdHkgKGxpa2Ugc3RyY21wKQorICAgSWYgaUNhc2VTZW5pc2l2aXR5ID0gMiwgY29tcGFyaXNpb24gaXMgbm90IGNhc2Ugc2Vuc2l0aXZpdHkgKGxpa2Ugc3RyY21waQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBzdHJjYXNlY21wKQorICAgSWYgaUNhc2VTZW5pc2l2aXR5ID0gMCwgY2FzZSBzZW5zaXRpdml0eSBpcyBkZWZhdXQgb2YgeW91ciBvcGVyYXRpbmcgc3lzdGVtCisgICAgKGxpa2UgMSBvbiBVbml4LCAyIG9uIFdpbmRvd3MpCisqLworCisKK2V4dGVybiB1bnpGaWxlIFpFWFBPUlQgdW56T3BlbiBPRigoY29uc3QgY2hhciAqcGF0aCkpOworZXh0ZXJuIHVuekZpbGUgWkVYUE9SVCB1bnpPcGVuNjQgT0YoKGNvbnN0IHZvaWQgKnBhdGgpKTsKKy8qCisgIE9wZW4gYSBaaXAgZmlsZS4gcGF0aCBjb250YWluIHRoZSBmdWxsIHBhdGhuYW1lIChieSBleGFtcGxlLAorICAgICBvbiBhIFdpbmRvd3MgWFAgY29tcHV0ZXIgImM6XFx6bGliXFx6bGliMTEzLnppcCIgb3Igb24gYW4gVW5peCBjb21wdXRlcgorICAgICAiemxpYi96bGliMTEzLnppcCIuCisgICAgIElmIHRoZSB6aXBmaWxlIGNhbm5vdCBiZSBvcGVuZWQgKGZpbGUgZG9uJ3QgZXhpc3Qgb3IgaW4gbm90IHZhbGlkKSwgdGhlCisgICAgICAgcmV0dXJuIHZhbHVlIGlzIE5VTEwuCisgICAgIEVsc2UsIHRoZSByZXR1cm4gdmFsdWUgaXMgYSB1bnpGaWxlIEhhbmRsZSwgdXNhYmxlIHdpdGggb3RoZXIgZnVuY3Rpb24KKyAgICAgICBvZiB0aGlzIHVuemlwIHBhY2thZ2UuCisgICAgIHRoZSAiNjQiIGZ1bmN0aW9uIHRha2UgYSBjb25zdCB2b2lkKiBwb2ludGVyLCBiZWNhdXNlIHRoZSBwYXRoIGlzIGp1c3QgdGhlCisgICAgICAgdmFsdWUgcGFzc2VkIHRvIHRoZSBvcGVuNjRfZmlsZV9mdW5jIGNhbGxiYWNrLgorICAgICBVbmRlciBXaW5kb3dzLCBpZiBVTklDT0RFIGlzIGRlZmluZWQsIHVzaW5nIGZpbGxfZm9wZW42NF9maWxlZnVuYywgdGhlIHBhdGgKKyAgICAgICBpcyBhIHBvaW50ZXIgdG8gYSB3aWRlIHVuaWNvZGUgc3RyaW5nIChMUENUU1RSIGlzIExQQ1dTVFIpLCBzbyBjb25zdCBjaGFyKgorICAgICAgIGRvZXMgbm90IGRlc2NyaWJlIHRoZSByZWFsaXR5CisqLworCisKK2V4dGVybiB1bnpGaWxlIFpFWFBPUlQgdW56T3BlbjIgT0YoKGNvbnN0IGNoYXIgKnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6bGliX2ZpbGVmdW5jX2RlZiogcHpsaWJfZmlsZWZ1bmNfZGVmKSk7CisvKgorICAgT3BlbiBhIFppcCBmaWxlLCBsaWtlIHVuek9wZW4sIGJ1dCBwcm92aWRlIGEgc2V0IG9mIGZpbGUgbG93IGxldmVsIEFQSQorICAgICAgZm9yIHJlYWQvd3JpdGUgdGhlIHppcCBmaWxlIChzZWUgaW9hcGkuaCkKKyovCisKK2V4dGVybiB1bnpGaWxlIFpFWFBPUlQgdW56T3BlbjJfNjQgT0YoKGNvbnN0IHZvaWQgKnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6bGliX2ZpbGVmdW5jNjRfZGVmKiBwemxpYl9maWxlZnVuY19kZWYpKTsKKy8qCisgICBPcGVuIGEgWmlwIGZpbGUsIGxpa2UgdW56NjRPcGVuLCBidXQgcHJvdmlkZSBhIHNldCBvZiBmaWxlIGxvdyBsZXZlbCBBUEkKKyAgICAgIGZvciByZWFkL3dyaXRlIHRoZSB6aXAgZmlsZSAoc2VlIGlvYXBpLmgpCisqLworCitleHRlcm4gaW50IFpFWFBPUlQgdW56Q2xvc2UgT0YoKHVuekZpbGUgZmlsZSkpOworLyoKKyAgQ2xvc2UgYSBaaXBGaWxlIG9wZW5lZCB3aXRoIHVuek9wZW4uCisgIElmIHRoZXJlIGlzIGZpbGVzIGluc2lkZSB0aGUgLlppcCBvcGVuZWQgd2l0aCB1bnpPcGVuQ3VycmVudEZpbGUgKHNlZSBsYXRlciksCisgICAgdGhlc2UgZmlsZXMgTVVTVCBiZSBjbG9zZWQgd2l0aCB1bnpDbG9zZUN1cnJlbnRGaWxlIGJlZm9yZSBjYWxsIHVuekNsb3NlLgorICByZXR1cm4gVU5aX09LIGlmIHRoZXJlIGlzIG5vIHByb2JsZW0uICovCisKK2V4dGVybiBpbnQgWkVYUE9SVCB1bnpHZXRHbG9iYWxJbmZvIE9GKCh1bnpGaWxlIGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW56X2dsb2JhbF9pbmZvICpwZ2xvYmFsX2luZm8pKTsKKworZXh0ZXJuIGludCBaRVhQT1JUIHVuekdldEdsb2JhbEluZm82NCBPRigodW56RmlsZSBmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuel9nbG9iYWxfaW5mbzY0ICpwZ2xvYmFsX2luZm8pKTsKKy8qCisgIFdyaXRlIGluZm8gYWJvdXQgdGhlIFppcEZpbGUgaW4gdGhlICpwZ2xvYmFsX2luZm8gc3RydWN0dXJlLgorICBObyBwcmVwYXJhdGlvbiBvZiB0aGUgc3RydWN0dXJlIGlzIG5lZWRlZAorICByZXR1cm4gVU5aX09LIGlmIHRoZXJlIGlzIG5vIHByb2JsZW0uICovCisKKworZXh0ZXJuIGludCBaRVhQT1JUIHVuekdldEdsb2JhbENvbW1lbnQgT0YoKHVuekZpbGUgZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpzekNvbW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdUxvbmcgdVNpemVCdWYpKTsKKy8qCisgIEdldCB0aGUgZ2xvYmFsIGNvbW1lbnQgc3RyaW5nIG9mIHRoZSBaaXBGaWxlLCBpbiB0aGUgc3pDb21tZW50IGJ1ZmZlci4KKyAgdVNpemVCdWYgaXMgdGhlIHNpemUgb2YgdGhlIHN6Q29tbWVudCBidWZmZXIuCisgIHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGUgY29waWVkIG9yIGFuIGVycm9yIGNvZGUgPDAKKyovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFVuemlwIHBhY2thZ2UgYWxsb3cgeW91IGJyb3dzZSB0aGUgZGlyZWN0b3J5IG9mIHRoZSB6aXBmaWxlICovCisKK2V4dGVybiBpbnQgWkVYUE9SVCB1bnpHb1RvRmlyc3RGaWxlIE9GKCh1bnpGaWxlIGZpbGUpKTsKKy8qCisgIFNldCB0aGUgY3VycmVudCBmaWxlIG9mIHRoZSB6aXBmaWxlIHRvIHRoZSBmaXJzdCBmaWxlLgorICByZXR1cm4gVU5aX09LIGlmIHRoZXJlIGlzIG5vIHByb2JsZW0KKyovCisKK2V4dGVybiBpbnQgWkVYUE9SVCB1bnpHb1RvTmV4dEZpbGUgT0YoKHVuekZpbGUgZmlsZSkpOworLyoKKyAgU2V0IHRoZSBjdXJyZW50IGZpbGUgb2YgdGhlIHppcGZpbGUgdG8gdGhlIG5leHQgZmlsZS4KKyAgcmV0dXJuIFVOWl9PSyBpZiB0aGVyZSBpcyBubyBwcm9ibGVtCisgIHJldHVybiBVTlpfRU5EX09GX0xJU1RfT0ZfRklMRSBpZiB0aGUgYWN0dWFsIGZpbGUgd2FzIHRoZSBsYXRlc3QuCisqLworCitleHRlcm4gaW50IFpFWFBPUlQgdW56TG9jYXRlRmlsZSBPRigodW56RmlsZSBmaWxlLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3pGaWxlTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgIGludCBpQ2FzZVNlbnNpdGl2aXR5KSk7CisvKgorICBUcnkgbG9jYXRlIHRoZSBmaWxlIHN6RmlsZU5hbWUgaW4gdGhlIHppcGZpbGUuCisgIEZvciB0aGUgaUNhc2VTZW5zaXRpdml0eSBzaWduaWZpY2F0aW9uLCBzZWUgdW56U3RyaW5nRmlsZU5hbWVDb21wYXJlCisKKyAgcmV0dXJuIHZhbHVlIDoKKyAgVU5aX09LIGlmIHRoZSBmaWxlIGlzIGZvdW5kLiBJdCBiZWNvbWVzIHRoZSBjdXJyZW50IGZpbGUuCisgIFVOWl9FTkRfT0ZfTElTVF9PRl9GSUxFIGlmIHRoZSBmaWxlIGlzIG5vdCBmb3VuZAorKi8KKworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIFJ5YW4gc3VwcGxpZWQgZnVuY3Rpb25zICovCisvKiB1bnpfZmlsZV9pbmZvIGNvbnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgYSBmaWxlIGluIHRoZSB6aXBmaWxlICovCit0eXBlZGVmIHN0cnVjdCB1bnpfZmlsZV9wb3NfcworeworICAgIHVMb25nIHBvc19pbl96aXBfZGlyZWN0b3J5OyAgIC8qIG9mZnNldCBpbiB6aXAgZmlsZSBkaXJlY3RvcnkgKi8KKyAgICB1TG9uZyBudW1fb2ZfZmlsZTsgICAgICAgICAgICAvKiAjIG9mIGZpbGUgKi8KK30gdW56X2ZpbGVfcG9zOworCitleHRlcm4gaW50IFpFWFBPUlQgdW56R2V0RmlsZVBvcygKKyAgICB1bnpGaWxlIGZpbGUsCisgICAgdW56X2ZpbGVfcG9zKiBmaWxlX3Bvcyk7CisKK2V4dGVybiBpbnQgWkVYUE9SVCB1bnpHb1RvRmlsZVBvcygKKyAgICB1bnpGaWxlIGZpbGUsCisgICAgdW56X2ZpbGVfcG9zKiBmaWxlX3Bvcyk7CisKK3R5cGVkZWYgc3RydWN0IHVuejY0X2ZpbGVfcG9zX3MKK3sKKyAgICBaUE9TNjRfVCBwb3NfaW5femlwX2RpcmVjdG9yeTsgICAvKiBvZmZzZXQgaW4gemlwIGZpbGUgZGlyZWN0b3J5ICovCisgICAgWlBPUzY0X1QgbnVtX29mX2ZpbGU7ICAgICAgICAgICAgLyogIyBvZiBmaWxlICovCit9IHVuejY0X2ZpbGVfcG9zOworCitleHRlcm4gaW50IFpFWFBPUlQgdW56R2V0RmlsZVBvczY0KAorICAgIHVuekZpbGUgZmlsZSwKKyAgICB1bno2NF9maWxlX3BvcyogZmlsZV9wb3MpOworCitleHRlcm4gaW50IFpFWFBPUlQgdW56R29Ub0ZpbGVQb3M2NCgKKyAgICB1bnpGaWxlIGZpbGUsCisgICAgY29uc3QgdW56NjRfZmlsZV9wb3MqIGZpbGVfcG9zKTsKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKK2V4dGVybiBpbnQgWkVYUE9SVCB1bnpHZXRDdXJyZW50RmlsZUluZm82NCBPRigodW56RmlsZSBmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVuel9maWxlX2luZm82NCAqcGZpbGVfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpzekZpbGVOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVMb25nIGZpbGVOYW1lQnVmZmVyU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpleHRyYUZpZWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVMb25nIGV4dHJhRmllbGRCdWZmZXJTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnN6Q29tbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1TG9uZyBjb21tZW50QnVmZmVyU2l6ZSkpOworCitleHRlcm4gaW50IFpFWFBPUlQgdW56R2V0Q3VycmVudEZpbGVJbmZvIE9GKCh1bnpGaWxlIGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgdW56X2ZpbGVfaW5mbyAqcGZpbGVfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpzekZpbGVOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVMb25nIGZpbGVOYW1lQnVmZmVyU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpleHRyYUZpZWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVMb25nIGV4dHJhRmllbGRCdWZmZXJTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnN6Q29tbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1TG9uZyBjb21tZW50QnVmZmVyU2l6ZSkpOworLyoKKyAgR2V0IEluZm8gYWJvdXQgdGhlIGN1cnJlbnQgZmlsZQorICBpZiBwZmlsZV9pbmZvIT1OVUxMLCB0aGUgKnBmaWxlX2luZm8gc3RydWN0dXJlIHdpbGwgY29udGFpbiBzb21lcyBpbmZvIGFib3V0CisgICAgICAgIHRoZSBjdXJyZW50IGZpbGUKKyAgaWYgc3pGaWxlTmFtZSE9TlVMTCwgdGhlIGZpbGVtYW5lIHN0cmluZyB3aWxsIGJlIGNvcGllZCBpbiBzekZpbGVOYW1lCisgICAgICAgICAgICAoZmlsZU5hbWVCdWZmZXJTaXplIGlzIHRoZSBzaXplIG9mIHRoZSBidWZmZXIpCisgIGlmIGV4dHJhRmllbGQhPU5VTEwsIHRoZSBleHRyYSBmaWVsZCBpbmZvcm1hdGlvbiB3aWxsIGJlIGNvcGllZCBpbiBleHRyYUZpZWxkCisgICAgICAgICAgICAoZXh0cmFGaWVsZEJ1ZmZlclNpemUgaXMgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlcikuCisgICAgICAgICAgICBUaGlzIGlzIHRoZSBDZW50cmFsLWhlYWRlciB2ZXJzaW9uIG9mIHRoZSBleHRyYSBmaWVsZAorICBpZiBzekNvbW1lbnQhPU5VTEwsIHRoZSBjb21tZW50IHN0cmluZyBvZiB0aGUgZmlsZSB3aWxsIGJlIGNvcGllZCBpbiBzekNvbW1lbnQKKyAgICAgICAgICAgIChjb21tZW50QnVmZmVyU2l6ZSBpcyB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyKQorKi8KKworCisvKiogQWRkaXRpb24gZm9yIEdEQUwgOiBTVEFSVCAqLworCitleHRlcm4gWlBPUzY0X1QgWkVYUE9SVCB1bnpHZXRDdXJyZW50RmlsZVpTdHJlYW1Qb3M2NCBPRigodW56RmlsZSBmaWxlKSk7CisKKy8qKiBBZGRpdGlvbiBmb3IgR0RBTCA6IEVORCAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBmb3IgcmVhZGluZyB0aGUgY29udGVudCBvZiB0aGUgY3VycmVudCB6aXBmaWxlLCB5b3UgY2FuIG9wZW4gaXQsIHJlYWQgZGF0YQorICAgZnJvbSBpdCwgYW5kIGNsb3NlIGl0ICh5b3UgY2FuIGNsb3NlIGl0IGJlZm9yZSByZWFkaW5nIGFsbCB0aGUgZmlsZSkKKyAgICovCisKK2V4dGVybiBpbnQgWkVYUE9SVCB1bnpPcGVuQ3VycmVudEZpbGUgT0YoKHVuekZpbGUgZmlsZSkpOworLyoKKyAgT3BlbiBmb3IgcmVhZGluZyBkYXRhIHRoZSBjdXJyZW50IGZpbGUgaW4gdGhlIHppcGZpbGUuCisgIElmIHRoZXJlIGlzIG5vIGVycm9yLCB0aGUgcmV0dXJuIHZhbHVlIGlzIFVOWl9PSy4KKyovCisKK2V4dGVybiBpbnQgWkVYUE9SVCB1bnpPcGVuQ3VycmVudEZpbGVQYXNzd29yZCBPRigodW56RmlsZSBmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBwYXNzd29yZCkpOworLyoKKyAgT3BlbiBmb3IgcmVhZGluZyBkYXRhIHRoZSBjdXJyZW50IGZpbGUgaW4gdGhlIHppcGZpbGUuCisgIHBhc3N3b3JkIGlzIGEgY3J5cHRpbmcgcGFzc3dvcmQKKyAgSWYgdGhlcmUgaXMgbm8gZXJyb3IsIHRoZSByZXR1cm4gdmFsdWUgaXMgVU5aX09LLgorKi8KKworZXh0ZXJuIGludCBaRVhQT1JUIHVuek9wZW5DdXJyZW50RmlsZTIgT0YoKHVuekZpbGUgZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIG1ldGhvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByYXcpKTsKKy8qCisgIFNhbWUgdGhhbiB1bnpPcGVuQ3VycmVudEZpbGUsIGJ1dCBvcGVuIGZvciByZWFkIHJhdyB0aGUgZmlsZSAobm90IHVuY29tcHJlc3MpCisgICAgaWYgcmF3PT0xCisgICptZXRob2Qgd2lsbCByZWNlaXZlIG1ldGhvZCBvZiBjb21wcmVzc2lvbiwgKmxldmVsIHdpbGwgcmVjZWl2ZSBsZXZlbCBvZgorICAgICBjb21wcmVzc2lvbgorICBub3RlIDogeW91IGNhbiBzZXQgbGV2ZWwgcGFyYW1ldGVyIGFzIE5VTEwgKGlmIHlvdSBkaWQgbm90IHdhbnQga25vd24gbGV2ZWwsCisgICAgICAgICBidXQgeW91IENBTk5PVCBzZXQgbWV0aG9kIHBhcmFtZXRlciBhcyBOVUxMCisqLworCitleHRlcm4gaW50IFpFWFBPUlQgdW56T3BlbkN1cnJlbnRGaWxlMyBPRigodW56RmlsZSBmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogbWV0aG9kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJhdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBwYXNzd29yZCkpOworLyoKKyAgU2FtZSB0aGFuIHVuek9wZW5DdXJyZW50RmlsZSwgYnV0IG9wZW4gZm9yIHJlYWQgcmF3IHRoZSBmaWxlIChub3QgdW5jb21wcmVzcykKKyAgICBpZiByYXc9PTEKKyAgKm1ldGhvZCB3aWxsIHJlY2VpdmUgbWV0aG9kIG9mIGNvbXByZXNzaW9uLCAqbGV2ZWwgd2lsbCByZWNlaXZlIGxldmVsIG9mCisgICAgIGNvbXByZXNzaW9uCisgIG5vdGUgOiB5b3UgY2FuIHNldCBsZXZlbCBwYXJhbWV0ZXIgYXMgTlVMTCAoaWYgeW91IGRpZCBub3Qgd2FudCBrbm93biBsZXZlbCwKKyAgICAgICAgIGJ1dCB5b3UgQ0FOTk9UIHNldCBtZXRob2QgcGFyYW1ldGVyIGFzIE5VTEwKKyovCisKKworZXh0ZXJuIGludCBaRVhQT1JUIHVuekNsb3NlQ3VycmVudEZpbGUgT0YoKHVuekZpbGUgZmlsZSkpOworLyoKKyAgQ2xvc2UgdGhlIGZpbGUgaW4gemlwIG9wZW5lZCB3aXRoIHVuek9wZW5DdXJyZW50RmlsZQorICBSZXR1cm4gVU5aX0NSQ0VSUk9SIGlmIGFsbCB0aGUgZmlsZSB3YXMgcmVhZCBidXQgdGhlIENSQyBpcyBub3QgZ29vZAorKi8KKworZXh0ZXJuIGludCBaRVhQT1JUIHVuelJlYWRDdXJyZW50RmlsZSBPRigodW56RmlsZSBmaWxlLAorICAgICAgICAgICAgICAgICAgICAgIHZvaWRwIGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsZW4pKTsKKy8qCisgIFJlYWQgYnl0ZXMgZnJvbSB0aGUgY3VycmVudCBmaWxlIChvcGVuZWQgYnkgdW56T3BlbkN1cnJlbnRGaWxlKQorICBidWYgY29udGFpbiBidWZmZXIgd2hlcmUgZGF0YSBtdXN0IGJlIGNvcGllZAorICBsZW4gdGhlIHNpemUgb2YgYnVmLgorCisgIHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGUgY29waWVkIGlmIHNvbWVzIGJ5dGVzIGFyZSBjb3BpZWQKKyAgcmV0dXJuIDAgaWYgdGhlIGVuZCBvZiBmaWxlIHdhcyByZWFjaGVkCisgIHJldHVybiA8MCB3aXRoIGVycm9yIGNvZGUgaWYgdGhlcmUgaXMgYW4gZXJyb3IKKyAgICAoVU5aX0VSUk5PIGZvciBJTyBlcnJvciwgb3IgekxpYiBlcnJvciBmb3IgdW5jb21wcmVzcyBlcnJvcikKKyovCisKK2V4dGVybiB6X29mZl90IFpFWFBPUlQgdW56dGVsbCBPRigodW56RmlsZSBmaWxlKSk7CisKK2V4dGVybiBaUE9TNjRfVCBaRVhQT1JUIHVuenRlbGw2NCBPRigodW56RmlsZSBmaWxlKSk7CisvKgorICBHaXZlIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHVuY29tcHJlc3NlZCBkYXRhCisqLworCitleHRlcm4gaW50IFpFWFBPUlQgdW56ZW9mIE9GKCh1bnpGaWxlIGZpbGUpKTsKKy8qCisgIHJldHVybiAxIGlmIHRoZSBlbmQgb2YgZmlsZSB3YXMgcmVhY2hlZCwgMCBlbHNld2hlcmUKKyovCisKK2V4dGVybiBpbnQgWkVYUE9SVCB1bnpHZXRMb2NhbEV4dHJhZmllbGQgT0YoKHVuekZpbGUgZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWRwIGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxlbikpOworLyoKKyAgUmVhZCBleHRyYSBmaWVsZCBmcm9tIHRoZSBjdXJyZW50IGZpbGUgKG9wZW5lZCBieSB1bnpPcGVuQ3VycmVudEZpbGUpCisgIFRoaXMgaXMgdGhlIGxvY2FsLWhlYWRlciB2ZXJzaW9uIG9mIHRoZSBleHRyYSBmaWVsZCAoc29tZXRpbWVzLCB0aGVyZSBpcworICAgIG1vcmUgaW5mbyBpbiB0aGUgbG9jYWwtaGVhZGVyIHZlcnNpb24gdGhhbiBpbiB0aGUgY2VudHJhbC1oZWFkZXIpCisKKyAgaWYgYnVmPT1OVUxMLCBpdCByZXR1cm4gdGhlIHNpemUgb2YgdGhlIGxvY2FsIGV4dHJhIGZpZWxkCisKKyAgaWYgYnVmIT1OVUxMLCBsZW4gaXMgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciwgdGhlIGV4dHJhIGhlYWRlciBpcyBjb3BpZWQgaW4KKyAgICBidWYuCisgIHRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQgaW4gYnVmLCBvciAoaWYgPDApCisgICAgdGhlIGVycm9yIGNvZGUKKyovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEdldCB0aGUgY3VycmVudCBmaWxlIG9mZnNldCAqLworZXh0ZXJuIFpQT1M2NF9UIFpFWFBPUlQgdW56R2V0T2Zmc2V0NjQgKHVuekZpbGUgZmlsZSk7CitleHRlcm4gdUxvbmcgWkVYUE9SVCB1bnpHZXRPZmZzZXQgKHVuekZpbGUgZmlsZSk7CisKKy8qIFNldCB0aGUgY3VycmVudCBmaWxlIG9mZnNldCAqLworZXh0ZXJuIGludCBaRVhQT1JUIHVuelNldE9mZnNldDY0ICh1bnpGaWxlIGZpbGUsIFpQT1M2NF9UIHBvcyk7CitleHRlcm4gaW50IFpFWFBPUlQgdW56U2V0T2Zmc2V0ICh1bnpGaWxlIGZpbGUsIHVMb25nIHBvcyk7CisKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX3VuejY0X0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL21pbml6aXAvemlwLmMgYi9zcmMvY29udHJpYi9taW5pemlwL3ppcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlNjExZTEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29udHJpYi9taW5pemlwL3ppcC5jCkBAIC0wLDAgKzEsMjAwNyBAQAorLyogemlwLmMgLS0gSU8gb24gLnppcCBmaWxlcyB1c2luZyB6bGliCisgICBWZXJzaW9uIDEuMSwgRmVicnVhcnkgMTRoLCAyMDEwCisgICBwYXJ0IG9mIHRoZSBNaW5pWmlwIHByb2plY3QgLSAoIGh0dHA6Ly93d3cud2luaW1hZ2UuY29tL3pMaWJEbGwvbWluaXppcC5odG1sICkKKworICAgICAgICAgQ29weXJpZ2h0IChDKSAxOTk4LTIwMTAgR2lsbGVzIFZvbGxhbnQgKG1pbml6aXApICggaHR0cDovL3d3dy53aW5pbWFnZS5jb20vekxpYkRsbC9taW5pemlwLmh0bWwgKQorCisgICAgICAgICBNb2RpZmljYXRpb25zIGZvciBaaXA2NCBzdXBwb3J0CisgICAgICAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBNYXRoaWFzIFN2ZW5zc29uICggaHR0cDovL3Jlc3VsdDQyLmNvbSApCisKKyAgICAgICAgIEZvciBtb3JlIGluZm8gcmVhZCBNaW5pWmlwX2luZm8udHh0CisKKyAgICAgICAgIENoYW5nZXMKKyAgIE9jdC0yMDA5IC0gTWF0aGlhcyBTdmVuc3NvbiAtIFJlbW92ZSBvbGQgQyBzdHlsZSBmdW5jdGlvbiBwcm90b3R5cGVzCisgICBPY3QtMjAwOSAtIE1hdGhpYXMgU3ZlbnNzb24gLSBBZGRlZCBaaXA2NCBTdXBwb3J0IHdoZW4gY3JlYXRpbmcgbmV3IGZpbGUgYXJjaGl2ZXMKKyAgIE9jdC0yMDA5IC0gTWF0aGlhcyBTdmVuc3NvbiAtIERpZCBzb21lIGNvZGUgY2xlYW51cCBhbmQgcmVmYWN0b3JpbmcgdG8gZ2V0IGJldHRlciBvdmVydmlldyBvZiBzb21lIGZ1bmN0aW9ucy4KKyAgIE9jdC0yMDA5IC0gTWF0aGlhcyBTdmVuc3NvbiAtIEFkZGVkIHppcFJlbW92ZUV4dHJhSW5mb0Jsb2NrIHRvIHN0cmlwIGV4dHJhIGZpZWxkIGRhdGEgZnJvbSBpdHMgWklQNjQgZGF0YQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgaXMgdXNlZCB3aGVuIHJlY3JldGluZyB6aXAgYXJjaGl2ZSB3aXRoIFJBVyB3aGVuIGRlbGV0aW5nIGl0ZW1zIGZyb20gYSB6aXAuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBaSVA2NCBkYXRhIGlzIGF1dG9tYXRpY2FsbHkgYWRkZWQgdG8gaXRlbXMgdGhhdCBuZWVkcyBpdCwgYW5kIGV4aXN0aW5nIFpJUDY0IGRhdGEgbmVlZCB0byBiZSByZW1vdmVkLgorICAgT2N0LTIwMDkgLSBNYXRoaWFzIFN2ZW5zc29uIC0gQWRkZWQgc3VwcG9ydCBmb3IgQlpJUDIgYXMgY29tcHJlc3Npb24gbW9kZSAoYnppcDIgbGliIGlzIHJlcXVpcmVkKQorICAgSmFuLTIwMTAgLSBiYWNrIHRvIHVuemlwIGFuZCBtaW5pemlwIDEuMCBuYW1lIHNjaGVtZSwgd2l0aCBjb21wYXRpYmlsaXR5IGxheWVyCisKKyovCisKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgInpsaWIuaCIKKyNpbmNsdWRlICJ6aXAuaCIKKworI2lmZGVmIFNUREMKKyMgIGluY2x1ZGUgPHN0ZGRlZi5oPgorIyAgaW5jbHVkZSA8c3RyaW5nLmg+CisjICBpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorI2lmZGVmIE5PX0VSUk5PX0gKKyAgICBleHRlcm4gaW50IGVycm5vOworI2Vsc2UKKyMgICBpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisKKworI2lmbmRlZiBsb2NhbAorIyAgZGVmaW5lIGxvY2FsIHN0YXRpYworI2VuZGlmCisvKiBjb21waWxlIHdpdGggLURsb2NhbCBpZiB5b3VyIGRlYnVnZ2VyIGNhbid0IGZpbmQgc3RhdGljIHN5bWJvbHMgKi8KKworI2lmbmRlZiBWRVJTSU9OTUFERUJZCisjIGRlZmluZSBWRVJTSU9OTUFERUJZICAgKDB4MCkgLyogcGxhdGZvcm0gZGVwZWRlbnQgKi8KKyNlbmRpZgorCisjaWZuZGVmIFpfQlVGU0laRQorI2RlZmluZSBaX0JVRlNJWkUgKDY0KjEwMjQpIC8vKDE2Mzg0KQorI2VuZGlmCisKKyNpZm5kZWYgWl9NQVhGSUxFTkFNRUlOWklQCisjZGVmaW5lIFpfTUFYRklMRU5BTUVJTlpJUCAoMjU2KQorI2VuZGlmCisKKyNpZm5kZWYgQUxMT0MKKyMgZGVmaW5lIEFMTE9DKHNpemUpIChtYWxsb2Moc2l6ZSkpCisjZW5kaWYKKyNpZm5kZWYgVFJZRlJFRQorIyBkZWZpbmUgVFJZRlJFRShwKSB7aWYgKHApIGZyZWUocCk7fQorI2VuZGlmCisKKy8qCisjZGVmaW5lIFNJWkVDRU5UUkFMRElSSVRFTSAoMHgyZSkKKyNkZWZpbmUgU0laRVpJUExPQ0FMSEVBREVSICgweDFlKQorKi8KKworLyogSSd2ZSBmb3VuZCBhbiBvbGQgVW5peCAoYSBTdW5PUyA0LjEuM19VMSkgd2l0aG91dCBhbGwgU0VFS18qIGRlZmluZWQuLi4uICovCisKKworLy8gTk9UIHN1cmUgdGhhdCB0aGlzIHdvcmsgb24gQUxMIHBsYXRmb3JtCisjZGVmaW5lIE1BS0VVTE9ORzY0KGEsIGIpICgoWlBPUzY0X1QpKCgodW5zaWduZWQgbG9uZykoYSkpIHwgKChaUE9TNjRfVCkoKHVuc2lnbmVkIGxvbmcpKGIpKSkgPDwgMzIpKQorCisjaWZuZGVmIFNFRUtfQ1VSCisjZGVmaW5lIFNFRUtfQ1VSICAgIDEKKyNlbmRpZgorCisjaWZuZGVmIFNFRUtfRU5ECisjZGVmaW5lIFNFRUtfRU5EICAgIDIKKyNlbmRpZgorCisjaWZuZGVmIFNFRUtfU0VUCisjZGVmaW5lIFNFRUtfU0VUICAgIDAKKyNlbmRpZgorCisjaWZuZGVmIERFRl9NRU1fTEVWRUwKKyNpZiBNQVhfTUVNX0xFVkVMID49IDgKKyMgIGRlZmluZSBERUZfTUVNX0xFVkVMIDgKKyNlbHNlCisjICBkZWZpbmUgREVGX01FTV9MRVZFTCAgTUFYX01FTV9MRVZFTAorI2VuZGlmCisjZW5kaWYKK2NvbnN0IGNoYXIgemlwX2NvcHlyaWdodFtdID0iIHppcCAxLjAxIENvcHlyaWdodCAxOTk4LTIwMDQgR2lsbGVzIFZvbGxhbnQgLSBodHRwOi8vd3d3LndpbmltYWdlLmNvbS96TGliRGxsIjsKKworCisjZGVmaW5lIFNJWkVEQVRBX0lOREFUQUJMT0NLICg0MDk2LSg0KjQpKQorCisjZGVmaW5lIExPQ0FMSEVBREVSTUFHSUMgICAgKDB4MDQwMzRiNTApCisjZGVmaW5lIENFTlRSQUxIRUFERVJNQUdJQyAgKDB4MDIwMTRiNTApCisjZGVmaW5lIEVOREhFQURFUk1BR0lDICAgICAgKDB4MDYwNTRiNTApCisjZGVmaW5lIFpJUDY0RU5ESEVBREVSTUFHSUMgICAgICAoMHg2MDY0YjUwKQorI2RlZmluZSBaSVA2NEVORExPQ0hFQURFUk1BR0lDICAgKDB4NzA2NGI1MCkKKworI2RlZmluZSBGTEFHX0xPQ0FMSEVBREVSX09GRlNFVCAoMHgwNikKKyNkZWZpbmUgQ1JDX0xPQ0FMSEVBREVSX09GRlNFVCAgKDB4MGUpCisKKyNkZWZpbmUgU0laRUNFTlRSQUxIRUFERVIgKDB4MmUpIC8qIDQ2ICovCisKK3R5cGVkZWYgc3RydWN0IGxpbmtlZGxpc3RfZGF0YWJsb2NrX2ludGVybmFsX3MKK3sKKyAgc3RydWN0IGxpbmtlZGxpc3RfZGF0YWJsb2NrX2ludGVybmFsX3MqIG5leHRfZGF0YWJsb2NrOworICB1TG9uZyAgYXZhaWxfaW5fdGhpc19ibG9jazsKKyAgdUxvbmcgIGZpbGxlZF9pbl90aGlzX2Jsb2NrOworICB1TG9uZyAgdW51c2VkOyAvKiBmb3IgZnV0dXJlIHVzZSBhbmQgYWxpZ25tZW50ICovCisgIHVuc2lnbmVkIGNoYXIgZGF0YVtTSVpFREFUQV9JTkRBVEFCTE9DS107Cit9IGxpbmtlZGxpc3RfZGF0YWJsb2NrX2ludGVybmFsOworCit0eXBlZGVmIHN0cnVjdCBsaW5rZWRsaXN0X2RhdGFfcworeworICAgIGxpbmtlZGxpc3RfZGF0YWJsb2NrX2ludGVybmFsKiBmaXJzdF9ibG9jazsKKyAgICBsaW5rZWRsaXN0X2RhdGFibG9ja19pbnRlcm5hbCogbGFzdF9ibG9jazsKK30gbGlua2VkbGlzdF9kYXRhOworCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgel9zdHJlYW0gc3RyZWFtOyAgICAgICAgICAgIC8qIHpMaWIgc3RyZWFtIHN0cnVjdHVyZSBmb3IgaW5mbGF0ZSAqLworI2lmZGVmIEhBVkVfQlpJUDIKKyAgICBiel9zdHJlYW0gYnN0cmVhbTsgICAgICAgICAgLyogYnpMaWIgc3RyZWFtIHN0cnVjdHVyZSBmb3IgYnppcGVkICovCisjZW5kaWYKKworICAgIGludCAgc3RyZWFtX2luaXRpYWxpc2VkOyAgICAvKiAxIGlzIHN0cmVhbSBpcyBpbml0aWFsaXNlZCAqLworICAgIHVJbnQgcG9zX2luX2J1ZmZlcmVkX2RhdGE7ICAvKiBsYXN0IHdyaXR0ZW4gYnl0ZSBpbiBidWZmZXJlZF9kYXRhICovCisKKyAgICBaUE9TNjRfVCBwb3NfbG9jYWxfaGVhZGVyOyAgICAgLyogb2Zmc2V0IG9mIHRoZSBsb2NhbCBoZWFkZXIgb2YgdGhlIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50eSB3cml0aW5nICovCisgICAgY2hhciogY2VudHJhbF9oZWFkZXI7ICAgICAgIC8qIGNlbnRyYWwgaGVhZGVyIGRhdGEgZm9yIHRoZSBjdXJyZW50IGZpbGUgKi8KKyAgICB1TG9uZyBzaXplX2NlbnRyYWxFeHRyYTsKKyAgICB1TG9uZyBzaXplX2NlbnRyYWxoZWFkZXI7ICAgLyogc2l6ZSBvZiB0aGUgY2VudHJhbCBoZWFkZXIgZm9yIGN1ciBmaWxlICovCisgICAgdUxvbmcgc2l6ZV9jZW50cmFsRXh0cmFGcmVlOyAvKiBFeHRyYSBieXRlcyBhbGxvY2F0ZWQgdG8gdGhlIGNlbnRyYWxoZWFkZXIgYnV0IHRoYXQgYXJlIG5vdCB1c2VkICovCisgICAgdUxvbmcgZmxhZzsgICAgICAgICAgICAgICAgIC8qIGZsYWcgb2YgdGhlIGZpbGUgY3VycmVudGx5IHdyaXRpbmcgKi8KKworICAgIGludCAgbWV0aG9kOyAgICAgICAgICAgICAgICAvKiBjb21wcmVzc2lvbiBtZXRob2Qgb2YgZmlsZSBjdXJyZW50eSB3ci4qLworICAgIGludCAgcmF3OyAgICAgICAgICAgICAgICAgICAvKiAxIGZvciBkaXJlY3RseSB3cml0aW5nIHJhdyBkYXRhICovCisgICAgQnl0ZSBidWZmZXJlZF9kYXRhW1pfQlVGU0laRV07LyogYnVmZmVyIGNvbnRhaW4gY29tcHJlc3NlZCBkYXRhIHRvIGJlIHdyaXQqLworICAgIHVMb25nIGRvc0RhdGU7CisgICAgdUxvbmcgY3JjMzI7CisgICAgaW50ICBlbmNyeXB0OworICAgIGludCAgemlwNjQ7ICAgICAgICAgICAgICAgLyogQWRkIFpJUDY0IGV4dGVuZWQgaW5mb3JtYXRpb24gaW4gdGhlIGV4dHJhIGZpZWxkICovCisgICAgWlBPUzY0X1QgcG9zX3ppcDY0ZXh0cmFpbmZvOworICAgIFpQT1M2NF9UIHRvdGFsQ29tcHJlc3NlZERhdGE7CisgICAgWlBPUzY0X1QgdG90YWxVbmNvbXByZXNzZWREYXRhOworI2lmbmRlZiBOT0NSWVBUCisgICAgdW5zaWduZWQgbG9uZyBrZXlzWzNdOyAgICAgLyoga2V5cyBkZWZpbmluZyB0aGUgcHNldWRvLXJhbmRvbSBzZXF1ZW5jZSAqLworICAgIGNvbnN0IHpfY3JjX3QqIHBjcmNfMzJfdGFiOworICAgIHVuc2lnbmVkIGNyeXB0X2hlYWRlcl9zaXplOworI2VuZGlmCit9IGN1cmZpbGU2NF9pbmZvOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIHpsaWJfZmlsZWZ1bmM2NF8zMl9kZWYgel9maWxlZnVuYzsKKyAgICB2b2lkcGYgZmlsZXN0cmVhbTsgICAgICAgIC8qIGlvIHN0cnVjdG9yZSBvZiB0aGUgemlwZmlsZSAqLworICAgIGxpbmtlZGxpc3RfZGF0YSBjZW50cmFsX2RpcjsvKiBkYXRhYmxvY2sgd2l0aCBjZW50cmFsIGRpciBpbiBjb25zdHJ1Y3Rpb24qLworICAgIGludCAgaW5fb3BlbmVkX2ZpbGVfaW56aXA7ICAvKiAxIGlmIGEgZmlsZSBpbiB0aGUgemlwIGlzIGN1cnJlbnRseSB3cml0LiovCisgICAgY3VyZmlsZTY0X2luZm8gY2k7ICAgICAgICAgICAgLyogaW5mbyBvbiB0aGUgZmlsZSBjdXJyZXRseSB3cml0aW5nICovCisKKyAgICBaUE9TNjRfVCBiZWdpbl9wb3M7ICAgICAgICAgICAgLyogcG9zaXRpb24gb2YgdGhlIGJlZ2lubmluZyBvZiB0aGUgemlwZmlsZSAqLworICAgIFpQT1M2NF9UIGFkZF9wb3NpdGlvbl93aGVuX3dyaXRpbmdfb2Zmc2V0OworICAgIFpQT1M2NF9UIG51bWJlcl9lbnRyeTsKKworI2lmbmRlZiBOT19BRERGSUxFSU5FWElTVElOR1pJUAorICAgIGNoYXIgKmdsb2JhbGNvbW1lbnQ7CisjZW5kaWYKKworfSB6aXA2NF9pbnRlcm5hbDsKKworCisjaWZuZGVmIE5PQ1JZUFQKKyNkZWZpbmUgSU5DTFVERUNSWVBUSU5HQ09ERV9JRkNSWVBUQUxMT1dFRAorI2luY2x1ZGUgImNyeXB0LmgiCisjZW5kaWYKKworbG9jYWwgbGlua2VkbGlzdF9kYXRhYmxvY2tfaW50ZXJuYWwqIGFsbG9jYXRlX25ld19kYXRhYmxvY2soKQoreworICAgIGxpbmtlZGxpc3RfZGF0YWJsb2NrX2ludGVybmFsKiBsZGk7CisgICAgbGRpID0gKGxpbmtlZGxpc3RfZGF0YWJsb2NrX2ludGVybmFsKikKKyAgICAgICAgICAgICAgICAgQUxMT0Moc2l6ZW9mKGxpbmtlZGxpc3RfZGF0YWJsb2NrX2ludGVybmFsKSk7CisgICAgaWYgKGxkaSE9TlVMTCkKKyAgICB7CisgICAgICAgIGxkaS0+bmV4dF9kYXRhYmxvY2sgPSBOVUxMIDsKKyAgICAgICAgbGRpLT5maWxsZWRfaW5fdGhpc19ibG9jayA9IDAgOworICAgICAgICBsZGktPmF2YWlsX2luX3RoaXNfYmxvY2sgPSBTSVpFREFUQV9JTkRBVEFCTE9DSyA7CisgICAgfQorICAgIHJldHVybiBsZGk7Cit9CisKK2xvY2FsIHZvaWQgZnJlZV9kYXRhYmxvY2sobGlua2VkbGlzdF9kYXRhYmxvY2tfaW50ZXJuYWwqIGxkaSkKK3sKKyAgICB3aGlsZSAobGRpIT1OVUxMKQorICAgIHsKKyAgICAgICAgbGlua2VkbGlzdF9kYXRhYmxvY2tfaW50ZXJuYWwqIGxkaW5leHQgPSBsZGktPm5leHRfZGF0YWJsb2NrOworICAgICAgICBUUllGUkVFKGxkaSk7CisgICAgICAgIGxkaSA9IGxkaW5leHQ7CisgICAgfQorfQorCitsb2NhbCB2b2lkIGluaXRfbGlua2VkbGlzdChsaW5rZWRsaXN0X2RhdGEqIGxsKQoreworICAgIGxsLT5maXJzdF9ibG9jayA9IGxsLT5sYXN0X2Jsb2NrID0gTlVMTDsKK30KKworbG9jYWwgdm9pZCBmcmVlX2xpbmtlZGxpc3QobGlua2VkbGlzdF9kYXRhKiBsbCkKK3sKKyAgICBmcmVlX2RhdGFibG9jayhsbC0+Zmlyc3RfYmxvY2spOworICAgIGxsLT5maXJzdF9ibG9jayA9IGxsLT5sYXN0X2Jsb2NrID0gTlVMTDsKK30KKworCitsb2NhbCBpbnQgYWRkX2RhdGFfaW5fZGF0YWJsb2NrKGxpbmtlZGxpc3RfZGF0YSogbGwsIGNvbnN0IHZvaWQqIGJ1ZiwgdUxvbmcgbGVuKQoreworICAgIGxpbmtlZGxpc3RfZGF0YWJsb2NrX2ludGVybmFsKiBsZGk7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciogZnJvbV9jb3B5OworCisgICAgaWYgKGxsPT1OVUxMKQorICAgICAgICByZXR1cm4gWklQX0lOVEVSTkFMRVJST1I7CisKKyAgICBpZiAobGwtPmxhc3RfYmxvY2sgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIGxsLT5maXJzdF9ibG9jayA9IGxsLT5sYXN0X2Jsb2NrID0gYWxsb2NhdGVfbmV3X2RhdGFibG9jaygpOworICAgICAgICBpZiAobGwtPmZpcnN0X2Jsb2NrID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gWklQX0lOVEVSTkFMRVJST1I7CisgICAgfQorCisgICAgbGRpID0gbGwtPmxhc3RfYmxvY2s7CisgICAgZnJvbV9jb3B5ID0gKHVuc2lnbmVkIGNoYXIqKWJ1ZjsKKworICAgIHdoaWxlIChsZW4+MCkKKyAgICB7CisgICAgICAgIHVJbnQgY29weV90aGlzOworICAgICAgICB1SW50IGk7CisgICAgICAgIHVuc2lnbmVkIGNoYXIqIHRvX2NvcHk7CisKKyAgICAgICAgaWYgKGxkaS0+YXZhaWxfaW5fdGhpc19ibG9jaz09MCkKKyAgICAgICAgeworICAgICAgICAgICAgbGRpLT5uZXh0X2RhdGFibG9jayA9IGFsbG9jYXRlX25ld19kYXRhYmxvY2soKTsKKyAgICAgICAgICAgIGlmIChsZGktPm5leHRfZGF0YWJsb2NrID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuIFpJUF9JTlRFUk5BTEVSUk9SOworICAgICAgICAgICAgbGRpID0gbGRpLT5uZXh0X2RhdGFibG9jayA7CisgICAgICAgICAgICBsbC0+bGFzdF9ibG9jayA9IGxkaTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsZGktPmF2YWlsX2luX3RoaXNfYmxvY2sgPCBsZW4pCisgICAgICAgICAgICBjb3B5X3RoaXMgPSAodUludClsZGktPmF2YWlsX2luX3RoaXNfYmxvY2s7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvcHlfdGhpcyA9ICh1SW50KWxlbjsKKworICAgICAgICB0b19jb3B5ID0gJihsZGktPmRhdGFbbGRpLT5maWxsZWRfaW5fdGhpc19ibG9ja10pOworCisgICAgICAgIGZvciAoaT0wO2k8Y29weV90aGlzO2krKykKKyAgICAgICAgICAgICoodG9fY29weStpKT0qKGZyb21fY29weStpKTsKKworICAgICAgICBsZGktPmZpbGxlZF9pbl90aGlzX2Jsb2NrICs9IGNvcHlfdGhpczsKKyAgICAgICAgbGRpLT5hdmFpbF9pbl90aGlzX2Jsb2NrIC09IGNvcHlfdGhpczsKKyAgICAgICAgZnJvbV9jb3B5ICs9IGNvcHlfdGhpcyA7CisgICAgICAgIGxlbiAtPSBjb3B5X3RoaXM7CisgICAgfQorICAgIHJldHVybiBaSVBfT0s7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBOT19BRERGSUxFSU5FWElTVElOR1pJUAorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICBJbnB1dHMgYSBsb25nIGluIExTQiBvcmRlciB0byB0aGUgZ2l2ZW4gZmlsZQorICAgbmJCeXRlID09IDEsIDIgLDQgb3IgOCAoYnl0ZSwgc2hvcnQgb3IgbG9uZywgWlBPUzY0X1QpCisqLworCitsb2NhbCBpbnQgemlwNjRsb2NhbF9wdXRWYWx1ZSBPRigoY29uc3QgemxpYl9maWxlZnVuYzY0XzMyX2RlZiogcHpsaWJfZmlsZWZ1bmNfZGVmLCB2b2lkcGYgZmlsZXN0cmVhbSwgWlBPUzY0X1QgeCwgaW50IG5iQnl0ZSkpOworbG9jYWwgaW50IHppcDY0bG9jYWxfcHV0VmFsdWUgKGNvbnN0IHpsaWJfZmlsZWZ1bmM2NF8zMl9kZWYqIHB6bGliX2ZpbGVmdW5jX2RlZiwgdm9pZHBmIGZpbGVzdHJlYW0sIFpQT1M2NF9UIHgsIGludCBuYkJ5dGUpCit7CisgICAgdW5zaWduZWQgY2hhciBidWZbOF07CisgICAgaW50IG47CisgICAgZm9yIChuID0gMDsgbiA8IG5iQnl0ZTsgbisrKQorICAgIHsKKyAgICAgICAgYnVmW25dID0gKHVuc2lnbmVkIGNoYXIpKHggJiAweGZmKTsKKyAgICAgICAgeCA+Pj0gODsKKyAgICB9CisgICAgaWYgKHggIT0gMCkKKyAgICAgIHsgICAgIC8qIGRhdGEgb3ZlcmZsb3cgLSBoYWNrIGZvciBaSVA2NCAoWCBSb2NoZSkgKi8KKyAgICAgIGZvciAobiA9IDA7IG4gPCBuYkJ5dGU7IG4rKykKKyAgICAgICAgeworICAgICAgICAgIGJ1ZltuXSA9IDB4ZmY7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgIGlmIChaV1JJVEU2NCgqcHpsaWJfZmlsZWZ1bmNfZGVmLGZpbGVzdHJlYW0sYnVmLCh1TG9uZyluYkJ5dGUpIT0odUxvbmcpbmJCeXRlKQorICAgICAgICByZXR1cm4gWklQX0VSUk5POworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIFpJUF9PSzsKK30KKworbG9jYWwgdm9pZCB6aXA2NGxvY2FsX3B1dFZhbHVlX2lubWVtb3J5IE9GKCh2b2lkKiBkZXN0LCBaUE9TNjRfVCB4LCBpbnQgbmJCeXRlKSk7Citsb2NhbCB2b2lkIHppcDY0bG9jYWxfcHV0VmFsdWVfaW5tZW1vcnkgKHZvaWQqIGRlc3QsIFpQT1M2NF9UIHgsIGludCBuYkJ5dGUpCit7CisgICAgdW5zaWduZWQgY2hhciogYnVmPSh1bnNpZ25lZCBjaGFyKilkZXN0OworICAgIGludCBuOworICAgIGZvciAobiA9IDA7IG4gPCBuYkJ5dGU7IG4rKykgeworICAgICAgICBidWZbbl0gPSAodW5zaWduZWQgY2hhcikoeCAmIDB4ZmYpOworICAgICAgICB4ID4+PSA4OworICAgIH0KKworICAgIGlmICh4ICE9IDApCisgICAgeyAgICAgLyogZGF0YSBvdmVyZmxvdyAtIGhhY2sgZm9yIFpJUDY0ICovCisgICAgICAgZm9yIChuID0gMDsgbiA8IG5iQnl0ZTsgbisrKQorICAgICAgIHsKKyAgICAgICAgICBidWZbbl0gPSAweGZmOworICAgICAgIH0KKyAgICB9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2xvY2FsIHVMb25nIHppcDY0bG9jYWxfVG16RGF0ZVRvRG9zRGF0ZShjb25zdCB0bV96aXAqIHB0bSkKK3sKKyAgICB1TG9uZyB5ZWFyID0gKHVMb25nKXB0bS0+dG1feWVhcjsKKyAgICBpZiAoeWVhcj49MTk4MCkKKyAgICAgICAgeWVhci09MTk4MDsKKyAgICBlbHNlIGlmICh5ZWFyPj04MCkKKyAgICAgICAgeWVhci09ODA7CisgICAgcmV0dXJuCisgICAgICAodUxvbmcpICgoKHVMb25nKShwdG0tPnRtX21kYXkpICsgKDMyICogKHVMb25nKShwdG0tPnRtX21vbisxKSkgKyAoNTEyICogeWVhcikpIDw8IDE2KSB8CisgICAgICAgICgoKHVMb25nKXB0bS0+dG1fc2VjLzIpICsgKDMyICogKHVMb25nKXB0bS0+dG1fbWluKSArICgyMDQ4ICogKHVMb25nKXB0bS0+dG1faG91cikpOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitsb2NhbCBpbnQgemlwNjRsb2NhbF9nZXRCeXRlIE9GKChjb25zdCB6bGliX2ZpbGVmdW5jNjRfMzJfZGVmKiBwemxpYl9maWxlZnVuY19kZWYsIHZvaWRwZiBmaWxlc3RyZWFtLCBpbnQgKnBpKSk7CisKK2xvY2FsIGludCB6aXA2NGxvY2FsX2dldEJ5dGUoY29uc3QgemxpYl9maWxlZnVuYzY0XzMyX2RlZiogcHpsaWJfZmlsZWZ1bmNfZGVmLHZvaWRwZiBmaWxlc3RyZWFtLGludCogcGkpCit7CisgICAgdW5zaWduZWQgY2hhciBjOworICAgIGludCBlcnIgPSAoaW50KVpSRUFENjQoKnB6bGliX2ZpbGVmdW5jX2RlZixmaWxlc3RyZWFtLCZjLDEpOworICAgIGlmIChlcnI9PTEpCisgICAgeworICAgICAgICAqcGkgPSAoaW50KWM7CisgICAgICAgIHJldHVybiBaSVBfT0s7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmIChaRVJST1I2NCgqcHpsaWJfZmlsZWZ1bmNfZGVmLGZpbGVzdHJlYW0pKQorICAgICAgICAgICAgcmV0dXJuIFpJUF9FUlJOTzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIFpJUF9FT0Y7CisgICAgfQorfQorCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgUmVhZHMgYSBsb25nIGluIExTQiBvcmRlciBmcm9tIHRoZSBnaXZlbiBnel9zdHJlYW0uIFNldHMKKyovCitsb2NhbCBpbnQgemlwNjRsb2NhbF9nZXRTaG9ydCBPRigoY29uc3QgemxpYl9maWxlZnVuYzY0XzMyX2RlZiogcHpsaWJfZmlsZWZ1bmNfZGVmLCB2b2lkcGYgZmlsZXN0cmVhbSwgdUxvbmcgKnBYKSk7CisKK2xvY2FsIGludCB6aXA2NGxvY2FsX2dldFNob3J0IChjb25zdCB6bGliX2ZpbGVmdW5jNjRfMzJfZGVmKiBwemxpYl9maWxlZnVuY19kZWYsIHZvaWRwZiBmaWxlc3RyZWFtLCB1TG9uZyogcFgpCit7CisgICAgdUxvbmcgeCA7CisgICAgaW50IGkgPSAwOworICAgIGludCBlcnI7CisKKyAgICBlcnIgPSB6aXA2NGxvY2FsX2dldEJ5dGUocHpsaWJfZmlsZWZ1bmNfZGVmLGZpbGVzdHJlYW0sJmkpOworICAgIHggPSAodUxvbmcpaTsKKworICAgIGlmIChlcnI9PVpJUF9PSykKKyAgICAgICAgZXJyID0gemlwNjRsb2NhbF9nZXRCeXRlKHB6bGliX2ZpbGVmdW5jX2RlZixmaWxlc3RyZWFtLCZpKTsKKyAgICB4ICs9ICgodUxvbmcpaSk8PDg7CisKKyAgICBpZiAoZXJyPT1aSVBfT0spCisgICAgICAgICpwWCA9IHg7CisgICAgZWxzZQorICAgICAgICAqcFggPSAwOworICAgIHJldHVybiBlcnI7Cit9CisKK2xvY2FsIGludCB6aXA2NGxvY2FsX2dldExvbmcgT0YoKGNvbnN0IHpsaWJfZmlsZWZ1bmM2NF8zMl9kZWYqIHB6bGliX2ZpbGVmdW5jX2RlZiwgdm9pZHBmIGZpbGVzdHJlYW0sIHVMb25nICpwWCkpOworCitsb2NhbCBpbnQgemlwNjRsb2NhbF9nZXRMb25nIChjb25zdCB6bGliX2ZpbGVmdW5jNjRfMzJfZGVmKiBwemxpYl9maWxlZnVuY19kZWYsIHZvaWRwZiBmaWxlc3RyZWFtLCB1TG9uZyogcFgpCit7CisgICAgdUxvbmcgeCA7CisgICAgaW50IGkgPSAwOworICAgIGludCBlcnI7CisKKyAgICBlcnIgPSB6aXA2NGxvY2FsX2dldEJ5dGUocHpsaWJfZmlsZWZ1bmNfZGVmLGZpbGVzdHJlYW0sJmkpOworICAgIHggPSAodUxvbmcpaTsKKworICAgIGlmIChlcnI9PVpJUF9PSykKKyAgICAgICAgZXJyID0gemlwNjRsb2NhbF9nZXRCeXRlKHB6bGliX2ZpbGVmdW5jX2RlZixmaWxlc3RyZWFtLCZpKTsKKyAgICB4ICs9ICgodUxvbmcpaSk8PDg7CisKKyAgICBpZiAoZXJyPT1aSVBfT0spCisgICAgICAgIGVyciA9IHppcDY0bG9jYWxfZ2V0Qnl0ZShwemxpYl9maWxlZnVuY19kZWYsZmlsZXN0cmVhbSwmaSk7CisgICAgeCArPSAoKHVMb25nKWkpPDwxNjsKKworICAgIGlmIChlcnI9PVpJUF9PSykKKyAgICAgICAgZXJyID0gemlwNjRsb2NhbF9nZXRCeXRlKHB6bGliX2ZpbGVmdW5jX2RlZixmaWxlc3RyZWFtLCZpKTsKKyAgICB4ICs9ICgodUxvbmcpaSk8PDI0OworCisgICAgaWYgKGVycj09WklQX09LKQorICAgICAgICAqcFggPSB4OworICAgIGVsc2UKKyAgICAgICAgKnBYID0gMDsKKyAgICByZXR1cm4gZXJyOworfQorCitsb2NhbCBpbnQgemlwNjRsb2NhbF9nZXRMb25nNjQgT0YoKGNvbnN0IHpsaWJfZmlsZWZ1bmM2NF8zMl9kZWYqIHB6bGliX2ZpbGVmdW5jX2RlZiwgdm9pZHBmIGZpbGVzdHJlYW0sIFpQT1M2NF9UICpwWCkpOworCisKK2xvY2FsIGludCB6aXA2NGxvY2FsX2dldExvbmc2NCAoY29uc3QgemxpYl9maWxlZnVuYzY0XzMyX2RlZiogcHpsaWJfZmlsZWZ1bmNfZGVmLCB2b2lkcGYgZmlsZXN0cmVhbSwgWlBPUzY0X1QgKnBYKQoreworICBaUE9TNjRfVCB4OworICBpbnQgaSA9IDA7CisgIGludCBlcnI7CisKKyAgZXJyID0gemlwNjRsb2NhbF9nZXRCeXRlKHB6bGliX2ZpbGVmdW5jX2RlZixmaWxlc3RyZWFtLCZpKTsKKyAgeCA9IChaUE9TNjRfVClpOworCisgIGlmIChlcnI9PVpJUF9PSykKKyAgICBlcnIgPSB6aXA2NGxvY2FsX2dldEJ5dGUocHpsaWJfZmlsZWZ1bmNfZGVmLGZpbGVzdHJlYW0sJmkpOworICB4ICs9ICgoWlBPUzY0X1QpaSk8PDg7CisKKyAgaWYgKGVycj09WklQX09LKQorICAgIGVyciA9IHppcDY0bG9jYWxfZ2V0Qnl0ZShwemxpYl9maWxlZnVuY19kZWYsZmlsZXN0cmVhbSwmaSk7CisgIHggKz0gKChaUE9TNjRfVClpKTw8MTY7CisKKyAgaWYgKGVycj09WklQX09LKQorICAgIGVyciA9IHppcDY0bG9jYWxfZ2V0Qnl0ZShwemxpYl9maWxlZnVuY19kZWYsZmlsZXN0cmVhbSwmaSk7CisgIHggKz0gKChaUE9TNjRfVClpKTw8MjQ7CisKKyAgaWYgKGVycj09WklQX09LKQorICAgIGVyciA9IHppcDY0bG9jYWxfZ2V0Qnl0ZShwemxpYl9maWxlZnVuY19kZWYsZmlsZXN0cmVhbSwmaSk7CisgIHggKz0gKChaUE9TNjRfVClpKTw8MzI7CisKKyAgaWYgKGVycj09WklQX09LKQorICAgIGVyciA9IHppcDY0bG9jYWxfZ2V0Qnl0ZShwemxpYl9maWxlZnVuY19kZWYsZmlsZXN0cmVhbSwmaSk7CisgIHggKz0gKChaUE9TNjRfVClpKTw8NDA7CisKKyAgaWYgKGVycj09WklQX09LKQorICAgIGVyciA9IHppcDY0bG9jYWxfZ2V0Qnl0ZShwemxpYl9maWxlZnVuY19kZWYsZmlsZXN0cmVhbSwmaSk7CisgIHggKz0gKChaUE9TNjRfVClpKTw8NDg7CisKKyAgaWYgKGVycj09WklQX09LKQorICAgIGVyciA9IHppcDY0bG9jYWxfZ2V0Qnl0ZShwemxpYl9maWxlZnVuY19kZWYsZmlsZXN0cmVhbSwmaSk7CisgIHggKz0gKChaUE9TNjRfVClpKTw8NTY7CisKKyAgaWYgKGVycj09WklQX09LKQorICAgICpwWCA9IHg7CisgIGVsc2UKKyAgICAqcFggPSAwOworCisgIHJldHVybiBlcnI7Cit9CisKKyNpZm5kZWYgQlVGUkVBRENPTU1FTlQKKyNkZWZpbmUgQlVGUkVBRENPTU1FTlQgKDB4NDAwKQorI2VuZGlmCisvKgorICBMb2NhdGUgdGhlIENlbnRyYWwgZGlyZWN0b3J5IG9mIGEgemlwZmlsZSAoYXQgdGhlIGVuZCwganVzdCBiZWZvcmUKKyAgICB0aGUgZ2xvYmFsIGNvbW1lbnQpCisqLworbG9jYWwgWlBPUzY0X1QgemlwNjRsb2NhbF9TZWFyY2hDZW50cmFsRGlyIE9GKChjb25zdCB6bGliX2ZpbGVmdW5jNjRfMzJfZGVmKiBwemxpYl9maWxlZnVuY19kZWYsIHZvaWRwZiBmaWxlc3RyZWFtKSk7CisKK2xvY2FsIFpQT1M2NF9UIHppcDY0bG9jYWxfU2VhcmNoQ2VudHJhbERpcihjb25zdCB6bGliX2ZpbGVmdW5jNjRfMzJfZGVmKiBwemxpYl9maWxlZnVuY19kZWYsIHZvaWRwZiBmaWxlc3RyZWFtKQoreworICB1bnNpZ25lZCBjaGFyKiBidWY7CisgIFpQT1M2NF9UIHVTaXplRmlsZTsKKyAgWlBPUzY0X1QgdUJhY2tSZWFkOworICBaUE9TNjRfVCB1TWF4QmFjaz0weGZmZmY7IC8qIG1heGltdW0gc2l6ZSBvZiBnbG9iYWwgY29tbWVudCAqLworICBaUE9TNjRfVCB1UG9zRm91bmQ9MDsKKworICBpZiAoWlNFRUs2NCgqcHpsaWJfZmlsZWZ1bmNfZGVmLGZpbGVzdHJlYW0sMCxaTElCX0ZJTEVGVU5DX1NFRUtfRU5EKSAhPSAwKQorICAgIHJldHVybiAwOworCisKKyAgdVNpemVGaWxlID0gWlRFTEw2NCgqcHpsaWJfZmlsZWZ1bmNfZGVmLGZpbGVzdHJlYW0pOworCisgIGlmICh1TWF4QmFjaz51U2l6ZUZpbGUpCisgICAgdU1heEJhY2sgPSB1U2l6ZUZpbGU7CisKKyAgYnVmID0gKHVuc2lnbmVkIGNoYXIqKUFMTE9DKEJVRlJFQURDT01NRU5UKzQpOworICBpZiAoYnVmPT1OVUxMKQorICAgIHJldHVybiAwOworCisgIHVCYWNrUmVhZCA9IDQ7CisgIHdoaWxlICh1QmFja1JlYWQ8dU1heEJhY2spCisgIHsKKyAgICB1TG9uZyB1UmVhZFNpemU7CisgICAgWlBPUzY0X1QgdVJlYWRQb3MgOworICAgIGludCBpOworICAgIGlmICh1QmFja1JlYWQrQlVGUkVBRENPTU1FTlQ+dU1heEJhY2spCisgICAgICB1QmFja1JlYWQgPSB1TWF4QmFjazsKKyAgICBlbHNlCisgICAgICB1QmFja1JlYWQrPUJVRlJFQURDT01NRU5UOworICAgIHVSZWFkUG9zID0gdVNpemVGaWxlLXVCYWNrUmVhZCA7CisKKyAgICB1UmVhZFNpemUgPSAoKEJVRlJFQURDT01NRU5UKzQpIDwgKHVTaXplRmlsZS11UmVhZFBvcykpID8KKyAgICAgIChCVUZSRUFEQ09NTUVOVCs0KSA6ICh1TG9uZykodVNpemVGaWxlLXVSZWFkUG9zKTsKKyAgICBpZiAoWlNFRUs2NCgqcHpsaWJfZmlsZWZ1bmNfZGVmLGZpbGVzdHJlYW0sdVJlYWRQb3MsWkxJQl9GSUxFRlVOQ19TRUVLX1NFVCkhPTApCisgICAgICBicmVhazsKKworICAgIGlmIChaUkVBRDY0KCpwemxpYl9maWxlZnVuY19kZWYsZmlsZXN0cmVhbSxidWYsdVJlYWRTaXplKSE9dVJlYWRTaXplKQorICAgICAgYnJlYWs7CisKKyAgICBmb3IgKGk9KGludCl1UmVhZFNpemUtMzsgKGktLSk+MDspCisgICAgICBpZiAoKCgqKGJ1ZitpKSk9PTB4NTApICYmICgoKihidWYraSsxKSk9PTB4NGIpICYmCisgICAgICAgICgoKihidWYraSsyKSk9PTB4MDUpICYmICgoKihidWYraSszKSk9PTB4MDYpKQorICAgICAgeworICAgICAgICB1UG9zRm91bmQgPSB1UmVhZFBvcysodW5zaWduZWQpaTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICBpZiAodVBvc0ZvdW5kIT0wKQorICAgICAgYnJlYWs7CisgIH0KKyAgVFJZRlJFRShidWYpOworICByZXR1cm4gdVBvc0ZvdW5kOworfQorCisvKgorTG9jYXRlIHRoZSBFbmQgb2YgWmlwNjQgQ2VudHJhbCBkaXJlY3RvcnkgbG9jYXRvciBhbmQgZnJvbSB0aGVyZSBmaW5kIHRoZSBDRCBvZiBhIHppcGZpbGUgKGF0IHRoZSBlbmQsIGp1c3QgYmVmb3JlCit0aGUgZ2xvYmFsIGNvbW1lbnQpCisqLworbG9jYWwgWlBPUzY0X1QgemlwNjRsb2NhbF9TZWFyY2hDZW50cmFsRGlyNjQgT0YoKGNvbnN0IHpsaWJfZmlsZWZ1bmM2NF8zMl9kZWYqIHB6bGliX2ZpbGVmdW5jX2RlZiwgdm9pZHBmIGZpbGVzdHJlYW0pKTsKKworbG9jYWwgWlBPUzY0X1QgemlwNjRsb2NhbF9TZWFyY2hDZW50cmFsRGlyNjQoY29uc3QgemxpYl9maWxlZnVuYzY0XzMyX2RlZiogcHpsaWJfZmlsZWZ1bmNfZGVmLCB2b2lkcGYgZmlsZXN0cmVhbSkKK3sKKyAgdW5zaWduZWQgY2hhciogYnVmOworICBaUE9TNjRfVCB1U2l6ZUZpbGU7CisgIFpQT1M2NF9UIHVCYWNrUmVhZDsKKyAgWlBPUzY0X1QgdU1heEJhY2s9MHhmZmZmOyAvKiBtYXhpbXVtIHNpemUgb2YgZ2xvYmFsIGNvbW1lbnQgKi8KKyAgWlBPUzY0X1QgdVBvc0ZvdW5kPTA7CisgIHVMb25nIHVMOworICBaUE9TNjRfVCByZWxhdGl2ZU9mZnNldDsKKworICBpZiAoWlNFRUs2NCgqcHpsaWJfZmlsZWZ1bmNfZGVmLGZpbGVzdHJlYW0sMCxaTElCX0ZJTEVGVU5DX1NFRUtfRU5EKSAhPSAwKQorICAgIHJldHVybiAwOworCisgIHVTaXplRmlsZSA9IFpURUxMNjQoKnB6bGliX2ZpbGVmdW5jX2RlZixmaWxlc3RyZWFtKTsKKworICBpZiAodU1heEJhY2s+dVNpemVGaWxlKQorICAgIHVNYXhCYWNrID0gdVNpemVGaWxlOworCisgIGJ1ZiA9ICh1bnNpZ25lZCBjaGFyKilBTExPQyhCVUZSRUFEQ09NTUVOVCs0KTsKKyAgaWYgKGJ1Zj09TlVMTCkKKyAgICByZXR1cm4gMDsKKworICB1QmFja1JlYWQgPSA0OworICB3aGlsZSAodUJhY2tSZWFkPHVNYXhCYWNrKQorICB7CisgICAgdUxvbmcgdVJlYWRTaXplOworICAgIFpQT1M2NF9UIHVSZWFkUG9zOworICAgIGludCBpOworICAgIGlmICh1QmFja1JlYWQrQlVGUkVBRENPTU1FTlQ+dU1heEJhY2spCisgICAgICB1QmFja1JlYWQgPSB1TWF4QmFjazsKKyAgICBlbHNlCisgICAgICB1QmFja1JlYWQrPUJVRlJFQURDT01NRU5UOworICAgIHVSZWFkUG9zID0gdVNpemVGaWxlLXVCYWNrUmVhZCA7CisKKyAgICB1UmVhZFNpemUgPSAoKEJVRlJFQURDT01NRU5UKzQpIDwgKHVTaXplRmlsZS11UmVhZFBvcykpID8KKyAgICAgIChCVUZSRUFEQ09NTUVOVCs0KSA6ICh1TG9uZykodVNpemVGaWxlLXVSZWFkUG9zKTsKKyAgICBpZiAoWlNFRUs2NCgqcHpsaWJfZmlsZWZ1bmNfZGVmLGZpbGVzdHJlYW0sdVJlYWRQb3MsWkxJQl9GSUxFRlVOQ19TRUVLX1NFVCkhPTApCisgICAgICBicmVhazsKKworICAgIGlmIChaUkVBRDY0KCpwemxpYl9maWxlZnVuY19kZWYsZmlsZXN0cmVhbSxidWYsdVJlYWRTaXplKSE9dVJlYWRTaXplKQorICAgICAgYnJlYWs7CisKKyAgICBmb3IgKGk9KGludCl1UmVhZFNpemUtMzsgKGktLSk+MDspCisgICAgeworICAgICAgLy8gU2lnbmF0dXJlICIweDA3MDY0YjUwIiBaaXA2NCBlbmQgb2YgY2VudHJhbCBkaXJlY3RvcnkgbG9jYXRlcgorICAgICAgaWYgKCgoKihidWYraSkpPT0weDUwKSAmJiAoKCooYnVmK2krMSkpPT0weDRiKSAmJiAoKCooYnVmK2krMikpPT0weDA2KSAmJiAoKCooYnVmK2krMykpPT0weDA3KSkKKyAgICAgIHsKKyAgICAgICAgdVBvc0ZvdW5kID0gdVJlYWRQb3MrKHVuc2lnbmVkKWk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKworICAgICAgaWYgKHVQb3NGb3VuZCE9MCkKKyAgICAgICAgYnJlYWs7CisgIH0KKworICBUUllGUkVFKGJ1Zik7CisgIGlmICh1UG9zRm91bmQgPT0gMCkKKyAgICByZXR1cm4gMDsKKworICAvKiBaaXA2NCBlbmQgb2YgY2VudHJhbCBkaXJlY3RvcnkgbG9jYXRvciAqLworICBpZiAoWlNFRUs2NCgqcHpsaWJfZmlsZWZ1bmNfZGVmLGZpbGVzdHJlYW0sIHVQb3NGb3VuZCxaTElCX0ZJTEVGVU5DX1NFRUtfU0VUKSE9MCkKKyAgICByZXR1cm4gMDsKKworICAvKiB0aGUgc2lnbmF0dXJlLCBhbHJlYWR5IGNoZWNrZWQgKi8KKyAgaWYgKHppcDY0bG9jYWxfZ2V0TG9uZyhwemxpYl9maWxlZnVuY19kZWYsZmlsZXN0cmVhbSwmdUwpIT1aSVBfT0spCisgICAgcmV0dXJuIDA7CisKKyAgLyogbnVtYmVyIG9mIHRoZSBkaXNrIHdpdGggdGhlIHN0YXJ0IG9mIHRoZSB6aXA2NCBlbmQgb2YgIGNlbnRyYWwgZGlyZWN0b3J5ICovCisgIGlmICh6aXA2NGxvY2FsX2dldExvbmcocHpsaWJfZmlsZWZ1bmNfZGVmLGZpbGVzdHJlYW0sJnVMKSE9WklQX09LKQorICAgIHJldHVybiAwOworICBpZiAodUwgIT0gMCkKKyAgICByZXR1cm4gMDsKKworICAvKiByZWxhdGl2ZSBvZmZzZXQgb2YgdGhlIHppcDY0IGVuZCBvZiBjZW50cmFsIGRpcmVjdG9yeSByZWNvcmQgKi8KKyAgaWYgKHppcDY0bG9jYWxfZ2V0TG9uZzY0KHB6bGliX2ZpbGVmdW5jX2RlZixmaWxlc3RyZWFtLCZyZWxhdGl2ZU9mZnNldCkhPVpJUF9PSykKKyAgICByZXR1cm4gMDsKKworICAvKiB0b3RhbCBudW1iZXIgb2YgZGlza3MgKi8KKyAgaWYgKHppcDY0bG9jYWxfZ2V0TG9uZyhwemxpYl9maWxlZnVuY19kZWYsZmlsZXN0cmVhbSwmdUwpIT1aSVBfT0spCisgICAgcmV0dXJuIDA7CisgIGlmICh1TCAhPSAxKQorICAgIHJldHVybiAwOworCisgIC8qIEdvdG8gWmlwNjQgZW5kIG9mIGNlbnRyYWwgZGlyZWN0b3J5IHJlY29yZCAqLworICBpZiAoWlNFRUs2NCgqcHpsaWJfZmlsZWZ1bmNfZGVmLGZpbGVzdHJlYW0sIHJlbGF0aXZlT2Zmc2V0LFpMSUJfRklMRUZVTkNfU0VFS19TRVQpIT0wKQorICAgIHJldHVybiAwOworCisgIC8qIHRoZSBzaWduYXR1cmUgKi8KKyAgaWYgKHppcDY0bG9jYWxfZ2V0TG9uZyhwemxpYl9maWxlZnVuY19kZWYsZmlsZXN0cmVhbSwmdUwpIT1aSVBfT0spCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKHVMICE9IDB4MDYwNjRiNTApIC8vIHNpZ25hdHVyZSBvZiAnWmlwNjQgZW5kIG9mIGNlbnRyYWwgZGlyZWN0b3J5JworICAgIHJldHVybiAwOworCisgIHJldHVybiByZWxhdGl2ZU9mZnNldDsKK30KKworbG9jYWwgaW50IExvYWRDZW50cmFsRGlyZWN0b3J5UmVjb3JkKHppcDY0X2ludGVybmFsKiBwemlpbml0KQoreworICBpbnQgZXJyPVpJUF9PSzsKKyAgWlBPUzY0X1QgYnl0ZV9iZWZvcmVfdGhlX3ppcGZpbGU7LyogYnl0ZSBiZWZvcmUgdGhlIHppcGZpbGUsICg+MCBmb3Igc2Z4KSovCisKKyAgWlBPUzY0X1Qgc2l6ZV9jZW50cmFsX2RpcjsgICAgIC8qIHNpemUgb2YgdGhlIGNlbnRyYWwgZGlyZWN0b3J5ICAqLworICBaUE9TNjRfVCBvZmZzZXRfY2VudHJhbF9kaXI7ICAgLyogb2Zmc2V0IG9mIHN0YXJ0IG9mIGNlbnRyYWwgZGlyZWN0b3J5ICovCisgIFpQT1M2NF9UIGNlbnRyYWxfcG9zOworICB1TG9uZyB1TDsKKworICB1TG9uZyBudW1iZXJfZGlzazsgICAgICAgICAgLyogbnVtYmVyIG9mIHRoZSBjdXJyZW50IGRpc3QsIHVzZWQgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFuaW5nIFpJUCwgdW5zdXBwb3J0ZWQsIGFsd2F5cyAwKi8KKyAgdUxvbmcgbnVtYmVyX2Rpc2tfd2l0aF9DRDsgIC8qIG51bWJlciB0aGUgdGhlIGRpc2sgd2l0aCBjZW50cmFsIGRpciwgdXNlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHNwYW5pbmcgWklQLCB1bnN1cHBvcnRlZCwgYWx3YXlzIDAqLworICBaUE9TNjRfVCBudW1iZXJfZW50cnk7CisgIFpQT1M2NF9UIG51bWJlcl9lbnRyeV9DRDsgICAgICAvKiB0b3RhbCBudW1iZXIgb2YgZW50cmllcyBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY2VudHJhbCBkaXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNhbWUgdGhhbiBudW1iZXJfZW50cnkgb24gbm9zcGFuKSAqLworICB1TG9uZyBWZXJzaW9uTWFkZUJ5OworICB1TG9uZyBWZXJzaW9uTmVlZGVkOworICB1TG9uZyBzaXplX2NvbW1lbnQ7CisKKyAgaW50IGhhc1pJUDY0UmVjb3JkID0gMDsKKworICAvLyBjaGVjayBmaXJzdCBpZiB3ZSBmaW5kIGEgWklQNjQgcmVjb3JkCisgIGNlbnRyYWxfcG9zID0gemlwNjRsb2NhbF9TZWFyY2hDZW50cmFsRGlyNjQoJnB6aWluaXQtPnpfZmlsZWZ1bmMscHppaW5pdC0+ZmlsZXN0cmVhbSk7CisgIGlmKGNlbnRyYWxfcG9zID4gMCkKKyAgeworICAgIGhhc1pJUDY0UmVjb3JkID0gMTsKKyAgfQorICBlbHNlIGlmKGNlbnRyYWxfcG9zID09IDApCisgIHsKKyAgICBjZW50cmFsX3BvcyA9IHppcDY0bG9jYWxfU2VhcmNoQ2VudHJhbERpcigmcHppaW5pdC0+el9maWxlZnVuYyxwemlpbml0LT5maWxlc3RyZWFtKTsKKyAgfQorCisvKiBkaXNhYmxlIHRvIGFsbG93IGFwcGVuZGluZyB0byBlbXB0eSBaSVAgYXJjaGl2ZQorICAgICAgICBpZiAoY2VudHJhbF9wb3M9PTApCisgICAgICAgICAgICBlcnI9WklQX0VSUk5POworKi8KKworICBpZihoYXNaSVA2NFJlY29yZCkKKyAgeworICAgIFpQT1M2NF9UIHNpemVFbmRPZkNlbnRyYWxEaXJlY3Rvcnk7CisgICAgaWYgKFpTRUVLNjQocHppaW5pdC0+el9maWxlZnVuYywgcHppaW5pdC0+ZmlsZXN0cmVhbSwgY2VudHJhbF9wb3MsIFpMSUJfRklMRUZVTkNfU0VFS19TRVQpICE9IDApCisgICAgICBlcnI9WklQX0VSUk5POworCisgICAgLyogdGhlIHNpZ25hdHVyZSwgYWxyZWFkeSBjaGVja2VkICovCisgICAgaWYgKHppcDY0bG9jYWxfZ2V0TG9uZygmcHppaW5pdC0+el9maWxlZnVuYywgcHppaW5pdC0+ZmlsZXN0cmVhbSwmdUwpIT1aSVBfT0spCisgICAgICBlcnI9WklQX0VSUk5POworCisgICAgLyogc2l6ZSBvZiB6aXA2NCBlbmQgb2YgY2VudHJhbCBkaXJlY3RvcnkgcmVjb3JkICovCisgICAgaWYgKHppcDY0bG9jYWxfZ2V0TG9uZzY0KCZwemlpbml0LT56X2ZpbGVmdW5jLCBwemlpbml0LT5maWxlc3RyZWFtLCAmc2l6ZUVuZE9mQ2VudHJhbERpcmVjdG9yeSkhPVpJUF9PSykKKyAgICAgIGVycj1aSVBfRVJSTk87CisKKyAgICAvKiB2ZXJzaW9uIG1hZGUgYnkgKi8KKyAgICBpZiAoemlwNjRsb2NhbF9nZXRTaG9ydCgmcHppaW5pdC0+el9maWxlZnVuYywgcHppaW5pdC0+ZmlsZXN0cmVhbSwgJlZlcnNpb25NYWRlQnkpIT1aSVBfT0spCisgICAgICBlcnI9WklQX0VSUk5POworCisgICAgLyogdmVyc2lvbiBuZWVkZWQgdG8gZXh0cmFjdCAqLworICAgIGlmICh6aXA2NGxvY2FsX2dldFNob3J0KCZwemlpbml0LT56X2ZpbGVmdW5jLCBwemlpbml0LT5maWxlc3RyZWFtLCAmVmVyc2lvbk5lZWRlZCkhPVpJUF9PSykKKyAgICAgIGVycj1aSVBfRVJSTk87CisKKyAgICAvKiBudW1iZXIgb2YgdGhpcyBkaXNrICovCisgICAgaWYgKHppcDY0bG9jYWxfZ2V0TG9uZygmcHppaW5pdC0+el9maWxlZnVuYywgcHppaW5pdC0+ZmlsZXN0cmVhbSwmbnVtYmVyX2Rpc2spIT1aSVBfT0spCisgICAgICBlcnI9WklQX0VSUk5POworCisgICAgLyogbnVtYmVyIG9mIHRoZSBkaXNrIHdpdGggdGhlIHN0YXJ0IG9mIHRoZSBjZW50cmFsIGRpcmVjdG9yeSAqLworICAgIGlmICh6aXA2NGxvY2FsX2dldExvbmcoJnB6aWluaXQtPnpfZmlsZWZ1bmMsIHB6aWluaXQtPmZpbGVzdHJlYW0sJm51bWJlcl9kaXNrX3dpdGhfQ0QpIT1aSVBfT0spCisgICAgICBlcnI9WklQX0VSUk5POworCisgICAgLyogdG90YWwgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGNlbnRyYWwgZGlyZWN0b3J5IG9uIHRoaXMgZGlzayAqLworICAgIGlmICh6aXA2NGxvY2FsX2dldExvbmc2NCgmcHppaW5pdC0+el9maWxlZnVuYywgcHppaW5pdC0+ZmlsZXN0cmVhbSwgJm51bWJlcl9lbnRyeSkhPVpJUF9PSykKKyAgICAgIGVycj1aSVBfRVJSTk87CisKKyAgICAvKiB0b3RhbCBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgY2VudHJhbCBkaXJlY3RvcnkgKi8KKyAgICBpZiAoemlwNjRsb2NhbF9nZXRMb25nNjQoJnB6aWluaXQtPnpfZmlsZWZ1bmMsIHB6aWluaXQtPmZpbGVzdHJlYW0sJm51bWJlcl9lbnRyeV9DRCkhPVpJUF9PSykKKyAgICAgIGVycj1aSVBfRVJSTk87CisKKyAgICBpZiAoKG51bWJlcl9lbnRyeV9DRCE9bnVtYmVyX2VudHJ5KSB8fCAobnVtYmVyX2Rpc2tfd2l0aF9DRCE9MCkgfHwgKG51bWJlcl9kaXNrIT0wKSkKKyAgICAgIGVycj1aSVBfQkFEWklQRklMRTsKKworICAgIC8qIHNpemUgb2YgdGhlIGNlbnRyYWwgZGlyZWN0b3J5ICovCisgICAgaWYgKHppcDY0bG9jYWxfZ2V0TG9uZzY0KCZwemlpbml0LT56X2ZpbGVmdW5jLCBwemlpbml0LT5maWxlc3RyZWFtLCZzaXplX2NlbnRyYWxfZGlyKSE9WklQX09LKQorICAgICAgZXJyPVpJUF9FUlJOTzsKKworICAgIC8qIG9mZnNldCBvZiBzdGFydCBvZiBjZW50cmFsIGRpcmVjdG9yeSB3aXRoIHJlc3BlY3QgdG8gdGhlCisgICAgc3RhcnRpbmcgZGlzayBudW1iZXIgKi8KKyAgICBpZiAoemlwNjRsb2NhbF9nZXRMb25nNjQoJnB6aWluaXQtPnpfZmlsZWZ1bmMsIHB6aWluaXQtPmZpbGVzdHJlYW0sJm9mZnNldF9jZW50cmFsX2RpcikhPVpJUF9PSykKKyAgICAgIGVycj1aSVBfRVJSTk87CisKKyAgICAvLyBUT0RPLi4KKyAgICAvLyByZWFkIHRoZSBjb21tZW50IGZyb20gdGhlIHN0YW5kYXJkIGNlbnRyYWwgaGVhZGVyLgorICAgIHNpemVfY29tbWVudCA9IDA7CisgIH0KKyAgZWxzZQorICB7CisgICAgLy8gUmVhZCBFbmQgb2YgY2VudHJhbCBEaXJlY3RvcnkgaW5mbworICAgIGlmIChaU0VFSzY0KHB6aWluaXQtPnpfZmlsZWZ1bmMsIHB6aWluaXQtPmZpbGVzdHJlYW0sIGNlbnRyYWxfcG9zLFpMSUJfRklMRUZVTkNfU0VFS19TRVQpIT0wKQorICAgICAgZXJyPVpJUF9FUlJOTzsKKworICAgIC8qIHRoZSBzaWduYXR1cmUsIGFscmVhZHkgY2hlY2tlZCAqLworICAgIGlmICh6aXA2NGxvY2FsX2dldExvbmcoJnB6aWluaXQtPnpfZmlsZWZ1bmMsIHB6aWluaXQtPmZpbGVzdHJlYW0sJnVMKSE9WklQX09LKQorICAgICAgZXJyPVpJUF9FUlJOTzsKKworICAgIC8qIG51bWJlciBvZiB0aGlzIGRpc2sgKi8KKyAgICBpZiAoemlwNjRsb2NhbF9nZXRTaG9ydCgmcHppaW5pdC0+el9maWxlZnVuYywgcHppaW5pdC0+ZmlsZXN0cmVhbSwmbnVtYmVyX2Rpc2spIT1aSVBfT0spCisgICAgICBlcnI9WklQX0VSUk5POworCisgICAgLyogbnVtYmVyIG9mIHRoZSBkaXNrIHdpdGggdGhlIHN0YXJ0IG9mIHRoZSBjZW50cmFsIGRpcmVjdG9yeSAqLworICAgIGlmICh6aXA2NGxvY2FsX2dldFNob3J0KCZwemlpbml0LT56X2ZpbGVmdW5jLCBwemlpbml0LT5maWxlc3RyZWFtLCZudW1iZXJfZGlza193aXRoX0NEKSE9WklQX09LKQorICAgICAgZXJyPVpJUF9FUlJOTzsKKworICAgIC8qIHRvdGFsIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBjZW50cmFsIGRpciBvbiB0aGlzIGRpc2sgKi8KKyAgICBudW1iZXJfZW50cnkgPSAwOworICAgIGlmICh6aXA2NGxvY2FsX2dldFNob3J0KCZwemlpbml0LT56X2ZpbGVmdW5jLCBwemlpbml0LT5maWxlc3RyZWFtLCAmdUwpIT1aSVBfT0spCisgICAgICBlcnI9WklQX0VSUk5POworICAgIGVsc2UKKyAgICAgIG51bWJlcl9lbnRyeSA9IHVMOworCisgICAgLyogdG90YWwgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGNlbnRyYWwgZGlyICovCisgICAgbnVtYmVyX2VudHJ5X0NEID0gMDsKKyAgICBpZiAoemlwNjRsb2NhbF9nZXRTaG9ydCgmcHppaW5pdC0+el9maWxlZnVuYywgcHppaW5pdC0+ZmlsZXN0cmVhbSwgJnVMKSE9WklQX09LKQorICAgICAgZXJyPVpJUF9FUlJOTzsKKyAgICBlbHNlCisgICAgICBudW1iZXJfZW50cnlfQ0QgPSB1TDsKKworICAgIGlmICgobnVtYmVyX2VudHJ5X0NEIT1udW1iZXJfZW50cnkpIHx8IChudW1iZXJfZGlza193aXRoX0NEIT0wKSB8fCAobnVtYmVyX2Rpc2shPTApKQorICAgICAgZXJyPVpJUF9CQURaSVBGSUxFOworCisgICAgLyogc2l6ZSBvZiB0aGUgY2VudHJhbCBkaXJlY3RvcnkgKi8KKyAgICBzaXplX2NlbnRyYWxfZGlyID0gMDsKKyAgICBpZiAoemlwNjRsb2NhbF9nZXRMb25nKCZwemlpbml0LT56X2ZpbGVmdW5jLCBwemlpbml0LT5maWxlc3RyZWFtLCAmdUwpIT1aSVBfT0spCisgICAgICBlcnI9WklQX0VSUk5POworICAgIGVsc2UKKyAgICAgIHNpemVfY2VudHJhbF9kaXIgPSB1TDsKKworICAgIC8qIG9mZnNldCBvZiBzdGFydCBvZiBjZW50cmFsIGRpcmVjdG9yeSB3aXRoIHJlc3BlY3QgdG8gdGhlIHN0YXJ0aW5nIGRpc2sgbnVtYmVyICovCisgICAgb2Zmc2V0X2NlbnRyYWxfZGlyID0gMDsKKyAgICBpZiAoemlwNjRsb2NhbF9nZXRMb25nKCZwemlpbml0LT56X2ZpbGVmdW5jLCBwemlpbml0LT5maWxlc3RyZWFtLCAmdUwpIT1aSVBfT0spCisgICAgICBlcnI9WklQX0VSUk5POworICAgIGVsc2UKKyAgICAgIG9mZnNldF9jZW50cmFsX2RpciA9IHVMOworCisKKyAgICAvKiB6aXBmaWxlIGdsb2JhbCBjb21tZW50IGxlbmd0aCAqLworICAgIGlmICh6aXA2NGxvY2FsX2dldFNob3J0KCZwemlpbml0LT56X2ZpbGVmdW5jLCBwemlpbml0LT5maWxlc3RyZWFtLCAmc2l6ZV9jb21tZW50KSE9WklQX09LKQorICAgICAgZXJyPVpJUF9FUlJOTzsKKyAgfQorCisgIGlmICgoY2VudHJhbF9wb3M8b2Zmc2V0X2NlbnRyYWxfZGlyK3NpemVfY2VudHJhbF9kaXIpICYmCisgICAgKGVycj09WklQX09LKSkKKyAgICBlcnI9WklQX0JBRFpJUEZJTEU7CisKKyAgaWYgKGVyciE9WklQX09LKQorICB7CisgICAgWkNMT1NFNjQocHppaW5pdC0+el9maWxlZnVuYywgcHppaW5pdC0+ZmlsZXN0cmVhbSk7CisgICAgcmV0dXJuIFpJUF9FUlJOTzsKKyAgfQorCisgIGlmIChzaXplX2NvbW1lbnQ+MCkKKyAgeworICAgIHB6aWluaXQtPmdsb2JhbGNvbW1lbnQgPSAoY2hhciopQUxMT0Moc2l6ZV9jb21tZW50KzEpOworICAgIGlmIChwemlpbml0LT5nbG9iYWxjb21tZW50KQorICAgIHsKKyAgICAgIHNpemVfY29tbWVudCA9IFpSRUFENjQocHppaW5pdC0+el9maWxlZnVuYywgcHppaW5pdC0+ZmlsZXN0cmVhbSwgcHppaW5pdC0+Z2xvYmFsY29tbWVudCxzaXplX2NvbW1lbnQpOworICAgICAgcHppaW5pdC0+Z2xvYmFsY29tbWVudFtzaXplX2NvbW1lbnRdPTA7CisgICAgfQorICB9CisKKyAgYnl0ZV9iZWZvcmVfdGhlX3ppcGZpbGUgPSBjZW50cmFsX3BvcyAtIChvZmZzZXRfY2VudHJhbF9kaXIrc2l6ZV9jZW50cmFsX2Rpcik7CisgIHB6aWluaXQtPmFkZF9wb3NpdGlvbl93aGVuX3dyaXRpbmdfb2Zmc2V0ID0gYnl0ZV9iZWZvcmVfdGhlX3ppcGZpbGU7CisKKyAgeworICAgIFpQT1M2NF9UIHNpemVfY2VudHJhbF9kaXJfdG9fcmVhZCA9IHNpemVfY2VudHJhbF9kaXI7CisgICAgc2l6ZV90IGJ1Zl9zaXplID0gU0laRURBVEFfSU5EQVRBQkxPQ0s7CisgICAgdm9pZCogYnVmX3JlYWQgPSAodm9pZCopQUxMT0MoYnVmX3NpemUpOworICAgIGlmIChaU0VFSzY0KHB6aWluaXQtPnpfZmlsZWZ1bmMsIHB6aWluaXQtPmZpbGVzdHJlYW0sIG9mZnNldF9jZW50cmFsX2RpciArIGJ5dGVfYmVmb3JlX3RoZV96aXBmaWxlLCBaTElCX0ZJTEVGVU5DX1NFRUtfU0VUKSAhPSAwKQorICAgICAgZXJyPVpJUF9FUlJOTzsKKworICAgIHdoaWxlICgoc2l6ZV9jZW50cmFsX2Rpcl90b19yZWFkPjApICYmIChlcnI9PVpJUF9PSykpCisgICAgeworICAgICAgWlBPUzY0X1QgcmVhZF90aGlzID0gU0laRURBVEFfSU5EQVRBQkxPQ0s7CisgICAgICBpZiAocmVhZF90aGlzID4gc2l6ZV9jZW50cmFsX2Rpcl90b19yZWFkKQorICAgICAgICByZWFkX3RoaXMgPSBzaXplX2NlbnRyYWxfZGlyX3RvX3JlYWQ7CisKKyAgICAgIGlmIChaUkVBRDY0KHB6aWluaXQtPnpfZmlsZWZ1bmMsIHB6aWluaXQtPmZpbGVzdHJlYW0sYnVmX3JlYWQsKHVMb25nKXJlYWRfdGhpcykgIT0gcmVhZF90aGlzKQorICAgICAgICBlcnI9WklQX0VSUk5POworCisgICAgICBpZiAoZXJyPT1aSVBfT0spCisgICAgICAgIGVyciA9IGFkZF9kYXRhX2luX2RhdGFibG9jaygmcHppaW5pdC0+Y2VudHJhbF9kaXIsYnVmX3JlYWQsICh1TG9uZylyZWFkX3RoaXMpOworCisgICAgICBzaXplX2NlbnRyYWxfZGlyX3RvX3JlYWQtPXJlYWRfdGhpczsKKyAgICB9CisgICAgVFJZRlJFRShidWZfcmVhZCk7CisgIH0KKyAgcHppaW5pdC0+YmVnaW5fcG9zID0gYnl0ZV9iZWZvcmVfdGhlX3ppcGZpbGU7CisgIHB6aWluaXQtPm51bWJlcl9lbnRyeSA9IG51bWJlcl9lbnRyeV9DRDsKKworICBpZiAoWlNFRUs2NChwemlpbml0LT56X2ZpbGVmdW5jLCBwemlpbml0LT5maWxlc3RyZWFtLCBvZmZzZXRfY2VudHJhbF9kaXIrYnl0ZV9iZWZvcmVfdGhlX3ppcGZpbGUsWkxJQl9GSUxFRlVOQ19TRUVLX1NFVCkgIT0gMCkKKyAgICBlcnI9WklQX0VSUk5POworCisgIHJldHVybiBlcnI7Cit9CisKKworI2VuZGlmIC8qICFOT19BRERGSUxFSU5FWElTVElOR1pJUCovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiB6aXBGaWxlIFpFWFBPUlQgemlwT3BlbjMgKGNvbnN0IHZvaWQgKnBhdGhuYW1lLCBpbnQgYXBwZW5kLCB6aXBjaGFycGMqIGdsb2JhbGNvbW1lbnQsIHpsaWJfZmlsZWZ1bmM2NF8zMl9kZWYqIHB6bGliX2ZpbGVmdW5jNjRfMzJfZGVmKQoreworICAgIHppcDY0X2ludGVybmFsIHppaW5pdDsKKyAgICB6aXA2NF9pbnRlcm5hbCogemk7CisgICAgaW50IGVycj1aSVBfT0s7CisKKyAgICB6aWluaXQuel9maWxlZnVuYy56c2VlazMyX2ZpbGUgPSBOVUxMOworICAgIHppaW5pdC56X2ZpbGVmdW5jLnp0ZWxsMzJfZmlsZSA9IE5VTEw7CisgICAgaWYgKHB6bGliX2ZpbGVmdW5jNjRfMzJfZGVmPT1OVUxMKQorICAgICAgICBmaWxsX2ZvcGVuNjRfZmlsZWZ1bmMoJnppaW5pdC56X2ZpbGVmdW5jLnpmaWxlX2Z1bmM2NCk7CisgICAgZWxzZQorICAgICAgICB6aWluaXQuel9maWxlZnVuYyA9ICpwemxpYl9maWxlZnVuYzY0XzMyX2RlZjsKKworICAgIHppaW5pdC5maWxlc3RyZWFtID0gWk9QRU42NCh6aWluaXQuel9maWxlZnVuYywKKyAgICAgICAgICAgICAgICAgIHBhdGhuYW1lLAorICAgICAgICAgICAgICAgICAgKGFwcGVuZCA9PSBBUFBFTkRfU1RBVFVTX0NSRUFURSkgPworICAgICAgICAgICAgICAgICAgKFpMSUJfRklMRUZVTkNfTU9ERV9SRUFEIHwgWkxJQl9GSUxFRlVOQ19NT0RFX1dSSVRFIHwgWkxJQl9GSUxFRlVOQ19NT0RFX0NSRUFURSkgOgorICAgICAgICAgICAgICAgICAgICAoWkxJQl9GSUxFRlVOQ19NT0RFX1JFQUQgfCBaTElCX0ZJTEVGVU5DX01PREVfV1JJVEUgfCBaTElCX0ZJTEVGVU5DX01PREVfRVhJU1RJTkcpKTsKKworICAgIGlmICh6aWluaXQuZmlsZXN0cmVhbSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChhcHBlbmQgPT0gQVBQRU5EX1NUQVRVU19DUkVBVEVBRlRFUikKKyAgICAgICAgWlNFRUs2NCh6aWluaXQuel9maWxlZnVuYyx6aWluaXQuZmlsZXN0cmVhbSwwLFNFRUtfRU5EKTsKKworICAgIHppaW5pdC5iZWdpbl9wb3MgPSBaVEVMTDY0KHppaW5pdC56X2ZpbGVmdW5jLHppaW5pdC5maWxlc3RyZWFtKTsKKyAgICB6aWluaXQuaW5fb3BlbmVkX2ZpbGVfaW56aXAgPSAwOworICAgIHppaW5pdC5jaS5zdHJlYW1faW5pdGlhbGlzZWQgPSAwOworICAgIHppaW5pdC5udW1iZXJfZW50cnkgPSAwOworICAgIHppaW5pdC5hZGRfcG9zaXRpb25fd2hlbl93cml0aW5nX29mZnNldCA9IDA7CisgICAgaW5pdF9saW5rZWRsaXN0KCYoemlpbml0LmNlbnRyYWxfZGlyKSk7CisKKworCisgICAgemkgPSAoemlwNjRfaW50ZXJuYWwqKUFMTE9DKHNpemVvZih6aXA2NF9pbnRlcm5hbCkpOworICAgIGlmICh6aT09TlVMTCkKKyAgICB7CisgICAgICAgIFpDTE9TRTY0KHppaW5pdC56X2ZpbGVmdW5jLHppaW5pdC5maWxlc3RyZWFtKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyogbm93IHdlIGFkZCBmaWxlIGluIGEgemlwZmlsZSAqLworIyAgICBpZm5kZWYgTk9fQURERklMRUlORVhJU1RJTkdaSVAKKyAgICB6aWluaXQuZ2xvYmFsY29tbWVudCA9IE5VTEw7CisgICAgaWYgKGFwcGVuZCA9PSBBUFBFTkRfU1RBVFVTX0FERElOWklQKQorICAgIHsKKyAgICAgIC8vIFJlYWQgYW5kIENhY2hlIENlbnRyYWwgRGlyZWN0b3J5IFJlY29yZHMKKyAgICAgIGVyciA9IExvYWRDZW50cmFsRGlyZWN0b3J5UmVjb3JkKCZ6aWluaXQpOworICAgIH0KKworICAgIGlmIChnbG9iYWxjb21tZW50KQorICAgIHsKKyAgICAgICpnbG9iYWxjb21tZW50ID0gemlpbml0Lmdsb2JhbGNvbW1lbnQ7CisgICAgfQorIyAgICBlbmRpZiAvKiAhTk9fQURERklMRUlORVhJU1RJTkdaSVAqLworCisgICAgaWYgKGVyciAhPSBaSVBfT0spCisgICAgeworIyAgICBpZm5kZWYgTk9fQURERklMRUlORVhJU1RJTkdaSVAKKyAgICAgICAgVFJZRlJFRSh6aWluaXQuZ2xvYmFsY29tbWVudCk7CisjICAgIGVuZGlmIC8qICFOT19BRERGSUxFSU5FWElTVElOR1pJUCovCisgICAgICAgIFRSWUZSRUUoemkpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKnppID0gemlpbml0OworICAgICAgICByZXR1cm4gKHppcEZpbGUpemk7CisgICAgfQorfQorCitleHRlcm4gemlwRmlsZSBaRVhQT1JUIHppcE9wZW4yIChjb25zdCBjaGFyICpwYXRobmFtZSwgaW50IGFwcGVuZCwgemlwY2hhcnBjKiBnbG9iYWxjb21tZW50LCB6bGliX2ZpbGVmdW5jX2RlZiogcHpsaWJfZmlsZWZ1bmMzMl9kZWYpCit7CisgICAgaWYgKHB6bGliX2ZpbGVmdW5jMzJfZGVmICE9IE5VTEwpCisgICAgeworICAgICAgICB6bGliX2ZpbGVmdW5jNjRfMzJfZGVmIHpsaWJfZmlsZWZ1bmM2NF8zMl9kZWZfZmlsbDsKKyAgICAgICAgZmlsbF96bGliX2ZpbGVmdW5jNjRfMzJfZGVmX2Zyb21fZmlsZWZ1bmMzMigmemxpYl9maWxlZnVuYzY0XzMyX2RlZl9maWxsLHB6bGliX2ZpbGVmdW5jMzJfZGVmKTsKKyAgICAgICAgcmV0dXJuIHppcE9wZW4zKHBhdGhuYW1lLCBhcHBlbmQsIGdsb2JhbGNvbW1lbnQsICZ6bGliX2ZpbGVmdW5jNjRfMzJfZGVmX2ZpbGwpOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHJldHVybiB6aXBPcGVuMyhwYXRobmFtZSwgYXBwZW5kLCBnbG9iYWxjb21tZW50LCBOVUxMKTsKK30KKworZXh0ZXJuIHppcEZpbGUgWkVYUE9SVCB6aXBPcGVuMl82NCAoY29uc3Qgdm9pZCAqcGF0aG5hbWUsIGludCBhcHBlbmQsIHppcGNoYXJwYyogZ2xvYmFsY29tbWVudCwgemxpYl9maWxlZnVuYzY0X2RlZiogcHpsaWJfZmlsZWZ1bmNfZGVmKQoreworICAgIGlmIChwemxpYl9maWxlZnVuY19kZWYgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIHpsaWJfZmlsZWZ1bmM2NF8zMl9kZWYgemxpYl9maWxlZnVuYzY0XzMyX2RlZl9maWxsOworICAgICAgICB6bGliX2ZpbGVmdW5jNjRfMzJfZGVmX2ZpbGwuemZpbGVfZnVuYzY0ID0gKnB6bGliX2ZpbGVmdW5jX2RlZjsKKyAgICAgICAgemxpYl9maWxlZnVuYzY0XzMyX2RlZl9maWxsLnp0ZWxsMzJfZmlsZSA9IE5VTEw7CisgICAgICAgIHpsaWJfZmlsZWZ1bmM2NF8zMl9kZWZfZmlsbC56c2VlazMyX2ZpbGUgPSBOVUxMOworICAgICAgICByZXR1cm4gemlwT3BlbjMocGF0aG5hbWUsIGFwcGVuZCwgZ2xvYmFsY29tbWVudCwgJnpsaWJfZmlsZWZ1bmM2NF8zMl9kZWZfZmlsbCk7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIHppcE9wZW4zKHBhdGhuYW1lLCBhcHBlbmQsIGdsb2JhbGNvbW1lbnQsIE5VTEwpOworfQorCisKKworZXh0ZXJuIHppcEZpbGUgWkVYUE9SVCB6aXBPcGVuIChjb25zdCBjaGFyKiBwYXRobmFtZSwgaW50IGFwcGVuZCkKK3sKKyAgICByZXR1cm4gemlwT3BlbjMoKGNvbnN0IHZvaWQqKXBhdGhuYW1lLGFwcGVuZCxOVUxMLE5VTEwpOworfQorCitleHRlcm4gemlwRmlsZSBaRVhQT1JUIHppcE9wZW42NCAoY29uc3Qgdm9pZCogcGF0aG5hbWUsIGludCBhcHBlbmQpCit7CisgICAgcmV0dXJuIHppcE9wZW4zKHBhdGhuYW1lLGFwcGVuZCxOVUxMLE5VTEwpOworfQorCitsb2NhbCBpbnQgV3JpdGVfTG9jYWxGaWxlSGVhZGVyKHppcDY0X2ludGVybmFsKiB6aSwgY29uc3QgY2hhciogZmlsZW5hbWUsIHVJbnQgc2l6ZV9leHRyYWZpZWxkX2xvY2FsLCBjb25zdCB2b2lkKiBleHRyYWZpZWxkX2xvY2FsKQoreworICAvKiB3cml0ZSB0aGUgbG9jYWwgaGVhZGVyICovCisgIGludCBlcnI7CisgIHVJbnQgc2l6ZV9maWxlbmFtZSA9ICh1SW50KXN0cmxlbihmaWxlbmFtZSk7CisgIHVJbnQgc2l6ZV9leHRyYWZpZWxkID0gc2l6ZV9leHRyYWZpZWxkX2xvY2FsOworCisgIGVyciA9IHppcDY0bG9jYWxfcHV0VmFsdWUoJnppLT56X2ZpbGVmdW5jLHppLT5maWxlc3RyZWFtLCh1TG9uZylMT0NBTEhFQURFUk1BR0lDLCA0KTsKKworICBpZiAoZXJyPT1aSVBfT0spCisgIHsKKyAgICBpZih6aS0+Y2kuemlwNjQpCisgICAgICBlcnIgPSB6aXA2NGxvY2FsX3B1dFZhbHVlKCZ6aS0+el9maWxlZnVuYyx6aS0+ZmlsZXN0cmVhbSwodUxvbmcpNDUsMik7LyogdmVyc2lvbiBuZWVkZWQgdG8gZXh0cmFjdCAqLworICAgIGVsc2UKKyAgICAgIGVyciA9IHppcDY0bG9jYWxfcHV0VmFsdWUoJnppLT56X2ZpbGVmdW5jLHppLT5maWxlc3RyZWFtLCh1TG9uZykyMCwyKTsvKiB2ZXJzaW9uIG5lZWRlZCB0byBleHRyYWN0ICovCisgIH0KKworICBpZiAoZXJyPT1aSVBfT0spCisgICAgZXJyID0gemlwNjRsb2NhbF9wdXRWYWx1ZSgmemktPnpfZmlsZWZ1bmMsemktPmZpbGVzdHJlYW0sKHVMb25nKXppLT5jaS5mbGFnLDIpOworCisgIGlmIChlcnI9PVpJUF9PSykKKyAgICBlcnIgPSB6aXA2NGxvY2FsX3B1dFZhbHVlKCZ6aS0+el9maWxlZnVuYyx6aS0+ZmlsZXN0cmVhbSwodUxvbmcpemktPmNpLm1ldGhvZCwyKTsKKworICBpZiAoZXJyPT1aSVBfT0spCisgICAgZXJyID0gemlwNjRsb2NhbF9wdXRWYWx1ZSgmemktPnpfZmlsZWZ1bmMsemktPmZpbGVzdHJlYW0sKHVMb25nKXppLT5jaS5kb3NEYXRlLDQpOworCisgIC8vIENSQyAvIENvbXByZXNzZWQgc2l6ZSAvIFVuY29tcHJlc3NlZCBzaXplIHdpbGwgYmUgZmlsbGVkIGluIGxhdGVyIGFuZCByZXdyaXR0ZW4gbGF0ZXIKKyAgaWYgKGVycj09WklQX09LKQorICAgIGVyciA9IHppcDY0bG9jYWxfcHV0VmFsdWUoJnppLT56X2ZpbGVmdW5jLHppLT5maWxlc3RyZWFtLCh1TG9uZykwLDQpOyAvKiBjcmMgMzIsIHVua25vd24gKi8KKyAgaWYgKGVycj09WklQX09LKQorICB7CisgICAgaWYoemktPmNpLnppcDY0KQorICAgICAgZXJyID0gemlwNjRsb2NhbF9wdXRWYWx1ZSgmemktPnpfZmlsZWZ1bmMsemktPmZpbGVzdHJlYW0sKHVMb25nKTB4RkZGRkZGRkYsNCk7IC8qIGNvbXByZXNzZWQgc2l6ZSwgdW5rbm93biAqLworICAgIGVsc2UKKyAgICAgIGVyciA9IHppcDY0bG9jYWxfcHV0VmFsdWUoJnppLT56X2ZpbGVmdW5jLHppLT5maWxlc3RyZWFtLCh1TG9uZykwLDQpOyAvKiBjb21wcmVzc2VkIHNpemUsIHVua25vd24gKi8KKyAgfQorICBpZiAoZXJyPT1aSVBfT0spCisgIHsKKyAgICBpZih6aS0+Y2kuemlwNjQpCisgICAgICBlcnIgPSB6aXA2NGxvY2FsX3B1dFZhbHVlKCZ6aS0+el9maWxlZnVuYyx6aS0+ZmlsZXN0cmVhbSwodUxvbmcpMHhGRkZGRkZGRiw0KTsgLyogdW5jb21wcmVzc2VkIHNpemUsIHVua25vd24gKi8KKyAgICBlbHNlCisgICAgICBlcnIgPSB6aXA2NGxvY2FsX3B1dFZhbHVlKCZ6aS0+el9maWxlZnVuYyx6aS0+ZmlsZXN0cmVhbSwodUxvbmcpMCw0KTsgLyogdW5jb21wcmVzc2VkIHNpemUsIHVua25vd24gKi8KKyAgfQorCisgIGlmIChlcnI9PVpJUF9PSykKKyAgICBlcnIgPSB6aXA2NGxvY2FsX3B1dFZhbHVlKCZ6aS0+el9maWxlZnVuYyx6aS0+ZmlsZXN0cmVhbSwodUxvbmcpc2l6ZV9maWxlbmFtZSwyKTsKKworICBpZih6aS0+Y2kuemlwNjQpCisgIHsKKyAgICBzaXplX2V4dHJhZmllbGQgKz0gMjA7CisgIH0KKworICBpZiAoZXJyPT1aSVBfT0spCisgICAgZXJyID0gemlwNjRsb2NhbF9wdXRWYWx1ZSgmemktPnpfZmlsZWZ1bmMsemktPmZpbGVzdHJlYW0sKHVMb25nKXNpemVfZXh0cmFmaWVsZCwyKTsKKworICBpZiAoKGVycj09WklQX09LKSAmJiAoc2l6ZV9maWxlbmFtZSA+IDApKQorICB7CisgICAgaWYgKFpXUklURTY0KHppLT56X2ZpbGVmdW5jLHppLT5maWxlc3RyZWFtLGZpbGVuYW1lLHNpemVfZmlsZW5hbWUpIT1zaXplX2ZpbGVuYW1lKQorICAgICAgZXJyID0gWklQX0VSUk5POworICB9CisKKyAgaWYgKChlcnI9PVpJUF9PSykgJiYgKHNpemVfZXh0cmFmaWVsZF9sb2NhbCA+IDApKQorICB7CisgICAgaWYgKFpXUklURTY0KHppLT56X2ZpbGVmdW5jLCB6aS0+ZmlsZXN0cmVhbSwgZXh0cmFmaWVsZF9sb2NhbCwgc2l6ZV9leHRyYWZpZWxkX2xvY2FsKSAhPSBzaXplX2V4dHJhZmllbGRfbG9jYWwpCisgICAgICBlcnIgPSBaSVBfRVJSTk87CisgIH0KKworCisgIGlmICgoZXJyPT1aSVBfT0spICYmICh6aS0+Y2kuemlwNjQpKQorICB7CisgICAgICAvLyB3cml0ZSB0aGUgWmlwNjQgZXh0ZW5kZWQgaW5mbworICAgICAgc2hvcnQgSGVhZGVySUQgPSAxOworICAgICAgc2hvcnQgRGF0YVNpemUgPSAxNjsKKyAgICAgIFpQT1M2NF9UIENvbXByZXNzZWRTaXplID0gMDsKKyAgICAgIFpQT1M2NF9UIFVuY29tcHJlc3NlZFNpemUgPSAwOworCisgICAgICAvLyBSZW1lbWJlciBwb3NpdGlvbiBvZiBaaXA2NCBleHRlbmRlZCBpbmZvIGZvciB0aGUgbG9jYWwgZmlsZSBoZWFkZXIuIChuZWVkZWQgd2hlbiB3ZSB1cGRhdGUgc2l6ZSBhZnRlciBkb25lIHdpdGggZmlsZSkKKyAgICAgIHppLT5jaS5wb3NfemlwNjRleHRyYWluZm8gPSBaVEVMTDY0KHppLT56X2ZpbGVmdW5jLHppLT5maWxlc3RyZWFtKTsKKworICAgICAgZXJyID0gemlwNjRsb2NhbF9wdXRWYWx1ZSgmemktPnpfZmlsZWZ1bmMsIHppLT5maWxlc3RyZWFtLCAoWlBPUzY0X1QpSGVhZGVySUQsMik7CisgICAgICBlcnIgPSB6aXA2NGxvY2FsX3B1dFZhbHVlKCZ6aS0+el9maWxlZnVuYywgemktPmZpbGVzdHJlYW0sIChaUE9TNjRfVClEYXRhU2l6ZSwyKTsKKworICAgICAgZXJyID0gemlwNjRsb2NhbF9wdXRWYWx1ZSgmemktPnpfZmlsZWZ1bmMsIHppLT5maWxlc3RyZWFtLCAoWlBPUzY0X1QpVW5jb21wcmVzc2VkU2l6ZSw4KTsKKyAgICAgIGVyciA9IHppcDY0bG9jYWxfcHV0VmFsdWUoJnppLT56X2ZpbGVmdW5jLCB6aS0+ZmlsZXN0cmVhbSwgKFpQT1M2NF9UKUNvbXByZXNzZWRTaXplLDgpOworICB9CisKKyAgcmV0dXJuIGVycjsKK30KKworLyoKKyBOT1RFLgorIFdoZW4gd3JpdGluZyBSQVcgdGhlIFpJUDY0IGV4dGVuZGVkIGluZm9ybWF0aW9uIGluIGV4dHJhZmllbGRfbG9jYWwgYW5kIGV4dHJhZmllbGRfZ2xvYmFsIG5lZWRzIHRvIGJlIHN0cmlwcGVkCisgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBpdCBjYW4gYmUgZG9uZSB3aXRoIHppcFJlbW92ZUV4dHJhSW5mb0Jsb2NrCisKKyBJdCBpcyBub3QgZG9uZSBoZXJlIGJlY2F1c2UgdGhlbiB3ZSBuZWVkIHRvIHJlYWxsb2MgYSBuZXcgYnVmZmVyIHNpbmNlIHBhcmFtZXRlcnMgYXJlICdjb25zdCcgYW5kIEkgd2FudCB0byBtaW5pbWl6ZQorIHVubmVjZXNzYXJ5IGFsbG9jYXRpb25zLgorICovCitleHRlcm4gaW50IFpFWFBPUlQgemlwT3Blbk5ld0ZpbGVJblppcDRfNjQgKHppcEZpbGUgZmlsZSwgY29uc3QgY2hhciogZmlsZW5hbWUsIGNvbnN0IHppcF9maWxlaW5mbyogemlwZmksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqIGV4dHJhZmllbGRfbG9jYWwsIHVJbnQgc2l6ZV9leHRyYWZpZWxkX2xvY2FsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiBleHRyYWZpZWxkX2dsb2JhbCwgdUludCBzaXplX2V4dHJhZmllbGRfZ2xvYmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjb21tZW50LCBpbnQgbWV0aG9kLCBpbnQgbGV2ZWwsIGludCByYXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aW5kb3dCaXRzLGludCBtZW1MZXZlbCwgaW50IHN0cmF0ZWd5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBwYXNzd29yZCwgdUxvbmcgY3JjRm9yQ3J5cHRpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVMb25nIHZlcnNpb25NYWRlQnksIHVMb25nIGZsYWdCYXNlLCBpbnQgemlwNjQpCit7CisgICAgemlwNjRfaW50ZXJuYWwqIHppOworICAgIHVJbnQgc2l6ZV9maWxlbmFtZTsKKyAgICB1SW50IHNpemVfY29tbWVudDsKKyAgICB1SW50IGk7CisgICAgaW50IGVyciA9IFpJUF9PSzsKKworIyAgICBpZmRlZiBOT0NSWVBUCisgICAgKGNyY0ZvckNyeXB0aW5nKTsKKyAgICBpZiAocGFzc3dvcmQgIT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIFpJUF9QQVJBTUVSUk9SOworIyAgICBlbmRpZgorCisgICAgaWYgKGZpbGUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIFpJUF9QQVJBTUVSUk9SOworCisjaWZkZWYgSEFWRV9CWklQMgorICAgIGlmICgobWV0aG9kIT0wKSAmJiAobWV0aG9kIT1aX0RFRkxBVEVEKSAmJiAobWV0aG9kIT1aX0JaSVAyRUQpKQorICAgICAgcmV0dXJuIFpJUF9QQVJBTUVSUk9SOworI2Vsc2UKKyAgICBpZiAoKG1ldGhvZCE9MCkgJiYgKG1ldGhvZCE9Wl9ERUZMQVRFRCkpCisgICAgICByZXR1cm4gWklQX1BBUkFNRVJST1I7CisjZW5kaWYKKworICAgIHppID0gKHppcDY0X2ludGVybmFsKilmaWxlOworCisgICAgaWYgKHppLT5pbl9vcGVuZWRfZmlsZV9pbnppcCA9PSAxKQorICAgIHsKKyAgICAgICAgZXJyID0gemlwQ2xvc2VGaWxlSW5aaXAgKGZpbGUpOworICAgICAgICBpZiAoZXJyICE9IFpJUF9PSykKKyAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgaWYgKGZpbGVuYW1lPT1OVUxMKQorICAgICAgICBmaWxlbmFtZT0iLSI7CisKKyAgICBpZiAoY29tbWVudD09TlVMTCkKKyAgICAgICAgc2l6ZV9jb21tZW50ID0gMDsKKyAgICBlbHNlCisgICAgICAgIHNpemVfY29tbWVudCA9ICh1SW50KXN0cmxlbihjb21tZW50KTsKKworICAgIHNpemVfZmlsZW5hbWUgPSAodUludClzdHJsZW4oZmlsZW5hbWUpOworCisgICAgaWYgKHppcGZpID09IE5VTEwpCisgICAgICAgIHppLT5jaS5kb3NEYXRlID0gMDsKKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAoemlwZmktPmRvc0RhdGUgIT0gMCkKKyAgICAgICAgICAgIHppLT5jaS5kb3NEYXRlID0gemlwZmktPmRvc0RhdGU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICB6aS0+Y2kuZG9zRGF0ZSA9IHppcDY0bG9jYWxfVG16RGF0ZVRvRG9zRGF0ZSgmemlwZmktPnRtel9kYXRlKTsKKyAgICB9CisKKyAgICB6aS0+Y2kuZmxhZyA9IGZsYWdCYXNlOworICAgIGlmICgobGV2ZWw9PTgpIHx8IChsZXZlbD09OSkpCisgICAgICB6aS0+Y2kuZmxhZyB8PSAyOworICAgIGlmIChsZXZlbD09MikKKyAgICAgIHppLT5jaS5mbGFnIHw9IDQ7CisgICAgaWYgKGxldmVsPT0xKQorICAgICAgemktPmNpLmZsYWcgfD0gNjsKKyAgICBpZiAocGFzc3dvcmQgIT0gTlVMTCkKKyAgICAgIHppLT5jaS5mbGFnIHw9IDE7CisKKyAgICB6aS0+Y2kuY3JjMzIgPSAwOworICAgIHppLT5jaS5tZXRob2QgPSBtZXRob2Q7CisgICAgemktPmNpLmVuY3J5cHQgPSAwOworICAgIHppLT5jaS5zdHJlYW1faW5pdGlhbGlzZWQgPSAwOworICAgIHppLT5jaS5wb3NfaW5fYnVmZmVyZWRfZGF0YSA9IDA7CisgICAgemktPmNpLnJhdyA9IHJhdzsKKyAgICB6aS0+Y2kucG9zX2xvY2FsX2hlYWRlciA9IFpURUxMNjQoemktPnpfZmlsZWZ1bmMsemktPmZpbGVzdHJlYW0pOworCisgICAgemktPmNpLnNpemVfY2VudHJhbGhlYWRlciA9IFNJWkVDRU5UUkFMSEVBREVSICsgc2l6ZV9maWxlbmFtZSArIHNpemVfZXh0cmFmaWVsZF9nbG9iYWwgKyBzaXplX2NvbW1lbnQ7CisgICAgemktPmNpLnNpemVfY2VudHJhbEV4dHJhRnJlZSA9IDMyOyAvLyBFeHRyYSBzcGFjZSB3ZSBoYXZlIHJlc2VydmVkIGluIGNhc2Ugd2UgbmVlZCB0byBhZGQgWklQNjQgZXh0cmEgaW5mbyBkYXRhCisKKyAgICB6aS0+Y2kuY2VudHJhbF9oZWFkZXIgPSAoY2hhciopQUxMT0MoKHVJbnQpemktPmNpLnNpemVfY2VudHJhbGhlYWRlciArIHppLT5jaS5zaXplX2NlbnRyYWxFeHRyYUZyZWUpOworCisgICAgemktPmNpLnNpemVfY2VudHJhbEV4dHJhID0gc2l6ZV9leHRyYWZpZWxkX2dsb2JhbDsKKyAgICB6aXA2NGxvY2FsX3B1dFZhbHVlX2lubWVtb3J5KHppLT5jaS5jZW50cmFsX2hlYWRlciwodUxvbmcpQ0VOVFJBTEhFQURFUk1BR0lDLDQpOworICAgIC8qIHZlcnNpb24gaW5mbyAqLworICAgIHppcDY0bG9jYWxfcHV0VmFsdWVfaW5tZW1vcnkoemktPmNpLmNlbnRyYWxfaGVhZGVyKzQsKHVMb25nKXZlcnNpb25NYWRlQnksMik7CisgICAgemlwNjRsb2NhbF9wdXRWYWx1ZV9pbm1lbW9yeSh6aS0+Y2kuY2VudHJhbF9oZWFkZXIrNiwodUxvbmcpMjAsMik7CisgICAgemlwNjRsb2NhbF9wdXRWYWx1ZV9pbm1lbW9yeSh6aS0+Y2kuY2VudHJhbF9oZWFkZXIrOCwodUxvbmcpemktPmNpLmZsYWcsMik7CisgICAgemlwNjRsb2NhbF9wdXRWYWx1ZV9pbm1lbW9yeSh6aS0+Y2kuY2VudHJhbF9oZWFkZXIrMTAsKHVMb25nKXppLT5jaS5tZXRob2QsMik7CisgICAgemlwNjRsb2NhbF9wdXRWYWx1ZV9pbm1lbW9yeSh6aS0+Y2kuY2VudHJhbF9oZWFkZXIrMTIsKHVMb25nKXppLT5jaS5kb3NEYXRlLDQpOworICAgIHppcDY0bG9jYWxfcHV0VmFsdWVfaW5tZW1vcnkoemktPmNpLmNlbnRyYWxfaGVhZGVyKzE2LCh1TG9uZykwLDQpOyAvKmNyYyovCisgICAgemlwNjRsb2NhbF9wdXRWYWx1ZV9pbm1lbW9yeSh6aS0+Y2kuY2VudHJhbF9oZWFkZXIrMjAsKHVMb25nKTAsNCk7IC8qY29tcHIgc2l6ZSovCisgICAgemlwNjRsb2NhbF9wdXRWYWx1ZV9pbm1lbW9yeSh6aS0+Y2kuY2VudHJhbF9oZWFkZXIrMjQsKHVMb25nKTAsNCk7IC8qdW5jb21wciBzaXplKi8KKyAgICB6aXA2NGxvY2FsX3B1dFZhbHVlX2lubWVtb3J5KHppLT5jaS5jZW50cmFsX2hlYWRlcisyOCwodUxvbmcpc2l6ZV9maWxlbmFtZSwyKTsKKyAgICB6aXA2NGxvY2FsX3B1dFZhbHVlX2lubWVtb3J5KHppLT5jaS5jZW50cmFsX2hlYWRlciszMCwodUxvbmcpc2l6ZV9leHRyYWZpZWxkX2dsb2JhbCwyKTsKKyAgICB6aXA2NGxvY2FsX3B1dFZhbHVlX2lubWVtb3J5KHppLT5jaS5jZW50cmFsX2hlYWRlciszMiwodUxvbmcpc2l6ZV9jb21tZW50LDIpOworICAgIHppcDY0bG9jYWxfcHV0VmFsdWVfaW5tZW1vcnkoemktPmNpLmNlbnRyYWxfaGVhZGVyKzM0LCh1TG9uZykwLDIpOyAvKmRpc2sgbm0gc3RhcnQqLworCisgICAgaWYgKHppcGZpPT1OVUxMKQorICAgICAgICB6aXA2NGxvY2FsX3B1dFZhbHVlX2lubWVtb3J5KHppLT5jaS5jZW50cmFsX2hlYWRlciszNiwodUxvbmcpMCwyKTsKKyAgICBlbHNlCisgICAgICAgIHppcDY0bG9jYWxfcHV0VmFsdWVfaW5tZW1vcnkoemktPmNpLmNlbnRyYWxfaGVhZGVyKzM2LCh1TG9uZyl6aXBmaS0+aW50ZXJuYWxfZmEsMik7CisKKyAgICBpZiAoemlwZmk9PU5VTEwpCisgICAgICAgIHppcDY0bG9jYWxfcHV0VmFsdWVfaW5tZW1vcnkoemktPmNpLmNlbnRyYWxfaGVhZGVyKzM4LCh1TG9uZykwLDQpOworICAgIGVsc2UKKyAgICAgICAgemlwNjRsb2NhbF9wdXRWYWx1ZV9pbm1lbW9yeSh6aS0+Y2kuY2VudHJhbF9oZWFkZXIrMzgsKHVMb25nKXppcGZpLT5leHRlcm5hbF9mYSw0KTsKKworICAgIGlmKHppLT5jaS5wb3NfbG9jYWxfaGVhZGVyID49IDB4ZmZmZmZmZmYpCisgICAgICB6aXA2NGxvY2FsX3B1dFZhbHVlX2lubWVtb3J5KHppLT5jaS5jZW50cmFsX2hlYWRlcis0MiwodUxvbmcpMHhmZmZmZmZmZiw0KTsKKyAgICBlbHNlCisgICAgICB6aXA2NGxvY2FsX3B1dFZhbHVlX2lubWVtb3J5KHppLT5jaS5jZW50cmFsX2hlYWRlcis0MiwodUxvbmcpemktPmNpLnBvc19sb2NhbF9oZWFkZXIgLSB6aS0+YWRkX3Bvc2l0aW9uX3doZW5fd3JpdGluZ19vZmZzZXQsNCk7CisKKyAgICBmb3IgKGk9MDtpPHNpemVfZmlsZW5hbWU7aSsrKQorICAgICAgICAqKHppLT5jaS5jZW50cmFsX2hlYWRlcitTSVpFQ0VOVFJBTEhFQURFUitpKSA9ICooZmlsZW5hbWUraSk7CisKKyAgICBmb3IgKGk9MDtpPHNpemVfZXh0cmFmaWVsZF9nbG9iYWw7aSsrKQorICAgICAgICAqKHppLT5jaS5jZW50cmFsX2hlYWRlcitTSVpFQ0VOVFJBTEhFQURFUitzaXplX2ZpbGVuYW1lK2kpID0KKyAgICAgICAgICAgICAgKigoKGNvbnN0IGNoYXIqKWV4dHJhZmllbGRfZ2xvYmFsKStpKTsKKworICAgIGZvciAoaT0wO2k8c2l6ZV9jb21tZW50O2krKykKKyAgICAgICAgKih6aS0+Y2kuY2VudHJhbF9oZWFkZXIrU0laRUNFTlRSQUxIRUFERVIrc2l6ZV9maWxlbmFtZSsKKyAgICAgICAgICAgICAgc2l6ZV9leHRyYWZpZWxkX2dsb2JhbCtpKSA9ICooY29tbWVudCtpKTsKKyAgICBpZiAoemktPmNpLmNlbnRyYWxfaGVhZGVyID09IE5VTEwpCisgICAgICAgIHJldHVybiBaSVBfSU5URVJOQUxFUlJPUjsKKworICAgIHppLT5jaS56aXA2NCA9IHppcDY0OworICAgIHppLT5jaS50b3RhbENvbXByZXNzZWREYXRhID0gMDsKKyAgICB6aS0+Y2kudG90YWxVbmNvbXByZXNzZWREYXRhID0gMDsKKyAgICB6aS0+Y2kucG9zX3ppcDY0ZXh0cmFpbmZvID0gMDsKKworICAgIGVyciA9IFdyaXRlX0xvY2FsRmlsZUhlYWRlcih6aSwgZmlsZW5hbWUsIHNpemVfZXh0cmFmaWVsZF9sb2NhbCwgZXh0cmFmaWVsZF9sb2NhbCk7CisKKyNpZmRlZiBIQVZFX0JaSVAyCisgICAgemktPmNpLmJzdHJlYW0uYXZhaWxfaW4gPSAodUludCkwOworICAgIHppLT5jaS5ic3RyZWFtLmF2YWlsX291dCA9ICh1SW50KVpfQlVGU0laRTsKKyAgICB6aS0+Y2kuYnN0cmVhbS5uZXh0X291dCA9IChjaGFyKil6aS0+Y2kuYnVmZmVyZWRfZGF0YTsKKyAgICB6aS0+Y2kuYnN0cmVhbS50b3RhbF9pbl9oaTMyID0gMDsKKyAgICB6aS0+Y2kuYnN0cmVhbS50b3RhbF9pbl9sbzMyID0gMDsKKyAgICB6aS0+Y2kuYnN0cmVhbS50b3RhbF9vdXRfaGkzMiA9IDA7CisgICAgemktPmNpLmJzdHJlYW0udG90YWxfb3V0X2xvMzIgPSAwOworI2VuZGlmCisKKyAgICB6aS0+Y2kuc3RyZWFtLmF2YWlsX2luID0gKHVJbnQpMDsKKyAgICB6aS0+Y2kuc3RyZWFtLmF2YWlsX291dCA9ICh1SW50KVpfQlVGU0laRTsKKyAgICB6aS0+Y2kuc3RyZWFtLm5leHRfb3V0ID0gemktPmNpLmJ1ZmZlcmVkX2RhdGE7CisgICAgemktPmNpLnN0cmVhbS50b3RhbF9pbiA9IDA7CisgICAgemktPmNpLnN0cmVhbS50b3RhbF9vdXQgPSAwOworICAgIHppLT5jaS5zdHJlYW0uZGF0YV90eXBlID0gWl9CSU5BUlk7CisKKyNpZmRlZiBIQVZFX0JaSVAyCisgICAgaWYgKChlcnI9PVpJUF9PSykgJiYgKHppLT5jaS5tZXRob2QgPT0gWl9ERUZMQVRFRCB8fCB6aS0+Y2kubWV0aG9kID09IFpfQlpJUDJFRCkgJiYgKCF6aS0+Y2kucmF3KSkKKyNlbHNlCisgICAgaWYgKChlcnI9PVpJUF9PSykgJiYgKHppLT5jaS5tZXRob2QgPT0gWl9ERUZMQVRFRCkgJiYgKCF6aS0+Y2kucmF3KSkKKyNlbmRpZgorICAgIHsKKyAgICAgICAgaWYoemktPmNpLm1ldGhvZCA9PSBaX0RFRkxBVEVEKQorICAgICAgICB7CisgICAgICAgICAgemktPmNpLnN0cmVhbS56YWxsb2MgPSAoYWxsb2NfZnVuYykwOworICAgICAgICAgIHppLT5jaS5zdHJlYW0uemZyZWUgPSAoZnJlZV9mdW5jKTA7CisgICAgICAgICAgemktPmNpLnN0cmVhbS5vcGFxdWUgPSAodm9pZHBmKTA7CisKKyAgICAgICAgICBpZiAod2luZG93Qml0cz4wKQorICAgICAgICAgICAgICB3aW5kb3dCaXRzID0gLXdpbmRvd0JpdHM7CisKKyAgICAgICAgICBlcnIgPSBkZWZsYXRlSW5pdDIoJnppLT5jaS5zdHJlYW0sIGxldmVsLCBaX0RFRkxBVEVELCB3aW5kb3dCaXRzLCBtZW1MZXZlbCwgc3RyYXRlZ3kpOworCisgICAgICAgICAgaWYgKGVycj09Wl9PSykKKyAgICAgICAgICAgICAgemktPmNpLnN0cmVhbV9pbml0aWFsaXNlZCA9IFpfREVGTEFURUQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZih6aS0+Y2kubWV0aG9kID09IFpfQlpJUDJFRCkKKyAgICAgICAgeworI2lmZGVmIEhBVkVfQlpJUDIKKyAgICAgICAgICAgIC8vIEluaXQgQlppcCBzdHVmZiBoZXJlCisgICAgICAgICAgemktPmNpLmJzdHJlYW0uYnphbGxvYyA9IDA7CisgICAgICAgICAgemktPmNpLmJzdHJlYW0uYnpmcmVlID0gMDsKKyAgICAgICAgICB6aS0+Y2kuYnN0cmVhbS5vcGFxdWUgPSAodm9pZHBmKTA7CisKKyAgICAgICAgICBlcnIgPSBCWjJfYnpDb21wcmVzc0luaXQoJnppLT5jaS5ic3RyZWFtLCBsZXZlbCwgMCwzNSk7CisgICAgICAgICAgaWYoZXJyID09IEJaX09LKQorICAgICAgICAgICAgemktPmNpLnN0cmVhbV9pbml0aWFsaXNlZCA9IFpfQlpJUDJFRDsKKyNlbmRpZgorICAgICAgICB9CisKKyAgICB9CisKKyMgICAgaWZuZGVmIE5PQ1JZUFQKKyAgICB6aS0+Y2kuY3J5cHRfaGVhZGVyX3NpemUgPSAwOworICAgIGlmICgoZXJyPT1aX09LKSAmJiAocGFzc3dvcmQgIT0gTlVMTCkpCisgICAgeworICAgICAgICB1bnNpZ25lZCBjaGFyIGJ1ZkhlYWRbUkFORF9IRUFEX0xFTl07CisgICAgICAgIHVuc2lnbmVkIGludCBzaXplSGVhZDsKKyAgICAgICAgemktPmNpLmVuY3J5cHQgPSAxOworICAgICAgICB6aS0+Y2kucGNyY18zMl90YWIgPSBnZXRfY3JjX3RhYmxlKCk7CisgICAgICAgIC8qaW5pdF9rZXlzKHBhc3N3b3JkLHppLT5jaS5rZXlzLHppLT5jaS5wY3JjXzMyX3RhYik7Ki8KKworICAgICAgICBzaXplSGVhZD1jcnlwdGhlYWQocGFzc3dvcmQsYnVmSGVhZCxSQU5EX0hFQURfTEVOLHppLT5jaS5rZXlzLHppLT5jaS5wY3JjXzMyX3RhYixjcmNGb3JDcnlwdGluZyk7CisgICAgICAgIHppLT5jaS5jcnlwdF9oZWFkZXJfc2l6ZSA9IHNpemVIZWFkOworCisgICAgICAgIGlmIChaV1JJVEU2NCh6aS0+el9maWxlZnVuYyx6aS0+ZmlsZXN0cmVhbSxidWZIZWFkLHNpemVIZWFkKSAhPSBzaXplSGVhZCkKKyAgICAgICAgICAgICAgICBlcnIgPSBaSVBfRVJSTk87CisgICAgfQorIyAgICBlbmRpZgorCisgICAgaWYgKGVycj09Wl9PSykKKyAgICAgICAgemktPmluX29wZW5lZF9maWxlX2luemlwID0gMTsKKyAgICByZXR1cm4gZXJyOworfQorCitleHRlcm4gaW50IFpFWFBPUlQgemlwT3Blbk5ld0ZpbGVJblppcDQgKHppcEZpbGUgZmlsZSwgY29uc3QgY2hhciogZmlsZW5hbWUsIGNvbnN0IHppcF9maWxlaW5mbyogemlwZmksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqIGV4dHJhZmllbGRfbG9jYWwsIHVJbnQgc2l6ZV9leHRyYWZpZWxkX2xvY2FsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiBleHRyYWZpZWxkX2dsb2JhbCwgdUludCBzaXplX2V4dHJhZmllbGRfZ2xvYmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjb21tZW50LCBpbnQgbWV0aG9kLCBpbnQgbGV2ZWwsIGludCByYXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aW5kb3dCaXRzLGludCBtZW1MZXZlbCwgaW50IHN0cmF0ZWd5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBwYXNzd29yZCwgdUxvbmcgY3JjRm9yQ3J5cHRpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVMb25nIHZlcnNpb25NYWRlQnksIHVMb25nIGZsYWdCYXNlKQoreworICAgIHJldHVybiB6aXBPcGVuTmV3RmlsZUluWmlwNF82NCAoZmlsZSwgZmlsZW5hbWUsIHppcGZpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFmaWVsZF9sb2NhbCwgc2l6ZV9leHRyYWZpZWxkX2xvY2FsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFmaWVsZF9nbG9iYWwsIHNpemVfZXh0cmFmaWVsZF9nbG9iYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50LCBtZXRob2QsIGxldmVsLCByYXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dCaXRzLCBtZW1MZXZlbCwgc3RyYXRlZ3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzd29yZCwgY3JjRm9yQ3J5cHRpbmcsIHZlcnNpb25NYWRlQnksIGZsYWdCYXNlLCAwKTsKK30KKworZXh0ZXJuIGludCBaRVhQT1JUIHppcE9wZW5OZXdGaWxlSW5aaXAzICh6aXBGaWxlIGZpbGUsIGNvbnN0IGNoYXIqIGZpbGVuYW1lLCBjb25zdCB6aXBfZmlsZWluZm8qIHppcGZpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiBleHRyYWZpZWxkX2xvY2FsLCB1SW50IHNpemVfZXh0cmFmaWVsZF9sb2NhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogZXh0cmFmaWVsZF9nbG9iYWwsIHVJbnQgc2l6ZV9leHRyYWZpZWxkX2dsb2JhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogY29tbWVudCwgaW50IG1ldGhvZCwgaW50IGxldmVsLCBpbnQgcmF3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2luZG93Qml0cyxpbnQgbWVtTGV2ZWwsIGludCBzdHJhdGVneSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcGFzc3dvcmQsIHVMb25nIGNyY0ZvckNyeXB0aW5nKQoreworICAgIHJldHVybiB6aXBPcGVuTmV3RmlsZUluWmlwNF82NCAoZmlsZSwgZmlsZW5hbWUsIHppcGZpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFmaWVsZF9sb2NhbCwgc2l6ZV9leHRyYWZpZWxkX2xvY2FsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFmaWVsZF9nbG9iYWwsIHNpemVfZXh0cmFmaWVsZF9nbG9iYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50LCBtZXRob2QsIGxldmVsLCByYXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dCaXRzLCBtZW1MZXZlbCwgc3RyYXRlZ3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzd29yZCwgY3JjRm9yQ3J5cHRpbmcsIFZFUlNJT05NQURFQlksIDAsIDApOworfQorCitleHRlcm4gaW50IFpFWFBPUlQgemlwT3Blbk5ld0ZpbGVJblppcDNfNjQoemlwRmlsZSBmaWxlLCBjb25zdCBjaGFyKiBmaWxlbmFtZSwgY29uc3QgemlwX2ZpbGVpbmZvKiB6aXBmaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogZXh0cmFmaWVsZF9sb2NhbCwgdUludCBzaXplX2V4dHJhZmllbGRfbG9jYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqIGV4dHJhZmllbGRfZ2xvYmFsLCB1SW50IHNpemVfZXh0cmFmaWVsZF9nbG9iYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbW1lbnQsIGludCBtZXRob2QsIGludCBsZXZlbCwgaW50IHJhdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdpbmRvd0JpdHMsaW50IG1lbUxldmVsLCBpbnQgc3RyYXRlZ3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHBhc3N3b3JkLCB1TG9uZyBjcmNGb3JDcnlwdGluZywgaW50IHppcDY0KQoreworICAgIHJldHVybiB6aXBPcGVuTmV3RmlsZUluWmlwNF82NCAoZmlsZSwgZmlsZW5hbWUsIHppcGZpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFmaWVsZF9sb2NhbCwgc2l6ZV9leHRyYWZpZWxkX2xvY2FsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFmaWVsZF9nbG9iYWwsIHNpemVfZXh0cmFmaWVsZF9nbG9iYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50LCBtZXRob2QsIGxldmVsLCByYXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dCaXRzLCBtZW1MZXZlbCwgc3RyYXRlZ3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzd29yZCwgY3JjRm9yQ3J5cHRpbmcsIFZFUlNJT05NQURFQlksIDAsIHppcDY0KTsKK30KKworZXh0ZXJuIGludCBaRVhQT1JUIHppcE9wZW5OZXdGaWxlSW5aaXAyKHppcEZpbGUgZmlsZSwgY29uc3QgY2hhciogZmlsZW5hbWUsIGNvbnN0IHppcF9maWxlaW5mbyogemlwZmksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogZXh0cmFmaWVsZF9sb2NhbCwgdUludCBzaXplX2V4dHJhZmllbGRfbG9jYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogZXh0cmFmaWVsZF9nbG9iYWwsIHVJbnQgc2l6ZV9leHRyYWZpZWxkX2dsb2JhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjb21tZW50LCBpbnQgbWV0aG9kLCBpbnQgbGV2ZWwsIGludCByYXcpCit7CisgICAgcmV0dXJuIHppcE9wZW5OZXdGaWxlSW5aaXA0XzY0IChmaWxlLCBmaWxlbmFtZSwgemlwZmksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYWZpZWxkX2xvY2FsLCBzaXplX2V4dHJhZmllbGRfbG9jYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYWZpZWxkX2dsb2JhbCwgc2l6ZV9leHRyYWZpZWxkX2dsb2JhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQsIG1ldGhvZCwgbGV2ZWwsIHJhdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1NQVhfV0JJVFMsIERFRl9NRU1fTEVWRUwsIFpfREVGQVVMVF9TVFJBVEVHWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsIFZFUlNJT05NQURFQlksIDAsIDApOworfQorCitleHRlcm4gaW50IFpFWFBPUlQgemlwT3Blbk5ld0ZpbGVJblppcDJfNjQoemlwRmlsZSBmaWxlLCBjb25zdCBjaGFyKiBmaWxlbmFtZSwgY29uc3QgemlwX2ZpbGVpbmZvKiB6aXBmaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiBleHRyYWZpZWxkX2xvY2FsLCB1SW50IHNpemVfZXh0cmFmaWVsZF9sb2NhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiBleHRyYWZpZWxkX2dsb2JhbCwgdUludCBzaXplX2V4dHJhZmllbGRfZ2xvYmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbW1lbnQsIGludCBtZXRob2QsIGludCBsZXZlbCwgaW50IHJhdywgaW50IHppcDY0KQoreworICAgIHJldHVybiB6aXBPcGVuTmV3RmlsZUluWmlwNF82NCAoZmlsZSwgZmlsZW5hbWUsIHppcGZpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFmaWVsZF9sb2NhbCwgc2l6ZV9leHRyYWZpZWxkX2xvY2FsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFmaWVsZF9nbG9iYWwsIHNpemVfZXh0cmFmaWVsZF9nbG9iYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50LCBtZXRob2QsIGxldmVsLCByYXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtTUFYX1dCSVRTLCBERUZfTUVNX0xFVkVMLCBaX0RFRkFVTFRfU1RSQVRFR1ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCBWRVJTSU9OTUFERUJZLCAwLCB6aXA2NCk7Cit9CisKK2V4dGVybiBpbnQgWkVYUE9SVCB6aXBPcGVuTmV3RmlsZUluWmlwNjQgKHppcEZpbGUgZmlsZSwgY29uc3QgY2hhciogZmlsZW5hbWUsIGNvbnN0IHppcF9maWxlaW5mbyogemlwZmksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogZXh0cmFmaWVsZF9sb2NhbCwgdUludCBzaXplX2V4dHJhZmllbGRfbG9jYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCpleHRyYWZpZWxkX2dsb2JhbCwgdUludCBzaXplX2V4dHJhZmllbGRfZ2xvYmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbW1lbnQsIGludCBtZXRob2QsIGludCBsZXZlbCwgaW50IHppcDY0KQoreworICAgIHJldHVybiB6aXBPcGVuTmV3RmlsZUluWmlwNF82NCAoZmlsZSwgZmlsZW5hbWUsIHppcGZpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFmaWVsZF9sb2NhbCwgc2l6ZV9leHRyYWZpZWxkX2xvY2FsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFmaWVsZF9nbG9iYWwsIHNpemVfZXh0cmFmaWVsZF9nbG9iYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50LCBtZXRob2QsIGxldmVsLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLU1BWF9XQklUUywgREVGX01FTV9MRVZFTCwgWl9ERUZBVUxUX1NUUkFURUdZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwgVkVSU0lPTk1BREVCWSwgMCwgemlwNjQpOworfQorCitleHRlcm4gaW50IFpFWFBPUlQgemlwT3Blbk5ld0ZpbGVJblppcCAoemlwRmlsZSBmaWxlLCBjb25zdCBjaGFyKiBmaWxlbmFtZSwgY29uc3QgemlwX2ZpbGVpbmZvKiB6aXBmaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiBleHRyYWZpZWxkX2xvY2FsLCB1SW50IHNpemVfZXh0cmFmaWVsZF9sb2NhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKmV4dHJhZmllbGRfZ2xvYmFsLCB1SW50IHNpemVfZXh0cmFmaWVsZF9nbG9iYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogY29tbWVudCwgaW50IG1ldGhvZCwgaW50IGxldmVsKQoreworICAgIHJldHVybiB6aXBPcGVuTmV3RmlsZUluWmlwNF82NCAoZmlsZSwgZmlsZW5hbWUsIHppcGZpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFmaWVsZF9sb2NhbCwgc2l6ZV9leHRyYWZpZWxkX2xvY2FsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFmaWVsZF9nbG9iYWwsIHNpemVfZXh0cmFmaWVsZF9nbG9iYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50LCBtZXRob2QsIGxldmVsLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLU1BWF9XQklUUywgREVGX01FTV9MRVZFTCwgWl9ERUZBVUxUX1NUUkFURUdZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwgVkVSU0lPTk1BREVCWSwgMCwgMCk7Cit9CisKK2xvY2FsIGludCB6aXA2NEZsdXNoV3JpdGVCdWZmZXIoemlwNjRfaW50ZXJuYWwqIHppKQoreworICAgIGludCBlcnI9WklQX09LOworCisgICAgaWYgKHppLT5jaS5lbmNyeXB0ICE9IDApCisgICAgeworI2lmbmRlZiBOT0NSWVBUCisgICAgICAgIHVJbnQgaTsKKyAgICAgICAgaW50IHQ7CisgICAgICAgIGZvciAoaT0wO2k8emktPmNpLnBvc19pbl9idWZmZXJlZF9kYXRhO2krKykKKyAgICAgICAgICAgIHppLT5jaS5idWZmZXJlZF9kYXRhW2ldID0gemVuY29kZSh6aS0+Y2kua2V5cywgemktPmNpLnBjcmNfMzJfdGFiLCB6aS0+Y2kuYnVmZmVyZWRfZGF0YVtpXSx0KTsKKyNlbmRpZgorICAgIH0KKworICAgIGlmIChaV1JJVEU2NCh6aS0+el9maWxlZnVuYyx6aS0+ZmlsZXN0cmVhbSx6aS0+Y2kuYnVmZmVyZWRfZGF0YSx6aS0+Y2kucG9zX2luX2J1ZmZlcmVkX2RhdGEpICE9IHppLT5jaS5wb3NfaW5fYnVmZmVyZWRfZGF0YSkKKyAgICAgIGVyciA9IFpJUF9FUlJOTzsKKworICAgIHppLT5jaS50b3RhbENvbXByZXNzZWREYXRhICs9IHppLT5jaS5wb3NfaW5fYnVmZmVyZWRfZGF0YTsKKworI2lmZGVmIEhBVkVfQlpJUDIKKyAgICBpZih6aS0+Y2kubWV0aG9kID09IFpfQlpJUDJFRCkKKyAgICB7CisgICAgICB6aS0+Y2kudG90YWxVbmNvbXByZXNzZWREYXRhICs9IHppLT5jaS5ic3RyZWFtLnRvdGFsX2luX2xvMzI7CisgICAgICB6aS0+Y2kuYnN0cmVhbS50b3RhbF9pbl9sbzMyID0gMDsKKyAgICAgIHppLT5jaS5ic3RyZWFtLnRvdGFsX2luX2hpMzIgPSAwOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICB7CisgICAgICB6aS0+Y2kudG90YWxVbmNvbXByZXNzZWREYXRhICs9IHppLT5jaS5zdHJlYW0udG90YWxfaW47CisgICAgICB6aS0+Y2kuc3RyZWFtLnRvdGFsX2luID0gMDsKKyAgICB9CisKKworICAgIHppLT5jaS5wb3NfaW5fYnVmZmVyZWRfZGF0YSA9IDA7CisKKyAgICByZXR1cm4gZXJyOworfQorCitleHRlcm4gaW50IFpFWFBPUlQgemlwV3JpdGVJbkZpbGVJblppcCAoemlwRmlsZSBmaWxlLGNvbnN0IHZvaWQqIGJ1Zix1bnNpZ25lZCBpbnQgbGVuKQoreworICAgIHppcDY0X2ludGVybmFsKiB6aTsKKyAgICBpbnQgZXJyPVpJUF9PSzsKKworICAgIGlmIChmaWxlID09IE5VTEwpCisgICAgICAgIHJldHVybiBaSVBfUEFSQU1FUlJPUjsKKyAgICB6aSA9ICh6aXA2NF9pbnRlcm5hbCopZmlsZTsKKworICAgIGlmICh6aS0+aW5fb3BlbmVkX2ZpbGVfaW56aXAgPT0gMCkKKyAgICAgICAgcmV0dXJuIFpJUF9QQVJBTUVSUk9SOworCisgICAgemktPmNpLmNyYzMyID0gY3JjMzIoemktPmNpLmNyYzMyLGJ1ZiwodUludClsZW4pOworCisjaWZkZWYgSEFWRV9CWklQMgorICAgIGlmKHppLT5jaS5tZXRob2QgPT0gWl9CWklQMkVEICYmICghemktPmNpLnJhdykpCisgICAgeworICAgICAgemktPmNpLmJzdHJlYW0ubmV4dF9pbiA9ICh2b2lkKilidWY7CisgICAgICB6aS0+Y2kuYnN0cmVhbS5hdmFpbF9pbiA9IGxlbjsKKyAgICAgIGVyciA9IEJaX1JVTl9PSzsKKworICAgICAgd2hpbGUgKChlcnI9PUJaX1JVTl9PSykgJiYgKHppLT5jaS5ic3RyZWFtLmF2YWlsX2luPjApKQorICAgICAgeworICAgICAgICBpZiAoemktPmNpLmJzdHJlYW0uYXZhaWxfb3V0ID09IDApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoemlwNjRGbHVzaFdyaXRlQnVmZmVyKHppKSA9PSBaSVBfRVJSTk8pCisgICAgICAgICAgICBlcnIgPSBaSVBfRVJSTk87CisgICAgICAgICAgemktPmNpLmJzdHJlYW0uYXZhaWxfb3V0ID0gKHVJbnQpWl9CVUZTSVpFOworICAgICAgICAgIHppLT5jaS5ic3RyZWFtLm5leHRfb3V0ID0gKGNoYXIqKXppLT5jaS5idWZmZXJlZF9kYXRhOworICAgICAgICB9CisKKworICAgICAgICBpZihlcnIgIT0gQlpfUlVOX09LKQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmICgoemktPmNpLm1ldGhvZCA9PSBaX0JaSVAyRUQpICYmICghemktPmNpLnJhdykpCisgICAgICAgIHsKKyAgICAgICAgICB1TG9uZyB1VG90YWxPdXRCZWZvcmVfbG8gPSB6aS0+Y2kuYnN0cmVhbS50b3RhbF9vdXRfbG8zMjsKKy8vICAgICAgICAgIHVMb25nIHVUb3RhbE91dEJlZm9yZV9oaSA9IHppLT5jaS5ic3RyZWFtLnRvdGFsX291dF9oaTMyOworICAgICAgICAgIGVycj1CWjJfYnpDb21wcmVzcygmemktPmNpLmJzdHJlYW0sICBCWl9SVU4pOworCisgICAgICAgICAgemktPmNpLnBvc19pbl9idWZmZXJlZF9kYXRhICs9ICh1SW50KSh6aS0+Y2kuYnN0cmVhbS50b3RhbF9vdXRfbG8zMiAtIHVUb3RhbE91dEJlZm9yZV9sbykgOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmKGVyciA9PSBCWl9SVU5fT0spCisgICAgICAgIGVyciA9IFpJUF9PSzsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisgICAgeworICAgICAgemktPmNpLnN0cmVhbS5uZXh0X2luID0gKEJ5dGVmKilidWY7CisgICAgICB6aS0+Y2kuc3RyZWFtLmF2YWlsX2luID0gbGVuOworCisgICAgICB3aGlsZSAoKGVycj09WklQX09LKSAmJiAoemktPmNpLnN0cmVhbS5hdmFpbF9pbj4wKSkKKyAgICAgIHsKKyAgICAgICAgICBpZiAoemktPmNpLnN0cmVhbS5hdmFpbF9vdXQgPT0gMCkKKyAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmICh6aXA2NEZsdXNoV3JpdGVCdWZmZXIoemkpID09IFpJUF9FUlJOTykKKyAgICAgICAgICAgICAgICAgIGVyciA9IFpJUF9FUlJOTzsKKyAgICAgICAgICAgICAgemktPmNpLnN0cmVhbS5hdmFpbF9vdXQgPSAodUludClaX0JVRlNJWkU7CisgICAgICAgICAgICAgIHppLT5jaS5zdHJlYW0ubmV4dF9vdXQgPSB6aS0+Y2kuYnVmZmVyZWRfZGF0YTsKKyAgICAgICAgICB9CisKKworICAgICAgICAgIGlmKGVyciAhPSBaSVBfT0spCisgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgaWYgKCh6aS0+Y2kubWV0aG9kID09IFpfREVGTEFURUQpICYmICghemktPmNpLnJhdykpCisgICAgICAgICAgeworICAgICAgICAgICAgICB1TG9uZyB1VG90YWxPdXRCZWZvcmUgPSB6aS0+Y2kuc3RyZWFtLnRvdGFsX291dDsKKyAgICAgICAgICAgICAgZXJyPWRlZmxhdGUoJnppLT5jaS5zdHJlYW0sICBaX05PX0ZMVVNIKTsKKyAgICAgICAgICAgICAgaWYodVRvdGFsT3V0QmVmb3JlID4gemktPmNpLnN0cmVhbS50b3RhbF9vdXQpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnQgYkJyZWFrID0gMDsKKyAgICAgICAgICAgICAgICBiQnJlYWsrKzsKKyAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgIHppLT5jaS5wb3NfaW5fYnVmZmVyZWRfZGF0YSArPSAodUludCkoemktPmNpLnN0cmVhbS50b3RhbF9vdXQgLSB1VG90YWxPdXRCZWZvcmUpIDsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgICAgdUludCBjb3B5X3RoaXMsaTsKKyAgICAgICAgICAgICAgaWYgKHppLT5jaS5zdHJlYW0uYXZhaWxfaW4gPCB6aS0+Y2kuc3RyZWFtLmF2YWlsX291dCkKKyAgICAgICAgICAgICAgICAgIGNvcHlfdGhpcyA9IHppLT5jaS5zdHJlYW0uYXZhaWxfaW47CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIGNvcHlfdGhpcyA9IHppLT5jaS5zdHJlYW0uYXZhaWxfb3V0OworCisgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3B5X3RoaXM7IGkrKykKKyAgICAgICAgICAgICAgICAgICooKChjaGFyKil6aS0+Y2kuc3RyZWFtLm5leHRfb3V0KStpKSA9CisgICAgICAgICAgICAgICAgICAgICAgKigoKGNvbnN0IGNoYXIqKXppLT5jaS5zdHJlYW0ubmV4dF9pbikraSk7CisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIHppLT5jaS5zdHJlYW0uYXZhaWxfaW4gLT0gY29weV90aGlzOworICAgICAgICAgICAgICAgICAgemktPmNpLnN0cmVhbS5hdmFpbF9vdXQtPSBjb3B5X3RoaXM7CisgICAgICAgICAgICAgICAgICB6aS0+Y2kuc3RyZWFtLm5leHRfaW4rPSBjb3B5X3RoaXM7CisgICAgICAgICAgICAgICAgICB6aS0+Y2kuc3RyZWFtLm5leHRfb3V0Kz0gY29weV90aGlzOworICAgICAgICAgICAgICAgICAgemktPmNpLnN0cmVhbS50b3RhbF9pbis9IGNvcHlfdGhpczsKKyAgICAgICAgICAgICAgICAgIHppLT5jaS5zdHJlYW0udG90YWxfb3V0Kz0gY29weV90aGlzOworICAgICAgICAgICAgICAgICAgemktPmNpLnBvc19pbl9idWZmZXJlZF9kYXRhICs9IGNvcHlfdGhpczsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgIH0vLyB3aGlsZSguLi4pCisgICAgfQorCisgICAgcmV0dXJuIGVycjsKK30KKworZXh0ZXJuIGludCBaRVhQT1JUIHppcENsb3NlRmlsZUluWmlwUmF3ICh6aXBGaWxlIGZpbGUsIHVMb25nIHVuY29tcHJlc3NlZF9zaXplLCB1TG9uZyBjcmMzMikKK3sKKyAgICByZXR1cm4gemlwQ2xvc2VGaWxlSW5aaXBSYXc2NCAoZmlsZSwgdW5jb21wcmVzc2VkX3NpemUsIGNyYzMyKTsKK30KKworZXh0ZXJuIGludCBaRVhQT1JUIHppcENsb3NlRmlsZUluWmlwUmF3NjQgKHppcEZpbGUgZmlsZSwgWlBPUzY0X1QgdW5jb21wcmVzc2VkX3NpemUsIHVMb25nIGNyYzMyKQoreworICAgIHppcDY0X2ludGVybmFsKiB6aTsKKyAgICBaUE9TNjRfVCBjb21wcmVzc2VkX3NpemU7CisgICAgdUxvbmcgaW52YWxpZFZhbHVlID0gMHhmZmZmZmZmZjsKKyAgICB1bnNpZ25lZCBkYXRhc2l6ZSA9IDA7CisgICAgaW50IGVycj1aSVBfT0s7CisKKyAgICBpZiAoZmlsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gWklQX1BBUkFNRVJST1I7CisgICAgemkgPSAoemlwNjRfaW50ZXJuYWwqKWZpbGU7CisKKyAgICBpZiAoemktPmluX29wZW5lZF9maWxlX2luemlwID09IDApCisgICAgICAgIHJldHVybiBaSVBfUEFSQU1FUlJPUjsKKyAgICB6aS0+Y2kuc3RyZWFtLmF2YWlsX2luID0gMDsKKworICAgIGlmICgoemktPmNpLm1ldGhvZCA9PSBaX0RFRkxBVEVEKSAmJiAoIXppLT5jaS5yYXcpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChlcnI9PVpJUF9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdUxvbmcgdVRvdGFsT3V0QmVmb3JlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoemktPmNpLnN0cmVhbS5hdmFpbF9vdXQgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh6aXA2NEZsdXNoV3JpdGVCdWZmZXIoemkpID09IFpJUF9FUlJOTykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IFpJUF9FUlJOTzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6aS0+Y2kuc3RyZWFtLmF2YWlsX291dCA9ICh1SW50KVpfQlVGU0laRTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6aS0+Y2kuc3RyZWFtLm5leHRfb3V0ID0gemktPmNpLmJ1ZmZlcmVkX2RhdGE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdVRvdGFsT3V0QmVmb3JlID0gemktPmNpLnN0cmVhbS50b3RhbF9vdXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycj1kZWZsYXRlKCZ6aS0+Y2kuc3RyZWFtLCAgWl9GSU5JU0gpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6aS0+Y2kucG9zX2luX2J1ZmZlcmVkX2RhdGEgKz0gKHVJbnQpKHppLT5jaS5zdHJlYW0udG90YWxfb3V0IC0gdVRvdGFsT3V0QmVmb3JlKSA7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgIGVsc2UgaWYgKCh6aS0+Y2kubWV0aG9kID09IFpfQlpJUDJFRCkgJiYgKCF6aS0+Y2kucmF3KSkKKyAgICB7CisjaWZkZWYgSEFWRV9CWklQMgorICAgICAgZXJyID0gQlpfRklOSVNIX09LOworICAgICAgd2hpbGUgKGVycj09QlpfRklOSVNIX09LKQorICAgICAgeworICAgICAgICB1TG9uZyB1VG90YWxPdXRCZWZvcmU7CisgICAgICAgIGlmICh6aS0+Y2kuYnN0cmVhbS5hdmFpbF9vdXQgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgIGlmICh6aXA2NEZsdXNoV3JpdGVCdWZmZXIoemkpID09IFpJUF9FUlJOTykKKyAgICAgICAgICAgIGVyciA9IFpJUF9FUlJOTzsKKyAgICAgICAgICB6aS0+Y2kuYnN0cmVhbS5hdmFpbF9vdXQgPSAodUludClaX0JVRlNJWkU7CisgICAgICAgICAgemktPmNpLmJzdHJlYW0ubmV4dF9vdXQgPSAoY2hhciopemktPmNpLmJ1ZmZlcmVkX2RhdGE7CisgICAgICAgIH0KKyAgICAgICAgdVRvdGFsT3V0QmVmb3JlID0gemktPmNpLmJzdHJlYW0udG90YWxfb3V0X2xvMzI7CisgICAgICAgIGVycj1CWjJfYnpDb21wcmVzcygmemktPmNpLmJzdHJlYW0sICBCWl9GSU5JU0gpOworICAgICAgICBpZihlcnIgPT0gQlpfU1RSRUFNX0VORCkKKyAgICAgICAgICBlcnIgPSBaX1NUUkVBTV9FTkQ7CisKKyAgICAgICAgemktPmNpLnBvc19pbl9idWZmZXJlZF9kYXRhICs9ICh1SW50KSh6aS0+Y2kuYnN0cmVhbS50b3RhbF9vdXRfbG8zMiAtIHVUb3RhbE91dEJlZm9yZSk7CisgICAgICB9CisKKyAgICAgIGlmKGVyciA9PSBCWl9GSU5JU0hfT0spCisgICAgICAgIGVyciA9IFpJUF9PSzsKKyNlbmRpZgorICAgIH0KKworICAgIGlmIChlcnI9PVpfU1RSRUFNX0VORCkKKyAgICAgICAgZXJyPVpJUF9PSzsgLyogdGhpcyBpcyBub3JtYWwgKi8KKworICAgIGlmICgoemktPmNpLnBvc19pbl9idWZmZXJlZF9kYXRhPjApICYmIChlcnI9PVpJUF9PSykpCisgICAgICAgICAgICAgICAgeworICAgICAgICBpZiAoemlwNjRGbHVzaFdyaXRlQnVmZmVyKHppKT09WklQX0VSUk5PKQorICAgICAgICAgICAgZXJyID0gWklQX0VSUk5POworICAgICAgICAgICAgICAgIH0KKworICAgIGlmICgoemktPmNpLm1ldGhvZCA9PSBaX0RFRkxBVEVEKSAmJiAoIXppLT5jaS5yYXcpKQorICAgIHsKKyAgICAgICAgaW50IHRtcF9lcnIgPSBkZWZsYXRlRW5kKCZ6aS0+Y2kuc3RyZWFtKTsKKyAgICAgICAgaWYgKGVyciA9PSBaSVBfT0spCisgICAgICAgICAgICBlcnIgPSB0bXBfZXJyOworICAgICAgICB6aS0+Y2kuc3RyZWFtX2luaXRpYWxpc2VkID0gMDsKKyAgICB9CisjaWZkZWYgSEFWRV9CWklQMgorICAgIGVsc2UgaWYoKHppLT5jaS5tZXRob2QgPT0gWl9CWklQMkVEKSAmJiAoIXppLT5jaS5yYXcpKQorICAgIHsKKyAgICAgIGludCB0bXBlcnIgPSBCWjJfYnpDb21wcmVzc0VuZCgmemktPmNpLmJzdHJlYW0pOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycj09WklQX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSB0bXBlcnI7CisgICAgICAgICAgICAgICAgICAgICAgICB6aS0+Y2kuc3RyZWFtX2luaXRpYWxpc2VkID0gMDsKKyAgICB9CisjZW5kaWYKKworICAgIGlmICghemktPmNpLnJhdykKKyAgICB7CisgICAgICAgIGNyYzMyID0gKHVMb25nKXppLT5jaS5jcmMzMjsKKyAgICAgICAgdW5jb21wcmVzc2VkX3NpemUgPSB6aS0+Y2kudG90YWxVbmNvbXByZXNzZWREYXRhOworICAgIH0KKyAgICBjb21wcmVzc2VkX3NpemUgPSB6aS0+Y2kudG90YWxDb21wcmVzc2VkRGF0YTsKKworIyAgICBpZm5kZWYgTk9DUllQVAorICAgIGNvbXByZXNzZWRfc2l6ZSArPSB6aS0+Y2kuY3J5cHRfaGVhZGVyX3NpemU7CisjICAgIGVuZGlmCisKKyAgICAvLyB1cGRhdGUgQ3VycmVudCBJdGVtIGNyYyBhbmQgc2l6ZXMsCisgICAgaWYoY29tcHJlc3NlZF9zaXplID49IDB4ZmZmZmZmZmYgfHwgdW5jb21wcmVzc2VkX3NpemUgPj0gMHhmZmZmZmZmZiB8fCB6aS0+Y2kucG9zX2xvY2FsX2hlYWRlciA+PSAweGZmZmZmZmZmKQorICAgIHsKKyAgICAgIC8qdmVyc2lvbiBNYWRlIGJ5Ki8KKyAgICAgIHppcDY0bG9jYWxfcHV0VmFsdWVfaW5tZW1vcnkoemktPmNpLmNlbnRyYWxfaGVhZGVyKzQsKHVMb25nKTQ1LDIpOworICAgICAgLyp2ZXJzaW9uIG5lZWRlZCovCisgICAgICB6aXA2NGxvY2FsX3B1dFZhbHVlX2lubWVtb3J5KHppLT5jaS5jZW50cmFsX2hlYWRlcis2LCh1TG9uZyk0NSwyKTsKKworICAgIH0KKworICAgIHppcDY0bG9jYWxfcHV0VmFsdWVfaW5tZW1vcnkoemktPmNpLmNlbnRyYWxfaGVhZGVyKzE2LGNyYzMyLDQpOyAvKmNyYyovCisKKworICAgIGlmKGNvbXByZXNzZWRfc2l6ZSA+PSAweGZmZmZmZmZmKQorICAgICAgemlwNjRsb2NhbF9wdXRWYWx1ZV9pbm1lbW9yeSh6aS0+Y2kuY2VudHJhbF9oZWFkZXIrMjAsIGludmFsaWRWYWx1ZSw0KTsgLypjb21wciBzaXplKi8KKyAgICBlbHNlCisgICAgICB6aXA2NGxvY2FsX3B1dFZhbHVlX2lubWVtb3J5KHppLT5jaS5jZW50cmFsX2hlYWRlcisyMCwgY29tcHJlc3NlZF9zaXplLDQpOyAvKmNvbXByIHNpemUqLworCisgICAgLy8vIHNldCBpbnRlcm5hbCBmaWxlIGF0dHJpYnV0ZXMgZmllbGQKKyAgICBpZiAoemktPmNpLnN0cmVhbS5kYXRhX3R5cGUgPT0gWl9BU0NJSSkKKyAgICAgICAgemlwNjRsb2NhbF9wdXRWYWx1ZV9pbm1lbW9yeSh6aS0+Y2kuY2VudHJhbF9oZWFkZXIrMzYsKHVMb25nKVpfQVNDSUksMik7CisKKyAgICBpZih1bmNvbXByZXNzZWRfc2l6ZSA+PSAweGZmZmZmZmZmKQorICAgICAgemlwNjRsb2NhbF9wdXRWYWx1ZV9pbm1lbW9yeSh6aS0+Y2kuY2VudHJhbF9oZWFkZXIrMjQsIGludmFsaWRWYWx1ZSw0KTsgLyp1bmNvbXByIHNpemUqLworICAgIGVsc2UKKyAgICAgIHppcDY0bG9jYWxfcHV0VmFsdWVfaW5tZW1vcnkoemktPmNpLmNlbnRyYWxfaGVhZGVyKzI0LCB1bmNvbXByZXNzZWRfc2l6ZSw0KTsgLyp1bmNvbXByIHNpemUqLworCisgICAgLy8gQWRkIFpJUDY0IGV4dHJhIGluZm8gZmllbGQgZm9yIHVuY29tcHJlc3NlZCBzaXplCisgICAgaWYodW5jb21wcmVzc2VkX3NpemUgPj0gMHhmZmZmZmZmZikKKyAgICAgIGRhdGFzaXplICs9IDg7CisKKyAgICAvLyBBZGQgWklQNjQgZXh0cmEgaW5mbyBmaWVsZCBmb3IgY29tcHJlc3NlZCBzaXplCisgICAgaWYoY29tcHJlc3NlZF9zaXplID49IDB4ZmZmZmZmZmYpCisgICAgICBkYXRhc2l6ZSArPSA4OworCisgICAgLy8gQWRkIFpJUDY0IGV4dHJhIGluZm8gZmllbGQgZm9yIHJlbGF0aXZlIG9mZnNldCB0byBsb2NhbCBmaWxlIGhlYWRlciBvZiBjdXJyZW50IGZpbGUKKyAgICBpZih6aS0+Y2kucG9zX2xvY2FsX2hlYWRlciA+PSAweGZmZmZmZmZmKQorICAgICAgZGF0YXNpemUgKz0gODsKKworICAgIGlmKGRhdGFzaXplID4gMCkKKyAgICB7CisgICAgICBjaGFyKiBwID0gTlVMTDsKKworICAgICAgaWYoKHVMb25nKShkYXRhc2l6ZSArIDQpID4gemktPmNpLnNpemVfY2VudHJhbEV4dHJhRnJlZSkKKyAgICAgIHsKKyAgICAgICAgLy8gd2UgY2FuIG5vdCB3cml0ZSBtb3JlIGRhdGEgdG8gdGhlIGJ1ZmZlciB0aGF0IHdlIGhhdmUgcm9vbSBmb3IuCisgICAgICAgIHJldHVybiBaSVBfQkFEWklQRklMRTsKKyAgICAgIH0KKworICAgICAgcCA9IHppLT5jaS5jZW50cmFsX2hlYWRlciArIHppLT5jaS5zaXplX2NlbnRyYWxoZWFkZXI7CisKKyAgICAgIC8vIEFkZCBFeHRyYSBJbmZvcm1hdGlvbiBIZWFkZXIgZm9yICdaSVA2NCBpbmZvcm1hdGlvbicKKyAgICAgIHppcDY0bG9jYWxfcHV0VmFsdWVfaW5tZW1vcnkocCwgMHgwMDAxLCAyKTsgLy8gSGVhZGVySUQKKyAgICAgIHAgKz0gMjsKKyAgICAgIHppcDY0bG9jYWxfcHV0VmFsdWVfaW5tZW1vcnkocCwgZGF0YXNpemUsIDIpOyAvLyBEYXRhU2l6ZQorICAgICAgcCArPSAyOworCisgICAgICBpZih1bmNvbXByZXNzZWRfc2l6ZSA+PSAweGZmZmZmZmZmKQorICAgICAgeworICAgICAgICB6aXA2NGxvY2FsX3B1dFZhbHVlX2lubWVtb3J5KHAsIHVuY29tcHJlc3NlZF9zaXplLCA4KTsKKyAgICAgICAgcCArPSA4OworICAgICAgfQorCisgICAgICBpZihjb21wcmVzc2VkX3NpemUgPj0gMHhmZmZmZmZmZikKKyAgICAgIHsKKyAgICAgICAgemlwNjRsb2NhbF9wdXRWYWx1ZV9pbm1lbW9yeShwLCBjb21wcmVzc2VkX3NpemUsIDgpOworICAgICAgICBwICs9IDg7CisgICAgICB9CisKKyAgICAgIGlmKHppLT5jaS5wb3NfbG9jYWxfaGVhZGVyID49IDB4ZmZmZmZmZmYpCisgICAgICB7CisgICAgICAgIHppcDY0bG9jYWxfcHV0VmFsdWVfaW5tZW1vcnkocCwgemktPmNpLnBvc19sb2NhbF9oZWFkZXIsIDgpOworICAgICAgICBwICs9IDg7CisgICAgICB9CisKKyAgICAgIC8vIFVwZGF0ZSBob3cgbXVjaCBleHRyYSBmcmVlIHNwYWNlIHdlIGdvdCBpbiB0aGUgbWVtb3J5IGJ1ZmZlcgorICAgICAgLy8gYW5kIGluY3JlYXNlIHRoZSBjZW50cmFsaGVhZGVyIHNpemUgc28gdGhlIG5ldyBaSVA2NCBmaWVsZHMgYXJlIGluY2x1ZGVkCisgICAgICAvLyAoIDQgYmVsb3cgaXMgdGhlIHNpemUgb2YgSGVhZGVySUQgYW5kIERhdGFTaXplIGZpZWxkICkKKyAgICAgIHppLT5jaS5zaXplX2NlbnRyYWxFeHRyYUZyZWUgLT0gZGF0YXNpemUgKyA0OworICAgICAgemktPmNpLnNpemVfY2VudHJhbGhlYWRlciArPSBkYXRhc2l6ZSArIDQ7CisKKyAgICAgIC8vIFVwZGF0ZSB0aGUgZXh0cmEgaW5mbyBzaXplIGZpZWxkCisgICAgICB6aS0+Y2kuc2l6ZV9jZW50cmFsRXh0cmEgKz0gZGF0YXNpemUgKyA0OworICAgICAgemlwNjRsb2NhbF9wdXRWYWx1ZV9pbm1lbW9yeSh6aS0+Y2kuY2VudHJhbF9oZWFkZXIrMzAsKHVMb25nKXppLT5jaS5zaXplX2NlbnRyYWxFeHRyYSwyKTsKKyAgICB9CisKKyAgICBpZiAoZXJyPT1aSVBfT0spCisgICAgICAgIGVyciA9IGFkZF9kYXRhX2luX2RhdGFibG9jaygmemktPmNlbnRyYWxfZGlyLCB6aS0+Y2kuY2VudHJhbF9oZWFkZXIsICh1TG9uZyl6aS0+Y2kuc2l6ZV9jZW50cmFsaGVhZGVyKTsKKworICAgIGZyZWUoemktPmNpLmNlbnRyYWxfaGVhZGVyKTsKKworICAgIGlmIChlcnI9PVpJUF9PSykKKyAgICB7CisgICAgICAgIC8vIFVwZGF0ZSB0aGUgTG9jYWxGaWxlSGVhZGVyIHdpdGggdGhlIG5ldyB2YWx1ZXMuCisKKyAgICAgICAgWlBPUzY0X1QgY3VyX3Bvc19pbnppcCA9IFpURUxMNjQoemktPnpfZmlsZWZ1bmMsemktPmZpbGVzdHJlYW0pOworCisgICAgICAgIGlmIChaU0VFSzY0KHppLT56X2ZpbGVmdW5jLHppLT5maWxlc3RyZWFtLCB6aS0+Y2kucG9zX2xvY2FsX2hlYWRlciArIDE0LFpMSUJfRklMRUZVTkNfU0VFS19TRVQpIT0wKQorICAgICAgICAgICAgZXJyID0gWklQX0VSUk5POworCisgICAgICAgIGlmIChlcnI9PVpJUF9PSykKKyAgICAgICAgICAgIGVyciA9IHppcDY0bG9jYWxfcHV0VmFsdWUoJnppLT56X2ZpbGVmdW5jLHppLT5maWxlc3RyZWFtLGNyYzMyLDQpOyAvKiBjcmMgMzIsIHVua25vd24gKi8KKworICAgICAgICBpZih1bmNvbXByZXNzZWRfc2l6ZSA+PSAweGZmZmZmZmZmIHx8IGNvbXByZXNzZWRfc2l6ZSA+PSAweGZmZmZmZmZmICkKKyAgICAgICAgeworICAgICAgICAgIGlmKHppLT5jaS5wb3NfemlwNjRleHRyYWluZm8gPiAwKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgc2l6ZSBpbiB0aGUgWklQNjQgZXh0ZW5kZWQgZmllbGQuCisgICAgICAgICAgICBpZiAoWlNFRUs2NCh6aS0+el9maWxlZnVuYyx6aS0+ZmlsZXN0cmVhbSwgemktPmNpLnBvc196aXA2NGV4dHJhaW5mbyArIDQsWkxJQl9GSUxFRlVOQ19TRUVLX1NFVCkhPTApCisgICAgICAgICAgICAgIGVyciA9IFpJUF9FUlJOTzsKKworICAgICAgICAgICAgaWYgKGVycj09WklQX09LKSAvKiBjb21wcmVzc2VkIHNpemUsIHVua25vd24gKi8KKyAgICAgICAgICAgICAgZXJyID0gemlwNjRsb2NhbF9wdXRWYWx1ZSgmemktPnpfZmlsZWZ1bmMsIHppLT5maWxlc3RyZWFtLCB1bmNvbXByZXNzZWRfc2l6ZSwgOCk7CisKKyAgICAgICAgICAgIGlmIChlcnI9PVpJUF9PSykgLyogdW5jb21wcmVzc2VkIHNpemUsIHVua25vd24gKi8KKyAgICAgICAgICAgICAgZXJyID0gemlwNjRsb2NhbF9wdXRWYWx1ZSgmemktPnpfZmlsZWZ1bmMsIHppLT5maWxlc3RyZWFtLCBjb21wcmVzc2VkX3NpemUsIDgpOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGVyciA9IFpJUF9CQURaSVBGSUxFOyAvLyBDYWxsZXIgcGFzc2VkIHppcDY0ID0gMCwgc28gbm8gcm9vbSBmb3IgemlwNjQgaW5mbyAtPiBmYXRhbAorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGlmIChlcnI9PVpJUF9PSykgLyogY29tcHJlc3NlZCBzaXplLCB1bmtub3duICovCisgICAgICAgICAgICAgIGVyciA9IHppcDY0bG9jYWxfcHV0VmFsdWUoJnppLT56X2ZpbGVmdW5jLHppLT5maWxlc3RyZWFtLGNvbXByZXNzZWRfc2l6ZSw0KTsKKworICAgICAgICAgIGlmIChlcnI9PVpJUF9PSykgLyogdW5jb21wcmVzc2VkIHNpemUsIHVua25vd24gKi8KKyAgICAgICAgICAgICAgZXJyID0gemlwNjRsb2NhbF9wdXRWYWx1ZSgmemktPnpfZmlsZWZ1bmMsemktPmZpbGVzdHJlYW0sdW5jb21wcmVzc2VkX3NpemUsNCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoWlNFRUs2NCh6aS0+el9maWxlZnVuYyx6aS0+ZmlsZXN0cmVhbSwgY3VyX3Bvc19pbnppcCxaTElCX0ZJTEVGVU5DX1NFRUtfU0VUKSE9MCkKKyAgICAgICAgICAgIGVyciA9IFpJUF9FUlJOTzsKKyAgICB9CisKKyAgICB6aS0+bnVtYmVyX2VudHJ5ICsrOworICAgIHppLT5pbl9vcGVuZWRfZmlsZV9pbnppcCA9IDA7CisKKyAgICByZXR1cm4gZXJyOworfQorCitleHRlcm4gaW50IFpFWFBPUlQgemlwQ2xvc2VGaWxlSW5aaXAgKHppcEZpbGUgZmlsZSkKK3sKKyAgICByZXR1cm4gemlwQ2xvc2VGaWxlSW5aaXBSYXcgKGZpbGUsMCwwKTsKK30KKworbG9jYWwgaW50IFdyaXRlX1ppcDY0RW5kT2ZDZW50cmFsRGlyZWN0b3J5TG9jYXRvcih6aXA2NF9pbnRlcm5hbCogemksIFpQT1M2NF9UIHppcDY0ZW9jZF9wb3NfaW56aXApCit7CisgIGludCBlcnIgPSBaSVBfT0s7CisgIFpQT1M2NF9UIHBvcyA9IHppcDY0ZW9jZF9wb3NfaW56aXAgLSB6aS0+YWRkX3Bvc2l0aW9uX3doZW5fd3JpdGluZ19vZmZzZXQ7CisKKyAgZXJyID0gemlwNjRsb2NhbF9wdXRWYWx1ZSgmemktPnpfZmlsZWZ1bmMsemktPmZpbGVzdHJlYW0sKHVMb25nKVpJUDY0RU5ETE9DSEVBREVSTUFHSUMsNCk7CisKKyAgLypudW0gZGlza3MqLworICAgIGlmIChlcnI9PVpJUF9PSykgLyogbnVtYmVyIG9mIHRoZSBkaXNrIHdpdGggdGhlIHN0YXJ0IG9mIHRoZSBjZW50cmFsIGRpcmVjdG9yeSAqLworICAgICAgZXJyID0gemlwNjRsb2NhbF9wdXRWYWx1ZSgmemktPnpfZmlsZWZ1bmMsemktPmZpbGVzdHJlYW0sKHVMb25nKTAsNCk7CisKKyAgLypyZWxhdGl2ZSBvZmZzZXQqLworICAgIGlmIChlcnI9PVpJUF9PSykgLyogUmVsYXRpdmUgb2Zmc2V0IHRvIHRoZSBaaXA2NEVuZE9mQ2VudHJhbERpcmVjdG9yeSAqLworICAgICAgZXJyID0gemlwNjRsb2NhbF9wdXRWYWx1ZSgmemktPnpfZmlsZWZ1bmMsemktPmZpbGVzdHJlYW0sIHBvcyw4KTsKKworICAvKnRvdGFsIGRpc2tzKi8gLyogRG8gbm90IHN1cHBvcnQgc3Bhd25pbmcgb2YgZGlzayBzbyBhbHdheXMgc2F5IDEgaGVyZSovCisgICAgaWYgKGVycj09WklQX09LKSAvKiBudW1iZXIgb2YgdGhlIGRpc2sgd2l0aCB0aGUgc3RhcnQgb2YgdGhlIGNlbnRyYWwgZGlyZWN0b3J5ICovCisgICAgICBlcnIgPSB6aXA2NGxvY2FsX3B1dFZhbHVlKCZ6aS0+el9maWxlZnVuYyx6aS0+ZmlsZXN0cmVhbSwodUxvbmcpMSw0KTsKKworICAgIHJldHVybiBlcnI7Cit9CisKK2xvY2FsIGludCBXcml0ZV9aaXA2NEVuZE9mQ2VudHJhbERpcmVjdG9yeVJlY29yZCh6aXA2NF9pbnRlcm5hbCogemksIHVMb25nIHNpemVfY2VudHJhbGRpciwgWlBPUzY0X1QgY2VudHJhbGRpcl9wb3NfaW56aXApCit7CisgIGludCBlcnIgPSBaSVBfT0s7CisKKyAgdUxvbmcgWmlwNjREYXRhU2l6ZSA9IDQ0OworCisgIGVyciA9IHppcDY0bG9jYWxfcHV0VmFsdWUoJnppLT56X2ZpbGVmdW5jLHppLT5maWxlc3RyZWFtLCh1TG9uZylaSVA2NEVOREhFQURFUk1BR0lDLDQpOworCisgIGlmIChlcnI9PVpJUF9PSykgLyogc2l6ZSBvZiB0aGlzICd6aXA2NCBlbmQgb2YgY2VudHJhbCBkaXJlY3RvcnknICovCisgICAgZXJyID0gemlwNjRsb2NhbF9wdXRWYWx1ZSgmemktPnpfZmlsZWZ1bmMsemktPmZpbGVzdHJlYW0sKFpQT1M2NF9UKVppcDY0RGF0YVNpemUsOCk7IC8vIHdoeSBaUE9TNjRfVCBvZiB0aGlzID8KKworICBpZiAoZXJyPT1aSVBfT0spIC8qIHZlcnNpb24gbWFkZSBieSAqLworICAgIGVyciA9IHppcDY0bG9jYWxfcHV0VmFsdWUoJnppLT56X2ZpbGVmdW5jLHppLT5maWxlc3RyZWFtLCh1TG9uZyk0NSwyKTsKKworICBpZiAoZXJyPT1aSVBfT0spIC8qIHZlcnNpb24gbmVlZGVkICovCisgICAgZXJyID0gemlwNjRsb2NhbF9wdXRWYWx1ZSgmemktPnpfZmlsZWZ1bmMsemktPmZpbGVzdHJlYW0sKHVMb25nKTQ1LDIpOworCisgIGlmIChlcnI9PVpJUF9PSykgLyogbnVtYmVyIG9mIHRoaXMgZGlzayAqLworICAgIGVyciA9IHppcDY0bG9jYWxfcHV0VmFsdWUoJnppLT56X2ZpbGVmdW5jLHppLT5maWxlc3RyZWFtLCh1TG9uZykwLDQpOworCisgIGlmIChlcnI9PVpJUF9PSykgLyogbnVtYmVyIG9mIHRoZSBkaXNrIHdpdGggdGhlIHN0YXJ0IG9mIHRoZSBjZW50cmFsIGRpcmVjdG9yeSAqLworICAgIGVyciA9IHppcDY0bG9jYWxfcHV0VmFsdWUoJnppLT56X2ZpbGVmdW5jLHppLT5maWxlc3RyZWFtLCh1TG9uZykwLDQpOworCisgIGlmIChlcnI9PVpJUF9PSykgLyogdG90YWwgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGNlbnRyYWwgZGlyIG9uIHRoaXMgZGlzayAqLworICAgIGVyciA9IHppcDY0bG9jYWxfcHV0VmFsdWUoJnppLT56X2ZpbGVmdW5jLCB6aS0+ZmlsZXN0cmVhbSwgemktPm51bWJlcl9lbnRyeSwgOCk7CisKKyAgaWYgKGVycj09WklQX09LKSAvKiB0b3RhbCBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgY2VudHJhbCBkaXIgKi8KKyAgICBlcnIgPSB6aXA2NGxvY2FsX3B1dFZhbHVlKCZ6aS0+el9maWxlZnVuYywgemktPmZpbGVzdHJlYW0sIHppLT5udW1iZXJfZW50cnksIDgpOworCisgIGlmIChlcnI9PVpJUF9PSykgLyogc2l6ZSBvZiB0aGUgY2VudHJhbCBkaXJlY3RvcnkgKi8KKyAgICBlcnIgPSB6aXA2NGxvY2FsX3B1dFZhbHVlKCZ6aS0+el9maWxlZnVuYyx6aS0+ZmlsZXN0cmVhbSwoWlBPUzY0X1Qpc2l6ZV9jZW50cmFsZGlyLDgpOworCisgIGlmIChlcnI9PVpJUF9PSykgLyogb2Zmc2V0IG9mIHN0YXJ0IG9mIGNlbnRyYWwgZGlyZWN0b3J5IHdpdGggcmVzcGVjdCB0byB0aGUgc3RhcnRpbmcgZGlzayBudW1iZXIgKi8KKyAgeworICAgIFpQT1M2NF9UIHBvcyA9IGNlbnRyYWxkaXJfcG9zX2luemlwIC0gemktPmFkZF9wb3NpdGlvbl93aGVuX3dyaXRpbmdfb2Zmc2V0OworICAgIGVyciA9IHppcDY0bG9jYWxfcHV0VmFsdWUoJnppLT56X2ZpbGVmdW5jLHppLT5maWxlc3RyZWFtLCAoWlBPUzY0X1QpcG9zLDgpOworICB9CisgIHJldHVybiBlcnI7Cit9Citsb2NhbCBpbnQgV3JpdGVfRW5kT2ZDZW50cmFsRGlyZWN0b3J5UmVjb3JkKHppcDY0X2ludGVybmFsKiB6aSwgdUxvbmcgc2l6ZV9jZW50cmFsZGlyLCBaUE9TNjRfVCBjZW50cmFsZGlyX3Bvc19pbnppcCkKK3sKKyAgaW50IGVyciA9IFpJUF9PSzsKKworICAvKnNpZ25hdHVyZSovCisgIGVyciA9IHppcDY0bG9jYWxfcHV0VmFsdWUoJnppLT56X2ZpbGVmdW5jLHppLT5maWxlc3RyZWFtLCh1TG9uZylFTkRIRUFERVJNQUdJQyw0KTsKKworICBpZiAoZXJyPT1aSVBfT0spIC8qIG51bWJlciBvZiB0aGlzIGRpc2sgKi8KKyAgICBlcnIgPSB6aXA2NGxvY2FsX3B1dFZhbHVlKCZ6aS0+el9maWxlZnVuYyx6aS0+ZmlsZXN0cmVhbSwodUxvbmcpMCwyKTsKKworICBpZiAoZXJyPT1aSVBfT0spIC8qIG51bWJlciBvZiB0aGUgZGlzayB3aXRoIHRoZSBzdGFydCBvZiB0aGUgY2VudHJhbCBkaXJlY3RvcnkgKi8KKyAgICBlcnIgPSB6aXA2NGxvY2FsX3B1dFZhbHVlKCZ6aS0+el9maWxlZnVuYyx6aS0+ZmlsZXN0cmVhbSwodUxvbmcpMCwyKTsKKworICBpZiAoZXJyPT1aSVBfT0spIC8qIHRvdGFsIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBjZW50cmFsIGRpciBvbiB0aGlzIGRpc2sgKi8KKyAgeworICAgIHsKKyAgICAgIGlmKHppLT5udW1iZXJfZW50cnkgPj0gMHhGRkZGKQorICAgICAgICBlcnIgPSB6aXA2NGxvY2FsX3B1dFZhbHVlKCZ6aS0+el9maWxlZnVuYyx6aS0+ZmlsZXN0cmVhbSwodUxvbmcpMHhmZmZmLDIpOyAvLyB1c2UgdmFsdWUgaW4gWklQNjQgcmVjb3JkCisgICAgICBlbHNlCisgICAgICAgIGVyciA9IHppcDY0bG9jYWxfcHV0VmFsdWUoJnppLT56X2ZpbGVmdW5jLHppLT5maWxlc3RyZWFtLCh1TG9uZyl6aS0+bnVtYmVyX2VudHJ5LDIpOworICAgIH0KKyAgfQorCisgIGlmIChlcnI9PVpJUF9PSykgLyogdG90YWwgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGNlbnRyYWwgZGlyICovCisgIHsKKyAgICBpZih6aS0+bnVtYmVyX2VudHJ5ID49IDB4RkZGRikKKyAgICAgIGVyciA9IHppcDY0bG9jYWxfcHV0VmFsdWUoJnppLT56X2ZpbGVmdW5jLHppLT5maWxlc3RyZWFtLCh1TG9uZykweGZmZmYsMik7IC8vIHVzZSB2YWx1ZSBpbiBaSVA2NCByZWNvcmQKKyAgICBlbHNlCisgICAgICBlcnIgPSB6aXA2NGxvY2FsX3B1dFZhbHVlKCZ6aS0+el9maWxlZnVuYyx6aS0+ZmlsZXN0cmVhbSwodUxvbmcpemktPm51bWJlcl9lbnRyeSwyKTsKKyAgfQorCisgIGlmIChlcnI9PVpJUF9PSykgLyogc2l6ZSBvZiB0aGUgY2VudHJhbCBkaXJlY3RvcnkgKi8KKyAgICBlcnIgPSB6aXA2NGxvY2FsX3B1dFZhbHVlKCZ6aS0+el9maWxlZnVuYyx6aS0+ZmlsZXN0cmVhbSwodUxvbmcpc2l6ZV9jZW50cmFsZGlyLDQpOworCisgIGlmIChlcnI9PVpJUF9PSykgLyogb2Zmc2V0IG9mIHN0YXJ0IG9mIGNlbnRyYWwgZGlyZWN0b3J5IHdpdGggcmVzcGVjdCB0byB0aGUgc3RhcnRpbmcgZGlzayBudW1iZXIgKi8KKyAgeworICAgIFpQT1M2NF9UIHBvcyA9IGNlbnRyYWxkaXJfcG9zX2luemlwIC0gemktPmFkZF9wb3NpdGlvbl93aGVuX3dyaXRpbmdfb2Zmc2V0OworICAgIGlmKHBvcyA+PSAweGZmZmZmZmZmKQorICAgIHsKKyAgICAgIGVyciA9IHppcDY0bG9jYWxfcHV0VmFsdWUoJnppLT56X2ZpbGVmdW5jLHppLT5maWxlc3RyZWFtLCAodUxvbmcpMHhmZmZmZmZmZiw0KTsKKyAgICB9CisgICAgZWxzZQorICAgICAgZXJyID0gemlwNjRsb2NhbF9wdXRWYWx1ZSgmemktPnpfZmlsZWZ1bmMsemktPmZpbGVzdHJlYW0sICh1TG9uZykoY2VudHJhbGRpcl9wb3NfaW56aXAgLSB6aS0+YWRkX3Bvc2l0aW9uX3doZW5fd3JpdGluZ19vZmZzZXQpLDQpOworICB9CisKKyAgIHJldHVybiBlcnI7Cit9CisKK2xvY2FsIGludCBXcml0ZV9HbG9iYWxDb21tZW50KHppcDY0X2ludGVybmFsKiB6aSwgY29uc3QgY2hhciogZ2xvYmFsX2NvbW1lbnQpCit7CisgIGludCBlcnIgPSBaSVBfT0s7CisgIHVJbnQgc2l6ZV9nbG9iYWxfY29tbWVudCA9IDA7CisKKyAgaWYoZ2xvYmFsX2NvbW1lbnQgIT0gTlVMTCkKKyAgICBzaXplX2dsb2JhbF9jb21tZW50ID0gKHVJbnQpc3RybGVuKGdsb2JhbF9jb21tZW50KTsKKworICBlcnIgPSB6aXA2NGxvY2FsX3B1dFZhbHVlKCZ6aS0+el9maWxlZnVuYyx6aS0+ZmlsZXN0cmVhbSwodUxvbmcpc2l6ZV9nbG9iYWxfY29tbWVudCwyKTsKKworICBpZiAoZXJyID09IFpJUF9PSyAmJiBzaXplX2dsb2JhbF9jb21tZW50ID4gMCkKKyAgeworICAgIGlmIChaV1JJVEU2NCh6aS0+el9maWxlZnVuYyx6aS0+ZmlsZXN0cmVhbSwgZ2xvYmFsX2NvbW1lbnQsIHNpemVfZ2xvYmFsX2NvbW1lbnQpICE9IHNpemVfZ2xvYmFsX2NvbW1lbnQpCisgICAgICBlcnIgPSBaSVBfRVJSTk87CisgIH0KKyAgcmV0dXJuIGVycjsKK30KKworZXh0ZXJuIGludCBaRVhQT1JUIHppcENsb3NlICh6aXBGaWxlIGZpbGUsIGNvbnN0IGNoYXIqIGdsb2JhbF9jb21tZW50KQoreworICAgIHppcDY0X2ludGVybmFsKiB6aTsKKyAgICBpbnQgZXJyID0gMDsKKyAgICB1TG9uZyBzaXplX2NlbnRyYWxkaXIgPSAwOworICAgIFpQT1M2NF9UIGNlbnRyYWxkaXJfcG9zX2luemlwOworICAgIFpQT1M2NF9UIHBvczsKKworICAgIGlmIChmaWxlID09IE5VTEwpCisgICAgICAgIHJldHVybiBaSVBfUEFSQU1FUlJPUjsKKworICAgIHppID0gKHppcDY0X2ludGVybmFsKilmaWxlOworCisgICAgaWYgKHppLT5pbl9vcGVuZWRfZmlsZV9pbnppcCA9PSAxKQorICAgIHsKKyAgICAgICAgZXJyID0gemlwQ2xvc2VGaWxlSW5aaXAgKGZpbGUpOworICAgIH0KKworI2lmbmRlZiBOT19BRERGSUxFSU5FWElTVElOR1pJUAorICAgIGlmIChnbG9iYWxfY29tbWVudD09TlVMTCkKKyAgICAgICAgZ2xvYmFsX2NvbW1lbnQgPSB6aS0+Z2xvYmFsY29tbWVudDsKKyNlbmRpZgorCisgICAgY2VudHJhbGRpcl9wb3NfaW56aXAgPSBaVEVMTDY0KHppLT56X2ZpbGVmdW5jLHppLT5maWxlc3RyZWFtKTsKKworICAgIGlmIChlcnI9PVpJUF9PSykKKyAgICB7CisgICAgICAgIGxpbmtlZGxpc3RfZGF0YWJsb2NrX2ludGVybmFsKiBsZGkgPSB6aS0+Y2VudHJhbF9kaXIuZmlyc3RfYmxvY2s7CisgICAgICAgIHdoaWxlIChsZGkhPU5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgoZXJyPT1aSVBfT0spICYmIChsZGktPmZpbGxlZF9pbl90aGlzX2Jsb2NrPjApKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChaV1JJVEU2NCh6aS0+el9maWxlZnVuYyx6aS0+ZmlsZXN0cmVhbSwgbGRpLT5kYXRhLCBsZGktPmZpbGxlZF9pbl90aGlzX2Jsb2NrKSAhPSBsZGktPmZpbGxlZF9pbl90aGlzX2Jsb2NrKQorICAgICAgICAgICAgICAgICAgICBlcnIgPSBaSVBfRVJSTk87CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNpemVfY2VudHJhbGRpciArPSBsZGktPmZpbGxlZF9pbl90aGlzX2Jsb2NrOworICAgICAgICAgICAgbGRpID0gbGRpLT5uZXh0X2RhdGFibG9jazsKKyAgICAgICAgfQorICAgIH0KKyAgICBmcmVlX2xpbmtlZGxpc3QoJih6aS0+Y2VudHJhbF9kaXIpKTsKKworICAgIHBvcyA9IGNlbnRyYWxkaXJfcG9zX2luemlwIC0gemktPmFkZF9wb3NpdGlvbl93aGVuX3dyaXRpbmdfb2Zmc2V0OworICAgIGlmKHBvcyA+PSAweGZmZmZmZmZmIHx8IHppLT5udW1iZXJfZW50cnkgPiAweEZGRkYpCisgICAgeworICAgICAgWlBPUzY0X1QgWmlwNjRFT0NEcG9zID0gWlRFTEw2NCh6aS0+el9maWxlZnVuYyx6aS0+ZmlsZXN0cmVhbSk7CisgICAgICBXcml0ZV9aaXA2NEVuZE9mQ2VudHJhbERpcmVjdG9yeVJlY29yZCh6aSwgc2l6ZV9jZW50cmFsZGlyLCBjZW50cmFsZGlyX3Bvc19pbnppcCk7CisKKyAgICAgIFdyaXRlX1ppcDY0RW5kT2ZDZW50cmFsRGlyZWN0b3J5TG9jYXRvcih6aSwgWmlwNjRFT0NEcG9zKTsKKyAgICB9CisKKyAgICBpZiAoZXJyPT1aSVBfT0spCisgICAgICBlcnIgPSBXcml0ZV9FbmRPZkNlbnRyYWxEaXJlY3RvcnlSZWNvcmQoemksIHNpemVfY2VudHJhbGRpciwgY2VudHJhbGRpcl9wb3NfaW56aXApOworCisgICAgaWYoZXJyID09IFpJUF9PSykKKyAgICAgIGVyciA9IFdyaXRlX0dsb2JhbENvbW1lbnQoemksIGdsb2JhbF9jb21tZW50KTsKKworICAgIGlmIChaQ0xPU0U2NCh6aS0+el9maWxlZnVuYyx6aS0+ZmlsZXN0cmVhbSkgIT0gMCkKKyAgICAgICAgaWYgKGVyciA9PSBaSVBfT0spCisgICAgICAgICAgICBlcnIgPSBaSVBfRVJSTk87CisKKyNpZm5kZWYgTk9fQURERklMRUlORVhJU1RJTkdaSVAKKyAgICBUUllGUkVFKHppLT5nbG9iYWxjb21tZW50KTsKKyNlbmRpZgorICAgIFRSWUZSRUUoemkpOworCisgICAgcmV0dXJuIGVycjsKK30KKworZXh0ZXJuIGludCBaRVhQT1JUIHppcFJlbW92ZUV4dHJhSW5mb0Jsb2NrIChjaGFyKiBwRGF0YSwgaW50KiBkYXRhTGVuLCBzaG9ydCBzSGVhZGVyKQoreworICBjaGFyKiBwID0gcERhdGE7CisgIGludCBzaXplID0gMDsKKyAgY2hhciogcE5ld0hlYWRlcjsKKyAgY2hhciogcFRtcDsKKyAgc2hvcnQgaGVhZGVyOworICBzaG9ydCBkYXRhU2l6ZTsKKworICBpbnQgcmV0VmFsID0gWklQX09LOworCisgIGlmKHBEYXRhID09IE5VTEwgfHwgKmRhdGFMZW4gPCA0KQorICAgIHJldHVybiBaSVBfUEFSQU1FUlJPUjsKKworICBwTmV3SGVhZGVyID0gKGNoYXIqKUFMTE9DKCh1bnNpZ25lZCkqZGF0YUxlbik7CisgIHBUbXAgPSBwTmV3SGVhZGVyOworCisgIHdoaWxlKHAgPCAocERhdGEgKyAqZGF0YUxlbikpCisgIHsKKyAgICBoZWFkZXIgPSAqKHNob3J0KilwOworICAgIGRhdGFTaXplID0gKigoKHNob3J0KilwKSsxKTsKKworICAgIGlmKCBoZWFkZXIgPT0gc0hlYWRlciApIC8vIEhlYWRlciBmb3VuZC4KKyAgICB7CisgICAgICBwICs9IGRhdGFTaXplICsgNDsgLy8gc2tpcCBpdC4gZG8gbm90IGNvcHkgdG8gdGVtcCBidWZmZXIKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIC8vIEV4dHJhIEluZm8gYmxvY2sgc2hvdWxkIG5vdCBiZSByZW1vdmVkLCBTbyBjb3B5IGl0IHRvIHRoZSB0ZW1wIGJ1ZmZlci4KKyAgICAgIG1lbWNweShwVG1wLCBwLCBkYXRhU2l6ZSArIDQpOworICAgICAgcCArPSBkYXRhU2l6ZSArIDQ7CisgICAgICBzaXplICs9IGRhdGFTaXplICsgNDsKKyAgICB9CisKKyAgfQorCisgIGlmKHNpemUgPCAqZGF0YUxlbikKKyAgeworICAgIC8vIGNsZWFuIG9sZCBleHRyYSBpbmZvIGJsb2NrLgorICAgIG1lbXNldChwRGF0YSwwLCAqZGF0YUxlbik7CisKKyAgICAvLyBjb3B5IHRoZSBuZXcgZXh0cmEgaW5mbyBibG9jayBvdmVyIHRoZSBvbGQKKyAgICBpZihzaXplID4gMCkKKyAgICAgIG1lbWNweShwRGF0YSwgcE5ld0hlYWRlciwgc2l6ZSk7CisKKyAgICAvLyBzZXQgdGhlIG5ldyBleHRyYSBpbmZvIHNpemUKKyAgICAqZGF0YUxlbiA9IHNpemU7CisKKyAgICByZXRWYWwgPSBaSVBfT0s7CisgIH0KKyAgZWxzZQorICAgIHJldFZhbCA9IFpJUF9FUlJOTzsKKworICBUUllGUkVFKHBOZXdIZWFkZXIpOworCisgIHJldHVybiByZXRWYWw7Cit9CmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi9taW5pemlwL3ppcC5oIGIvc3JjL2NvbnRyaWIvbWluaXppcC96aXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTQ1MDlkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbnRyaWIvbWluaXppcC96aXAuaApAQCAtMCwwICsxLDM2NyBAQAorLyogemlwLmggLS0gSU8gb24gLnppcCBmaWxlcyB1c2luZyB6bGliCisgICBWZXJzaW9uIDEuMSwgRmVicnVhcnkgMTRoLCAyMDEwCisgICBwYXJ0IG9mIHRoZSBNaW5pWmlwIHByb2plY3QgLSAoIGh0dHA6Ly93d3cud2luaW1hZ2UuY29tL3pMaWJEbGwvbWluaXppcC5odG1sICkKKworICAgICAgICAgQ29weXJpZ2h0IChDKSAxOTk4LTIwMTAgR2lsbGVzIFZvbGxhbnQgKG1pbml6aXApICggaHR0cDovL3d3dy53aW5pbWFnZS5jb20vekxpYkRsbC9taW5pemlwLmh0bWwgKQorCisgICAgICAgICBNb2RpZmljYXRpb25zIGZvciBaaXA2NCBzdXBwb3J0CisgICAgICAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBNYXRoaWFzIFN2ZW5zc29uICggaHR0cDovL3Jlc3VsdDQyLmNvbSApCisKKyAgICAgICAgIEZvciBtb3JlIGluZm8gcmVhZCBNaW5pWmlwX2luZm8udHh0CisKKyAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICBDb25kaXRpb24gb2YgdXNlIGFuZCBkaXN0cmlidXRpb24gYXJlIHRoZSBzYW1lIHRoYW4gemxpYiA6CisKKyAgVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWQKKyAgd2FycmFudHkuICBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcworICBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLgorCisgIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLAorICBpbmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRlciBpdCBhbmQgcmVkaXN0cmlidXRlIGl0CisgIGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworICAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdAorICAgICBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZQorICAgICBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24gd291bGQgYmUKKyAgICAgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1aXJlZC4KKyAgMi4gQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmUKKyAgICAgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLgorICAzLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLgorCisgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICAgIENoYW5nZXMKKworICAgICAgICBTZWUgaGVhZGVyIG9mIHppcC5oCisKKyovCisKKyNpZm5kZWYgX3ppcDEyX0gKKyNkZWZpbmUgX3ppcDEyX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvLyNkZWZpbmUgSEFWRV9CWklQMgorCisjaWZuZGVmIF9aTElCX0gKKyNpbmNsdWRlICJ6bGliLmgiCisjZW5kaWYKKworI2lmbmRlZiBfWkxJQklPQVBJX0gKKyNpbmNsdWRlICJpb2FwaS5oIgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0JaSVAyCisjaW5jbHVkZSAiYnpsaWIuaCIKKyNlbmRpZgorCisjZGVmaW5lIFpfQlpJUDJFRCAxMgorCisjaWYgZGVmaW5lZChTVFJJQ1RaSVApIHx8IGRlZmluZWQoU1RSSUNUWklQVU5aSVApCisvKiBsaWtlIHRoZSBTVFJJQ1Qgb2YgV0lOMzIsIHdlIGRlZmluZSBhIHBvaW50ZXIgdGhhdCBjYW5ub3QgYmUgY29udmVydGVkCisgICAgZnJvbSAodm9pZCopIHdpdGhvdXQgY2FzdCAqLwordHlwZWRlZiBzdHJ1Y3QgVGFnemlwRmlsZV9fIHsgaW50IHVudXNlZDsgfSB6aXBGaWxlX187Cit0eXBlZGVmIHppcEZpbGVfXyAqemlwRmlsZTsKKyNlbHNlCit0eXBlZGVmIHZvaWRwIHppcEZpbGU7CisjZW5kaWYKKworI2RlZmluZSBaSVBfT0sgICAgICAgICAgICAgICAgICAgICAgICAgICgwKQorI2RlZmluZSBaSVBfRU9GICAgICAgICAgICAgICAgICAgICAgICAgICgwKQorI2RlZmluZSBaSVBfRVJSTk8gICAgICAgICAgICAgICAgICAgICAgIChaX0VSUk5PKQorI2RlZmluZSBaSVBfUEFSQU1FUlJPUiAgICAgICAgICAgICAgICAgICgtMTAyKQorI2RlZmluZSBaSVBfQkFEWklQRklMRSAgICAgICAgICAgICAgICAgICgtMTAzKQorI2RlZmluZSBaSVBfSU5URVJOQUxFUlJPUiAgICAgICAgICAgICAgICgtMTA0KQorCisjaWZuZGVmIERFRl9NRU1fTEVWRUwKKyMgIGlmIE1BWF9NRU1fTEVWRUwgPj0gOAorIyAgICBkZWZpbmUgREVGX01FTV9MRVZFTCA4CisjICBlbHNlCisjICAgIGRlZmluZSBERUZfTUVNX0xFVkVMICBNQVhfTUVNX0xFVkVMCisjICBlbmRpZgorI2VuZGlmCisvKiBkZWZhdWx0IG1lbUxldmVsICovCisKKy8qIHRtX3ppcCBjb250YWluIGRhdGUvdGltZSBpbmZvICovCit0eXBlZGVmIHN0cnVjdCB0bV96aXBfcworeworICAgIGludCB0bV9zZWM7ICAgICAgICAgICAgIC8qIHNlY29uZHMgYWZ0ZXIgdGhlIG1pbnV0ZSAtIFswLDU5XSAqLworICAgIGludCB0bV9taW47ICAgICAgICAgICAgIC8qIG1pbnV0ZXMgYWZ0ZXIgdGhlIGhvdXIgLSBbMCw1OV0gKi8KKyAgICBpbnQgdG1faG91cjsgICAgICAgICAgICAvKiBob3VycyBzaW5jZSBtaWRuaWdodCAtIFswLDIzXSAqLworICAgIGludCB0bV9tZGF5OyAgICAgICAgICAgIC8qIGRheSBvZiB0aGUgbW9udGggLSBbMSwzMV0gKi8KKyAgICBpbnQgdG1fbW9uOyAgICAgICAgICAgICAvKiBtb250aHMgc2luY2UgSmFudWFyeSAtIFswLDExXSAqLworICAgIGludCB0bV95ZWFyOyAgICAgICAgICAgIC8qIHllYXJzIC0gWzE5ODAuLjIwNDRdICovCit9IHRtX3ppcDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICB0bV96aXAgICAgICB0bXpfZGF0ZTsgICAgICAgLyogZGF0ZSBpbiB1bmRlcnN0YW5kYWJsZSBmb3JtYXQgICAgICAgICAgICovCisgICAgdUxvbmcgICAgICAgZG9zRGF0ZTsgICAgICAgLyogaWYgZG9zX2RhdGUgPT0gMCwgdG11X2RhdGUgaXMgdXNlZCAgICAgICovCisvKiAgICB1TG9uZyAgICAgICBmbGFnOyAgICAgICAgKi8gICAvKiBnZW5lcmFsIHB1cnBvc2UgYml0IGZsYWcgICAgICAgIDIgYnl0ZXMgKi8KKworICAgIHVMb25nICAgICAgIGludGVybmFsX2ZhOyAgICAvKiBpbnRlcm5hbCBmaWxlIGF0dHJpYnV0ZXMgICAgICAgIDIgYnl0ZXMgKi8KKyAgICB1TG9uZyAgICAgICBleHRlcm5hbF9mYTsgICAgLyogZXh0ZXJuYWwgZmlsZSBhdHRyaWJ1dGVzICAgICAgICA0IGJ5dGVzICovCit9IHppcF9maWxlaW5mbzsKKwordHlwZWRlZiBjb25zdCBjaGFyKiB6aXBjaGFycGM7CisKKworI2RlZmluZSBBUFBFTkRfU1RBVFVTX0NSRUFURSAgICAgICAgKDApCisjZGVmaW5lIEFQUEVORF9TVEFUVVNfQ1JFQVRFQUZURVIgICAoMSkKKyNkZWZpbmUgQVBQRU5EX1NUQVRVU19BRERJTlpJUCAgICAgICgyKQorCitleHRlcm4gemlwRmlsZSBaRVhQT1JUIHppcE9wZW4gT0YoKGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBpbnQgYXBwZW5kKSk7CitleHRlcm4gemlwRmlsZSBaRVhQT1JUIHppcE9wZW42NCBPRigoY29uc3Qgdm9pZCAqcGF0aG5hbWUsIGludCBhcHBlbmQpKTsKKy8qCisgIENyZWF0ZSBhIHppcGZpbGUuCisgICAgIHBhdGhuYW1lIGNvbnRhaW4gb24gV2luZG93cyBYUCBhIGZpbGVuYW1lIGxpa2UgImM6XFx6bGliXFx6bGliMTEzLnppcCIgb3Igb24KKyAgICAgICBhbiBVbml4IGNvbXB1dGVyICJ6bGliL3psaWIxMTMuemlwIi4KKyAgICAgaWYgdGhlIGZpbGUgcGF0aG5hbWUgZXhpc3QgYW5kIGFwcGVuZD09QVBQRU5EX1NUQVRVU19DUkVBVEVBRlRFUiwgdGhlIHppcAorICAgICAgIHdpbGwgYmUgY3JlYXRlZCBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLgorICAgICAgICAgKHVzZWZ1bCBpZiB0aGUgZmlsZSBjb250YWluIGEgc2VsZiBleHRyYWN0b3IgY29kZSkKKyAgICAgaWYgdGhlIGZpbGUgcGF0aG5hbWUgZXhpc3QgYW5kIGFwcGVuZD09QVBQRU5EX1NUQVRVU19BRERJTlpJUCwgd2Ugd2lsbAorICAgICAgIGFkZCBmaWxlcyBpbiBleGlzdGluZyB6aXAgKGJlIHN1cmUgeW91IGRvbid0IGFkZCBmaWxlIHRoYXQgZG9lc24ndCBleGlzdCkKKyAgICAgSWYgdGhlIHppcGZpbGUgY2Fubm90IGJlIG9wZW5lZCwgdGhlIHJldHVybiB2YWx1ZSBpcyBOVUxMLgorICAgICBFbHNlLCB0aGUgcmV0dXJuIHZhbHVlIGlzIGEgemlwRmlsZSBIYW5kbGUsIHVzYWJsZSB3aXRoIG90aGVyIGZ1bmN0aW9uCisgICAgICAgb2YgdGhpcyB6aXAgcGFja2FnZS4KKyovCisKKy8qIE5vdGUgOiB0aGVyZSBpcyBubyBkZWxldGUgZnVuY3Rpb24gaW50byBhIHppcGZpbGUuCisgICBJZiB5b3Ugd2FudCBkZWxldGUgZmlsZSBpbnRvIGEgemlwZmlsZSwgeW91IG11c3Qgb3BlbiBhIHppcGZpbGUsIGFuZCBjcmVhdGUgYW5vdGhlcgorICAgT2YgY291c2UsIHlvdSBjYW4gdXNlIFJBVyByZWFkaW5nIGFuZCB3cml0aW5nIHRvIGNvcHkgdGhlIGZpbGUgeW91IGRpZCBub3Qgd2FudCBkZWx0ZQorKi8KKworZXh0ZXJuIHppcEZpbGUgWkVYUE9SVCB6aXBPcGVuMiBPRigoY29uc3QgY2hhciAqcGF0aG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhcHBlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHppcGNoYXJwYyogZ2xvYmFsY29tbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemxpYl9maWxlZnVuY19kZWYqIHB6bGliX2ZpbGVmdW5jX2RlZikpOworCitleHRlcm4gemlwRmlsZSBaRVhQT1JUIHppcE9wZW4yXzY0IE9GKChjb25zdCB2b2lkICpwYXRobmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFwcGVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemlwY2hhcnBjKiBnbG9iYWxjb21tZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6bGliX2ZpbGVmdW5jNjRfZGVmKiBwemxpYl9maWxlZnVuY19kZWYpKTsKKworZXh0ZXJuIHppcEZpbGUgWkVYUE9SVCB6aXBPcGVuMyBPRigoY29uc3Qgdm9pZCAqcGF0aG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYXBwZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemlwY2hhcnBjKiBnbG9iYWxjb21tZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemxpYl9maWxlZnVuYzY0XzMyX2RlZiogcHpsaWJfZmlsZWZ1bmM2NF8zMl9kZWYpKTsKKworZXh0ZXJuIGludCBaRVhQT1JUIHppcE9wZW5OZXdGaWxlSW5aaXAgT0YoKHppcEZpbGUgZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHppcF9maWxlaW5mbyogemlwZmksCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqIGV4dHJhZmllbGRfbG9jYWwsCisgICAgICAgICAgICAgICAgICAgICAgIHVJbnQgc2l6ZV9leHRyYWZpZWxkX2xvY2FsLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiBleHRyYWZpZWxkX2dsb2JhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgdUludCBzaXplX2V4dHJhZmllbGRfZ2xvYmFsLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjb21tZW50LAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWV0aG9kLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGV2ZWwpKTsKKworZXh0ZXJuIGludCBaRVhQT1JUIHppcE9wZW5OZXdGaWxlSW5aaXA2NCBPRigoemlwRmlsZSBmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgemlwX2ZpbGVpbmZvKiB6aXBmaSwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogZXh0cmFmaWVsZF9sb2NhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgdUludCBzaXplX2V4dHJhZmllbGRfbG9jYWwsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqIGV4dHJhZmllbGRfZ2xvYmFsLAorICAgICAgICAgICAgICAgICAgICAgICB1SW50IHNpemVfZXh0cmFmaWVsZF9nbG9iYWwsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgIGludCBtZXRob2QsCisgICAgICAgICAgICAgICAgICAgICAgIGludCBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IHppcDY0KSk7CisKKy8qCisgIE9wZW4gYSBmaWxlIGluIHRoZSBaSVAgZm9yIHdyaXRpbmcuCisgIGZpbGVuYW1lIDogdGhlIGZpbGVuYW1lIGluIHppcCAoaWYgTlVMTCwgJy0nIHdpdGhvdXQgcXVvdGUgd2lsbCBiZSB1c2VkCisgICp6aXBmaSBjb250YWluIHN1cHBsZW1lbnRhbCBpbmZvcm1hdGlvbgorICBpZiBleHRyYWZpZWxkX2xvY2FsIT1OVUxMIGFuZCBzaXplX2V4dHJhZmllbGRfbG9jYWw+MCwgZXh0cmFmaWVsZF9sb2NhbAorICAgIGNvbnRhaW5zIHRoZSBleHRyYWZpZWxkIGRhdGEgdGhlIHRoZSBsb2NhbCBoZWFkZXIKKyAgaWYgZXh0cmFmaWVsZF9nbG9iYWwhPU5VTEwgYW5kIHNpemVfZXh0cmFmaWVsZF9nbG9iYWw+MCwgZXh0cmFmaWVsZF9nbG9iYWwKKyAgICBjb250YWlucyB0aGUgZXh0cmFmaWVsZCBkYXRhIHRoZSB0aGUgbG9jYWwgaGVhZGVyCisgIGlmIGNvbW1lbnQgIT0gTlVMTCwgY29tbWVudCBjb250YWluIHRoZSBjb21tZW50IHN0cmluZworICBtZXRob2QgY29udGFpbiB0aGUgY29tcHJlc3Npb24gbWV0aG9kICgwIGZvciBzdG9yZSwgWl9ERUZMQVRFRCBmb3IgZGVmbGF0ZSkKKyAgbGV2ZWwgY29udGFpbiB0aGUgbGV2ZWwgb2YgY29tcHJlc3Npb24gKGNhbiBiZSBaX0RFRkFVTFRfQ09NUFJFU1NJT04pCisgIHppcDY0IGlzIHNldCB0byAxIGlmIGEgemlwNjQgZXh0ZW5kZWQgaW5mb3JtYXRpb24gYmxvY2sgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSBsb2NhbCBmaWxlIGhlYWRlci4KKyAgICAgICAgICAgICAgICAgICAgdGhpcyBNVVNUIGJlICcxJyBpZiB0aGUgdW5jb21wcmVzc2VkIHNpemUgaXMgPj0gMHhmZmZmZmZmZi4KKworKi8KKworCitleHRlcm4gaW50IFpFWFBPUlQgemlwT3Blbk5ld0ZpbGVJblppcDIgT0YoKHppcEZpbGUgZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHppcF9maWxlaW5mbyogemlwZmksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqIGV4dHJhZmllbGRfbG9jYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVJbnQgc2l6ZV9leHRyYWZpZWxkX2xvY2FsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiBleHRyYWZpZWxkX2dsb2JhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdUludCBzaXplX2V4dHJhZmllbGRfZ2xvYmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjb21tZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWV0aG9kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByYXcpKTsKKworCitleHRlcm4gaW50IFpFWFBPUlQgemlwT3Blbk5ld0ZpbGVJblppcDJfNjQgT0YoKHppcEZpbGUgZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHppcF9maWxlaW5mbyogemlwZmksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqIGV4dHJhZmllbGRfbG9jYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVJbnQgc2l6ZV9leHRyYWZpZWxkX2xvY2FsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiBleHRyYWZpZWxkX2dsb2JhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdUludCBzaXplX2V4dHJhZmllbGRfZ2xvYmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjb21tZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWV0aG9kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByYXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB6aXA2NCkpOworLyoKKyAgU2FtZSB0aGFuIHppcE9wZW5OZXdGaWxlSW5aaXAsIGV4Y2VwdCBpZiByYXc9MSwgd2Ugd3JpdGUgcmF3IGZpbGUKKyAqLworCitleHRlcm4gaW50IFpFWFBPUlQgemlwT3Blbk5ld0ZpbGVJblppcDMgT0YoKHppcEZpbGUgZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHppcF9maWxlaW5mbyogemlwZmksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqIGV4dHJhZmllbGRfbG9jYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVJbnQgc2l6ZV9leHRyYWZpZWxkX2xvY2FsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiBleHRyYWZpZWxkX2dsb2JhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdUludCBzaXplX2V4dHJhZmllbGRfZ2xvYmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjb21tZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWV0aG9kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByYXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aW5kb3dCaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWVtTGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdHJhdGVneSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcGFzc3dvcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVMb25nIGNyY0ZvckNyeXB0aW5nKSk7CisKK2V4dGVybiBpbnQgWkVYUE9SVCB6aXBPcGVuTmV3RmlsZUluWmlwM182NCBPRigoemlwRmlsZSBmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgemlwX2ZpbGVpbmZvKiB6aXBmaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogZXh0cmFmaWVsZF9sb2NhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdUludCBzaXplX2V4dHJhZmllbGRfbG9jYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqIGV4dHJhZmllbGRfZ2xvYmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1SW50IHNpemVfZXh0cmFmaWVsZF9nbG9iYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtZXRob2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJhdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdpbmRvd0JpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtZW1MZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0cmF0ZWd5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBwYXNzd29yZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdUxvbmcgY3JjRm9yQ3J5cHRpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB6aXA2NAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKworLyoKKyAgU2FtZSB0aGFuIHppcE9wZW5OZXdGaWxlSW5aaXAyLCBleGNlcHQKKyAgICB3aW5kb3dCaXRzLG1lbUxldmVsLCxzdHJhdGVneSA6IHNlZSBwYXJhbWV0ZXIgc3RyYXRlZ3kgaW4gZGVmbGF0ZUluaXQyCisgICAgcGFzc3dvcmQgOiBjcnlwdGluZyBwYXNzd29yZCAoTlVMTCBmb3Igbm8gY3J5cHRpbmcpCisgICAgY3JjRm9yQ3J5cHRpbmcgOiBjcmMgb2YgZmlsZSB0byBjb21wcmVzcyAobmVlZGVkIGZvciBjcnlwdGluZykKKyAqLworCitleHRlcm4gaW50IFpFWFBPUlQgemlwT3Blbk5ld0ZpbGVJblppcDQgT0YoKHppcEZpbGUgZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHppcF9maWxlaW5mbyogemlwZmksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqIGV4dHJhZmllbGRfbG9jYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVJbnQgc2l6ZV9leHRyYWZpZWxkX2xvY2FsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiBleHRyYWZpZWxkX2dsb2JhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdUludCBzaXplX2V4dHJhZmllbGRfZ2xvYmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjb21tZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWV0aG9kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByYXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aW5kb3dCaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWVtTGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdHJhdGVneSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcGFzc3dvcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVMb25nIGNyY0ZvckNyeXB0aW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1TG9uZyB2ZXJzaW9uTWFkZUJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1TG9uZyBmbGFnQmFzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKworCitleHRlcm4gaW50IFpFWFBPUlQgemlwT3Blbk5ld0ZpbGVJblppcDRfNjQgT0YoKHppcEZpbGUgZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHppcF9maWxlaW5mbyogemlwZmksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqIGV4dHJhZmllbGRfbG9jYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVJbnQgc2l6ZV9leHRyYWZpZWxkX2xvY2FsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiBleHRyYWZpZWxkX2dsb2JhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdUludCBzaXplX2V4dHJhZmllbGRfZ2xvYmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjb21tZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWV0aG9kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByYXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aW5kb3dCaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWVtTGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdHJhdGVneSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcGFzc3dvcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVMb25nIGNyY0ZvckNyeXB0aW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1TG9uZyB2ZXJzaW9uTWFkZUJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1TG9uZyBmbGFnQmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHppcDY0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpOworLyoKKyAgU2FtZSB0aGFuIHppcE9wZW5OZXdGaWxlSW5aaXA0LCBleGNlcHQKKyAgICB2ZXJzaW9uTWFkZUJ5IDogdmFsdWUgZm9yIFZlcnNpb24gbWFkZSBieSBmaWVsZAorICAgIGZsYWcgOiB2YWx1ZSBmb3IgZmxhZyBmaWVsZCAoY29tcHJlc3Npb24gbGV2ZWwgaW5mbyB3aWxsIGJlIGFkZGVkKQorICovCisKKworZXh0ZXJuIGludCBaRVhQT1JUIHppcFdyaXRlSW5GaWxlSW5aaXAgT0YoKHppcEZpbGUgZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogYnVmLAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsZW4pKTsKKy8qCisgIFdyaXRlIGRhdGEgaW4gdGhlIHppcGZpbGUKKyovCisKK2V4dGVybiBpbnQgWkVYUE9SVCB6aXBDbG9zZUZpbGVJblppcCBPRigoemlwRmlsZSBmaWxlKSk7CisvKgorICBDbG9zZSB0aGUgY3VycmVudCBmaWxlIGluIHRoZSB6aXBmaWxlCisqLworCitleHRlcm4gaW50IFpFWFBPUlQgemlwQ2xvc2VGaWxlSW5aaXBSYXcgT0YoKHppcEZpbGUgZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdUxvbmcgdW5jb21wcmVzc2VkX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVMb25nIGNyYzMyKSk7CisKK2V4dGVybiBpbnQgWkVYUE9SVCB6aXBDbG9zZUZpbGVJblppcFJhdzY0IE9GKCh6aXBGaWxlIGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpQT1M2NF9UIHVuY29tcHJlc3NlZF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1TG9uZyBjcmMzMikpOworCisvKgorICBDbG9zZSB0aGUgY3VycmVudCBmaWxlIGluIHRoZSB6aXBmaWxlLCBmb3IgZmlsZSBvcGVuZWQgd2l0aAorICAgIHBhcmFtZXRlciByYXc9MSBpbiB6aXBPcGVuTmV3RmlsZUluWmlwMgorICB1bmNvbXByZXNzZWRfc2l6ZSBhbmQgY3JjMzIgYXJlIHZhbHVlIGZvciB0aGUgdW5jb21wcmVzc2VkIHNpemUKKyovCisKK2V4dGVybiBpbnQgWkVYUE9SVCB6aXBDbG9zZSBPRigoemlwRmlsZSBmaWxlLAorICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGdsb2JhbF9jb21tZW50KSk7CisvKgorICBDbG9zZSB0aGUgemlwZmlsZQorKi8KKworCitleHRlcm4gaW50IFpFWFBPUlQgemlwUmVtb3ZlRXh0cmFJbmZvQmxvY2sgT0YoKGNoYXIqIHBEYXRhLCBpbnQqIGRhdGFMZW4sIHNob3J0IHNIZWFkZXIpKTsKKy8qCisgIHppcFJlbW92ZUV4dHJhSW5mb0Jsb2NrIC0gIEFkZGVkIGJ5IE1hdGhpYXMgU3ZlbnNzb24KKworICBSZW1vdmUgZXh0cmEgaW5mb3JtYXRpb24gYmxvY2sgZnJvbSBhIGV4dHJhIGluZm9ybWF0aW9uIGRhdGEgZm9yIHRoZSBsb2NhbCBmaWxlIGhlYWRlciBvciBjZW50cmFsIGRpcmVjdG9yeSBoZWFkZXIKKworICBJdCBpcyBuZWVkZWQgdG8gcmVtb3ZlIFpJUDY0IGV4dHJhIGluZm9ybWF0aW9uIGJsb2NrcyB3aGVuIGJlZm9yZSBkYXRhIGlzIHdyaXR0ZW4gaWYgdXNpbmcgUkFXIG1vZGUuCisKKyAgMHgwMDAxIGlzIHRoZSBzaWduYXR1cmUgaGVhZGVyIGZvciB0aGUgWklQNjQgZXh0cmEgaW5mb3JtYXRpb24gYmxvY2tzCisKKyAgdXNhZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICBSZW1vdmUgWklQNjQgRXh0cmEgaW5mb3JtYXRpb24gZnJvbSBhIGNlbnRyYWwgZGlyZWN0b3IgZXh0cmEgZmllbGQgZGF0YQorICAgICAgICAgICAgICB6aXBSZW1vdmVFeHRyYUluZm9CbG9jayhwQ2VuRGlyRXh0cmFGaWVsZERhdGEsICZuQ2VuRGlyRXh0cmFGaWVsZERhdGFMZW4sIDB4MDAwMSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlbW92ZSBaSVA2NCBFeHRyYSBpbmZvcm1hdGlvbiBmcm9tIGEgTG9jYWwgRmlsZSBIZWFkZXIgZXh0cmEgZmllbGQgZGF0YQorICAgICAgICB6aXBSZW1vdmVFeHRyYUluZm9CbG9jayhwTG9jYWxIZWFkZXJFeHRyYUZpZWxkRGF0YSwgJm5Mb2NhbEhlYWRlckV4dHJhRmllbGREYXRhTGVuLCAweDAwMDEpOworKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF96aXA2NF9IICovCmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi9wYXNjYWwvZXhhbXBsZS5wYXMgYi9zcmMvY29udHJpYi9wYXNjYWwvZXhhbXBsZS5wYXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTUxOGIzNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb250cmliL3Bhc2NhbC9leGFtcGxlLnBhcwpAQCAtMCwwICsxLDU5OSBAQAorKCogZXhhbXBsZS5jIC0tIHVzYWdlIGV4YW1wbGUgb2YgdGhlIHpsaWIgY29tcHJlc3Npb24gbGlicmFyeQorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDMgSmVhbi1sb3VwIEdhaWxseS4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKKyAqCisgKiBQYXNjYWwgdHJhbnNsYXRpb24KKyAqIENvcHlyaWdodCAoQykgMTk5OCBieSBKYWNxdWVzIE5vbXNzaSBOemFsaS4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiByZWFkbWUudHh0CisgKgorICogQWRhcHRhdGlvbiB0byB0aGUgemxpYnBhcyBpbnRlcmZhY2UKKyAqIENvcHlyaWdodCAoQykgMjAwMyBieSBDb3NtaW4gVHJ1dGEuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gcmVhZG1lLnR4dAorICopCisKK3Byb2dyYW0gZXhhbXBsZTsKKworeyRERUZJTkUgVEVTVF9DT01QUkVTU30KK3tETyBOT1QgJERFRklORSBURVNUX0daSU99Cit7JERFRklORSBURVNUX0RFRkxBVEV9Cit7JERFRklORSBURVNUX0lORkxBVEV9Cit7JERFRklORSBURVNUX0ZMVVNIfQoreyRERUZJTkUgVEVTVF9TWU5DfQoreyRERUZJTkUgVEVTVF9ESUNUfQorCit1c2VzIFN5c1V0aWxzLCB6bGlicGFzOworCitjb25zdCBURVNURklMRSA9ICdmb28uZ3onOworCisoKiAiaGVsbG8gd29ybGQiIHdvdWxkIGJlIG1vcmUgc3RhbmRhcmQsIGJ1dCB0aGUgcmVwZWF0ZWQgImhlbGxvIgorICogc3RyZXNzZXMgdGhlIGNvbXByZXNzaW9uIGNvZGUgYmV0dGVyLCBzb3JyeS4uLgorICopCitjb25zdCBoZWxsbzogUENoYXIgPSAnaGVsbG8sIGhlbGxvISc7CisKK2NvbnN0IGRpY3Rpb25hcnk6IFBDaGFyID0gJ2hlbGxvJzsKKwordmFyIGRpY3RJZDogTG9uZ0ludDsgKCogQWRsZXIzMiB2YWx1ZSBvZiB0aGUgZGljdGlvbmFyeSAqKQorCitwcm9jZWR1cmUgQ0hFQ0tfRVJSKGVycjogSW50ZWdlcjsgbXNnOiBTdHJpbmcpOworYmVnaW4KKyAgaWYgZXJyIDw+IFpfT0sgdGhlbgorICBiZWdpbgorICAgIFdyaXRlTG4obXNnLCAnIGVycm9yOiAnLCBlcnIpOworICAgIEhhbHQoMSk7CisgIGVuZDsKK2VuZDsKKworcHJvY2VkdXJlIEVYSVRfRVJSKGNvbnN0IG1zZzogU3RyaW5nKTsKK2JlZ2luCisgIFdyaXRlTG4oJ0Vycm9yOiAnLCBtc2cpOworICBIYWx0KDEpOworZW5kOworCisoKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIFRlc3QgY29tcHJlc3MgYW5kIHVuY29tcHJlc3MKKyAqKQoreyRJRkRFRiBURVNUX0NPTVBSRVNTfQorcHJvY2VkdXJlIHRlc3RfY29tcHJlc3MoY29tcHI6IFBvaW50ZXI7IGNvbXByTGVuOiBMb25nSW50OworICAgICAgICAgICAgICAgICAgICAgICAgdW5jb21wcjogUG9pbnRlcjsgdW5jb21wckxlbjogTG9uZ0ludCk7Cit2YXIgZXJyOiBJbnRlZ2VyOworICAgIGxlbjogTG9uZ0ludDsKK2JlZ2luCisgIGxlbiA6PSBTdHJMZW4oaGVsbG8pKzE7CisKKyAgZXJyIDo9IGNvbXByZXNzKGNvbXByLCBjb21wckxlbiwgaGVsbG8sIGxlbik7CisgIENIRUNLX0VSUihlcnIsICdjb21wcmVzcycpOworCisgIFN0ckNvcHkoUENoYXIodW5jb21wciksICdnYXJiYWdlJyk7CisKKyAgZXJyIDo9IHVuY29tcHJlc3ModW5jb21wciwgdW5jb21wckxlbiwgY29tcHIsIGNvbXByTGVuKTsKKyAgQ0hFQ0tfRVJSKGVyciwgJ3VuY29tcHJlc3MnKTsKKworICBpZiBTdHJDb21wKFBDaGFyKHVuY29tcHIpLCBoZWxsbykgPD4gMCB0aGVuCisgICAgRVhJVF9FUlIoJ2JhZCB1bmNvbXByZXNzJykKKyAgZWxzZQorICAgIFdyaXRlTG4oJ3VuY29tcHJlc3MoKTogJywgUENoYXIodW5jb21wcikpOworZW5kOworeyRFTkRJRn0KKworKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBUZXN0IHJlYWQvd3JpdGUgb2YgLmd6IGZpbGVzCisgKikKK3skSUZERUYgVEVTVF9HWklPfQorcHJvY2VkdXJlIHRlc3RfZ3ppbyhjb25zdCBmbmFtZTogUENoYXI7ICgqIGNvbXByZXNzZWQgZmlsZSBuYW1lICopCisgICAgICAgICAgICAgICAgICAgIHVuY29tcHI6IFBvaW50ZXI7CisgICAgICAgICAgICAgICAgICAgIHVuY29tcHJMZW46IExvbmdJbnQpOwordmFyIGVycjogSW50ZWdlcjsKKyAgICBsZW46IEludGVnZXI7CisgICAgemZpbGU6IGd6RmlsZTsKKyAgICBwb3M6IExvbmdJbnQ7CitiZWdpbgorICBsZW4gOj0gU3RyTGVuKGhlbGxvKSsxOworCisgIHpmaWxlIDo9IGd6b3BlbihmbmFtZSwgJ3diJyk7CisgIGlmIHpmaWxlID0gTklMIHRoZW4KKyAgYmVnaW4KKyAgICBXcml0ZUxuKCdnem9wZW4gZXJyb3InKTsKKyAgICBIYWx0KDEpOworICBlbmQ7CisgIGd6cHV0Yyh6ZmlsZSwgJ2gnKTsKKyAgaWYgZ3pwdXRzKHpmaWxlLCAnZWxsbycpIDw+IDQgdGhlbgorICBiZWdpbgorICAgIFdyaXRlTG4oJ2d6cHV0cyBlcnI6ICcsIGd6ZXJyb3IoemZpbGUsIGVycikpOworICAgIEhhbHQoMSk7CisgIGVuZDsKKyAgeyRJRkRFRiBHWl9GT1JNQVRfU1RSSU5HfQorICBpZiBnenByaW50Zih6ZmlsZSwgJywgJXMhJywgJ2hlbGxvJykgPD4gOCB0aGVuCisgIGJlZ2luCisgICAgV3JpdGVMbignZ3pwcmludGYgZXJyOiAnLCBnemVycm9yKHpmaWxlLCBlcnIpKTsKKyAgICBIYWx0KDEpOworICBlbmQ7CisgIHskRUxTRX0KKyAgaWYgZ3pwdXRzKHpmaWxlLCAnLCBoZWxsbyEnKSA8PiA4IHRoZW4KKyAgYmVnaW4KKyAgICBXcml0ZUxuKCdnenB1dHMgZXJyOiAnLCBnemVycm9yKHpmaWxlLCBlcnIpKTsKKyAgICBIYWx0KDEpOworICBlbmQ7CisgIHskRU5ESUZ9CisgIGd6c2Vlayh6ZmlsZSwgMSwgU0VFS19DVVIpOyAoKiBhZGQgb25lIHplcm8gYnl0ZSAqKQorICBnemNsb3NlKHpmaWxlKTsKKworICB6ZmlsZSA6PSBnem9wZW4oZm5hbWUsICdyYicpOworICBpZiB6ZmlsZSA9IE5JTCB0aGVuCisgIGJlZ2luCisgICAgV3JpdGVMbignZ3pvcGVuIGVycm9yJyk7CisgICAgSGFsdCgxKTsKKyAgZW5kOworCisgIFN0ckNvcHkoUENoYXIodW5jb21wciksICdnYXJiYWdlJyk7CisKKyAgaWYgZ3pyZWFkKHpmaWxlLCB1bmNvbXByLCB1bmNvbXByTGVuKSA8PiBsZW4gdGhlbgorICBiZWdpbgorICAgIFdyaXRlTG4oJ2d6cmVhZCBlcnI6ICcsIGd6ZXJyb3IoemZpbGUsIGVycikpOworICAgIEhhbHQoMSk7CisgIGVuZDsKKyAgaWYgU3RyQ29tcChQQ2hhcih1bmNvbXByKSwgaGVsbG8pIDw+IDAgdGhlbgorICBiZWdpbgorICAgIFdyaXRlTG4oJ2JhZCBnenJlYWQ6ICcsIFBDaGFyKHVuY29tcHIpKTsKKyAgICBIYWx0KDEpOworICBlbmQKKyAgZWxzZQorICAgIFdyaXRlTG4oJ2d6cmVhZCgpOiAnLCBQQ2hhcih1bmNvbXByKSk7CisKKyAgcG9zIDo9IGd6c2Vlayh6ZmlsZSwgLTgsIFNFRUtfQ1VSKTsKKyAgaWYgKHBvcyA8PiA2KSBvciAoZ3p0ZWxsKHpmaWxlKSA8PiBwb3MpIHRoZW4KKyAgYmVnaW4KKyAgICBXcml0ZUxuKCdnenNlZWsgZXJyb3IsIHBvcz0nLCBwb3MsICcsIGd6dGVsbD0nLCBnenRlbGwoemZpbGUpKTsKKyAgICBIYWx0KDEpOworICBlbmQ7CisKKyAgaWYgZ3pnZXRjKHpmaWxlKSA8PiAnICcgdGhlbgorICBiZWdpbgorICAgIFdyaXRlTG4oJ2d6Z2V0YyBlcnJvcicpOworICAgIEhhbHQoMSk7CisgIGVuZDsKKworICBpZiBnenVuZ2V0YygnICcsIHpmaWxlKSA8PiAnICcgdGhlbgorICBiZWdpbgorICAgIFdyaXRlTG4oJ2d6dW5nZXRjIGVycm9yJyk7CisgICAgSGFsdCgxKTsKKyAgZW5kOworCisgIGd6Z2V0cyh6ZmlsZSwgUENoYXIodW5jb21wciksIHVuY29tcHJMZW4pOworICB1bmNvbXByTGVuIDo9IFN0ckxlbihQQ2hhcih1bmNvbXByKSk7CisgIGlmIHVuY29tcHJMZW4gPD4gNyB0aGVuICgqICIgaGVsbG8hIiAqKQorICBiZWdpbgorICAgIFdyaXRlTG4oJ2d6Z2V0cyBlcnIgYWZ0ZXIgZ3pzZWVrOiAnLCBnemVycm9yKHpmaWxlLCBlcnIpKTsKKyAgICBIYWx0KDEpOworICBlbmQ7CisgIGlmIFN0ckNvbXAoUENoYXIodW5jb21wciksIGhlbGxvICsgNikgPD4gMCB0aGVuCisgIGJlZ2luCisgICAgV3JpdGVMbignYmFkIGd6Z2V0cyBhZnRlciBnenNlZWsnKTsKKyAgICBIYWx0KDEpOworICBlbmQKKyAgZWxzZQorICAgIFdyaXRlTG4oJ2d6Z2V0cygpIGFmdGVyIGd6c2VlazogJywgUENoYXIodW5jb21wcikpOworCisgIGd6Y2xvc2UoemZpbGUpOworZW5kOworeyRFTkRJRn0KKworKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBUZXN0IGRlZmxhdGUgd2l0aCBzbWFsbCBidWZmZXJzCisgKikKK3skSUZERUYgVEVTVF9ERUZMQVRFfQorcHJvY2VkdXJlIHRlc3RfZGVmbGF0ZShjb21wcjogUG9pbnRlcjsgY29tcHJMZW46IExvbmdJbnQpOwordmFyIGNfc3RyZWFtOiB6X3N0cmVhbTsgKCogY29tcHJlc3Npb24gc3RyZWFtICopCisgICAgZXJyOiBJbnRlZ2VyOworICAgIGxlbjogTG9uZ0ludDsKK2JlZ2luCisgIGxlbiA6PSBTdHJMZW4oaGVsbG8pKzE7CisKKyAgY19zdHJlYW0uemFsbG9jIDo9IE5JTDsKKyAgY19zdHJlYW0uemZyZWUgOj0gTklMOworICBjX3N0cmVhbS5vcGFxdWUgOj0gTklMOworCisgIGVyciA6PSBkZWZsYXRlSW5pdChjX3N0cmVhbSwgWl9ERUZBVUxUX0NPTVBSRVNTSU9OKTsKKyAgQ0hFQ0tfRVJSKGVyciwgJ2RlZmxhdGVJbml0Jyk7CisKKyAgY19zdHJlYW0ubmV4dF9pbiA6PSBoZWxsbzsKKyAgY19zdHJlYW0ubmV4dF9vdXQgOj0gY29tcHI7CisKKyAgd2hpbGUgKGNfc3RyZWFtLnRvdGFsX2luIDw+IGxlbikgYW5kCisgICAgICAgIChjX3N0cmVhbS50b3RhbF9vdXQgPCBjb21wckxlbikgZG8KKyAgYmVnaW4KKyAgICBjX3N0cmVhbS5hdmFpbF9vdXQgOj0gMTsgeyBmb3JjZSBzbWFsbCBidWZmZXJzIH0KKyAgICBjX3N0cmVhbS5hdmFpbF9pbiA6PSAxOworICAgIGVyciA6PSBkZWZsYXRlKGNfc3RyZWFtLCBaX05PX0ZMVVNIKTsKKyAgICBDSEVDS19FUlIoZXJyLCAnZGVmbGF0ZScpOworICBlbmQ7CisKKyAgKCogRmluaXNoIHRoZSBzdHJlYW0sIHN0aWxsIGZvcmNpbmcgc21hbGwgYnVmZmVyczogKikKKyAgd2hpbGUgVFJVRSBkbworICBiZWdpbgorICAgIGNfc3RyZWFtLmF2YWlsX291dCA6PSAxOworICAgIGVyciA6PSBkZWZsYXRlKGNfc3RyZWFtLCBaX0ZJTklTSCk7CisgICAgaWYgZXJyID0gWl9TVFJFQU1fRU5EIHRoZW4KKyAgICAgIGJyZWFrOworICAgIENIRUNLX0VSUihlcnIsICdkZWZsYXRlJyk7CisgIGVuZDsKKworICBlcnIgOj0gZGVmbGF0ZUVuZChjX3N0cmVhbSk7CisgIENIRUNLX0VSUihlcnIsICdkZWZsYXRlRW5kJyk7CitlbmQ7Cit7JEVORElGfQorCisoKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIFRlc3QgaW5mbGF0ZSB3aXRoIHNtYWxsIGJ1ZmZlcnMKKyAqKQoreyRJRkRFRiBURVNUX0lORkxBVEV9Citwcm9jZWR1cmUgdGVzdF9pbmZsYXRlKGNvbXByOiBQb2ludGVyOyBjb21wckxlbiA6IExvbmdJbnQ7CisgICAgICAgICAgICAgICAgICAgICAgIHVuY29tcHI6IFBvaW50ZXI7IHVuY29tcHJMZW4gOiBMb25nSW50KTsKK3ZhciBlcnI6IEludGVnZXI7CisgICAgZF9zdHJlYW06IHpfc3RyZWFtOyAoKiBkZWNvbXByZXNzaW9uIHN0cmVhbSAqKQorYmVnaW4KKyAgU3RyQ29weShQQ2hhcih1bmNvbXByKSwgJ2dhcmJhZ2UnKTsKKworICBkX3N0cmVhbS56YWxsb2MgOj0gTklMOworICBkX3N0cmVhbS56ZnJlZSA6PSBOSUw7CisgIGRfc3RyZWFtLm9wYXF1ZSA6PSBOSUw7CisKKyAgZF9zdHJlYW0ubmV4dF9pbiA6PSBjb21wcjsKKyAgZF9zdHJlYW0uYXZhaWxfaW4gOj0gMDsKKyAgZF9zdHJlYW0ubmV4dF9vdXQgOj0gdW5jb21wcjsKKworICBlcnIgOj0gaW5mbGF0ZUluaXQoZF9zdHJlYW0pOworICBDSEVDS19FUlIoZXJyLCAnaW5mbGF0ZUluaXQnKTsKKworICB3aGlsZSAoZF9zdHJlYW0udG90YWxfb3V0IDwgdW5jb21wckxlbikgYW5kCisgICAgICAgIChkX3N0cmVhbS50b3RhbF9pbiA8IGNvbXByTGVuKSBkbworICBiZWdpbgorICAgIGRfc3RyZWFtLmF2YWlsX291dCA6PSAxOyAoKiBmb3JjZSBzbWFsbCBidWZmZXJzICopCisgICAgZF9zdHJlYW0uYXZhaWxfaW4gOj0gMTsKKyAgICBlcnIgOj0gaW5mbGF0ZShkX3N0cmVhbSwgWl9OT19GTFVTSCk7CisgICAgaWYgZXJyID0gWl9TVFJFQU1fRU5EIHRoZW4KKyAgICAgIGJyZWFrOworICAgIENIRUNLX0VSUihlcnIsICdpbmZsYXRlJyk7CisgIGVuZDsKKworICBlcnIgOj0gaW5mbGF0ZUVuZChkX3N0cmVhbSk7CisgIENIRUNLX0VSUihlcnIsICdpbmZsYXRlRW5kJyk7CisKKyAgaWYgU3RyQ29tcChQQ2hhcih1bmNvbXByKSwgaGVsbG8pIDw+IDAgdGhlbgorICAgIEVYSVRfRVJSKCdiYWQgaW5mbGF0ZScpCisgIGVsc2UKKyAgICBXcml0ZUxuKCdpbmZsYXRlKCk6ICcsIFBDaGFyKHVuY29tcHIpKTsKK2VuZDsKK3skRU5ESUZ9CisKKygqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogVGVzdCBkZWZsYXRlIHdpdGggbGFyZ2UgYnVmZmVycyBhbmQgZHluYW1pYyBjaGFuZ2Ugb2YgY29tcHJlc3Npb24gbGV2ZWwKKyAqKQoreyRJRkRFRiBURVNUX0RFRkxBVEV9Citwcm9jZWR1cmUgdGVzdF9sYXJnZV9kZWZsYXRlKGNvbXByOiBQb2ludGVyOyBjb21wckxlbjogTG9uZ0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5jb21wcjogUG9pbnRlcjsgdW5jb21wckxlbjogTG9uZ0ludCk7Cit2YXIgY19zdHJlYW06IHpfc3RyZWFtOyAoKiBjb21wcmVzc2lvbiBzdHJlYW0gKikKKyAgICBlcnI6IEludGVnZXI7CitiZWdpbgorICBjX3N0cmVhbS56YWxsb2MgOj0gTklMOworICBjX3N0cmVhbS56ZnJlZSA6PSBOSUw7CisgIGNfc3RyZWFtLm9wYXF1ZSA6PSBOSUw7CisKKyAgZXJyIDo9IGRlZmxhdGVJbml0KGNfc3RyZWFtLCBaX0JFU1RfU1BFRUQpOworICBDSEVDS19FUlIoZXJyLCAnZGVmbGF0ZUluaXQnKTsKKworICBjX3N0cmVhbS5uZXh0X291dCA6PSBjb21wcjsKKyAgY19zdHJlYW0uYXZhaWxfb3V0IDo9IEludGVnZXIoY29tcHJMZW4pOworCisgICgqIEF0IHRoaXMgcG9pbnQsIHVuY29tcHIgaXMgc3RpbGwgbW9zdGx5IHplcm9lcywgc28gaXQgc2hvdWxkIGNvbXByZXNzCisgICAqIHZlcnkgd2VsbDoKKyAgICopCisgIGNfc3RyZWFtLm5leHRfaW4gOj0gdW5jb21wcjsKKyAgY19zdHJlYW0uYXZhaWxfaW4gOj0gSW50ZWdlcih1bmNvbXByTGVuKTsKKyAgZXJyIDo9IGRlZmxhdGUoY19zdHJlYW0sIFpfTk9fRkxVU0gpOworICBDSEVDS19FUlIoZXJyLCAnZGVmbGF0ZScpOworICBpZiBjX3N0cmVhbS5hdmFpbF9pbiA8PiAwIHRoZW4KKyAgICBFWElUX0VSUignZGVmbGF0ZSBub3QgZ3JlZWR5Jyk7CisKKyAgKCogRmVlZCBpbiBhbHJlYWR5IGNvbXByZXNzZWQgZGF0YSBhbmQgc3dpdGNoIHRvIG5vIGNvbXByZXNzaW9uOiAqKQorICBkZWZsYXRlUGFyYW1zKGNfc3RyZWFtLCBaX05PX0NPTVBSRVNTSU9OLCBaX0RFRkFVTFRfU1RSQVRFR1kpOworICBjX3N0cmVhbS5uZXh0X2luIDo9IGNvbXByOworICBjX3N0cmVhbS5hdmFpbF9pbiA6PSBJbnRlZ2VyKGNvbXByTGVuIGRpdiAyKTsKKyAgZXJyIDo9IGRlZmxhdGUoY19zdHJlYW0sIFpfTk9fRkxVU0gpOworICBDSEVDS19FUlIoZXJyLCAnZGVmbGF0ZScpOworCisgICgqIFN3aXRjaCBiYWNrIHRvIGNvbXByZXNzaW5nIG1vZGU6ICopCisgIGRlZmxhdGVQYXJhbXMoY19zdHJlYW0sIFpfQkVTVF9DT01QUkVTU0lPTiwgWl9GSUxURVJFRCk7CisgIGNfc3RyZWFtLm5leHRfaW4gOj0gdW5jb21wcjsKKyAgY19zdHJlYW0uYXZhaWxfaW4gOj0gSW50ZWdlcih1bmNvbXByTGVuKTsKKyAgZXJyIDo9IGRlZmxhdGUoY19zdHJlYW0sIFpfTk9fRkxVU0gpOworICBDSEVDS19FUlIoZXJyLCAnZGVmbGF0ZScpOworCisgIGVyciA6PSBkZWZsYXRlKGNfc3RyZWFtLCBaX0ZJTklTSCk7CisgIGlmIGVyciA8PiBaX1NUUkVBTV9FTkQgdGhlbgorICAgIEVYSVRfRVJSKCdkZWZsYXRlIHNob3VsZCByZXBvcnQgWl9TVFJFQU1fRU5EJyk7CisKKyAgZXJyIDo9IGRlZmxhdGVFbmQoY19zdHJlYW0pOworICBDSEVDS19FUlIoZXJyLCAnZGVmbGF0ZUVuZCcpOworZW5kOworeyRFTkRJRn0KKworKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBUZXN0IGluZmxhdGUgd2l0aCBsYXJnZSBidWZmZXJzCisgKikKK3skSUZERUYgVEVTVF9JTkZMQVRFfQorcHJvY2VkdXJlIHRlc3RfbGFyZ2VfaW5mbGF0ZShjb21wcjogUG9pbnRlcjsgY29tcHJMZW46IExvbmdJbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuY29tcHI6IFBvaW50ZXI7IHVuY29tcHJMZW46IExvbmdJbnQpOwordmFyIGVycjogSW50ZWdlcjsKKyAgICBkX3N0cmVhbTogel9zdHJlYW07ICgqIGRlY29tcHJlc3Npb24gc3RyZWFtICopCitiZWdpbgorICBTdHJDb3B5KFBDaGFyKHVuY29tcHIpLCAnZ2FyYmFnZScpOworCisgIGRfc3RyZWFtLnphbGxvYyA6PSBOSUw7CisgIGRfc3RyZWFtLnpmcmVlIDo9IE5JTDsKKyAgZF9zdHJlYW0ub3BhcXVlIDo9IE5JTDsKKworICBkX3N0cmVhbS5uZXh0X2luIDo9IGNvbXByOworICBkX3N0cmVhbS5hdmFpbF9pbiA6PSBJbnRlZ2VyKGNvbXByTGVuKTsKKworICBlcnIgOj0gaW5mbGF0ZUluaXQoZF9zdHJlYW0pOworICBDSEVDS19FUlIoZXJyLCAnaW5mbGF0ZUluaXQnKTsKKworICB3aGlsZSBUUlVFIGRvCisgIGJlZ2luCisgICAgZF9zdHJlYW0ubmV4dF9vdXQgOj0gdW5jb21wcjsgICAgICAgICAgICAoKiBkaXNjYXJkIHRoZSBvdXRwdXQgKikKKyAgICBkX3N0cmVhbS5hdmFpbF9vdXQgOj0gSW50ZWdlcih1bmNvbXByTGVuKTsKKyAgICBlcnIgOj0gaW5mbGF0ZShkX3N0cmVhbSwgWl9OT19GTFVTSCk7CisgICAgaWYgZXJyID0gWl9TVFJFQU1fRU5EIHRoZW4KKyAgICAgIGJyZWFrOworICAgIENIRUNLX0VSUihlcnIsICdsYXJnZSBpbmZsYXRlJyk7CisgIGVuZDsKKworICBlcnIgOj0gaW5mbGF0ZUVuZChkX3N0cmVhbSk7CisgIENIRUNLX0VSUihlcnIsICdpbmZsYXRlRW5kJyk7CisKKyAgaWYgZF9zdHJlYW0udG90YWxfb3V0IDw+IDIgKiB1bmNvbXByTGVuICsgY29tcHJMZW4gZGl2IDIgdGhlbgorICBiZWdpbgorICAgIFdyaXRlTG4oJ2JhZCBsYXJnZSBpbmZsYXRlOiAnLCBkX3N0cmVhbS50b3RhbF9vdXQpOworICAgIEhhbHQoMSk7CisgIGVuZAorICBlbHNlCisgICAgV3JpdGVMbignbGFyZ2VfaW5mbGF0ZSgpOiBPSycpOworZW5kOworeyRFTkRJRn0KKworKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBUZXN0IGRlZmxhdGUgd2l0aCBmdWxsIGZsdXNoCisgKikKK3skSUZERUYgVEVTVF9GTFVTSH0KK3Byb2NlZHVyZSB0ZXN0X2ZsdXNoKGNvbXByOiBQb2ludGVyOyB2YXIgY29tcHJMZW4gOiBMb25nSW50KTsKK3ZhciBjX3N0cmVhbTogel9zdHJlYW07ICgqIGNvbXByZXNzaW9uIHN0cmVhbSAqKQorICAgIGVycjogSW50ZWdlcjsKKyAgICBsZW46IEludGVnZXI7CitiZWdpbgorICBsZW4gOj0gU3RyTGVuKGhlbGxvKSsxOworCisgIGNfc3RyZWFtLnphbGxvYyA6PSBOSUw7CisgIGNfc3RyZWFtLnpmcmVlIDo9IE5JTDsKKyAgY19zdHJlYW0ub3BhcXVlIDo9IE5JTDsKKworICBlcnIgOj0gZGVmbGF0ZUluaXQoY19zdHJlYW0sIFpfREVGQVVMVF9DT01QUkVTU0lPTik7CisgIENIRUNLX0VSUihlcnIsICdkZWZsYXRlSW5pdCcpOworCisgIGNfc3RyZWFtLm5leHRfaW4gOj0gaGVsbG87CisgIGNfc3RyZWFtLm5leHRfb3V0IDo9IGNvbXByOworICBjX3N0cmVhbS5hdmFpbF9pbiA6PSAzOworICBjX3N0cmVhbS5hdmFpbF9vdXQgOj0gSW50ZWdlcihjb21wckxlbik7CisgIGVyciA6PSBkZWZsYXRlKGNfc3RyZWFtLCBaX0ZVTExfRkxVU0gpOworICBDSEVDS19FUlIoZXJyLCAnZGVmbGF0ZScpOworCisgIEluYyhQQnl0ZUFycmF5KGNvbXByKV5bM10pOyAoKiBmb3JjZSBhbiBlcnJvciBpbiBmaXJzdCBjb21wcmVzc2VkIGJsb2NrICopCisgIGNfc3RyZWFtLmF2YWlsX2luIDo9IGxlbiAtIDM7CisKKyAgZXJyIDo9IGRlZmxhdGUoY19zdHJlYW0sIFpfRklOSVNIKTsKKyAgaWYgZXJyIDw+IFpfU1RSRUFNX0VORCB0aGVuCisgICAgQ0hFQ0tfRVJSKGVyciwgJ2RlZmxhdGUnKTsKKworICBlcnIgOj0gZGVmbGF0ZUVuZChjX3N0cmVhbSk7CisgIENIRUNLX0VSUihlcnIsICdkZWZsYXRlRW5kJyk7CisKKyAgY29tcHJMZW4gOj0gY19zdHJlYW0udG90YWxfb3V0OworZW5kOworeyRFTkRJRn0KKworKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBUZXN0IGluZmxhdGVTeW5jKCkKKyAqKQoreyRJRkRFRiBURVNUX1NZTkN9Citwcm9jZWR1cmUgdGVzdF9zeW5jKGNvbXByOiBQb2ludGVyOyBjb21wckxlbjogTG9uZ0ludDsKKyAgICAgICAgICAgICAgICAgICAgdW5jb21wcjogUG9pbnRlcjsgdW5jb21wckxlbiA6IExvbmdJbnQpOwordmFyIGVycjogSW50ZWdlcjsKKyAgICBkX3N0cmVhbTogel9zdHJlYW07ICgqIGRlY29tcHJlc3Npb24gc3RyZWFtICopCitiZWdpbgorICBTdHJDb3B5KFBDaGFyKHVuY29tcHIpLCAnZ2FyYmFnZScpOworCisgIGRfc3RyZWFtLnphbGxvYyA6PSBOSUw7CisgIGRfc3RyZWFtLnpmcmVlIDo9IE5JTDsKKyAgZF9zdHJlYW0ub3BhcXVlIDo9IE5JTDsKKworICBkX3N0cmVhbS5uZXh0X2luIDo9IGNvbXByOworICBkX3N0cmVhbS5hdmFpbF9pbiA6PSAyOyAoKiBqdXN0IHJlYWQgdGhlIHpsaWIgaGVhZGVyICopCisKKyAgZXJyIDo9IGluZmxhdGVJbml0KGRfc3RyZWFtKTsKKyAgQ0hFQ0tfRVJSKGVyciwgJ2luZmxhdGVJbml0Jyk7CisKKyAgZF9zdHJlYW0ubmV4dF9vdXQgOj0gdW5jb21wcjsKKyAgZF9zdHJlYW0uYXZhaWxfb3V0IDo9IEludGVnZXIodW5jb21wckxlbik7CisKKyAgaW5mbGF0ZShkX3N0cmVhbSwgWl9OT19GTFVTSCk7CisgIENIRUNLX0VSUihlcnIsICdpbmZsYXRlJyk7CisKKyAgZF9zdHJlYW0uYXZhaWxfaW4gOj0gSW50ZWdlcihjb21wckxlbi0yKTsgICAoKiByZWFkIGFsbCBjb21wcmVzc2VkIGRhdGEgKikKKyAgZXJyIDo9IGluZmxhdGVTeW5jKGRfc3RyZWFtKTsgICAgICAgICAgICAgICAoKiBidXQgc2tpcCB0aGUgZGFtYWdlZCBwYXJ0ICopCisgIENIRUNLX0VSUihlcnIsICdpbmZsYXRlU3luYycpOworCisgIGVyciA6PSBpbmZsYXRlKGRfc3RyZWFtLCBaX0ZJTklTSCk7CisgIGlmIGVyciA8PiBaX0RBVEFfRVJST1IgdGhlbgorICAgIEVYSVRfRVJSKCdpbmZsYXRlIHNob3VsZCByZXBvcnQgREFUQV9FUlJPUicpOworICAgICgqIEJlY2F1c2Ugb2YgaW5jb3JyZWN0IGFkbGVyMzIgKikKKworICBlcnIgOj0gaW5mbGF0ZUVuZChkX3N0cmVhbSk7CisgIENIRUNLX0VSUihlcnIsICdpbmZsYXRlRW5kJyk7CisKKyAgV3JpdGVMbignYWZ0ZXIgaW5mbGF0ZVN5bmMoKTogaGVsJywgUENoYXIodW5jb21wcikpOworZW5kOworeyRFTkRJRn0KKworKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBUZXN0IGRlZmxhdGUgd2l0aCBwcmVzZXQgZGljdGlvbmFyeQorICopCit7JElGREVGIFRFU1RfRElDVH0KK3Byb2NlZHVyZSB0ZXN0X2RpY3RfZGVmbGF0ZShjb21wcjogUG9pbnRlcjsgY29tcHJMZW46IExvbmdJbnQpOwordmFyIGNfc3RyZWFtOiB6X3N0cmVhbTsgKCogY29tcHJlc3Npb24gc3RyZWFtICopCisgICAgZXJyOiBJbnRlZ2VyOworYmVnaW4KKyAgY19zdHJlYW0uemFsbG9jIDo9IE5JTDsKKyAgY19zdHJlYW0uemZyZWUgOj0gTklMOworICBjX3N0cmVhbS5vcGFxdWUgOj0gTklMOworCisgIGVyciA6PSBkZWZsYXRlSW5pdChjX3N0cmVhbSwgWl9CRVNUX0NPTVBSRVNTSU9OKTsKKyAgQ0hFQ0tfRVJSKGVyciwgJ2RlZmxhdGVJbml0Jyk7CisKKyAgZXJyIDo9IGRlZmxhdGVTZXREaWN0aW9uYXJ5KGNfc3RyZWFtLCBkaWN0aW9uYXJ5LCBTdHJMZW4oZGljdGlvbmFyeSkpOworICBDSEVDS19FUlIoZXJyLCAnZGVmbGF0ZVNldERpY3Rpb25hcnknKTsKKworICBkaWN0SWQgOj0gY19zdHJlYW0uYWRsZXI7CisgIGNfc3RyZWFtLm5leHRfb3V0IDo9IGNvbXByOworICBjX3N0cmVhbS5hdmFpbF9vdXQgOj0gSW50ZWdlcihjb21wckxlbik7CisKKyAgY19zdHJlYW0ubmV4dF9pbiA6PSBoZWxsbzsKKyAgY19zdHJlYW0uYXZhaWxfaW4gOj0gU3RyTGVuKGhlbGxvKSsxOworCisgIGVyciA6PSBkZWZsYXRlKGNfc3RyZWFtLCBaX0ZJTklTSCk7CisgIGlmIGVyciA8PiBaX1NUUkVBTV9FTkQgdGhlbgorICAgIEVYSVRfRVJSKCdkZWZsYXRlIHNob3VsZCByZXBvcnQgWl9TVFJFQU1fRU5EJyk7CisKKyAgZXJyIDo9IGRlZmxhdGVFbmQoY19zdHJlYW0pOworICBDSEVDS19FUlIoZXJyLCAnZGVmbGF0ZUVuZCcpOworZW5kOworeyRFTkRJRn0KKworKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBUZXN0IGluZmxhdGUgd2l0aCBhIHByZXNldCBkaWN0aW9uYXJ5CisgKikKK3skSUZERUYgVEVTVF9ESUNUfQorcHJvY2VkdXJlIHRlc3RfZGljdF9pbmZsYXRlKGNvbXByOiBQb2ludGVyOyBjb21wckxlbjogTG9uZ0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmNvbXByOiBQb2ludGVyOyB1bmNvbXByTGVuOiBMb25nSW50KTsKK3ZhciBlcnI6IEludGVnZXI7CisgICAgZF9zdHJlYW06IHpfc3RyZWFtOyAoKiBkZWNvbXByZXNzaW9uIHN0cmVhbSAqKQorYmVnaW4KKyAgU3RyQ29weShQQ2hhcih1bmNvbXByKSwgJ2dhcmJhZ2UnKTsKKworICBkX3N0cmVhbS56YWxsb2MgOj0gTklMOworICBkX3N0cmVhbS56ZnJlZSA6PSBOSUw7CisgIGRfc3RyZWFtLm9wYXF1ZSA6PSBOSUw7CisKKyAgZF9zdHJlYW0ubmV4dF9pbiA6PSBjb21wcjsKKyAgZF9zdHJlYW0uYXZhaWxfaW4gOj0gSW50ZWdlcihjb21wckxlbik7CisKKyAgZXJyIDo9IGluZmxhdGVJbml0KGRfc3RyZWFtKTsKKyAgQ0hFQ0tfRVJSKGVyciwgJ2luZmxhdGVJbml0Jyk7CisKKyAgZF9zdHJlYW0ubmV4dF9vdXQgOj0gdW5jb21wcjsKKyAgZF9zdHJlYW0uYXZhaWxfb3V0IDo9IEludGVnZXIodW5jb21wckxlbik7CisKKyAgd2hpbGUgVFJVRSBkbworICBiZWdpbgorICAgIGVyciA6PSBpbmZsYXRlKGRfc3RyZWFtLCBaX05PX0ZMVVNIKTsKKyAgICBpZiBlcnIgPSBaX1NUUkVBTV9FTkQgdGhlbgorICAgICAgYnJlYWs7CisgICAgaWYgZXJyID0gWl9ORUVEX0RJQ1QgdGhlbgorICAgIGJlZ2luCisgICAgICBpZiBkX3N0cmVhbS5hZGxlciA8PiBkaWN0SWQgdGhlbgorICAgICAgICBFWElUX0VSUigndW5leHBlY3RlZCBkaWN0aW9uYXJ5Jyk7CisgICAgICBlcnIgOj0gaW5mbGF0ZVNldERpY3Rpb25hcnkoZF9zdHJlYW0sIGRpY3Rpb25hcnksIFN0ckxlbihkaWN0aW9uYXJ5KSk7CisgICAgZW5kOworICAgIENIRUNLX0VSUihlcnIsICdpbmZsYXRlIHdpdGggZGljdCcpOworICBlbmQ7CisKKyAgZXJyIDo9IGluZmxhdGVFbmQoZF9zdHJlYW0pOworICBDSEVDS19FUlIoZXJyLCAnaW5mbGF0ZUVuZCcpOworCisgIGlmIFN0ckNvbXAoUENoYXIodW5jb21wciksIGhlbGxvKSA8PiAwIHRoZW4KKyAgICBFWElUX0VSUignYmFkIGluZmxhdGUgd2l0aCBkaWN0JykKKyAgZWxzZQorICAgIFdyaXRlTG4oJ2luZmxhdGUgd2l0aCBkaWN0aW9uYXJ5OiAnLCBQQ2hhcih1bmNvbXByKSk7CitlbmQ7Cit7JEVORElGfQorCit2YXIgY29tcHIsIHVuY29tcHI6IFBvaW50ZXI7CisgICAgY29tcHJMZW4sIHVuY29tcHJMZW46IExvbmdJbnQ7CisKK2JlZ2luCisgIGlmIHpsaWJWZXJzaW9uXiA8PiBaTElCX1ZFUlNJT05bMV0gdGhlbgorICAgIEVYSVRfRVJSKCdJbmNvbXBhdGlibGUgemxpYiB2ZXJzaW9uJyk7CisKKyAgV3JpdGVMbignemxpYiB2ZXJzaW9uOiAnLCB6bGliVmVyc2lvbik7CisgIFdyaXRlTG4oJ3psaWIgY29tcGlsZSBmbGFnczogJywgRm9ybWF0KCcweCV4JywgW3psaWJDb21waWxlRmxhZ3NdKSk7CisKKyAgY29tcHJMZW4gOj0gMTAwMDAgKiBTaXplT2YoSW50ZWdlcik7ICgqIGRvbid0IG92ZXJmbG93IG9uIE1TRE9TICopCisgIHVuY29tcHJMZW4gOj0gY29tcHJMZW47CisgIEdldE1lbShjb21wciwgY29tcHJMZW4pOworICBHZXRNZW0odW5jb21wciwgdW5jb21wckxlbik7CisgIGlmIChjb21wciA9IE5JTCkgb3IgKHVuY29tcHIgPSBOSUwpIHRoZW4KKyAgICBFWElUX0VSUignT3V0IG9mIG1lbW9yeScpOworICAoKiBjb21wciBhbmQgdW5jb21wciBhcmUgY2xlYXJlZCB0byBhdm9pZCByZWFkaW5nIHVuaW5pdGlhbGl6ZWQKKyAgICogZGF0YSBhbmQgdG8gZW5zdXJlIHRoYXQgdW5jb21wciBjb21wcmVzc2VzIHdlbGwuCisgICAqKQorICBGaWxsQ2hhcihjb21wcl4sIGNvbXByTGVuLCAwKTsKKyAgRmlsbENoYXIodW5jb21wcl4sIHVuY29tcHJMZW4sIDApOworCisgIHskSUZERUYgVEVTVF9DT01QUkVTU30KKyAgV3JpdGVMbignKiogVGVzdGluZyBjb21wcmVzcycpOworICB0ZXN0X2NvbXByZXNzKGNvbXByLCBjb21wckxlbiwgdW5jb21wciwgdW5jb21wckxlbik7CisgIHskRU5ESUZ9CisKKyAgeyRJRkRFRiBURVNUX0daSU99CisgIFdyaXRlTG4oJyoqIFRlc3RpbmcgZ3ppbycpOworICBpZiBQYXJhbUNvdW50ID49IDEgdGhlbgorICAgIHRlc3RfZ3ppbyhQYXJhbVN0cigxKSwgdW5jb21wciwgdW5jb21wckxlbikKKyAgZWxzZQorICAgIHRlc3RfZ3ppbyhURVNURklMRSwgdW5jb21wciwgdW5jb21wckxlbik7CisgIHskRU5ESUZ9CisKKyAgeyRJRkRFRiBURVNUX0RFRkxBVEV9CisgIFdyaXRlTG4oJyoqIFRlc3RpbmcgZGVmbGF0ZSB3aXRoIHNtYWxsIGJ1ZmZlcnMnKTsKKyAgdGVzdF9kZWZsYXRlKGNvbXByLCBjb21wckxlbik7CisgIHskRU5ESUZ9CisgIHskSUZERUYgVEVTVF9JTkZMQVRFfQorICBXcml0ZUxuKCcqKiBUZXN0aW5nIGluZmxhdGUgd2l0aCBzbWFsbCBidWZmZXJzJyk7CisgIHRlc3RfaW5mbGF0ZShjb21wciwgY29tcHJMZW4sIHVuY29tcHIsIHVuY29tcHJMZW4pOworICB7JEVORElGfQorCisgIHskSUZERUYgVEVTVF9ERUZMQVRFfQorICBXcml0ZUxuKCcqKiBUZXN0aW5nIGRlZmxhdGUgd2l0aCBsYXJnZSBidWZmZXJzJyk7CisgIHRlc3RfbGFyZ2VfZGVmbGF0ZShjb21wciwgY29tcHJMZW4sIHVuY29tcHIsIHVuY29tcHJMZW4pOworICB7JEVORElGfQorICB7JElGREVGIFRFU1RfSU5GTEFURX0KKyAgV3JpdGVMbignKiogVGVzdGluZyBpbmZsYXRlIHdpdGggbGFyZ2UgYnVmZmVycycpOworICB0ZXN0X2xhcmdlX2luZmxhdGUoY29tcHIsIGNvbXByTGVuLCB1bmNvbXByLCB1bmNvbXByTGVuKTsKKyAgeyRFTkRJRn0KKworICB7JElGREVGIFRFU1RfRkxVU0h9CisgIFdyaXRlTG4oJyoqIFRlc3RpbmcgZGVmbGF0ZSB3aXRoIGZ1bGwgZmx1c2gnKTsKKyAgdGVzdF9mbHVzaChjb21wciwgY29tcHJMZW4pOworICB7JEVORElGfQorICB7JElGREVGIFRFU1RfU1lOQ30KKyAgV3JpdGVMbignKiogVGVzdGluZyBpbmZsYXRlU3luYycpOworICB0ZXN0X3N5bmMoY29tcHIsIGNvbXByTGVuLCB1bmNvbXByLCB1bmNvbXByTGVuKTsKKyAgeyRFTkRJRn0KKyAgY29tcHJMZW4gOj0gdW5jb21wckxlbjsKKworICB7JElGREVGIFRFU1RfRElDVH0KKyAgV3JpdGVMbignKiogVGVzdGluZyBkZWZsYXRlIGFuZCBpbmZsYXRlIHdpdGggcHJlc2V0IGRpY3Rpb25hcnknKTsKKyAgdGVzdF9kaWN0X2RlZmxhdGUoY29tcHIsIGNvbXByTGVuKTsKKyAgdGVzdF9kaWN0X2luZmxhdGUoY29tcHIsIGNvbXByTGVuLCB1bmNvbXByLCB1bmNvbXByTGVuKTsKKyAgeyRFTkRJRn0KKworICBGcmVlTWVtKGNvbXByLCBjb21wckxlbik7CisgIEZyZWVNZW0odW5jb21wciwgdW5jb21wckxlbik7CitlbmQuCmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi9wYXNjYWwvcmVhZG1lLnR4dCBiL3NyYy9jb250cmliL3Bhc2NhbC9yZWFkbWUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwZTg3YzgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29udHJpYi9wYXNjYWwvcmVhZG1lLnR4dApAQCAtMCwwICsxLDc2IEBACisKK1RoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIGEgUGFzY2FsIChEZWxwaGksIEt5bGl4KSBpbnRlcmZhY2UgdG8gdGhlCit6bGliIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworCitEaXJlY3RvcnkgbGlzdGluZworPT09PT09PT09PT09PT09PT0KKworemxpYmQzMi5tYWsgICAgIG1ha2VmaWxlIGZvciBCb3JsYW5kIEMrKworZXhhbXBsZS5wYXMgICAgIHVzYWdlIGV4YW1wbGUgb2YgemxpYgoremxpYnBhcy5wYXMgICAgIHRoZSBQYXNjYWwgaW50ZXJmYWNlIHRvIHpsaWIKK3JlYWRtZS50eHQgICAgICB0aGlzIGZpbGUKKworCitDb21wYXRpYmlsaXR5IG5vdGVzCis9PT09PT09PT09PT09PT09PT09CisKKy0gQWx0aG91Z2ggdGhlIG5hbWUgInpsaWIiIHdvdWxkIGhhdmUgYmVlbiBtb3JlIG5vcm1hbCBmb3IgdGhlCisgIHpsaWJwYXMgdW5pdCwgdGhpcyBuYW1lIGlzIGFscmVhZHkgdGFrZW4gYnkgQm9ybGFuZCdzIFpMaWIgdW5pdC4KKyAgVGhpcyBpcyBzb21laG93IHVuZm9ydHVuYXRlLCBiZWNhdXNlIHRoYXQgdW5pdCBpcyBub3QgYSBnZW51aW5lCisgIGludGVyZmFjZSB0byB0aGUgZnVsbC1mbGVkZ2VkIHpsaWIgZnVuY3Rpb25hbGl0eSwgYnV0IGEgc3VpdGUgb2YKKyAgY2xhc3Mgd3JhcHBlcnMgYXJvdW5kIHpsaWIgc3RyZWFtcy4gIE90aGVyIGVzc2VudGlhbCBmZWF0dXJlcywKKyAgc3VjaCBhcyBjaGVja3N1bXMsIGFyZSBtaXNzaW5nLgorICBJdCB3b3VsZCBoYXZlIGJlZW4gbW9yZSBhcHByb3ByaWF0ZSBmb3IgdGhhdCB1bml0IHRvIGhhdmUgYSBuYW1lCisgIGxpa2UgIlpTdHJlYW1zIiwgb3Igc29tZXRoaW5nIHNpbWlsYXIuCisKKy0gVGhlIEMgYW5kIHpsaWItc3VwcGxpZWQgdHlwZXMgaW50LCB1SW50LCBsb25nLCB1TG9uZywgZXRjLiBhcmUKKyAgdHJhbnNsYXRlZCBkaXJlY3RseSBpbnRvIFBhc2NhbCB0eXBlcyBvZiBzaW1pbGFyIHNpemVzIChJbnRlZ2VyLAorICBMb25nSW50LCBldGMuKSwgdG8gYXZvaWQgbmFtZXNwYWNlIHBvbGx1dGlvbi4gIEluIHBhcnRpY3VsYXIsCisgIHRoZXJlIGlzIG5vIGNvbnZlcnNpb24gb2YgdW5zaWduZWQgaW50IGludG8gYSBQYXNjYWwgdW5zaWduZWQKKyAgaW50ZWdlci4gIFRoZSBXb3JkIHR5cGUgaXMgbm9uLXBvcnRhYmxlIGFuZCBoYXMgdGhlIHNhbWUgc2l6ZQorICAoMTYgYml0cykgYm90aCBpbiBhIDE2LWJpdCBhbmQgaW4gYSAzMi1iaXQgZW52aXJvbm1lbnQsIHVubGlrZQorICBJbnRlZ2VyLiAgRXZlbiBpZiB0aGVyZSBpcyBhIDMyLWJpdCBDYXJkaW5hbCB0eXBlLCB0aGVyZSBpcyBubworICByZWFsIG5lZWQgZm9yIHVuc2lnbmVkIGludCBpbiB6bGliIHVuZGVyIGEgMzItYml0IGVudmlyb25tZW50LgorCistIEV4Y2VwdCBmb3IgdGhlIGNhbGxiYWNrcywgdGhlIHpsaWIgZnVuY3Rpb24gaW50ZXJmYWNlcyBhcmUKKyAgYXNzdW1pbmcgdGhlIGNhbGxpbmcgY29udmVudGlvbiBub3JtYWxseSB1c2VkIGluIFBhc2NhbAorICAoX19wYXNjYWwgZm9yIERPUyBhbmQgV2luZG93czE2LCBfX2Zhc3RjYWxsIGZvciBXaW5kb3dzMzIpLgorICBTaW5jZSB0aGUgY2RlY2wga2V5d29yZCBpcyB1c2VkLCB0aGUgb2xkIFR1cmJvIFBhc2NhbCBkb2VzCisgIG5vdCB3b3JrIHdpdGggdGhpcyBpbnRlcmZhY2UuCisKKy0gVGhlIGd6KiBmdW5jdGlvbiBpbnRlcmZhY2VzIGFyZSBub3QgdHJhbnNsYXRlZCwgdG8gYXZvaWQKKyAgaW50ZXJmYWNpbmcgcHJvYmxlbXMgd2l0aCB0aGUgQyBydW50aW1lIGxpYnJhcnkuICBCZXNpZGVzLAorICAgIGd6cHJpbnRmKGd6RmlsZSBmaWxlLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKKyAgY2Fubm90IGJlIHRyYW5zbGF0ZWQgaW50byBQYXNjYWwuCisKKworTGVnYWwgaXNzdWVzCis9PT09PT09PT09PT0KKworVGhlIHpsaWJwYXMgaW50ZXJmYWNlIGlzOgorICBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMyBKZWFuLWxvdXAgR2FpbGx5IGFuZCBNYXJrIEFkbGVyLgorICBDb3B5cmlnaHQgKEMpIDE5OTggYnkgQm9iIERlbGxhY2EuCisgIENvcHlyaWdodCAoQykgMjAwMyBieSBDb3NtaW4gVHJ1dGEuCisKK1RoZSBleGFtcGxlIHByb2dyYW0gaXM6CisgIENvcHlyaWdodCAoQykgMTk5NS0yMDAzIGJ5IEplYW4tbG91cCBHYWlsbHkuCisgIENvcHlyaWdodCAoQykgMTk5OCwxOTk5LDIwMDAgYnkgSmFjcXVlcyBOb21zc2kgTnphbGkuCisgIENvcHlyaWdodCAoQykgMjAwMyBieSBDb3NtaW4gVHJ1dGEuCisKKyAgVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWQKKyAgd2FycmFudHkuICBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3IgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzCisgIGFyaXNpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuCisKKyAgUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UsCisgIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXQKKyAgZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCisgIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90CisgICAgIGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlCisgICAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZQorICAgICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLgorICAyLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZQorICAgICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuCisgIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uCisKZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL3Bhc2NhbC96bGliZDMyLm1hayBiL3NyYy9jb250cmliL3Bhc2NhbC96bGliZDMyLm1hawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmIwMGI3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbnRyaWIvcGFzY2FsL3psaWJkMzIubWFrCkBAIC0wLDAgKzEsOTkgQEAKKyMgTWFrZWZpbGUgZm9yIHpsaWIKKyMgRm9yIHVzZSB3aXRoIERlbHBoaSBhbmQgQysrIEJ1aWxkZXIgdW5kZXIgV2luMzIKKyMgVXBkYXRlZCBmb3IgemxpYiAxLjIueCBieSBDb3NtaW4gVHJ1dGEKKworIyAtLS0tLS0tLS0tLS0gQm9ybGFuZCBDKysgLS0tLS0tLS0tLS0tCisKKyMgVGhpcyBwcm9qZWN0IHVzZXMgdGhlIERlbHBoaSAoZmFzdGNhbGwvcmVnaXN0ZXIpIGNhbGxpbmcgY29udmVudGlvbjoKK0xPQyA9IC1EWkVYUE9SVD1fX2Zhc3RjYWxsIC1EWkVYUE9SVFZBPV9fY2RlY2wKKworQ0MgPSBiY2MzMgorTEQgPSBiY2MzMgorQVIgPSB0bGliCisjIGRvIG5vdCB1c2UgIi1wciIgaW4gQ0ZMQUdTCitDRkxBR1MgPSAtYSAtZCAtay0gLU8yICQoTE9DKQorTERGTEFHUyA9CisKKworIyB2YXJpYWJsZXMKK1pMSUJfTElCID0gemxpYi5saWIKKworT0JKMSA9IGFkbGVyMzIub2JqIGNvbXByZXNzLm9iaiBjcmMzMi5vYmogZGVmbGF0ZS5vYmogZ3pjbG9zZS5vYmogZ3psaWIub2JqIGd6cmVhZC5vYmoKK09CSjIgPSBnendyaXRlLm9iaiBpbmZiYWNrLm9iaiBpbmZmYXN0Lm9iaiBpbmZsYXRlLm9iaiBpbmZ0cmVlcy5vYmogdHJlZXMub2JqIHVuY29tcHIub2JqIHp1dGlsLm9iagorT0JKUDEgPSArYWRsZXIzMi5vYmorY29tcHJlc3Mub2JqK2NyYzMyLm9iaitkZWZsYXRlLm9iaitnemNsb3NlLm9iaitnemxpYi5vYmorZ3pyZWFkLm9iagorT0JKUDIgPSArZ3p3cml0ZS5vYmoraW5mYmFjay5vYmoraW5mZmFzdC5vYmoraW5mbGF0ZS5vYmoraW5mdHJlZXMub2JqK3RyZWVzLm9iait1bmNvbXByLm9iait6dXRpbC5vYmoKKworCisjIHRhcmdldHMKK2FsbDogJChaTElCX0xJQikgZXhhbXBsZS5leGUgbWluaWd6aXAuZXhlCisKKy5jLm9iajoKKwkkKENDKSAtYyAkKENGTEFHUykgJCouYworCithZGxlcjMyLm9iajogYWRsZXIzMi5jIHpsaWIuaCB6Y29uZi5oCisKK2NvbXByZXNzLm9iajogY29tcHJlc3MuYyB6bGliLmggemNvbmYuaAorCitjcmMzMi5vYmo6IGNyYzMyLmMgemxpYi5oIHpjb25mLmggY3JjMzIuaAorCitkZWZsYXRlLm9iajogZGVmbGF0ZS5jIGRlZmxhdGUuaCB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oCisKK2d6Y2xvc2Uub2JqOiBnemNsb3NlLmMgemxpYi5oIHpjb25mLmggZ3pndXRzLmgKKworZ3psaWIub2JqOiBnemxpYi5jIHpsaWIuaCB6Y29uZi5oIGd6Z3V0cy5oCisKK2d6cmVhZC5vYmo6IGd6cmVhZC5jIHpsaWIuaCB6Y29uZi5oIGd6Z3V0cy5oCisKK2d6d3JpdGUub2JqOiBnendyaXRlLmMgemxpYi5oIHpjb25mLmggZ3pndXRzLmgKKworaW5mYmFjay5vYmo6IGluZmJhY2suYyB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oIGluZnRyZWVzLmggaW5mbGF0ZS5oIFwKKyBpbmZmYXN0LmggaW5mZml4ZWQuaAorCitpbmZmYXN0Lm9iajogaW5mZmFzdC5jIHp1dGlsLmggemxpYi5oIHpjb25mLmggaW5mdHJlZXMuaCBpbmZsYXRlLmggXAorIGluZmZhc3QuaAorCitpbmZsYXRlLm9iajogaW5mbGF0ZS5jIHp1dGlsLmggemxpYi5oIHpjb25mLmggaW5mdHJlZXMuaCBpbmZsYXRlLmggXAorIGluZmZhc3QuaCBpbmZmaXhlZC5oCisKK2luZnRyZWVzLm9iajogaW5mdHJlZXMuYyB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oIGluZnRyZWVzLmgKKwordHJlZXMub2JqOiB0cmVlcy5jIHp1dGlsLmggemxpYi5oIHpjb25mLmggZGVmbGF0ZS5oIHRyZWVzLmgKKwordW5jb21wci5vYmo6IHVuY29tcHIuYyB6bGliLmggemNvbmYuaAorCit6dXRpbC5vYmo6IHp1dGlsLmMgenV0aWwuaCB6bGliLmggemNvbmYuaAorCitleGFtcGxlLm9iajogdGVzdC9leGFtcGxlLmMgemxpYi5oIHpjb25mLmgKKworbWluaWd6aXAub2JqOiB0ZXN0L21pbmlnemlwLmMgemxpYi5oIHpjb25mLmgKKworCisjIEZvciB0aGUgc2FrZSBvZiB0aGUgb2xkIEJvcmxhbmQgbWFrZSwKKyMgdGhlIGNvbW1hbmQgbGluZSBpcyBjdXQgdG8gZml0IGluIHRoZSBNUy1ET1MgMTI4IGJ5dGUgbGltaXQ6CiskKFpMSUJfTElCKTogJChPQkoxKSAkKE9CSjIpCisJLWRlbCAkKFpMSUJfTElCKQorCSQoQVIpICQoWkxJQl9MSUIpICQoT0JKUDEpCisJJChBUikgJChaTElCX0xJQikgJChPQkpQMikKKworCisjIHRlc3RpbmcKK3Rlc3Q6IGV4YW1wbGUuZXhlIG1pbmlnemlwLmV4ZQorCWV4YW1wbGUKKwllY2hvIGhlbGxvIHdvcmxkIHwgbWluaWd6aXAgfCBtaW5pZ3ppcCAtZAorCitleGFtcGxlLmV4ZTogZXhhbXBsZS5vYmogJChaTElCX0xJQikKKwkkKExEKSAkKExERkxBR1MpIGV4YW1wbGUub2JqICQoWkxJQl9MSUIpCisKK21pbmlnemlwLmV4ZTogbWluaWd6aXAub2JqICQoWkxJQl9MSUIpCisJJChMRCkgJChMREZMQUdTKSBtaW5pZ3ppcC5vYmogJChaTElCX0xJQikKKworCisjIGNsZWFudXAKK2NsZWFuOgorCS1kZWwgKi5vYmoKKwktZGVsICouZXhlCisJLWRlbCAqLmxpYgorCS1kZWwgKi50ZHMKKwktZGVsIHpsaWIuYmFrCisJLWRlbCBmb28uZ3oKKwpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvcGFzY2FsL3psaWJwYXMucGFzIGIvc3JjL2NvbnRyaWIvcGFzY2FsL3psaWJwYXMucGFzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYjVjZDYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29udHJpYi9wYXNjYWwvemxpYnBhcy5wYXMKQEAgLTAsMCArMSwyNzYgQEAKKygqIHpsaWJwYXMgLS0gUGFzY2FsIGludGVyZmFjZSB0byB0aGUgemxpYiBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgQ29zbWluIFRydXRhLgorICogRGVyaXZlZCBmcm9tIG9yaWdpbmFsIHNvdXJjZXMgYnkgQm9iIERlbGxhY2EuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gcmVhZG1lLnR4dAorICopCisKK3VuaXQgemxpYnBhczsKKworaW50ZXJmYWNlCisKK2NvbnN0CisgIFpMSUJfVkVSU0lPTiA9ICcxLjIuMTInOworICBaTElCX1ZFUk5VTSAgPSAkMTJhMDsKKwordHlwZQorICBhbGxvY19mdW5jID0gZnVuY3Rpb24ob3BhcXVlOiBQb2ludGVyOyBpdGVtcywgc2l6ZTogSW50ZWdlcik6IFBvaW50ZXI7CisgICAgICAgICAgICAgICAgIGNkZWNsOworICBmcmVlX2Z1bmMgID0gcHJvY2VkdXJlKG9wYXF1ZSwgYWRkcmVzczogUG9pbnRlcik7CisgICAgICAgICAgICAgICAgIGNkZWNsOworCisgIGluX2Z1bmMgICAgPSBmdW5jdGlvbihvcGFxdWU6IFBvaW50ZXI7IHZhciBidWY6IFBCeXRlKTogSW50ZWdlcjsKKyAgICAgICAgICAgICAgICAgY2RlY2w7CisgIG91dF9mdW5jICAgPSBmdW5jdGlvbihvcGFxdWU6IFBvaW50ZXI7IGJ1ZjogUEJ5dGU7IHNpemU6IEludGVnZXIpOiBJbnRlZ2VyOworICAgICAgICAgICAgICAgICBjZGVjbDsKKworICB6X3N0cmVhbXAgPSBeel9zdHJlYW07CisgIHpfc3RyZWFtID0gcGFja2VkIHJlY29yZAorICAgIG5leHRfaW46IFBDaGFyOyAgICAgICAoKiBuZXh0IGlucHV0IGJ5dGUgKikKKyAgICBhdmFpbF9pbjogSW50ZWdlcjsgICAgKCogbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSBhdCBuZXh0X2luICopCisgICAgdG90YWxfaW46IExvbmdJbnQ7ICAgICgqIHRvdGFsIG5iIG9mIGlucHV0IGJ5dGVzIHJlYWQgc28gZmFyICopCisKKyAgICBuZXh0X291dDogUENoYXI7ICAgICAgKCogbmV4dCBvdXRwdXQgYnl0ZSBzaG91bGQgYmUgcHV0IHRoZXJlICopCisgICAgYXZhaWxfb3V0OiBJbnRlZ2VyOyAgICgqIHJlbWFpbmluZyBmcmVlIHNwYWNlIGF0IG5leHRfb3V0ICopCisgICAgdG90YWxfb3V0OiBMb25nSW50OyAgICgqIHRvdGFsIG5iIG9mIGJ5dGVzIG91dHB1dCBzbyBmYXIgKikKKworICAgIG1zZzogUENoYXI7ICAgICAgICAgICAoKiBsYXN0IGVycm9yIG1lc3NhZ2UsIE5VTEwgaWYgbm8gZXJyb3IgKikKKyAgICBzdGF0ZTogUG9pbnRlcjsgICAgICAgKCogbm90IHZpc2libGUgYnkgYXBwbGljYXRpb25zICopCisKKyAgICB6YWxsb2M6IGFsbG9jX2Z1bmM7ICAgKCogdXNlZCB0byBhbGxvY2F0ZSB0aGUgaW50ZXJuYWwgc3RhdGUgKikKKyAgICB6ZnJlZTogZnJlZV9mdW5jOyAgICAgKCogdXNlZCB0byBmcmVlIHRoZSBpbnRlcm5hbCBzdGF0ZSAqKQorICAgIG9wYXF1ZTogUG9pbnRlcjsgICAgICAoKiBwcml2YXRlIGRhdGEgb2JqZWN0IHBhc3NlZCB0byB6YWxsb2MgYW5kIHpmcmVlICopCisKKyAgICBkYXRhX3R5cGU6IEludGVnZXI7ICAgKCogYmVzdCBndWVzcyBhYm91dCB0aGUgZGF0YSB0eXBlOiBhc2NpaSBvciBiaW5hcnkgKikKKyAgICBhZGxlcjogTG9uZ0ludDsgICAgICAgKCogYWRsZXIzMiB2YWx1ZSBvZiB0aGUgdW5jb21wcmVzc2VkIGRhdGEgKikKKyAgICByZXNlcnZlZDogTG9uZ0ludDsgICAgKCogcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKikKKyAgZW5kOworCisgIGd6X2hlYWRlcnAgPSBeZ3pfaGVhZGVyOworICBnel9oZWFkZXIgPSBwYWNrZWQgcmVjb3JkCisgICAgdGV4dDogSW50ZWdlcjsgICAgICAgICgqIHRydWUgaWYgY29tcHJlc3NlZCBkYXRhIGJlbGlldmVkIHRvIGJlIHRleHQgKikKKyAgICB0aW1lOiBMb25nSW50OyAgICAgICAgKCogbW9kaWZpY2F0aW9uIHRpbWUgKikKKyAgICB4ZmxhZ3M6IEludGVnZXI7ICAgICAgKCogZXh0cmEgZmxhZ3MgKG5vdCB1c2VkIHdoZW4gd3JpdGluZyBhIGd6aXAgZmlsZSkgKikKKyAgICBvczogSW50ZWdlcjsgICAgICAgICAgKCogb3BlcmF0aW5nIHN5c3RlbSAqKQorICAgIGV4dHJhOiBQQ2hhcjsgICAgICAgICAoKiBwb2ludGVyIHRvIGV4dHJhIGZpZWxkIG9yIFpfTlVMTCBpZiBub25lICopCisgICAgZXh0cmFfbGVuOiBJbnRlZ2VyOyAgICgqIGV4dHJhIGZpZWxkIGxlbmd0aCAodmFsaWQgaWYgZXh0cmEgIT0gWl9OVUxMKSAqKQorICAgIGV4dHJhX21heDogSW50ZWdlcjsgICAoKiBzcGFjZSBhdCBleHRyYSAob25seSB3aGVuIHJlYWRpbmcgaGVhZGVyKSAqKQorICAgIG5hbWU6IFBDaGFyOyAgICAgICAgICAoKiBwb2ludGVyIHRvIHplcm8tdGVybWluYXRlZCBmaWxlIG5hbWUgb3IgWl9OVUxMICopCisgICAgbmFtZV9tYXg6IEludGVnZXI7ICAgICgqIHNwYWNlIGF0IG5hbWUgKG9ubHkgd2hlbiByZWFkaW5nIGhlYWRlcikgKikKKyAgICBjb21tZW50OiBQQ2hhcjsgICAgICAgKCogcG9pbnRlciB0byB6ZXJvLXRlcm1pbmF0ZWQgY29tbWVudCBvciBaX05VTEwgKikKKyAgICBjb21tX21heDogSW50ZWdlcjsgICAgKCogc3BhY2UgYXQgY29tbWVudCAob25seSB3aGVuIHJlYWRpbmcgaGVhZGVyKSAqKQorICAgIGhjcmM6IEludGVnZXI7ICAgICAgICAoKiB0cnVlIGlmIHRoZXJlIHdhcyBvciB3aWxsIGJlIGEgaGVhZGVyIGNyYyAqKQorICAgIGRvbmU6IEludGVnZXI7ICAgICAgICAoKiB0cnVlIHdoZW4gZG9uZSByZWFkaW5nIGd6aXAgaGVhZGVyICopCisgIGVuZDsKKworKCogY29uc3RhbnRzICopCitjb25zdAorICBaX05PX0ZMVVNIICAgICAgPSAwOworICBaX1BBUlRJQUxfRkxVU0ggPSAxOworICBaX1NZTkNfRkxVU0ggICAgPSAyOworICBaX0ZVTExfRkxVU0ggICAgPSAzOworICBaX0ZJTklTSCAgICAgICAgPSA0OworICBaX0JMT0NLICAgICAgICAgPSA1OworICBaX1RSRUVTICAgICAgICAgPSA2OworCisgIFpfT0sgICAgICAgICAgICA9ICAwOworICBaX1NUUkVBTV9FTkQgICAgPSAgMTsKKyAgWl9ORUVEX0RJQ1QgICAgID0gIDI7CisgIFpfRVJSTk8gICAgICAgICA9IC0xOworICBaX1NUUkVBTV9FUlJPUiAgPSAtMjsKKyAgWl9EQVRBX0VSUk9SICAgID0gLTM7CisgIFpfTUVNX0VSUk9SICAgICA9IC00OworICBaX0JVRl9FUlJPUiAgICAgPSAtNTsKKyAgWl9WRVJTSU9OX0VSUk9SID0gLTY7CisKKyAgWl9OT19DT01QUkVTU0lPTiAgICAgICA9ICAwOworICBaX0JFU1RfU1BFRUQgICAgICAgICAgID0gIDE7CisgIFpfQkVTVF9DT01QUkVTU0lPTiAgICAgPSAgOTsKKyAgWl9ERUZBVUxUX0NPTVBSRVNTSU9OICA9IC0xOworCisgIFpfRklMVEVSRUQgICAgICAgICAgICA9IDE7CisgIFpfSFVGRk1BTl9PTkxZICAgICAgICA9IDI7CisgIFpfUkxFICAgICAgICAgICAgICAgICA9IDM7CisgIFpfRklYRUQgICAgICAgICAgICAgICA9IDQ7CisgIFpfREVGQVVMVF9TVFJBVEVHWSAgICA9IDA7CisKKyAgWl9CSU5BUlkgICA9IDA7CisgIFpfVEVYVCAgICAgPSAxOworICBaX0FTQ0lJICAgID0gMTsKKyAgWl9VTktOT1dOICA9IDI7CisKKyAgWl9ERUZMQVRFRCA9IDg7CisKKygqIGJhc2ljIGZ1bmN0aW9ucyAqKQorZnVuY3Rpb24gemxpYlZlcnNpb246IFBDaGFyOworZnVuY3Rpb24gZGVmbGF0ZUluaXQodmFyIHN0cm06IHpfc3RyZWFtOyBsZXZlbDogSW50ZWdlcik6IEludGVnZXI7CitmdW5jdGlvbiBkZWZsYXRlKHZhciBzdHJtOiB6X3N0cmVhbTsgZmx1c2g6IEludGVnZXIpOiBJbnRlZ2VyOworZnVuY3Rpb24gZGVmbGF0ZUVuZCh2YXIgc3RybTogel9zdHJlYW0pOiBJbnRlZ2VyOworZnVuY3Rpb24gaW5mbGF0ZUluaXQodmFyIHN0cm06IHpfc3RyZWFtKTogSW50ZWdlcjsKK2Z1bmN0aW9uIGluZmxhdGUodmFyIHN0cm06IHpfc3RyZWFtOyBmbHVzaDogSW50ZWdlcik6IEludGVnZXI7CitmdW5jdGlvbiBpbmZsYXRlRW5kKHZhciBzdHJtOiB6X3N0cmVhbSk6IEludGVnZXI7CisKKygqIGFkdmFuY2VkIGZ1bmN0aW9ucyAqKQorZnVuY3Rpb24gZGVmbGF0ZUluaXQyKHZhciBzdHJtOiB6X3N0cmVhbTsgbGV2ZWwsIG1ldGhvZCwgd2luZG93Qml0cywKKyAgICAgICAgICAgICAgICAgICAgICBtZW1MZXZlbCwgc3RyYXRlZ3k6IEludGVnZXIpOiBJbnRlZ2VyOworZnVuY3Rpb24gZGVmbGF0ZVNldERpY3Rpb25hcnkodmFyIHN0cm06IHpfc3RyZWFtOyBjb25zdCBkaWN0aW9uYXJ5OiBQQ2hhcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3RMZW5ndGg6IEludGVnZXIpOiBJbnRlZ2VyOworZnVuY3Rpb24gZGVmbGF0ZUNvcHkodmFyIGRlc3QsIHNvdXJjZTogel9zdHJlYW0pOiBJbnRlZ2VyOworZnVuY3Rpb24gZGVmbGF0ZVJlc2V0KHZhciBzdHJtOiB6X3N0cmVhbSk6IEludGVnZXI7CitmdW5jdGlvbiBkZWZsYXRlUGFyYW1zKHZhciBzdHJtOiB6X3N0cmVhbTsgbGV2ZWwsIHN0cmF0ZWd5OiBJbnRlZ2VyKTogSW50ZWdlcjsKK2Z1bmN0aW9uIGRlZmxhdGVUdW5lKHZhciBzdHJtOiB6X3N0cmVhbTsgZ29vZF9sZW5ndGgsIG1heF9sYXp5LCBuaWNlX2xlbmd0aCwgbWF4X2NoYWluOiBJbnRlZ2VyKTogSW50ZWdlcjsKK2Z1bmN0aW9uIGRlZmxhdGVCb3VuZCh2YXIgc3RybTogel9zdHJlYW07IHNvdXJjZUxlbjogTG9uZ0ludCk6IExvbmdJbnQ7CitmdW5jdGlvbiBkZWZsYXRlUGVuZGluZyh2YXIgc3RybTogel9zdHJlYW07IHZhciBwZW5kaW5nOiBJbnRlZ2VyOyB2YXIgYml0czogSW50ZWdlcik6IEludGVnZXI7CitmdW5jdGlvbiBkZWZsYXRlUHJpbWUodmFyIHN0cm06IHpfc3RyZWFtOyBiaXRzLCB2YWx1ZTogSW50ZWdlcik6IEludGVnZXI7CitmdW5jdGlvbiBkZWZsYXRlU2V0SGVhZGVyKHZhciBzdHJtOiB6X3N0cmVhbTsgaGVhZDogZ3pfaGVhZGVyKTogSW50ZWdlcjsKK2Z1bmN0aW9uIGluZmxhdGVJbml0Mih2YXIgc3RybTogel9zdHJlYW07IHdpbmRvd0JpdHM6IEludGVnZXIpOiBJbnRlZ2VyOworZnVuY3Rpb24gaW5mbGF0ZVNldERpY3Rpb25hcnkodmFyIHN0cm06IHpfc3RyZWFtOyBjb25zdCBkaWN0aW9uYXJ5OiBQQ2hhcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3RMZW5ndGg6IEludGVnZXIpOiBJbnRlZ2VyOworZnVuY3Rpb24gaW5mbGF0ZVN5bmModmFyIHN0cm06IHpfc3RyZWFtKTogSW50ZWdlcjsKK2Z1bmN0aW9uIGluZmxhdGVDb3B5KHZhciBkZXN0LCBzb3VyY2U6IHpfc3RyZWFtKTogSW50ZWdlcjsKK2Z1bmN0aW9uIGluZmxhdGVSZXNldCh2YXIgc3RybTogel9zdHJlYW0pOiBJbnRlZ2VyOworZnVuY3Rpb24gaW5mbGF0ZVJlc2V0Mih2YXIgc3RybTogel9zdHJlYW07IHdpbmRvd0JpdHM6IEludGVnZXIpOiBJbnRlZ2VyOworZnVuY3Rpb24gaW5mbGF0ZVByaW1lKHZhciBzdHJtOiB6X3N0cmVhbTsgYml0cywgdmFsdWU6IEludGVnZXIpOiBJbnRlZ2VyOworZnVuY3Rpb24gaW5mbGF0ZU1hcmsodmFyIHN0cm06IHpfc3RyZWFtKTogTG9uZ0ludDsKK2Z1bmN0aW9uIGluZmxhdGVHZXRIZWFkZXIodmFyIHN0cm06IHpfc3RyZWFtOyB2YXIgaGVhZDogZ3pfaGVhZGVyKTogSW50ZWdlcjsKK2Z1bmN0aW9uIGluZmxhdGVCYWNrSW5pdCh2YXIgc3RybTogel9zdHJlYW07CisgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93Qml0czogSW50ZWdlcjsgd2luZG93OiBQQ2hhcik6IEludGVnZXI7CitmdW5jdGlvbiBpbmZsYXRlQmFjayh2YXIgc3RybTogel9zdHJlYW07IGluX2ZuOiBpbl9mdW5jOyBpbl9kZXNjOiBQb2ludGVyOworICAgICAgICAgICAgICAgICAgICAgb3V0X2ZuOiBvdXRfZnVuYzsgb3V0X2Rlc2M6IFBvaW50ZXIpOiBJbnRlZ2VyOworZnVuY3Rpb24gaW5mbGF0ZUJhY2tFbmQodmFyIHN0cm06IHpfc3RyZWFtKTogSW50ZWdlcjsKK2Z1bmN0aW9uIHpsaWJDb21waWxlRmxhZ3M6IExvbmdJbnQ7CisKKygqIHV0aWxpdHkgZnVuY3Rpb25zICopCitmdW5jdGlvbiBjb21wcmVzcyhkZXN0OiBQQ2hhcjsgdmFyIGRlc3RMZW46IExvbmdJbnQ7CisgICAgICAgICAgICAgICAgICBjb25zdCBzb3VyY2U6IFBDaGFyOyBzb3VyY2VMZW46IExvbmdJbnQpOiBJbnRlZ2VyOworZnVuY3Rpb24gY29tcHJlc3MyKGRlc3Q6IFBDaGFyOyB2YXIgZGVzdExlbjogTG9uZ0ludDsKKyAgICAgICAgICAgICAgICAgIGNvbnN0IHNvdXJjZTogUENoYXI7IHNvdXJjZUxlbjogTG9uZ0ludDsKKyAgICAgICAgICAgICAgICAgIGxldmVsOiBJbnRlZ2VyKTogSW50ZWdlcjsKK2Z1bmN0aW9uIGNvbXByZXNzQm91bmQoc291cmNlTGVuOiBMb25nSW50KTogTG9uZ0ludDsKK2Z1bmN0aW9uIHVuY29tcHJlc3MoZGVzdDogUENoYXI7IHZhciBkZXN0TGVuOiBMb25nSW50OworICAgICAgICAgICAgICAgICAgICBjb25zdCBzb3VyY2U6IFBDaGFyOyBzb3VyY2VMZW46IExvbmdJbnQpOiBJbnRlZ2VyOworCisoKiBjaGVja3N1bSBmdW5jdGlvbnMgKikKK2Z1bmN0aW9uIGFkbGVyMzIoYWRsZXI6IExvbmdJbnQ7IGNvbnN0IGJ1ZjogUENoYXI7IGxlbjogSW50ZWdlcik6IExvbmdJbnQ7CitmdW5jdGlvbiBhZGxlcjMyX2NvbWJpbmUoYWRsZXIxLCBhZGxlcjIsIGxlbjI6IExvbmdJbnQpOiBMb25nSW50OworZnVuY3Rpb24gY3JjMzIoY3JjOiBMb25nSW50OyBjb25zdCBidWY6IFBDaGFyOyBsZW46IEludGVnZXIpOiBMb25nSW50OworZnVuY3Rpb24gY3JjMzJfY29tYmluZShjcmMxLCBjcmMyLCBsZW4yOiBMb25nSW50KTogTG9uZ0ludDsKKworKCogdmFyaW91cyBoYWNrcywgZG9uJ3QgbG9vayA6KSAqKQorZnVuY3Rpb24gZGVmbGF0ZUluaXRfKHZhciBzdHJtOiB6X3N0cmVhbTsgbGV2ZWw6IEludGVnZXI7CisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVyc2lvbjogUENoYXI7IHN0cmVhbV9zaXplOiBJbnRlZ2VyKTogSW50ZWdlcjsKK2Z1bmN0aW9uIGluZmxhdGVJbml0Xyh2YXIgc3RybTogel9zdHJlYW07IGNvbnN0IHZlcnNpb246IFBDaGFyOworICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbV9zaXplOiBJbnRlZ2VyKTogSW50ZWdlcjsKK2Z1bmN0aW9uIGRlZmxhdGVJbml0Ml8odmFyIHN0cm06IHpfc3RyZWFtOworICAgICAgICAgICAgICAgICAgICAgICBsZXZlbCwgbWV0aG9kLCB3aW5kb3dCaXRzLCBtZW1MZXZlbCwgc3RyYXRlZ3k6IEludGVnZXI7CisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlcnNpb246IFBDaGFyOyBzdHJlYW1fc2l6ZTogSW50ZWdlcik6IEludGVnZXI7CitmdW5jdGlvbiBpbmZsYXRlSW5pdDJfKHZhciBzdHJtOiB6X3N0cmVhbTsgd2luZG93Qml0czogSW50ZWdlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVyc2lvbjogUENoYXI7IHN0cmVhbV9zaXplOiBJbnRlZ2VyKTogSW50ZWdlcjsKK2Z1bmN0aW9uIGluZmxhdGVCYWNrSW5pdF8odmFyIHN0cm06IHpfc3RyZWFtOworICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dCaXRzOiBJbnRlZ2VyOyB3aW5kb3c6IFBDaGFyOworICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZXJzaW9uOiBQQ2hhcjsgc3RyZWFtX3NpemU6IEludGVnZXIpOiBJbnRlZ2VyOworCisKK2ltcGxlbWVudGF0aW9uCisKK3skTCBhZGxlcjMyLm9ian0KK3skTCBjb21wcmVzcy5vYmp9Cit7JEwgY3JjMzIub2JqfQoreyRMIGRlZmxhdGUub2JqfQoreyRMIGluZmJhY2sub2JqfQoreyRMIGluZmZhc3Qub2JqfQoreyRMIGluZmxhdGUub2JqfQoreyRMIGluZnRyZWVzLm9ian0KK3skTCB0cmVlcy5vYmp9Cit7JEwgdW5jb21wci5vYmp9Cit7JEwgenV0aWwub2JqfQorCitmdW5jdGlvbiBhZGxlcjMyOyBleHRlcm5hbDsKK2Z1bmN0aW9uIGFkbGVyMzJfY29tYmluZTsgZXh0ZXJuYWw7CitmdW5jdGlvbiBjb21wcmVzczsgZXh0ZXJuYWw7CitmdW5jdGlvbiBjb21wcmVzczI7IGV4dGVybmFsOworZnVuY3Rpb24gY29tcHJlc3NCb3VuZDsgZXh0ZXJuYWw7CitmdW5jdGlvbiBjcmMzMjsgZXh0ZXJuYWw7CitmdW5jdGlvbiBjcmMzMl9jb21iaW5lOyBleHRlcm5hbDsKK2Z1bmN0aW9uIGRlZmxhdGU7IGV4dGVybmFsOworZnVuY3Rpb24gZGVmbGF0ZUJvdW5kOyBleHRlcm5hbDsKK2Z1bmN0aW9uIGRlZmxhdGVDb3B5OyBleHRlcm5hbDsKK2Z1bmN0aW9uIGRlZmxhdGVFbmQ7IGV4dGVybmFsOworZnVuY3Rpb24gZGVmbGF0ZUluaXRfOyBleHRlcm5hbDsKK2Z1bmN0aW9uIGRlZmxhdGVJbml0Ml87IGV4dGVybmFsOworZnVuY3Rpb24gZGVmbGF0ZVBhcmFtczsgZXh0ZXJuYWw7CitmdW5jdGlvbiBkZWZsYXRlUGVuZGluZzsgZXh0ZXJuYWw7CitmdW5jdGlvbiBkZWZsYXRlUHJpbWU7IGV4dGVybmFsOworZnVuY3Rpb24gZGVmbGF0ZVJlc2V0OyBleHRlcm5hbDsKK2Z1bmN0aW9uIGRlZmxhdGVTZXREaWN0aW9uYXJ5OyBleHRlcm5hbDsKK2Z1bmN0aW9uIGRlZmxhdGVTZXRIZWFkZXI7IGV4dGVybmFsOworZnVuY3Rpb24gZGVmbGF0ZVR1bmU7IGV4dGVybmFsOworZnVuY3Rpb24gaW5mbGF0ZTsgZXh0ZXJuYWw7CitmdW5jdGlvbiBpbmZsYXRlQmFjazsgZXh0ZXJuYWw7CitmdW5jdGlvbiBpbmZsYXRlQmFja0VuZDsgZXh0ZXJuYWw7CitmdW5jdGlvbiBpbmZsYXRlQmFja0luaXRfOyBleHRlcm5hbDsKK2Z1bmN0aW9uIGluZmxhdGVDb3B5OyBleHRlcm5hbDsKK2Z1bmN0aW9uIGluZmxhdGVFbmQ7IGV4dGVybmFsOworZnVuY3Rpb24gaW5mbGF0ZUdldEhlYWRlcjsgZXh0ZXJuYWw7CitmdW5jdGlvbiBpbmZsYXRlSW5pdF87IGV4dGVybmFsOworZnVuY3Rpb24gaW5mbGF0ZUluaXQyXzsgZXh0ZXJuYWw7CitmdW5jdGlvbiBpbmZsYXRlTWFyazsgZXh0ZXJuYWw7CitmdW5jdGlvbiBpbmZsYXRlUHJpbWU7IGV4dGVybmFsOworZnVuY3Rpb24gaW5mbGF0ZVJlc2V0OyBleHRlcm5hbDsKK2Z1bmN0aW9uIGluZmxhdGVSZXNldDI7IGV4dGVybmFsOworZnVuY3Rpb24gaW5mbGF0ZVNldERpY3Rpb25hcnk7IGV4dGVybmFsOworZnVuY3Rpb24gaW5mbGF0ZVN5bmM7IGV4dGVybmFsOworZnVuY3Rpb24gdW5jb21wcmVzczsgZXh0ZXJuYWw7CitmdW5jdGlvbiB6bGliQ29tcGlsZUZsYWdzOyBleHRlcm5hbDsKK2Z1bmN0aW9uIHpsaWJWZXJzaW9uOyBleHRlcm5hbDsKKworZnVuY3Rpb24gZGVmbGF0ZUluaXQodmFyIHN0cm06IHpfc3RyZWFtOyBsZXZlbDogSW50ZWdlcik6IEludGVnZXI7CitiZWdpbgorICBSZXN1bHQgOj0gZGVmbGF0ZUluaXRfKHN0cm0sIGxldmVsLCBaTElCX1ZFUlNJT04sIHNpemVvZih6X3N0cmVhbSkpOworZW5kOworCitmdW5jdGlvbiBkZWZsYXRlSW5pdDIodmFyIHN0cm06IHpfc3RyZWFtOyBsZXZlbCwgbWV0aG9kLCB3aW5kb3dCaXRzLCBtZW1MZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICBzdHJhdGVneTogSW50ZWdlcik6IEludGVnZXI7CitiZWdpbgorICBSZXN1bHQgOj0gZGVmbGF0ZUluaXQyXyhzdHJtLCBsZXZlbCwgbWV0aG9kLCB3aW5kb3dCaXRzLCBtZW1MZXZlbCwgc3RyYXRlZ3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgIFpMSUJfVkVSU0lPTiwgc2l6ZW9mKHpfc3RyZWFtKSk7CitlbmQ7CisKK2Z1bmN0aW9uIGluZmxhdGVJbml0KHZhciBzdHJtOiB6X3N0cmVhbSk6IEludGVnZXI7CitiZWdpbgorICBSZXN1bHQgOj0gaW5mbGF0ZUluaXRfKHN0cm0sIFpMSUJfVkVSU0lPTiwgc2l6ZW9mKHpfc3RyZWFtKSk7CitlbmQ7CisKK2Z1bmN0aW9uIGluZmxhdGVJbml0Mih2YXIgc3RybTogel9zdHJlYW07IHdpbmRvd0JpdHM6IEludGVnZXIpOiBJbnRlZ2VyOworYmVnaW4KKyAgUmVzdWx0IDo9IGluZmxhdGVJbml0Ml8oc3RybSwgd2luZG93Qml0cywgWkxJQl9WRVJTSU9OLCBzaXplb2Yoel9zdHJlYW0pKTsKK2VuZDsKKworZnVuY3Rpb24gaW5mbGF0ZUJhY2tJbml0KHZhciBzdHJtOiB6X3N0cmVhbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dCaXRzOiBJbnRlZ2VyOyB3aW5kb3c6IFBDaGFyKTogSW50ZWdlcjsKK2JlZ2luCisgIFJlc3VsdCA6PSBpbmZsYXRlQmFja0luaXRfKHN0cm0sIHdpbmRvd0JpdHMsIHdpbmRvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWkxJQl9WRVJTSU9OLCBzaXplb2Yoel9zdHJlYW0pKTsKK2VuZDsKKworZnVuY3Rpb24gX21hbGxvYyhTaXplOiBJbnRlZ2VyKTogUG9pbnRlcjsgY2RlY2w7CitiZWdpbgorICBHZXRNZW0oUmVzdWx0LCBTaXplKTsKK2VuZDsKKworcHJvY2VkdXJlIF9mcmVlKEJsb2NrOiBQb2ludGVyKTsgY2RlY2w7CitiZWdpbgorICBGcmVlTWVtKEJsb2NrKTsKK2VuZDsKKworcHJvY2VkdXJlIF9tZW1zZXQoUDogUG9pbnRlcjsgQjogQnl0ZTsgY291bnQ6IEludGVnZXIpOyBjZGVjbDsKK2JlZ2luCisgIEZpbGxDaGFyKFBeLCBjb3VudCwgQik7CitlbmQ7CisKK3Byb2NlZHVyZSBfbWVtY3B5KGRlc3QsIHNvdXJjZTogUG9pbnRlcjsgY291bnQ6IEludGVnZXIpOyBjZGVjbDsKK2JlZ2luCisgIE1vdmUoc291cmNlXiwgZGVzdF4sIGNvdW50KTsKK2VuZDsKKworZW5kLgpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvcHVmZi9NYWtlZmlsZSBiL3NyYy9jb250cmliL3B1ZmYvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUyNTk0YwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb250cmliL3B1ZmYvTWFrZWZpbGUKQEAgLTAsMCArMSw0MiBAQAorQ0ZMQUdTPS1PCisKK3B1ZmY6IHB1ZmYubyBwdWZmdGVzdC5vCisKK3B1ZmYubzogcHVmZi5oCisKK3B1ZmZ0ZXN0Lm86IHB1ZmYuaAorCit0ZXN0OiBwdWZmCisJcHVmZiB6ZXJvcy5yYXcKKworcHVmdDogcHVmZi5jIHB1ZmYuaCBwdWZmdGVzdC5vCisJY2MgLWZwcm9maWxlLWFyY3MgLWZ0ZXN0LWNvdmVyYWdlIC1vIHB1ZnQgcHVmZi5jIHB1ZmZ0ZXN0Lm8KKworIyBwdWZmIGZ1bGwgY292ZXJhZ2UgdGVzdCAoc2hvdWxkIHNheSAxMDAlKQorY292OiBwdWZ0CisJQHJtIC1mICouZ2NvdiAqLmdjZGEKKwlAcHVmdCAtdyB6ZXJvcy5yYXcgMj4mMSB8IGNhdCA+IC9kZXYvbnVsbAorCUBlY2hvICcwNCcgfCB4eGQgLXIgLXAgfCBwdWZ0IDI+IC9kZXYvbnVsbCB8fCB0ZXN0ICQkPyAtZXEgMgorCUBlY2hvICcwMCcgfCB4eGQgLXIgLXAgfCBwdWZ0IDI+IC9kZXYvbnVsbCB8fCB0ZXN0ICQkPyAtZXEgMgorCUBlY2hvICcwMCAwMCAwMCAwMCAwMCcgfCB4eGQgLXIgLXAgfCBwdWZ0IDI+IC9kZXYvbnVsbCB8fCB0ZXN0ICQkPyAtZXEgMjU0CisJQGVjaG8gJzAwIDAxIDAwIGZlIGZmJyB8IHh4ZCAtciAtcCB8IHB1ZnQgMj4gL2Rldi9udWxsIHx8IHRlc3QgJCQ/IC1lcSAyCisJQGVjaG8gJzAxIDAxIDAwIGZlIGZmIDBhJyB8IHh4ZCAtciAtcCB8IHB1ZnQgLWYgMj4mMSB8IGNhdCA+IC9kZXYvbnVsbAorCUBlY2hvICcwMiA3ZSBmZiBmZicgfCB4eGQgLXIgLXAgfCBwdWZ0IDI+IC9kZXYvbnVsbCB8fCB0ZXN0ICQkPyAtZXEgMjQ2CisJQGVjaG8gJzAyJyB8IHh4ZCAtciAtcCB8IHB1ZnQgMj4gL2Rldi9udWxsIHx8IHRlc3QgJCQ/IC1lcSAyCisJQGVjaG8gJzA0IDgwIDQ5IDkyIDI0IDQ5IDkyIDI0IDBmIGI0IGZmIGZmIGMzIDA0JyB8IHh4ZCAtciAtcCB8IHB1ZnQgMj4gL2Rldi9udWxsIHx8IHRlc3QgJCQ/IC1lcSAyCisJQGVjaG8gJzA0IDgwIDQ5IDkyIDI0IDQ5IDkyIDI0IDcxIGZmIGZmIDkzIDExIDAwJyB8IHh4ZCAtciAtcCB8IHB1ZnQgMj4gL2Rldi9udWxsIHx8IHRlc3QgJCQ/IC1lcSAyNDkKKwlAZWNobyAnMDQgYzAgODEgMDggMDAgMDAgMDAgMDAgMjAgN2YgZWIgMGIgMDAgMDAnIHwgeHhkIC1yIC1wIHwgcHVmdCAyPiAvZGV2L251bGwgfHwgdGVzdCAkJD8gLWVxIDI0NgorCUBlY2hvICcwYiAwMCAwMCcgfCB4eGQgLXIgLXAgfCBwdWZ0IC1mIDI+JjEgfCBjYXQgPiAvZGV2L251bGwKKwlAZWNobyAnMWEgMDcnIHwgeHhkIC1yIC1wIHwgcHVmdCAyPiAvZGV2L251bGwgfHwgdGVzdCAkJD8gLWVxIDI0NgorCUBlY2hvICcwYyBjMCA4MSAwMCAwMCAwMCAwMCAwMCA5MCBmZiA2YiAwNCcgfCB4eGQgLXIgLXAgfCBwdWZ0IDI+IC9kZXYvbnVsbCB8fCB0ZXN0ICQkPyAtZXEgMjQ1CisJQHB1ZnQgLWYgemVyb3MucmF3IDI+JjEgfCBjYXQgPiAvZGV2L251bGwKKwlAZWNobyAnZmMgMDAgMDAnIHwgeHhkIC1yIC1wIHwgcHVmdCAyPiAvZGV2L251bGwgfHwgdGVzdCAkJD8gLWVxIDI1MworCUBlY2hvICcwNCAwMCBmZSBmZicgfCB4eGQgLXIgLXAgfCBwdWZ0IDI+IC9kZXYvbnVsbCB8fCB0ZXN0ICQkPyAtZXEgMjUyCisJQGVjaG8gJzA0IDAwIDI0IDQ5JyB8IHh4ZCAtciAtcCB8IHB1ZnQgMj4gL2Rldi9udWxsIHx8IHRlc3QgJCQ/IC1lcSAyNTEKKwlAZWNobyAnMDQgODAgNDkgOTIgMjQgNDkgOTIgMjQgMGYgYjQgZmYgZmYgYzMgODQnIHwgeHhkIC1yIC1wIHwgcHVmdCAyPiAvZGV2L251bGwgfHwgdGVzdCAkJD8gLWVxIDI0OAorCUBlY2hvICcwNCAwMCAyNCBlOSBmZiBmZicgfCB4eGQgLXIgLXAgfCBwdWZ0IDI+IC9kZXYvbnVsbCB8fCB0ZXN0ICQkPyAtZXEgMjUwCisJQGVjaG8gJzA0IDAwIDI0IGU5IGZmIDZkJyB8IHh4ZCAtciAtcCB8IHB1ZnQgMj4gL2Rldi9udWxsIHx8IHRlc3QgJCQ/IC1lcSAyNDcKKwlAZ2NvdiAtbiBwdWZmLmMKKworY2xlYW46CisJcm0gLWYgcHVmZiBwdWZ0ICoubyAqLmdjKgpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvcHVmZi9SRUFETUUgYi9zcmMvY29udHJpYi9wdWZmL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmM0Y2I1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbnRyaWIvcHVmZi9SRUFETUUKQEAgLTAsMCArMSw2MyBAQAorUHVmZiAtLSBBIFNpbXBsZSBJbmZsYXRlCiszIE1hciAyMDAzCitNYXJrIEFkbGVyCittYWRsZXJAYWx1bW5pLmNhbHRlY2guZWR1CisKK1doYXQgdGhpcyBpcyAtLQorCitwdWZmLmMgcHJvdmlkZXMgdGhlIHJvdXRpbmUgcHVmZigpIHRvIGRlY29tcHJlc3MgdGhlIGRlZmxhdGUgZGF0YSBmb3JtYXQuICBJdAorZG9lcyBzbyBtb3JlIHNsb3dseSB0aGFuIHpsaWIsIGJ1dCB0aGUgY29kZSBpcyBhYm91dCBvbmUtZmlmdGggdGhlIHNpemUgb2YgdGhlCitpbmZsYXRlIGNvZGUgaW4gemxpYiwgYW5kIHdyaXR0ZW4gdG8gYmUgdmVyeSBlYXN5IHRvIHJlYWQuCisKK1doeSBJIHdyb3RlIHRoaXMgLS0KKworcHVmZi5jIHdhcyB3cml0dGVuIHRvIGRvY3VtZW50IHRoZSBkZWZsYXRlIGZvcm1hdCB1bmFtYmlndW91c2x5LCBieSB2aXJ0dWUgb2YKK2JlaW5nIHdvcmtpbmcgQyBjb2RlLiAgSXQgaXMgbWVhbnQgdG8gc3VwcGxlbWVudCBSRkMgMTk1MSwgd2hpY2ggZm9ybWFsbHkKK2Rlc2NyaWJlcyB0aGUgZGVmbGF0ZSBmb3JtYXQuICBJIGhhdmUgcmVjZWl2ZWQgbWFueSBxdWVzdGlvbnMgb24gZGV0YWlscyBvZiB0aGUKK2RlZmxhdGUgZm9ybWF0LCBhbmQgSSBob3BlIHRoYXQgcmVhZGluZyB0aGlzIGNvZGUgd2lsbCBhbnN3ZXIgdGhvc2UgcXVlc3Rpb25zLgorcHVmZi5jIGlzIGhlYXZpbHkgY29tbWVudGVkIHdpdGggZGV0YWlscyBvZiB0aGUgZGVmbGF0ZSBmb3JtYXQsIGVzcGVjaWFsbHkKK3Rob3NlIGxpdHRsZSBub29rcyBhbmQgY3JhbmllcyBvZiB0aGUgZm9ybWF0IHRoYXQgbWlnaHQgbm90IGJlIG9idmlvdXMgZnJvbSBhCitzcGVjaWZpY2F0aW9uLgorCitwdWZmLmMgbWF5IGFsc28gYmUgdXNlZnVsIGluIGFwcGxpY2F0aW9ucyB3aGVyZSBjb2RlIHNpemUgb3IgbWVtb3J5IHVzYWdlIGlzIGEKK3ZlcnkgbGltaXRlZCByZXNvdXJjZSwgYW5kIHNwZWVkIGlzIG5vdCBhcyBpbXBvcnRhbnQuCisKK0hvdyB0byB1c2UgaXQgLS0KKworV2VsbCwgbW9zdCBsaWtlbHkgeW91IHNob3VsZCBqdXN0IGJlIHJlYWRpbmcgcHVmZi5jIGFuZCB1c2luZyB6bGliIGZvciBhY3R1YWwKK2FwcGxpY2F0aW9ucywgYnV0IGlmIHlvdSBtdXN0IC4uLgorCitJbmNsdWRlIHB1ZmYuaCBpbiB5b3VyIGNvZGUsIHdoaWNoIHByb3ZpZGVzIHRoaXMgcHJvdG90eXBlOgorCitpbnQgcHVmZih1bnNpZ25lZCBjaGFyICpkZXN0LCAgICAgICAgICAgLyogcG9pbnRlciB0byBkZXN0aW5hdGlvbiBwb2ludGVyICovCisgICAgICAgICB1bnNpZ25lZCBsb25nICpkZXN0bGVuLCAgICAgICAgLyogYW1vdW50IG9mIG91dHB1dCBzcGFjZSAqLworICAgICAgICAgdW5zaWduZWQgY2hhciAqc291cmNlLCAgICAgICAgIC8qIHBvaW50ZXIgdG8gc291cmNlIGRhdGEgcG9pbnRlciAqLworICAgICAgICAgdW5zaWduZWQgbG9uZyAqc291cmNlbGVuKTsgICAgIC8qIGFtb3VudCBvZiBpbnB1dCBhdmFpbGFibGUgKi8KKworVGhlbiB5b3UgY2FuIGNhbGwgcHVmZigpIHRvIGRlY29tcHJlc3MgYSBkZWZsYXRlIHN0cmVhbSB0aGF0IGlzIGluIG1lbW9yeSBpbgoraXRzIGVudGlyZXR5IGF0IHNvdXJjZSwgdG8gYSBzdWZmaWNpZW50bHkgc2l6ZWQgYmxvY2sgb2YgbWVtb3J5IGZvciB0aGUKK2RlY29tcHJlc3NlZCBkYXRhIGF0IGRlc3QuICBwdWZmKCkgaXMgdGhlIG9ubHkgZXh0ZXJuYWwgc3ltYm9sIGluIHB1ZmYuYyAgVGhlCitvbmx5IEMgbGlicmFyeSBmdW5jdGlvbnMgdGhhdCBwdWZmLmMgbmVlZHMgYXJlIHNldGptcCgpIGFuZCBsb25nam1wKCksIHdoaWNoCithcmUgdXNlZCB0byBzaW1wbGlmeSBlcnJvciBjaGVja2luZyBpbiB0aGUgY29kZSB0byBpbXByb3ZlIHJlYWRhYmlsdHkuICBwdWZmLmMKK2RvZXMgbm8gbWVtb3J5IGFsbG9jYXRpb24sIGFuZCB1c2VzIGxlc3MgdGhhbiAySyBieXRlcyBvZmYgb2YgdGhlIHN0YWNrLgorCitJZiBkZXN0bGVuIGlzIG5vdCBlbm91Z2ggc3BhY2UgZm9yIHRoZSB1bmNvbXByZXNzZWQgZGF0YSwgdGhlbiBpbmZsYXRlIHdpbGwKK3JldHVybiBhbiBlcnJvciB3aXRob3V0IHdyaXRpbmcgbW9yZSB0aGFuIGRlc3RsZW4gYnl0ZXMuICBOb3RlIHRoYXQgdGhpcyBtZWFucwordGhhdCBpbiBvcmRlciB0byBkZWNvbXByZXNzIHRoZSBkZWZsYXRlIGRhdGEgc3VjY2Vzc2Z1bGx5LCB5b3UgbmVlZCB0byBrbm93Cit0aGUgc2l6ZSBvZiB0aGUgdW5jb21wcmVzc2VkIGRhdGEgYWhlYWQgb2YgdGltZS4KKworSWYgbmVlZGVkLCBwdWZmKCkgY2FuIGRldGVybWluZSB0aGUgc2l6ZSBvZiB0aGUgdW5jb21wcmVzc2VkIGRhdGEgd2l0aCBubworb3V0cHV0IHNwYWNlLiAgVGhpcyBpcyBkb25lIGJ5IHBhc3NpbmcgZGVzdCBlcXVhbCB0byAodW5zaWduZWQgY2hhciAqKTAuICBUaGVuCit0aGUgaW5pdGlhbCB2YWx1ZSBvZiAqZGVzdGxlbiBpcyBpZ25vcmVkIGFuZCAqZGVzdGxlbiBpcyBzZXQgdG8gdGhlIGxlbmd0aCBvZgordGhlIHVuY29tcHJlc3NlZCBkYXRhLiAgU28gaWYgdGhlIHNpemUgb2YgdGhlIHVuY29tcHJlc3NlZCBkYXRhIGlzIG5vdCBrbm93biwKK3RoZW4gdHdvIHBhc3NlcyBvZiBwdWZmKCkgY2FuIGJlIHVzZWQtLWZpcnN0IHRvIGRldGVybWluZSB0aGUgc2l6ZSwgYW5kIHNlY29uZAordG8gZG8gdGhlIGFjdHVhbCBpbmZsYXRpb24gYWZ0ZXIgYWxsb2NhdGluZyB0aGUgYXBwcm9wcmlhdGUgbWVtb3J5LiAgTm90CitwcmV0dHksIGJ1dCBpdCB3b3Jrcy4gIChUaGlzIGlzIG9uZSBvZiB0aGUgcmVhc29ucyB5b3Ugc2hvdWxkIGJlIHVzaW5nIHpsaWIuKQorCitUaGUgZGVmbGF0ZSBmb3JtYXQgaXMgc2VsZi10ZXJtaW5hdGluZy4gIElmIHRoZSBkZWZsYXRlIHN0cmVhbSBkb2VzIG5vdCBlbmQKK2luICpzb3VyY2VsZW4gYnl0ZXMsIHB1ZmYoKSB3aWxsIHJldHVybiBhbiBlcnJvciB3aXRob3V0IHJlYWRpbmcgYXQgb3IgcGFzdAorZW5kc291cmNlLgorCitPbiByZXR1cm4sICpzb3VyY2VsZW4gaXMgdXBkYXRlZCB0byB0aGUgYW1vdW50IG9mIGlucHV0IGRhdGEgY29uc3VtZWQsIGFuZAorKmRlc3RsZW4gaXMgdXBkYXRlZCB0byB0aGUgc2l6ZSBvZiB0aGUgdW5jb21wcmVzc2VkIGRhdGEuICBTZWUgdGhlIGNvbW1lbnRzCitpbiBwdWZmLmMgZm9yIHRoZSBwb3NzaWJsZSByZXR1cm4gY29kZXMgZm9yIHB1ZmYoKS4KZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL3B1ZmYvcHVmZi5jIGIvc3JjL2NvbnRyaWIvcHVmZi9wdWZmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZjOTBkNwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb250cmliL3B1ZmYvcHVmZi5jCkBAIC0wLDAgKzEsODQwIEBACisvKgorICogcHVmZi5jCisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAxMyBNYXJrIEFkbGVyCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gcHVmZi5oCisgKiB2ZXJzaW9uIDIuMywgMjEgSmFuIDIwMTMKKyAqCisgKiBwdWZmLmMgaXMgYSBzaW1wbGUgaW5mbGF0ZSB3cml0dGVuIHRvIGJlIGFuIHVuYW1iaWd1b3VzIHdheSB0byBzcGVjaWZ5IHRoZQorICogZGVmbGF0ZSBmb3JtYXQuICBJdCBpcyBub3Qgd3JpdHRlbiBmb3Igc3BlZWQgYnV0IHJhdGhlciBzaW1wbGljaXR5LiAgQXMgYQorICogc2lkZSBiZW5lZml0LCB0aGlzIGNvZGUgbWlnaHQgYWN0dWFsbHkgYmUgdXNlZnVsIHdoZW4gc21hbGwgY29kZSBpcyBtb3JlCisgKiBpbXBvcnRhbnQgdGhhbiBzcGVlZCwgc3VjaCBhcyBib290c3RyYXAgYXBwbGljYXRpb25zLiAgRm9yIHR5cGljYWwgZGVmbGF0ZQorICogZGF0YSwgemxpYidzIGluZmxhdGUoKSBpcyBhYm91dCBmb3VyIHRpbWVzIGFzIGZhc3QgYXMgcHVmZigpLiAgemxpYidzCisgKiBpbmZsYXRlIGNvbXBpbGVzIHRvIGFyb3VuZCAyMEsgb24gbXkgbWFjaGluZSwgd2hlcmVhcyBwdWZmLmMgY29tcGlsZXMgdG8KKyAqIGFyb3VuZCA0SyBvbiBteSBtYWNoaW5lIChhIFBvd2VyUEMgdXNpbmcgR05VIGNjKS4gIElmIHRoZSBmYXN0ZXIgZGVjb2RlKCkKKyAqIGZ1bmN0aW9uIGhlcmUgaXMgdXNlZCwgdGhlbiBwdWZmKCkgaXMgb25seSB0d2ljZSBhcyBzbG93IGFzIHpsaWIncworICogaW5mbGF0ZSgpLgorICoKKyAqIEFsbCBkeW5hbWljYWxseSBhbGxvY2F0ZWQgbWVtb3J5IGNvbWVzIGZyb20gdGhlIHN0YWNrLiAgVGhlIHN0YWNrIHJlcXVpcmVkCisgKiBpcyBsZXNzIHRoYW4gMksgYnl0ZXMuICBUaGlzIGNvZGUgaXMgY29tcGF0aWJsZSB3aXRoIDE2LWJpdCBpbnQncyBhbmQKKyAqIGFzc3VtZXMgdGhhdCBsb25nJ3MgYXJlIGF0IGxlYXN0IDMyIGJpdHMuICBwdWZmLmMgdXNlcyB0aGUgc2hvcnQgZGF0YSB0eXBlLAorICogYXNzdW1lZCB0byBiZSAxNiBiaXRzLCBmb3IgYXJyYXlzIGluIG9yZGVyIHRvIGNvbnNlcnZlIG1lbW9yeS4gIFRoZSBjb2RlCisgKiB3b3JrcyB3aGV0aGVyIGludGVnZXJzIGFyZSBzdG9yZWQgYmlnIGVuZGlhbiBvciBsaXR0bGUgZW5kaWFuLgorICoKKyAqIEluIHRoZSBjb21tZW50cyBiZWxvdyBhcmUgIkZvcm1hdCBub3RlcyIgdGhhdCBkZXNjcmliZSB0aGUgaW5mbGF0ZSBwcm9jZXNzCisgKiBhbmQgZG9jdW1lbnQgc29tZSBvZiB0aGUgbGVzcyBvYnZpb3VzIGFzcGVjdHMgb2YgdGhlIGZvcm1hdC4gIFRoaXMgc291cmNlCisgKiBjb2RlIGlzIG1lYW50IHRvIHN1cHBsZW1lbnQgUkZDIDE5NTEsIHdoaWNoIGZvcm1hbGx5IGRlc2NyaWJlcyB0aGUgZGVmbGF0ZQorICogZm9ybWF0OgorICoKKyAqICAgIGh0dHA6Ly93d3cuemxpYi5vcmcvcmZjLWRlZmxhdGUuaHRtbAorICovCisKKy8qCisgKiBDaGFuZ2UgaGlzdG9yeToKKyAqCisgKiAxLjAgIDEwIEZlYiAyMDAyICAgICAtIEZpcnN0IHZlcnNpb24KKyAqIDEuMSAgMTcgRmViIDIwMDIgICAgIC0gQ2xhcmlmaWNhdGlvbnMgb2Ygc29tZSBjb21tZW50cyBhbmQgbm90ZXMKKyAqICAgICAgICAgICAgICAgICAgICAgIC0gVXBkYXRlIHB1ZmYoKSBkZXN0IGFuZCBzb3VyY2UgcG9pbnRlcnMgb24gbmVnYXRpdmUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzIHRvIGZhY2lsaXRhdGUgZGVidWdnaW5nIGRlZmxhdG9ycworICogICAgICAgICAgICAgICAgICAgICAgLSBSZW1vdmUgbG9uZ2VzdCBmcm9tIHN0cnVjdCBodWZmbWFuIC0tIG5vdCBuZWVkZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIC0gU2ltcGxpZnkgb2Zmc1tdIGluZGV4IGluIGNvbnN0cnVjdCgpCisgKiAgICAgICAgICAgICAgICAgICAgICAtIEFkZCBpbnB1dCBzaXplIGFuZCBjaGVja2luZywgdXNpbmcgbG9uZ2ptcCgpIHRvCisgKiAgICAgICAgICAgICAgICAgICAgICAgIG1haW50YWluIGVhc3kgcmVhZGFiaWxpdHkKKyAqICAgICAgICAgICAgICAgICAgICAgIC0gVXNlIHNob3J0IGRhdGEgdHlwZSBmb3IgbGFyZ2UgYXJyYXlzCisgKiAgICAgICAgICAgICAgICAgICAgICAtIFVzZSBwb2ludGVycyBpbnN0ZWFkIG9mIGxvbmcgdG8gc3BlY2lmeSBzb3VyY2UgYW5kCisgKiAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uIHNpemVzIHRvIGF2b2lkIGFyYml0cmFyeSA0IEdCIGxpbWl0cworICogMS4yICAxNyBNYXIgMjAwMiAgICAgLSBBZGQgZmFzdGVyIHZlcnNpb24gb2YgZGVjb2RlKCksIGRvdWJsZXMgc3BlZWQgKCEpLAorICogICAgICAgICAgICAgICAgICAgICAgICBidXQgbGVhdmUgc2ltcGxlIHZlcnNpb24gZm9yIHJlYWRhYmlsdHkKKyAqICAgICAgICAgICAgICAgICAgICAgIC0gTWFrZSBzdXJlIGludmFsaWQgZGlzdGFuY2VzIGRldGVjdGVkIGlmIHBvaW50ZXJzCisgKiAgICAgICAgICAgICAgICAgICAgICAgIGFyZSAxNiBiaXRzCisgKiAgICAgICAgICAgICAgICAgICAgICAtIEZpeCBmaXhlZCBjb2RlcyB0YWJsZSBlcnJvcgorICogICAgICAgICAgICAgICAgICAgICAgLSBQcm92aWRlIGEgc2Nhbm5pbmcgbW9kZSBmb3IgZGV0ZXJtaW5pbmcgc2l6ZSBvZgorICogICAgICAgICAgICAgICAgICAgICAgICB1bmNvbXByZXNzZWQgZGF0YQorICogMS4zICAyMCBNYXIgMjAwMiAgICAgLSBHbyBiYWNrIHRvIGxlbmd0aHMgZm9yIHB1ZmYoKSBwYXJhbWV0ZXJzIFtHYWlsbHldCisgKiAgICAgICAgICAgICAgICAgICAgICAtIEFkZCBhIHB1ZmYuaCBmaWxlIGZvciB0aGUgaW50ZXJmYWNlCisgKiAgICAgICAgICAgICAgICAgICAgICAtIEFkZCBicmFjZXMgaW4gcHVmZigpIGZvciBlbHNlIGRvIFtHYWlsbHldCisgKiAgICAgICAgICAgICAgICAgICAgICAtIFVzZSBpbmRleGVzIGluc3RlYWQgb2YgcG9pbnRlcnMgZm9yIHJlYWRhYmlsaXR5CisgKiAxLjQgIDMxIE1hciAyMDAyICAgICAtIFNpbXBsaWZ5IGNvbnN0cnVjdCgpIGNvZGUgc2V0IGNoZWNrCisgKiAgICAgICAgICAgICAgICAgICAgICAtIEZpeCBzb21lIGNvbW1lbnRzCisgKiAgICAgICAgICAgICAgICAgICAgICAtIEFkZCBGSVhMQ09ERVMgI2RlZmluZQorICogMS41ICAgNiBBcHIgMjAwMiAgICAgLSBNaW5vciBjb21tZW50IGZpeGVzCisgKiAxLjYgICA3IEF1ZyAyMDAyICAgICAtIE1pbm9yIGZvcm1hdCBjaGFuZ2VzCisgKiAxLjcgICAzIE1hciAyMDAzICAgICAtIEFkZGVkIHRlc3QgY29kZSBmb3IgZGlzdHJpYnV0aW9uCisgKiAgICAgICAgICAgICAgICAgICAgICAtIEFkZGVkIHpsaWItbGlrZSBsaWNlbnNlCisgKiAxLjggICA5IEphbiAyMDA0ICAgICAtIEFkZGVkIHNvbWUgY29tbWVudHMgb24gbm8gZGlzdGFuY2UgY29kZXMgY2FzZQorICogMS45ICAyMSBGZWIgMjAwOCAgICAgLSBGaXggYnVnIG9uIDE2LWJpdCBpbnRlZ2VyIGFyY2hpdGVjdHVyZXMgW1BvaGxhbmRdCisgKiAgICAgICAgICAgICAgICAgICAgICAtIENhdGNoIG1pc3NpbmcgZW5kLW9mLWJsb2NrIHN5bWJvbCBlcnJvcgorICogMi4wICAyNSBKdWwgMjAwOCAgICAgLSBBZGQgI2RlZmluZSB0byBwZXJtaXQgZGlzdGFuY2UgdG9vIGZhciBiYWNrCisgKiAgICAgICAgICAgICAgICAgICAgICAtIEFkZCBvcHRpb24gaW4gVEVTVCBjb2RlIGZvciBwdWZmIHRvIHdyaXRlIHRoZSBkYXRhCisgKiAgICAgICAgICAgICAgICAgICAgICAtIEFkZCBvcHRpb24gaW4gVEVTVCBjb2RlIHRvIHNraXAgaW5wdXQgYnl0ZXMKKyAqICAgICAgICAgICAgICAgICAgICAgIC0gQWxsb3cgVEVTVCBjb2RlIHRvIHJlYWQgZnJvbSBwaXBlZCBzdGRpbgorICogMi4xICAgNCBBcHIgMjAxMCAgICAgLSBBdm9pZCB2YXJpYWJsZSBpbml0aWFsaXphdGlvbiBmb3IgaGFwcGllciBjb21waWxlcnMKKyAqICAgICAgICAgICAgICAgICAgICAgIC0gQXZvaWQgdW5zaWduZWQgY29tcGFyaXNvbnMgZm9yIGV2ZW4gaGFwcGllciBjb21waWxlcnMKKyAqIDIuMiAgMjUgQXByIDIwMTAgICAgIC0gRml4IGJ1ZyBpbiB2YXJpYWJsZSBpbml0aWFsaXphdGlvbnMgW09iZXJodW1lcl0KKyAqICAgICAgICAgICAgICAgICAgICAgIC0gQWRkIGNvbnN0IHdoZXJlIGFwcHJvcHJpYXRlIFtPYmVyaHVtZXJdCisgKiAgICAgICAgICAgICAgICAgICAgICAtIFNwbGl0IGlmJ3MgYW5kID8ncyBmb3IgY292ZXJhZ2UgdGVzdGluZworICogICAgICAgICAgICAgICAgICAgICAgLSBCcmVhayBvdXQgdGVzdCBjb2RlIHRvIHNlcGFyYXRlIGZpbGUKKyAqICAgICAgICAgICAgICAgICAgICAgIC0gTW92ZSBOSUwgdG8gcHVmZi5oCisgKiAgICAgICAgICAgICAgICAgICAgICAtIEFsbG93IGluY29tcGxldGUgY29kZSBvbmx5IGlmIHNpbmdsZSBjb2RlIGxlbmd0aCBpcyAxCisgKiAgICAgICAgICAgICAgICAgICAgICAtIEFkZCBmdWxsIGNvZGUgY292ZXJhZ2UgdGVzdCB0byBNYWtlZmlsZQorICogMi4zICAyMSBKYW4gMjAxMyAgICAgLSBDaGVjayBmb3IgaW52YWxpZCBjb2RlIGxlbmd0aCBjb2RlcyBpbiBkeW5hbWljIGJsb2NrcworICovCisKKyNpbmNsdWRlIDxzZXRqbXAuaD4gICAgICAgICAgICAgLyogZm9yIHNldGptcCgpLCBsb25nam1wKCksIGFuZCBqbXBfYnVmICovCisjaW5jbHVkZSAicHVmZi5oIiAgICAgICAgICAgICAgIC8qIHByb3RvdHlwZSBmb3IgcHVmZigpICovCisKKyNkZWZpbmUgbG9jYWwgc3RhdGljICAgICAgICAgICAgLyogZm9yIGxvY2FsIGZ1bmN0aW9uIGRlZmluaXRpb25zICovCisKKy8qCisgKiBNYXhpbXVtcyBmb3IgYWxsb2NhdGlvbnMgYW5kIGxvb3BzLiAgSXQgaXMgbm90IHVzZWZ1bCB0byBjaGFuZ2UgdGhlc2UgLS0KKyAqIHRoZXkgYXJlIGZpeGVkIGJ5IHRoZSBkZWZsYXRlIGZvcm1hdC4KKyAqLworI2RlZmluZSBNQVhCSVRTIDE1ICAgICAgICAgICAgICAvKiBtYXhpbXVtIGJpdHMgaW4gYSBjb2RlICovCisjZGVmaW5lIE1BWExDT0RFUyAyODYgICAgICAgICAgIC8qIG1heGltdW0gbnVtYmVyIG9mIGxpdGVyYWwvbGVuZ3RoIGNvZGVzICovCisjZGVmaW5lIE1BWERDT0RFUyAzMCAgICAgICAgICAgIC8qIG1heGltdW0gbnVtYmVyIG9mIGRpc3RhbmNlIGNvZGVzICovCisjZGVmaW5lIE1BWENPREVTIChNQVhMQ09ERVMrTUFYRENPREVTKSAgLyogbWF4aW11bSBjb2RlcyBsZW5ndGhzIHRvIHJlYWQgKi8KKyNkZWZpbmUgRklYTENPREVTIDI4OCAgICAgICAgICAgLyogbnVtYmVyIG9mIGZpeGVkIGxpdGVyYWwvbGVuZ3RoIGNvZGVzICovCisKKy8qIGlucHV0IGFuZCBvdXRwdXQgc3RhdGUgKi8KK3N0cnVjdCBzdGF0ZSB7CisgICAgLyogb3V0cHV0IHN0YXRlICovCisgICAgdW5zaWduZWQgY2hhciAqb3V0OyAgICAgICAgIC8qIG91dHB1dCBidWZmZXIgKi8KKyAgICB1bnNpZ25lZCBsb25nIG91dGxlbjsgICAgICAgLyogYXZhaWxhYmxlIHNwYWNlIGF0IG91dCAqLworICAgIHVuc2lnbmVkIGxvbmcgb3V0Y250OyAgICAgICAvKiBieXRlcyB3cml0dGVuIHRvIG91dCBzbyBmYXIgKi8KKworICAgIC8qIGlucHV0IHN0YXRlICovCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW47ICAgIC8qIGlucHV0IGJ1ZmZlciAqLworICAgIHVuc2lnbmVkIGxvbmcgaW5sZW47ICAgICAgICAvKiBhdmFpbGFibGUgaW5wdXQgYXQgaW4gKi8KKyAgICB1bnNpZ25lZCBsb25nIGluY250OyAgICAgICAgLyogYnl0ZXMgcmVhZCBzbyBmYXIgKi8KKyAgICBpbnQgYml0YnVmOyAgICAgICAgICAgICAgICAgLyogYml0IGJ1ZmZlciAqLworICAgIGludCBiaXRjbnQ7ICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgYml0cyBpbiBiaXQgYnVmZmVyICovCisKKyAgICAvKiBpbnB1dCBsaW1pdCBlcnJvciByZXR1cm4gc3RhdGUgZm9yIGJpdHMoKSBhbmQgZGVjb2RlKCkgKi8KKyAgICBqbXBfYnVmIGVudjsKK307CisKKy8qCisgKiBSZXR1cm4gbmVlZCBiaXRzIGZyb20gdGhlIGlucHV0IHN0cmVhbS4gIFRoaXMgYWx3YXlzIGxlYXZlcyBsZXNzIHRoYW4KKyAqIGVpZ2h0IGJpdHMgaW4gdGhlIGJ1ZmZlci4gIGJpdHMoKSB3b3JrcyBwcm9wZXJseSBmb3IgbmVlZCA9PSAwLgorICoKKyAqIEZvcm1hdCBub3RlczoKKyAqCisgKiAtIEJpdHMgYXJlIHN0b3JlZCBpbiBieXRlcyBmcm9tIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQgdG8gdGhlIG1vc3QKKyAqICAgc2lnbmlmaWNhbnQgYml0LiAgVGhlcmVmb3JlIGJpdHMgYXJlIGRyb3BwZWQgZnJvbSB0aGUgYm90dG9tIG9mIHRoZSBiaXQKKyAqICAgYnVmZmVyLCB1c2luZyBzaGlmdCByaWdodCwgYW5kIG5ldyBieXRlcyBhcmUgYXBwZW5kZWQgdG8gdGhlIHRvcCBvZiB0aGUKKyAqICAgYml0IGJ1ZmZlciwgdXNpbmcgc2hpZnQgbGVmdC4KKyAqLworbG9jYWwgaW50IGJpdHMoc3RydWN0IHN0YXRlICpzLCBpbnQgbmVlZCkKK3sKKyAgICBsb25nIHZhbDsgICAgICAgICAgIC8qIGJpdCBhY2N1bXVsYXRvciAoY2FuIHVzZSB1cCB0byAyMCBiaXRzKSAqLworCisgICAgLyogbG9hZCBhdCBsZWFzdCBuZWVkIGJpdHMgaW50byB2YWwgKi8KKyAgICB2YWwgPSBzLT5iaXRidWY7CisgICAgd2hpbGUgKHMtPmJpdGNudCA8IG5lZWQpIHsKKyAgICAgICAgaWYgKHMtPmluY250ID09IHMtPmlubGVuKQorICAgICAgICAgICAgbG9uZ2ptcChzLT5lbnYsIDEpOyAgICAgICAgIC8qIG91dCBvZiBpbnB1dCAqLworICAgICAgICB2YWwgfD0gKGxvbmcpKHMtPmluW3MtPmluY250KytdKSA8PCBzLT5iaXRjbnQ7ICAvKiBsb2FkIGVpZ2h0IGJpdHMgKi8KKyAgICAgICAgcy0+Yml0Y250ICs9IDg7CisgICAgfQorCisgICAgLyogZHJvcCBuZWVkIGJpdHMgYW5kIHVwZGF0ZSBidWZmZXIsIGFsd2F5cyB6ZXJvIHRvIHNldmVuIGJpdHMgbGVmdCAqLworICAgIHMtPmJpdGJ1ZiA9IChpbnQpKHZhbCA+PiBuZWVkKTsKKyAgICBzLT5iaXRjbnQgLT0gbmVlZDsKKworICAgIC8qIHJldHVybiBuZWVkIGJpdHMsIHplcm9pbmcgdGhlIGJpdHMgYWJvdmUgdGhhdCAqLworICAgIHJldHVybiAoaW50KSh2YWwgJiAoKDFMIDw8IG5lZWQpIC0gMSkpOworfQorCisvKgorICogUHJvY2VzcyBhIHN0b3JlZCBibG9jay4KKyAqCisgKiBGb3JtYXQgbm90ZXM6CisgKgorICogLSBBZnRlciB0aGUgdHdvLWJpdCBzdG9yZWQgYmxvY2sgdHlwZSAoMDApLCB0aGUgc3RvcmVkIGJsb2NrIGxlbmd0aCBhbmQKKyAqICAgc3RvcmVkIGJ5dGVzIGFyZSBieXRlLWFsaWduZWQgZm9yIGZhc3QgY29weWluZy4gIFRoZXJlZm9yZSBhbnkgbGVmdG92ZXIKKyAqICAgYml0cyBpbiB0aGUgYnl0ZSB0aGF0IGhhcyB0aGUgbGFzdCBiaXQgb2YgdGhlIHR5cGUsIGFzIG1hbnkgYXMgc2V2ZW4sIGFyZQorICogICBkaXNjYXJkZWQuICBUaGUgdmFsdWUgb2YgdGhlIGRpc2NhcmRlZCBiaXRzIGFyZSBub3QgZGVmaW5lZCBhbmQgc2hvdWxkIG5vdAorICogICBiZSBjaGVja2VkIGFnYWluc3QgYW55IGV4cGVjdGF0aW9uLgorICoKKyAqIC0gVGhlIHNlY29uZCBpbnZlcnRlZCBjb3B5IG9mIHRoZSBzdG9yZWQgYmxvY2sgbGVuZ3RoIGRvZXMgbm90IGhhdmUgdG8gYmUKKyAqICAgY2hlY2tlZCwgYnV0IGl0J3MgcHJvYmFibHkgYSBnb29kIGlkZWEgdG8gZG8gc28gYW55d2F5LgorICoKKyAqIC0gQSBzdG9yZWQgYmxvY2sgY2FuIGhhdmUgemVybyBsZW5ndGguICBUaGlzIGlzIHNvbWV0aW1lcyB1c2VkIHRvIGJ5dGUtYWxpZ24KKyAqICAgc3Vic2V0cyBvZiB0aGUgY29tcHJlc3NlZCBkYXRhIGZvciByYW5kb20gYWNjZXNzIG9yIHBhcnRpYWwgcmVjb3ZlcnkuCisgKi8KK2xvY2FsIGludCBzdG9yZWQoc3RydWN0IHN0YXRlICpzKQoreworICAgIHVuc2lnbmVkIGxlbjsgICAgICAgLyogbGVuZ3RoIG9mIHN0b3JlZCBibG9jayAqLworCisgICAgLyogZGlzY2FyZCBsZWZ0b3ZlciBiaXRzIGZyb20gY3VycmVudCBieXRlIChhc3N1bWVzIHMtPmJpdGNudCA8IDgpICovCisgICAgcy0+Yml0YnVmID0gMDsKKyAgICBzLT5iaXRjbnQgPSAwOworCisgICAgLyogZ2V0IGxlbmd0aCBhbmQgY2hlY2sgYWdhaW5zdCBpdHMgb25lJ3MgY29tcGxlbWVudCAqLworICAgIGlmIChzLT5pbmNudCArIDQgPiBzLT5pbmxlbikKKyAgICAgICAgcmV0dXJuIDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vdCBlbm91Z2ggaW5wdXQgKi8KKyAgICBsZW4gPSBzLT5pbltzLT5pbmNudCsrXTsKKyAgICBsZW4gfD0gcy0+aW5bcy0+aW5jbnQrK10gPDwgODsKKyAgICBpZiAocy0+aW5bcy0+aW5jbnQrK10gIT0gKH5sZW4gJiAweGZmKSB8fAorICAgICAgICBzLT5pbltzLT5pbmNudCsrXSAhPSAoKH5sZW4gPj4gOCkgJiAweGZmKSkKKyAgICAgICAgcmV0dXJuIC0yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRpZG4ndCBtYXRjaCBjb21wbGVtZW50ISAqLworCisgICAgLyogY29weSBsZW4gYnl0ZXMgZnJvbSBpbiB0byBvdXQgKi8KKyAgICBpZiAocy0+aW5jbnQgKyBsZW4gPiBzLT5pbmxlbikKKyAgICAgICAgcmV0dXJuIDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vdCBlbm91Z2ggaW5wdXQgKi8KKyAgICBpZiAocy0+b3V0ICE9IE5JTCkgeworICAgICAgICBpZiAocy0+b3V0Y250ICsgbGVuID4gcy0+b3V0bGVuKQorICAgICAgICAgICAgcmV0dXJuIDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbm90IGVub3VnaCBvdXRwdXQgc3BhY2UgKi8KKyAgICAgICAgd2hpbGUgKGxlbi0tKQorICAgICAgICAgICAgcy0+b3V0W3MtPm91dGNudCsrXSA9IHMtPmluW3MtPmluY250KytdOworICAgIH0KKyAgICBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGp1c3Qgc2Nhbm5pbmcgKi8KKyAgICAgICAgcy0+b3V0Y250ICs9IGxlbjsKKyAgICAgICAgcy0+aW5jbnQgKz0gbGVuOworICAgIH0KKworICAgIC8qIGRvbmUgd2l0aCBhIHZhbGlkIHN0b3JlZCBibG9jayAqLworICAgIHJldHVybiAwOworfQorCisvKgorICogSHVmZm1hbiBjb2RlIGRlY29kaW5nIHRhYmxlcy4gIGNvdW50WzEuLk1BWEJJVFNdIGlzIHRoZSBudW1iZXIgb2Ygc3ltYm9scyBvZgorICogZWFjaCBsZW5ndGgsIHdoaWNoIGZvciBhIGNhbm9uaWNhbCBjb2RlIGFyZSBzdGVwcGVkIHRocm91Z2ggaW4gb3JkZXIuCisgKiBzeW1ib2xbXSBhcmUgdGhlIHN5bWJvbCB2YWx1ZXMgaW4gY2Fub25pY2FsIG9yZGVyLCB3aGVyZSB0aGUgbnVtYmVyIG9mCisgKiBlbnRyaWVzIGlzIHRoZSBzdW0gb2YgdGhlIGNvdW50cyBpbiBjb3VudFtdLiAgVGhlIGRlY29kaW5nIHByb2Nlc3MgY2FuIGJlCisgKiBzZWVuIGluIHRoZSBmdW5jdGlvbiBkZWNvZGUoKSBiZWxvdy4KKyAqLworc3RydWN0IGh1ZmZtYW4geworICAgIHNob3J0ICpjb3VudDsgICAgICAgLyogbnVtYmVyIG9mIHN5bWJvbHMgb2YgZWFjaCBsZW5ndGggKi8KKyAgICBzaG9ydCAqc3ltYm9sOyAgICAgIC8qIGNhbm9uaWNhbGx5IG9yZGVyZWQgc3ltYm9scyAqLworfTsKKworLyoKKyAqIERlY29kZSBhIGNvZGUgZnJvbSB0aGUgc3RyZWFtIHMgdXNpbmcgaHVmZm1hbiB0YWJsZSBoLiAgUmV0dXJuIHRoZSBzeW1ib2wgb3IKKyAqIGEgbmVnYXRpdmUgdmFsdWUgaWYgdGhlcmUgaXMgYW4gZXJyb3IuICBJZiBhbGwgb2YgdGhlIGxlbmd0aHMgYXJlIHplcm8sIGkuZS4KKyAqIGFuIGVtcHR5IGNvZGUsIG9yIGlmIHRoZSBjb2RlIGlzIGluY29tcGxldGUgYW5kIGFuIGludmFsaWQgY29kZSBpcyByZWNlaXZlZCwKKyAqIHRoZW4gLTEwIGlzIHJldHVybmVkIGFmdGVyIHJlYWRpbmcgTUFYQklUUyBiaXRzLgorICoKKyAqIEZvcm1hdCBub3RlczoKKyAqCisgKiAtIFRoZSBjb2RlcyBhcyBzdG9yZWQgaW4gdGhlIGNvbXByZXNzZWQgZGF0YSBhcmUgYml0LXJldmVyc2VkIHJlbGF0aXZlIHRvCisgKiAgIGEgc2ltcGxlIGludGVnZXIgb3JkZXJpbmcgb2YgY29kZXMgb2YgdGhlIHNhbWUgbGVuZ3Rocy4gIEhlbmNlIGJlbG93IHRoZQorICogICBiaXRzIGFyZSBwdWxsZWQgZnJvbSB0aGUgY29tcHJlc3NlZCBkYXRhIG9uZSBhdCBhIHRpbWUgYW5kIHVzZWQgdG8KKyAqICAgYnVpbGQgdGhlIGNvZGUgdmFsdWUgcmV2ZXJzZWQgZnJvbSB3aGF0IGlzIGluIHRoZSBzdHJlYW0gaW4gb3JkZXIgdG8KKyAqICAgcGVybWl0IHNpbXBsZSBpbnRlZ2VyIGNvbXBhcmlzb25zIGZvciBkZWNvZGluZy4gIEEgdGFibGUtYmFzZWQgZGVjb2RpbmcKKyAqICAgc2NoZW1lIChhcyB1c2VkIGluIHpsaWIpIGRvZXMgbm90IG5lZWQgdG8gZG8gdGhpcyByZXZlcnNhbC4KKyAqCisgKiAtIFRoZSBmaXJzdCBjb2RlIGZvciB0aGUgc2hvcnRlc3QgbGVuZ3RoIGlzIGFsbCB6ZXJvcy4gIFN1YnNlcXVlbnQgY29kZXMgb2YKKyAqICAgdGhlIHNhbWUgbGVuZ3RoIGFyZSBzaW1wbHkgaW50ZWdlciBpbmNyZW1lbnRzIG9mIHRoZSBwcmV2aW91cyBjb2RlLiAgV2hlbgorICogICBtb3ZpbmcgdXAgYSBsZW5ndGgsIGEgemVybyBiaXQgaXMgYXBwZW5kZWQgdG8gdGhlIGNvZGUuICBGb3IgYSBjb21wbGV0ZQorICogICBjb2RlLCB0aGUgbGFzdCBjb2RlIG9mIHRoZSBsb25nZXN0IGxlbmd0aCB3aWxsIGJlIGFsbCBvbmVzLgorICoKKyAqIC0gSW5jb21wbGV0ZSBjb2RlcyBhcmUgaGFuZGxlZCBieSB0aGlzIGRlY29kZXIsIHNpbmNlIHRoZXkgYXJlIHBlcm1pdHRlZAorICogICBpbiB0aGUgZGVmbGF0ZSBmb3JtYXQuICBTZWUgdGhlIGZvcm1hdCBub3RlcyBmb3IgZml4ZWQoKSBhbmQgZHluYW1pYygpLgorICovCisjaWZkZWYgU0xPVworbG9jYWwgaW50IGRlY29kZShzdHJ1Y3Qgc3RhdGUgKnMsIGNvbnN0IHN0cnVjdCBodWZmbWFuICpoKQoreworICAgIGludCBsZW47ICAgICAgICAgICAgLyogY3VycmVudCBudW1iZXIgb2YgYml0cyBpbiBjb2RlICovCisgICAgaW50IGNvZGU7ICAgICAgICAgICAvKiBsZW4gYml0cyBiZWluZyBkZWNvZGVkICovCisgICAgaW50IGZpcnN0OyAgICAgICAgICAvKiBmaXJzdCBjb2RlIG9mIGxlbmd0aCBsZW4gKi8KKyAgICBpbnQgY291bnQ7ICAgICAgICAgIC8qIG51bWJlciBvZiBjb2RlcyBvZiBsZW5ndGggbGVuICovCisgICAgaW50IGluZGV4OyAgICAgICAgICAvKiBpbmRleCBvZiBmaXJzdCBjb2RlIG9mIGxlbmd0aCBsZW4gaW4gc3ltYm9sIHRhYmxlICovCisKKyAgICBjb2RlID0gZmlyc3QgPSBpbmRleCA9IDA7CisgICAgZm9yIChsZW4gPSAxOyBsZW4gPD0gTUFYQklUUzsgbGVuKyspIHsKKyAgICAgICAgY29kZSB8PSBiaXRzKHMsIDEpOyAgICAgICAgICAgICAvKiBnZXQgbmV4dCBiaXQgKi8KKyAgICAgICAgY291bnQgPSBoLT5jb3VudFtsZW5dOworICAgICAgICBpZiAoY29kZSAtIGNvdW50IDwgZmlyc3QpICAgICAgIC8qIGlmIGxlbmd0aCBsZW4sIHJldHVybiBzeW1ib2wgKi8KKyAgICAgICAgICAgIHJldHVybiBoLT5zeW1ib2xbaW5kZXggKyAoY29kZSAtIGZpcnN0KV07CisgICAgICAgIGluZGV4ICs9IGNvdW50OyAgICAgICAgICAgICAgICAgLyogZWxzZSB1cGRhdGUgZm9yIG5leHQgbGVuZ3RoICovCisgICAgICAgIGZpcnN0ICs9IGNvdW50OworICAgICAgICBmaXJzdCA8PD0gMTsKKyAgICAgICAgY29kZSA8PD0gMTsKKyAgICB9CisgICAgcmV0dXJuIC0xMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmFuIG91dCBvZiBjb2RlcyAqLworfQorCisvKgorICogQSBmYXN0ZXIgdmVyc2lvbiBvZiBkZWNvZGUoKSBmb3IgcmVhbCBhcHBsaWNhdGlvbnMgb2YgdGhpcyBjb2RlLiAgIEl0J3Mgbm90CisgKiBhcyByZWFkYWJsZSwgYnV0IGl0IG1ha2VzIHB1ZmYoKSB0d2ljZSBhcyBmYXN0LiAgQW5kIGl0IG9ubHkgbWFrZXMgdGhlIGNvZGUKKyAqIGEgZmV3IHBlcmNlbnQgbGFyZ2VyLgorICovCisjZWxzZSAvKiAhU0xPVyAqLworbG9jYWwgaW50IGRlY29kZShzdHJ1Y3Qgc3RhdGUgKnMsIGNvbnN0IHN0cnVjdCBodWZmbWFuICpoKQoreworICAgIGludCBsZW47ICAgICAgICAgICAgLyogY3VycmVudCBudW1iZXIgb2YgYml0cyBpbiBjb2RlICovCisgICAgaW50IGNvZGU7ICAgICAgICAgICAvKiBsZW4gYml0cyBiZWluZyBkZWNvZGVkICovCisgICAgaW50IGZpcnN0OyAgICAgICAgICAvKiBmaXJzdCBjb2RlIG9mIGxlbmd0aCBsZW4gKi8KKyAgICBpbnQgY291bnQ7ICAgICAgICAgIC8qIG51bWJlciBvZiBjb2RlcyBvZiBsZW5ndGggbGVuICovCisgICAgaW50IGluZGV4OyAgICAgICAgICAvKiBpbmRleCBvZiBmaXJzdCBjb2RlIG9mIGxlbmd0aCBsZW4gaW4gc3ltYm9sIHRhYmxlICovCisgICAgaW50IGJpdGJ1ZjsgICAgICAgICAvKiBiaXRzIGZyb20gc3RyZWFtICovCisgICAgaW50IGxlZnQ7ICAgICAgICAgICAvKiBiaXRzIGxlZnQgaW4gbmV4dCBvciBsZWZ0IHRvIHByb2Nlc3MgKi8KKyAgICBzaG9ydCAqbmV4dDsgICAgICAgIC8qIG5leHQgbnVtYmVyIG9mIGNvZGVzICovCisKKyAgICBiaXRidWYgPSBzLT5iaXRidWY7CisgICAgbGVmdCA9IHMtPmJpdGNudDsKKyAgICBjb2RlID0gZmlyc3QgPSBpbmRleCA9IDA7CisgICAgbGVuID0gMTsKKyAgICBuZXh0ID0gaC0+Y291bnQgKyAxOworICAgIHdoaWxlICgxKSB7CisgICAgICAgIHdoaWxlIChsZWZ0LS0pIHsKKyAgICAgICAgICAgIGNvZGUgfD0gYml0YnVmICYgMTsKKyAgICAgICAgICAgIGJpdGJ1ZiA+Pj0gMTsKKyAgICAgICAgICAgIGNvdW50ID0gKm5leHQrKzsKKyAgICAgICAgICAgIGlmIChjb2RlIC0gY291bnQgPCBmaXJzdCkgeyAvKiBpZiBsZW5ndGggbGVuLCByZXR1cm4gc3ltYm9sICovCisgICAgICAgICAgICAgICAgcy0+Yml0YnVmID0gYml0YnVmOworICAgICAgICAgICAgICAgIHMtPmJpdGNudCA9IChzLT5iaXRjbnQgLSBsZW4pICYgNzsKKyAgICAgICAgICAgICAgICByZXR1cm4gaC0+c3ltYm9sW2luZGV4ICsgKGNvZGUgLSBmaXJzdCldOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5kZXggKz0gY291bnQ7ICAgICAgICAgICAgIC8qIGVsc2UgdXBkYXRlIGZvciBuZXh0IGxlbmd0aCAqLworICAgICAgICAgICAgZmlyc3QgKz0gY291bnQ7CisgICAgICAgICAgICBmaXJzdCA8PD0gMTsKKyAgICAgICAgICAgIGNvZGUgPDw9IDE7CisgICAgICAgICAgICBsZW4rKzsKKyAgICAgICAgfQorICAgICAgICBsZWZ0ID0gKE1BWEJJVFMrMSkgLSBsZW47CisgICAgICAgIGlmIChsZWZ0ID09IDApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKHMtPmluY250ID09IHMtPmlubGVuKQorICAgICAgICAgICAgbG9uZ2ptcChzLT5lbnYsIDEpOyAgICAgICAgIC8qIG91dCBvZiBpbnB1dCAqLworICAgICAgICBiaXRidWYgPSBzLT5pbltzLT5pbmNudCsrXTsKKyAgICAgICAgaWYgKGxlZnQgPiA4KQorICAgICAgICAgICAgbGVmdCA9IDg7CisgICAgfQorICAgIHJldHVybiAtMTA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJhbiBvdXQgb2YgY29kZXMgKi8KK30KKyNlbmRpZiAvKiBTTE9XICovCisKKy8qCisgKiBHaXZlbiB0aGUgbGlzdCBvZiBjb2RlIGxlbmd0aHMgbGVuZ3RoWzAuLm4tMV0gcmVwcmVzZW50aW5nIGEgY2Fub25pY2FsCisgKiBIdWZmbWFuIGNvZGUgZm9yIG4gc3ltYm9scywgY29uc3RydWN0IHRoZSB0YWJsZXMgcmVxdWlyZWQgdG8gZGVjb2RlIHRob3NlCisgKiBjb2Rlcy4gIFRob3NlIHRhYmxlcyBhcmUgdGhlIG51bWJlciBvZiBjb2RlcyBvZiBlYWNoIGxlbmd0aCwgYW5kIHRoZSBzeW1ib2xzCisgKiBzb3J0ZWQgYnkgbGVuZ3RoLCByZXRhaW5pbmcgdGhlaXIgb3JpZ2luYWwgb3JkZXIgd2l0aGluIGVhY2ggbGVuZ3RoLiAgVGhlCisgKiByZXR1cm4gdmFsdWUgaXMgemVybyBmb3IgYSBjb21wbGV0ZSBjb2RlIHNldCwgbmVnYXRpdmUgZm9yIGFuIG92ZXItCisgKiBzdWJzY3JpYmVkIGNvZGUgc2V0LCBhbmQgcG9zaXRpdmUgZm9yIGFuIGluY29tcGxldGUgY29kZSBzZXQuICBUaGUgdGFibGVzCisgKiBjYW4gYmUgdXNlZCBpZiB0aGUgcmV0dXJuIHZhbHVlIGlzIHplcm8gb3IgcG9zaXRpdmUsIGJ1dCB0aGV5IGNhbm5vdCBiZSB1c2VkCisgKiBpZiB0aGUgcmV0dXJuIHZhbHVlIGlzIG5lZ2F0aXZlLiAgSWYgdGhlIHJldHVybiB2YWx1ZSBpcyB6ZXJvLCBpdCBpcyBub3QKKyAqIHBvc3NpYmxlIGZvciBkZWNvZGUoKSB1c2luZyB0aGF0IHRhYmxlIHRvIHJldHVybiBhbiBlcnJvci0tYW55IHN0cmVhbSBvZgorICogZW5vdWdoIGJpdHMgd2lsbCByZXNvbHZlIHRvIGEgc3ltYm9sLiAgSWYgdGhlIHJldHVybiB2YWx1ZSBpcyBwb3NpdGl2ZSwgdGhlbgorICogaXQgaXMgcG9zc2libGUgZm9yIGRlY29kZSgpIHVzaW5nIHRoYXQgdGFibGUgdG8gcmV0dXJuIGFuIGVycm9yIGZvciByZWNlaXZlZAorICogY29kZXMgcGFzdCB0aGUgZW5kIG9mIHRoZSBpbmNvbXBsZXRlIGxlbmd0aHMuCisgKgorICogTm90IHVzZWQgYnkgZGVjb2RlKCksIGJ1dCB1c2VkIGZvciBlcnJvciBjaGVja2luZywgaC0+Y291bnRbMF0gaXMgdGhlIG51bWJlcgorICogb2YgdGhlIG4gc3ltYm9scyBub3QgaW4gdGhlIGNvZGUuICBTbyBuIC0gaC0+Y291bnRbMF0gaXMgdGhlIG51bWJlciBvZgorICogY29kZXMuICBUaGlzIGlzIHVzZWZ1bCBmb3IgY2hlY2tpbmcgZm9yIGluY29tcGxldGUgY29kZXMgdGhhdCBoYXZlIG1vcmUgdGhhbgorICogb25lIHN5bWJvbCwgd2hpY2ggaXMgYW4gZXJyb3IgaW4gYSBkeW5hbWljIGJsb2NrLgorICoKKyAqIEFzc3VtcHRpb246IGZvciBhbGwgaSBpbiAwLi5uLTEsIDAgPD0gbGVuZ3RoW2ldIDw9IE1BWEJJVFMKKyAqIFRoaXMgaXMgYXNzdXJlZCBieSB0aGUgY29uc3RydWN0aW9uIG9mIHRoZSBsZW5ndGggYXJyYXlzIGluIGR5bmFtaWMoKSBhbmQKKyAqIGZpeGVkKCkgYW5kIGlzIG5vdCB2ZXJpZmllZCBieSBjb25zdHJ1Y3QoKS4KKyAqCisgKiBGb3JtYXQgbm90ZXM6CisgKgorICogLSBQZXJtaXR0ZWQgYW5kIGV4cGVjdGVkIGV4YW1wbGVzIG9mIGluY29tcGxldGUgY29kZXMgYXJlIG9uZSBvZiB0aGUgZml4ZWQKKyAqICAgY29kZXMgYW5kIGFueSBjb2RlIHdpdGggYSBzaW5nbGUgc3ltYm9sIHdoaWNoIGluIGRlZmxhdGUgaXMgY29kZWQgYXMgb25lCisgKiAgIGJpdCBpbnN0ZWFkIG9mIHplcm8gYml0cy4gIFNlZSB0aGUgZm9ybWF0IG5vdGVzIGZvciBmaXhlZCgpIGFuZCBkeW5hbWljKCkuCisgKgorICogLSBXaXRoaW4gYSBnaXZlbiBjb2RlIGxlbmd0aCwgdGhlIHN5bWJvbHMgYXJlIGtlcHQgaW4gYXNjZW5kaW5nIG9yZGVyIGZvcgorICogICB0aGUgY29kZSBiaXRzIGRlZmluaXRpb24uCisgKi8KK2xvY2FsIGludCBjb25zdHJ1Y3Qoc3RydWN0IGh1ZmZtYW4gKmgsIGNvbnN0IHNob3J0ICpsZW5ndGgsIGludCBuKQoreworICAgIGludCBzeW1ib2w7ICAgICAgICAgLyogY3VycmVudCBzeW1ib2wgd2hlbiBzdGVwcGluZyB0aHJvdWdoIGxlbmd0aFtdICovCisgICAgaW50IGxlbjsgICAgICAgICAgICAvKiBjdXJyZW50IGxlbmd0aCB3aGVuIHN0ZXBwaW5nIHRocm91Z2ggaC0+Y291bnRbXSAqLworICAgIGludCBsZWZ0OyAgICAgICAgICAgLyogbnVtYmVyIG9mIHBvc3NpYmxlIGNvZGVzIGxlZnQgb2YgY3VycmVudCBsZW5ndGggKi8KKyAgICBzaG9ydCBvZmZzW01BWEJJVFMrMV07ICAgICAgLyogb2Zmc2V0cyBpbiBzeW1ib2wgdGFibGUgZm9yIGVhY2ggbGVuZ3RoICovCisKKyAgICAvKiBjb3VudCBudW1iZXIgb2YgY29kZXMgb2YgZWFjaCBsZW5ndGggKi8KKyAgICBmb3IgKGxlbiA9IDA7IGxlbiA8PSBNQVhCSVRTOyBsZW4rKykKKyAgICAgICAgaC0+Y291bnRbbGVuXSA9IDA7CisgICAgZm9yIChzeW1ib2wgPSAwOyBzeW1ib2wgPCBuOyBzeW1ib2wrKykKKyAgICAgICAgKGgtPmNvdW50W2xlbmd0aFtzeW1ib2xdXSkrKzsgICAvKiBhc3N1bWVzIGxlbmd0aHMgYXJlIHdpdGhpbiBib3VuZHMgKi8KKyAgICBpZiAoaC0+Y291bnRbMF0gPT0gbikgICAgICAgICAgICAgICAvKiBubyBjb2RlcyEgKi8KKyAgICAgICAgcmV0dXJuIDA7ICAgICAgICAgICAgICAgICAgICAgICAvKiBjb21wbGV0ZSwgYnV0IGRlY29kZSgpIHdpbGwgZmFpbCAqLworCisgICAgLyogY2hlY2sgZm9yIGFuIG92ZXItc3Vic2NyaWJlZCBvciBpbmNvbXBsZXRlIHNldCBvZiBsZW5ndGhzICovCisgICAgbGVmdCA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb25lIHBvc3NpYmxlIGNvZGUgb2YgemVybyBsZW5ndGggKi8KKyAgICBmb3IgKGxlbiA9IDE7IGxlbiA8PSBNQVhCSVRTOyBsZW4rKykgeworICAgICAgICBsZWZ0IDw8PSAxOyAgICAgICAgICAgICAgICAgICAgIC8qIG9uZSBtb3JlIGJpdCwgZG91YmxlIGNvZGVzIGxlZnQgKi8KKyAgICAgICAgbGVmdCAtPSBoLT5jb3VudFtsZW5dOyAgICAgICAgICAvKiBkZWR1Y3QgY291bnQgZnJvbSBwb3NzaWJsZSBjb2RlcyAqLworICAgICAgICBpZiAobGVmdCA8IDApCisgICAgICAgICAgICByZXR1cm4gbGVmdDsgICAgICAgICAgICAgICAgLyogb3Zlci1zdWJzY3JpYmVkLS1yZXR1cm4gbmVnYXRpdmUgKi8KKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsZWZ0ID4gMCBtZWFucyBpbmNvbXBsZXRlICovCisKKyAgICAvKiBnZW5lcmF0ZSBvZmZzZXRzIGludG8gc3ltYm9sIHRhYmxlIGZvciBlYWNoIGxlbmd0aCBmb3Igc29ydGluZyAqLworICAgIG9mZnNbMV0gPSAwOworICAgIGZvciAobGVuID0gMTsgbGVuIDwgTUFYQklUUzsgbGVuKyspCisgICAgICAgIG9mZnNbbGVuICsgMV0gPSBvZmZzW2xlbl0gKyBoLT5jb3VudFtsZW5dOworCisgICAgLyoKKyAgICAgKiBwdXQgc3ltYm9scyBpbiB0YWJsZSBzb3J0ZWQgYnkgbGVuZ3RoLCBieSBzeW1ib2wgb3JkZXIgd2l0aGluIGVhY2gKKyAgICAgKiBsZW5ndGgKKyAgICAgKi8KKyAgICBmb3IgKHN5bWJvbCA9IDA7IHN5bWJvbCA8IG47IHN5bWJvbCsrKQorICAgICAgICBpZiAobGVuZ3RoW3N5bWJvbF0gIT0gMCkKKyAgICAgICAgICAgIGgtPnN5bWJvbFtvZmZzW2xlbmd0aFtzeW1ib2xdXSsrXSA9IHN5bWJvbDsKKworICAgIC8qIHJldHVybiB6ZXJvIGZvciBjb21wbGV0ZSBzZXQsIHBvc2l0aXZlIGZvciBpbmNvbXBsZXRlIHNldCAqLworICAgIHJldHVybiBsZWZ0OworfQorCisvKgorICogRGVjb2RlIGxpdGVyYWwvbGVuZ3RoIGFuZCBkaXN0YW5jZSBjb2RlcyB1bnRpbCBhbiBlbmQtb2YtYmxvY2sgY29kZS4KKyAqCisgKiBGb3JtYXQgbm90ZXM6CisgKgorICogLSBDb21wcmVzc2VkIGRhdGEgdGhhdCBpcyBhZnRlciB0aGUgYmxvY2sgdHlwZSBpZiBmaXhlZCBvciBhZnRlciB0aGUgY29kZQorICogICBkZXNjcmlwdGlvbiBpZiBkeW5hbWljIGlzIGEgY29tYmluYXRpb24gb2YgbGl0ZXJhbHMgYW5kIGxlbmd0aC9kaXN0YW5jZQorICogICBwYWlycyB0ZXJtaW5hdGVkIGJ5IGFuZCBlbmQtb2YtYmxvY2sgY29kZS4gIExpdGVyYWxzIGFyZSBzaW1wbHkgSHVmZm1hbgorICogICBjb2RlZCBieXRlcy4gIEEgbGVuZ3RoL2Rpc3RhbmNlIHBhaXIgaXMgYSBjb2RlZCBsZW5ndGggZm9sbG93ZWQgYnkgYQorICogICBjb2RlZCBkaXN0YW5jZSB0byByZXByZXNlbnQgYSBzdHJpbmcgdGhhdCBvY2N1cnMgZWFybGllciBpbiB0aGUKKyAqICAgdW5jb21wcmVzc2VkIGRhdGEgdGhhdCBvY2N1cnMgYWdhaW4gYXQgdGhlIGN1cnJlbnQgbG9jYXRpb24uCisgKgorICogLSBMaXRlcmFscywgbGVuZ3RocywgYW5kIHRoZSBlbmQtb2YtYmxvY2sgY29kZSBhcmUgY29tYmluZWQgaW50byBhIHNpbmdsZQorICogICBjb2RlIG9mIHVwIHRvIDI4NiBzeW1ib2xzLiAgVGhleSBhcmUgMjU2IGxpdGVyYWxzICgwLi4yNTUpLCAyOSBsZW5ndGgKKyAqICAgc3ltYm9scyAoMjU3Li4yODUpLCBhbmQgdGhlIGVuZC1vZi1ibG9jayBzeW1ib2wgKDI1NikuCisgKgorICogLSBUaGVyZSBhcmUgMjU2IHBvc3NpYmxlIGxlbmd0aHMgKDMuLjI1OCksIGFuZCBzbyAyOSBzeW1ib2xzIGFyZSBub3QgZW5vdWdoCisgKiAgIHRvIHJlcHJlc2VudCBhbGwgb2YgdGhvc2UuICBMZW5ndGhzIDMuLjEwIGFuZCAyNTggYXJlIGluIGZhY3QgcmVwcmVzZW50ZWQKKyAqICAgYnkganVzdCBhIGxlbmd0aCBzeW1ib2wuICBMZW5ndGhzIDExLi4yNTcgYXJlIHJlcHJlc2VudGVkIGFzIGEgc3ltYm9sIGFuZAorICogICBzb21lIG51bWJlciBvZiBleHRyYSBiaXRzIHRoYXQgYXJlIGFkZGVkIGFzIGFuIGludGVnZXIgdG8gdGhlIGJhc2UgbGVuZ3RoCisgKiAgIG9mIHRoZSBsZW5ndGggc3ltYm9sLiAgVGhlIG51bWJlciBvZiBleHRyYSBiaXRzIGlzIGRldGVybWluZWQgYnkgdGhlIGJhc2UKKyAqICAgbGVuZ3RoIHN5bWJvbC4gIFRoZXNlIGFyZSBpbiB0aGUgc3RhdGljIGFycmF5cyBiZWxvdywgbGVuc1tdIGZvciB0aGUgYmFzZQorICogICBsZW5ndGhzIGFuZCBsZXh0W10gZm9yIHRoZSBjb3JyZXNwb25kaW5nIG51bWJlciBvZiBleHRyYSBiaXRzLgorICoKKyAqIC0gVGhlIHJlYXNvbiB0aGF0IDI1OCBnZXRzIGl0cyBvd24gc3ltYm9sIGlzIHRoYXQgdGhlIGxvbmdlc3QgbGVuZ3RoIGlzIHVzZWQKKyAqICAgb2Z0ZW4gaW4gaGlnaGx5IHJlZHVuZGFudCBmaWxlcy4gIE5vdGUgdGhhdCAyNTggY2FuIGFsc28gYmUgY29kZWQgYXMgdGhlCisgKiAgIGJhc2UgdmFsdWUgMjI3IHBsdXMgdGhlIG1heGltdW0gZXh0cmEgdmFsdWUgb2YgMzEuICBXaGlsZSBhIGdvb2QgZGVmbGF0ZQorICogICBzaG91bGQgbmV2ZXIgZG8gdGhpcywgaXQgaXMgbm90IGFuIGVycm9yLCBhbmQgc2hvdWxkIGJlIGRlY29kZWQgcHJvcGVybHkuCisgKgorICogLSBJZiBhIGxlbmd0aCBpcyBkZWNvZGVkLCBpbmNsdWRpbmcgaXRzIGV4dHJhIGJpdHMgaWYgYW55LCB0aGVuIGl0IGlzCisgKiAgIGZvbGxvd2VkIGEgZGlzdGFuY2UgY29kZS4gIFRoZXJlIGFyZSB1cCB0byAzMCBkaXN0YW5jZSBzeW1ib2xzLiAgQWdhaW4KKyAqICAgdGhlcmUgYXJlIG1hbnkgbW9yZSBwb3NzaWJsZSBkaXN0YW5jZXMgKDEuLjMyNzY4KSwgc28gZXh0cmEgYml0cyBhcmUgYWRkZWQKKyAqICAgdG8gYSBiYXNlIHZhbHVlIHJlcHJlc2VudGVkIGJ5IHRoZSBzeW1ib2wuICBUaGUgZGlzdGFuY2VzIDEuLjQgZ2V0IHRoZWlyCisgKiAgIG93biBzeW1ib2wsIGJ1dCB0aGUgcmVzdCByZXF1aXJlIGV4dHJhIGJpdHMuICBUaGUgYmFzZSBkaXN0YW5jZXMgYW5kCisgKiAgIGNvcnJlc3BvbmRpbmcgbnVtYmVyIG9mIGV4dHJhIGJpdHMgYXJlIGJlbG93IGluIHRoZSBzdGF0aWMgYXJyYXlzIGRpc3RbXQorICogICBhbmQgZGV4dFtdLgorICoKKyAqIC0gTGl0ZXJhbCBieXRlcyBhcmUgc2ltcGx5IHdyaXR0ZW4gdG8gdGhlIG91dHB1dC4gIEEgbGVuZ3RoL2Rpc3RhbmNlIHBhaXIgaXMKKyAqICAgYW4gaW5zdHJ1Y3Rpb24gdG8gY29weSBwcmV2aW91c2x5IHVuY29tcHJlc3NlZCBieXRlcyB0byB0aGUgb3V0cHV0LiAgVGhlCisgKiAgIGNvcHkgaXMgZnJvbSBkaXN0YW5jZSBieXRlcyBiYWNrIGluIHRoZSBvdXRwdXQgc3RyZWFtLCBjb3B5aW5nIGZvciBsZW5ndGgKKyAqICAgYnl0ZXMuCisgKgorICogLSBEaXN0YW5jZXMgcG9pbnRpbmcgYmVmb3JlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG91dHB1dCBkYXRhIGFyZSBub3QKKyAqICAgcGVybWl0dGVkLgorICoKKyAqIC0gT3ZlcmxhcHBlZCBjb3BpZXMsIHdoZXJlIHRoZSBsZW5ndGggaXMgZ3JlYXRlciB0aGFuIHRoZSBkaXN0YW5jZSwgYXJlCisgKiAgIGFsbG93ZWQgYW5kIGNvbW1vbi4gIEZvciBleGFtcGxlLCBhIGRpc3RhbmNlIG9mIG9uZSBhbmQgYSBsZW5ndGggb2YgMjU4CisgKiAgIHNpbXBseSBjb3BpZXMgdGhlIGxhc3QgYnl0ZSAyNTggdGltZXMuICBBIGRpc3RhbmNlIG9mIGZvdXIgYW5kIGEgbGVuZ3RoIG9mCisgKiAgIHR3ZWx2ZSBjb3BpZXMgdGhlIGxhc3QgZm91ciBieXRlcyB0aHJlZSB0aW1lcy4gIEEgc2ltcGxlIGZvcndhcmQgY29weQorICogICBpZ25vcmluZyB3aGV0aGVyIHRoZSBsZW5ndGggaXMgZ3JlYXRlciB0aGFuIHRoZSBkaXN0YW5jZSBvciBub3QgaW1wbGVtZW50cworICogICB0aGlzIGNvcnJlY3RseS4gIFlvdSBzaG91bGQgbm90IHVzZSBtZW1jcHkoKSBzaW5jZSBpdHMgYmVoYXZpb3IgaXMgbm90CisgKiAgIGRlZmluZWQgZm9yIG92ZXJsYXBwZWQgYXJyYXlzLiAgWW91IHNob3VsZCBub3QgdXNlIG1lbW1vdmUoKSBvciBiY29weSgpCisgKiAgIHNpbmNlIHRob3VnaCB0aGVpciBiZWhhdmlvciAtaXMtIGRlZmluZWQgZm9yIG92ZXJsYXBwaW5nIGFycmF5cywgaXQgaXMKKyAqICAgZGVmaW5lZCB0byBkbyB0aGUgd3JvbmcgdGhpbmcgaW4gdGhpcyBjYXNlLgorICovCitsb2NhbCBpbnQgY29kZXMoc3RydWN0IHN0YXRlICpzLAorICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBodWZmbWFuICpsZW5jb2RlLAorICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBodWZmbWFuICpkaXN0Y29kZSkKK3sKKyAgICBpbnQgc3ltYm9sOyAgICAgICAgIC8qIGRlY29kZWQgc3ltYm9sICovCisgICAgaW50IGxlbjsgICAgICAgICAgICAvKiBsZW5ndGggZm9yIGNvcHkgKi8KKyAgICB1bnNpZ25lZCBkaXN0OyAgICAgIC8qIGRpc3RhbmNlIGZvciBjb3B5ICovCisgICAgc3RhdGljIGNvbnN0IHNob3J0IGxlbnNbMjldID0geyAvKiBTaXplIGJhc2UgZm9yIGxlbmd0aCBjb2RlcyAyNTcuLjI4NSAqLworICAgICAgICAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEzLCAxNSwgMTcsIDE5LCAyMywgMjcsIDMxLAorICAgICAgICAzNSwgNDMsIDUxLCA1OSwgNjcsIDgzLCA5OSwgMTE1LCAxMzEsIDE2MywgMTk1LCAyMjcsIDI1OH07CisgICAgc3RhdGljIGNvbnN0IHNob3J0IGxleHRbMjldID0geyAvKiBFeHRyYSBiaXRzIGZvciBsZW5ndGggY29kZXMgMjU3Li4yODUgKi8KKyAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMiwgMiwgMiwgMiwKKyAgICAgICAgMywgMywgMywgMywgNCwgNCwgNCwgNCwgNSwgNSwgNSwgNSwgMH07CisgICAgc3RhdGljIGNvbnN0IHNob3J0IGRpc3RzWzMwXSA9IHsgLyogT2Zmc2V0IGJhc2UgZm9yIGRpc3RhbmNlIGNvZGVzIDAuLjI5ICovCisgICAgICAgIDEsIDIsIDMsIDQsIDUsIDcsIDksIDEzLCAxNywgMjUsIDMzLCA0OSwgNjUsIDk3LCAxMjksIDE5MywKKyAgICAgICAgMjU3LCAzODUsIDUxMywgNzY5LCAxMDI1LCAxNTM3LCAyMDQ5LCAzMDczLCA0MDk3LCA2MTQ1LAorICAgICAgICA4MTkzLCAxMjI4OSwgMTYzODUsIDI0NTc3fTsKKyAgICBzdGF0aWMgY29uc3Qgc2hvcnQgZGV4dFszMF0gPSB7IC8qIEV4dHJhIGJpdHMgZm9yIGRpc3RhbmNlIGNvZGVzIDAuLjI5ICovCisgICAgICAgIDAsIDAsIDAsIDAsIDEsIDEsIDIsIDIsIDMsIDMsIDQsIDQsIDUsIDUsIDYsIDYsCisgICAgICAgIDcsIDcsIDgsIDgsIDksIDksIDEwLCAxMCwgMTEsIDExLAorICAgICAgICAxMiwgMTIsIDEzLCAxM307CisKKyAgICAvKiBkZWNvZGUgbGl0ZXJhbHMgYW5kIGxlbmd0aC9kaXN0YW5jZSBwYWlycyAqLworICAgIGRvIHsKKyAgICAgICAgc3ltYm9sID0gZGVjb2RlKHMsIGxlbmNvZGUpOworICAgICAgICBpZiAoc3ltYm9sIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBzeW1ib2w7ICAgICAgICAgICAgICAvKiBpbnZhbGlkIHN5bWJvbCAqLworICAgICAgICBpZiAoc3ltYm9sIDwgMjU2KSB7ICAgICAgICAgICAgIC8qIGxpdGVyYWw6IHN5bWJvbCBpcyB0aGUgYnl0ZSAqLworICAgICAgICAgICAgLyogd3JpdGUgb3V0IHRoZSBsaXRlcmFsICovCisgICAgICAgICAgICBpZiAocy0+b3V0ICE9IE5JTCkgeworICAgICAgICAgICAgICAgIGlmIChzLT5vdXRjbnQgPT0gcy0+b3V0bGVuKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgICAgICBzLT5vdXRbcy0+b3V0Y250XSA9IHN5bWJvbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHMtPm91dGNudCsrOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHN5bWJvbCA+IDI1NikgeyAgICAgICAgLyogbGVuZ3RoICovCisgICAgICAgICAgICAvKiBnZXQgYW5kIGNvbXB1dGUgbGVuZ3RoICovCisgICAgICAgICAgICBzeW1ib2wgLT0gMjU3OworICAgICAgICAgICAgaWYgKHN5bWJvbCA+PSAyOSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTEwOyAgICAgICAgICAgICAvKiBpbnZhbGlkIGZpeGVkIGNvZGUgKi8KKyAgICAgICAgICAgIGxlbiA9IGxlbnNbc3ltYm9sXSArIGJpdHMocywgbGV4dFtzeW1ib2xdKTsKKworICAgICAgICAgICAgLyogZ2V0IGFuZCBjaGVjayBkaXN0YW5jZSAqLworICAgICAgICAgICAgc3ltYm9sID0gZGVjb2RlKHMsIGRpc3Rjb2RlKTsKKyAgICAgICAgICAgIGlmIChzeW1ib2wgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2w7ICAgICAgICAgIC8qIGludmFsaWQgc3ltYm9sICovCisgICAgICAgICAgICBkaXN0ID0gZGlzdHNbc3ltYm9sXSArIGJpdHMocywgZGV4dFtzeW1ib2xdKTsKKyNpZm5kZWYgSU5GTEFURV9BTExPV19JTlZBTElEX0RJU1RBTkNFX1RPT0ZBUl9BUlJSCisgICAgICAgICAgICBpZiAoZGlzdCA+IHMtPm91dGNudCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTExOyAgICAgLyogZGlzdGFuY2UgdG9vIGZhciBiYWNrICovCisjZW5kaWYKKworICAgICAgICAgICAgLyogY29weSBsZW5ndGggYnl0ZXMgZnJvbSBkaXN0YW5jZSBieXRlcyBiYWNrICovCisgICAgICAgICAgICBpZiAocy0+b3V0ICE9IE5JTCkgeworICAgICAgICAgICAgICAgIGlmIChzLT5vdXRjbnQgKyBsZW4gPiBzLT5vdXRsZW4pCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgICAgIHdoaWxlIChsZW4tLSkgeworICAgICAgICAgICAgICAgICAgICBzLT5vdXRbcy0+b3V0Y250XSA9CisjaWZkZWYgSU5GTEFURV9BTExPV19JTlZBTElEX0RJU1RBTkNFX1RPT0ZBUl9BUlJSCisgICAgICAgICAgICAgICAgICAgICAgICBkaXN0ID4gcy0+b3V0Y250ID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDoKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPm91dFtzLT5vdXRjbnQgLSBkaXN0XTsKKyAgICAgICAgICAgICAgICAgICAgcy0+b3V0Y250Kys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHMtPm91dGNudCArPSBsZW47CisgICAgICAgIH0KKyAgICB9IHdoaWxlIChzeW1ib2wgIT0gMjU2KTsgICAgICAgICAgICAvKiBlbmQgb2YgYmxvY2sgc3ltYm9sICovCisKKyAgICAvKiBkb25lIHdpdGggYSB2YWxpZCBmaXhlZCBvciBkeW5hbWljIGJsb2NrICovCisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBQcm9jZXNzIGEgZml4ZWQgY29kZXMgYmxvY2suCisgKgorICogRm9ybWF0IG5vdGVzOgorICoKKyAqIC0gVGhpcyBibG9jayB0eXBlIGNhbiBiZSB1c2VmdWwgZm9yIGNvbXByZXNzaW5nIHNtYWxsIGFtb3VudHMgb2YgZGF0YSBmb3IKKyAqICAgd2hpY2ggdGhlIHNpemUgb2YgdGhlIGNvZGUgZGVzY3JpcHRpb25zIGluIGEgZHluYW1pYyBibG9jayBleGNlZWRzIHRoZQorICogICBiZW5lZml0IG9mIGN1c3RvbSBjb2RlcyBmb3IgdGhhdCBibG9jay4gIEZvciBmaXhlZCBjb2Rlcywgbm8gYml0cyBhcmUKKyAqICAgc3BlbnQgb24gY29kZSBkZXNjcmlwdGlvbnMuICBJbnN0ZWFkIHRoZSBjb2RlIGxlbmd0aHMgZm9yIGxpdGVyYWwvbGVuZ3RoCisgKiAgIGNvZGVzIGFuZCBkaXN0YW5jZSBjb2RlcyBhcmUgZml4ZWQuICBUaGUgc3BlY2lmaWMgbGVuZ3RocyBmb3IgZWFjaCBzeW1ib2wKKyAqICAgY2FuIGJlIHNlZW4gaW4gdGhlICJmb3IiIGxvb3BzIGJlbG93LgorICoKKyAqIC0gVGhlIGxpdGVyYWwvbGVuZ3RoIGNvZGUgaXMgY29tcGxldGUsIGJ1dCBoYXMgdHdvIHN5bWJvbHMgdGhhdCBhcmUgaW52YWxpZAorICogICBhbmQgc2hvdWxkIHJlc3VsdCBpbiBhbiBlcnJvciBpZiByZWNlaXZlZC4gIFRoaXMgY2Fubm90IGJlIGltcGxlbWVudGVkCisgKiAgIHNpbXBseSBhcyBhbiBpbmNvbXBsZXRlIGNvZGUgc2luY2UgdGhvc2UgdHdvIHN5bWJvbHMgYXJlIGluIHRoZSAibWlkZGxlIgorICogICBvZiB0aGUgY29kZS4gIFRoZXkgYXJlIGVpZ2h0IGJpdHMgbG9uZyBhbmQgdGhlIGxvbmdlc3QgbGl0ZXJhbC9sZW5ndGhcCisgKiAgIGNvZGUgaXMgbmluZSBiaXRzLiAgVGhlcmVmb3JlIHRoZSBjb2RlIG11c3QgYmUgY29uc3RydWN0ZWQgd2l0aCB0aG9zZQorICogICBzeW1ib2xzLCBhbmQgdGhlIGludmFsaWQgc3ltYm9scyBtdXN0IGJlIGRldGVjdGVkIGFmdGVyIGRlY29kaW5nLgorICoKKyAqIC0gVGhlIGZpeGVkIGRpc3RhbmNlIGNvZGVzIGFsc28gaGF2ZSB0d28gaW52YWxpZCBzeW1ib2xzIHRoYXQgc2hvdWxkIHJlc3VsdAorICogICBpbiBhbiBlcnJvciBpZiByZWNlaXZlZC4gIFNpbmNlIGFsbCBvZiB0aGUgZGlzdGFuY2UgY29kZXMgYXJlIHRoZSBzYW1lCisgKiAgIGxlbmd0aCwgdGhpcyBjYW4gYmUgaW1wbGVtZW50ZWQgYXMgYW4gaW5jb21wbGV0ZSBjb2RlLiAgVGhlbiB0aGUgaW52YWxpZAorICogICBjb2RlcyBhcmUgZGV0ZWN0ZWQgd2hpbGUgZGVjb2RpbmcuCisgKi8KK2xvY2FsIGludCBmaXhlZChzdHJ1Y3Qgc3RhdGUgKnMpCit7CisgICAgc3RhdGljIGludCB2aXJnaW4gPSAxOworICAgIHN0YXRpYyBzaG9ydCBsZW5jbnRbTUFYQklUUysxXSwgbGVuc3ltW0ZJWExDT0RFU107CisgICAgc3RhdGljIHNob3J0IGRpc3RjbnRbTUFYQklUUysxXSwgZGlzdHN5bVtNQVhEQ09ERVNdOworICAgIHN0YXRpYyBzdHJ1Y3QgaHVmZm1hbiBsZW5jb2RlLCBkaXN0Y29kZTsKKworICAgIC8qIGJ1aWxkIGZpeGVkIGh1ZmZtYW4gdGFibGVzIGlmIGZpcnN0IGNhbGwgKG1heSBub3QgYmUgdGhyZWFkIHNhZmUpICovCisgICAgaWYgKHZpcmdpbikgeworICAgICAgICBpbnQgc3ltYm9sOworICAgICAgICBzaG9ydCBsZW5ndGhzW0ZJWExDT0RFU107CisKKyAgICAgICAgLyogY29uc3RydWN0IGxlbmNvZGUgYW5kIGRpc3Rjb2RlICovCisgICAgICAgIGxlbmNvZGUuY291bnQgPSBsZW5jbnQ7CisgICAgICAgIGxlbmNvZGUuc3ltYm9sID0gbGVuc3ltOworICAgICAgICBkaXN0Y29kZS5jb3VudCA9IGRpc3RjbnQ7CisgICAgICAgIGRpc3Rjb2RlLnN5bWJvbCA9IGRpc3RzeW07CisKKyAgICAgICAgLyogbGl0ZXJhbC9sZW5ndGggdGFibGUgKi8KKyAgICAgICAgZm9yIChzeW1ib2wgPSAwOyBzeW1ib2wgPCAxNDQ7IHN5bWJvbCsrKQorICAgICAgICAgICAgbGVuZ3Roc1tzeW1ib2xdID0gODsKKyAgICAgICAgZm9yICg7IHN5bWJvbCA8IDI1Njsgc3ltYm9sKyspCisgICAgICAgICAgICBsZW5ndGhzW3N5bWJvbF0gPSA5OworICAgICAgICBmb3IgKDsgc3ltYm9sIDwgMjgwOyBzeW1ib2wrKykKKyAgICAgICAgICAgIGxlbmd0aHNbc3ltYm9sXSA9IDc7CisgICAgICAgIGZvciAoOyBzeW1ib2wgPCBGSVhMQ09ERVM7IHN5bWJvbCsrKQorICAgICAgICAgICAgbGVuZ3Roc1tzeW1ib2xdID0gODsKKyAgICAgICAgY29uc3RydWN0KCZsZW5jb2RlLCBsZW5ndGhzLCBGSVhMQ09ERVMpOworCisgICAgICAgIC8qIGRpc3RhbmNlIHRhYmxlICovCisgICAgICAgIGZvciAoc3ltYm9sID0gMDsgc3ltYm9sIDwgTUFYRENPREVTOyBzeW1ib2wrKykKKyAgICAgICAgICAgIGxlbmd0aHNbc3ltYm9sXSA9IDU7CisgICAgICAgIGNvbnN0cnVjdCgmZGlzdGNvZGUsIGxlbmd0aHMsIE1BWERDT0RFUyk7CisKKyAgICAgICAgLyogZG8gdGhpcyBqdXN0IG9uY2UgKi8KKyAgICAgICAgdmlyZ2luID0gMDsKKyAgICB9CisKKyAgICAvKiBkZWNvZGUgZGF0YSB1bnRpbCBlbmQtb2YtYmxvY2sgY29kZSAqLworICAgIHJldHVybiBjb2RlcyhzLCAmbGVuY29kZSwgJmRpc3Rjb2RlKTsKK30KKworLyoKKyAqIFByb2Nlc3MgYSBkeW5hbWljIGNvZGVzIGJsb2NrLgorICoKKyAqIEZvcm1hdCBub3RlczoKKyAqCisgKiAtIEEgZHluYW1pYyBibG9jayBzdGFydHMgd2l0aCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBsaXRlcmFsL2xlbmd0aCBhbmQKKyAqICAgZGlzdGFuY2UgY29kZXMgZm9yIHRoYXQgYmxvY2suICBOZXcgZHluYW1pYyBibG9ja3MgYWxsb3cgdGhlIGNvbXByZXNzb3IgdG8KKyAqICAgcmFwaWRseSBhZGFwdCB0byBjaGFuZ2luZyBkYXRhIHdpdGggbmV3IGNvZGVzIG9wdGltaXplZCBmb3IgdGhhdCBkYXRhLgorICoKKyAqIC0gVGhlIGNvZGVzIHVzZWQgYnkgdGhlIGRlZmxhdGUgZm9ybWF0IGFyZSAiY2Fub25pY2FsIiwgd2hpY2ggbWVhbnMgdGhhdAorICogICB0aGUgYWN0dWFsIGJpdHMgb2YgdGhlIGNvZGVzIGFyZSBnZW5lcmF0ZWQgaW4gYW4gdW5hbWJpZ3VvdXMgd2F5IHNpbXBseQorICogICBmcm9tIHRoZSBudW1iZXIgb2YgYml0cyBpbiBlYWNoIGNvZGUuICBUaGVyZWZvcmUgdGhlIGNvZGUgZGVzY3JpcHRpb25zCisgKiAgIGFyZSBzaW1wbHkgYSBsaXN0IG9mIGNvZGUgbGVuZ3RocyBmb3IgZWFjaCBzeW1ib2wuCisgKgorICogLSBUaGUgY29kZSBsZW5ndGhzIGFyZSBzdG9yZWQgaW4gb3JkZXIgZm9yIHRoZSBzeW1ib2xzLCBzbyBsZW5ndGhzIGFyZQorICogICBwcm92aWRlZCBmb3IgZWFjaCBvZiB0aGUgbGl0ZXJhbC9sZW5ndGggc3ltYm9scywgYW5kIGZvciBlYWNoIG9mIHRoZQorICogICBkaXN0YW5jZSBzeW1ib2xzLgorICoKKyAqIC0gSWYgYSBzeW1ib2wgaXMgbm90IHVzZWQgaW4gdGhlIGJsb2NrLCB0aGlzIGlzIHJlcHJlc2VudGVkIGJ5IGEgemVybyBhcworICogICBhcyB0aGUgY29kZSBsZW5ndGguICBUaGlzIGRvZXMgbm90IG1lYW4gYSB6ZXJvLWxlbmd0aCBjb2RlLCBidXQgcmF0aGVyCisgKiAgIHRoYXQgbm8gY29kZSBzaG91bGQgYmUgY3JlYXRlZCBmb3IgdGhpcyBzeW1ib2wuICBUaGVyZSBpcyBubyB3YXkgaW4gdGhlCisgKiAgIGRlZmxhdGUgZm9ybWF0IHRvIHJlcHJlc2VudCBhIHplcm8tbGVuZ3RoIGNvZGUuCisgKgorICogLSBUaGUgbWF4aW11bSBudW1iZXIgb2YgYml0cyBpbiBhIGNvZGUgaXMgMTUsIHNvIHRoZSBwb3NzaWJsZSBsZW5ndGhzIGZvcgorICogICBhbnkgY29kZSBhcmUgMS4uMTUuCisgKgorICogLSBUaGUgZmFjdCB0aGF0IGEgbGVuZ3RoIG9mIHplcm8gaXMgbm90IHBlcm1pdHRlZCBmb3IgYSBjb2RlIGhhcyBhbgorICogICBpbnRlcmVzdGluZyBjb25zZXF1ZW5jZS4gIE5vcm1hbGx5IGlmIG9ubHkgb25lIHN5bWJvbCBpcyB1c2VkIGZvciBhIGdpdmVuCisgKiAgIGNvZGUsIHRoZW4gaW4gZmFjdCB0aGF0IGNvZGUgY291bGQgYmUgcmVwcmVzZW50ZWQgd2l0aCB6ZXJvIGJpdHMuICBIb3dldmVyCisgKiAgIGluIGRlZmxhdGUsIHRoYXQgY29kZSBoYXMgdG8gYmUgYXQgbGVhc3Qgb25lIGJpdC4gIFNvIGZvciBleGFtcGxlLCBpZgorICogICBvbmx5IGEgc2luZ2xlIGRpc3RhbmNlIGJhc2Ugc3ltYm9sIGFwcGVhcnMgaW4gYSBibG9jaywgdGhlbiBpdCB3aWxsIGJlCisgKiAgIHJlcHJlc2VudGVkIGJ5IGEgc2luZ2xlIGNvZGUgb2YgbGVuZ3RoIG9uZSwgaW4gcGFydGljdWxhciBvbmUgMCBiaXQuICBUaGlzCisgKiAgIGlzIGFuIGluY29tcGxldGUgY29kZSwgc2luY2UgaWYgYSAxIGJpdCBpcyByZWNlaXZlZCwgaXQgaGFzIG5vIG1lYW5pbmcsCisgKiAgIGFuZCBzaG91bGQgcmVzdWx0IGluIGFuIGVycm9yLiAgU28gaW5jb21wbGV0ZSBkaXN0YW5jZSBjb2RlcyBvZiBvbmUgc3ltYm9sCisgKiAgIHNob3VsZCBiZSBwZXJtaXR0ZWQsIGFuZCB0aGUgcmVjZWlwdCBvZiBpbnZhbGlkIGNvZGVzIHNob3VsZCBiZSBoYW5kbGVkLgorICoKKyAqIC0gSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBoYXZlIGEgc2luZ2xlIGxpdGVyYWwvbGVuZ3RoIGNvZGUsIGJ1dCB0aGF0IGNvZGUKKyAqICAgbXVzdCBiZSB0aGUgZW5kLW9mLWJsb2NrIGNvZGUsIHNpbmNlIGV2ZXJ5IGR5bmFtaWMgYmxvY2sgaGFzIG9uZS4gIFRoaXMKKyAqICAgaXMgbm90IHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gY3JlYXRlIGFuIGVtcHR5IGJsb2NrIChhbiBlbXB0eSBmaXhlZAorICogICBibG9jayBpcyBmZXdlciBiaXRzKSwgYnV0IGl0IGlzIGFsbG93ZWQgYnkgdGhlIGZvcm1hdC4gIFNvIGluY29tcGxldGUKKyAqICAgbGl0ZXJhbC9sZW5ndGggY29kZXMgb2Ygb25lIHN5bWJvbCBzaG91bGQgYWxzbyBiZSBwZXJtaXR0ZWQuCisgKgorICogLSBJZiB0aGVyZSBhcmUgb25seSBsaXRlcmFsIGNvZGVzIGFuZCBubyBsZW5ndGhzLCB0aGVuIHRoZXJlIGFyZSBubyBkaXN0YW5jZQorICogICBjb2Rlcy4gIFRoaXMgaXMgcmVwcmVzZW50ZWQgYnkgb25lIGRpc3RhbmNlIGNvZGUgd2l0aCB6ZXJvIGJpdHMuCisgKgorICogLSBUaGUgbGlzdCBvZiB1cCB0byAyODYgbGVuZ3RoL2xpdGVyYWwgbGVuZ3RocyBhbmQgdXAgdG8gMzAgZGlzdGFuY2UgbGVuZ3RocworICogICBhcmUgdGhlbXNlbHZlcyBjb21wcmVzc2VkIHVzaW5nIEh1ZmZtYW4gY29kZXMgYW5kIHJ1bi1sZW5ndGggZW5jb2RpbmcuICBJbgorICogICB0aGUgbGlzdCBvZiBjb2RlIGxlbmd0aHMsIGEgMCBzeW1ib2wgbWVhbnMgbm8gY29kZSwgYSAxLi4xNSBzeW1ib2wgbWVhbnMKKyAqICAgdGhhdCBsZW5ndGgsIGFuZCB0aGUgc3ltYm9scyAxNiwgMTcsIGFuZCAxOCBhcmUgcnVuLWxlbmd0aCBpbnN0cnVjdGlvbnMuCisgKiAgIEVhY2ggb2YgMTYsIDE3LCBhbmQgMTggYXJlIGZvbGx3ZWQgYnkgZXh0cmEgYml0cyB0byBkZWZpbmUgdGhlIGxlbmd0aCBvZgorICogICB0aGUgcnVuLiAgMTYgY29waWVzIHRoZSBsYXN0IGxlbmd0aCAzIHRvIDYgdGltZXMuICAxNyByZXByZXNlbnRzIDMgdG8gMTAKKyAqICAgemVybyBsZW5ndGhzLCBhbmQgMTggcmVwcmVzZW50cyAxMSB0byAxMzggemVybyBsZW5ndGhzLiAgVW51c2VkIHN5bWJvbHMKKyAqICAgYXJlIGNvbW1vbiwgaGVuY2UgdGhlIHNwZWNpYWwgY29kaW5nIGZvciB6ZXJvIGxlbmd0aHMuCisgKgorICogLSBUaGUgc3ltYm9scyBmb3IgMC4uMTggYXJlIEh1ZmZtYW4gY29kZWQsIGFuZCBzbyB0aGF0IGNvZGUgbXVzdCBiZQorICogICBkZXNjcmliZWQgZmlyc3QuICBUaGlzIGlzIHNpbXBseSBhIHNlcXVlbmNlIG9mIHVwIHRvIDE5IHRocmVlLWJpdCB2YWx1ZXMKKyAqICAgcmVwcmVzZW50aW5nIG5vIGNvZGUgKDApIG9yIHRoZSBjb2RlIGxlbmd0aCBmb3IgdGhhdCBzeW1ib2wgKDEuLjcpLgorICoKKyAqIC0gQSBkeW5hbWljIGJsb2NrIHN0YXJ0cyB3aXRoIHRocmVlIGZpeGVkLXNpemUgY291bnRzIGZyb20gd2hpY2ggaXMgY29tcHV0ZWQKKyAqICAgdGhlIG51bWJlciBvZiBsaXRlcmFsL2xlbmd0aCBjb2RlIGxlbmd0aHMsIHRoZSBudW1iZXIgb2YgZGlzdGFuY2UgY29kZQorICogICBsZW5ndGhzLCBhbmQgdGhlIG51bWJlciBvZiBjb2RlIGxlbmd0aCBjb2RlIGxlbmd0aHMgKG9rLCB5b3UgY29tZSB1cCB3aXRoCisgKiAgIGEgYmV0dGVyIG5hbWUhKSBpbiB0aGUgY29kZSBkZXNjcmlwdGlvbnMuICBGb3IgdGhlIGxpdGVyYWwvbGVuZ3RoIGFuZAorICogICBkaXN0YW5jZSBjb2RlcywgbGVuZ3RocyBhZnRlciB0aG9zZSBwcm92aWRlZCBhcmUgY29uc2lkZXJlZCB6ZXJvLCBpLmUuIG5vCisgKiAgIGNvZGUuICBUaGUgY29kZSBsZW5ndGggY29kZSBsZW5ndGhzIGFyZSByZWNlaXZlZCBpbiBhIHBlcm11dGVkIG9yZGVyIChzZWUKKyAqICAgdGhlIG9yZGVyW10gYXJyYXkgYmVsb3cpIHRvIG1ha2UgYSBzaG9ydCBjb2RlIGxlbmd0aCBjb2RlIGxlbmd0aCBsaXN0IG1vcmUKKyAqICAgbGlrZWx5LiAgQXMgaXQgdHVybnMgb3V0LCB2ZXJ5IHNob3J0IGFuZCB2ZXJ5IGxvbmcgY29kZXMgYXJlIGxlc3MgbGlrZWx5CisgKiAgIHRvIGJlIHNlZW4gaW4gYSBkeW5hbWljIGNvZGUgZGVzY3JpcHRpb24sIGhlbmNlIHdoYXQgbWF5IGFwcGVhciBpbml0aWFsbHkKKyAqICAgdG8gYmUgYSBwZWN1bGlhciBvcmRlcmluZy4KKyAqCisgKiAtIEdpdmVuIHRoZSBudW1iZXIgb2YgbGl0ZXJhbC9sZW5ndGggY29kZSBsZW5ndGhzIChubGVuKSBhbmQgZGlzdGFuY2UgY29kZQorICogICBsZW5ndGhzIChuZGlzdCksIHRoZW4gdGhleSBhcmUgdHJlYXRlZCBhcyBvbmUgbG9uZyBsaXN0IG9mIG5sZW4gKyBuZGlzdAorICogICBjb2RlIGxlbmd0aHMuICBUaGVyZWZvcmUgcnVuLWxlbmd0aCBjb2RpbmcgY2FuIGFuZCBvZnRlbiBkb2VzIGNyb3NzIHRoZQorICogICBib3VuZGFyeSBiZXR3ZWVuIHRoZSB0d28gc2V0cyBvZiBsZW5ndGhzLgorICoKKyAqIC0gU28gdG8gc3VtbWFyaXplLCB0aGUgY29kZSBkZXNjcmlwdGlvbiBhdCB0aGUgc3RhcnQgb2YgYSBkeW5hbWljIGJsb2NrIGlzCisgKiAgIHRocmVlIGNvdW50cyBmb3IgdGhlIG51bWJlciBvZiBjb2RlIGxlbmd0aHMgZm9yIHRoZSBsaXRlcmFsL2xlbmd0aCBjb2RlcywKKyAqICAgdGhlIGRpc3RhbmNlIGNvZGVzLCBhbmQgdGhlIGNvZGUgbGVuZ3RoIGNvZGVzLiAgVGhpcyBpcyBmb2xsb3dlZCBieSB0aGUKKyAqICAgY29kZSBsZW5ndGggY29kZSBsZW5ndGhzLCB0aHJlZSBiaXRzIGVhY2guICBUaGlzIGlzIHVzZWQgdG8gY29uc3RydWN0IHRoZQorICogICBjb2RlIGxlbmd0aCBjb2RlIHdoaWNoIGlzIHVzZWQgdG8gcmVhZCB0aGUgcmVtYWluZGVyIG9mIHRoZSBsZW5ndGhzLiAgVGhlbgorICogICB0aGUgbGl0ZXJhbC9sZW5ndGggY29kZSBsZW5ndGhzIGFuZCBkaXN0YW5jZSBsZW5ndGhzIGFyZSByZWFkIGFzIGEgc2luZ2xlCisgKiAgIHNldCBvZiBsZW5ndGhzIHVzaW5nIHRoZSBjb2RlIGxlbmd0aCBjb2Rlcy4gIENvZGVzIGFyZSBjb25zdHJ1Y3RlZCBmcm9tCisgKiAgIHRoZSByZXN1bHRpbmcgdHdvIHNldHMgb2YgbGVuZ3RocywgYW5kIHRoZW4gZmluYWxseSB5b3UgY2FuIHN0YXJ0CisgKiAgIGRlY29kaW5nIGFjdHVhbCBjb21wcmVzc2VkIGRhdGEgaW4gdGhlIGJsb2NrLgorICoKKyAqIC0gRm9yIHJlZmVyZW5jZSwgYSAidHlwaWNhbCIgc2l6ZSBmb3IgdGhlIGNvZGUgZGVzY3JpcHRpb24gaW4gYSBkeW5hbWljCisgKiAgIGJsb2NrIGlzIGFyb3VuZCA4MCBieXRlcy4KKyAqLworbG9jYWwgaW50IGR5bmFtaWMoc3RydWN0IHN0YXRlICpzKQoreworICAgIGludCBubGVuLCBuZGlzdCwgbmNvZGU7ICAgICAgICAgICAgIC8qIG51bWJlciBvZiBsZW5ndGhzIGluIGRlc2NyaXB0b3IgKi8KKyAgICBpbnQgaW5kZXg7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbmRleCBvZiBsZW5ndGhzW10gKi8KKyAgICBpbnQgZXJyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25zdHJ1Y3QoKSByZXR1cm4gdmFsdWUgKi8KKyAgICBzaG9ydCBsZW5ndGhzW01BWENPREVTXTsgICAgICAgICAgICAvKiBkZXNjcmlwdG9yIGNvZGUgbGVuZ3RocyAqLworICAgIHNob3J0IGxlbmNudFtNQVhCSVRTKzFdLCBsZW5zeW1bTUFYTENPREVTXTsgICAgICAgICAvKiBsZW5jb2RlIG1lbW9yeSAqLworICAgIHNob3J0IGRpc3RjbnRbTUFYQklUUysxXSwgZGlzdHN5bVtNQVhEQ09ERVNdOyAgICAgICAvKiBkaXN0Y29kZSBtZW1vcnkgKi8KKyAgICBzdHJ1Y3QgaHVmZm1hbiBsZW5jb2RlLCBkaXN0Y29kZTsgICAvKiBsZW5ndGggYW5kIGRpc3RhbmNlIGNvZGVzICovCisgICAgc3RhdGljIGNvbnN0IHNob3J0IG9yZGVyWzE5XSA9ICAgICAgLyogcGVybXV0YXRpb24gb2YgY29kZSBsZW5ndGggY29kZXMgKi8KKyAgICAgICAgezE2LCAxNywgMTgsIDAsIDgsIDcsIDksIDYsIDEwLCA1LCAxMSwgNCwgMTIsIDMsIDEzLCAyLCAxNCwgMSwgMTV9OworCisgICAgLyogY29uc3RydWN0IGxlbmNvZGUgYW5kIGRpc3Rjb2RlICovCisgICAgbGVuY29kZS5jb3VudCA9IGxlbmNudDsKKyAgICBsZW5jb2RlLnN5bWJvbCA9IGxlbnN5bTsKKyAgICBkaXN0Y29kZS5jb3VudCA9IGRpc3RjbnQ7CisgICAgZGlzdGNvZGUuc3ltYm9sID0gZGlzdHN5bTsKKworICAgIC8qIGdldCBudW1iZXIgb2YgbGVuZ3RocyBpbiBlYWNoIHRhYmxlLCBjaGVjayBsZW5ndGhzICovCisgICAgbmxlbiA9IGJpdHMocywgNSkgKyAyNTc7CisgICAgbmRpc3QgPSBiaXRzKHMsIDUpICsgMTsKKyAgICBuY29kZSA9IGJpdHMocywgNCkgKyA0OworICAgIGlmIChubGVuID4gTUFYTENPREVTIHx8IG5kaXN0ID4gTUFYRENPREVTKQorICAgICAgICByZXR1cm4gLTM7ICAgICAgICAgICAgICAgICAgICAgIC8qIGJhZCBjb3VudHMgKi8KKworICAgIC8qIHJlYWQgY29kZSBsZW5ndGggY29kZSBsZW5ndGhzIChyZWFsbHkpLCBtaXNzaW5nIGxlbmd0aHMgYXJlIHplcm8gKi8KKyAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBuY29kZTsgaW5kZXgrKykKKyAgICAgICAgbGVuZ3Roc1tvcmRlcltpbmRleF1dID0gYml0cyhzLCAzKTsKKyAgICBmb3IgKDsgaW5kZXggPCAxOTsgaW5kZXgrKykKKyAgICAgICAgbGVuZ3Roc1tvcmRlcltpbmRleF1dID0gMDsKKworICAgIC8qIGJ1aWxkIGh1ZmZtYW4gdGFibGUgZm9yIGNvZGUgbGVuZ3RocyBjb2RlcyAodXNlIGxlbmNvZGUgdGVtcG9yYXJpbHkpICovCisgICAgZXJyID0gY29uc3RydWN0KCZsZW5jb2RlLCBsZW5ndGhzLCAxOSk7CisgICAgaWYgKGVyciAhPSAwKSAgICAgICAgICAgICAgIC8qIHJlcXVpcmUgY29tcGxldGUgY29kZSBzZXQgaGVyZSAqLworICAgICAgICByZXR1cm4gLTQ7CisKKyAgICAvKiByZWFkIGxlbmd0aC9saXRlcmFsIGFuZCBkaXN0YW5jZSBjb2RlIGxlbmd0aCB0YWJsZXMgKi8KKyAgICBpbmRleCA9IDA7CisgICAgd2hpbGUgKGluZGV4IDwgbmxlbiArIG5kaXN0KSB7CisgICAgICAgIGludCBzeW1ib2w7ICAgICAgICAgICAgIC8qIGRlY29kZWQgdmFsdWUgKi8KKyAgICAgICAgaW50IGxlbjsgICAgICAgICAgICAgICAgLyogbGFzdCBsZW5ndGggdG8gcmVwZWF0ICovCisKKyAgICAgICAgc3ltYm9sID0gZGVjb2RlKHMsICZsZW5jb2RlKTsKKyAgICAgICAgaWYgKHN5bWJvbCA8IDApCisgICAgICAgICAgICByZXR1cm4gc3ltYm9sOyAgICAgICAgICAvKiBpbnZhbGlkIHN5bWJvbCAqLworICAgICAgICBpZiAoc3ltYm9sIDwgMTYpICAgICAgICAgICAgICAgIC8qIGxlbmd0aCBpbiAwLi4xNSAqLworICAgICAgICAgICAgbGVuZ3Roc1tpbmRleCsrXSA9IHN5bWJvbDsKKyAgICAgICAgZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZXBlYXQgaW5zdHJ1Y3Rpb24gKi8KKyAgICAgICAgICAgIGxlbiA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiBhc3N1bWUgcmVwZWF0aW5nIHplcm9zICovCisgICAgICAgICAgICBpZiAoc3ltYm9sID09IDE2KSB7ICAgICAgICAgLyogcmVwZWF0IGxhc3QgbGVuZ3RoIDMuLjYgdGltZXMgKi8KKyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC01OyAgICAgICAgICAvKiBubyBsYXN0IGxlbmd0aCEgKi8KKyAgICAgICAgICAgICAgICBsZW4gPSBsZW5ndGhzW2luZGV4IC0gMV07ICAgICAgIC8qIGxhc3QgbGVuZ3RoICovCisgICAgICAgICAgICAgICAgc3ltYm9sID0gMyArIGJpdHMocywgMik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChzeW1ib2wgPT0gMTcpICAgICAgLyogcmVwZWF0IHplcm8gMy4uMTAgdGltZXMgKi8KKyAgICAgICAgICAgICAgICBzeW1ib2wgPSAzICsgYml0cyhzLCAzKTsKKyAgICAgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAvKiA9PSAxOCwgcmVwZWF0IHplcm8gMTEuLjEzOCB0aW1lcyAqLworICAgICAgICAgICAgICAgIHN5bWJvbCA9IDExICsgYml0cyhzLCA3KTsKKyAgICAgICAgICAgIGlmIChpbmRleCArIHN5bWJvbCA+IG5sZW4gKyBuZGlzdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTY7ICAgICAgICAgICAgICAvKiB0b28gbWFueSBsZW5ndGhzISAqLworICAgICAgICAgICAgd2hpbGUgKHN5bWJvbC0tKSAgICAgICAgICAgIC8qIHJlcGVhdCBsYXN0IG9yIHplcm8gc3ltYm9sIHRpbWVzICovCisgICAgICAgICAgICAgICAgbGVuZ3Roc1tpbmRleCsrXSA9IGxlbjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIGNoZWNrIGZvciBlbmQtb2YtYmxvY2sgY29kZSAtLSB0aGVyZSBiZXR0ZXIgYmUgb25lISAqLworICAgIGlmIChsZW5ndGhzWzI1Nl0gPT0gMCkKKyAgICAgICAgcmV0dXJuIC05OworCisgICAgLyogYnVpbGQgaHVmZm1hbiB0YWJsZSBmb3IgbGl0ZXJhbC9sZW5ndGggY29kZXMgKi8KKyAgICBlcnIgPSBjb25zdHJ1Y3QoJmxlbmNvZGUsIGxlbmd0aHMsIG5sZW4pOworICAgIGlmIChlcnIgJiYgKGVyciA8IDAgfHwgbmxlbiAhPSBsZW5jb2RlLmNvdW50WzBdICsgbGVuY29kZS5jb3VudFsxXSkpCisgICAgICAgIHJldHVybiAtNzsgICAgICAvKiBpbmNvbXBsZXRlIGNvZGUgb2sgb25seSBmb3Igc2luZ2xlIGxlbmd0aCAxIGNvZGUgKi8KKworICAgIC8qIGJ1aWxkIGh1ZmZtYW4gdGFibGUgZm9yIGRpc3RhbmNlIGNvZGVzICovCisgICAgZXJyID0gY29uc3RydWN0KCZkaXN0Y29kZSwgbGVuZ3RocyArIG5sZW4sIG5kaXN0KTsKKyAgICBpZiAoZXJyICYmIChlcnIgPCAwIHx8IG5kaXN0ICE9IGRpc3Rjb2RlLmNvdW50WzBdICsgZGlzdGNvZGUuY291bnRbMV0pKQorICAgICAgICByZXR1cm4gLTg7ICAgICAgLyogaW5jb21wbGV0ZSBjb2RlIG9rIG9ubHkgZm9yIHNpbmdsZSBsZW5ndGggMSBjb2RlICovCisKKyAgICAvKiBkZWNvZGUgZGF0YSB1bnRpbCBlbmQtb2YtYmxvY2sgY29kZSAqLworICAgIHJldHVybiBjb2RlcyhzLCAmbGVuY29kZSwgJmRpc3Rjb2RlKTsKK30KKworLyoKKyAqIEluZmxhdGUgc291cmNlIHRvIGRlc3QuICBPbiByZXR1cm4sIGRlc3RsZW4gYW5kIHNvdXJjZWxlbiBhcmUgdXBkYXRlZCB0byB0aGUKKyAqIHNpemUgb2YgdGhlIHVuY29tcHJlc3NlZCBkYXRhIGFuZCB0aGUgc2l6ZSBvZiB0aGUgZGVmbGF0ZSBkYXRhIHJlc3BlY3RpdmVseS4KKyAqIE9uIHN1Y2Nlc3MsIHRoZSByZXR1cm4gdmFsdWUgb2YgcHVmZigpIGlzIHplcm8uICBJZiB0aGVyZSBpcyBhbiBlcnJvciBpbiB0aGUKKyAqIHNvdXJjZSBkYXRhLCBpLmUuIGl0IGlzIG5vdCBpbiB0aGUgZGVmbGF0ZSBmb3JtYXQsIHRoZW4gYSBuZWdhdGl2ZSB2YWx1ZSBpcworICogcmV0dXJuZWQuICBJZiB0aGVyZSBpcyBub3QgZW5vdWdoIGlucHV0IGF2YWlsYWJsZSBvciB0aGVyZSBpcyBub3QgZW5vdWdoCisgKiBvdXRwdXQgc3BhY2UsIHRoZW4gYSBwb3NpdGl2ZSBlcnJvciBpcyByZXR1cm5lZC4gIEluIHRoYXQgY2FzZSwgZGVzdGxlbiBhbmQKKyAqIHNvdXJjZWxlbiBhcmUgbm90IHVwZGF0ZWQgdG8gZmFjaWxpdGF0ZSByZXRyeWluZyBmcm9tIHRoZSBiZWdpbm5pbmcgd2l0aCB0aGUKKyAqIHByb3Zpc2lvbiBvZiBtb3JlIGlucHV0IGRhdGEgb3IgbW9yZSBvdXRwdXQgc3BhY2UuICBJbiB0aGUgY2FzZSBvZiBpbnZhbGlkCisgKiBpbmZsYXRlIGRhdGEgKGEgbmVnYXRpdmUgZXJyb3IpLCB0aGUgZGVzdCBhbmQgc291cmNlIHBvaW50ZXJzIGFyZSB1cGRhdGVkIHRvCisgKiBmYWNpbGl0YXRlIHRoZSBkZWJ1Z2dpbmcgb2YgZGVmbGF0b3JzLgorICoKKyAqIHB1ZmYoKSBhbHNvIGhhcyBhIG1vZGUgdG8gZGV0ZXJtaW5lIHRoZSBzaXplIG9mIHRoZSB1bmNvbXByZXNzZWQgb3V0cHV0IHdpdGgKKyAqIG5vIG91dHB1dCB3cml0dGVuLiAgRm9yIHRoaXMgZGVzdCBtdXN0IGJlICh1bnNpZ25lZCBjaGFyICopMC4gIEluIHRoaXMgY2FzZSwKKyAqIHRoZSBpbnB1dCB2YWx1ZSBvZiAqZGVzdGxlbiBpcyBpZ25vcmVkLCBhbmQgb24gcmV0dXJuICpkZXN0bGVuIGlzIHNldCB0byB0aGUKKyAqIHNpemUgb2YgdGhlIHVuY29tcHJlc3NlZCBvdXRwdXQuCisgKgorICogVGhlIHJldHVybiBjb2RlcyBhcmU6CisgKgorICogICAyOiAgYXZhaWxhYmxlIGluZmxhdGUgZGF0YSBkaWQgbm90IHRlcm1pbmF0ZQorICogICAxOiAgb3V0cHV0IHNwYWNlIGV4aGF1c3RlZCBiZWZvcmUgY29tcGxldGluZyBpbmZsYXRlCisgKiAgIDA6ICBzdWNjZXNzZnVsIGluZmxhdGUKKyAqICAtMTogIGludmFsaWQgYmxvY2sgdHlwZSAodHlwZSA9PSAzKQorICogIC0yOiAgc3RvcmVkIGJsb2NrIGxlbmd0aCBkaWQgbm90IG1hdGNoIG9uZSdzIGNvbXBsZW1lbnQKKyAqICAtMzogIGR5bmFtaWMgYmxvY2sgY29kZSBkZXNjcmlwdGlvbjogdG9vIG1hbnkgbGVuZ3RoIG9yIGRpc3RhbmNlIGNvZGVzCisgKiAgLTQ6ICBkeW5hbWljIGJsb2NrIGNvZGUgZGVzY3JpcHRpb246IGNvZGUgbGVuZ3RocyBjb2RlcyBpbmNvbXBsZXRlCisgKiAgLTU6ICBkeW5hbWljIGJsb2NrIGNvZGUgZGVzY3JpcHRpb246IHJlcGVhdCBsZW5ndGhzIHdpdGggbm8gZmlyc3QgbGVuZ3RoCisgKiAgLTY6ICBkeW5hbWljIGJsb2NrIGNvZGUgZGVzY3JpcHRpb246IHJlcGVhdCBtb3JlIHRoYW4gc3BlY2lmaWVkIGxlbmd0aHMKKyAqICAtNzogIGR5bmFtaWMgYmxvY2sgY29kZSBkZXNjcmlwdGlvbjogaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIGxlbmd0aHMKKyAqICAtODogIGR5bmFtaWMgYmxvY2sgY29kZSBkZXNjcmlwdGlvbjogaW52YWxpZCBkaXN0YW5jZSBjb2RlIGxlbmd0aHMKKyAqICAtOTogIGR5bmFtaWMgYmxvY2sgY29kZSBkZXNjcmlwdGlvbjogbWlzc2luZyBlbmQtb2YtYmxvY2sgY29kZQorICogLTEwOiAgaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBvciBkaXN0YW5jZSBjb2RlIGluIGZpeGVkIG9yIGR5bmFtaWMgYmxvY2sKKyAqIC0xMTogIGRpc3RhbmNlIGlzIHRvbyBmYXIgYmFjayBpbiBmaXhlZCBvciBkeW5hbWljIGJsb2NrCisgKgorICogRm9ybWF0IG5vdGVzOgorICoKKyAqIC0gVGhyZWUgYml0cyBhcmUgcmVhZCBmb3IgZWFjaCBibG9jayB0byBkZXRlcm1pbmUgdGhlIGtpbmQgb2YgYmxvY2sgYW5kCisgKiAgIHdoZXRoZXIgb3Igbm90IGl0IGlzIHRoZSBsYXN0IGJsb2NrLiAgVGhlbiB0aGUgYmxvY2sgaXMgZGVjb2RlZCBhbmQgdGhlCisgKiAgIHByb2Nlc3MgcmVwZWF0ZWQgaWYgaXQgd2FzIG5vdCB0aGUgbGFzdCBibG9jay4KKyAqCisgKiAtIFRoZSBsZWZ0b3ZlciBiaXRzIGluIHRoZSBsYXN0IGJ5dGUgb2YgdGhlIGRlZmxhdGUgZGF0YSBhZnRlciB0aGUgbGFzdAorICogICBibG9jayAoaWYgaXQgd2FzIGEgZml4ZWQgb3IgZHluYW1pYyBibG9jaykgYXJlIHVuZGVmaW5lZCBhbmQgaGF2ZSBubworICogICBleHBlY3RlZCB2YWx1ZXMgdG8gY2hlY2suCisgKi8KK2ludCBwdWZmKHVuc2lnbmVkIGNoYXIgKmRlc3QsICAgICAgICAgICAvKiBwb2ludGVyIHRvIGRlc3RpbmF0aW9uIHBvaW50ZXIgKi8KKyAgICAgICAgIHVuc2lnbmVkIGxvbmcgKmRlc3RsZW4sICAgICAgICAvKiBhbW91bnQgb2Ygb3V0cHV0IHNwYWNlICovCisgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UsICAgLyogcG9pbnRlciB0byBzb3VyY2UgZGF0YSBwb2ludGVyICovCisgICAgICAgICB1bnNpZ25lZCBsb25nICpzb3VyY2VsZW4pICAgICAgLyogYW1vdW50IG9mIGlucHV0IGF2YWlsYWJsZSAqLworeworICAgIHN0cnVjdCBzdGF0ZSBzOyAgICAgICAgICAgICAvKiBpbnB1dC9vdXRwdXQgc3RhdGUgKi8KKyAgICBpbnQgbGFzdCwgdHlwZTsgICAgICAgICAgICAgLyogYmxvY2sgaW5mb3JtYXRpb24gKi8KKyAgICBpbnQgZXJyOyAgICAgICAgICAgICAgICAgICAgLyogcmV0dXJuIHZhbHVlICovCisKKyAgICAvKiBpbml0aWFsaXplIG91dHB1dCBzdGF0ZSAqLworICAgIHMub3V0ID0gZGVzdDsKKyAgICBzLm91dGxlbiA9ICpkZXN0bGVuOyAgICAgICAgICAgICAgICAvKiBpZ25vcmVkIGlmIGRlc3QgaXMgTklMICovCisgICAgcy5vdXRjbnQgPSAwOworCisgICAgLyogaW5pdGlhbGl6ZSBpbnB1dCBzdGF0ZSAqLworICAgIHMuaW4gPSBzb3VyY2U7CisgICAgcy5pbmxlbiA9ICpzb3VyY2VsZW47CisgICAgcy5pbmNudCA9IDA7CisgICAgcy5iaXRidWYgPSAwOworICAgIHMuYml0Y250ID0gMDsKKworICAgIC8qIHJldHVybiBpZiBiaXRzKCkgb3IgZGVjb2RlKCkgdHJpZXMgdG8gcmVhZCBwYXN0IGF2YWlsYWJsZSBpbnB1dCAqLworICAgIGlmIChzZXRqbXAocy5lbnYpICE9IDApICAgICAgICAgICAgIC8qIGlmIGNhbWUgYmFjayBoZXJlIHZpYSBsb25nam1wKCkgKi8KKyAgICAgICAgZXJyID0gMjsgICAgICAgICAgICAgICAgICAgICAgICAvKiB0aGVuIHNraXAgZG8tbG9vcCwgcmV0dXJuIGVycm9yICovCisgICAgZWxzZSB7CisgICAgICAgIC8qIHByb2Nlc3MgYmxvY2tzIHVudGlsIGxhc3QgYmxvY2sgb3IgZXJyb3IgKi8KKyAgICAgICAgZG8geworICAgICAgICAgICAgbGFzdCA9IGJpdHMoJnMsIDEpOyAgICAgICAgIC8qIG9uZSBpZiBsYXN0IGJsb2NrICovCisgICAgICAgICAgICB0eXBlID0gYml0cygmcywgMik7ICAgICAgICAgLyogYmxvY2sgdHlwZSAwLi4zICovCisgICAgICAgICAgICBlcnIgPSB0eXBlID09IDAgPworICAgICAgICAgICAgICAgICAgICBzdG9yZWQoJnMpIDoKKyAgICAgICAgICAgICAgICAgICAgKHR5cGUgPT0gMSA/CisgICAgICAgICAgICAgICAgICAgICAgICBmaXhlZCgmcykgOgorICAgICAgICAgICAgICAgICAgICAgICAgKHR5cGUgPT0gMiA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHluYW1pYygmcykgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xKSk7ICAgICAgIC8qIHR5cGUgPT0gMywgaW52YWxpZCAqLworICAgICAgICAgICAgaWYgKGVyciAhPSAwKQorICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgIC8qIHJldHVybiB3aXRoIGVycm9yICovCisgICAgICAgIH0gd2hpbGUgKCFsYXN0KTsKKyAgICB9CisKKyAgICAvKiB1cGRhdGUgdGhlIGxlbmd0aHMgYW5kIHJldHVybiAqLworICAgIGlmIChlcnIgPD0gMCkgeworICAgICAgICAqZGVzdGxlbiA9IHMub3V0Y250OworICAgICAgICAqc291cmNlbGVuID0gcy5pbmNudDsKKyAgICB9CisgICAgcmV0dXJuIGVycjsKK30KZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL3B1ZmYvcHVmZi5oIGIvc3JjL2NvbnRyaWIvcHVmZi9wdWZmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIzYTI0NQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb250cmliL3B1ZmYvcHVmZi5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qIHB1ZmYuaAorICBDb3B5cmlnaHQgKEMpIDIwMDItMjAxMyBNYXJrIEFkbGVyLCBhbGwgcmlnaHRzIHJlc2VydmVkCisgIHZlcnNpb24gMi4zLCAyMSBKYW4gMjAxMworCisgIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkCisgIHdhcnJhbnR5LiAgSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9yIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcworICBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLgorCisgIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLAorICBpbmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRlciBpdCBhbmQgcmVkaXN0cmlidXRlIGl0CisgIGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworICAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdAorICAgICBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZQorICAgICBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24gd291bGQgYmUKKyAgICAgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1aXJlZC4KKyAgMi4gQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmUKKyAgICAgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLgorICAzLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLgorCisgIE1hcmsgQWRsZXIgICAgbWFkbGVyQGFsdW1uaS5jYWx0ZWNoLmVkdQorICovCisKKworLyoKKyAqIFNlZSBwdWZmLmMgZm9yIHB1cnBvc2UgYW5kIHVzYWdlLgorICovCisjaWZuZGVmIE5JTAorIyAgZGVmaW5lIE5JTCAoKHVuc2lnbmVkIGNoYXIgKikwKSAgICAgIC8qIGZvciBubyBvdXRwdXQgb3B0aW9uICovCisjZW5kaWYKKworaW50IHB1ZmYodW5zaWduZWQgY2hhciAqZGVzdCwgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gZGVzdGluYXRpb24gcG9pbnRlciAqLworICAgICAgICAgdW5zaWduZWQgbG9uZyAqZGVzdGxlbiwgICAgICAgIC8qIGFtb3VudCBvZiBvdXRwdXQgc3BhY2UgKi8KKyAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSwgICAvKiBwb2ludGVyIHRvIHNvdXJjZSBkYXRhIHBvaW50ZXIgKi8KKyAgICAgICAgIHVuc2lnbmVkIGxvbmcgKnNvdXJjZWxlbik7ICAgICAvKiBhbW91bnQgb2YgaW5wdXQgYXZhaWxhYmxlICovCmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi9wdWZmL3B1ZmZ0ZXN0LmMgYi9zcmMvY29udHJpYi9wdWZmL3B1ZmZ0ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc2NDgxNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb250cmliL3B1ZmYvcHVmZnRlc3QuYwpAQCAtMCwwICsxLDE2NSBAQAorLyoKKyAqIHB1ZmZ0ZXN0LmMKKyAqIENvcHlyaWdodCAoQykgMjAwMi0yMDEzIE1hcmsgQWRsZXIKKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBwdWZmLmgKKyAqIHZlcnNpb24gMi4zLCAyMSBKYW4gMjAxMworICovCisKKy8qIEV4YW1wbGUgb2YgaG93IHRvIHVzZSBwdWZmKCkuCisKKyAgIFVzYWdlOiBwdWZmIFstd10gWy1mXSBbLW5ubl0gZmlsZQorICAgICAgICAgIC4uLiB8IHB1ZmYgWy13XSBbLWZdIFstbm5uXQorCisgICB3aGVyZSBmaWxlIGlzIHRoZSBpbnB1dCBmaWxlIHdpdGggZGVmbGF0ZSBkYXRhLCBubm4gaXMgdGhlIG51bWJlciBvZiBieXRlcworICAgb2YgaW5wdXQgdG8gc2tpcCBiZWZvcmUgaW5mbGF0aW5nIChlLmcuIHRvIHNraXAgYSB6bGliIG9yIGd6aXAgaGVhZGVyKSwgYW5kCisgICAtdyBpcyB1c2VkIHRvIHdyaXRlIHRoZSBkZWNvbXByZXNzZWQgZGF0YSB0byBzdGRvdXQuICAtZiBpcyBmb3IgY292ZXJhZ2UKKyAgIHRlc3RpbmcsIGFuZCBjYXVzZXMgcHVmZnRlc3QgdG8gZmFpbCB3aXRoIG5vdCBlbm91Z2ggb3V0cHV0IHNwYWNlICgtZiBkb2VzCisgICBhIHdyaXRlIGxpa2UgLXcsIHNvIC13IGlzIG5vdCByZXF1aXJlZCkuICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgInB1ZmYuaCIKKworI2lmIGRlZmluZWQoTVNET1MpIHx8IGRlZmluZWQoT1MyKSB8fCBkZWZpbmVkKFdJTjMyKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pCisjICBpbmNsdWRlIDxmY250bC5oPgorIyAgaW5jbHVkZSA8aW8uaD4KKyMgIGRlZmluZSBTRVRfQklOQVJZX01PREUoZmlsZSkgc2V0bW9kZShmaWxlbm8oZmlsZSksIE9fQklOQVJZKQorI2Vsc2UKKyMgIGRlZmluZSBTRVRfQklOQVJZX01PREUoZmlsZSkKKyNlbmRpZgorCisjZGVmaW5lIGxvY2FsIHN0YXRpYworCisvKiBSZXR1cm4gc2l6ZSB0aW1lcyBhcHByb3hpbWF0ZWx5IHRoZSBjdWJlIHJvb3Qgb2YgMiwga2VlcGluZyB0aGUgcmVzdWx0IGFzIDEsCisgICAzLCBvciA1IHRpbWVzIGEgcG93ZXIgb2YgMiAtLSB0aGUgcmVzdWx0IGlzIGFsd2F5cyA+IHNpemUsIHVudGlsIHRoZSByZXN1bHQKKyAgIGlzIHRoZSBtYXhpbXVtIHZhbHVlIG9mIGFuIHVuc2lnbmVkIGxvbmcsIHdoZXJlIGl0IHJlbWFpbnMuICBUaGlzIGlzIHVzZWZ1bAorICAgdG8ga2VlcCByZWFsbG9jYXRpb25zIGxlc3MgdGhhbiB+MzMlIG92ZXIgdGhlIGFjdHVhbCBkYXRhLiAqLworbG9jYWwgc2l6ZV90IGJ5dGhpcmRzKHNpemVfdCBzaXplKQoreworICAgIGludCBuOworICAgIHNpemVfdCBtOworCisgICAgbSA9IHNpemU7CisgICAgZm9yIChuID0gMDsgbTsgbisrKQorICAgICAgICBtID4+PSAxOworICAgIGlmIChuIDwgMykKKyAgICAgICAgcmV0dXJuIHNpemUgKyAxOworICAgIG4gLT0gMzsKKyAgICBtID0gc2l6ZSA+PiBuOworICAgIG0gKz0gbSA9PSA2ID8gMiA6IDE7CisgICAgbSA8PD0gbjsKKyAgICByZXR1cm4gbSA+IHNpemUgPyBtIDogKHNpemVfdCkoLTEpOworfQorCisvKiBSZWFkIHRoZSBpbnB1dCBmaWxlICpuYW1lLCBvciBzdGRpbiBpZiBuYW1lIGlzIE5VTEwsIGludG8gYWxsb2NhdGVkIG1lbW9yeS4KKyAgIFJlYWxsb2NhdGUgdG8gbGFyZ2VyIGJ1ZmZlcnMgdW50aWwgdGhlIGVudGlyZSBmaWxlIGlzIHJlYWQgaW4uICBSZXR1cm4gYQorICAgcG9pbnRlciB0byB0aGUgYWxsb2NhdGVkIGRhdGEsIG9yIE5VTEwgaWYgdGhlcmUgd2FzIGEgbWVtb3J5IGFsbG9jYXRpb24KKyAgIGZhaWx1cmUuICAqbGVuIGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2YgZGF0YSByZWFkIGZyb20gdGhlIGlucHV0IGZpbGUgKGV2ZW4KKyAgIGlmIGxvYWQoKSByZXR1cm5zIE5VTEwpLiAgSWYgdGhlIGlucHV0IGZpbGUgd2FzIGVtcHR5IG9yIGNvdWxkIG5vdCBiZSBvcGVuZWQKKyAgIG9yIHJlYWQsICpsZW4gaXMgemVyby4gKi8KK2xvY2FsIHZvaWQgKmxvYWQoY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90ICpsZW4pCit7CisgICAgc2l6ZV90IHNpemU7CisgICAgdm9pZCAqYnVmLCAqc3dhcDsKKyAgICBGSUxFICppbjsKKworICAgICpsZW4gPSAwOworICAgIGJ1ZiA9IG1hbGxvYyhzaXplID0gNDA5Nik7CisgICAgaWYgKGJ1ZiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpbiA9IG5hbWUgPT0gTlVMTCA/IHN0ZGluIDogZm9wZW4obmFtZSwgInJiIik7CisgICAgaWYgKGluICE9IE5VTEwpIHsKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgKmxlbiArPSBmcmVhZCgoY2hhciAqKWJ1ZiArICpsZW4sIDEsIHNpemUgLSAqbGVuLCBpbik7CisgICAgICAgICAgICBpZiAoKmxlbiA8IHNpemUpIGJyZWFrOworICAgICAgICAgICAgc2l6ZSA9IGJ5dGhpcmRzKHNpemUpOworICAgICAgICAgICAgaWYgKHNpemUgPT0gKmxlbiB8fCAoc3dhcCA9IHJlYWxsb2MoYnVmLCBzaXplKSkgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGZyZWUoYnVmKTsKKyAgICAgICAgICAgICAgICBidWYgPSBOVUxMOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnVmID0gc3dhcDsKKyAgICAgICAgfQorICAgICAgICBmY2xvc2UoaW4pOworICAgIH0KKyAgICByZXR1cm4gYnVmOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgaW50IHJldCwgcHV0ID0gMCwgZmFpbCA9IDA7CisgICAgdW5zaWduZWQgc2tpcCA9IDA7CisgICAgY2hhciAqYXJnLCAqbmFtZSA9IE5VTEw7CisgICAgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVMTCwgKmRlc3Q7CisgICAgc2l6ZV90IGxlbiA9IDA7CisgICAgdW5zaWduZWQgbG9uZyBzb3VyY2VsZW4sIGRlc3RsZW47CisKKyAgICAvKiBwcm9jZXNzIGFyZ3VtZW50cyAqLworICAgIHdoaWxlIChhcmcgPSAqKythcmd2LCAtLWFyZ2MpCisgICAgICAgIGlmIChhcmdbMF0gPT0gJy0nKSB7CisgICAgICAgICAgICBpZiAoYXJnWzFdID09ICd3JyAmJiBhcmdbMl0gPT0gMCkKKyAgICAgICAgICAgICAgICBwdXQgPSAxOworICAgICAgICAgICAgZWxzZSBpZiAoYXJnWzFdID09ICdmJyAmJiBhcmdbMl0gPT0gMCkKKyAgICAgICAgICAgICAgICBmYWlsID0gMSwgcHV0ID0gMTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGFyZ1sxXSA+PSAnMCcgJiYgYXJnWzFdIDw9ICc5JykKKyAgICAgICAgICAgICAgICBza2lwID0gKHVuc2lnbmVkKWF0b2koYXJnICsgMSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImludmFsaWQgb3B0aW9uICVzXG4iLCBhcmcpOworICAgICAgICAgICAgICAgIHJldHVybiAzOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKG5hbWUgIT0gTlVMTCkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJvbmx5IG9uZSBmaWxlIG5hbWUgYWxsb3dlZFxuIik7CisgICAgICAgICAgICByZXR1cm4gMzsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBuYW1lID0gYXJnOworICAgIHNvdXJjZSA9IGxvYWQobmFtZSwgJmxlbik7CisgICAgaWYgKHNvdXJjZSA9PSBOVUxMKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAibWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZVxuIik7CisgICAgICAgIHJldHVybiA0OworICAgIH0KKyAgICBpZiAobGVuID09IDApIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJjb3VsZCBub3QgcmVhZCAlcywgb3IgaXQgd2FzIGVtcHR5XG4iLAorICAgICAgICAgICAgICAgIG5hbWUgPT0gTlVMTCA/ICI8c3RkaW4+IiA6IG5hbWUpOworICAgICAgICBmcmVlKHNvdXJjZSk7CisgICAgICAgIHJldHVybiAzOworICAgIH0KKyAgICBpZiAoc2tpcCA+PSBsZW4pIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJza2lwIHJlcXVlc3Qgb2YgJWQgbGVhdmVzIG5vIGlucHV0XG4iLCBza2lwKTsKKyAgICAgICAgZnJlZShzb3VyY2UpOworICAgICAgICByZXR1cm4gMzsKKyAgICB9CisKKyAgICAvKiB0ZXN0IGluZmxhdGUgZGF0YSB3aXRoIG9mZnNldCBza2lwICovCisgICAgbGVuIC09IHNraXA7CisgICAgc291cmNlbGVuID0gKHVuc2lnbmVkIGxvbmcpbGVuOworICAgIHJldCA9IHB1ZmYoTklMLCAmZGVzdGxlbiwgc291cmNlICsgc2tpcCwgJnNvdXJjZWxlbik7CisgICAgaWYgKHJldCkKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJwdWZmKCkgZmFpbGVkIHdpdGggcmV0dXJuIGNvZGUgJWRcbiIsIHJldCk7CisgICAgZWxzZSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAicHVmZigpIHN1Y2NlZWRlZCB1bmNvbXByZXNzaW5nICVsdSBieXRlc1xuIiwgZGVzdGxlbik7CisgICAgICAgIGlmIChzb3VyY2VsZW4gPCBsZW4pIGZwcmludGYoc3RkZXJyLCAiJWx1IGNvbXByZXNzZWQgYnl0ZXMgdW51c2VkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiAtIHNvdXJjZWxlbik7CisgICAgfQorCisgICAgLyogaWYgcmVxdWVzdGVkLCBpbmZsYXRlIGFnYWluIGFuZCB3cml0ZSBkZWNvbXByZXNzZCBkYXRhIHRvIHN0ZG91dCAqLworICAgIGlmIChwdXQgJiYgcmV0ID09IDApIHsKKyAgICAgICAgaWYgKGZhaWwpCisgICAgICAgICAgICBkZXN0bGVuID4+PSAxOworICAgICAgICBkZXN0ID0gbWFsbG9jKGRlc3RsZW4pOworICAgICAgICBpZiAoZGVzdCA9PSBOVUxMKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVcbiIpOworICAgICAgICAgICAgZnJlZShzb3VyY2UpOworICAgICAgICAgICAgcmV0dXJuIDQ7CisgICAgICAgIH0KKyAgICAgICAgcHVmZihkZXN0LCAmZGVzdGxlbiwgc291cmNlICsgc2tpcCwgJnNvdXJjZWxlbik7CisgICAgICAgIFNFVF9CSU5BUllfTU9ERShzdGRvdXQpOworICAgICAgICBmd3JpdGUoZGVzdCwgMSwgZGVzdGxlbiwgc3Rkb3V0KTsKKyAgICAgICAgZnJlZShkZXN0KTsKKyAgICB9CisKKyAgICAvKiBjbGVhbiB1cCAqLworICAgIGZyZWUoc291cmNlKTsKKyAgICByZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvcHVmZi96ZXJvcy5yYXcgYi9zcmMvY29udHJpYi9wdWZmL3plcm9zLnJhdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTkwZTc2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbnRyaWIvcHVmZi96ZXJvcy5yYXcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvdGVzdHpsaWIvdGVzdHpsaWIuYyBiL3NyYy9jb250cmliL3Rlc3R6bGliL3Rlc3R6bGliLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY2NTlkZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb250cmliL3Rlc3R6bGliL3Rlc3R6bGliLmMKQEAgLTAsMCArMSwyNzUgQEAKKyNpbmNsdWRlIDxzdGRpby5oPg0KKyNpbmNsdWRlIDxzdGRsaWIuaD4NCisjaW5jbHVkZSA8d2luZG93cy5oPg0KKw0KKyNpbmNsdWRlICJ6bGliLmgiDQorDQorDQordm9pZCBNeURvTWludXM2NChMQVJHRV9JTlRFR0VSICpSLExBUkdFX0lOVEVHRVIgQSxMQVJHRV9JTlRFR0VSIEIpDQorew0KKyAgICBSLT5IaWdoUGFydCA9IEEuSGlnaFBhcnQgLSBCLkhpZ2hQYXJ0Ow0KKyAgICBpZiAoQS5Mb3dQYXJ0ID49IEIuTG93UGFydCkNCisgICAgICAgIFItPkxvd1BhcnQgPSBBLkxvd1BhcnQgLSBCLkxvd1BhcnQ7DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgUi0+TG93UGFydCA9IEEuTG93UGFydCAtIEIuTG93UGFydDsNCisgICAgICAgIFItPkhpZ2hQYXJ0IC0tOw0KKyAgICB9DQorfQ0KKw0KKyNpZmRlZiBfTV9YNjQNCisvLyBzZWUgaHR0cDovL21zZG4yLm1pY3Jvc29mdC5jb20vbGlicmFyeS90d2NoaGU5NShlbi11cyx2cy44MCkuYXNweCBmb3IgX19yZHRzYw0KK3Vuc2lnbmVkIF9faW50NjQgX19yZHRzYyh2b2lkKTsNCit2b2lkIEJlZ2luQ291bnRSZHRzYyhMQVJHRV9JTlRFR0VSICogcGJlZ2luVGltZTY0KQ0KK3sNCisgLy8gICBwcmludGYoInJkdHNjID0gJUk2NHhcbiIsX19yZHRzYygpKTsNCisgICBwYmVnaW5UaW1lNjQtPlF1YWRQYXJ0PV9fcmR0c2MoKTsNCit9DQorDQorTEFSR0VfSU5URUdFUiBHZXRSZXNSZHRzYyhMQVJHRV9JTlRFR0VSIGJlZ2luVGltZTY0LEJPT0wgZkNvbXB1dGVUaW1lUXVlcnlQZXJmKQ0KK3sNCisgICAgTEFSR0VfSU5URUdFUiBMSXJlczsNCisgICAgdW5zaWduZWQgX2ludDY0IHJlcz1fX3JkdHNjKCktKCh1bnNpZ25lZCBfaW50NjQpKGJlZ2luVGltZTY0LlF1YWRQYXJ0KSk7DQorICAgIExJcmVzLlF1YWRQYXJ0PXJlczsNCisgICAvLyBwcmludGYoInJkdHNjID0gJUk2NHhcbiIsX19yZHRzYygpKTsNCisgICAgcmV0dXJuIExJcmVzOw0KK30NCisjZWxzZQ0KKyNpZmRlZiBfTV9JWDg2DQordm9pZCBteUdldFJEVFNDMzIoTEFSR0VfSU5URUdFUiAqIHBiZWdpblRpbWU2NCkNCit7DQorICAgIERXT1JEIGR3RWR4LGR3RWF4Ow0KKyAgICBfYXNtDQorICAgIHsNCisgICAgICAgIHJkdHNjDQorICAgICAgICBtb3YgZHdFYXgsZWF4DQorICAgICAgICBtb3YgZHdFZHgsZWR4DQorICAgIH0NCisgICAgcGJlZ2luVGltZTY0LT5Mb3dQYXJ0PWR3RWF4Ow0KKyAgICBwYmVnaW5UaW1lNjQtPkhpZ2hQYXJ0PWR3RWR4Ow0KK30NCisNCit2b2lkIEJlZ2luQ291bnRSZHRzYyhMQVJHRV9JTlRFR0VSICogcGJlZ2luVGltZTY0KQ0KK3sNCisgICAgbXlHZXRSRFRTQzMyKHBiZWdpblRpbWU2NCk7DQorfQ0KKw0KK0xBUkdFX0lOVEVHRVIgR2V0UmVzUmR0c2MoTEFSR0VfSU5URUdFUiBiZWdpblRpbWU2NCxCT09MIGZDb21wdXRlVGltZVF1ZXJ5UGVyZikNCit7DQorICAgIExBUkdFX0lOVEVHRVIgTElyZXMsZW5kVGltZTY0Ow0KKyAgICBteUdldFJEVFNDMzIoJmVuZFRpbWU2NCk7DQorDQorICAgIExJcmVzLkxvd1BhcnQ9TElyZXMuSGlnaFBhcnQ9MDsNCisgICAgTXlEb01pbnVzNjQoJkxJcmVzLGVuZFRpbWU2NCxiZWdpblRpbWU2NCk7DQorICAgIHJldHVybiBMSXJlczsNCit9DQorI2Vsc2UNCit2b2lkIG15R2V0UkRUU0MzMihMQVJHRV9JTlRFR0VSICogcGJlZ2luVGltZTY0KQ0KK3sNCit9DQorDQordm9pZCBCZWdpbkNvdW50UmR0c2MoTEFSR0VfSU5URUdFUiAqIHBiZWdpblRpbWU2NCkNCit7DQorfQ0KKw0KK0xBUkdFX0lOVEVHRVIgR2V0UmVzUmR0c2MoTEFSR0VfSU5URUdFUiBiZWdpblRpbWU2NCxCT09MIGZDb21wdXRlVGltZVF1ZXJ5UGVyZikNCit7DQorICAgIExBUkdFX0lOVEVHRVIgbHI7DQorICAgIGxyLlF1YWRQYXJ0PTA7DQorICAgIHJldHVybiBscjsNCit9DQorI2VuZGlmDQorI2VuZGlmDQorDQordm9pZCBCZWdpbkNvdW50UGVyZkNvdW50ZXIoTEFSR0VfSU5URUdFUiAqIHBiZWdpblRpbWU2NCxCT09MIGZDb21wdXRlVGltZVF1ZXJ5UGVyZikNCit7DQorICAgIGlmICgoIWZDb21wdXRlVGltZVF1ZXJ5UGVyZikgfHwgKCFRdWVyeVBlcmZvcm1hbmNlQ291bnRlcihwYmVnaW5UaW1lNjQpKSkNCisgICAgew0KKyAgICAgICAgcGJlZ2luVGltZTY0LT5Mb3dQYXJ0ID0gR2V0VGlja0NvdW50KCk7DQorICAgICAgICBwYmVnaW5UaW1lNjQtPkhpZ2hQYXJ0ID0gMDsNCisgICAgfQ0KK30NCisNCitEV09SRCBHZXRNc2VjU2luY2VQZXJmQ291bnRlcihMQVJHRV9JTlRFR0VSIGJlZ2luVGltZTY0LEJPT0wgZkNvbXB1dGVUaW1lUXVlcnlQZXJmKQ0KK3sNCisgICAgTEFSR0VfSU5URUdFUiBlbmRUaW1lNjQsdGlja3NQZXJTZWNvbmQsdGlja3M7DQorICAgIERXT1JETE9ORyB0aWNrc1NoaWZ0ZWQsdGlja1NlY1NoaWZ0ZWQ7DQorICAgIERXT1JEIGR3TG9nPTE2KzA7DQorICAgIERXT1JEIGR3UmV0Ow0KKyAgICBpZiAoKCFmQ29tcHV0ZVRpbWVRdWVyeVBlcmYpIHx8ICghUXVlcnlQZXJmb3JtYW5jZUNvdW50ZXIoJmVuZFRpbWU2NCkpKQ0KKyAgICAgICAgZHdSZXQgPSAoR2V0VGlja0NvdW50KCkgLSBiZWdpblRpbWU2NC5Mb3dQYXJ0KSoxOw0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIE15RG9NaW51czY0KCZ0aWNrcyxlbmRUaW1lNjQsYmVnaW5UaW1lNjQpOw0KKyAgICAgICAgUXVlcnlQZXJmb3JtYW5jZUZyZXF1ZW5jeSgmdGlja3NQZXJTZWNvbmQpOw0KKw0KKw0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHRpY2tzU2hpZnRlZCA9IEludDY0U2hybE1vZDMyKCooRFdPUkRMT05HKikmdGlja3MsZHdMb2cpOw0KKyAgICAgICAgICAgIHRpY2tTZWNTaGlmdGVkID0gSW50NjRTaHJsTW9kMzIoKihEV09SRExPTkcqKSZ0aWNrc1BlclNlY29uZCxkd0xvZyk7DQorDQorICAgICAgICB9DQorDQorICAgICAgICBkd1JldCA9IChEV09SRCkoKCgoRFdPUkQpdGlja3NTaGlmdGVkKSoxMDAwKS8oRFdPUkQpKHRpY2tTZWNTaGlmdGVkKSk7DQorICAgICAgICBkd1JldCAqPTE7DQorICAgIH0NCisgICAgcmV0dXJuIGR3UmV0Ow0KK30NCisNCitpbnQgUmVhZEZpbGVNZW1vcnkoY29uc3QgY2hhciogZmlsZW5hbWUsbG9uZyogcGxGaWxlU2l6ZSx1bnNpZ25lZCBjaGFyKiogcEZpbGVQdHIpDQorew0KKyAgICBGSUxFKiBzdHJlYW07DQorICAgIHVuc2lnbmVkIGNoYXIqIHB0cjsNCisgICAgaW50IHJldFZhbD0xOw0KKyAgICBzdHJlYW09Zm9wZW4oZmlsZW5hbWUsICJyYiIpOw0KKyAgICBpZiAoc3RyZWFtPT1OVUxMKQ0KKyAgICAgICAgcmV0dXJuIDA7DQorDQorICAgIGZzZWVrKHN0cmVhbSwwLFNFRUtfRU5EKTsNCisNCisgICAgKnBsRmlsZVNpemU9ZnRlbGwoc3RyZWFtKTsNCisgICAgZnNlZWsoc3RyZWFtLDAsU0VFS19TRVQpOw0KKyAgICBwdHI9bWFsbG9jKCgqcGxGaWxlU2l6ZSkrMSk7DQorICAgIGlmIChwdHI9PU5VTEwpDQorICAgICAgICByZXRWYWw9MDsNCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBpZiAoZnJlYWQocHRyLCAxLCAqcGxGaWxlU2l6ZSxzdHJlYW0pICE9ICgqcGxGaWxlU2l6ZSkpDQorICAgICAgICAgICAgcmV0VmFsPTA7DQorICAgIH0NCisgICAgZmNsb3NlKHN0cmVhbSk7DQorICAgICpwRmlsZVB0cj1wdHI7DQorICAgIHJldHVybiByZXRWYWw7DQorfQ0KKw0KK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pDQorew0KKyAgICBpbnQgQmxvY2tTaXplQ29tcHJlc3M9MHg4MDAwOw0KKyAgICBpbnQgQmxvY2tTaXplVW5jb21wcmVzcz0weDgwMDA7DQorICAgIGludCBjcHJMZXZlbD1aX0RFRkFVTFRfQ09NUFJFU1NJT04gOw0KKyAgICBsb25nIGxGaWxlU2l6ZTsNCisgICAgdW5zaWduZWQgY2hhciogRmlsZVB0cjsNCisgICAgbG9uZyBsQnVmZmVyU2l6ZUNwcjsNCisgICAgbG9uZyBsQnVmZmVyU2l6ZVVuY3ByOw0KKyAgICBsb25nIGxDb21wcmVzc2VkU2l6ZT0wOw0KKyAgICB1bnNpZ25lZCBjaGFyKiBDcHJQdHI7DQorICAgIHVuc2lnbmVkIGNoYXIqIFVuY3ByUHRyOw0KKyAgICBsb25nIGxTaXplQ3ByLGxTaXplVW5jcHI7DQorICAgIERXT1JEIGR3R2V0VGljayxkd01zZWNRUDsNCisgICAgTEFSR0VfSU5URUdFUiBsaV9xcCxsaV9yZHRzYyxkd1Jlc1JkdHNjOw0KKw0KKyAgICBpZiAoYXJnYzw9MSkNCisgICAgew0KKyAgICAgICAgcHJpbnRmKCJydW4gVGVzdFpsaWIgPEZpbGU+IFtCbG9ja1NpemVDb21wcmVzc10gW0Jsb2NrU2l6ZVVuY29tcHJlc3NdIFtjb21wcmVzLiBsZXZlbF1cbiIpOw0KKyAgICAgICAgcmV0dXJuIDA7DQorICAgIH0NCisNCisgICAgaWYgKFJlYWRGaWxlTWVtb3J5KGFyZ3ZbMV0sJmxGaWxlU2l6ZSwmRmlsZVB0cik9PTApDQorICAgIHsNCisgICAgICAgIHByaW50ZigiZXJyb3IgcmVhZGluZyAlc1xuIixhcmd2WzFdKTsNCisgICAgICAgIHJldHVybiAxOw0KKyAgICB9DQorICAgIGVsc2UgcHJpbnRmKCJmaWxlICVzIHJlYWQsICV1IGJ5dGVzXG4iLGFyZ3ZbMV0sbEZpbGVTaXplKTsNCisNCisgICAgaWYgKGFyZ2M+PTMpDQorICAgICAgICBCbG9ja1NpemVDb21wcmVzcz1hdG9sKGFyZ3ZbMl0pOw0KKw0KKyAgICBpZiAoYXJnYz49NCkNCisgICAgICAgIEJsb2NrU2l6ZVVuY29tcHJlc3M9YXRvbChhcmd2WzNdKTsNCisNCisgICAgaWYgKGFyZ2M+PTUpDQorICAgICAgICBjcHJMZXZlbD0oaW50KWF0b2woYXJndls0XSk7DQorDQorICAgIGxCdWZmZXJTaXplQ3ByID0gbEZpbGVTaXplICsgKGxGaWxlU2l6ZS8weDEwKSArIDB4MjAwOw0KKyAgICBsQnVmZmVyU2l6ZVVuY3ByID0gbEJ1ZmZlclNpemVDcHI7DQorDQorICAgIENwclB0cj0odW5zaWduZWQgY2hhciopbWFsbG9jKGxCdWZmZXJTaXplQ3ByICsgQmxvY2tTaXplQ29tcHJlc3MpOw0KKw0KKyAgICBCZWdpbkNvdW50UGVyZkNvdW50ZXIoJmxpX3FwLFRSVUUpOw0KKyAgICBkd0dldFRpY2s9R2V0VGlja0NvdW50KCk7DQorICAgIEJlZ2luQ291bnRSZHRzYygmbGlfcmR0c2MpOw0KKyAgICB7DQorICAgICAgICB6X3N0cmVhbSB6Y3ByOw0KKyAgICAgICAgaW50IHJldD1aX09LOw0KKyAgICAgICAgbG9uZyBsT3JpZ1RvRG8gPSBsRmlsZVNpemU7DQorICAgICAgICBsb25nIGxPcmlnRG9uZSA9IDA7DQorICAgICAgICBpbnQgc3RlcD0wOw0KKyAgICAgICAgbWVtc2V0KCZ6Y3ByLDAsc2l6ZW9mKHpfc3RyZWFtKSk7DQorICAgICAgICBkZWZsYXRlSW5pdCgmemNwcixjcHJMZXZlbCk7DQorDQorICAgICAgICB6Y3ByLm5leHRfaW4gPSBGaWxlUHRyOw0KKyAgICAgICAgemNwci5uZXh0X291dCA9IENwclB0cjsNCisNCisNCisgICAgICAgIGRvDQorICAgICAgICB7DQorICAgICAgICAgICAgbG9uZyBhbGxfcmVhZF9iZWZvcmUgPSB6Y3ByLnRvdGFsX2luOw0KKyAgICAgICAgICAgIHpjcHIuYXZhaWxfaW4gPSBtaW4obE9yaWdUb0RvLEJsb2NrU2l6ZUNvbXByZXNzKTsNCisgICAgICAgICAgICB6Y3ByLmF2YWlsX291dCA9IEJsb2NrU2l6ZUNvbXByZXNzOw0KKyAgICAgICAgICAgIHJldD1kZWZsYXRlKCZ6Y3ByLCh6Y3ByLmF2YWlsX2luPT1sT3JpZ1RvRG8pID8gWl9GSU5JU0ggOiBaX1NZTkNfRkxVU0gpOw0KKyAgICAgICAgICAgIGxPcmlnRG9uZSArPSAoemNwci50b3RhbF9pbi1hbGxfcmVhZF9iZWZvcmUpOw0KKyAgICAgICAgICAgIGxPcmlnVG9EbyAtPSAoemNwci50b3RhbF9pbi1hbGxfcmVhZF9iZWZvcmUpOw0KKyAgICAgICAgICAgIHN0ZXArKzsNCisgICAgICAgIH0gd2hpbGUgKHJldD09Wl9PSyk7DQorDQorICAgICAgICBsU2l6ZUNwcj16Y3ByLnRvdGFsX291dDsNCisgICAgICAgIGRlZmxhdGVFbmQoJnpjcHIpOw0KKyAgICAgICAgZHdHZXRUaWNrPUdldFRpY2tDb3VudCgpLWR3R2V0VGljazsNCisgICAgICAgIGR3TXNlY1FQPUdldE1zZWNTaW5jZVBlcmZDb3VudGVyKGxpX3FwLFRSVUUpOw0KKyAgICAgICAgZHdSZXNSZHRzYz1HZXRSZXNSZHRzYyhsaV9yZHRzYyxUUlVFKTsNCisgICAgICAgIHByaW50ZigidG90YWwgY29tcHJlc3Mgc2l6ZSA9ICV1LCBpbiAldSBzdGVwXG4iLGxTaXplQ3ByLHN0ZXApOw0KKyAgICAgICAgcHJpbnRmKCJ0aW1lID0gJXUgbXNlYyA9ICVmIHNlY1xuIixkd0dldFRpY2ssZHdHZXRUaWNrLyhkb3VibGUpMTAwMC4pOw0KKyAgICAgICAgcHJpbnRmKCJkZWZjcHIgdGltZSBRUCA9ICV1IG1zZWMgPSAlZiBzZWNcbiIsZHdNc2VjUVAsZHdNc2VjUVAvKGRvdWJsZSkxMDAwLik7DQorICAgICAgICBwcmludGYoImRlZmNwciByZXN1bHQgcmR0c2MgPSAlSTY0eFxuXG4iLGR3UmVzUmR0c2MuUXVhZFBhcnQpOw0KKyAgICB9DQorDQorICAgIENwclB0cj0odW5zaWduZWQgY2hhciopcmVhbGxvYyhDcHJQdHIsbFNpemVDcHIpOw0KKyAgICBVbmNwclB0cj0odW5zaWduZWQgY2hhciopbWFsbG9jKGxCdWZmZXJTaXplVW5jcHIgKyBCbG9ja1NpemVVbmNvbXByZXNzKTsNCisNCisgICAgQmVnaW5Db3VudFBlcmZDb3VudGVyKCZsaV9xcCxUUlVFKTsNCisgICAgZHdHZXRUaWNrPUdldFRpY2tDb3VudCgpOw0KKyAgICBCZWdpbkNvdW50UmR0c2MoJmxpX3JkdHNjKTsNCisgICAgew0KKyAgICAgICAgel9zdHJlYW0gemNwcjsNCisgICAgICAgIGludCByZXQ9Wl9PSzsNCisgICAgICAgIGxvbmcgbE9yaWdUb0RvID0gbFNpemVDcHI7DQorICAgICAgICBsb25nIGxPcmlnRG9uZSA9IDA7DQorICAgICAgICBpbnQgc3RlcD0wOw0KKyAgICAgICAgbWVtc2V0KCZ6Y3ByLDAsc2l6ZW9mKHpfc3RyZWFtKSk7DQorICAgICAgICBpbmZsYXRlSW5pdCgmemNwcik7DQorDQorICAgICAgICB6Y3ByLm5leHRfaW4gPSBDcHJQdHI7DQorICAgICAgICB6Y3ByLm5leHRfb3V0ID0gVW5jcHJQdHI7DQorDQorDQorICAgICAgICBkbw0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGxvbmcgYWxsX3JlYWRfYmVmb3JlID0gemNwci50b3RhbF9pbjsNCisgICAgICAgICAgICB6Y3ByLmF2YWlsX2luID0gbWluKGxPcmlnVG9EbyxCbG9ja1NpemVVbmNvbXByZXNzKTsNCisgICAgICAgICAgICB6Y3ByLmF2YWlsX291dCA9IEJsb2NrU2l6ZVVuY29tcHJlc3M7DQorICAgICAgICAgICAgcmV0PWluZmxhdGUoJnpjcHIsWl9TWU5DX0ZMVVNIKTsNCisgICAgICAgICAgICBsT3JpZ0RvbmUgKz0gKHpjcHIudG90YWxfaW4tYWxsX3JlYWRfYmVmb3JlKTsNCisgICAgICAgICAgICBsT3JpZ1RvRG8gLT0gKHpjcHIudG90YWxfaW4tYWxsX3JlYWRfYmVmb3JlKTsNCisgICAgICAgICAgICBzdGVwKys7DQorICAgICAgICB9IHdoaWxlIChyZXQ9PVpfT0spOw0KKw0KKyAgICAgICAgbFNpemVVbmNwcj16Y3ByLnRvdGFsX291dDsNCisgICAgICAgIGluZmxhdGVFbmQoJnpjcHIpOw0KKyAgICAgICAgZHdHZXRUaWNrPUdldFRpY2tDb3VudCgpLWR3R2V0VGljazsNCisgICAgICAgIGR3TXNlY1FQPUdldE1zZWNTaW5jZVBlcmZDb3VudGVyKGxpX3FwLFRSVUUpOw0KKyAgICAgICAgZHdSZXNSZHRzYz1HZXRSZXNSZHRzYyhsaV9yZHRzYyxUUlVFKTsNCisgICAgICAgIHByaW50ZigidG90YWwgdW5jb21wcmVzcyBzaXplID0gJXUsIGluICV1IHN0ZXBcbiIsbFNpemVVbmNwcixzdGVwKTsNCisgICAgICAgIHByaW50ZigidGltZSA9ICV1IG1zZWMgPSAlZiBzZWNcbiIsZHdHZXRUaWNrLGR3R2V0VGljay8oZG91YmxlKTEwMDAuKTsNCisgICAgICAgIHByaW50ZigidW5jcHIgIHRpbWUgUVAgPSAldSBtc2VjID0gJWYgc2VjXG4iLGR3TXNlY1FQLGR3TXNlY1FQLyhkb3VibGUpMTAwMC4pOw0KKyAgICAgICAgcHJpbnRmKCJ1bmNwciAgcmVzdWx0IHJkdHNjID0gJUk2NHhcblxuIixkd1Jlc1JkdHNjLlF1YWRQYXJ0KTsNCisgICAgfQ0KKw0KKyAgICBpZiAobFNpemVVbmNwcj09bEZpbGVTaXplKQ0KKyAgICB7DQorICAgICAgICBpZiAobWVtY21wKEZpbGVQdHIsVW5jcHJQdHIsbEZpbGVTaXplKT09MCkNCisgICAgICAgICAgICBwcmludGYoImNvbXBhcmUgb2tcbiIpOw0KKw0KKyAgICB9DQorDQorICAgIHJldHVybiAwOw0KK30NCmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi90ZXN0emxpYi90ZXN0emxpYi50eHQgYi9zcmMvY29udHJpYi90ZXN0emxpYi90ZXN0emxpYi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIyNThmMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb250cmliL3Rlc3R6bGliL3Rlc3R6bGliLnR4dApAQCAtMCwwICsxLDEwIEBACitUbyBidWlsZCB0ZXN0ekxpYiB3aXRoIFZpc3VhbCBTdHVkaW8gMjAwNToNCisNCitjb3B5IHRvIGEgZGlyZWN0b3J5IGZpbGUgZnJvbSA6DQorLSByb290IG9mIHpMaWIgdHJlZQ0KKy0gY29udHJpYi90ZXN0emxpYg0KKy0gY29udHJpYi9tYXNteDg2DQorLSBjb250cmliL21hc214NjQNCistIGNvbnRyaWIvdnN0dWRpby92YzcNCisNCithbmQgb3BlbiB0ZXN0emxpYjguc2xuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvdW50Z3ovTWFrZWZpbGUgYi9zcmMvY29udHJpYi91bnRnei9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTQyNjZmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbnRyaWIvdW50Z3ovTWFrZWZpbGUKQEAgLTAsMCArMSwxNCBAQAorQ0M9Y2MKK0NGTEFHUz0tZworCit1bnRnejogdW50Z3oubyAuLi8uLi9saWJ6LmEKKwkkKENDKSAkKENGTEFHUykgLW8gdW50Z3ogdW50Z3oubyAtTC4uLy4uIC1segorCit1bnRnei5vOiB1bnRnei5jIC4uLy4uL3psaWIuaAorCSQoQ0MpICQoQ0ZMQUdTKSAtYyAtSS4uLy4uIHVudGd6LmMKKworLi4vLi4vbGliei5hOgorCWNkIC4uLy4uOyAuL2NvbmZpZ3VyZTsgbWFrZQorCitjbGVhbjoKKwlybSAtZiB1bnRneiB1bnRnei5vICp+CmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi91bnRnei9NYWtlZmlsZS5tc2MgYi9zcmMvY29udHJpYi91bnRnei9NYWtlZmlsZS5tc2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdiODYwMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb250cmliL3VudGd6L01ha2VmaWxlLm1zYwpAQCAtMCwwICsxLDE3IEBACitDQz1jbAorQ0ZMQUdTPS1NRAorCit1bnRnei5leGU6IHVudGd6Lm9iaiAuLlwuLlx6bGliLmxpYgorCSQoQ0MpICQoQ0ZMQUdTKSB1bnRnei5vYmogLi5cLi5cemxpYi5saWIKKwordW50Z3oub2JqOiB1bnRnei5jIC4uXC4uXHpsaWIuaAorCSQoQ0MpICQoQ0ZMQUdTKSAtYyAtSS4uXC4uIHVudGd6LmMKKworLi5cLi5cemxpYi5saWI6CisJY2QgLi5cLi4KKwkkKE1BS0UpIC1mIHdpbjMyXG1ha2VmaWxlLm1zYworCWNkIGNvbnRyaWJcdW50Z3oKKworY2xlYW46CisJLWRlbCB1bnRnei5vYmoKKwktZGVsIHVudGd6LmV4ZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvdW50Z3ovdW50Z3ouYyBiL3NyYy9jb250cmliL3VudGd6L3VudGd6LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMzOTFlNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb250cmliL3VudGd6L3VudGd6LmMKQEAgLTAsMCArMSw2NzQgQEAKKy8qCisgKiB1bnRnei5jIC0tIERpc3BsYXkgY29udGVudHMgYW5kIGV4dHJhY3QgZmlsZXMgZnJvbSBhIGd6aXAnZCBUQVIgZmlsZQorICoKKyAqIHdyaXR0ZW4gYnkgUGVkcm8gQS4gQXJhbmRhIEd1dGllcnJleiA8cGFhZ0B0aWQuZXM+CisgKiBhZGFwdGF0aW9uIHRvIFVuaXggYnkgSmVhbi1sb3VwIEdhaWxseSA8amxvdXBAZ3ppcC5vcmc+CisgKiB2YXJpb3VzIGZpeGVzIGJ5IENvc21pbiBUcnV0YSA8Y29zbWludEBjcy51YmJjbHVqLnJvPgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAiemxpYi5oIgorCisjaWZkZWYgdW5peAorIyAgaW5jbHVkZSA8dW5pc3RkLmg+CisjZWxzZQorIyAgaW5jbHVkZSA8ZGlyZWN0Lmg+CisjICBpbmNsdWRlIDxpby5oPgorI2VuZGlmCisKKyNpZmRlZiBXSU4zMgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyMgIGlmbmRlZiBGX09LCisjICAgIGRlZmluZSBGX09LICAwCisjICBlbmRpZgorIyAgZGVmaW5lIG1rZGlyKGRpcm5hbWUsbW9kZSkgICBfbWtkaXIoZGlybmFtZSkKKyMgIGlmZGVmIF9NU0NfVkVSCisjICAgIGRlZmluZSBhY2Nlc3MocGF0aCxtb2RlKSAgIF9hY2Nlc3MocGF0aCxtb2RlKQorIyAgICBkZWZpbmUgY2htb2QocGF0aCxtb2RlKSAgICBfY2htb2QocGF0aCxtb2RlKQorIyAgICBkZWZpbmUgc3RyZHVwKHN0cikgICAgICAgICBfc3RyZHVwKHN0cikKKyMgIGVuZGlmCisjZWxzZQorIyAgaW5jbHVkZSA8dXRpbWUuaD4KKyNlbmRpZgorCisKKy8qIHZhbHVlcyB1c2VkIGluIHR5cGVmbGFnIGZpZWxkICovCisKKyNkZWZpbmUgUkVHVFlQRSAgJzAnICAgICAgICAgICAgLyogcmVndWxhciBmaWxlICovCisjZGVmaW5lIEFSRUdUWVBFICdcMCcgICAgICAgICAgIC8qIHJlZ3VsYXIgZmlsZSAqLworI2RlZmluZSBMTktUWVBFICAnMScgICAgICAgICAgICAvKiBsaW5rICovCisjZGVmaW5lIFNZTVRZUEUgICcyJyAgICAgICAgICAgIC8qIHJlc2VydmVkICovCisjZGVmaW5lIENIUlRZUEUgICczJyAgICAgICAgICAgIC8qIGNoYXJhY3RlciBzcGVjaWFsICovCisjZGVmaW5lIEJMS1RZUEUgICc0JyAgICAgICAgICAgIC8qIGJsb2NrIHNwZWNpYWwgKi8KKyNkZWZpbmUgRElSVFlQRSAgJzUnICAgICAgICAgICAgLyogZGlyZWN0b3J5ICovCisjZGVmaW5lIEZJRk9UWVBFICc2JyAgICAgICAgICAgIC8qIEZJRk8gc3BlY2lhbCAqLworI2RlZmluZSBDT05UVFlQRSAnNycgICAgICAgICAgICAvKiByZXNlcnZlZCAqLworCisvKiBHTlUgdGFyIGV4dGVuc2lvbnMgKi8KKworI2RlZmluZSBHTlVUWVBFX0RVTVBESVIgICdEJyAgICAvKiBmaWxlIG5hbWVzIGZyb20gZHVtcGVkIGRpcmVjdG9yeSAqLworI2RlZmluZSBHTlVUWVBFX0xPTkdMSU5LICdLJyAgICAvKiBsb25nIGxpbmsgbmFtZSAqLworI2RlZmluZSBHTlVUWVBFX0xPTkdOQU1FICdMJyAgICAvKiBsb25nIGZpbGUgbmFtZSAqLworI2RlZmluZSBHTlVUWVBFX01VTFRJVk9MICdNJyAgICAvKiBjb250aW51YXRpb24gb2YgZmlsZSBmcm9tIGFub3RoZXIgdm9sdW1lICovCisjZGVmaW5lIEdOVVRZUEVfTkFNRVMgICAgJ04nICAgIC8qIGZpbGUgbmFtZSB0aGF0IGRvZXMgbm90IGZpdCBpbnRvIG1haW4gaGRyICovCisjZGVmaW5lIEdOVVRZUEVfU1BBUlNFICAgJ1MnICAgIC8qIHNwYXJzZSBmaWxlICovCisjZGVmaW5lIEdOVVRZUEVfVk9MSERSICAgJ1YnICAgIC8qIHRhcGUvdm9sdW1lIGhlYWRlciAqLworCisKKy8qIHRhciBoZWFkZXIgKi8KKworI2RlZmluZSBCTE9DS1NJWkUgICAgIDUxMgorI2RlZmluZSBTSE9SVE5BTUVTSVpFIDEwMAorCitzdHJ1Y3QgdGFyX2hlYWRlcgoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBieXRlIG9mZnNldCAqLworICBjaGFyIG5hbWVbMTAwXTsgICAgICAgICAgICAgICAvKiAgIDAgKi8KKyAgY2hhciBtb2RlWzhdOyAgICAgICAgICAgICAgICAgLyogMTAwICovCisgIGNoYXIgdWlkWzhdOyAgICAgICAgICAgICAgICAgIC8qIDEwOCAqLworICBjaGFyIGdpZFs4XTsgICAgICAgICAgICAgICAgICAvKiAxMTYgKi8KKyAgY2hhciBzaXplWzEyXTsgICAgICAgICAgICAgICAgLyogMTI0ICovCisgIGNoYXIgbXRpbWVbMTJdOyAgICAgICAgICAgICAgIC8qIDEzNiAqLworICBjaGFyIGNoa3N1bVs4XTsgICAgICAgICAgICAgICAvKiAxNDggKi8KKyAgY2hhciB0eXBlZmxhZzsgICAgICAgICAgICAgICAgLyogMTU2ICovCisgIGNoYXIgbGlua25hbWVbMTAwXTsgICAgICAgICAgIC8qIDE1NyAqLworICBjaGFyIG1hZ2ljWzZdOyAgICAgICAgICAgICAgICAvKiAyNTcgKi8KKyAgY2hhciB2ZXJzaW9uWzJdOyAgICAgICAgICAgICAgLyogMjYzICovCisgIGNoYXIgdW5hbWVbMzJdOyAgICAgICAgICAgICAgIC8qIDI2NSAqLworICBjaGFyIGduYW1lWzMyXTsgICAgICAgICAgICAgICAvKiAyOTcgKi8KKyAgY2hhciBkZXZtYWpvcls4XTsgICAgICAgICAgICAgLyogMzI5ICovCisgIGNoYXIgZGV2bWlub3JbOF07ICAgICAgICAgICAgIC8qIDMzNyAqLworICBjaGFyIHByZWZpeFsxNTVdOyAgICAgICAgICAgICAvKiAzNDUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNTAwICovCit9OworCit1bmlvbiB0YXJfYnVmZmVyCit7CisgIGNoYXIgICAgICAgICAgICAgICBidWZmZXJbQkxPQ0tTSVpFXTsKKyAgc3RydWN0IHRhcl9oZWFkZXIgIGhlYWRlcjsKK307CisKK3N0cnVjdCBhdHRyX2l0ZW0KK3sKKyAgc3RydWN0IGF0dHJfaXRlbSAgKm5leHQ7CisgIGNoYXIgICAgICAgICAgICAgICpmbmFtZTsKKyAgaW50ICAgICAgICAgICAgICAgIG1vZGU7CisgIHRpbWVfdCAgICAgICAgICAgICB0aW1lOworfTsKKworZW51bSB7IFRHWl9FWFRSQUNULCBUR1pfTElTVCwgVEdaX0lOVkFMSUQgfTsKKworY2hhciAqVEdaZm5hbWUgICAgICAgICAgT0YoKGNvbnN0IGNoYXIgKikpOwordm9pZCBUR1pub3Rmb3VuZCAgICAgICAgT0YoKGNvbnN0IGNoYXIgKikpOworCitpbnQgZ2V0b2N0ICAgICAgICAgICAgICBPRigoY2hhciAqLCBpbnQpKTsKK2NoYXIgKnN0cnRpbWUgICAgICAgICAgIE9GKCh0aW1lX3QgKikpOworaW50IHNldGZpbGV0aW1lICAgICAgICAgT0YoKGNoYXIgKiwgdGltZV90KSk7Cit2b2lkIHB1c2hfYXR0ciAgICAgICAgICBPRigoc3RydWN0IGF0dHJfaXRlbSAqKiwgY2hhciAqLCBpbnQsIHRpbWVfdCkpOwordm9pZCByZXN0b3JlX2F0dHIgICAgICAgT0YoKHN0cnVjdCBhdHRyX2l0ZW0gKiopKTsKKworaW50IEV4cHJNYXRjaCAgICAgICAgICAgT0YoKGNoYXIgKiwgY2hhciAqKSk7CisKK2ludCBtYWtlZGlyICAgICAgICAgICAgIE9GKChjaGFyICopKTsKK2ludCBtYXRjaG5hbWUgICAgICAgICAgIE9GKChpbnQsIGludCwgY2hhciAqKiwgY2hhciAqKSk7CisKK3ZvaWQgZXJyb3IgICAgICAgICAgICAgIE9GKChjb25zdCBjaGFyICopKTsKK2ludCB0YXIgICAgICAgICAgICAgICAgIE9GKChnekZpbGUsIGludCwgaW50LCBpbnQsIGNoYXIgKiopKTsKKwordm9pZCBoZWxwICAgICAgICAgICAgICAgT0YoKGludCkpOworaW50IG1haW4gICAgICAgICAgICAgICAgT0YoKGludCwgY2hhciAqKikpOworCitjaGFyICpwcm9nOworCitjb25zdCBjaGFyICpUR1pzdWZmaXhbXSA9IHsgIlwwIiwgIi50YXIiLCAiLnRhci5neiIsICIudGF6IiwgIi50Z3oiLCBOVUxMIH07CisKKy8qIHJldHVybiB0aGUgZmlsZSBuYW1lIG9mIHRoZSBUR1ogYXJjaGl2ZSAqLworLyogb3IgTlVMTCBpZiBpdCBkb2VzIG5vdCBleGlzdCAqLworCitjaGFyICpUR1pmbmFtZSAoY29uc3QgY2hhciAqYXJjbmFtZSkKK3sKKyAgc3RhdGljIGNoYXIgYnVmZmVyWzEwMjRdOworICBpbnQgb3JpZ2xlbixpOworCisgIHN0cmNweShidWZmZXIsYXJjbmFtZSk7CisgIG9yaWdsZW4gPSBzdHJsZW4oYnVmZmVyKTsKKworICBmb3IgKGk9MDsgVEdac3VmZml4W2ldOyBpKyspCisgICAgeworICAgICAgIHN0cmNweShidWZmZXIrb3JpZ2xlbixUR1pzdWZmaXhbaV0pOworICAgICAgIGlmIChhY2Nlc3MoYnVmZmVyLEZfT0spID09IDApCisgICAgICAgICByZXR1cm4gYnVmZmVyOworICAgIH0KKyAgcmV0dXJuIE5VTEw7Cit9CisKKworLyogZXJyb3IgbWVzc2FnZSBmb3IgdGhlIGZpbGVuYW1lICovCisKK3ZvaWQgVEdabm90Zm91bmQgKGNvbnN0IGNoYXIgKmFyY25hbWUpCit7CisgIGludCBpOworCisgIGZwcmludGYoc3RkZXJyLCIlczogQ291bGRuJ3QgZmluZCAiLHByb2cpOworICBmb3IgKGk9MDtUR1pzdWZmaXhbaV07aSsrKQorICAgIGZwcmludGYoc3RkZXJyLChUR1pzdWZmaXhbaSsxXSkgPyAiJXMlcywgIiA6ICJvciAlcyVzXG4iLAorICAgICAgICAgICAgYXJjbmFtZSwKKyAgICAgICAgICAgIFRHWnN1ZmZpeFtpXSk7CisgIGV4aXQoMSk7Cit9CisKKworLyogY29udmVydCBvY3RhbCBkaWdpdHMgdG8gaW50ICovCisvKiBvbiBlcnJvciByZXR1cm4gLTEgKi8KKworaW50IGdldG9jdCAoY2hhciAqcCxpbnQgd2lkdGgpCit7CisgIGludCByZXN1bHQgPSAwOworICBjaGFyIGM7CisKKyAgd2hpbGUgKHdpZHRoLS0pCisgICAgeworICAgICAgYyA9ICpwKys7CisgICAgICBpZiAoYyA9PSAwKQorICAgICAgICBicmVhazsKKyAgICAgIGlmIChjID09ICcgJykKKyAgICAgICAgY29udGludWU7CisgICAgICBpZiAoYyA8ICcwJyB8fCBjID4gJzcnKQorICAgICAgICByZXR1cm4gLTE7CisgICAgICByZXN1bHQgPSByZXN1bHQgKiA4ICsgKGMgLSAnMCcpOworICAgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCisvKiBjb252ZXJ0IHRpbWVfdCB0byBzdHJpbmcgKi8KKy8qIHVzZSB0aGUgIllZWVkvTU0vREQgaGg6bW06c3MiIGZvcm1hdCAqLworCitjaGFyICpzdHJ0aW1lICh0aW1lX3QgKnQpCit7CisgIHN0cnVjdCB0bSAgICpsb2NhbDsKKyAgc3RhdGljIGNoYXIgcmVzdWx0WzMyXTsKKworICBsb2NhbCA9IGxvY2FsdGltZSh0KTsKKyAgc3ByaW50ZihyZXN1bHQsIiU0ZC8lMDJkLyUwMmQgJTAyZDolMDJkOiUwMmQiLAorICAgICAgICAgIGxvY2FsLT50bV95ZWFyKzE5MDAsIGxvY2FsLT50bV9tb24rMSwgbG9jYWwtPnRtX21kYXksCisgICAgICAgICAgbG9jYWwtPnRtX2hvdXIsIGxvY2FsLT50bV9taW4sIGxvY2FsLT50bV9zZWMpOworICByZXR1cm4gcmVzdWx0OworfQorCisKKy8qIHNldCBmaWxlIHRpbWUgKi8KKworaW50IHNldGZpbGV0aW1lIChjaGFyICpmbmFtZSx0aW1lX3QgZnRpbWUpCit7CisjaWZkZWYgV0lOMzIKKyAgc3RhdGljIGludCBpc1dpbk5UID0gLTE7CisgIFNZU1RFTVRJTUUgc3Q7CisgIEZJTEVUSU1FIGxvY2Z0LCBtb2RmdDsKKyAgc3RydWN0IHRtICpsb2N0bTsKKyAgSEFORExFIGhGaWxlOworICBpbnQgcmVzdWx0OworCisgIGxvY3RtID0gbG9jYWx0aW1lKCZmdGltZSk7CisgIGlmIChsb2N0bSA9PSBOVUxMKQorICAgIHJldHVybiAtMTsKKworICBzdC53WWVhciAgICAgICAgID0gKFdPUkQpbG9jdG0tPnRtX3llYXIgKyAxOTAwOworICBzdC53TW9udGggICAgICAgID0gKFdPUkQpbG9jdG0tPnRtX21vbiArIDE7CisgIHN0LndEYXlPZldlZWsgICAgPSAoV09SRClsb2N0bS0+dG1fd2RheTsKKyAgc3Qud0RheSAgICAgICAgICA9IChXT1JEKWxvY3RtLT50bV9tZGF5OworICBzdC53SG91ciAgICAgICAgID0gKFdPUkQpbG9jdG0tPnRtX2hvdXI7CisgIHN0LndNaW51dGUgICAgICAgPSAoV09SRClsb2N0bS0+dG1fbWluOworICBzdC53U2Vjb25kICAgICAgID0gKFdPUkQpbG9jdG0tPnRtX3NlYzsKKyAgc3Qud01pbGxpc2Vjb25kcyA9IDA7CisgIGlmICghU3lzdGVtVGltZVRvRmlsZVRpbWUoJnN0LCAmbG9jZnQpIHx8CisgICAgICAhTG9jYWxGaWxlVGltZVRvRmlsZVRpbWUoJmxvY2Z0LCAmbW9kZnQpKQorICAgIHJldHVybiAtMTsKKworICBpZiAoaXNXaW5OVCA8IDApCisgICAgaXNXaW5OVCA9IChHZXRWZXJzaW9uKCkgPCAweDgwMDAwMDAwKSA/IDEgOiAwOworICBoRmlsZSA9IENyZWF0ZUZpbGUoZm5hbWUsIEdFTkVSSUNfV1JJVEUsIDAsIE5VTEwsIE9QRU5fRVhJU1RJTkcsCisgICAgICAgICAgICAgICAgICAgICAoaXNXaW5OVCA/IEZJTEVfRkxBR19CQUNLVVBfU0VNQU5USUNTIDogMCksCisgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgaWYgKGhGaWxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKQorICAgIHJldHVybiAtMTsKKyAgcmVzdWx0ID0gU2V0RmlsZVRpbWUoaEZpbGUsIE5VTEwsIE5VTEwsICZtb2RmdCkgPyAwIDogLTE7CisgIENsb3NlSGFuZGxlKGhGaWxlKTsKKyAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgIHN0cnVjdCB1dGltYnVmIHNldHRpbWU7CisKKyAgc2V0dGltZS5hY3RpbWUgPSBzZXR0aW1lLm1vZHRpbWUgPSBmdGltZTsKKyAgcmV0dXJuIHV0aW1lKGZuYW1lLCZzZXR0aW1lKTsKKyNlbmRpZgorfQorCisKKy8qIHB1c2ggZmlsZSBhdHRyaWJ1dGVzICovCisKK3ZvaWQgcHVzaF9hdHRyKHN0cnVjdCBhdHRyX2l0ZW0gKipsaXN0LGNoYXIgKmZuYW1lLGludCBtb2RlLHRpbWVfdCB0aW1lKQoreworICBzdHJ1Y3QgYXR0cl9pdGVtICppdGVtOworCisgIGl0ZW0gPSAoc3RydWN0IGF0dHJfaXRlbSAqKW1hbGxvYyhzaXplb2Yoc3RydWN0IGF0dHJfaXRlbSkpOworICBpZiAoaXRlbSA9PSBOVUxMKQorICAgIGVycm9yKCJPdXQgb2YgbWVtb3J5Iik7CisgIGl0ZW0tPmZuYW1lID0gc3RyZHVwKGZuYW1lKTsKKyAgaXRlbS0+bW9kZSAgPSBtb2RlOworICBpdGVtLT50aW1lICA9IHRpbWU7CisgIGl0ZW0tPm5leHQgID0gKmxpc3Q7CisgICpsaXN0ICAgICAgID0gaXRlbTsKK30KKworCisvKiByZXN0b3JlIGZpbGUgYXR0cmlidXRlcyAqLworCit2b2lkIHJlc3RvcmVfYXR0cihzdHJ1Y3QgYXR0cl9pdGVtICoqbGlzdCkKK3sKKyAgc3RydWN0IGF0dHJfaXRlbSAqaXRlbSwgKnByZXY7CisKKyAgZm9yIChpdGVtID0gKmxpc3Q7IGl0ZW0gIT0gTlVMTDsgKQorICAgIHsKKyAgICAgIHNldGZpbGV0aW1lKGl0ZW0tPmZuYW1lLGl0ZW0tPnRpbWUpOworICAgICAgY2htb2QoaXRlbS0+Zm5hbWUsaXRlbS0+bW9kZSk7CisgICAgICBwcmV2ID0gaXRlbTsKKyAgICAgIGl0ZW0gPSBpdGVtLT5uZXh0OworICAgICAgZnJlZShwcmV2KTsKKyAgICB9CisgICpsaXN0ID0gTlVMTDsKK30KKworCisvKiBtYXRjaCByZWd1bGFyIGV4cHJlc3Npb24gKi8KKworI2RlZmluZSBJU1NQRUNJQUwoYykgKCgoYykgPT0gJyonKSB8fCAoKGMpID09ICcvJykpCisKK2ludCBFeHByTWF0Y2ggKGNoYXIgKnN0cmluZyxjaGFyICpleHByKQoreworICB3aGlsZSAoMSkKKyAgICB7CisgICAgICBpZiAoSVNTUEVDSUFMKCpleHByKSkKKyAgICAgICAgeworICAgICAgICAgIGlmICgqZXhwciA9PSAnLycpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmICgqc3RyaW5nICE9ICdcXCcgJiYgKnN0cmluZyAhPSAnLycpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgIHN0cmluZyArKzsgZXhwcisrOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKCpleHByID09ICcqJykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKCpleHByICsrID09IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICAgIHdoaWxlICgqKytzdHJpbmcgIT0gKmV4cHIpCisgICAgICAgICAgICAgICAgaWYgKCpzdHJpbmcgPT0gMCkKKyAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoKnN0cmluZyAhPSAqZXhwcikKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgIGlmICgqZXhwcisrID09IDApCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICBzdHJpbmcrKzsKKyAgICAgICAgfQorICAgIH0KK30KKworCisvKiByZWN1cnNpdmUgbWtkaXIgKi8KKy8qIGFib3J0IG9uIEVOT0VOVDsgaWdub3JlIG90aGVyIGVycm9ycyBsaWtlICJkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMiICovCisvKiByZXR1cm4gMSBpZiBPSyAqLworLyogICAgICAgIDAgb24gZXJyb3IgKi8KKworaW50IG1ha2VkaXIgKGNoYXIgKm5ld2RpcikKK3sKKyAgY2hhciAqYnVmZmVyID0gc3RyZHVwKG5ld2Rpcik7CisgIGNoYXIgKnA7CisgIGludCAgbGVuID0gc3RybGVuKGJ1ZmZlcik7CisKKyAgaWYgKGxlbiA8PSAwKSB7CisgICAgZnJlZShidWZmZXIpOworICAgIHJldHVybiAwOworICB9CisgIGlmIChidWZmZXJbbGVuLTFdID09ICcvJykgeworICAgIGJ1ZmZlcltsZW4tMV0gPSAnXDAnOworICB9CisgIGlmIChta2RpcihidWZmZXIsIDA3NTUpID09IDApCisgICAgeworICAgICAgZnJlZShidWZmZXIpOworICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgIHAgPSBidWZmZXIrMTsKKyAgd2hpbGUgKDEpCisgICAgeworICAgICAgY2hhciBob2xkOworCisgICAgICB3aGlsZSgqcCAmJiAqcCAhPSAnXFwnICYmICpwICE9ICcvJykKKyAgICAgICAgcCsrOworICAgICAgaG9sZCA9ICpwOworICAgICAgKnAgPSAwOworICAgICAgaWYgKChta2RpcihidWZmZXIsIDA3NTUpID09IC0xKSAmJiAoZXJybm8gPT0gRU5PRU5UKSkKKyAgICAgICAgeworICAgICAgICAgIGZwcmludGYoc3RkZXJyLCIlczogQ291bGRuJ3QgY3JlYXRlIGRpcmVjdG9yeSAlc1xuIixwcm9nLGJ1ZmZlcik7CisgICAgICAgICAgZnJlZShidWZmZXIpOworICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICBpZiAoaG9sZCA9PSAwKQorICAgICAgICBicmVhazsKKyAgICAgICpwKysgPSBob2xkOworICAgIH0KKyAgZnJlZShidWZmZXIpOworICByZXR1cm4gMTsKK30KKworCitpbnQgbWF0Y2huYW1lIChpbnQgYXJnLGludCBhcmdjLGNoYXIgKiphcmd2LGNoYXIgKmZuYW1lKQoreworICBpZiAoYXJnID09IGFyZ2MpICAgICAgLyogbm8gYXJndW1lbnRzIGdpdmVuICh1bnRneiB0Z3phcmNoaXZlKSAqLworICAgIHJldHVybiAxOworCisgIHdoaWxlIChhcmcgPCBhcmdjKQorICAgIGlmIChFeHByTWF0Y2goZm5hbWUsYXJndlthcmcrK10pKQorICAgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7IC8qIGlnbm9yZSB0aGlzIGZvciB0aGUgbW9tZW50IGJlaW5nICovCit9CisKKworLyogdGFyIGZpbGUgbGlzdCBvciBleHRyYWN0ICovCisKK2ludCB0YXIgKGd6RmlsZSBpbixpbnQgYWN0aW9uLGludCBhcmcsaW50IGFyZ2MsY2hhciAqKmFyZ3YpCit7CisgIHVuaW9uICB0YXJfYnVmZmVyIGJ1ZmZlcjsKKyAgaW50ICAgIGxlbjsKKyAgaW50ICAgIGVycjsKKyAgaW50ICAgIGdldGhlYWRlciA9IDE7CisgIGludCAgICByZW1haW5pbmcgPSAwOworICBGSUxFICAgKm91dGZpbGUgPSBOVUxMOworICBjaGFyICAgZm5hbWVbQkxPQ0tTSVpFXTsKKyAgaW50ICAgIHRhcm1vZGU7CisgIHRpbWVfdCB0YXJ0aW1lOworICBzdHJ1Y3QgYXR0cl9pdGVtICphdHRyaWJ1dGVzID0gTlVMTDsKKworICBpZiAoYWN0aW9uID09IFRHWl9MSVNUKQorICAgIHByaW50ZigiICAgIGRhdGUgICAgICB0aW1lICAgICBzaXplICAgICAgICAgICAgICAgICAgICAgICBmaWxlXG4iCisgICAgICAgICAgICIgLS0tLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisgIHdoaWxlICgxKQorICAgIHsKKyAgICAgIGxlbiA9IGd6cmVhZChpbiwgJmJ1ZmZlciwgQkxPQ0tTSVpFKTsKKyAgICAgIGlmIChsZW4gPCAwKQorICAgICAgICBlcnJvcihnemVycm9yKGluLCAmZXJyKSk7CisgICAgICAvKgorICAgICAgICogQWx3YXlzIGV4cGVjdCBjb21wbGV0ZSBibG9ja3MgdG8gcHJvY2VzcworICAgICAgICogdGhlIHRhciBpbmZvcm1hdGlvbi4KKyAgICAgICAqLworICAgICAgaWYgKGxlbiAhPSBCTE9DS1NJWkUpCisgICAgICAgIHsKKyAgICAgICAgICBhY3Rpb24gPSBUR1pfSU5WQUxJRDsgLyogZm9yY2UgZXJyb3IgZXhpdCAqLworICAgICAgICAgIHJlbWFpbmluZyA9IDA7ICAgICAgICAvKiBmb3JjZSBJL08gY2xlYW51cCAqLworICAgICAgICB9CisKKyAgICAgIC8qCisgICAgICAgKiBJZiB3ZSBoYXZlIHRvIGdldCBhIHRhciBoZWFkZXIKKyAgICAgICAqLworICAgICAgaWYgKGdldGhlYWRlciA+PSAxKQorICAgICAgICB7CisgICAgICAgICAgLyoKKyAgICAgICAgICAgKiBpZiB3ZSBtZXQgdGhlIGVuZCBvZiB0aGUgdGFyCisgICAgICAgICAgICogb3IgdGhlIGVuZC1vZi10YXIgYmxvY2ssCisgICAgICAgICAgICogd2UgYXJlIGRvbmUKKyAgICAgICAgICAgKi8KKyAgICAgICAgICBpZiAobGVuID09IDAgfHwgYnVmZmVyLmhlYWRlci5uYW1lWzBdID09IDApCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIHRhcm1vZGUgPSBnZXRvY3QoYnVmZmVyLmhlYWRlci5tb2RlLDgpOworICAgICAgICAgIHRhcnRpbWUgPSAodGltZV90KWdldG9jdChidWZmZXIuaGVhZGVyLm10aW1lLDEyKTsKKyAgICAgICAgICBpZiAodGFybW9kZSA9PSAtMSB8fCB0YXJ0aW1lID09ICh0aW1lX3QpLTEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGJ1ZmZlci5oZWFkZXIubmFtZVswXSA9IDA7CisgICAgICAgICAgICAgIGFjdGlvbiA9IFRHWl9JTlZBTElEOworICAgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKGdldGhlYWRlciA9PSAxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBzdHJuY3B5KGZuYW1lLGJ1ZmZlci5oZWFkZXIubmFtZSxTSE9SVE5BTUVTSVpFKTsKKyAgICAgICAgICAgICAgaWYgKGZuYW1lW1NIT1JUTkFNRVNJWkUtMV0gIT0gMCkKKyAgICAgICAgICAgICAgICAgIGZuYW1lW1NIT1JUTkFNRVNJWkVdID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAqIFRoZSBmaWxlIG5hbWUgaXMgbG9uZ2VyIHRoYW4gU0hPUlROQU1FU0laRQorICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgaWYgKHN0cm5jbXAoZm5hbWUsYnVmZmVyLmhlYWRlci5uYW1lLFNIT1JUTkFNRVNJWkUtMSkgIT0gMCkKKyAgICAgICAgICAgICAgICAgIGVycm9yKCJiYWQgbG9uZyBuYW1lIik7CisgICAgICAgICAgICAgIGdldGhlYWRlciA9IDE7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAvKgorICAgICAgICAgICAqIEFjdCBhY2NvcmRpbmcgdG8gdGhlIHR5cGUgZmxhZworICAgICAgICAgICAqLworICAgICAgICAgIHN3aXRjaCAoYnVmZmVyLmhlYWRlci50eXBlZmxhZykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgRElSVFlQRToKKyAgICAgICAgICAgICAgaWYgKGFjdGlvbiA9PSBUR1pfTElTVCkKKyAgICAgICAgICAgICAgICBwcmludGYoIiAlcyAgICAgPGRpcj4gJXNcbiIsc3RydGltZSgmdGFydGltZSksZm5hbWUpOworICAgICAgICAgICAgICBpZiAoYWN0aW9uID09IFRHWl9FWFRSQUNUKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIG1ha2VkaXIoZm5hbWUpOworICAgICAgICAgICAgICAgICAgcHVzaF9hdHRyKCZhdHRyaWJ1dGVzLGZuYW1lLHRhcm1vZGUsdGFydGltZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgUkVHVFlQRToKKyAgICAgICAgICAgIGNhc2UgQVJFR1RZUEU6CisgICAgICAgICAgICAgIHJlbWFpbmluZyA9IGdldG9jdChidWZmZXIuaGVhZGVyLnNpemUsMTIpOworICAgICAgICAgICAgICBpZiAocmVtYWluaW5nID09IC0xKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGFjdGlvbiA9IFRHWl9JTlZBTElEOworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBpZiAoYWN0aW9uID09IFRHWl9MSVNUKQorICAgICAgICAgICAgICAgIHByaW50ZigiICVzICU5ZCAlc1xuIixzdHJ0aW1lKCZ0YXJ0aW1lKSxyZW1haW5pbmcsZm5hbWUpOworICAgICAgICAgICAgICBlbHNlIGlmIChhY3Rpb24gPT0gVEdaX0VYVFJBQ1QpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgaWYgKG1hdGNobmFtZShhcmcsYXJnYyxhcmd2LGZuYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIG91dGZpbGUgPSBmb3BlbihmbmFtZSwid2IiKTsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAob3V0ZmlsZSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cnkgY3JlYXRpbmcgZGlyZWN0b3J5ICovCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpwID0gc3RycmNocihmbmFtZSwgJy8nKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKnAgPSAnXDAnOworICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlZGlyKGZuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKnAgPSAnLyc7CisgICAgICAgICAgICAgICAgICAgICAgICAgIG91dGZpbGUgPSBmb3BlbihmbmFtZSwid2IiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgaWYgKG91dGZpbGUgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiRXh0cmFjdGluZyAlc1xuIixmbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogQ291bGRuJ3QgY3JlYXRlICVzIixwcm9nLGZuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBvdXRmaWxlID0gTlVMTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGdldGhlYWRlciA9IDA7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBHTlVUWVBFX0xPTkdMSU5LOgorICAgICAgICAgICAgY2FzZSBHTlVUWVBFX0xPTkdOQU1FOgorICAgICAgICAgICAgICByZW1haW5pbmcgPSBnZXRvY3QoYnVmZmVyLmhlYWRlci5zaXplLDEyKTsKKyAgICAgICAgICAgICAgaWYgKHJlbWFpbmluZyA8IDAgfHwgcmVtYWluaW5nID49IEJMT0NLU0laRSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBhY3Rpb24gPSBUR1pfSU5WQUxJRDsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgbGVuID0gZ3pyZWFkKGluLCBmbmFtZSwgQkxPQ0tTSVpFKTsKKyAgICAgICAgICAgICAgaWYgKGxlbiA8IDApCisgICAgICAgICAgICAgICAgZXJyb3IoZ3plcnJvcihpbiwgJmVycikpOworICAgICAgICAgICAgICBpZiAoZm5hbWVbQkxPQ0tTSVpFLTFdICE9IDAgfHwgKGludClzdHJsZW4oZm5hbWUpID4gcmVtYWluaW5nKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGFjdGlvbiA9IFRHWl9JTlZBTElEOworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBnZXRoZWFkZXIgPSAyOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgIGlmIChhY3Rpb24gPT0gVEdaX0xJU1QpCisgICAgICAgICAgICAgICAgcHJpbnRmKCIgJXMgICAgIDwtLS0+ICVzXG4iLHN0cnRpbWUoJnRhcnRpbWUpLGZuYW1lKTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIHVuc2lnbmVkIGludCBieXRlcyA9IChyZW1haW5pbmcgPiBCTE9DS1NJWkUpID8gQkxPQ0tTSVpFIDogcmVtYWluaW5nOworCisgICAgICAgICAgaWYgKG91dGZpbGUgIT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKGZ3cml0ZSgmYnVmZmVyLHNpemVvZihjaGFyKSxieXRlcyxvdXRmaWxlKSAhPSBieXRlcykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAgIiVzOiBFcnJvciB3cml0aW5nICVzIC0tIHNraXBwaW5nXG4iLHByb2csZm5hbWUpOworICAgICAgICAgICAgICAgICAgZmNsb3NlKG91dGZpbGUpOworICAgICAgICAgICAgICAgICAgb3V0ZmlsZSA9IE5VTEw7CisgICAgICAgICAgICAgICAgICByZW1vdmUoZm5hbWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICByZW1haW5pbmcgLT0gYnl0ZXM7CisgICAgICAgIH0KKworICAgICAgaWYgKHJlbWFpbmluZyA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgZ2V0aGVhZGVyID0gMTsKKyAgICAgICAgICBpZiAob3V0ZmlsZSAhPSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBmY2xvc2Uob3V0ZmlsZSk7CisgICAgICAgICAgICAgIG91dGZpbGUgPSBOVUxMOworICAgICAgICAgICAgICBpZiAoYWN0aW9uICE9IFRHWl9JTlZBTElEKQorICAgICAgICAgICAgICAgIHB1c2hfYXR0cigmYXR0cmlidXRlcyxmbmFtZSx0YXJtb2RlLHRhcnRpbWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgIC8qCisgICAgICAgKiBBYmFuZG9uIGlmIGVycm9ycyBhcmUgZm91bmQKKyAgICAgICAqLworICAgICAgaWYgKGFjdGlvbiA9PSBUR1pfSU5WQUxJRCkKKyAgICAgICAgeworICAgICAgICAgIGVycm9yKCJicm9rZW4gYXJjaGl2ZSIpOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgIC8qCisgICAqIFJlc3RvcmUgZmlsZSBtb2RlcyBhbmQgdGltZSBzdGFtcHMKKyAgICovCisgIHJlc3RvcmVfYXR0cigmYXR0cmlidXRlcyk7CisKKyAgaWYgKGd6Y2xvc2UoaW4pICE9IFpfT0spCisgICAgZXJyb3IoImZhaWxlZCBnemNsb3NlIik7CisKKyAgcmV0dXJuIDA7Cit9CisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKK3ZvaWQgaGVscChpbnQgZXhpdHZhbCkKK3sKKyAgcHJpbnRmKCJ1bnRneiB2ZXJzaW9uIDAuMi4xXG4iCisgICAgICAgICAiICB1c2luZyB6bGliIHZlcnNpb24gJXNcblxuIiwKKyAgICAgICAgIHpsaWJWZXJzaW9uKCkpOworICBwcmludGYoIlVzYWdlOiB1bnRneiBmaWxlLnRneiAgICAgICAgICAgIGV4dHJhY3QgYWxsIGZpbGVzXG4iCisgICAgICAgICAiICAgICAgIHVudGd6IGZpbGUudGd6IGZuYW1lIC4uLiAgZXh0cmFjdCBzZWxlY3RlZCBmaWxlc1xuIgorICAgICAgICAgIiAgICAgICB1bnRneiAtbCBmaWxlLnRneiAgICAgICAgIGxpc3QgYXJjaGl2ZSBjb250ZW50c1xuIgorICAgICAgICAgIiAgICAgICB1bnRneiAtaCAgICAgICAgICAgICAgICAgIGRpc3BsYXkgdGhpcyBoZWxwXG4iKTsKKyAgZXhpdChleGl0dmFsKTsKK30KKwordm9pZCBlcnJvcihjb25zdCBjaGFyICptc2cpCit7CisgIGZwcmludGYoc3RkZXJyLCAiJXM6ICVzXG4iLCBwcm9nLCBtc2cpOworICBleGl0KDEpOworfQorCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisjaWYgZGVmaW5lZChXSU4zMikgJiYgZGVmaW5lZChfX0dOVUNfXykKK2ludCBfQ1JUX2dsb2IgPSAwOyAgICAgIC8qIGRpc2FibGUgYXJndW1lbnQgZ2xvYmJpbmcgaW4gTWluR1cgKi8KKyNlbmRpZgorCitpbnQgbWFpbihpbnQgYXJnYyxjaGFyICoqYXJndikKK3sKKyAgICBpbnQgICAgICAgICBhY3Rpb24gPSBUR1pfRVhUUkFDVDsKKyAgICBpbnQgICAgICAgICBhcmcgPSAxOworICAgIGNoYXIgICAgICAgICpUR1pmaWxlOworICAgIGd6RmlsZSAgICAgICpmOworCisgICAgcHJvZyA9IHN0cnJjaHIoYXJndlswXSwnXFwnKTsKKyAgICBpZiAocHJvZyA9PSBOVUxMKQorICAgICAgeworICAgICAgICBwcm9nID0gc3RycmNocihhcmd2WzBdLCcvJyk7CisgICAgICAgIGlmIChwcm9nID09IE5VTEwpCisgICAgICAgICAgeworICAgICAgICAgICAgcHJvZyA9IHN0cnJjaHIoYXJndlswXSwnOicpOworICAgICAgICAgICAgaWYgKHByb2cgPT0gTlVMTCkKKyAgICAgICAgICAgICAgcHJvZyA9IGFyZ3ZbMF07CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHByb2crKzsKKyAgICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICBwcm9nKys7CisgICAgICB9CisgICAgZWxzZQorICAgICAgcHJvZysrOworCisgICAgaWYgKGFyZ2MgPT0gMSkKKyAgICAgIGhlbHAoMCk7CisKKyAgICBpZiAoc3RyY21wKGFyZ3ZbYXJnXSwiLWwiKSA9PSAwKQorICAgICAgeworICAgICAgICBhY3Rpb24gPSBUR1pfTElTVDsKKyAgICAgICAgaWYgKGFyZ2MgPT0gKythcmcpCisgICAgICAgICAgaGVscCgwKTsKKyAgICAgIH0KKyAgICBlbHNlIGlmIChzdHJjbXAoYXJndlthcmddLCItaCIpID09IDApCisgICAgICB7CisgICAgICAgIGhlbHAoMCk7CisgICAgICB9CisKKyAgICBpZiAoKFRHWmZpbGUgPSBUR1pmbmFtZShhcmd2W2FyZ10pKSA9PSBOVUxMKQorICAgICAgVEdabm90Zm91bmQoYXJndlthcmddKTsKKworICAgICsrYXJnOworICAgIGlmICgoYWN0aW9uID09IFRHWl9MSVNUKSAmJiAoYXJnICE9IGFyZ2MpKQorICAgICAgaGVscCgxKTsKKworLyoKKyAqICBQcm9jZXNzIHRoZSBUR1ogZmlsZQorICovCisgICAgc3dpdGNoKGFjdGlvbikKKyAgICAgIHsKKyAgICAgIGNhc2UgVEdaX0xJU1Q6CisgICAgICBjYXNlIFRHWl9FWFRSQUNUOgorICAgICAgICBmID0gZ3pvcGVuKFRHWmZpbGUsInJiIik7CisgICAgICAgIGlmIChmID09IE5VTEwpCisgICAgICAgICAgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIiVzOiBDb3VsZG4ndCBnem9wZW4gJXNcbiIscHJvZyxUR1pmaWxlKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgIH0KKyAgICAgICAgZXhpdCh0YXIoZiwgYWN0aW9uLCBhcmcsIGFyZ2MsIGFyZ3YpKTsKKyAgICAgIGJyZWFrOworCisgICAgICBkZWZhdWx0OgorICAgICAgICBlcnJvcigiVW5rbm93biBvcHRpb24iKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICAgIH0KKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvdnN0dWRpby9yZWFkbWUudHh0IGIvc3JjL2NvbnRyaWIvdnN0dWRpby9yZWFkbWUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzOTZkNDMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29udHJpYi92c3R1ZGlvL3JlYWRtZS50eHQKQEAgLTAsMCArMSw3OCBAQAorQnVpbGRpbmcgaW5zdHJ1Y3Rpb25zIGZvciB0aGUgRExMIHZlcnNpb25zIG9mIFpsaWIgMS4yLjEyDQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisNCitUaGlzIGRpcmVjdG9yeSBjb250YWlucyBwcm9qZWN0cyB0aGF0IGJ1aWxkIHpsaWIgYW5kIG1pbml6aXAgdXNpbmcNCitNaWNyb3NvZnQgVmlzdWFsIEMrKyA5LjAvMTAuMC4NCisNCitZb3UgZG9uJ3QgbmVlZCB0byBidWlsZCB0aGVzZSBwcm9qZWN0cyB5b3Vyc2VsZi4gWW91IGNhbiBkb3dubG9hZCB0aGUNCitiaW5hcmllcyBmcm9tOg0KKyAgaHR0cDovL3d3dy53aW5pbWFnZS5jb20vekxpYkRsbA0KKw0KK01vcmUgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGF0IHRoaXMgc2l0ZS4NCisNCisNCisNCisNCisNCitCdWlsZCBpbnN0cnVjdGlvbnMgZm9yIFZpc3VhbCBTdHVkaW8gMjAwOCAoMzIgYml0cyBvciA2NCBiaXRzKQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLSBEZWNvbXByZXNzIGN1cnJlbnQgemxpYiwgaW5jbHVkaW5nIGFsbCBjb250cmliLyogZmlsZXMNCistIENvbXBpbGUgYXNzZW1ibHkgY29kZSAod2l0aCBWaXN1YWwgU3R1ZGlvIENvbW1hbmQgUHJvbXB0KSBieSBydW5uaW5nOg0KKyAgIGJsZF9tbDY0LmJhdCAoaW4gY29udHJpYlxtYXNteDY0KQ0KKyAgIGJsZF9tbDMyLmJhdCAoaW4gY29udHJpYlxtYXNteDg2KQ0KKy0gT3BlbiBjb250cmliXHZzdHVkaW9cdmM5XHpsaWJ2Yy5zbG4gd2l0aCBNaWNyb3NvZnQgVmlzdWFsIEMrKyAyMDA4DQorLSBPciBydW46IHZjYnVpbGQgL3JlYnVpbGQgY29udHJpYlx2c3R1ZGlvXHZjOVx6bGlidmMuc2xuICJSZWxlYXNlfFdpbjMyIg0KKw0KK0J1aWxkIGluc3RydWN0aW9ucyBmb3IgVmlzdWFsIFN0dWRpbyAyMDEwICgzMiBiaXRzIG9yIDY0IGJpdHMpDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistIERlY29tcHJlc3MgY3VycmVudCB6bGliLCBpbmNsdWRpbmcgYWxsIGNvbnRyaWIvKiBmaWxlcw0KKy0gT3BlbiBjb250cmliXHZzdHVkaW9cdmMxMFx6bGlidmMuc2xuIHdpdGggTWljcm9zb2Z0IFZpc3VhbCBDKysgMjAxMA0KKw0KK0J1aWxkIGluc3RydWN0aW9ucyBmb3IgVmlzdWFsIFN0dWRpbyAyMDEyICgzMiBiaXRzIG9yIDY0IGJpdHMpDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistIERlY29tcHJlc3MgY3VycmVudCB6bGliLCBpbmNsdWRpbmcgYWxsIGNvbnRyaWIvKiBmaWxlcw0KKy0gT3BlbiBjb250cmliXHZzdHVkaW9cdmMxMVx6bGlidmMuc2xuIHdpdGggTWljcm9zb2Z0IFZpc3VhbCBDKysgMjAxMg0KKw0KK0J1aWxkIGluc3RydWN0aW9ucyBmb3IgVmlzdWFsIFN0dWRpbyAyMDEzICgzMiBiaXRzIG9yIDY0IGJpdHMpDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistIERlY29tcHJlc3MgY3VycmVudCB6bGliLCBpbmNsdWRpbmcgYWxsIGNvbnRyaWIvKiBmaWxlcw0KKy0gT3BlbiBjb250cmliXHZzdHVkaW9cdmMxMlx6bGlidmMuc2xuIHdpdGggTWljcm9zb2Z0IFZpc3VhbCBDKysgMjAxMw0KKw0KK0J1aWxkIGluc3RydWN0aW9ucyBmb3IgVmlzdWFsIFN0dWRpbyAyMDE1ICgzMiBiaXRzIG9yIDY0IGJpdHMpDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistIERlY29tcHJlc3MgY3VycmVudCB6bGliLCBpbmNsdWRpbmcgYWxsIGNvbnRyaWIvKiBmaWxlcw0KKy0gT3BlbiBjb250cmliXHZzdHVkaW9cdmMxNFx6bGlidmMuc2xuIHdpdGggTWljcm9zb2Z0IFZpc3VhbCBDKysgMjAxNQ0KKw0KKw0KK0ltcG9ydGFudA0KKy0tLS0tLS0tLQ0KKy0gVG8gdXNlIHpsaWJ3YXBpLmRsbCBpbiB5b3VyIGFwcGxpY2F0aW9uLCB5b3UgbXVzdCBkZWZpbmUgdGhlDQorICBtYWNybyBaTElCX1dJTkFQSSB3aGVuIGNvbXBpbGluZyB5b3VyIGFwcGxpY2F0aW9uJ3Mgc291cmNlIGZpbGVzLg0KKw0KKw0KK0FkZGl0aW9uYWwgbm90ZXMNCistLS0tLS0tLS0tLS0tLS0tDQorLSBUaGlzIERMTCwgbmFtZWQgemxpYndhcGkuZGxsLCBpcyBjb21wYXRpYmxlIHRvIHRoZSBvbGQgemxpYi5kbGwgYnVpbHQNCisgIGJ5IEdpbGxlcyBWb2xsYW50IGZyb20gdGhlIHpsaWIgMS4xLnggc291cmNlcywgYW5kIGRpc3RyaWJ1dGVkIGF0DQorICAgIGh0dHA6Ly93d3cud2luaW1hZ2UuY29tL3pMaWJEbGwNCisgIEl0IHVzZXMgdGhlIFdJTkFQSSBjYWxsaW5nIGNvbnZlbnRpb24gZm9yIHRoZSBleHBvcnRlZCBmdW5jdGlvbnMsIGFuZA0KKyAgaW5jbHVkZXMgdGhlIG1pbml6aXAgZnVuY3Rpb25hbGl0eS4gSWYgeW91ciBhcHBsaWNhdGlvbiBuZWVkcyB0aGF0DQorICBwYXJ0aWN1bGFyIGJ1aWxkIG9mIHpsaWIuZGxsLCB5b3UgY2FuIHJlbmFtZSB6bGlid2FwaS5kbGwgdG8gemxpYi5kbGwuDQorDQorLSBUaGUgbmV3IERMTCB3YXMgcmVuYW1lZCBiZWNhdXNlIHRoZXJlIGV4aXN0IHNldmVyYWwgaW5jb21wYXRpYmxlDQorICB2ZXJzaW9ucyBvZiB6bGliLmRsbCBvbiB0aGUgSW50ZXJuZXQuDQorDQorLSBUaGVyZSBpcyBhbHNvIGFuIG9mZmljaWFsIERMTCBidWlsZCBvZiB6bGliLCBuYW1lZCB6bGliMS5kbGwuIFRoaXMgb25lDQorICBpcyBleHBvcnRpbmcgdGhlIGZ1bmN0aW9ucyB1c2luZyB0aGUgQ0RFQ0wgY29udmVudGlvbi4gU2VlIHRoZSBmaWxlDQorICB3aW4zMlxETExfRkFRLnR4dCBmb3VuZCBpbiB0aGlzIHpsaWIgZGlzdHJpYnV0aW9uLg0KKw0KKy0gVGhlcmUgdXNlZCB0byBiZSBhIFpMSUJfRExMIG1hY3JvIGluIHpsaWIgMS4xLngsIGJ1dCBub3cgdGhpcyBzeW1ib2wNCisgIGhhcyBhIHNsaWdodGx5IGRpZmZlcmVudCBlZmZlY3QuIFRvIGF2b2lkIGNvbXBhdGliaWxpdHkgcHJvYmxlbXMsIGRvDQorICBub3QgZGVmaW5lIGl0IGhlcmUuDQorDQorDQorR2lsbGVzIFZvbGxhbnQNCitpbmZvQHdpbmltYWdlLmNvbQ0KKw0KK1Zpc3VhbCBTdHVkaW8gMjAxMyBhbmQgMjAxNSBQcm9qZWN0cyBmcm9tIFNlYW4gSHVudA0KK3NlYW5kaHVudF83QHlhaG9vLmNvbQ0KZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxMC9taW5pdW56LnZjeHByb2ogYi9zcmMvY29udHJpYi92c3R1ZGlvL3ZjMTAvbWluaXVuei52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0ZTE1YzkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29udHJpYi92c3R1ZGlvL3ZjMTAvbWluaXVuei52Y3hwcm9qCkBAIC0wLDAgKzEsMzEwIEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPg0KKyAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4NCisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfEl0YW5pdW0iPg0KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPg0KKyAgICAgIDxQbGF0Zm9ybT5JdGFuaXVtPC9QbGF0Zm9ybT4NCisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4NCisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4NCisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPg0KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4NCisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4NCisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4NCisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8SXRhbml1bSI+DQorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4NCisgICAgICA8UGxhdGZvcm0+SXRhbml1bTwvUGxhdGZvcm0+DQorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+DQorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4NCisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPg0KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+DQorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+DQorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+DQorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4NCisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4NCisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCisgIDwvSXRlbUdyb3VwPg0KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPg0KKyAgICA8UHJvamVjdEd1aWQ+e0M1MkY5RTdCLTQ5OEEtNDJCRS04REI0LTg1QTE1Njk0MzgyQX08L1Byb2plY3RHdWlkPg0KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+DQorICA8L1Byb3BlcnR5R3JvdXA+DQorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPg0KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPg0KKyAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0Pg0KKyAgPC9Qcm9wZXJ0eUdyb3VwPg0KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4NCisgICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4NCisgIDwvUHJvcGVydHlHcm91cD4NCisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPg0KKyAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0Pg0KKyAgPC9Qcm9wZXJ0eUdyb3VwPg0KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPg0KKyAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0Pg0KKyAgPC9Qcm9wZXJ0eUdyb3VwPg0KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4NCisgICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4NCisgIDwvUHJvcGVydHlHcm91cD4NCisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPg0KKyAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0Pg0KKyAgPC9Qcm9wZXJ0eUdyb3VwPg0KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+DQorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4NCisgIDwvSW1wb3J0R3JvdXA+DQorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4NCisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPg0KKyAgPC9JbXBvcnRHcm91cD4NCisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4NCisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPg0KKyAgPC9JbXBvcnRHcm91cD4NCisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+DQorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4NCisgIDwvSW1wb3J0R3JvdXA+DQorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4NCisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPg0KKyAgPC9JbXBvcnRHcm91cD4NCisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4NCisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPg0KKyAgPC9JbXBvcnRHcm91cD4NCisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+DQorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4NCisgIDwvSW1wb3J0R3JvdXA+DQorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4NCisgIDxQcm9wZXJ0eUdyb3VwPg0KKyAgICA8X1Byb2plY3RGaWxlVmVyc2lvbj4xMC4wLjMwMTI4LjE8L19Qcm9qZWN0RmlsZVZlcnNpb24+DQorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPng4NlxNaW5pVW56aXAkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPg0KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj54ODZcTWluaVVuemlwJChDb25maWd1cmF0aW9uKVxUbXBcPC9JbnREaXI+DQorICAgIDxMaW5rSW5jcmVtZW50YWwgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4NCisgICAgPEdlbmVyYXRlTWFuaWZlc3QgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPmZhbHNlPC9HZW5lcmF0ZU1hbmlmZXN0Pg0KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPng4NlxNaW5pVW56aXAkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPg0KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPng4NlxNaW5pVW56aXAkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4NCisgICAgPExpbmtJbmNyZW1lbnRhbCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj5mYWxzZTwvTGlua0luY3JlbWVudGFsPg0KKyAgICA8R2VuZXJhdGVNYW5pZmVzdCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj5mYWxzZTwvR2VuZXJhdGVNYW5pZmVzdD4NCisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPng2NFxNaW5pVW56aXAkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPg0KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+eDY0XE1pbmlVbnppcCQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPg0KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+dHJ1ZTwvTGlua0luY3JlbWVudGFsPg0KKyAgICA8R2VuZXJhdGVNYW5pZmVzdCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPmZhbHNlPC9HZW5lcmF0ZU1hbmlmZXN0Pg0KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciPmlhNjRcTWluaVVuemlwJChDb25maWd1cmF0aW9uKVw8L091dERpcj4NCisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIj5pYTY0XE1pbmlVbnppcCQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPg0KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4NCisgICAgPEdlbmVyYXRlTWFuaWZlc3QgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+ZmFsc2U8L0dlbmVyYXRlTWFuaWZlc3Q+DQorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPng2NFxNaW5pVW56aXAkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPg0KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj54NjRcTWluaVVuemlwJChDb25maWd1cmF0aW9uKVxUbXBcPC9JbnREaXI+DQorICAgIDxMaW5rSW5jcmVtZW50YWwgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+DQorICAgIDxHZW5lcmF0ZU1hbmlmZXN0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5mYWxzZTwvR2VuZXJhdGVNYW5pZmVzdD4NCisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPmlhNjRcTWluaVVuemlwJChDb25maWd1cmF0aW9uKVw8L091dERpcj4NCisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPmlhNjRcTWluaVVuemlwJChDb25maWd1cmF0aW9uKVxUbXBcPC9JbnREaXI+DQorICAgIDxMaW5rSW5jcmVtZW50YWwgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIj5mYWxzZTwvTGlua0luY3JlbWVudGFsPg0KKyAgICA8R2VuZXJhdGVNYW5pZmVzdCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPmZhbHNlPC9HZW5lcmF0ZU1hbmlmZXN0Pg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0Pg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0Pg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0Pg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiAvPg0KKyAgPC9Qcm9wZXJ0eUdyb3VwPg0KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPg0KKyAgICA8Q2xDb21waWxlPg0KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtaW5pemlwOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO1pMSUJfV0lOQVBJO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPE1pbmltYWxSZWJ1aWxkPnRydWU8L01pbmltYWxSZWJ1aWxkPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RGVmYXVsdDwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWc8L1J1bnRpbWVMaWJyYXJ5Pg0KKyAgICAgIDxCdWZmZXJTZWN1cml0eUNoZWNrPmZhbHNlPC9CdWZmZXJTZWN1cml0eUNoZWNrPg0KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4NCisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPg0KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+DQorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4NCisgICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5FZGl0QW5kQ29udGludWU8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8TGluaz4NCisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz54ODZcWmxpYkRsbERlYnVnXHpsaWJ3YXBpLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPg0KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKW1pbml1bnouZXhlPC9PdXRwdXRGaWxlPg0KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPg0KKyAgICAgIDxQcm9ncmFtRGF0YWJhc2VGaWxlPiQoT3V0RGlyKW1pbml1bnoucGRiPC9Qcm9ncmFtRGF0YWJhc2VGaWxlPg0KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPg0KKyAgICAgIDxSYW5kb21pemVkQmFzZUFkZHJlc3M+ZmFsc2U8L1JhbmRvbWl6ZWRCYXNlQWRkcmVzcz4NCisgICAgICA8RGF0YUV4ZWN1dGlvblByZXZlbnRpb24+DQorICAgICAgPC9EYXRhRXhlY3V0aW9uUHJldmVudGlvbj4NCisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDg2PC9UYXJnZXRNYWNoaW5lPg0KKyAgICA8L0xpbms+DQorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4NCisgICAgPENsQ29tcGlsZT4NCisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+DQorICAgICAgPE9taXRGcmFtZVBvaW50ZXJzPnRydWU8L09taXRGcmFtZVBvaW50ZXJzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOy4uXC4uXG1pbml6aXA7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7WkxJQl9XSU5BUEk7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RGVmYXVsdDwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4NCisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4NCisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+DQorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPg0KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+DQorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4NCisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPg0KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxMaW5rPg0KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPng4NlxabGliRGxsUmVsZWFzZVx6bGlid2FwaS5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4NCisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpciltaW5pdW56LmV4ZTwvT3V0cHV0RmlsZT4NCisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4NCisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4NCisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4NCisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPg0KKyAgICAgIDxSYW5kb21pemVkQmFzZUFkZHJlc3M+ZmFsc2U8L1JhbmRvbWl6ZWRCYXNlQWRkcmVzcz4NCisgICAgICA8RGF0YUV4ZWN1dGlvblByZXZlbnRpb24+DQorICAgICAgPC9EYXRhRXhlY3V0aW9uUHJldmVudGlvbj4NCisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDg2PC9UYXJnZXRNYWNoaW5lPg0KKyAgICA8L0xpbms+DQorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPg0KKyAgICA8TWlkbD4NCisgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4NCisgICAgPC9NaWRsPg0KKyAgICA8Q2xDb21waWxlPg0KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtaW5pemlwOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO1pMSUJfV0lOQVBJO19ERUJVRztfQ09OU09MRTtXSU42NDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPE1pbmltYWxSZWJ1aWxkPnRydWU8L01pbmltYWxSZWJ1aWxkPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RGVmYXVsdDwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWdETEw8L1J1bnRpbWVMaWJyYXJ5Pg0KKyAgICAgIDxCdWZmZXJTZWN1cml0eUNoZWNrPmZhbHNlPC9CdWZmZXJTZWN1cml0eUNoZWNrPg0KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4NCisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPg0KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+DQorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4NCisgICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5Qcm9ncmFtRGF0YWJhc2U8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8TGluaz4NCisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz54NjRcWmxpYkRsbERlYnVnXHpsaWJ3YXBpLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPg0KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKW1pbml1bnouZXhlPC9PdXRwdXRGaWxlPg0KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPg0KKyAgICAgIDxQcm9ncmFtRGF0YWJhc2VGaWxlPiQoT3V0RGlyKW1pbml1bnoucGRiPC9Qcm9ncmFtRGF0YWJhc2VGaWxlPg0KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPg0KKyAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVYNjQ8L1RhcmdldE1hY2hpbmU+DQorICAgIDwvTGluaz4NCisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4NCisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciPg0KKyAgICA8TWlkbD4NCisgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+SXRhbml1bTwvVGFyZ2V0RW52aXJvbm1lbnQ+DQorICAgIDwvTWlkbD4NCisgICAgPENsQ29tcGlsZT4NCisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47Li5cLi5cbWluaXppcDslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtaTElCX1dJTkFQSTtfREVCVUc7X0NPTlNPTEU7V0lONjQ7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxNaW5pbWFsUmVidWlsZD50cnVlPC9NaW5pbWFsUmVidWlsZD4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkRlZmF1bHQ8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERlYnVnRExMPC9SdW50aW1lTGlicmFyeT4NCisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4NCisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+DQorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4NCisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPg0KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+DQorICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+UHJvZ3JhbURhdGFiYXNlPC9EZWJ1Z0luZm9ybWF0aW9uRm9ybWF0Pg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPExpbms+DQorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+aWE2NFxabGliRGxsRGVidWdcemxpYndhcGkubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+DQorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpbWluaXVuei5leGU8L091dHB1dEZpbGU+DQorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+DQorICAgICAgPFByb2dyYW1EYXRhYmFzZUZpbGU+JChPdXREaXIpbWluaXVuei5wZGI8L1Byb2dyYW1EYXRhYmFzZUZpbGU+DQorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+DQorICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZUlBNjQ8L1RhcmdldE1hY2hpbmU+DQorICAgIDwvTGluaz4NCisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4NCisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4NCisgICAgPE1pZGw+DQorICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+DQorICAgIDwvTWlkbD4NCisgICAgPENsQ29tcGlsZT4NCisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+DQorICAgICAgPE9taXRGcmFtZVBvaW50ZXJzPnRydWU8L09taXRGcmFtZVBvaW50ZXJzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOy4uXC4uXG1pbml6aXA7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7WkxJQl9XSU5BUEk7TkRFQlVHO19DT05TT0xFO1dJTjY0OyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RGVmYXVsdDwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRExMPC9SdW50aW1lTGlicmFyeT4NCisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4NCisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+DQorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPg0KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+DQorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4NCisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPg0KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxMaW5rPg0KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPng2NFxabGliRGxsUmVsZWFzZVx6bGlid2FwaS5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4NCisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpciltaW5pdW56LmV4ZTwvT3V0cHV0RmlsZT4NCisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4NCisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4NCisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4NCisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPg0KKyAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVYNjQ8L1RhcmdldE1hY2hpbmU+DQorICAgIDwvTGluaz4NCisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4NCisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyI+DQorICAgIDxNaWRsPg0KKyAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5JdGFuaXVtPC9UYXJnZXRFbnZpcm9ubWVudD4NCisgICAgPC9NaWRsPg0KKyAgICA8Q2xDb21waWxlPg0KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4NCisgICAgICA8T21pdEZyYW1lUG9pbnRlcnM+dHJ1ZTwvT21pdEZyYW1lUG9pbnRlcnM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47Li5cLi5cbWluaXppcDslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtaTElCX1dJTkFQSTtOREVCVUc7X0NPTlNPTEU7V0lONjQ7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5EZWZhdWx0PC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWRETEw8L1J1bnRpbWVMaWJyYXJ5Pg0KKyAgICAgIDxCdWZmZXJTZWN1cml0eUNoZWNrPmZhbHNlPC9CdWZmZXJTZWN1cml0eUNoZWNrPg0KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4NCisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+DQorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4NCisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPg0KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+DQorICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+UHJvZ3JhbURhdGFiYXNlPC9EZWJ1Z0luZm9ybWF0aW9uRm9ybWF0Pg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPExpbms+DQorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+aWE2NFxabGliRGxsUmVsZWFzZVx6bGlid2FwaS5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4NCisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpciltaW5pdW56LmV4ZTwvT3V0cHV0RmlsZT4NCisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4NCisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4NCisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4NCisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPg0KKyAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVJQTY0PC9UYXJnZXRNYWNoaW5lPg0KKyAgICA8L0xpbms+DQorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQorICA8SXRlbUdyb3VwPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXG1pbml6aXBcbWluaXVuei5jIiAvPg0KKyAgPC9JdGVtR3JvdXA+DQorICA8SXRlbUdyb3VwPg0KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJ6bGlidmMudmN4cHJvaiI+DQorICAgICAgPFByb2plY3Q+ezhmZDgyNmY4LTM3MzktNDRlNi04Y2M4LTk5NzEyMmU1M2I4ZH08L1Byb2plY3Q+DQorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4NCisgIDwvSXRlbUdyb3VwPg0KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4NCisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+DQorICA8L0ltcG9ydEdyb3VwPg0KKzwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi92c3R1ZGlvL3ZjMTAvbWluaXVuei52Y3hwcm9qLmZpbHRlcnMgYi9zcmMvY29udHJpYi92c3R1ZGlvL3ZjMTAvbWluaXVuei52Y3hwcm9qLmZpbHRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGIyYTNkZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxMC9taW5pdW56LnZjeHByb2ouZmlsdGVycwpAQCAtMCwwICsxLDIyIEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KKzxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4NCisgIDxJdGVtR3JvdXA+DQorICAgIDxGaWx0ZXIgSW5jbHVkZT0iU291cmNlIEZpbGVzIj4NCisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57MDQ4YWY5NDMtMDIyYi00ZGI2LWJlZWItYTU0YzM0Nzc0ZWUyfTwvVW5pcXVlSWRlbnRpZmllcj4NCisgICAgICA8RXh0ZW5zaW9ucz5jcHA7YztjeHg7ZGVmO29kbDtpZGw7aHBqO2JhdDthc208L0V4dGVuc2lvbnM+DQorICAgIDwvRmlsdGVyPg0KKyAgICA8RmlsdGVyIEluY2x1ZGU9IkhlYWRlciBGaWxlcyI+DQorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+e2MxZDYwMGQyLTg4OGYtNGFlYS1iNzNlLThiMGRkOWJlZmEwY308L1VuaXF1ZUlkZW50aWZpZXI+DQorICAgICAgPEV4dGVuc2lvbnM+aDtocHA7aHh4O2htO2lubDtpbmM8L0V4dGVuc2lvbnM+DQorICAgIDwvRmlsdGVyPg0KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlJlc291cmNlIEZpbGVzIj4NCisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57MDg0NDE5OWEtOTY2Yi00ZjE5LTgxZGItMWUwMTI1ZTE0MWI5fTwvVW5pcXVlSWRlbnRpZmllcj4NCisgICAgICA8RXh0ZW5zaW9ucz5yYztpY287Y3VyO2JtcDtkbGc7cmMyO3JjdDtiaW47cmdzO2dpZjtqcGc7anBlZztqcGU8L0V4dGVuc2lvbnM+DQorICAgIDwvRmlsdGVyPg0KKyAgPC9JdGVtR3JvdXA+DQorICA8SXRlbUdyb3VwPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXG1pbml6aXBcbWluaXVuei5jIj4NCisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgIDwvSXRlbUdyb3VwPg0KKzwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi92c3R1ZGlvL3ZjMTAvbWluaXppcC52Y3hwcm9qIGIvc3JjL2NvbnRyaWIvdnN0dWRpby92YzEwL21pbml6aXAudmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTdlMTU2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbnRyaWIvdnN0dWRpby92YzEwL21pbml6aXAudmN4cHJvagpAQCAtMCwwICsxLDMwNyBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4NCisgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+DQorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xJdGFuaXVtIj4NCisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4NCisgICAgICA8UGxhdGZvcm0+SXRhbml1bTwvUGxhdGZvcm0+DQorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+DQorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+DQorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+DQorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4NCisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+DQorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+DQorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+DQorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+DQorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfEl0YW5pdW0iPg0KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+DQorICAgICAgPFBsYXRmb3JtPkl0YW5pdW08L1BsYXRmb3JtPg0KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+DQorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4NCisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPg0KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPg0KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+DQorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+DQorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+DQorICA8L0l0ZW1Hcm91cD4NCisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4NCisgICAgPFByb2plY3RHdWlkPns0OENERDlEQy1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9PC9Qcm9qZWN0R3VpZD4NCisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPg0KKyAgPC9Qcm9wZXJ0eUdyb3VwPg0KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4NCisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4NCisgICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4NCisgIDwvUHJvcGVydHlHcm91cD4NCisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+DQorICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+DQorICA8L1Byb3BlcnR5R3JvdXA+DQorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4NCisgICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4NCisgIDwvUHJvcGVydHlHcm91cD4NCisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4NCisgICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4NCisgIDwvUHJvcGVydHlHcm91cD4NCisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+DQorICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+DQorICA8L1Byb3BlcnR5R3JvdXA+DQorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4NCisgICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4NCisgIDwvUHJvcGVydHlHcm91cD4NCisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPg0KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+DQorICA8L0ltcG9ydEdyb3VwPg0KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+DQorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4NCisgIDwvSW1wb3J0R3JvdXA+DQorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+DQorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4NCisgIDwvSW1wb3J0R3JvdXA+DQorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPg0KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+DQorICA8L0ltcG9ydEdyb3VwPg0KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+DQorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4NCisgIDwvSW1wb3J0R3JvdXA+DQorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+DQorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4NCisgIDwvSW1wb3J0R3JvdXA+DQorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPg0KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+DQorICA8L0ltcG9ydEdyb3VwPg0KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+DQorICA8UHJvcGVydHlHcm91cD4NCisgICAgPF9Qcm9qZWN0RmlsZVZlcnNpb24+MTAuMC4zMDEyOC4xPC9fUHJvamVjdEZpbGVWZXJzaW9uPg0KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj54ODZcTWluaVppcCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+DQorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPng4NlxNaW5pWmlwJChDb25maWd1cmF0aW9uKVxUbXBcPC9JbnREaXI+DQorICAgIDxMaW5rSW5jcmVtZW50YWwgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4NCisgICAgPEdlbmVyYXRlTWFuaWZlc3QgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPmZhbHNlPC9HZW5lcmF0ZU1hbmlmZXN0Pg0KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPng4NlxNaW5pWmlwJChDb25maWd1cmF0aW9uKVw8L091dERpcj4NCisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj54ODZcTWluaVppcCQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPg0KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+DQorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj54NjRcJChDb25maWd1cmF0aW9uKVw8L091dERpcj4NCisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPng2NFwkKENvbmZpZ3VyYXRpb24pXDwvSW50RGlyPg0KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+dHJ1ZTwvTGlua0luY3JlbWVudGFsPg0KKyAgICA8R2VuZXJhdGVNYW5pZmVzdCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPmZhbHNlPC9HZW5lcmF0ZU1hbmlmZXN0Pg0KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciPmlhNjRcJChDb25maWd1cmF0aW9uKVw8L091dERpcj4NCisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIj5pYTY0XCQoQ29uZmlndXJhdGlvbilcPC9JbnREaXI+DQorICAgIDxMaW5rSW5jcmVtZW50YWwgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+dHJ1ZTwvTGlua0luY3JlbWVudGFsPg0KKyAgICA8R2VuZXJhdGVNYW5pZmVzdCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIj5mYWxzZTwvR2VuZXJhdGVNYW5pZmVzdD4NCisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+eDY0XCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+DQorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPng2NFwkKENvbmZpZ3VyYXRpb24pXDwvSW50RGlyPg0KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5mYWxzZTwvTGlua0luY3JlbWVudGFsPg0KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyI+aWE2NFwkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPg0KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyI+aWE2NFwkKENvbmZpZ3VyYXRpb24pXDwvSW50RGlyPg0KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyI+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4NCisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4NCisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4NCisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4NCisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0Pg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0Pg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0Pg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgLz4NCisgIDwvUHJvcGVydHlHcm91cD4NCisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4NCisgICAgPENsQ29tcGlsZT4NCisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47Li5cLi5cbWluaXppcDslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtaTElCX1dJTkFQSTtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxNaW5pbWFsUmVidWlsZD50cnVlPC9NaW5pbWFsUmVidWlsZD4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkRlZmF1bHQ8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERlYnVnPC9SdW50aW1lTGlicmFyeT4NCisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4NCisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+DQorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4NCisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPg0KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+DQorICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+RWRpdEFuZENvbnRpbnVlPC9EZWJ1Z0luZm9ybWF0aW9uRm9ybWF0Pg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPExpbms+DQorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+eDg2XFpsaWJEbGxEZWJ1Z1x6bGlid2FwaS5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4NCisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpciltaW5pemlwLmV4ZTwvT3V0cHV0RmlsZT4NCisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4NCisgICAgICA8UHJvZ3JhbURhdGFiYXNlRmlsZT4kKE91dERpciltaW5pemlwLnBkYjwvUHJvZ3JhbURhdGFiYXNlRmlsZT4NCisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4NCisgICAgICA8UmFuZG9taXplZEJhc2VBZGRyZXNzPmZhbHNlPC9SYW5kb21pemVkQmFzZUFkZHJlc3M+DQorICAgICAgPERhdGFFeGVjdXRpb25QcmV2ZW50aW9uPg0KKyAgICAgIDwvRGF0YUV4ZWN1dGlvblByZXZlbnRpb24+DQorICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg4NjwvVGFyZ2V0TWFjaGluZT4NCisgICAgPC9MaW5rPg0KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+DQorICAgIDxDbENvbXBpbGU+DQorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPg0KKyAgICAgIDxPbWl0RnJhbWVQb2ludGVycz50cnVlPC9PbWl0RnJhbWVQb2ludGVycz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtaW5pemlwOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO1pMSUJfV0lOQVBJO05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkRlZmF1bHQ8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+DQorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+DQorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPg0KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4NCisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPg0KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+DQorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4NCisgICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5Qcm9ncmFtRGF0YWJhc2U8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8TGluaz4NCisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz54ODZcWmxpYkRsbFJlbGVhc2VcemxpYndhcGkubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+DQorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpbWluaXppcC5leGU8L091dHB1dEZpbGU+DQorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+DQorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+DQorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+DQorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4NCisgICAgICA8UmFuZG9taXplZEJhc2VBZGRyZXNzPmZhbHNlPC9SYW5kb21pemVkQmFzZUFkZHJlc3M+DQorICAgICAgPERhdGFFeGVjdXRpb25QcmV2ZW50aW9uPg0KKyAgICAgIDwvRGF0YUV4ZWN1dGlvblByZXZlbnRpb24+DQorICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg4NjwvVGFyZ2V0TWFjaGluZT4NCisgICAgPC9MaW5rPg0KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4NCisgICAgPE1pZGw+DQorICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+DQorICAgIDwvTWlkbD4NCisgICAgPENsQ29tcGlsZT4NCisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47Li5cLi5cbWluaXppcDslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtaTElCX1dJTkFQSTtfREVCVUc7X0NPTlNPTEU7V0lONjQ7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxNaW5pbWFsUmVidWlsZD50cnVlPC9NaW5pbWFsUmVidWlsZD4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkRlZmF1bHQ8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERlYnVnRExMPC9SdW50aW1lTGlicmFyeT4NCisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4NCisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+DQorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4NCisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPg0KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+DQorICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+UHJvZ3JhbURhdGFiYXNlPC9EZWJ1Z0luZm9ybWF0aW9uRm9ybWF0Pg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPExpbms+DQorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+eDY0XFpsaWJEbGxEZWJ1Z1x6bGlid2FwaS5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4NCisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpciltaW5pemlwLmV4ZTwvT3V0cHV0RmlsZT4NCisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4NCisgICAgICA8UHJvZ3JhbURhdGFiYXNlRmlsZT4kKE91dERpciltaW5pemlwLnBkYjwvUHJvZ3JhbURhdGFiYXNlRmlsZT4NCisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4NCisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPg0KKyAgICA8L0xpbms+DQorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIj4NCisgICAgPE1pZGw+DQorICAgICAgPFRhcmdldEVudmlyb25tZW50Pkl0YW5pdW08L1RhcmdldEVudmlyb25tZW50Pg0KKyAgICA8L01pZGw+DQorICAgIDxDbENvbXBpbGU+DQorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOy4uXC4uXG1pbml6aXA7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7WkxJQl9XSU5BUEk7X0RFQlVHO19DT05TT0xFO1dJTjY0OyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8TWluaW1hbFJlYnVpbGQ+dHJ1ZTwvTWluaW1hbFJlYnVpbGQ+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5EZWZhdWx0PC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1Z0RMTDwvUnVudGltZUxpYnJhcnk+DQorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+DQorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPg0KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+DQorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4NCisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPg0KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxMaW5rPg0KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmlhNjRcWmxpYkRsbERlYnVnXHpsaWJ3YXBpLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPg0KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKW1pbml6aXAuZXhlPC9PdXRwdXRGaWxlPg0KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPg0KKyAgICAgIDxQcm9ncmFtRGF0YWJhc2VGaWxlPiQoT3V0RGlyKW1pbml6aXAucGRiPC9Qcm9ncmFtRGF0YWJhc2VGaWxlPg0KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPg0KKyAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVJQTY0PC9UYXJnZXRNYWNoaW5lPg0KKyAgICA8L0xpbms+DQorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+DQorICAgIDxNaWRsPg0KKyAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50Pg0KKyAgICA8L01pZGw+DQorICAgIDxDbENvbXBpbGU+DQorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPg0KKyAgICAgIDxPbWl0RnJhbWVQb2ludGVycz50cnVlPC9PbWl0RnJhbWVQb2ludGVycz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtaW5pemlwOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO1pMSUJfV0lOQVBJO05ERUJVRztfQ09OU09MRTtXSU42NDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkRlZmF1bHQ8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERMTDwvUnVudGltZUxpYnJhcnk+DQorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+DQorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPg0KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4NCisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPg0KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+DQorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4NCisgICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5Qcm9ncmFtRGF0YWJhc2U8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8TGluaz4NCisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz54NjRcWmxpYkRsbFJlbGVhc2VcemxpYndhcGkubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+DQorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpbWluaXppcC5leGU8L091dHB1dEZpbGU+DQorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+DQorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+DQorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+DQorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4NCisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPg0KKyAgICA8L0xpbms+DQorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPg0KKyAgICA8TWlkbD4NCisgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+SXRhbml1bTwvVGFyZ2V0RW52aXJvbm1lbnQ+DQorICAgIDwvTWlkbD4NCisgICAgPENsQ29tcGlsZT4NCisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+DQorICAgICAgPE9taXRGcmFtZVBvaW50ZXJzPnRydWU8L09taXRGcmFtZVBvaW50ZXJzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOy4uXC4uXG1pbml6aXA7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7WkxJQl9XSU5BUEk7TkRFQlVHO19DT05TT0xFO1dJTjY0OyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RGVmYXVsdDwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRExMPC9SdW50aW1lTGlicmFyeT4NCisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4NCisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+DQorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPg0KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+DQorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4NCisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPg0KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxMaW5rPg0KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmlhNjRcWmxpYkRsbFJlbGVhc2VcemxpYndhcGkubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+DQorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpbWluaXppcC5leGU8L091dHB1dEZpbGU+DQorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+DQorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+DQorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+DQorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4NCisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lSUE2NDwvVGFyZ2V0TWFjaGluZT4NCisgICAgPC9MaW5rPg0KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KKyAgPEl0ZW1Hcm91cD4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxtaW5pemlwXG1pbml6aXAuYyIgLz4NCisgIDwvSXRlbUdyb3VwPg0KKyAgPEl0ZW1Hcm91cD4NCisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0iemxpYnZjLnZjeHByb2oiPg0KKyAgICAgIDxQcm9qZWN0Pns4ZmQ4MjZmOC0zNzM5LTQ0ZTYtOGNjOC05OTcxMjJlNTNiOGR9PC9Qcm9qZWN0Pg0KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+DQorICA8L0l0ZW1Hcm91cD4NCisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+DQorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPg0KKyAgPC9JbXBvcnRHcm91cD4NCis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvdnN0dWRpby92YzEwL21pbml6aXAudmN4cHJvai5maWx0ZXJzIGIvc3JjL2NvbnRyaWIvdnN0dWRpby92YzEwL21pbml6aXAudmN4cHJvai5maWx0ZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNzNjZDMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29udHJpYi92c3R1ZGlvL3ZjMTAvbWluaXppcC52Y3hwcm9qLmZpbHRlcnMKQEAgLTAsMCArMSwyMiBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCis8UHJvamVjdCBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+DQorICA8SXRlbUdyb3VwPg0KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlcyI+DQorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+e2MwNDE5YjQwLWJmNTAtNDBkYS1iMTUzLWZmNzQyMTViNzlkZX08L1VuaXF1ZUlkZW50aWZpZXI+DQorICAgICAgPEV4dGVuc2lvbnM+Y3BwO2M7Y3h4O2RlZjtvZGw7aWRsO2hwajtiYXQ7YXNtPC9FeHRlbnNpb25zPg0KKyAgICA8L0ZpbHRlcj4NCisgICAgPEZpbHRlciBJbmNsdWRlPSJIZWFkZXIgRmlsZXMiPg0KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPntiYjg3YjA3MC03MzViLTQ3OGUtOTJjZS03MzgzYWJiMmYzNmN9PC9VbmlxdWVJZGVudGlmaWVyPg0KKyAgICAgIDxFeHRlbnNpb25zPmg7aHBwO2h4eDtobTtpbmw7aW5jPC9FeHRlbnNpb25zPg0KKyAgICA8L0ZpbHRlcj4NCisgICAgPEZpbHRlciBJbmNsdWRlPSJSZXNvdXJjZSBGaWxlcyI+DQorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+e2Y0NmFiNmE2LTU0OGYtNDNjYi1hZTk2LTY4MWFiYjViZDVkYn08L1VuaXF1ZUlkZW50aWZpZXI+DQorICAgICAgPEV4dGVuc2lvbnM+cmM7aWNvO2N1cjtibXA7ZGxnO3JjMjtyY3Q7YmluO3JncztnaWY7anBnO2pwZWc7anBlPC9FeHRlbnNpb25zPg0KKyAgICA8L0ZpbHRlcj4NCisgIDwvSXRlbUdyb3VwPg0KKyAgPEl0ZW1Hcm91cD4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxtaW5pemlwXG1pbml6aXAuYyI+DQorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICA8L0l0ZW1Hcm91cD4NCis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvdnN0dWRpby92YzEwL3Rlc3R6bGliLnZjeHByb2ogYi9zcmMvY29udHJpYi92c3R1ZGlvL3ZjMTAvdGVzdHpsaWIudmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDg4ZDE3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbnRyaWIvdnN0dWRpby92YzEwL3Rlc3R6bGliLnZjeHByb2oKQEAgLTAsMCArMSw0MjAgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+DQorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+DQorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPg0KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8SXRhbml1bSI+DQorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+DQorICAgICAgPFBsYXRmb3JtPkl0YW5pdW08L1BsYXRmb3JtPg0KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPg0KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPg0KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+DQorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+DQorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPg0KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPg0KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPg0KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSI+DQorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZVdpdGhvdXRBc208L0NvbmZpZ3VyYXRpb24+DQorICAgICAgPFBsYXRmb3JtPkl0YW5pdW08L1BsYXRmb3JtPg0KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZVdpdGhvdXRBc218V2luMzIiPg0KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2VXaXRob3V0QXNtPC9Db25maWd1cmF0aW9uPg0KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+DQorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+DQorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlV2l0aG91dEFzbXx4NjQiPg0KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2VXaXRob3V0QXNtPC9Db25maWd1cmF0aW9uPg0KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPg0KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxJdGFuaXVtIj4NCisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPg0KKyAgICAgIDxQbGF0Zm9ybT5JdGFuaXVtPC9QbGF0Zm9ybT4NCisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPg0KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+DQorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4NCisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4NCisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPg0KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPg0KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0KKyAgPC9JdGVtR3JvdXA+DQorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+DQorICAgIDxQcm9qZWN0R3VpZD57QUE2NjY2QUEtRTA5Ri00MTM1LTlDMEMtNEZFNTBDM0M2NTRCfTwvUHJvamVjdEd1aWQ+DQorICAgIDxSb290TmFtZXNwYWNlPnRlc3R6bGliPC9Sb290TmFtZXNwYWNlPg0KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+DQorICA8L1Byb3BlcnR5R3JvdXA+DQorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPg0KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPg0KKyAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0Pg0KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4NCisgIDwvUHJvcGVydHlHcm91cD4NCisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+DQorICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+DQorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPg0KKyAgPC9Qcm9wZXJ0eUdyb3VwPg0KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4NCisgICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4NCisgIDwvUHJvcGVydHlHcm91cD4NCisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPg0KKyAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0Pg0KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4NCisgIDwvUHJvcGVydHlHcm91cD4NCisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4NCisgICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4NCisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+DQorICA8L1Byb3BlcnR5R3JvdXA+DQorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+DQorICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+DQorICA8L1Byb3BlcnR5R3JvdXA+DQorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPg0KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4NCisgIDwvUHJvcGVydHlHcm91cD4NCisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPg0KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4NCisgIDwvUHJvcGVydHlHcm91cD4NCisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPg0KKyAgPC9Qcm9wZXJ0eUdyb3VwPg0KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+DQorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4NCisgIDwvSW1wb3J0R3JvdXA+DQorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4NCisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPg0KKyAgPC9JbXBvcnRHcm91cD4NCisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4NCisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPg0KKyAgPC9JbXBvcnRHcm91cD4NCisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4NCisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPg0KKyAgPC9JbXBvcnRHcm91cD4NCisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+DQorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4NCisgIDwvSW1wb3J0R3JvdXA+DQorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4NCisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPg0KKyAgPC9JbXBvcnRHcm91cD4NCisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPg0KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+DQorICA8L0ltcG9ydEdyb3VwPg0KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPg0KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+DQorICA8L0ltcG9ydEdyb3VwPg0KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4NCisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPg0KKyAgPC9JbXBvcnRHcm91cD4NCisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+DQorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4NCisgIDwvSW1wb3J0R3JvdXA+DQorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4NCisgIDxQcm9wZXJ0eUdyb3VwPg0KKyAgICA8X1Byb2plY3RGaWxlVmVyc2lvbj4xMC4wLjMwMTI4LjE8L19Qcm9qZWN0RmlsZVZlcnNpb24+DQorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPng4NlxUZXN0WmxpYiQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+DQorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPng4NlxUZXN0WmxpYiQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPg0KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj50cnVlPC9MaW5rSW5jcmVtZW50YWw+DQorICAgIDxHZW5lcmF0ZU1hbmlmZXN0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5mYWxzZTwvR2VuZXJhdGVNYW5pZmVzdD4NCisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfFdpbjMyJyI+eDg2XFRlc3RabGliJChDb25maWd1cmF0aW9uKVw8L091dERpcj4NCisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfFdpbjMyJyI+eDg2XFRlc3RabGliJChDb25maWd1cmF0aW9uKVxUbXBcPC9JbnREaXI+DQorICAgIDxMaW5rSW5jcmVtZW50YWwgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiciPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+DQorICAgIDxHZW5lcmF0ZU1hbmlmZXN0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218V2luMzInIj5mYWxzZTwvR2VuZXJhdGVNYW5pZmVzdD4NCisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj54ODZcVGVzdFpsaWIkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPg0KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPng4NlxUZXN0WmxpYiQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPg0KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+DQorICAgIDxHZW5lcmF0ZU1hbmlmZXN0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPmZhbHNlPC9HZW5lcmF0ZU1hbmlmZXN0Pg0KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+eDY0XFRlc3RabGliJChDb25maWd1cmF0aW9uKVw8L091dERpcj4NCisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPng2NFxUZXN0WmxpYiQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPg0KKyAgICA8R2VuZXJhdGVNYW5pZmVzdCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPmZhbHNlPC9HZW5lcmF0ZU1hbmlmZXN0Pg0KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciPmlhNjRcVGVzdFpsaWIkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPg0KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciPmlhNjRcVGVzdFpsaWIkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4NCisgICAgPExpbmtJbmNyZW1lbnRhbCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIj50cnVlPC9MaW5rSW5jcmVtZW50YWw+DQorICAgIDxHZW5lcmF0ZU1hbmlmZXN0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciPmZhbHNlPC9HZW5lcmF0ZU1hbmlmZXN0Pg0KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218eDY0JyI+eDY0XFRlc3RabGliJChDb25maWd1cmF0aW9uKVw8L091dERpcj4NCisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfHg2NCciPng2NFxUZXN0WmxpYiQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPg0KKyAgICA8R2VuZXJhdGVNYW5pZmVzdCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfHg2NCciPmZhbHNlPC9HZW5lcmF0ZU1hbmlmZXN0Pg0KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSciPmlhNjRcVGVzdFpsaWIkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPg0KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSciPmlhNjRcVGVzdFpsaWIkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4NCisgICAgPExpbmtJbmNyZW1lbnRhbCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0nIj5mYWxzZTwvTGlua0luY3JlbWVudGFsPg0KKyAgICA8R2VuZXJhdGVNYW5pZmVzdCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0nIj5mYWxzZTwvR2VuZXJhdGVNYW5pZmVzdD4NCisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+eDY0XFRlc3RabGliJChDb25maWd1cmF0aW9uKVw8L091dERpcj4NCisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+eDY0XFRlc3RabGliJChDb25maWd1cmF0aW9uKVxUbXBcPC9JbnREaXI+DQorICAgIDxHZW5lcmF0ZU1hbmlmZXN0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5mYWxzZTwvR2VuZXJhdGVNYW5pZmVzdD4NCisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPmlhNjRcVGVzdFpsaWIkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPg0KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyI+aWE2NFxUZXN0WmxpYiQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPg0KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyI+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4NCisgICAgPEdlbmVyYXRlTWFuaWZlc3QgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIj5mYWxzZTwvR2VuZXJhdGVNYW5pZmVzdD4NCisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4NCisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4NCisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4NCisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4NCisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0nIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4NCisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218V2luMzInIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4NCisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218eDY0JyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218eDY0JyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0Pg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0Pg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0Pg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgLz4NCisgIDwvUHJvcGVydHlHcm91cD4NCisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4NCisgICAgPENsQ29tcGlsZT4NCisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+QVNNVjtBU01JTkY7V0lOMzI7WkxJQl9XSU5BUEk7X0RFQlVHO19DT05TT0xFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19XQVJOSU5HUzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPE1pbmltYWxSZWJ1aWxkPnRydWU8L01pbmltYWxSZWJ1aWxkPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RGVmYXVsdDwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWc8L1J1bnRpbWVMaWJyYXJ5Pg0KKyAgICAgIDxCdWZmZXJTZWN1cml0eUNoZWNrPmZhbHNlPC9CdWZmZXJTZWN1cml0eUNoZWNrPg0KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4NCisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPg0KKyAgICAgIDxBc3NlbWJsZXJPdXRwdXQ+QXNzZW1ibHlBbmRTb3VyY2VDb2RlPC9Bc3NlbWJsZXJPdXRwdXQ+DQorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4NCisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPg0KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PkVkaXRBbmRDb250aW51ZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxMaW5rPg0KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPi4uXC4uXG1hc214ODZcbWF0Y2g2ODYub2JqOy4uXC4uXG1hc214ODZcaW5mZmFzMzIub2JqOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+DQorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpdGVzdHpsaWIuZXhlPC9PdXRwdXRGaWxlPg0KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPg0KKyAgICAgIDxQcm9ncmFtRGF0YWJhc2VGaWxlPiQoT3V0RGlyKXRlc3R6bGliLnBkYjwvUHJvZ3JhbURhdGFiYXNlRmlsZT4NCisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4NCisgICAgICA8UmFuZG9taXplZEJhc2VBZGRyZXNzPmZhbHNlPC9SYW5kb21pemVkQmFzZUFkZHJlc3M+DQorICAgICAgPERhdGFFeGVjdXRpb25QcmV2ZW50aW9uPg0KKyAgICAgIDwvRGF0YUV4ZWN1dGlvblByZXZlbnRpb24+DQorICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg4NjwvVGFyZ2V0TWFjaGluZT4NCisgICAgPC9MaW5rPg0KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiciPg0KKyAgICA8Q2xDb21waWxlPg0KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4NCisgICAgICA8T21pdEZyYW1lUG9pbnRlcnM+dHJ1ZTwvT21pdEZyYW1lUG9pbnRlcnM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7WkxJQl9XSU5BUEk7TkRFQlVHO19DT05TT0xFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19XQVJOSU5HUzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkRlZmF1bHQ8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+DQorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+DQorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPg0KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4NCisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPg0KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+DQorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4NCisgICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5Qcm9ncmFtRGF0YWJhc2U8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8TGluaz4NCisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpcil0ZXN0emxpYi5leGU8L091dHB1dEZpbGU+DQorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+DQorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+DQorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+DQorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4NCisgICAgICA8UmFuZG9taXplZEJhc2VBZGRyZXNzPmZhbHNlPC9SYW5kb21pemVkQmFzZUFkZHJlc3M+DQorICAgICAgPERhdGFFeGVjdXRpb25QcmV2ZW50aW9uPg0KKyAgICAgIDwvRGF0YUV4ZWN1dGlvblByZXZlbnRpb24+DQorICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg4NjwvVGFyZ2V0TWFjaGluZT4NCisgICAgPC9MaW5rPg0KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+DQorICAgIDxDbENvbXBpbGU+DQorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPg0KKyAgICAgIDxPbWl0RnJhbWVQb2ludGVycz50cnVlPC9PbWl0RnJhbWVQb2ludGVycz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5BU01WO0FTTUlORjtXSU4zMjtaTElCX1dJTkFQSTtOREVCVUc7X0NPTlNPTEU7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX1dBUk5JTkdTOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RGVmYXVsdDwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4NCisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4NCisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+DQorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPg0KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+DQorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4NCisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPg0KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxMaW5rPg0KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPi4uXC4uXG1hc214ODZcbWF0Y2g2ODYub2JqOy4uXC4uXG1hc214ODZcaW5mZmFzMzIub2JqOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+DQorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpdGVzdHpsaWIuZXhlPC9PdXRwdXRGaWxlPg0KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPg0KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPg0KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPg0KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+DQorICAgICAgPFJhbmRvbWl6ZWRCYXNlQWRkcmVzcz5mYWxzZTwvUmFuZG9taXplZEJhc2VBZGRyZXNzPg0KKyAgICAgIDxEYXRhRXhlY3V0aW9uUHJldmVudGlvbj4NCisgICAgICA8L0RhdGFFeGVjdXRpb25QcmV2ZW50aW9uPg0KKyAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVYODY8L1RhcmdldE1hY2hpbmU+DQorICAgIDwvTGluaz4NCisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4NCisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+DQorICAgIDxDbENvbXBpbGU+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+QVNNVjtBU01JTkY7V0lOMzI7WkxJQl9XSU5BUEk7X0RFQlVHO19DT05TT0xFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19XQVJOSU5HUzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5EZWZhdWx0PC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1Z0RMTDwvUnVudGltZUxpYnJhcnk+DQorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+DQorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxMaW5rPg0KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPi4uXC4uXG1hc214NjRcZ3ZtYXQ2NC5vYmo7Li5cLi5cbWFzbXg2NFxpbmZmYXN4NjQub2JqOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+DQorICAgIDwvTGluaz4NCisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4NCisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciPg0KKyAgICA8TWlkbD4NCisgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+SXRhbml1bTwvVGFyZ2V0RW52aXJvbm1lbnQ+DQorICAgIDwvTWlkbD4NCisgICAgPENsQ29tcGlsZT4NCisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+WkxJQl9XSU5BUEk7X0RFQlVHO19DT05TT0xFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19XQVJOSU5HUztXSU42NDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPE1pbmltYWxSZWJ1aWxkPnRydWU8L01pbmltYWxSZWJ1aWxkPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RGVmYXVsdDwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWdETEw8L1J1bnRpbWVMaWJyYXJ5Pg0KKyAgICAgIDxCdWZmZXJTZWN1cml0eUNoZWNrPmZhbHNlPC9CdWZmZXJTZWN1cml0eUNoZWNrPg0KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4NCisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPg0KKyAgICAgIDxBc3NlbWJsZXJPdXRwdXQ+QXNzZW1ibHlBbmRTb3VyY2VDb2RlPC9Bc3NlbWJsZXJPdXRwdXQ+DQorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4NCisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPg0KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxMaW5rPg0KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKXRlc3R6bGliLmV4ZTwvT3V0cHV0RmlsZT4NCisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4NCisgICAgICA8UHJvZ3JhbURhdGFiYXNlRmlsZT4kKE91dERpcil0ZXN0emxpYi5wZGI8L1Byb2dyYW1EYXRhYmFzZUZpbGU+DQorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+DQorICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZUlBNjQ8L1RhcmdldE1hY2hpbmU+DQorICAgIDwvTGluaz4NCisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4NCisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218eDY0JyI+DQorICAgIDxDbENvbXBpbGU+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7WkxJQl9XSU5BUEk7TkRFQlVHO19DT05TT0xFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19XQVJOSU5HUzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5EZWZhdWx0PC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWRETEw8L1J1bnRpbWVMaWJyYXJ5Pg0KKyAgICAgIDxCdWZmZXJTZWN1cml0eUNoZWNrPmZhbHNlPC9CdWZmZXJTZWN1cml0eUNoZWNrPg0KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8TGluaz4NCisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4lKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPg0KKyAgICA8L0xpbms+DQorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0nIj4NCisgICAgPE1pZGw+DQorICAgICAgPFRhcmdldEVudmlyb25tZW50Pkl0YW5pdW08L1RhcmdldEVudmlyb25tZW50Pg0KKyAgICA8L01pZGw+DQorICAgIDxDbENvbXBpbGU+DQorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPg0KKyAgICAgIDxPbWl0RnJhbWVQb2ludGVycz50cnVlPC9PbWl0RnJhbWVQb2ludGVycz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5aTElCX1dJTkFQSTtOREVCVUc7X0NPTlNPTEU7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX1dBUk5JTkdTO1dJTjY0OyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RGVmYXVsdDwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRExMPC9SdW50aW1lTGlicmFyeT4NCisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4NCisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+DQorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPg0KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+DQorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4NCisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPg0KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxMaW5rPg0KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKXRlc3R6bGliLmV4ZTwvT3V0cHV0RmlsZT4NCisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4NCisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4NCisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4NCisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPg0KKyAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVJQTY0PC9UYXJnZXRNYWNoaW5lPg0KKyAgICA8L0xpbms+DQorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+DQorICAgIDxDbENvbXBpbGU+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+QVNNVjtBU01JTkY7V0lOMzI7WkxJQl9XSU5BUEk7TkRFQlVHO19DT05TT0xFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19XQVJOSU5HUzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5EZWZhdWx0PC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWRETEw8L1J1bnRpbWVMaWJyYXJ5Pg0KKyAgICAgIDxCdWZmZXJTZWN1cml0eUNoZWNrPmZhbHNlPC9CdWZmZXJTZWN1cml0eUNoZWNrPg0KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8TGluaz4NCisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4uLlwuLlxtYXNteDY0XGd2bWF0NjQub2JqOy4uXC4uXG1hc214NjRcaW5mZmFzeDY0Lm9iajslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPg0KKyAgICA8L0xpbms+DQorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPg0KKyAgICA8TWlkbD4NCisgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+SXRhbml1bTwvVGFyZ2V0RW52aXJvbm1lbnQ+DQorICAgIDwvTWlkbD4NCisgICAgPENsQ29tcGlsZT4NCisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+DQorICAgICAgPE9taXRGcmFtZVBvaW50ZXJzPnRydWU8L09taXRGcmFtZVBvaW50ZXJzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPlpMSUJfV0lOQVBJO05ERUJVRztfQ09OU09MRTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fV0FSTklOR1M7V0lONjQ7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5EZWZhdWx0PC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWRETEw8L1J1bnRpbWVMaWJyYXJ5Pg0KKyAgICAgIDxCdWZmZXJTZWN1cml0eUNoZWNrPmZhbHNlPC9CdWZmZXJTZWN1cml0eUNoZWNrPg0KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4NCisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+DQorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4NCisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPg0KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+DQorICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+UHJvZ3JhbURhdGFiYXNlPC9EZWJ1Z0luZm9ybWF0aW9uRm9ybWF0Pg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPExpbms+DQorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpdGVzdHpsaWIuZXhlPC9PdXRwdXRGaWxlPg0KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPg0KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPg0KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPg0KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+DQorICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZUlBNjQ8L1RhcmdldE1hY2hpbmU+DQorICAgIDwvTGluaz4NCisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4NCisgIDxJdGVtR3JvdXA+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cYWRsZXIzMi5jIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXGNvbXByZXNzLmMiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cY3JjMzIuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxkZWZsYXRlLmMiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5caW5mYmFjay5jIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXG1hc214NjRcaW5mZmFzODY2NC5jIj4NCisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+DQorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4NCisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+DQorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4NCisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4NCisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXGluZmZhc3QuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxpbmZsYXRlLmMiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5caW5mdHJlZXMuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0ZXN0emxpYlx0ZXN0emxpYi5jIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHRyZWVzLmMiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cdW5jb21wci5jIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHp1dGlsLmMiIC8+DQorICA8L0l0ZW1Hcm91cD4NCisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+DQorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPg0KKyAgPC9JbXBvcnRHcm91cD4NCis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvdnN0dWRpby92YzEwL3Rlc3R6bGliLnZjeHByb2ouZmlsdGVycyBiL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxMC90ZXN0emxpYi52Y3hwcm9qLmZpbHRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ5ZGFhOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxMC90ZXN0emxpYi52Y3hwcm9qLmZpbHRlcnMKQEAgLTAsMCArMSw1OCBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCis8UHJvamVjdCBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+DQorICA8SXRlbUdyb3VwPg0KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlcyI+DQorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+e2MxZjZhMmUzLTVkYTUtNDk1NS04NjUzLTMxMGQzZWZlMDVhOX08L1VuaXF1ZUlkZW50aWZpZXI+DQorICAgICAgPEV4dGVuc2lvbnM+Y3BwO2M7Y3h4O2RlZjtvZGw7aWRsO2hwajtiYXQ7YXNtPC9FeHRlbnNpb25zPg0KKyAgICA8L0ZpbHRlcj4NCisgICAgPEZpbHRlciBJbmNsdWRlPSJIZWFkZXIgRmlsZXMiPg0KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPntjMmFhZmZkYy0yYzk1LTRkNmYtODQ2Ni00YmVjNTg5MGFmMmN9PC9VbmlxdWVJZGVudGlmaWVyPg0KKyAgICAgIDxFeHRlbnNpb25zPmg7aHBwO2h4eDtobTtpbmw7aW5jPC9FeHRlbnNpb25zPg0KKyAgICA8L0ZpbHRlcj4NCisgICAgPEZpbHRlciBJbmNsdWRlPSJSZXNvdXJjZSBGaWxlcyI+DQorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+e2MyNzRmZTA3LTA1ZjItNDYxYy05NjRiLWY2MzQxZTRlN2ViNX08L1VuaXF1ZUlkZW50aWZpZXI+DQorICAgICAgPEV4dGVuc2lvbnM+cmM7aWNvO2N1cjtibXA7ZGxnO3JjMjtyY3Q7YmluO3JncztnaWY7anBnO2pwZWc7anBlPC9FeHRlbnNpb25zPg0KKyAgICA8L0ZpbHRlcj4NCisgIDwvSXRlbUdyb3VwPg0KKyAgPEl0ZW1Hcm91cD4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxhZGxlcjMyLmMiPg0KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXGNvbXByZXNzLmMiPg0KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXGNyYzMyLmMiPg0KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXGRlZmxhdGUuYyI+DQorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5caW5mYmFjay5jIj4NCisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxtYXNteDY0XGluZmZhczg2NjQuYyI+DQorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5caW5mZmFzdC5jIj4NCisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxpbmZsYXRlLmMiPg0KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXGluZnRyZWVzLmMiPg0KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRlc3R6bGliXHRlc3R6bGliLmMiPg0KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHRyZWVzLmMiPg0KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHVuY29tcHIuYyI+DQorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cenV0aWwuYyI+DQorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICA8L0l0ZW1Hcm91cD4NCis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvdnN0dWRpby92YzEwL3Rlc3R6bGliZGxsLnZjeHByb2ogYi9zcmMvY29udHJpYi92c3R1ZGlvL3ZjMTAvdGVzdHpsaWJkbGwudmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2IwOGZmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbnRyaWIvdnN0dWRpby92YzEwL3Rlc3R6bGliZGxsLnZjeHByb2oKQEAgLTAsMCArMSwzMTAgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+DQorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+DQorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPg0KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8SXRhbml1bSI+DQorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+DQorICAgICAgPFBsYXRmb3JtPkl0YW5pdW08L1BsYXRmb3JtPg0KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPg0KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPg0KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+DQorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+DQorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPg0KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPg0KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPg0KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxJdGFuaXVtIj4NCisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPg0KKyAgICAgIDxQbGF0Zm9ybT5JdGFuaXVtPC9QbGF0Zm9ybT4NCisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPg0KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+DQorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4NCisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4NCisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPg0KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPg0KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0KKyAgPC9JdGVtR3JvdXA+DQorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+DQorICAgIDxQcm9qZWN0R3VpZD57QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzNjZBfTwvUHJvamVjdEd1aWQ+DQorICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4NCisgIDwvUHJvcGVydHlHcm91cD4NCisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+DQorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+DQorICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+DQorICA8L1Byb3BlcnR5R3JvdXA+DQorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPg0KKyAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0Pg0KKyAgPC9Qcm9wZXJ0eUdyb3VwPg0KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+DQorICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+DQorICA8L1Byb3BlcnR5R3JvdXA+DQorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+DQorICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+DQorICA8L1Byb3BlcnR5R3JvdXA+DQorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPg0KKyAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0Pg0KKyAgPC9Qcm9wZXJ0eUdyb3VwPg0KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+DQorICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+DQorICA8L1Byb3BlcnR5R3JvdXA+DQorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4NCisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPg0KKyAgPC9JbXBvcnRHcm91cD4NCisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPg0KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+DQorICA8L0ltcG9ydEdyb3VwPg0KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPg0KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+DQorICA8L0ltcG9ydEdyb3VwPg0KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4NCisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPg0KKyAgPC9JbXBvcnRHcm91cD4NCisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPg0KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+DQorICA8L0ltcG9ydEdyb3VwPg0KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPg0KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+DQorICA8L0ltcG9ydEdyb3VwPg0KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4NCisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPg0KKyAgPC9JbXBvcnRHcm91cD4NCisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPg0KKyAgPFByb3BlcnR5R3JvdXA+DQorICAgIDxfUHJvamVjdEZpbGVWZXJzaW9uPjEwLjAuMzAxMjguMTwvX1Byb2plY3RGaWxlVmVyc2lvbj4NCisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+eDg2XFRlc3RabGliRGxsJChDb25maWd1cmF0aW9uKVw8L091dERpcj4NCisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+eDg2XFRlc3RabGliRGxsJChDb25maWd1cmF0aW9uKVxUbXBcPC9JbnREaXI+DQorICAgIDxMaW5rSW5jcmVtZW50YWwgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4NCisgICAgPEdlbmVyYXRlTWFuaWZlc3QgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPmZhbHNlPC9HZW5lcmF0ZU1hbmlmZXN0Pg0KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPng4NlxUZXN0WmxpYkRsbCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+DQorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+eDg2XFRlc3RabGliRGxsJChDb25maWd1cmF0aW9uKVxUbXBcPC9JbnREaXI+DQorICAgIDxMaW5rSW5jcmVtZW50YWwgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4NCisgICAgPEdlbmVyYXRlTWFuaWZlc3QgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+ZmFsc2U8L0dlbmVyYXRlTWFuaWZlc3Q+DQorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj54NjRcVGVzdFpsaWJEbGwkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPg0KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+eDY0XFRlc3RabGliRGxsJChDb25maWd1cmF0aW9uKVxUbXBcPC9JbnREaXI+DQorICAgIDxMaW5rSW5jcmVtZW50YWwgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj50cnVlPC9MaW5rSW5jcmVtZW50YWw+DQorICAgIDxHZW5lcmF0ZU1hbmlmZXN0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+ZmFsc2U8L0dlbmVyYXRlTWFuaWZlc3Q+DQorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+aWE2NFxUZXN0WmxpYkRsbCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+DQorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+aWE2NFxUZXN0WmxpYkRsbCQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPg0KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4NCisgICAgPEdlbmVyYXRlTWFuaWZlc3QgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+ZmFsc2U8L0dlbmVyYXRlTWFuaWZlc3Q+DQorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPng2NFxUZXN0WmxpYkRsbCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+DQorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPng2NFxUZXN0WmxpYkRsbCQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPg0KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5mYWxzZTwvTGlua0luY3JlbWVudGFsPg0KKyAgICA8R2VuZXJhdGVNYW5pZmVzdCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+ZmFsc2U8L0dlbmVyYXRlTWFuaWZlc3Q+DQorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIj5pYTY0XFRlc3RabGliRGxsJChDb25maWd1cmF0aW9uKVw8L091dERpcj4NCisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPmlhNjRcVGVzdFpsaWJEbGwkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4NCisgICAgPExpbmtJbmNyZW1lbnRhbCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+DQorICAgIDxHZW5lcmF0ZU1hbmlmZXN0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyI+ZmFsc2U8L0dlbmVyYXRlTWFuaWZlc3Q+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4NCisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4NCisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4NCisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIC8+DQorICA8L1Byb3BlcnR5R3JvdXA+DQorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+DQorICAgIDxDbENvbXBpbGU+DQorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOy4uXC4uXG1pbml6aXA7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7WkxJQl9XSU5BUEk7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8TWluaW1hbFJlYnVpbGQ+dHJ1ZTwvTWluaW1hbFJlYnVpbGQ+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5EZWZhdWx0PC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1ZzwvUnVudGltZUxpYnJhcnk+DQorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+DQorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPg0KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+DQorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4NCisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPg0KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PkVkaXRBbmRDb250aW51ZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxMaW5rPg0KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPng4NlxabGliRGxsRGVidWdcemxpYndhcGkubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+DQorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpdGVzdHpsaWJkbGwuZXhlPC9PdXRwdXRGaWxlPg0KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPg0KKyAgICAgIDxQcm9ncmFtRGF0YWJhc2VGaWxlPiQoT3V0RGlyKXRlc3R6bGliLnBkYjwvUHJvZ3JhbURhdGFiYXNlRmlsZT4NCisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4NCisgICAgICA8UmFuZG9taXplZEJhc2VBZGRyZXNzPmZhbHNlPC9SYW5kb21pemVkQmFzZUFkZHJlc3M+DQorICAgICAgPERhdGFFeGVjdXRpb25QcmV2ZW50aW9uPg0KKyAgICAgIDwvRGF0YUV4ZWN1dGlvblByZXZlbnRpb24+DQorICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg4NjwvVGFyZ2V0TWFjaGluZT4NCisgICAgPC9MaW5rPg0KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+DQorICAgIDxDbENvbXBpbGU+DQorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPg0KKyAgICAgIDxPbWl0RnJhbWVQb2ludGVycz50cnVlPC9PbWl0RnJhbWVQb2ludGVycz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtaW5pemlwOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO1pMSUJfV0lOQVBJO05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkRlZmF1bHQ8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+DQorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+DQorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPg0KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4NCisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPg0KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+DQorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4NCisgICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5Qcm9ncmFtRGF0YWJhc2U8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8TGluaz4NCisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz54ODZcWmxpYkRsbFJlbGVhc2VcemxpYndhcGkubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+DQorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpdGVzdHpsaWJkbGwuZXhlPC9PdXRwdXRGaWxlPg0KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPg0KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPg0KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPg0KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+DQorICAgICAgPFJhbmRvbWl6ZWRCYXNlQWRkcmVzcz5mYWxzZTwvUmFuZG9taXplZEJhc2VBZGRyZXNzPg0KKyAgICAgIDxEYXRhRXhlY3V0aW9uUHJldmVudGlvbj4NCisgICAgICA8L0RhdGFFeGVjdXRpb25QcmV2ZW50aW9uPg0KKyAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVYODY8L1RhcmdldE1hY2hpbmU+DQorICAgIDwvTGluaz4NCisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4NCisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+DQorICAgIDxNaWRsPg0KKyAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50Pg0KKyAgICA8L01pZGw+DQorICAgIDxDbENvbXBpbGU+DQorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOy4uXC4uXG1pbml6aXA7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7WkxJQl9XSU5BUEk7X0RFQlVHO19DT05TT0xFO1dJTjY0OyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8TWluaW1hbFJlYnVpbGQ+dHJ1ZTwvTWluaW1hbFJlYnVpbGQ+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5EZWZhdWx0PC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1Z0RMTDwvUnVudGltZUxpYnJhcnk+DQorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+DQorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPg0KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+DQorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4NCisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPg0KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxMaW5rPg0KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPng2NFxabGliRGxsRGVidWdcemxpYndhcGkubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+DQorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpdGVzdHpsaWJkbGwuZXhlPC9PdXRwdXRGaWxlPg0KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPg0KKyAgICAgIDxQcm9ncmFtRGF0YWJhc2VGaWxlPiQoT3V0RGlyKXRlc3R6bGliLnBkYjwvUHJvZ3JhbURhdGFiYXNlRmlsZT4NCisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4NCisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPg0KKyAgICA8L0xpbms+DQorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIj4NCisgICAgPE1pZGw+DQorICAgICAgPFRhcmdldEVudmlyb25tZW50Pkl0YW5pdW08L1RhcmdldEVudmlyb25tZW50Pg0KKyAgICA8L01pZGw+DQorICAgIDxDbENvbXBpbGU+DQorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOy4uXC4uXG1pbml6aXA7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7WkxJQl9XSU5BUEk7X0RFQlVHO19DT05TT0xFO1dJTjY0OyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8TWluaW1hbFJlYnVpbGQ+dHJ1ZTwvTWluaW1hbFJlYnVpbGQ+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5EZWZhdWx0PC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1Z0RMTDwvUnVudGltZUxpYnJhcnk+DQorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+DQorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPg0KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+DQorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4NCisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPg0KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxMaW5rPg0KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmlhNjRcWmxpYkRsbERlYnVnXHpsaWJ3YXBpLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPg0KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKXRlc3R6bGliZGxsLmV4ZTwvT3V0cHV0RmlsZT4NCisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4NCisgICAgICA8UHJvZ3JhbURhdGFiYXNlRmlsZT4kKE91dERpcil0ZXN0emxpYi5wZGI8L1Byb2dyYW1EYXRhYmFzZUZpbGU+DQorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+DQorICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZUlBNjQ8L1RhcmdldE1hY2hpbmU+DQorICAgIDwvTGluaz4NCisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4NCisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4NCisgICAgPE1pZGw+DQorICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+DQorICAgIDwvTWlkbD4NCisgICAgPENsQ29tcGlsZT4NCisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+DQorICAgICAgPE9taXRGcmFtZVBvaW50ZXJzPnRydWU8L09taXRGcmFtZVBvaW50ZXJzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOy4uXC4uXG1pbml6aXA7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7WkxJQl9XSU5BUEk7TkRFQlVHO19DT05TT0xFO1dJTjY0OyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RGVmYXVsdDwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRExMPC9SdW50aW1lTGlicmFyeT4NCisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4NCisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+DQorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPg0KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+DQorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4NCisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPg0KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxMaW5rPg0KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPng2NFxabGliRGxsUmVsZWFzZVx6bGlid2FwaS5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4NCisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpcil0ZXN0emxpYmRsbC5leGU8L091dHB1dEZpbGU+DQorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+DQorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+DQorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+DQorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4NCisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPg0KKyAgICA8L0xpbms+DQorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPg0KKyAgICA8TWlkbD4NCisgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+SXRhbml1bTwvVGFyZ2V0RW52aXJvbm1lbnQ+DQorICAgIDwvTWlkbD4NCisgICAgPENsQ29tcGlsZT4NCisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+DQorICAgICAgPE9taXRGcmFtZVBvaW50ZXJzPnRydWU8L09taXRGcmFtZVBvaW50ZXJzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOy4uXC4uXG1pbml6aXA7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7WkxJQl9XSU5BUEk7TkRFQlVHO19DT05TT0xFO1dJTjY0OyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RGVmYXVsdDwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRExMPC9SdW50aW1lTGlicmFyeT4NCisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4NCisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+DQorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPg0KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+DQorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4NCisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPg0KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxMaW5rPg0KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmlhNjRcWmxpYkRsbFJlbGVhc2VcemxpYndhcGkubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+DQorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpdGVzdHpsaWJkbGwuZXhlPC9PdXRwdXRGaWxlPg0KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPg0KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPg0KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPg0KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+DQorICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZUlBNjQ8L1RhcmdldE1hY2hpbmU+DQorICAgIDwvTGluaz4NCisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4NCisgIDxJdGVtR3JvdXA+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGVzdHpsaWJcdGVzdHpsaWIuYyIgLz4NCisgIDwvSXRlbUdyb3VwPg0KKyAgPEl0ZW1Hcm91cD4NCisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0iemxpYnZjLnZjeHByb2oiPg0KKyAgICAgIDxQcm9qZWN0Pns4ZmQ4MjZmOC0zNzM5LTQ0ZTYtOGNjOC05OTcxMjJlNTNiOGR9PC9Qcm9qZWN0Pg0KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+DQorICA8L0l0ZW1Hcm91cD4NCisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+DQorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPg0KKyAgPC9JbXBvcnRHcm91cD4NCis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvdnN0dWRpby92YzEwL3Rlc3R6bGliZGxsLnZjeHByb2ouZmlsdGVycyBiL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxMC90ZXN0emxpYmRsbC52Y3hwcm9qLmZpbHRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNhODY5MwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxMC90ZXN0emxpYmRsbC52Y3hwcm9qLmZpbHRlcnMKQEAgLTAsMCArMSwyMiBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCis8UHJvamVjdCBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+DQorICA8SXRlbUdyb3VwPg0KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlcyI+DQorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+e2ZhNjFhODlmLTkzZmMtNGM4OS1iMjllLTM2MjI0Yjc1OTJmNH08L1VuaXF1ZUlkZW50aWZpZXI+DQorICAgICAgPEV4dGVuc2lvbnM+Y3BwO2M7Y3h4O2RlZjtvZGw7aWRsO2hwajtiYXQ7YXNtPC9FeHRlbnNpb25zPg0KKyAgICA8L0ZpbHRlcj4NCisgICAgPEZpbHRlciBJbmNsdWRlPSJIZWFkZXIgRmlsZXMiPg0KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPntkNGI4NWRhMC0yYmEyLTQ5MzQtYjU3Zi1lMjU4NGUzODQ4ZWV9PC9VbmlxdWVJZGVudGlmaWVyPg0KKyAgICAgIDxFeHRlbnNpb25zPmg7aHBwO2h4eDtobTtpbmw7aW5jPC9FeHRlbnNpb25zPg0KKyAgICA8L0ZpbHRlcj4NCisgICAgPEZpbHRlciBJbmNsdWRlPSJSZXNvdXJjZSBGaWxlcyI+DQorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+e2U1NzNlMDc1LTAwYmQtNGE3ZC1iZDY3LWE4Y2M5YmZjNWFjYX08L1VuaXF1ZUlkZW50aWZpZXI+DQorICAgICAgPEV4dGVuc2lvbnM+cmM7aWNvO2N1cjtibXA7ZGxnO3JjMjtyY3Q7YmluO3JncztnaWY7anBnO2pwZWc7anBlPC9FeHRlbnNpb25zPg0KKyAgICA8L0ZpbHRlcj4NCisgIDwvSXRlbUdyb3VwPg0KKyAgPEl0ZW1Hcm91cD4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0ZXN0emxpYlx0ZXN0emxpYi5jIj4NCisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgIDwvSXRlbUdyb3VwPg0KKzwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi92c3R1ZGlvL3ZjMTAvemxpYi5yYyBiL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxMC96bGliLnJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhZDI1ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29udHJpYi92c3R1ZGlvL3ZjMTAvemxpYi5yYwpAQCAtMCwwICsxLDMyIEBACisjaW5jbHVkZSA8d2luZG93cy5oPg0KKw0KKyNkZWZpbmUgSURSX1ZFUlNJT04xICAxDQorSURSX1ZFUlNJT04xCVZFUlNJT05JTkZPCU1PVkVBQkxFIElNUFVSRSBMT0FET05DQUxMIERJU0NBUkRBQkxFDQorICBGSUxFVkVSU0lPTgkgMSwgMiwgMTIsIDANCisgIFBST0RVQ1RWRVJTSU9OIDEsIDIsIDEyLCAwDQorICBGSUxFRkxBR1NNQVNLCVZTX0ZGSV9GSUxFRkxBR1NNQVNLDQorICBGSUxFRkxBR1MJMA0KKyAgRklMRU9TCVZPU19ET1NfV0lORE9XUzMyDQorICBGSUxFVFlQRQlWRlRfRExMDQorICBGSUxFU1VCVFlQRQkwCS8vIG5vdCB1c2VkDQorQkVHSU4NCisgIEJMT0NLICJTdHJpbmdGaWxlSW5mbyINCisgIEJFR0lODQorICAgIEJMT0NLICIwNDA5MDRFNCINCisgICAgLy9sYW5ndWFnZSBJRCA9IFUuUy4gRW5nbGlzaCwgY2hhciBzZXQgPSBXaW5kb3dzLCBNdWx0aWxpbmd1YWwNCisNCisgICAgQkVHSU4NCisgICAgICBWQUxVRSAiRmlsZURlc2NyaXB0aW9uIiwgInpsaWIgZGF0YSBjb21wcmVzc2lvbiBhbmQgWklQIGZpbGUgSS9PIGxpYnJhcnlcMCINCisgICAgICBWQUxVRSAiRmlsZVZlcnNpb24iLAkiMS4yLjEyXDAiDQorICAgICAgVkFMVUUgIkludGVybmFsTmFtZSIsCSJ6bGliXDAiDQorICAgICAgVkFMVUUgIk9yaWdpbmFsRmlsZW5hbWUiLAkiemxpYndhcGkuZGxsXDAiDQorICAgICAgVkFMVUUgIlByb2R1Y3ROYW1lIiwJIlpMaWIuRExMXDAiDQorICAgICAgVkFMVUUgIkNvbW1lbnRzIiwiRExMIHN1cHBvcnQgYnkgQWxlc3NhbmRybyBJYWNvcGV0dGkgJiBHaWxsZXMgVm9sbGFudFwwIg0KKyAgICAgIFZBTFVFICJMZWdhbENvcHlyaWdodCIsICIoQykgMTk5NS0yMDIyIEplYW4tbG91cCBHYWlsbHkgJiBNYXJrIEFkbGVyXDAiDQorICAgIEVORA0KKyAgRU5EDQorICBCTE9DSyAiVmFyRmlsZUluZm8iDQorICBCRUdJTg0KKyAgICBWQUxVRSAiVHJhbnNsYXRpb24iLCAweDA0MDksIDEyNTINCisgIEVORA0KK0VORA0KZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxMC96bGlic3RhdC52Y3hwcm9qIGIvc3JjL2NvbnRyaWIvdnN0dWRpby92YzEwL3psaWJzdGF0LnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjlmMmJiZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxMC96bGlic3RhdC52Y3hwcm9qCkBAIC0wLDAgKzEsNDczIEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPg0KKyAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4NCisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfEl0YW5pdW0iPg0KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPg0KKyAgICAgIDxQbGF0Zm9ybT5JdGFuaXVtPC9QbGF0Zm9ybT4NCisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4NCisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4NCisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPg0KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4NCisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4NCisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4NCisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0iPg0KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2VXaXRob3V0QXNtPC9Db25maWd1cmF0aW9uPg0KKyAgICAgIDxQbGF0Zm9ybT5JdGFuaXVtPC9QbGF0Zm9ybT4NCisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2VXaXRob3V0QXNtfFdpbjMyIj4NCisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlV2l0aG91dEFzbTwvQ29uZmlndXJhdGlvbj4NCisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPg0KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZVdpdGhvdXRBc218eDY0Ij4NCisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlV2l0aG91dEFzbTwvQ29uZmlndXJhdGlvbj4NCisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4NCisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8SXRhbml1bSI+DQorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4NCisgICAgICA8UGxhdGZvcm0+SXRhbml1bTwvUGxhdGZvcm0+DQorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+DQorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4NCisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPg0KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+DQorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+DQorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+DQorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4NCisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4NCisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCisgIDwvSXRlbUdyb3VwPg0KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPg0KKyAgICA8UHJvamVjdEd1aWQ+ezc0NURFQzU4LUVCQjMtNDdBOS1BOUI4LTRDNjYyN0MwMUJGOH08L1Byb2plY3RHdWlkPg0KKyAgPC9Qcm9wZXJ0eUdyb3VwPg0KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4NCisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQorICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4NCisgICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4NCisgIDwvUHJvcGVydHlHcm91cD4NCisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCisgICAgPENvbmZpZ3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPg0KKyAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPg0KKyAgPC9Qcm9wZXJ0eUdyb3VwPg0KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCisgICAgPENvbmZpZ3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPg0KKyAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPg0KKyAgPC9Qcm9wZXJ0eUdyb3VwPg0KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+U3RhdGljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+DQorICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+DQorICA8L1Byb3BlcnR5R3JvdXA+DQorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCisgICAgPENvbmZpZ3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPg0KKyAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPg0KKyAgPC9Qcm9wZXJ0eUdyb3VwPg0KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+U3RhdGljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+DQorICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+DQorICA8L1Byb3BlcnR5R3JvdXA+DQorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCisgICAgPENvbmZpZ3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPg0KKyAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPg0KKyAgPC9Qcm9wZXJ0eUdyb3VwPg0KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCisgICAgPENvbmZpZ3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPg0KKyAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPg0KKyAgPC9Qcm9wZXJ0eUdyb3VwPg0KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQorICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4NCisgICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4NCisgIDwvUHJvcGVydHlHcm91cD4NCisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPg0KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+DQorICA8L0ltcG9ydEdyb3VwPg0KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPg0KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+DQorICA8L0ltcG9ydEdyb3VwPg0KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+DQorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4NCisgIDwvSW1wb3J0R3JvdXA+DQorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+DQorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4NCisgIDwvSW1wb3J0R3JvdXA+DQorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4NCisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPg0KKyAgPC9JbXBvcnRHcm91cD4NCisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+DQorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4NCisgIDwvSW1wb3J0R3JvdXA+DQorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4NCisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPg0KKyAgPC9JbXBvcnRHcm91cD4NCisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+DQorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4NCisgIDwvSW1wb3J0R3JvdXA+DQorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+DQorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4NCisgIDwvSW1wb3J0R3JvdXA+DQorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPg0KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+DQorICA8L0ltcG9ydEdyb3VwPg0KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+DQorICA8UHJvcGVydHlHcm91cD4NCisgICAgPF9Qcm9qZWN0RmlsZVZlcnNpb24+MTAuMC4zMDEyOC4xPC9fUHJvamVjdEZpbGVWZXJzaW9uPg0KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj54ODZcWmxpYlN0YXQkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPg0KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj54ODZcWmxpYlN0YXQkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4NCisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj54ODZcWmxpYlN0YXQkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPg0KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPng4NlxabGliU3RhdCQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPg0KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218V2luMzInIj54ODZcWmxpYlN0YXQkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPg0KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218V2luMzInIj54ODZcWmxpYlN0YXQkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4NCisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPng2NFxabGliU3RhdCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+DQorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj54NjRcWmxpYlN0YXQkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4NCisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIj5pYTY0XFpsaWJTdGF0JChDb25maWd1cmF0aW9uKVw8L091dERpcj4NCisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIj5pYTY0XFpsaWJTdGF0JChDb25maWd1cmF0aW9uKVxUbXBcPC9JbnREaXI+DQorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPng2NFxabGliU3RhdCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+DQorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPng2NFxabGliU3RhdCQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPg0KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyI+aWE2NFxabGliU3RhdCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+DQorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIj5pYTY0XFpsaWJTdGF0JChDb25maWd1cmF0aW9uKVxUbXBcPC9JbnREaXI+DQorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXx4NjQnIj54NjRcWmxpYlN0YXQkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPg0KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218eDY0JyI+eDY0XFpsaWJTdGF0JChDb25maWd1cmF0aW9uKVxUbXBcPC9JbnREaXI+DQorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtJyI+aWE2NFxabGliU3RhdCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+DQorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtJyI+aWE2NFxabGliU3RhdCQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0Pg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0Pg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0Pg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0nIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0Pg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtJyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0Pg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfFdpbjMyJyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXx4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0Pg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXx4NjQnIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXx4NjQnIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiAvPg0KKyAgPC9Qcm9wZXJ0eUdyb3VwPg0KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPg0KKyAgICA8Q2xDb21waWxlPg0KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtYXNteDg2OyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO1pMSUJfV0lOQVBJO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19XQVJOSU5HUzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPEV4Y2VwdGlvbkhhbmRsaW5nPg0KKyAgICAgIDwvRXhjZXB0aW9uSGFuZGxpbmc+DQorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1ZzwvUnVudGltZUxpYnJhcnk+DQorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+DQorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyT3V0cHV0RmlsZT4kKEludERpcil6bGlic3RhdC5wY2g8L1ByZWNvbXBpbGVkSGVhZGVyT3V0cHV0RmlsZT4NCisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPg0KKyAgICAgIDxPYmplY3RGaWxlTmFtZT4kKEludERpcik8L09iamVjdEZpbGVOYW1lPg0KKyAgICAgIDxQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4kKE91dERpcik8L1Byb2dyYW1EYXRhQmFzZUZpbGVOYW1lPg0KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+DQorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+DQorICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+T2xkU3R5bGU8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8UmVzb3VyY2VDb21waWxlPg0KKyAgICAgIDxDdWx0dXJlPjB4MDQwYzwvQ3VsdHVyZT4NCisgICAgPC9SZXNvdXJjZUNvbXBpbGU+DQorICAgIDxMaWI+DQorICAgICAgPEFkZGl0aW9uYWxPcHRpb25zPi9NQUNISU5FOlg4NiAvTk9ERUZBVUxUTElCICUoQWRkaXRpb25hbE9wdGlvbnMpPC9BZGRpdGlvbmFsT3B0aW9ucz4NCisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpcil6bGlic3RhdC5saWI8L091dHB1dEZpbGU+DQorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+DQorICAgIDwvTGliPg0KKyAgICA8UHJlQnVpbGRFdmVudD4NCisgICAgICA8Q29tbWFuZD5jZCAuLlwuLlxtYXNteDg2DQorYmxkX21sMzIuYmF0PC9Db21tYW5kPg0KKyAgICA8L1ByZUJ1aWxkRXZlbnQ+DQorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4NCisgICAgPENsQ29tcGlsZT4NCisgICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtYXNteDg2OyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO1pMSUJfV0lOQVBJO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19XQVJOSU5HUztBU01WO0FTTUlORjslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4NCisgICAgICA8RXhjZXB0aW9uSGFuZGxpbmc+DQorICAgICAgPC9FeGNlcHRpb25IYW5kbGluZz4NCisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+DQorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+DQorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPg0KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlck91dHB1dEZpbGU+JChJbnREaXIpemxpYnN0YXQucGNoPC9QcmVjb21waWxlZEhlYWRlck91dHB1dEZpbGU+DQorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4NCisgICAgICA8T2JqZWN0RmlsZU5hbWU+JChJbnREaXIpPC9PYmplY3RGaWxlTmFtZT4NCisgICAgICA8UHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+JChPdXREaXIpPC9Qcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4NCisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPg0KKyAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPFJlc291cmNlQ29tcGlsZT4NCisgICAgICA8Q3VsdHVyZT4weDA0MGM8L0N1bHR1cmU+DQorICAgIDwvUmVzb3VyY2VDb21waWxlPg0KKyAgICA8TGliPg0KKyAgICAgIDxBZGRpdGlvbmFsT3B0aW9ucz4vTUFDSElORTpYODYgL05PREVGQVVMVExJQiAlKEFkZGl0aW9uYWxPcHRpb25zKTwvQWRkaXRpb25hbE9wdGlvbnM+DQorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Li5cLi5cbWFzbXg4NlxtYXRjaDY4Ni5vYmo7Li5cLi5cbWFzbXg4NlxpbmZmYXMzMi5vYmo7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4NCisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpcil6bGlic3RhdC5saWI8L091dHB1dEZpbGU+DQorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+DQorICAgIDwvTGliPg0KKyAgICA8UHJlQnVpbGRFdmVudD4NCisgICAgICA8Q29tbWFuZD5jZCAuLlwuLlxtYXNteDg2DQorYmxkX21sMzIuYmF0PC9Db21tYW5kPg0KKyAgICA8L1ByZUJ1aWxkRXZlbnQ+DQorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfFdpbjMyJyI+DQorICAgIDxDbENvbXBpbGU+DQorICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47Li5cLi5cbWFzbXg4NjslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtaTElCX1dJTkFQSTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fV0FSTklOR1M7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+DQorICAgICAgPEV4Y2VwdGlvbkhhbmRsaW5nPg0KKyAgICAgIDwvRXhjZXB0aW9uSGFuZGxpbmc+DQorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5Pg0KKyAgICAgIDxCdWZmZXJTZWN1cml0eUNoZWNrPmZhbHNlPC9CdWZmZXJTZWN1cml0eUNoZWNrPg0KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4NCisgICAgICA8UHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlPiQoSW50RGlyKXpsaWJzdGF0LnBjaDwvUHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlPg0KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+DQorICAgICAgPE9iamVjdEZpbGVOYW1lPiQoSW50RGlyKTwvT2JqZWN0RmlsZU5hbWU+DQorICAgICAgPFByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPiQoT3V0RGlyKTwvUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+DQorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4NCisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxSZXNvdXJjZUNvbXBpbGU+DQorICAgICAgPEN1bHR1cmU+MHgwNDBjPC9DdWx0dXJlPg0KKyAgICA8L1Jlc291cmNlQ29tcGlsZT4NCisgICAgPExpYj4NCisgICAgICA8QWRkaXRpb25hbE9wdGlvbnM+L01BQ0hJTkU6WDg2IC9OT0RFRkFVTFRMSUIgJShBZGRpdGlvbmFsT3B0aW9ucyk8L0FkZGl0aW9uYWxPcHRpb25zPg0KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKXpsaWJzdGF0LmxpYjwvT3V0cHV0RmlsZT4NCisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4NCisgICAgPC9MaWI+DQorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPg0KKyAgICA8TWlkbD4NCisgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4NCisgICAgPC9NaWRsPg0KKyAgICA8Q2xDb21waWxlPg0KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtYXNteDg2OyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPlpMSUJfV0lOQVBJO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19XQVJOSU5HUztXSU42NDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPEV4Y2VwdGlvbkhhbmRsaW5nPg0KKyAgICAgIDwvRXhjZXB0aW9uSGFuZGxpbmc+DQorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1Z0RMTDwvUnVudGltZUxpYnJhcnk+DQorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+DQorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyT3V0cHV0RmlsZT4kKEludERpcil6bGlic3RhdC5wY2g8L1ByZWNvbXBpbGVkSGVhZGVyT3V0cHV0RmlsZT4NCisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPg0KKyAgICAgIDxPYmplY3RGaWxlTmFtZT4kKEludERpcik8L09iamVjdEZpbGVOYW1lPg0KKyAgICAgIDxQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4kKE91dERpcik8L1Byb2dyYW1EYXRhQmFzZUZpbGVOYW1lPg0KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+DQorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+DQorICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+T2xkU3R5bGU8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8UmVzb3VyY2VDb21waWxlPg0KKyAgICAgIDxDdWx0dXJlPjB4MDQwYzwvQ3VsdHVyZT4NCisgICAgPC9SZXNvdXJjZUNvbXBpbGU+DQorICAgIDxMaWI+DQorICAgICAgPEFkZGl0aW9uYWxPcHRpb25zPi9NQUNISU5FOkFNRDY0IC9OT0RFRkFVTFRMSUIgJShBZGRpdGlvbmFsT3B0aW9ucyk8L0FkZGl0aW9uYWxPcHRpb25zPg0KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKXpsaWJzdGF0LmxpYjwvT3V0cHV0RmlsZT4NCisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4NCisgICAgPC9MaWI+DQorICAgIDxQcmVCdWlsZEV2ZW50Pg0KKyAgICAgIDxDb21tYW5kPmNkIC4uXC4uXG1hc214NjQNCitibGRfbWw2NC5iYXQ8L0NvbW1hbmQ+DQorICAgIDwvUHJlQnVpbGRFdmVudD4NCisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4NCisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciPg0KKyAgICA8TWlkbD4NCisgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+SXRhbml1bTwvVGFyZ2V0RW52aXJvbm1lbnQ+DQorICAgIDwvTWlkbD4NCisgICAgPENsQ29tcGlsZT4NCisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47Li5cLi5cbWFzbXg4NjslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5aTElCX1dJTkFQSTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fV0FSTklOR1M7V0lONjQ7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxFeGNlcHRpb25IYW5kbGluZz4NCisgICAgICA8L0V4Y2VwdGlvbkhhbmRsaW5nPg0KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWdETEw8L1J1bnRpbWVMaWJyYXJ5Pg0KKyAgICAgIDxCdWZmZXJTZWN1cml0eUNoZWNrPmZhbHNlPC9CdWZmZXJTZWN1cml0eUNoZWNrPg0KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlck91dHB1dEZpbGU+JChJbnREaXIpemxpYnN0YXQucGNoPC9QcmVjb21waWxlZEhlYWRlck91dHB1dEZpbGU+DQorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4NCisgICAgICA8T2JqZWN0RmlsZU5hbWU+JChJbnREaXIpPC9PYmplY3RGaWxlTmFtZT4NCisgICAgICA8UHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+JChPdXREaXIpPC9Qcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4NCisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPg0KKyAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPg0KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0Pk9sZFN0eWxlPC9EZWJ1Z0luZm9ybWF0aW9uRm9ybWF0Pg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPFJlc291cmNlQ29tcGlsZT4NCisgICAgICA8Q3VsdHVyZT4weDA0MGM8L0N1bHR1cmU+DQorICAgIDwvUmVzb3VyY2VDb21waWxlPg0KKyAgICA8TGliPg0KKyAgICAgIDxBZGRpdGlvbmFsT3B0aW9ucz4vTUFDSElORTpJQTY0IC9OT0RFRkFVTFRMSUIgJShBZGRpdGlvbmFsT3B0aW9ucyk8L0FkZGl0aW9uYWxPcHRpb25zPg0KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKXpsaWJzdGF0LmxpYjwvT3V0cHV0RmlsZT4NCisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4NCisgICAgPC9MaWI+DQorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+DQorICAgIDxNaWRsPg0KKyAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50Pg0KKyAgICA8L01pZGw+DQorICAgIDxDbENvbXBpbGU+DQorICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47Li5cLi5cbWFzbXg4NjslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5aTElCX1dJTkFQSTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fV0FSTklOR1M7QVNNVjtBU01JTkY7V0lONjQ7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+DQorICAgICAgPEV4Y2VwdGlvbkhhbmRsaW5nPg0KKyAgICAgIDwvRXhjZXB0aW9uSGFuZGxpbmc+DQorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWRETEw8L1J1bnRpbWVMaWJyYXJ5Pg0KKyAgICAgIDxCdWZmZXJTZWN1cml0eUNoZWNrPmZhbHNlPC9CdWZmZXJTZWN1cml0eUNoZWNrPg0KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4NCisgICAgICA8UHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlPiQoSW50RGlyKXpsaWJzdGF0LnBjaDwvUHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlPg0KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+DQorICAgICAgPE9iamVjdEZpbGVOYW1lPiQoSW50RGlyKTwvT2JqZWN0RmlsZU5hbWU+DQorICAgICAgPFByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPiQoT3V0RGlyKTwvUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+DQorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4NCisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxSZXNvdXJjZUNvbXBpbGU+DQorICAgICAgPEN1bHR1cmU+MHgwNDBjPC9DdWx0dXJlPg0KKyAgICA8L1Jlc291cmNlQ29tcGlsZT4NCisgICAgPExpYj4NCisgICAgICA8QWRkaXRpb25hbE9wdGlvbnM+L01BQ0hJTkU6QU1ENjQgL05PREVGQVVMVExJQiAlKEFkZGl0aW9uYWxPcHRpb25zKTwvQWRkaXRpb25hbE9wdGlvbnM+DQorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Li5cLi5cbWFzbXg2NFxndm1hdDY0Lm9iajsuLlwuLlxtYXNteDY0XGluZmZhc3g2NC5vYmo7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4NCisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpcil6bGlic3RhdC5saWI8L091dHB1dEZpbGU+DQorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+DQorICAgIDwvTGliPg0KKyAgICA8UHJlQnVpbGRFdmVudD4NCisgICAgICA8Q29tbWFuZD5jZCAuLlwuLlxtYXNteDY0DQorYmxkX21sNjQuYmF0PC9Db21tYW5kPg0KKyAgICA8L1ByZUJ1aWxkRXZlbnQ+DQorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPg0KKyAgICA8TWlkbD4NCisgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+SXRhbml1bTwvVGFyZ2V0RW52aXJvbm1lbnQ+DQorICAgIDwvTWlkbD4NCisgICAgPENsQ29tcGlsZT4NCisgICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtYXNteDg2OyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPlpMSUJfV0lOQVBJO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19XQVJOSU5HUztXSU42NDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4NCisgICAgICA8RXhjZXB0aW9uSGFuZGxpbmc+DQorICAgICAgPC9FeGNlcHRpb25IYW5kbGluZz4NCisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERMTDwvUnVudGltZUxpYnJhcnk+DQorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+DQorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPg0KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlck91dHB1dEZpbGU+JChJbnREaXIpemxpYnN0YXQucGNoPC9QcmVjb21waWxlZEhlYWRlck91dHB1dEZpbGU+DQorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4NCisgICAgICA8T2JqZWN0RmlsZU5hbWU+JChJbnREaXIpPC9PYmplY3RGaWxlTmFtZT4NCisgICAgICA8UHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+JChPdXREaXIpPC9Qcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4NCisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPg0KKyAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPFJlc291cmNlQ29tcGlsZT4NCisgICAgICA8Q3VsdHVyZT4weDA0MGM8L0N1bHR1cmU+DQorICAgIDwvUmVzb3VyY2VDb21waWxlPg0KKyAgICA8TGliPg0KKyAgICAgIDxBZGRpdGlvbmFsT3B0aW9ucz4vTUFDSElORTpJQTY0IC9OT0RFRkFVTFRMSUIgJShBZGRpdGlvbmFsT3B0aW9ucyk8L0FkZGl0aW9uYWxPcHRpb25zPg0KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKXpsaWJzdGF0LmxpYjwvT3V0cHV0RmlsZT4NCisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4NCisgICAgPC9MaWI+DQorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfHg2NCciPg0KKyAgICA8TWlkbD4NCisgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4NCisgICAgPC9NaWRsPg0KKyAgICA8Q2xDb21waWxlPg0KKyAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOy4uXC4uXG1hc214ODY7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+WkxJQl9XSU5BUEk7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX1dBUk5JTkdTO1dJTjY0OyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPg0KKyAgICAgIDxFeGNlcHRpb25IYW5kbGluZz4NCisgICAgICA8L0V4Y2VwdGlvbkhhbmRsaW5nPg0KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRExMPC9SdW50aW1lTGlicmFyeT4NCisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4NCisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+DQorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyT3V0cHV0RmlsZT4kKEludERpcil6bGlic3RhdC5wY2g8L1ByZWNvbXBpbGVkSGVhZGVyT3V0cHV0RmlsZT4NCisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPg0KKyAgICAgIDxPYmplY3RGaWxlTmFtZT4kKEludERpcik8L09iamVjdEZpbGVOYW1lPg0KKyAgICAgIDxQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4kKE91dERpcik8L1Byb2dyYW1EYXRhQmFzZUZpbGVOYW1lPg0KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+DQorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8UmVzb3VyY2VDb21waWxlPg0KKyAgICAgIDxDdWx0dXJlPjB4MDQwYzwvQ3VsdHVyZT4NCisgICAgPC9SZXNvdXJjZUNvbXBpbGU+DQorICAgIDxMaWI+DQorICAgICAgPEFkZGl0aW9uYWxPcHRpb25zPi9NQUNISU5FOkFNRDY0IC9OT0RFRkFVTFRMSUIgJShBZGRpdGlvbmFsT3B0aW9ucyk8L0FkZGl0aW9uYWxPcHRpb25zPg0KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKXpsaWJzdGF0LmxpYjwvT3V0cHV0RmlsZT4NCisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4NCisgICAgPC9MaWI+DQorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0nIj4NCisgICAgPE1pZGw+DQorICAgICAgPFRhcmdldEVudmlyb25tZW50Pkl0YW5pdW08L1RhcmdldEVudmlyb25tZW50Pg0KKyAgICA8L01pZGw+DQorICAgIDxDbENvbXBpbGU+DQorICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47Li5cLi5cbWFzbXg4NjslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5aTElCX1dJTkFQSTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fV0FSTklOR1M7V0lONjQ7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+DQorICAgICAgPEV4Y2VwdGlvbkhhbmRsaW5nPg0KKyAgICAgIDwvRXhjZXB0aW9uSGFuZGxpbmc+DQorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWRETEw8L1J1bnRpbWVMaWJyYXJ5Pg0KKyAgICAgIDxCdWZmZXJTZWN1cml0eUNoZWNrPmZhbHNlPC9CdWZmZXJTZWN1cml0eUNoZWNrPg0KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4NCisgICAgICA8UHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlPiQoSW50RGlyKXpsaWJzdGF0LnBjaDwvUHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlPg0KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+DQorICAgICAgPE9iamVjdEZpbGVOYW1lPiQoSW50RGlyKTwvT2JqZWN0RmlsZU5hbWU+DQorICAgICAgPFByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPiQoT3V0RGlyKTwvUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+DQorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4NCisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxSZXNvdXJjZUNvbXBpbGU+DQorICAgICAgPEN1bHR1cmU+MHgwNDBjPC9DdWx0dXJlPg0KKyAgICA8L1Jlc291cmNlQ29tcGlsZT4NCisgICAgPExpYj4NCisgICAgICA8QWRkaXRpb25hbE9wdGlvbnM+L01BQ0hJTkU6SUE2NCAvTk9ERUZBVUxUTElCICUoQWRkaXRpb25hbE9wdGlvbnMpPC9BZGRpdGlvbmFsT3B0aW9ucz4NCisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpcil6bGlic3RhdC5saWI8L091dHB1dEZpbGU+DQorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+DQorICAgIDwvTGliPg0KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KKyAgPEl0ZW1Hcm91cD4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxhZGxlcjMyLmMiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cY29tcHJlc3MuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxjcmMzMi5jIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXGRlZmxhdGUuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxnemNsb3NlLmMiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cZ3psaWIuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxnenJlYWQuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxnendyaXRlLmMiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5caW5mYmFjay5jIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXG1hc214NjRcaW5mZmFzODY2NC5jIj4NCisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+DQorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4NCisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+DQorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4NCisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4NCisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXGluZmZhc3QuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxpbmZsYXRlLmMiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5caW5mdHJlZXMuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxtaW5pemlwXGlvYXBpLmMiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cdHJlZXMuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlx1bmNvbXByLmMiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbWluaXppcFx1bnppcC5jIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXG1pbml6aXBcemlwLmMiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cenV0aWwuYyIgLz4NCisgIDwvSXRlbUdyb3VwPg0KKyAgPEl0ZW1Hcm91cD4NCisgICAgPFJlc291cmNlQ29tcGlsZSBJbmNsdWRlPSJ6bGliLnJjIiAvPg0KKyAgPC9JdGVtR3JvdXA+DQorICA8SXRlbUdyb3VwPg0KKyAgICA8Tm9uZSBJbmNsdWRlPSJ6bGlidmMuZGVmIiAvPg0KKyAgPC9JdGVtR3JvdXA+DQorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPg0KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4NCisgIDwvSW1wb3J0R3JvdXA+DQorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxMC96bGlic3RhdC52Y3hwcm9qLmZpbHRlcnMgYi9zcmMvY29udHJpYi92c3R1ZGlvL3ZjMTAvemxpYnN0YXQudmN4cHJvai5maWx0ZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4YzdmN2UKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29udHJpYi92c3R1ZGlvL3ZjMTAvemxpYnN0YXQudmN4cHJvai5maWx0ZXJzCkBAIC0wLDAgKzEsNzcgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+DQorPFByb2plY3QgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPg0KKyAgPEl0ZW1Hcm91cD4NCisgICAgPEZpbHRlciBJbmNsdWRlPSJTb3VyY2UgRmlsZXMiPg0KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPnsxNzQyMTNmNi03ZjY2LTRhZTgtYTNhOC1hMWUwYTFlNmZmZGR9PC9VbmlxdWVJZGVudGlmaWVyPg0KKyAgICA8L0ZpbHRlcj4NCisgIDwvSXRlbUdyb3VwPg0KKyAgPEl0ZW1Hcm91cD4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxhZGxlcjMyLmMiPg0KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXGNvbXByZXNzLmMiPg0KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXGNyYzMyLmMiPg0KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXGRlZmxhdGUuYyI+DQorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cZ3pjbG9zZS5jIj4NCisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxnemxpYi5jIj4NCisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxnenJlYWQuYyI+DQorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cZ3p3cml0ZS5jIj4NCisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxpbmZiYWNrLmMiPg0KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXG1hc214NjRcaW5mZmFzODY2NC5jIj4NCisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxpbmZmYXN0LmMiPg0KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXGluZmxhdGUuYyI+DQorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5caW5mdHJlZXMuYyI+DQorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbWluaXppcFxpb2FwaS5jIj4NCisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlx0cmVlcy5jIj4NCisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlx1bmNvbXByLmMiPg0KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXG1pbml6aXBcdW56aXAuYyI+DQorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbWluaXppcFx6aXAuYyI+DQorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cenV0aWwuYyI+DQorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICA8L0l0ZW1Hcm91cD4NCisgIDxJdGVtR3JvdXA+DQorICAgIDxSZXNvdXJjZUNvbXBpbGUgSW5jbHVkZT0iemxpYi5yYyI+DQorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCisgICAgPC9SZXNvdXJjZUNvbXBpbGU+DQorICA8L0l0ZW1Hcm91cD4NCisgIDxJdGVtR3JvdXA+DQorICAgIDxOb25lIEluY2x1ZGU9InpsaWJ2Yy5kZWYiPg0KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQorICAgIDwvTm9uZT4NCisgIDwvSXRlbUdyb3VwPg0KKzwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi92c3R1ZGlvL3ZjMTAvemxpYnZjLmRlZiBiL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxMC96bGlidmMuZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMDliYzEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29udHJpYi92c3R1ZGlvL3ZjMTAvemxpYnZjLmRlZgpAQCAtMCwwICsxLDE1OCBAQAorTElCUkFSWQ0KKzsgemxpYiBkYXRhIGNvbXByZXNzaW9uIGFuZCBaSVAgZmlsZSBJL08gbGlicmFyeQ0KKw0KK1ZFUlNJT04JCTEuMg0KKw0KK0VYUE9SVFMNCisgICAgICAgIGFkbGVyMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDENCisgICAgICAgIGNvbXByZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDINCisgICAgICAgIGNyYzMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDMNCisgICAgICAgIGRlZmxhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDQNCisgICAgICAgIGRlZmxhdGVDb3B5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDUNCisgICAgICAgIGRlZmxhdGVFbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDYNCisgICAgICAgIGRlZmxhdGVJbml0Ml8gICAgICAgICAgICAgICAgICAgICAgICAgICAgQDcNCisgICAgICAgIGRlZmxhdGVJbml0XyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDgNCisgICAgICAgIGRlZmxhdGVQYXJhbXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDkNCisgICAgICAgIGRlZmxhdGVSZXNldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDEwDQorICAgICAgICBkZWZsYXRlU2V0RGljdGlvbmFyeSAgICAgICAgICAgICAgICAgICAgIEAxMQ0KKyAgICAgICAgZ3pjbG9zZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTINCisgICAgICAgIGd6ZG9wZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDEzDQorICAgICAgICBnemVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxNA0KKyAgICAgICAgZ3pmbHVzaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTUNCisgICAgICAgIGd6b3BlbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDE2DQorICAgICAgICBnenJlYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxNw0KKyAgICAgICAgZ3p3cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTgNCisgICAgICAgIGluZmxhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDE5DQorICAgICAgICBpbmZsYXRlRW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAyMA0KKyAgICAgICAgaW5mbGF0ZUluaXQyXyAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMjENCisgICAgICAgIGluZmxhdGVJbml0XyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDIyDQorICAgICAgICBpbmZsYXRlUmVzZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAyMw0KKyAgICAgICAgaW5mbGF0ZVNldERpY3Rpb25hcnkgICAgICAgICAgICAgICAgICAgICBAMjQNCisgICAgICAgIGluZmxhdGVTeW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDI1DQorICAgICAgICB1bmNvbXByZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAyNg0KKyAgICAgICAgemxpYlZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMjcNCisgICAgICAgIGd6cHJpbnRmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDI4DQorICAgICAgICBnenB1dGMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAyOQ0KKyAgICAgICAgZ3pnZXRjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMzANCisgICAgICAgIGd6c2VlayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDMxDQorICAgICAgICBnenJld2luZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAzMg0KKyAgICAgICAgZ3p0ZWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMzMNCisgICAgICAgIGd6ZW9mICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDM0DQorICAgICAgICBnenNldHBhcmFtcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAzNQ0KKyAgICAgICAgekVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMzYNCisgICAgICAgIGluZmxhdGVTeW5jUG9pbnQgICAgICAgICAgICAgICAgICAgICAgICAgQDM3DQorICAgICAgICBnZXRfY3JjX3RhYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAzOA0KKyAgICAgICAgY29tcHJlc3MyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMzkNCisgICAgICAgIGd6cHV0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDQwDQorICAgICAgICBnemdldHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEA0MQ0KKyAgICAgICAgaW5mbGF0ZUNvcHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBANDINCisgICAgICAgIGluZmxhdGVCYWNrSW5pdF8gICAgICAgICAgICAgICAgICAgICAgICAgQDQzDQorICAgICAgICBpbmZsYXRlQmFjayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEA0NA0KKyAgICAgICAgaW5mbGF0ZUJhY2tFbmQgICAgICAgICAgICAgICAgICAgICAgICAgICBANDUNCisgICAgICAgIGNvbXByZXNzQm91bmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDQ2DQorICAgICAgICBkZWZsYXRlQm91bmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEA0Nw0KKyAgICAgICAgZ3pjbGVhcmVyciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBANDgNCisgICAgICAgIGd6dW5nZXRjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDQ5DQorICAgICAgICB6bGliQ29tcGlsZUZsYWdzICAgICAgICAgICAgICAgICAgICAgICAgIEA1MA0KKyAgICAgICAgZGVmbGF0ZVByaW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICBANTENCisgICAgICAgIGRlZmxhdGVQZW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgQDUyDQorDQorICAgICAgICB1bnpPcGVuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEA2MQ0KKyAgICAgICAgdW56Q2xvc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBANjINCisgICAgICAgIHVuekdldEdsb2JhbEluZm8gICAgICAgICAgICAgICAgICAgICAgICAgQDYzDQorICAgICAgICB1bnpHZXRDdXJyZW50RmlsZUluZm8gICAgICAgICAgICAgICAgICAgIEA2NA0KKyAgICAgICAgdW56R29Ub0ZpcnN0RmlsZSAgICAgICAgICAgICAgICAgICAgICAgICBANjUNCisgICAgICAgIHVuekdvVG9OZXh0RmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgQDY2DQorICAgICAgICB1bnpPcGVuQ3VycmVudEZpbGUgICAgICAgICAgICAgICAgICAgICAgIEA2Nw0KKyAgICAgICAgdW56UmVhZEN1cnJlbnRGaWxlICAgICAgICAgICAgICAgICAgICAgICBANjgNCisgICAgICAgIHVuek9wZW5DdXJyZW50RmlsZTMgICAgICAgICAgICAgICAgICAgICAgQDY5DQorICAgICAgICB1bnp0ZWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEA3MA0KKyAgICAgICAgdW56ZW9mICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBANzENCisgICAgICAgIHVuekNsb3NlQ3VycmVudEZpbGUgICAgICAgICAgICAgICAgICAgICAgQDcyDQorICAgICAgICB1bnpHZXRHbG9iYWxDb21tZW50ICAgICAgICAgICAgICAgICAgICAgIEA3Mw0KKyAgICAgICAgdW56U3RyaW5nRmlsZU5hbWVDb21wYXJlICAgICAgICAgICAgICAgICBANzQNCisgICAgICAgIHVuekxvY2F0ZUZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDc1DQorICAgICAgICB1bnpHZXRMb2NhbEV4dHJhZmllbGQgICAgICAgICAgICAgICAgICAgIEA3Ng0KKyAgICAgICAgdW56T3BlbjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBANzcNCisgICAgICAgIHVuek9wZW5DdXJyZW50RmlsZTIgICAgICAgICAgICAgICAgICAgICAgQDc4DQorICAgICAgICB1bnpPcGVuQ3VycmVudEZpbGVQYXNzd29yZCAgICAgICAgICAgICAgIEA3OQ0KKw0KKyAgICAgICAgemlwT3BlbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAODANCisgICAgICAgIHppcE9wZW5OZXdGaWxlSW5aaXAgICAgICAgICAgICAgICAgICAgICAgQDgxDQorICAgICAgICB6aXBXcml0ZUluRmlsZUluWmlwICAgICAgICAgICAgICAgICAgICAgIEA4Mg0KKyAgICAgICAgemlwQ2xvc2VGaWxlSW5aaXAgICAgICAgICAgICAgICAgICAgICAgICBAODMNCisgICAgICAgIHppcENsb3NlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDg0DQorICAgICAgICB6aXBPcGVuTmV3RmlsZUluWmlwMiAgICAgICAgICAgICAgICAgICAgIEA4Ng0KKyAgICAgICAgemlwQ2xvc2VGaWxlSW5aaXBSYXcgICAgICAgICAgICAgICAgICAgICBAODcNCisgICAgICAgIHppcE9wZW4yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDg4DQorICAgICAgICB6aXBPcGVuTmV3RmlsZUluWmlwMyAgICAgICAgICAgICAgICAgICAgIEA4OQ0KKw0KKyAgICAgICAgdW56R2V0RmlsZVBvcyAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTAwDQorICAgICAgICB1bnpHb1RvRmlsZVBvcyAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxMDENCisNCisgICAgICAgIGZpbGxfd2luMzJfZmlsZWZ1bmMgICAgICAgICAgICAgICAgICAgICAgQDExMA0KKw0KKzsgemxpYndhcGkgdjEuMi40IGFkZGVkOg0KKyAgICAgICAgZmlsbF93aW4zMl9maWxlZnVuYzY0ICAgICAgICAgICAgICAgICAgIEAxMTENCisgICAgICAgIGZpbGxfd2luMzJfZmlsZWZ1bmM2NEEgICAgICAgICAgICAgICAgICBAMTEyDQorICAgICAgICBmaWxsX3dpbjMyX2ZpbGVmdW5jNjRXICAgICAgICAgICAgICAgICAgQDExMw0KKw0KKyAgICAgICAgdW56T3BlbjY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxMjANCisgICAgICAgIHVuek9wZW4yXzY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTIxDQorICAgICAgICB1bnpHZXRHbG9iYWxJbmZvNjQgICAgICAgICAgICAgICAgICAgICAgQDEyMg0KKyAgICAgICAgdW56R2V0Q3VycmVudEZpbGVJbmZvNjQgICAgICAgICAgICAgICAgIEAxMjQNCisgICAgICAgIHVuekdldEN1cnJlbnRGaWxlWlN0cmVhbVBvczY0ICAgICAgICAgICBAMTI1DQorICAgICAgICB1bnp0ZWxsNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDEyNg0KKyAgICAgICAgdW56R2V0RmlsZVBvczY0ICAgICAgICAgICAgICAgICAgICAgICAgIEAxMjcNCisgICAgICAgIHVuekdvVG9GaWxlUG9zNjQgICAgICAgICAgICAgICAgICAgICAgICBAMTI4DQorDQorICAgICAgICB6aXBPcGVuNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDEzMA0KKyAgICAgICAgemlwT3BlbjJfNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxMzENCisgICAgICAgIHppcE9wZW5OZXdGaWxlSW5aaXA2NCAgICAgICAgICAgICAgICAgICBAMTMyDQorICAgICAgICB6aXBPcGVuTmV3RmlsZUluWmlwMl82NCAgICAgICAgICAgICAgICAgQDEzMw0KKyAgICAgICAgemlwT3Blbk5ld0ZpbGVJblppcDNfNjQgICAgICAgICAgICAgICAgIEAxMzQNCisgICAgICAgIHppcE9wZW5OZXdGaWxlSW5aaXA0XzY0ICAgICAgICAgICAgICAgICBAMTM1DQorICAgICAgICB6aXBDbG9zZUZpbGVJblppcFJhdzY0ICAgICAgICAgICAgICAgICAgQDEzNg0KKw0KKzsgemxpYjEgdjEuMi40IGFkZGVkOg0KKyAgICAgICAgYWRsZXIzMl9jb21iaW5lICAgICAgICAgICAgICAgICAgICAgICAgIEAxNDANCisgICAgICAgIGNyYzMyX2NvbWJpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTQyDQorICAgICAgICBkZWZsYXRlU2V0SGVhZGVyICAgICAgICAgICAgICAgICAgICAgICAgQDE0NA0KKyAgICAgICAgZGVmbGF0ZVR1bmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxNDUNCisgICAgICAgIGd6YnVmZmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTQ2DQorICAgICAgICBnemNsb3NlX3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDE0Nw0KKyAgICAgICAgZ3pjbG9zZV93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxNDgNCisgICAgICAgIGd6ZGlyZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTQ5DQorICAgICAgICBnem9mZnNldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDE1MA0KKyAgICAgICAgaW5mbGF0ZUdldEhlYWRlciAgICAgICAgICAgICAgICAgICAgICAgIEAxNTYNCisgICAgICAgIGluZmxhdGVNYXJrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTU3DQorICAgICAgICBpbmZsYXRlUHJpbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDE1OA0KKyAgICAgICAgaW5mbGF0ZVJlc2V0MiAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxNTkNCisgICAgICAgIGluZmxhdGVVbmRlcm1pbmUgICAgICAgICAgICAgICAgICAgICAgICBAMTYwDQorDQorOyB6bGliMSB2MS4yLjYgYWRkZWQ6DQorICAgICAgICBnemdldGNfICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDE2MQ0KKyAgICAgICAgaW5mbGF0ZVJlc2V0S2VlcCAgICAgICAgICAgICAgICAgICAgICAgIEAxNjMNCisgICAgICAgIGRlZmxhdGVSZXNldEtlZXAgICAgICAgICAgICAgICAgICAgICAgICBAMTY0DQorDQorOyB6bGliMSB2MS4yLjcgYWRkZWQ6DQorICAgICAgICBnem9wZW5fdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDE2NQ0KKw0KKzsgemxpYjEgdjEuMi44IGFkZGVkOg0KKyAgICAgICAgaW5mbGF0ZUdldERpY3Rpb25hcnkgICAgICAgICAgICAgICAgICAgIEAxNjYNCisgICAgICAgIGd6dnByaW50ZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTY3DQorDQorOyB6bGliMSB2MS4yLjkgYWRkZWQ6DQorICAgICAgICBpbmZsYXRlQ29kZXNVc2VkICAgICAgICAgICAgICAgICAgICAgICAgQDE2OA0KKyAgICAgICAgaW5mbGF0ZVZhbGlkYXRlICAgICAgICAgICAgICAgICAgICAgICAgIEAxNjkNCisgICAgICAgIHVuY29tcHJlc3MyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTcwDQorICAgICAgICBnemZyZWFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDE3MQ0KKyAgICAgICAgZ3pmd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxNzINCisgICAgICAgIGRlZmxhdGVHZXREaWN0aW9uYXJ5ICAgICAgICAgICAgICAgICAgICBAMTczDQorICAgICAgICBhZGxlcjMyX3ogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDE3NA0KKyAgICAgICAgY3JjMzJfeiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxNzUNCisNCis7IHpsaWIxIHYxLjIuMTIgYWRkZWQ6DQorCQljcmMzMl9jb21iaW5lX2dlbgkJCQkJCUAxNzYNCisJCWNyYzMyX2NvbWJpbmVfZ2VuNjQJCQkJCQlAMTc3DQorCQljcmMzMl9jb21iaW5lX29wCQkJCQkJQDE3OA0KZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxMC96bGlidmMuc2xuIGIvc3JjL2NvbnRyaWIvdnN0dWRpby92YzEwL3psaWJ2Yy5zbG4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY2ZmZkNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxMC96bGlidmMuc2xuCkBAIC0wLDAgKzEsMTM1IEBACivvu78NCitNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyBTb2x1dGlvbiBGaWxlLCBGb3JtYXQgVmVyc2lvbiAxMS4wMA0KKyMgVmlzdWFsIFN0dWRpbyAyMDEwDQorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJ6bGlidmMiLCAiemxpYnZjLnZjeHByb2oiLCAiezhGRDgyNkY4LTM3MzktNDRFNi04Q0M4LTk5NzEyMkU1M0I4RH0iDQorRW5kUHJvamVjdA0KK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiemxpYnN0YXQiLCAiemxpYnN0YXQudmN4cHJvaiIsICJ7NzQ1REVDNTgtRUJCMy00N0E5LUE5QjgtNEM2NjI3QzAxQkY4fSINCitFbmRQcm9qZWN0DQorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJ0ZXN0emxpYiIsICJ0ZXN0emxpYi52Y3hwcm9qIiwgIntBQTY2NjZBQS1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9Ig0KK0VuZFByb2plY3QNCitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInRlc3R6bGliZGxsIiwgInRlc3R6bGliZGxsLnZjeHByb2oiLCAie0M1MkY5RTdCLTQ5OEEtNDJCRS04REI0LTg1QTE1Njk0MzY2QX0iDQorRW5kUHJvamVjdA0KK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAibWluaXppcCIsICJtaW5pemlwLnZjeHByb2oiLCAiezQ4Q0REOURDLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0iDQorRW5kUHJvamVjdA0KK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAibWluaXVueiIsICJtaW5pdW56LnZjeHByb2oiLCAie0M1MkY5RTdCLTQ5OEEtNDJCRS04REI0LTg1QTE1Njk0MzgyQX0iDQorRW5kUHJvamVjdA0KK0dsb2JhbA0KKwlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uQ29uZmlndXJhdGlvblBsYXRmb3JtcykgPSBwcmVTb2x1dGlvbg0KKwkJRGVidWd8SXRhbml1bSA9IERlYnVnfEl0YW5pdW0NCisJCURlYnVnfFdpbjMyID0gRGVidWd8V2luMzINCisJCURlYnVnfHg2NCA9IERlYnVnfHg2NA0KKwkJUmVsZWFzZXxJdGFuaXVtID0gUmVsZWFzZXxJdGFuaXVtDQorCQlSZWxlYXNlfFdpbjMyID0gUmVsZWFzZXxXaW4zMg0KKwkJUmVsZWFzZXx4NjQgPSBSZWxlYXNlfHg2NA0KKwkJUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSA9IFJlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0NCisJCVJlbGVhc2VXaXRob3V0QXNtfFdpbjMyID0gUmVsZWFzZVdpdGhvdXRBc218V2luMzINCisJCVJlbGVhc2VXaXRob3V0QXNtfHg2NCA9IFJlbGVhc2VXaXRob3V0QXNtfHg2NA0KKwlFbmRHbG9iYWxTZWN0aW9uDQorCUdsb2JhbFNlY3Rpb24oUHJvamVjdENvbmZpZ3VyYXRpb25QbGF0Zm9ybXMpID0gcG9zdFNvbHV0aW9uDQorCQl7OEZEODI2RjgtMzczOS00NEU2LThDQzgtOTk3MTIyRTUzQjhEfS5EZWJ1Z3xJdGFuaXVtLkFjdGl2ZUNmZyA9IERlYnVnfEl0YW5pdW0NCisJCXs4RkQ4MjZGOC0zNzM5LTQ0RTYtOENDOC05OTcxMjJFNTNCOER9LkRlYnVnfEl0YW5pdW0uQnVpbGQuMCA9IERlYnVnfEl0YW5pdW0NCisJCXs4RkQ4MjZGOC0zNzM5LTQ0RTYtOENDOC05OTcxMjJFNTNCOER9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQorCQl7OEZEODI2RjgtMzczOS00NEU2LThDQzgtOTk3MTIyRTUzQjhEfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCisJCXs4RkQ4MjZGOC0zNzM5LTQ0RTYtOENDOC05OTcxMjJFNTNCOER9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCisJCXs4RkQ4MjZGOC0zNzM5LTQ0RTYtOENDOC05OTcxMjJFNTNCOER9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQorCQl7OEZEODI2RjgtMzczOS00NEU2LThDQzgtOTk3MTIyRTUzQjhEfS5SZWxlYXNlfEl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZXxJdGFuaXVtDQorCQl7OEZEODI2RjgtMzczOS00NEU2LThDQzgtOTk3MTIyRTUzQjhEfS5SZWxlYXNlfEl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2V8SXRhbml1bQ0KKwkJezhGRDgyNkY4LTM3MzktNDRFNi04Q0M4LTk5NzEyMkU1M0I4RH0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQorCQl7OEZEODI2RjgtMzczOS00NEU2LThDQzgtOTk3MTIyRTUzQjhEfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQorCQl7OEZEODI2RjgtMzczOS00NEU2LThDQzgtOTk3MTIyRTUzQjhEfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KKwkJezhGRDgyNkY4LTM3MzktNDRFNi04Q0M4LTk5NzEyMkU1M0I4RH0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQorCQl7OEZEODI2RjgtMzczOS00NEU2LThDQzgtOTk3MTIyRTUzQjhEfS5SZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0NCisJCXs4RkQ4MjZGOC0zNzM5LTQ0RTYtOENDOC05OTcxMjJFNTNCOER9LlJlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0NCisJCXs4RkQ4MjZGOC0zNzM5LTQ0RTYtOENDOC05OTcxMjJFNTNCOER9LlJlbGVhc2VXaXRob3V0QXNtfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2VXaXRob3V0QXNtfFdpbjMyDQorCQl7OEZEODI2RjgtMzczOS00NEU2LThDQzgtOTk3MTIyRTUzQjhEfS5SZWxlYXNlV2l0aG91dEFzbXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZVdpdGhvdXRBc218V2luMzINCisJCXs4RkQ4MjZGOC0zNzM5LTQ0RTYtOENDOC05OTcxMjJFNTNCOER9LlJlbGVhc2VXaXRob3V0QXNtfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlV2l0aG91dEFzbXx4NjQNCisJCXs4RkQ4MjZGOC0zNzM5LTQ0RTYtOENDOC05OTcxMjJFNTNCOER9LlJlbGVhc2VXaXRob3V0QXNtfHg2NC5CdWlsZC4wID0gUmVsZWFzZVdpdGhvdXRBc218eDY0DQorCQl7NzQ1REVDNTgtRUJCMy00N0E5LUE5QjgtNEM2NjI3QzAxQkY4fS5EZWJ1Z3xJdGFuaXVtLkFjdGl2ZUNmZyA9IERlYnVnfEl0YW5pdW0NCisJCXs3NDVERUM1OC1FQkIzLTQ3QTktQTlCOC00QzY2MjdDMDFCRjh9LkRlYnVnfEl0YW5pdW0uQnVpbGQuMCA9IERlYnVnfEl0YW5pdW0NCisJCXs3NDVERUM1OC1FQkIzLTQ3QTktQTlCOC00QzY2MjdDMDFCRjh9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQorCQl7NzQ1REVDNTgtRUJCMy00N0E5LUE5QjgtNEM2NjI3QzAxQkY4fS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCisJCXs3NDVERUM1OC1FQkIzLTQ3QTktQTlCOC00QzY2MjdDMDFCRjh9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCisJCXs3NDVERUM1OC1FQkIzLTQ3QTktQTlCOC00QzY2MjdDMDFCRjh9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQorCQl7NzQ1REVDNTgtRUJCMy00N0E5LUE5QjgtNEM2NjI3QzAxQkY4fS5SZWxlYXNlfEl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZXxJdGFuaXVtDQorCQl7NzQ1REVDNTgtRUJCMy00N0E5LUE5QjgtNEM2NjI3QzAxQkY4fS5SZWxlYXNlfEl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2V8SXRhbml1bQ0KKwkJezc0NURFQzU4LUVCQjMtNDdBOS1BOUI4LTRDNjYyN0MwMUJGOH0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQorCQl7NzQ1REVDNTgtRUJCMy00N0E5LUE5QjgtNEM2NjI3QzAxQkY4fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQorCQl7NzQ1REVDNTgtRUJCMy00N0E5LUE5QjgtNEM2NjI3QzAxQkY4fS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KKwkJezc0NURFQzU4LUVCQjMtNDdBOS1BOUI4LTRDNjYyN0MwMUJGOH0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQorCQl7NzQ1REVDNTgtRUJCMy00N0E5LUE5QjgtNEM2NjI3QzAxQkY4fS5SZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0NCisJCXs3NDVERUM1OC1FQkIzLTQ3QTktQTlCOC00QzY2MjdDMDFCRjh9LlJlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0NCisJCXs3NDVERUM1OC1FQkIzLTQ3QTktQTlCOC00QzY2MjdDMDFCRjh9LlJlbGVhc2VXaXRob3V0QXNtfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2VXaXRob3V0QXNtfFdpbjMyDQorCQl7NzQ1REVDNTgtRUJCMy00N0E5LUE5QjgtNEM2NjI3QzAxQkY4fS5SZWxlYXNlV2l0aG91dEFzbXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZVdpdGhvdXRBc218V2luMzINCisJCXs3NDVERUM1OC1FQkIzLTQ3QTktQTlCOC00QzY2MjdDMDFCRjh9LlJlbGVhc2VXaXRob3V0QXNtfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlV2l0aG91dEFzbXx4NjQNCisJCXs3NDVERUM1OC1FQkIzLTQ3QTktQTlCOC00QzY2MjdDMDFCRjh9LlJlbGVhc2VXaXRob3V0QXNtfHg2NC5CdWlsZC4wID0gUmVsZWFzZVdpdGhvdXRBc218eDY0DQorCQl7QUE2NjY2QUEtRTA5Ri00MTM1LTlDMEMtNEZFNTBDM0M2NTRCfS5EZWJ1Z3xJdGFuaXVtLkFjdGl2ZUNmZyA9IERlYnVnfEl0YW5pdW0NCisJCXtBQTY2NjZBQS1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LkRlYnVnfEl0YW5pdW0uQnVpbGQuMCA9IERlYnVnfEl0YW5pdW0NCisJCXtBQTY2NjZBQS1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQorCQl7QUE2NjY2QUEtRTA5Ri00MTM1LTlDMEMtNEZFNTBDM0M2NTRCfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCisJCXtBQTY2NjZBQS1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCisJCXtBQTY2NjZBQS1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQorCQl7QUE2NjY2QUEtRTA5Ri00MTM1LTlDMEMtNEZFNTBDM0M2NTRCfS5SZWxlYXNlfEl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZXxJdGFuaXVtDQorCQl7QUE2NjY2QUEtRTA5Ri00MTM1LTlDMEMtNEZFNTBDM0M2NTRCfS5SZWxlYXNlfEl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2V8SXRhbml1bQ0KKwkJe0FBNjY2NkFBLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQorCQl7QUE2NjY2QUEtRTA5Ri00MTM1LTlDMEMtNEZFNTBDM0M2NTRCfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQorCQl7QUE2NjY2QUEtRTA5Ri00MTM1LTlDMEMtNEZFNTBDM0M2NTRCfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KKwkJe0FBNjY2NkFBLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQorCQl7QUE2NjY2QUEtRTA5Ri00MTM1LTlDMEMtNEZFNTBDM0M2NTRCfS5SZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0NCisJCXtBQTY2NjZBQS1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LlJlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0NCisJCXtBQTY2NjZBQS1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LlJlbGVhc2VXaXRob3V0QXNtfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2VXaXRob3V0QXNtfFdpbjMyDQorCQl7QUE2NjY2QUEtRTA5Ri00MTM1LTlDMEMtNEZFNTBDM0M2NTRCfS5SZWxlYXNlV2l0aG91dEFzbXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZVdpdGhvdXRBc218V2luMzINCisJCXtBQTY2NjZBQS1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LlJlbGVhc2VXaXRob3V0QXNtfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlV2l0aG91dEFzbXx4NjQNCisJCXtBQTY2NjZBQS1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LlJlbGVhc2VXaXRob3V0QXNtfHg2NC5CdWlsZC4wID0gUmVsZWFzZVdpdGhvdXRBc218eDY0DQorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzNjZBfS5EZWJ1Z3xJdGFuaXVtLkFjdGl2ZUNmZyA9IERlYnVnfEl0YW5pdW0NCisJCXtDNTJGOUU3Qi00OThBLTQyQkUtOERCNC04NUExNTY5NDM2NkF9LkRlYnVnfEl0YW5pdW0uQnVpbGQuMCA9IERlYnVnfEl0YW5pdW0NCisJCXtDNTJGOUU3Qi00OThBLTQyQkUtOERCNC04NUExNTY5NDM2NkF9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzNjZBfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCisJCXtDNTJGOUU3Qi00OThBLTQyQkUtOERCNC04NUExNTY5NDM2NkF9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCisJCXtDNTJGOUU3Qi00OThBLTQyQkUtOERCNC04NUExNTY5NDM2NkF9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzNjZBfS5SZWxlYXNlfEl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZXxJdGFuaXVtDQorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzNjZBfS5SZWxlYXNlfEl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2V8SXRhbml1bQ0KKwkJe0M1MkY5RTdCLTQ5OEEtNDJCRS04REI0LTg1QTE1Njk0MzY2QX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzNjZBfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzNjZBfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KKwkJe0M1MkY5RTdCLTQ5OEEtNDJCRS04REI0LTg1QTE1Njk0MzY2QX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzNjZBfS5SZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2V8SXRhbml1bQ0KKwkJe0M1MkY5RTdCLTQ5OEEtNDJCRS04REI0LTg1QTE1Njk0MzY2QX0uUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bS5CdWlsZC4wID0gUmVsZWFzZXxJdGFuaXVtDQorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzNjZBfS5SZWxlYXNlV2l0aG91dEFzbXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzNjZBfS5SZWxlYXNlV2l0aG91dEFzbXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCisJCXs0OENERDlEQy1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LkRlYnVnfEl0YW5pdW0uQWN0aXZlQ2ZnID0gRGVidWd8SXRhbml1bQ0KKwkJezQ4Q0REOURDLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uRGVidWd8SXRhbml1bS5CdWlsZC4wID0gRGVidWd8SXRhbml1bQ0KKwkJezQ4Q0REOURDLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCisJCXs0OENERDlEQy1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KKwkJezQ4Q0REOURDLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KKwkJezQ4Q0REOURDLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCisJCXs0OENERDlEQy1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LlJlbGVhc2V8SXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlfEl0YW5pdW0NCisJCXs0OENERDlEQy1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LlJlbGVhc2V8SXRhbml1bS5CdWlsZC4wID0gUmVsZWFzZXxJdGFuaXVtDQorCQl7NDhDREQ5REMtRTA5Ri00MTM1LTlDMEMtNEZFNTBDM0M2NTRCfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCisJCXs0OENERDlEQy1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCisJCXs0OENERDlEQy1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQorCQl7NDhDREQ5REMtRTA5Ri00MTM1LTlDMEMtNEZFNTBDM0M2NTRCfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCisJCXs0OENERDlEQy1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LlJlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZXxJdGFuaXVtDQorCQl7NDhDREQ5REMtRTA5Ri00MTM1LTlDMEMtNEZFNTBDM0M2NTRCfS5SZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtLkJ1aWxkLjAgPSBSZWxlYXNlfEl0YW5pdW0NCisJCXs0OENERDlEQy1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LlJlbGVhc2VXaXRob3V0QXNtfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCisJCXs0OENERDlEQy1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LlJlbGVhc2VXaXRob3V0QXNtfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KKwkJe0M1MkY5RTdCLTQ5OEEtNDJCRS04REI0LTg1QTE1Njk0MzgyQX0uRGVidWd8SXRhbml1bS5BY3RpdmVDZmcgPSBEZWJ1Z3xJdGFuaXVtDQorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzODJBfS5EZWJ1Z3xJdGFuaXVtLkJ1aWxkLjAgPSBEZWJ1Z3xJdGFuaXVtDQorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzODJBfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KKwkJe0M1MkY5RTdCLTQ5OEEtNDJCRS04REI0LTg1QTE1Njk0MzgyQX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzODJBfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzODJBfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KKwkJe0M1MkY5RTdCLTQ5OEEtNDJCRS04REI0LTg1QTE1Njk0MzgyQX0uUmVsZWFzZXxJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2V8SXRhbml1bQ0KKwkJe0M1MkY5RTdCLTQ5OEEtNDJCRS04REI0LTg1QTE1Njk0MzgyQX0uUmVsZWFzZXxJdGFuaXVtLkJ1aWxkLjAgPSBSZWxlYXNlfEl0YW5pdW0NCisJCXtDNTJGOUU3Qi00OThBLTQyQkUtOERCNC04NUExNTY5NDM4MkF9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KKwkJe0M1MkY5RTdCLTQ5OEEtNDJCRS04REI0LTg1QTE1Njk0MzgyQX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KKwkJe0M1MkY5RTdCLTQ5OEEtNDJCRS04REI0LTg1QTE1Njk0MzgyQX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCisJCXtDNTJGOUU3Qi00OThBLTQyQkUtOERCNC04NUExNTY5NDM4MkF9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KKwkJe0M1MkY5RTdCLTQ5OEEtNDJCRS04REI0LTg1QTE1Njk0MzgyQX0uUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlfEl0YW5pdW0NCisJCXtDNTJGOUU3Qi00OThBLTQyQkUtOERCNC04NUExNTY5NDM4MkF9LlJlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2V8SXRhbml1bQ0KKwkJe0M1MkY5RTdCLTQ5OEEtNDJCRS04REI0LTg1QTE1Njk0MzgyQX0uUmVsZWFzZVdpdGhvdXRBc218V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KKwkJe0M1MkY5RTdCLTQ5OEEtNDJCRS04REI0LTg1QTE1Njk0MzgyQX0uUmVsZWFzZVdpdGhvdXRBc218eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQorCUVuZEdsb2JhbFNlY3Rpb24NCisJR2xvYmFsU2VjdGlvbihTb2x1dGlvblByb3BlcnRpZXMpID0gcHJlU29sdXRpb24NCisJCUhpZGVTb2x1dGlvbk5vZGUgPSBGQUxTRQ0KKwlFbmRHbG9iYWxTZWN0aW9uDQorRW5kR2xvYmFsDQpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvdnN0dWRpby92YzEwL3psaWJ2Yy52Y3hwcm9qIGIvc3JjL2NvbnRyaWIvdnN0dWRpby92YzEwL3psaWJ2Yy52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmZjlkZGIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29udHJpYi92c3R1ZGlvL3ZjMTAvemxpYnZjLnZjeHByb2oKQEAgLTAsMCArMSw2NTcgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+DQorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+DQorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPg0KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8SXRhbml1bSI+DQorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+DQorICAgICAgPFBsYXRmb3JtPkl0YW5pdW08L1BsYXRmb3JtPg0KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPg0KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPg0KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+DQorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+DQorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPg0KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPg0KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPg0KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSI+DQorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZVdpdGhvdXRBc208L0NvbmZpZ3VyYXRpb24+DQorICAgICAgPFBsYXRmb3JtPkl0YW5pdW08L1BsYXRmb3JtPg0KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZVdpdGhvdXRBc218V2luMzIiPg0KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2VXaXRob3V0QXNtPC9Db25maWd1cmF0aW9uPg0KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+DQorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+DQorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlV2l0aG91dEFzbXx4NjQiPg0KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2VXaXRob3V0QXNtPC9Db25maWd1cmF0aW9uPg0KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPg0KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxJdGFuaXVtIj4NCisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPg0KKyAgICAgIDxQbGF0Zm9ybT5JdGFuaXVtPC9QbGF0Zm9ybT4NCisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPg0KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+DQorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4NCisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4NCisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPg0KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPg0KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0KKyAgPC9JdGVtR3JvdXA+DQorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+DQorICAgIDxQcm9qZWN0R3VpZD57OEZEODI2RjgtMzczOS00NEU2LThDQzgtOTk3MTIyRTUzQjhEfTwvUHJvamVjdEd1aWQ+DQorICA8L1Byb3BlcnR5R3JvdXA+DQorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPg0KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPg0KKyAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPg0KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4NCisgIDwvUHJvcGVydHlHcm91cD4NCisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+DQorICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+DQorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPg0KKyAgPC9Qcm9wZXJ0eUdyb3VwPg0KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4NCisgICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4NCisgIDwvUHJvcGVydHlHcm91cD4NCisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPg0KKyAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPg0KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4NCisgIDwvUHJvcGVydHlHcm91cD4NCisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4NCisgICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4NCisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+DQorICA8L1Byb3BlcnR5R3JvdXA+DQorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+DQorICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+DQorICA8L1Byb3BlcnR5R3JvdXA+DQorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPg0KKyAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPg0KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4NCisgIDwvUHJvcGVydHlHcm91cD4NCisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPg0KKyAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPg0KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4NCisgIDwvUHJvcGVydHlHcm91cD4NCisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPg0KKyAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPg0KKyAgPC9Qcm9wZXJ0eUdyb3VwPg0KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+DQorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4NCisgIDwvSW1wb3J0R3JvdXA+DQorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4NCisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPg0KKyAgPC9JbXBvcnRHcm91cD4NCisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4NCisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPg0KKyAgPC9JbXBvcnRHcm91cD4NCisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4NCisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPg0KKyAgPC9JbXBvcnRHcm91cD4NCisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+DQorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4NCisgIDwvSW1wb3J0R3JvdXA+DQorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4NCisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPg0KKyAgPC9JbXBvcnRHcm91cD4NCisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPg0KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+DQorICA8L0ltcG9ydEdyb3VwPg0KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPg0KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+DQorICA8L0ltcG9ydEdyb3VwPg0KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4NCisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPg0KKyAgPC9JbXBvcnRHcm91cD4NCisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+DQorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4NCisgIDwvSW1wb3J0R3JvdXA+DQorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4NCisgIDxQcm9wZXJ0eUdyb3VwPg0KKyAgICA8X1Byb2plY3RGaWxlVmVyc2lvbj4xMC4wLjMwMTI4LjE8L19Qcm9qZWN0RmlsZVZlcnNpb24+DQorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPng4NlxabGliRGxsJChDb25maWd1cmF0aW9uKVw8L091dERpcj4NCisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+eDg2XFpsaWJEbGwkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4NCisgICAgPExpbmtJbmNyZW1lbnRhbCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+dHJ1ZTwvTGlua0luY3JlbWVudGFsPg0KKyAgICA8R2VuZXJhdGVNYW5pZmVzdCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+ZmFsc2U8L0dlbmVyYXRlTWFuaWZlc3Q+DQorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiciPng4NlxabGliRGxsJChDb25maWd1cmF0aW9uKVw8L091dERpcj4NCisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfFdpbjMyJyI+eDg2XFpsaWJEbGwkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4NCisgICAgPExpbmtJbmNyZW1lbnRhbCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfFdpbjMyJyI+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4NCisgICAgPEdlbmVyYXRlTWFuaWZlc3QgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiciPmZhbHNlPC9HZW5lcmF0ZU1hbmlmZXN0Pg0KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPng4NlxabGliRGxsJChDb25maWd1cmF0aW9uKVw8L091dERpcj4NCisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj54ODZcWmxpYkRsbCQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPg0KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+DQorICAgIDxHZW5lcmF0ZU1hbmlmZXN0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPmZhbHNlPC9HZW5lcmF0ZU1hbmlmZXN0Pg0KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+eDY0XFpsaWJEbGwkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPg0KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+eDY0XFpsaWJEbGwkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4NCisgICAgPExpbmtJbmNyZW1lbnRhbCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4NCisgICAgPEdlbmVyYXRlTWFuaWZlc3QgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5mYWxzZTwvR2VuZXJhdGVNYW5pZmVzdD4NCisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIj5pYTY0XFpsaWJEbGwkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPg0KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciPmlhNjRcWmxpYkRsbCQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPg0KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4NCisgICAgPEdlbmVyYXRlTWFuaWZlc3QgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+ZmFsc2U8L0dlbmVyYXRlTWFuaWZlc3Q+DQorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXx4NjQnIj54NjRcWmxpYkRsbCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+DQorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXx4NjQnIj54NjRcWmxpYkRsbCQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPg0KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218eDY0JyI+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4NCisgICAgPEdlbmVyYXRlTWFuaWZlc3QgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXx4NjQnIj5mYWxzZTwvR2VuZXJhdGVNYW5pZmVzdD4NCisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0nIj5pYTY0XFpsaWJEbGwkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPg0KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSciPmlhNjRcWmxpYkRsbCQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPg0KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSciPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+DQorICAgIDxHZW5lcmF0ZU1hbmlmZXN0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSciPmZhbHNlPC9HZW5lcmF0ZU1hbmlmZXN0Pg0KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj54NjRcWmxpYkRsbCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+DQorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPng2NFxabGliRGxsJChDb25maWd1cmF0aW9uKVxUbXBcPC9JbnREaXI+DQorICAgIDxMaW5rSW5jcmVtZW50YWwgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+DQorICAgIDxHZW5lcmF0ZU1hbmlmZXN0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5mYWxzZTwvR2VuZXJhdGVNYW5pZmVzdD4NCisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPmlhNjRcWmxpYkRsbCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+DQorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIj5pYTY0XFpsaWJEbGwkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4NCisgICAgPExpbmtJbmNyZW1lbnRhbCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+DQorICAgIDxHZW5lcmF0ZU1hbmlmZXN0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyI+ZmFsc2U8L0dlbmVyYXRlTWFuaWZlc3Q+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0nIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtJyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfFdpbjMyJyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218V2luMzInIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfHg2NCciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfHg2NCciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4NCisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4NCisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4NCisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIC8+DQorICAgIDxUYXJnZXROYW1lIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj56bGlid2FwaWQ8L1RhcmdldE5hbWU+DQorICAgIDxUYXJnZXROYW1lIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218V2luMzInIj56bGlid2FwaTwvVGFyZ2V0TmFtZT4NCisgICAgPFRhcmdldE5hbWUgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+emxpYndhcGk8L1RhcmdldE5hbWU+DQorICAgIDxUYXJnZXROYW1lIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+emxpYndhcGlkPC9UYXJnZXROYW1lPg0KKyAgICA8VGFyZ2V0TmFtZSBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfHg2NCciPnpsaWJ3YXBpPC9UYXJnZXROYW1lPg0KKyAgICA8VGFyZ2V0TmFtZSBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+emxpYndhcGk8L1RhcmdldE5hbWU+DQorICA8L1Byb3BlcnR5R3JvdXA+DQorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+DQorICAgIDxNaWRsPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fREVCVUc7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxNa1R5cExpYkNvbXBhdGlibGU+dHJ1ZTwvTWtUeXBMaWJDb21wYXRpYmxlPg0KKyAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPg0KKyAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5XaW4zMjwvVGFyZ2V0RW52aXJvbm1lbnQ+DQorICAgICAgPFR5cGVMaWJyYXJ5TmFtZT4kKE91dERpcil6bGlidmMudGxiPC9UeXBlTGlicmFyeU5hbWU+DQorICAgIDwvTWlkbD4NCisgICAgPENsQ29tcGlsZT4NCisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47Li5cLi5cbWFzbXg4NjslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fV0FSTklOR1M7WkxJQl9XSU5BUEk7QVNNVjtBU01JTkY7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxFeGNlcHRpb25IYW5kbGluZz4NCisgICAgICA8L0V4Y2VwdGlvbkhhbmRsaW5nPg0KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWc8L1J1bnRpbWVMaWJyYXJ5Pg0KKyAgICAgIDxCdWZmZXJTZWN1cml0eUNoZWNrPmZhbHNlPC9CdWZmZXJTZWN1cml0eUNoZWNrPg0KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlck91dHB1dEZpbGU+JChJbnREaXIpemxpYnZjLnBjaDwvUHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlPg0KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+DQorICAgICAgPE9iamVjdEZpbGVOYW1lPiQoSW50RGlyKTwvT2JqZWN0RmlsZU5hbWU+DQorICAgICAgPFByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPiQoT3V0RGlyKTwvUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+DQorICAgICAgPEJyb3dzZUluZm9ybWF0aW9uPg0KKyAgICAgIDwvQnJvd3NlSW5mb3JtYXRpb24+DQorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4NCisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4NCisgICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5FZGl0QW5kQ29udGludWU8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8UmVzb3VyY2VDb21waWxlPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fREVCVUc7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxDdWx0dXJlPjB4MDQwYzwvQ3VsdHVyZT4NCisgICAgPC9SZXNvdXJjZUNvbXBpbGU+DQorICAgIDxMaW5rPg0KKyAgICAgIDxBZGRpdGlvbmFsT3B0aW9ucz4vTUFDSElORTpJMzg2ICUoQWRkaXRpb25hbE9wdGlvbnMpPC9BZGRpdGlvbmFsT3B0aW9ucz4NCisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4uLlwuLlxtYXNteDg2XG1hdGNoNjg2Lm9iajsuLlwuLlxtYXNteDg2XGluZmZhczMyLm9iajslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPg0KKyAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPg0KKyAgICAgIDxNb2R1bGVEZWZpbml0aW9uRmlsZT4uXHpsaWJ2Yy5kZWY8L01vZHVsZURlZmluaXRpb25GaWxlPg0KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPg0KKyAgICAgIDxHZW5lcmF0ZU1hcEZpbGU+dHJ1ZTwvR2VuZXJhdGVNYXBGaWxlPg0KKyAgICAgIDxTdWJTeXN0ZW0+V2luZG93czwvU3ViU3lzdGVtPg0KKyAgICAgIDxSYW5kb21pemVkQmFzZUFkZHJlc3M+ZmFsc2U8L1JhbmRvbWl6ZWRCYXNlQWRkcmVzcz4NCisgICAgICA8RGF0YUV4ZWN1dGlvblByZXZlbnRpb24+DQorICAgICAgPC9EYXRhRXhlY3V0aW9uUHJldmVudGlvbj4NCisgICAgPC9MaW5rPg0KKyAgICA8UHJlQnVpbGRFdmVudD4NCisgICAgICA8Q29tbWFuZD5jZCAuLlwuLlxtYXNteDg2DQorYmxkX21sMzIuYmF0PC9Db21tYW5kPg0KKyAgICA8L1ByZUJ1aWxkRXZlbnQ+DQorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfFdpbjMyJyI+DQorICAgIDxNaWRsPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5OREVCVUc7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxNa1R5cExpYkNvbXBhdGlibGU+dHJ1ZTwvTWtUeXBMaWJDb21wYXRpYmxlPg0KKyAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPg0KKyAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5XaW4zMjwvVGFyZ2V0RW52aXJvbm1lbnQ+DQorICAgICAgPFR5cGVMaWJyYXJ5TmFtZT4kKE91dERpcil6bGlidmMudGxiPC9UeXBlTGlicmFyeU5hbWU+DQorICAgIDwvTWlkbD4NCisgICAgPENsQ29tcGlsZT4NCisgICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtYXNteDg2OyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19XQVJOSU5HUztaTElCX1dJTkFQSTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4NCisgICAgICA8RXhjZXB0aW9uSGFuZGxpbmc+DQorICAgICAgPC9FeGNlcHRpb25IYW5kbGluZz4NCisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERMTDwvUnVudGltZUxpYnJhcnk+DQorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+DQorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPg0KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlck91dHB1dEZpbGU+JChJbnREaXIpemxpYnZjLnBjaDwvUHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlPg0KKyAgICAgIDxBc3NlbWJsZXJPdXRwdXQ+QWxsPC9Bc3NlbWJsZXJPdXRwdXQ+DQorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4NCisgICAgICA8T2JqZWN0RmlsZU5hbWU+JChJbnREaXIpPC9PYmplY3RGaWxlTmFtZT4NCisgICAgICA8UHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+JChPdXREaXIpPC9Qcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4NCisgICAgICA8QnJvd3NlSW5mb3JtYXRpb24+DQorICAgICAgPC9Ccm93c2VJbmZvcm1hdGlvbj4NCisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPg0KKyAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPFJlc291cmNlQ29tcGlsZT4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+TkRFQlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8Q3VsdHVyZT4weDA0MGM8L0N1bHR1cmU+DQorICAgIDwvUmVzb3VyY2VDb21waWxlPg0KKyAgICA8TGluaz4NCisgICAgICA8QWRkaXRpb25hbE9wdGlvbnM+L01BQ0hJTkU6STM4NiAlKEFkZGl0aW9uYWxPcHRpb25zKTwvQWRkaXRpb25hbE9wdGlvbnM+DQorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+DQorICAgICAgPElnbm9yZUFsbERlZmF1bHRMaWJyYXJpZXM+ZmFsc2U8L0lnbm9yZUFsbERlZmF1bHRMaWJyYXJpZXM+DQorICAgICAgPE1vZHVsZURlZmluaXRpb25GaWxlPi5cemxpYnZjLmRlZjwvTW9kdWxlRGVmaW5pdGlvbkZpbGU+DQorICAgICAgPEdlbmVyYXRlTWFwRmlsZT50cnVlPC9HZW5lcmF0ZU1hcEZpbGU+DQorICAgICAgPFN1YlN5c3RlbT5XaW5kb3dzPC9TdWJTeXN0ZW0+DQorICAgICAgPFJhbmRvbWl6ZWRCYXNlQWRkcmVzcz5mYWxzZTwvUmFuZG9taXplZEJhc2VBZGRyZXNzPg0KKyAgICAgIDxEYXRhRXhlY3V0aW9uUHJldmVudGlvbj4NCisgICAgICA8L0RhdGFFeGVjdXRpb25QcmV2ZW50aW9uPg0KKyAgICA8L0xpbms+DQorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4NCisgICAgPE1pZGw+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPk5ERUJVRzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPE1rVHlwTGliQ29tcGF0aWJsZT50cnVlPC9Na1R5cExpYkNvbXBhdGlibGU+DQorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+DQorICAgICAgPFRhcmdldEVudmlyb25tZW50PldpbjMyPC9UYXJnZXRFbnZpcm9ubWVudD4NCisgICAgICA8VHlwZUxpYnJhcnlOYW1lPiQoT3V0RGlyKXpsaWJ2Yy50bGI8L1R5cGVMaWJyYXJ5TmFtZT4NCisgICAgPC9NaWRsPg0KKyAgICA8Q2xDb21waWxlPg0KKyAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOy4uXC4uXG1hc214ODY7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX1dBUk5JTkdTO1pMSUJfV0lOQVBJO0FTTVY7QVNNSU5GOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPg0KKyAgICAgIDxFeGNlcHRpb25IYW5kbGluZz4NCisgICAgICA8L0V4Y2VwdGlvbkhhbmRsaW5nPg0KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4NCisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4NCisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+DQorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyT3V0cHV0RmlsZT4kKEludERpcil6bGlidmMucGNoPC9QcmVjb21waWxlZEhlYWRlck91dHB1dEZpbGU+DQorICAgICAgPEFzc2VtYmxlck91dHB1dD5BbGw8L0Fzc2VtYmxlck91dHB1dD4NCisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPg0KKyAgICAgIDxPYmplY3RGaWxlTmFtZT4kKEludERpcik8L09iamVjdEZpbGVOYW1lPg0KKyAgICAgIDxQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4kKE91dERpcik8L1Byb2dyYW1EYXRhQmFzZUZpbGVOYW1lPg0KKyAgICAgIDxCcm93c2VJbmZvcm1hdGlvbj4NCisgICAgICA8L0Jyb3dzZUluZm9ybWF0aW9uPg0KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+DQorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8UmVzb3VyY2VDb21waWxlPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5OREVCVUc7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxDdWx0dXJlPjB4MDQwYzwvQ3VsdHVyZT4NCisgICAgPC9SZXNvdXJjZUNvbXBpbGU+DQorICAgIDxMaW5rPg0KKyAgICAgIDxBZGRpdGlvbmFsT3B0aW9ucz4vTUFDSElORTpJMzg2ICUoQWRkaXRpb25hbE9wdGlvbnMpPC9BZGRpdGlvbmFsT3B0aW9ucz4NCisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4uLlwuLlxtYXNteDg2XG1hdGNoNjg2Lm9iajsuLlwuLlxtYXNteDg2XGluZmZhczMyLm9iajslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPg0KKyAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPg0KKyAgICAgIDxJZ25vcmVBbGxEZWZhdWx0TGlicmFyaWVzPmZhbHNlPC9JZ25vcmVBbGxEZWZhdWx0TGlicmFyaWVzPg0KKyAgICAgIDxNb2R1bGVEZWZpbml0aW9uRmlsZT4uXHpsaWJ2Yy5kZWY8L01vZHVsZURlZmluaXRpb25GaWxlPg0KKyAgICAgIDxHZW5lcmF0ZU1hcEZpbGU+dHJ1ZTwvR2VuZXJhdGVNYXBGaWxlPg0KKyAgICAgIDxTdWJTeXN0ZW0+V2luZG93czwvU3ViU3lzdGVtPg0KKyAgICAgIDxSYW5kb21pemVkQmFzZUFkZHJlc3M+ZmFsc2U8L1JhbmRvbWl6ZWRCYXNlQWRkcmVzcz4NCisgICAgICA8RGF0YUV4ZWN1dGlvblByZXZlbnRpb24+DQorICAgICAgPC9EYXRhRXhlY3V0aW9uUHJldmVudGlvbj4NCisgICAgPC9MaW5rPg0KKyAgICA8UHJlQnVpbGRFdmVudD4NCisgICAgICA8Q29tbWFuZD5jZCAuLlwuLlxtYXNteDg2DQorYmxkX21sMzIuYmF0PC9Db21tYW5kPg0KKyAgICA8L1ByZUJ1aWxkRXZlbnQ+DQorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPg0KKyAgICA8TWlkbD4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0RFQlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8TWtUeXBMaWJDb21wYXRpYmxlPnRydWU8L01rVHlwTGliQ29tcGF0aWJsZT4NCisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4NCisgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4NCisgICAgICA8VHlwZUxpYnJhcnlOYW1lPiQoT3V0RGlyKXpsaWJ2Yy50bGI8L1R5cGVMaWJyYXJ5TmFtZT4NCisgICAgPC9NaWRsPg0KKyAgICA8Q2xDb21waWxlPg0KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtYXNteDg2OyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19XQVJOSU5HUztaTElCX1dJTkFQSTtBU01WO0FTTUlORjtXSU42NDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPEV4Y2VwdGlvbkhhbmRsaW5nPg0KKyAgICAgIDwvRXhjZXB0aW9uSGFuZGxpbmc+DQorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1Z0RMTDwvUnVudGltZUxpYnJhcnk+DQorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+DQorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyT3V0cHV0RmlsZT4kKEludERpcil6bGlidmMucGNoPC9QcmVjb21waWxlZEhlYWRlck91dHB1dEZpbGU+DQorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4NCisgICAgICA8T2JqZWN0RmlsZU5hbWU+JChJbnREaXIpPC9PYmplY3RGaWxlTmFtZT4NCisgICAgICA8UHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+JChPdXREaXIpPC9Qcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4NCisgICAgICA8QnJvd3NlSW5mb3JtYXRpb24+DQorICAgICAgPC9Ccm93c2VJbmZvcm1hdGlvbj4NCisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPg0KKyAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPg0KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxSZXNvdXJjZUNvbXBpbGU+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9ERUJVRzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPEN1bHR1cmU+MHgwNDBjPC9DdWx0dXJlPg0KKyAgICA8L1Jlc291cmNlQ29tcGlsZT4NCisgICAgPExpbms+DQorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Li5cLi5cbWFzbXg2NFxndm1hdDY0Lm9iajsuLlwuLlxtYXNteDY0XGluZmZhc3g2NC5vYmo7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4NCisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4NCisgICAgICA8TW9kdWxlRGVmaW5pdGlvbkZpbGU+Llx6bGlidmMuZGVmPC9Nb2R1bGVEZWZpbml0aW9uRmlsZT4NCisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4NCisgICAgICA8R2VuZXJhdGVNYXBGaWxlPnRydWU8L0dlbmVyYXRlTWFwRmlsZT4NCisgICAgICA8U3ViU3lzdGVtPldpbmRvd3M8L1N1YlN5c3RlbT4NCisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPg0KKyAgICA8L0xpbms+DQorICAgIDxQcmVCdWlsZEV2ZW50Pg0KKyAgICAgIDxDb21tYW5kPmNkIC4uXC4uXG1hc214NjQNCitibGRfbWw2NC5iYXQ8L0NvbW1hbmQ+DQorICAgIDwvUHJlQnVpbGRFdmVudD4NCisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4NCisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciPg0KKyAgICA8TWlkbD4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0RFQlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8TWtUeXBMaWJDb21wYXRpYmxlPnRydWU8L01rVHlwTGliQ29tcGF0aWJsZT4NCisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4NCisgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+SXRhbml1bTwvVGFyZ2V0RW52aXJvbm1lbnQ+DQorICAgICAgPFR5cGVMaWJyYXJ5TmFtZT4kKE91dERpcil6bGlidmMudGxiPC9UeXBlTGlicmFyeU5hbWU+DQorICAgIDwvTWlkbD4NCisgICAgPENsQ29tcGlsZT4NCisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47Li5cLi5cbWFzbXg4NjslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fV0FSTklOR1M7WkxJQl9XSU5BUEk7V0lONjQ7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxFeGNlcHRpb25IYW5kbGluZz4NCisgICAgICA8L0V4Y2VwdGlvbkhhbmRsaW5nPg0KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWdETEw8L1J1bnRpbWVMaWJyYXJ5Pg0KKyAgICAgIDxCdWZmZXJTZWN1cml0eUNoZWNrPmZhbHNlPC9CdWZmZXJTZWN1cml0eUNoZWNrPg0KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlck91dHB1dEZpbGU+JChJbnREaXIpemxpYnZjLnBjaDwvUHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlPg0KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+DQorICAgICAgPE9iamVjdEZpbGVOYW1lPiQoSW50RGlyKTwvT2JqZWN0RmlsZU5hbWU+DQorICAgICAgPFByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPiQoT3V0RGlyKTwvUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+DQorICAgICAgPEJyb3dzZUluZm9ybWF0aW9uPg0KKyAgICAgIDwvQnJvd3NlSW5mb3JtYXRpb24+DQorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4NCisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4NCisgICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5Qcm9ncmFtRGF0YWJhc2U8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8UmVzb3VyY2VDb21waWxlPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fREVCVUc7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxDdWx0dXJlPjB4MDQwYzwvQ3VsdHVyZT4NCisgICAgPC9SZXNvdXJjZUNvbXBpbGU+DQorICAgIDxMaW5rPg0KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKXpsaWJ3YXBpLmRsbDwvT3V0cHV0RmlsZT4NCisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4NCisgICAgICA8TW9kdWxlRGVmaW5pdGlvbkZpbGU+Llx6bGlidmMuZGVmPC9Nb2R1bGVEZWZpbml0aW9uRmlsZT4NCisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4NCisgICAgICA8UHJvZ3JhbURhdGFiYXNlRmlsZT4kKE91dERpcil6bGlid2FwaS5wZGI8L1Byb2dyYW1EYXRhYmFzZUZpbGU+DQorICAgICAgPEdlbmVyYXRlTWFwRmlsZT50cnVlPC9HZW5lcmF0ZU1hcEZpbGU+DQorICAgICAgPE1hcEZpbGVOYW1lPiQoT3V0RGlyKXpsaWJ3YXBpLm1hcDwvTWFwRmlsZU5hbWU+DQorICAgICAgPFN1YlN5c3RlbT5XaW5kb3dzPC9TdWJTeXN0ZW0+DQorICAgICAgPEltcG9ydExpYnJhcnk+JChPdXREaXIpemxpYndhcGkubGliPC9JbXBvcnRMaWJyYXJ5Pg0KKyAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVJQTY0PC9UYXJnZXRNYWNoaW5lPg0KKyAgICA8L0xpbms+DQorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfHg2NCciPg0KKyAgICA8TWlkbD4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+TkRFQlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8TWtUeXBMaWJDb21wYXRpYmxlPnRydWU8L01rVHlwTGliQ29tcGF0aWJsZT4NCisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4NCisgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4NCisgICAgICA8VHlwZUxpYnJhcnlOYW1lPiQoT3V0RGlyKXpsaWJ2Yy50bGI8L1R5cGVMaWJyYXJ5TmFtZT4NCisgICAgPC9NaWRsPg0KKyAgICA8Q2xDb21waWxlPg0KKyAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOy4uXC4uXG1hc214ODY7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX1dBUk5JTkdTO1pMSUJfV0lOQVBJO1dJTjY0OyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPg0KKyAgICAgIDxFeGNlcHRpb25IYW5kbGluZz4NCisgICAgICA8L0V4Y2VwdGlvbkhhbmRsaW5nPg0KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRExMPC9SdW50aW1lTGlicmFyeT4NCisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4NCisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+DQorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyT3V0cHV0RmlsZT4kKEludERpcil6bGlidmMucGNoPC9QcmVjb21waWxlZEhlYWRlck91dHB1dEZpbGU+DQorICAgICAgPEFzc2VtYmxlck91dHB1dD5BbGw8L0Fzc2VtYmxlck91dHB1dD4NCisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPg0KKyAgICAgIDxPYmplY3RGaWxlTmFtZT4kKEludERpcik8L09iamVjdEZpbGVOYW1lPg0KKyAgICAgIDxQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4kKE91dERpcik8L1Byb2dyYW1EYXRhQmFzZUZpbGVOYW1lPg0KKyAgICAgIDxCcm93c2VJbmZvcm1hdGlvbj4NCisgICAgICA8L0Jyb3dzZUluZm9ybWF0aW9uPg0KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+DQorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8UmVzb3VyY2VDb21waWxlPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5OREVCVUc7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxDdWx0dXJlPjB4MDQwYzwvQ3VsdHVyZT4NCisgICAgPC9SZXNvdXJjZUNvbXBpbGU+DQorICAgIDxMaW5rPg0KKyAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPg0KKyAgICAgIDxJZ25vcmVBbGxEZWZhdWx0TGlicmFyaWVzPmZhbHNlPC9JZ25vcmVBbGxEZWZhdWx0TGlicmFyaWVzPg0KKyAgICAgIDxNb2R1bGVEZWZpbml0aW9uRmlsZT4uXHpsaWJ2Yy5kZWY8L01vZHVsZURlZmluaXRpb25GaWxlPg0KKyAgICAgIDxHZW5lcmF0ZU1hcEZpbGU+dHJ1ZTwvR2VuZXJhdGVNYXBGaWxlPg0KKyAgICAgIDxTdWJTeXN0ZW0+V2luZG93czwvU3ViU3lzdGVtPg0KKyAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVYNjQ8L1RhcmdldE1hY2hpbmU+DQorICAgIDwvTGluaz4NCisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4NCisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSciPg0KKyAgICA8TWlkbD4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+TkRFQlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8TWtUeXBMaWJDb21wYXRpYmxlPnRydWU8L01rVHlwTGliQ29tcGF0aWJsZT4NCisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4NCisgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+SXRhbml1bTwvVGFyZ2V0RW52aXJvbm1lbnQ+DQorICAgICAgPFR5cGVMaWJyYXJ5TmFtZT4kKE91dERpcil6bGlidmMudGxiPC9UeXBlTGlicmFyeU5hbWU+DQorICAgIDwvTWlkbD4NCisgICAgPENsQ29tcGlsZT4NCisgICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtYXNteDg2OyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19XQVJOSU5HUztaTElCX1dJTkFQSTtXSU42NDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4NCisgICAgICA8RXhjZXB0aW9uSGFuZGxpbmc+DQorICAgICAgPC9FeGNlcHRpb25IYW5kbGluZz4NCisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERMTDwvUnVudGltZUxpYnJhcnk+DQorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+DQorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPg0KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlck91dHB1dEZpbGU+JChJbnREaXIpemxpYnZjLnBjaDwvUHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlPg0KKyAgICAgIDxBc3NlbWJsZXJPdXRwdXQ+QWxsPC9Bc3NlbWJsZXJPdXRwdXQ+DQorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4NCisgICAgICA8T2JqZWN0RmlsZU5hbWU+JChJbnREaXIpPC9PYmplY3RGaWxlTmFtZT4NCisgICAgICA8UHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+JChPdXREaXIpPC9Qcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4NCisgICAgICA8QnJvd3NlSW5mb3JtYXRpb24+DQorICAgICAgPC9Ccm93c2VJbmZvcm1hdGlvbj4NCisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPg0KKyAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPFJlc291cmNlQ29tcGlsZT4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+TkRFQlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8Q3VsdHVyZT4weDA0MGM8L0N1bHR1cmU+DQorICAgIDwvUmVzb3VyY2VDb21waWxlPg0KKyAgICA8TGluaz4NCisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpcil6bGlid2FwaS5kbGw8L091dHB1dEZpbGU+DQorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+DQorICAgICAgPElnbm9yZUFsbERlZmF1bHRMaWJyYXJpZXM+ZmFsc2U8L0lnbm9yZUFsbERlZmF1bHRMaWJyYXJpZXM+DQorICAgICAgPE1vZHVsZURlZmluaXRpb25GaWxlPi5cemxpYnZjLmRlZjwvTW9kdWxlRGVmaW5pdGlvbkZpbGU+DQorICAgICAgPFByb2dyYW1EYXRhYmFzZUZpbGU+JChPdXREaXIpemxpYndhcGkucGRiPC9Qcm9ncmFtRGF0YWJhc2VGaWxlPg0KKyAgICAgIDxHZW5lcmF0ZU1hcEZpbGU+dHJ1ZTwvR2VuZXJhdGVNYXBGaWxlPg0KKyAgICAgIDxNYXBGaWxlTmFtZT4kKE91dERpcil6bGlid2FwaS5tYXA8L01hcEZpbGVOYW1lPg0KKyAgICAgIDxTdWJTeXN0ZW0+V2luZG93czwvU3ViU3lzdGVtPg0KKyAgICAgIDxJbXBvcnRMaWJyYXJ5PiQoT3V0RGlyKXpsaWJ3YXBpLmxpYjwvSW1wb3J0TGlicmFyeT4NCisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lSUE2NDwvVGFyZ2V0TWFjaGluZT4NCisgICAgPC9MaW5rPg0KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPg0KKyAgICA8TWlkbD4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+TkRFQlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8TWtUeXBMaWJDb21wYXRpYmxlPnRydWU8L01rVHlwTGliQ29tcGF0aWJsZT4NCisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4NCisgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4NCisgICAgICA8VHlwZUxpYnJhcnlOYW1lPiQoT3V0RGlyKXpsaWJ2Yy50bGI8L1R5cGVMaWJyYXJ5TmFtZT4NCisgICAgPC9NaWRsPg0KKyAgICA8Q2xDb21waWxlPg0KKyAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOy4uXC4uXG1hc214ODY7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX1dBUk5JTkdTO1pMSUJfV0lOQVBJO0FTTVY7QVNNSU5GO1dJTjY0OyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPg0KKyAgICAgIDxFeGNlcHRpb25IYW5kbGluZz4NCisgICAgICA8L0V4Y2VwdGlvbkhhbmRsaW5nPg0KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRExMPC9SdW50aW1lTGlicmFyeT4NCisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4NCisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+DQorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyT3V0cHV0RmlsZT4kKEludERpcil6bGlidmMucGNoPC9QcmVjb21waWxlZEhlYWRlck91dHB1dEZpbGU+DQorICAgICAgPEFzc2VtYmxlck91dHB1dD5BbGw8L0Fzc2VtYmxlck91dHB1dD4NCisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPg0KKyAgICAgIDxPYmplY3RGaWxlTmFtZT4kKEludERpcik8L09iamVjdEZpbGVOYW1lPg0KKyAgICAgIDxQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4kKE91dERpcik8L1Byb2dyYW1EYXRhQmFzZUZpbGVOYW1lPg0KKyAgICAgIDxCcm93c2VJbmZvcm1hdGlvbj4NCisgICAgICA8L0Jyb3dzZUluZm9ybWF0aW9uPg0KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+DQorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8UmVzb3VyY2VDb21waWxlPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5OREVCVUc7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxDdWx0dXJlPjB4MDQwYzwvQ3VsdHVyZT4NCisgICAgPC9SZXNvdXJjZUNvbXBpbGU+DQorICAgIDxMaW5rPg0KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPi4uXC4uXG1hc214NjRcZ3ZtYXQ2NC5vYmo7Li5cLi5cbWFzbXg2NFxpbmZmYXN4NjQub2JqOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+DQorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+DQorICAgICAgPElnbm9yZUFsbERlZmF1bHRMaWJyYXJpZXM+ZmFsc2U8L0lnbm9yZUFsbERlZmF1bHRMaWJyYXJpZXM+DQorICAgICAgPE1vZHVsZURlZmluaXRpb25GaWxlPi5cemxpYnZjLmRlZjwvTW9kdWxlRGVmaW5pdGlvbkZpbGU+DQorICAgICAgPEdlbmVyYXRlTWFwRmlsZT50cnVlPC9HZW5lcmF0ZU1hcEZpbGU+DQorICAgICAgPFN1YlN5c3RlbT5XaW5kb3dzPC9TdWJTeXN0ZW0+DQorICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4NCisgICAgPC9MaW5rPg0KKyAgICA8UHJlQnVpbGRFdmVudD4NCisgICAgICA8Q29tbWFuZD5jZCAuLlwuLlxtYXNteDY0DQorYmxkX21sNjQuYmF0PC9Db21tYW5kPg0KKyAgICA8L1ByZUJ1aWxkRXZlbnQ+DQorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPg0KKyAgICA8TWlkbD4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+TkRFQlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8TWtUeXBMaWJDb21wYXRpYmxlPnRydWU8L01rVHlwTGliQ29tcGF0aWJsZT4NCisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4NCisgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+SXRhbml1bTwvVGFyZ2V0RW52aXJvbm1lbnQ+DQorICAgICAgPFR5cGVMaWJyYXJ5TmFtZT4kKE91dERpcil6bGlidmMudGxiPC9UeXBlTGlicmFyeU5hbWU+DQorICAgIDwvTWlkbD4NCisgICAgPENsQ29tcGlsZT4NCisgICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtYXNteDg2OyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19XQVJOSU5HUztaTElCX1dJTkFQSTtXSU42NDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4NCisgICAgICA8RXhjZXB0aW9uSGFuZGxpbmc+DQorICAgICAgPC9FeGNlcHRpb25IYW5kbGluZz4NCisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERMTDwvUnVudGltZUxpYnJhcnk+DQorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+DQorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPg0KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlck91dHB1dEZpbGU+JChJbnREaXIpemxpYnZjLnBjaDwvUHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlPg0KKyAgICAgIDxBc3NlbWJsZXJPdXRwdXQ+QWxsPC9Bc3NlbWJsZXJPdXRwdXQ+DQorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4NCisgICAgICA8T2JqZWN0RmlsZU5hbWU+JChJbnREaXIpPC9PYmplY3RGaWxlTmFtZT4NCisgICAgICA8UHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+JChPdXREaXIpPC9Qcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4NCisgICAgICA8QnJvd3NlSW5mb3JtYXRpb24+DQorICAgICAgPC9Ccm93c2VJbmZvcm1hdGlvbj4NCisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPg0KKyAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPFJlc291cmNlQ29tcGlsZT4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+TkRFQlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8Q3VsdHVyZT4weDA0MGM8L0N1bHR1cmU+DQorICAgIDwvUmVzb3VyY2VDb21waWxlPg0KKyAgICA8TGluaz4NCisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpcil6bGlid2FwaS5kbGw8L091dHB1dEZpbGU+DQorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+DQorICAgICAgPElnbm9yZUFsbERlZmF1bHRMaWJyYXJpZXM+ZmFsc2U8L0lnbm9yZUFsbERlZmF1bHRMaWJyYXJpZXM+DQorICAgICAgPE1vZHVsZURlZmluaXRpb25GaWxlPi5cemxpYnZjLmRlZjwvTW9kdWxlRGVmaW5pdGlvbkZpbGU+DQorICAgICAgPFByb2dyYW1EYXRhYmFzZUZpbGU+JChPdXREaXIpemxpYndhcGkucGRiPC9Qcm9ncmFtRGF0YWJhc2VGaWxlPg0KKyAgICAgIDxHZW5lcmF0ZU1hcEZpbGU+dHJ1ZTwvR2VuZXJhdGVNYXBGaWxlPg0KKyAgICAgIDxNYXBGaWxlTmFtZT4kKE91dERpcil6bGlid2FwaS5tYXA8L01hcEZpbGVOYW1lPg0KKyAgICAgIDxTdWJTeXN0ZW0+V2luZG93czwvU3ViU3lzdGVtPg0KKyAgICAgIDxJbXBvcnRMaWJyYXJ5PiQoT3V0RGlyKXpsaWJ3YXBpLmxpYjwvSW1wb3J0TGlicmFyeT4NCisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lSUE2NDwvVGFyZ2V0TWFjaGluZT4NCisgICAgPC9MaW5rPg0KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KKyAgPEl0ZW1Hcm91cD4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxhZGxlcjMyLmMiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cY29tcHJlc3MuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxjcmMzMi5jIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXGRlZmxhdGUuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxnemNsb3NlLmMiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cZ3psaWIuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxnenJlYWQuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxnendyaXRlLmMiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5caW5mYmFjay5jIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXG1hc214NjRcaW5mZmFzODY2NC5jIj4NCisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+DQorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4NCisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+DQorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4NCisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4NCisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXGluZmZhc3QuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxpbmZsYXRlLmMiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5caW5mdHJlZXMuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxtaW5pemlwXGlvYXBpLmMiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbWluaXppcFxpb3dpbjMyLmMiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cdHJlZXMuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlx1bmNvbXByLmMiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbWluaXppcFx1bnppcC5jIj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyI+WkxJQl9JTlRFUk5BTDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+WkxJQl9JTlRFUk5BTDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5aTElCX0lOVEVSTkFMOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbWluaXppcFx6aXAuYyI+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPlpMSUJfSU5URVJOQUw7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPlpMSUJfSU5URVJOQUw7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+WkxJQl9JTlRFUk5BTDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHp1dGlsLmMiIC8+DQorICA8L0l0ZW1Hcm91cD4NCisgIDxJdGVtR3JvdXA+DQorICAgIDxSZXNvdXJjZUNvbXBpbGUgSW5jbHVkZT0iemxpYi5yYyIgLz4NCisgIDwvSXRlbUdyb3VwPg0KKyAgPEl0ZW1Hcm91cD4NCisgICAgPE5vbmUgSW5jbHVkZT0iemxpYnZjLmRlZiIgLz4NCisgIDwvSXRlbUdyb3VwPg0KKyAgPEl0ZW1Hcm91cD4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlwuLlxkZWZsYXRlLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cLi5caW5mYmxvY2suaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlwuLlxpbmZjb2Rlcy5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXC4uXGluZmZhc3QuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlwuLlxpbmZ0cmVlcy5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXC4uXGluZnV0aWwuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlwuLlx6Y29uZi5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXC4uXHpsaWIuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlwuLlx6dXRpbC5oIiAvPg0KKyAgPC9JdGVtR3JvdXA+DQorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPg0KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4NCisgIDwvSW1wb3J0R3JvdXA+DQorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxMC96bGlidmMudmN4cHJvai5maWx0ZXJzIGIvc3JjL2NvbnRyaWIvdnN0dWRpby92YzEwL3psaWJ2Yy52Y3hwcm9qLmZpbHRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgwYjcxYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxMC96bGlidmMudmN4cHJvai5maWx0ZXJzCkBAIC0wLDAgKzEsMTE4IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KKzxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4NCisgIDxJdGVtR3JvdXA+DQorICAgIDxGaWx0ZXIgSW5jbHVkZT0iU291cmNlIEZpbGVzIj4NCisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57MDc5MzRhODUtOGI2MS00NDNkLWEwZWUtYjJlZWRiNzRmM2NkfTwvVW5pcXVlSWRlbnRpZmllcj4NCisgICAgICA8RXh0ZW5zaW9ucz5jcHA7YztjeHg7cmM7ZGVmO3I7b2RsO2hwajtiYXQ7Zm9yO2Y5MDwvRXh0ZW5zaW9ucz4NCisgICAgPC9GaWx0ZXI+DQorICAgIDxGaWx0ZXIgSW5jbHVkZT0iSGVhZGVyIEZpbGVzIj4NCisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57MWQ5OTY3NWItNDMzZC00YTIxLTllNTAtZWQ0YWI4YjE5NzYyfTwvVW5pcXVlSWRlbnRpZmllcj4NCisgICAgICA8RXh0ZW5zaW9ucz5oO2hwcDtoeHg7aG07aW5sO2ZpO2ZkPC9FeHRlbnNpb25zPg0KKyAgICA8L0ZpbHRlcj4NCisgICAgPEZpbHRlciBJbmNsdWRlPSJSZXNvdXJjZSBGaWxlcyI+DQorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezQzMWMwOTU4LWZhNzEtNDRkMC05MDg0LTJkMTlkMTAwYzBjY308L1VuaXF1ZUlkZW50aWZpZXI+DQorICAgICAgPEV4dGVuc2lvbnM+aWNvO2N1cjtibXA7ZGxnO3JjMjtyY3Q7YmluO2NudDtydGY7Z2lmO2pwZztqcGVnO2pwZTwvRXh0ZW5zaW9ucz4NCisgICAgPC9GaWx0ZXI+DQorICA8L0l0ZW1Hcm91cD4NCisgIDxJdGVtR3JvdXA+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cYWRsZXIzMi5jIj4NCisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxjb21wcmVzcy5jIj4NCisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxjcmMzMi5jIj4NCisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxkZWZsYXRlLmMiPg0KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXGd6Y2xvc2UuYyI+DQorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cZ3psaWIuYyI+DQorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cZ3pyZWFkLmMiPg0KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXGd6d3JpdGUuYyI+DQorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5caW5mYmFjay5jIj4NCisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxtYXNteDY0XGluZmZhczg2NjQuYyI+DQorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5caW5mZmFzdC5jIj4NCisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxpbmZsYXRlLmMiPg0KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXGluZnRyZWVzLmMiPg0KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXG1pbml6aXBcaW9hcGkuYyI+DQorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbWluaXppcFxpb3dpbjMyLmMiPg0KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHRyZWVzLmMiPg0KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHVuY29tcHIuYyI+DQorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbWluaXppcFx1bnppcC5jIj4NCisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxtaW5pemlwXHppcC5jIj4NCisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlx6dXRpbC5jIj4NCisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgIDwvSXRlbUdyb3VwPg0KKyAgPEl0ZW1Hcm91cD4NCisgICAgPFJlc291cmNlQ29tcGlsZSBJbmNsdWRlPSJ6bGliLnJjIj4NCisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KKyAgICA8L1Jlc291cmNlQ29tcGlsZT4NCisgIDwvSXRlbUdyb3VwPg0KKyAgPEl0ZW1Hcm91cD4NCisgICAgPE5vbmUgSW5jbHVkZT0iemxpYnZjLmRlZiI+DQorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCisgICAgPC9Ob25lPg0KKyAgPC9JdGVtR3JvdXA+DQorICA8SXRlbUdyb3VwPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXC4uXGRlZmxhdGUuaCI+DQorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cLi5caW5mYmxvY2suaCI+DQorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cLi5caW5mY29kZXMuaCI+DQorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cLi5caW5mZmFzdC5oIj4NCisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlwuLlxpbmZ0cmVlcy5oIj4NCisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlwuLlxpbmZ1dGlsLmgiPg0KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXC4uXHpjb25mLmgiPg0KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXC4uXHpsaWIuaCI+DQorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cLi5cenV0aWwuaCI+DQorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICA8L0l0ZW1Hcm91cD4NCis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvdnN0dWRpby92YzExL21pbml1bnoudmN4cHJvaiBiL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxMS9taW5pdW56LnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY5ZjIwYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxMS9taW5pdW56LnZjeHByb2oKQEAgLTAsMCArMSwzMTQgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+DQorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+DQorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPg0KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8SXRhbml1bSI+DQorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+DQorICAgICAgPFBsYXRmb3JtPkl0YW5pdW08L1BsYXRmb3JtPg0KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPg0KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPg0KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+DQorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+DQorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPg0KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPg0KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPg0KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxJdGFuaXVtIj4NCisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPg0KKyAgICAgIDxQbGF0Zm9ybT5JdGFuaXVtPC9QbGF0Zm9ybT4NCisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPg0KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+DQorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4NCisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4NCisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPg0KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPg0KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0KKyAgPC9JdGVtR3JvdXA+DQorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+DQorICAgIDxQcm9qZWN0R3VpZD57QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzODJBfTwvUHJvamVjdEd1aWQ+DQorICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4NCisgIDwvUHJvcGVydHlHcm91cD4NCisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+DQorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+DQorICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+DQorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djExMDwvUGxhdGZvcm1Ub29sc2V0Pg0KKyAgPC9Qcm9wZXJ0eUdyb3VwPg0KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4NCisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+DQorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djExMDwvUGxhdGZvcm1Ub29sc2V0Pg0KKyAgPC9Qcm9wZXJ0eUdyb3VwPg0KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+DQorICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+DQorICA8L1Byb3BlcnR5R3JvdXA+DQorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+DQorICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+DQorICA8L1Byb3BlcnR5R3JvdXA+DQorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPg0KKyAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0Pg0KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxMTA8L1BsYXRmb3JtVG9vbHNldD4NCisgIDwvUHJvcGVydHlHcm91cD4NCisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPg0KKyAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0Pg0KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxMTA8L1BsYXRmb3JtVG9vbHNldD4NCisgIDwvUHJvcGVydHlHcm91cD4NCisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPg0KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+DQorICA8L0ltcG9ydEdyb3VwPg0KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+DQorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4NCisgIDwvSW1wb3J0R3JvdXA+DQorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+DQorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4NCisgIDwvSW1wb3J0R3JvdXA+DQorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPg0KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+DQorICA8L0ltcG9ydEdyb3VwPg0KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+DQorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4NCisgIDwvSW1wb3J0R3JvdXA+DQorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+DQorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4NCisgIDwvSW1wb3J0R3JvdXA+DQorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPg0KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+DQorICA8L0ltcG9ydEdyb3VwPg0KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+DQorICA8UHJvcGVydHlHcm91cD4NCisgICAgPF9Qcm9qZWN0RmlsZVZlcnNpb24+MTAuMC4zMDEyOC4xPC9fUHJvamVjdEZpbGVWZXJzaW9uPg0KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj54ODZcTWluaVVuemlwJChDb25maWd1cmF0aW9uKVw8L091dERpcj4NCisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+eDg2XE1pbmlVbnppcCQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPg0KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj50cnVlPC9MaW5rSW5jcmVtZW50YWw+DQorICAgIDxHZW5lcmF0ZU1hbmlmZXN0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5mYWxzZTwvR2VuZXJhdGVNYW5pZmVzdD4NCisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj54ODZcTWluaVVuemlwJChDb25maWd1cmF0aW9uKVw8L091dERpcj4NCisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj54ODZcTWluaVVuemlwJChDb25maWd1cmF0aW9uKVxUbXBcPC9JbnREaXI+DQorICAgIDxMaW5rSW5jcmVtZW50YWwgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4NCisgICAgPEdlbmVyYXRlTWFuaWZlc3QgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+ZmFsc2U8L0dlbmVyYXRlTWFuaWZlc3Q+DQorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj54NjRcTWluaVVuemlwJChDb25maWd1cmF0aW9uKVw8L091dERpcj4NCisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPng2NFxNaW5pVW56aXAkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4NCisgICAgPExpbmtJbmNyZW1lbnRhbCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4NCisgICAgPEdlbmVyYXRlTWFuaWZlc3QgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5mYWxzZTwvR2VuZXJhdGVNYW5pZmVzdD4NCisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIj5pYTY0XE1pbmlVbnppcCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+DQorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+aWE2NFxNaW5pVW56aXAkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4NCisgICAgPExpbmtJbmNyZW1lbnRhbCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIj50cnVlPC9MaW5rSW5jcmVtZW50YWw+DQorICAgIDxHZW5lcmF0ZU1hbmlmZXN0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciPmZhbHNlPC9HZW5lcmF0ZU1hbmlmZXN0Pg0KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj54NjRcTWluaVVuemlwJChDb25maWd1cmF0aW9uKVw8L091dERpcj4NCisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+eDY0XE1pbmlVbnppcCQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPg0KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5mYWxzZTwvTGlua0luY3JlbWVudGFsPg0KKyAgICA8R2VuZXJhdGVNYW5pZmVzdCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+ZmFsc2U8L0dlbmVyYXRlTWFuaWZlc3Q+DQorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIj5pYTY0XE1pbmlVbnppcCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+DQorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIj5pYTY0XE1pbmlVbnppcCQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPg0KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyI+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4NCisgICAgPEdlbmVyYXRlTWFuaWZlc3QgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIj5mYWxzZTwvR2VuZXJhdGVNYW5pZmVzdD4NCisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4NCisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4NCisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4NCisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0Pg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0Pg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0Pg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgLz4NCisgIDwvUHJvcGVydHlHcm91cD4NCisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4NCisgICAgPENsQ29tcGlsZT4NCisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47Li5cLi5cbWluaXppcDslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtaTElCX1dJTkFQSTtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxNaW5pbWFsUmVidWlsZD50cnVlPC9NaW5pbWFsUmVidWlsZD4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkRlZmF1bHQ8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERlYnVnRExMPC9SdW50aW1lTGlicmFyeT4NCisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4NCisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+DQorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4NCisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPg0KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+DQorICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+UHJvZ3JhbURhdGFiYXNlPC9EZWJ1Z0luZm9ybWF0aW9uRm9ybWF0Pg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPExpbms+DQorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+eDg2XFpsaWJEbGxEZWJ1Z1x6bGlid2FwaS5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4NCisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpciltaW5pdW56LmV4ZTwvT3V0cHV0RmlsZT4NCisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4NCisgICAgICA8UHJvZ3JhbURhdGFiYXNlRmlsZT4kKE91dERpciltaW5pdW56LnBkYjwvUHJvZ3JhbURhdGFiYXNlRmlsZT4NCisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4NCisgICAgICA8UmFuZG9taXplZEJhc2VBZGRyZXNzPmZhbHNlPC9SYW5kb21pemVkQmFzZUFkZHJlc3M+DQorICAgICAgPERhdGFFeGVjdXRpb25QcmV2ZW50aW9uPg0KKyAgICAgIDwvRGF0YUV4ZWN1dGlvblByZXZlbnRpb24+DQorICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg4NjwvVGFyZ2V0TWFjaGluZT4NCisgICAgPC9MaW5rPg0KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+DQorICAgIDxDbENvbXBpbGU+DQorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPg0KKyAgICAgIDxPbWl0RnJhbWVQb2ludGVycz50cnVlPC9PbWl0RnJhbWVQb2ludGVycz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtaW5pemlwOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO1pMSUJfV0lOQVBJO05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkRlZmF1bHQ8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+DQorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+DQorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPg0KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4NCisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPg0KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+DQorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4NCisgICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5Qcm9ncmFtRGF0YWJhc2U8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8TGluaz4NCisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz54ODZcWmxpYkRsbFJlbGVhc2VcemxpYndhcGkubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+DQorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpbWluaXVuei5leGU8L091dHB1dEZpbGU+DQorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+DQorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+DQorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+DQorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4NCisgICAgICA8UmFuZG9taXplZEJhc2VBZGRyZXNzPmZhbHNlPC9SYW5kb21pemVkQmFzZUFkZHJlc3M+DQorICAgICAgPERhdGFFeGVjdXRpb25QcmV2ZW50aW9uPg0KKyAgICAgIDwvRGF0YUV4ZWN1dGlvblByZXZlbnRpb24+DQorICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg4NjwvVGFyZ2V0TWFjaGluZT4NCisgICAgPC9MaW5rPg0KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4NCisgICAgPE1pZGw+DQorICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+DQorICAgIDwvTWlkbD4NCisgICAgPENsQ29tcGlsZT4NCisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47Li5cLi5cbWluaXppcDslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtaTElCX1dJTkFQSTtfREVCVUc7X0NPTlNPTEU7V0lONjQ7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxNaW5pbWFsUmVidWlsZD50cnVlPC9NaW5pbWFsUmVidWlsZD4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkRlZmF1bHQ8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERlYnVnRExMPC9SdW50aW1lTGlicmFyeT4NCisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4NCisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+DQorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4NCisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPg0KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+DQorICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+UHJvZ3JhbURhdGFiYXNlPC9EZWJ1Z0luZm9ybWF0aW9uRm9ybWF0Pg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPExpbms+DQorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+eDY0XFpsaWJEbGxEZWJ1Z1x6bGlid2FwaS5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4NCisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpciltaW5pdW56LmV4ZTwvT3V0cHV0RmlsZT4NCisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4NCisgICAgICA8UHJvZ3JhbURhdGFiYXNlRmlsZT4kKE91dERpciltaW5pdW56LnBkYjwvUHJvZ3JhbURhdGFiYXNlRmlsZT4NCisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4NCisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPg0KKyAgICA8L0xpbms+DQorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIj4NCisgICAgPE1pZGw+DQorICAgICAgPFRhcmdldEVudmlyb25tZW50Pkl0YW5pdW08L1RhcmdldEVudmlyb25tZW50Pg0KKyAgICA8L01pZGw+DQorICAgIDxDbENvbXBpbGU+DQorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOy4uXC4uXG1pbml6aXA7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7WkxJQl9XSU5BUEk7X0RFQlVHO19DT05TT0xFO1dJTjY0OyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8TWluaW1hbFJlYnVpbGQ+dHJ1ZTwvTWluaW1hbFJlYnVpbGQ+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5EZWZhdWx0PC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1Z0RMTDwvUnVudGltZUxpYnJhcnk+DQorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+DQorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPg0KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+DQorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4NCisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPg0KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxMaW5rPg0KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmlhNjRcWmxpYkRsbERlYnVnXHpsaWJ3YXBpLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPg0KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKW1pbml1bnouZXhlPC9PdXRwdXRGaWxlPg0KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPg0KKyAgICAgIDxQcm9ncmFtRGF0YWJhc2VGaWxlPiQoT3V0RGlyKW1pbml1bnoucGRiPC9Qcm9ncmFtRGF0YWJhc2VGaWxlPg0KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPg0KKyAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVJQTY0PC9UYXJnZXRNYWNoaW5lPg0KKyAgICA8L0xpbms+DQorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+DQorICAgIDxNaWRsPg0KKyAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50Pg0KKyAgICA8L01pZGw+DQorICAgIDxDbENvbXBpbGU+DQorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPg0KKyAgICAgIDxPbWl0RnJhbWVQb2ludGVycz50cnVlPC9PbWl0RnJhbWVQb2ludGVycz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtaW5pemlwOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO1pMSUJfV0lOQVBJO05ERUJVRztfQ09OU09MRTtXSU42NDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkRlZmF1bHQ8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERMTDwvUnVudGltZUxpYnJhcnk+DQorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+DQorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPg0KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4NCisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPg0KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+DQorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4NCisgICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5Qcm9ncmFtRGF0YWJhc2U8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8TGluaz4NCisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz54NjRcWmxpYkRsbFJlbGVhc2VcemxpYndhcGkubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+DQorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpbWluaXVuei5leGU8L091dHB1dEZpbGU+DQorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+DQorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+DQorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+DQorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4NCisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPg0KKyAgICA8L0xpbms+DQorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPg0KKyAgICA8TWlkbD4NCisgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+SXRhbml1bTwvVGFyZ2V0RW52aXJvbm1lbnQ+DQorICAgIDwvTWlkbD4NCisgICAgPENsQ29tcGlsZT4NCisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+DQorICAgICAgPE9taXRGcmFtZVBvaW50ZXJzPnRydWU8L09taXRGcmFtZVBvaW50ZXJzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOy4uXC4uXG1pbml6aXA7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7WkxJQl9XSU5BUEk7TkRFQlVHO19DT05TT0xFO1dJTjY0OyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RGVmYXVsdDwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRExMPC9SdW50aW1lTGlicmFyeT4NCisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4NCisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+DQorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPg0KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+DQorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4NCisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPg0KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxMaW5rPg0KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmlhNjRcWmxpYkRsbFJlbGVhc2VcemxpYndhcGkubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+DQorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpbWluaXVuei5leGU8L091dHB1dEZpbGU+DQorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+DQorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+DQorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+DQorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4NCisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lSUE2NDwvVGFyZ2V0TWFjaGluZT4NCisgICAgPC9MaW5rPg0KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KKyAgPEl0ZW1Hcm91cD4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxtaW5pemlwXG1pbml1bnouYyIgLz4NCisgIDwvSXRlbUdyb3VwPg0KKyAgPEl0ZW1Hcm91cD4NCisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0iemxpYnZjLnZjeHByb2oiPg0KKyAgICAgIDxQcm9qZWN0Pns4ZmQ4MjZmOC0zNzM5LTQ0ZTYtOGNjOC05OTcxMjJlNTNiOGR9PC9Qcm9qZWN0Pg0KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+DQorICA8L0l0ZW1Hcm91cD4NCisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+DQorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPg0KKyAgPC9JbXBvcnRHcm91cD4NCis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvdnN0dWRpby92YzExL21pbml6aXAudmN4cHJvaiBiL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxMS9taW5pemlwLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkzZDllNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxMS9taW5pemlwLnZjeHByb2oKQEAgLTAsMCArMSwzMTEgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+DQorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+DQorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPg0KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8SXRhbml1bSI+DQorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+DQorICAgICAgPFBsYXRmb3JtPkl0YW5pdW08L1BsYXRmb3JtPg0KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPg0KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPg0KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+DQorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+DQorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPg0KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPg0KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPg0KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxJdGFuaXVtIj4NCisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPg0KKyAgICAgIDxQbGF0Zm9ybT5JdGFuaXVtPC9QbGF0Zm9ybT4NCisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPg0KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+DQorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4NCisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4NCisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPg0KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPg0KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0KKyAgPC9JdGVtR3JvdXA+DQorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+DQorICAgIDxQcm9qZWN0R3VpZD57NDhDREQ5REMtRTA5Ri00MTM1LTlDMEMtNEZFNTBDM0M2NTRCfTwvUHJvamVjdEd1aWQ+DQorICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4NCisgIDwvUHJvcGVydHlHcm91cD4NCisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+DQorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+DQorICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+DQorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djExMDwvUGxhdGZvcm1Ub29sc2V0Pg0KKyAgPC9Qcm9wZXJ0eUdyb3VwPg0KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4NCisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+DQorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djExMDwvUGxhdGZvcm1Ub29sc2V0Pg0KKyAgPC9Qcm9wZXJ0eUdyb3VwPg0KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+DQorICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+DQorICA8L1Byb3BlcnR5R3JvdXA+DQorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+DQorICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+DQorICA8L1Byb3BlcnR5R3JvdXA+DQorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPg0KKyAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0Pg0KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxMTA8L1BsYXRmb3JtVG9vbHNldD4NCisgIDwvUHJvcGVydHlHcm91cD4NCisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPg0KKyAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0Pg0KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxMTA8L1BsYXRmb3JtVG9vbHNldD4NCisgIDwvUHJvcGVydHlHcm91cD4NCisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPg0KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+DQorICA8L0ltcG9ydEdyb3VwPg0KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+DQorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4NCisgIDwvSW1wb3J0R3JvdXA+DQorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+DQorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4NCisgIDwvSW1wb3J0R3JvdXA+DQorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPg0KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+DQorICA8L0ltcG9ydEdyb3VwPg0KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+DQorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4NCisgIDwvSW1wb3J0R3JvdXA+DQorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+DQorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4NCisgIDwvSW1wb3J0R3JvdXA+DQorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPg0KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+DQorICA8L0ltcG9ydEdyb3VwPg0KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+DQorICA8UHJvcGVydHlHcm91cD4NCisgICAgPF9Qcm9qZWN0RmlsZVZlcnNpb24+MTAuMC4zMDEyOC4xPC9fUHJvamVjdEZpbGVWZXJzaW9uPg0KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj54ODZcTWluaVppcCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+DQorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPng4NlxNaW5pWmlwJChDb25maWd1cmF0aW9uKVxUbXBcPC9JbnREaXI+DQorICAgIDxMaW5rSW5jcmVtZW50YWwgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4NCisgICAgPEdlbmVyYXRlTWFuaWZlc3QgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPmZhbHNlPC9HZW5lcmF0ZU1hbmlmZXN0Pg0KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPng4NlxNaW5pWmlwJChDb25maWd1cmF0aW9uKVw8L091dERpcj4NCisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj54ODZcTWluaVppcCQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPg0KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+DQorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj54NjRcJChDb25maWd1cmF0aW9uKVw8L091dERpcj4NCisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPng2NFwkKENvbmZpZ3VyYXRpb24pXDwvSW50RGlyPg0KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+dHJ1ZTwvTGlua0luY3JlbWVudGFsPg0KKyAgICA8R2VuZXJhdGVNYW5pZmVzdCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPmZhbHNlPC9HZW5lcmF0ZU1hbmlmZXN0Pg0KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciPmlhNjRcJChDb25maWd1cmF0aW9uKVw8L091dERpcj4NCisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIj5pYTY0XCQoQ29uZmlndXJhdGlvbilcPC9JbnREaXI+DQorICAgIDxMaW5rSW5jcmVtZW50YWwgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+dHJ1ZTwvTGlua0luY3JlbWVudGFsPg0KKyAgICA8R2VuZXJhdGVNYW5pZmVzdCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIj5mYWxzZTwvR2VuZXJhdGVNYW5pZmVzdD4NCisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+eDY0XCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+DQorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPng2NFwkKENvbmZpZ3VyYXRpb24pXDwvSW50RGlyPg0KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5mYWxzZTwvTGlua0luY3JlbWVudGFsPg0KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyI+aWE2NFwkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPg0KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyI+aWE2NFwkKENvbmZpZ3VyYXRpb24pXDwvSW50RGlyPg0KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyI+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4NCisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4NCisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4NCisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4NCisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0Pg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0Pg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0Pg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgLz4NCisgIDwvUHJvcGVydHlHcm91cD4NCisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4NCisgICAgPENsQ29tcGlsZT4NCisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47Li5cLi5cbWluaXppcDslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtaTElCX1dJTkFQSTtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxNaW5pbWFsUmVidWlsZD50cnVlPC9NaW5pbWFsUmVidWlsZD4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkRlZmF1bHQ8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERlYnVnRExMPC9SdW50aW1lTGlicmFyeT4NCisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4NCisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+DQorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4NCisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPg0KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+DQorICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+UHJvZ3JhbURhdGFiYXNlPC9EZWJ1Z0luZm9ybWF0aW9uRm9ybWF0Pg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPExpbms+DQorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+eDg2XFpsaWJEbGxEZWJ1Z1x6bGlid2FwaS5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4NCisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpciltaW5pemlwLmV4ZTwvT3V0cHV0RmlsZT4NCisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4NCisgICAgICA8UHJvZ3JhbURhdGFiYXNlRmlsZT4kKE91dERpciltaW5pemlwLnBkYjwvUHJvZ3JhbURhdGFiYXNlRmlsZT4NCisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4NCisgICAgICA8UmFuZG9taXplZEJhc2VBZGRyZXNzPmZhbHNlPC9SYW5kb21pemVkQmFzZUFkZHJlc3M+DQorICAgICAgPERhdGFFeGVjdXRpb25QcmV2ZW50aW9uPg0KKyAgICAgIDwvRGF0YUV4ZWN1dGlvblByZXZlbnRpb24+DQorICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg4NjwvVGFyZ2V0TWFjaGluZT4NCisgICAgPC9MaW5rPg0KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+DQorICAgIDxDbENvbXBpbGU+DQorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPg0KKyAgICAgIDxPbWl0RnJhbWVQb2ludGVycz50cnVlPC9PbWl0RnJhbWVQb2ludGVycz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtaW5pemlwOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO1pMSUJfV0lOQVBJO05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkRlZmF1bHQ8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+DQorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+DQorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPg0KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4NCisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPg0KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+DQorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4NCisgICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5Qcm9ncmFtRGF0YWJhc2U8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8TGluaz4NCisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz54ODZcWmxpYkRsbFJlbGVhc2VcemxpYndhcGkubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+DQorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpbWluaXppcC5leGU8L091dHB1dEZpbGU+DQorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+DQorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+DQorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+DQorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4NCisgICAgICA8UmFuZG9taXplZEJhc2VBZGRyZXNzPmZhbHNlPC9SYW5kb21pemVkQmFzZUFkZHJlc3M+DQorICAgICAgPERhdGFFeGVjdXRpb25QcmV2ZW50aW9uPg0KKyAgICAgIDwvRGF0YUV4ZWN1dGlvblByZXZlbnRpb24+DQorICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg4NjwvVGFyZ2V0TWFjaGluZT4NCisgICAgPC9MaW5rPg0KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4NCisgICAgPE1pZGw+DQorICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+DQorICAgIDwvTWlkbD4NCisgICAgPENsQ29tcGlsZT4NCisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47Li5cLi5cbWluaXppcDslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtaTElCX1dJTkFQSTtfREVCVUc7X0NPTlNPTEU7V0lONjQ7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxNaW5pbWFsUmVidWlsZD50cnVlPC9NaW5pbWFsUmVidWlsZD4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkRlZmF1bHQ8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERlYnVnRExMPC9SdW50aW1lTGlicmFyeT4NCisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4NCisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+DQorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4NCisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPg0KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+DQorICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+UHJvZ3JhbURhdGFiYXNlPC9EZWJ1Z0luZm9ybWF0aW9uRm9ybWF0Pg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPExpbms+DQorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+eDY0XFpsaWJEbGxEZWJ1Z1x6bGlid2FwaS5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4NCisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpciltaW5pemlwLmV4ZTwvT3V0cHV0RmlsZT4NCisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4NCisgICAgICA8UHJvZ3JhbURhdGFiYXNlRmlsZT4kKE91dERpciltaW5pemlwLnBkYjwvUHJvZ3JhbURhdGFiYXNlRmlsZT4NCisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4NCisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPg0KKyAgICA8L0xpbms+DQorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIj4NCisgICAgPE1pZGw+DQorICAgICAgPFRhcmdldEVudmlyb25tZW50Pkl0YW5pdW08L1RhcmdldEVudmlyb25tZW50Pg0KKyAgICA8L01pZGw+DQorICAgIDxDbENvbXBpbGU+DQorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOy4uXC4uXG1pbml6aXA7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7WkxJQl9XSU5BUEk7X0RFQlVHO19DT05TT0xFO1dJTjY0OyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8TWluaW1hbFJlYnVpbGQ+dHJ1ZTwvTWluaW1hbFJlYnVpbGQ+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5EZWZhdWx0PC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1Z0RMTDwvUnVudGltZUxpYnJhcnk+DQorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+DQorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPg0KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+DQorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4NCisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPg0KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxMaW5rPg0KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmlhNjRcWmxpYkRsbERlYnVnXHpsaWJ3YXBpLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPg0KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKW1pbml6aXAuZXhlPC9PdXRwdXRGaWxlPg0KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPg0KKyAgICAgIDxQcm9ncmFtRGF0YWJhc2VGaWxlPiQoT3V0RGlyKW1pbml6aXAucGRiPC9Qcm9ncmFtRGF0YWJhc2VGaWxlPg0KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPg0KKyAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVJQTY0PC9UYXJnZXRNYWNoaW5lPg0KKyAgICA8L0xpbms+DQorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+DQorICAgIDxNaWRsPg0KKyAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50Pg0KKyAgICA8L01pZGw+DQorICAgIDxDbENvbXBpbGU+DQorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPg0KKyAgICAgIDxPbWl0RnJhbWVQb2ludGVycz50cnVlPC9PbWl0RnJhbWVQb2ludGVycz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtaW5pemlwOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO1pMSUJfV0lOQVBJO05ERUJVRztfQ09OU09MRTtXSU42NDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkRlZmF1bHQ8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERMTDwvUnVudGltZUxpYnJhcnk+DQorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+DQorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPg0KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4NCisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPg0KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+DQorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4NCisgICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5Qcm9ncmFtRGF0YWJhc2U8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8TGluaz4NCisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz54NjRcWmxpYkRsbFJlbGVhc2VcemxpYndhcGkubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+DQorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpbWluaXppcC5leGU8L091dHB1dEZpbGU+DQorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+DQorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+DQorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+DQorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4NCisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPg0KKyAgICA8L0xpbms+DQorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPg0KKyAgICA8TWlkbD4NCisgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+SXRhbml1bTwvVGFyZ2V0RW52aXJvbm1lbnQ+DQorICAgIDwvTWlkbD4NCisgICAgPENsQ29tcGlsZT4NCisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+DQorICAgICAgPE9taXRGcmFtZVBvaW50ZXJzPnRydWU8L09taXRGcmFtZVBvaW50ZXJzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOy4uXC4uXG1pbml6aXA7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7WkxJQl9XSU5BUEk7TkRFQlVHO19DT05TT0xFO1dJTjY0OyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RGVmYXVsdDwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRExMPC9SdW50aW1lTGlicmFyeT4NCisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4NCisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+DQorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPg0KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+DQorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4NCisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPg0KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxMaW5rPg0KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmlhNjRcWmxpYkRsbFJlbGVhc2VcemxpYndhcGkubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+DQorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpbWluaXppcC5leGU8L091dHB1dEZpbGU+DQorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+DQorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+DQorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+DQorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4NCisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lSUE2NDwvVGFyZ2V0TWFjaGluZT4NCisgICAgPC9MaW5rPg0KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KKyAgPEl0ZW1Hcm91cD4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxtaW5pemlwXG1pbml6aXAuYyIgLz4NCisgIDwvSXRlbUdyb3VwPg0KKyAgPEl0ZW1Hcm91cD4NCisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0iemxpYnZjLnZjeHByb2oiPg0KKyAgICAgIDxQcm9qZWN0Pns4ZmQ4MjZmOC0zNzM5LTQ0ZTYtOGNjOC05OTcxMjJlNTNiOGR9PC9Qcm9qZWN0Pg0KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+DQorICA8L0l0ZW1Hcm91cD4NCisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+DQorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPg0KKyAgPC9JbXBvcnRHcm91cD4NCis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvdnN0dWRpby92YzExL3Rlc3R6bGliLnZjeHByb2ogYi9zcmMvY29udHJpYi92c3R1ZGlvL3ZjMTEvdGVzdHpsaWIudmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDU1OTU0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbnRyaWIvdnN0dWRpby92YzExL3Rlc3R6bGliLnZjeHByb2oKQEAgLTAsMCArMSw0MjYgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+DQorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+DQorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPg0KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8SXRhbml1bSI+DQorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+DQorICAgICAgPFBsYXRmb3JtPkl0YW5pdW08L1BsYXRmb3JtPg0KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPg0KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPg0KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+DQorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+DQorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPg0KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPg0KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPg0KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSI+DQorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZVdpdGhvdXRBc208L0NvbmZpZ3VyYXRpb24+DQorICAgICAgPFBsYXRmb3JtPkl0YW5pdW08L1BsYXRmb3JtPg0KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZVdpdGhvdXRBc218V2luMzIiPg0KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2VXaXRob3V0QXNtPC9Db25maWd1cmF0aW9uPg0KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+DQorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+DQorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlV2l0aG91dEFzbXx4NjQiPg0KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2VXaXRob3V0QXNtPC9Db25maWd1cmF0aW9uPg0KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPg0KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxJdGFuaXVtIj4NCisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPg0KKyAgICAgIDxQbGF0Zm9ybT5JdGFuaXVtPC9QbGF0Zm9ybT4NCisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPg0KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+DQorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4NCisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4NCisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPg0KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPg0KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0KKyAgPC9JdGVtR3JvdXA+DQorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+DQorICAgIDxQcm9qZWN0R3VpZD57QUE2NjY2QUEtRTA5Ri00MTM1LTlDMEMtNEZFNTBDM0M2NTRCfTwvUHJvamVjdEd1aWQ+DQorICAgIDxSb290TmFtZXNwYWNlPnRlc3R6bGliPC9Sb290TmFtZXNwYWNlPg0KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+DQorICA8L1Byb3BlcnR5R3JvdXA+DQorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPg0KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPg0KKyAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0Pg0KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4NCisgICAgPFBsYXRmb3JtVG9vbHNldD52MTEwPC9QbGF0Zm9ybVRvb2xzZXQ+DQorICA8L1Byb3BlcnR5R3JvdXA+DQorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPg0KKyAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0Pg0KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4NCisgICAgPFBsYXRmb3JtVG9vbHNldD52MTEwPC9QbGF0Zm9ybVRvb2xzZXQ+DQorICA8L1Byb3BlcnR5R3JvdXA+DQorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPg0KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4NCisgICAgPFBsYXRmb3JtVG9vbHNldD52MTEwPC9QbGF0Zm9ybVRvb2xzZXQ+DQorICA8L1Byb3BlcnR5R3JvdXA+DQorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4NCisgICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4NCisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+DQorICA8L1Byb3BlcnR5R3JvdXA+DQorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0nIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+DQorICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+DQorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPg0KKyAgPC9Qcm9wZXJ0eUdyb3VwPg0KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPg0KKyAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0Pg0KKyAgPC9Qcm9wZXJ0eUdyb3VwPg0KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4NCisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+DQorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djExMDwvUGxhdGZvcm1Ub29sc2V0Pg0KKyAgPC9Qcm9wZXJ0eUdyb3VwPg0KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+DQorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPg0KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxMTA8L1BsYXRmb3JtVG9vbHNldD4NCisgIDwvUHJvcGVydHlHcm91cD4NCisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPg0KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxMTA8L1BsYXRmb3JtVG9vbHNldD4NCisgIDwvUHJvcGVydHlHcm91cD4NCisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPg0KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+DQorICA8L0ltcG9ydEdyb3VwPg0KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+DQorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4NCisgIDwvSW1wb3J0R3JvdXA+DQorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+DQorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4NCisgIDwvSW1wb3J0R3JvdXA+DQorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+DQorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4NCisgIDwvSW1wb3J0R3JvdXA+DQorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPg0KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+DQorICA8L0ltcG9ydEdyb3VwPg0KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+DQorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4NCisgIDwvSW1wb3J0R3JvdXA+DQorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4NCisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPg0KKyAgPC9JbXBvcnRHcm91cD4NCisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4NCisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPg0KKyAgPC9JbXBvcnRHcm91cD4NCisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+DQorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4NCisgIDwvSW1wb3J0R3JvdXA+DQorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPg0KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+DQorICA8L0ltcG9ydEdyb3VwPg0KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+DQorICA8UHJvcGVydHlHcm91cD4NCisgICAgPF9Qcm9qZWN0RmlsZVZlcnNpb24+MTAuMC4zMDEyOC4xPC9fUHJvamVjdEZpbGVWZXJzaW9uPg0KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj54ODZcVGVzdFpsaWIkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPg0KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj54ODZcVGVzdFpsaWIkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4NCisgICAgPExpbmtJbmNyZW1lbnRhbCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+dHJ1ZTwvTGlua0luY3JlbWVudGFsPg0KKyAgICA8R2VuZXJhdGVNYW5pZmVzdCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+ZmFsc2U8L0dlbmVyYXRlTWFuaWZlc3Q+DQorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiciPng4NlxUZXN0WmxpYiQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+DQorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiciPng4NlxUZXN0WmxpYiQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPg0KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218V2luMzInIj5mYWxzZTwvTGlua0luY3JlbWVudGFsPg0KKyAgICA8R2VuZXJhdGVNYW5pZmVzdCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfFdpbjMyJyI+ZmFsc2U8L0dlbmVyYXRlTWFuaWZlc3Q+DQorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+eDg2XFRlc3RabGliJChDb25maWd1cmF0aW9uKVw8L091dERpcj4NCisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj54ODZcVGVzdFpsaWIkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4NCisgICAgPExpbmtJbmNyZW1lbnRhbCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj5mYWxzZTwvTGlua0luY3JlbWVudGFsPg0KKyAgICA8R2VuZXJhdGVNYW5pZmVzdCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj5mYWxzZTwvR2VuZXJhdGVNYW5pZmVzdD4NCisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPng2NFxUZXN0WmxpYiQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+DQorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj54NjRcVGVzdFpsaWIkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4NCisgICAgPEdlbmVyYXRlTWFuaWZlc3QgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5mYWxzZTwvR2VuZXJhdGVNYW5pZmVzdD4NCisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIj5pYTY0XFRlc3RabGliJChDb25maWd1cmF0aW9uKVw8L091dERpcj4NCisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIj5pYTY0XFRlc3RabGliJChDb25maWd1cmF0aW9uKVxUbXBcPC9JbnREaXI+DQorICAgIDxMaW5rSW5jcmVtZW50YWwgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+dHJ1ZTwvTGlua0luY3JlbWVudGFsPg0KKyAgICA8R2VuZXJhdGVNYW5pZmVzdCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIj5mYWxzZTwvR2VuZXJhdGVNYW5pZmVzdD4NCisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfHg2NCciPng2NFxUZXN0WmxpYiQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+DQorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXx4NjQnIj54NjRcVGVzdFpsaWIkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4NCisgICAgPEdlbmVyYXRlTWFuaWZlc3QgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXx4NjQnIj5mYWxzZTwvR2VuZXJhdGVNYW5pZmVzdD4NCisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0nIj5pYTY0XFRlc3RabGliJChDb25maWd1cmF0aW9uKVw8L091dERpcj4NCisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0nIj5pYTY0XFRlc3RabGliJChDb25maWd1cmF0aW9uKVxUbXBcPC9JbnREaXI+DQorICAgIDxMaW5rSW5jcmVtZW50YWwgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtJyI+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4NCisgICAgPEdlbmVyYXRlTWFuaWZlc3QgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtJyI+ZmFsc2U8L0dlbmVyYXRlTWFuaWZlc3Q+DQorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPng2NFxUZXN0WmxpYiQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+DQorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPng2NFxUZXN0WmxpYiQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPg0KKyAgICA8R2VuZXJhdGVNYW5pZmVzdCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+ZmFsc2U8L0dlbmVyYXRlTWFuaWZlc3Q+DQorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIj5pYTY0XFRlc3RabGliJChDb25maWd1cmF0aW9uKVw8L091dERpcj4NCisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPmlhNjRcVGVzdFpsaWIkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4NCisgICAgPExpbmtJbmNyZW1lbnRhbCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+DQorICAgIDxHZW5lcmF0ZU1hbmlmZXN0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyI+ZmFsc2U8L0dlbmVyYXRlTWFuaWZlc3Q+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0nIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtJyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfFdpbjMyJyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218V2luMzInIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfHg2NCciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfHg2NCciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4NCisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4NCisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4NCisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIC8+DQorICA8L1Byb3BlcnR5R3JvdXA+DQorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+DQorICAgIDxDbENvbXBpbGU+DQorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPkFTTVY7QVNNSU5GO1dJTjMyO1pMSUJfV0lOQVBJO19ERUJVRztfQ09OU09MRTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fV0FSTklOR1M7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxNaW5pbWFsUmVidWlsZD50cnVlPC9NaW5pbWFsUmVidWlsZD4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkRlZmF1bHQ8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERlYnVnRExMPC9SdW50aW1lTGlicmFyeT4NCisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4NCisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+DQorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4NCisgICAgICA8QXNzZW1ibGVyT3V0cHV0PkFzc2VtYmx5QW5kU291cmNlQ29kZTwvQXNzZW1ibGVyT3V0cHV0Pg0KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+DQorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4NCisgICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5Qcm9ncmFtRGF0YWJhc2U8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8TGluaz4NCisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4uLlwuLlxtYXNteDg2XG1hdGNoNjg2Lm9iajsuLlwuLlxtYXNteDg2XGluZmZhczMyLm9iajslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPg0KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKXRlc3R6bGliLmV4ZTwvT3V0cHV0RmlsZT4NCisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4NCisgICAgICA8UHJvZ3JhbURhdGFiYXNlRmlsZT4kKE91dERpcil0ZXN0emxpYi5wZGI8L1Byb2dyYW1EYXRhYmFzZUZpbGU+DQorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+DQorICAgICAgPFJhbmRvbWl6ZWRCYXNlQWRkcmVzcz5mYWxzZTwvUmFuZG9taXplZEJhc2VBZGRyZXNzPg0KKyAgICAgIDxEYXRhRXhlY3V0aW9uUHJldmVudGlvbj4NCisgICAgICA8L0RhdGFFeGVjdXRpb25QcmV2ZW50aW9uPg0KKyAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVYODY8L1RhcmdldE1hY2hpbmU+DQorICAgIDwvTGluaz4NCisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4NCisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218V2luMzInIj4NCisgICAgPENsQ29tcGlsZT4NCisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+DQorICAgICAgPE9taXRGcmFtZVBvaW50ZXJzPnRydWU8L09taXRGcmFtZVBvaW50ZXJzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO1pMSUJfV0lOQVBJO05ERUJVRztfQ09OU09MRTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fV0FSTklOR1M7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5EZWZhdWx0PC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5Pg0KKyAgICAgIDxCdWZmZXJTZWN1cml0eUNoZWNrPmZhbHNlPC9CdWZmZXJTZWN1cml0eUNoZWNrPg0KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4NCisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+DQorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4NCisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPg0KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+DQorICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+UHJvZ3JhbURhdGFiYXNlPC9EZWJ1Z0luZm9ybWF0aW9uRm9ybWF0Pg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPExpbms+DQorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpdGVzdHpsaWIuZXhlPC9PdXRwdXRGaWxlPg0KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPg0KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPg0KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPg0KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+DQorICAgICAgPFJhbmRvbWl6ZWRCYXNlQWRkcmVzcz5mYWxzZTwvUmFuZG9taXplZEJhc2VBZGRyZXNzPg0KKyAgICAgIDxEYXRhRXhlY3V0aW9uUHJldmVudGlvbj4NCisgICAgICA8L0RhdGFFeGVjdXRpb25QcmV2ZW50aW9uPg0KKyAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVYODY8L1RhcmdldE1hY2hpbmU+DQorICAgIDwvTGluaz4NCisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4NCisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPg0KKyAgICA8Q2xDb21waWxlPg0KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4NCisgICAgICA8T21pdEZyYW1lUG9pbnRlcnM+dHJ1ZTwvT21pdEZyYW1lUG9pbnRlcnM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+QVNNVjtBU01JTkY7V0lOMzI7WkxJQl9XSU5BUEk7TkRFQlVHO19DT05TT0xFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19XQVJOSU5HUzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkRlZmF1bHQ8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+DQorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+DQorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPg0KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4NCisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPg0KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+DQorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4NCisgICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5Qcm9ncmFtRGF0YWJhc2U8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8TGluaz4NCisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4uLlwuLlxtYXNteDg2XG1hdGNoNjg2Lm9iajsuLlwuLlxtYXNteDg2XGluZmZhczMyLm9iajslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPg0KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKXRlc3R6bGliLmV4ZTwvT3V0cHV0RmlsZT4NCisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4NCisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4NCisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4NCisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPg0KKyAgICAgIDxSYW5kb21pemVkQmFzZUFkZHJlc3M+ZmFsc2U8L1JhbmRvbWl6ZWRCYXNlQWRkcmVzcz4NCisgICAgICA8RGF0YUV4ZWN1dGlvblByZXZlbnRpb24+DQorICAgICAgPC9EYXRhRXhlY3V0aW9uUHJldmVudGlvbj4NCisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDg2PC9UYXJnZXRNYWNoaW5lPg0KKyAgICA8L0xpbms+DQorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPg0KKyAgICA8Q2xDb21waWxlPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPkFTTVY7QVNNSU5GO1dJTjMyO1pMSUJfV0lOQVBJO19ERUJVRztfQ09OU09MRTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fV0FSTklOR1M7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RGVmYXVsdDwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWdETEw8L1J1bnRpbWVMaWJyYXJ5Pg0KKyAgICAgIDxCdWZmZXJTZWN1cml0eUNoZWNrPmZhbHNlPC9CdWZmZXJTZWN1cml0eUNoZWNrPg0KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8TGluaz4NCisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4uLlwuLlxtYXNteDY0XGd2bWF0NjQub2JqOy4uXC4uXG1hc214NjRcaW5mZmFzeDY0Lm9iajslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPg0KKyAgICA8L0xpbms+DQorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIj4NCisgICAgPE1pZGw+DQorICAgICAgPFRhcmdldEVudmlyb25tZW50Pkl0YW5pdW08L1RhcmdldEVudmlyb25tZW50Pg0KKyAgICA8L01pZGw+DQorICAgIDxDbENvbXBpbGU+DQorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPlpMSUJfV0lOQVBJO19ERUJVRztfQ09OU09MRTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fV0FSTklOR1M7V0lONjQ7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxNaW5pbWFsUmVidWlsZD50cnVlPC9NaW5pbWFsUmVidWlsZD4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkRlZmF1bHQ8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERlYnVnRExMPC9SdW50aW1lTGlicmFyeT4NCisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4NCisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+DQorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4NCisgICAgICA8QXNzZW1ibGVyT3V0cHV0PkFzc2VtYmx5QW5kU291cmNlQ29kZTwvQXNzZW1ibGVyT3V0cHV0Pg0KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+DQorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4NCisgICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5Qcm9ncmFtRGF0YWJhc2U8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8TGluaz4NCisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpcil0ZXN0emxpYi5leGU8L091dHB1dEZpbGU+DQorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+DQorICAgICAgPFByb2dyYW1EYXRhYmFzZUZpbGU+JChPdXREaXIpdGVzdHpsaWIucGRiPC9Qcm9ncmFtRGF0YWJhc2VGaWxlPg0KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPg0KKyAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVJQTY0PC9UYXJnZXRNYWNoaW5lPg0KKyAgICA8L0xpbms+DQorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfHg2NCciPg0KKyAgICA8Q2xDb21waWxlPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO1pMSUJfV0lOQVBJO05ERUJVRztfQ09OU09MRTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fV0FSTklOR1M7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RGVmYXVsdDwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRExMPC9SdW50aW1lTGlicmFyeT4NCisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4NCisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPExpbms+DQorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4NCisgICAgPC9MaW5rPg0KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtJyI+DQorICAgIDxNaWRsPg0KKyAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5JdGFuaXVtPC9UYXJnZXRFbnZpcm9ubWVudD4NCisgICAgPC9NaWRsPg0KKyAgICA8Q2xDb21waWxlPg0KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4NCisgICAgICA8T21pdEZyYW1lUG9pbnRlcnM+dHJ1ZTwvT21pdEZyYW1lUG9pbnRlcnM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+WkxJQl9XSU5BUEk7TkRFQlVHO19DT05TT0xFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19XQVJOSU5HUztXSU42NDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkRlZmF1bHQ8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERMTDwvUnVudGltZUxpYnJhcnk+DQorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+DQorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPg0KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4NCisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPg0KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+DQorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4NCisgICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5Qcm9ncmFtRGF0YWJhc2U8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8TGluaz4NCisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpcil0ZXN0emxpYi5leGU8L091dHB1dEZpbGU+DQorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+DQorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+DQorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+DQorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4NCisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lSUE2NDwvVGFyZ2V0TWFjaGluZT4NCisgICAgPC9MaW5rPg0KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPg0KKyAgICA8Q2xDb21waWxlPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPkFTTVY7QVNNSU5GO1dJTjMyO1pMSUJfV0lOQVBJO05ERUJVRztfQ09OU09MRTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fV0FSTklOR1M7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RGVmYXVsdDwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRExMPC9SdW50aW1lTGlicmFyeT4NCisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4NCisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPExpbms+DQorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Li5cLi5cbWFzbXg2NFxndm1hdDY0Lm9iajsuLlwuLlxtYXNteDY0XGluZmZhc3g2NC5vYmo7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4NCisgICAgPC9MaW5rPg0KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIj4NCisgICAgPE1pZGw+DQorICAgICAgPFRhcmdldEVudmlyb25tZW50Pkl0YW5pdW08L1RhcmdldEVudmlyb25tZW50Pg0KKyAgICA8L01pZGw+DQorICAgIDxDbENvbXBpbGU+DQorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPg0KKyAgICAgIDxPbWl0RnJhbWVQb2ludGVycz50cnVlPC9PbWl0RnJhbWVQb2ludGVycz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5aTElCX1dJTkFQSTtOREVCVUc7X0NPTlNPTEU7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX1dBUk5JTkdTO1dJTjY0OyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RGVmYXVsdDwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRExMPC9SdW50aW1lTGlicmFyeT4NCisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4NCisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+DQorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPg0KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+DQorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4NCisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPg0KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxMaW5rPg0KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKXRlc3R6bGliLmV4ZTwvT3V0cHV0RmlsZT4NCisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4NCisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4NCisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4NCisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPg0KKyAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVJQTY0PC9UYXJnZXRNYWNoaW5lPg0KKyAgICA8L0xpbms+DQorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQorICA8SXRlbUdyb3VwPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXGFkbGVyMzIuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxjb21wcmVzcy5jIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXGNyYzMyLmMiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cZGVmbGF0ZS5jIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXGluZmJhY2suYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxtYXNteDY0XGluZmZhczg2NjQuYyI+DQorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPg0KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+DQorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPg0KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+DQorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+DQorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxpbmZmYXN0LmMiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5caW5mbGF0ZS5jIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXGluZnRyZWVzLmMiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGVzdHpsaWJcdGVzdHpsaWIuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlx0cmVlcy5jIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHVuY29tcHIuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlx6dXRpbC5jIiAvPg0KKyAgPC9JdGVtR3JvdXA+DQorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPg0KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4NCisgIDwvSW1wb3J0R3JvdXA+DQorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxMS90ZXN0emxpYmRsbC52Y3hwcm9qIGIvc3JjL2NvbnRyaWIvdnN0dWRpby92YzExL3Rlc3R6bGliZGxsLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYyMGM3OAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxMS90ZXN0emxpYmRsbC52Y3hwcm9qCkBAIC0wLDAgKzEsMzE0IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPg0KKyAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4NCisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfEl0YW5pdW0iPg0KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPg0KKyAgICAgIDxQbGF0Zm9ybT5JdGFuaXVtPC9QbGF0Zm9ybT4NCisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4NCisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4NCisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPg0KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4NCisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4NCisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4NCisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8SXRhbml1bSI+DQorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4NCisgICAgICA8UGxhdGZvcm0+SXRhbml1bTwvUGxhdGZvcm0+DQorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+DQorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4NCisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPg0KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+DQorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+DQorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+DQorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4NCisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4NCisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCisgIDwvSXRlbUdyb3VwPg0KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPg0KKyAgICA8UHJvamVjdEd1aWQ+e0M1MkY5RTdCLTQ5OEEtNDJCRS04REI0LTg1QTE1Njk0MzY2QX08L1Byb2plY3RHdWlkPg0KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+DQorICA8L1Byb3BlcnR5R3JvdXA+DQorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPg0KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPg0KKyAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0Pg0KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxMTA8L1BsYXRmb3JtVG9vbHNldD4NCisgIDwvUHJvcGVydHlHcm91cD4NCisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+DQorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0Pg0KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxMTA8L1BsYXRmb3JtVG9vbHNldD4NCisgIDwvUHJvcGVydHlHcm91cD4NCisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPg0KKyAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0Pg0KKyAgPC9Qcm9wZXJ0eUdyb3VwPg0KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPg0KKyAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0Pg0KKyAgPC9Qcm9wZXJ0eUdyb3VwPg0KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4NCisgICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4NCisgICAgPFBsYXRmb3JtVG9vbHNldD52MTEwPC9QbGF0Zm9ybVRvb2xzZXQ+DQorICA8L1Byb3BlcnR5R3JvdXA+DQorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4NCisgICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4NCisgICAgPFBsYXRmb3JtVG9vbHNldD52MTEwPC9QbGF0Zm9ybVRvb2xzZXQ+DQorICA8L1Byb3BlcnR5R3JvdXA+DQorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4NCisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPg0KKyAgPC9JbXBvcnRHcm91cD4NCisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPg0KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+DQorICA8L0ltcG9ydEdyb3VwPg0KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPg0KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+DQorICA8L0ltcG9ydEdyb3VwPg0KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4NCisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPg0KKyAgPC9JbXBvcnRHcm91cD4NCisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPg0KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+DQorICA8L0ltcG9ydEdyb3VwPg0KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPg0KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+DQorICA8L0ltcG9ydEdyb3VwPg0KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4NCisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPg0KKyAgPC9JbXBvcnRHcm91cD4NCisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPg0KKyAgPFByb3BlcnR5R3JvdXA+DQorICAgIDxfUHJvamVjdEZpbGVWZXJzaW9uPjEwLjAuMzAxMjguMTwvX1Byb2plY3RGaWxlVmVyc2lvbj4NCisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+eDg2XFRlc3RabGliRGxsJChDb25maWd1cmF0aW9uKVw8L091dERpcj4NCisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+eDg2XFRlc3RabGliRGxsJChDb25maWd1cmF0aW9uKVxUbXBcPC9JbnREaXI+DQorICAgIDxMaW5rSW5jcmVtZW50YWwgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4NCisgICAgPEdlbmVyYXRlTWFuaWZlc3QgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPmZhbHNlPC9HZW5lcmF0ZU1hbmlmZXN0Pg0KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPng4NlxUZXN0WmxpYkRsbCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+DQorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+eDg2XFRlc3RabGliRGxsJChDb25maWd1cmF0aW9uKVxUbXBcPC9JbnREaXI+DQorICAgIDxMaW5rSW5jcmVtZW50YWwgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4NCisgICAgPEdlbmVyYXRlTWFuaWZlc3QgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+ZmFsc2U8L0dlbmVyYXRlTWFuaWZlc3Q+DQorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj54NjRcVGVzdFpsaWJEbGwkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPg0KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+eDY0XFRlc3RabGliRGxsJChDb25maWd1cmF0aW9uKVxUbXBcPC9JbnREaXI+DQorICAgIDxMaW5rSW5jcmVtZW50YWwgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj50cnVlPC9MaW5rSW5jcmVtZW50YWw+DQorICAgIDxHZW5lcmF0ZU1hbmlmZXN0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+ZmFsc2U8L0dlbmVyYXRlTWFuaWZlc3Q+DQorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+aWE2NFxUZXN0WmxpYkRsbCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+DQorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+aWE2NFxUZXN0WmxpYkRsbCQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPg0KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4NCisgICAgPEdlbmVyYXRlTWFuaWZlc3QgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+ZmFsc2U8L0dlbmVyYXRlTWFuaWZlc3Q+DQorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPng2NFxUZXN0WmxpYkRsbCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+DQorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPng2NFxUZXN0WmxpYkRsbCQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPg0KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5mYWxzZTwvTGlua0luY3JlbWVudGFsPg0KKyAgICA8R2VuZXJhdGVNYW5pZmVzdCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+ZmFsc2U8L0dlbmVyYXRlTWFuaWZlc3Q+DQorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIj5pYTY0XFRlc3RabGliRGxsJChDb25maWd1cmF0aW9uKVw8L091dERpcj4NCisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPmlhNjRcVGVzdFpsaWJEbGwkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4NCisgICAgPExpbmtJbmNyZW1lbnRhbCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+DQorICAgIDxHZW5lcmF0ZU1hbmlmZXN0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyI+ZmFsc2U8L0dlbmVyYXRlTWFuaWZlc3Q+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4NCisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4NCisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4NCisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIC8+DQorICA8L1Byb3BlcnR5R3JvdXA+DQorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+DQorICAgIDxDbENvbXBpbGU+DQorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOy4uXC4uXG1pbml6aXA7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7WkxJQl9XSU5BUEk7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8TWluaW1hbFJlYnVpbGQ+dHJ1ZTwvTWluaW1hbFJlYnVpbGQ+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5EZWZhdWx0PC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1Z0RMTDwvUnVudGltZUxpYnJhcnk+DQorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+DQorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPg0KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+DQorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4NCisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPg0KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxMaW5rPg0KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPng4NlxabGliRGxsRGVidWdcemxpYndhcGkubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+DQorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpdGVzdHpsaWJkbGwuZXhlPC9PdXRwdXRGaWxlPg0KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPg0KKyAgICAgIDxQcm9ncmFtRGF0YWJhc2VGaWxlPiQoT3V0RGlyKXRlc3R6bGliLnBkYjwvUHJvZ3JhbURhdGFiYXNlRmlsZT4NCisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4NCisgICAgICA8UmFuZG9taXplZEJhc2VBZGRyZXNzPmZhbHNlPC9SYW5kb21pemVkQmFzZUFkZHJlc3M+DQorICAgICAgPERhdGFFeGVjdXRpb25QcmV2ZW50aW9uPg0KKyAgICAgIDwvRGF0YUV4ZWN1dGlvblByZXZlbnRpb24+DQorICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg4NjwvVGFyZ2V0TWFjaGluZT4NCisgICAgPC9MaW5rPg0KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+DQorICAgIDxDbENvbXBpbGU+DQorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPg0KKyAgICAgIDxPbWl0RnJhbWVQb2ludGVycz50cnVlPC9PbWl0RnJhbWVQb2ludGVycz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtaW5pemlwOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO1pMSUJfV0lOQVBJO05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkRlZmF1bHQ8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+DQorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+DQorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPg0KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4NCisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPg0KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+DQorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4NCisgICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5Qcm9ncmFtRGF0YWJhc2U8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8TGluaz4NCisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz54ODZcWmxpYkRsbFJlbGVhc2VcemxpYndhcGkubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+DQorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpdGVzdHpsaWJkbGwuZXhlPC9PdXRwdXRGaWxlPg0KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPg0KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPg0KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPg0KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+DQorICAgICAgPFJhbmRvbWl6ZWRCYXNlQWRkcmVzcz5mYWxzZTwvUmFuZG9taXplZEJhc2VBZGRyZXNzPg0KKyAgICAgIDxEYXRhRXhlY3V0aW9uUHJldmVudGlvbj4NCisgICAgICA8L0RhdGFFeGVjdXRpb25QcmV2ZW50aW9uPg0KKyAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVYODY8L1RhcmdldE1hY2hpbmU+DQorICAgIDwvTGluaz4NCisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4NCisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+DQorICAgIDxNaWRsPg0KKyAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50Pg0KKyAgICA8L01pZGw+DQorICAgIDxDbENvbXBpbGU+DQorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOy4uXC4uXG1pbml6aXA7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7WkxJQl9XSU5BUEk7X0RFQlVHO19DT05TT0xFO1dJTjY0OyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8TWluaW1hbFJlYnVpbGQ+dHJ1ZTwvTWluaW1hbFJlYnVpbGQ+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5EZWZhdWx0PC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1Z0RMTDwvUnVudGltZUxpYnJhcnk+DQorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+DQorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPg0KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+DQorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4NCisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPg0KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxMaW5rPg0KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPng2NFxabGliRGxsRGVidWdcemxpYndhcGkubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+DQorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpdGVzdHpsaWJkbGwuZXhlPC9PdXRwdXRGaWxlPg0KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPg0KKyAgICAgIDxQcm9ncmFtRGF0YWJhc2VGaWxlPiQoT3V0RGlyKXRlc3R6bGliLnBkYjwvUHJvZ3JhbURhdGFiYXNlRmlsZT4NCisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4NCisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPg0KKyAgICA8L0xpbms+DQorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIj4NCisgICAgPE1pZGw+DQorICAgICAgPFRhcmdldEVudmlyb25tZW50Pkl0YW5pdW08L1RhcmdldEVudmlyb25tZW50Pg0KKyAgICA8L01pZGw+DQorICAgIDxDbENvbXBpbGU+DQorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOy4uXC4uXG1pbml6aXA7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7WkxJQl9XSU5BUEk7X0RFQlVHO19DT05TT0xFO1dJTjY0OyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8TWluaW1hbFJlYnVpbGQ+dHJ1ZTwvTWluaW1hbFJlYnVpbGQ+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5EZWZhdWx0PC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1Z0RMTDwvUnVudGltZUxpYnJhcnk+DQorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+DQorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPg0KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+DQorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4NCisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPg0KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxMaW5rPg0KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmlhNjRcWmxpYkRsbERlYnVnXHpsaWJ3YXBpLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPg0KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKXRlc3R6bGliZGxsLmV4ZTwvT3V0cHV0RmlsZT4NCisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4NCisgICAgICA8UHJvZ3JhbURhdGFiYXNlRmlsZT4kKE91dERpcil0ZXN0emxpYi5wZGI8L1Byb2dyYW1EYXRhYmFzZUZpbGU+DQorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+DQorICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZUlBNjQ8L1RhcmdldE1hY2hpbmU+DQorICAgIDwvTGluaz4NCisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4NCisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4NCisgICAgPE1pZGw+DQorICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+DQorICAgIDwvTWlkbD4NCisgICAgPENsQ29tcGlsZT4NCisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+DQorICAgICAgPE9taXRGcmFtZVBvaW50ZXJzPnRydWU8L09taXRGcmFtZVBvaW50ZXJzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOy4uXC4uXG1pbml6aXA7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7WkxJQl9XSU5BUEk7TkRFQlVHO19DT05TT0xFO1dJTjY0OyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RGVmYXVsdDwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRExMPC9SdW50aW1lTGlicmFyeT4NCisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4NCisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+DQorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPg0KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+DQorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4NCisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPg0KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxMaW5rPg0KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPng2NFxabGliRGxsUmVsZWFzZVx6bGlid2FwaS5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4NCisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpcil0ZXN0emxpYmRsbC5leGU8L091dHB1dEZpbGU+DQorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+DQorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+DQorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+DQorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4NCisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPg0KKyAgICA8L0xpbms+DQorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPg0KKyAgICA8TWlkbD4NCisgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+SXRhbml1bTwvVGFyZ2V0RW52aXJvbm1lbnQ+DQorICAgIDwvTWlkbD4NCisgICAgPENsQ29tcGlsZT4NCisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+DQorICAgICAgPE9taXRGcmFtZVBvaW50ZXJzPnRydWU8L09taXRGcmFtZVBvaW50ZXJzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOy4uXC4uXG1pbml6aXA7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7WkxJQl9XSU5BUEk7TkRFQlVHO19DT05TT0xFO1dJTjY0OyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RGVmYXVsdDwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRExMPC9SdW50aW1lTGlicmFyeT4NCisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4NCisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+DQorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPg0KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+DQorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4NCisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPg0KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxMaW5rPg0KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmlhNjRcWmxpYkRsbFJlbGVhc2VcemxpYndhcGkubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+DQorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpdGVzdHpsaWJkbGwuZXhlPC9PdXRwdXRGaWxlPg0KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPg0KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPg0KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPg0KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+DQorICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZUlBNjQ8L1RhcmdldE1hY2hpbmU+DQorICAgIDwvTGluaz4NCisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4NCisgIDxJdGVtR3JvdXA+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGVzdHpsaWJcdGVzdHpsaWIuYyIgLz4NCisgIDwvSXRlbUdyb3VwPg0KKyAgPEl0ZW1Hcm91cD4NCisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0iemxpYnZjLnZjeHByb2oiPg0KKyAgICAgIDxQcm9qZWN0Pns4ZmQ4MjZmOC0zNzM5LTQ0ZTYtOGNjOC05OTcxMjJlNTNiOGR9PC9Qcm9qZWN0Pg0KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+DQorICA8L0l0ZW1Hcm91cD4NCisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+DQorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPg0KKyAgPC9JbXBvcnRHcm91cD4NCis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvdnN0dWRpby92YzExL3psaWIucmMgYi9zcmMvY29udHJpYi92c3R1ZGlvL3ZjMTEvemxpYi5yYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWQyNWYxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbnRyaWIvdnN0dWRpby92YzExL3psaWIucmMKQEAgLTAsMCArMSwzMiBAQAorI2luY2x1ZGUgPHdpbmRvd3MuaD4NCisNCisjZGVmaW5lIElEUl9WRVJTSU9OMSAgMQ0KK0lEUl9WRVJTSU9OMQlWRVJTSU9OSU5GTwlNT1ZFQUJMRSBJTVBVUkUgTE9BRE9OQ0FMTCBESVNDQVJEQUJMRQ0KKyAgRklMRVZFUlNJT04JIDEsIDIsIDEyLCAwDQorICBQUk9EVUNUVkVSU0lPTiAxLCAyLCAxMiwgMA0KKyAgRklMRUZMQUdTTUFTSwlWU19GRklfRklMRUZMQUdTTUFTSw0KKyAgRklMRUZMQUdTCTANCisgIEZJTEVPUwlWT1NfRE9TX1dJTkRPV1MzMg0KKyAgRklMRVRZUEUJVkZUX0RMTA0KKyAgRklMRVNVQlRZUEUJMAkvLyBub3QgdXNlZA0KK0JFR0lODQorICBCTE9DSyAiU3RyaW5nRmlsZUluZm8iDQorICBCRUdJTg0KKyAgICBCTE9DSyAiMDQwOTA0RTQiDQorICAgIC8vbGFuZ3VhZ2UgSUQgPSBVLlMuIEVuZ2xpc2gsIGNoYXIgc2V0ID0gV2luZG93cywgTXVsdGlsaW5ndWFsDQorDQorICAgIEJFR0lODQorICAgICAgVkFMVUUgIkZpbGVEZXNjcmlwdGlvbiIsICJ6bGliIGRhdGEgY29tcHJlc3Npb24gYW5kIFpJUCBmaWxlIEkvTyBsaWJyYXJ5XDAiDQorICAgICAgVkFMVUUgIkZpbGVWZXJzaW9uIiwJIjEuMi4xMlwwIg0KKyAgICAgIFZBTFVFICJJbnRlcm5hbE5hbWUiLAkiemxpYlwwIg0KKyAgICAgIFZBTFVFICJPcmlnaW5hbEZpbGVuYW1lIiwJInpsaWJ3YXBpLmRsbFwwIg0KKyAgICAgIFZBTFVFICJQcm9kdWN0TmFtZSIsCSJaTGliLkRMTFwwIg0KKyAgICAgIFZBTFVFICJDb21tZW50cyIsIkRMTCBzdXBwb3J0IGJ5IEFsZXNzYW5kcm8gSWFjb3BldHRpICYgR2lsbGVzIFZvbGxhbnRcMCINCisgICAgICBWQUxVRSAiTGVnYWxDb3B5cmlnaHQiLCAiKEMpIDE5OTUtMjAyMiBKZWFuLWxvdXAgR2FpbGx5ICYgTWFyayBBZGxlclwwIg0KKyAgICBFTkQNCisgIEVORA0KKyAgQkxPQ0sgIlZhckZpbGVJbmZvIg0KKyAgQkVHSU4NCisgICAgVkFMVUUgIlRyYW5zbGF0aW9uIiwgMHgwNDA5LCAxMjUyDQorICBFTkQNCitFTkQNCmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi92c3R1ZGlvL3ZjMTEvemxpYnN0YXQudmN4cHJvaiBiL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxMS96bGlic3RhdC52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNmI3NmEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29udHJpYi92c3R1ZGlvL3ZjMTEvemxpYnN0YXQudmN4cHJvagpAQCAtMCwwICsxLDQ2NCBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4NCisgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+DQorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xJdGFuaXVtIj4NCisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4NCisgICAgICA8UGxhdGZvcm0+SXRhbml1bTwvUGxhdGZvcm0+DQorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+DQorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+DQorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+DQorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4NCisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+DQorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+DQorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+DQorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+DQorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtIj4NCisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlV2l0aG91dEFzbTwvQ29uZmlndXJhdGlvbj4NCisgICAgICA8UGxhdGZvcm0+SXRhbml1bTwvUGxhdGZvcm0+DQorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+DQorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiI+DQorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZVdpdGhvdXRBc208L0NvbmZpZ3VyYXRpb24+DQorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4NCisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2VXaXRob3V0QXNtfHg2NCI+DQorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZVdpdGhvdXRBc208L0NvbmZpZ3VyYXRpb24+DQorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+DQorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+DQorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfEl0YW5pdW0iPg0KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+DQorICAgICAgPFBsYXRmb3JtPkl0YW5pdW08L1BsYXRmb3JtPg0KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+DQorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4NCisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPg0KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPg0KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+DQorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+DQorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+DQorICA8L0l0ZW1Hcm91cD4NCisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4NCisgICAgPFByb2plY3RHdWlkPns3NDVERUM1OC1FQkIzLTQ3QTktQTlCOC00QzY2MjdDMDFCRjh9PC9Qcm9qZWN0R3VpZD4NCisgIDwvUHJvcGVydHlHcm91cD4NCisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+DQorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+U3RhdGljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+DQorICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+DQorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djExMDwvUGxhdGZvcm1Ub29sc2V0Pg0KKyAgPC9Qcm9wZXJ0eUdyb3VwPg0KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+U3RhdGljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+DQorICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+DQorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djExMDwvUGxhdGZvcm1Ub29sc2V0Pg0KKyAgPC9Qcm9wZXJ0eUdyb3VwPg0KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCisgICAgPENvbmZpZ3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPg0KKyAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPg0KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxMTA8L1BsYXRmb3JtVG9vbHNldD4NCisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+DQorICA8L1Byb3BlcnR5R3JvdXA+DQorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0nIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQorICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4NCisgICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4NCisgIDwvUHJvcGVydHlHcm91cD4NCisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+U3RhdGljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+DQorICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+DQorICA8L1Byb3BlcnR5R3JvdXA+DQorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQorICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4NCisgICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4NCisgIDwvUHJvcGVydHlHcm91cD4NCisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+U3RhdGljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+DQorICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+DQorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djExMDwvUGxhdGZvcm1Ub29sc2V0Pg0KKyAgPC9Qcm9wZXJ0eUdyb3VwPg0KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCisgICAgPENvbmZpZ3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPg0KKyAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPg0KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxMTA8L1BsYXRmb3JtVG9vbHNldD4NCisgIDwvUHJvcGVydHlHcm91cD4NCisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+U3RhdGljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+DQorICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+DQorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djExMDwvUGxhdGZvcm1Ub29sc2V0Pg0KKyAgPC9Qcm9wZXJ0eUdyb3VwPg0KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+DQorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4NCisgIDwvSW1wb3J0R3JvdXA+DQorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+DQorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4NCisgIDwvSW1wb3J0R3JvdXA+DQorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4NCisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPg0KKyAgPC9JbXBvcnRHcm91cD4NCisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4NCisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPg0KKyAgPC9JbXBvcnRHcm91cD4NCisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0nIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPg0KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+DQorICA8L0ltcG9ydEdyb3VwPg0KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4NCisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPg0KKyAgPC9JbXBvcnRHcm91cD4NCisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPg0KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+DQorICA8L0ltcG9ydEdyb3VwPg0KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4NCisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPg0KKyAgPC9JbXBvcnRHcm91cD4NCisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4NCisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPg0KKyAgPC9JbXBvcnRHcm91cD4NCisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+DQorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4NCisgIDwvSW1wb3J0R3JvdXA+DQorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4NCisgIDxQcm9wZXJ0eUdyb3VwPg0KKyAgICA8X1Byb2plY3RGaWxlVmVyc2lvbj4xMC4wLjMwMTI4LjE8L19Qcm9qZWN0RmlsZVZlcnNpb24+DQorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPng4NlxabGliU3RhdCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+DQorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPng4NlxabGliU3RhdCQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPg0KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPng4NlxabGliU3RhdCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+DQorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+eDg2XFpsaWJTdGF0JChDb25maWd1cmF0aW9uKVxUbXBcPC9JbnREaXI+DQorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiciPng4NlxabGliU3RhdCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+DQorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiciPng4NlxabGliU3RhdCQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPg0KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+eDY0XFpsaWJTdGF0JChDb25maWd1cmF0aW9uKVw8L091dERpcj4NCisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPng2NFxabGliU3RhdCQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPg0KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciPmlhNjRcWmxpYlN0YXQkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPg0KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciPmlhNjRcWmxpYlN0YXQkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4NCisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+eDY0XFpsaWJTdGF0JChDb25maWd1cmF0aW9uKVw8L091dERpcj4NCisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+eDY0XFpsaWJTdGF0JChDb25maWd1cmF0aW9uKVxUbXBcPC9JbnREaXI+DQorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIj5pYTY0XFpsaWJTdGF0JChDb25maWd1cmF0aW9uKVw8L091dERpcj4NCisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPmlhNjRcWmxpYlN0YXQkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4NCisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfHg2NCciPng2NFxabGliU3RhdCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+DQorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXx4NjQnIj54NjRcWmxpYlN0YXQkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4NCisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0nIj5pYTY0XFpsaWJTdGF0JChDb25maWd1cmF0aW9uKVw8L091dERpcj4NCisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0nIj5pYTY0XFpsaWJTdGF0JChDb25maWd1cmF0aW9uKVxUbXBcPC9JbnREaXI+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0nIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtJyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfFdpbjMyJyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218V2luMzInIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfHg2NCciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfHg2NCciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4NCisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4NCisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4NCisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIC8+DQorICA8L1Byb3BlcnR5R3JvdXA+DQorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+DQorICAgIDxDbENvbXBpbGU+DQorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOy4uXC4uXG1hc214ODY7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7WkxJQl9XSU5BUEk7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX1dBUk5JTkdTOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8RXhjZXB0aW9uSGFuZGxpbmc+DQorICAgICAgPC9FeGNlcHRpb25IYW5kbGluZz4NCisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERlYnVnRExMPC9SdW50aW1lTGlicmFyeT4NCisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4NCisgICAgICA8UHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlPiQoSW50RGlyKXpsaWJzdGF0LnBjaDwvUHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlPg0KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+DQorICAgICAgPE9iamVjdEZpbGVOYW1lPiQoSW50RGlyKTwvT2JqZWN0RmlsZU5hbWU+DQorICAgICAgPFByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPiQoT3V0RGlyKTwvUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+DQorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4NCisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4NCisgICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5PbGRTdHlsZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxSZXNvdXJjZUNvbXBpbGU+DQorICAgICAgPEN1bHR1cmU+MHgwNDBjPC9DdWx0dXJlPg0KKyAgICA8L1Jlc291cmNlQ29tcGlsZT4NCisgICAgPExpYj4NCisgICAgICA8QWRkaXRpb25hbE9wdGlvbnM+L01BQ0hJTkU6WDg2IC9OT0RFRkFVTFRMSUIgJShBZGRpdGlvbmFsT3B0aW9ucyk8L0FkZGl0aW9uYWxPcHRpb25zPg0KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKXpsaWJzdGF0LmxpYjwvT3V0cHV0RmlsZT4NCisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4NCisgICAgPC9MaWI+DQorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4NCisgICAgPENsQ29tcGlsZT4NCisgICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtYXNteDg2OyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO1pMSUJfV0lOQVBJO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19XQVJOSU5HUztBU01WO0FTTUlORjslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4NCisgICAgICA8RXhjZXB0aW9uSGFuZGxpbmc+DQorICAgICAgPC9FeGNlcHRpb25IYW5kbGluZz4NCisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+DQorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+DQorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPg0KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlck91dHB1dEZpbGU+JChJbnREaXIpemxpYnN0YXQucGNoPC9QcmVjb21waWxlZEhlYWRlck91dHB1dEZpbGU+DQorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4NCisgICAgICA8T2JqZWN0RmlsZU5hbWU+JChJbnREaXIpPC9PYmplY3RGaWxlTmFtZT4NCisgICAgICA8UHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+JChPdXREaXIpPC9Qcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4NCisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPg0KKyAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPFJlc291cmNlQ29tcGlsZT4NCisgICAgICA8Q3VsdHVyZT4weDA0MGM8L0N1bHR1cmU+DQorICAgIDwvUmVzb3VyY2VDb21waWxlPg0KKyAgICA8TGliPg0KKyAgICAgIDxBZGRpdGlvbmFsT3B0aW9ucz4vTUFDSElORTpYODYgL05PREVGQVVMVExJQiAlKEFkZGl0aW9uYWxPcHRpb25zKTwvQWRkaXRpb25hbE9wdGlvbnM+DQorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Li5cLi5cbWFzbXg4NlxtYXRjaDY4Ni5vYmo7Li5cLi5cbWFzbXg4NlxpbmZmYXMzMi5vYmo7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4NCisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpcil6bGlic3RhdC5saWI8L091dHB1dEZpbGU+DQorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+DQorICAgIDwvTGliPg0KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiciPg0KKyAgICA8Q2xDb21waWxlPg0KKyAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOy4uXC4uXG1hc214ODY7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7WkxJQl9XSU5BUEk7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX1dBUk5JTkdTOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPg0KKyAgICAgIDxFeGNlcHRpb25IYW5kbGluZz4NCisgICAgICA8L0V4Y2VwdGlvbkhhbmRsaW5nPg0KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4NCisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4NCisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+DQorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyT3V0cHV0RmlsZT4kKEludERpcil6bGlic3RhdC5wY2g8L1ByZWNvbXBpbGVkSGVhZGVyT3V0cHV0RmlsZT4NCisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPg0KKyAgICAgIDxPYmplY3RGaWxlTmFtZT4kKEludERpcik8L09iamVjdEZpbGVOYW1lPg0KKyAgICAgIDxQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4kKE91dERpcik8L1Byb2dyYW1EYXRhQmFzZUZpbGVOYW1lPg0KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+DQorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8UmVzb3VyY2VDb21waWxlPg0KKyAgICAgIDxDdWx0dXJlPjB4MDQwYzwvQ3VsdHVyZT4NCisgICAgPC9SZXNvdXJjZUNvbXBpbGU+DQorICAgIDxMaWI+DQorICAgICAgPEFkZGl0aW9uYWxPcHRpb25zPi9NQUNISU5FOlg4NiAvTk9ERUZBVUxUTElCICUoQWRkaXRpb25hbE9wdGlvbnMpPC9BZGRpdGlvbmFsT3B0aW9ucz4NCisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpcil6bGlic3RhdC5saWI8L091dHB1dEZpbGU+DQorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+DQorICAgIDwvTGliPg0KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4NCisgICAgPE1pZGw+DQorICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+DQorICAgIDwvTWlkbD4NCisgICAgPENsQ29tcGlsZT4NCisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47Li5cLi5cbWFzbXg4NjslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5aTElCX1dJTkFQSTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fV0FSTklOR1M7V0lONjQ7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxFeGNlcHRpb25IYW5kbGluZz4NCisgICAgICA8L0V4Y2VwdGlvbkhhbmRsaW5nPg0KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWdETEw8L1J1bnRpbWVMaWJyYXJ5Pg0KKyAgICAgIDxCdWZmZXJTZWN1cml0eUNoZWNrPmZhbHNlPC9CdWZmZXJTZWN1cml0eUNoZWNrPg0KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlck91dHB1dEZpbGU+JChJbnREaXIpemxpYnN0YXQucGNoPC9QcmVjb21waWxlZEhlYWRlck91dHB1dEZpbGU+DQorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4NCisgICAgICA8T2JqZWN0RmlsZU5hbWU+JChJbnREaXIpPC9PYmplY3RGaWxlTmFtZT4NCisgICAgICA8UHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+JChPdXREaXIpPC9Qcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4NCisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPg0KKyAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPg0KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0Pk9sZFN0eWxlPC9EZWJ1Z0luZm9ybWF0aW9uRm9ybWF0Pg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPFJlc291cmNlQ29tcGlsZT4NCisgICAgICA8Q3VsdHVyZT4weDA0MGM8L0N1bHR1cmU+DQorICAgIDwvUmVzb3VyY2VDb21waWxlPg0KKyAgICA8TGliPg0KKyAgICAgIDxBZGRpdGlvbmFsT3B0aW9ucz4vTUFDSElORTpBTUQ2NCAvTk9ERUZBVUxUTElCICUoQWRkaXRpb25hbE9wdGlvbnMpPC9BZGRpdGlvbmFsT3B0aW9ucz4NCisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpcil6bGlic3RhdC5saWI8L091dHB1dEZpbGU+DQorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+DQorICAgIDwvTGliPg0KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+DQorICAgIDxNaWRsPg0KKyAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5JdGFuaXVtPC9UYXJnZXRFbnZpcm9ubWVudD4NCisgICAgPC9NaWRsPg0KKyAgICA8Q2xDb21waWxlPg0KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtYXNteDg2OyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPlpMSUJfV0lOQVBJO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19XQVJOSU5HUztXSU42NDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPEV4Y2VwdGlvbkhhbmRsaW5nPg0KKyAgICAgIDwvRXhjZXB0aW9uSGFuZGxpbmc+DQorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1Z0RMTDwvUnVudGltZUxpYnJhcnk+DQorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+DQorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyT3V0cHV0RmlsZT4kKEludERpcil6bGlic3RhdC5wY2g8L1ByZWNvbXBpbGVkSGVhZGVyT3V0cHV0RmlsZT4NCisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPg0KKyAgICAgIDxPYmplY3RGaWxlTmFtZT4kKEludERpcik8L09iamVjdEZpbGVOYW1lPg0KKyAgICAgIDxQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4kKE91dERpcik8L1Byb2dyYW1EYXRhQmFzZUZpbGVOYW1lPg0KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+DQorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+DQorICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+T2xkU3R5bGU8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8UmVzb3VyY2VDb21waWxlPg0KKyAgICAgIDxDdWx0dXJlPjB4MDQwYzwvQ3VsdHVyZT4NCisgICAgPC9SZXNvdXJjZUNvbXBpbGU+DQorICAgIDxMaWI+DQorICAgICAgPEFkZGl0aW9uYWxPcHRpb25zPi9NQUNISU5FOklBNjQgL05PREVGQVVMVExJQiAlKEFkZGl0aW9uYWxPcHRpb25zKTwvQWRkaXRpb25hbE9wdGlvbnM+DQorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpemxpYnN0YXQubGliPC9PdXRwdXRGaWxlPg0KKyAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPg0KKyAgICA8L0xpYj4NCisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4NCisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4NCisgICAgPE1pZGw+DQorICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+DQorICAgIDwvTWlkbD4NCisgICAgPENsQ29tcGlsZT4NCisgICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtYXNteDg2OyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPlpMSUJfV0lOQVBJO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19XQVJOSU5HUztBU01WO0FTTUlORjtXSU42NDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4NCisgICAgICA8RXhjZXB0aW9uSGFuZGxpbmc+DQorICAgICAgPC9FeGNlcHRpb25IYW5kbGluZz4NCisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERMTDwvUnVudGltZUxpYnJhcnk+DQorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+DQorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPg0KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlck91dHB1dEZpbGU+JChJbnREaXIpemxpYnN0YXQucGNoPC9QcmVjb21waWxlZEhlYWRlck91dHB1dEZpbGU+DQorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4NCisgICAgICA8T2JqZWN0RmlsZU5hbWU+JChJbnREaXIpPC9PYmplY3RGaWxlTmFtZT4NCisgICAgICA8UHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+JChPdXREaXIpPC9Qcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4NCisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPg0KKyAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPFJlc291cmNlQ29tcGlsZT4NCisgICAgICA8Q3VsdHVyZT4weDA0MGM8L0N1bHR1cmU+DQorICAgIDwvUmVzb3VyY2VDb21waWxlPg0KKyAgICA8TGliPg0KKyAgICAgIDxBZGRpdGlvbmFsT3B0aW9ucz4vTUFDSElORTpBTUQ2NCAvTk9ERUZBVUxUTElCICUoQWRkaXRpb25hbE9wdGlvbnMpPC9BZGRpdGlvbmFsT3B0aW9ucz4NCisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4uLlwuLlxtYXNteDY0XGd2bWF0NjQub2JqOy4uXC4uXG1hc214NjRcaW5mZmFzeDY0Lm9iajslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPg0KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKXpsaWJzdGF0LmxpYjwvT3V0cHV0RmlsZT4NCisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4NCisgICAgPC9MaWI+DQorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPg0KKyAgICA8TWlkbD4NCisgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+SXRhbml1bTwvVGFyZ2V0RW52aXJvbm1lbnQ+DQorICAgIDwvTWlkbD4NCisgICAgPENsQ29tcGlsZT4NCisgICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtYXNteDg2OyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPlpMSUJfV0lOQVBJO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19XQVJOSU5HUztXSU42NDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4NCisgICAgICA8RXhjZXB0aW9uSGFuZGxpbmc+DQorICAgICAgPC9FeGNlcHRpb25IYW5kbGluZz4NCisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERMTDwvUnVudGltZUxpYnJhcnk+DQorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+DQorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPg0KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlck91dHB1dEZpbGU+JChJbnREaXIpemxpYnN0YXQucGNoPC9QcmVjb21waWxlZEhlYWRlck91dHB1dEZpbGU+DQorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4NCisgICAgICA8T2JqZWN0RmlsZU5hbWU+JChJbnREaXIpPC9PYmplY3RGaWxlTmFtZT4NCisgICAgICA8UHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+JChPdXREaXIpPC9Qcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4NCisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPg0KKyAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPFJlc291cmNlQ29tcGlsZT4NCisgICAgICA8Q3VsdHVyZT4weDA0MGM8L0N1bHR1cmU+DQorICAgIDwvUmVzb3VyY2VDb21waWxlPg0KKyAgICA8TGliPg0KKyAgICAgIDxBZGRpdGlvbmFsT3B0aW9ucz4vTUFDSElORTpJQTY0IC9OT0RFRkFVTFRMSUIgJShBZGRpdGlvbmFsT3B0aW9ucyk8L0FkZGl0aW9uYWxPcHRpb25zPg0KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKXpsaWJzdGF0LmxpYjwvT3V0cHV0RmlsZT4NCisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4NCisgICAgPC9MaWI+DQorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfHg2NCciPg0KKyAgICA8TWlkbD4NCisgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4NCisgICAgPC9NaWRsPg0KKyAgICA8Q2xDb21waWxlPg0KKyAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOy4uXC4uXG1hc214ODY7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+WkxJQl9XSU5BUEk7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX1dBUk5JTkdTO1dJTjY0OyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPg0KKyAgICAgIDxFeGNlcHRpb25IYW5kbGluZz4NCisgICAgICA8L0V4Y2VwdGlvbkhhbmRsaW5nPg0KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRExMPC9SdW50aW1lTGlicmFyeT4NCisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4NCisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+DQorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyT3V0cHV0RmlsZT4kKEludERpcil6bGlic3RhdC5wY2g8L1ByZWNvbXBpbGVkSGVhZGVyT3V0cHV0RmlsZT4NCisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPg0KKyAgICAgIDxPYmplY3RGaWxlTmFtZT4kKEludERpcik8L09iamVjdEZpbGVOYW1lPg0KKyAgICAgIDxQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4kKE91dERpcik8L1Byb2dyYW1EYXRhQmFzZUZpbGVOYW1lPg0KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+DQorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8UmVzb3VyY2VDb21waWxlPg0KKyAgICAgIDxDdWx0dXJlPjB4MDQwYzwvQ3VsdHVyZT4NCisgICAgPC9SZXNvdXJjZUNvbXBpbGU+DQorICAgIDxMaWI+DQorICAgICAgPEFkZGl0aW9uYWxPcHRpb25zPi9NQUNISU5FOkFNRDY0IC9OT0RFRkFVTFRMSUIgJShBZGRpdGlvbmFsT3B0aW9ucyk8L0FkZGl0aW9uYWxPcHRpb25zPg0KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKXpsaWJzdGF0LmxpYjwvT3V0cHV0RmlsZT4NCisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4NCisgICAgPC9MaWI+DQorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0nIj4NCisgICAgPE1pZGw+DQorICAgICAgPFRhcmdldEVudmlyb25tZW50Pkl0YW5pdW08L1RhcmdldEVudmlyb25tZW50Pg0KKyAgICA8L01pZGw+DQorICAgIDxDbENvbXBpbGU+DQorICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47Li5cLi5cbWFzbXg4NjslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5aTElCX1dJTkFQSTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fV0FSTklOR1M7V0lONjQ7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+DQorICAgICAgPEV4Y2VwdGlvbkhhbmRsaW5nPg0KKyAgICAgIDwvRXhjZXB0aW9uSGFuZGxpbmc+DQorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWRETEw8L1J1bnRpbWVMaWJyYXJ5Pg0KKyAgICAgIDxCdWZmZXJTZWN1cml0eUNoZWNrPmZhbHNlPC9CdWZmZXJTZWN1cml0eUNoZWNrPg0KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4NCisgICAgICA8UHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlPiQoSW50RGlyKXpsaWJzdGF0LnBjaDwvUHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlPg0KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+DQorICAgICAgPE9iamVjdEZpbGVOYW1lPiQoSW50RGlyKTwvT2JqZWN0RmlsZU5hbWU+DQorICAgICAgPFByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPiQoT3V0RGlyKTwvUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+DQorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4NCisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxSZXNvdXJjZUNvbXBpbGU+DQorICAgICAgPEN1bHR1cmU+MHgwNDBjPC9DdWx0dXJlPg0KKyAgICA8L1Jlc291cmNlQ29tcGlsZT4NCisgICAgPExpYj4NCisgICAgICA8QWRkaXRpb25hbE9wdGlvbnM+L01BQ0hJTkU6SUE2NCAvTk9ERUZBVUxUTElCICUoQWRkaXRpb25hbE9wdGlvbnMpPC9BZGRpdGlvbmFsT3B0aW9ucz4NCisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpcil6bGlic3RhdC5saWI8L091dHB1dEZpbGU+DQorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+DQorICAgIDwvTGliPg0KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KKyAgPEl0ZW1Hcm91cD4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxhZGxlcjMyLmMiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cY29tcHJlc3MuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxjcmMzMi5jIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXGRlZmxhdGUuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxnemNsb3NlLmMiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cZ3psaWIuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxnenJlYWQuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxnendyaXRlLmMiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5caW5mYmFjay5jIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXG1hc214NjRcaW5mZmFzODY2NC5jIj4NCisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+DQorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4NCisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+DQorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4NCisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4NCisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXGluZmZhc3QuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxpbmZsYXRlLmMiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5caW5mdHJlZXMuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxtaW5pemlwXGlvYXBpLmMiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cdHJlZXMuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlx1bmNvbXByLmMiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbWluaXppcFx1bnppcC5jIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXG1pbml6aXBcemlwLmMiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cenV0aWwuYyIgLz4NCisgIDwvSXRlbUdyb3VwPg0KKyAgPEl0ZW1Hcm91cD4NCisgICAgPFJlc291cmNlQ29tcGlsZSBJbmNsdWRlPSJ6bGliLnJjIiAvPg0KKyAgPC9JdGVtR3JvdXA+DQorICA8SXRlbUdyb3VwPg0KKyAgICA8Tm9uZSBJbmNsdWRlPSJ6bGlidmMuZGVmIiAvPg0KKyAgPC9JdGVtR3JvdXA+DQorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPg0KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4NCisgIDwvSW1wb3J0R3JvdXA+DQorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxMS96bGlidmMuZGVmIGIvc3JjL2NvbnRyaWIvdnN0dWRpby92YzExL3psaWJ2Yy5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmEwOWJjMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxMS96bGlidmMuZGVmCkBAIC0wLDAgKzEsMTU4IEBACitMSUJSQVJZDQorOyB6bGliIGRhdGEgY29tcHJlc3Npb24gYW5kIFpJUCBmaWxlIEkvTyBsaWJyYXJ5DQorDQorVkVSU0lPTgkJMS4yDQorDQorRVhQT1JUUw0KKyAgICAgICAgYWRsZXIzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMQ0KKyAgICAgICAgY29tcHJlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMg0KKyAgICAgICAgY3JjMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMw0KKyAgICAgICAgZGVmbGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBANA0KKyAgICAgICAgZGVmbGF0ZUNvcHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBANQ0KKyAgICAgICAgZGVmbGF0ZUVuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBANg0KKyAgICAgICAgZGVmbGF0ZUluaXQyXyAgICAgICAgICAgICAgICAgICAgICAgICAgICBANw0KKyAgICAgICAgZGVmbGF0ZUluaXRfICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAOA0KKyAgICAgICAgZGVmbGF0ZVBhcmFtcyAgICAgICAgICAgICAgICAgICAgICAgICAgICBAOQ0KKyAgICAgICAgZGVmbGF0ZVJlc2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTANCisgICAgICAgIGRlZmxhdGVTZXREaWN0aW9uYXJ5ICAgICAgICAgICAgICAgICAgICAgQDExDQorICAgICAgICBnemNsb3NlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxMg0KKyAgICAgICAgZ3pkb3BlbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTMNCisgICAgICAgIGd6ZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDE0DQorICAgICAgICBnemZsdXNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxNQ0KKyAgICAgICAgZ3pvcGVuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTYNCisgICAgICAgIGd6cmVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDE3DQorICAgICAgICBnendyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxOA0KKyAgICAgICAgaW5mbGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTkNCisgICAgICAgIGluZmxhdGVFbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDIwDQorICAgICAgICBpbmZsYXRlSW5pdDJfICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAyMQ0KKyAgICAgICAgaW5mbGF0ZUluaXRfICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMjINCisgICAgICAgIGluZmxhdGVSZXNldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDIzDQorICAgICAgICBpbmZsYXRlU2V0RGljdGlvbmFyeSAgICAgICAgICAgICAgICAgICAgIEAyNA0KKyAgICAgICAgaW5mbGF0ZVN5bmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMjUNCisgICAgICAgIHVuY29tcHJlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDI2DQorICAgICAgICB6bGliVmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAyNw0KKyAgICAgICAgZ3pwcmludGYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMjgNCisgICAgICAgIGd6cHV0YyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDI5DQorICAgICAgICBnemdldGMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAzMA0KKyAgICAgICAgZ3pzZWVrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMzENCisgICAgICAgIGd6cmV3aW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDMyDQorICAgICAgICBnenRlbGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAzMw0KKyAgICAgICAgZ3plb2YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMzQNCisgICAgICAgIGd6c2V0cGFyYW1zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDM1DQorICAgICAgICB6RXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAzNg0KKyAgICAgICAgaW5mbGF0ZVN5bmNQb2ludCAgICAgICAgICAgICAgICAgICAgICAgICBAMzcNCisgICAgICAgIGdldF9jcmNfdGFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDM4DQorICAgICAgICBjb21wcmVzczIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAzOQ0KKyAgICAgICAgZ3pwdXRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBANDANCisgICAgICAgIGd6Z2V0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDQxDQorICAgICAgICBpbmZsYXRlQ29weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEA0Mg0KKyAgICAgICAgaW5mbGF0ZUJhY2tJbml0XyAgICAgICAgICAgICAgICAgICAgICAgICBANDMNCisgICAgICAgIGluZmxhdGVCYWNrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDQ0DQorICAgICAgICBpbmZsYXRlQmFja0VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgIEA0NQ0KKyAgICAgICAgY29tcHJlc3NCb3VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBANDYNCisgICAgICAgIGRlZmxhdGVCb3VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDQ3DQorICAgICAgICBnemNsZWFyZXJyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEA0OA0KKyAgICAgICAgZ3p1bmdldGMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBANDkNCisgICAgICAgIHpsaWJDb21waWxlRmxhZ3MgICAgICAgICAgICAgICAgICAgICAgICAgQDUwDQorICAgICAgICBkZWZsYXRlUHJpbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEA1MQ0KKyAgICAgICAgZGVmbGF0ZVBlbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICBANTINCisNCisgICAgICAgIHVuek9wZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDYxDQorICAgICAgICB1bnpDbG9zZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEA2Mg0KKyAgICAgICAgdW56R2V0R2xvYmFsSW5mbyAgICAgICAgICAgICAgICAgICAgICAgICBANjMNCisgICAgICAgIHVuekdldEN1cnJlbnRGaWxlSW5mbyAgICAgICAgICAgICAgICAgICAgQDY0DQorICAgICAgICB1bnpHb1RvRmlyc3RGaWxlICAgICAgICAgICAgICAgICAgICAgICAgIEA2NQ0KKyAgICAgICAgdW56R29Ub05leHRGaWxlICAgICAgICAgICAgICAgICAgICAgICAgICBANjYNCisgICAgICAgIHVuek9wZW5DdXJyZW50RmlsZSAgICAgICAgICAgICAgICAgICAgICAgQDY3DQorICAgICAgICB1bnpSZWFkQ3VycmVudEZpbGUgICAgICAgICAgICAgICAgICAgICAgIEA2OA0KKyAgICAgICAgdW56T3BlbkN1cnJlbnRGaWxlMyAgICAgICAgICAgICAgICAgICAgICBANjkNCisgICAgICAgIHVuenRlbGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDcwDQorICAgICAgICB1bnplb2YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEA3MQ0KKyAgICAgICAgdW56Q2xvc2VDdXJyZW50RmlsZSAgICAgICAgICAgICAgICAgICAgICBANzINCisgICAgICAgIHVuekdldEdsb2JhbENvbW1lbnQgICAgICAgICAgICAgICAgICAgICAgQDczDQorICAgICAgICB1bnpTdHJpbmdGaWxlTmFtZUNvbXBhcmUgICAgICAgICAgICAgICAgIEA3NA0KKyAgICAgICAgdW56TG9jYXRlRmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBANzUNCisgICAgICAgIHVuekdldExvY2FsRXh0cmFmaWVsZCAgICAgICAgICAgICAgICAgICAgQDc2DQorICAgICAgICB1bnpPcGVuMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEA3Nw0KKyAgICAgICAgdW56T3BlbkN1cnJlbnRGaWxlMiAgICAgICAgICAgICAgICAgICAgICBANzgNCisgICAgICAgIHVuek9wZW5DdXJyZW50RmlsZVBhc3N3b3JkICAgICAgICAgICAgICAgQDc5DQorDQorICAgICAgICB6aXBPcGVuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEA4MA0KKyAgICAgICAgemlwT3Blbk5ld0ZpbGVJblppcCAgICAgICAgICAgICAgICAgICAgICBAODENCisgICAgICAgIHppcFdyaXRlSW5GaWxlSW5aaXAgICAgICAgICAgICAgICAgICAgICAgQDgyDQorICAgICAgICB6aXBDbG9zZUZpbGVJblppcCAgICAgICAgICAgICAgICAgICAgICAgIEA4Mw0KKyAgICAgICAgemlwQ2xvc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAODQNCisgICAgICAgIHppcE9wZW5OZXdGaWxlSW5aaXAyICAgICAgICAgICAgICAgICAgICAgQDg2DQorICAgICAgICB6aXBDbG9zZUZpbGVJblppcFJhdyAgICAgICAgICAgICAgICAgICAgIEA4Nw0KKyAgICAgICAgemlwT3BlbjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAODgNCisgICAgICAgIHppcE9wZW5OZXdGaWxlSW5aaXAzICAgICAgICAgICAgICAgICAgICAgQDg5DQorDQorICAgICAgICB1bnpHZXRGaWxlUG9zICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxMDANCisgICAgICAgIHVuekdvVG9GaWxlUG9zICAgICAgICAgICAgICAgICAgICAgICAgICAgQDEwMQ0KKw0KKyAgICAgICAgZmlsbF93aW4zMl9maWxlZnVuYyAgICAgICAgICAgICAgICAgICAgICBAMTEwDQorDQorOyB6bGlid2FwaSB2MS4yLjQgYWRkZWQ6DQorICAgICAgICBmaWxsX3dpbjMyX2ZpbGVmdW5jNjQgICAgICAgICAgICAgICAgICAgQDExMQ0KKyAgICAgICAgZmlsbF93aW4zMl9maWxlZnVuYzY0QSAgICAgICAgICAgICAgICAgIEAxMTINCisgICAgICAgIGZpbGxfd2luMzJfZmlsZWZ1bmM2NFcgICAgICAgICAgICAgICAgICBAMTEzDQorDQorICAgICAgICB1bnpPcGVuNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDEyMA0KKyAgICAgICAgdW56T3BlbjJfNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxMjENCisgICAgICAgIHVuekdldEdsb2JhbEluZm82NCAgICAgICAgICAgICAgICAgICAgICBAMTIyDQorICAgICAgICB1bnpHZXRDdXJyZW50RmlsZUluZm82NCAgICAgICAgICAgICAgICAgQDEyNA0KKyAgICAgICAgdW56R2V0Q3VycmVudEZpbGVaU3RyZWFtUG9zNjQgICAgICAgICAgIEAxMjUNCisgICAgICAgIHVuenRlbGw2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTI2DQorICAgICAgICB1bnpHZXRGaWxlUG9zNjQgICAgICAgICAgICAgICAgICAgICAgICAgQDEyNw0KKyAgICAgICAgdW56R29Ub0ZpbGVQb3M2NCAgICAgICAgICAgICAgICAgICAgICAgIEAxMjgNCisNCisgICAgICAgIHppcE9wZW42NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTMwDQorICAgICAgICB6aXBPcGVuMl82NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDEzMQ0KKyAgICAgICAgemlwT3Blbk5ld0ZpbGVJblppcDY0ICAgICAgICAgICAgICAgICAgIEAxMzINCisgICAgICAgIHppcE9wZW5OZXdGaWxlSW5aaXAyXzY0ICAgICAgICAgICAgICAgICBAMTMzDQorICAgICAgICB6aXBPcGVuTmV3RmlsZUluWmlwM182NCAgICAgICAgICAgICAgICAgQDEzNA0KKyAgICAgICAgemlwT3Blbk5ld0ZpbGVJblppcDRfNjQgICAgICAgICAgICAgICAgIEAxMzUNCisgICAgICAgIHppcENsb3NlRmlsZUluWmlwUmF3NjQgICAgICAgICAgICAgICAgICBAMTM2DQorDQorOyB6bGliMSB2MS4yLjQgYWRkZWQ6DQorICAgICAgICBhZGxlcjMyX2NvbWJpbmUgICAgICAgICAgICAgICAgICAgICAgICAgQDE0MA0KKyAgICAgICAgY3JjMzJfY29tYmluZSAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxNDINCisgICAgICAgIGRlZmxhdGVTZXRIZWFkZXIgICAgICAgICAgICAgICAgICAgICAgICBAMTQ0DQorICAgICAgICBkZWZsYXRlVHVuZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDE0NQ0KKyAgICAgICAgZ3pidWZmZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxNDYNCisgICAgICAgIGd6Y2xvc2VfciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTQ3DQorICAgICAgICBnemNsb3NlX3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDE0OA0KKyAgICAgICAgZ3pkaXJlY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxNDkNCisgICAgICAgIGd6b2Zmc2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTUwDQorICAgICAgICBpbmZsYXRlR2V0SGVhZGVyICAgICAgICAgICAgICAgICAgICAgICAgQDE1Ng0KKyAgICAgICAgaW5mbGF0ZU1hcmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxNTcNCisgICAgICAgIGluZmxhdGVQcmltZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTU4DQorICAgICAgICBpbmZsYXRlUmVzZXQyICAgICAgICAgICAgICAgICAgICAgICAgICAgQDE1OQ0KKyAgICAgICAgaW5mbGF0ZVVuZGVybWluZSAgICAgICAgICAgICAgICAgICAgICAgIEAxNjANCisNCis7IHpsaWIxIHYxLjIuNiBhZGRlZDoNCisgICAgICAgIGd6Z2V0Y18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTYxDQorICAgICAgICBpbmZsYXRlUmVzZXRLZWVwICAgICAgICAgICAgICAgICAgICAgICAgQDE2Mw0KKyAgICAgICAgZGVmbGF0ZVJlc2V0S2VlcCAgICAgICAgICAgICAgICAgICAgICAgIEAxNjQNCisNCis7IHpsaWIxIHYxLjIuNyBhZGRlZDoNCisgICAgICAgIGd6b3Blbl93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTY1DQorDQorOyB6bGliMSB2MS4yLjggYWRkZWQ6DQorICAgICAgICBpbmZsYXRlR2V0RGljdGlvbmFyeSAgICAgICAgICAgICAgICAgICAgQDE2Ng0KKyAgICAgICAgZ3p2cHJpbnRmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxNjcNCisNCis7IHpsaWIxIHYxLjIuOSBhZGRlZDoNCisgICAgICAgIGluZmxhdGVDb2Rlc1VzZWQgICAgICAgICAgICAgICAgICAgICAgICBAMTY4DQorICAgICAgICBpbmZsYXRlVmFsaWRhdGUgICAgICAgICAgICAgICAgICAgICAgICAgQDE2OQ0KKyAgICAgICAgdW5jb21wcmVzczIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxNzANCisgICAgICAgIGd6ZnJlYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTcxDQorICAgICAgICBnemZ3cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDE3Mg0KKyAgICAgICAgZGVmbGF0ZUdldERpY3Rpb25hcnkgICAgICAgICAgICAgICAgICAgIEAxNzMNCisgICAgICAgIGFkbGVyMzJfeiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTc0DQorICAgICAgICBjcmMzMl96ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDE3NQ0KKw0KKzsgemxpYjEgdjEuMi4xMiBhZGRlZDoNCisJCWNyYzMyX2NvbWJpbmVfZ2VuCQkJCQkJQDE3Ng0KKwkJY3JjMzJfY29tYmluZV9nZW42NAkJCQkJCUAxNzcNCisJCWNyYzMyX2NvbWJpbmVfb3AJCQkJCQlAMTc4DQpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvdnN0dWRpby92YzExL3psaWJ2Yy5zbG4gYi9zcmMvY29udHJpYi92c3R1ZGlvL3ZjMTEvemxpYnZjLnNsbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmNiYWZkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbnRyaWIvdnN0dWRpby92YzExL3psaWJ2Yy5zbG4KQEAgLTAsMCArMSwxMTcgQEAKK++7vw0KK01pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIFNvbHV0aW9uIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDEyLjAwDQorIyBWaXN1YWwgU3R1ZGlvIDIwMTINCitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInpsaWJ2YyIsICJ6bGlidmMudmN4cHJvaiIsICJ7OEZEODI2RjgtMzczOS00NEU2LThDQzgtOTk3MTIyRTUzQjhEfSINCitFbmRQcm9qZWN0DQorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJ6bGlic3RhdCIsICJ6bGlic3RhdC52Y3hwcm9qIiwgIns3NDVERUM1OC1FQkIzLTQ3QTktQTlCOC00QzY2MjdDMDFCRjh9Ig0KK0VuZFByb2plY3QNCitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInRlc3R6bGliIiwgInRlc3R6bGliLnZjeHByb2oiLCAie0FBNjY2NkFBLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0iDQorRW5kUHJvamVjdA0KK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAidGVzdHpsaWJkbGwiLCAidGVzdHpsaWJkbGwudmN4cHJvaiIsICJ7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzNjZBfSINCitFbmRQcm9qZWN0DQorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJtaW5pemlwIiwgIm1pbml6aXAudmN4cHJvaiIsICJ7NDhDREQ5REMtRTA5Ri00MTM1LTlDMEMtNEZFNTBDM0M2NTRCfSINCitFbmRQcm9qZWN0DQorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJtaW5pdW56IiwgIm1pbml1bnoudmN4cHJvaiIsICJ7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzODJBfSINCitFbmRQcm9qZWN0DQorR2xvYmFsDQorCUdsb2JhbFNlY3Rpb24oU29sdXRpb25Db25maWd1cmF0aW9uUGxhdGZvcm1zKSA9IHByZVNvbHV0aW9uDQorCQlEZWJ1Z3xJdGFuaXVtID0gRGVidWd8SXRhbml1bQ0KKwkJRGVidWd8V2luMzIgPSBEZWJ1Z3xXaW4zMg0KKwkJRGVidWd8eDY0ID0gRGVidWd8eDY0DQorCQlSZWxlYXNlfEl0YW5pdW0gPSBSZWxlYXNlfEl0YW5pdW0NCisJCVJlbGVhc2V8V2luMzIgPSBSZWxlYXNlfFdpbjMyDQorCQlSZWxlYXNlfHg2NCA9IFJlbGVhc2V8eDY0DQorCQlSZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtID0gUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bQ0KKwkJUmVsZWFzZVdpdGhvdXRBc218V2luMzIgPSBSZWxlYXNlV2l0aG91dEFzbXxXaW4zMg0KKwkJUmVsZWFzZVdpdGhvdXRBc218eDY0ID0gUmVsZWFzZVdpdGhvdXRBc218eDY0DQorCUVuZEdsb2JhbFNlY3Rpb24NCisJR2xvYmFsU2VjdGlvbihQcm9qZWN0Q29uZmlndXJhdGlvblBsYXRmb3JtcykgPSBwb3N0U29sdXRpb24NCisJCXs4RkQ4MjZGOC0zNzM5LTQ0RTYtOENDOC05OTcxMjJFNTNCOER9LkRlYnVnfEl0YW5pdW0uQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCisJCXs4RkQ4MjZGOC0zNzM5LTQ0RTYtOENDOC05OTcxMjJFNTNCOER9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQorCQl7OEZEODI2RjgtMzczOS00NEU2LThDQzgtOTk3MTIyRTUzQjhEfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCisJCXs4RkQ4MjZGOC0zNzM5LTQ0RTYtOENDOC05OTcxMjJFNTNCOER9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCisJCXs4RkQ4MjZGOC0zNzM5LTQ0RTYtOENDOC05OTcxMjJFNTNCOER9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQorCQl7OEZEODI2RjgtMzczOS00NEU2LThDQzgtOTk3MTIyRTUzQjhEfS5SZWxlYXNlfEl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KKwkJezhGRDgyNkY4LTM3MzktNDRFNi04Q0M4LTk5NzEyMkU1M0I4RH0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQorCQl7OEZEODI2RjgtMzczOS00NEU2LThDQzgtOTk3MTIyRTUzQjhEfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQorCQl7OEZEODI2RjgtMzczOS00NEU2LThDQzgtOTk3MTIyRTUzQjhEfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KKwkJezhGRDgyNkY4LTM3MzktNDRFNi04Q0M4LTk5NzEyMkU1M0I4RH0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQorCQl7OEZEODI2RjgtMzczOS00NEU2LThDQzgtOTk3MTIyRTUzQjhEfS5SZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2VXaXRob3V0QXNtfFdpbjMyDQorCQl7OEZEODI2RjgtMzczOS00NEU2LThDQzgtOTk3MTIyRTUzQjhEfS5SZWxlYXNlV2l0aG91dEFzbXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlV2l0aG91dEFzbXxXaW4zMg0KKwkJezhGRDgyNkY4LTM3MzktNDRFNi04Q0M4LTk5NzEyMkU1M0I4RH0uUmVsZWFzZVdpdGhvdXRBc218V2luMzIuQnVpbGQuMCA9IFJlbGVhc2VXaXRob3V0QXNtfFdpbjMyDQorCQl7OEZEODI2RjgtMzczOS00NEU2LThDQzgtOTk3MTIyRTUzQjhEfS5SZWxlYXNlV2l0aG91dEFzbXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZVdpdGhvdXRBc218eDY0DQorCQl7OEZEODI2RjgtMzczOS00NEU2LThDQzgtOTk3MTIyRTUzQjhEfS5SZWxlYXNlV2l0aG91dEFzbXx4NjQuQnVpbGQuMCA9IFJlbGVhc2VXaXRob3V0QXNtfHg2NA0KKwkJezc0NURFQzU4LUVCQjMtNDdBOS1BOUI4LTRDNjYyN0MwMUJGOH0uRGVidWd8SXRhbml1bS5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KKwkJezc0NURFQzU4LUVCQjMtNDdBOS1BOUI4LTRDNjYyN0MwMUJGOH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCisJCXs3NDVERUM1OC1FQkIzLTQ3QTktQTlCOC00QzY2MjdDMDFCRjh9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KKwkJezc0NURFQzU4LUVCQjMtNDdBOS1BOUI4LTRDNjYyN0MwMUJGOH0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KKwkJezc0NURFQzU4LUVCQjMtNDdBOS1BOUI4LTRDNjYyN0MwMUJGOH0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCisJCXs3NDVERUM1OC1FQkIzLTQ3QTktQTlCOC00QzY2MjdDMDFCRjh9LlJlbGVhc2V8SXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQorCQl7NzQ1REVDNTgtRUJCMy00N0E5LUE5QjgtNEM2NjI3QzAxQkY4fS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCisJCXs3NDVERUM1OC1FQkIzLTQ3QTktQTlCOC00QzY2MjdDMDFCRjh9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCisJCXs3NDVERUM1OC1FQkIzLTQ3QTktQTlCOC00QzY2MjdDMDFCRjh9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQorCQl7NzQ1REVDNTgtRUJCMy00N0E5LUE5QjgtNEM2NjI3QzAxQkY4fS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCisJCXs3NDVERUM1OC1FQkIzLTQ3QTktQTlCOC00QzY2MjdDMDFCRjh9LlJlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZVdpdGhvdXRBc218V2luMzINCisJCXs3NDVERUM1OC1FQkIzLTQ3QTktQTlCOC00QzY2MjdDMDFCRjh9LlJlbGVhc2VXaXRob3V0QXNtfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2VXaXRob3V0QXNtfFdpbjMyDQorCQl7NzQ1REVDNTgtRUJCMy00N0E5LUE5QjgtNEM2NjI3QzAxQkY4fS5SZWxlYXNlV2l0aG91dEFzbXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZVdpdGhvdXRBc218V2luMzINCisJCXs3NDVERUM1OC1FQkIzLTQ3QTktQTlCOC00QzY2MjdDMDFCRjh9LlJlbGVhc2VXaXRob3V0QXNtfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlV2l0aG91dEFzbXx4NjQNCisJCXs3NDVERUM1OC1FQkIzLTQ3QTktQTlCOC00QzY2MjdDMDFCRjh9LlJlbGVhc2VXaXRob3V0QXNtfHg2NC5CdWlsZC4wID0gUmVsZWFzZVdpdGhvdXRBc218eDY0DQorCQl7QUE2NjY2QUEtRTA5Ri00MTM1LTlDMEMtNEZFNTBDM0M2NTRCfS5EZWJ1Z3xJdGFuaXVtLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQorCQl7QUE2NjY2QUEtRTA5Ri00MTM1LTlDMEMtNEZFNTBDM0M2NTRCfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KKwkJe0FBNjY2NkFBLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQorCQl7QUE2NjY2QUEtRTA5Ri00MTM1LTlDMEMtNEZFNTBDM0M2NTRCfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQorCQl7QUE2NjY2QUEtRTA5Ri00MTM1LTlDMEMtNEZFNTBDM0M2NTRCfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KKwkJe0FBNjY2NkFBLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uUmVsZWFzZXxJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCisJCXtBQTY2NjZBQS1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KKwkJe0FBNjY2NkFBLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KKwkJe0FBNjY2NkFBLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCisJCXtBQTY2NjZBQS1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KKwkJe0FBNjY2NkFBLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlV2l0aG91dEFzbXxXaW4zMg0KKwkJe0FBNjY2NkFBLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uUmVsZWFzZVdpdGhvdXRBc218V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZVdpdGhvdXRBc218V2luMzINCisJCXtBQTY2NjZBQS1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LlJlbGVhc2VXaXRob3V0QXNtfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlV2l0aG91dEFzbXxXaW4zMg0KKwkJe0FBNjY2NkFBLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uUmVsZWFzZVdpdGhvdXRBc218eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2VXaXRob3V0QXNtfHg2NA0KKwkJe0FBNjY2NkFBLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uUmVsZWFzZVdpdGhvdXRBc218eDY0LkJ1aWxkLjAgPSBSZWxlYXNlV2l0aG91dEFzbXx4NjQNCisJCXtDNTJGOUU3Qi00OThBLTQyQkUtOERCNC04NUExNTY5NDM2NkF9LkRlYnVnfEl0YW5pdW0uQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCisJCXtDNTJGOUU3Qi00OThBLTQyQkUtOERCNC04NUExNTY5NDM2NkF9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzNjZBfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCisJCXtDNTJGOUU3Qi00OThBLTQyQkUtOERCNC04NUExNTY5NDM2NkF9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCisJCXtDNTJGOUU3Qi00OThBLTQyQkUtOERCNC04NUExNTY5NDM2NkF9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzNjZBfS5SZWxlYXNlfEl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KKwkJe0M1MkY5RTdCLTQ5OEEtNDJCRS04REI0LTg1QTE1Njk0MzY2QX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzNjZBfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzNjZBfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KKwkJe0M1MkY5RTdCLTQ5OEEtNDJCRS04REI0LTg1QTE1Njk0MzY2QX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzNjZBfS5SZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCisJCXtDNTJGOUU3Qi00OThBLTQyQkUtOERCNC04NUExNTY5NDM2NkF9LlJlbGVhc2VXaXRob3V0QXNtfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCisJCXtDNTJGOUU3Qi00OThBLTQyQkUtOERCNC04NUExNTY5NDM2NkF9LlJlbGVhc2VXaXRob3V0QXNtfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KKwkJezQ4Q0REOURDLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uRGVidWd8SXRhbml1bS5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KKwkJezQ4Q0REOURDLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCisJCXs0OENERDlEQy1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KKwkJezQ4Q0REOURDLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KKwkJezQ4Q0REOURDLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCisJCXs0OENERDlEQy1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LlJlbGVhc2V8SXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQorCQl7NDhDREQ5REMtRTA5Ri00MTM1LTlDMEMtNEZFNTBDM0M2NTRCfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCisJCXs0OENERDlEQy1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCisJCXs0OENERDlEQy1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQorCQl7NDhDREQ5REMtRTA5Ri00MTM1LTlDMEMtNEZFNTBDM0M2NTRCfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCisJCXs0OENERDlEQy1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LlJlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KKwkJezQ4Q0REOURDLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uUmVsZWFzZVdpdGhvdXRBc218V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KKwkJezQ4Q0REOURDLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uUmVsZWFzZVdpdGhvdXRBc218eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzODJBfS5EZWJ1Z3xJdGFuaXVtLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzODJBfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KKwkJe0M1MkY5RTdCLTQ5OEEtNDJCRS04REI0LTg1QTE1Njk0MzgyQX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzODJBfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzODJBfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KKwkJe0M1MkY5RTdCLTQ5OEEtNDJCRS04REI0LTg1QTE1Njk0MzgyQX0uUmVsZWFzZXxJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCisJCXtDNTJGOUU3Qi00OThBLTQyQkUtOERCNC04NUExNTY5NDM4MkF9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KKwkJe0M1MkY5RTdCLTQ5OEEtNDJCRS04REI0LTg1QTE1Njk0MzgyQX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KKwkJe0M1MkY5RTdCLTQ5OEEtNDJCRS04REI0LTg1QTE1Njk0MzgyQX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCisJCXtDNTJGOUU3Qi00OThBLTQyQkUtOERCNC04NUExNTY5NDM4MkF9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KKwkJe0M1MkY5RTdCLTQ5OEEtNDJCRS04REI0LTg1QTE1Njk0MzgyQX0uUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzODJBfS5SZWxlYXNlV2l0aG91dEFzbXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzODJBfS5SZWxlYXNlV2l0aG91dEFzbXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCisJRW5kR2xvYmFsU2VjdGlvbg0KKwlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uUHJvcGVydGllcykgPSBwcmVTb2x1dGlvbg0KKwkJSGlkZVNvbHV0aW9uTm9kZSA9IEZBTFNFDQorCUVuZEdsb2JhbFNlY3Rpb24NCitFbmRHbG9iYWwNCmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi92c3R1ZGlvL3ZjMTEvemxpYnZjLnZjeHByb2ogYi9zcmMvY29udHJpYi92c3R1ZGlvL3ZjMTEvemxpYnZjLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY1Yjk1ZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxMS96bGlidmMudmN4cHJvagpAQCAtMCwwICsxLDY4OCBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4NCisgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+DQorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xJdGFuaXVtIj4NCisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4NCisgICAgICA8UGxhdGZvcm0+SXRhbml1bTwvUGxhdGZvcm0+DQorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+DQorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+DQorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+DQorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4NCisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+DQorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+DQorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+DQorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+DQorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtIj4NCisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlV2l0aG91dEFzbTwvQ29uZmlndXJhdGlvbj4NCisgICAgICA8UGxhdGZvcm0+SXRhbml1bTwvUGxhdGZvcm0+DQorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+DQorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiI+DQorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZVdpdGhvdXRBc208L0NvbmZpZ3VyYXRpb24+DQorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4NCisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2VXaXRob3V0QXNtfHg2NCI+DQorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZVdpdGhvdXRBc208L0NvbmZpZ3VyYXRpb24+DQorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+DQorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+DQorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfEl0YW5pdW0iPg0KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+DQorICAgICAgPFBsYXRmb3JtPkl0YW5pdW08L1BsYXRmb3JtPg0KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+DQorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4NCisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPg0KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPg0KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+DQorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+DQorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+DQorICA8L0l0ZW1Hcm91cD4NCisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4NCisgICAgPFByb2plY3RHdWlkPns4RkQ4MjZGOC0zNzM5LTQ0RTYtOENDOC05OTcxMjJFNTNCOER9PC9Qcm9qZWN0R3VpZD4NCisgIDwvUHJvcGVydHlHcm91cD4NCisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+DQorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+DQorICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+DQorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPg0KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxMTA8L1BsYXRmb3JtVG9vbHNldD4NCisgIDwvUHJvcGVydHlHcm91cD4NCisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+DQorICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+DQorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPg0KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxMTA8L1BsYXRmb3JtVG9vbHNldD4NCisgIDwvUHJvcGVydHlHcm91cD4NCisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+DQorICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+DQorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djExMDwvUGxhdGZvcm1Ub29sc2V0Pg0KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4NCisgIDwvUHJvcGVydHlHcm91cD4NCisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPg0KKyAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPg0KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4NCisgIDwvUHJvcGVydHlHcm91cD4NCisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4NCisgICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4NCisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+DQorICA8L1Byb3BlcnR5R3JvdXA+DQorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+DQorICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+DQorICA8L1Byb3BlcnR5R3JvdXA+DQorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPg0KKyAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPg0KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4NCisgICAgPFBsYXRmb3JtVG9vbHNldD52MTEwPC9QbGF0Zm9ybVRvb2xzZXQ+DQorICA8L1Byb3BlcnR5R3JvdXA+DQorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4NCisgICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4NCisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+DQorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djExMDwvUGxhdGZvcm1Ub29sc2V0Pg0KKyAgPC9Qcm9wZXJ0eUdyb3VwPg0KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+DQorICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+DQorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djExMDwvUGxhdGZvcm1Ub29sc2V0Pg0KKyAgPC9Qcm9wZXJ0eUdyb3VwPg0KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+DQorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4NCisgIDwvSW1wb3J0R3JvdXA+DQorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4NCisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPg0KKyAgPC9JbXBvcnRHcm91cD4NCisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4NCisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPg0KKyAgPC9JbXBvcnRHcm91cD4NCisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4NCisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPg0KKyAgPC9JbXBvcnRHcm91cD4NCisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+DQorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4NCisgIDwvSW1wb3J0R3JvdXA+DQorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4NCisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPg0KKyAgPC9JbXBvcnRHcm91cD4NCisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPg0KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+DQorICA8L0ltcG9ydEdyb3VwPg0KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPg0KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+DQorICA8L0ltcG9ydEdyb3VwPg0KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4NCisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPg0KKyAgPC9JbXBvcnRHcm91cD4NCisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+DQorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4NCisgIDwvSW1wb3J0R3JvdXA+DQorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4NCisgIDxQcm9wZXJ0eUdyb3VwPg0KKyAgICA8X1Byb2plY3RGaWxlVmVyc2lvbj4xMC4wLjMwMTI4LjE8L19Qcm9qZWN0RmlsZVZlcnNpb24+DQorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPng4NlxabGliRGxsJChDb25maWd1cmF0aW9uKVw8L091dERpcj4NCisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+eDg2XFpsaWJEbGwkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4NCisgICAgPExpbmtJbmNyZW1lbnRhbCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+dHJ1ZTwvTGlua0luY3JlbWVudGFsPg0KKyAgICA8R2VuZXJhdGVNYW5pZmVzdCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+ZmFsc2U8L0dlbmVyYXRlTWFuaWZlc3Q+DQorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiciPng4NlxabGliRGxsJChDb25maWd1cmF0aW9uKVw8L091dERpcj4NCisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfFdpbjMyJyI+eDg2XFpsaWJEbGwkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4NCisgICAgPExpbmtJbmNyZW1lbnRhbCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfFdpbjMyJyI+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4NCisgICAgPEdlbmVyYXRlTWFuaWZlc3QgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiciPmZhbHNlPC9HZW5lcmF0ZU1hbmlmZXN0Pg0KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPng4NlxabGliRGxsJChDb25maWd1cmF0aW9uKVw8L091dERpcj4NCisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj54ODZcWmxpYkRsbCQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPg0KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+DQorICAgIDxHZW5lcmF0ZU1hbmlmZXN0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPmZhbHNlPC9HZW5lcmF0ZU1hbmlmZXN0Pg0KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+eDY0XFpsaWJEbGwkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPg0KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+eDY0XFpsaWJEbGwkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4NCisgICAgPExpbmtJbmNyZW1lbnRhbCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4NCisgICAgPEdlbmVyYXRlTWFuaWZlc3QgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5mYWxzZTwvR2VuZXJhdGVNYW5pZmVzdD4NCisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIj5pYTY0XFpsaWJEbGwkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPg0KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciPmlhNjRcWmxpYkRsbCQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPg0KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4NCisgICAgPEdlbmVyYXRlTWFuaWZlc3QgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+ZmFsc2U8L0dlbmVyYXRlTWFuaWZlc3Q+DQorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXx4NjQnIj54NjRcWmxpYkRsbCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+DQorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXx4NjQnIj54NjRcWmxpYkRsbCQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPg0KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218eDY0JyI+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4NCisgICAgPEdlbmVyYXRlTWFuaWZlc3QgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXx4NjQnIj5mYWxzZTwvR2VuZXJhdGVNYW5pZmVzdD4NCisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0nIj5pYTY0XFpsaWJEbGwkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPg0KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSciPmlhNjRcWmxpYkRsbCQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPg0KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSciPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+DQorICAgIDxHZW5lcmF0ZU1hbmlmZXN0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSciPmZhbHNlPC9HZW5lcmF0ZU1hbmlmZXN0Pg0KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj54NjRcWmxpYkRsbCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+DQorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPng2NFxabGliRGxsJChDb25maWd1cmF0aW9uKVxUbXBcPC9JbnREaXI+DQorICAgIDxMaW5rSW5jcmVtZW50YWwgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+DQorICAgIDxHZW5lcmF0ZU1hbmlmZXN0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5mYWxzZTwvR2VuZXJhdGVNYW5pZmVzdD4NCisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPmlhNjRcWmxpYkRsbCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+DQorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIj5pYTY0XFpsaWJEbGwkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4NCisgICAgPExpbmtJbmNyZW1lbnRhbCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+DQorICAgIDxHZW5lcmF0ZU1hbmlmZXN0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyI+ZmFsc2U8L0dlbmVyYXRlTWFuaWZlc3Q+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0nIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtJyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfFdpbjMyJyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218V2luMzInIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfHg2NCciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfHg2NCciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4NCisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4NCisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4NCisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIC8+DQorICAgIDxUYXJnZXROYW1lIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj56bGlid2FwaTwvVGFyZ2V0TmFtZT4NCisgICAgPFRhcmdldE5hbWUgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiciPnpsaWJ3YXBpPC9UYXJnZXROYW1lPg0KKyAgICA8VGFyZ2V0TmFtZSBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj56bGlid2FwaTwvVGFyZ2V0TmFtZT4NCisgICAgPFRhcmdldE5hbWUgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj56bGlid2FwaTwvVGFyZ2V0TmFtZT4NCisgICAgPFRhcmdldE5hbWUgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXx4NjQnIj56bGlid2FwaTwvVGFyZ2V0TmFtZT4NCisgICAgPFRhcmdldE5hbWUgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPnpsaWJ3YXBpPC9UYXJnZXROYW1lPg0KKyAgPC9Qcm9wZXJ0eUdyb3VwPg0KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPg0KKyAgICA8TWlkbD4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0RFQlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8TWtUeXBMaWJDb21wYXRpYmxlPnRydWU8L01rVHlwTGliQ29tcGF0aWJsZT4NCisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4NCisgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+V2luMzI8L1RhcmdldEVudmlyb25tZW50Pg0KKyAgICAgIDxUeXBlTGlicmFyeU5hbWU+JChPdXREaXIpemxpYnZjLnRsYjwvVHlwZUxpYnJhcnlOYW1lPg0KKyAgICA8L01pZGw+DQorICAgIDxDbENvbXBpbGU+DQorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOy4uXC4uXG1hc214ODY7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX1dBUk5JTkdTO1pMSUJfV0lOQVBJO0FTTVY7QVNNSU5GOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8RXhjZXB0aW9uSGFuZGxpbmc+DQorICAgICAgPC9FeGNlcHRpb25IYW5kbGluZz4NCisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERlYnVnRExMPC9SdW50aW1lTGlicmFyeT4NCisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4NCisgICAgICA8UHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlPiQoSW50RGlyKXpsaWJ2Yy5wY2g8L1ByZWNvbXBpbGVkSGVhZGVyT3V0cHV0RmlsZT4NCisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPg0KKyAgICAgIDxPYmplY3RGaWxlTmFtZT4kKEludERpcik8L09iamVjdEZpbGVOYW1lPg0KKyAgICAgIDxQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4kKE91dERpcik8L1Byb2dyYW1EYXRhQmFzZUZpbGVOYW1lPg0KKyAgICAgIDxCcm93c2VJbmZvcm1hdGlvbj4NCisgICAgICA8L0Jyb3dzZUluZm9ybWF0aW9uPg0KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+DQorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+DQorICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+UHJvZ3JhbURhdGFiYXNlPC9EZWJ1Z0luZm9ybWF0aW9uRm9ybWF0Pg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPFJlc291cmNlQ29tcGlsZT4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0RFQlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8Q3VsdHVyZT4weDA0MGM8L0N1bHR1cmU+DQorICAgIDwvUmVzb3VyY2VDb21waWxlPg0KKyAgICA8TGluaz4NCisgICAgICA8QWRkaXRpb25hbE9wdGlvbnM+L01BQ0hJTkU6STM4NiAlKEFkZGl0aW9uYWxPcHRpb25zKTwvQWRkaXRpb25hbE9wdGlvbnM+DQorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Li5cLi5cbWFzbXg4NlxtYXRjaDY4Ni5vYmo7Li5cLi5cbWFzbXg4NlxpbmZmYXMzMi5vYmo7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4NCisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpcil6bGlid2FwaS5kbGw8L091dHB1dEZpbGU+DQorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+DQorICAgICAgPE1vZHVsZURlZmluaXRpb25GaWxlPi5cemxpYnZjLmRlZjwvTW9kdWxlRGVmaW5pdGlvbkZpbGU+DQorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+DQorICAgICAgPFByb2dyYW1EYXRhYmFzZUZpbGU+JChPdXREaXIpemxpYndhcGkucGRiPC9Qcm9ncmFtRGF0YWJhc2VGaWxlPg0KKyAgICAgIDxHZW5lcmF0ZU1hcEZpbGU+dHJ1ZTwvR2VuZXJhdGVNYXBGaWxlPg0KKyAgICAgIDxNYXBGaWxlTmFtZT4kKE91dERpcil6bGlid2FwaS5tYXA8L01hcEZpbGVOYW1lPg0KKyAgICAgIDxTdWJTeXN0ZW0+V2luZG93czwvU3ViU3lzdGVtPg0KKyAgICAgIDxSYW5kb21pemVkQmFzZUFkZHJlc3M+ZmFsc2U8L1JhbmRvbWl6ZWRCYXNlQWRkcmVzcz4NCisgICAgICA8RGF0YUV4ZWN1dGlvblByZXZlbnRpb24+DQorICAgICAgPC9EYXRhRXhlY3V0aW9uUHJldmVudGlvbj4NCisgICAgICA8SW1wb3J0TGlicmFyeT4kKE91dERpcil6bGlid2FwaS5saWI8L0ltcG9ydExpYnJhcnk+DQorICAgIDwvTGluaz4NCisgICAgPFByZUJ1aWxkRXZlbnQ+DQorICAgICAgPENvbW1hbmQ+Y2QgLi5cLi5cbWFzbXg4Ng0KK2JsZF9tbDMyLmJhdDwvQ29tbWFuZD4NCisgICAgPC9QcmVCdWlsZEV2ZW50Pg0KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiciPg0KKyAgICA8TWlkbD4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+TkRFQlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8TWtUeXBMaWJDb21wYXRpYmxlPnRydWU8L01rVHlwTGliQ29tcGF0aWJsZT4NCisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4NCisgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+V2luMzI8L1RhcmdldEVudmlyb25tZW50Pg0KKyAgICAgIDxUeXBlTGlicmFyeU5hbWU+JChPdXREaXIpemxpYnZjLnRsYjwvVHlwZUxpYnJhcnlOYW1lPg0KKyAgICA8L01pZGw+DQorICAgIDxDbENvbXBpbGU+DQorICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47Li5cLi5cbWFzbXg4NjslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fV0FSTklOR1M7WkxJQl9XSU5BUEk7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+DQorICAgICAgPEV4Y2VwdGlvbkhhbmRsaW5nPg0KKyAgICAgIDwvRXhjZXB0aW9uSGFuZGxpbmc+DQorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWRETEw8L1J1bnRpbWVMaWJyYXJ5Pg0KKyAgICAgIDxCdWZmZXJTZWN1cml0eUNoZWNrPmZhbHNlPC9CdWZmZXJTZWN1cml0eUNoZWNrPg0KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4NCisgICAgICA8UHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlPiQoSW50RGlyKXpsaWJ2Yy5wY2g8L1ByZWNvbXBpbGVkSGVhZGVyT3V0cHV0RmlsZT4NCisgICAgICA8QXNzZW1ibGVyT3V0cHV0PkFsbDwvQXNzZW1ibGVyT3V0cHV0Pg0KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+DQorICAgICAgPE9iamVjdEZpbGVOYW1lPiQoSW50RGlyKTwvT2JqZWN0RmlsZU5hbWU+DQorICAgICAgPFByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPiQoT3V0RGlyKTwvUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+DQorICAgICAgPEJyb3dzZUluZm9ybWF0aW9uPg0KKyAgICAgIDwvQnJvd3NlSW5mb3JtYXRpb24+DQorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4NCisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxSZXNvdXJjZUNvbXBpbGU+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPk5ERUJVRzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPEN1bHR1cmU+MHgwNDBjPC9DdWx0dXJlPg0KKyAgICA8L1Jlc291cmNlQ29tcGlsZT4NCisgICAgPExpbms+DQorICAgICAgPEFkZGl0aW9uYWxPcHRpb25zPi9NQUNISU5FOkkzODYgJShBZGRpdGlvbmFsT3B0aW9ucyk8L0FkZGl0aW9uYWxPcHRpb25zPg0KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKXpsaWJ3YXBpLmRsbDwvT3V0cHV0RmlsZT4NCisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4NCisgICAgICA8SWdub3JlQWxsRGVmYXVsdExpYnJhcmllcz5mYWxzZTwvSWdub3JlQWxsRGVmYXVsdExpYnJhcmllcz4NCisgICAgICA8TW9kdWxlRGVmaW5pdGlvbkZpbGU+Llx6bGlidmMuZGVmPC9Nb2R1bGVEZWZpbml0aW9uRmlsZT4NCisgICAgICA8UHJvZ3JhbURhdGFiYXNlRmlsZT4kKE91dERpcil6bGlid2FwaS5wZGI8L1Byb2dyYW1EYXRhYmFzZUZpbGU+DQorICAgICAgPEdlbmVyYXRlTWFwRmlsZT50cnVlPC9HZW5lcmF0ZU1hcEZpbGU+DQorICAgICAgPE1hcEZpbGVOYW1lPiQoT3V0RGlyKXpsaWJ3YXBpLm1hcDwvTWFwRmlsZU5hbWU+DQorICAgICAgPFN1YlN5c3RlbT5XaW5kb3dzPC9TdWJTeXN0ZW0+DQorICAgICAgPFJhbmRvbWl6ZWRCYXNlQWRkcmVzcz5mYWxzZTwvUmFuZG9taXplZEJhc2VBZGRyZXNzPg0KKyAgICAgIDxEYXRhRXhlY3V0aW9uUHJldmVudGlvbj4NCisgICAgICA8L0RhdGFFeGVjdXRpb25QcmV2ZW50aW9uPg0KKyAgICAgIDxJbXBvcnRMaWJyYXJ5PiQoT3V0RGlyKXpsaWJ3YXBpLmxpYjwvSW1wb3J0TGlicmFyeT4NCisgICAgPC9MaW5rPg0KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+DQorICAgIDxNaWRsPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5OREVCVUc7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxNa1R5cExpYkNvbXBhdGlibGU+dHJ1ZTwvTWtUeXBMaWJDb21wYXRpYmxlPg0KKyAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPg0KKyAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5XaW4zMjwvVGFyZ2V0RW52aXJvbm1lbnQ+DQorICAgICAgPFR5cGVMaWJyYXJ5TmFtZT4kKE91dERpcil6bGlidmMudGxiPC9UeXBlTGlicmFyeU5hbWU+DQorICAgIDwvTWlkbD4NCisgICAgPENsQ29tcGlsZT4NCisgICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtYXNteDg2OyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19XQVJOSU5HUztaTElCX1dJTkFQSTtBU01WO0FTTUlORjslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4NCisgICAgICA8RXhjZXB0aW9uSGFuZGxpbmc+DQorICAgICAgPC9FeGNlcHRpb25IYW5kbGluZz4NCisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+DQorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+DQorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPg0KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlck91dHB1dEZpbGU+JChJbnREaXIpemxpYnZjLnBjaDwvUHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlPg0KKyAgICAgIDxBc3NlbWJsZXJPdXRwdXQ+QWxsPC9Bc3NlbWJsZXJPdXRwdXQ+DQorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4NCisgICAgICA8T2JqZWN0RmlsZU5hbWU+JChJbnREaXIpPC9PYmplY3RGaWxlTmFtZT4NCisgICAgICA8UHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+JChPdXREaXIpPC9Qcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4NCisgICAgICA8QnJvd3NlSW5mb3JtYXRpb24+DQorICAgICAgPC9Ccm93c2VJbmZvcm1hdGlvbj4NCisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPg0KKyAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPFJlc291cmNlQ29tcGlsZT4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+TkRFQlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8Q3VsdHVyZT4weDA0MGM8L0N1bHR1cmU+DQorICAgIDwvUmVzb3VyY2VDb21waWxlPg0KKyAgICA8TGluaz4NCisgICAgICA8QWRkaXRpb25hbE9wdGlvbnM+L01BQ0hJTkU6STM4NiAlKEFkZGl0aW9uYWxPcHRpb25zKTwvQWRkaXRpb25hbE9wdGlvbnM+DQorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Li5cLi5cbWFzbXg4NlxtYXRjaDY4Ni5vYmo7Li5cLi5cbWFzbXg4NlxpbmZmYXMzMi5vYmo7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4NCisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpcil6bGlid2FwaS5kbGw8L091dHB1dEZpbGU+DQorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+DQorICAgICAgPElnbm9yZUFsbERlZmF1bHRMaWJyYXJpZXM+ZmFsc2U8L0lnbm9yZUFsbERlZmF1bHRMaWJyYXJpZXM+DQorICAgICAgPE1vZHVsZURlZmluaXRpb25GaWxlPi5cemxpYnZjLmRlZjwvTW9kdWxlRGVmaW5pdGlvbkZpbGU+DQorICAgICAgPFByb2dyYW1EYXRhYmFzZUZpbGU+JChPdXREaXIpemxpYndhcGkucGRiPC9Qcm9ncmFtRGF0YWJhc2VGaWxlPg0KKyAgICAgIDxHZW5lcmF0ZU1hcEZpbGU+dHJ1ZTwvR2VuZXJhdGVNYXBGaWxlPg0KKyAgICAgIDxNYXBGaWxlTmFtZT4kKE91dERpcil6bGlid2FwaS5tYXA8L01hcEZpbGVOYW1lPg0KKyAgICAgIDxTdWJTeXN0ZW0+V2luZG93czwvU3ViU3lzdGVtPg0KKyAgICAgIDxSYW5kb21pemVkQmFzZUFkZHJlc3M+ZmFsc2U8L1JhbmRvbWl6ZWRCYXNlQWRkcmVzcz4NCisgICAgICA8RGF0YUV4ZWN1dGlvblByZXZlbnRpb24+DQorICAgICAgPC9EYXRhRXhlY3V0aW9uUHJldmVudGlvbj4NCisgICAgICA8SW1wb3J0TGlicmFyeT4kKE91dERpcil6bGlid2FwaS5saWI8L0ltcG9ydExpYnJhcnk+DQorICAgIDwvTGluaz4NCisgICAgPFByZUJ1aWxkRXZlbnQ+DQorICAgICAgPENvbW1hbmQ+Y2QgLi5cLi5cbWFzbXg4Ng0KK2JsZF9tbDMyLmJhdDwvQ29tbWFuZD4NCisgICAgPC9QcmVCdWlsZEV2ZW50Pg0KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4NCisgICAgPE1pZGw+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9ERUJVRzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPE1rVHlwTGliQ29tcGF0aWJsZT50cnVlPC9Na1R5cExpYkNvbXBhdGlibGU+DQorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+DQorICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+DQorICAgICAgPFR5cGVMaWJyYXJ5TmFtZT4kKE91dERpcil6bGlidmMudGxiPC9UeXBlTGlicmFyeU5hbWU+DQorICAgIDwvTWlkbD4NCisgICAgPENsQ29tcGlsZT4NCisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47Li5cLi5cbWFzbXg4NjslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fV0FSTklOR1M7WkxJQl9XSU5BUEk7QVNNVjtBU01JTkY7V0lONjQ7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxFeGNlcHRpb25IYW5kbGluZz4NCisgICAgICA8L0V4Y2VwdGlvbkhhbmRsaW5nPg0KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWdETEw8L1J1bnRpbWVMaWJyYXJ5Pg0KKyAgICAgIDxCdWZmZXJTZWN1cml0eUNoZWNrPmZhbHNlPC9CdWZmZXJTZWN1cml0eUNoZWNrPg0KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlck91dHB1dEZpbGU+JChJbnREaXIpemxpYnZjLnBjaDwvUHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlPg0KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+DQorICAgICAgPE9iamVjdEZpbGVOYW1lPiQoSW50RGlyKTwvT2JqZWN0RmlsZU5hbWU+DQorICAgICAgPFByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPiQoT3V0RGlyKTwvUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+DQorICAgICAgPEJyb3dzZUluZm9ybWF0aW9uPg0KKyAgICAgIDwvQnJvd3NlSW5mb3JtYXRpb24+DQorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4NCisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4NCisgICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5Qcm9ncmFtRGF0YWJhc2U8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8UmVzb3VyY2VDb21waWxlPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fREVCVUc7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxDdWx0dXJlPjB4MDQwYzwvQ3VsdHVyZT4NCisgICAgPC9SZXNvdXJjZUNvbXBpbGU+DQorICAgIDxMaW5rPg0KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPi4uXC4uXG1hc214NjRcZ3ZtYXQ2NC5vYmo7Li5cLi5cbWFzbXg2NFxpbmZmYXN4NjQub2JqOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+DQorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpemxpYndhcGkuZGxsPC9PdXRwdXRGaWxlPg0KKyAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPg0KKyAgICAgIDxNb2R1bGVEZWZpbml0aW9uRmlsZT4uXHpsaWJ2Yy5kZWY8L01vZHVsZURlZmluaXRpb25GaWxlPg0KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPg0KKyAgICAgIDxQcm9ncmFtRGF0YWJhc2VGaWxlPiQoT3V0RGlyKXpsaWJ3YXBpLnBkYjwvUHJvZ3JhbURhdGFiYXNlRmlsZT4NCisgICAgICA8R2VuZXJhdGVNYXBGaWxlPnRydWU8L0dlbmVyYXRlTWFwRmlsZT4NCisgICAgICA8TWFwRmlsZU5hbWU+JChPdXREaXIpemxpYndhcGkubWFwPC9NYXBGaWxlTmFtZT4NCisgICAgICA8U3ViU3lzdGVtPldpbmRvd3M8L1N1YlN5c3RlbT4NCisgICAgICA8SW1wb3J0TGlicmFyeT4kKE91dERpcil6bGlid2FwaS5saWI8L0ltcG9ydExpYnJhcnk+DQorICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4NCisgICAgPC9MaW5rPg0KKyAgICA8UHJlQnVpbGRFdmVudD4NCisgICAgICA8Q29tbWFuZD5jZCAuLlwuLlxjb250cmliXG1hc214NjQNCitibGRfbWw2NC5iYXQ8L0NvbW1hbmQ+DQorICAgIDwvUHJlQnVpbGRFdmVudD4NCisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4NCisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciPg0KKyAgICA8TWlkbD4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0RFQlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8TWtUeXBMaWJDb21wYXRpYmxlPnRydWU8L01rVHlwTGliQ29tcGF0aWJsZT4NCisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4NCisgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+SXRhbml1bTwvVGFyZ2V0RW52aXJvbm1lbnQ+DQorICAgICAgPFR5cGVMaWJyYXJ5TmFtZT4kKE91dERpcil6bGlidmMudGxiPC9UeXBlTGlicmFyeU5hbWU+DQorICAgIDwvTWlkbD4NCisgICAgPENsQ29tcGlsZT4NCisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47Li5cLi5cbWFzbXg4NjslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fV0FSTklOR1M7WkxJQl9XSU5BUEk7V0lONjQ7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxFeGNlcHRpb25IYW5kbGluZz4NCisgICAgICA8L0V4Y2VwdGlvbkhhbmRsaW5nPg0KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWdETEw8L1J1bnRpbWVMaWJyYXJ5Pg0KKyAgICAgIDxCdWZmZXJTZWN1cml0eUNoZWNrPmZhbHNlPC9CdWZmZXJTZWN1cml0eUNoZWNrPg0KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlck91dHB1dEZpbGU+JChJbnREaXIpemxpYnZjLnBjaDwvUHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlPg0KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+DQorICAgICAgPE9iamVjdEZpbGVOYW1lPiQoSW50RGlyKTwvT2JqZWN0RmlsZU5hbWU+DQorICAgICAgPFByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPiQoT3V0RGlyKTwvUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+DQorICAgICAgPEJyb3dzZUluZm9ybWF0aW9uPg0KKyAgICAgIDwvQnJvd3NlSW5mb3JtYXRpb24+DQorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4NCisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4NCisgICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5Qcm9ncmFtRGF0YWJhc2U8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8UmVzb3VyY2VDb21waWxlPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fREVCVUc7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxDdWx0dXJlPjB4MDQwYzwvQ3VsdHVyZT4NCisgICAgPC9SZXNvdXJjZUNvbXBpbGU+DQorICAgIDxMaW5rPg0KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKXpsaWJ3YXBpLmRsbDwvT3V0cHV0RmlsZT4NCisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4NCisgICAgICA8TW9kdWxlRGVmaW5pdGlvbkZpbGU+Llx6bGlidmMuZGVmPC9Nb2R1bGVEZWZpbml0aW9uRmlsZT4NCisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4NCisgICAgICA8UHJvZ3JhbURhdGFiYXNlRmlsZT4kKE91dERpcil6bGlid2FwaS5wZGI8L1Byb2dyYW1EYXRhYmFzZUZpbGU+DQorICAgICAgPEdlbmVyYXRlTWFwRmlsZT50cnVlPC9HZW5lcmF0ZU1hcEZpbGU+DQorICAgICAgPE1hcEZpbGVOYW1lPiQoT3V0RGlyKXpsaWJ3YXBpLm1hcDwvTWFwRmlsZU5hbWU+DQorICAgICAgPFN1YlN5c3RlbT5XaW5kb3dzPC9TdWJTeXN0ZW0+DQorICAgICAgPEltcG9ydExpYnJhcnk+JChPdXREaXIpemxpYndhcGkubGliPC9JbXBvcnRMaWJyYXJ5Pg0KKyAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVJQTY0PC9UYXJnZXRNYWNoaW5lPg0KKyAgICA8L0xpbms+DQorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfHg2NCciPg0KKyAgICA8TWlkbD4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+TkRFQlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8TWtUeXBMaWJDb21wYXRpYmxlPnRydWU8L01rVHlwTGliQ29tcGF0aWJsZT4NCisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4NCisgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4NCisgICAgICA8VHlwZUxpYnJhcnlOYW1lPiQoT3V0RGlyKXpsaWJ2Yy50bGI8L1R5cGVMaWJyYXJ5TmFtZT4NCisgICAgPC9NaWRsPg0KKyAgICA8Q2xDb21waWxlPg0KKyAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOy4uXC4uXG1hc214ODY7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX1dBUk5JTkdTO1pMSUJfV0lOQVBJO1dJTjY0OyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPg0KKyAgICAgIDxFeGNlcHRpb25IYW5kbGluZz4NCisgICAgICA8L0V4Y2VwdGlvbkhhbmRsaW5nPg0KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRExMPC9SdW50aW1lTGlicmFyeT4NCisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4NCisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+DQorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyT3V0cHV0RmlsZT4kKEludERpcil6bGlidmMucGNoPC9QcmVjb21waWxlZEhlYWRlck91dHB1dEZpbGU+DQorICAgICAgPEFzc2VtYmxlck91dHB1dD5BbGw8L0Fzc2VtYmxlck91dHB1dD4NCisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPg0KKyAgICAgIDxPYmplY3RGaWxlTmFtZT4kKEludERpcik8L09iamVjdEZpbGVOYW1lPg0KKyAgICAgIDxQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4kKE91dERpcik8L1Byb2dyYW1EYXRhQmFzZUZpbGVOYW1lPg0KKyAgICAgIDxCcm93c2VJbmZvcm1hdGlvbj4NCisgICAgICA8L0Jyb3dzZUluZm9ybWF0aW9uPg0KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+DQorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8UmVzb3VyY2VDb21waWxlPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5OREVCVUc7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxDdWx0dXJlPjB4MDQwYzwvQ3VsdHVyZT4NCisgICAgPC9SZXNvdXJjZUNvbXBpbGU+DQorICAgIDxMaW5rPg0KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKXpsaWJ3YXBpLmRsbDwvT3V0cHV0RmlsZT4NCisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4NCisgICAgICA8SWdub3JlQWxsRGVmYXVsdExpYnJhcmllcz5mYWxzZTwvSWdub3JlQWxsRGVmYXVsdExpYnJhcmllcz4NCisgICAgICA8TW9kdWxlRGVmaW5pdGlvbkZpbGU+Llx6bGlidmMuZGVmPC9Nb2R1bGVEZWZpbml0aW9uRmlsZT4NCisgICAgICA8UHJvZ3JhbURhdGFiYXNlRmlsZT4kKE91dERpcil6bGlid2FwaS5wZGI8L1Byb2dyYW1EYXRhYmFzZUZpbGU+DQorICAgICAgPEdlbmVyYXRlTWFwRmlsZT50cnVlPC9HZW5lcmF0ZU1hcEZpbGU+DQorICAgICAgPE1hcEZpbGVOYW1lPiQoT3V0RGlyKXpsaWJ3YXBpLm1hcDwvTWFwRmlsZU5hbWU+DQorICAgICAgPFN1YlN5c3RlbT5XaW5kb3dzPC9TdWJTeXN0ZW0+DQorICAgICAgPEltcG9ydExpYnJhcnk+JChPdXREaXIpemxpYndhcGkubGliPC9JbXBvcnRMaWJyYXJ5Pg0KKyAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVYNjQ8L1RhcmdldE1hY2hpbmU+DQorICAgIDwvTGluaz4NCisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4NCisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSciPg0KKyAgICA8TWlkbD4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+TkRFQlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8TWtUeXBMaWJDb21wYXRpYmxlPnRydWU8L01rVHlwTGliQ29tcGF0aWJsZT4NCisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4NCisgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+SXRhbml1bTwvVGFyZ2V0RW52aXJvbm1lbnQ+DQorICAgICAgPFR5cGVMaWJyYXJ5TmFtZT4kKE91dERpcil6bGlidmMudGxiPC9UeXBlTGlicmFyeU5hbWU+DQorICAgIDwvTWlkbD4NCisgICAgPENsQ29tcGlsZT4NCisgICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtYXNteDg2OyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19XQVJOSU5HUztaTElCX1dJTkFQSTtXSU42NDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4NCisgICAgICA8RXhjZXB0aW9uSGFuZGxpbmc+DQorICAgICAgPC9FeGNlcHRpb25IYW5kbGluZz4NCisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERMTDwvUnVudGltZUxpYnJhcnk+DQorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+DQorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPg0KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlck91dHB1dEZpbGU+JChJbnREaXIpemxpYnZjLnBjaDwvUHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlPg0KKyAgICAgIDxBc3NlbWJsZXJPdXRwdXQ+QWxsPC9Bc3NlbWJsZXJPdXRwdXQ+DQorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4NCisgICAgICA8T2JqZWN0RmlsZU5hbWU+JChJbnREaXIpPC9PYmplY3RGaWxlTmFtZT4NCisgICAgICA8UHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+JChPdXREaXIpPC9Qcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4NCisgICAgICA8QnJvd3NlSW5mb3JtYXRpb24+DQorICAgICAgPC9Ccm93c2VJbmZvcm1hdGlvbj4NCisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPg0KKyAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPFJlc291cmNlQ29tcGlsZT4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+TkRFQlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8Q3VsdHVyZT4weDA0MGM8L0N1bHR1cmU+DQorICAgIDwvUmVzb3VyY2VDb21waWxlPg0KKyAgICA8TGluaz4NCisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpcil6bGlid2FwaS5kbGw8L091dHB1dEZpbGU+DQorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+DQorICAgICAgPElnbm9yZUFsbERlZmF1bHRMaWJyYXJpZXM+ZmFsc2U8L0lnbm9yZUFsbERlZmF1bHRMaWJyYXJpZXM+DQorICAgICAgPE1vZHVsZURlZmluaXRpb25GaWxlPi5cemxpYnZjLmRlZjwvTW9kdWxlRGVmaW5pdGlvbkZpbGU+DQorICAgICAgPFByb2dyYW1EYXRhYmFzZUZpbGU+JChPdXREaXIpemxpYndhcGkucGRiPC9Qcm9ncmFtRGF0YWJhc2VGaWxlPg0KKyAgICAgIDxHZW5lcmF0ZU1hcEZpbGU+dHJ1ZTwvR2VuZXJhdGVNYXBGaWxlPg0KKyAgICAgIDxNYXBGaWxlTmFtZT4kKE91dERpcil6bGlid2FwaS5tYXA8L01hcEZpbGVOYW1lPg0KKyAgICAgIDxTdWJTeXN0ZW0+V2luZG93czwvU3ViU3lzdGVtPg0KKyAgICAgIDxJbXBvcnRMaWJyYXJ5PiQoT3V0RGlyKXpsaWJ3YXBpLmxpYjwvSW1wb3J0TGlicmFyeT4NCisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lSUE2NDwvVGFyZ2V0TWFjaGluZT4NCisgICAgPC9MaW5rPg0KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPg0KKyAgICA8TWlkbD4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+TkRFQlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8TWtUeXBMaWJDb21wYXRpYmxlPnRydWU8L01rVHlwTGliQ29tcGF0aWJsZT4NCisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4NCisgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4NCisgICAgICA8VHlwZUxpYnJhcnlOYW1lPiQoT3V0RGlyKXpsaWJ2Yy50bGI8L1R5cGVMaWJyYXJ5TmFtZT4NCisgICAgPC9NaWRsPg0KKyAgICA8Q2xDb21waWxlPg0KKyAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOy4uXC4uXG1hc214ODY7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX1dBUk5JTkdTO1pMSUJfV0lOQVBJO0FTTVY7QVNNSU5GO1dJTjY0OyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPg0KKyAgICAgIDxFeGNlcHRpb25IYW5kbGluZz4NCisgICAgICA8L0V4Y2VwdGlvbkhhbmRsaW5nPg0KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRExMPC9SdW50aW1lTGlicmFyeT4NCisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4NCisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+DQorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyT3V0cHV0RmlsZT4kKEludERpcil6bGlidmMucGNoPC9QcmVjb21waWxlZEhlYWRlck91dHB1dEZpbGU+DQorICAgICAgPEFzc2VtYmxlck91dHB1dD5BbGw8L0Fzc2VtYmxlck91dHB1dD4NCisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPg0KKyAgICAgIDxPYmplY3RGaWxlTmFtZT4kKEludERpcik8L09iamVjdEZpbGVOYW1lPg0KKyAgICAgIDxQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4kKE91dERpcik8L1Byb2dyYW1EYXRhQmFzZUZpbGVOYW1lPg0KKyAgICAgIDxCcm93c2VJbmZvcm1hdGlvbj4NCisgICAgICA8L0Jyb3dzZUluZm9ybWF0aW9uPg0KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+DQorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8UmVzb3VyY2VDb21waWxlPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5OREVCVUc7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxDdWx0dXJlPjB4MDQwYzwvQ3VsdHVyZT4NCisgICAgPC9SZXNvdXJjZUNvbXBpbGU+DQorICAgIDxMaW5rPg0KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPi4uXC4uXG1hc214NjRcZ3ZtYXQ2NC5vYmo7Li5cLi5cbWFzbXg2NFxpbmZmYXN4NjQub2JqOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+DQorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpemxpYndhcGkuZGxsPC9PdXRwdXRGaWxlPg0KKyAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPg0KKyAgICAgIDxJZ25vcmVBbGxEZWZhdWx0TGlicmFyaWVzPmZhbHNlPC9JZ25vcmVBbGxEZWZhdWx0TGlicmFyaWVzPg0KKyAgICAgIDxNb2R1bGVEZWZpbml0aW9uRmlsZT4uXHpsaWJ2Yy5kZWY8L01vZHVsZURlZmluaXRpb25GaWxlPg0KKyAgICAgIDxQcm9ncmFtRGF0YWJhc2VGaWxlPiQoT3V0RGlyKXpsaWJ3YXBpLnBkYjwvUHJvZ3JhbURhdGFiYXNlRmlsZT4NCisgICAgICA8R2VuZXJhdGVNYXBGaWxlPnRydWU8L0dlbmVyYXRlTWFwRmlsZT4NCisgICAgICA8TWFwRmlsZU5hbWU+JChPdXREaXIpemxpYndhcGkubWFwPC9NYXBGaWxlTmFtZT4NCisgICAgICA8U3ViU3lzdGVtPldpbmRvd3M8L1N1YlN5c3RlbT4NCisgICAgICA8SW1wb3J0TGlicmFyeT4kKE91dERpcil6bGlid2FwaS5saWI8L0ltcG9ydExpYnJhcnk+DQorICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4NCisgICAgPC9MaW5rPg0KKyAgICA8UHJlQnVpbGRFdmVudD4NCisgICAgICA8Q29tbWFuZD5jZCAuLlwuLlxtYXNteDY0DQorYmxkX21sNjQuYmF0PC9Db21tYW5kPg0KKyAgICA8L1ByZUJ1aWxkRXZlbnQ+DQorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPg0KKyAgICA8TWlkbD4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+TkRFQlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8TWtUeXBMaWJDb21wYXRpYmxlPnRydWU8L01rVHlwTGliQ29tcGF0aWJsZT4NCisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4NCisgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+SXRhbml1bTwvVGFyZ2V0RW52aXJvbm1lbnQ+DQorICAgICAgPFR5cGVMaWJyYXJ5TmFtZT4kKE91dERpcil6bGlidmMudGxiPC9UeXBlTGlicmFyeU5hbWU+DQorICAgIDwvTWlkbD4NCisgICAgPENsQ29tcGlsZT4NCisgICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtYXNteDg2OyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19XQVJOSU5HUztaTElCX1dJTkFQSTtXSU42NDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4NCisgICAgICA8RXhjZXB0aW9uSGFuZGxpbmc+DQorICAgICAgPC9FeGNlcHRpb25IYW5kbGluZz4NCisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERMTDwvUnVudGltZUxpYnJhcnk+DQorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+DQorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPg0KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlck91dHB1dEZpbGU+JChJbnREaXIpemxpYnZjLnBjaDwvUHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlPg0KKyAgICAgIDxBc3NlbWJsZXJPdXRwdXQ+QWxsPC9Bc3NlbWJsZXJPdXRwdXQ+DQorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4NCisgICAgICA8T2JqZWN0RmlsZU5hbWU+JChJbnREaXIpPC9PYmplY3RGaWxlTmFtZT4NCisgICAgICA8UHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+JChPdXREaXIpPC9Qcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4NCisgICAgICA8QnJvd3NlSW5mb3JtYXRpb24+DQorICAgICAgPC9Ccm93c2VJbmZvcm1hdGlvbj4NCisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPg0KKyAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPFJlc291cmNlQ29tcGlsZT4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+TkRFQlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8Q3VsdHVyZT4weDA0MGM8L0N1bHR1cmU+DQorICAgIDwvUmVzb3VyY2VDb21waWxlPg0KKyAgICA8TGluaz4NCisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpcil6bGlid2FwaS5kbGw8L091dHB1dEZpbGU+DQorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+DQorICAgICAgPElnbm9yZUFsbERlZmF1bHRMaWJyYXJpZXM+ZmFsc2U8L0lnbm9yZUFsbERlZmF1bHRMaWJyYXJpZXM+DQorICAgICAgPE1vZHVsZURlZmluaXRpb25GaWxlPi5cemxpYnZjLmRlZjwvTW9kdWxlRGVmaW5pdGlvbkZpbGU+DQorICAgICAgPFByb2dyYW1EYXRhYmFzZUZpbGU+JChPdXREaXIpemxpYndhcGkucGRiPC9Qcm9ncmFtRGF0YWJhc2VGaWxlPg0KKyAgICAgIDxHZW5lcmF0ZU1hcEZpbGU+dHJ1ZTwvR2VuZXJhdGVNYXBGaWxlPg0KKyAgICAgIDxNYXBGaWxlTmFtZT4kKE91dERpcil6bGlid2FwaS5tYXA8L01hcEZpbGVOYW1lPg0KKyAgICAgIDxTdWJTeXN0ZW0+V2luZG93czwvU3ViU3lzdGVtPg0KKyAgICAgIDxJbXBvcnRMaWJyYXJ5PiQoT3V0RGlyKXpsaWJ3YXBpLmxpYjwvSW1wb3J0TGlicmFyeT4NCisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lSUE2NDwvVGFyZ2V0TWFjaGluZT4NCisgICAgPC9MaW5rPg0KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KKyAgPEl0ZW1Hcm91cD4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxhZGxlcjMyLmMiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cY29tcHJlc3MuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxjcmMzMi5jIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXGRlZmxhdGUuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxnemNsb3NlLmMiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cZ3psaWIuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxnenJlYWQuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxnendyaXRlLmMiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5caW5mYmFjay5jIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXG1hc214NjRcaW5mZmFzODY2NC5jIj4NCisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+DQorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4NCisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+DQorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4NCisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4NCisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXGluZmZhc3QuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxpbmZsYXRlLmMiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5caW5mdHJlZXMuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxtaW5pemlwXGlvYXBpLmMiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbWluaXppcFxpb3dpbjMyLmMiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cdHJlZXMuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlx1bmNvbXByLmMiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbWluaXppcFx1bnppcC5jIj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyI+WkxJQl9JTlRFUk5BTDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+WkxJQl9JTlRFUk5BTDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5aTElCX0lOVEVSTkFMOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbWluaXppcFx6aXAuYyI+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPlpMSUJfSU5URVJOQUw7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPlpMSUJfSU5URVJOQUw7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+WkxJQl9JTlRFUk5BTDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHp1dGlsLmMiIC8+DQorICA8L0l0ZW1Hcm91cD4NCisgIDxJdGVtR3JvdXA+DQorICAgIDxSZXNvdXJjZUNvbXBpbGUgSW5jbHVkZT0iemxpYi5yYyIgLz4NCisgIDwvSXRlbUdyb3VwPg0KKyAgPEl0ZW1Hcm91cD4NCisgICAgPE5vbmUgSW5jbHVkZT0iemxpYnZjLmRlZiIgLz4NCisgIDwvSXRlbUdyb3VwPg0KKyAgPEl0ZW1Hcm91cD4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlwuLlxkZWZsYXRlLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cLi5caW5mYmxvY2suaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlwuLlxpbmZjb2Rlcy5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXC4uXGluZmZhc3QuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlwuLlxpbmZ0cmVlcy5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXC4uXGluZnV0aWwuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlwuLlx6Y29uZi5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXC4uXHpsaWIuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlwuLlx6dXRpbC5oIiAvPg0KKyAgPC9JdGVtR3JvdXA+DQorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPg0KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4NCisgIDwvSW1wb3J0R3JvdXA+DQorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxMi9taW5pdW56LnZjeHByb2ogYi9zcmMvY29udHJpYi92c3R1ZGlvL3ZjMTIvbWluaXVuei52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4OGFjN2YKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29udHJpYi92c3R1ZGlvL3ZjMTIvbWluaXVuei52Y3hwcm9qCkBAIC0wLDAgKzEsMzE2IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjEyLjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xJdGFuaXVtIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPkl0YW5pdW08L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfEl0YW5pdW0iPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5JdGFuaXVtPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICA8L0l0ZW1Hcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzODJBfTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTIwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djEyMDwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxMjA8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djEyMDwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djEyMDwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxMjA8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8UHJvcGVydHlHcm91cD4KKyAgICA8X1Byb2plY3RGaWxlVmVyc2lvbj4xMC4wLjMwMTI4LjE8L19Qcm9qZWN0RmlsZVZlcnNpb24+CisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+eDg2XE1pbmlVbnppcCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+CisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+eDg2XE1pbmlVbnppcCQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPgorICAgIDxMaW5rSW5jcmVtZW50YWwgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgICA8R2VuZXJhdGVNYW5pZmVzdCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+ZmFsc2U8L0dlbmVyYXRlTWFuaWZlc3Q+CisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj54ODZcTWluaVVuemlwJChDb25maWd1cmF0aW9uKVw8L091dERpcj4KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPng4NlxNaW5pVW56aXAkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgICAgPEdlbmVyYXRlTWFuaWZlc3QgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+ZmFsc2U8L0dlbmVyYXRlTWFuaWZlc3Q+CisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPng2NFxNaW5pVW56aXAkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPgorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj54NjRcTWluaVVuemlwJChDb25maWd1cmF0aW9uKVxUbXBcPC9JbnREaXI+CisgICAgPExpbmtJbmNyZW1lbnRhbCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgICA8R2VuZXJhdGVNYW5pZmVzdCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPmZhbHNlPC9HZW5lcmF0ZU1hbmlmZXN0PgorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+aWE2NFxNaW5pVW56aXAkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPgorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+aWE2NFxNaW5pVW56aXAkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgICA8R2VuZXJhdGVNYW5pZmVzdCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIj5mYWxzZTwvR2VuZXJhdGVNYW5pZmVzdD4KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj54NjRcTWluaVVuemlwJChDb25maWd1cmF0aW9uKVw8L091dERpcj4KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj54NjRcTWluaVVuemlwJChDb25maWd1cmF0aW9uKVxUbXBcPC9JbnREaXI+CisgICAgPExpbmtJbmNyZW1lbnRhbCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgICA8R2VuZXJhdGVNYW5pZmVzdCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+ZmFsc2U8L0dlbmVyYXRlTWFuaWZlc3Q+CisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPmlhNjRcTWluaVVuemlwJChDb25maWd1cmF0aW9uKVw8L091dERpcj4KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyI+aWE2NFxNaW5pVW56aXAkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyI+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgICA8R2VuZXJhdGVNYW5pZmVzdCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPmZhbHNlPC9HZW5lcmF0ZU1hbmlmZXN0PgorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+CisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+CisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+CisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiAvPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47Li5cLi5cbWluaXppcDslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO1pMSUJfV0lOQVBJO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8TWluaW1hbFJlYnVpbGQ+dHJ1ZTwvTWluaW1hbFJlYnVpbGQ+CisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkRlZmF1bHQ8L0Jhc2ljUnVudGltZUNoZWNrcz4KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWdETEw8L1J1bnRpbWVMaWJyYXJ5PgorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5Qcm9ncmFtRGF0YWJhc2U8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz54ODZcWmxpYkRsbERlYnVnXHpsaWJ3YXBpLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpbWluaXVuei5leGU8L091dHB1dEZpbGU+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxQcm9ncmFtRGF0YWJhc2VGaWxlPiQoT3V0RGlyKW1pbml1bnoucGRiPC9Qcm9ncmFtRGF0YWJhc2VGaWxlPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8UmFuZG9taXplZEJhc2VBZGRyZXNzPmZhbHNlPC9SYW5kb21pemVkQmFzZUFkZHJlc3M+CisgICAgICA8RGF0YUV4ZWN1dGlvblByZXZlbnRpb24+CisgICAgICA8L0RhdGFFeGVjdXRpb25QcmV2ZW50aW9uPgorICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg4NjwvVGFyZ2V0TWFjaGluZT4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgorICAgICAgPE9taXRGcmFtZVBvaW50ZXJzPnRydWU8L09taXRGcmFtZVBvaW50ZXJzPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47Li5cLi5cbWluaXppcDslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO1pMSUJfV0lOQVBJO05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5EZWZhdWx0PC9CYXNpY1J1bnRpbWVDaGVja3M+CisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+CisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPng4NlxabGliRGxsUmVsZWFzZVx6bGlid2FwaS5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKW1pbml1bnouZXhlPC9PdXRwdXRGaWxlPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxSYW5kb21pemVkQmFzZUFkZHJlc3M+ZmFsc2U8L1JhbmRvbWl6ZWRCYXNlQWRkcmVzcz4KKyAgICAgIDxEYXRhRXhlY3V0aW9uUHJldmVudGlvbj4KKyAgICAgIDwvRGF0YUV4ZWN1dGlvblByZXZlbnRpb24+CisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDg2PC9UYXJnZXRNYWNoaW5lPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxNaWRsPgorICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+CisgICAgPC9NaWRsPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtaW5pemlwOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7WkxJQl9XSU5BUEk7X0RFQlVHO19DT05TT0xFO1dJTjY0OyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxNaW5pbWFsUmVidWlsZD50cnVlPC9NaW5pbWFsUmVidWlsZD4KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RGVmYXVsdDwvQmFzaWNSdW50aW1lQ2hlY2tzPgorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1Z0RMTDwvUnVudGltZUxpYnJhcnk+CisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPng2NFxabGliRGxsRGVidWdcemxpYndhcGkubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpciltaW5pdW56LmV4ZTwvT3V0cHV0RmlsZT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFByb2dyYW1EYXRhYmFzZUZpbGU+JChPdXREaXIpbWluaXVuei5wZGI8L1Byb2dyYW1EYXRhYmFzZUZpbGU+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVYNjQ8L1RhcmdldE1hY2hpbmU+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciPgorICAgIDxNaWRsPgorICAgICAgPFRhcmdldEVudmlyb25tZW50Pkl0YW5pdW08L1RhcmdldEVudmlyb25tZW50PgorICAgIDwvTWlkbD4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47Li5cLi5cbWluaXppcDslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO1pMSUJfV0lOQVBJO19ERUJVRztfQ09OU09MRTtXSU42NDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8TWluaW1hbFJlYnVpbGQ+dHJ1ZTwvTWluaW1hbFJlYnVpbGQ+CisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkRlZmF1bHQ8L0Jhc2ljUnVudGltZUNoZWNrcz4KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWdETEw8L1J1bnRpbWVMaWJyYXJ5PgorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5Qcm9ncmFtRGF0YWJhc2U8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5pYTY0XFpsaWJEbGxEZWJ1Z1x6bGlid2FwaS5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKW1pbml1bnouZXhlPC9PdXRwdXRGaWxlPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8UHJvZ3JhbURhdGFiYXNlRmlsZT4kKE91dERpciltaW5pdW56LnBkYjwvUHJvZ3JhbURhdGFiYXNlRmlsZT4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZUlBNjQ8L1RhcmdldE1hY2hpbmU+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8TWlkbD4KKyAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgorICAgIDwvTWlkbD4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+CisgICAgICA8T21pdEZyYW1lUG9pbnRlcnM+dHJ1ZTwvT21pdEZyYW1lUG9pbnRlcnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtaW5pemlwOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7WkxJQl9XSU5BUEk7TkRFQlVHO19DT05TT0xFO1dJTjY0OyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+CisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkRlZmF1bHQ8L0Jhc2ljUnVudGltZUNoZWNrcz4KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRExMPC9SdW50aW1lTGlicmFyeT4KKyAgICAgIDxCdWZmZXJTZWN1cml0eUNoZWNrPmZhbHNlPC9CdWZmZXJTZWN1cml0eUNoZWNrPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+UHJvZ3JhbURhdGFiYXNlPC9EZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+eDY0XFpsaWJEbGxSZWxlYXNlXHpsaWJ3YXBpLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpbWluaXVuei5leGU8L091dHB1dEZpbGU+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIj4KKyAgICA8TWlkbD4KKyAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5JdGFuaXVtPC9UYXJnZXRFbnZpcm9ubWVudD4KKyAgICA8L01pZGw+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgorICAgICAgPE9taXRGcmFtZVBvaW50ZXJzPnRydWU8L09taXRGcmFtZVBvaW50ZXJzPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47Li5cLi5cbWluaXppcDslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO1pMSUJfV0lOQVBJO05ERUJVRztfQ09OU09MRTtXSU42NDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5EZWZhdWx0PC9CYXNpY1J1bnRpbWVDaGVja3M+CisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERMTDwvUnVudGltZUxpYnJhcnk+CisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmlhNjRcWmxpYkRsbFJlbGVhc2VcemxpYndhcGkubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpciltaW5pdW56LmV4ZTwvT3V0cHV0RmlsZT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lSUE2NDwvVGFyZ2V0TWFjaGluZT4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXG1pbml6aXBcbWluaXVuei5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJ6bGlidmMudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57OGZkODI2ZjgtMzczOS00NGU2LThjYzgtOTk3MTIyZTUzYjhkfTwvUHJvamVjdD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxMi9taW5pemlwLnZjeHByb2ogYi9zcmMvY29udHJpYi92c3R1ZGlvL3ZjMTIvbWluaXppcC52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxZjIzOWMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29udHJpYi92c3R1ZGlvL3ZjMTIvbWluaXppcC52Y3hwcm9qCkBAIC0wLDAgKzEsMzEzIEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjEyLjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xJdGFuaXVtIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPkl0YW5pdW08L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfEl0YW5pdW0iPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5JdGFuaXVtPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICA8L0l0ZW1Hcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57NDhDREQ5REMtRTA5Ri00MTM1LTlDMEMtNEZFNTBDM0M2NTRCfTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTIwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djEyMDwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxMjA8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djEyMDwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djEyMDwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxMjA8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8UHJvcGVydHlHcm91cD4KKyAgICA8X1Byb2plY3RGaWxlVmVyc2lvbj4xMC4wLjMwMTI4LjE8L19Qcm9qZWN0RmlsZVZlcnNpb24+CisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+eDg2XE1pbmlaaXAkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPgorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPng4NlxNaW5pWmlwJChDb25maWd1cmF0aW9uKVxUbXBcPC9JbnREaXI+CisgICAgPExpbmtJbmNyZW1lbnRhbCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICAgIDxHZW5lcmF0ZU1hbmlmZXN0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5mYWxzZTwvR2VuZXJhdGVNYW5pZmVzdD4KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPng4NlxNaW5pWmlwJChDb25maWd1cmF0aW9uKVw8L091dERpcj4KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPng4NlxNaW5pWmlwJChDb25maWd1cmF0aW9uKVxUbXBcPC9JbnREaXI+CisgICAgPExpbmtJbmNyZW1lbnRhbCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj54NjRcJChDb25maWd1cmF0aW9uKVw8L091dERpcj4KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+eDY0XCQoQ29uZmlndXJhdGlvbilcPC9JbnREaXI+CisgICAgPExpbmtJbmNyZW1lbnRhbCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgICA8R2VuZXJhdGVNYW5pZmVzdCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPmZhbHNlPC9HZW5lcmF0ZU1hbmlmZXN0PgorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+aWE2NFwkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPgorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+aWE2NFwkKENvbmZpZ3VyYXRpb24pXDwvSW50RGlyPgorICAgIDxMaW5rSW5jcmVtZW50YWwgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICAgIDxHZW5lcmF0ZU1hbmlmZXN0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciPmZhbHNlPC9HZW5lcmF0ZU1hbmlmZXN0PgorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPng2NFwkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPgorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPng2NFwkKENvbmZpZ3VyYXRpb24pXDwvSW50RGlyPgorICAgIDxMaW5rSW5jcmVtZW50YWwgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPmlhNjRcJChDb25maWd1cmF0aW9uKVw8L091dERpcj4KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyI+aWE2NFwkKENvbmZpZ3VyYXRpb24pXDwvSW50RGlyPgorICAgIDxMaW5rSW5jcmVtZW50YWwgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIj5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+CisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+CisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+CisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiAvPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47Li5cLi5cbWluaXppcDslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO1pMSUJfV0lOQVBJO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8TWluaW1hbFJlYnVpbGQ+dHJ1ZTwvTWluaW1hbFJlYnVpbGQ+CisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkRlZmF1bHQ8L0Jhc2ljUnVudGltZUNoZWNrcz4KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWdETEw8L1J1bnRpbWVMaWJyYXJ5PgorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5Qcm9ncmFtRGF0YWJhc2U8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz54ODZcWmxpYkRsbERlYnVnXHpsaWJ3YXBpLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpbWluaXppcC5leGU8L091dHB1dEZpbGU+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxQcm9ncmFtRGF0YWJhc2VGaWxlPiQoT3V0RGlyKW1pbml6aXAucGRiPC9Qcm9ncmFtRGF0YWJhc2VGaWxlPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8UmFuZG9taXplZEJhc2VBZGRyZXNzPmZhbHNlPC9SYW5kb21pemVkQmFzZUFkZHJlc3M+CisgICAgICA8RGF0YUV4ZWN1dGlvblByZXZlbnRpb24+CisgICAgICA8L0RhdGFFeGVjdXRpb25QcmV2ZW50aW9uPgorICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg4NjwvVGFyZ2V0TWFjaGluZT4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgorICAgICAgPE9taXRGcmFtZVBvaW50ZXJzPnRydWU8L09taXRGcmFtZVBvaW50ZXJzPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47Li5cLi5cbWluaXppcDslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO1pMSUJfV0lOQVBJO05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5EZWZhdWx0PC9CYXNpY1J1bnRpbWVDaGVja3M+CisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+CisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPng4NlxabGliRGxsUmVsZWFzZVx6bGlid2FwaS5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKW1pbml6aXAuZXhlPC9PdXRwdXRGaWxlPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxSYW5kb21pemVkQmFzZUFkZHJlc3M+ZmFsc2U8L1JhbmRvbWl6ZWRCYXNlQWRkcmVzcz4KKyAgICAgIDxEYXRhRXhlY3V0aW9uUHJldmVudGlvbj4KKyAgICAgIDwvRGF0YUV4ZWN1dGlvblByZXZlbnRpb24+CisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDg2PC9UYXJnZXRNYWNoaW5lPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxNaWRsPgorICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+CisgICAgPC9NaWRsPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtaW5pemlwOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7WkxJQl9XSU5BUEk7X0RFQlVHO19DT05TT0xFO1dJTjY0OyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxNaW5pbWFsUmVidWlsZD50cnVlPC9NaW5pbWFsUmVidWlsZD4KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RGVmYXVsdDwvQmFzaWNSdW50aW1lQ2hlY2tzPgorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1Z0RMTDwvUnVudGltZUxpYnJhcnk+CisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPng2NFxabGliRGxsRGVidWdcemxpYndhcGkubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpciltaW5pemlwLmV4ZTwvT3V0cHV0RmlsZT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFByb2dyYW1EYXRhYmFzZUZpbGU+JChPdXREaXIpbWluaXppcC5wZGI8L1Byb2dyYW1EYXRhYmFzZUZpbGU+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVYNjQ8L1RhcmdldE1hY2hpbmU+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciPgorICAgIDxNaWRsPgorICAgICAgPFRhcmdldEVudmlyb25tZW50Pkl0YW5pdW08L1RhcmdldEVudmlyb25tZW50PgorICAgIDwvTWlkbD4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47Li5cLi5cbWluaXppcDslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO1pMSUJfV0lOQVBJO19ERUJVRztfQ09OU09MRTtXSU42NDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8TWluaW1hbFJlYnVpbGQ+dHJ1ZTwvTWluaW1hbFJlYnVpbGQ+CisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkRlZmF1bHQ8L0Jhc2ljUnVudGltZUNoZWNrcz4KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWdETEw8L1J1bnRpbWVMaWJyYXJ5PgorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5Qcm9ncmFtRGF0YWJhc2U8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5pYTY0XFpsaWJEbGxEZWJ1Z1x6bGlid2FwaS5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKW1pbml6aXAuZXhlPC9PdXRwdXRGaWxlPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8UHJvZ3JhbURhdGFiYXNlRmlsZT4kKE91dERpciltaW5pemlwLnBkYjwvUHJvZ3JhbURhdGFiYXNlRmlsZT4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZUlBNjQ8L1RhcmdldE1hY2hpbmU+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8TWlkbD4KKyAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgorICAgIDwvTWlkbD4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+CisgICAgICA8T21pdEZyYW1lUG9pbnRlcnM+dHJ1ZTwvT21pdEZyYW1lUG9pbnRlcnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtaW5pemlwOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7WkxJQl9XSU5BUEk7TkRFQlVHO19DT05TT0xFO1dJTjY0OyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+CisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkRlZmF1bHQ8L0Jhc2ljUnVudGltZUNoZWNrcz4KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRExMPC9SdW50aW1lTGlicmFyeT4KKyAgICAgIDxCdWZmZXJTZWN1cml0eUNoZWNrPmZhbHNlPC9CdWZmZXJTZWN1cml0eUNoZWNrPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+UHJvZ3JhbURhdGFiYXNlPC9EZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+eDY0XFpsaWJEbGxSZWxlYXNlXHpsaWJ3YXBpLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpbWluaXppcC5leGU8L091dHB1dEZpbGU+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIj4KKyAgICA8TWlkbD4KKyAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5JdGFuaXVtPC9UYXJnZXRFbnZpcm9ubWVudD4KKyAgICA8L01pZGw+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgorICAgICAgPE9taXRGcmFtZVBvaW50ZXJzPnRydWU8L09taXRGcmFtZVBvaW50ZXJzPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47Li5cLi5cbWluaXppcDslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO1pMSUJfV0lOQVBJO05ERUJVRztfQ09OU09MRTtXSU42NDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5EZWZhdWx0PC9CYXNpY1J1bnRpbWVDaGVja3M+CisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERMTDwvUnVudGltZUxpYnJhcnk+CisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmlhNjRcWmxpYkRsbFJlbGVhc2VcemxpYndhcGkubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpciltaW5pemlwLmV4ZTwvT3V0cHV0RmlsZT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lSUE2NDwvVGFyZ2V0TWFjaGluZT4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXG1pbml6aXBcbWluaXppcC5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJ6bGlidmMudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57OGZkODI2ZjgtMzczOS00NGU2LThjYzgtOTk3MTIyZTUzYjhkfTwvUHJvamVjdD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxMi90ZXN0emxpYi52Y3hwcm9qIGIvc3JjL2NvbnRyaWIvdnN0dWRpby92YzEyL3Rlc3R6bGliLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRiMmNiZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxMi90ZXN0emxpYi52Y3hwcm9qCkBAIC0wLDAgKzEsNDMwIEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjEyLjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xJdGFuaXVtIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPkl0YW5pdW08L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2VXaXRob3V0QXNtPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPkl0YW5pdW08L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2VXaXRob3V0QXNtfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2VXaXRob3V0QXNtPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlV2l0aG91dEFzbXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZVdpdGhvdXRBc208L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfEl0YW5pdW0iPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5JdGFuaXVtPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICA8L0l0ZW1Hcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57QUE2NjY2QUEtRTA5Ri00MTM1LTlDMEMtNEZFNTBDM0M2NTRCfTwvUHJvamVjdEd1aWQ+CisgICAgPFJvb3ROYW1lc3BhY2U+dGVzdHpsaWI8L1Jvb3ROYW1lc3BhY2U+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTIwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTIwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djEyMDwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxMjA8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0nIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djEyMDwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTIwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djEyMDwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTIwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxMjA8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0nIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8UHJvcGVydHlHcm91cD4KKyAgICA8X1Byb2plY3RGaWxlVmVyc2lvbj4xMC4wLjMwMTI4LjE8L19Qcm9qZWN0RmlsZVZlcnNpb24+CisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+eDg2XFRlc3RabGliJChDb25maWd1cmF0aW9uKVw8L091dERpcj4KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj54ODZcVGVzdFpsaWIkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgICAgPEdlbmVyYXRlTWFuaWZlc3QgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPmZhbHNlPC9HZW5lcmF0ZU1hbmlmZXN0PgorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiciPng4NlxUZXN0WmxpYiQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+CisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfFdpbjMyJyI+eDg2XFRlc3RabGliJChDb25maWd1cmF0aW9uKVxUbXBcPC9JbnREaXI+CisgICAgPExpbmtJbmNyZW1lbnRhbCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfFdpbjMyJyI+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgICA8R2VuZXJhdGVNYW5pZmVzdCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfFdpbjMyJyI+ZmFsc2U8L0dlbmVyYXRlTWFuaWZlc3Q+CisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj54ODZcVGVzdFpsaWIkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPgorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+eDg2XFRlc3RabGliJChDb25maWd1cmF0aW9uKVxUbXBcPC9JbnREaXI+CisgICAgPExpbmtJbmNyZW1lbnRhbCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICAgIDxHZW5lcmF0ZU1hbmlmZXN0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPmZhbHNlPC9HZW5lcmF0ZU1hbmlmZXN0PgorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj54NjRcVGVzdFpsaWIkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPgorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj54NjRcVGVzdFpsaWIkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4KKyAgICA8R2VuZXJhdGVNYW5pZmVzdCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPmZhbHNlPC9HZW5lcmF0ZU1hbmlmZXN0PgorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+aWE2NFxUZXN0WmxpYiQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+CisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIj5pYTY0XFRlc3RabGliJChDb25maWd1cmF0aW9uKVxUbXBcPC9JbnREaXI+CisgICAgPExpbmtJbmNyZW1lbnRhbCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIj50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgICAgPEdlbmVyYXRlTWFuaWZlc3QgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+ZmFsc2U8L0dlbmVyYXRlTWFuaWZlc3Q+CisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfHg2NCciPng2NFxUZXN0WmxpYiQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+CisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfHg2NCciPng2NFxUZXN0WmxpYiQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPgorICAgIDxHZW5lcmF0ZU1hbmlmZXN0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218eDY0JyI+ZmFsc2U8L0dlbmVyYXRlTWFuaWZlc3Q+CisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0nIj5pYTY0XFRlc3RabGliJChDb25maWd1cmF0aW9uKVw8L091dERpcj4KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSciPmlhNjRcVGVzdFpsaWIkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSciPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgICAgPEdlbmVyYXRlTWFuaWZlc3QgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtJyI+ZmFsc2U8L0dlbmVyYXRlTWFuaWZlc3Q+CisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+eDY0XFRlc3RabGliJChDb25maWd1cmF0aW9uKVw8L091dERpcj4KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj54NjRcVGVzdFpsaWIkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4KKyAgICA8R2VuZXJhdGVNYW5pZmVzdCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+ZmFsc2U8L0dlbmVyYXRlTWFuaWZlc3Q+CisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPmlhNjRcVGVzdFpsaWIkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPgorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIj5pYTY0XFRlc3RabGliJChDb25maWd1cmF0aW9uKVxUbXBcPC9JbnREaXI+CisgICAgPExpbmtJbmNyZW1lbnRhbCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgICAgPEdlbmVyYXRlTWFuaWZlc3QgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIj5mYWxzZTwvR2VuZXJhdGVNYW5pZmVzdD4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0nIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0nIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0nIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfFdpbjMyJyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXx4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfHg2NCciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218eDY0JyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+CisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+CisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+CisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgLz4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+QVNNVjtBU01JTkY7V0lOMzI7WkxJQl9XSU5BUEk7X0RFQlVHO19DT05TT0xFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19XQVJOSU5HUzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8TWluaW1hbFJlYnVpbGQ+dHJ1ZTwvTWluaW1hbFJlYnVpbGQ+CisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkRlZmF1bHQ8L0Jhc2ljUnVudGltZUNoZWNrcz4KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWdETEw8L1J1bnRpbWVMaWJyYXJ5PgorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPEFzc2VtYmxlck91dHB1dD5Bc3NlbWJseUFuZFNvdXJjZUNvZGU8L0Fzc2VtYmxlck91dHB1dD4KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+UHJvZ3JhbURhdGFiYXNlPC9EZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Li5cLi5cbWFzbXg4NlxtYXRjaDY4Ni5vYmo7Li5cLi5cbWFzbXg4NlxpbmZmYXMzMi5vYmo7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKXRlc3R6bGliLmV4ZTwvT3V0cHV0RmlsZT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFByb2dyYW1EYXRhYmFzZUZpbGU+JChPdXREaXIpdGVzdHpsaWIucGRiPC9Qcm9ncmFtRGF0YWJhc2VGaWxlPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8UmFuZG9taXplZEJhc2VBZGRyZXNzPmZhbHNlPC9SYW5kb21pemVkQmFzZUFkZHJlc3M+CisgICAgICA8RGF0YUV4ZWN1dGlvblByZXZlbnRpb24+CisgICAgICA8L0RhdGFFeGVjdXRpb25QcmV2ZW50aW9uPgorICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg4NjwvVGFyZ2V0TWFjaGluZT4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KKyAgICAgIDxPbWl0RnJhbWVQb2ludGVycz50cnVlPC9PbWl0RnJhbWVQb2ludGVycz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7WkxJQl9XSU5BUEk7TkRFQlVHO19DT05TT0xFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19XQVJOSU5HUzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5EZWZhdWx0PC9CYXNpY1J1bnRpbWVDaGVja3M+CisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+CisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKXRlc3R6bGliLmV4ZTwvT3V0cHV0RmlsZT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8UmFuZG9taXplZEJhc2VBZGRyZXNzPmZhbHNlPC9SYW5kb21pemVkQmFzZUFkZHJlc3M+CisgICAgICA8RGF0YUV4ZWN1dGlvblByZXZlbnRpb24+CisgICAgICA8L0RhdGFFeGVjdXRpb25QcmV2ZW50aW9uPgorICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg4NjwvVGFyZ2V0TWFjaGluZT4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgorICAgICAgPE9taXRGcmFtZVBvaW50ZXJzPnRydWU8L09taXRGcmFtZVBvaW50ZXJzPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5BU01WO0FTTUlORjtXSU4zMjtaTElCX1dJTkFQSTtOREVCVUc7X0NPTlNPTEU7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX1dBUk5JTkdTOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+CisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkRlZmF1bHQ8L0Jhc2ljUnVudGltZUNoZWNrcz4KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4KKyAgICAgIDxCdWZmZXJTZWN1cml0eUNoZWNrPmZhbHNlPC9CdWZmZXJTZWN1cml0eUNoZWNrPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+UHJvZ3JhbURhdGFiYXNlPC9EZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Li5cLi5cbWFzbXg4NlxtYXRjaDY4Ni5vYmo7Li5cLi5cbWFzbXg4NlxpbmZmYXMzMi5vYmo7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKXRlc3R6bGliLmV4ZTwvT3V0cHV0RmlsZT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8UmFuZG9taXplZEJhc2VBZGRyZXNzPmZhbHNlPC9SYW5kb21pemVkQmFzZUFkZHJlc3M+CisgICAgICA8RGF0YUV4ZWN1dGlvblByZXZlbnRpb24+CisgICAgICA8L0RhdGFFeGVjdXRpb25QcmV2ZW50aW9uPgorICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg4NjwvVGFyZ2V0TWFjaGluZT4KKyAgICAgIDxJbWFnZUhhc1NhZmVFeGNlcHRpb25IYW5kbGVycz5mYWxzZTwvSW1hZ2VIYXNTYWZlRXhjZXB0aW9uSGFuZGxlcnM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+QVNNVjtBU01JTkY7V0lOMzI7WkxJQl9XSU5BUEk7X0RFQlVHO19DT05TT0xFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19XQVJOSU5HUzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkRlZmF1bHQ8L0Jhc2ljUnVudGltZUNoZWNrcz4KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWdETEw8L1J1bnRpbWVMaWJyYXJ5PgorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+CisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Li5cLi5cbWFzbXg2NFxndm1hdDY0Lm9iajsuLlwuLlxtYXNteDY0XGluZmZhc3g2NC5vYmo7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+CisgICAgPE1pZGw+CisgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+SXRhbml1bTwvVGFyZ2V0RW52aXJvbm1lbnQ+CisgICAgPC9NaWRsPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPlpMSUJfV0lOQVBJO19ERUJVRztfQ09OU09MRTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fV0FSTklOR1M7V0lONjQ7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPE1pbmltYWxSZWJ1aWxkPnRydWU8L01pbmltYWxSZWJ1aWxkPgorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5EZWZhdWx0PC9CYXNpY1J1bnRpbWVDaGVja3M+CisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERlYnVnRExMPC9SdW50aW1lTGlicmFyeT4KKyAgICAgIDxCdWZmZXJTZWN1cml0eUNoZWNrPmZhbHNlPC9CdWZmZXJTZWN1cml0eUNoZWNrPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxBc3NlbWJsZXJPdXRwdXQ+QXNzZW1ibHlBbmRTb3VyY2VDb2RlPC9Bc3NlbWJsZXJPdXRwdXQ+CisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKXRlc3R6bGliLmV4ZTwvT3V0cHV0RmlsZT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFByb2dyYW1EYXRhYmFzZUZpbGU+JChPdXREaXIpdGVzdHpsaWIucGRiPC9Qcm9ncmFtRGF0YWJhc2VGaWxlPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lSUE2NDwvVGFyZ2V0TWFjaGluZT4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXx4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtaTElCX1dJTkFQSTtOREVCVUc7X0NPTlNPTEU7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX1dBUk5JTkdTOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RGVmYXVsdDwvQmFzaWNSdW50aW1lQ2hlY2tzPgorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWRETEw8L1J1bnRpbWVMaWJyYXJ5PgorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+CisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtJyI+CisgICAgPE1pZGw+CisgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+SXRhbml1bTwvVGFyZ2V0RW52aXJvbm1lbnQ+CisgICAgPC9NaWRsPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KKyAgICAgIDxPbWl0RnJhbWVQb2ludGVycz50cnVlPC9PbWl0RnJhbWVQb2ludGVycz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+WkxJQl9XSU5BUEk7TkRFQlVHO19DT05TT0xFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19XQVJOSU5HUztXSU42NDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5EZWZhdWx0PC9CYXNpY1J1bnRpbWVDaGVja3M+CisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERMTDwvUnVudGltZUxpYnJhcnk+CisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKXRlc3R6bGliLmV4ZTwvT3V0cHV0RmlsZT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lSUE2NDwvVGFyZ2V0TWFjaGluZT4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPkFTTVY7QVNNSU5GO1dJTjMyO1pMSUJfV0lOQVBJO05ERUJVRztfQ09OU09MRTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fV0FSTklOR1M7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5EZWZhdWx0PC9CYXNpY1J1bnRpbWVDaGVja3M+CisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERMTDwvUnVudGltZUxpYnJhcnk+CisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4uLlwuLlxtYXNteDY0XGd2bWF0NjQub2JqOy4uXC4uXG1hc214NjRcaW5mZmFzeDY0Lm9iajslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPgorICAgIDxNaWRsPgorICAgICAgPFRhcmdldEVudmlyb25tZW50Pkl0YW5pdW08L1RhcmdldEVudmlyb25tZW50PgorICAgIDwvTWlkbD4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+CisgICAgICA8T21pdEZyYW1lUG9pbnRlcnM+dHJ1ZTwvT21pdEZyYW1lUG9pbnRlcnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPlpMSUJfV0lOQVBJO05ERUJVRztfQ09OU09MRTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fV0FSTklOR1M7V0lONjQ7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RGVmYXVsdDwvQmFzaWNSdW50aW1lQ2hlY2tzPgorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWRETEw8L1J1bnRpbWVMaWJyYXJ5PgorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5Qcm9ncmFtRGF0YWJhc2U8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpcil0ZXN0emxpYi5leGU8L091dHB1dEZpbGU+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZUlBNjQ8L1RhcmdldE1hY2hpbmU+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxhZGxlcjMyLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxjb21wcmVzcy5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cY3JjMzIuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXGRlZmxhdGUuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXGluZmJhY2suYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXG1hc214NjRcaW5mZmFzODY2NC5jIj4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxpbmZmYXN0LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxpbmZsYXRlLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxpbmZ0cmVlcy5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGVzdHpsaWJcdGVzdHpsaWIuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHRyZWVzLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlx1bmNvbXByLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlx6dXRpbC5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KKyAgPC9JbXBvcnRHcm91cD4KKzwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi92c3R1ZGlvL3ZjMTIvdGVzdHpsaWJkbGwudmN4cHJvaiBiL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxMi90ZXN0emxpYmRsbC52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NjU3M2EKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29udHJpYi92c3R1ZGlvL3ZjMTIvdGVzdHpsaWJkbGwudmN4cHJvagpAQCAtMCwwICsxLDMxNiBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSIxMi4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8SXRhbml1bSI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5JdGFuaXVtPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxJdGFuaXVtIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+SXRhbml1bTwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgPC9JdGVtR3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+e0M1MkY5RTdCLTQ5OEEtNDJCRS04REI0LTg1QTE1Njk0MzY2QX08L1Byb2plY3RHdWlkPgorICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djEyMDwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxMjA8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTIwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxMjA8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxMjA8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTIwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KKyAgPFByb3BlcnR5R3JvdXA+CisgICAgPF9Qcm9qZWN0RmlsZVZlcnNpb24+MTAuMC4zMDEyOC4xPC9fUHJvamVjdEZpbGVWZXJzaW9uPgorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPng4NlxUZXN0WmxpYkRsbCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+CisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+eDg2XFRlc3RabGliRGxsJChDb25maWd1cmF0aW9uKVxUbXBcPC9JbnREaXI+CisgICAgPExpbmtJbmNyZW1lbnRhbCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICAgIDxHZW5lcmF0ZU1hbmlmZXN0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5mYWxzZTwvR2VuZXJhdGVNYW5pZmVzdD4KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPng4NlxUZXN0WmxpYkRsbCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+CisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj54ODZcVGVzdFpsaWJEbGwkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgICAgPEdlbmVyYXRlTWFuaWZlc3QgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+ZmFsc2U8L0dlbmVyYXRlTWFuaWZlc3Q+CisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPng2NFxUZXN0WmxpYkRsbCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+CisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPng2NFxUZXN0WmxpYkRsbCQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPgorICAgIDxMaW5rSW5jcmVtZW50YWwgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgICAgPEdlbmVyYXRlTWFuaWZlc3QgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5mYWxzZTwvR2VuZXJhdGVNYW5pZmVzdD4KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciPmlhNjRcVGVzdFpsaWJEbGwkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPgorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+aWE2NFxUZXN0WmxpYkRsbCQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPgorICAgIDxMaW5rSW5jcmVtZW50YWwgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICAgIDxHZW5lcmF0ZU1hbmlmZXN0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciPmZhbHNlPC9HZW5lcmF0ZU1hbmlmZXN0PgorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPng2NFxUZXN0WmxpYkRsbCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+CisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+eDY0XFRlc3RabGliRGxsJChDb25maWd1cmF0aW9uKVxUbXBcPC9JbnREaXI+CisgICAgPExpbmtJbmNyZW1lbnRhbCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgICA8R2VuZXJhdGVNYW5pZmVzdCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+ZmFsc2U8L0dlbmVyYXRlTWFuaWZlc3Q+CisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPmlhNjRcVGVzdFpsaWJEbGwkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPgorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIj5pYTY0XFRlc3RabGliRGxsJChDb25maWd1cmF0aW9uKVxUbXBcPC9JbnREaXI+CisgICAgPExpbmtJbmNyZW1lbnRhbCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgICAgPEdlbmVyYXRlTWFuaWZlc3QgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIj5mYWxzZTwvR2VuZXJhdGVNYW5pZmVzdD4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+CisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+CisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+CisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgLz4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOy4uXC4uXG1pbml6aXA7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtaTElCX1dJTkFQSTtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPE1pbmltYWxSZWJ1aWxkPnRydWU8L01pbmltYWxSZWJ1aWxkPgorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5EZWZhdWx0PC9CYXNpY1J1bnRpbWVDaGVja3M+CisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERlYnVnRExMPC9SdW50aW1lTGlicmFyeT4KKyAgICAgIDxCdWZmZXJTZWN1cml0eUNoZWNrPmZhbHNlPC9CdWZmZXJTZWN1cml0eUNoZWNrPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+UHJvZ3JhbURhdGFiYXNlPC9EZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+eDg2XFpsaWJEbGxEZWJ1Z1x6bGlid2FwaS5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKXRlc3R6bGliZGxsLmV4ZTwvT3V0cHV0RmlsZT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFByb2dyYW1EYXRhYmFzZUZpbGU+JChPdXREaXIpdGVzdHpsaWIucGRiPC9Qcm9ncmFtRGF0YWJhc2VGaWxlPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8UmFuZG9taXplZEJhc2VBZGRyZXNzPmZhbHNlPC9SYW5kb21pemVkQmFzZUFkZHJlc3M+CisgICAgICA8RGF0YUV4ZWN1dGlvblByZXZlbnRpb24+CisgICAgICA8L0RhdGFFeGVjdXRpb25QcmV2ZW50aW9uPgorICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg4NjwvVGFyZ2V0TWFjaGluZT4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgorICAgICAgPE9taXRGcmFtZVBvaW50ZXJzPnRydWU8L09taXRGcmFtZVBvaW50ZXJzPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47Li5cLi5cbWluaXppcDslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO1pMSUJfV0lOQVBJO05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5EZWZhdWx0PC9CYXNpY1J1bnRpbWVDaGVja3M+CisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+CisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPng4NlxabGliRGxsUmVsZWFzZVx6bGlid2FwaS5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKXRlc3R6bGliZGxsLmV4ZTwvT3V0cHV0RmlsZT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8UmFuZG9taXplZEJhc2VBZGRyZXNzPmZhbHNlPC9SYW5kb21pemVkQmFzZUFkZHJlc3M+CisgICAgICA8RGF0YUV4ZWN1dGlvblByZXZlbnRpb24+CisgICAgICA8L0RhdGFFeGVjdXRpb25QcmV2ZW50aW9uPgorICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg4NjwvVGFyZ2V0TWFjaGluZT4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8TWlkbD4KKyAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgorICAgIDwvTWlkbD4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47Li5cLi5cbWluaXppcDslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO1pMSUJfV0lOQVBJO19ERUJVRztfQ09OU09MRTtXSU42NDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8TWluaW1hbFJlYnVpbGQ+dHJ1ZTwvTWluaW1hbFJlYnVpbGQ+CisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkRlZmF1bHQ8L0Jhc2ljUnVudGltZUNoZWNrcz4KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWdETEw8L1J1bnRpbWVMaWJyYXJ5PgorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5Qcm9ncmFtRGF0YWJhc2U8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz54NjRcWmxpYkRsbERlYnVnXHpsaWJ3YXBpLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpdGVzdHpsaWJkbGwuZXhlPC9PdXRwdXRGaWxlPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8UHJvZ3JhbURhdGFiYXNlRmlsZT4kKE91dERpcil0ZXN0emxpYi5wZGI8L1Byb2dyYW1EYXRhYmFzZUZpbGU+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVYNjQ8L1RhcmdldE1hY2hpbmU+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciPgorICAgIDxNaWRsPgorICAgICAgPFRhcmdldEVudmlyb25tZW50Pkl0YW5pdW08L1RhcmdldEVudmlyb25tZW50PgorICAgIDwvTWlkbD4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47Li5cLi5cbWluaXppcDslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO1pMSUJfV0lOQVBJO19ERUJVRztfQ09OU09MRTtXSU42NDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8TWluaW1hbFJlYnVpbGQ+dHJ1ZTwvTWluaW1hbFJlYnVpbGQ+CisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkRlZmF1bHQ8L0Jhc2ljUnVudGltZUNoZWNrcz4KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWdETEw8L1J1bnRpbWVMaWJyYXJ5PgorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5Qcm9ncmFtRGF0YWJhc2U8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5pYTY0XFpsaWJEbGxEZWJ1Z1x6bGlid2FwaS5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKXRlc3R6bGliZGxsLmV4ZTwvT3V0cHV0RmlsZT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFByb2dyYW1EYXRhYmFzZUZpbGU+JChPdXREaXIpdGVzdHpsaWIucGRiPC9Qcm9ncmFtRGF0YWJhc2VGaWxlPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lSUE2NDwvVGFyZ2V0TWFjaGluZT4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxNaWRsPgorICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+CisgICAgPC9NaWRsPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KKyAgICAgIDxPbWl0RnJhbWVQb2ludGVycz50cnVlPC9PbWl0RnJhbWVQb2ludGVycz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOy4uXC4uXG1pbml6aXA7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtaTElCX1dJTkFQSTtOREVCVUc7X0NPTlNPTEU7V0lONjQ7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RGVmYXVsdDwvQmFzaWNSdW50aW1lQ2hlY2tzPgorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWRETEw8L1J1bnRpbWVMaWJyYXJ5PgorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5Qcm9ncmFtRGF0YWJhc2U8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz54NjRcWmxpYkRsbFJlbGVhc2VcemxpYndhcGkubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpcil0ZXN0emxpYmRsbC5leGU8L091dHB1dEZpbGU+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIj4KKyAgICA8TWlkbD4KKyAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5JdGFuaXVtPC9UYXJnZXRFbnZpcm9ubWVudD4KKyAgICA8L01pZGw+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgorICAgICAgPE9taXRGcmFtZVBvaW50ZXJzPnRydWU8L09taXRGcmFtZVBvaW50ZXJzPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47Li5cLi5cbWluaXppcDslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO1pMSUJfV0lOQVBJO05ERUJVRztfQ09OU09MRTtXSU42NDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5EZWZhdWx0PC9CYXNpY1J1bnRpbWVDaGVja3M+CisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERMTDwvUnVudGltZUxpYnJhcnk+CisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmlhNjRcWmxpYkRsbFJlbGVhc2VcemxpYndhcGkubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpcil0ZXN0emxpYmRsbC5leGU8L091dHB1dEZpbGU+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZUlBNjQ8L1RhcmdldE1hY2hpbmU+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0ZXN0emxpYlx0ZXN0emxpYi5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJ6bGlidmMudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57OGZkODI2ZjgtMzczOS00NGU2LThjYzgtOTk3MTIyZTUzYjhkfTwvUHJvamVjdD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxMi96bGliLnJjIGIvc3JjL2NvbnRyaWIvdnN0dWRpby92YzEyL3psaWIucmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ3NTg3MwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxMi96bGliLnJjCkBAIC0wLDAgKzEsMzIgQEAKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKKyNkZWZpbmUgSURSX1ZFUlNJT04xICAxCitJRFJfVkVSU0lPTjEJVkVSU0lPTklORk8JTU9WRUFCTEUgSU1QVVJFIExPQURPTkNBTEwgRElTQ0FSREFCTEUKKyAgRklMRVZFUlNJT04JIDEsIDIsIDEyLCAwCisgIFBST0RVQ1RWRVJTSU9OIDEsIDIsIDEyLCAwCisgIEZJTEVGTEFHU01BU0sJVlNfRkZJX0ZJTEVGTEFHU01BU0sKKyAgRklMRUZMQUdTCTAKKyAgRklMRU9TCVZPU19ET1NfV0lORE9XUzMyCisgIEZJTEVUWVBFCVZGVF9ETEwKKyAgRklMRVNVQlRZUEUJMAkvLyBub3QgdXNlZAorQkVHSU4KKyAgQkxPQ0sgIlN0cmluZ0ZpbGVJbmZvIgorICBCRUdJTgorICAgIEJMT0NLICIwNDA5MDRFNCIKKyAgICAvL2xhbmd1YWdlIElEID0gVS5TLiBFbmdsaXNoLCBjaGFyIHNldCA9IFdpbmRvd3MsIE11bHRpbGluZ3VhbAorCisgICAgQkVHSU4KKyAgICAgIFZBTFVFICJGaWxlRGVzY3JpcHRpb24iLCAiemxpYiBkYXRhIGNvbXByZXNzaW9uIGFuZCBaSVAgZmlsZSBJL08gbGlicmFyeVwwIgorICAgICAgVkFMVUUgIkZpbGVWZXJzaW9uIiwJIjEuMi4xMlwwIgorICAgICAgVkFMVUUgIkludGVybmFsTmFtZSIsCSJ6bGliXDAiCisgICAgICBWQUxVRSAiT3JpZ2luYWxGaWxlbmFtZSIsCSJ6bGlid2FwaS5kbGxcMCIKKyAgICAgIFZBTFVFICJQcm9kdWN0TmFtZSIsCSJaTGliLkRMTFwwIgorICAgICAgVkFMVUUgIkNvbW1lbnRzIiwiRExMIHN1cHBvcnQgYnkgQWxlc3NhbmRybyBJYWNvcGV0dGkgJiBHaWxsZXMgVm9sbGFudFwwIgorICAgICAgVkFMVUUgIkxlZ2FsQ29weXJpZ2h0IiwgIihDKSAxOTk1LTIwMjIgSmVhbi1sb3VwIEdhaWxseSAmIE1hcmsgQWRsZXJcMCIKKyAgICBFTkQKKyAgRU5ECisgIEJMT0NLICJWYXJGaWxlSW5mbyIKKyAgQkVHSU4KKyAgICBWQUxVRSAiVHJhbnNsYXRpb24iLCAweDA0MDksIDEyNTIKKyAgRU5ECitFTkQKZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxMi96bGlic3RhdC52Y3hwcm9qIGIvc3JjL2NvbnRyaWIvdnN0dWRpby92YzEyL3psaWJzdGF0LnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZkZWU3YwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxMi96bGlic3RhdC52Y3hwcm9qCkBAIC0wLDAgKzEsNDY3IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjEyLjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xJdGFuaXVtIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPkl0YW5pdW08L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2VXaXRob3V0QXNtPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPkl0YW5pdW08L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2VXaXRob3V0QXNtfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2VXaXRob3V0QXNtPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlV2l0aG91dEFzbXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZVdpdGhvdXRBc208L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfEl0YW5pdW0iPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5JdGFuaXVtPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICA8L0l0ZW1Hcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57NzQ1REVDNTgtRUJCMy00N0E5LUE5QjgtNEM2NjI3QzAxQkY4fTwvUHJvamVjdEd1aWQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+U3RhdGljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxMjA8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTIwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+U3RhdGljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxMjA8L1BsYXRmb3JtVG9vbHNldD4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0nIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTIwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTIwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djEyMDwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djEyMDwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTIwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTIwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0nIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KKyAgPFByb3BlcnR5R3JvdXA+CisgICAgPF9Qcm9qZWN0RmlsZVZlcnNpb24+MTAuMC4zMDEyOC4xPC9fUHJvamVjdEZpbGVWZXJzaW9uPgorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPng4NlxabGliU3RhdCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+CisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+eDg2XFpsaWJTdGF0JChDb25maWd1cmF0aW9uKVxUbXBcPC9JbnREaXI+CisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj54ODZcWmxpYlN0YXQkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPgorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+eDg2XFpsaWJTdGF0JChDb25maWd1cmF0aW9uKVxUbXBcPC9JbnREaXI+CisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfFdpbjMyJyI+eDg2XFpsaWJTdGF0JChDb25maWd1cmF0aW9uKVw8L091dERpcj4KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218V2luMzInIj54ODZcWmxpYlN0YXQkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+eDY0XFpsaWJTdGF0JChDb25maWd1cmF0aW9uKVw8L091dERpcj4KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+eDY0XFpsaWJTdGF0JChDb25maWd1cmF0aW9uKVxUbXBcPC9JbnREaXI+CisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIj5pYTY0XFpsaWJTdGF0JChDb25maWd1cmF0aW9uKVw8L091dERpcj4KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciPmlhNjRcWmxpYlN0YXQkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj54NjRcWmxpYlN0YXQkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPgorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPng2NFxabGliU3RhdCQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPgorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIj5pYTY0XFpsaWJTdGF0JChDb25maWd1cmF0aW9uKVw8L091dERpcj4KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyI+aWE2NFxabGliU3RhdCQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPgorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXx4NjQnIj54NjRcWmxpYlN0YXQkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPgorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXx4NjQnIj54NjRcWmxpYlN0YXQkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSciPmlhNjRcWmxpYlN0YXQkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPgorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtJyI+aWE2NFxabGliU3RhdCQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+CisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+CisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+CisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+CisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+CisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218V2luMzInIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfFdpbjMyJyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+CisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218eDY0JyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXx4NjQnIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiAvPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47Li5cLi5cbWFzbXg4NjslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO1pMSUJfV0lOQVBJO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19XQVJOSU5HUzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8RXhjZXB0aW9uSGFuZGxpbmc+CisgICAgICA8L0V4Y2VwdGlvbkhhbmRsaW5nPgorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1Z0RMTDwvUnVudGltZUxpYnJhcnk+CisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlck91dHB1dEZpbGU+JChJbnREaXIpemxpYnN0YXQucGNoPC9QcmVjb21waWxlZEhlYWRlck91dHB1dEZpbGU+CisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPgorICAgICAgPE9iamVjdEZpbGVOYW1lPiQoSW50RGlyKTwvT2JqZWN0RmlsZU5hbWU+CisgICAgICA8UHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+JChPdXREaXIpPC9Qcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0Pk9sZFN0eWxlPC9EZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PgorICAgIDwvQ2xDb21waWxlPgorICAgIDxSZXNvdXJjZUNvbXBpbGU+CisgICAgICA8Q3VsdHVyZT4weDA0MGM8L0N1bHR1cmU+CisgICAgPC9SZXNvdXJjZUNvbXBpbGU+CisgICAgPExpYj4KKyAgICAgIDxBZGRpdGlvbmFsT3B0aW9ucz4vTUFDSElORTpYODYgL05PREVGQVVMVExJQiAlKEFkZGl0aW9uYWxPcHRpb25zKTwvQWRkaXRpb25hbE9wdGlvbnM+CisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpcil6bGlic3RhdC5saWI8L091dHB1dEZpbGU+CisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4KKyAgICA8L0xpYj4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtYXNteDg2OyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7WkxJQl9XSU5BUEk7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX1dBUk5JTkdTO0FTTVY7QVNNSU5GOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+CisgICAgICA8RXhjZXB0aW9uSGFuZGxpbmc+CisgICAgICA8L0V4Y2VwdGlvbkhhbmRsaW5nPgorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5PgorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlPiQoSW50RGlyKXpsaWJzdGF0LnBjaDwvUHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlPgorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4KKyAgICAgIDxPYmplY3RGaWxlTmFtZT4kKEludERpcik8L09iamVjdEZpbGVOYW1lPgorICAgICAgPFByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPiQoT3V0RGlyKTwvUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPFJlc291cmNlQ29tcGlsZT4KKyAgICAgIDxDdWx0dXJlPjB4MDQwYzwvQ3VsdHVyZT4KKyAgICA8L1Jlc291cmNlQ29tcGlsZT4KKyAgICA8TGliPgorICAgICAgPEFkZGl0aW9uYWxPcHRpb25zPi9NQUNISU5FOlg4NiAvTk9ERUZBVUxUTElCICUoQWRkaXRpb25hbE9wdGlvbnMpPC9BZGRpdGlvbmFsT3B0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPi4uXC4uXG1hc214ODZcbWF0Y2g2ODYub2JqOy4uXC4uXG1hc214ODZcaW5mZmFzMzIub2JqOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpcil6bGlic3RhdC5saWI8L091dHB1dEZpbGU+CisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4KKyAgICA8L0xpYj4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47Li5cLi5cbWFzbXg4NjslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO1pMSUJfV0lOQVBJO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19XQVJOSU5HUzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgorICAgICAgPEV4Y2VwdGlvbkhhbmRsaW5nPgorICAgICAgPC9FeGNlcHRpb25IYW5kbGluZz4KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4KKyAgICAgIDxCdWZmZXJTZWN1cml0eUNoZWNrPmZhbHNlPC9CdWZmZXJTZWN1cml0eUNoZWNrPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyT3V0cHV0RmlsZT4kKEludERpcil6bGlic3RhdC5wY2g8L1ByZWNvbXBpbGVkSGVhZGVyT3V0cHV0RmlsZT4KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+CisgICAgICA8T2JqZWN0RmlsZU5hbWU+JChJbnREaXIpPC9PYmplY3RGaWxlTmFtZT4KKyAgICAgIDxQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4kKE91dERpcik8L1Byb2dyYW1EYXRhQmFzZUZpbGVOYW1lPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxSZXNvdXJjZUNvbXBpbGU+CisgICAgICA8Q3VsdHVyZT4weDA0MGM8L0N1bHR1cmU+CisgICAgPC9SZXNvdXJjZUNvbXBpbGU+CisgICAgPExpYj4KKyAgICAgIDxBZGRpdGlvbmFsT3B0aW9ucz4vTUFDSElORTpYODYgL05PREVGQVVMVExJQiAlKEFkZGl0aW9uYWxPcHRpb25zKTwvQWRkaXRpb25hbE9wdGlvbnM+CisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpcil6bGlic3RhdC5saWI8L091dHB1dEZpbGU+CisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4KKyAgICA8L0xpYj4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxNaWRsPgorICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+CisgICAgPC9NaWRsPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtYXNteDg2OyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+WkxJQl9XSU5BUEk7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX1dBUk5JTkdTO1dJTjY0OyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxFeGNlcHRpb25IYW5kbGluZz4KKyAgICAgIDwvRXhjZXB0aW9uSGFuZGxpbmc+CisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERlYnVnRExMPC9SdW50aW1lTGlicmFyeT4KKyAgICAgIDxCdWZmZXJTZWN1cml0eUNoZWNrPmZhbHNlPC9CdWZmZXJTZWN1cml0eUNoZWNrPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyT3V0cHV0RmlsZT4kKEludERpcil6bGlic3RhdC5wY2g8L1ByZWNvbXBpbGVkSGVhZGVyT3V0cHV0RmlsZT4KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+CisgICAgICA8T2JqZWN0RmlsZU5hbWU+JChJbnREaXIpPC9PYmplY3RGaWxlTmFtZT4KKyAgICAgIDxQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4kKE91dERpcik8L1Byb2dyYW1EYXRhQmFzZUZpbGVOYW1lPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPgorICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+T2xkU3R5bGU8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+CisgICAgPC9DbENvbXBpbGU+CisgICAgPFJlc291cmNlQ29tcGlsZT4KKyAgICAgIDxDdWx0dXJlPjB4MDQwYzwvQ3VsdHVyZT4KKyAgICA8L1Jlc291cmNlQ29tcGlsZT4KKyAgICA8TGliPgorICAgICAgPEFkZGl0aW9uYWxPcHRpb25zPi9NQUNISU5FOkFNRDY0IC9OT0RFRkFVTFRMSUIgJShBZGRpdGlvbmFsT3B0aW9ucyk8L0FkZGl0aW9uYWxPcHRpb25zPgorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpemxpYnN0YXQubGliPC9PdXRwdXRGaWxlPgorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+CisgICAgPC9MaWI+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+CisgICAgPE1pZGw+CisgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+SXRhbml1bTwvVGFyZ2V0RW52aXJvbm1lbnQ+CisgICAgPC9NaWRsPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtYXNteDg2OyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+WkxJQl9XSU5BUEk7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX1dBUk5JTkdTO1dJTjY0OyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxFeGNlcHRpb25IYW5kbGluZz4KKyAgICAgIDwvRXhjZXB0aW9uSGFuZGxpbmc+CisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERlYnVnRExMPC9SdW50aW1lTGlicmFyeT4KKyAgICAgIDxCdWZmZXJTZWN1cml0eUNoZWNrPmZhbHNlPC9CdWZmZXJTZWN1cml0eUNoZWNrPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyT3V0cHV0RmlsZT4kKEludERpcil6bGlic3RhdC5wY2g8L1ByZWNvbXBpbGVkSGVhZGVyT3V0cHV0RmlsZT4KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+CisgICAgICA8T2JqZWN0RmlsZU5hbWU+JChJbnREaXIpPC9PYmplY3RGaWxlTmFtZT4KKyAgICAgIDxQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4kKE91dERpcik8L1Byb2dyYW1EYXRhQmFzZUZpbGVOYW1lPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPgorICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+T2xkU3R5bGU8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+CisgICAgPC9DbENvbXBpbGU+CisgICAgPFJlc291cmNlQ29tcGlsZT4KKyAgICAgIDxDdWx0dXJlPjB4MDQwYzwvQ3VsdHVyZT4KKyAgICA8L1Jlc291cmNlQ29tcGlsZT4KKyAgICA8TGliPgorICAgICAgPEFkZGl0aW9uYWxPcHRpb25zPi9NQUNISU5FOklBNjQgL05PREVGQVVMVExJQiAlKEFkZGl0aW9uYWxPcHRpb25zKTwvQWRkaXRpb25hbE9wdGlvbnM+CisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpcil6bGlic3RhdC5saWI8L091dHB1dEZpbGU+CisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4KKyAgICA8L0xpYj4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPE1pZGw+CisgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KKyAgICA8L01pZGw+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47Li5cLi5cbWFzbXg4NjslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPlpMSUJfV0lOQVBJO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19XQVJOSU5HUztBU01WO0FTTUlORjtXSU42NDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgorICAgICAgPEV4Y2VwdGlvbkhhbmRsaW5nPgorICAgICAgPC9FeGNlcHRpb25IYW5kbGluZz4KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRExMPC9SdW50aW1lTGlicmFyeT4KKyAgICAgIDxCdWZmZXJTZWN1cml0eUNoZWNrPmZhbHNlPC9CdWZmZXJTZWN1cml0eUNoZWNrPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyT3V0cHV0RmlsZT4kKEludERpcil6bGlic3RhdC5wY2g8L1ByZWNvbXBpbGVkSGVhZGVyT3V0cHV0RmlsZT4KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+CisgICAgICA8T2JqZWN0RmlsZU5hbWU+JChJbnREaXIpPC9PYmplY3RGaWxlTmFtZT4KKyAgICAgIDxQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4kKE91dERpcik8L1Byb2dyYW1EYXRhQmFzZUZpbGVOYW1lPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxSZXNvdXJjZUNvbXBpbGU+CisgICAgICA8Q3VsdHVyZT4weDA0MGM8L0N1bHR1cmU+CisgICAgPC9SZXNvdXJjZUNvbXBpbGU+CisgICAgPExpYj4KKyAgICAgIDxBZGRpdGlvbmFsT3B0aW9ucz4vTUFDSElORTpBTUQ2NCAvTk9ERUZBVUxUTElCICUoQWRkaXRpb25hbE9wdGlvbnMpPC9BZGRpdGlvbmFsT3B0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPi4uXC4uXG1hc214NjRcZ3ZtYXQ2NC5vYmo7Li5cLi5cbWFzbXg2NFxpbmZmYXN4NjQub2JqOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpcil6bGlic3RhdC5saWI8L091dHB1dEZpbGU+CisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4KKyAgICA8L0xpYj4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPgorICAgIDxNaWRsPgorICAgICAgPFRhcmdldEVudmlyb25tZW50Pkl0YW5pdW08L1RhcmdldEVudmlyb25tZW50PgorICAgIDwvTWlkbD4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtYXNteDg2OyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+WkxJQl9XSU5BUEk7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX1dBUk5JTkdTO1dJTjY0OyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+CisgICAgICA8RXhjZXB0aW9uSGFuZGxpbmc+CisgICAgICA8L0V4Y2VwdGlvbkhhbmRsaW5nPgorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWRETEw8L1J1bnRpbWVMaWJyYXJ5PgorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlPiQoSW50RGlyKXpsaWJzdGF0LnBjaDwvUHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlPgorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4KKyAgICAgIDxPYmplY3RGaWxlTmFtZT4kKEludERpcik8L09iamVjdEZpbGVOYW1lPgorICAgICAgPFByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPiQoT3V0RGlyKTwvUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPFJlc291cmNlQ29tcGlsZT4KKyAgICAgIDxDdWx0dXJlPjB4MDQwYzwvQ3VsdHVyZT4KKyAgICA8L1Jlc291cmNlQ29tcGlsZT4KKyAgICA8TGliPgorICAgICAgPEFkZGl0aW9uYWxPcHRpb25zPi9NQUNISU5FOklBNjQgL05PREVGQVVMVExJQiAlKEFkZGl0aW9uYWxPcHRpb25zKTwvQWRkaXRpb25hbE9wdGlvbnM+CisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpcil6bGlic3RhdC5saWI8L091dHB1dEZpbGU+CisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4KKyAgICA8L0xpYj4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfHg2NCciPgorICAgIDxNaWRsPgorICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+CisgICAgPC9NaWRsPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOy4uXC4uXG1hc214ODY7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5aTElCX1dJTkFQSTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fV0FSTklOR1M7V0lONjQ7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4KKyAgICAgIDxFeGNlcHRpb25IYW5kbGluZz4KKyAgICAgIDwvRXhjZXB0aW9uSGFuZGxpbmc+CisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERMTDwvUnVudGltZUxpYnJhcnk+CisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlck91dHB1dEZpbGU+JChJbnREaXIpemxpYnN0YXQucGNoPC9QcmVjb21waWxlZEhlYWRlck91dHB1dEZpbGU+CisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPgorICAgICAgPE9iamVjdEZpbGVOYW1lPiQoSW50RGlyKTwvT2JqZWN0RmlsZU5hbWU+CisgICAgICA8UHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+JChPdXREaXIpPC9Qcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8UmVzb3VyY2VDb21waWxlPgorICAgICAgPEN1bHR1cmU+MHgwNDBjPC9DdWx0dXJlPgorICAgIDwvUmVzb3VyY2VDb21waWxlPgorICAgIDxMaWI+CisgICAgICA8QWRkaXRpb25hbE9wdGlvbnM+L01BQ0hJTkU6QU1ENjQgL05PREVGQVVMVExJQiAlKEFkZGl0aW9uYWxPcHRpb25zKTwvQWRkaXRpb25hbE9wdGlvbnM+CisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpcil6bGlic3RhdC5saWI8L091dHB1dEZpbGU+CisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4KKyAgICA8L0xpYj4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0nIj4KKyAgICA8TWlkbD4KKyAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5JdGFuaXVtPC9UYXJnZXRFbnZpcm9ubWVudD4KKyAgICA8L01pZGw+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47Li5cLi5cbWFzbXg4NjslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPlpMSUJfV0lOQVBJO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19XQVJOSU5HUztXSU42NDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgorICAgICAgPEV4Y2VwdGlvbkhhbmRsaW5nPgorICAgICAgPC9FeGNlcHRpb25IYW5kbGluZz4KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRExMPC9SdW50aW1lTGlicmFyeT4KKyAgICAgIDxCdWZmZXJTZWN1cml0eUNoZWNrPmZhbHNlPC9CdWZmZXJTZWN1cml0eUNoZWNrPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyT3V0cHV0RmlsZT4kKEludERpcil6bGlic3RhdC5wY2g8L1ByZWNvbXBpbGVkSGVhZGVyT3V0cHV0RmlsZT4KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+CisgICAgICA8T2JqZWN0RmlsZU5hbWU+JChJbnREaXIpPC9PYmplY3RGaWxlTmFtZT4KKyAgICAgIDxQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4kKE91dERpcik8L1Byb2dyYW1EYXRhQmFzZUZpbGVOYW1lPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxSZXNvdXJjZUNvbXBpbGU+CisgICAgICA8Q3VsdHVyZT4weDA0MGM8L0N1bHR1cmU+CisgICAgPC9SZXNvdXJjZUNvbXBpbGU+CisgICAgPExpYj4KKyAgICAgIDxBZGRpdGlvbmFsT3B0aW9ucz4vTUFDSElORTpJQTY0IC9OT0RFRkFVTFRMSUIgJShBZGRpdGlvbmFsT3B0aW9ucyk8L0FkZGl0aW9uYWxPcHRpb25zPgorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpemxpYnN0YXQubGliPC9PdXRwdXRGaWxlPgorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+CisgICAgPC9MaWI+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXGFkbGVyMzIuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXGNvbXByZXNzLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxjcmMzMi5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cZGVmbGF0ZS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cZ3pjbG9zZS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cZ3psaWIuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXGd6cmVhZC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cZ3p3cml0ZS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5caW5mYmFjay5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbWFzbXg2NFxpbmZmYXM4NjY0LmMiPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0nIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXGluZmZhc3QuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXGluZmxhdGUuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXGluZnRyZWVzLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxtaW5pemlwXGlvYXBpLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlx0cmVlcy5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cdW5jb21wci5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbWluaXppcFx1bnppcC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbWluaXppcFx6aXAuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHp1dGlsLmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxSZXNvdXJjZUNvbXBpbGUgSW5jbHVkZT0iemxpYi5yYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPE5vbmUgSW5jbHVkZT0iemxpYnZjLmRlZiIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvdnN0dWRpby92YzEyL3psaWJ2Yy5kZWYgYi9zcmMvY29udHJpYi92c3R1ZGlvL3ZjMTIvemxpYnZjLmRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTA5YmMxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbnRyaWIvdnN0dWRpby92YzEyL3psaWJ2Yy5kZWYKQEAgLTAsMCArMSwxNTggQEAKK0xJQlJBUlkNCis7IHpsaWIgZGF0YSBjb21wcmVzc2lvbiBhbmQgWklQIGZpbGUgSS9PIGxpYnJhcnkNCisNCitWRVJTSU9OCQkxLjINCisNCitFWFBPUlRTDQorICAgICAgICBhZGxlcjMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxDQorICAgICAgICBjb21wcmVzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAyDQorICAgICAgICBjcmMzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAzDQorICAgICAgICBkZWZsYXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEA0DQorICAgICAgICBkZWZsYXRlQ29weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEA1DQorICAgICAgICBkZWZsYXRlRW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEA2DQorICAgICAgICBkZWZsYXRlSW5pdDJfICAgICAgICAgICAgICAgICAgICAgICAgICAgIEA3DQorICAgICAgICBkZWZsYXRlSW5pdF8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEA4DQorICAgICAgICBkZWZsYXRlUGFyYW1zICAgICAgICAgICAgICAgICAgICAgICAgICAgIEA5DQorICAgICAgICBkZWZsYXRlUmVzZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxMA0KKyAgICAgICAgZGVmbGF0ZVNldERpY3Rpb25hcnkgICAgICAgICAgICAgICAgICAgICBAMTENCisgICAgICAgIGd6Y2xvc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDEyDQorICAgICAgICBnemRvcGVuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxMw0KKyAgICAgICAgZ3plcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTQNCisgICAgICAgIGd6Zmx1c2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDE1DQorICAgICAgICBnem9wZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxNg0KKyAgICAgICAgZ3pyZWFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTcNCisgICAgICAgIGd6d3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDE4DQorICAgICAgICBpbmZsYXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxOQ0KKyAgICAgICAgaW5mbGF0ZUVuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMjANCisgICAgICAgIGluZmxhdGVJbml0Ml8gICAgICAgICAgICAgICAgICAgICAgICAgICAgQDIxDQorICAgICAgICBpbmZsYXRlSW5pdF8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAyMg0KKyAgICAgICAgaW5mbGF0ZVJlc2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMjMNCisgICAgICAgIGluZmxhdGVTZXREaWN0aW9uYXJ5ICAgICAgICAgICAgICAgICAgICAgQDI0DQorICAgICAgICBpbmZsYXRlU3luYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAyNQ0KKyAgICAgICAgdW5jb21wcmVzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMjYNCisgICAgICAgIHpsaWJWZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDI3DQorICAgICAgICBnenByaW50ZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAyOA0KKyAgICAgICAgZ3pwdXRjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMjkNCisgICAgICAgIGd6Z2V0YyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDMwDQorICAgICAgICBnenNlZWsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAzMQ0KKyAgICAgICAgZ3pyZXdpbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMzINCisgICAgICAgIGd6dGVsbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDMzDQorICAgICAgICBnemVvZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAzNA0KKyAgICAgICAgZ3pzZXRwYXJhbXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMzUNCisgICAgICAgIHpFcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDM2DQorICAgICAgICBpbmZsYXRlU3luY1BvaW50ICAgICAgICAgICAgICAgICAgICAgICAgIEAzNw0KKyAgICAgICAgZ2V0X2NyY190YWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMzgNCisgICAgICAgIGNvbXByZXNzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDM5DQorICAgICAgICBnenB1dHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEA0MA0KKyAgICAgICAgZ3pnZXRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBANDENCisgICAgICAgIGluZmxhdGVDb3B5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDQyDQorICAgICAgICBpbmZsYXRlQmFja0luaXRfICAgICAgICAgICAgICAgICAgICAgICAgIEA0Mw0KKyAgICAgICAgaW5mbGF0ZUJhY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBANDQNCisgICAgICAgIGluZmxhdGVCYWNrRW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgQDQ1DQorICAgICAgICBjb21wcmVzc0JvdW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgIEA0Ng0KKyAgICAgICAgZGVmbGF0ZUJvdW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICBANDcNCisgICAgICAgIGd6Y2xlYXJlcnIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDQ4DQorICAgICAgICBnenVuZ2V0YyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEA0OQ0KKyAgICAgICAgemxpYkNvbXBpbGVGbGFncyAgICAgICAgICAgICAgICAgICAgICAgICBANTANCisgICAgICAgIGRlZmxhdGVQcmltZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDUxDQorICAgICAgICBkZWZsYXRlUGVuZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIEA1Mg0KKw0KKyAgICAgICAgdW56T3BlbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBANjENCisgICAgICAgIHVuekNsb3NlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDYyDQorICAgICAgICB1bnpHZXRHbG9iYWxJbmZvICAgICAgICAgICAgICAgICAgICAgICAgIEA2Mw0KKyAgICAgICAgdW56R2V0Q3VycmVudEZpbGVJbmZvICAgICAgICAgICAgICAgICAgICBANjQNCisgICAgICAgIHVuekdvVG9GaXJzdEZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgQDY1DQorICAgICAgICB1bnpHb1RvTmV4dEZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgIEA2Ng0KKyAgICAgICAgdW56T3BlbkN1cnJlbnRGaWxlICAgICAgICAgICAgICAgICAgICAgICBANjcNCisgICAgICAgIHVuelJlYWRDdXJyZW50RmlsZSAgICAgICAgICAgICAgICAgICAgICAgQDY4DQorICAgICAgICB1bnpPcGVuQ3VycmVudEZpbGUzICAgICAgICAgICAgICAgICAgICAgIEA2OQ0KKyAgICAgICAgdW56dGVsbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBANzANCisgICAgICAgIHVuemVvZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDcxDQorICAgICAgICB1bnpDbG9zZUN1cnJlbnRGaWxlICAgICAgICAgICAgICAgICAgICAgIEA3Mg0KKyAgICAgICAgdW56R2V0R2xvYmFsQ29tbWVudCAgICAgICAgICAgICAgICAgICAgICBANzMNCisgICAgICAgIHVuelN0cmluZ0ZpbGVOYW1lQ29tcGFyZSAgICAgICAgICAgICAgICAgQDc0DQorICAgICAgICB1bnpMb2NhdGVGaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgIEA3NQ0KKyAgICAgICAgdW56R2V0TG9jYWxFeHRyYWZpZWxkICAgICAgICAgICAgICAgICAgICBANzYNCisgICAgICAgIHVuek9wZW4yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDc3DQorICAgICAgICB1bnpPcGVuQ3VycmVudEZpbGUyICAgICAgICAgICAgICAgICAgICAgIEA3OA0KKyAgICAgICAgdW56T3BlbkN1cnJlbnRGaWxlUGFzc3dvcmQgICAgICAgICAgICAgICBANzkNCisNCisgICAgICAgIHppcE9wZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDgwDQorICAgICAgICB6aXBPcGVuTmV3RmlsZUluWmlwICAgICAgICAgICAgICAgICAgICAgIEA4MQ0KKyAgICAgICAgemlwV3JpdGVJbkZpbGVJblppcCAgICAgICAgICAgICAgICAgICAgICBAODINCisgICAgICAgIHppcENsb3NlRmlsZUluWmlwICAgICAgICAgICAgICAgICAgICAgICAgQDgzDQorICAgICAgICB6aXBDbG9zZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEA4NA0KKyAgICAgICAgemlwT3Blbk5ld0ZpbGVJblppcDIgICAgICAgICAgICAgICAgICAgICBAODYNCisgICAgICAgIHppcENsb3NlRmlsZUluWmlwUmF3ICAgICAgICAgICAgICAgICAgICAgQDg3DQorICAgICAgICB6aXBPcGVuMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEA4OA0KKyAgICAgICAgemlwT3Blbk5ld0ZpbGVJblppcDMgICAgICAgICAgICAgICAgICAgICBAODkNCisNCisgICAgICAgIHVuekdldEZpbGVQb3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDEwMA0KKyAgICAgICAgdW56R29Ub0ZpbGVQb3MgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTAxDQorDQorICAgICAgICBmaWxsX3dpbjMyX2ZpbGVmdW5jICAgICAgICAgICAgICAgICAgICAgIEAxMTANCisNCis7IHpsaWJ3YXBpIHYxLjIuNCBhZGRlZDoNCisgICAgICAgIGZpbGxfd2luMzJfZmlsZWZ1bmM2NCAgICAgICAgICAgICAgICAgICBAMTExDQorICAgICAgICBmaWxsX3dpbjMyX2ZpbGVmdW5jNjRBICAgICAgICAgICAgICAgICAgQDExMg0KKyAgICAgICAgZmlsbF93aW4zMl9maWxlZnVuYzY0VyAgICAgICAgICAgICAgICAgIEAxMTMNCisNCisgICAgICAgIHVuek9wZW42NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTIwDQorICAgICAgICB1bnpPcGVuMl82NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDEyMQ0KKyAgICAgICAgdW56R2V0R2xvYmFsSW5mbzY0ICAgICAgICAgICAgICAgICAgICAgIEAxMjINCisgICAgICAgIHVuekdldEN1cnJlbnRGaWxlSW5mbzY0ICAgICAgICAgICAgICAgICBAMTI0DQorICAgICAgICB1bnpHZXRDdXJyZW50RmlsZVpTdHJlYW1Qb3M2NCAgICAgICAgICAgQDEyNQ0KKyAgICAgICAgdW56dGVsbDY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxMjYNCisgICAgICAgIHVuekdldEZpbGVQb3M2NCAgICAgICAgICAgICAgICAgICAgICAgICBAMTI3DQorICAgICAgICB1bnpHb1RvRmlsZVBvczY0ICAgICAgICAgICAgICAgICAgICAgICAgQDEyOA0KKw0KKyAgICAgICAgemlwT3BlbjY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxMzANCisgICAgICAgIHppcE9wZW4yXzY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTMxDQorICAgICAgICB6aXBPcGVuTmV3RmlsZUluWmlwNjQgICAgICAgICAgICAgICAgICAgQDEzMg0KKyAgICAgICAgemlwT3Blbk5ld0ZpbGVJblppcDJfNjQgICAgICAgICAgICAgICAgIEAxMzMNCisgICAgICAgIHppcE9wZW5OZXdGaWxlSW5aaXAzXzY0ICAgICAgICAgICAgICAgICBAMTM0DQorICAgICAgICB6aXBPcGVuTmV3RmlsZUluWmlwNF82NCAgICAgICAgICAgICAgICAgQDEzNQ0KKyAgICAgICAgemlwQ2xvc2VGaWxlSW5aaXBSYXc2NCAgICAgICAgICAgICAgICAgIEAxMzYNCisNCis7IHpsaWIxIHYxLjIuNCBhZGRlZDoNCisgICAgICAgIGFkbGVyMzJfY29tYmluZSAgICAgICAgICAgICAgICAgICAgICAgICBAMTQwDQorICAgICAgICBjcmMzMl9jb21iaW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgQDE0Mg0KKyAgICAgICAgZGVmbGF0ZVNldEhlYWRlciAgICAgICAgICAgICAgICAgICAgICAgIEAxNDQNCisgICAgICAgIGRlZmxhdGVUdW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTQ1DQorICAgICAgICBnemJ1ZmZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDE0Ng0KKyAgICAgICAgZ3pjbG9zZV9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxNDcNCisgICAgICAgIGd6Y2xvc2VfdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTQ4DQorICAgICAgICBnemRpcmVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDE0OQ0KKyAgICAgICAgZ3pvZmZzZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxNTANCisgICAgICAgIGluZmxhdGVHZXRIZWFkZXIgICAgICAgICAgICAgICAgICAgICAgICBAMTU2DQorICAgICAgICBpbmZsYXRlTWFyayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDE1Nw0KKyAgICAgICAgaW5mbGF0ZVByaW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxNTgNCisgICAgICAgIGluZmxhdGVSZXNldDIgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTU5DQorICAgICAgICBpbmZsYXRlVW5kZXJtaW5lICAgICAgICAgICAgICAgICAgICAgICAgQDE2MA0KKw0KKzsgemxpYjEgdjEuMi42IGFkZGVkOg0KKyAgICAgICAgZ3pnZXRjXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxNjENCisgICAgICAgIGluZmxhdGVSZXNldEtlZXAgICAgICAgICAgICAgICAgICAgICAgICBAMTYzDQorICAgICAgICBkZWZsYXRlUmVzZXRLZWVwICAgICAgICAgICAgICAgICAgICAgICAgQDE2NA0KKw0KKzsgemxpYjEgdjEuMi43IGFkZGVkOg0KKyAgICAgICAgZ3pvcGVuX3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxNjUNCisNCis7IHpsaWIxIHYxLjIuOCBhZGRlZDoNCisgICAgICAgIGluZmxhdGVHZXREaWN0aW9uYXJ5ICAgICAgICAgICAgICAgICAgICBAMTY2DQorICAgICAgICBnenZwcmludGYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDE2Nw0KKw0KKzsgemxpYjEgdjEuMi45IGFkZGVkOg0KKyAgICAgICAgaW5mbGF0ZUNvZGVzVXNlZCAgICAgICAgICAgICAgICAgICAgICAgIEAxNjgNCisgICAgICAgIGluZmxhdGVWYWxpZGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICBAMTY5DQorICAgICAgICB1bmNvbXByZXNzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDE3MA0KKyAgICAgICAgZ3pmcmVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxNzENCisgICAgICAgIGd6ZndyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTcyDQorICAgICAgICBkZWZsYXRlR2V0RGljdGlvbmFyeSAgICAgICAgICAgICAgICAgICAgQDE3Mw0KKyAgICAgICAgYWRsZXIzMl96ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxNzQNCisgICAgICAgIGNyYzMyX3ogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTc1DQorDQorOyB6bGliMSB2MS4yLjEyIGFkZGVkOg0KKwkJY3JjMzJfY29tYmluZV9nZW4JCQkJCQlAMTc2DQorCQljcmMzMl9jb21iaW5lX2dlbjY0CQkJCQkJQDE3Nw0KKwkJY3JjMzJfY29tYmluZV9vcAkJCQkJCUAxNzgNCmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi92c3R1ZGlvL3ZjMTIvemxpYnZjLnNsbiBiL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxMi96bGlidmMuc2xuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjZGEyMjkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29udHJpYi92c3R1ZGlvL3ZjMTIvemxpYnZjLnNsbgpAQCAtMCwwICsxLDExOSBAQAor77u/CitNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyBTb2x1dGlvbiBGaWxlLCBGb3JtYXQgVmVyc2lvbiAxMi4wMAorIyBWaXN1YWwgU3R1ZGlvIDIwMTMKK1Zpc3VhbFN0dWRpb1ZlcnNpb24gPSAxMi4wLjQwNjI5LjAKK01pbmltdW1WaXN1YWxTdHVkaW9WZXJzaW9uID0gMTAuMC40MDIxOS4xCitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInpsaWJ2YyIsICJ6bGlidmMudmN4cHJvaiIsICJ7OEZEODI2RjgtMzczOS00NEU2LThDQzgtOTk3MTIyRTUzQjhEfSIKK0VuZFByb2plY3QKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiemxpYnN0YXQiLCAiemxpYnN0YXQudmN4cHJvaiIsICJ7NzQ1REVDNTgtRUJCMy00N0E5LUE5QjgtNEM2NjI3QzAxQkY4fSIKK0VuZFByb2plY3QKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAidGVzdHpsaWIiLCAidGVzdHpsaWIudmN4cHJvaiIsICJ7QUE2NjY2QUEtRTA5Ri00MTM1LTlDMEMtNEZFNTBDM0M2NTRCfSIKK0VuZFByb2plY3QKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAidGVzdHpsaWJkbGwiLCAidGVzdHpsaWJkbGwudmN4cHJvaiIsICJ7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzNjZBfSIKK0VuZFByb2plY3QKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAibWluaXppcCIsICJtaW5pemlwLnZjeHByb2oiLCAiezQ4Q0REOURDLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0iCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIm1pbml1bnoiLCAibWluaXVuei52Y3hwcm9qIiwgIntDNTJGOUU3Qi00OThBLTQyQkUtOERCNC04NUExNTY5NDM4MkF9IgorRW5kUHJvamVjdAorR2xvYmFsCisJR2xvYmFsU2VjdGlvbihTb2x1dGlvbkNvbmZpZ3VyYXRpb25QbGF0Zm9ybXMpID0gcHJlU29sdXRpb24KKwkJRGVidWd8SXRhbml1bSA9IERlYnVnfEl0YW5pdW0KKwkJRGVidWd8V2luMzIgPSBEZWJ1Z3xXaW4zMgorCQlEZWJ1Z3x4NjQgPSBEZWJ1Z3x4NjQKKwkJUmVsZWFzZXxJdGFuaXVtID0gUmVsZWFzZXxJdGFuaXVtCisJCVJlbGVhc2V8V2luMzIgPSBSZWxlYXNlfFdpbjMyCisJCVJlbGVhc2V8eDY0ID0gUmVsZWFzZXx4NjQKKwkJUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSA9IFJlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0KKwkJUmVsZWFzZVdpdGhvdXRBc218V2luMzIgPSBSZWxlYXNlV2l0aG91dEFzbXxXaW4zMgorCQlSZWxlYXNlV2l0aG91dEFzbXx4NjQgPSBSZWxlYXNlV2l0aG91dEFzbXx4NjQKKwlFbmRHbG9iYWxTZWN0aW9uCisJR2xvYmFsU2VjdGlvbihQcm9qZWN0Q29uZmlndXJhdGlvblBsYXRmb3JtcykgPSBwb3N0U29sdXRpb24KKwkJezhGRDgyNkY4LTM3MzktNDRFNi04Q0M4LTk5NzEyMkU1M0I4RH0uRGVidWd8SXRhbml1bS5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7OEZEODI2RjgtMzczOS00NEU2LThDQzgtOTk3MTIyRTUzQjhEfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7OEZEODI2RjgtMzczOS00NEU2LThDQzgtOTk3MTIyRTUzQjhEfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJezhGRDgyNkY4LTM3MzktNDRFNi04Q0M4LTk5NzEyMkU1M0I4RH0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7OEZEODI2RjgtMzczOS00NEU2LThDQzgtOTk3MTIyRTUzQjhEfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7OEZEODI2RjgtMzczOS00NEU2LThDQzgtOTk3MTIyRTUzQjhEfS5SZWxlYXNlfEl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7OEZEODI2RjgtMzczOS00NEU2LThDQzgtOTk3MTIyRTUzQjhEfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJezhGRDgyNkY4LTM3MzktNDRFNi04Q0M4LTk5NzEyMkU1M0I4RH0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7OEZEODI2RjgtMzczOS00NEU2LThDQzgtOTk3MTIyRTUzQjhEfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7OEZEODI2RjgtMzczOS00NEU2LThDQzgtOTk3MTIyRTUzQjhEfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwkJezhGRDgyNkY4LTM3MzktNDRFNi04Q0M4LTk5NzEyMkU1M0I4RH0uUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlV2l0aG91dEFzbXxXaW4zMgorCQl7OEZEODI2RjgtMzczOS00NEU2LThDQzgtOTk3MTIyRTUzQjhEfS5SZWxlYXNlV2l0aG91dEFzbXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlV2l0aG91dEFzbXxXaW4zMgorCQl7OEZEODI2RjgtMzczOS00NEU2LThDQzgtOTk3MTIyRTUzQjhEfS5SZWxlYXNlV2l0aG91dEFzbXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZVdpdGhvdXRBc218V2luMzIKKwkJezhGRDgyNkY4LTM3MzktNDRFNi04Q0M4LTk5NzEyMkU1M0I4RH0uUmVsZWFzZVdpdGhvdXRBc218eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2VXaXRob3V0QXNtfHg2NAorCQl7OEZEODI2RjgtMzczOS00NEU2LThDQzgtOTk3MTIyRTUzQjhEfS5SZWxlYXNlV2l0aG91dEFzbXx4NjQuQnVpbGQuMCA9IFJlbGVhc2VXaXRob3V0QXNtfHg2NAorCQl7NzQ1REVDNTgtRUJCMy00N0E5LUE5QjgtNEM2NjI3QzAxQkY4fS5EZWJ1Z3xJdGFuaXVtLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXs3NDVERUM1OC1FQkIzLTQ3QTktQTlCOC00QzY2MjdDMDFCRjh9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXs3NDVERUM1OC1FQkIzLTQ3QTktQTlCOC00QzY2MjdDMDFCRjh9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7NzQ1REVDNTgtRUJCMy00N0E5LUE5QjgtNEM2NjI3QzAxQkY4fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXs3NDVERUM1OC1FQkIzLTQ3QTktQTlCOC00QzY2MjdDMDFCRjh9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXs3NDVERUM1OC1FQkIzLTQ3QTktQTlCOC00QzY2MjdDMDFCRjh9LlJlbGVhc2V8SXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXs3NDVERUM1OC1FQkIzLTQ3QTktQTlCOC00QzY2MjdDMDFCRjh9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7NzQ1REVDNTgtRUJCMy00N0E5LUE5QjgtNEM2NjI3QzAxQkY4fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXs3NDVERUM1OC1FQkIzLTQ3QTktQTlCOC00QzY2MjdDMDFCRjh9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXs3NDVERUM1OC1FQkIzLTQ3QTktQTlCOC00QzY2MjdDMDFCRjh9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7NzQ1REVDNTgtRUJCMy00N0E5LUE5QjgtNEM2NjI3QzAxQkY4fS5SZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2VXaXRob3V0QXNtfFdpbjMyCisJCXs3NDVERUM1OC1FQkIzLTQ3QTktQTlCOC00QzY2MjdDMDFCRjh9LlJlbGVhc2VXaXRob3V0QXNtfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2VXaXRob3V0QXNtfFdpbjMyCisJCXs3NDVERUM1OC1FQkIzLTQ3QTktQTlCOC00QzY2MjdDMDFCRjh9LlJlbGVhc2VXaXRob3V0QXNtfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlV2l0aG91dEFzbXxXaW4zMgorCQl7NzQ1REVDNTgtRUJCMy00N0E5LUE5QjgtNEM2NjI3QzAxQkY4fS5SZWxlYXNlV2l0aG91dEFzbXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZVdpdGhvdXRBc218eDY0CisJCXs3NDVERUM1OC1FQkIzLTQ3QTktQTlCOC00QzY2MjdDMDFCRjh9LlJlbGVhc2VXaXRob3V0QXNtfHg2NC5CdWlsZC4wID0gUmVsZWFzZVdpdGhvdXRBc218eDY0CisJCXtBQTY2NjZBQS1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LkRlYnVnfEl0YW5pdW0uQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJe0FBNjY2NkFBLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJe0FBNjY2NkFBLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXtBQTY2NjZBQS1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJe0FBNjY2NkFBLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJe0FBNjY2NkFBLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uUmVsZWFzZXxJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJe0FBNjY2NkFBLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXtBQTY2NjZBQS1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJe0FBNjY2NkFBLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJe0FBNjY2NkFBLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXtBQTY2NjZBQS1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LlJlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZVdpdGhvdXRBc218V2luMzIKKwkJe0FBNjY2NkFBLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uUmVsZWFzZVdpdGhvdXRBc218V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZVdpdGhvdXRBc218V2luMzIKKwkJe0FBNjY2NkFBLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uUmVsZWFzZVdpdGhvdXRBc218V2luMzIuQnVpbGQuMCA9IFJlbGVhc2VXaXRob3V0QXNtfFdpbjMyCisJCXtBQTY2NjZBQS1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LlJlbGVhc2VXaXRob3V0QXNtfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlV2l0aG91dEFzbXx4NjQKKwkJe0FBNjY2NkFBLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uUmVsZWFzZVdpdGhvdXRBc218eDY0LkJ1aWxkLjAgPSBSZWxlYXNlV2l0aG91dEFzbXx4NjQKKwkJe0M1MkY5RTdCLTQ5OEEtNDJCRS04REI0LTg1QTE1Njk0MzY2QX0uRGVidWd8SXRhbml1bS5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzNjZBfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzNjZBfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJe0M1MkY5RTdCLTQ5OEEtNDJCRS04REI0LTg1QTE1Njk0MzY2QX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzNjZBfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzNjZBfS5SZWxlYXNlfEl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzNjZBfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJe0M1MkY5RTdCLTQ5OEEtNDJCRS04REI0LTg1QTE1Njk0MzY2QX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzNjZBfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzNjZBfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwkJe0M1MkY5RTdCLTQ5OEEtNDJCRS04REI0LTg1QTE1Njk0MzY2QX0uUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXtDNTJGOUU3Qi00OThBLTQyQkUtOERCNC04NUExNTY5NDM2NkF9LlJlbGVhc2VXaXRob3V0QXNtfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJe0M1MkY5RTdCLTQ5OEEtNDJCRS04REI0LTg1QTE1Njk0MzY2QX0uUmVsZWFzZVdpdGhvdXRBc218eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXs0OENERDlEQy1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LkRlYnVnfEl0YW5pdW0uQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJezQ4Q0REOURDLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJezQ4Q0REOURDLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXs0OENERDlEQy1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJezQ4Q0REOURDLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJezQ4Q0REOURDLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uUmVsZWFzZXxJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJezQ4Q0REOURDLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXs0OENERDlEQy1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJezQ4Q0REOURDLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJezQ4Q0REOURDLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXs0OENERDlEQy1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LlJlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7NDhDREQ5REMtRTA5Ri00MTM1LTlDMEMtNEZFNTBDM0M2NTRCfS5SZWxlYXNlV2l0aG91dEFzbXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXs0OENERDlEQy1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LlJlbGVhc2VXaXRob3V0QXNtfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzODJBfS5EZWJ1Z3xJdGFuaXVtLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXtDNTJGOUU3Qi00OThBLTQyQkUtOERCNC04NUExNTY5NDM4MkF9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXtDNTJGOUU3Qi00OThBLTQyQkUtOERCNC04NUExNTY5NDM4MkF9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzODJBfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXtDNTJGOUU3Qi00OThBLTQyQkUtOERCNC04NUExNTY5NDM4MkF9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXtDNTJGOUU3Qi00OThBLTQyQkUtOERCNC04NUExNTY5NDM4MkF9LlJlbGVhc2V8SXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXtDNTJGOUU3Qi00OThBLTQyQkUtOERCNC04NUExNTY5NDM4MkF9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzODJBfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXtDNTJGOUU3Qi00OThBLTQyQkUtOERCNC04NUExNTY5NDM4MkF9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXtDNTJGOUU3Qi00OThBLTQyQkUtOERCNC04NUExNTY5NDM4MkF9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzODJBfS5SZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJe0M1MkY5RTdCLTQ5OEEtNDJCRS04REI0LTg1QTE1Njk0MzgyQX0uUmVsZWFzZVdpdGhvdXRBc218V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzODJBfS5SZWxlYXNlV2l0aG91dEFzbXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwlFbmRHbG9iYWxTZWN0aW9uCisJR2xvYmFsU2VjdGlvbihTb2x1dGlvblByb3BlcnRpZXMpID0gcHJlU29sdXRpb24KKwkJSGlkZVNvbHV0aW9uTm9kZSA9IEZBTFNFCisJRW5kR2xvYmFsU2VjdGlvbgorRW5kR2xvYmFsCmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi92c3R1ZGlvL3ZjMTIvemxpYnZjLnZjeHByb2ogYi9zcmMvY29udHJpYi92c3R1ZGlvL3ZjMTIvemxpYnZjLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIyYjZjMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxMi96bGlidmMudmN4cHJvagpAQCAtMCwwICsxLDY5MiBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSIxMi4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8SXRhbml1bSI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5JdGFuaXVtPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlV2l0aG91dEFzbTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5JdGFuaXVtPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlV2l0aG91dEFzbTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZVdpdGhvdXRBc218eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2VXaXRob3V0QXNtPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxJdGFuaXVtIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+SXRhbml1bTwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgPC9JdGVtR3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+ezhGRDgyNkY4LTM3MzktNDRFNi04Q0M4LTk5NzEyMkU1M0I4RH08L1Byb2plY3RHdWlkPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTIwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTIwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTIwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djEyMDwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTIwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxMjA8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxMjA8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTIwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djEyMDwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwPgorICAgIDxfUHJvamVjdEZpbGVWZXJzaW9uPjEwLjAuMzAxMjguMTwvX1Byb2plY3RGaWxlVmVyc2lvbj4KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj54ODZcWmxpYkRsbCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+CisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+eDg2XFpsaWJEbGwkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgICAgPEdlbmVyYXRlTWFuaWZlc3QgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPmZhbHNlPC9HZW5lcmF0ZU1hbmlmZXN0PgorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiciPng4NlxabGliRGxsJChDb25maWd1cmF0aW9uKVw8L091dERpcj4KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218V2luMzInIj54ODZcWmxpYkRsbCQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPgorICAgIDxMaW5rSW5jcmVtZW50YWwgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiciPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgICAgPEdlbmVyYXRlTWFuaWZlc3QgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiciPmZhbHNlPC9HZW5lcmF0ZU1hbmlmZXN0PgorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+eDg2XFpsaWJEbGwkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPgorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+eDg2XFpsaWJEbGwkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgICAgPEdlbmVyYXRlTWFuaWZlc3QgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+ZmFsc2U8L0dlbmVyYXRlTWFuaWZlc3Q+CisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPng2NFxabGliRGxsJChDb25maWd1cmF0aW9uKVw8L091dERpcj4KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+eDY0XFpsaWJEbGwkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICAgIDxHZW5lcmF0ZU1hbmlmZXN0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+ZmFsc2U8L0dlbmVyYXRlTWFuaWZlc3Q+CisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIj5pYTY0XFpsaWJEbGwkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPgorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+aWE2NFxabGliRGxsJChDb25maWd1cmF0aW9uKVxUbXBcPC9JbnREaXI+CisgICAgPExpbmtJbmNyZW1lbnRhbCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIj50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgICAgPEdlbmVyYXRlTWFuaWZlc3QgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+ZmFsc2U8L0dlbmVyYXRlTWFuaWZlc3Q+CisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfHg2NCciPng2NFxabGliRGxsJChDb25maWd1cmF0aW9uKVw8L091dERpcj4KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218eDY0JyI+eDY0XFpsaWJEbGwkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218eDY0JyI+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgICA8R2VuZXJhdGVNYW5pZmVzdCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfHg2NCciPmZhbHNlPC9HZW5lcmF0ZU1hbmlmZXN0PgorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtJyI+aWE2NFxabGliRGxsJChDb25maWd1cmF0aW9uKVw8L091dERpcj4KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSciPmlhNjRcWmxpYkRsbCQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPgorICAgIDxMaW5rSW5jcmVtZW50YWwgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtJyI+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgICA8R2VuZXJhdGVNYW5pZmVzdCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0nIj5mYWxzZTwvR2VuZXJhdGVNYW5pZmVzdD4KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj54NjRcWmxpYkRsbCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+CisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+eDY0XFpsaWJEbGwkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICAgIDxHZW5lcmF0ZU1hbmlmZXN0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5mYWxzZTwvR2VuZXJhdGVNYW5pZmVzdD4KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyI+aWE2NFxabGliRGxsJChDb25maWd1cmF0aW9uKVw8L091dERpcj4KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyI+aWE2NFxabGliRGxsJChDb25maWd1cmF0aW9uKVxUbXBcPC9JbnREaXI+CisgICAgPExpbmtJbmNyZW1lbnRhbCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgICAgPEdlbmVyYXRlTWFuaWZlc3QgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIj5mYWxzZTwvR2VuZXJhdGVNYW5pZmVzdD4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0nIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0nIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0nIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfFdpbjMyJyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXx4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfHg2NCciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218eDY0JyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+CisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+CisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+CisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgLz4KKyAgICA8VGFyZ2V0TmFtZSBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+emxpYndhcGk8L1RhcmdldE5hbWU+CisgICAgPFRhcmdldE5hbWUgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiciPnpsaWJ3YXBpPC9UYXJnZXROYW1lPgorICAgIDxUYXJnZXROYW1lIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPnpsaWJ3YXBpPC9UYXJnZXROYW1lPgorICAgIDxUYXJnZXROYW1lIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+emxpYndhcGk8L1RhcmdldE5hbWU+CisgICAgPFRhcmdldE5hbWUgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXx4NjQnIj56bGlid2FwaTwvVGFyZ2V0TmFtZT4KKyAgICA8VGFyZ2V0TmFtZSBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+emxpYndhcGk8L1RhcmdldE5hbWU+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxNaWRsPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9ERUJVRzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8TWtUeXBMaWJDb21wYXRpYmxlPnRydWU8L01rVHlwTGliQ29tcGF0aWJsZT4KKyAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPgorICAgICAgPFRhcmdldEVudmlyb25tZW50PldpbjMyPC9UYXJnZXRFbnZpcm9ubWVudD4KKyAgICAgIDxUeXBlTGlicmFyeU5hbWU+JChPdXREaXIpemxpYnZjLnRsYjwvVHlwZUxpYnJhcnlOYW1lPgorICAgIDwvTWlkbD4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47Li5cLi5cbWFzbXg4NjslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19XQVJOSU5HUztaTElCX1dJTkFQSTtBU01WO0FTTUlORjslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8RXhjZXB0aW9uSGFuZGxpbmc+CisgICAgICA8L0V4Y2VwdGlvbkhhbmRsaW5nPgorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1Z0RMTDwvUnVudGltZUxpYnJhcnk+CisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlck91dHB1dEZpbGU+JChJbnREaXIpemxpYnZjLnBjaDwvUHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlPgorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4KKyAgICAgIDxPYmplY3RGaWxlTmFtZT4kKEludERpcik8L09iamVjdEZpbGVOYW1lPgorICAgICAgPFByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPiQoT3V0RGlyKTwvUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+CisgICAgICA8QnJvd3NlSW5mb3JtYXRpb24+CisgICAgICA8L0Jyb3dzZUluZm9ybWF0aW9uPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPgorICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+UHJvZ3JhbURhdGFiYXNlPC9EZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PgorICAgIDwvQ2xDb21waWxlPgorICAgIDxSZXNvdXJjZUNvbXBpbGU+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0RFQlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxDdWx0dXJlPjB4MDQwYzwvQ3VsdHVyZT4KKyAgICA8L1Jlc291cmNlQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxBZGRpdGlvbmFsT3B0aW9ucz4vTUFDSElORTpJMzg2ICUoQWRkaXRpb25hbE9wdGlvbnMpPC9BZGRpdGlvbmFsT3B0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPi4uXC4uXG1hc214ODZcbWF0Y2g2ODYub2JqOy4uXC4uXG1hc214ODZcaW5mZmFzMzIub2JqOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpcil6bGlid2FwaS5kbGw8L091dHB1dEZpbGU+CisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4KKyAgICAgIDxNb2R1bGVEZWZpbml0aW9uRmlsZT4uXHpsaWJ2Yy5kZWY8L01vZHVsZURlZmluaXRpb25GaWxlPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8UHJvZ3JhbURhdGFiYXNlRmlsZT4kKE91dERpcil6bGlid2FwaS5wZGI8L1Byb2dyYW1EYXRhYmFzZUZpbGU+CisgICAgICA8R2VuZXJhdGVNYXBGaWxlPnRydWU8L0dlbmVyYXRlTWFwRmlsZT4KKyAgICAgIDxNYXBGaWxlTmFtZT4kKE91dERpcil6bGlid2FwaS5tYXA8L01hcEZpbGVOYW1lPgorICAgICAgPFN1YlN5c3RlbT5XaW5kb3dzPC9TdWJTeXN0ZW0+CisgICAgICA8UmFuZG9taXplZEJhc2VBZGRyZXNzPmZhbHNlPC9SYW5kb21pemVkQmFzZUFkZHJlc3M+CisgICAgICA8RGF0YUV4ZWN1dGlvblByZXZlbnRpb24+CisgICAgICA8L0RhdGFFeGVjdXRpb25QcmV2ZW50aW9uPgorICAgICAgPEltcG9ydExpYnJhcnk+JChPdXREaXIpemxpYndhcGkubGliPC9JbXBvcnRMaWJyYXJ5PgorICAgIDwvTGluaz4KKyAgICA8UHJlQnVpbGRFdmVudD4KKyAgICAgIDxDb21tYW5kPmNkIC4uXC4uXG1hc214ODYKK2JsZF9tbDMyLmJhdDwvQ29tbWFuZD4KKyAgICA8L1ByZUJ1aWxkRXZlbnQ+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiciPgorICAgIDxNaWRsPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPk5ERUJVRzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8TWtUeXBMaWJDb21wYXRpYmxlPnRydWU8L01rVHlwTGliQ29tcGF0aWJsZT4KKyAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPgorICAgICAgPFRhcmdldEVudmlyb25tZW50PldpbjMyPC9UYXJnZXRFbnZpcm9ubWVudD4KKyAgICAgIDxUeXBlTGlicmFyeU5hbWU+JChPdXREaXIpemxpYnZjLnRsYjwvVHlwZUxpYnJhcnlOYW1lPgorICAgIDwvTWlkbD4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtYXNteDg2OyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX1dBUk5JTkdTO1pMSUJfV0lOQVBJOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+CisgICAgICA8RXhjZXB0aW9uSGFuZGxpbmc+CisgICAgICA8L0V4Y2VwdGlvbkhhbmRsaW5nPgorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWRETEw8L1J1bnRpbWVMaWJyYXJ5PgorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlPiQoSW50RGlyKXpsaWJ2Yy5wY2g8L1ByZWNvbXBpbGVkSGVhZGVyT3V0cHV0RmlsZT4KKyAgICAgIDxBc3NlbWJsZXJPdXRwdXQ+QWxsPC9Bc3NlbWJsZXJPdXRwdXQ+CisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPgorICAgICAgPE9iamVjdEZpbGVOYW1lPiQoSW50RGlyKTwvT2JqZWN0RmlsZU5hbWU+CisgICAgICA8UHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+JChPdXREaXIpPC9Qcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4KKyAgICAgIDxCcm93c2VJbmZvcm1hdGlvbj4KKyAgICAgIDwvQnJvd3NlSW5mb3JtYXRpb24+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPFJlc291cmNlQ29tcGlsZT4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5OREVCVUc7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEN1bHR1cmU+MHgwNDBjPC9DdWx0dXJlPgorICAgIDwvUmVzb3VyY2VDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPEFkZGl0aW9uYWxPcHRpb25zPi9NQUNISU5FOkkzODYgJShBZGRpdGlvbmFsT3B0aW9ucyk8L0FkZGl0aW9uYWxPcHRpb25zPgorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpemxpYndhcGkuZGxsPC9PdXRwdXRGaWxlPgorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+CisgICAgICA8SWdub3JlQWxsRGVmYXVsdExpYnJhcmllcz5mYWxzZTwvSWdub3JlQWxsRGVmYXVsdExpYnJhcmllcz4KKyAgICAgIDxNb2R1bGVEZWZpbml0aW9uRmlsZT4uXHpsaWJ2Yy5kZWY8L01vZHVsZURlZmluaXRpb25GaWxlPgorICAgICAgPFByb2dyYW1EYXRhYmFzZUZpbGU+JChPdXREaXIpemxpYndhcGkucGRiPC9Qcm9ncmFtRGF0YWJhc2VGaWxlPgorICAgICAgPEdlbmVyYXRlTWFwRmlsZT50cnVlPC9HZW5lcmF0ZU1hcEZpbGU+CisgICAgICA8TWFwRmlsZU5hbWU+JChPdXREaXIpemxpYndhcGkubWFwPC9NYXBGaWxlTmFtZT4KKyAgICAgIDxTdWJTeXN0ZW0+V2luZG93czwvU3ViU3lzdGVtPgorICAgICAgPFJhbmRvbWl6ZWRCYXNlQWRkcmVzcz5mYWxzZTwvUmFuZG9taXplZEJhc2VBZGRyZXNzPgorICAgICAgPERhdGFFeGVjdXRpb25QcmV2ZW50aW9uPgorICAgICAgPC9EYXRhRXhlY3V0aW9uUHJldmVudGlvbj4KKyAgICAgIDxJbXBvcnRMaWJyYXJ5PiQoT3V0RGlyKXpsaWJ3YXBpLmxpYjwvSW1wb3J0TGlicmFyeT4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPE1pZGw+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+TkRFQlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxNa1R5cExpYkNvbXBhdGlibGU+dHJ1ZTwvTWtUeXBMaWJDb21wYXRpYmxlPgorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+CisgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+V2luMzI8L1RhcmdldEVudmlyb25tZW50PgorICAgICAgPFR5cGVMaWJyYXJ5TmFtZT4kKE91dERpcil6bGlidmMudGxiPC9UeXBlTGlicmFyeU5hbWU+CisgICAgPC9NaWRsPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOy4uXC4uXG1hc214ODY7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fV0FSTklOR1M7WkxJQl9XSU5BUEk7QVNNVjtBU01JTkY7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4KKyAgICAgIDxFeGNlcHRpb25IYW5kbGluZz4KKyAgICAgIDwvRXhjZXB0aW9uSGFuZGxpbmc+CisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+CisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlck91dHB1dEZpbGU+JChJbnREaXIpemxpYnZjLnBjaDwvUHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlPgorICAgICAgPEFzc2VtYmxlck91dHB1dD5BbGw8L0Fzc2VtYmxlck91dHB1dD4KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+CisgICAgICA8T2JqZWN0RmlsZU5hbWU+JChJbnREaXIpPC9PYmplY3RGaWxlTmFtZT4KKyAgICAgIDxQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4kKE91dERpcik8L1Byb2dyYW1EYXRhQmFzZUZpbGVOYW1lPgorICAgICAgPEJyb3dzZUluZm9ybWF0aW9uPgorICAgICAgPC9Ccm93c2VJbmZvcm1hdGlvbj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8UmVzb3VyY2VDb21waWxlPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPk5ERUJVRzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8Q3VsdHVyZT4weDA0MGM8L0N1bHR1cmU+CisgICAgPC9SZXNvdXJjZUNvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8QWRkaXRpb25hbE9wdGlvbnM+L01BQ0hJTkU6STM4NiAlKEFkZGl0aW9uYWxPcHRpb25zKTwvQWRkaXRpb25hbE9wdGlvbnM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4uLlwuLlxtYXNteDg2XG1hdGNoNjg2Lm9iajsuLlwuLlxtYXNteDg2XGluZmZhczMyLm9iajslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpemxpYndhcGkuZGxsPC9PdXRwdXRGaWxlPgorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+CisgICAgICA8SWdub3JlQWxsRGVmYXVsdExpYnJhcmllcz5mYWxzZTwvSWdub3JlQWxsRGVmYXVsdExpYnJhcmllcz4KKyAgICAgIDxNb2R1bGVEZWZpbml0aW9uRmlsZT4uXHpsaWJ2Yy5kZWY8L01vZHVsZURlZmluaXRpb25GaWxlPgorICAgICAgPFByb2dyYW1EYXRhYmFzZUZpbGU+JChPdXREaXIpemxpYndhcGkucGRiPC9Qcm9ncmFtRGF0YWJhc2VGaWxlPgorICAgICAgPEdlbmVyYXRlTWFwRmlsZT50cnVlPC9HZW5lcmF0ZU1hcEZpbGU+CisgICAgICA8TWFwRmlsZU5hbWU+JChPdXREaXIpemxpYndhcGkubWFwPC9NYXBGaWxlTmFtZT4KKyAgICAgIDxTdWJTeXN0ZW0+V2luZG93czwvU3ViU3lzdGVtPgorICAgICAgPFJhbmRvbWl6ZWRCYXNlQWRkcmVzcz5mYWxzZTwvUmFuZG9taXplZEJhc2VBZGRyZXNzPgorICAgICAgPERhdGFFeGVjdXRpb25QcmV2ZW50aW9uPgorICAgICAgPC9EYXRhRXhlY3V0aW9uUHJldmVudGlvbj4KKyAgICAgIDxJbXBvcnRMaWJyYXJ5PiQoT3V0RGlyKXpsaWJ3YXBpLmxpYjwvSW1wb3J0TGlicmFyeT4KKyAgICAgIDxJbWFnZUhhc1NhZmVFeGNlcHRpb25IYW5kbGVycz5mYWxzZTwvSW1hZ2VIYXNTYWZlRXhjZXB0aW9uSGFuZGxlcnM+CisgICAgPC9MaW5rPgorICAgIDxQcmVCdWlsZEV2ZW50PgorICAgICAgPENvbW1hbmQ+Y2QgLi5cLi5cbWFzbXg4NgorYmxkX21sMzIuYmF0PC9Db21tYW5kPgorICAgIDwvUHJlQnVpbGRFdmVudD4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxNaWRsPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9ERUJVRzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8TWtUeXBMaWJDb21wYXRpYmxlPnRydWU8L01rVHlwTGliQ29tcGF0aWJsZT4KKyAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPgorICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+CisgICAgICA8VHlwZUxpYnJhcnlOYW1lPiQoT3V0RGlyKXpsaWJ2Yy50bGI8L1R5cGVMaWJyYXJ5TmFtZT4KKyAgICA8L01pZGw+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOy4uXC4uXG1hc214ODY7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fV0FSTklOR1M7WkxJQl9XSU5BUEk7QVNNVjtBU01JTkY7V0lONjQ7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEV4Y2VwdGlvbkhhbmRsaW5nPgorICAgICAgPC9FeGNlcHRpb25IYW5kbGluZz4KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWdETEw8L1J1bnRpbWVMaWJyYXJ5PgorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlPiQoSW50RGlyKXpsaWJ2Yy5wY2g8L1ByZWNvbXBpbGVkSGVhZGVyT3V0cHV0RmlsZT4KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+CisgICAgICA8T2JqZWN0RmlsZU5hbWU+JChJbnREaXIpPC9PYmplY3RGaWxlTmFtZT4KKyAgICAgIDxQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4kKE91dERpcik8L1Byb2dyYW1EYXRhQmFzZUZpbGVOYW1lPgorICAgICAgPEJyb3dzZUluZm9ybWF0aW9uPgorICAgICAgPC9Ccm93c2VJbmZvcm1hdGlvbj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8UmVzb3VyY2VDb21waWxlPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9ERUJVRzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8Q3VsdHVyZT4weDA0MGM8L0N1bHR1cmU+CisgICAgPC9SZXNvdXJjZUNvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4uLlwuLlxtYXNteDY0XGd2bWF0NjQub2JqOy4uXC4uXG1hc214NjRcaW5mZmFzeDY0Lm9iajslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpemxpYndhcGkuZGxsPC9PdXRwdXRGaWxlPgorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+CisgICAgICA8TW9kdWxlRGVmaW5pdGlvbkZpbGU+Llx6bGlidmMuZGVmPC9Nb2R1bGVEZWZpbml0aW9uRmlsZT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFByb2dyYW1EYXRhYmFzZUZpbGU+JChPdXREaXIpemxpYndhcGkucGRiPC9Qcm9ncmFtRGF0YWJhc2VGaWxlPgorICAgICAgPEdlbmVyYXRlTWFwRmlsZT50cnVlPC9HZW5lcmF0ZU1hcEZpbGU+CisgICAgICA8TWFwRmlsZU5hbWU+JChPdXREaXIpemxpYndhcGkubWFwPC9NYXBGaWxlTmFtZT4KKyAgICAgIDxTdWJTeXN0ZW0+V2luZG93czwvU3ViU3lzdGVtPgorICAgICAgPEltcG9ydExpYnJhcnk+JChPdXREaXIpemxpYndhcGkubGliPC9JbXBvcnRMaWJyYXJ5PgorICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KKyAgICA8L0xpbms+CisgICAgPFByZUJ1aWxkRXZlbnQ+CisgICAgICA8Q29tbWFuZD5jZCAuLlwuLlxjb250cmliXG1hc214NjQKK2JsZF9tbDY0LmJhdDwvQ29tbWFuZD4KKyAgICA8L1ByZUJ1aWxkRXZlbnQ+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+CisgICAgPE1pZGw+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0RFQlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxNa1R5cExpYkNvbXBhdGlibGU+dHJ1ZTwvTWtUeXBMaWJDb21wYXRpYmxlPgorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+CisgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+SXRhbml1bTwvVGFyZ2V0RW52aXJvbm1lbnQ+CisgICAgICA8VHlwZUxpYnJhcnlOYW1lPiQoT3V0RGlyKXpsaWJ2Yy50bGI8L1R5cGVMaWJyYXJ5TmFtZT4KKyAgICA8L01pZGw+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOy4uXC4uXG1hc214ODY7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fV0FSTklOR1M7WkxJQl9XSU5BUEk7V0lONjQ7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEV4Y2VwdGlvbkhhbmRsaW5nPgorICAgICAgPC9FeGNlcHRpb25IYW5kbGluZz4KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWdETEw8L1J1bnRpbWVMaWJyYXJ5PgorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlPiQoSW50RGlyKXpsaWJ2Yy5wY2g8L1ByZWNvbXBpbGVkSGVhZGVyT3V0cHV0RmlsZT4KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+CisgICAgICA8T2JqZWN0RmlsZU5hbWU+JChJbnREaXIpPC9PYmplY3RGaWxlTmFtZT4KKyAgICAgIDxQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4kKE91dERpcik8L1Byb2dyYW1EYXRhQmFzZUZpbGVOYW1lPgorICAgICAgPEJyb3dzZUluZm9ybWF0aW9uPgorICAgICAgPC9Ccm93c2VJbmZvcm1hdGlvbj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8UmVzb3VyY2VDb21waWxlPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9ERUJVRzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8Q3VsdHVyZT4weDA0MGM8L0N1bHR1cmU+CisgICAgPC9SZXNvdXJjZUNvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpcil6bGlid2FwaS5kbGw8L091dHB1dEZpbGU+CisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4KKyAgICAgIDxNb2R1bGVEZWZpbml0aW9uRmlsZT4uXHpsaWJ2Yy5kZWY8L01vZHVsZURlZmluaXRpb25GaWxlPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8UHJvZ3JhbURhdGFiYXNlRmlsZT4kKE91dERpcil6bGlid2FwaS5wZGI8L1Byb2dyYW1EYXRhYmFzZUZpbGU+CisgICAgICA8R2VuZXJhdGVNYXBGaWxlPnRydWU8L0dlbmVyYXRlTWFwRmlsZT4KKyAgICAgIDxNYXBGaWxlTmFtZT4kKE91dERpcil6bGlid2FwaS5tYXA8L01hcEZpbGVOYW1lPgorICAgICAgPFN1YlN5c3RlbT5XaW5kb3dzPC9TdWJTeXN0ZW0+CisgICAgICA8SW1wb3J0TGlicmFyeT4kKE91dERpcil6bGlid2FwaS5saWI8L0ltcG9ydExpYnJhcnk+CisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lSUE2NDwvVGFyZ2V0TWFjaGluZT4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXx4NjQnIj4KKyAgICA8TWlkbD4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5OREVCVUc7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPE1rVHlwTGliQ29tcGF0aWJsZT50cnVlPC9Na1R5cExpYkNvbXBhdGlibGU+CisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4KKyAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgorICAgICAgPFR5cGVMaWJyYXJ5TmFtZT4kKE91dERpcil6bGlidmMudGxiPC9UeXBlTGlicmFyeU5hbWU+CisgICAgPC9NaWRsPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOy4uXC4uXG1hc214ODY7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fV0FSTklOR1M7WkxJQl9XSU5BUEk7V0lONjQ7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4KKyAgICAgIDxFeGNlcHRpb25IYW5kbGluZz4KKyAgICAgIDwvRXhjZXB0aW9uSGFuZGxpbmc+CisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERMTDwvUnVudGltZUxpYnJhcnk+CisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlck91dHB1dEZpbGU+JChJbnREaXIpemxpYnZjLnBjaDwvUHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlPgorICAgICAgPEFzc2VtYmxlck91dHB1dD5BbGw8L0Fzc2VtYmxlck91dHB1dD4KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+CisgICAgICA8T2JqZWN0RmlsZU5hbWU+JChJbnREaXIpPC9PYmplY3RGaWxlTmFtZT4KKyAgICAgIDxQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4kKE91dERpcik8L1Byb2dyYW1EYXRhQmFzZUZpbGVOYW1lPgorICAgICAgPEJyb3dzZUluZm9ybWF0aW9uPgorICAgICAgPC9Ccm93c2VJbmZvcm1hdGlvbj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8UmVzb3VyY2VDb21waWxlPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPk5ERUJVRzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8Q3VsdHVyZT4weDA0MGM8L0N1bHR1cmU+CisgICAgPC9SZXNvdXJjZUNvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpcil6bGlid2FwaS5kbGw8L091dHB1dEZpbGU+CisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4KKyAgICAgIDxJZ25vcmVBbGxEZWZhdWx0TGlicmFyaWVzPmZhbHNlPC9JZ25vcmVBbGxEZWZhdWx0TGlicmFyaWVzPgorICAgICAgPE1vZHVsZURlZmluaXRpb25GaWxlPi5cemxpYnZjLmRlZjwvTW9kdWxlRGVmaW5pdGlvbkZpbGU+CisgICAgICA8UHJvZ3JhbURhdGFiYXNlRmlsZT4kKE91dERpcil6bGlid2FwaS5wZGI8L1Byb2dyYW1EYXRhYmFzZUZpbGU+CisgICAgICA8R2VuZXJhdGVNYXBGaWxlPnRydWU8L0dlbmVyYXRlTWFwRmlsZT4KKyAgICAgIDxNYXBGaWxlTmFtZT4kKE91dERpcil6bGlid2FwaS5tYXA8L01hcEZpbGVOYW1lPgorICAgICAgPFN1YlN5c3RlbT5XaW5kb3dzPC9TdWJTeXN0ZW0+CisgICAgICA8SW1wb3J0TGlicmFyeT4kKE91dERpcil6bGlid2FwaS5saWI8L0ltcG9ydExpYnJhcnk+CisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0nIj4KKyAgICA8TWlkbD4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5OREVCVUc7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPE1rVHlwTGliQ29tcGF0aWJsZT50cnVlPC9Na1R5cExpYkNvbXBhdGlibGU+CisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4KKyAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5JdGFuaXVtPC9UYXJnZXRFbnZpcm9ubWVudD4KKyAgICAgIDxUeXBlTGlicmFyeU5hbWU+JChPdXREaXIpemxpYnZjLnRsYjwvVHlwZUxpYnJhcnlOYW1lPgorICAgIDwvTWlkbD4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtYXNteDg2OyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX1dBUk5JTkdTO1pMSUJfV0lOQVBJO1dJTjY0OyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+CisgICAgICA8RXhjZXB0aW9uSGFuZGxpbmc+CisgICAgICA8L0V4Y2VwdGlvbkhhbmRsaW5nPgorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWRETEw8L1J1bnRpbWVMaWJyYXJ5PgorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlPiQoSW50RGlyKXpsaWJ2Yy5wY2g8L1ByZWNvbXBpbGVkSGVhZGVyT3V0cHV0RmlsZT4KKyAgICAgIDxBc3NlbWJsZXJPdXRwdXQ+QWxsPC9Bc3NlbWJsZXJPdXRwdXQ+CisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPgorICAgICAgPE9iamVjdEZpbGVOYW1lPiQoSW50RGlyKTwvT2JqZWN0RmlsZU5hbWU+CisgICAgICA8UHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+JChPdXREaXIpPC9Qcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4KKyAgICAgIDxCcm93c2VJbmZvcm1hdGlvbj4KKyAgICAgIDwvQnJvd3NlSW5mb3JtYXRpb24+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPFJlc291cmNlQ29tcGlsZT4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5OREVCVUc7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEN1bHR1cmU+MHgwNDBjPC9DdWx0dXJlPgorICAgIDwvUmVzb3VyY2VDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpemxpYndhcGkuZGxsPC9PdXRwdXRGaWxlPgorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+CisgICAgICA8SWdub3JlQWxsRGVmYXVsdExpYnJhcmllcz5mYWxzZTwvSWdub3JlQWxsRGVmYXVsdExpYnJhcmllcz4KKyAgICAgIDxNb2R1bGVEZWZpbml0aW9uRmlsZT4uXHpsaWJ2Yy5kZWY8L01vZHVsZURlZmluaXRpb25GaWxlPgorICAgICAgPFByb2dyYW1EYXRhYmFzZUZpbGU+JChPdXREaXIpemxpYndhcGkucGRiPC9Qcm9ncmFtRGF0YWJhc2VGaWxlPgorICAgICAgPEdlbmVyYXRlTWFwRmlsZT50cnVlPC9HZW5lcmF0ZU1hcEZpbGU+CisgICAgICA8TWFwRmlsZU5hbWU+JChPdXREaXIpemxpYndhcGkubWFwPC9NYXBGaWxlTmFtZT4KKyAgICAgIDxTdWJTeXN0ZW0+V2luZG93czwvU3ViU3lzdGVtPgorICAgICAgPEltcG9ydExpYnJhcnk+JChPdXREaXIpemxpYndhcGkubGliPC9JbXBvcnRMaWJyYXJ5PgorICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZUlBNjQ8L1RhcmdldE1hY2hpbmU+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8TWlkbD4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5OREVCVUc7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPE1rVHlwTGliQ29tcGF0aWJsZT50cnVlPC9Na1R5cExpYkNvbXBhdGlibGU+CisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4KKyAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgorICAgICAgPFR5cGVMaWJyYXJ5TmFtZT4kKE91dERpcil6bGlidmMudGxiPC9UeXBlTGlicmFyeU5hbWU+CisgICAgPC9NaWRsPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOy4uXC4uXG1hc214ODY7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fV0FSTklOR1M7WkxJQl9XSU5BUEk7QVNNVjtBU01JTkY7V0lONjQ7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4KKyAgICAgIDxFeGNlcHRpb25IYW5kbGluZz4KKyAgICAgIDwvRXhjZXB0aW9uSGFuZGxpbmc+CisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERMTDwvUnVudGltZUxpYnJhcnk+CisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlck91dHB1dEZpbGU+JChJbnREaXIpemxpYnZjLnBjaDwvUHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlPgorICAgICAgPEFzc2VtYmxlck91dHB1dD5BbGw8L0Fzc2VtYmxlck91dHB1dD4KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+CisgICAgICA8T2JqZWN0RmlsZU5hbWU+JChJbnREaXIpPC9PYmplY3RGaWxlTmFtZT4KKyAgICAgIDxQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4kKE91dERpcik8L1Byb2dyYW1EYXRhQmFzZUZpbGVOYW1lPgorICAgICAgPEJyb3dzZUluZm9ybWF0aW9uPgorICAgICAgPC9Ccm93c2VJbmZvcm1hdGlvbj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8UmVzb3VyY2VDb21waWxlPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPk5ERUJVRzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8Q3VsdHVyZT4weDA0MGM8L0N1bHR1cmU+CisgICAgPC9SZXNvdXJjZUNvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4uLlwuLlxtYXNteDY0XGd2bWF0NjQub2JqOy4uXC4uXG1hc214NjRcaW5mZmFzeDY0Lm9iajslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpemxpYndhcGkuZGxsPC9PdXRwdXRGaWxlPgorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+CisgICAgICA8SWdub3JlQWxsRGVmYXVsdExpYnJhcmllcz5mYWxzZTwvSWdub3JlQWxsRGVmYXVsdExpYnJhcmllcz4KKyAgICAgIDxNb2R1bGVEZWZpbml0aW9uRmlsZT4uXHpsaWJ2Yy5kZWY8L01vZHVsZURlZmluaXRpb25GaWxlPgorICAgICAgPFByb2dyYW1EYXRhYmFzZUZpbGU+JChPdXREaXIpemxpYndhcGkucGRiPC9Qcm9ncmFtRGF0YWJhc2VGaWxlPgorICAgICAgPEdlbmVyYXRlTWFwRmlsZT50cnVlPC9HZW5lcmF0ZU1hcEZpbGU+CisgICAgICA8TWFwRmlsZU5hbWU+JChPdXREaXIpemxpYndhcGkubWFwPC9NYXBGaWxlTmFtZT4KKyAgICAgIDxTdWJTeXN0ZW0+V2luZG93czwvU3ViU3lzdGVtPgorICAgICAgPEltcG9ydExpYnJhcnk+JChPdXREaXIpemxpYndhcGkubGliPC9JbXBvcnRMaWJyYXJ5PgorICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KKyAgICA8L0xpbms+CisgICAgPFByZUJ1aWxkRXZlbnQ+CisgICAgICA8Q29tbWFuZD5jZCAuLlwuLlxtYXNteDY0CitibGRfbWw2NC5iYXQ8L0NvbW1hbmQ+CisgICAgPC9QcmVCdWlsZEV2ZW50PgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyI+CisgICAgPE1pZGw+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+TkRFQlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxNa1R5cExpYkNvbXBhdGlibGU+dHJ1ZTwvTWtUeXBMaWJDb21wYXRpYmxlPgorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+CisgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+SXRhbml1bTwvVGFyZ2V0RW52aXJvbm1lbnQ+CisgICAgICA8VHlwZUxpYnJhcnlOYW1lPiQoT3V0RGlyKXpsaWJ2Yy50bGI8L1R5cGVMaWJyYXJ5TmFtZT4KKyAgICA8L01pZGw+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47Li5cLi5cbWFzbXg4NjslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19XQVJOSU5HUztaTElCX1dJTkFQSTtXSU42NDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgorICAgICAgPEV4Y2VwdGlvbkhhbmRsaW5nPgorICAgICAgPC9FeGNlcHRpb25IYW5kbGluZz4KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRExMPC9SdW50aW1lTGlicmFyeT4KKyAgICAgIDxCdWZmZXJTZWN1cml0eUNoZWNrPmZhbHNlPC9CdWZmZXJTZWN1cml0eUNoZWNrPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyT3V0cHV0RmlsZT4kKEludERpcil6bGlidmMucGNoPC9QcmVjb21waWxlZEhlYWRlck91dHB1dEZpbGU+CisgICAgICA8QXNzZW1ibGVyT3V0cHV0PkFsbDwvQXNzZW1ibGVyT3V0cHV0PgorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4KKyAgICAgIDxPYmplY3RGaWxlTmFtZT4kKEludERpcik8L09iamVjdEZpbGVOYW1lPgorICAgICAgPFByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPiQoT3V0RGlyKTwvUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+CisgICAgICA8QnJvd3NlSW5mb3JtYXRpb24+CisgICAgICA8L0Jyb3dzZUluZm9ybWF0aW9uPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxSZXNvdXJjZUNvbXBpbGU+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+TkRFQlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxDdWx0dXJlPjB4MDQwYzwvQ3VsdHVyZT4KKyAgICA8L1Jlc291cmNlQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKXpsaWJ3YXBpLmRsbDwvT3V0cHV0RmlsZT4KKyAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPgorICAgICAgPElnbm9yZUFsbERlZmF1bHRMaWJyYXJpZXM+ZmFsc2U8L0lnbm9yZUFsbERlZmF1bHRMaWJyYXJpZXM+CisgICAgICA8TW9kdWxlRGVmaW5pdGlvbkZpbGU+Llx6bGlidmMuZGVmPC9Nb2R1bGVEZWZpbml0aW9uRmlsZT4KKyAgICAgIDxQcm9ncmFtRGF0YWJhc2VGaWxlPiQoT3V0RGlyKXpsaWJ3YXBpLnBkYjwvUHJvZ3JhbURhdGFiYXNlRmlsZT4KKyAgICAgIDxHZW5lcmF0ZU1hcEZpbGU+dHJ1ZTwvR2VuZXJhdGVNYXBGaWxlPgorICAgICAgPE1hcEZpbGVOYW1lPiQoT3V0RGlyKXpsaWJ3YXBpLm1hcDwvTWFwRmlsZU5hbWU+CisgICAgICA8U3ViU3lzdGVtPldpbmRvd3M8L1N1YlN5c3RlbT4KKyAgICAgIDxJbXBvcnRMaWJyYXJ5PiQoT3V0RGlyKXpsaWJ3YXBpLmxpYjwvSW1wb3J0TGlicmFyeT4KKyAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVJQTY0PC9UYXJnZXRNYWNoaW5lPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cYWRsZXIzMi5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cY29tcHJlc3MuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXGNyYzMyLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxkZWZsYXRlLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxnemNsb3NlLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxnemxpYi5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cZ3pyZWFkLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxnendyaXRlLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxpbmZiYWNrLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxtYXNteDY0XGluZmZhczg2NjQuYyI+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5caW5mZmFzdC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5caW5mbGF0ZS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5caW5mdHJlZXMuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXG1pbml6aXBcaW9hcGkuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXG1pbml6aXBcaW93aW4zMi5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cdHJlZXMuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHVuY29tcHIuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXG1pbml6aXBcdW56aXAuYyI+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIj5aTElCX0lOVEVSTkFMOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+WkxJQl9JTlRFUk5BTDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+WkxJQl9JTlRFUk5BTDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxtaW5pemlwXHppcC5jIj4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPlpMSUJfSU5URVJOQUw7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj5aTElCX0lOVEVSTkFMOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5aTElCX0lOVEVSTkFMOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHp1dGlsLmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxSZXNvdXJjZUNvbXBpbGUgSW5jbHVkZT0iemxpYi5yYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPE5vbmUgSW5jbHVkZT0iemxpYnZjLmRlZiIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlwuLlxkZWZsYXRlLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlwuLlxpbmZibG9jay5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cLi5caW5mY29kZXMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXC4uXGluZmZhc3QuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXC4uXGluZnRyZWVzLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlwuLlxpbmZ1dGlsLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlwuLlx6Y29uZi5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cLi5cemxpYi5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cLi5cenV0aWwuaCIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvdnN0dWRpby92YzE0L21pbml1bnoudmN4cHJvaiBiL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxNC9taW5pdW56LnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI1YzA3NQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxNC9taW5pdW56LnZjeHByb2oKQEAgLTAsMCArMSwzMTYgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iMTQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfEl0YW5pdW0iPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+SXRhbml1bTwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8SXRhbml1bSI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPkl0YW5pdW08L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgIDwvSXRlbUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPntDNTJGOUU3Qi00OThBLTQyQkUtOERCNC04NUExNTY5NDM4MkF9PC9Qcm9qZWN0R3VpZD4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxNDA8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTQwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djE0MDwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTQwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTQwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djE0MDwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwPgorICAgIDxfUHJvamVjdEZpbGVWZXJzaW9uPjEwLjAuMzAxMjguMTwvX1Byb2plY3RGaWxlVmVyc2lvbj4KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj54ODZcTWluaVVuemlwJChDb25maWd1cmF0aW9uKVw8L091dERpcj4KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj54ODZcTWluaVVuemlwJChDb25maWd1cmF0aW9uKVxUbXBcPC9JbnREaXI+CisgICAgPExpbmtJbmNyZW1lbnRhbCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICAgIDxHZW5lcmF0ZU1hbmlmZXN0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5mYWxzZTwvR2VuZXJhdGVNYW5pZmVzdD4KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPng4NlxNaW5pVW56aXAkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPgorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+eDg2XE1pbmlVbnppcCQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPgorICAgIDxMaW5rSW5jcmVtZW50YWwgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgICA8R2VuZXJhdGVNYW5pZmVzdCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj5mYWxzZTwvR2VuZXJhdGVNYW5pZmVzdD4KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+eDY0XE1pbmlVbnppcCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+CisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPng2NFxNaW5pVW56aXAkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICAgIDxHZW5lcmF0ZU1hbmlmZXN0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+ZmFsc2U8L0dlbmVyYXRlTWFuaWZlc3Q+CisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIj5pYTY0XE1pbmlVbnppcCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+CisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIj5pYTY0XE1pbmlVbnppcCQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPgorICAgIDxMaW5rSW5jcmVtZW50YWwgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICAgIDxHZW5lcmF0ZU1hbmlmZXN0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciPmZhbHNlPC9HZW5lcmF0ZU1hbmlmZXN0PgorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPng2NFxNaW5pVW56aXAkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPgorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPng2NFxNaW5pVW56aXAkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICAgIDxHZW5lcmF0ZU1hbmlmZXN0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5mYWxzZTwvR2VuZXJhdGVNYW5pZmVzdD4KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyI+aWE2NFxNaW5pVW56aXAkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPgorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIj5pYTY0XE1pbmlVbnppcCQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPgorICAgIDxMaW5rSW5jcmVtZW50YWwgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIj5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICAgIDxHZW5lcmF0ZU1hbmlmZXN0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyI+ZmFsc2U8L0dlbmVyYXRlTWFuaWZlc3Q+CisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIC8+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtaW5pemlwOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7WkxJQl9XSU5BUEk7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxNaW5pbWFsUmVidWlsZD50cnVlPC9NaW5pbWFsUmVidWlsZD4KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RGVmYXVsdDwvQmFzaWNSdW50aW1lQ2hlY2tzPgorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1Z0RMTDwvUnVudGltZUxpYnJhcnk+CisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPng4NlxabGliRGxsRGVidWdcemxpYndhcGkubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpciltaW5pdW56LmV4ZTwvT3V0cHV0RmlsZT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFByb2dyYW1EYXRhYmFzZUZpbGU+JChPdXREaXIpbWluaXVuei5wZGI8L1Byb2dyYW1EYXRhYmFzZUZpbGU+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxSYW5kb21pemVkQmFzZUFkZHJlc3M+ZmFsc2U8L1JhbmRvbWl6ZWRCYXNlQWRkcmVzcz4KKyAgICAgIDxEYXRhRXhlY3V0aW9uUHJldmVudGlvbj4KKyAgICAgIDwvRGF0YUV4ZWN1dGlvblByZXZlbnRpb24+CisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDg2PC9UYXJnZXRNYWNoaW5lPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+CisgICAgICA8T21pdEZyYW1lUG9pbnRlcnM+dHJ1ZTwvT21pdEZyYW1lUG9pbnRlcnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtaW5pemlwOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7WkxJQl9XSU5BUEk7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+CisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkRlZmF1bHQ8L0Jhc2ljUnVudGltZUNoZWNrcz4KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4KKyAgICAgIDxCdWZmZXJTZWN1cml0eUNoZWNrPmZhbHNlPC9CdWZmZXJTZWN1cml0eUNoZWNrPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+UHJvZ3JhbURhdGFiYXNlPC9EZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+eDg2XFpsaWJEbGxSZWxlYXNlXHpsaWJ3YXBpLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpbWluaXVuei5leGU8L091dHB1dEZpbGU+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPFJhbmRvbWl6ZWRCYXNlQWRkcmVzcz5mYWxzZTwvUmFuZG9taXplZEJhc2VBZGRyZXNzPgorICAgICAgPERhdGFFeGVjdXRpb25QcmV2ZW50aW9uPgorICAgICAgPC9EYXRhRXhlY3V0aW9uUHJldmVudGlvbj4KKyAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVYODY8L1RhcmdldE1hY2hpbmU+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPE1pZGw+CisgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KKyAgICA8L01pZGw+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOy4uXC4uXG1pbml6aXA7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtaTElCX1dJTkFQSTtfREVCVUc7X0NPTlNPTEU7V0lONjQ7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPE1pbmltYWxSZWJ1aWxkPnRydWU8L01pbmltYWxSZWJ1aWxkPgorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5EZWZhdWx0PC9CYXNpY1J1bnRpbWVDaGVja3M+CisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERlYnVnRExMPC9SdW50aW1lTGlicmFyeT4KKyAgICAgIDxCdWZmZXJTZWN1cml0eUNoZWNrPmZhbHNlPC9CdWZmZXJTZWN1cml0eUNoZWNrPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+UHJvZ3JhbURhdGFiYXNlPC9EZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+eDY0XFpsaWJEbGxEZWJ1Z1x6bGlid2FwaS5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKW1pbml1bnouZXhlPC9PdXRwdXRGaWxlPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8UHJvZ3JhbURhdGFiYXNlRmlsZT4kKE91dERpciltaW5pdW56LnBkYjwvUHJvZ3JhbURhdGFiYXNlRmlsZT4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+CisgICAgPE1pZGw+CisgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+SXRhbml1bTwvVGFyZ2V0RW52aXJvbm1lbnQ+CisgICAgPC9NaWRsPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtaW5pemlwOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7WkxJQl9XSU5BUEk7X0RFQlVHO19DT05TT0xFO1dJTjY0OyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxNaW5pbWFsUmVidWlsZD50cnVlPC9NaW5pbWFsUmVidWlsZD4KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RGVmYXVsdDwvQmFzaWNSdW50aW1lQ2hlY2tzPgorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1Z0RMTDwvUnVudGltZUxpYnJhcnk+CisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmlhNjRcWmxpYkRsbERlYnVnXHpsaWJ3YXBpLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpbWluaXVuei5leGU8L091dHB1dEZpbGU+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxQcm9ncmFtRGF0YWJhc2VGaWxlPiQoT3V0RGlyKW1pbml1bnoucGRiPC9Qcm9ncmFtRGF0YWJhc2VGaWxlPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lSUE2NDwvVGFyZ2V0TWFjaGluZT4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxNaWRsPgorICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+CisgICAgPC9NaWRsPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KKyAgICAgIDxPbWl0RnJhbWVQb2ludGVycz50cnVlPC9PbWl0RnJhbWVQb2ludGVycz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOy4uXC4uXG1pbml6aXA7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtaTElCX1dJTkFQSTtOREVCVUc7X0NPTlNPTEU7V0lONjQ7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RGVmYXVsdDwvQmFzaWNSdW50aW1lQ2hlY2tzPgorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWRETEw8L1J1bnRpbWVMaWJyYXJ5PgorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5Qcm9ncmFtRGF0YWJhc2U8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz54NjRcWmxpYkRsbFJlbGVhc2VcemxpYndhcGkubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpciltaW5pdW56LmV4ZTwvT3V0cHV0RmlsZT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPgorICAgIDxNaWRsPgorICAgICAgPFRhcmdldEVudmlyb25tZW50Pkl0YW5pdW08L1RhcmdldEVudmlyb25tZW50PgorICAgIDwvTWlkbD4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+CisgICAgICA8T21pdEZyYW1lUG9pbnRlcnM+dHJ1ZTwvT21pdEZyYW1lUG9pbnRlcnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtaW5pemlwOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7WkxJQl9XSU5BUEk7TkRFQlVHO19DT05TT0xFO1dJTjY0OyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+CisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkRlZmF1bHQ8L0Jhc2ljUnVudGltZUNoZWNrcz4KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRExMPC9SdW50aW1lTGlicmFyeT4KKyAgICAgIDxCdWZmZXJTZWN1cml0eUNoZWNrPmZhbHNlPC9CdWZmZXJTZWN1cml0eUNoZWNrPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+UHJvZ3JhbURhdGFiYXNlPC9EZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+aWE2NFxabGliRGxsUmVsZWFzZVx6bGlid2FwaS5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKW1pbml1bnouZXhlPC9PdXRwdXRGaWxlPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVJQTY0PC9UYXJnZXRNYWNoaW5lPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbWluaXppcFxtaW5pdW56LmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9InpsaWJ2Yy52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0Pns4ZmQ4MjZmOC0zNzM5LTQ0ZTYtOGNjOC05OTcxMjJlNTNiOGR9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvdnN0dWRpby92YzE0L21pbml6aXAudmN4cHJvaiBiL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxNC9taW5pemlwLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY4YTQxMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxNC9taW5pemlwLnZjeHByb2oKQEAgLTAsMCArMSwzMTMgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iMTQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfEl0YW5pdW0iPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+SXRhbml1bTwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8SXRhbml1bSI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPkl0YW5pdW08L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgIDwvSXRlbUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPns0OENERDlEQy1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9PC9Qcm9qZWN0R3VpZD4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxNDA8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTQwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djE0MDwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTQwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTQwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djE0MDwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwPgorICAgIDxfUHJvamVjdEZpbGVWZXJzaW9uPjEwLjAuMzAxMjguMTwvX1Byb2plY3RGaWxlVmVyc2lvbj4KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj54ODZcTWluaVppcCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+CisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+eDg2XE1pbmlaaXAkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgICAgPEdlbmVyYXRlTWFuaWZlc3QgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPmZhbHNlPC9HZW5lcmF0ZU1hbmlmZXN0PgorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+eDg2XE1pbmlaaXAkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPgorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+eDg2XE1pbmlaaXAkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPng2NFwkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPgorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj54NjRcJChDb25maWd1cmF0aW9uKVw8L0ludERpcj4KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICAgIDxHZW5lcmF0ZU1hbmlmZXN0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+ZmFsc2U8L0dlbmVyYXRlTWFuaWZlc3Q+CisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIj5pYTY0XCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+CisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIj5pYTY0XCQoQ29uZmlndXJhdGlvbilcPC9JbnREaXI+CisgICAgPExpbmtJbmNyZW1lbnRhbCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIj50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgICAgPEdlbmVyYXRlTWFuaWZlc3QgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+ZmFsc2U8L0dlbmVyYXRlTWFuaWZlc3Q+CisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+eDY0XCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+CisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+eDY0XCQoQ29uZmlndXJhdGlvbilcPC9JbnREaXI+CisgICAgPExpbmtJbmNyZW1lbnRhbCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyI+aWE2NFwkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPgorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIj5pYTY0XCQoQ29uZmlndXJhdGlvbilcPC9JbnREaXI+CisgICAgPExpbmtJbmNyZW1lbnRhbCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIC8+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtaW5pemlwOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7WkxJQl9XSU5BUEk7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxNaW5pbWFsUmVidWlsZD50cnVlPC9NaW5pbWFsUmVidWlsZD4KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RGVmYXVsdDwvQmFzaWNSdW50aW1lQ2hlY2tzPgorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1Z0RMTDwvUnVudGltZUxpYnJhcnk+CisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPng4NlxabGliRGxsRGVidWdcemxpYndhcGkubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpciltaW5pemlwLmV4ZTwvT3V0cHV0RmlsZT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFByb2dyYW1EYXRhYmFzZUZpbGU+JChPdXREaXIpbWluaXppcC5wZGI8L1Byb2dyYW1EYXRhYmFzZUZpbGU+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxSYW5kb21pemVkQmFzZUFkZHJlc3M+ZmFsc2U8L1JhbmRvbWl6ZWRCYXNlQWRkcmVzcz4KKyAgICAgIDxEYXRhRXhlY3V0aW9uUHJldmVudGlvbj4KKyAgICAgIDwvRGF0YUV4ZWN1dGlvblByZXZlbnRpb24+CisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDg2PC9UYXJnZXRNYWNoaW5lPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+CisgICAgICA8T21pdEZyYW1lUG9pbnRlcnM+dHJ1ZTwvT21pdEZyYW1lUG9pbnRlcnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtaW5pemlwOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7WkxJQl9XSU5BUEk7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+CisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkRlZmF1bHQ8L0Jhc2ljUnVudGltZUNoZWNrcz4KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4KKyAgICAgIDxCdWZmZXJTZWN1cml0eUNoZWNrPmZhbHNlPC9CdWZmZXJTZWN1cml0eUNoZWNrPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+UHJvZ3JhbURhdGFiYXNlPC9EZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+eDg2XFpsaWJEbGxSZWxlYXNlXHpsaWJ3YXBpLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpbWluaXppcC5leGU8L091dHB1dEZpbGU+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPFJhbmRvbWl6ZWRCYXNlQWRkcmVzcz5mYWxzZTwvUmFuZG9taXplZEJhc2VBZGRyZXNzPgorICAgICAgPERhdGFFeGVjdXRpb25QcmV2ZW50aW9uPgorICAgICAgPC9EYXRhRXhlY3V0aW9uUHJldmVudGlvbj4KKyAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVYODY8L1RhcmdldE1hY2hpbmU+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPE1pZGw+CisgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KKyAgICA8L01pZGw+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOy4uXC4uXG1pbml6aXA7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtaTElCX1dJTkFQSTtfREVCVUc7X0NPTlNPTEU7V0lONjQ7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPE1pbmltYWxSZWJ1aWxkPnRydWU8L01pbmltYWxSZWJ1aWxkPgorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5EZWZhdWx0PC9CYXNpY1J1bnRpbWVDaGVja3M+CisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERlYnVnRExMPC9SdW50aW1lTGlicmFyeT4KKyAgICAgIDxCdWZmZXJTZWN1cml0eUNoZWNrPmZhbHNlPC9CdWZmZXJTZWN1cml0eUNoZWNrPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+UHJvZ3JhbURhdGFiYXNlPC9EZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+eDY0XFpsaWJEbGxEZWJ1Z1x6bGlid2FwaS5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKW1pbml6aXAuZXhlPC9PdXRwdXRGaWxlPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8UHJvZ3JhbURhdGFiYXNlRmlsZT4kKE91dERpciltaW5pemlwLnBkYjwvUHJvZ3JhbURhdGFiYXNlRmlsZT4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+CisgICAgPE1pZGw+CisgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+SXRhbml1bTwvVGFyZ2V0RW52aXJvbm1lbnQ+CisgICAgPC9NaWRsPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtaW5pemlwOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7WkxJQl9XSU5BUEk7X0RFQlVHO19DT05TT0xFO1dJTjY0OyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxNaW5pbWFsUmVidWlsZD50cnVlPC9NaW5pbWFsUmVidWlsZD4KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RGVmYXVsdDwvQmFzaWNSdW50aW1lQ2hlY2tzPgorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1Z0RMTDwvUnVudGltZUxpYnJhcnk+CisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmlhNjRcWmxpYkRsbERlYnVnXHpsaWJ3YXBpLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpbWluaXppcC5leGU8L091dHB1dEZpbGU+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxQcm9ncmFtRGF0YWJhc2VGaWxlPiQoT3V0RGlyKW1pbml6aXAucGRiPC9Qcm9ncmFtRGF0YWJhc2VGaWxlPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lSUE2NDwvVGFyZ2V0TWFjaGluZT4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxNaWRsPgorICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+CisgICAgPC9NaWRsPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KKyAgICAgIDxPbWl0RnJhbWVQb2ludGVycz50cnVlPC9PbWl0RnJhbWVQb2ludGVycz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOy4uXC4uXG1pbml6aXA7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtaTElCX1dJTkFQSTtOREVCVUc7X0NPTlNPTEU7V0lONjQ7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RGVmYXVsdDwvQmFzaWNSdW50aW1lQ2hlY2tzPgorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWRETEw8L1J1bnRpbWVMaWJyYXJ5PgorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5Qcm9ncmFtRGF0YWJhc2U8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz54NjRcWmxpYkRsbFJlbGVhc2VcemxpYndhcGkubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpciltaW5pemlwLmV4ZTwvT3V0cHV0RmlsZT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPgorICAgIDxNaWRsPgorICAgICAgPFRhcmdldEVudmlyb25tZW50Pkl0YW5pdW08L1RhcmdldEVudmlyb25tZW50PgorICAgIDwvTWlkbD4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+CisgICAgICA8T21pdEZyYW1lUG9pbnRlcnM+dHJ1ZTwvT21pdEZyYW1lUG9pbnRlcnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtaW5pemlwOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7WkxJQl9XSU5BUEk7TkRFQlVHO19DT05TT0xFO1dJTjY0OyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+CisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkRlZmF1bHQ8L0Jhc2ljUnVudGltZUNoZWNrcz4KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRExMPC9SdW50aW1lTGlicmFyeT4KKyAgICAgIDxCdWZmZXJTZWN1cml0eUNoZWNrPmZhbHNlPC9CdWZmZXJTZWN1cml0eUNoZWNrPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+UHJvZ3JhbURhdGFiYXNlPC9EZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+aWE2NFxabGliRGxsUmVsZWFzZVx6bGlid2FwaS5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKW1pbml6aXAuZXhlPC9PdXRwdXRGaWxlPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVJQTY0PC9UYXJnZXRNYWNoaW5lPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbWluaXppcFxtaW5pemlwLmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9InpsaWJ2Yy52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0Pns4ZmQ4MjZmOC0zNzM5LTQ0ZTYtOGNjOC05OTcxMjJlNTNiOGR9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvdnN0dWRpby92YzE0L3Rlc3R6bGliLnZjeHByb2ogYi9zcmMvY29udHJpYi92c3R1ZGlvL3ZjMTQvdGVzdHpsaWIudmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzM3MTI1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbnRyaWIvdnN0dWRpby92YzE0L3Rlc3R6bGliLnZjeHByb2oKQEAgLTAsMCArMSw0MzAgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iMTQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfEl0YW5pdW0iPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+SXRhbml1bTwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0iPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZVdpdGhvdXRBc208L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+SXRhbml1bTwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZVdpdGhvdXRBc218V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZVdpdGhvdXRBc208L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2VXaXRob3V0QXNtfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlV2l0aG91dEFzbTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8SXRhbml1bSI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPkl0YW5pdW08L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgIDwvSXRlbUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPntBQTY2NjZBQS1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9PC9Qcm9qZWN0R3VpZD4KKyAgICA8Um9vdE5hbWVzcGFjZT50ZXN0emxpYjwvUm9vdE5hbWVzcGFjZT4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxNDA8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxNDA8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTQwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djE0MDwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTQwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxNDA8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTQwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxNDA8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djE0MDwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwPgorICAgIDxfUHJvamVjdEZpbGVWZXJzaW9uPjEwLjAuMzAxMjguMTwvX1Byb2plY3RGaWxlVmVyc2lvbj4KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj54ODZcVGVzdFpsaWIkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPgorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPng4NlxUZXN0WmxpYiQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPgorICAgIDxMaW5rSW5jcmVtZW50YWwgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgICA8R2VuZXJhdGVNYW5pZmVzdCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+ZmFsc2U8L0dlbmVyYXRlTWFuaWZlc3Q+CisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfFdpbjMyJyI+eDg2XFRlc3RabGliJChDb25maWd1cmF0aW9uKVw8L091dERpcj4KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218V2luMzInIj54ODZcVGVzdFpsaWIkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218V2luMzInIj5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICAgIDxHZW5lcmF0ZU1hbmlmZXN0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218V2luMzInIj5mYWxzZTwvR2VuZXJhdGVNYW5pZmVzdD4KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPng4NlxUZXN0WmxpYiQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+CisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj54ODZcVGVzdFpsaWIkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgICAgPEdlbmVyYXRlTWFuaWZlc3QgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+ZmFsc2U8L0dlbmVyYXRlTWFuaWZlc3Q+CisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPng2NFxUZXN0WmxpYiQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+CisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPng2NFxUZXN0WmxpYiQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPgorICAgIDxHZW5lcmF0ZU1hbmlmZXN0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+ZmFsc2U8L0dlbmVyYXRlTWFuaWZlc3Q+CisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIj5pYTY0XFRlc3RabGliJChDb25maWd1cmF0aW9uKVw8L091dERpcj4KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciPmlhNjRcVGVzdFpsaWIkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgICA8R2VuZXJhdGVNYW5pZmVzdCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIj5mYWxzZTwvR2VuZXJhdGVNYW5pZmVzdD4KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218eDY0JyI+eDY0XFRlc3RabGliJChDb25maWd1cmF0aW9uKVw8L091dERpcj4KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218eDY0JyI+eDY0XFRlc3RabGliJChDb25maWd1cmF0aW9uKVxUbXBcPC9JbnREaXI+CisgICAgPEdlbmVyYXRlTWFuaWZlc3QgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXx4NjQnIj5mYWxzZTwvR2VuZXJhdGVNYW5pZmVzdD4KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSciPmlhNjRcVGVzdFpsaWIkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPgorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtJyI+aWE2NFxUZXN0WmxpYiQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPgorICAgIDxMaW5rSW5jcmVtZW50YWwgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtJyI+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgICA8R2VuZXJhdGVNYW5pZmVzdCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0nIj5mYWxzZTwvR2VuZXJhdGVNYW5pZmVzdD4KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj54NjRcVGVzdFpsaWIkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPgorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPng2NFxUZXN0WmxpYiQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPgorICAgIDxHZW5lcmF0ZU1hbmlmZXN0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5mYWxzZTwvR2VuZXJhdGVNYW5pZmVzdD4KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyI+aWE2NFxUZXN0WmxpYiQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+CisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPmlhNjRcVGVzdFpsaWIkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyI+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgICA8R2VuZXJhdGVNYW5pZmVzdCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPmZhbHNlPC9HZW5lcmF0ZU1hbmlmZXN0PgorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+CisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+CisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+CisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+CisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+CisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218V2luMzInIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfFdpbjMyJyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+CisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218eDY0JyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXx4NjQnIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiAvPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5BU01WO0FTTUlORjtXSU4zMjtaTElCX1dJTkFQSTtfREVCVUc7X0NPTlNPTEU7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX1dBUk5JTkdTOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxNaW5pbWFsUmVidWlsZD50cnVlPC9NaW5pbWFsUmVidWlsZD4KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RGVmYXVsdDwvQmFzaWNSdW50aW1lQ2hlY2tzPgorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1Z0RMTDwvUnVudGltZUxpYnJhcnk+CisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8QXNzZW1ibGVyT3V0cHV0PkFzc2VtYmx5QW5kU291cmNlQ29kZTwvQXNzZW1ibGVyT3V0cHV0PgorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5Qcm9ncmFtRGF0YWJhc2U8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4uLlwuLlxtYXNteDg2XG1hdGNoNjg2Lm9iajsuLlwuLlxtYXNteDg2XGluZmZhczMyLm9iajslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpdGVzdHpsaWIuZXhlPC9PdXRwdXRGaWxlPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8UHJvZ3JhbURhdGFiYXNlRmlsZT4kKE91dERpcil0ZXN0emxpYi5wZGI8L1Byb2dyYW1EYXRhYmFzZUZpbGU+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxSYW5kb21pemVkQmFzZUFkZHJlc3M+ZmFsc2U8L1JhbmRvbWl6ZWRCYXNlQWRkcmVzcz4KKyAgICAgIDxEYXRhRXhlY3V0aW9uUHJldmVudGlvbj4KKyAgICAgIDwvRGF0YUV4ZWN1dGlvblByZXZlbnRpb24+CisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDg2PC9UYXJnZXRNYWNoaW5lPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgorICAgICAgPE9taXRGcmFtZVBvaW50ZXJzPnRydWU8L09taXRGcmFtZVBvaW50ZXJzPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtaTElCX1dJTkFQSTtOREVCVUc7X0NPTlNPTEU7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX1dBUk5JTkdTOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+CisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkRlZmF1bHQ8L0Jhc2ljUnVudGltZUNoZWNrcz4KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4KKyAgICAgIDxCdWZmZXJTZWN1cml0eUNoZWNrPmZhbHNlPC9CdWZmZXJTZWN1cml0eUNoZWNrPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+UHJvZ3JhbURhdGFiYXNlPC9EZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpdGVzdHpsaWIuZXhlPC9PdXRwdXRGaWxlPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxSYW5kb21pemVkQmFzZUFkZHJlc3M+ZmFsc2U8L1JhbmRvbWl6ZWRCYXNlQWRkcmVzcz4KKyAgICAgIDxEYXRhRXhlY3V0aW9uUHJldmVudGlvbj4KKyAgICAgIDwvRGF0YUV4ZWN1dGlvblByZXZlbnRpb24+CisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDg2PC9UYXJnZXRNYWNoaW5lPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+CisgICAgICA8T21pdEZyYW1lUG9pbnRlcnM+dHJ1ZTwvT21pdEZyYW1lUG9pbnRlcnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPkFTTVY7QVNNSU5GO1dJTjMyO1pMSUJfV0lOQVBJO05ERUJVRztfQ09OU09MRTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fV0FSTklOR1M7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RGVmYXVsdDwvQmFzaWNSdW50aW1lQ2hlY2tzPgorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5PgorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5Qcm9ncmFtRGF0YWJhc2U8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4uLlwuLlxtYXNteDg2XG1hdGNoNjg2Lm9iajsuLlwuLlxtYXNteDg2XGluZmZhczMyLm9iajslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpdGVzdHpsaWIuZXhlPC9PdXRwdXRGaWxlPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxSYW5kb21pemVkQmFzZUFkZHJlc3M+ZmFsc2U8L1JhbmRvbWl6ZWRCYXNlQWRkcmVzcz4KKyAgICAgIDxEYXRhRXhlY3V0aW9uUHJldmVudGlvbj4KKyAgICAgIDwvRGF0YUV4ZWN1dGlvblByZXZlbnRpb24+CisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDg2PC9UYXJnZXRNYWNoaW5lPgorICAgICAgPEltYWdlSGFzU2FmZUV4Y2VwdGlvbkhhbmRsZXJzPmZhbHNlPC9JbWFnZUhhc1NhZmVFeGNlcHRpb25IYW5kbGVycz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5BU01WO0FTTUlORjtXSU4zMjtaTElCX1dJTkFQSTtfREVCVUc7X0NPTlNPTEU7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX1dBUk5JTkdTOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RGVmYXVsdDwvQmFzaWNSdW50aW1lQ2hlY2tzPgorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1Z0RMTDwvUnVudGltZUxpYnJhcnk+CisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4uLlwuLlxtYXNteDY0XGd2bWF0NjQub2JqOy4uXC4uXG1hc214NjRcaW5mZmFzeDY0Lm9iajslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIj4KKyAgICA8TWlkbD4KKyAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5JdGFuaXVtPC9UYXJnZXRFbnZpcm9ubWVudD4KKyAgICA8L01pZGw+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+WkxJQl9XSU5BUEk7X0RFQlVHO19DT05TT0xFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19XQVJOSU5HUztXSU42NDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8TWluaW1hbFJlYnVpbGQ+dHJ1ZTwvTWluaW1hbFJlYnVpbGQ+CisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkRlZmF1bHQ8L0Jhc2ljUnVudGltZUNoZWNrcz4KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWdETEw8L1J1bnRpbWVMaWJyYXJ5PgorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPEFzc2VtYmxlck91dHB1dD5Bc3NlbWJseUFuZFNvdXJjZUNvZGU8L0Fzc2VtYmxlck91dHB1dD4KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+UHJvZ3JhbURhdGFiYXNlPC9EZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpdGVzdHpsaWIuZXhlPC9PdXRwdXRGaWxlPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8UHJvZ3JhbURhdGFiYXNlRmlsZT4kKE91dERpcil0ZXN0emxpYi5wZGI8L1Byb2dyYW1EYXRhYmFzZUZpbGU+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVJQTY0PC9UYXJnZXRNYWNoaW5lPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO1pMSUJfV0lOQVBJO05ERUJVRztfQ09OU09MRTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fV0FSTklOR1M7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5EZWZhdWx0PC9CYXNpY1J1bnRpbWVDaGVja3M+CisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERMTDwvUnVudGltZUxpYnJhcnk+CisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4lKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0nIj4KKyAgICA8TWlkbD4KKyAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5JdGFuaXVtPC9UYXJnZXRFbnZpcm9ubWVudD4KKyAgICA8L01pZGw+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgorICAgICAgPE9taXRGcmFtZVBvaW50ZXJzPnRydWU8L09taXRGcmFtZVBvaW50ZXJzPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5aTElCX1dJTkFQSTtOREVCVUc7X0NPTlNPTEU7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX1dBUk5JTkdTO1dJTjY0OyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+CisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkRlZmF1bHQ8L0Jhc2ljUnVudGltZUNoZWNrcz4KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRExMPC9SdW50aW1lTGlicmFyeT4KKyAgICAgIDxCdWZmZXJTZWN1cml0eUNoZWNrPmZhbHNlPC9CdWZmZXJTZWN1cml0eUNoZWNrPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+UHJvZ3JhbURhdGFiYXNlPC9EZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpdGVzdHpsaWIuZXhlPC9PdXRwdXRGaWxlPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVJQTY0PC9UYXJnZXRNYWNoaW5lPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+QVNNVjtBU01JTkY7V0lOMzI7WkxJQl9XSU5BUEk7TkRFQlVHO19DT05TT0xFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19XQVJOSU5HUzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkRlZmF1bHQ8L0Jhc2ljUnVudGltZUNoZWNrcz4KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRExMPC9SdW50aW1lTGlicmFyeT4KKyAgICAgIDxCdWZmZXJTZWN1cml0eUNoZWNrPmZhbHNlPC9CdWZmZXJTZWN1cml0eUNoZWNrPgorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPi4uXC4uXG1hc214NjRcZ3ZtYXQ2NC5vYmo7Li5cLi5cbWFzbXg2NFxpbmZmYXN4NjQub2JqOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyI+CisgICAgPE1pZGw+CisgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+SXRhbml1bTwvVGFyZ2V0RW52aXJvbm1lbnQ+CisgICAgPC9NaWRsPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KKyAgICAgIDxPbWl0RnJhbWVQb2ludGVycz50cnVlPC9PbWl0RnJhbWVQb2ludGVycz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+WkxJQl9XSU5BUEk7TkRFQlVHO19DT05TT0xFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19XQVJOSU5HUztXSU42NDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5EZWZhdWx0PC9CYXNpY1J1bnRpbWVDaGVja3M+CisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERMTDwvUnVudGltZUxpYnJhcnk+CisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKXRlc3R6bGliLmV4ZTwvT3V0cHV0RmlsZT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lSUE2NDwvVGFyZ2V0TWFjaGluZT4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXGFkbGVyMzIuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXGNvbXByZXNzLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxjcmMzMi5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cZGVmbGF0ZS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5caW5mYmFjay5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbWFzbXg2NFxpbmZmYXM4NjY0LmMiPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0nIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXGluZmZhc3QuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXGluZmxhdGUuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXGluZnRyZWVzLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0ZXN0emxpYlx0ZXN0emxpYi5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cdHJlZXMuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHVuY29tcHIuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHp1dGlsLmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxNC90ZXN0emxpYmRsbC52Y3hwcm9qIGIvc3JjL2NvbnRyaWIvdnN0dWRpby92YzE0L3Rlc3R6bGliZGxsLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg3NDc0ZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxNC90ZXN0emxpYmRsbC52Y3hwcm9qCkBAIC0wLDAgKzEsMzE2IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjE0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xJdGFuaXVtIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPkl0YW5pdW08L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfEl0YW5pdW0iPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5JdGFuaXVtPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICA8L0l0ZW1Hcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzNjZBfTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTQwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djE0MDwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxNDA8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djE0MDwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djE0MDwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxNDA8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8UHJvcGVydHlHcm91cD4KKyAgICA8X1Byb2plY3RGaWxlVmVyc2lvbj4xMC4wLjMwMTI4LjE8L19Qcm9qZWN0RmlsZVZlcnNpb24+CisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+eDg2XFRlc3RabGliRGxsJChDb25maWd1cmF0aW9uKVw8L091dERpcj4KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj54ODZcVGVzdFpsaWJEbGwkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgICAgPEdlbmVyYXRlTWFuaWZlc3QgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPmZhbHNlPC9HZW5lcmF0ZU1hbmlmZXN0PgorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+eDg2XFRlc3RabGliRGxsJChDb25maWd1cmF0aW9uKVw8L091dERpcj4KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPng4NlxUZXN0WmxpYkRsbCQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPgorICAgIDxMaW5rSW5jcmVtZW50YWwgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgICA8R2VuZXJhdGVNYW5pZmVzdCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj5mYWxzZTwvR2VuZXJhdGVNYW5pZmVzdD4KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+eDY0XFRlc3RabGliRGxsJChDb25maWd1cmF0aW9uKVw8L091dERpcj4KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+eDY0XFRlc3RabGliRGxsJChDb25maWd1cmF0aW9uKVxUbXBcPC9JbnREaXI+CisgICAgPExpbmtJbmNyZW1lbnRhbCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgICA8R2VuZXJhdGVNYW5pZmVzdCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPmZhbHNlPC9HZW5lcmF0ZU1hbmlmZXN0PgorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+aWE2NFxUZXN0WmxpYkRsbCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+CisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIj5pYTY0XFRlc3RabGliRGxsJChDb25maWd1cmF0aW9uKVxUbXBcPC9JbnREaXI+CisgICAgPExpbmtJbmNyZW1lbnRhbCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIj50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgICAgPEdlbmVyYXRlTWFuaWZlc3QgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+ZmFsc2U8L0dlbmVyYXRlTWFuaWZlc3Q+CisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+eDY0XFRlc3RabGliRGxsJChDb25maWd1cmF0aW9uKVw8L091dERpcj4KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj54NjRcVGVzdFpsaWJEbGwkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICAgIDxHZW5lcmF0ZU1hbmlmZXN0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5mYWxzZTwvR2VuZXJhdGVNYW5pZmVzdD4KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyI+aWE2NFxUZXN0WmxpYkRsbCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+CisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPmlhNjRcVGVzdFpsaWJEbGwkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyI+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgICA8R2VuZXJhdGVNYW5pZmVzdCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPmZhbHNlPC9HZW5lcmF0ZU1hbmlmZXN0PgorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+CisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+CisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+CisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiAvPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47Li5cLi5cbWluaXppcDslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO1pMSUJfV0lOQVBJO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8TWluaW1hbFJlYnVpbGQ+dHJ1ZTwvTWluaW1hbFJlYnVpbGQ+CisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkRlZmF1bHQ8L0Jhc2ljUnVudGltZUNoZWNrcz4KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWdETEw8L1J1bnRpbWVMaWJyYXJ5PgorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5Qcm9ncmFtRGF0YWJhc2U8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz54ODZcWmxpYkRsbERlYnVnXHpsaWJ3YXBpLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpdGVzdHpsaWJkbGwuZXhlPC9PdXRwdXRGaWxlPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8UHJvZ3JhbURhdGFiYXNlRmlsZT4kKE91dERpcil0ZXN0emxpYi5wZGI8L1Byb2dyYW1EYXRhYmFzZUZpbGU+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxSYW5kb21pemVkQmFzZUFkZHJlc3M+ZmFsc2U8L1JhbmRvbWl6ZWRCYXNlQWRkcmVzcz4KKyAgICAgIDxEYXRhRXhlY3V0aW9uUHJldmVudGlvbj4KKyAgICAgIDwvRGF0YUV4ZWN1dGlvblByZXZlbnRpb24+CisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDg2PC9UYXJnZXRNYWNoaW5lPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+CisgICAgICA8T21pdEZyYW1lUG9pbnRlcnM+dHJ1ZTwvT21pdEZyYW1lUG9pbnRlcnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtaW5pemlwOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7WkxJQl9XSU5BUEk7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+CisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkRlZmF1bHQ8L0Jhc2ljUnVudGltZUNoZWNrcz4KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4KKyAgICAgIDxCdWZmZXJTZWN1cml0eUNoZWNrPmZhbHNlPC9CdWZmZXJTZWN1cml0eUNoZWNrPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+UHJvZ3JhbURhdGFiYXNlPC9EZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+eDg2XFpsaWJEbGxSZWxlYXNlXHpsaWJ3YXBpLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpdGVzdHpsaWJkbGwuZXhlPC9PdXRwdXRGaWxlPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxSYW5kb21pemVkQmFzZUFkZHJlc3M+ZmFsc2U8L1JhbmRvbWl6ZWRCYXNlQWRkcmVzcz4KKyAgICAgIDxEYXRhRXhlY3V0aW9uUHJldmVudGlvbj4KKyAgICAgIDwvRGF0YUV4ZWN1dGlvblByZXZlbnRpb24+CisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDg2PC9UYXJnZXRNYWNoaW5lPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxNaWRsPgorICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+CisgICAgPC9NaWRsPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtaW5pemlwOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7WkxJQl9XSU5BUEk7X0RFQlVHO19DT05TT0xFO1dJTjY0OyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxNaW5pbWFsUmVidWlsZD50cnVlPC9NaW5pbWFsUmVidWlsZD4KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RGVmYXVsdDwvQmFzaWNSdW50aW1lQ2hlY2tzPgorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1Z0RMTDwvUnVudGltZUxpYnJhcnk+CisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPng2NFxabGliRGxsRGVidWdcemxpYndhcGkubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpcil0ZXN0emxpYmRsbC5leGU8L091dHB1dEZpbGU+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxQcm9ncmFtRGF0YWJhc2VGaWxlPiQoT3V0RGlyKXRlc3R6bGliLnBkYjwvUHJvZ3JhbURhdGFiYXNlRmlsZT4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+CisgICAgPE1pZGw+CisgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+SXRhbml1bTwvVGFyZ2V0RW52aXJvbm1lbnQ+CisgICAgPC9NaWRsPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtaW5pemlwOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7WkxJQl9XSU5BUEk7X0RFQlVHO19DT05TT0xFO1dJTjY0OyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxNaW5pbWFsUmVidWlsZD50cnVlPC9NaW5pbWFsUmVidWlsZD4KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RGVmYXVsdDwvQmFzaWNSdW50aW1lQ2hlY2tzPgorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1Z0RMTDwvUnVudGltZUxpYnJhcnk+CisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmlhNjRcWmxpYkRsbERlYnVnXHpsaWJ3YXBpLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpdGVzdHpsaWJkbGwuZXhlPC9PdXRwdXRGaWxlPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8UHJvZ3JhbURhdGFiYXNlRmlsZT4kKE91dERpcil0ZXN0emxpYi5wZGI8L1Byb2dyYW1EYXRhYmFzZUZpbGU+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVJQTY0PC9UYXJnZXRNYWNoaW5lPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPE1pZGw+CisgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KKyAgICA8L01pZGw+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgorICAgICAgPE9taXRGcmFtZVBvaW50ZXJzPnRydWU8L09taXRGcmFtZVBvaW50ZXJzPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47Li5cLi5cbWluaXppcDslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO1pMSUJfV0lOQVBJO05ERUJVRztfQ09OU09MRTtXSU42NDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5EZWZhdWx0PC9CYXNpY1J1bnRpbWVDaGVja3M+CisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERMTDwvUnVudGltZUxpYnJhcnk+CisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPng2NFxabGliRGxsUmVsZWFzZVx6bGlid2FwaS5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKXRlc3R6bGliZGxsLmV4ZTwvT3V0cHV0RmlsZT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPgorICAgIDxNaWRsPgorICAgICAgPFRhcmdldEVudmlyb25tZW50Pkl0YW5pdW08L1RhcmdldEVudmlyb25tZW50PgorICAgIDwvTWlkbD4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+CisgICAgICA8T21pdEZyYW1lUG9pbnRlcnM+dHJ1ZTwvT21pdEZyYW1lUG9pbnRlcnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtaW5pemlwOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7WkxJQl9XSU5BUEk7TkRFQlVHO19DT05TT0xFO1dJTjY0OyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+CisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkRlZmF1bHQ8L0Jhc2ljUnVudGltZUNoZWNrcz4KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRExMPC9SdW50aW1lTGlicmFyeT4KKyAgICAgIDxCdWZmZXJTZWN1cml0eUNoZWNrPmZhbHNlPC9CdWZmZXJTZWN1cml0eUNoZWNrPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+UHJvZ3JhbURhdGFiYXNlPC9EZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+aWE2NFxabGliRGxsUmVsZWFzZVx6bGlid2FwaS5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKXRlc3R6bGliZGxsLmV4ZTwvT3V0cHV0RmlsZT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lSUE2NDwvVGFyZ2V0TWFjaGluZT4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRlc3R6bGliXHRlc3R6bGliLmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9InpsaWJ2Yy52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0Pns4ZmQ4MjZmOC0zNzM5LTQ0ZTYtOGNjOC05OTcxMjJlNTNiOGR9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvdnN0dWRpby92YzE0L3psaWIucmMgYi9zcmMvY29udHJpYi92c3R1ZGlvL3ZjMTQvemxpYi5yYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDc1ODczCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbnRyaWIvdnN0dWRpby92YzE0L3psaWIucmMKQEAgLTAsMCArMSwzMiBAQAorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworI2RlZmluZSBJRFJfVkVSU0lPTjEgIDEKK0lEUl9WRVJTSU9OMQlWRVJTSU9OSU5GTwlNT1ZFQUJMRSBJTVBVUkUgTE9BRE9OQ0FMTCBESVNDQVJEQUJMRQorICBGSUxFVkVSU0lPTgkgMSwgMiwgMTIsIDAKKyAgUFJPRFVDVFZFUlNJT04gMSwgMiwgMTIsIDAKKyAgRklMRUZMQUdTTUFTSwlWU19GRklfRklMRUZMQUdTTUFTSworICBGSUxFRkxBR1MJMAorICBGSUxFT1MJVk9TX0RPU19XSU5ET1dTMzIKKyAgRklMRVRZUEUJVkZUX0RMTAorICBGSUxFU1VCVFlQRQkwCS8vIG5vdCB1c2VkCitCRUdJTgorICBCTE9DSyAiU3RyaW5nRmlsZUluZm8iCisgIEJFR0lOCisgICAgQkxPQ0sgIjA0MDkwNEU0IgorICAgIC8vbGFuZ3VhZ2UgSUQgPSBVLlMuIEVuZ2xpc2gsIGNoYXIgc2V0ID0gV2luZG93cywgTXVsdGlsaW5ndWFsCisKKyAgICBCRUdJTgorICAgICAgVkFMVUUgIkZpbGVEZXNjcmlwdGlvbiIsICJ6bGliIGRhdGEgY29tcHJlc3Npb24gYW5kIFpJUCBmaWxlIEkvTyBsaWJyYXJ5XDAiCisgICAgICBWQUxVRSAiRmlsZVZlcnNpb24iLAkiMS4yLjEyXDAiCisgICAgICBWQUxVRSAiSW50ZXJuYWxOYW1lIiwJInpsaWJcMCIKKyAgICAgIFZBTFVFICJPcmlnaW5hbEZpbGVuYW1lIiwJInpsaWJ3YXBpLmRsbFwwIgorICAgICAgVkFMVUUgIlByb2R1Y3ROYW1lIiwJIlpMaWIuRExMXDAiCisgICAgICBWQUxVRSAiQ29tbWVudHMiLCJETEwgc3VwcG9ydCBieSBBbGVzc2FuZHJvIElhY29wZXR0aSAmIEdpbGxlcyBWb2xsYW50XDAiCisgICAgICBWQUxVRSAiTGVnYWxDb3B5cmlnaHQiLCAiKEMpIDE5OTUtMjAyMiBKZWFuLWxvdXAgR2FpbGx5ICYgTWFyayBBZGxlclwwIgorICAgIEVORAorICBFTkQKKyAgQkxPQ0sgIlZhckZpbGVJbmZvIgorICBCRUdJTgorICAgIFZBTFVFICJUcmFuc2xhdGlvbiIsIDB4MDQwOSwgMTI1MgorICBFTkQKK0VORApkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvdnN0dWRpby92YzE0L3psaWJzdGF0LnZjeHByb2ogYi9zcmMvY29udHJpYi92c3R1ZGlvL3ZjMTQvemxpYnN0YXQudmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTRiOTg2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbnRyaWIvdnN0dWRpby92YzE0L3psaWJzdGF0LnZjeHByb2oKQEAgLTAsMCArMSw0NjcgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iMTQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfEl0YW5pdW0iPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+SXRhbml1bTwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0iPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZVdpdGhvdXRBc208L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+SXRhbml1bTwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZVdpdGhvdXRBc218V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZVdpdGhvdXRBc208L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2VXaXRob3V0QXNtfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlV2l0aG91dEFzbTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8SXRhbml1bSI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPkl0YW5pdW08L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgIDwvSXRlbUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPns3NDVERUM1OC1FQkIzLTQ3QTktQTlCOC00QzY2MjdDMDFCRjh9PC9Qcm9qZWN0R3VpZD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djE0MDwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+U3RhdGljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxNDA8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djE0MDwvUGxhdGZvcm1Ub29sc2V0PgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+U3RhdGljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxNDA8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+U3RhdGljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxNDA8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTQwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTQwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+U3RhdGljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxNDA8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+U3RhdGljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxNDA8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8UHJvcGVydHlHcm91cD4KKyAgICA8X1Byb2plY3RGaWxlVmVyc2lvbj4xMC4wLjMwMTI4LjE8L19Qcm9qZWN0RmlsZVZlcnNpb24+CisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+eDg2XFpsaWJTdGF0JChDb25maWd1cmF0aW9uKVw8L091dERpcj4KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj54ODZcWmxpYlN0YXQkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPng4NlxabGliU3RhdCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+CisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj54ODZcWmxpYlN0YXQkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218V2luMzInIj54ODZcWmxpYlN0YXQkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPgorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiciPng4NlxabGliU3RhdCQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPgorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj54NjRcWmxpYlN0YXQkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPgorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj54NjRcWmxpYlN0YXQkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8SXRhbml1bSciPmlhNjRcWmxpYlN0YXQkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPgorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+aWE2NFxabGliU3RhdCQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPgorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPng2NFxabGliU3RhdCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+CisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+eDY0XFpsaWJTdGF0JChDb25maWd1cmF0aW9uKVxUbXBcPC9JbnREaXI+CisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPmlhNjRcWmxpYlN0YXQkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPgorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIj5pYTY0XFpsaWJTdGF0JChDb25maWd1cmF0aW9uKVxUbXBcPC9JbnREaXI+CisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfHg2NCciPng2NFxabGliU3RhdCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+CisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfHg2NCciPng2NFxabGliU3RhdCQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPgorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtJyI+aWE2NFxabGliU3RhdCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+CisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0nIj5pYTY0XFpsaWJTdGF0JChDb25maWd1cmF0aW9uKVxUbXBcPC9JbnREaXI+CisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtJyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtJyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218V2luMzInIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXx4NjQnIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfHg2NCciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIC8+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtYXNteDg2OyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7WkxJQl9XSU5BUEk7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX1dBUk5JTkdTOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxFeGNlcHRpb25IYW5kbGluZz4KKyAgICAgIDwvRXhjZXB0aW9uSGFuZGxpbmc+CisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERlYnVnRExMPC9SdW50aW1lTGlicmFyeT4KKyAgICAgIDxCdWZmZXJTZWN1cml0eUNoZWNrPmZhbHNlPC9CdWZmZXJTZWN1cml0eUNoZWNrPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyT3V0cHV0RmlsZT4kKEludERpcil6bGlic3RhdC5wY2g8L1ByZWNvbXBpbGVkSGVhZGVyT3V0cHV0RmlsZT4KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+CisgICAgICA8T2JqZWN0RmlsZU5hbWU+JChJbnREaXIpPC9PYmplY3RGaWxlTmFtZT4KKyAgICAgIDxQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4kKE91dERpcik8L1Byb2dyYW1EYXRhQmFzZUZpbGVOYW1lPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPgorICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+T2xkU3R5bGU8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+CisgICAgPC9DbENvbXBpbGU+CisgICAgPFJlc291cmNlQ29tcGlsZT4KKyAgICAgIDxDdWx0dXJlPjB4MDQwYzwvQ3VsdHVyZT4KKyAgICA8L1Jlc291cmNlQ29tcGlsZT4KKyAgICA8TGliPgorICAgICAgPEFkZGl0aW9uYWxPcHRpb25zPi9NQUNISU5FOlg4NiAvTk9ERUZBVUxUTElCICUoQWRkaXRpb25hbE9wdGlvbnMpPC9BZGRpdGlvbmFsT3B0aW9ucz4KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKXpsaWJzdGF0LmxpYjwvT3V0cHV0RmlsZT4KKyAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPgorICAgIDwvTGliPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOy4uXC4uXG1hc214ODY7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtaTElCX1dJTkFQSTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fV0FSTklOR1M7QVNNVjtBU01JTkY7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4KKyAgICAgIDxFeGNlcHRpb25IYW5kbGluZz4KKyAgICAgIDwvRXhjZXB0aW9uSGFuZGxpbmc+CisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+CisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlck91dHB1dEZpbGU+JChJbnREaXIpemxpYnN0YXQucGNoPC9QcmVjb21waWxlZEhlYWRlck91dHB1dEZpbGU+CisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPgorICAgICAgPE9iamVjdEZpbGVOYW1lPiQoSW50RGlyKTwvT2JqZWN0RmlsZU5hbWU+CisgICAgICA8UHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+JChPdXREaXIpPC9Qcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8UmVzb3VyY2VDb21waWxlPgorICAgICAgPEN1bHR1cmU+MHgwNDBjPC9DdWx0dXJlPgorICAgIDwvUmVzb3VyY2VDb21waWxlPgorICAgIDxMaWI+CisgICAgICA8QWRkaXRpb25hbE9wdGlvbnM+L01BQ0hJTkU6WDg2IC9OT0RFRkFVTFRMSUIgJShBZGRpdGlvbmFsT3B0aW9ucyk8L0FkZGl0aW9uYWxPcHRpb25zPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Li5cLi5cbWFzbXg4NlxtYXRjaDY4Ni5vYmo7Li5cLi5cbWFzbXg4NlxpbmZmYXMzMi5vYmo7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKXpsaWJzdGF0LmxpYjwvT3V0cHV0RmlsZT4KKyAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPgorICAgIDwvTGliPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtYXNteDg2OyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7WkxJQl9XSU5BUEk7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX1dBUk5JTkdTOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+CisgICAgICA8RXhjZXB0aW9uSGFuZGxpbmc+CisgICAgICA8L0V4Y2VwdGlvbkhhbmRsaW5nPgorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5PgorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlPiQoSW50RGlyKXpsaWJzdGF0LnBjaDwvUHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlPgorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4KKyAgICAgIDxPYmplY3RGaWxlTmFtZT4kKEludERpcik8L09iamVjdEZpbGVOYW1lPgorICAgICAgPFByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPiQoT3V0RGlyKTwvUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPFJlc291cmNlQ29tcGlsZT4KKyAgICAgIDxDdWx0dXJlPjB4MDQwYzwvQ3VsdHVyZT4KKyAgICA8L1Jlc291cmNlQ29tcGlsZT4KKyAgICA8TGliPgorICAgICAgPEFkZGl0aW9uYWxPcHRpb25zPi9NQUNISU5FOlg4NiAvTk9ERUZBVUxUTElCICUoQWRkaXRpb25hbE9wdGlvbnMpPC9BZGRpdGlvbmFsT3B0aW9ucz4KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKXpsaWJzdGF0LmxpYjwvT3V0cHV0RmlsZT4KKyAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPgorICAgIDwvTGliPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPE1pZGw+CisgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KKyAgICA8L01pZGw+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOy4uXC4uXG1hc214ODY7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5aTElCX1dJTkFQSTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fV0FSTklOR1M7V0lONjQ7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEV4Y2VwdGlvbkhhbmRsaW5nPgorICAgICAgPC9FeGNlcHRpb25IYW5kbGluZz4KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWdETEw8L1J1bnRpbWVMaWJyYXJ5PgorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlPiQoSW50RGlyKXpsaWJzdGF0LnBjaDwvUHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlPgorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4KKyAgICAgIDxPYmplY3RGaWxlTmFtZT4kKEludERpcik8L09iamVjdEZpbGVOYW1lPgorICAgICAgPFByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPiQoT3V0RGlyKTwvUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+CisgICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5PbGRTdHlsZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8UmVzb3VyY2VDb21waWxlPgorICAgICAgPEN1bHR1cmU+MHgwNDBjPC9DdWx0dXJlPgorICAgIDwvUmVzb3VyY2VDb21waWxlPgorICAgIDxMaWI+CisgICAgICA8QWRkaXRpb25hbE9wdGlvbnM+L01BQ0hJTkU6QU1ENjQgL05PREVGQVVMVExJQiAlKEFkZGl0aW9uYWxPcHRpb25zKTwvQWRkaXRpb25hbE9wdGlvbnM+CisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpcil6bGlic3RhdC5saWI8L091dHB1dEZpbGU+CisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4KKyAgICA8L0xpYj4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIj4KKyAgICA8TWlkbD4KKyAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5JdGFuaXVtPC9UYXJnZXRFbnZpcm9ubWVudD4KKyAgICA8L01pZGw+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOy4uXC4uXG1hc214ODY7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5aTElCX1dJTkFQSTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fV0FSTklOR1M7V0lONjQ7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEV4Y2VwdGlvbkhhbmRsaW5nPgorICAgICAgPC9FeGNlcHRpb25IYW5kbGluZz4KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWdETEw8L1J1bnRpbWVMaWJyYXJ5PgorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlPiQoSW50RGlyKXpsaWJzdGF0LnBjaDwvUHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlPgorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4KKyAgICAgIDxPYmplY3RGaWxlTmFtZT4kKEludERpcik8L09iamVjdEZpbGVOYW1lPgorICAgICAgPFByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPiQoT3V0RGlyKTwvUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+CisgICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5PbGRTdHlsZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8UmVzb3VyY2VDb21waWxlPgorICAgICAgPEN1bHR1cmU+MHgwNDBjPC9DdWx0dXJlPgorICAgIDwvUmVzb3VyY2VDb21waWxlPgorICAgIDxMaWI+CisgICAgICA8QWRkaXRpb25hbE9wdGlvbnM+L01BQ0hJTkU6SUE2NCAvTk9ERUZBVUxUTElCICUoQWRkaXRpb25hbE9wdGlvbnMpPC9BZGRpdGlvbmFsT3B0aW9ucz4KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKXpsaWJzdGF0LmxpYjwvT3V0cHV0RmlsZT4KKyAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPgorICAgIDwvTGliPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8TWlkbD4KKyAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgorICAgIDwvTWlkbD4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtYXNteDg2OyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+WkxJQl9XSU5BUEk7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX1dBUk5JTkdTO0FTTVY7QVNNSU5GO1dJTjY0OyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+CisgICAgICA8RXhjZXB0aW9uSGFuZGxpbmc+CisgICAgICA8L0V4Y2VwdGlvbkhhbmRsaW5nPgorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWRETEw8L1J1bnRpbWVMaWJyYXJ5PgorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlPiQoSW50RGlyKXpsaWJzdGF0LnBjaDwvUHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlPgorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4KKyAgICAgIDxPYmplY3RGaWxlTmFtZT4kKEludERpcik8L09iamVjdEZpbGVOYW1lPgorICAgICAgPFByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPiQoT3V0RGlyKTwvUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPFJlc291cmNlQ29tcGlsZT4KKyAgICAgIDxDdWx0dXJlPjB4MDQwYzwvQ3VsdHVyZT4KKyAgICA8L1Jlc291cmNlQ29tcGlsZT4KKyAgICA8TGliPgorICAgICAgPEFkZGl0aW9uYWxPcHRpb25zPi9NQUNISU5FOkFNRDY0IC9OT0RFRkFVTFRMSUIgJShBZGRpdGlvbmFsT3B0aW9ucyk8L0FkZGl0aW9uYWxPcHRpb25zPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Li5cLi5cbWFzbXg2NFxndm1hdDY0Lm9iajsuLlwuLlxtYXNteDY0XGluZmZhc3g2NC5vYmo7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKXpsaWJzdGF0LmxpYjwvT3V0cHV0RmlsZT4KKyAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPgorICAgIDwvTGliPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyI+CisgICAgPE1pZGw+CisgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+SXRhbml1bTwvVGFyZ2V0RW52aXJvbm1lbnQ+CisgICAgPC9NaWRsPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOy4uXC4uXG1hc214ODY7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5aTElCX1dJTkFQSTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fV0FSTklOR1M7V0lONjQ7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4KKyAgICAgIDxFeGNlcHRpb25IYW5kbGluZz4KKyAgICAgIDwvRXhjZXB0aW9uSGFuZGxpbmc+CisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERMTDwvUnVudGltZUxpYnJhcnk+CisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlck91dHB1dEZpbGU+JChJbnREaXIpemxpYnN0YXQucGNoPC9QcmVjb21waWxlZEhlYWRlck91dHB1dEZpbGU+CisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPgorICAgICAgPE9iamVjdEZpbGVOYW1lPiQoSW50RGlyKTwvT2JqZWN0RmlsZU5hbWU+CisgICAgICA8UHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+JChPdXREaXIpPC9Qcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8UmVzb3VyY2VDb21waWxlPgorICAgICAgPEN1bHR1cmU+MHgwNDBjPC9DdWx0dXJlPgorICAgIDwvUmVzb3VyY2VDb21waWxlPgorICAgIDxMaWI+CisgICAgICA8QWRkaXRpb25hbE9wdGlvbnM+L01BQ0hJTkU6SUE2NCAvTk9ERUZBVUxUTElCICUoQWRkaXRpb25hbE9wdGlvbnMpPC9BZGRpdGlvbmFsT3B0aW9ucz4KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKXpsaWJzdGF0LmxpYjwvT3V0cHV0RmlsZT4KKyAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPgorICAgIDwvTGliPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218eDY0JyI+CisgICAgPE1pZGw+CisgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KKyAgICA8L01pZGw+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47Li5cLi5cbWFzbXg4NjslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPlpMSUJfV0lOQVBJO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19XQVJOSU5HUztXSU42NDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgorICAgICAgPEV4Y2VwdGlvbkhhbmRsaW5nPgorICAgICAgPC9FeGNlcHRpb25IYW5kbGluZz4KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRExMPC9SdW50aW1lTGlicmFyeT4KKyAgICAgIDxCdWZmZXJTZWN1cml0eUNoZWNrPmZhbHNlPC9CdWZmZXJTZWN1cml0eUNoZWNrPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyT3V0cHV0RmlsZT4kKEludERpcil6bGlic3RhdC5wY2g8L1ByZWNvbXBpbGVkSGVhZGVyT3V0cHV0RmlsZT4KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+CisgICAgICA8T2JqZWN0RmlsZU5hbWU+JChJbnREaXIpPC9PYmplY3RGaWxlTmFtZT4KKyAgICAgIDxQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4kKE91dERpcik8L1Byb2dyYW1EYXRhQmFzZUZpbGVOYW1lPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxSZXNvdXJjZUNvbXBpbGU+CisgICAgICA8Q3VsdHVyZT4weDA0MGM8L0N1bHR1cmU+CisgICAgPC9SZXNvdXJjZUNvbXBpbGU+CisgICAgPExpYj4KKyAgICAgIDxBZGRpdGlvbmFsT3B0aW9ucz4vTUFDSElORTpBTUQ2NCAvTk9ERUZBVUxUTElCICUoQWRkaXRpb25hbE9wdGlvbnMpPC9BZGRpdGlvbmFsT3B0aW9ucz4KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKXpsaWJzdGF0LmxpYjwvT3V0cHV0RmlsZT4KKyAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPgorICAgIDwvTGliPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSciPgorICAgIDxNaWRsPgorICAgICAgPFRhcmdldEVudmlyb25tZW50Pkl0YW5pdW08L1RhcmdldEVudmlyb25tZW50PgorICAgIDwvTWlkbD4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtYXNteDg2OyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+WkxJQl9XSU5BUEk7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX1dBUk5JTkdTO1dJTjY0OyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+CisgICAgICA8RXhjZXB0aW9uSGFuZGxpbmc+CisgICAgICA8L0V4Y2VwdGlvbkhhbmRsaW5nPgorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWRETEw8L1J1bnRpbWVMaWJyYXJ5PgorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlPiQoSW50RGlyKXpsaWJzdGF0LnBjaDwvUHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlPgorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4KKyAgICAgIDxPYmplY3RGaWxlTmFtZT4kKEludERpcik8L09iamVjdEZpbGVOYW1lPgorICAgICAgPFByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPiQoT3V0RGlyKTwvUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPFJlc291cmNlQ29tcGlsZT4KKyAgICAgIDxDdWx0dXJlPjB4MDQwYzwvQ3VsdHVyZT4KKyAgICA8L1Jlc291cmNlQ29tcGlsZT4KKyAgICA8TGliPgorICAgICAgPEFkZGl0aW9uYWxPcHRpb25zPi9NQUNISU5FOklBNjQgL05PREVGQVVMVExJQiAlKEFkZGl0aW9uYWxPcHRpb25zKTwvQWRkaXRpb25hbE9wdGlvbnM+CisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpcil6bGlic3RhdC5saWI8L091dHB1dEZpbGU+CisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4KKyAgICA8L0xpYj4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cYWRsZXIzMi5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cY29tcHJlc3MuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXGNyYzMyLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxkZWZsYXRlLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxnemNsb3NlLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxnemxpYi5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cZ3pyZWFkLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxnendyaXRlLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxpbmZiYWNrLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxtYXNteDY0XGluZmZhczg2NjQuYyI+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5caW5mZmFzdC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5caW5mbGF0ZS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5caW5mdHJlZXMuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXG1pbml6aXBcaW9hcGkuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHRyZWVzLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlx1bmNvbXByLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxtaW5pemlwXHVuemlwLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxtaW5pemlwXHppcC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cenV0aWwuYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFJlc291cmNlQ29tcGlsZSBJbmNsdWRlPSJ6bGliLnJjIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Tm9uZSBJbmNsdWRlPSJ6bGlidmMuZGVmIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KKyAgPC9JbXBvcnRHcm91cD4KKzwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi92c3R1ZGlvL3ZjMTQvemxpYnZjLmRlZiBiL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxNC96bGlidmMuZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMDliYzEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29udHJpYi92c3R1ZGlvL3ZjMTQvemxpYnZjLmRlZgpAQCAtMCwwICsxLDE1OCBAQAorTElCUkFSWQ0KKzsgemxpYiBkYXRhIGNvbXByZXNzaW9uIGFuZCBaSVAgZmlsZSBJL08gbGlicmFyeQ0KKw0KK1ZFUlNJT04JCTEuMg0KKw0KK0VYUE9SVFMNCisgICAgICAgIGFkbGVyMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDENCisgICAgICAgIGNvbXByZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDINCisgICAgICAgIGNyYzMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDMNCisgICAgICAgIGRlZmxhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDQNCisgICAgICAgIGRlZmxhdGVDb3B5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDUNCisgICAgICAgIGRlZmxhdGVFbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDYNCisgICAgICAgIGRlZmxhdGVJbml0Ml8gICAgICAgICAgICAgICAgICAgICAgICAgICAgQDcNCisgICAgICAgIGRlZmxhdGVJbml0XyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDgNCisgICAgICAgIGRlZmxhdGVQYXJhbXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDkNCisgICAgICAgIGRlZmxhdGVSZXNldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDEwDQorICAgICAgICBkZWZsYXRlU2V0RGljdGlvbmFyeSAgICAgICAgICAgICAgICAgICAgIEAxMQ0KKyAgICAgICAgZ3pjbG9zZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTINCisgICAgICAgIGd6ZG9wZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDEzDQorICAgICAgICBnemVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxNA0KKyAgICAgICAgZ3pmbHVzaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTUNCisgICAgICAgIGd6b3BlbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDE2DQorICAgICAgICBnenJlYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxNw0KKyAgICAgICAgZ3p3cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTgNCisgICAgICAgIGluZmxhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDE5DQorICAgICAgICBpbmZsYXRlRW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAyMA0KKyAgICAgICAgaW5mbGF0ZUluaXQyXyAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMjENCisgICAgICAgIGluZmxhdGVJbml0XyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDIyDQorICAgICAgICBpbmZsYXRlUmVzZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAyMw0KKyAgICAgICAgaW5mbGF0ZVNldERpY3Rpb25hcnkgICAgICAgICAgICAgICAgICAgICBAMjQNCisgICAgICAgIGluZmxhdGVTeW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDI1DQorICAgICAgICB1bmNvbXByZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAyNg0KKyAgICAgICAgemxpYlZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMjcNCisgICAgICAgIGd6cHJpbnRmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDI4DQorICAgICAgICBnenB1dGMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAyOQ0KKyAgICAgICAgZ3pnZXRjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMzANCisgICAgICAgIGd6c2VlayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDMxDQorICAgICAgICBnenJld2luZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAzMg0KKyAgICAgICAgZ3p0ZWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMzMNCisgICAgICAgIGd6ZW9mICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDM0DQorICAgICAgICBnenNldHBhcmFtcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAzNQ0KKyAgICAgICAgekVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMzYNCisgICAgICAgIGluZmxhdGVTeW5jUG9pbnQgICAgICAgICAgICAgICAgICAgICAgICAgQDM3DQorICAgICAgICBnZXRfY3JjX3RhYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAzOA0KKyAgICAgICAgY29tcHJlc3MyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMzkNCisgICAgICAgIGd6cHV0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDQwDQorICAgICAgICBnemdldHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEA0MQ0KKyAgICAgICAgaW5mbGF0ZUNvcHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBANDINCisgICAgICAgIGluZmxhdGVCYWNrSW5pdF8gICAgICAgICAgICAgICAgICAgICAgICAgQDQzDQorICAgICAgICBpbmZsYXRlQmFjayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEA0NA0KKyAgICAgICAgaW5mbGF0ZUJhY2tFbmQgICAgICAgICAgICAgICAgICAgICAgICAgICBANDUNCisgICAgICAgIGNvbXByZXNzQm91bmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDQ2DQorICAgICAgICBkZWZsYXRlQm91bmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEA0Nw0KKyAgICAgICAgZ3pjbGVhcmVyciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBANDgNCisgICAgICAgIGd6dW5nZXRjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDQ5DQorICAgICAgICB6bGliQ29tcGlsZUZsYWdzICAgICAgICAgICAgICAgICAgICAgICAgIEA1MA0KKyAgICAgICAgZGVmbGF0ZVByaW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICBANTENCisgICAgICAgIGRlZmxhdGVQZW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgQDUyDQorDQorICAgICAgICB1bnpPcGVuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEA2MQ0KKyAgICAgICAgdW56Q2xvc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBANjINCisgICAgICAgIHVuekdldEdsb2JhbEluZm8gICAgICAgICAgICAgICAgICAgICAgICAgQDYzDQorICAgICAgICB1bnpHZXRDdXJyZW50RmlsZUluZm8gICAgICAgICAgICAgICAgICAgIEA2NA0KKyAgICAgICAgdW56R29Ub0ZpcnN0RmlsZSAgICAgICAgICAgICAgICAgICAgICAgICBANjUNCisgICAgICAgIHVuekdvVG9OZXh0RmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgQDY2DQorICAgICAgICB1bnpPcGVuQ3VycmVudEZpbGUgICAgICAgICAgICAgICAgICAgICAgIEA2Nw0KKyAgICAgICAgdW56UmVhZEN1cnJlbnRGaWxlICAgICAgICAgICAgICAgICAgICAgICBANjgNCisgICAgICAgIHVuek9wZW5DdXJyZW50RmlsZTMgICAgICAgICAgICAgICAgICAgICAgQDY5DQorICAgICAgICB1bnp0ZWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEA3MA0KKyAgICAgICAgdW56ZW9mICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBANzENCisgICAgICAgIHVuekNsb3NlQ3VycmVudEZpbGUgICAgICAgICAgICAgICAgICAgICAgQDcyDQorICAgICAgICB1bnpHZXRHbG9iYWxDb21tZW50ICAgICAgICAgICAgICAgICAgICAgIEA3Mw0KKyAgICAgICAgdW56U3RyaW5nRmlsZU5hbWVDb21wYXJlICAgICAgICAgICAgICAgICBANzQNCisgICAgICAgIHVuekxvY2F0ZUZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDc1DQorICAgICAgICB1bnpHZXRMb2NhbEV4dHJhZmllbGQgICAgICAgICAgICAgICAgICAgIEA3Ng0KKyAgICAgICAgdW56T3BlbjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBANzcNCisgICAgICAgIHVuek9wZW5DdXJyZW50RmlsZTIgICAgICAgICAgICAgICAgICAgICAgQDc4DQorICAgICAgICB1bnpPcGVuQ3VycmVudEZpbGVQYXNzd29yZCAgICAgICAgICAgICAgIEA3OQ0KKw0KKyAgICAgICAgemlwT3BlbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAODANCisgICAgICAgIHppcE9wZW5OZXdGaWxlSW5aaXAgICAgICAgICAgICAgICAgICAgICAgQDgxDQorICAgICAgICB6aXBXcml0ZUluRmlsZUluWmlwICAgICAgICAgICAgICAgICAgICAgIEA4Mg0KKyAgICAgICAgemlwQ2xvc2VGaWxlSW5aaXAgICAgICAgICAgICAgICAgICAgICAgICBAODMNCisgICAgICAgIHppcENsb3NlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDg0DQorICAgICAgICB6aXBPcGVuTmV3RmlsZUluWmlwMiAgICAgICAgICAgICAgICAgICAgIEA4Ng0KKyAgICAgICAgemlwQ2xvc2VGaWxlSW5aaXBSYXcgICAgICAgICAgICAgICAgICAgICBAODcNCisgICAgICAgIHppcE9wZW4yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDg4DQorICAgICAgICB6aXBPcGVuTmV3RmlsZUluWmlwMyAgICAgICAgICAgICAgICAgICAgIEA4OQ0KKw0KKyAgICAgICAgdW56R2V0RmlsZVBvcyAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTAwDQorICAgICAgICB1bnpHb1RvRmlsZVBvcyAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxMDENCisNCisgICAgICAgIGZpbGxfd2luMzJfZmlsZWZ1bmMgICAgICAgICAgICAgICAgICAgICAgQDExMA0KKw0KKzsgemxpYndhcGkgdjEuMi40IGFkZGVkOg0KKyAgICAgICAgZmlsbF93aW4zMl9maWxlZnVuYzY0ICAgICAgICAgICAgICAgICAgIEAxMTENCisgICAgICAgIGZpbGxfd2luMzJfZmlsZWZ1bmM2NEEgICAgICAgICAgICAgICAgICBAMTEyDQorICAgICAgICBmaWxsX3dpbjMyX2ZpbGVmdW5jNjRXICAgICAgICAgICAgICAgICAgQDExMw0KKw0KKyAgICAgICAgdW56T3BlbjY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxMjANCisgICAgICAgIHVuek9wZW4yXzY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTIxDQorICAgICAgICB1bnpHZXRHbG9iYWxJbmZvNjQgICAgICAgICAgICAgICAgICAgICAgQDEyMg0KKyAgICAgICAgdW56R2V0Q3VycmVudEZpbGVJbmZvNjQgICAgICAgICAgICAgICAgIEAxMjQNCisgICAgICAgIHVuekdldEN1cnJlbnRGaWxlWlN0cmVhbVBvczY0ICAgICAgICAgICBAMTI1DQorICAgICAgICB1bnp0ZWxsNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDEyNg0KKyAgICAgICAgdW56R2V0RmlsZVBvczY0ICAgICAgICAgICAgICAgICAgICAgICAgIEAxMjcNCisgICAgICAgIHVuekdvVG9GaWxlUG9zNjQgICAgICAgICAgICAgICAgICAgICAgICBAMTI4DQorDQorICAgICAgICB6aXBPcGVuNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDEzMA0KKyAgICAgICAgemlwT3BlbjJfNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxMzENCisgICAgICAgIHppcE9wZW5OZXdGaWxlSW5aaXA2NCAgICAgICAgICAgICAgICAgICBAMTMyDQorICAgICAgICB6aXBPcGVuTmV3RmlsZUluWmlwMl82NCAgICAgICAgICAgICAgICAgQDEzMw0KKyAgICAgICAgemlwT3Blbk5ld0ZpbGVJblppcDNfNjQgICAgICAgICAgICAgICAgIEAxMzQNCisgICAgICAgIHppcE9wZW5OZXdGaWxlSW5aaXA0XzY0ICAgICAgICAgICAgICAgICBAMTM1DQorICAgICAgICB6aXBDbG9zZUZpbGVJblppcFJhdzY0ICAgICAgICAgICAgICAgICAgQDEzNg0KKw0KKzsgemxpYjEgdjEuMi40IGFkZGVkOg0KKyAgICAgICAgYWRsZXIzMl9jb21iaW5lICAgICAgICAgICAgICAgICAgICAgICAgIEAxNDANCisgICAgICAgIGNyYzMyX2NvbWJpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTQyDQorICAgICAgICBkZWZsYXRlU2V0SGVhZGVyICAgICAgICAgICAgICAgICAgICAgICAgQDE0NA0KKyAgICAgICAgZGVmbGF0ZVR1bmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxNDUNCisgICAgICAgIGd6YnVmZmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTQ2DQorICAgICAgICBnemNsb3NlX3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDE0Nw0KKyAgICAgICAgZ3pjbG9zZV93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxNDgNCisgICAgICAgIGd6ZGlyZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTQ5DQorICAgICAgICBnem9mZnNldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDE1MA0KKyAgICAgICAgaW5mbGF0ZUdldEhlYWRlciAgICAgICAgICAgICAgICAgICAgICAgIEAxNTYNCisgICAgICAgIGluZmxhdGVNYXJrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTU3DQorICAgICAgICBpbmZsYXRlUHJpbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDE1OA0KKyAgICAgICAgaW5mbGF0ZVJlc2V0MiAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxNTkNCisgICAgICAgIGluZmxhdGVVbmRlcm1pbmUgICAgICAgICAgICAgICAgICAgICAgICBAMTYwDQorDQorOyB6bGliMSB2MS4yLjYgYWRkZWQ6DQorICAgICAgICBnemdldGNfICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDE2MQ0KKyAgICAgICAgaW5mbGF0ZVJlc2V0S2VlcCAgICAgICAgICAgICAgICAgICAgICAgIEAxNjMNCisgICAgICAgIGRlZmxhdGVSZXNldEtlZXAgICAgICAgICAgICAgICAgICAgICAgICBAMTY0DQorDQorOyB6bGliMSB2MS4yLjcgYWRkZWQ6DQorICAgICAgICBnem9wZW5fdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDE2NQ0KKw0KKzsgemxpYjEgdjEuMi44IGFkZGVkOg0KKyAgICAgICAgaW5mbGF0ZUdldERpY3Rpb25hcnkgICAgICAgICAgICAgICAgICAgIEAxNjYNCisgICAgICAgIGd6dnByaW50ZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTY3DQorDQorOyB6bGliMSB2MS4yLjkgYWRkZWQ6DQorICAgICAgICBpbmZsYXRlQ29kZXNVc2VkICAgICAgICAgICAgICAgICAgICAgICAgQDE2OA0KKyAgICAgICAgaW5mbGF0ZVZhbGlkYXRlICAgICAgICAgICAgICAgICAgICAgICAgIEAxNjkNCisgICAgICAgIHVuY29tcHJlc3MyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTcwDQorICAgICAgICBnemZyZWFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDE3MQ0KKyAgICAgICAgZ3pmd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxNzINCisgICAgICAgIGRlZmxhdGVHZXREaWN0aW9uYXJ5ICAgICAgICAgICAgICAgICAgICBAMTczDQorICAgICAgICBhZGxlcjMyX3ogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDE3NA0KKyAgICAgICAgY3JjMzJfeiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxNzUNCisNCis7IHpsaWIxIHYxLjIuMTIgYWRkZWQ6DQorCQljcmMzMl9jb21iaW5lX2dlbgkJCQkJCUAxNzYNCisJCWNyYzMyX2NvbWJpbmVfZ2VuNjQJCQkJCQlAMTc3DQorCQljcmMzMl9jb21iaW5lX29wCQkJCQkJQDE3OA0KZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxNC96bGlidmMuc2xuIGIvc3JjL2NvbnRyaWIvdnN0dWRpby92YzE0L3psaWJ2Yy5zbG4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY0YTEwNwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxNC96bGlidmMuc2xuCkBAIC0wLDAgKzEsMTE5IEBACivvu78KK01pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIFNvbHV0aW9uIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDEyLjAwCisjIFZpc3VhbCBTdHVkaW8gMTQKK1Zpc3VhbFN0dWRpb1ZlcnNpb24gPSAxNC4wLjI1NDIwLjEKK01pbmltdW1WaXN1YWxTdHVkaW9WZXJzaW9uID0gMTAuMC40MDIxOS4xCitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInpsaWJ2YyIsICJ6bGlidmMudmN4cHJvaiIsICJ7OEZEODI2RjgtMzczOS00NEU2LThDQzgtOTk3MTIyRTUzQjhEfSIKK0VuZFByb2plY3QKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiemxpYnN0YXQiLCAiemxpYnN0YXQudmN4cHJvaiIsICJ7NzQ1REVDNTgtRUJCMy00N0E5LUE5QjgtNEM2NjI3QzAxQkY4fSIKK0VuZFByb2plY3QKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAidGVzdHpsaWIiLCAidGVzdHpsaWIudmN4cHJvaiIsICJ7QUE2NjY2QUEtRTA5Ri00MTM1LTlDMEMtNEZFNTBDM0M2NTRCfSIKK0VuZFByb2plY3QKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAidGVzdHpsaWJkbGwiLCAidGVzdHpsaWJkbGwudmN4cHJvaiIsICJ7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzNjZBfSIKK0VuZFByb2plY3QKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAibWluaXppcCIsICJtaW5pemlwLnZjeHByb2oiLCAiezQ4Q0REOURDLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0iCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIm1pbml1bnoiLCAibWluaXVuei52Y3hwcm9qIiwgIntDNTJGOUU3Qi00OThBLTQyQkUtOERCNC04NUExNTY5NDM4MkF9IgorRW5kUHJvamVjdAorR2xvYmFsCisJR2xvYmFsU2VjdGlvbihTb2x1dGlvbkNvbmZpZ3VyYXRpb25QbGF0Zm9ybXMpID0gcHJlU29sdXRpb24KKwkJRGVidWd8SXRhbml1bSA9IERlYnVnfEl0YW5pdW0KKwkJRGVidWd8V2luMzIgPSBEZWJ1Z3xXaW4zMgorCQlEZWJ1Z3x4NjQgPSBEZWJ1Z3x4NjQKKwkJUmVsZWFzZXxJdGFuaXVtID0gUmVsZWFzZXxJdGFuaXVtCisJCVJlbGVhc2V8V2luMzIgPSBSZWxlYXNlfFdpbjMyCisJCVJlbGVhc2V8eDY0ID0gUmVsZWFzZXx4NjQKKwkJUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSA9IFJlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0KKwkJUmVsZWFzZVdpdGhvdXRBc218V2luMzIgPSBSZWxlYXNlV2l0aG91dEFzbXxXaW4zMgorCQlSZWxlYXNlV2l0aG91dEFzbXx4NjQgPSBSZWxlYXNlV2l0aG91dEFzbXx4NjQKKwlFbmRHbG9iYWxTZWN0aW9uCisJR2xvYmFsU2VjdGlvbihQcm9qZWN0Q29uZmlndXJhdGlvblBsYXRmb3JtcykgPSBwb3N0U29sdXRpb24KKwkJezhGRDgyNkY4LTM3MzktNDRFNi04Q0M4LTk5NzEyMkU1M0I4RH0uRGVidWd8SXRhbml1bS5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7OEZEODI2RjgtMzczOS00NEU2LThDQzgtOTk3MTIyRTUzQjhEfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7OEZEODI2RjgtMzczOS00NEU2LThDQzgtOTk3MTIyRTUzQjhEfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJezhGRDgyNkY4LTM3MzktNDRFNi04Q0M4LTk5NzEyMkU1M0I4RH0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7OEZEODI2RjgtMzczOS00NEU2LThDQzgtOTk3MTIyRTUzQjhEfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7OEZEODI2RjgtMzczOS00NEU2LThDQzgtOTk3MTIyRTUzQjhEfS5SZWxlYXNlfEl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7OEZEODI2RjgtMzczOS00NEU2LThDQzgtOTk3MTIyRTUzQjhEfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJezhGRDgyNkY4LTM3MzktNDRFNi04Q0M4LTk5NzEyMkU1M0I4RH0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7OEZEODI2RjgtMzczOS00NEU2LThDQzgtOTk3MTIyRTUzQjhEfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7OEZEODI2RjgtMzczOS00NEU2LThDQzgtOTk3MTIyRTUzQjhEfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwkJezhGRDgyNkY4LTM3MzktNDRFNi04Q0M4LTk5NzEyMkU1M0I4RH0uUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlV2l0aG91dEFzbXxXaW4zMgorCQl7OEZEODI2RjgtMzczOS00NEU2LThDQzgtOTk3MTIyRTUzQjhEfS5SZWxlYXNlV2l0aG91dEFzbXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlV2l0aG91dEFzbXxXaW4zMgorCQl7OEZEODI2RjgtMzczOS00NEU2LThDQzgtOTk3MTIyRTUzQjhEfS5SZWxlYXNlV2l0aG91dEFzbXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZVdpdGhvdXRBc218V2luMzIKKwkJezhGRDgyNkY4LTM3MzktNDRFNi04Q0M4LTk5NzEyMkU1M0I4RH0uUmVsZWFzZVdpdGhvdXRBc218eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2VXaXRob3V0QXNtfHg2NAorCQl7OEZEODI2RjgtMzczOS00NEU2LThDQzgtOTk3MTIyRTUzQjhEfS5SZWxlYXNlV2l0aG91dEFzbXx4NjQuQnVpbGQuMCA9IFJlbGVhc2VXaXRob3V0QXNtfHg2NAorCQl7NzQ1REVDNTgtRUJCMy00N0E5LUE5QjgtNEM2NjI3QzAxQkY4fS5EZWJ1Z3xJdGFuaXVtLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXs3NDVERUM1OC1FQkIzLTQ3QTktQTlCOC00QzY2MjdDMDFCRjh9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXs3NDVERUM1OC1FQkIzLTQ3QTktQTlCOC00QzY2MjdDMDFCRjh9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7NzQ1REVDNTgtRUJCMy00N0E5LUE5QjgtNEM2NjI3QzAxQkY4fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXs3NDVERUM1OC1FQkIzLTQ3QTktQTlCOC00QzY2MjdDMDFCRjh9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXs3NDVERUM1OC1FQkIzLTQ3QTktQTlCOC00QzY2MjdDMDFCRjh9LlJlbGVhc2V8SXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXs3NDVERUM1OC1FQkIzLTQ3QTktQTlCOC00QzY2MjdDMDFCRjh9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7NzQ1REVDNTgtRUJCMy00N0E5LUE5QjgtNEM2NjI3QzAxQkY4fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXs3NDVERUM1OC1FQkIzLTQ3QTktQTlCOC00QzY2MjdDMDFCRjh9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXs3NDVERUM1OC1FQkIzLTQ3QTktQTlCOC00QzY2MjdDMDFCRjh9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7NzQ1REVDNTgtRUJCMy00N0E5LUE5QjgtNEM2NjI3QzAxQkY4fS5SZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2VXaXRob3V0QXNtfFdpbjMyCisJCXs3NDVERUM1OC1FQkIzLTQ3QTktQTlCOC00QzY2MjdDMDFCRjh9LlJlbGVhc2VXaXRob3V0QXNtfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2VXaXRob3V0QXNtfFdpbjMyCisJCXs3NDVERUM1OC1FQkIzLTQ3QTktQTlCOC00QzY2MjdDMDFCRjh9LlJlbGVhc2VXaXRob3V0QXNtfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlV2l0aG91dEFzbXxXaW4zMgorCQl7NzQ1REVDNTgtRUJCMy00N0E5LUE5QjgtNEM2NjI3QzAxQkY4fS5SZWxlYXNlV2l0aG91dEFzbXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZVdpdGhvdXRBc218eDY0CisJCXs3NDVERUM1OC1FQkIzLTQ3QTktQTlCOC00QzY2MjdDMDFCRjh9LlJlbGVhc2VXaXRob3V0QXNtfHg2NC5CdWlsZC4wID0gUmVsZWFzZVdpdGhvdXRBc218eDY0CisJCXtBQTY2NjZBQS1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LkRlYnVnfEl0YW5pdW0uQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJe0FBNjY2NkFBLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJe0FBNjY2NkFBLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXtBQTY2NjZBQS1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJe0FBNjY2NkFBLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJe0FBNjY2NkFBLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uUmVsZWFzZXxJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJe0FBNjY2NkFBLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXtBQTY2NjZBQS1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJe0FBNjY2NkFBLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJe0FBNjY2NkFBLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXtBQTY2NjZBQS1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LlJlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZVdpdGhvdXRBc218V2luMzIKKwkJe0FBNjY2NkFBLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uUmVsZWFzZVdpdGhvdXRBc218V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZVdpdGhvdXRBc218V2luMzIKKwkJe0FBNjY2NkFBLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uUmVsZWFzZVdpdGhvdXRBc218V2luMzIuQnVpbGQuMCA9IFJlbGVhc2VXaXRob3V0QXNtfFdpbjMyCisJCXtBQTY2NjZBQS1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LlJlbGVhc2VXaXRob3V0QXNtfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlV2l0aG91dEFzbXx4NjQKKwkJe0FBNjY2NkFBLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uUmVsZWFzZVdpdGhvdXRBc218eDY0LkJ1aWxkLjAgPSBSZWxlYXNlV2l0aG91dEFzbXx4NjQKKwkJe0M1MkY5RTdCLTQ5OEEtNDJCRS04REI0LTg1QTE1Njk0MzY2QX0uRGVidWd8SXRhbml1bS5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzNjZBfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzNjZBfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJe0M1MkY5RTdCLTQ5OEEtNDJCRS04REI0LTg1QTE1Njk0MzY2QX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzNjZBfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzNjZBfS5SZWxlYXNlfEl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzNjZBfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJe0M1MkY5RTdCLTQ5OEEtNDJCRS04REI0LTg1QTE1Njk0MzY2QX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzNjZBfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzNjZBfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwkJe0M1MkY5RTdCLTQ5OEEtNDJCRS04REI0LTg1QTE1Njk0MzY2QX0uUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXtDNTJGOUU3Qi00OThBLTQyQkUtOERCNC04NUExNTY5NDM2NkF9LlJlbGVhc2VXaXRob3V0QXNtfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJe0M1MkY5RTdCLTQ5OEEtNDJCRS04REI0LTg1QTE1Njk0MzY2QX0uUmVsZWFzZVdpdGhvdXRBc218eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXs0OENERDlEQy1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LkRlYnVnfEl0YW5pdW0uQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJezQ4Q0REOURDLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJezQ4Q0REOURDLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXs0OENERDlEQy1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJezQ4Q0REOURDLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJezQ4Q0REOURDLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uUmVsZWFzZXxJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJezQ4Q0REOURDLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXs0OENERDlEQy1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJezQ4Q0REOURDLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJezQ4Q0REOURDLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXs0OENERDlEQy1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LlJlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7NDhDREQ5REMtRTA5Ri00MTM1LTlDMEMtNEZFNTBDM0M2NTRCfS5SZWxlYXNlV2l0aG91dEFzbXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXs0OENERDlEQy1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LlJlbGVhc2VXaXRob3V0QXNtfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzODJBfS5EZWJ1Z3xJdGFuaXVtLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXtDNTJGOUU3Qi00OThBLTQyQkUtOERCNC04NUExNTY5NDM4MkF9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXtDNTJGOUU3Qi00OThBLTQyQkUtOERCNC04NUExNTY5NDM4MkF9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzODJBfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXtDNTJGOUU3Qi00OThBLTQyQkUtOERCNC04NUExNTY5NDM4MkF9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXtDNTJGOUU3Qi00OThBLTQyQkUtOERCNC04NUExNTY5NDM4MkF9LlJlbGVhc2V8SXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXtDNTJGOUU3Qi00OThBLTQyQkUtOERCNC04NUExNTY5NDM4MkF9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzODJBfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXtDNTJGOUU3Qi00OThBLTQyQkUtOERCNC04NUExNTY5NDM4MkF9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXtDNTJGOUU3Qi00OThBLTQyQkUtOERCNC04NUExNTY5NDM4MkF9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzODJBfS5SZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJe0M1MkY5RTdCLTQ5OEEtNDJCRS04REI0LTg1QTE1Njk0MzgyQX0uUmVsZWFzZVdpdGhvdXRBc218V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzODJBfS5SZWxlYXNlV2l0aG91dEFzbXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwlFbmRHbG9iYWxTZWN0aW9uCisJR2xvYmFsU2VjdGlvbihTb2x1dGlvblByb3BlcnRpZXMpID0gcHJlU29sdXRpb24KKwkJSGlkZVNvbHV0aW9uTm9kZSA9IEZBTFNFCisJRW5kR2xvYmFsU2VjdGlvbgorRW5kR2xvYmFsCmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi92c3R1ZGlvL3ZjMTQvemxpYnZjLnZjeHByb2ogYi9zcmMvY29udHJpYi92c3R1ZGlvL3ZjMTQvemxpYnZjLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhmNjczYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxNC96bGlidmMudmN4cHJvagpAQCAtMCwwICsxLDY5MiBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSIxNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8SXRhbml1bSI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5JdGFuaXVtPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlV2l0aG91dEFzbTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5JdGFuaXVtPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlV2l0aG91dEFzbTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZVdpdGhvdXRBc218eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2VXaXRob3V0QXNtPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxJdGFuaXVtIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+SXRhbml1bTwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgPC9JdGVtR3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+ezhGRDgyNkY4LTM3MzktNDRFNi04Q0M4LTk5NzEyMkU1M0I4RH08L1Byb2plY3RHdWlkPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTQwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTQwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTQwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djE0MDwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTQwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxNDA8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxNDA8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTQwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djE0MDwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwPgorICAgIDxfUHJvamVjdEZpbGVWZXJzaW9uPjEwLjAuMzAxMjguMTwvX1Byb2plY3RGaWxlVmVyc2lvbj4KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj54ODZcWmxpYkRsbCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+CisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+eDg2XFpsaWJEbGwkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgICAgPEdlbmVyYXRlTWFuaWZlc3QgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPmZhbHNlPC9HZW5lcmF0ZU1hbmlmZXN0PgorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiciPng4NlxabGliRGxsJChDb25maWd1cmF0aW9uKVw8L091dERpcj4KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218V2luMzInIj54ODZcWmxpYkRsbCQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPgorICAgIDxMaW5rSW5jcmVtZW50YWwgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiciPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgICAgPEdlbmVyYXRlTWFuaWZlc3QgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiciPmZhbHNlPC9HZW5lcmF0ZU1hbmlmZXN0PgorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+eDg2XFpsaWJEbGwkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPgorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+eDg2XFpsaWJEbGwkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgICAgPEdlbmVyYXRlTWFuaWZlc3QgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+ZmFsc2U8L0dlbmVyYXRlTWFuaWZlc3Q+CisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPng2NFxabGliRGxsJChDb25maWd1cmF0aW9uKVw8L091dERpcj4KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+eDY0XFpsaWJEbGwkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICAgIDxHZW5lcmF0ZU1hbmlmZXN0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+ZmFsc2U8L0dlbmVyYXRlTWFuaWZlc3Q+CisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIj5pYTY0XFpsaWJEbGwkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPgorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+aWE2NFxabGliRGxsJChDb25maWd1cmF0aW9uKVxUbXBcPC9JbnREaXI+CisgICAgPExpbmtJbmNyZW1lbnRhbCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIj50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgICAgPEdlbmVyYXRlTWFuaWZlc3QgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+ZmFsc2U8L0dlbmVyYXRlTWFuaWZlc3Q+CisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfHg2NCciPng2NFxabGliRGxsJChDb25maWd1cmF0aW9uKVw8L091dERpcj4KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218eDY0JyI+eDY0XFpsaWJEbGwkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218eDY0JyI+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgICA8R2VuZXJhdGVNYW5pZmVzdCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfHg2NCciPmZhbHNlPC9HZW5lcmF0ZU1hbmlmZXN0PgorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtJyI+aWE2NFxabGliRGxsJChDb25maWd1cmF0aW9uKVw8L091dERpcj4KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSciPmlhNjRcWmxpYkRsbCQoQ29uZmlndXJhdGlvbilcVG1wXDwvSW50RGlyPgorICAgIDxMaW5rSW5jcmVtZW50YWwgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtJyI+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgICA8R2VuZXJhdGVNYW5pZmVzdCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0nIj5mYWxzZTwvR2VuZXJhdGVNYW5pZmVzdD4KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj54NjRcWmxpYkRsbCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+CisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+eDY0XFpsaWJEbGwkKENvbmZpZ3VyYXRpb24pXFRtcFw8L0ludERpcj4KKyAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICAgIDxHZW5lcmF0ZU1hbmlmZXN0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5mYWxzZTwvR2VuZXJhdGVNYW5pZmVzdD4KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyI+aWE2NFxabGliRGxsJChDb25maWd1cmF0aW9uKVw8L091dERpcj4KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyI+aWE2NFxabGliRGxsJChDb25maWd1cmF0aW9uKVxUbXBcPC9JbnREaXI+CisgICAgPExpbmtJbmNyZW1lbnRhbCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgICAgPEdlbmVyYXRlTWFuaWZlc3QgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIj5mYWxzZTwvR2VuZXJhdGVNYW5pZmVzdD4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEl0YW5pdW0nIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0nIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0nIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0nIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfFdpbjMyJyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXx4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfHg2NCciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218eDY0JyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+CisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyIgLz4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+CisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIC8+CisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+CisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiAvPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgLz4KKyAgICA8VGFyZ2V0TmFtZSBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+emxpYndhcGk8L1RhcmdldE5hbWU+CisgICAgPFRhcmdldE5hbWUgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiciPnpsaWJ3YXBpPC9UYXJnZXROYW1lPgorICAgIDxUYXJnZXROYW1lIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPnpsaWJ3YXBpPC9UYXJnZXROYW1lPgorICAgIDxUYXJnZXROYW1lIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+emxpYndhcGk8L1RhcmdldE5hbWU+CisgICAgPFRhcmdldE5hbWUgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXx4NjQnIj56bGlid2FwaTwvVGFyZ2V0TmFtZT4KKyAgICA8VGFyZ2V0TmFtZSBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+emxpYndhcGk8L1RhcmdldE5hbWU+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxNaWRsPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9ERUJVRzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8TWtUeXBMaWJDb21wYXRpYmxlPnRydWU8L01rVHlwTGliQ29tcGF0aWJsZT4KKyAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPgorICAgICAgPFRhcmdldEVudmlyb25tZW50PldpbjMyPC9UYXJnZXRFbnZpcm9ubWVudD4KKyAgICAgIDxUeXBlTGlicmFyeU5hbWU+JChPdXREaXIpemxpYnZjLnRsYjwvVHlwZUxpYnJhcnlOYW1lPgorICAgIDwvTWlkbD4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47Li5cLi5cbWFzbXg4NjslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19XQVJOSU5HUztaTElCX1dJTkFQSTtBU01WO0FTTUlORjslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8RXhjZXB0aW9uSGFuZGxpbmc+CisgICAgICA8L0V4Y2VwdGlvbkhhbmRsaW5nPgorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1Z0RMTDwvUnVudGltZUxpYnJhcnk+CisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlck91dHB1dEZpbGU+JChJbnREaXIpemxpYnZjLnBjaDwvUHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlPgorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4KKyAgICAgIDxPYmplY3RGaWxlTmFtZT4kKEludERpcik8L09iamVjdEZpbGVOYW1lPgorICAgICAgPFByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPiQoT3V0RGlyKTwvUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+CisgICAgICA8QnJvd3NlSW5mb3JtYXRpb24+CisgICAgICA8L0Jyb3dzZUluZm9ybWF0aW9uPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPgorICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+UHJvZ3JhbURhdGFiYXNlPC9EZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PgorICAgIDwvQ2xDb21waWxlPgorICAgIDxSZXNvdXJjZUNvbXBpbGU+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0RFQlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxDdWx0dXJlPjB4MDQwYzwvQ3VsdHVyZT4KKyAgICA8L1Jlc291cmNlQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxBZGRpdGlvbmFsT3B0aW9ucz4vTUFDSElORTpJMzg2ICUoQWRkaXRpb25hbE9wdGlvbnMpPC9BZGRpdGlvbmFsT3B0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPi4uXC4uXG1hc214ODZcbWF0Y2g2ODYub2JqOy4uXC4uXG1hc214ODZcaW5mZmFzMzIub2JqOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpcil6bGlid2FwaS5kbGw8L091dHB1dEZpbGU+CisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4KKyAgICAgIDxNb2R1bGVEZWZpbml0aW9uRmlsZT4uXHpsaWJ2Yy5kZWY8L01vZHVsZURlZmluaXRpb25GaWxlPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8UHJvZ3JhbURhdGFiYXNlRmlsZT4kKE91dERpcil6bGlid2FwaS5wZGI8L1Byb2dyYW1EYXRhYmFzZUZpbGU+CisgICAgICA8R2VuZXJhdGVNYXBGaWxlPnRydWU8L0dlbmVyYXRlTWFwRmlsZT4KKyAgICAgIDxNYXBGaWxlTmFtZT4kKE91dERpcil6bGlid2FwaS5tYXA8L01hcEZpbGVOYW1lPgorICAgICAgPFN1YlN5c3RlbT5XaW5kb3dzPC9TdWJTeXN0ZW0+CisgICAgICA8UmFuZG9taXplZEJhc2VBZGRyZXNzPmZhbHNlPC9SYW5kb21pemVkQmFzZUFkZHJlc3M+CisgICAgICA8RGF0YUV4ZWN1dGlvblByZXZlbnRpb24+CisgICAgICA8L0RhdGFFeGVjdXRpb25QcmV2ZW50aW9uPgorICAgICAgPEltcG9ydExpYnJhcnk+JChPdXREaXIpemxpYndhcGkubGliPC9JbXBvcnRMaWJyYXJ5PgorICAgIDwvTGluaz4KKyAgICA8UHJlQnVpbGRFdmVudD4KKyAgICAgIDxDb21tYW5kPmNkIC4uXC4uXG1hc214ODYKK2JsZF9tbDMyLmJhdDwvQ29tbWFuZD4KKyAgICA8L1ByZUJ1aWxkRXZlbnQ+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiciPgorICAgIDxNaWRsPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPk5ERUJVRzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8TWtUeXBMaWJDb21wYXRpYmxlPnRydWU8L01rVHlwTGliQ29tcGF0aWJsZT4KKyAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPgorICAgICAgPFRhcmdldEVudmlyb25tZW50PldpbjMyPC9UYXJnZXRFbnZpcm9ubWVudD4KKyAgICAgIDxUeXBlTGlicmFyeU5hbWU+JChPdXREaXIpemxpYnZjLnRsYjwvVHlwZUxpYnJhcnlOYW1lPgorICAgIDwvTWlkbD4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtYXNteDg2OyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX1dBUk5JTkdTO1pMSUJfV0lOQVBJOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+CisgICAgICA8RXhjZXB0aW9uSGFuZGxpbmc+CisgICAgICA8L0V4Y2VwdGlvbkhhbmRsaW5nPgorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWRETEw8L1J1bnRpbWVMaWJyYXJ5PgorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlPiQoSW50RGlyKXpsaWJ2Yy5wY2g8L1ByZWNvbXBpbGVkSGVhZGVyT3V0cHV0RmlsZT4KKyAgICAgIDxBc3NlbWJsZXJPdXRwdXQ+QWxsPC9Bc3NlbWJsZXJPdXRwdXQ+CisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPgorICAgICAgPE9iamVjdEZpbGVOYW1lPiQoSW50RGlyKTwvT2JqZWN0RmlsZU5hbWU+CisgICAgICA8UHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+JChPdXREaXIpPC9Qcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4KKyAgICAgIDxCcm93c2VJbmZvcm1hdGlvbj4KKyAgICAgIDwvQnJvd3NlSW5mb3JtYXRpb24+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPFJlc291cmNlQ29tcGlsZT4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5OREVCVUc7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEN1bHR1cmU+MHgwNDBjPC9DdWx0dXJlPgorICAgIDwvUmVzb3VyY2VDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPEFkZGl0aW9uYWxPcHRpb25zPi9NQUNISU5FOkkzODYgJShBZGRpdGlvbmFsT3B0aW9ucyk8L0FkZGl0aW9uYWxPcHRpb25zPgorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpemxpYndhcGkuZGxsPC9PdXRwdXRGaWxlPgorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+CisgICAgICA8SWdub3JlQWxsRGVmYXVsdExpYnJhcmllcz5mYWxzZTwvSWdub3JlQWxsRGVmYXVsdExpYnJhcmllcz4KKyAgICAgIDxNb2R1bGVEZWZpbml0aW9uRmlsZT4uXHpsaWJ2Yy5kZWY8L01vZHVsZURlZmluaXRpb25GaWxlPgorICAgICAgPFByb2dyYW1EYXRhYmFzZUZpbGU+JChPdXREaXIpemxpYndhcGkucGRiPC9Qcm9ncmFtRGF0YWJhc2VGaWxlPgorICAgICAgPEdlbmVyYXRlTWFwRmlsZT50cnVlPC9HZW5lcmF0ZU1hcEZpbGU+CisgICAgICA8TWFwRmlsZU5hbWU+JChPdXREaXIpemxpYndhcGkubWFwPC9NYXBGaWxlTmFtZT4KKyAgICAgIDxTdWJTeXN0ZW0+V2luZG93czwvU3ViU3lzdGVtPgorICAgICAgPFJhbmRvbWl6ZWRCYXNlQWRkcmVzcz5mYWxzZTwvUmFuZG9taXplZEJhc2VBZGRyZXNzPgorICAgICAgPERhdGFFeGVjdXRpb25QcmV2ZW50aW9uPgorICAgICAgPC9EYXRhRXhlY3V0aW9uUHJldmVudGlvbj4KKyAgICAgIDxJbXBvcnRMaWJyYXJ5PiQoT3V0RGlyKXpsaWJ3YXBpLmxpYjwvSW1wb3J0TGlicmFyeT4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPE1pZGw+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+TkRFQlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxNa1R5cExpYkNvbXBhdGlibGU+dHJ1ZTwvTWtUeXBMaWJDb21wYXRpYmxlPgorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+CisgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+V2luMzI8L1RhcmdldEVudmlyb25tZW50PgorICAgICAgPFR5cGVMaWJyYXJ5TmFtZT4kKE91dERpcil6bGlidmMudGxiPC9UeXBlTGlicmFyeU5hbWU+CisgICAgPC9NaWRsPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOy4uXC4uXG1hc214ODY7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fV0FSTklOR1M7WkxJQl9XSU5BUEk7QVNNVjtBU01JTkY7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4KKyAgICAgIDxFeGNlcHRpb25IYW5kbGluZz4KKyAgICAgIDwvRXhjZXB0aW9uSGFuZGxpbmc+CisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+CisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlck91dHB1dEZpbGU+JChJbnREaXIpemxpYnZjLnBjaDwvUHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlPgorICAgICAgPEFzc2VtYmxlck91dHB1dD5BbGw8L0Fzc2VtYmxlck91dHB1dD4KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+CisgICAgICA8T2JqZWN0RmlsZU5hbWU+JChJbnREaXIpPC9PYmplY3RGaWxlTmFtZT4KKyAgICAgIDxQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4kKE91dERpcik8L1Byb2dyYW1EYXRhQmFzZUZpbGVOYW1lPgorICAgICAgPEJyb3dzZUluZm9ybWF0aW9uPgorICAgICAgPC9Ccm93c2VJbmZvcm1hdGlvbj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8UmVzb3VyY2VDb21waWxlPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPk5ERUJVRzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8Q3VsdHVyZT4weDA0MGM8L0N1bHR1cmU+CisgICAgPC9SZXNvdXJjZUNvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8QWRkaXRpb25hbE9wdGlvbnM+L01BQ0hJTkU6STM4NiAlKEFkZGl0aW9uYWxPcHRpb25zKTwvQWRkaXRpb25hbE9wdGlvbnM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4uLlwuLlxtYXNteDg2XG1hdGNoNjg2Lm9iajsuLlwuLlxtYXNteDg2XGluZmZhczMyLm9iajslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpemxpYndhcGkuZGxsPC9PdXRwdXRGaWxlPgorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+CisgICAgICA8SWdub3JlQWxsRGVmYXVsdExpYnJhcmllcz5mYWxzZTwvSWdub3JlQWxsRGVmYXVsdExpYnJhcmllcz4KKyAgICAgIDxNb2R1bGVEZWZpbml0aW9uRmlsZT4uXHpsaWJ2Yy5kZWY8L01vZHVsZURlZmluaXRpb25GaWxlPgorICAgICAgPFByb2dyYW1EYXRhYmFzZUZpbGU+JChPdXREaXIpemxpYndhcGkucGRiPC9Qcm9ncmFtRGF0YWJhc2VGaWxlPgorICAgICAgPEdlbmVyYXRlTWFwRmlsZT50cnVlPC9HZW5lcmF0ZU1hcEZpbGU+CisgICAgICA8TWFwRmlsZU5hbWU+JChPdXREaXIpemxpYndhcGkubWFwPC9NYXBGaWxlTmFtZT4KKyAgICAgIDxTdWJTeXN0ZW0+V2luZG93czwvU3ViU3lzdGVtPgorICAgICAgPFJhbmRvbWl6ZWRCYXNlQWRkcmVzcz5mYWxzZTwvUmFuZG9taXplZEJhc2VBZGRyZXNzPgorICAgICAgPERhdGFFeGVjdXRpb25QcmV2ZW50aW9uPgorICAgICAgPC9EYXRhRXhlY3V0aW9uUHJldmVudGlvbj4KKyAgICAgIDxJbXBvcnRMaWJyYXJ5PiQoT3V0RGlyKXpsaWJ3YXBpLmxpYjwvSW1wb3J0TGlicmFyeT4KKyAgICAgIDxJbWFnZUhhc1NhZmVFeGNlcHRpb25IYW5kbGVycz5mYWxzZTwvSW1hZ2VIYXNTYWZlRXhjZXB0aW9uSGFuZGxlcnM+CisgICAgPC9MaW5rPgorICAgIDxQcmVCdWlsZEV2ZW50PgorICAgICAgPENvbW1hbmQ+Y2QgLi5cLi5cbWFzbXg4NgorYmxkX21sMzIuYmF0PC9Db21tYW5kPgorICAgIDwvUHJlQnVpbGRFdmVudD4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxNaWRsPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9ERUJVRzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8TWtUeXBMaWJDb21wYXRpYmxlPnRydWU8L01rVHlwTGliQ29tcGF0aWJsZT4KKyAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPgorICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+CisgICAgICA8VHlwZUxpYnJhcnlOYW1lPiQoT3V0RGlyKXpsaWJ2Yy50bGI8L1R5cGVMaWJyYXJ5TmFtZT4KKyAgICA8L01pZGw+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOy4uXC4uXG1hc214ODY7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fV0FSTklOR1M7WkxJQl9XSU5BUEk7QVNNVjtBU01JTkY7V0lONjQ7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEV4Y2VwdGlvbkhhbmRsaW5nPgorICAgICAgPC9FeGNlcHRpb25IYW5kbGluZz4KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWdETEw8L1J1bnRpbWVMaWJyYXJ5PgorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlPiQoSW50RGlyKXpsaWJ2Yy5wY2g8L1ByZWNvbXBpbGVkSGVhZGVyT3V0cHV0RmlsZT4KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+CisgICAgICA8T2JqZWN0RmlsZU5hbWU+JChJbnREaXIpPC9PYmplY3RGaWxlTmFtZT4KKyAgICAgIDxQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4kKE91dERpcik8L1Byb2dyYW1EYXRhQmFzZUZpbGVOYW1lPgorICAgICAgPEJyb3dzZUluZm9ybWF0aW9uPgorICAgICAgPC9Ccm93c2VJbmZvcm1hdGlvbj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8UmVzb3VyY2VDb21waWxlPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9ERUJVRzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8Q3VsdHVyZT4weDA0MGM8L0N1bHR1cmU+CisgICAgPC9SZXNvdXJjZUNvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4uLlwuLlxtYXNteDY0XGd2bWF0NjQub2JqOy4uXC4uXG1hc214NjRcaW5mZmFzeDY0Lm9iajslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpemxpYndhcGkuZGxsPC9PdXRwdXRGaWxlPgorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+CisgICAgICA8TW9kdWxlRGVmaW5pdGlvbkZpbGU+Llx6bGlidmMuZGVmPC9Nb2R1bGVEZWZpbml0aW9uRmlsZT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFByb2dyYW1EYXRhYmFzZUZpbGU+JChPdXREaXIpemxpYndhcGkucGRiPC9Qcm9ncmFtRGF0YWJhc2VGaWxlPgorICAgICAgPEdlbmVyYXRlTWFwRmlsZT50cnVlPC9HZW5lcmF0ZU1hcEZpbGU+CisgICAgICA8TWFwRmlsZU5hbWU+JChPdXREaXIpemxpYndhcGkubWFwPC9NYXBGaWxlTmFtZT4KKyAgICAgIDxTdWJTeXN0ZW0+V2luZG93czwvU3ViU3lzdGVtPgorICAgICAgPEltcG9ydExpYnJhcnk+JChPdXREaXIpemxpYndhcGkubGliPC9JbXBvcnRMaWJyYXJ5PgorICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KKyAgICA8L0xpbms+CisgICAgPFByZUJ1aWxkRXZlbnQ+CisgICAgICA8Q29tbWFuZD5jZCAuLlwuLlxjb250cmliXG1hc214NjQKK2JsZF9tbDY0LmJhdDwvQ29tbWFuZD4KKyAgICA8L1ByZUJ1aWxkRXZlbnQ+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+CisgICAgPE1pZGw+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0RFQlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxNa1R5cExpYkNvbXBhdGlibGU+dHJ1ZTwvTWtUeXBMaWJDb21wYXRpYmxlPgorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+CisgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+SXRhbml1bTwvVGFyZ2V0RW52aXJvbm1lbnQ+CisgICAgICA8VHlwZUxpYnJhcnlOYW1lPiQoT3V0RGlyKXpsaWJ2Yy50bGI8L1R5cGVMaWJyYXJ5TmFtZT4KKyAgICA8L01pZGw+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOy4uXC4uXG1hc214ODY7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fV0FSTklOR1M7WkxJQl9XSU5BUEk7V0lONjQ7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEV4Y2VwdGlvbkhhbmRsaW5nPgorICAgICAgPC9FeGNlcHRpb25IYW5kbGluZz4KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWdETEw8L1J1bnRpbWVMaWJyYXJ5PgorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlPiQoSW50RGlyKXpsaWJ2Yy5wY2g8L1ByZWNvbXBpbGVkSGVhZGVyT3V0cHV0RmlsZT4KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+CisgICAgICA8T2JqZWN0RmlsZU5hbWU+JChJbnREaXIpPC9PYmplY3RGaWxlTmFtZT4KKyAgICAgIDxQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4kKE91dERpcik8L1Byb2dyYW1EYXRhQmFzZUZpbGVOYW1lPgorICAgICAgPEJyb3dzZUluZm9ybWF0aW9uPgorICAgICAgPC9Ccm93c2VJbmZvcm1hdGlvbj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8UmVzb3VyY2VDb21waWxlPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9ERUJVRzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8Q3VsdHVyZT4weDA0MGM8L0N1bHR1cmU+CisgICAgPC9SZXNvdXJjZUNvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpcil6bGlid2FwaS5kbGw8L091dHB1dEZpbGU+CisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4KKyAgICAgIDxNb2R1bGVEZWZpbml0aW9uRmlsZT4uXHpsaWJ2Yy5kZWY8L01vZHVsZURlZmluaXRpb25GaWxlPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8UHJvZ3JhbURhdGFiYXNlRmlsZT4kKE91dERpcil6bGlid2FwaS5wZGI8L1Byb2dyYW1EYXRhYmFzZUZpbGU+CisgICAgICA8R2VuZXJhdGVNYXBGaWxlPnRydWU8L0dlbmVyYXRlTWFwRmlsZT4KKyAgICAgIDxNYXBGaWxlTmFtZT4kKE91dERpcil6bGlid2FwaS5tYXA8L01hcEZpbGVOYW1lPgorICAgICAgPFN1YlN5c3RlbT5XaW5kb3dzPC9TdWJTeXN0ZW0+CisgICAgICA8SW1wb3J0TGlicmFyeT4kKE91dERpcil6bGlid2FwaS5saWI8L0ltcG9ydExpYnJhcnk+CisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lSUE2NDwvVGFyZ2V0TWFjaGluZT4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlV2l0aG91dEFzbXx4NjQnIj4KKyAgICA8TWlkbD4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5OREVCVUc7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPE1rVHlwTGliQ29tcGF0aWJsZT50cnVlPC9Na1R5cExpYkNvbXBhdGlibGU+CisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4KKyAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgorICAgICAgPFR5cGVMaWJyYXJ5TmFtZT4kKE91dERpcil6bGlidmMudGxiPC9UeXBlTGlicmFyeU5hbWU+CisgICAgPC9NaWRsPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOy4uXC4uXG1hc214ODY7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fV0FSTklOR1M7WkxJQl9XSU5BUEk7V0lONjQ7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4KKyAgICAgIDxFeGNlcHRpb25IYW5kbGluZz4KKyAgICAgIDwvRXhjZXB0aW9uSGFuZGxpbmc+CisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERMTDwvUnVudGltZUxpYnJhcnk+CisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlck91dHB1dEZpbGU+JChJbnREaXIpemxpYnZjLnBjaDwvUHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlPgorICAgICAgPEFzc2VtYmxlck91dHB1dD5BbGw8L0Fzc2VtYmxlck91dHB1dD4KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+CisgICAgICA8T2JqZWN0RmlsZU5hbWU+JChJbnREaXIpPC9PYmplY3RGaWxlTmFtZT4KKyAgICAgIDxQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4kKE91dERpcik8L1Byb2dyYW1EYXRhQmFzZUZpbGVOYW1lPgorICAgICAgPEJyb3dzZUluZm9ybWF0aW9uPgorICAgICAgPC9Ccm93c2VJbmZvcm1hdGlvbj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8UmVzb3VyY2VDb21waWxlPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPk5ERUJVRzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8Q3VsdHVyZT4weDA0MGM8L0N1bHR1cmU+CisgICAgPC9SZXNvdXJjZUNvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8T3V0cHV0RmlsZT4kKE91dERpcil6bGlid2FwaS5kbGw8L091dHB1dEZpbGU+CisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4KKyAgICAgIDxJZ25vcmVBbGxEZWZhdWx0TGlicmFyaWVzPmZhbHNlPC9JZ25vcmVBbGxEZWZhdWx0TGlicmFyaWVzPgorICAgICAgPE1vZHVsZURlZmluaXRpb25GaWxlPi5cemxpYnZjLmRlZjwvTW9kdWxlRGVmaW5pdGlvbkZpbGU+CisgICAgICA8UHJvZ3JhbURhdGFiYXNlRmlsZT4kKE91dERpcil6bGlid2FwaS5wZGI8L1Byb2dyYW1EYXRhYmFzZUZpbGU+CisgICAgICA8R2VuZXJhdGVNYXBGaWxlPnRydWU8L0dlbmVyYXRlTWFwRmlsZT4KKyAgICAgIDxNYXBGaWxlTmFtZT4kKE91dERpcil6bGlid2FwaS5tYXA8L01hcEZpbGVOYW1lPgorICAgICAgPFN1YlN5c3RlbT5XaW5kb3dzPC9TdWJTeXN0ZW0+CisgICAgICA8SW1wb3J0TGlicmFyeT4kKE91dERpcil6bGlid2FwaS5saWI8L0ltcG9ydExpYnJhcnk+CisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0nIj4KKyAgICA8TWlkbD4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5OREVCVUc7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPE1rVHlwTGliQ29tcGF0aWJsZT50cnVlPC9Na1R5cExpYkNvbXBhdGlibGU+CisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4KKyAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5JdGFuaXVtPC9UYXJnZXRFbnZpcm9ubWVudD4KKyAgICAgIDxUeXBlTGlicmFyeU5hbWU+JChPdXREaXIpemxpYnZjLnRsYjwvVHlwZUxpYnJhcnlOYW1lPgorICAgIDwvTWlkbD4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLjsuLlwuLlxtYXNteDg2OyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX1dBUk5JTkdTO1pMSUJfV0lOQVBJO1dJTjY0OyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+CisgICAgICA8RXhjZXB0aW9uSGFuZGxpbmc+CisgICAgICA8L0V4Y2VwdGlvbkhhbmRsaW5nPgorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWRETEw8L1J1bnRpbWVMaWJyYXJ5PgorICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlPiQoSW50RGlyKXpsaWJ2Yy5wY2g8L1ByZWNvbXBpbGVkSGVhZGVyT3V0cHV0RmlsZT4KKyAgICAgIDxBc3NlbWJsZXJPdXRwdXQ+QWxsPC9Bc3NlbWJsZXJPdXRwdXQ+CisgICAgICA8QXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPiQoSW50RGlyKTwvQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPgorICAgICAgPE9iamVjdEZpbGVOYW1lPiQoSW50RGlyKTwvT2JqZWN0RmlsZU5hbWU+CisgICAgICA8UHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+JChPdXREaXIpPC9Qcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4KKyAgICAgIDxCcm93c2VJbmZvcm1hdGlvbj4KKyAgICAgIDwvQnJvd3NlSW5mb3JtYXRpb24+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPFJlc291cmNlQ29tcGlsZT4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5OREVCVUc7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEN1bHR1cmU+MHgwNDBjPC9DdWx0dXJlPgorICAgIDwvUmVzb3VyY2VDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpemxpYndhcGkuZGxsPC9PdXRwdXRGaWxlPgorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+CisgICAgICA8SWdub3JlQWxsRGVmYXVsdExpYnJhcmllcz5mYWxzZTwvSWdub3JlQWxsRGVmYXVsdExpYnJhcmllcz4KKyAgICAgIDxNb2R1bGVEZWZpbml0aW9uRmlsZT4uXHpsaWJ2Yy5kZWY8L01vZHVsZURlZmluaXRpb25GaWxlPgorICAgICAgPFByb2dyYW1EYXRhYmFzZUZpbGU+JChPdXREaXIpemxpYndhcGkucGRiPC9Qcm9ncmFtRGF0YWJhc2VGaWxlPgorICAgICAgPEdlbmVyYXRlTWFwRmlsZT50cnVlPC9HZW5lcmF0ZU1hcEZpbGU+CisgICAgICA8TWFwRmlsZU5hbWU+JChPdXREaXIpemxpYndhcGkubWFwPC9NYXBGaWxlTmFtZT4KKyAgICAgIDxTdWJTeXN0ZW0+V2luZG93czwvU3ViU3lzdGVtPgorICAgICAgPEltcG9ydExpYnJhcnk+JChPdXREaXIpemxpYndhcGkubGliPC9JbXBvcnRMaWJyYXJ5PgorICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZUlBNjQ8L1RhcmdldE1hY2hpbmU+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8TWlkbD4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5OREVCVUc7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPE1rVHlwTGliQ29tcGF0aWJsZT50cnVlPC9Na1R5cExpYkNvbXBhdGlibGU+CisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4KKyAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgorICAgICAgPFR5cGVMaWJyYXJ5TmFtZT4kKE91dERpcil6bGlidmMudGxiPC9UeXBlTGlicmFyeU5hbWU+CisgICAgPC9NaWRsPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uOy4uXC4uXG1hc214ODY7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fV0FSTklOR1M7WkxJQl9XSU5BUEk7QVNNVjtBU01JTkY7V0lONjQ7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4KKyAgICAgIDxFeGNlcHRpb25IYW5kbGluZz4KKyAgICAgIDwvRXhjZXB0aW9uSGFuZGxpbmc+CisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERMTDwvUnVudGltZUxpYnJhcnk+CisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlck91dHB1dEZpbGU+JChJbnREaXIpemxpYnZjLnBjaDwvUHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlPgorICAgICAgPEFzc2VtYmxlck91dHB1dD5BbGw8L0Fzc2VtYmxlck91dHB1dD4KKyAgICAgIDxBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+JChJbnREaXIpPC9Bc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24+CisgICAgICA8T2JqZWN0RmlsZU5hbWU+JChJbnREaXIpPC9PYmplY3RGaWxlTmFtZT4KKyAgICAgIDxQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4kKE91dERpcik8L1Byb2dyYW1EYXRhQmFzZUZpbGVOYW1lPgorICAgICAgPEJyb3dzZUluZm9ybWF0aW9uPgorICAgICAgPC9Ccm93c2VJbmZvcm1hdGlvbj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8UmVzb3VyY2VDb21waWxlPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPk5ERUJVRzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8Q3VsdHVyZT4weDA0MGM8L0N1bHR1cmU+CisgICAgPC9SZXNvdXJjZUNvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4uLlwuLlxtYXNteDY0XGd2bWF0NjQub2JqOy4uXC4uXG1hc214NjRcaW5mZmFzeDY0Lm9iajslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpemxpYndhcGkuZGxsPC9PdXRwdXRGaWxlPgorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+CisgICAgICA8SWdub3JlQWxsRGVmYXVsdExpYnJhcmllcz5mYWxzZTwvSWdub3JlQWxsRGVmYXVsdExpYnJhcmllcz4KKyAgICAgIDxNb2R1bGVEZWZpbml0aW9uRmlsZT4uXHpsaWJ2Yy5kZWY8L01vZHVsZURlZmluaXRpb25GaWxlPgorICAgICAgPFByb2dyYW1EYXRhYmFzZUZpbGU+JChPdXREaXIpemxpYndhcGkucGRiPC9Qcm9ncmFtRGF0YWJhc2VGaWxlPgorICAgICAgPEdlbmVyYXRlTWFwRmlsZT50cnVlPC9HZW5lcmF0ZU1hcEZpbGU+CisgICAgICA8TWFwRmlsZU5hbWU+JChPdXREaXIpemxpYndhcGkubWFwPC9NYXBGaWxlTmFtZT4KKyAgICAgIDxTdWJTeXN0ZW0+V2luZG93czwvU3ViU3lzdGVtPgorICAgICAgPEltcG9ydExpYnJhcnk+JChPdXREaXIpemxpYndhcGkubGliPC9JbXBvcnRMaWJyYXJ5PgorICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KKyAgICA8L0xpbms+CisgICAgPFByZUJ1aWxkRXZlbnQ+CisgICAgICA8Q29tbWFuZD5jZCAuLlwuLlxtYXNteDY0CitibGRfbWw2NC5iYXQ8L0NvbW1hbmQ+CisgICAgPC9QcmVCdWlsZEV2ZW50PgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyI+CisgICAgPE1pZGw+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+TkRFQlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxNa1R5cExpYkNvbXBhdGlibGU+dHJ1ZTwvTWtUeXBMaWJDb21wYXRpYmxlPgorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+CisgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+SXRhbml1bTwvVGFyZ2V0RW52aXJvbm1lbnQ+CisgICAgICA8VHlwZUxpYnJhcnlOYW1lPiQoT3V0RGlyKXpsaWJ2Yy50bGI8L1R5cGVMaWJyYXJ5TmFtZT4KKyAgICA8L01pZGw+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi47Li5cLi5cbWFzbXg4NjslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19XQVJOSU5HUztaTElCX1dJTkFQSTtXSU42NDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgorICAgICAgPEV4Y2VwdGlvbkhhbmRsaW5nPgorICAgICAgPC9FeGNlcHRpb25IYW5kbGluZz4KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRExMPC9SdW50aW1lTGlicmFyeT4KKyAgICAgIDxCdWZmZXJTZWN1cml0eUNoZWNrPmZhbHNlPC9CdWZmZXJTZWN1cml0eUNoZWNrPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyT3V0cHV0RmlsZT4kKEludERpcil6bGlidmMucGNoPC9QcmVjb21waWxlZEhlYWRlck91dHB1dEZpbGU+CisgICAgICA8QXNzZW1ibGVyT3V0cHV0PkFsbDwvQXNzZW1ibGVyT3V0cHV0PgorICAgICAgPEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4kKEludERpcik8L0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj4KKyAgICAgIDxPYmplY3RGaWxlTmFtZT4kKEludERpcik8L09iamVjdEZpbGVOYW1lPgorICAgICAgPFByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPiQoT3V0RGlyKTwvUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+CisgICAgICA8QnJvd3NlSW5mb3JtYXRpb24+CisgICAgICA8L0Jyb3dzZUluZm9ybWF0aW9uPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxSZXNvdXJjZUNvbXBpbGU+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+TkRFQlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxDdWx0dXJlPjB4MDQwYzwvQ3VsdHVyZT4KKyAgICA8L1Jlc291cmNlQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKXpsaWJ3YXBpLmRsbDwvT3V0cHV0RmlsZT4KKyAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPgorICAgICAgPElnbm9yZUFsbERlZmF1bHRMaWJyYXJpZXM+ZmFsc2U8L0lnbm9yZUFsbERlZmF1bHRMaWJyYXJpZXM+CisgICAgICA8TW9kdWxlRGVmaW5pdGlvbkZpbGU+Llx6bGlidmMuZGVmPC9Nb2R1bGVEZWZpbml0aW9uRmlsZT4KKyAgICAgIDxQcm9ncmFtRGF0YWJhc2VGaWxlPiQoT3V0RGlyKXpsaWJ3YXBpLnBkYjwvUHJvZ3JhbURhdGFiYXNlRmlsZT4KKyAgICAgIDxHZW5lcmF0ZU1hcEZpbGU+dHJ1ZTwvR2VuZXJhdGVNYXBGaWxlPgorICAgICAgPE1hcEZpbGVOYW1lPiQoT3V0RGlyKXpsaWJ3YXBpLm1hcDwvTWFwRmlsZU5hbWU+CisgICAgICA8U3ViU3lzdGVtPldpbmRvd3M8L1N1YlN5c3RlbT4KKyAgICAgIDxJbXBvcnRMaWJyYXJ5PiQoT3V0RGlyKXpsaWJ3YXBpLmxpYjwvSW1wb3J0TGlicmFyeT4KKyAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVJQTY0PC9UYXJnZXRNYWNoaW5lPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cYWRsZXIzMi5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cY29tcHJlc3MuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXGNyYzMyLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxkZWZsYXRlLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxnemNsb3NlLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxnemxpYi5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cZ3pyZWFkLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxnendyaXRlLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxpbmZiYWNrLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxtYXNteDY0XGluZmZhczg2NjQuYyI+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xJdGFuaXVtJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZVdpdGhvdXRBc218V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5caW5mZmFzdC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5caW5mbGF0ZS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5caW5mdHJlZXMuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXG1pbml6aXBcaW9hcGkuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXG1pbml6aXBcaW93aW4zMi5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cdHJlZXMuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHVuY29tcHIuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXG1pbml6aXBcdW56aXAuYyI+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfEl0YW5pdW0nIj5aTElCX0lOVEVSTkFMOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+WkxJQl9JTlRFUk5BTDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+WkxJQl9JTlRFUk5BTDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxtaW5pemlwXHppcC5jIj4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxJdGFuaXVtJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8SXRhbml1bSciPlpMSUJfSU5URVJOQUw7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj5aTElCX0lOVEVSTkFMOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5aTElCX0lOVEVSTkFMOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHp1dGlsLmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxSZXNvdXJjZUNvbXBpbGUgSW5jbHVkZT0iemxpYi5yYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPE5vbmUgSW5jbHVkZT0iemxpYnZjLmRlZiIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlwuLlxkZWZsYXRlLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlwuLlxpbmZibG9jay5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cLi5caW5mY29kZXMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXC4uXGluZmZhc3QuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXC4uXGluZnRyZWVzLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlwuLlxpbmZ1dGlsLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlwuLlx6Y29uZi5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cLi5cemxpYi5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cLi5cenV0aWwuaCIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvdnN0dWRpby92YzkvbWluaXVuei52Y3Byb2ogYi9zcmMvY29udHJpYi92c3R1ZGlvL3ZjOS9taW5pdW56LnZjcHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGEzMmI5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbnRyaWIvdnN0dWRpby92YzkvbWluaXVuei52Y3Byb2oKQEAgLTAsMCArMSw1NjUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KKzxWaXN1YWxTdHVkaW9Qcm9qZWN0DQorCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KKwlWZXJzaW9uPSI5LjAwIg0KKwlOYW1lPSJtaW5pdW56Ig0KKwlQcm9qZWN0R1VJRD0ie0M1MkY5RTdCLTQ5OEEtNDJCRS04REI0LTg1QTE1Njk0MzgyQX0iDQorCUtleXdvcmQ9IldpbjMyUHJvaiINCisJVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTMxMDcyIg0KKwk+DQorCTxQbGF0Zm9ybXM+DQorCQk8UGxhdGZvcm0NCisJCQlOYW1lPSJXaW4zMiINCisJCS8+DQorCQk8UGxhdGZvcm0NCisJCQlOYW1lPSJ4NjQiDQorCQkvPg0KKwkJPFBsYXRmb3JtDQorCQkJTmFtZT0iSXRhbml1bSINCisJCS8+DQorCTwvUGxhdGZvcm1zPg0KKwk8VG9vbEZpbGVzPg0KKwk8L1Rvb2xGaWxlcz4NCisJPENvbmZpZ3VyYXRpb25zPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQlPdXRwdXREaXJlY3Rvcnk9Ing4NlxNaW5pVW56aXAkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ing4NlxNaW5pVW56aXAkKENvbmZpZ3VyYXRpb25OYW1lKVxUbXAiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IlVwZ3JhZGVGcm9tVkM3MC52c3Byb3BzIg0KKwkJCUNoYXJhY3RlclNldD0iMiINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uOy4uXC4uXG1pbml6aXAiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtaTElCX1dJTkFQSTtfREVCVUc7X0NPTlNPTEUiDQorCQkJCU1pbmltYWxSZWJ1aWxkPSJ0cnVlIg0KKwkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIxIg0KKwkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJmYWxzZSINCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQorCQkJCUFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iJChJbnREaXIpXCINCisJCQkJV2FybmluZ0xldmVsPSIzIg0KKwkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9InRydWUiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjQiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Ing4NlxabGliRGxsRGVidWdcemxpYndhcGkubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcikvbWluaXVuei5leGUiDQorCQkJCUxpbmtJbmNyZW1lbnRhbD0iMiINCisJCQkJR2VuZXJhdGVNYW5pZmVzdD0iZmFsc2UiDQorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSINCisJCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChPdXREaXIpL21pbml1bnoucGRiIg0KKwkJCQlTdWJTeXN0ZW09IjEiDQorCQkJCVJhbmRvbWl6ZWRCYXNlQWRkcmVzcz0iMSINCisJCQkJRGF0YUV4ZWN1dGlvblByZXZlbnRpb249IjAiDQorCQkJCVRhcmdldE1hY2hpbmU9IjEiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQlPdXRwdXREaXJlY3Rvcnk9Ing4NlxNaW5pVW56aXAkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ing4NlxNaW5pVW56aXAkKENvbmZpZ3VyYXRpb25OYW1lKVxUbXAiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IlVwZ3JhZGVGcm9tVkM3MC52c3Byb3BzIg0KKwkJCUNoYXJhY3RlclNldD0iMiINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KKwkJCQlPbWl0RnJhbWVQb2ludGVycz0idHJ1ZSINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi47Li5cLi5cbWluaXppcCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO1pMSUJfV0lOQVBJO05ERUJVRztfQ09OU09MRSINCisJCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCisJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMCINCisJCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iZmFsc2UiDQorCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCINCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIkKEludERpcilcIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjMiDQorCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0idHJ1ZSINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ieDg2XFpsaWJEbGxSZWxlYXNlXHpsaWJ3YXBpLmxpYiINCisJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpL21pbml1bnouZXhlIg0KKwkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQorCQkJCUdlbmVyYXRlTWFuaWZlc3Q9ImZhbHNlIg0KKwkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiDQorCQkJCVN1YlN5c3RlbT0iMSINCisJCQkJT3B0aW1pemVSZWZlcmVuY2VzPSIyIg0KKwkJCQlFbmFibGVDT01EQVRGb2xkaW5nPSIyIg0KKwkJCQlPcHRpbWl6ZUZvcldpbmRvd3M5OD0iMSINCisJCQkJUmFuZG9taXplZEJhc2VBZGRyZXNzPSIxIg0KKwkJCQlEYXRhRXhlY3V0aW9uUHJldmVudGlvbj0iMCINCisJCQkJVGFyZ2V0TWFjaGluZT0iMSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJEZWJ1Z3x4NjQiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSJ4NjRcTWluaVVuemlwJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJ4NjRcTWluaVVuemlwJChDb25maWd1cmF0aW9uTmFtZSlcVG1wIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSJVcGdyYWRlRnJvbVZDNzAudnNwcm9wcyINCisJCQlDaGFyYWN0ZXJTZXQ9IjIiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi47Li5cLi5cbWluaXppcCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO1pMSUJfV0lOQVBJO19ERUJVRztfQ09OU09MRTtXSU42NCINCisJCQkJTWluaW1hbFJlYnVpbGQ9InRydWUiDQorCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCisJCQkJUnVudGltZUxpYnJhcnk9IjMiDQorCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9ImZhbHNlIg0KKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCINCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIkKEludERpcilcIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjMiDQorCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0idHJ1ZSINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ieDY0XFpsaWJEbGxEZWJ1Z1x6bGlid2FwaS5saWIiDQorCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKS9taW5pdW56LmV4ZSINCisJCQkJTGlua0luY3JlbWVudGFsPSIyIg0KKwkJCQlHZW5lcmF0ZU1hbmlmZXN0PSJmYWxzZSINCisJCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIg0KKwkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcikvbWluaXVuei5wZGIiDQorCQkJCVN1YlN5c3RlbT0iMSINCisJCQkJVGFyZ2V0TWFjaGluZT0iMTciDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IkRlYnVnfEl0YW5pdW0iDQorCQkJT3V0cHV0RGlyZWN0b3J5PSJpYTY0XE1pbmlVbnppcCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iaWE2NFxNaW5pVW56aXAkKENvbmZpZ3VyYXRpb25OYW1lKVxUbXAiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IlVwZ3JhZGVGcm9tVkM3MC52c3Byb3BzIg0KKwkJCUNoYXJhY3RlclNldD0iMiINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJCVRhcmdldEVudmlyb25tZW50PSIyIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLjsuLlwuLlxtaW5pemlwIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7WkxJQl9XSU5BUEk7X0RFQlVHO19DT05TT0xFO1dJTjY0Ig0KKwkJCQlNaW5pbWFsUmVidWlsZD0idHJ1ZSINCisJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMyINCisJCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iZmFsc2UiDQorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249IiQoSW50RGlyKVwiDQorCQkJCVdhcm5pbmdMZXZlbD0iMyINCisJCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJ0cnVlIg0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJpYTY0XFpsaWJEbGxEZWJ1Z1x6bGlid2FwaS5saWIiDQorCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKS9taW5pdW56LmV4ZSINCisJCQkJTGlua0luY3JlbWVudGFsPSIyIg0KKwkJCQlHZW5lcmF0ZU1hbmlmZXN0PSJmYWxzZSINCisJCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIg0KKwkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcikvbWluaXVuei5wZGIiDQorCQkJCVN1YlN5c3RlbT0iMSINCisJCQkJVGFyZ2V0TWFjaGluZT0iNSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSJ4NjRcTWluaVVuemlwJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJ4NjRcTWluaVVuemlwJChDb25maWd1cmF0aW9uTmFtZSlcVG1wIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSJVcGdyYWRlRnJvbVZDNzAudnNwcm9wcyINCisJCQlDaGFyYWN0ZXJTZXQ9IjIiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQorCQkJCU9taXRGcmFtZVBvaW50ZXJzPSJ0cnVlIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLjsuLlwuLlxtaW5pemlwIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7WkxJQl9XSU5BUEk7TkRFQlVHO19DT05TT0xFO1dJTjY0Ig0KKwkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KKwkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KKwkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJmYWxzZSINCisJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249IiQoSW50RGlyKVwiDQorCQkJCVdhcm5pbmdMZXZlbD0iMyINCisJCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJ0cnVlIg0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ4NjRcWmxpYkRsbFJlbGVhc2VcemxpYndhcGkubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcikvbWluaXVuei5leGUiDQorCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCisJCQkJR2VuZXJhdGVNYW5pZmVzdD0iZmFsc2UiDQorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSINCisJCQkJU3ViU3lzdGVtPSIxIg0KKwkJCQlPcHRpbWl6ZVJlZmVyZW5jZXM9IjIiDQorCQkJCUVuYWJsZUNPTURBVEZvbGRpbmc9IjIiDQorCQkJCU9wdGltaXplRm9yV2luZG93czk4PSIxIg0KKwkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iUmVsZWFzZXxJdGFuaXVtIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iaWE2NFxNaW5pVW56aXAkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImlhNjRcTWluaVVuemlwJChDb25maWd1cmF0aW9uTmFtZSlcVG1wIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSJVcGdyYWRlRnJvbVZDNzAudnNwcm9wcyINCisJCQlDaGFyYWN0ZXJTZXQ9IjIiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMiINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQorCQkJCU9taXRGcmFtZVBvaW50ZXJzPSJ0cnVlIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLjsuLlwuLlxtaW5pemlwIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7WkxJQl9XSU5BUEk7TkRFQlVHO19DT05TT0xFO1dJTjY0Ig0KKwkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KKwkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KKwkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJmYWxzZSINCisJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249IiQoSW50RGlyKVwiDQorCQkJCVdhcm5pbmdMZXZlbD0iMyINCisJCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJ0cnVlIg0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJpYTY0XFpsaWJEbGxSZWxlYXNlXHpsaWJ3YXBpLmxpYiINCisJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpL21pbml1bnouZXhlIg0KKwkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQorCQkJCUdlbmVyYXRlTWFuaWZlc3Q9ImZhbHNlIg0KKwkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiDQorCQkJCVN1YlN5c3RlbT0iMSINCisJCQkJT3B0aW1pemVSZWZlcmVuY2VzPSIyIg0KKwkJCQlFbmFibGVDT01EQVRGb2xkaW5nPSIyIg0KKwkJCQlPcHRpbWl6ZUZvcldpbmRvd3M5OD0iMSINCisJCQkJVGFyZ2V0TWFjaGluZT0iNSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJPC9Db25maWd1cmF0aW9ucz4NCisJPFJlZmVyZW5jZXM+DQorCTwvUmVmZXJlbmNlcz4NCisJPEZpbGVzPg0KKwkJPEZpbHRlcg0KKwkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCisJCQlGaWx0ZXI9ImNwcDtjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbSINCisJCQk+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxtaW5pemlwXG1pbml1bnouYyINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCTwvRmlsdGVyPg0KKwkJPEZpbHRlcg0KKwkJCU5hbWU9IkhlYWRlciBGaWxlcyINCisJCQlGaWx0ZXI9Img7aHBwO2h4eDtobTtpbmw7aW5jIg0KKwkJCT4NCisJCTwvRmlsdGVyPg0KKwkJPEZpbHRlcg0KKwkJCU5hbWU9IlJlc291cmNlIEZpbGVzIg0KKwkJCUZpbHRlcj0icmM7aWNvO2N1cjtibXA7ZGxnO3JjMjtyY3Q7YmluO3JncztnaWY7anBnO2pwZWc7anBlIg0KKwkJCT4NCisJCTwvRmlsdGVyPg0KKwk8L0ZpbGVzPg0KKwk8R2xvYmFscz4NCisJPC9HbG9iYWxzPg0KKzwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi92c3R1ZGlvL3ZjOS9taW5pemlwLnZjcHJvaiBiL3NyYy9jb250cmliL3ZzdHVkaW8vdmM5L21pbml6aXAudmNwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1N2UwN2QKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29udHJpYi92c3R1ZGlvL3ZjOS9taW5pemlwLnZjcHJvagpAQCAtMCwwICsxLDU2MiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQorPFZpc3VhbFN0dWRpb1Byb2plY3QNCisJUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQorCVZlcnNpb249IjkuMDAiDQorCU5hbWU9Im1pbml6aXAiDQorCVByb2plY3RHVUlEPSJ7NDhDREQ5REMtRTA5Ri00MTM1LTlDMEMtNEZFNTBDM0M2NTRCfSINCisJS2V5d29yZD0iV2luMzJQcm9qIg0KKwlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxMzEwNzIiDQorCT4NCisJPFBsYXRmb3Jtcz4NCisJCTxQbGF0Zm9ybQ0KKwkJCU5hbWU9IldpbjMyIg0KKwkJLz4NCisJCTxQbGF0Zm9ybQ0KKwkJCU5hbWU9Ing2NCINCisJCS8+DQorCQk8UGxhdGZvcm0NCisJCQlOYW1lPSJJdGFuaXVtIg0KKwkJLz4NCisJPC9QbGF0Zm9ybXM+DQorCTxUb29sRmlsZXM+DQorCTwvVG9vbEZpbGVzPg0KKwk8Q29uZmlndXJhdGlvbnM+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCU91dHB1dERpcmVjdG9yeT0ieDg2XE1pbmlaaXAkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ing4NlxNaW5pWmlwJChDb25maWd1cmF0aW9uTmFtZSlcVG1wIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSJVcGdyYWRlRnJvbVZDNzAudnNwcm9wcyINCisJCQlDaGFyYWN0ZXJTZXQ9IjIiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLjsuLlwuLlxtaW5pemlwIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7WkxJQl9XSU5BUEk7X0RFQlVHO19DT05TT0xFIg0KKwkJCQlNaW5pbWFsUmVidWlsZD0idHJ1ZSINCisJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMSINCisJCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iZmFsc2UiDQorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249IiQoSW50RGlyKVwiDQorCQkJCVdhcm5pbmdMZXZlbD0iMyINCisJCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJ0cnVlIg0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSI0Ig0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ4ODZcWmxpYkRsbERlYnVnXHpsaWJ3YXBpLmxpYiINCisJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpL21pbml6aXAuZXhlIg0KKwkJCQlMaW5rSW5jcmVtZW50YWw9IjIiDQorCQkJCUdlbmVyYXRlTWFuaWZlc3Q9ImZhbHNlIg0KKwkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiDQorCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoT3V0RGlyKS9taW5pemlwLnBkYiINCisJCQkJU3ViU3lzdGVtPSIxIg0KKwkJCQlSYW5kb21pemVkQmFzZUFkZHJlc3M9IjEiDQorCQkJCURhdGFFeGVjdXRpb25QcmV2ZW50aW9uPSIwIg0KKwkJCQlUYXJnZXRNYWNoaW5lPSIxIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSJ4ODZcTWluaVppcCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0ieDg2XE1pbmlaaXAkKENvbmZpZ3VyYXRpb25OYW1lKVxUbXAiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IlVwZ3JhZGVGcm9tVkM3MC52c3Byb3BzIg0KKwkJCUNoYXJhY3RlclNldD0iMiINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KKwkJCQlPbWl0RnJhbWVQb2ludGVycz0idHJ1ZSINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi47Li5cLi5cbWluaXppcCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO1pMSUJfV0lOQVBJO05ERUJVRztfQ09OU09MRSINCisJCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCisJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMCINCisJCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iZmFsc2UiDQorCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCINCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIkKEludERpcilcIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjMiDQorCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0idHJ1ZSINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ieDg2XFpsaWJEbGxSZWxlYXNlXHpsaWJ3YXBpLmxpYiINCisJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpL21pbml6aXAuZXhlIg0KKwkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSINCisJCQkJU3ViU3lzdGVtPSIxIg0KKwkJCQlPcHRpbWl6ZVJlZmVyZW5jZXM9IjIiDQorCQkJCUVuYWJsZUNPTURBVEZvbGRpbmc9IjIiDQorCQkJCU9wdGltaXplRm9yV2luZG93czk4PSIxIg0KKwkJCQlSYW5kb21pemVkQmFzZUFkZHJlc3M9IjEiDQorCQkJCURhdGFFeGVjdXRpb25QcmV2ZW50aW9uPSIwIg0KKwkJCQlUYXJnZXRNYWNoaW5lPSIxIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IkRlYnVnfHg2NCINCisJCQlPdXRwdXREaXJlY3Rvcnk9Ing2NFwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ing2NFwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iVXBncmFkZUZyb21WQzcwLnZzcHJvcHMiDQorCQkJQ2hhcmFjdGVyU2V0PSIyIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uOy4uXC4uXG1pbml6aXAiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtaTElCX1dJTkFQSTtfREVCVUc7X0NPTlNPTEU7V0lONjQiDQorCQkJCU1pbmltYWxSZWJ1aWxkPSJ0cnVlIg0KKwkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KKwkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJmYWxzZSINCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQorCQkJCUFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iJChJbnREaXIpXCINCisJCQkJV2FybmluZ0xldmVsPSIzIg0KKwkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9InRydWUiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Ing2NFxabGliRGxsRGVidWdcemxpYndhcGkubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcikvbWluaXppcC5leGUiDQorCQkJCUxpbmtJbmNyZW1lbnRhbD0iMiINCisJCQkJR2VuZXJhdGVNYW5pZmVzdD0iZmFsc2UiDQorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSINCisJCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChPdXREaXIpL21pbml6aXAucGRiIg0KKwkJCQlTdWJTeXN0ZW09IjEiDQorCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJEZWJ1Z3xJdGFuaXVtIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iaWE2NFwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImlhNjRcJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IlVwZ3JhZGVGcm9tVkM3MC52c3Byb3BzIg0KKwkJCUNoYXJhY3RlclNldD0iMiINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJCVRhcmdldEVudmlyb25tZW50PSIyIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLjsuLlwuLlxtaW5pemlwIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7WkxJQl9XSU5BUEk7X0RFQlVHO19DT05TT0xFO1dJTjY0Ig0KKwkJCQlNaW5pbWFsUmVidWlsZD0idHJ1ZSINCisJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMyINCisJCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iZmFsc2UiDQorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249IiQoSW50RGlyKVwiDQorCQkJCVdhcm5pbmdMZXZlbD0iMyINCisJCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJ0cnVlIg0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJpYTY0XFpsaWJEbGxEZWJ1Z1x6bGlid2FwaS5saWIiDQorCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKS9taW5pemlwLmV4ZSINCisJCQkJTGlua0luY3JlbWVudGFsPSIyIg0KKwkJCQlHZW5lcmF0ZU1hbmlmZXN0PSJmYWxzZSINCisJCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIg0KKwkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcikvbWluaXppcC5wZGIiDQorCQkJCVN1YlN5c3RlbT0iMSINCisJCQkJVGFyZ2V0TWFjaGluZT0iNSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSJ4NjRcJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJ4NjRcJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IlVwZ3JhZGVGcm9tVkM3MC52c3Byb3BzIg0KKwkJCUNoYXJhY3RlclNldD0iMiINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCisJCQkJT21pdEZyYW1lUG9pbnRlcnM9InRydWUiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uOy4uXC4uXG1pbml6aXAiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtaTElCX1dJTkFQSTtOREVCVUc7X0NPTlNPTEU7V0lONjQiDQorCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQorCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCisJCQkJUnVudGltZUxpYnJhcnk9IjIiDQorCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9ImZhbHNlIg0KKwkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQorCQkJCUFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iJChJbnREaXIpXCINCisJCQkJV2FybmluZ0xldmVsPSIzIg0KKwkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9InRydWUiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Ing2NFxabGliRGxsUmVsZWFzZVx6bGlid2FwaS5saWIiDQorCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKS9taW5pemlwLmV4ZSINCisJCQkJTGlua0luY3JlbWVudGFsPSIxIg0KKwkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiDQorCQkJCVN1YlN5c3RlbT0iMSINCisJCQkJT3B0aW1pemVSZWZlcmVuY2VzPSIyIg0KKwkJCQlFbmFibGVDT01EQVRGb2xkaW5nPSIyIg0KKwkJCQlPcHRpbWl6ZUZvcldpbmRvd3M5OD0iMSINCisJCQkJVGFyZ2V0TWFjaGluZT0iMTciDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IlJlbGVhc2V8SXRhbml1bSINCisJCQlPdXRwdXREaXJlY3Rvcnk9ImlhNjRcJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJpYTY0XCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSJVcGdyYWRlRnJvbVZDNzAudnNwcm9wcyINCisJCQlDaGFyYWN0ZXJTZXQ9IjIiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMiINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQorCQkJCU9taXRGcmFtZVBvaW50ZXJzPSJ0cnVlIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLjsuLlwuLlxtaW5pemlwIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7WkxJQl9XSU5BUEk7TkRFQlVHO19DT05TT0xFO1dJTjY0Ig0KKwkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KKwkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KKwkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJmYWxzZSINCisJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249IiQoSW50RGlyKVwiDQorCQkJCVdhcm5pbmdMZXZlbD0iMyINCisJCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJ0cnVlIg0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJpYTY0XFpsaWJEbGxSZWxlYXNlXHpsaWJ3YXBpLmxpYiINCisJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpL21pbml6aXAuZXhlIg0KKwkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSINCisJCQkJU3ViU3lzdGVtPSIxIg0KKwkJCQlPcHRpbWl6ZVJlZmVyZW5jZXM9IjIiDQorCQkJCUVuYWJsZUNPTURBVEZvbGRpbmc9IjIiDQorCQkJCU9wdGltaXplRm9yV2luZG93czk4PSIxIg0KKwkJCQlUYXJnZXRNYWNoaW5lPSI1Ig0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwk8L0NvbmZpZ3VyYXRpb25zPg0KKwk8UmVmZXJlbmNlcz4NCisJPC9SZWZlcmVuY2VzPg0KKwk8RmlsZXM+DQorCQk8RmlsdGVyDQorCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KKwkJCUZpbHRlcj0iY3BwO2M7Y3h4O2RlZjtvZGw7aWRsO2hwajtiYXQ7YXNtIg0KKwkJCT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXG1pbml6aXBcbWluaXppcC5jIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJPC9GaWx0ZXI+DQorCQk8RmlsdGVyDQorCQkJTmFtZT0iSGVhZGVyIEZpbGVzIg0KKwkJCUZpbHRlcj0iaDtocHA7aHh4O2htO2lubDtpbmMiDQorCQkJPg0KKwkJPC9GaWx0ZXI+DQorCQk8RmlsdGVyDQorCQkJTmFtZT0iUmVzb3VyY2UgRmlsZXMiDQorCQkJRmlsdGVyPSJyYztpY287Y3VyO2JtcDtkbGc7cmMyO3JjdDtiaW47cmdzO2dpZjtqcGc7anBlZztqcGUiDQorCQkJPg0KKwkJPC9GaWx0ZXI+DQorCTwvRmlsZXM+DQorCTxHbG9iYWxzPg0KKwk8L0dsb2JhbHM+DQorPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL3ZzdHVkaW8vdmM5L3Rlc3R6bGliLnZjcHJvaiBiL3NyYy9jb250cmliL3ZzdHVkaW8vdmM5L3Rlc3R6bGliLnZjcHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2IwYmY4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbnRyaWIvdnN0dWRpby92YzkvdGVzdHpsaWIudmNwcm9qCkBAIC0wLDAgKzEsODUyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCis8VmlzdWFsU3R1ZGlvUHJvamVjdA0KKwlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCisJVmVyc2lvbj0iOSwwMCINCisJTmFtZT0idGVzdHpsaWIiDQorCVByb2plY3RHVUlEPSJ7QUE2NjY2QUEtRTA5Ri00MTM1LTlDMEMtNEZFNTBDM0M2NTRCfSINCisJUm9vdE5hbWVzcGFjZT0idGVzdHpsaWIiDQorCUtleXdvcmQ9IldpbjMyUHJvaiINCisJVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTMxMDcyIg0KKwk+DQorCTxQbGF0Zm9ybXM+DQorCQk8UGxhdGZvcm0NCisJCQlOYW1lPSJXaW4zMiINCisJCS8+DQorCQk8UGxhdGZvcm0NCisJCQlOYW1lPSJ4NjQiDQorCQkvPg0KKwkJPFBsYXRmb3JtDQorCQkJTmFtZT0iSXRhbml1bSINCisJCS8+DQorCTwvUGxhdGZvcm1zPg0KKwk8VG9vbEZpbGVzPg0KKwk8L1Rvb2xGaWxlcz4NCisJPENvbmZpZ3VyYXRpb25zPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQlPdXRwdXREaXJlY3Rvcnk9Ing4NlxUZXN0WmxpYiQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0ieDg2XFRlc3RabGliJChDb25maWd1cmF0aW9uTmFtZSlcVG1wIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KKwkJCUNoYXJhY3RlclNldD0iMiINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iQVNNVjtBU01JTkY7V0lOMzI7WkxJQl9XSU5BUEk7X0RFQlVHO19DT05TT0xFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19XQVJOSU5HUyINCisJCQkJTWluaW1hbFJlYnVpbGQ9InRydWUiDQorCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCisJCQkJUnVudGltZUxpYnJhcnk9IjEiDQorCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9ImZhbHNlIg0KKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCINCisJCQkJQXNzZW1ibGVyT3V0cHV0PSI0Ig0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249IiQoSW50RGlyKVwiDQorCQkJCVdhcm5pbmdMZXZlbD0iMyINCisJCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJ0cnVlIg0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSI0Ig0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIuLlwuLlxtYXNteDg2XG1hdGNoNjg2Lm9iaiAuLlwuLlxtYXNteDg2XGluZmZhczMyLm9iaiINCisJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpL3Rlc3R6bGliLmV4ZSINCisJCQkJTGlua0luY3JlbWVudGFsPSIyIg0KKwkJCQlHZW5lcmF0ZU1hbmlmZXN0PSJmYWxzZSINCisJCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIg0KKwkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcikvdGVzdHpsaWIucGRiIg0KKwkJCQlTdWJTeXN0ZW09IjEiDQorCQkJCVJhbmRvbWl6ZWRCYXNlQWRkcmVzcz0iMSINCisJCQkJRGF0YUV4ZWN1dGlvblByZXZlbnRpb249IjAiDQorCQkJCVRhcmdldE1hY2hpbmU9IjEiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iRGVidWd8eDY0Ig0KKwkJCU91dHB1dERpcmVjdG9yeT0ieDY0XFRlc3RabGliJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJ4NjRcVGVzdFpsaWIkKENvbmZpZ3VyYXRpb25OYW1lKVxUbXAiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi4iDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJBU01WO0FTTUlORjtXSU4zMjtaTElCX1dJTkFQSTtfREVCVUc7X0NPTlNPTEU7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX1dBUk5JTkdTIg0KKwkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KKwkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJmYWxzZSINCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIkKEludERpcilcIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIuLlwuLlxtYXNteDY0XGd2bWF0NjQub2JqIC4uXC4uXG1hc214NjRcaW5mZmFzeDY0Lm9iaiINCisJCQkJR2VuZXJhdGVNYW5pZmVzdD0iZmFsc2UiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iRGVidWd8SXRhbml1bSINCisJCQlPdXRwdXREaXJlY3Rvcnk9ImlhNjRcVGVzdFpsaWIkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImlhNjRcVGVzdFpsaWIkKENvbmZpZ3VyYXRpb25OYW1lKVxUbXAiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQorCQkJQ2hhcmFjdGVyU2V0PSIyIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjIiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iWkxJQl9XSU5BUEk7X0RFQlVHO19DT05TT0xFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19XQVJOSU5HUztXSU42NCINCisJCQkJTWluaW1hbFJlYnVpbGQ9InRydWUiDQorCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCisJCQkJUnVudGltZUxpYnJhcnk9IjMiDQorCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9ImZhbHNlIg0KKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCINCisJCQkJQXNzZW1ibGVyT3V0cHV0PSI0Ig0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249IiQoSW50RGlyKVwiDQorCQkJCVdhcm5pbmdMZXZlbD0iMyINCisJCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJ0cnVlIg0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcikvdGVzdHpsaWIuZXhlIg0KKwkJCQlMaW5rSW5jcmVtZW50YWw9IjIiDQorCQkJCUdlbmVyYXRlTWFuaWZlc3Q9ImZhbHNlIg0KKwkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiDQorCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoT3V0RGlyKS90ZXN0emxpYi5wZGIiDQorCQkJCVN1YlN5c3RlbT0iMSINCisJCQkJVGFyZ2V0TWFjaGluZT0iNSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiINCisJCQlPdXRwdXREaXJlY3Rvcnk9Ing4NlxUZXN0WmxpYiQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0ieDg2XFRlc3RabGliJChDb25maWd1cmF0aW9uTmFtZSlcVG1wIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KKwkJCUNoYXJhY3RlclNldD0iMiINCisJCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCisJCQkJT21pdEZyYW1lUG9pbnRlcnM9InRydWUiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7WkxJQl9XSU5BUEk7TkRFQlVHO19DT05TT0xFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19XQVJOSU5HUyINCisJCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCisJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMCINCisJCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iZmFsc2UiDQorCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCINCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIkKEludERpcilcIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjMiDQorCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0idHJ1ZSINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCisJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpL3Rlc3R6bGliLmV4ZSINCisJCQkJTGlua0luY3JlbWVudGFsPSIxIg0KKwkJCQlHZW5lcmF0ZU1hbmlmZXN0PSJmYWxzZSINCisJCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIg0KKwkJCQlTdWJTeXN0ZW09IjEiDQorCQkJCU9wdGltaXplUmVmZXJlbmNlcz0iMiINCisJCQkJRW5hYmxlQ09NREFURm9sZGluZz0iMiINCisJCQkJT3B0aW1pemVGb3JXaW5kb3dzOTg9IjEiDQorCQkJCVJhbmRvbWl6ZWRCYXNlQWRkcmVzcz0iMSINCisJCQkJRGF0YUV4ZWN1dGlvblByZXZlbnRpb249IjAiDQorCQkJCVRhcmdldE1hY2hpbmU9IjEiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iUmVsZWFzZVdpdGhvdXRBc218eDY0Ig0KKwkJCU91dHB1dERpcmVjdG9yeT0ieDY0XFRlc3RabGliJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJ4NjRcVGVzdFpsaWIkKENvbmZpZ3VyYXRpb25OYW1lKVxUbXAiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQorCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7WkxJQl9XSU5BUEk7TkRFQlVHO19DT05TT0xFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19XQVJOSU5HUyINCisJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMiINCisJCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iZmFsc2UiDQorCQkJCUFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iJChJbnREaXIpXCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iIg0KKwkJCQlHZW5lcmF0ZU1hbmlmZXN0PSJmYWxzZSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJSZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iaWE2NFxUZXN0WmxpYiQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iaWE2NFxUZXN0WmxpYiQoQ29uZmlndXJhdGlvbk5hbWUpXFRtcCINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCisJCQlDaGFyYWN0ZXJTZXQ9IjIiDQorCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjIiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KKwkJCQlPbWl0RnJhbWVQb2ludGVycz0idHJ1ZSINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi4iDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJaTElCX1dJTkFQSTtOREVCVUc7X0NPTlNPTEU7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX1dBUk5JTkdTO1dJTjY0Ig0KKwkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KKwkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KKwkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJmYWxzZSINCisJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249IiQoSW50RGlyKVwiDQorCQkJCVdhcm5pbmdMZXZlbD0iMyINCisJCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJ0cnVlIg0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcikvdGVzdHpsaWIuZXhlIg0KKwkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQorCQkJCUdlbmVyYXRlTWFuaWZlc3Q9ImZhbHNlIg0KKwkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiDQorCQkJCVN1YlN5c3RlbT0iMSINCisJCQkJT3B0aW1pemVSZWZlcmVuY2VzPSIyIg0KKwkJCQlFbmFibGVDT01EQVRGb2xkaW5nPSIyIg0KKwkJCQlPcHRpbWl6ZUZvcldpbmRvd3M5OD0iMSINCisJCQkJVGFyZ2V0TWFjaGluZT0iNSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCU91dHB1dERpcmVjdG9yeT0ieDg2XFRlc3RabGliJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJ4ODZcVGVzdFpsaWIkKENvbmZpZ3VyYXRpb25OYW1lKVxUbXAiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQorCQkJQ2hhcmFjdGVyU2V0PSIyIg0KKwkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KKwkJCQlPbWl0RnJhbWVQb2ludGVycz0idHJ1ZSINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi4iDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJBU01WO0FTTUlORjtXSU4zMjtaTElCX1dJTkFQSTtOREVCVUc7X0NPTlNPTEU7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX1dBUk5JTkdTIg0KKwkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KKwkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KKwkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJmYWxzZSINCisJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249IiQoSW50RGlyKVwiDQorCQkJCVdhcm5pbmdMZXZlbD0iMyINCisJCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJ0cnVlIg0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIuLlwuLlxtYXNteDg2XG1hdGNoNjg2Lm9iaiAuLlwuLlxtYXNteDg2XGluZmZhczMyLm9iaiINCisJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpL3Rlc3R6bGliLmV4ZSINCisJCQkJTGlua0luY3JlbWVudGFsPSIxIg0KKwkJCQlHZW5lcmF0ZU1hbmlmZXN0PSJmYWxzZSINCisJCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIg0KKwkJCQlTdWJTeXN0ZW09IjEiDQorCQkJCU9wdGltaXplUmVmZXJlbmNlcz0iMiINCisJCQkJRW5hYmxlQ09NREFURm9sZGluZz0iMiINCisJCQkJT3B0aW1pemVGb3JXaW5kb3dzOTg9IjEiDQorCQkJCVJhbmRvbWl6ZWRCYXNlQWRkcmVzcz0iMSINCisJCQkJRGF0YUV4ZWN1dGlvblByZXZlbnRpb249IjAiDQorCQkJCVRhcmdldE1hY2hpbmU9IjEiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSJ4NjRcVGVzdFpsaWIkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ing2NFxUZXN0WmxpYiQoQ29uZmlndXJhdGlvbk5hbWUpXFRtcCINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCisJCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi4iDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJBU01WO0FTTUlORjtXSU4zMjtaTElCX1dJTkFQSTtOREVCVUc7X0NPTlNPTEU7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX1dBUk5JTkdTIg0KKwkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KKwkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJmYWxzZSINCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIkKEludERpcilcIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIuLlwuLlxtYXNteDY0XGd2bWF0NjQub2JqIC4uXC4uXG1hc214NjRcaW5mZmFzeDY0Lm9iaiINCisJCQkJR2VuZXJhdGVNYW5pZmVzdD0iZmFsc2UiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iUmVsZWFzZXxJdGFuaXVtIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iaWE2NFxUZXN0WmxpYiQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iaWE2NFxUZXN0WmxpYiQoQ29uZmlndXJhdGlvbk5hbWUpXFRtcCINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCisJCQlDaGFyYWN0ZXJTZXQ9IjIiDQorCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjIiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KKwkJCQlPbWl0RnJhbWVQb2ludGVycz0idHJ1ZSINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi4iDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJaTElCX1dJTkFQSTtOREVCVUc7X0NPTlNPTEU7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX1dBUk5JTkdTO1dJTjY0Ig0KKwkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KKwkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KKwkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJmYWxzZSINCisJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249IiQoSW50RGlyKVwiDQorCQkJCVdhcm5pbmdMZXZlbD0iMyINCisJCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJ0cnVlIg0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcikvdGVzdHpsaWIuZXhlIg0KKwkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQorCQkJCUdlbmVyYXRlTWFuaWZlc3Q9ImZhbHNlIg0KKwkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiDQorCQkJCVN1YlN5c3RlbT0iMSINCisJCQkJT3B0aW1pemVSZWZlcmVuY2VzPSIyIg0KKwkJCQlFbmFibGVDT01EQVRGb2xkaW5nPSIyIg0KKwkJCQlPcHRpbWl6ZUZvcldpbmRvd3M5OD0iMSINCisJCQkJVGFyZ2V0TWFjaGluZT0iNSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwk8L0NvbmZpZ3VyYXRpb25zPg0KKwk8UmVmZXJlbmNlcz4NCisJPC9SZWZlcmVuY2VzPg0KKwk8RmlsZXM+DQorCQk8RmlsdGVyDQorCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KKwkJCUZpbHRlcj0iY3BwO2M7Y3h4O2RlZjtvZGw7aWRsO2hwajtiYXQ7YXNtIg0KKwkJCT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGFkbGVyMzIuYyINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGNvbXByZXNzLmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxjcmMzMi5jIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cZGVmbGF0ZS5jIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5caW5mYmFjay5jIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cbWFzbXg2NFxpbmZmYXM4NjY0LmMiDQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xJdGFuaXVtIg0KKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2VXaXRob3V0QXNtfFdpbjMyIg0KKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0iDQorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfEl0YW5pdW0iDQorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5caW5mZmFzdC5jIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5caW5mbGF0ZS5jIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5caW5mdHJlZXMuYyINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHRlc3R6bGliXHRlc3R6bGliLmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlx0cmVlcy5jIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cdW5jb21wci5jIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cenV0aWwuYyINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCTwvRmlsdGVyPg0KKwkJPEZpbHRlcg0KKwkJCU5hbWU9IkhlYWRlciBGaWxlcyINCisJCQlGaWx0ZXI9Img7aHBwO2h4eDtobTtpbmw7aW5jIg0KKwkJCT4NCisJCTwvRmlsdGVyPg0KKwkJPEZpbHRlcg0KKwkJCU5hbWU9IlJlc291cmNlIEZpbGVzIg0KKwkJCUZpbHRlcj0icmM7aWNvO2N1cjtibXA7ZGxnO3JjMjtyY3Q7YmluO3JncztnaWY7anBnO2pwZWc7anBlIg0KKwkJCT4NCisJCTwvRmlsdGVyPg0KKwk8L0ZpbGVzPg0KKwk8R2xvYmFscz4NCisJPC9HbG9iYWxzPg0KKzwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi92c3R1ZGlvL3ZjOS90ZXN0emxpYmRsbC52Y3Byb2ogYi9zcmMvY29udHJpYi92c3R1ZGlvL3ZjOS90ZXN0emxpYmRsbC52Y3Byb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFkZGRlMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb250cmliL3ZzdHVkaW8vdmM5L3Rlc3R6bGliZGxsLnZjcHJvagpAQCAtMCwwICsxLDU2NSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQorPFZpc3VhbFN0dWRpb1Byb2plY3QNCisJUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQorCVZlcnNpb249IjkuMDAiDQorCU5hbWU9IlRlc3RabGliRGxsIg0KKwlQcm9qZWN0R1VJRD0ie0M1MkY5RTdCLTQ5OEEtNDJCRS04REI0LTg1QTE1Njk0MzY2QX0iDQorCUtleXdvcmQ9IldpbjMyUHJvaiINCisJVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTMxMDcyIg0KKwk+DQorCTxQbGF0Zm9ybXM+DQorCQk8UGxhdGZvcm0NCisJCQlOYW1lPSJXaW4zMiINCisJCS8+DQorCQk8UGxhdGZvcm0NCisJCQlOYW1lPSJ4NjQiDQorCQkvPg0KKwkJPFBsYXRmb3JtDQorCQkJTmFtZT0iSXRhbml1bSINCisJCS8+DQorCTwvUGxhdGZvcm1zPg0KKwk8VG9vbEZpbGVzPg0KKwk8L1Rvb2xGaWxlcz4NCisJPENvbmZpZ3VyYXRpb25zPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQlPdXRwdXREaXJlY3Rvcnk9Ing4NlxUZXN0WmxpYkRsbCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0ieDg2XFRlc3RabGliRGxsJChDb25maWd1cmF0aW9uTmFtZSlcVG1wIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSJVcGdyYWRlRnJvbVZDNzAudnNwcm9wcyINCisJCQlDaGFyYWN0ZXJTZXQ9IjIiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLjsuLlwuLlxtaW5pemlwIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7WkxJQl9XSU5BUEk7X0RFQlVHO19DT05TT0xFIg0KKwkJCQlNaW5pbWFsUmVidWlsZD0idHJ1ZSINCisJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMSINCisJCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iZmFsc2UiDQorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249IiQoSW50RGlyKVwiDQorCQkJCVdhcm5pbmdMZXZlbD0iMyINCisJCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJ0cnVlIg0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSI0Ig0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ4ODZcWmxpYkRsbERlYnVnXHpsaWJ3YXBpLmxpYiINCisJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpL3Rlc3R6bGliLmV4ZSINCisJCQkJTGlua0luY3JlbWVudGFsPSIyIg0KKwkJCQlHZW5lcmF0ZU1hbmlmZXN0PSJmYWxzZSINCisJCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIg0KKwkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcikvdGVzdHpsaWIucGRiIg0KKwkJCQlTdWJTeXN0ZW09IjEiDQorCQkJCVJhbmRvbWl6ZWRCYXNlQWRkcmVzcz0iMSINCisJCQkJRGF0YUV4ZWN1dGlvblByZXZlbnRpb249IjAiDQorCQkJCVRhcmdldE1hY2hpbmU9IjEiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQlPdXRwdXREaXJlY3Rvcnk9Ing4NlxUZXN0WmxpYkRsbCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0ieDg2XFRlc3RabGliRGxsJChDb25maWd1cmF0aW9uTmFtZSlcVG1wIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSJVcGdyYWRlRnJvbVZDNzAudnNwcm9wcyINCisJCQlDaGFyYWN0ZXJTZXQ9IjIiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCisJCQkJT21pdEZyYW1lUG9pbnRlcnM9InRydWUiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uOy4uXC4uXG1pbml6aXAiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtaTElCX1dJTkFQSTtOREVCVUc7X0NPTlNPTEUiDQorCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQorCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCisJCQkJUnVudGltZUxpYnJhcnk9IjAiDQorCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9ImZhbHNlIg0KKwkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQorCQkJCUFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iJChJbnREaXIpXCINCisJCQkJV2FybmluZ0xldmVsPSIzIg0KKwkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9InRydWUiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Ing4NlxabGliRGxsUmVsZWFzZVx6bGlid2FwaS5saWIiDQorCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKS90ZXN0emxpYi5leGUiDQorCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCisJCQkJR2VuZXJhdGVNYW5pZmVzdD0iZmFsc2UiDQorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSINCisJCQkJU3ViU3lzdGVtPSIxIg0KKwkJCQlPcHRpbWl6ZVJlZmVyZW5jZXM9IjIiDQorCQkJCUVuYWJsZUNPTURBVEZvbGRpbmc9IjIiDQorCQkJCU9wdGltaXplRm9yV2luZG93czk4PSIxIg0KKwkJCQlSYW5kb21pemVkQmFzZUFkZHJlc3M9IjEiDQorCQkJCURhdGFFeGVjdXRpb25QcmV2ZW50aW9uPSIwIg0KKwkJCQlUYXJnZXRNYWNoaW5lPSIxIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IkRlYnVnfHg2NCINCisJCQlPdXRwdXREaXJlY3Rvcnk9Ing2NFxUZXN0WmxpYkRsbCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0ieDY0XFRlc3RabGliRGxsJChDb25maWd1cmF0aW9uTmFtZSlcVG1wIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSJVcGdyYWRlRnJvbVZDNzAudnNwcm9wcyINCisJCQlDaGFyYWN0ZXJTZXQ9IjIiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi47Li5cLi5cbWluaXppcCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO1pMSUJfV0lOQVBJO19ERUJVRztfQ09OU09MRTtXSU42NCINCisJCQkJTWluaW1hbFJlYnVpbGQ9InRydWUiDQorCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCisJCQkJUnVudGltZUxpYnJhcnk9IjMiDQorCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9ImZhbHNlIg0KKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCINCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIkKEludERpcilcIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjMiDQorCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0idHJ1ZSINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ieDY0XFpsaWJEbGxEZWJ1Z1x6bGlid2FwaS5saWIiDQorCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKS90ZXN0emxpYi5leGUiDQorCQkJCUxpbmtJbmNyZW1lbnRhbD0iMiINCisJCQkJR2VuZXJhdGVNYW5pZmVzdD0iZmFsc2UiDQorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSINCisJCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChPdXREaXIpL3Rlc3R6bGliLnBkYiINCisJCQkJU3ViU3lzdGVtPSIxIg0KKwkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iRGVidWd8SXRhbml1bSINCisJCQlPdXRwdXREaXJlY3Rvcnk9ImlhNjRcVGVzdFpsaWJEbGwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImlhNjRcVGVzdFpsaWJEbGwkKENvbmZpZ3VyYXRpb25OYW1lKVxUbXAiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IlVwZ3JhZGVGcm9tVkM3MC52c3Byb3BzIg0KKwkJCUNoYXJhY3RlclNldD0iMiINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJCVRhcmdldEVudmlyb25tZW50PSIyIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLjsuLlwuLlxtaW5pemlwIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7WkxJQl9XSU5BUEk7X0RFQlVHO19DT05TT0xFO1dJTjY0Ig0KKwkJCQlNaW5pbWFsUmVidWlsZD0idHJ1ZSINCisJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMyINCisJCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iZmFsc2UiDQorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249IiQoSW50RGlyKVwiDQorCQkJCVdhcm5pbmdMZXZlbD0iMyINCisJCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJ0cnVlIg0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJpYTY0XFpsaWJEbGxEZWJ1Z1x6bGlid2FwaS5saWIiDQorCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKS90ZXN0emxpYi5leGUiDQorCQkJCUxpbmtJbmNyZW1lbnRhbD0iMiINCisJCQkJR2VuZXJhdGVNYW5pZmVzdD0iZmFsc2UiDQorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSINCisJCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChPdXREaXIpL3Rlc3R6bGliLnBkYiINCisJCQkJU3ViU3lzdGVtPSIxIg0KKwkJCQlUYXJnZXRNYWNoaW5lPSI1Ig0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJSZWxlYXNlfHg2NCINCisJCQlPdXRwdXREaXJlY3Rvcnk9Ing2NFxUZXN0WmxpYkRsbCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0ieDY0XFRlc3RabGliRGxsJChDb25maWd1cmF0aW9uTmFtZSlcVG1wIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSJVcGdyYWRlRnJvbVZDNzAudnNwcm9wcyINCisJCQlDaGFyYWN0ZXJTZXQ9IjIiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQorCQkJCU9taXRGcmFtZVBvaW50ZXJzPSJ0cnVlIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLjsuLlwuLlxtaW5pemlwIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7WkxJQl9XSU5BUEk7TkRFQlVHO19DT05TT0xFO1dJTjY0Ig0KKwkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KKwkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KKwkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJmYWxzZSINCisJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249IiQoSW50RGlyKVwiDQorCQkJCVdhcm5pbmdMZXZlbD0iMyINCisJCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJ0cnVlIg0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ4NjRcWmxpYkRsbFJlbGVhc2VcemxpYndhcGkubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcikvdGVzdHpsaWIuZXhlIg0KKwkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQorCQkJCUdlbmVyYXRlTWFuaWZlc3Q9ImZhbHNlIg0KKwkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiDQorCQkJCVN1YlN5c3RlbT0iMSINCisJCQkJT3B0aW1pemVSZWZlcmVuY2VzPSIyIg0KKwkJCQlFbmFibGVDT01EQVRGb2xkaW5nPSIyIg0KKwkJCQlPcHRpbWl6ZUZvcldpbmRvd3M5OD0iMSINCisJCQkJVGFyZ2V0TWFjaGluZT0iMTciDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IlJlbGVhc2V8SXRhbml1bSINCisJCQlPdXRwdXREaXJlY3Rvcnk9ImlhNjRcVGVzdFpsaWJEbGwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImlhNjRcVGVzdFpsaWJEbGwkKENvbmZpZ3VyYXRpb25OYW1lKVxUbXAiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IlVwZ3JhZGVGcm9tVkM3MC52c3Byb3BzIg0KKwkJCUNoYXJhY3RlclNldD0iMiINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJCVRhcmdldEVudmlyb25tZW50PSIyIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCisJCQkJT21pdEZyYW1lUG9pbnRlcnM9InRydWUiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uOy4uXC4uXG1pbml6aXAiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtaTElCX1dJTkFQSTtOREVCVUc7X0NPTlNPTEU7V0lONjQiDQorCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQorCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCisJCQkJUnVudGltZUxpYnJhcnk9IjIiDQorCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9ImZhbHNlIg0KKwkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQorCQkJCUFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iJChJbnREaXIpXCINCisJCQkJV2FybmluZ0xldmVsPSIzIg0KKwkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9InRydWUiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImlhNjRcWmxpYkRsbFJlbGVhc2VcemxpYndhcGkubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcikvdGVzdHpsaWIuZXhlIg0KKwkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQorCQkJCUdlbmVyYXRlTWFuaWZlc3Q9ImZhbHNlIg0KKwkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiDQorCQkJCVN1YlN5c3RlbT0iMSINCisJCQkJT3B0aW1pemVSZWZlcmVuY2VzPSIyIg0KKwkJCQlFbmFibGVDT01EQVRGb2xkaW5nPSIyIg0KKwkJCQlPcHRpbWl6ZUZvcldpbmRvd3M5OD0iMSINCisJCQkJVGFyZ2V0TWFjaGluZT0iNSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJPC9Db25maWd1cmF0aW9ucz4NCisJPFJlZmVyZW5jZXM+DQorCTwvUmVmZXJlbmNlcz4NCisJPEZpbGVzPg0KKwkJPEZpbHRlcg0KKwkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCisJCQlGaWx0ZXI9ImNwcDtjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbSINCisJCQk+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx0ZXN0emxpYlx0ZXN0emxpYi5jIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJPC9GaWx0ZXI+DQorCQk8RmlsdGVyDQorCQkJTmFtZT0iSGVhZGVyIEZpbGVzIg0KKwkJCUZpbHRlcj0iaDtocHA7aHh4O2htO2lubDtpbmMiDQorCQkJPg0KKwkJPC9GaWx0ZXI+DQorCQk8RmlsdGVyDQorCQkJTmFtZT0iUmVzb3VyY2UgRmlsZXMiDQorCQkJRmlsdGVyPSJyYztpY287Y3VyO2JtcDtkbGc7cmMyO3JjdDtiaW47cmdzO2dpZjtqcGc7anBlZztqcGUiDQorCQkJPg0KKwkJPC9GaWx0ZXI+DQorCTwvRmlsZXM+DQorCTxHbG9iYWxzPg0KKwk8L0dsb2JhbHM+DQorPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL3ZzdHVkaW8vdmM5L3psaWIucmMgYi9zcmMvY29udHJpYi92c3R1ZGlvL3ZjOS96bGliLnJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhZDI1ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29udHJpYi92c3R1ZGlvL3ZjOS96bGliLnJjCkBAIC0wLDAgKzEsMzIgQEAKKyNpbmNsdWRlIDx3aW5kb3dzLmg+DQorDQorI2RlZmluZSBJRFJfVkVSU0lPTjEgIDENCitJRFJfVkVSU0lPTjEJVkVSU0lPTklORk8JTU9WRUFCTEUgSU1QVVJFIExPQURPTkNBTEwgRElTQ0FSREFCTEUNCisgIEZJTEVWRVJTSU9OCSAxLCAyLCAxMiwgMA0KKyAgUFJPRFVDVFZFUlNJT04gMSwgMiwgMTIsIDANCisgIEZJTEVGTEFHU01BU0sJVlNfRkZJX0ZJTEVGTEFHU01BU0sNCisgIEZJTEVGTEFHUwkwDQorICBGSUxFT1MJVk9TX0RPU19XSU5ET1dTMzINCisgIEZJTEVUWVBFCVZGVF9ETEwNCisgIEZJTEVTVUJUWVBFCTAJLy8gbm90IHVzZWQNCitCRUdJTg0KKyAgQkxPQ0sgIlN0cmluZ0ZpbGVJbmZvIg0KKyAgQkVHSU4NCisgICAgQkxPQ0sgIjA0MDkwNEU0Ig0KKyAgICAvL2xhbmd1YWdlIElEID0gVS5TLiBFbmdsaXNoLCBjaGFyIHNldCA9IFdpbmRvd3MsIE11bHRpbGluZ3VhbA0KKw0KKyAgICBCRUdJTg0KKyAgICAgIFZBTFVFICJGaWxlRGVzY3JpcHRpb24iLCAiemxpYiBkYXRhIGNvbXByZXNzaW9uIGFuZCBaSVAgZmlsZSBJL08gbGlicmFyeVwwIg0KKyAgICAgIFZBTFVFICJGaWxlVmVyc2lvbiIsCSIxLjIuMTJcMCINCisgICAgICBWQUxVRSAiSW50ZXJuYWxOYW1lIiwJInpsaWJcMCINCisgICAgICBWQUxVRSAiT3JpZ2luYWxGaWxlbmFtZSIsCSJ6bGlid2FwaS5kbGxcMCINCisgICAgICBWQUxVRSAiUHJvZHVjdE5hbWUiLAkiWkxpYi5ETExcMCINCisgICAgICBWQUxVRSAiQ29tbWVudHMiLCJETEwgc3VwcG9ydCBieSBBbGVzc2FuZHJvIElhY29wZXR0aSAmIEdpbGxlcyBWb2xsYW50XDAiDQorICAgICAgVkFMVUUgIkxlZ2FsQ29weXJpZ2h0IiwgIihDKSAxOTk1LTIwMjIgSmVhbi1sb3VwIEdhaWxseSAmIE1hcmsgQWRsZXJcMCINCisgICAgRU5EDQorICBFTkQNCisgIEJMT0NLICJWYXJGaWxlSW5mbyINCisgIEJFR0lODQorICAgIFZBTFVFICJUcmFuc2xhdGlvbiIsIDB4MDQwOSwgMTI1Mg0KKyAgRU5EDQorRU5EDQpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvdnN0dWRpby92YzkvemxpYnN0YXQudmNwcm9qIGIvc3JjL2NvbnRyaWIvdnN0dWRpby92YzkvemxpYnN0YXQudmNwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxYzc2YzcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29udHJpYi92c3R1ZGlvL3ZjOS96bGlic3RhdC52Y3Byb2oKQEAgLTAsMCArMSw4MzUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KKzxWaXN1YWxTdHVkaW9Qcm9qZWN0DQorCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KKwlWZXJzaW9uPSI5LDAwIg0KKwlOYW1lPSJ6bGlic3RhdCINCisJUHJvamVjdEdVSUQ9Ins3NDVERUM1OC1FQkIzLTQ3QTktQTlCOC00QzY2MjdDMDFCRjh9Ig0KKwlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxMzEwNzIiDQorCT4NCisJPFBsYXRmb3Jtcz4NCisJCTxQbGF0Zm9ybQ0KKwkJCU5hbWU9IldpbjMyIg0KKwkJLz4NCisJCTxQbGF0Zm9ybQ0KKwkJCU5hbWU9Ing2NCINCisJCS8+DQorCQk8UGxhdGZvcm0NCisJCQlOYW1lPSJJdGFuaXVtIg0KKwkJLz4NCisJPC9QbGF0Zm9ybXM+DQorCTxUb29sRmlsZXM+DQorCTwvVG9vbEZpbGVzPg0KKwk8Q29uZmlndXJhdGlvbnM+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCU91dHB1dERpcmVjdG9yeT0ieDg2XFpsaWJTdGF0JChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJ4ODZcWmxpYlN0YXQkKENvbmZpZ3VyYXRpb25OYW1lKVxUbXAiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IlVwZ3JhZGVGcm9tVkM3MC52c3Byb3BzIg0KKwkJCVVzZU9mTUZDPSIwIg0KKwkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uOy4uXC4uXG1hc214ODYiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtaTElCX1dJTkFQSTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fV0FSTklOR1MiDQorCQkJCUV4Y2VwdGlvbkhhbmRsaW5nPSIwIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMSINCisJCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iZmFsc2UiDQorCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iJChJbnREaXIpL3psaWJzdGF0LnBjaCINCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIkKEludERpcilcIg0KKwkJCQlPYmplY3RGaWxlPSIkKEludERpcilcIg0KKwkJCQlQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iJChPdXREaXIpXCINCisJCQkJV2FybmluZ0xldmVsPSIzIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0idHJ1ZSINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkJQ3VsdHVyZT0iMTAzNiINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCisJCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9NQUNISU5FOlg4NiAvTk9ERUZBVUxUTElCIg0KKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcemxpYnN0YXQubGliIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJEZWJ1Z3x4NjQiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSJ4NjRcWmxpYlN0YXQkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ing2NFxabGliU3RhdCQoQ29uZmlndXJhdGlvbk5hbWUpXFRtcCINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iNCINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iVXBncmFkZUZyb21WQzcwLnZzcHJvcHMiDQorCQkJVXNlT2ZNRkM9IjAiDQorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uOy4uXC4uXG1hc214ODYiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJaTElCX1dJTkFQSTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fV0FSTklOR1M7V0lONjQiDQorCQkJCUV4Y2VwdGlvbkhhbmRsaW5nPSIwIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMyINCisJCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iZmFsc2UiDQorCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iJChJbnREaXIpL3psaWJzdGF0LnBjaCINCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIkKEludERpcilcIg0KKwkJCQlPYmplY3RGaWxlPSIkKEludERpcilcIg0KKwkJCQlQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iJChPdXREaXIpXCINCisJCQkJV2FybmluZ0xldmVsPSIzIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0idHJ1ZSINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkJQ3VsdHVyZT0iMTAzNiINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCisJCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9NQUNISU5FOkFNRDY0IC9OT0RFRkFVTFRMSUIiDQorCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVx6bGlic3RhdC5saWIiDQorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IkRlYnVnfEl0YW5pdW0iDQorCQkJT3V0cHV0RGlyZWN0b3J5PSJpYTY0XFpsaWJTdGF0JChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJpYTY0XFpsaWJTdGF0JChDb25maWd1cmF0aW9uTmFtZSlcVG1wIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0Ig0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSJVcGdyYWRlRnJvbVZDNzAudnNwcm9wcyINCisJCQlVc2VPZk1GQz0iMCINCisJCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMiINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi47Li5cLi5cbWFzbXg4NiINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlpMSUJfV0lOQVBJO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19XQVJOSU5HUztXSU42NCINCisJCQkJRXhjZXB0aW9uSGFuZGxpbmc9IjAiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KKwkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJmYWxzZSINCisJCQkJUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIkKEludERpcikvemxpYnN0YXQucGNoIg0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249IiQoSW50RGlyKVwiDQorCQkJCU9iamVjdEZpbGU9IiQoSW50RGlyKVwiDQorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIkKE91dERpcilcIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjMiDQorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCisJCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJ0cnVlIg0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIxIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCQlDdWx0dXJlPSIxMDM2Ig0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KKwkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL01BQ0hJTkU6SUE2NCAvTk9ERUZBVUxUTElCIg0KKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcemxpYnN0YXQubGliIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCU91dHB1dERpcmVjdG9yeT0ieDg2XFpsaWJTdGF0JChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJ4ODZcWmxpYlN0YXQkKENvbmZpZ3VyYXRpb25OYW1lKVxUbXAiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IlVwZ3JhZGVGcm9tVkM3MC52c3Byb3BzIg0KKwkJCVVzZU9mTUZDPSIwIg0KKwkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi47Li5cLi5cbWFzbXg4NiINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO1pMSUJfV0lOQVBJO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19XQVJOSU5HUztBU01WO0FTTUlORiINCisJCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCisJCQkJRXhjZXB0aW9uSGFuZGxpbmc9IjAiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KKwkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJmYWxzZSINCisJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQorCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iJChJbnREaXIpL3psaWJzdGF0LnBjaCINCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIkKEludERpcilcIg0KKwkJCQlPYmplY3RGaWxlPSIkKEludERpcilcIg0KKwkJCQlQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iJChPdXREaXIpXCINCisJCQkJV2FybmluZ0xldmVsPSIzIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJCUN1bHR1cmU9IjEwMzYiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQorCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvTUFDSElORTpYODYgL05PREVGQVVMVExJQiINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iLi5cLi5cbWFzbXg4NlxtYXRjaDY4Ni5vYmogLi5cLi5cbWFzbXg4NlxpbmZmYXMzMi5vYmogIg0KKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcemxpYnN0YXQubGliIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJSZWxlYXNlfHg2NCINCisJCQlPdXRwdXREaXJlY3Rvcnk9Ing2NFxabGliU3RhdCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0ieDY0XFpsaWJTdGF0JChDb25maWd1cmF0aW9uTmFtZSlcVG1wIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0Ig0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSJVcGdyYWRlRnJvbVZDNzAudnNwcm9wcyINCisJCQlVc2VPZk1GQz0iMCINCisJCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLjsuLlwuLlxtYXNteDg2Ig0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iWkxJQl9XSU5BUEk7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX1dBUk5JTkdTO0FTTVY7QVNNSU5GO1dJTjY0Ig0KKwkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KKwkJCQlFeGNlcHRpb25IYW5kbGluZz0iMCINCisJCQkJUnVudGltZUxpYnJhcnk9IjIiDQorCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9ImZhbHNlIg0KKwkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCisJCQkJUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIkKEludERpcikvemxpYnN0YXQucGNoIg0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249IiQoSW50RGlyKVwiDQorCQkJCU9iamVjdEZpbGU9IiQoSW50RGlyKVwiDQorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIkKE91dERpcilcIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjMiDQorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkJQ3VsdHVyZT0iMTAzNiINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCisJCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9NQUNISU5FOkFNRDY0IC9OT0RFRkFVTFRMSUIiDQorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Ii4uXC4uXG1hc214NjRcZ3ZtYXQ2NC5vYmogLi5cLi5cbWFzbXg2NFxpbmZmYXN4NjQub2JqICINCisJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHpsaWJzdGF0LmxpYiINCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iUmVsZWFzZXxJdGFuaXVtIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iaWE2NFxabGliU3RhdCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iaWE2NFxabGliU3RhdCQoQ29uZmlndXJhdGlvbk5hbWUpXFRtcCINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iNCINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iVXBncmFkZUZyb21WQzcwLnZzcHJvcHMiDQorCQkJVXNlT2ZNRkM9IjAiDQorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjIiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi47Li5cLi5cbWFzbXg4NiINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlpMSUJfV0lOQVBJO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19XQVJOSU5HUztXSU42NCINCisJCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCisJCQkJRXhjZXB0aW9uSGFuZGxpbmc9IjAiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KKwkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJmYWxzZSINCisJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQorCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iJChJbnREaXIpL3psaWJzdGF0LnBjaCINCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIkKEludERpcilcIg0KKwkJCQlPYmplY3RGaWxlPSIkKEludERpcilcIg0KKwkJCQlQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iJChPdXREaXIpXCINCisJCQkJV2FybmluZ0xldmVsPSIzIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJCUN1bHR1cmU9IjEwMzYiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQorCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvTUFDSElORTpJQTY0IC9OT0RFRkFVTFRMSUIiDQorCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVx6bGlic3RhdC5saWIiDQorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IlJlbGVhc2VXaXRob3V0QXNtfFdpbjMyIg0KKwkJCU91dHB1dERpcmVjdG9yeT0ieDg2XFpsaWJTdGF0JChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJ4ODZcWmxpYlN0YXQkKENvbmZpZ3VyYXRpb25OYW1lKVxUbXAiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IlVwZ3JhZGVGcm9tVkM3MC52c3Byb3BzIg0KKwkJCVVzZU9mTUZDPSIwIg0KKwkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi47Li5cLi5cbWFzbXg4NiINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO1pMSUJfV0lOQVBJO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19XQVJOSU5HUyINCisJCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCisJCQkJRXhjZXB0aW9uSGFuZGxpbmc9IjAiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KKwkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJmYWxzZSINCisJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQorCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iJChJbnREaXIpL3psaWJzdGF0LnBjaCINCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIkKEludERpcilcIg0KKwkJCQlPYmplY3RGaWxlPSIkKEludERpcilcIg0KKwkJCQlQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iJChPdXREaXIpXCINCisJCQkJV2FybmluZ0xldmVsPSIzIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJCUN1bHR1cmU9IjEwMzYiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQorCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvTUFDSElORTpYODYgL05PREVGQVVMVExJQiINCisJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHpsaWJzdGF0LmxpYiINCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iUmVsZWFzZVdpdGhvdXRBc218eDY0Ig0KKwkJCU91dHB1dERpcmVjdG9yeT0ieDY0XFpsaWJTdGF0JChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJ4NjRcWmxpYlN0YXQkKENvbmZpZ3VyYXRpb25OYW1lKVxUbXAiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IlVwZ3JhZGVGcm9tVkM3MC52c3Byb3BzIg0KKwkJCVVzZU9mTUZDPSIwIg0KKwkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uOy4uXC4uXG1hc214ODYiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJaTElCX1dJTkFQSTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fV0FSTklOR1M7V0lONjQiDQorCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQorCQkJCUV4Y2VwdGlvbkhhbmRsaW5nPSIwIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMiINCisJCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iZmFsc2UiDQorCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KKwkJCQlQcmVjb21waWxlZEhlYWRlckZpbGU9IiQoSW50RGlyKS96bGlic3RhdC5wY2giDQorCQkJCUFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iJChJbnREaXIpXCINCisJCQkJT2JqZWN0RmlsZT0iJChJbnREaXIpXCINCisJCQkJUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9IiQoT3V0RGlyKVwiDQorCQkJCVdhcm5pbmdMZXZlbD0iMyINCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCQlDdWx0dXJlPSIxMDM2Ig0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KKwkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL01BQ0hJTkU6QU1ENjQgL05PREVGQVVMVExJQiINCisJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHpsaWJzdGF0LmxpYiINCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSINCisJCQlPdXRwdXREaXJlY3Rvcnk9ImlhNjRcWmxpYlN0YXQkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImlhNjRcWmxpYlN0YXQkKENvbmZpZ3VyYXRpb25OYW1lKVxUbXAiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IlVwZ3JhZGVGcm9tVkM3MC52c3Byb3BzIg0KKwkJCVVzZU9mTUZDPSIwIg0KKwkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJCVRhcmdldEVudmlyb25tZW50PSIyIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uOy4uXC4uXG1hc214ODYiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJaTElCX1dJTkFQSTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fV0FSTklOR1M7V0lONjQiDQorCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQorCQkJCUV4Y2VwdGlvbkhhbmRsaW5nPSIwIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMiINCisJCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iZmFsc2UiDQorCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KKwkJCQlQcmVjb21waWxlZEhlYWRlckZpbGU9IiQoSW50RGlyKS96bGlic3RhdC5wY2giDQorCQkJCUFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iJChJbnREaXIpXCINCisJCQkJT2JqZWN0RmlsZT0iJChJbnREaXIpXCINCisJCQkJUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9IiQoT3V0RGlyKVwiDQorCQkJCVdhcm5pbmdMZXZlbD0iMyINCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCQlDdWx0dXJlPSIxMDM2Ig0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KKwkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL01BQ0hJTkU6SUE2NCAvTk9ERUZBVUxUTElCIg0KKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcemxpYnN0YXQubGliIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwk8L0NvbmZpZ3VyYXRpb25zPg0KKwk8UmVmZXJlbmNlcz4NCisJPC9SZWZlcmVuY2VzPg0KKwk8RmlsZXM+DQorCQk8RmlsdGVyDQorCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KKwkJCT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGFkbGVyMzIuYyINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGNvbXByZXNzLmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxjcmMzMi5jIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cZGVmbGF0ZS5jIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cZ3pjbG9zZS5jIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cZ3pndXRzLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxnemxpYi5jIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cZ3pyZWFkLmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxnendyaXRlLmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxpbmZiYWNrLmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxtYXNteDY0XGluZmZhczg2NjQuYyINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfEl0YW5pdW0iDQorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfEl0YW5pdW0iDQorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZVdpdGhvdXRBc218V2luMzIiDQorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bSINCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxpbmZmYXN0LmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxpbmZsYXRlLmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxpbmZ0cmVlcy5jIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cbWluaXppcFxpb2FwaS5jIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cdHJlZXMuYyINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHVuY29tcHIuYyINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXG1pbml6aXBcdW56aXAuYyINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXG1pbml6aXBcemlwLmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXHpsaWIucmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXHpsaWJ2Yy5kZWYiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlx6dXRpbC5jIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJPC9GaWx0ZXI+DQorCTwvRmlsZXM+DQorCTxHbG9iYWxzPg0KKwk8L0dsb2JhbHM+DQorPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL3ZzdHVkaW8vdmM5L3psaWJ2Yy5kZWYgYi9zcmMvY29udHJpYi92c3R1ZGlvL3ZjOS96bGlidmMuZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMDliYzEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29udHJpYi92c3R1ZGlvL3ZjOS96bGlidmMuZGVmCkBAIC0wLDAgKzEsMTU4IEBACitMSUJSQVJZDQorOyB6bGliIGRhdGEgY29tcHJlc3Npb24gYW5kIFpJUCBmaWxlIEkvTyBsaWJyYXJ5DQorDQorVkVSU0lPTgkJMS4yDQorDQorRVhQT1JUUw0KKyAgICAgICAgYWRsZXIzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMQ0KKyAgICAgICAgY29tcHJlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMg0KKyAgICAgICAgY3JjMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMw0KKyAgICAgICAgZGVmbGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBANA0KKyAgICAgICAgZGVmbGF0ZUNvcHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBANQ0KKyAgICAgICAgZGVmbGF0ZUVuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBANg0KKyAgICAgICAgZGVmbGF0ZUluaXQyXyAgICAgICAgICAgICAgICAgICAgICAgICAgICBANw0KKyAgICAgICAgZGVmbGF0ZUluaXRfICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAOA0KKyAgICAgICAgZGVmbGF0ZVBhcmFtcyAgICAgICAgICAgICAgICAgICAgICAgICAgICBAOQ0KKyAgICAgICAgZGVmbGF0ZVJlc2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTANCisgICAgICAgIGRlZmxhdGVTZXREaWN0aW9uYXJ5ICAgICAgICAgICAgICAgICAgICAgQDExDQorICAgICAgICBnemNsb3NlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxMg0KKyAgICAgICAgZ3pkb3BlbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTMNCisgICAgICAgIGd6ZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDE0DQorICAgICAgICBnemZsdXNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxNQ0KKyAgICAgICAgZ3pvcGVuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTYNCisgICAgICAgIGd6cmVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDE3DQorICAgICAgICBnendyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxOA0KKyAgICAgICAgaW5mbGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTkNCisgICAgICAgIGluZmxhdGVFbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDIwDQorICAgICAgICBpbmZsYXRlSW5pdDJfICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAyMQ0KKyAgICAgICAgaW5mbGF0ZUluaXRfICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMjINCisgICAgICAgIGluZmxhdGVSZXNldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDIzDQorICAgICAgICBpbmZsYXRlU2V0RGljdGlvbmFyeSAgICAgICAgICAgICAgICAgICAgIEAyNA0KKyAgICAgICAgaW5mbGF0ZVN5bmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMjUNCisgICAgICAgIHVuY29tcHJlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDI2DQorICAgICAgICB6bGliVmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAyNw0KKyAgICAgICAgZ3pwcmludGYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMjgNCisgICAgICAgIGd6cHV0YyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDI5DQorICAgICAgICBnemdldGMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAzMA0KKyAgICAgICAgZ3pzZWVrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMzENCisgICAgICAgIGd6cmV3aW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDMyDQorICAgICAgICBnenRlbGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAzMw0KKyAgICAgICAgZ3plb2YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMzQNCisgICAgICAgIGd6c2V0cGFyYW1zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDM1DQorICAgICAgICB6RXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAzNg0KKyAgICAgICAgaW5mbGF0ZVN5bmNQb2ludCAgICAgICAgICAgICAgICAgICAgICAgICBAMzcNCisgICAgICAgIGdldF9jcmNfdGFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDM4DQorICAgICAgICBjb21wcmVzczIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAzOQ0KKyAgICAgICAgZ3pwdXRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBANDANCisgICAgICAgIGd6Z2V0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDQxDQorICAgICAgICBpbmZsYXRlQ29weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEA0Mg0KKyAgICAgICAgaW5mbGF0ZUJhY2tJbml0XyAgICAgICAgICAgICAgICAgICAgICAgICBANDMNCisgICAgICAgIGluZmxhdGVCYWNrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDQ0DQorICAgICAgICBpbmZsYXRlQmFja0VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgIEA0NQ0KKyAgICAgICAgY29tcHJlc3NCb3VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBANDYNCisgICAgICAgIGRlZmxhdGVCb3VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDQ3DQorICAgICAgICBnemNsZWFyZXJyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEA0OA0KKyAgICAgICAgZ3p1bmdldGMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBANDkNCisgICAgICAgIHpsaWJDb21waWxlRmxhZ3MgICAgICAgICAgICAgICAgICAgICAgICAgQDUwDQorICAgICAgICBkZWZsYXRlUHJpbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEA1MQ0KKyAgICAgICAgZGVmbGF0ZVBlbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICBANTINCisNCisgICAgICAgIHVuek9wZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDYxDQorICAgICAgICB1bnpDbG9zZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEA2Mg0KKyAgICAgICAgdW56R2V0R2xvYmFsSW5mbyAgICAgICAgICAgICAgICAgICAgICAgICBANjMNCisgICAgICAgIHVuekdldEN1cnJlbnRGaWxlSW5mbyAgICAgICAgICAgICAgICAgICAgQDY0DQorICAgICAgICB1bnpHb1RvRmlyc3RGaWxlICAgICAgICAgICAgICAgICAgICAgICAgIEA2NQ0KKyAgICAgICAgdW56R29Ub05leHRGaWxlICAgICAgICAgICAgICAgICAgICAgICAgICBANjYNCisgICAgICAgIHVuek9wZW5DdXJyZW50RmlsZSAgICAgICAgICAgICAgICAgICAgICAgQDY3DQorICAgICAgICB1bnpSZWFkQ3VycmVudEZpbGUgICAgICAgICAgICAgICAgICAgICAgIEA2OA0KKyAgICAgICAgdW56T3BlbkN1cnJlbnRGaWxlMyAgICAgICAgICAgICAgICAgICAgICBANjkNCisgICAgICAgIHVuenRlbGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDcwDQorICAgICAgICB1bnplb2YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEA3MQ0KKyAgICAgICAgdW56Q2xvc2VDdXJyZW50RmlsZSAgICAgICAgICAgICAgICAgICAgICBANzINCisgICAgICAgIHVuekdldEdsb2JhbENvbW1lbnQgICAgICAgICAgICAgICAgICAgICAgQDczDQorICAgICAgICB1bnpTdHJpbmdGaWxlTmFtZUNvbXBhcmUgICAgICAgICAgICAgICAgIEA3NA0KKyAgICAgICAgdW56TG9jYXRlRmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBANzUNCisgICAgICAgIHVuekdldExvY2FsRXh0cmFmaWVsZCAgICAgICAgICAgICAgICAgICAgQDc2DQorICAgICAgICB1bnpPcGVuMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEA3Nw0KKyAgICAgICAgdW56T3BlbkN1cnJlbnRGaWxlMiAgICAgICAgICAgICAgICAgICAgICBANzgNCisgICAgICAgIHVuek9wZW5DdXJyZW50RmlsZVBhc3N3b3JkICAgICAgICAgICAgICAgQDc5DQorDQorICAgICAgICB6aXBPcGVuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEA4MA0KKyAgICAgICAgemlwT3Blbk5ld0ZpbGVJblppcCAgICAgICAgICAgICAgICAgICAgICBAODENCisgICAgICAgIHppcFdyaXRlSW5GaWxlSW5aaXAgICAgICAgICAgICAgICAgICAgICAgQDgyDQorICAgICAgICB6aXBDbG9zZUZpbGVJblppcCAgICAgICAgICAgICAgICAgICAgICAgIEA4Mw0KKyAgICAgICAgemlwQ2xvc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAODQNCisgICAgICAgIHppcE9wZW5OZXdGaWxlSW5aaXAyICAgICAgICAgICAgICAgICAgICAgQDg2DQorICAgICAgICB6aXBDbG9zZUZpbGVJblppcFJhdyAgICAgICAgICAgICAgICAgICAgIEA4Nw0KKyAgICAgICAgemlwT3BlbjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAODgNCisgICAgICAgIHppcE9wZW5OZXdGaWxlSW5aaXAzICAgICAgICAgICAgICAgICAgICAgQDg5DQorDQorICAgICAgICB1bnpHZXRGaWxlUG9zICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxMDANCisgICAgICAgIHVuekdvVG9GaWxlUG9zICAgICAgICAgICAgICAgICAgICAgICAgICAgQDEwMQ0KKw0KKyAgICAgICAgZmlsbF93aW4zMl9maWxlZnVuYyAgICAgICAgICAgICAgICAgICAgICBAMTEwDQorDQorOyB6bGlid2FwaSB2MS4yLjQgYWRkZWQ6DQorICAgICAgICBmaWxsX3dpbjMyX2ZpbGVmdW5jNjQgICAgICAgICAgICAgICAgICAgQDExMQ0KKyAgICAgICAgZmlsbF93aW4zMl9maWxlZnVuYzY0QSAgICAgICAgICAgICAgICAgIEAxMTINCisgICAgICAgIGZpbGxfd2luMzJfZmlsZWZ1bmM2NFcgICAgICAgICAgICAgICAgICBAMTEzDQorDQorICAgICAgICB1bnpPcGVuNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDEyMA0KKyAgICAgICAgdW56T3BlbjJfNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxMjENCisgICAgICAgIHVuekdldEdsb2JhbEluZm82NCAgICAgICAgICAgICAgICAgICAgICBAMTIyDQorICAgICAgICB1bnpHZXRDdXJyZW50RmlsZUluZm82NCAgICAgICAgICAgICAgICAgQDEyNA0KKyAgICAgICAgdW56R2V0Q3VycmVudEZpbGVaU3RyZWFtUG9zNjQgICAgICAgICAgIEAxMjUNCisgICAgICAgIHVuenRlbGw2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTI2DQorICAgICAgICB1bnpHZXRGaWxlUG9zNjQgICAgICAgICAgICAgICAgICAgICAgICAgQDEyNw0KKyAgICAgICAgdW56R29Ub0ZpbGVQb3M2NCAgICAgICAgICAgICAgICAgICAgICAgIEAxMjgNCisNCisgICAgICAgIHppcE9wZW42NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTMwDQorICAgICAgICB6aXBPcGVuMl82NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDEzMQ0KKyAgICAgICAgemlwT3Blbk5ld0ZpbGVJblppcDY0ICAgICAgICAgICAgICAgICAgIEAxMzINCisgICAgICAgIHppcE9wZW5OZXdGaWxlSW5aaXAyXzY0ICAgICAgICAgICAgICAgICBAMTMzDQorICAgICAgICB6aXBPcGVuTmV3RmlsZUluWmlwM182NCAgICAgICAgICAgICAgICAgQDEzNA0KKyAgICAgICAgemlwT3Blbk5ld0ZpbGVJblppcDRfNjQgICAgICAgICAgICAgICAgIEAxMzUNCisgICAgICAgIHppcENsb3NlRmlsZUluWmlwUmF3NjQgICAgICAgICAgICAgICAgICBAMTM2DQorDQorOyB6bGliMSB2MS4yLjQgYWRkZWQ6DQorICAgICAgICBhZGxlcjMyX2NvbWJpbmUgICAgICAgICAgICAgICAgICAgICAgICAgQDE0MA0KKyAgICAgICAgY3JjMzJfY29tYmluZSAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxNDINCisgICAgICAgIGRlZmxhdGVTZXRIZWFkZXIgICAgICAgICAgICAgICAgICAgICAgICBAMTQ0DQorICAgICAgICBkZWZsYXRlVHVuZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDE0NQ0KKyAgICAgICAgZ3pidWZmZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxNDYNCisgICAgICAgIGd6Y2xvc2VfciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTQ3DQorICAgICAgICBnemNsb3NlX3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDE0OA0KKyAgICAgICAgZ3pkaXJlY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxNDkNCisgICAgICAgIGd6b2Zmc2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTUwDQorICAgICAgICBpbmZsYXRlR2V0SGVhZGVyICAgICAgICAgICAgICAgICAgICAgICAgQDE1Ng0KKyAgICAgICAgaW5mbGF0ZU1hcmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxNTcNCisgICAgICAgIGluZmxhdGVQcmltZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTU4DQorICAgICAgICBpbmZsYXRlUmVzZXQyICAgICAgICAgICAgICAgICAgICAgICAgICAgQDE1OQ0KKyAgICAgICAgaW5mbGF0ZVVuZGVybWluZSAgICAgICAgICAgICAgICAgICAgICAgIEAxNjANCisNCis7IHpsaWIxIHYxLjIuNiBhZGRlZDoNCisgICAgICAgIGd6Z2V0Y18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTYxDQorICAgICAgICBpbmZsYXRlUmVzZXRLZWVwICAgICAgICAgICAgICAgICAgICAgICAgQDE2Mw0KKyAgICAgICAgZGVmbGF0ZVJlc2V0S2VlcCAgICAgICAgICAgICAgICAgICAgICAgIEAxNjQNCisNCis7IHpsaWIxIHYxLjIuNyBhZGRlZDoNCisgICAgICAgIGd6b3Blbl93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTY1DQorDQorOyB6bGliMSB2MS4yLjggYWRkZWQ6DQorICAgICAgICBpbmZsYXRlR2V0RGljdGlvbmFyeSAgICAgICAgICAgICAgICAgICAgQDE2Ng0KKyAgICAgICAgZ3p2cHJpbnRmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxNjcNCisNCis7IHpsaWIxIHYxLjIuOSBhZGRlZDoNCisgICAgICAgIGluZmxhdGVDb2Rlc1VzZWQgICAgICAgICAgICAgICAgICAgICAgICBAMTY4DQorICAgICAgICBpbmZsYXRlVmFsaWRhdGUgICAgICAgICAgICAgICAgICAgICAgICAgQDE2OQ0KKyAgICAgICAgdW5jb21wcmVzczIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxNzANCisgICAgICAgIGd6ZnJlYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTcxDQorICAgICAgICBnemZ3cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDE3Mg0KKyAgICAgICAgZGVmbGF0ZUdldERpY3Rpb25hcnkgICAgICAgICAgICAgICAgICAgIEAxNzMNCisgICAgICAgIGFkbGVyMzJfeiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTc0DQorICAgICAgICBjcmMzMl96ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDE3NQ0KKw0KKzsgemxpYjEgdjEuMi4xMiBhZGRlZDoNCisJCWNyYzMyX2NvbWJpbmVfZ2VuCQkJCQkJQDE3Ng0KKwkJY3JjMzJfY29tYmluZV9nZW42NAkJCQkJCUAxNzcNCisJCWNyYzMyX2NvbWJpbmVfb3AJCQkJCQlAMTc4DQpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvdnN0dWRpby92YzkvemxpYnZjLnNsbiBiL3NyYy9jb250cmliL3ZzdHVkaW8vdmM5L3psaWJ2Yy5zbG4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ4Mjk2NwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb250cmliL3ZzdHVkaW8vdmM5L3psaWJ2Yy5zbG4KQEAgLTAsMCArMSwxNDQgQEAKK++7vw0KK01pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIFNvbHV0aW9uIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDEwLjAwDQorIyBWaXN1YWwgU3R1ZGlvIDIwMDgNCitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInpsaWJ2YyIsICJ6bGlidmMudmNwcm9qIiwgIns4RkQ4MjZGOC0zNzM5LTQ0RTYtOENDOC05OTcxMjJFNTNCOER9Ig0KK0VuZFByb2plY3QNCitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInpsaWJzdGF0IiwgInpsaWJzdGF0LnZjcHJvaiIsICJ7NzQ1REVDNTgtRUJCMy00N0E5LUE5QjgtNEM2NjI3QzAxQkY4fSINCitFbmRQcm9qZWN0DQorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJ0ZXN0emxpYiIsICJ0ZXN0emxpYi52Y3Byb2oiLCAie0FBNjY2NkFBLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0iDQorRW5kUHJvamVjdA0KK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiVGVzdFpsaWJEbGwiLCAidGVzdHpsaWJkbGwudmNwcm9qIiwgIntDNTJGOUU3Qi00OThBLTQyQkUtOERCNC04NUExNTY5NDM2NkF9Ig0KKwlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQorCQl7OEZEODI2RjgtMzczOS00NEU2LThDQzgtOTk3MTIyRTUzQjhEfSA9IHs4RkQ4MjZGOC0zNzM5LTQ0RTYtOENDOC05OTcxMjJFNTNCOER9DQorCUVuZFByb2plY3RTZWN0aW9uDQorRW5kUHJvamVjdA0KK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAibWluaXppcCIsICJtaW5pemlwLnZjcHJvaiIsICJ7NDhDREQ5REMtRTA5Ri00MTM1LTlDMEMtNEZFNTBDM0M2NTRCfSINCisJUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KKwkJezhGRDgyNkY4LTM3MzktNDRFNi04Q0M4LTk5NzEyMkU1M0I4RH0gPSB7OEZEODI2RjgtMzczOS00NEU2LThDQzgtOTk3MTIyRTUzQjhEfQ0KKwlFbmRQcm9qZWN0U2VjdGlvbg0KK0VuZFByb2plY3QNCitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIm1pbml1bnoiLCAibWluaXVuei52Y3Byb2oiLCAie0M1MkY5RTdCLTQ5OEEtNDJCRS04REI0LTg1QTE1Njk0MzgyQX0iDQorCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCisJCXs4RkQ4MjZGOC0zNzM5LTQ0RTYtOENDOC05OTcxMjJFNTNCOER9ID0gezhGRDgyNkY4LTM3MzktNDRFNi04Q0M4LTk5NzEyMkU1M0I4RH0NCisJRW5kUHJvamVjdFNlY3Rpb24NCitFbmRQcm9qZWN0DQorR2xvYmFsDQorCUdsb2JhbFNlY3Rpb24oU29sdXRpb25Db25maWd1cmF0aW9uUGxhdGZvcm1zKSA9IHByZVNvbHV0aW9uDQorCQlEZWJ1Z3xJdGFuaXVtID0gRGVidWd8SXRhbml1bQ0KKwkJRGVidWd8V2luMzIgPSBEZWJ1Z3xXaW4zMg0KKwkJRGVidWd8eDY0ID0gRGVidWd8eDY0DQorCQlSZWxlYXNlfEl0YW5pdW0gPSBSZWxlYXNlfEl0YW5pdW0NCisJCVJlbGVhc2V8V2luMzIgPSBSZWxlYXNlfFdpbjMyDQorCQlSZWxlYXNlfHg2NCA9IFJlbGVhc2V8eDY0DQorCQlSZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtID0gUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bQ0KKwkJUmVsZWFzZVdpdGhvdXRBc218V2luMzIgPSBSZWxlYXNlV2l0aG91dEFzbXxXaW4zMg0KKwkJUmVsZWFzZVdpdGhvdXRBc218eDY0ID0gUmVsZWFzZVdpdGhvdXRBc218eDY0DQorCUVuZEdsb2JhbFNlY3Rpb24NCisJR2xvYmFsU2VjdGlvbihQcm9qZWN0Q29uZmlndXJhdGlvblBsYXRmb3JtcykgPSBwb3N0U29sdXRpb24NCisJCXs4RkQ4MjZGOC0zNzM5LTQ0RTYtOENDOC05OTcxMjJFNTNCOER9LkRlYnVnfEl0YW5pdW0uQWN0aXZlQ2ZnID0gRGVidWd8SXRhbml1bQ0KKwkJezhGRDgyNkY4LTM3MzktNDRFNi04Q0M4LTk5NzEyMkU1M0I4RH0uRGVidWd8SXRhbml1bS5CdWlsZC4wID0gRGVidWd8SXRhbml1bQ0KKwkJezhGRDgyNkY4LTM3MzktNDRFNi04Q0M4LTk5NzEyMkU1M0I4RH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCisJCXs4RkQ4MjZGOC0zNzM5LTQ0RTYtOENDOC05OTcxMjJFNTNCOER9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KKwkJezhGRDgyNkY4LTM3MzktNDRFNi04Q0M4LTk5NzEyMkU1M0I4RH0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KKwkJezhGRDgyNkY4LTM3MzktNDRFNi04Q0M4LTk5NzEyMkU1M0I4RH0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCisJCXs4RkQ4MjZGOC0zNzM5LTQ0RTYtOENDOC05OTcxMjJFNTNCOER9LlJlbGVhc2V8SXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlfEl0YW5pdW0NCisJCXs4RkQ4MjZGOC0zNzM5LTQ0RTYtOENDOC05OTcxMjJFNTNCOER9LlJlbGVhc2V8SXRhbml1bS5CdWlsZC4wID0gUmVsZWFzZXxJdGFuaXVtDQorCQl7OEZEODI2RjgtMzczOS00NEU2LThDQzgtOTk3MTIyRTUzQjhEfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCisJCXs4RkQ4MjZGOC0zNzM5LTQ0RTYtOENDOC05OTcxMjJFNTNCOER9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCisJCXs4RkQ4MjZGOC0zNzM5LTQ0RTYtOENDOC05OTcxMjJFNTNCOER9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQorCQl7OEZEODI2RjgtMzczOS00NEU2LThDQzgtOTk3MTIyRTUzQjhEfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCisJCXs4RkQ4MjZGOC0zNzM5LTQ0RTYtOENDOC05OTcxMjJFNTNCOER9LlJlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bQ0KKwkJezhGRDgyNkY4LTM3MzktNDRFNi04Q0M4LTk5NzEyMkU1M0I4RH0uUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bS5CdWlsZC4wID0gUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bQ0KKwkJezhGRDgyNkY4LTM3MzktNDRFNi04Q0M4LTk5NzEyMkU1M0I4RH0uUmVsZWFzZVdpdGhvdXRBc218V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZVdpdGhvdXRBc218V2luMzINCisJCXs4RkQ4MjZGOC0zNzM5LTQ0RTYtOENDOC05OTcxMjJFNTNCOER9LlJlbGVhc2VXaXRob3V0QXNtfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlV2l0aG91dEFzbXxXaW4zMg0KKwkJezhGRDgyNkY4LTM3MzktNDRFNi04Q0M4LTk5NzEyMkU1M0I4RH0uUmVsZWFzZVdpdGhvdXRBc218eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2VXaXRob3V0QXNtfHg2NA0KKwkJezhGRDgyNkY4LTM3MzktNDRFNi04Q0M4LTk5NzEyMkU1M0I4RH0uUmVsZWFzZVdpdGhvdXRBc218eDY0LkJ1aWxkLjAgPSBSZWxlYXNlV2l0aG91dEFzbXx4NjQNCisJCXs3NDVERUM1OC1FQkIzLTQ3QTktQTlCOC00QzY2MjdDMDFCRjh9LkRlYnVnfEl0YW5pdW0uQWN0aXZlQ2ZnID0gRGVidWd8SXRhbml1bQ0KKwkJezc0NURFQzU4LUVCQjMtNDdBOS1BOUI4LTRDNjYyN0MwMUJGOH0uRGVidWd8SXRhbml1bS5CdWlsZC4wID0gRGVidWd8SXRhbml1bQ0KKwkJezc0NURFQzU4LUVCQjMtNDdBOS1BOUI4LTRDNjYyN0MwMUJGOH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCisJCXs3NDVERUM1OC1FQkIzLTQ3QTktQTlCOC00QzY2MjdDMDFCRjh9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KKwkJezc0NURFQzU4LUVCQjMtNDdBOS1BOUI4LTRDNjYyN0MwMUJGOH0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KKwkJezc0NURFQzU4LUVCQjMtNDdBOS1BOUI4LTRDNjYyN0MwMUJGOH0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCisJCXs3NDVERUM1OC1FQkIzLTQ3QTktQTlCOC00QzY2MjdDMDFCRjh9LlJlbGVhc2V8SXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlfEl0YW5pdW0NCisJCXs3NDVERUM1OC1FQkIzLTQ3QTktQTlCOC00QzY2MjdDMDFCRjh9LlJlbGVhc2V8SXRhbml1bS5CdWlsZC4wID0gUmVsZWFzZXxJdGFuaXVtDQorCQl7NzQ1REVDNTgtRUJCMy00N0E5LUE5QjgtNEM2NjI3QzAxQkY4fS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCisJCXs3NDVERUM1OC1FQkIzLTQ3QTktQTlCOC00QzY2MjdDMDFCRjh9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCisJCXs3NDVERUM1OC1FQkIzLTQ3QTktQTlCOC00QzY2MjdDMDFCRjh9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQorCQl7NzQ1REVDNTgtRUJCMy00N0E5LUE5QjgtNEM2NjI3QzAxQkY4fS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCisJCXs3NDVERUM1OC1FQkIzLTQ3QTktQTlCOC00QzY2MjdDMDFCRjh9LlJlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bQ0KKwkJezc0NURFQzU4LUVCQjMtNDdBOS1BOUI4LTRDNjYyN0MwMUJGOH0uUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bS5CdWlsZC4wID0gUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bQ0KKwkJezc0NURFQzU4LUVCQjMtNDdBOS1BOUI4LTRDNjYyN0MwMUJGOH0uUmVsZWFzZVdpdGhvdXRBc218V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZVdpdGhvdXRBc218V2luMzINCisJCXs3NDVERUM1OC1FQkIzLTQ3QTktQTlCOC00QzY2MjdDMDFCRjh9LlJlbGVhc2VXaXRob3V0QXNtfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlV2l0aG91dEFzbXxXaW4zMg0KKwkJezc0NURFQzU4LUVCQjMtNDdBOS1BOUI4LTRDNjYyN0MwMUJGOH0uUmVsZWFzZVdpdGhvdXRBc218eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2VXaXRob3V0QXNtfHg2NA0KKwkJezc0NURFQzU4LUVCQjMtNDdBOS1BOUI4LTRDNjYyN0MwMUJGOH0uUmVsZWFzZVdpdGhvdXRBc218eDY0LkJ1aWxkLjAgPSBSZWxlYXNlV2l0aG91dEFzbXx4NjQNCisJCXtBQTY2NjZBQS1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LkRlYnVnfEl0YW5pdW0uQWN0aXZlQ2ZnID0gRGVidWd8SXRhbml1bQ0KKwkJe0FBNjY2NkFBLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uRGVidWd8SXRhbml1bS5CdWlsZC4wID0gRGVidWd8SXRhbml1bQ0KKwkJe0FBNjY2NkFBLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCisJCXtBQTY2NjZBQS1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KKwkJe0FBNjY2NkFBLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KKwkJe0FBNjY2NkFBLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCisJCXtBQTY2NjZBQS1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LlJlbGVhc2V8SXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlfEl0YW5pdW0NCisJCXtBQTY2NjZBQS1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LlJlbGVhc2V8SXRhbml1bS5CdWlsZC4wID0gUmVsZWFzZXxJdGFuaXVtDQorCQl7QUE2NjY2QUEtRTA5Ri00MTM1LTlDMEMtNEZFNTBDM0M2NTRCfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCisJCXtBQTY2NjZBQS1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCisJCXtBQTY2NjZBQS1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQorCQl7QUE2NjY2QUEtRTA5Ri00MTM1LTlDMEMtNEZFNTBDM0M2NTRCfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCisJCXtBQTY2NjZBQS1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LlJlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bQ0KKwkJe0FBNjY2NkFBLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bS5CdWlsZC4wID0gUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bQ0KKwkJe0FBNjY2NkFBLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uUmVsZWFzZVdpdGhvdXRBc218V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZVdpdGhvdXRBc218V2luMzINCisJCXtBQTY2NjZBQS1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LlJlbGVhc2VXaXRob3V0QXNtfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlV2l0aG91dEFzbXxXaW4zMg0KKwkJe0FBNjY2NkFBLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uUmVsZWFzZVdpdGhvdXRBc218eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2VXaXRob3V0QXNtfHg2NA0KKwkJe0FBNjY2NkFBLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uUmVsZWFzZVdpdGhvdXRBc218eDY0LkJ1aWxkLjAgPSBSZWxlYXNlV2l0aG91dEFzbXx4NjQNCisJCXtDNTJGOUU3Qi00OThBLTQyQkUtOERCNC04NUExNTY5NDM2NkF9LkRlYnVnfEl0YW5pdW0uQWN0aXZlQ2ZnID0gRGVidWd8SXRhbml1bQ0KKwkJe0M1MkY5RTdCLTQ5OEEtNDJCRS04REI0LTg1QTE1Njk0MzY2QX0uRGVidWd8SXRhbml1bS5CdWlsZC4wID0gRGVidWd8SXRhbml1bQ0KKwkJe0M1MkY5RTdCLTQ5OEEtNDJCRS04REI0LTg1QTE1Njk0MzY2QX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCisJCXtDNTJGOUU3Qi00OThBLTQyQkUtOERCNC04NUExNTY5NDM2NkF9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KKwkJe0M1MkY5RTdCLTQ5OEEtNDJCRS04REI0LTg1QTE1Njk0MzY2QX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KKwkJe0M1MkY5RTdCLTQ5OEEtNDJCRS04REI0LTg1QTE1Njk0MzY2QX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCisJCXtDNTJGOUU3Qi00OThBLTQyQkUtOERCNC04NUExNTY5NDM2NkF9LlJlbGVhc2V8SXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlfEl0YW5pdW0NCisJCXtDNTJGOUU3Qi00OThBLTQyQkUtOERCNC04NUExNTY5NDM2NkF9LlJlbGVhc2V8SXRhbml1bS5CdWlsZC4wID0gUmVsZWFzZXxJdGFuaXVtDQorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzNjZBfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCisJCXtDNTJGOUU3Qi00OThBLTQyQkUtOERCNC04NUExNTY5NDM2NkF9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCisJCXtDNTJGOUU3Qi00OThBLTQyQkUtOERCNC04NUExNTY5NDM2NkF9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzNjZBfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCisJCXtDNTJGOUU3Qi00OThBLTQyQkUtOERCNC04NUExNTY5NDM2NkF9LlJlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZXxJdGFuaXVtDQorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzNjZBfS5SZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtLkJ1aWxkLjAgPSBSZWxlYXNlfEl0YW5pdW0NCisJCXtDNTJGOUU3Qi00OThBLTQyQkUtOERCNC04NUExNTY5NDM2NkF9LlJlbGVhc2VXaXRob3V0QXNtfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCisJCXtDNTJGOUU3Qi00OThBLTQyQkUtOERCNC04NUExNTY5NDM2NkF9LlJlbGVhc2VXaXRob3V0QXNtfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KKwkJezQ4Q0REOURDLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uRGVidWd8SXRhbml1bS5BY3RpdmVDZmcgPSBEZWJ1Z3xJdGFuaXVtDQorCQl7NDhDREQ5REMtRTA5Ri00MTM1LTlDMEMtNEZFNTBDM0M2NTRCfS5EZWJ1Z3xJdGFuaXVtLkJ1aWxkLjAgPSBEZWJ1Z3xJdGFuaXVtDQorCQl7NDhDREQ5REMtRTA5Ri00MTM1LTlDMEMtNEZFNTBDM0M2NTRCfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KKwkJezQ4Q0REOURDLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQorCQl7NDhDREQ5REMtRTA5Ri00MTM1LTlDMEMtNEZFNTBDM0M2NTRCfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQorCQl7NDhDREQ5REMtRTA5Ri00MTM1LTlDMEMtNEZFNTBDM0M2NTRCfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KKwkJezQ4Q0REOURDLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uUmVsZWFzZXxJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2V8SXRhbml1bQ0KKwkJezQ4Q0REOURDLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uUmVsZWFzZXxJdGFuaXVtLkJ1aWxkLjAgPSBSZWxlYXNlfEl0YW5pdW0NCisJCXs0OENERDlEQy1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KKwkJezQ4Q0REOURDLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KKwkJezQ4Q0REOURDLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCisJCXs0OENERDlEQy1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KKwkJezQ4Q0REOURDLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlfEl0YW5pdW0NCisJCXs0OENERDlEQy1FMDlGLTQxMzUtOUMwQy00RkU1MEMzQzY1NEJ9LlJlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2V8SXRhbml1bQ0KKwkJezQ4Q0REOURDLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uUmVsZWFzZVdpdGhvdXRBc218V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KKwkJezQ4Q0REOURDLUUwOUYtNDEzNS05QzBDLTRGRTUwQzNDNjU0Qn0uUmVsZWFzZVdpdGhvdXRBc218eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzODJBfS5EZWJ1Z3xJdGFuaXVtLkFjdGl2ZUNmZyA9IERlYnVnfEl0YW5pdW0NCisJCXtDNTJGOUU3Qi00OThBLTQyQkUtOERCNC04NUExNTY5NDM4MkF9LkRlYnVnfEl0YW5pdW0uQnVpbGQuMCA9IERlYnVnfEl0YW5pdW0NCisJCXtDNTJGOUU3Qi00OThBLTQyQkUtOERCNC04NUExNTY5NDM4MkF9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzODJBfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCisJCXtDNTJGOUU3Qi00OThBLTQyQkUtOERCNC04NUExNTY5NDM4MkF9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCisJCXtDNTJGOUU3Qi00OThBLTQyQkUtOERCNC04NUExNTY5NDM4MkF9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzODJBfS5SZWxlYXNlfEl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZXxJdGFuaXVtDQorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzODJBfS5SZWxlYXNlfEl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2V8SXRhbml1bQ0KKwkJe0M1MkY5RTdCLTQ5OEEtNDJCRS04REI0LTg1QTE1Njk0MzgyQX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzODJBfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzODJBfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KKwkJe0M1MkY5RTdCLTQ5OEEtNDJCRS04REI0LTg1QTE1Njk0MzgyQX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzODJBfS5SZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2V8SXRhbml1bQ0KKwkJe0M1MkY5RTdCLTQ5OEEtNDJCRS04REI0LTg1QTE1Njk0MzgyQX0uUmVsZWFzZVdpdGhvdXRBc218SXRhbml1bS5CdWlsZC4wID0gUmVsZWFzZXxJdGFuaXVtDQorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzODJBfS5SZWxlYXNlV2l0aG91dEFzbXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQorCQl7QzUyRjlFN0ItNDk4QS00MkJFLThEQjQtODVBMTU2OTQzODJBfS5SZWxlYXNlV2l0aG91dEFzbXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCisJRW5kR2xvYmFsU2VjdGlvbg0KKwlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uUHJvcGVydGllcykgPSBwcmVTb2x1dGlvbg0KKwkJSGlkZVNvbHV0aW9uTm9kZSA9IEZBTFNFDQorCUVuZEdsb2JhbFNlY3Rpb24NCitFbmRHbG9iYWwNCmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi92c3R1ZGlvL3ZjOS96bGlidmMudmNwcm9qIGIvc3JjL2NvbnRyaWIvdnN0dWRpby92YzkvemxpYnZjLnZjcHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWE4OTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbnRyaWIvdnN0dWRpby92YzkvemxpYnZjLnZjcHJvagpAQCAtMCwwICsxLDExNTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KKzxWaXN1YWxTdHVkaW9Qcm9qZWN0DQorCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KKwlWZXJzaW9uPSI5LDAwIg0KKwlOYW1lPSJ6bGlidmMiDQorCVByb2plY3RHVUlEPSJ7OEZEODI2RjgtMzczOS00NEU2LThDQzgtOTk3MTIyRTUzQjhEfSINCisJUm9vdE5hbWVzcGFjZT0iemxpYnZjIg0KKwlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxMzEwNzIiDQorCT4NCisJPFBsYXRmb3Jtcz4NCisJCTxQbGF0Zm9ybQ0KKwkJCU5hbWU9IldpbjMyIg0KKwkJLz4NCisJCTxQbGF0Zm9ybQ0KKwkJCU5hbWU9Ing2NCINCisJCS8+DQorCQk8UGxhdGZvcm0NCisJCQlOYW1lPSJJdGFuaXVtIg0KKwkJLz4NCisJPC9QbGF0Zm9ybXM+DQorCTxUb29sRmlsZXM+DQorCTwvVG9vbEZpbGVzPg0KKwk8Q29uZmlndXJhdGlvbnM+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCU91dHB1dERpcmVjdG9yeT0ieDg2XFpsaWJEbGwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ing4NlxabGliRGxsJChDb25maWd1cmF0aW9uTmFtZSlcVG1wIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSJVcGdyYWRlRnJvbVZDNzAudnNwcm9wcyINCisJCQlVc2VPZk1GQz0iMCINCisJCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIg0KKwkJCQlNa1R5cExpYkNvbXBhdGlibGU9InRydWUiDQorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjEiDQorCQkJCVR5cGVMaWJyYXJ5TmFtZT0iJChPdXREaXIpL3psaWJ2Yy50bGIiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uOy4uXC4uXG1hc214ODYiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fV0FSTklOR1M7WkxJQl9XSU5BUEk7QVNNVjtBU01JTkYiDQorCQkJCUV4Y2VwdGlvbkhhbmRsaW5nPSIwIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMSINCisJCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iZmFsc2UiDQorCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iJChJbnREaXIpL3psaWJ2Yy5wY2giDQorCQkJCUFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iJChJbnREaXIpXCINCisJCQkJT2JqZWN0RmlsZT0iJChJbnREaXIpXCINCisJCQkJUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9IiQoT3V0RGlyKVwiDQorCQkJCUJyb3dzZUluZm9ybWF0aW9uPSIwIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjMiDQorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iNCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyINCisJCQkJQ3VsdHVyZT0iMTAzNiINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCisJCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9NQUNISU5FOkkzODYiDQorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Ii4uXC4uXG1hc214ODZcbWF0Y2g2ODYub2JqIC4uXC4uXG1hc214ODZcaW5mZmFzMzIub2JqIg0KKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcemxpYndhcGkuZGxsIg0KKwkJCQlMaW5rSW5jcmVtZW50YWw9IjIiDQorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCisJCQkJR2VuZXJhdGVNYW5pZmVzdD0iZmFsc2UiDQorCQkJCU1vZHVsZURlZmluaXRpb25GaWxlPSIuXHpsaWJ2Yy5kZWYiDQorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSINCisJCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChPdXREaXIpL3psaWJ3YXBpLnBkYiINCisJCQkJR2VuZXJhdGVNYXBGaWxlPSJ0cnVlIg0KKwkJCQlNYXBGaWxlTmFtZT0iJChPdXREaXIpL3psaWJ3YXBpLm1hcCINCisJCQkJU3ViU3lzdGVtPSIyIg0KKwkJCQlSYW5kb21pemVkQmFzZUFkZHJlc3M9IjEiDQorCQkJCURhdGFFeGVjdXRpb25QcmV2ZW50aW9uPSIwIg0KKwkJCQlJbXBvcnRMaWJyYXJ5PSIkKE91dERpcikvemxpYndhcGkubGliIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IkRlYnVnfHg2NCINCisJCQlPdXRwdXREaXJlY3Rvcnk9Ing2NFxabGliRGxsJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJ4NjRcWmxpYkRsbCQoQ29uZmlndXJhdGlvbk5hbWUpXFRtcCINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iVXBncmFkZUZyb21WQzcwLnZzcHJvcHMiDQorCQkJVXNlT2ZNRkM9IjAiDQorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyINCisJCQkJTWtUeXBMaWJDb21wYXRpYmxlPSJ0cnVlIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KKwkJCQlUeXBlTGlicmFyeU5hbWU9IiQoT3V0RGlyKS96bGlidmMudGxiIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLjsuLlwuLlxtYXNteDg2Ig0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX1dBUk5JTkdTO1pMSUJfV0lOQVBJO0FTTVY7QVNNSU5GO1dJTjY0Ig0KKwkJCQlFeGNlcHRpb25IYW5kbGluZz0iMCINCisJCQkJUnVudGltZUxpYnJhcnk9IjMiDQorCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9ImZhbHNlIg0KKwkJCQlQcmVjb21waWxlZEhlYWRlckZpbGU9IiQoSW50RGlyKS96bGlidmMucGNoIg0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249IiQoSW50RGlyKVwiDQorCQkJCU9iamVjdEZpbGU9IiQoSW50RGlyKVwiDQorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIkKE91dERpcilcIg0KKwkJCQlCcm93c2VJbmZvcm1hdGlvbj0iMCINCisJCQkJV2FybmluZ0xldmVsPSIzIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciDQorCQkJCUN1bHR1cmU9IjEwMzYiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Ii4uXC4uXG1hc214NjRcZ3ZtYXQ2NC5vYmogLi5cLi5cbWFzbXg2NFxpbmZmYXN4NjQub2JqICINCisJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHpsaWJ3YXBpLmRsbCINCisJCQkJTGlua0luY3JlbWVudGFsPSIyIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJCUdlbmVyYXRlTWFuaWZlc3Q9ImZhbHNlIg0KKwkJCQlNb2R1bGVEZWZpbml0aW9uRmlsZT0iLlx6bGlidmMuZGVmIg0KKwkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiDQorCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoT3V0RGlyKS96bGlid2FwaS5wZGIiDQorCQkJCUdlbmVyYXRlTWFwRmlsZT0idHJ1ZSINCisJCQkJTWFwRmlsZU5hbWU9IiQoT3V0RGlyKS96bGlid2FwaS5tYXAiDQorCQkJCVN1YlN5c3RlbT0iMiINCisJCQkJSW1wb3J0TGlicmFyeT0iJChPdXREaXIpL3psaWJ3YXBpLmxpYiINCisJCQkJVGFyZ2V0TWFjaGluZT0iMTciDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iRGVidWd8SXRhbml1bSINCisJCQlPdXRwdXREaXJlY3Rvcnk9ImlhNjRcWmxpYkRsbCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iaWE2NFxabGliRGxsJChDb25maWd1cmF0aW9uTmFtZSlcVG1wIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSJVcGdyYWRlRnJvbVZDNzAudnNwcm9wcyINCisJCQlVc2VPZk1GQz0iMCINCisJCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIg0KKwkJCQlNa1R5cExpYkNvbXBhdGlibGU9InRydWUiDQorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjIiDQorCQkJCVR5cGVMaWJyYXJ5TmFtZT0iJChPdXREaXIpL3psaWJ2Yy50bGIiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uOy4uXC4uXG1hc214ODYiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fV0FSTklOR1M7WkxJQl9XSU5BUEk7V0lONjQiDQorCQkJCUV4Y2VwdGlvbkhhbmRsaW5nPSIwIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMyINCisJCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iZmFsc2UiDQorCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iJChJbnREaXIpL3psaWJ2Yy5wY2giDQorCQkJCUFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iJChJbnREaXIpXCINCisJCQkJT2JqZWN0RmlsZT0iJChJbnREaXIpXCINCisJCQkJUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9IiQoT3V0RGlyKVwiDQorCQkJCUJyb3dzZUluZm9ybWF0aW9uPSIwIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjMiDQorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyINCisJCQkJQ3VsdHVyZT0iMTAzNiINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCisJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHpsaWJ3YXBpLmRsbCINCisJCQkJTGlua0luY3JlbWVudGFsPSIyIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJCUdlbmVyYXRlTWFuaWZlc3Q9ImZhbHNlIg0KKwkJCQlNb2R1bGVEZWZpbml0aW9uRmlsZT0iLlx6bGlidmMuZGVmIg0KKwkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiDQorCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoT3V0RGlyKS96bGlid2FwaS5wZGIiDQorCQkJCUdlbmVyYXRlTWFwRmlsZT0idHJ1ZSINCisJCQkJTWFwRmlsZU5hbWU9IiQoT3V0RGlyKS96bGlid2FwaS5tYXAiDQorCQkJCVN1YlN5c3RlbT0iMiINCisJCQkJSW1wb3J0TGlicmFyeT0iJChPdXREaXIpL3psaWJ3YXBpLmxpYiINCisJCQkJVGFyZ2V0TWFjaGluZT0iNSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiINCisJCQlPdXRwdXREaXJlY3Rvcnk9Ing4NlxabGliRGxsJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJ4ODZcWmxpYkRsbCQoQ29uZmlndXJhdGlvbk5hbWUpXFRtcCINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iVXBncmFkZUZyb21WQzcwLnZzcHJvcHMiDQorCQkJVXNlT2ZNRkM9IjAiDQorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KKwkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQorCQkJCU1rVHlwTGliQ29tcGF0aWJsZT0idHJ1ZSINCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMSINCisJCQkJVHlwZUxpYnJhcnlOYW1lPSIkKE91dERpcikvemxpYnZjLnRsYiINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLjsuLlwuLlxtYXNteDg2Ig0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX1dBUk5JTkdTO1pMSUJfV0lOQVBJIg0KKwkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KKwkJCQlFeGNlcHRpb25IYW5kbGluZz0iMCINCisJCQkJUnVudGltZUxpYnJhcnk9IjIiDQorCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9ImZhbHNlIg0KKwkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCisJCQkJUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIkKEludERpcikvemxpYnZjLnBjaCINCisJCQkJQXNzZW1ibGVyT3V0cHV0PSIyIg0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249IiQoSW50RGlyKVwiDQorCQkJCU9iamVjdEZpbGU9IiQoSW50RGlyKVwiDQorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIkKE91dERpcilcIg0KKwkJCQlCcm93c2VJbmZvcm1hdGlvbj0iMCINCisJCQkJV2FybmluZ0xldmVsPSIzIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQorCQkJCUN1bHR1cmU9IjEwMzYiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQorCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvTUFDSElORTpJMzg2Ig0KKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcemxpYndhcGkuZGxsIg0KKwkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCisJCQkJR2VuZXJhdGVNYW5pZmVzdD0iZmFsc2UiDQorCQkJCUlnbm9yZUFsbERlZmF1bHRMaWJyYXJpZXM9ImZhbHNlIg0KKwkJCQlNb2R1bGVEZWZpbml0aW9uRmlsZT0iLlx6bGlidmMuZGVmIg0KKwkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcikvemxpYndhcGkucGRiIg0KKwkJCQlHZW5lcmF0ZU1hcEZpbGU9InRydWUiDQorCQkJCU1hcEZpbGVOYW1lPSIkKE91dERpcikvemxpYndhcGkubWFwIg0KKwkJCQlTdWJTeXN0ZW09IjIiDQorCQkJCU9wdGltaXplRm9yV2luZG93czk4PSIxIg0KKwkJCQlSYW5kb21pemVkQmFzZUFkZHJlc3M9IjEiDQorCQkJCURhdGFFeGVjdXRpb25QcmV2ZW50aW9uPSIwIg0KKwkJCQlJbXBvcnRMaWJyYXJ5PSIkKE91dERpcikvemxpYndhcGkubGliIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IlJlbGVhc2VXaXRob3V0QXNtfHg2NCINCisJCQlPdXRwdXREaXJlY3Rvcnk9Ing2NFxabGliRGxsJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJ4NjRcWmxpYkRsbCQoQ29uZmlndXJhdGlvbk5hbWUpXFRtcCINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iVXBncmFkZUZyb21WQzcwLnZzcHJvcHMiDQorCQkJVXNlT2ZNRkM9IjAiDQorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KKwkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQorCQkJCU1rVHlwTGliQ29tcGF0aWJsZT0idHJ1ZSINCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCisJCQkJVHlwZUxpYnJhcnlOYW1lPSIkKE91dERpcikvemxpYnZjLnRsYiINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLjsuLlwuLlxtYXNteDg2Ig0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX1dBUk5JTkdTO1pMSUJfV0lOQVBJO1dJTjY0Ig0KKwkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KKwkJCQlFeGNlcHRpb25IYW5kbGluZz0iMCINCisJCQkJUnVudGltZUxpYnJhcnk9IjIiDQorCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9ImZhbHNlIg0KKwkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCisJCQkJUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIkKEludERpcikvemxpYnZjLnBjaCINCisJCQkJQXNzZW1ibGVyT3V0cHV0PSIyIg0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249IiQoSW50RGlyKVwiDQorCQkJCU9iamVjdEZpbGU9IiQoSW50RGlyKVwiDQorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIkKE91dERpcilcIg0KKwkJCQlCcm93c2VJbmZvcm1hdGlvbj0iMCINCisJCQkJV2FybmluZ0xldmVsPSIzIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQorCQkJCUN1bHR1cmU9IjEwMzYiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQorCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVx6bGlid2FwaS5kbGwiDQorCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KKwkJCQlHZW5lcmF0ZU1hbmlmZXN0PSJmYWxzZSINCisJCQkJSWdub3JlQWxsRGVmYXVsdExpYnJhcmllcz0iZmFsc2UiDQorCQkJCU1vZHVsZURlZmluaXRpb25GaWxlPSIuXHpsaWJ2Yy5kZWYiDQorCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoT3V0RGlyKS96bGlid2FwaS5wZGIiDQorCQkJCUdlbmVyYXRlTWFwRmlsZT0idHJ1ZSINCisJCQkJTWFwRmlsZU5hbWU9IiQoT3V0RGlyKS96bGlid2FwaS5tYXAiDQorCQkJCVN1YlN5c3RlbT0iMiINCisJCQkJT3B0aW1pemVGb3JXaW5kb3dzOTg9IjEiDQorCQkJCUltcG9ydExpYnJhcnk9IiQoT3V0RGlyKS96bGlid2FwaS5saWIiDQorCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IlJlbGVhc2VXaXRob3V0QXNtfEl0YW5pdW0iDQorCQkJT3V0cHV0RGlyZWN0b3J5PSJpYTY0XFpsaWJEbGwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImlhNjRcWmxpYkRsbCQoQ29uZmlndXJhdGlvbk5hbWUpXFRtcCINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iVXBncmFkZUZyb21WQzcwLnZzcHJvcHMiDQorCQkJVXNlT2ZNRkM9IjAiDQorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KKwkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQorCQkJCU1rVHlwTGliQ29tcGF0aWJsZT0idHJ1ZSINCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMiINCisJCQkJVHlwZUxpYnJhcnlOYW1lPSIkKE91dERpcikvemxpYnZjLnRsYiINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLjsuLlwuLlxtYXNteDg2Ig0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX1dBUk5JTkdTO1pMSUJfV0lOQVBJO1dJTjY0Ig0KKwkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KKwkJCQlFeGNlcHRpb25IYW5kbGluZz0iMCINCisJCQkJUnVudGltZUxpYnJhcnk9IjIiDQorCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9ImZhbHNlIg0KKwkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCisJCQkJUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIkKEludERpcikvemxpYnZjLnBjaCINCisJCQkJQXNzZW1ibGVyT3V0cHV0PSIyIg0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249IiQoSW50RGlyKVwiDQorCQkJCU9iamVjdEZpbGU9IiQoSW50RGlyKVwiDQorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIkKE91dERpcilcIg0KKwkJCQlCcm93c2VJbmZvcm1hdGlvbj0iMCINCisJCQkJV2FybmluZ0xldmVsPSIzIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQorCQkJCUN1bHR1cmU9IjEwMzYiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQorCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVx6bGlid2FwaS5kbGwiDQorCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KKwkJCQlHZW5lcmF0ZU1hbmlmZXN0PSJmYWxzZSINCisJCQkJSWdub3JlQWxsRGVmYXVsdExpYnJhcmllcz0iZmFsc2UiDQorCQkJCU1vZHVsZURlZmluaXRpb25GaWxlPSIuXHpsaWJ2Yy5kZWYiDQorCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoT3V0RGlyKS96bGlid2FwaS5wZGIiDQorCQkJCUdlbmVyYXRlTWFwRmlsZT0idHJ1ZSINCisJCQkJTWFwRmlsZU5hbWU9IiQoT3V0RGlyKS96bGlid2FwaS5tYXAiDQorCQkJCVN1YlN5c3RlbT0iMiINCisJCQkJT3B0aW1pemVGb3JXaW5kb3dzOTg9IjEiDQorCQkJCUltcG9ydExpYnJhcnk9IiQoT3V0RGlyKS96bGlid2FwaS5saWIiDQorCQkJCVRhcmdldE1hY2hpbmU9IjUiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQlPdXRwdXREaXJlY3Rvcnk9Ing4NlxabGliRGxsJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJ4ODZcWmxpYkRsbCQoQ29uZmlndXJhdGlvbk5hbWUpXFRtcCINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iVXBncmFkZUZyb21WQzcwLnZzcHJvcHMiDQorCQkJVXNlT2ZNRkM9IjAiDQorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KKwkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQorCQkJCU1rVHlwTGliQ29tcGF0aWJsZT0idHJ1ZSINCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMSINCisJCQkJVHlwZUxpYnJhcnlOYW1lPSIkKE91dERpcikvemxpYnZjLnRsYiINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLjsuLlwuLlxtYXNteDg2Ig0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX1dBUk5JTkdTO1pMSUJfV0lOQVBJO0FTTVY7QVNNSU5GIg0KKwkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KKwkJCQlFeGNlcHRpb25IYW5kbGluZz0iMCINCisJCQkJUnVudGltZUxpYnJhcnk9IjAiDQorCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9ImZhbHNlIg0KKwkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCisJCQkJUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIkKEludERpcikvemxpYnZjLnBjaCINCisJCQkJQXNzZW1ibGVyT3V0cHV0PSIyIg0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249IiQoSW50RGlyKVwiDQorCQkJCU9iamVjdEZpbGU9IiQoSW50RGlyKVwiDQorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIkKE91dERpcilcIg0KKwkJCQlCcm93c2VJbmZvcm1hdGlvbj0iMCINCisJCQkJV2FybmluZ0xldmVsPSIzIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQorCQkJCUN1bHR1cmU9IjEwMzYiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQorCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvTUFDSElORTpJMzg2Ig0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIuLlwuLlxtYXNteDg2XG1hdGNoNjg2Lm9iaiAuLlwuLlxtYXNteDg2XGluZmZhczMyLm9iaiAiDQorCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVx6bGlid2FwaS5kbGwiDQorCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KKwkJCQlHZW5lcmF0ZU1hbmlmZXN0PSJmYWxzZSINCisJCQkJSWdub3JlQWxsRGVmYXVsdExpYnJhcmllcz0iZmFsc2UiDQorCQkJCU1vZHVsZURlZmluaXRpb25GaWxlPSIuXHpsaWJ2Yy5kZWYiDQorCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoT3V0RGlyKS96bGlid2FwaS5wZGIiDQorCQkJCUdlbmVyYXRlTWFwRmlsZT0idHJ1ZSINCisJCQkJTWFwRmlsZU5hbWU9IiQoT3V0RGlyKS96bGlid2FwaS5tYXAiDQorCQkJCVN1YlN5c3RlbT0iMiINCisJCQkJT3B0aW1pemVGb3JXaW5kb3dzOTg9IjEiDQorCQkJCVJhbmRvbWl6ZWRCYXNlQWRkcmVzcz0iMSINCisJCQkJRGF0YUV4ZWN1dGlvblByZXZlbnRpb249IjAiDQorCQkJCUltcG9ydExpYnJhcnk9IiQoT3V0RGlyKS96bGlid2FwaS5saWIiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSJ4NjRcWmxpYkRsbCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0ieDY0XFpsaWJEbGwkKENvbmZpZ3VyYXRpb25OYW1lKVxUbXAiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IlVwZ3JhZGVGcm9tVkM3MC52c3Byb3BzIg0KKwkJCVVzZU9mTUZDPSIwIg0KKwkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCisJCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KKwkJCQlNa1R5cExpYkNvbXBhdGlibGU9InRydWUiDQorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQorCQkJCVR5cGVMaWJyYXJ5TmFtZT0iJChPdXREaXIpL3psaWJ2Yy50bGIiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi47Li5cLi5cbWFzbXg4NiINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19XQVJOSU5HUztaTElCX1dJTkFQSTtBU01WO0FTTUlORjtXSU42NCINCisJCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCisJCQkJRXhjZXB0aW9uSGFuZGxpbmc9IjAiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KKwkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJmYWxzZSINCisJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQorCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iJChJbnREaXIpL3psaWJ2Yy5wY2giDQorCQkJCUFzc2VtYmxlck91dHB1dD0iMiINCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIkKEludERpcilcIg0KKwkJCQlPYmplY3RGaWxlPSIkKEludERpcilcIg0KKwkJCQlQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iJChPdXREaXIpXCINCisJCQkJQnJvd3NlSW5mb3JtYXRpb249IjAiDQorCQkJCVdhcm5pbmdMZXZlbD0iMyINCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KKwkJCQlDdWx0dXJlPSIxMDM2Ig0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIuLlwuLlxtYXNteDY0XGd2bWF0NjQub2JqIC4uXC4uXG1hc214NjRcaW5mZmFzeDY0Lm9iaiAiDQorCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVx6bGlid2FwaS5kbGwiDQorCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KKwkJCQlHZW5lcmF0ZU1hbmlmZXN0PSJmYWxzZSINCisJCQkJSWdub3JlQWxsRGVmYXVsdExpYnJhcmllcz0iZmFsc2UiDQorCQkJCU1vZHVsZURlZmluaXRpb25GaWxlPSIuXHpsaWJ2Yy5kZWYiDQorCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoT3V0RGlyKS96bGlid2FwaS5wZGIiDQorCQkJCUdlbmVyYXRlTWFwRmlsZT0idHJ1ZSINCisJCQkJTWFwRmlsZU5hbWU9IiQoT3V0RGlyKS96bGlid2FwaS5tYXAiDQorCQkJCVN1YlN5c3RlbT0iMiINCisJCQkJT3B0aW1pemVGb3JXaW5kb3dzOTg9IjEiDQorCQkJCUltcG9ydExpYnJhcnk9IiQoT3V0RGlyKS96bGlid2FwaS5saWIiDQorCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IlJlbGVhc2V8SXRhbml1bSINCisJCQlPdXRwdXREaXJlY3Rvcnk9ImlhNjRcWmxpYkRsbCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iaWE2NFxabGliRGxsJChDb25maWd1cmF0aW9uTmFtZSlcVG1wIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSJVcGdyYWRlRnJvbVZDNzAudnNwcm9wcyINCisJCQlVc2VPZk1GQz0iMCINCisJCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQorCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCisJCQkJTWtUeXBMaWJDb21wYXRpYmxlPSJ0cnVlIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJCVRhcmdldEVudmlyb25tZW50PSIyIg0KKwkJCQlUeXBlTGlicmFyeU5hbWU9IiQoT3V0RGlyKS96bGlidmMudGxiIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uOy4uXC4uXG1hc214ODYiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fV0FSTklOR1M7WkxJQl9XSU5BUEk7V0lONjQiDQorCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQorCQkJCUV4Y2VwdGlvbkhhbmRsaW5nPSIwIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMiINCisJCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iZmFsc2UiDQorCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KKwkJCQlQcmVjb21waWxlZEhlYWRlckZpbGU9IiQoSW50RGlyKS96bGlidmMucGNoIg0KKwkJCQlBc3NlbWJsZXJPdXRwdXQ9IjIiDQorCQkJCUFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iJChJbnREaXIpXCINCisJCQkJT2JqZWN0RmlsZT0iJChJbnREaXIpXCINCisJCQkJUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9IiQoT3V0RGlyKVwiDQorCQkJCUJyb3dzZUluZm9ybWF0aW9uPSIwIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjMiDQorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCisJCQkJQ3VsdHVyZT0iMTAzNiINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCisJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHpsaWJ3YXBpLmRsbCINCisJCQkJTGlua0luY3JlbWVudGFsPSIxIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJCUdlbmVyYXRlTWFuaWZlc3Q9ImZhbHNlIg0KKwkJCQlJZ25vcmVBbGxEZWZhdWx0TGlicmFyaWVzPSJmYWxzZSINCisJCQkJTW9kdWxlRGVmaW5pdGlvbkZpbGU9Ii5cemxpYnZjLmRlZiINCisJCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChPdXREaXIpL3psaWJ3YXBpLnBkYiINCisJCQkJR2VuZXJhdGVNYXBGaWxlPSJ0cnVlIg0KKwkJCQlNYXBGaWxlTmFtZT0iJChPdXREaXIpL3psaWJ3YXBpLm1hcCINCisJCQkJU3ViU3lzdGVtPSIyIg0KKwkJCQlPcHRpbWl6ZUZvcldpbmRvd3M5OD0iMSINCisJCQkJSW1wb3J0TGlicmFyeT0iJChPdXREaXIpL3psaWJ3YXBpLmxpYiINCisJCQkJVGFyZ2V0TWFjaGluZT0iNSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwk8L0NvbmZpZ3VyYXRpb25zPg0KKwk8UmVmZXJlbmNlcz4NCisJPC9SZWZlcmVuY2VzPg0KKwk8RmlsZXM+DQorCQk8RmlsdGVyDQorCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KKwkJCUZpbHRlcj0iY3BwO2M7Y3h4O3JjO2RlZjtyO29kbDtocGo7YmF0O2ZvcjtmOTAiDQorCQkJPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cYWRsZXIzMi5jIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cY29tcHJlc3MuYyINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGNyYzMyLmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxkZWZsYXRlLmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxnemNsb3NlLmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxnemd1dHMuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGd6bGliLmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxnenJlYWQuYyINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGd6d3JpdGUuYyINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGluZmJhY2suYyINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXG1hc214NjRcaW5mZmFzODY2NC5jIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8SXRhbml1bSINCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlV2l0aG91dEFzbXxXaW4zMiINCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlV2l0aG91dEFzbXxJdGFuaXVtIg0KKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxJdGFuaXVtIg0KKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGluZmZhc3QuYyINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGluZmxhdGUuYyINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGluZnRyZWVzLmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxtaW5pemlwXGlvYXBpLmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxtaW5pemlwXGlvd2luMzIuYyINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHRyZWVzLmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlx1bmNvbXByLmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxtaW5pemlwXHVuemlwLmMiDQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iWkxJQl9JTlRFUk5BTCINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJaTElCX0lOVEVSTkFMIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfEl0YW5pdW0iDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJaTElCX0lOVEVSTkFMIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxtaW5pemlwXHppcC5jIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlpMSUJfSU5URVJOQUwiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iWkxJQl9JTlRFUk5BTCINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxJdGFuaXVtIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iWkxJQl9JTlRFUk5BTCINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlx6bGliLnJjIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlx6bGlidmMuZGVmIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cenV0aWwuYyINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCTwvRmlsdGVyPg0KKwkJPEZpbHRlcg0KKwkJCU5hbWU9IkhlYWRlciBGaWxlcyINCisJCQlGaWx0ZXI9Img7aHBwO2h4eDtobTtpbmw7Zmk7ZmQiDQorCQkJPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cZGVmbGF0ZS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5caW5mYmxvY2suaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGluZmNvZGVzLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxpbmZmYXN0LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxpbmZ0cmVlcy5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5caW5mdXRpbC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cemNvbmYuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHpsaWIuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHp1dGlsLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQk8L0ZpbHRlcj4NCisJCTxGaWx0ZXINCisJCQlOYW1lPSJSZXNvdXJjZSBGaWxlcyINCisJCQlGaWx0ZXI9ImljbztjdXI7Ym1wO2RsZztyYzI7cmN0O2JpbjtjbnQ7cnRmO2dpZjtqcGc7anBlZztqcGUiDQorCQkJPg0KKwkJPC9GaWx0ZXI+DQorCTwvRmlsZXM+DQorCTxHbG9iYWxzPg0KKwk8L0dsb2JhbHM+DQorPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL3NyYy9jcmMzMi5jIGIvc3JjL2NyYzMyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFiZGNlNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jcmMzMi5jCkBAIC0wLDAgKzEsMTExNiBAQAorLyogY3JjMzIuYyAtLSBjb21wdXRlIHRoZSBDUkMtMzIgb2YgYSBkYXRhIHN0cmVhbQorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjIgTWFyayBBZGxlcgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAorICoKKyAqIFRoaXMgaW50ZXJsZWF2ZWQgaW1wbGVtZW50YXRpb24gb2YgYSBDUkMgbWFrZXMgdXNlIG9mIHBpcGVsaW5lZCBtdWx0aXBsZQorICogYXJpdGhtZXRpYy1sb2dpYyB1bml0cywgY29tbW9ubHkgZm91bmQgaW4gbW9kZXJuIENQVSBjb3Jlcy4gSXQgaXMgZHVlIHRvCisgKiBLYWRhdGNoIGFuZCBKZW5raW5zICgyMDEwKS4gU2VlIGRvYy9jcmMtZG9jLjEuMC5wZGYgaW4gdGhpcyBkaXN0cmlidXRpb24uCisgKi8KKworLyogQCgjKSAkSWQkICovCisKKy8qCisgIE5vdGUgb24gdGhlIHVzZSBvZiBEWU5BTUlDX0NSQ19UQUJMRTogdGhlcmUgaXMgbm8gbXV0ZXggb3Igc2VtYXBob3JlCisgIHByb3RlY3Rpb24gb24gdGhlIHN0YXRpYyB2YXJpYWJsZXMgdXNlZCB0byBjb250cm9sIHRoZSBmaXJzdC11c2UgZ2VuZXJhdGlvbgorICBvZiB0aGUgY3JjIHRhYmxlcy4gVGhlcmVmb3JlLCBpZiB5b3UgI2RlZmluZSBEWU5BTUlDX0NSQ19UQUJMRSwgeW91IHNob3VsZAorICBmaXJzdCBjYWxsIGdldF9jcmNfdGFibGUoKSB0byBpbml0aWFsaXplIHRoZSB0YWJsZXMgYmVmb3JlIGFsbG93aW5nIG1vcmUgdGhhbgorICBvbmUgdGhyZWFkIHRvIHVzZSBjcmMzMigpLgorCisgIE1BS0VDUkNIIGNhbiBiZSAjZGVmaW5lZCB0byB3cml0ZSBvdXQgY3JjMzIuaC4gQSBtYWluKCkgcm91dGluZSBpcyBhbHNvCisgIHByb2R1Y2VkLCBzbyB0aGF0IHRoaXMgb25lIHNvdXJjZSBmaWxlIGNhbiBiZSBjb21waWxlZCB0byBhbiBleGVjdXRhYmxlLgorICovCisKKyNpZmRlZiBNQUtFQ1JDSAorIyAgaW5jbHVkZSA8c3RkaW8uaD4KKyMgIGlmbmRlZiBEWU5BTUlDX0NSQ19UQUJMRQorIyAgICBkZWZpbmUgRFlOQU1JQ19DUkNfVEFCTEUKKyMgIGVuZGlmIC8qICFEWU5BTUlDX0NSQ19UQUJMRSAqLworI2VuZGlmIC8qIE1BS0VDUkNIICovCisKKyNpbmNsdWRlICJ6dXRpbC5oIiAgICAgIC8qIGZvciBaX1U0LCBaX1U4LCB6X2NyY190LCBhbmQgRkFSIGRlZmluaXRpb25zICovCisKKyAvKgorICBBIENSQyBvZiBhIG1lc3NhZ2UgaXMgY29tcHV0ZWQgb24gTiBicmFpZHMgb2Ygd29yZHMgaW4gdGhlIG1lc3NhZ2UsIHdoZXJlCisgIGVhY2ggd29yZCBjb25zaXN0cyBvZiBXIGJ5dGVzICg0IG9yIDgpLiBJZiBOIGlzIDMsIGZvciBleGFtcGxlLCB0aGVuIHRocmVlCisgIHJ1bm5pbmcgc3BhcnNlIENSQ3MgYXJlIGNhbGN1bGF0ZWQgcmVzcGVjdGl2ZWx5IG9uIGVhY2ggYnJhaWQsIGF0IHRoZXNlCisgIGluZGljZXMgaW4gdGhlIGFycmF5IG9mIHdvcmRzOiAwLCAzLCA2LCAuLi4sIDEsIDQsIDcsIC4uLiwgYW5kIDIsIDUsIDgsIC4uLgorICBUaGlzIGlzIGRvbmUgc3RhcnRpbmcgYXQgYSB3b3JkIGJvdW5kYXJ5LCBhbmQgY29udGludWVzIHVudGlsIGFzIG1hbnkgYmxvY2tzCisgIG9mIE4gKiBXIGJ5dGVzIGFzIGFyZSBhdmFpbGFibGUgaGF2ZSBiZWVuIHByb2Nlc3NlZC4gVGhlIHJlc3VsdHMgYXJlIGNvbWJpbmVkCisgIGludG8gYSBzaW5nbGUgQ1JDIGF0IHRoZSBlbmQuIEZvciB0aGlzIGNvZGUsIE4gbXVzdCBiZSBpbiB0aGUgcmFuZ2UgMS4uNiBhbmQKKyAgVyBtdXN0IGJlIDQgb3IgOC4gVGhlIHVwcGVyIGxpbWl0IG9uIE4gY2FuIGJlIGluY3JlYXNlZCBpZiBkZXNpcmVkIGJ5IGFkZGluZworICBtb3JlICNpZiBibG9ja3MsIGV4dGVuZGluZyB0aGUgcGF0dGVybnMgYXBwYXJlbnQgaW4gdGhlIGNvZGUuIEluIGFkZGl0aW9uLAorICBjcmMzMi5oIHdvdWxkIG5lZWQgdG8gYmUgcmVnZW5lcmF0ZWQsIGlmIHRoZSBtYXhpbXVtIE4gdmFsdWUgaXMgaW5jcmVhc2VkLgorCisgIE4gYW5kIFcgYXJlIGNob3NlbiBlbXBpcmljYWxseSBieSBiZW5jaG1hcmtpbmcgdGhlIGV4ZWN1dGlvbiB0aW1lIG9uIGEgZ2l2ZW4KKyAgcHJvY2Vzc29yLiBUaGUgY2hvaWNlcyBmb3IgTiBhbmQgVyBiZWxvdyB3ZXJlIGJhc2VkIG9uIHRlc3Rpbmcgb24gSW50ZWwgS2FieQorICBMYWtlIGk3LCBBTUQgUnl6ZW4gNywgQVJNIENvcnRleC1BNTcsIFNwYXJjNjQtVklJLCBQb3dlclBDIFBPV0VSOSwgYW5kIE1JUFM2NAorICBPY3Rlb24gSUkgcHJvY2Vzc29ycy4gVGhlIEludGVsLCBBTUQsIGFuZCBBUk0gcHJvY2Vzc29ycyB3ZXJlIGFsbCBmYXN0ZXN0CisgIHdpdGggTj01LCBXPTguIFRoZSBTcGFyYywgUG93ZXJQQywgYW5kIE1JUFM2NCB3ZXJlIGFsbCBmYXN0ZXN0IGF0IE49NSwgVz00LgorICBUaGV5IHdlcmUgYWxsIHRlc3RlZCB3aXRoIGVpdGhlciBnY2Mgb3IgY2xhbmcsIGFsbCB1c2luZyB0aGUgLU8zIG9wdGltaXphdGlvbgorICBsZXZlbC4gWW91ciBtaWxlYWdlIG1heSB2YXJ5LgorICovCisKKy8qIERlZmluZSBOICovCisjaWZkZWYgWl9URVNUTgorIyAgZGVmaW5lIE4gWl9URVNUTgorI2Vsc2UKKyMgIGRlZmluZSBOIDUKKyNlbmRpZgorI2lmIE4gPCAxIHx8IE4gPiA2CisjICBlcnJvciBOIG11c3QgYmUgaW4gMS4uNgorI2VuZGlmCisKKy8qCisgIHpfY3JjX3QgbXVzdCBiZSBhdCBsZWFzdCAzMiBiaXRzLiB6X3dvcmRfdCBtdXN0IGJlIGF0IGxlYXN0IGFzIGxvbmcgYXMKKyAgel9jcmNfdC4gSXQgaXMgYXNzdW1lZCBoZXJlIHRoYXQgel93b3JkX3QgaXMgZWl0aGVyIDMyIGJpdHMgb3IgNjQgYml0cywgYW5kCisgIHRoYXQgYnl0ZXMgYXJlIGVpZ2h0IGJpdHMuCisgKi8KKworLyoKKyAgRGVmaW5lIFcgYW5kIHRoZSBhc3NvY2lhdGVkIHpfd29yZF90IHR5cGUuIElmIFcgaXMgbm90IGRlZmluZWQsIHRoZW4gYQorICBicmFpZGVkIGNhbGN1bGF0aW9uIGlzIG5vdCB1c2VkLCBhbmQgdGhlIGFzc29jaWF0ZWQgdGFibGVzIGFuZCBjb2RlIGFyZSBub3QKKyAgY29tcGlsZWQuCisgKi8KKyNpZmRlZiBaX1RFU1RXCisjICBpZiBaX1RFU1RXLTEgIT0gLTEKKyMgICAgZGVmaW5lIFcgWl9URVNUVworIyAgZW5kaWYKKyNlbHNlCisjICBpZmRlZiBNQUtFQ1JDSAorIyAgICBkZWZpbmUgVyA4ICAgICAgICAgLyogcmVxdWlyZWQgZm9yIE1BS0VDUkNIICovCisjICBlbHNlCisjICAgIGlmIGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfX2FhcmNoNjRfXykKKyMgICAgICBkZWZpbmUgVyA4CisjICAgIGVsc2UKKyMgICAgICBkZWZpbmUgVyA0CisjICAgIGVuZGlmCisjICBlbmRpZgorI2VuZGlmCisjaWZkZWYgVworIyAgaWYgVyA9PSA4ICYmIGRlZmluZWQoWl9VOCkKKyAgICAgdHlwZWRlZiBaX1U4IHpfd29yZF90OworIyAgZWxpZiBkZWZpbmVkKFpfVTQpCisjICAgIHVuZGVmIFcKKyMgICAgZGVmaW5lIFcgNAorICAgICB0eXBlZGVmIFpfVTQgel93b3JkX3Q7CisjICBlbHNlCisjICAgIHVuZGVmIFcKKyMgIGVuZGlmCisjZW5kaWYKKworLyogTG9jYWwgZnVuY3Rpb25zLiAqLworbG9jYWwgel9jcmNfdCBtdWx0bW9kcCBPRigoel9jcmNfdCBhLCB6X2NyY190IGIpKTsKK2xvY2FsIHpfY3JjX3QgeDJubW9kcCBPRigoel9vZmY2NF90IG4sIHVuc2lnbmVkIGspKTsKKworLyogSWYgYXZhaWxhYmxlLCB1c2UgdGhlIEFSTSBwcm9jZXNzb3IgQ1JDMzIgaW5zdHJ1Y3Rpb24uICovCisjaWYgZGVmaW5lZChfX2FhcmNoNjRfXykgJiYgZGVmaW5lZChfX0FSTV9GRUFUVVJFX0NSQzMyKSAmJiBXID09IDgKKyMgIGRlZmluZSBBUk1DUkMzMgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFcpICYmICghZGVmaW5lZChBUk1DUkMzMikgfHwgZGVmaW5lZChEWU5BTUlDX0NSQ19UQUJMRSkpCisvKgorICBTd2FwIHRoZSBieXRlcyBpbiBhIHpfd29yZF90IHRvIGNvbnZlcnQgYmV0d2VlbiBsaXR0bGUgYW5kIGJpZyBlbmRpYW4uIEFueQorICBzZWxmLXJlc3BlY3RpbmcgY29tcGlsZXIgd2lsbCBvcHRpbWl6ZSB0aGlzIHRvIGEgc2luZ2xlIG1hY2hpbmUgYnl0ZS1zd2FwCisgIGluc3RydWN0aW9uLCBpZiBvbmUgaXMgYXZhaWxhYmxlLiBUaGlzIGFzc3VtZXMgdGhhdCB3b3JkX3QgaXMgZWl0aGVyIDMyIGJpdHMKKyAgb3IgNjQgYml0cy4KKyAqLworbG9jYWwgel93b3JkX3QgYnl0ZV9zd2FwKHdvcmQpCisgICAgel93b3JkX3Qgd29yZDsKK3sKKyMgIGlmIFcgPT0gOAorICAgIHJldHVybgorICAgICAgICAod29yZCAmIDB4ZmYwMDAwMDAwMDAwMDAwMCkgPj4gNTYgfAorICAgICAgICAod29yZCAmIDB4ZmYwMDAwMDAwMDAwMDApID4+IDQwIHwKKyAgICAgICAgKHdvcmQgJiAweGZmMDAwMDAwMDAwMCkgPj4gMjQgfAorICAgICAgICAod29yZCAmIDB4ZmYwMDAwMDAwMCkgPj4gOCB8CisgICAgICAgICh3b3JkICYgMHhmZjAwMDAwMCkgPDwgOCB8CisgICAgICAgICh3b3JkICYgMHhmZjAwMDApIDw8IDI0IHwKKyAgICAgICAgKHdvcmQgJiAweGZmMDApIDw8IDQwIHwKKyAgICAgICAgKHdvcmQgJiAweGZmKSA8PCA1NjsKKyMgIGVsc2UgICAvKiBXID09IDQgKi8KKyAgICByZXR1cm4KKyAgICAgICAgKHdvcmQgJiAweGZmMDAwMDAwKSA+PiAyNCB8CisgICAgICAgICh3b3JkICYgMHhmZjAwMDApID4+IDggfAorICAgICAgICAod29yZCAmIDB4ZmYwMCkgPDwgOCB8CisgICAgICAgICh3b3JkICYgMHhmZikgPDwgMjQ7CisjICBlbmRpZgorfQorI2VuZGlmCisKKy8qIENSQyBwb2x5bm9taWFsLiAqLworI2RlZmluZSBQT0xZIDB4ZWRiODgzMjAgICAgICAgICAvKiBwKHgpIHJlZmxlY3RlZCwgd2l0aCB4XjMyIGltcGxpZWQgKi8KKworI2lmZGVmIERZTkFNSUNfQ1JDX1RBQkxFCisKK2xvY2FsIHpfY3JjX3QgRkFSIGNyY190YWJsZVsyNTZdOworbG9jYWwgel9jcmNfdCBGQVIgeDJuX3RhYmxlWzMyXTsKK2xvY2FsIHZvaWQgbWFrZV9jcmNfdGFibGUgT0YoKHZvaWQpKTsKKyNpZmRlZiBXCisgICBsb2NhbCB6X3dvcmRfdCBGQVIgY3JjX2JpZ190YWJsZVsyNTZdOworICAgbG9jYWwgel9jcmNfdCBGQVIgY3JjX2JyYWlkX3RhYmxlW1ddWzI1Nl07CisgICBsb2NhbCB6X3dvcmRfdCBGQVIgY3JjX2JyYWlkX2JpZ190YWJsZVtXXVsyNTZdOworICAgbG9jYWwgdm9pZCBicmFpZCBPRigoel9jcmNfdCBbXVsyNTZdLCB6X3dvcmRfdCBbXVsyNTZdLCBpbnQsIGludCkpOworI2VuZGlmCisjaWZkZWYgTUFLRUNSQ0gKKyAgIGxvY2FsIHZvaWQgd3JpdGVfdGFibGUgT0YoKEZJTEUgKiwgY29uc3Qgel9jcmNfdCBGQVIgKiwgaW50KSk7CisgICBsb2NhbCB2b2lkIHdyaXRlX3RhYmxlMzJoaSBPRigoRklMRSAqLCBjb25zdCB6X3dvcmRfdCBGQVIgKiwgaW50KSk7CisgICBsb2NhbCB2b2lkIHdyaXRlX3RhYmxlNjQgT0YoKEZJTEUgKiwgY29uc3Qgel93b3JkX3QgRkFSICosIGludCkpOworI2VuZGlmIC8qIE1BS0VDUkNIICovCisKKy8qCisgIERlZmluZSBhIG9uY2UoKSBmdW5jdGlvbiBkZXBlbmRpbmcgb24gdGhlIGF2YWlsYWJpbGl0eSBvZiBhdG9taWNzLiBJZiB0aGlzIGlzCisgIGNvbXBpbGVkIHdpdGggRFlOQU1JQ19DUkNfVEFCTEUgZGVmaW5lZCwgYW5kIGlmIENSQ3Mgd2lsbCBiZSBjb21wdXRlZCBpbgorICBtdWx0aXBsZSB0aHJlYWRzLCBhbmQgaWYgYXRvbWljcyBhcmUgbm90IGF2YWlsYWJsZSwgdGhlbiBnZXRfY3JjX3RhYmxlKCkgbXVzdAorICBiZSBjYWxsZWQgdG8gaW5pdGlhbGl6ZSB0aGUgdGFibGVzIGFuZCBtdXN0IHJldHVybiBiZWZvcmUgYW55IHRocmVhZHMgYXJlCisgIGFsbG93ZWQgdG8gY29tcHV0ZSBvciBjb21iaW5lIENSQ3MuCisgKi8KKworLyogRGVmaW5pdGlvbiBvZiBvbmNlIGZ1bmN0aW9uYWxpdHkuICovCit0eXBlZGVmIHN0cnVjdCBvbmNlX3Mgb25jZV90OworbG9jYWwgdm9pZCBvbmNlIE9GKChvbmNlX3QgKiwgdm9pZCAoKikodm9pZCkpKTsKKworLyogQ2hlY2sgZm9yIHRoZSBhdmFpbGFiaWxpdHkgb2YgYXRvbWljcy4gKi8KKyNpZiBkZWZpbmVkKF9fU1REQ19fKSAmJiBfX1NURENfVkVSU0lPTl9fID49IDIwMTExMkwgJiYgXAorICAgICFkZWZpbmVkKF9fU1REQ19OT19BVE9NSUNTX18pCisKKyNpbmNsdWRlIDxzdGRhdG9taWMuaD4KKworLyogU3RydWN0dXJlIGZvciBvbmNlKCksIHdoaWNoIG11c3QgYmUgaW5pdGlhbGl6ZWQgd2l0aCBPTkNFX0lOSVQuICovCitzdHJ1Y3Qgb25jZV9zIHsKKyAgICBhdG9taWNfZmxhZyBiZWd1bjsKKyAgICBhdG9taWNfaW50IGRvbmU7Cit9OworI2RlZmluZSBPTkNFX0lOSVQge0FUT01JQ19GTEFHX0lOSVQsIDB9CisKKy8qCisgIFJ1biB0aGUgcHJvdmlkZWQgaW5pdCgpIGZ1bmN0aW9uIGV4YWN0bHkgb25jZSwgZXZlbiBpZiBtdWx0aXBsZSB0aHJlYWRzCisgIGludm9rZSBvbmNlKCkgYXQgdGhlIHNhbWUgdGltZS4gVGhlIHN0YXRlIG11c3QgYmUgYSBvbmNlX3QgaW5pdGlhbGl6ZWQgd2l0aAorICBPTkNFX0lOSVQuCisgKi8KK2xvY2FsIHZvaWQgb25jZShzdGF0ZSwgaW5pdCkKKyAgICBvbmNlX3QgKnN0YXRlOworICAgIHZvaWQgKCppbml0KSh2b2lkKTsKK3sKKyAgICBpZiAoIWF0b21pY19sb2FkKCZzdGF0ZS0+ZG9uZSkpIHsKKyAgICAgICAgaWYgKGF0b21pY19mbGFnX3Rlc3RfYW5kX3NldCgmc3RhdGUtPmJlZ3VuKSkKKyAgICAgICAgICAgIHdoaWxlICghYXRvbWljX2xvYWQoJnN0YXRlLT5kb25lKSkKKyAgICAgICAgICAgICAgICA7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaW5pdCgpOworICAgICAgICAgICAgYXRvbWljX3N0b3JlKCZzdGF0ZS0+ZG9uZSwgMSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKyNlbHNlICAgLyogbm8gYXRvbWljcyAqLworCisvKiBTdHJ1Y3R1cmUgZm9yIG9uY2UoKSwgd2hpY2ggbXVzdCBiZSBpbml0aWFsaXplZCB3aXRoIE9OQ0VfSU5JVC4gKi8KK3N0cnVjdCBvbmNlX3MgeworICAgIHZvbGF0aWxlIGludCBiZWd1bjsKKyAgICB2b2xhdGlsZSBpbnQgZG9uZTsKK307CisjZGVmaW5lIE9OQ0VfSU5JVCB7MCwgMH0KKworLyogVGVzdCBhbmQgc2V0LiBBbGFzLCBub3QgYXRvbWljLCBidXQgdHJpZXMgdG8gbWluaW1pemUgdGhlIHBlcmlvZCBvZgorICAgdnVsbmVyYWJpbGl0eS4gKi8KK2xvY2FsIGludCB0ZXN0X2FuZF9zZXQgT0YoKGludCB2b2xhdGlsZSAqKSk7Citsb2NhbCBpbnQgdGVzdF9hbmRfc2V0KGZsYWcpCisgICAgaW50IHZvbGF0aWxlICpmbGFnOworeworICAgIGludCB3YXM7CisKKyAgICB3YXMgPSAqZmxhZzsKKyAgICAqZmxhZyA9IDE7CisgICAgcmV0dXJuIHdhczsKK30KKworLyogUnVuIHRoZSBwcm92aWRlZCBpbml0KCkgZnVuY3Rpb24gb25jZS4gVGhpcyBpcyBub3QgdGhyZWFkLXNhZmUuICovCitsb2NhbCB2b2lkIG9uY2Uoc3RhdGUsIGluaXQpCisgICAgb25jZV90ICpzdGF0ZTsKKyAgICB2b2lkICgqaW5pdCkodm9pZCk7Cit7CisgICAgaWYgKCFzdGF0ZS0+ZG9uZSkgeworICAgICAgICBpZiAodGVzdF9hbmRfc2V0KCZzdGF0ZS0+YmVndW4pKQorICAgICAgICAgICAgd2hpbGUgKCFzdGF0ZS0+ZG9uZSkKKyAgICAgICAgICAgICAgICA7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaW5pdCgpOworICAgICAgICAgICAgc3RhdGUtPmRvbmUgPSAxOworICAgICAgICB9CisgICAgfQorfQorCisjZW5kaWYKKworLyogU3RhdGUgZm9yIG9uY2UoKS4gKi8KK2xvY2FsIG9uY2VfdCBtYWRlID0gT05DRV9JTklUOworCisvKgorICBHZW5lcmF0ZSB0YWJsZXMgZm9yIGEgYnl0ZS13aXNlIDMyLWJpdCBDUkMgY2FsY3VsYXRpb24gb24gdGhlIHBvbHlub21pYWw6CisgIHheMzIreF4yNit4XjIzK3heMjIreF4xNit4XjEyK3heMTEreF4xMCt4XjgreF43K3heNSt4XjQreF4yK3grMS4KKworICBQb2x5bm9taWFscyBvdmVyIEdGKDIpIGFyZSByZXByZXNlbnRlZCBpbiBiaW5hcnksIG9uZSBiaXQgcGVyIGNvZWZmaWNpZW50LAorICB3aXRoIHRoZSBsb3dlc3QgcG93ZXJzIGluIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdC4gVGhlbiBhZGRpbmcgcG9seW5vbWlhbHMKKyAgaXMganVzdCBleGNsdXNpdmUtb3IsIGFuZCBtdWx0aXBseWluZyBhIHBvbHlub21pYWwgYnkgeCBpcyBhIHJpZ2h0IHNoaWZ0IGJ5CisgIG9uZS4gSWYgd2UgY2FsbCB0aGUgYWJvdmUgcG9seW5vbWlhbCBwLCBhbmQgcmVwcmVzZW50IGEgYnl0ZSBhcyB0aGUKKyAgcG9seW5vbWlhbCBxLCBhbHNvIHdpdGggdGhlIGxvd2VzdCBwb3dlciBpbiB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgKHNvIHRoZQorICBieXRlIDB4YjEgaXMgdGhlIHBvbHlub21pYWwgeF43K3heMyt4XjIrMSksIHRoZW4gdGhlIENSQyBpcyAocSp4XjMyKSBtb2QgcCwKKyAgd2hlcmUgYSBtb2QgYiBtZWFucyB0aGUgcmVtYWluZGVyIGFmdGVyIGRpdmlkaW5nIGEgYnkgYi4KKworICBUaGlzIGNhbGN1bGF0aW9uIGlzIGRvbmUgdXNpbmcgdGhlIHNoaWZ0LXJlZ2lzdGVyIG1ldGhvZCBvZiBtdWx0aXBseWluZyBhbmQKKyAgdGFraW5nIHRoZSByZW1haW5kZXIuIFRoZSByZWdpc3RlciBpcyBpbml0aWFsaXplZCB0byB6ZXJvLCBhbmQgZm9yIGVhY2gKKyAgaW5jb21pbmcgYml0LCB4XjMyIGlzIGFkZGVkIG1vZCBwIHRvIHRoZSByZWdpc3RlciBpZiB0aGUgYml0IGlzIGEgb25lICh3aGVyZQorICB4XjMyIG1vZCBwIGlzIHAreF4zMiA9IHheMjYrLi4uKzEpLCBhbmQgdGhlIHJlZ2lzdGVyIGlzIG11bHRpcGxpZWQgbW9kIHAgYnkgeAorICAod2hpY2ggaXMgc2hpZnRpbmcgcmlnaHQgYnkgb25lIGFuZCBhZGRpbmcgeF4zMiBtb2QgcCBpZiB0aGUgYml0IHNoaWZ0ZWQgb3V0CisgIGlzIGEgb25lKS4gV2Ugc3RhcnQgd2l0aCB0aGUgaGlnaGVzdCBwb3dlciAobGVhc3Qgc2lnbmlmaWNhbnQgYml0KSBvZiBxIGFuZAorICByZXBlYXQgZm9yIGFsbCBlaWdodCBiaXRzIG9mIHEuCisKKyAgVGhlIHRhYmxlIGlzIHNpbXBseSB0aGUgQ1JDIG9mIGFsbCBwb3NzaWJsZSBlaWdodCBiaXQgdmFsdWVzLiBUaGlzIGlzIGFsbCB0aGUKKyAgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGdlbmVyYXRlIENSQ3Mgb24gZGF0YSBhIGJ5dGUgYXQgYSB0aW1lIGZvciBhbGwKKyAgY29tYmluYXRpb25zIG9mIENSQyByZWdpc3RlciB2YWx1ZXMgYW5kIGluY29taW5nIGJ5dGVzLgorICovCisKK2xvY2FsIHZvaWQgbWFrZV9jcmNfdGFibGUoKQoreworICAgIHVuc2lnbmVkIGksIGosIG47CisgICAgel9jcmNfdCBwOworCisgICAgLyogaW5pdGlhbGl6ZSB0aGUgQ1JDIG9mIGJ5dGVzIHRhYmxlcyAqLworICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworICAgICAgICBwID0gaTsKKyAgICAgICAgZm9yIChqID0gMDsgaiA8IDg7IGorKykKKyAgICAgICAgICAgIHAgPSBwICYgMSA/IChwID4+IDEpIF4gUE9MWSA6IHAgPj4gMTsKKyAgICAgICAgY3JjX3RhYmxlW2ldID0gcDsKKyNpZmRlZiBXCisgICAgICAgIGNyY19iaWdfdGFibGVbaV0gPSBieXRlX3N3YXAocCk7CisjZW5kaWYKKyAgICB9CisKKyAgICAvKiBpbml0aWFsaXplIHRoZSB4XjJebiBtb2QgcCh4KSB0YWJsZSAqLworICAgIHAgPSAoel9jcmNfdCkxIDw8IDMwOyAgICAgICAgIC8qIHheMSAqLworICAgIHgybl90YWJsZVswXSA9IHA7CisgICAgZm9yIChuID0gMTsgbiA8IDMyOyBuKyspCisgICAgICAgIHgybl90YWJsZVtuXSA9IHAgPSBtdWx0bW9kcChwLCBwKTsKKworI2lmZGVmIFcKKyAgICAvKiBpbml0aWFsaXplIHRoZSBicmFpZGluZyB0YWJsZXMgLS0gbmVlZHMgeDJuX3RhYmxlW10gKi8KKyAgICBicmFpZChjcmNfYnJhaWRfdGFibGUsIGNyY19icmFpZF9iaWdfdGFibGUsIE4sIFcpOworI2VuZGlmCisKKyNpZmRlZiBNQUtFQ1JDSAorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICBUaGUgY3JjMzIuaCBoZWFkZXIgZmlsZSBjb250YWlucyB0YWJsZXMgZm9yIGJvdGggMzItYml0IGFuZCA2NC1iaXQKKyAgICAgICAgICB6X3dvcmRfdCdzLCBhbmQgc28gcmVxdWlyZXMgYSA2NC1iaXQgdHlwZSBiZSBhdmFpbGFibGUuIEluIHRoYXQgY2FzZSwKKyAgICAgICAgICB6X3dvcmRfdCBtdXN0IGJlIGRlZmluZWQgdG8gYmUgNjQtYml0cy4gVGhpcyBjb2RlIHRoZW4gYWxzbyBnZW5lcmF0ZXMKKyAgICAgICAgICBhbmQgd3JpdGVzIG91dCB0aGUgdGFibGVzIGZvciB0aGUgY2FzZSB0aGF0IHpfd29yZF90IGlzIDMyIGJpdHMuCisgICAgICAgICAqLworI2lmICFkZWZpbmVkKFcpIHx8IFcgIT0gOAorIyAgZXJyb3IgTmVlZCBhIDY0LWJpdCBpbnRlZ2VyIHR5cGUgaW4gb3JkZXIgdG8gZ2VuZXJhdGUgY3JjMzIuaC4KKyNlbmRpZgorICAgICAgICBGSUxFICpvdXQ7CisgICAgICAgIGludCBrLCBuOworICAgICAgICB6X2NyY190IGx0bFs4XVsyNTZdOworICAgICAgICB6X3dvcmRfdCBiaWdbOF1bMjU2XTsKKworICAgICAgICBvdXQgPSBmb3BlbigiY3JjMzIuaCIsICJ3Iik7CisgICAgICAgIGlmIChvdXQgPT0gTlVMTCkgcmV0dXJuOworCisgICAgICAgIC8qIHdyaXRlIG91dCBsaXR0bGUtZW5kaWFuIENSQyB0YWJsZSB0byBjcmMzMi5oICovCisgICAgICAgIGZwcmludGYob3V0LAorICAgICAgICAgICAgIi8qIGNyYzMyLmggLS0gdGFibGVzIGZvciByYXBpZCBDUkMgY2FsY3VsYXRpb25cbiIKKyAgICAgICAgICAgICIgKiBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBjcmMzMi5jXG4gKi9cbiIKKyAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICJsb2NhbCBjb25zdCB6X2NyY190IEZBUiBjcmNfdGFibGVbXSA9IHtcbiIKKyAgICAgICAgICAgICIgICAgIik7CisgICAgICAgIHdyaXRlX3RhYmxlKG91dCwgY3JjX3RhYmxlLCAyNTYpOworICAgICAgICBmcHJpbnRmKG91dCwKKyAgICAgICAgICAgICJ9O1xuIik7CisKKyAgICAgICAgLyogd3JpdGUgb3V0IGJpZy1lbmRpYW4gQ1JDIHRhYmxlIGZvciA2NC1iaXQgel93b3JkX3QgdG8gY3JjMzIuaCAqLworICAgICAgICBmcHJpbnRmKG91dCwKKyAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICIjaWZkZWYgV1xuIgorICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgIiNpZiBXID09IDhcbiIKKyAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICJsb2NhbCBjb25zdCB6X3dvcmRfdCBGQVIgY3JjX2JpZ190YWJsZVtdID0ge1xuIgorICAgICAgICAgICAgIiAgICAiKTsKKyAgICAgICAgd3JpdGVfdGFibGU2NChvdXQsIGNyY19iaWdfdGFibGUsIDI1Nik7CisgICAgICAgIGZwcmludGYob3V0LAorICAgICAgICAgICAgIn07XG4iKTsKKworICAgICAgICAvKiB3cml0ZSBvdXQgYmlnLWVuZGlhbiBDUkMgdGFibGUgZm9yIDMyLWJpdCB6X3dvcmRfdCB0byBjcmMzMi5oICovCisgICAgICAgIGZwcmludGYob3V0LAorICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgIiNlbHNlIC8qIFcgPT0gNCAqL1xuIgorICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgImxvY2FsIGNvbnN0IHpfd29yZF90IEZBUiBjcmNfYmlnX3RhYmxlW10gPSB7XG4iCisgICAgICAgICAgICAiICAgICIpOworICAgICAgICB3cml0ZV90YWJsZTMyaGkob3V0LCBjcmNfYmlnX3RhYmxlLCAyNTYpOworICAgICAgICBmcHJpbnRmKG91dCwKKyAgICAgICAgICAgICJ9O1xuIgorICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgIiNlbmRpZlxuIik7CisKKyAgICAgICAgLyogd3JpdGUgb3V0IGJyYWlkIHRhYmxlcyBmb3IgZWFjaCB2YWx1ZSBvZiBOICovCisgICAgICAgIGZvciAobiA9IDE7IG4gPD0gNjsgbisrKSB7CisgICAgICAgICAgICBmcHJpbnRmKG91dCwKKyAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICIjaWYgTiA9PSAlZFxuIiwgbik7CisKKyAgICAgICAgICAgIC8qIGNvbXB1dGUgYnJhaWQgdGFibGVzIGZvciB0aGlzIE4gYW5kIDY0LWJpdCB3b3JkX3QgKi8KKyAgICAgICAgICAgIGJyYWlkKGx0bCwgYmlnLCBuLCA4KTsKKworICAgICAgICAgICAgLyogd3JpdGUgb3V0IGJyYWlkIHRhYmxlcyBmb3IgNjQtYml0IHpfd29yZF90IHRvIGNyYzMyLmggKi8KKyAgICAgICAgICAgIGZwcmludGYob3V0LAorICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgIiNpZiBXID09IDhcbiIKKyAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICJsb2NhbCBjb25zdCB6X2NyY190IEZBUiBjcmNfYnJhaWRfdGFibGVbXVsyNTZdID0ge1xuIik7CisgICAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgODsgaysrKSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihvdXQsICIgICB7Iik7CisgICAgICAgICAgICAgICAgd3JpdGVfdGFibGUob3V0LCBsdGxba10sIDI1Nik7CisgICAgICAgICAgICAgICAgZnByaW50ZihvdXQsICJ9JXMiLCBrIDwgNyA/ICIsXG4iIDogIiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZnByaW50ZihvdXQsCisgICAgICAgICAgICAifTtcbiIKKyAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICJsb2NhbCBjb25zdCB6X3dvcmRfdCBGQVIgY3JjX2JyYWlkX2JpZ190YWJsZVtdWzI1Nl0gPSB7XG4iKTsKKyAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCA4OyBrKyspIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKG91dCwgIiAgIHsiKTsKKyAgICAgICAgICAgICAgICB3cml0ZV90YWJsZTY0KG91dCwgYmlnW2tdLCAyNTYpOworICAgICAgICAgICAgICAgIGZwcmludGYob3V0LCAifSVzIiwgayA8IDcgPyAiLFxuIiA6ICIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZwcmludGYob3V0LAorICAgICAgICAgICAgIn07XG4iKTsKKworICAgICAgICAgICAgLyogY29tcHV0ZSBicmFpZCB0YWJsZXMgZm9yIHRoaXMgTiBhbmQgMzItYml0IHdvcmRfdCAqLworICAgICAgICAgICAgYnJhaWQobHRsLCBiaWcsIG4sIDQpOworCisgICAgICAgICAgICAvKiB3cml0ZSBvdXQgYnJhaWQgdGFibGVzIGZvciAzMi1iaXQgel93b3JkX3QgdG8gY3JjMzIuaCAqLworICAgICAgICAgICAgZnByaW50ZihvdXQsCisgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAiI2Vsc2UgLyogVyA9PSA0ICovXG4iCisgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAibG9jYWwgY29uc3Qgel9jcmNfdCBGQVIgY3JjX2JyYWlkX3RhYmxlW11bMjU2XSA9IHtcbiIpOworICAgICAgICAgICAgZm9yIChrID0gMDsgayA8IDQ7IGsrKykgeworICAgICAgICAgICAgICAgIGZwcmludGYob3V0LCAiICAgeyIpOworICAgICAgICAgICAgICAgIHdyaXRlX3RhYmxlKG91dCwgbHRsW2tdLCAyNTYpOworICAgICAgICAgICAgICAgIGZwcmludGYob3V0LCAifSVzIiwgayA8IDMgPyAiLFxuIiA6ICIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZwcmludGYob3V0LAorICAgICAgICAgICAgIn07XG4iCisgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAibG9jYWwgY29uc3Qgel93b3JkX3QgRkFSIGNyY19icmFpZF9iaWdfdGFibGVbXVsyNTZdID0ge1xuIik7CisgICAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgNDsgaysrKSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihvdXQsICIgICB7Iik7CisgICAgICAgICAgICAgICAgd3JpdGVfdGFibGUzMmhpKG91dCwgYmlnW2tdLCAyNTYpOworICAgICAgICAgICAgICAgIGZwcmludGYob3V0LCAifSVzIiwgayA8IDMgPyAiLFxuIiA6ICIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZwcmludGYob3V0LAorICAgICAgICAgICAgIn07XG4iCisgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAiI2VuZGlmXG4iCisgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAiI2VuZGlmXG4iKTsKKyAgICAgICAgfQorICAgICAgICBmcHJpbnRmKG91dCwKKyAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICIjZW5kaWZcbiIpOworCisgICAgICAgIC8qIHdyaXRlIG91dCB6ZXJvcyBvcGVyYXRvciB0YWJsZSB0byBjcmMzMi5oICovCisgICAgICAgIGZwcmludGYob3V0LAorICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgImxvY2FsIGNvbnN0IHpfY3JjX3QgRkFSIHgybl90YWJsZVtdID0ge1xuIgorICAgICAgICAgICAgIiAgICAiKTsKKyAgICAgICAgd3JpdGVfdGFibGUob3V0LCB4Mm5fdGFibGUsIDMyKTsKKyAgICAgICAgZnByaW50ZihvdXQsCisgICAgICAgICAgICAifTtcbiIpOworICAgICAgICBmY2xvc2Uob3V0KTsKKyAgICB9CisjZW5kaWYgLyogTUFLRUNSQ0ggKi8KK30KKworI2lmZGVmIE1BS0VDUkNICisKKy8qCisgICBXcml0ZSB0aGUgMzItYml0IHZhbHVlcyBpbiB0YWJsZVswLi5rLTFdIHRvIG91dCwgZml2ZSBwZXIgbGluZSBpbgorICAgaGV4YWRlY2ltYWwgc2VwYXJhdGVkIGJ5IGNvbW1hcy4KKyAqLworbG9jYWwgdm9pZCB3cml0ZV90YWJsZShvdXQsIHRhYmxlLCBrKQorICAgIEZJTEUgKm91dDsKKyAgICBjb25zdCB6X2NyY190IEZBUiAqdGFibGU7CisgICAgaW50IGs7Cit7CisgICAgaW50IG47CisKKyAgICBmb3IgKG4gPSAwOyBuIDwgazsgbisrKQorICAgICAgICBmcHJpbnRmKG91dCwgIiVzMHglMDhseCVzIiwgbiA9PSAwIHx8IG4gJSA1ID8gIiIgOiAiICAgICIsCisgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpKHRhYmxlW25dKSwKKyAgICAgICAgICAgICAgICBuID09IGsgLSAxID8gIiIgOiAobiAlIDUgPT0gNCA/ICIsXG4iIDogIiwgIikpOworfQorCisvKgorICAgV3JpdGUgdGhlIGhpZ2ggMzItYml0cyBvZiBlYWNoIHZhbHVlIGluIHRhYmxlWzAuLmstMV0gdG8gb3V0LCBmaXZlIHBlciBsaW5lCisgICBpbiBoZXhhZGVjaW1hbCBzZXBhcmF0ZWQgYnkgY29tbWFzLgorICovCitsb2NhbCB2b2lkIHdyaXRlX3RhYmxlMzJoaShvdXQsIHRhYmxlLCBrKQorRklMRSAqb3V0OworY29uc3Qgel93b3JkX3QgRkFSICp0YWJsZTsKK2ludCBrOworeworICAgIGludCBuOworCisgICAgZm9yIChuID0gMDsgbiA8IGs7IG4rKykKKyAgICAgICAgZnByaW50ZihvdXQsICIlczB4JTA4bHglcyIsIG4gPT0gMCB8fCBuICUgNSA/ICIiIDogIiAgICAiLAorICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKSh0YWJsZVtuXSA+PiAzMiksCisgICAgICAgICAgICAgICAgbiA9PSBrIC0gMSA/ICIiIDogKG4gJSA1ID09IDQgPyAiLFxuIiA6ICIsICIpKTsKK30KKworLyoKKyAgV3JpdGUgdGhlIDY0LWJpdCB2YWx1ZXMgaW4gdGFibGVbMC4uay0xXSB0byBvdXQsIHRocmVlIHBlciBsaW5lIGluCisgIGhleGFkZWNpbWFsIHNlcGFyYXRlZCBieSBjb21tYXMuIFRoaXMgYXNzdW1lcyB0aGF0IGlmIHRoZXJlIGlzIGEgNjQtYml0CisgIHR5cGUsIHRoZW4gdGhlcmUgaXMgYWxzbyBhIGxvbmcgbG9uZyBpbnRlZ2VyIHR5cGUsIGFuZCBpdCBpcyBhdCBsZWFzdCA2NAorICBiaXRzLiBJZiBub3QsIHRoZW4gdGhlIHR5cGUgY2FzdCBhbmQgZm9ybWF0IHN0cmluZyBjYW4gYmUgYWRqdXN0ZWQKKyAgYWNjb3JkaW5nbHkuCisgKi8KK2xvY2FsIHZvaWQgd3JpdGVfdGFibGU2NChvdXQsIHRhYmxlLCBrKQorICAgIEZJTEUgKm91dDsKKyAgICBjb25zdCB6X3dvcmRfdCBGQVIgKnRhYmxlOworICAgIGludCBrOworeworICAgIGludCBuOworCisgICAgZm9yIChuID0gMDsgbiA8IGs7IG4rKykKKyAgICAgICAgZnByaW50ZihvdXQsICIlczB4JTAxNmxseCVzIiwgbiA9PSAwIHx8IG4gJSAzID8gIiIgOiAiICAgICIsCisgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykodGFibGVbbl0pLAorICAgICAgICAgICAgICAgIG4gPT0gayAtIDEgPyAiIiA6IChuICUgMyA9PSAyID8gIixcbiIgOiAiLCAiKSk7Cit9CisKKy8qIEFjdHVhbGx5IGRvIHRoZSBkZWVkLiAqLworaW50IG1haW4oKQoreworICAgIG1ha2VfY3JjX3RhYmxlKCk7CisgICAgcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBNQUtFQ1JDSCAqLworCisjaWZkZWYgVworLyoKKyAgR2VuZXJhdGUgdGhlIGxpdHRsZSBhbmQgYmlnLWVuZGlhbiBicmFpZCB0YWJsZXMgZm9yIHRoZSBnaXZlbiBuIGFuZCB6X3dvcmRfdAorICBzaXplIHcuIEVhY2ggYXJyYXkgbXVzdCBoYXZlIHJvb20gZm9yIHcgYmxvY2tzIG9mIDI1NiBlbGVtZW50cy4KKyAqLworbG9jYWwgdm9pZCBicmFpZChsdGwsIGJpZywgbiwgdykKKyAgICB6X2NyY190IGx0bFtdWzI1Nl07CisgICAgel93b3JkX3QgYmlnW11bMjU2XTsKKyAgICBpbnQgbjsKKyAgICBpbnQgdzsKK3sKKyAgICBpbnQgazsKKyAgICB6X2NyY190IGksIHAsIHE7CisgICAgZm9yIChrID0gMDsgayA8IHc7IGsrKykgeworICAgICAgICBwID0geDJubW9kcCgobiAqIHcgKyAzIC0gaykgPDwgMywgMCk7CisgICAgICAgIGx0bFtrXVswXSA9IDA7CisgICAgICAgIGJpZ1t3IC0gMSAtIGtdWzBdID0gMDsKKyAgICAgICAgZm9yIChpID0gMTsgaSA8IDI1NjsgaSsrKSB7CisgICAgICAgICAgICBsdGxba11baV0gPSBxID0gbXVsdG1vZHAoaSA8PCAyNCwgcCk7CisgICAgICAgICAgICBiaWdbdyAtIDEgLSBrXVtpXSA9IGJ5dGVfc3dhcChxKTsKKyAgICAgICAgfQorICAgIH0KK30KKyNlbmRpZgorCisjZWxzZSAvKiAhRFlOQU1JQ19DUkNfVEFCTEUgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogVGFibGVzIGZvciBieXRlLXdpc2UgYW5kIGJyYWlkZWQgQ1JDLTMyIGNhbGN1bGF0aW9ucywgYW5kIGEgdGFibGUgb2YgcG93ZXJzCisgKiBvZiB4IGZvciBjb21iaW5pbmcgQ1JDLTMycywgYWxsIG1hZGUgYnkgbWFrZV9jcmNfdGFibGUoKS4KKyAqLworI2luY2x1ZGUgImNyYzMyLmgiCisjZW5kaWYgLyogRFlOQU1JQ19DUkNfVEFCTEUgKi8KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBSb3V0aW5lcyB1c2VkIGZvciBDUkMgY2FsY3VsYXRpb24uIFNvbWUgYXJlIGFsc28gcmVxdWlyZWQgZm9yIHRoZSB0YWJsZQorICogZ2VuZXJhdGlvbiBhYm92ZS4KKyAqLworCisvKgorICBSZXR1cm4gYSh4KSBtdWx0aXBsaWVkIGJ5IGIoeCkgbW9kdWxvIHAoeCksIHdoZXJlIHAoeCkgaXMgdGhlIENSQyBwb2x5bm9taWFsLAorICByZWZsZWN0ZWQuIEZvciBzcGVlZCwgdGhpcyByZXF1aXJlcyB0aGF0IGEgbm90IGJlIHplcm8uCisgKi8KK2xvY2FsIHpfY3JjX3QgbXVsdG1vZHAoYSwgYikKKyAgICB6X2NyY190IGE7CisgICAgel9jcmNfdCBiOworeworICAgIHpfY3JjX3QgbSwgcDsKKworICAgIG0gPSAoel9jcmNfdCkxIDw8IDMxOworICAgIHAgPSAwOworICAgIGZvciAoOzspIHsKKyAgICAgICAgaWYgKGEgJiBtKSB7CisgICAgICAgICAgICBwIF49IGI7CisgICAgICAgICAgICBpZiAoKGEgJiAobSAtIDEpKSA9PSAwKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIG0gPj49IDE7CisgICAgICAgIGIgPSBiICYgMSA/IChiID4+IDEpIF4gUE9MWSA6IGIgPj4gMTsKKyAgICB9CisgICAgcmV0dXJuIHA7Cit9CisKKy8qCisgIFJldHVybiB4XihuICogMl5rKSBtb2R1bG8gcCh4KS4gUmVxdWlyZXMgdGhhdCB4Mm5fdGFibGVbXSBoYXMgYmVlbgorICBpbml0aWFsaXplZC4KKyAqLworbG9jYWwgel9jcmNfdCB4Mm5tb2RwKG4sIGspCisgICAgel9vZmY2NF90IG47CisgICAgdW5zaWduZWQgazsKK3sKKyAgICB6X2NyY190IHA7CisKKyAgICBwID0gKHpfY3JjX3QpMSA8PCAzMTsgICAgICAgICAgIC8qIHheMCA9PSAxICovCisgICAgd2hpbGUgKG4pIHsKKyAgICAgICAgaWYgKG4gJiAxKQorICAgICAgICAgICAgcCA9IG11bHRtb2RwKHgybl90YWJsZVtrICYgMzFdLCBwKTsKKyAgICAgICAgbiA+Pj0gMTsKKyAgICAgICAgaysrOworICAgIH0KKyAgICByZXR1cm4gcDsKK30KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCBieSBhc20gdmVyc2lvbnMgb2YgY3JjMzIoKSwgYW5kIHRvIGZvcmNlIHRoZQorICogZ2VuZXJhdGlvbiBvZiB0aGUgQ1JDIHRhYmxlcyBpbiBhIHRocmVhZGVkIGFwcGxpY2F0aW9uLgorICovCitjb25zdCB6X2NyY190IEZBUiAqIFpFWFBPUlQgZ2V0X2NyY190YWJsZSgpCit7CisjaWZkZWYgRFlOQU1JQ19DUkNfVEFCTEUKKyAgICBvbmNlKCZtYWRlLCBtYWtlX2NyY190YWJsZSk7CisjZW5kaWYgLyogRFlOQU1JQ19DUkNfVEFCTEUgKi8KKyAgICByZXR1cm4gKGNvbnN0IHpfY3JjX3QgRkFSICopY3JjX3RhYmxlOworfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBVc2UgQVJNIG1hY2hpbmUgaW5zdHJ1Y3Rpb25zIGlmIGF2YWlsYWJsZS4gVGhpcyB3aWxsIGNvbXB1dGUgdGhlIENSQyBhYm91dAorICogdGVuIHRpbWVzIGZhc3RlciB0aGFuIHRoZSBicmFpZGVkIGNhbGN1bGF0aW9uLiBUaGlzIGNvZGUgZG9lcyBub3QgY2hlY2sgZm9yCisgKiB0aGUgcHJlc2VuY2Ugb2YgdGhlIENSQyBpbnN0cnVjdGlvbiBhdCBydW4gdGltZS4gX19BUk1fRkVBVFVSRV9DUkMzMiB3aWxsCisgKiBvbmx5IGJlIGRlZmluZWQgaWYgdGhlIGNvbXBpbGF0aW9uIHNwZWNpZmllcyBhbiBBUk0gcHJvY2Vzc29yIGFyY2hpdGVjdHVyZQorICogdGhhdCBoYXMgdGhlIGluc3RydWN0aW9ucy4gRm9yIGV4YW1wbGUsIGNvbXBpbGluZyB3aXRoIC1tYXJjaD1hcm12OC4xLWEgb3IKKyAqIC1tYXJjaD1hcm12OC1hK2NyYywgb3IgLW1hcmNoPW5hdGl2ZSBpZiB0aGUgY29tcGlsZSBtYWNoaW5lIGhhcyB0aGUgY3JjMzIKKyAqIGluc3RydWN0aW9ucy4KKyAqLworI2lmZGVmIEFSTUNSQzMyCisKKy8qCisgICBDb25zdGFudHMgZW1waXJpY2FsbHkgZGV0ZXJtaW5lZCB0byBtYXhpbWl6ZSBzcGVlZC4gVGhlc2UgdmFsdWVzIGFyZSBmcm9tCisgICBtZWFzdXJlbWVudHMgb24gYSBDb3J0ZXgtQTU3LiBZb3VyIG1pbGVhZ2UgbWF5IHZhcnkuCisgKi8KKyNkZWZpbmUgWl9CQVRDSCAzOTkwICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiB3b3JkcyBpbiBhIGJhdGNoICovCisjZGVmaW5lIFpfQkFUQ0hfWkVST1MgMHhhMTBkM2QwYyAgICAvKiBjb21wdXRlZCBmcm9tIFpfQkFUQ0ggPSAzOTkwICovCisjZGVmaW5lIFpfQkFUQ0hfTUlOIDgwMCAgICAgICAgICAgICAvKiBmZXdlc3Qgd29yZHMgaW4gYSBmaW5hbCBiYXRjaCAqLworCit1bnNpZ25lZCBsb25nIFpFWFBPUlQgY3JjMzJfeihjcmMsIGJ1ZiwgbGVuKQorICAgIHVuc2lnbmVkIGxvbmcgY3JjOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgRkFSICpidWY7CisgICAgel9zaXplX3QgbGVuOworeworICAgIHpfY3JjX3QgdmFsOworICAgIHpfd29yZF90IGNyYzEsIGNyYzI7CisgICAgY29uc3Qgel93b3JkX3QgKndvcmQ7CisgICAgel93b3JkX3QgdmFsMCwgdmFsMSwgdmFsMjsKKyAgICB6X3NpemVfdCBsYXN0LCBsYXN0MiwgaTsKKyAgICB6X3NpemVfdCBudW07CisKKyAgICAvKiBSZXR1cm4gaW5pdGlhbCBDUkMsIGlmIHJlcXVlc3RlZC4gKi8KKyAgICBpZiAoYnVmID09IFpfTlVMTCkgcmV0dXJuIDA7CisKKyNpZmRlZiBEWU5BTUlDX0NSQ19UQUJMRQorICAgIG9uY2UoJm1hZGUsIG1ha2VfY3JjX3RhYmxlKTsKKyNlbmRpZiAvKiBEWU5BTUlDX0NSQ19UQUJMRSAqLworCisgICAgLyogUHJlLWNvbmRpdGlvbiB0aGUgQ1JDICovCisgICAgY3JjIF49IDB4ZmZmZmZmZmY7CisKKyAgICAvKiBDb21wdXRlIHRoZSBDUkMgdXAgdG8gYSB3b3JkIGJvdW5kYXJ5LiAqLworICAgIHdoaWxlIChsZW4gJiYgKCh6X3NpemVfdClidWYgJiA3KSAhPSAwKSB7CisgICAgICAgIGxlbi0tOworICAgICAgICB2YWwgPSAqYnVmKys7CisgICAgICAgIF9fYXNtX18gdm9sYXRpbGUoImNyYzMyYiAldzAsICV3MCwgJXcxIiA6ICIrciIoY3JjKSA6ICJyIih2YWwpKTsKKyAgICB9CisKKyAgICAvKiBQcmVwYXJlIHRvIGNvbXB1dGUgdGhlIENSQyBvbiBmdWxsIDY0LWJpdCB3b3JkcyB3b3JkWzAuLm51bS0xXS4gKi8KKyAgICB3b3JkID0gKHpfd29yZF90IGNvbnN0ICopYnVmOworICAgIG51bSA9IGxlbiA+PiAzOworICAgIGxlbiAmPSA3OworCisgICAgLyogRG8gdGhyZWUgaW50ZXJsZWF2ZWQgQ1JDcyB0byByZWFsaXplIHRoZSB0aHJvdWdocHV0IG9mIG9uZSBjcmMzMngKKyAgICAgICBpbnN0cnVjdGlvbiBwZXIgY3ljbGUuIEVhY2ggQ1JDIGlzIGNhbGN1YXRlZCBvbiBaX0JBVENIIHdvcmRzLiBUaGUgdGhyZWUKKyAgICAgICBDUkNzIGFyZSBjb21iaW5lZCBpbnRvIGEgc2luZ2xlIENSQyBhZnRlciBlYWNoIHNldCBvZiBiYXRjaGVzLiAqLworICAgIHdoaWxlIChudW0gPj0gMyAqIFpfQkFUQ0gpIHsKKyAgICAgICAgY3JjMSA9IDA7CisgICAgICAgIGNyYzIgPSAwOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgWl9CQVRDSDsgaSsrKSB7CisgICAgICAgICAgICB2YWwwID0gd29yZFtpXTsKKyAgICAgICAgICAgIHZhbDEgPSB3b3JkW2kgKyBaX0JBVENIXTsKKyAgICAgICAgICAgIHZhbDIgPSB3b3JkW2kgKyAyICogWl9CQVRDSF07CisgICAgICAgICAgICBfX2FzbV9fIHZvbGF0aWxlKCJjcmMzMnggJXcwLCAldzAsICV4MSIgOiAiK3IiKGNyYykgOiAiciIodmFsMCkpOworICAgICAgICAgICAgX19hc21fXyB2b2xhdGlsZSgiY3JjMzJ4ICV3MCwgJXcwLCAleDEiIDogIityIihjcmMxKSA6ICJyIih2YWwxKSk7CisgICAgICAgICAgICBfX2FzbV9fIHZvbGF0aWxlKCJjcmMzMnggJXcwLCAldzAsICV4MSIgOiAiK3IiKGNyYzIpIDogInIiKHZhbDIpKTsKKyAgICAgICAgfQorICAgICAgICB3b3JkICs9IDMgKiBaX0JBVENIOworICAgICAgICBudW0gLT0gMyAqIFpfQkFUQ0g7CisgICAgICAgIGNyYyA9IG11bHRtb2RwKFpfQkFUQ0hfWkVST1MsIGNyYykgXiBjcmMxOworICAgICAgICBjcmMgPSBtdWx0bW9kcChaX0JBVENIX1pFUk9TLCBjcmMpIF4gY3JjMjsKKyAgICB9CisKKyAgICAvKiBEbyBvbmUgbGFzdCBzbWFsbGVyIGJhdGNoIHdpdGggdGhlIHJlbWFpbmluZyB3b3JkcywgaWYgdGhlcmUgYXJlIGVub3VnaAorICAgICAgIHRvIHBheSBmb3IgdGhlIGNvbWJpbmF0aW9uIG9mIENSQ3MuICovCisgICAgbGFzdCA9IG51bSAvIDM7CisgICAgaWYgKGxhc3QgPj0gWl9CQVRDSF9NSU4pIHsKKyAgICAgICAgbGFzdDIgPSBsYXN0IDw8IDE7CisgICAgICAgIGNyYzEgPSAwOworICAgICAgICBjcmMyID0gMDsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGxhc3Q7IGkrKykgeworICAgICAgICAgICAgdmFsMCA9IHdvcmRbaV07CisgICAgICAgICAgICB2YWwxID0gd29yZFtpICsgbGFzdF07CisgICAgICAgICAgICB2YWwyID0gd29yZFtpICsgbGFzdDJdOworICAgICAgICAgICAgX19hc21fXyB2b2xhdGlsZSgiY3JjMzJ4ICV3MCwgJXcwLCAleDEiIDogIityIihjcmMpIDogInIiKHZhbDApKTsKKyAgICAgICAgICAgIF9fYXNtX18gdm9sYXRpbGUoImNyYzMyeCAldzAsICV3MCwgJXgxIiA6ICIrciIoY3JjMSkgOiAiciIodmFsMSkpOworICAgICAgICAgICAgX19hc21fXyB2b2xhdGlsZSgiY3JjMzJ4ICV3MCwgJXcwLCAleDEiIDogIityIihjcmMyKSA6ICJyIih2YWwyKSk7CisgICAgICAgIH0KKyAgICAgICAgd29yZCArPSAzICogbGFzdDsKKyAgICAgICAgbnVtIC09IDMgKiBsYXN0OworICAgICAgICB2YWwgPSB4Mm5tb2RwKGxhc3QsIDYpOworICAgICAgICBjcmMgPSBtdWx0bW9kcCh2YWwsIGNyYykgXiBjcmMxOworICAgICAgICBjcmMgPSBtdWx0bW9kcCh2YWwsIGNyYykgXiBjcmMyOworICAgIH0KKworICAgIC8qIENvbXB1dGUgdGhlIENSQyBvbiBhbnkgcmVtYWluaW5nIHdvcmRzLiAqLworICAgIGZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgeworICAgICAgICB2YWwwID0gd29yZFtpXTsKKyAgICAgICAgX19hc21fXyB2b2xhdGlsZSgiY3JjMzJ4ICV3MCwgJXcwLCAleDEiIDogIityIihjcmMpIDogInIiKHZhbDApKTsKKyAgICB9CisgICAgd29yZCArPSBudW07CisKKyAgICAvKiBDb21wbGV0ZSB0aGUgQ1JDIG9uIGFueSByZW1haW5pbmcgYnl0ZXMuICovCisgICAgYnVmID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgRkFSICopd29yZDsKKyAgICB3aGlsZSAobGVuKSB7CisgICAgICAgIGxlbi0tOworICAgICAgICB2YWwgPSAqYnVmKys7CisgICAgICAgIF9fYXNtX18gdm9sYXRpbGUoImNyYzMyYiAldzAsICV3MCwgJXcxIiA6ICIrciIoY3JjKSA6ICJyIih2YWwpKTsKKyAgICB9CisKKyAgICAvKiBSZXR1cm4gdGhlIENSQywgcG9zdC1jb25kaXRpb25lZC4gKi8KKyAgICByZXR1cm4gY3JjIF4gMHhmZmZmZmZmZjsKK30KKworI2Vsc2UKKworI2lmZGVmIFcKKworLyoKKyAgUmV0dXJuIHRoZSBDUkMgb2YgdGhlIFcgYnl0ZXMgaW4gdGhlIHdvcmRfdCBkYXRhLCB0YWtpbmcgdGhlCisgIGxlYXN0LXNpZ25pZmljYW50IGJ5dGUgb2YgdGhlIHdvcmQgYXMgdGhlIGZpcnN0IGJ5dGUgb2YgZGF0YSwgd2l0aG91dCBhbnkgcHJlCisgIG9yIHBvc3QgY29uZGl0aW9uaW5nLiBUaGlzIGlzIHVzZWQgdG8gY29tYmluZSB0aGUgQ1JDcyBvZiBlYWNoIGJyYWlkLgorICovCitsb2NhbCB6X2NyY190IGNyY193b3JkKGRhdGEpCisgICAgel93b3JkX3QgZGF0YTsKK3sKKyAgICBpbnQgazsKKyAgICBmb3IgKGsgPSAwOyBrIDwgVzsgaysrKQorICAgICAgICBkYXRhID0gKGRhdGEgPj4gOCkgXiBjcmNfdGFibGVbZGF0YSAmIDB4ZmZdOworICAgIHJldHVybiAoel9jcmNfdClkYXRhOworfQorCitsb2NhbCB6X3dvcmRfdCBjcmNfd29yZF9iaWcoZGF0YSkKKyAgICB6X3dvcmRfdCBkYXRhOworeworICAgIGludCBrOworICAgIGZvciAoayA9IDA7IGsgPCBXOyBrKyspCisgICAgICAgIGRhdGEgPSAoZGF0YSA8PCA4KSBeCisgICAgICAgICAgICBjcmNfYmlnX3RhYmxlWyhkYXRhID4+ICgoVyAtIDEpIDw8IDMpKSAmIDB4ZmZdOworICAgIHJldHVybiBkYXRhOworfQorCisjZW5kaWYKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwordW5zaWduZWQgbG9uZyBaRVhQT1JUIGNyYzMyX3ooY3JjLCBidWYsIGxlbikKKyAgICB1bnNpZ25lZCBsb25nIGNyYzsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIEZBUiAqYnVmOworICAgIHpfc2l6ZV90IGxlbjsKK3sKKyAgICAvKiBSZXR1cm4gaW5pdGlhbCBDUkMsIGlmIHJlcXVlc3RlZC4gKi8KKyAgICBpZiAoYnVmID09IFpfTlVMTCkgcmV0dXJuIDA7CisKKyNpZmRlZiBEWU5BTUlDX0NSQ19UQUJMRQorICAgIG9uY2UoJm1hZGUsIG1ha2VfY3JjX3RhYmxlKTsKKyNlbmRpZiAvKiBEWU5BTUlDX0NSQ19UQUJMRSAqLworCisgICAgLyogUHJlLWNvbmRpdGlvbiB0aGUgQ1JDICovCisgICAgY3JjIF49IDB4ZmZmZmZmZmY7CisKKyNpZmRlZiBXCisKKyAgICAvKiBJZiBwcm92aWRlZCBlbm91Z2ggYnl0ZXMsIGRvIGEgYnJhaWRlZCBDUkMgY2FsY3VsYXRpb24uICovCisgICAgaWYgKGxlbiA+PSBOICogVyArIFcgLSAxKSB7CisgICAgICAgIHpfc2l6ZV90IGJsa3M7CisgICAgICAgIHpfd29yZF90IGNvbnN0ICp3b3JkczsKKyAgICAgICAgdW5zaWduZWQgZW5kaWFuOworICAgICAgICBpbnQgazsKKworICAgICAgICAvKiBDb21wdXRlIHRoZSBDUkMgdXAgdG8gYSB6X3dvcmRfdCBib3VuZGFyeS4gKi8KKyAgICAgICAgd2hpbGUgKGxlbiAmJiAoKHpfc2l6ZV90KWJ1ZiAmIChXIC0gMSkpICE9IDApIHsKKyAgICAgICAgICAgIGxlbi0tOworICAgICAgICAgICAgY3JjID0gKGNyYyA+PiA4KSBeIGNyY190YWJsZVsoY3JjIF4gKmJ1ZisrKSAmIDB4ZmZdOworICAgICAgICB9CisKKyAgICAgICAgLyogQ29tcHV0ZSB0aGUgQ1JDIG9uIGFzIG1hbnkgTiB6X3dvcmRfdCBibG9ja3MgYXMgYXJlIGF2YWlsYWJsZS4gKi8KKyAgICAgICAgYmxrcyA9IGxlbiAvIChOICogVyk7CisgICAgICAgIGxlbiAtPSBibGtzICogTiAqIFc7CisgICAgICAgIHdvcmRzID0gKHpfd29yZF90IGNvbnN0ICopYnVmOworCisgICAgICAgIC8qIERvIGVuZGlhbiBjaGVjayBhdCBleGVjdXRpb24gdGltZSBpbnN0ZWFkIG9mIGNvbXBpbGUgdGltZSwgc2luY2UgQVJNCisgICAgICAgICAgIHByb2Nlc3NvcnMgY2FuIGNoYW5nZSB0aGUgZW5kaWFuZXNzIGF0IGV4ZWN1dGlvbiB0aW1lLiBJZiB0aGUKKyAgICAgICAgICAgY29tcGlsZXIga25vd3Mgd2hhdCB0aGUgZW5kaWFuZXNzIHdpbGwgYmUsIGl0IGNhbiBvcHRpbWl6ZSBvdXQgdGhlCisgICAgICAgICAgIGNoZWNrIGFuZCB0aGUgdW51c2VkIGJyYW5jaC4gKi8KKyAgICAgICAgZW5kaWFuID0gMTsKKyAgICAgICAgaWYgKCoodW5zaWduZWQgY2hhciAqKSZlbmRpYW4pIHsKKyAgICAgICAgICAgIC8qIExpdHRsZSBlbmRpYW4uICovCisKKyAgICAgICAgICAgIHpfY3JjX3QgY3JjMDsKKyAgICAgICAgICAgIHpfd29yZF90IHdvcmQwOworI2lmIE4gPiAxCisgICAgICAgICAgICB6X2NyY190IGNyYzE7CisgICAgICAgICAgICB6X3dvcmRfdCB3b3JkMTsKKyNpZiBOID4gMgorICAgICAgICAgICAgel9jcmNfdCBjcmMyOworICAgICAgICAgICAgel93b3JkX3Qgd29yZDI7CisjaWYgTiA+IDMKKyAgICAgICAgICAgIHpfY3JjX3QgY3JjMzsKKyAgICAgICAgICAgIHpfd29yZF90IHdvcmQzOworI2lmIE4gPiA0CisgICAgICAgICAgICB6X2NyY190IGNyYzQ7CisgICAgICAgICAgICB6X3dvcmRfdCB3b3JkNDsKKyNpZiBOID4gNQorICAgICAgICAgICAgel9jcmNfdCBjcmM1OworICAgICAgICAgICAgel93b3JkX3Qgd29yZDU7CisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorCisgICAgICAgICAgICAvKiBJbml0aWFsaXplIHRoZSBDUkMgZm9yIGVhY2ggYnJhaWQuICovCisgICAgICAgICAgICBjcmMwID0gY3JjOworI2lmIE4gPiAxCisgICAgICAgICAgICBjcmMxID0gMDsKKyNpZiBOID4gMgorICAgICAgICAgICAgY3JjMiA9IDA7CisjaWYgTiA+IDMKKyAgICAgICAgICAgIGNyYzMgPSAwOworI2lmIE4gPiA0CisgICAgICAgICAgICBjcmM0ID0gMDsKKyNpZiBOID4gNQorICAgICAgICAgICAgY3JjNSA9IDA7CisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICBQcm9jZXNzIHRoZSBmaXJzdCBibGtzLTEgYmxvY2tzLCBjb21wdXRpbmcgdGhlIENSQ3Mgb24gZWFjaCBicmFpZAorICAgICAgICAgICAgICBpbmRlcGVuZGVudGx5LgorICAgICAgICAgICAgICovCisgICAgICAgICAgICB3aGlsZSAoLS1ibGtzKSB7CisgICAgICAgICAgICAgICAgLyogTG9hZCB0aGUgd29yZCBmb3IgZWFjaCBicmFpZCBpbnRvIHJlZ2lzdGVycy4gKi8KKyAgICAgICAgICAgICAgICB3b3JkMCA9IGNyYzAgXiB3b3Jkc1swXTsKKyNpZiBOID4gMQorICAgICAgICAgICAgICAgIHdvcmQxID0gY3JjMSBeIHdvcmRzWzFdOworI2lmIE4gPiAyCisgICAgICAgICAgICAgICAgd29yZDIgPSBjcmMyIF4gd29yZHNbMl07CisjaWYgTiA+IDMKKyAgICAgICAgICAgICAgICB3b3JkMyA9IGNyYzMgXiB3b3Jkc1szXTsKKyNpZiBOID4gNAorICAgICAgICAgICAgICAgIHdvcmQ0ID0gY3JjNCBeIHdvcmRzWzRdOworI2lmIE4gPiA1CisgICAgICAgICAgICAgICAgd29yZDUgPSBjcmM1IF4gd29yZHNbNV07CisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorICAgICAgICAgICAgICAgIHdvcmRzICs9IE47CisKKyAgICAgICAgICAgICAgICAvKiBDb21wdXRlIGFuZCB1cGRhdGUgdGhlIENSQyBmb3IgZWFjaCB3b3JkLiBUaGUgbG9vcCBzaG91bGQKKyAgICAgICAgICAgICAgICAgICBnZXQgdW5yb2xsZWQuICovCisgICAgICAgICAgICAgICAgY3JjMCA9IGNyY19icmFpZF90YWJsZVswXVt3b3JkMCAmIDB4ZmZdOworI2lmIE4gPiAxCisgICAgICAgICAgICAgICAgY3JjMSA9IGNyY19icmFpZF90YWJsZVswXVt3b3JkMSAmIDB4ZmZdOworI2lmIE4gPiAyCisgICAgICAgICAgICAgICAgY3JjMiA9IGNyY19icmFpZF90YWJsZVswXVt3b3JkMiAmIDB4ZmZdOworI2lmIE4gPiAzCisgICAgICAgICAgICAgICAgY3JjMyA9IGNyY19icmFpZF90YWJsZVswXVt3b3JkMyAmIDB4ZmZdOworI2lmIE4gPiA0CisgICAgICAgICAgICAgICAgY3JjNCA9IGNyY19icmFpZF90YWJsZVswXVt3b3JkNCAmIDB4ZmZdOworI2lmIE4gPiA1CisgICAgICAgICAgICAgICAgY3JjNSA9IGNyY19icmFpZF90YWJsZVswXVt3b3JkNSAmIDB4ZmZdOworI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKyAgICAgICAgICAgICAgICBmb3IgKGsgPSAxOyBrIDwgVzsgaysrKSB7CisgICAgICAgICAgICAgICAgICAgIGNyYzAgXj0gY3JjX2JyYWlkX3RhYmxlW2tdWyh3b3JkMCA+PiAoayA8PCAzKSkgJiAweGZmXTsKKyNpZiBOID4gMQorICAgICAgICAgICAgICAgICAgICBjcmMxIF49IGNyY19icmFpZF90YWJsZVtrXVsod29yZDEgPj4gKGsgPDwgMykpICYgMHhmZl07CisjaWYgTiA+IDIKKyAgICAgICAgICAgICAgICAgICAgY3JjMiBePSBjcmNfYnJhaWRfdGFibGVba11bKHdvcmQyID4+IChrIDw8IDMpKSAmIDB4ZmZdOworI2lmIE4gPiAzCisgICAgICAgICAgICAgICAgICAgIGNyYzMgXj0gY3JjX2JyYWlkX3RhYmxlW2tdWyh3b3JkMyA+PiAoayA8PCAzKSkgJiAweGZmXTsKKyNpZiBOID4gNAorICAgICAgICAgICAgICAgICAgICBjcmM0IF49IGNyY19icmFpZF90YWJsZVtrXVsod29yZDQgPj4gKGsgPDwgMykpICYgMHhmZl07CisjaWYgTiA+IDUKKyAgICAgICAgICAgICAgICAgICAgY3JjNSBePSBjcmNfYnJhaWRfdGFibGVba11bKHdvcmQ1ID4+IChrIDw8IDMpKSAmIDB4ZmZdOworI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgIFByb2Nlc3MgdGhlIGxhc3QgYmxvY2ssIGNvbWJpbmluZyB0aGUgQ1JDcyBvZiB0aGUgTiBicmFpZHMgYXQgdGhlCisgICAgICAgICAgICAgIHNhbWUgdGltZS4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgY3JjID0gY3JjX3dvcmQoY3JjMCBeIHdvcmRzWzBdKTsKKyNpZiBOID4gMQorICAgICAgICAgICAgY3JjID0gY3JjX3dvcmQoY3JjMSBeIHdvcmRzWzFdIF4gY3JjKTsKKyNpZiBOID4gMgorICAgICAgICAgICAgY3JjID0gY3JjX3dvcmQoY3JjMiBeIHdvcmRzWzJdIF4gY3JjKTsKKyNpZiBOID4gMworICAgICAgICAgICAgY3JjID0gY3JjX3dvcmQoY3JjMyBeIHdvcmRzWzNdIF4gY3JjKTsKKyNpZiBOID4gNAorICAgICAgICAgICAgY3JjID0gY3JjX3dvcmQoY3JjNCBeIHdvcmRzWzRdIF4gY3JjKTsKKyNpZiBOID4gNQorICAgICAgICAgICAgY3JjID0gY3JjX3dvcmQoY3JjNSBeIHdvcmRzWzVdIF4gY3JjKTsKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisgICAgICAgICAgICB3b3JkcyArPSBOOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLyogQmlnIGVuZGlhbi4gKi8KKworICAgICAgICAgICAgel93b3JkX3QgY3JjMCwgd29yZDAsIGNvbWI7CisjaWYgTiA+IDEKKyAgICAgICAgICAgIHpfd29yZF90IGNyYzEsIHdvcmQxOworI2lmIE4gPiAyCisgICAgICAgICAgICB6X3dvcmRfdCBjcmMyLCB3b3JkMjsKKyNpZiBOID4gMworICAgICAgICAgICAgel93b3JkX3QgY3JjMywgd29yZDM7CisjaWYgTiA+IDQKKyAgICAgICAgICAgIHpfd29yZF90IGNyYzQsIHdvcmQ0OworI2lmIE4gPiA1CisgICAgICAgICAgICB6X3dvcmRfdCBjcmM1LCB3b3JkNTsKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisKKyAgICAgICAgICAgIC8qIEluaXRpYWxpemUgdGhlIENSQyBmb3IgZWFjaCBicmFpZC4gKi8KKyAgICAgICAgICAgIGNyYzAgPSBieXRlX3N3YXAoY3JjKTsKKyNpZiBOID4gMQorICAgICAgICAgICAgY3JjMSA9IDA7CisjaWYgTiA+IDIKKyAgICAgICAgICAgIGNyYzIgPSAwOworI2lmIE4gPiAzCisgICAgICAgICAgICBjcmMzID0gMDsKKyNpZiBOID4gNAorICAgICAgICAgICAgY3JjNCA9IDA7CisjaWYgTiA+IDUKKyAgICAgICAgICAgIGNyYzUgPSAwOworI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgUHJvY2VzcyB0aGUgZmlyc3QgYmxrcy0xIGJsb2NrcywgY29tcHV0aW5nIHRoZSBDUkNzIG9uIGVhY2ggYnJhaWQKKyAgICAgICAgICAgICAgaW5kZXBlbmRlbnRseS4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgd2hpbGUgKC0tYmxrcykgeworICAgICAgICAgICAgICAgIC8qIExvYWQgdGhlIHdvcmQgZm9yIGVhY2ggYnJhaWQgaW50byByZWdpc3RlcnMuICovCisgICAgICAgICAgICAgICAgd29yZDAgPSBjcmMwIF4gd29yZHNbMF07CisjaWYgTiA+IDEKKyAgICAgICAgICAgICAgICB3b3JkMSA9IGNyYzEgXiB3b3Jkc1sxXTsKKyNpZiBOID4gMgorICAgICAgICAgICAgICAgIHdvcmQyID0gY3JjMiBeIHdvcmRzWzJdOworI2lmIE4gPiAzCisgICAgICAgICAgICAgICAgd29yZDMgPSBjcmMzIF4gd29yZHNbM107CisjaWYgTiA+IDQKKyAgICAgICAgICAgICAgICB3b3JkNCA9IGNyYzQgXiB3b3Jkc1s0XTsKKyNpZiBOID4gNQorICAgICAgICAgICAgICAgIHdvcmQ1ID0gY3JjNSBeIHdvcmRzWzVdOworI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKyAgICAgICAgICAgICAgICB3b3JkcyArPSBOOworCisgICAgICAgICAgICAgICAgLyogQ29tcHV0ZSBhbmQgdXBkYXRlIHRoZSBDUkMgZm9yIGVhY2ggd29yZC4gVGhlIGxvb3Agc2hvdWxkCisgICAgICAgICAgICAgICAgICAgZ2V0IHVucm9sbGVkLiAqLworICAgICAgICAgICAgICAgIGNyYzAgPSBjcmNfYnJhaWRfYmlnX3RhYmxlWzBdW3dvcmQwICYgMHhmZl07CisjaWYgTiA+IDEKKyAgICAgICAgICAgICAgICBjcmMxID0gY3JjX2JyYWlkX2JpZ190YWJsZVswXVt3b3JkMSAmIDB4ZmZdOworI2lmIE4gPiAyCisgICAgICAgICAgICAgICAgY3JjMiA9IGNyY19icmFpZF9iaWdfdGFibGVbMF1bd29yZDIgJiAweGZmXTsKKyNpZiBOID4gMworICAgICAgICAgICAgICAgIGNyYzMgPSBjcmNfYnJhaWRfYmlnX3RhYmxlWzBdW3dvcmQzICYgMHhmZl07CisjaWYgTiA+IDQKKyAgICAgICAgICAgICAgICBjcmM0ID0gY3JjX2JyYWlkX2JpZ190YWJsZVswXVt3b3JkNCAmIDB4ZmZdOworI2lmIE4gPiA1CisgICAgICAgICAgICAgICAgY3JjNSA9IGNyY19icmFpZF9iaWdfdGFibGVbMF1bd29yZDUgJiAweGZmXTsKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisgICAgICAgICAgICAgICAgZm9yIChrID0gMTsgayA8IFc7IGsrKykgeworICAgICAgICAgICAgICAgICAgICBjcmMwIF49IGNyY19icmFpZF9iaWdfdGFibGVba11bKHdvcmQwID4+IChrIDw8IDMpKSAmIDB4ZmZdOworI2lmIE4gPiAxCisgICAgICAgICAgICAgICAgICAgIGNyYzEgXj0gY3JjX2JyYWlkX2JpZ190YWJsZVtrXVsod29yZDEgPj4gKGsgPDwgMykpICYgMHhmZl07CisjaWYgTiA+IDIKKyAgICAgICAgICAgICAgICAgICAgY3JjMiBePSBjcmNfYnJhaWRfYmlnX3RhYmxlW2tdWyh3b3JkMiA+PiAoayA8PCAzKSkgJiAweGZmXTsKKyNpZiBOID4gMworICAgICAgICAgICAgICAgICAgICBjcmMzIF49IGNyY19icmFpZF9iaWdfdGFibGVba11bKHdvcmQzID4+IChrIDw8IDMpKSAmIDB4ZmZdOworI2lmIE4gPiA0CisgICAgICAgICAgICAgICAgICAgIGNyYzQgXj0gY3JjX2JyYWlkX2JpZ190YWJsZVtrXVsod29yZDQgPj4gKGsgPDwgMykpICYgMHhmZl07CisjaWYgTiA+IDUKKyAgICAgICAgICAgICAgICAgICAgY3JjNSBePSBjcmNfYnJhaWRfYmlnX3RhYmxlW2tdWyh3b3JkNSA+PiAoayA8PCAzKSkgJiAweGZmXTsKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICBQcm9jZXNzIHRoZSBsYXN0IGJsb2NrLCBjb21iaW5pbmcgdGhlIENSQ3Mgb2YgdGhlIE4gYnJhaWRzIGF0IHRoZQorICAgICAgICAgICAgICBzYW1lIHRpbWUuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGNvbWIgPSBjcmNfd29yZF9iaWcoY3JjMCBeIHdvcmRzWzBdKTsKKyNpZiBOID4gMQorICAgICAgICAgICAgY29tYiA9IGNyY193b3JkX2JpZyhjcmMxIF4gd29yZHNbMV0gXiBjb21iKTsKKyNpZiBOID4gMgorICAgICAgICAgICAgY29tYiA9IGNyY193b3JkX2JpZyhjcmMyIF4gd29yZHNbMl0gXiBjb21iKTsKKyNpZiBOID4gMworICAgICAgICAgICAgY29tYiA9IGNyY193b3JkX2JpZyhjcmMzIF4gd29yZHNbM10gXiBjb21iKTsKKyNpZiBOID4gNAorICAgICAgICAgICAgY29tYiA9IGNyY193b3JkX2JpZyhjcmM0IF4gd29yZHNbNF0gXiBjb21iKTsKKyNpZiBOID4gNQorICAgICAgICAgICAgY29tYiA9IGNyY193b3JkX2JpZyhjcmM1IF4gd29yZHNbNV0gXiBjb21iKTsKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisgICAgICAgICAgICB3b3JkcyArPSBOOworICAgICAgICAgICAgY3JjID0gYnl0ZV9zd2FwKGNvbWIpOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICBVcGRhdGUgdGhlIHBvaW50ZXIgdG8gdGhlIHJlbWFpbmluZyBieXRlcyB0byBwcm9jZXNzLgorICAgICAgICAgKi8KKyAgICAgICAgYnVmID0gKHVuc2lnbmVkIGNoYXIgY29uc3QgKil3b3JkczsKKyAgICB9CisKKyNlbmRpZiAvKiBXICovCisKKyAgICAvKiBDb21wbGV0ZSB0aGUgY29tcHV0YXRpb24gb2YgdGhlIENSQyBvbiBhbnkgcmVtYWluaW5nIGJ5dGVzLiAqLworICAgIHdoaWxlIChsZW4gPj0gOCkgeworICAgICAgICBsZW4gLT0gODsKKyAgICAgICAgY3JjID0gKGNyYyA+PiA4KSBeIGNyY190YWJsZVsoY3JjIF4gKmJ1ZisrKSAmIDB4ZmZdOworICAgICAgICBjcmMgPSAoY3JjID4+IDgpIF4gY3JjX3RhYmxlWyhjcmMgXiAqYnVmKyspICYgMHhmZl07CisgICAgICAgIGNyYyA9IChjcmMgPj4gOCkgXiBjcmNfdGFibGVbKGNyYyBeICpidWYrKykgJiAweGZmXTsKKyAgICAgICAgY3JjID0gKGNyYyA+PiA4KSBeIGNyY190YWJsZVsoY3JjIF4gKmJ1ZisrKSAmIDB4ZmZdOworICAgICAgICBjcmMgPSAoY3JjID4+IDgpIF4gY3JjX3RhYmxlWyhjcmMgXiAqYnVmKyspICYgMHhmZl07CisgICAgICAgIGNyYyA9IChjcmMgPj4gOCkgXiBjcmNfdGFibGVbKGNyYyBeICpidWYrKykgJiAweGZmXTsKKyAgICAgICAgY3JjID0gKGNyYyA+PiA4KSBeIGNyY190YWJsZVsoY3JjIF4gKmJ1ZisrKSAmIDB4ZmZdOworICAgICAgICBjcmMgPSAoY3JjID4+IDgpIF4gY3JjX3RhYmxlWyhjcmMgXiAqYnVmKyspICYgMHhmZl07CisgICAgfQorICAgIHdoaWxlIChsZW4pIHsKKyAgICAgICAgbGVuLS07CisgICAgICAgIGNyYyA9IChjcmMgPj4gOCkgXiBjcmNfdGFibGVbKGNyYyBeICpidWYrKykgJiAweGZmXTsKKyAgICB9CisKKyAgICAvKiBSZXR1cm4gdGhlIENSQywgcG9zdC1jb25kaXRpb25lZC4gKi8KKyAgICByZXR1cm4gY3JjIF4gMHhmZmZmZmZmZjsKK30KKworI2VuZGlmCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KK3Vuc2lnbmVkIGxvbmcgWkVYUE9SVCBjcmMzMihjcmMsIGJ1ZiwgbGVuKQorICAgIHVuc2lnbmVkIGxvbmcgY3JjOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgRkFSICpidWY7CisgICAgdUludCBsZW47Cit7CisgICAgcmV0dXJuIGNyYzMyX3ooY3JjLCBidWYsIGxlbik7Cit9CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KK3VMb25nIFpFWFBPUlQgY3JjMzJfY29tYmluZTY0KGNyYzEsIGNyYzIsIGxlbjIpCisgICAgdUxvbmcgY3JjMTsKKyAgICB1TG9uZyBjcmMyOworICAgIHpfb2ZmNjRfdCBsZW4yOworeworI2lmZGVmIERZTkFNSUNfQ1JDX1RBQkxFCisgICAgb25jZSgmbWFkZSwgbWFrZV9jcmNfdGFibGUpOworI2VuZGlmIC8qIERZTkFNSUNfQ1JDX1RBQkxFICovCisgICAgcmV0dXJuIG11bHRtb2RwKHgybm1vZHAobGVuMiwgMyksIGNyYzEpIF4gY3JjMjsKK30KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwordUxvbmcgWkVYUE9SVCBjcmMzMl9jb21iaW5lKGNyYzEsIGNyYzIsIGxlbjIpCisgICAgdUxvbmcgY3JjMTsKKyAgICB1TG9uZyBjcmMyOworICAgIHpfb2ZmX3QgbGVuMjsKK3sKKyAgICByZXR1cm4gY3JjMzJfY29tYmluZTY0KGNyYzEsIGNyYzIsIGxlbjIpOworfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCit1TG9uZyBaRVhQT1JUIGNyYzMyX2NvbWJpbmVfZ2VuNjQobGVuMikKKyAgICB6X29mZjY0X3QgbGVuMjsKK3sKKyNpZmRlZiBEWU5BTUlDX0NSQ19UQUJMRQorICAgIG9uY2UoJm1hZGUsIG1ha2VfY3JjX3RhYmxlKTsKKyNlbmRpZiAvKiBEWU5BTUlDX0NSQ19UQUJMRSAqLworICAgIHJldHVybiB4Mm5tb2RwKGxlbjIsIDMpOworfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCit1TG9uZyBaRVhQT1JUIGNyYzMyX2NvbWJpbmVfZ2VuKGxlbjIpCisgICAgel9vZmZfdCBsZW4yOworeworICAgIHJldHVybiBjcmMzMl9jb21iaW5lX2dlbjY0KGxlbjIpOworfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCit1TG9uZyBjcmMzMl9jb21iaW5lX29wKGNyYzEsIGNyYzIsIG9wKQorICAgIHVMb25nIGNyYzE7CisgICAgdUxvbmcgY3JjMjsKKyAgICB1TG9uZyBvcDsKK3sKKyAgICByZXR1cm4gbXVsdG1vZHAob3AsIGNyYzEpIF4gY3JjMjsKK30KZGlmZiAtLWdpdCBhL3NyYy9jcmMzMi5oIGIvc3JjL2NyYzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM3ZGY2OAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jcmMzMi5oCkBAIC0wLDAgKzEsOTQ0NiBAQAorLyogY3JjMzIuaCAtLSB0YWJsZXMgZm9yIHJhcGlkIENSQyBjYWxjdWxhdGlvbgorICogR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgY3JjMzIuYworICovCisKK2xvY2FsIGNvbnN0IHpfY3JjX3QgRkFSIGNyY190YWJsZVtdID0geworICAgIDB4MDAwMDAwMDAsIDB4NzcwNzMwOTYsIDB4ZWUwZTYxMmMsIDB4OTkwOTUxYmEsIDB4MDc2ZGM0MTksCisgICAgMHg3MDZhZjQ4ZiwgMHhlOTYzYTUzNSwgMHg5ZTY0OTVhMywgMHgwZWRiODgzMiwgMHg3OWRjYjhhNCwKKyAgICAweGUwZDVlOTFlLCAweDk3ZDJkOTg4LCAweDA5YjY0YzJiLCAweDdlYjE3Y2JkLCAweGU3YjgyZDA3LAorICAgIDB4OTBiZjFkOTEsIDB4MWRiNzEwNjQsIDB4NmFiMDIwZjIsIDB4ZjNiOTcxNDgsIDB4ODRiZTQxZGUsCisgICAgMHgxYWRhZDQ3ZCwgMHg2ZGRkZTRlYiwgMHhmNGQ0YjU1MSwgMHg4M2QzODVjNywgMHgxMzZjOTg1NiwKKyAgICAweDY0NmJhOGMwLCAweGZkNjJmOTdhLCAweDhhNjVjOWVjLCAweDE0MDE1YzRmLCAweDYzMDY2Y2Q5LAorICAgIDB4ZmEwZjNkNjMsIDB4OGQwODBkZjUsIDB4M2I2ZTIwYzgsIDB4NGM2OTEwNWUsIDB4ZDU2MDQxZTQsCisgICAgMHhhMjY3NzE3MiwgMHgzYzAzZTRkMSwgMHg0YjA0ZDQ0NywgMHhkMjBkODVmZCwgMHhhNTBhYjU2YiwKKyAgICAweDM1YjVhOGZhLCAweDQyYjI5ODZjLCAweGRiYmJjOWQ2LCAweGFjYmNmOTQwLCAweDMyZDg2Y2UzLAorICAgIDB4NDVkZjVjNzUsIDB4ZGNkNjBkY2YsIDB4YWJkMTNkNTksIDB4MjZkOTMwYWMsIDB4NTFkZTAwM2EsCisgICAgMHhjOGQ3NTE4MCwgMHhiZmQwNjExNiwgMHgyMWI0ZjRiNSwgMHg1NmIzYzQyMywgMHhjZmJhOTU5OSwKKyAgICAweGI4YmRhNTBmLCAweDI4MDJiODllLCAweDVmMDU4ODA4LCAweGM2MGNkOWIyLCAweGIxMGJlOTI0LAorICAgIDB4MmY2ZjdjODcsIDB4NTg2ODRjMTEsIDB4YzE2MTFkYWIsIDB4YjY2NjJkM2QsIDB4NzZkYzQxOTAsCisgICAgMHgwMWRiNzEwNiwgMHg5OGQyMjBiYywgMHhlZmQ1MTAyYSwgMHg3MWIxODU4OSwgMHgwNmI2YjUxZiwKKyAgICAweDlmYmZlNGE1LCAweGU4YjhkNDMzLCAweDc4MDdjOWEyLCAweDBmMDBmOTM0LCAweDk2MDlhODhlLAorICAgIDB4ZTEwZTk4MTgsIDB4N2Y2YTBkYmIsIDB4MDg2ZDNkMmQsIDB4OTE2NDZjOTcsIDB4ZTY2MzVjMDEsCisgICAgMHg2YjZiNTFmNCwgMHgxYzZjNjE2MiwgMHg4NTY1MzBkOCwgMHhmMjYyMDA0ZSwgMHg2YzA2OTVlZCwKKyAgICAweDFiMDFhNTdiLCAweDgyMDhmNGMxLCAweGY1MGZjNDU3LCAweDY1YjBkOWM2LCAweDEyYjdlOTUwLAorICAgIDB4OGJiZWI4ZWEsIDB4ZmNiOTg4N2MsIDB4NjJkZDFkZGYsIDB4MTVkYTJkNDksIDB4OGNkMzdjZjMsCisgICAgMHhmYmQ0NGM2NSwgMHg0ZGIyNjE1OCwgMHgzYWI1NTFjZSwgMHhhM2JjMDA3NCwgMHhkNGJiMzBlMiwKKyAgICAweDRhZGZhNTQxLCAweDNkZDg5NWQ3LCAweGE0ZDFjNDZkLCAweGQzZDZmNGZiLCAweDQzNjllOTZhLAorICAgIDB4MzQ2ZWQ5ZmMsIDB4YWQ2Nzg4NDYsIDB4ZGE2MGI4ZDAsIDB4NDQwNDJkNzMsIDB4MzMwMzFkZTUsCisgICAgMHhhYTBhNGM1ZiwgMHhkZDBkN2NjOSwgMHg1MDA1NzEzYywgMHgyNzAyNDFhYSwgMHhiZTBiMTAxMCwKKyAgICAweGM5MGMyMDg2LCAweDU3NjhiNTI1LCAweDIwNmY4NWIzLCAweGI5NjZkNDA5LCAweGNlNjFlNDlmLAorICAgIDB4NWVkZWY5MGUsIDB4MjlkOWM5OTgsIDB4YjBkMDk4MjIsIDB4YzdkN2E4YjQsIDB4NTliMzNkMTcsCisgICAgMHgyZWI0MGQ4MSwgMHhiN2JkNWMzYiwgMHhjMGJhNmNhZCwgMHhlZGI4ODMyMCwgMHg5YWJmYjNiNiwKKyAgICAweDAzYjZlMjBjLCAweDc0YjFkMjlhLCAweGVhZDU0NzM5LCAweDlkZDI3N2FmLCAweDA0ZGIyNjE1LAorICAgIDB4NzNkYzE2ODMsIDB4ZTM2MzBiMTIsIDB4OTQ2NDNiODQsIDB4MGQ2ZDZhM2UsIDB4N2E2YTVhYTgsCisgICAgMHhlNDBlY2YwYiwgMHg5MzA5ZmY5ZCwgMHgwYTAwYWUyNywgMHg3ZDA3OWViMSwgMHhmMDBmOTM0NCwKKyAgICAweDg3MDhhM2QyLCAweDFlMDFmMjY4LCAweDY5MDZjMmZlLCAweGY3NjI1NzVkLCAweDgwNjU2N2NiLAorICAgIDB4MTk2YzM2NzEsIDB4NmU2YjA2ZTcsIDB4ZmVkNDFiNzYsIDB4ODlkMzJiZTAsIDB4MTBkYTdhNWEsCisgICAgMHg2N2RkNGFjYywgMHhmOWI5ZGY2ZiwgMHg4ZWJlZWZmOSwgMHgxN2I3YmU0MywgMHg2MGIwOGVkNSwKKyAgICAweGQ2ZDZhM2U4LCAweGExZDE5MzdlLCAweDM4ZDhjMmM0LCAweDRmZGZmMjUyLCAweGQxYmI2N2YxLAorICAgIDB4YTZiYzU3NjcsIDB4M2ZiNTA2ZGQsIDB4NDhiMjM2NGIsIDB4ZDgwZDJiZGEsIDB4YWYwYTFiNGMsCisgICAgMHgzNjAzNGFmNiwgMHg0MTA0N2E2MCwgMHhkZjYwZWZjMywgMHhhODY3ZGY1NSwgMHgzMTZlOGVlZiwKKyAgICAweDQ2NjliZTc5LCAweGNiNjFiMzhjLCAweGJjNjY4MzFhLCAweDI1NmZkMmEwLCAweDUyNjhlMjM2LAorICAgIDB4Y2MwYzc3OTUsIDB4YmIwYjQ3MDMsIDB4MjIwMjE2YjksIDB4NTUwNTI2MmYsIDB4YzViYTNiYmUsCisgICAgMHhiMmJkMGIyOCwgMHgyYmI0NWE5MiwgMHg1Y2IzNmEwNCwgMHhjMmQ3ZmZhNywgMHhiNWQwY2YzMSwKKyAgICAweDJjZDk5ZThiLCAweDViZGVhZTFkLCAweDliNjRjMmIwLCAweGVjNjNmMjI2LCAweDc1NmFhMzljLAorICAgIDB4MDI2ZDkzMGEsIDB4OWMwOTA2YTksIDB4ZWIwZTM2M2YsIDB4NzIwNzY3ODUsIDB4MDUwMDU3MTMsCisgICAgMHg5NWJmNGE4MiwgMHhlMmI4N2ExNCwgMHg3YmIxMmJhZSwgMHgwY2I2MWIzOCwgMHg5MmQyOGU5YiwKKyAgICAweGU1ZDViZTBkLCAweDdjZGNlZmI3LCAweDBiZGJkZjIxLCAweDg2ZDNkMmQ0LCAweGYxZDRlMjQyLAorICAgIDB4NjhkZGIzZjgsIDB4MWZkYTgzNmUsIDB4ODFiZTE2Y2QsIDB4ZjZiOTI2NWIsIDB4NmZiMDc3ZTEsCisgICAgMHgxOGI3NDc3NywgMHg4ODA4NWFlNiwgMHhmZjBmNmE3MCwgMHg2NjA2M2JjYSwgMHgxMTAxMGI1YywKKyAgICAweDhmNjU5ZWZmLCAweGY4NjJhZTY5LCAweDYxNmJmZmQzLCAweDE2NmNjZjQ1LCAweGEwMGFlMjc4LAorICAgIDB4ZDcwZGQyZWUsIDB4NGUwNDgzNTQsIDB4MzkwM2IzYzIsIDB4YTc2NzI2NjEsIDB4ZDA2MDE2ZjcsCisgICAgMHg0OTY5NDc0ZCwgMHgzZTZlNzdkYiwgMHhhZWQxNmE0YSwgMHhkOWQ2NWFkYywgMHg0MGRmMGI2NiwKKyAgICAweDM3ZDgzYmYwLCAweGE5YmNhZTUzLCAweGRlYmI5ZWM1LCAweDQ3YjJjZjdmLCAweDMwYjVmZmU5LAorICAgIDB4YmRiZGYyMWMsIDB4Y2FiYWMyOGEsIDB4NTNiMzkzMzAsIDB4MjRiNGEzYTYsIDB4YmFkMDM2MDUsCisgICAgMHhjZGQ3MDY5MywgMHg1NGRlNTcyOSwgMHgyM2Q5NjdiZiwgMHhiMzY2N2EyZSwgMHhjNDYxNGFiOCwKKyAgICAweDVkNjgxYjAyLCAweDJhNmYyYjk0LCAweGI0MGJiZTM3LCAweGMzMGM4ZWExLCAweDVhMDVkZjFiLAorICAgIDB4MmQwMmVmOGR9OworCisjaWZkZWYgVworCisjaWYgVyA9PSA4CisKK2xvY2FsIGNvbnN0IHpfd29yZF90IEZBUiBjcmNfYmlnX3RhYmxlW10gPSB7CisgICAgMHgwMDAwMDAwMDAwMDAwMDAwLCAweDk2MzAwNzc3MDAwMDAwMDAsIDB4MmM2MTBlZWUwMDAwMDAwMCwKKyAgICAweGJhNTEwOTk5MDAwMDAwMDAsIDB4MTljNDZkMDcwMDAwMDAwMCwgMHg4ZmY0NmE3MDAwMDAwMDAwLAorICAgIDB4MzVhNTYzZTkwMDAwMDAwMCwgMHhhMzk1NjQ5ZTAwMDAwMDAwLCAweDMyODhkYjBlMDAwMDAwMDAsCisgICAgMHhhNGI4ZGM3OTAwMDAwMDAwLCAweDFlZTlkNWUwMDAwMDAwMDAsIDB4ODhkOWQyOTcwMDAwMDAwMCwKKyAgICAweDJiNGNiNjA5MDAwMDAwMDAsIDB4YmQ3Y2IxN2UwMDAwMDAwMCwgMHgwNzJkYjhlNzAwMDAwMDAwLAorICAgIDB4OTExZGJmOTAwMDAwMDAwMCwgMHg2NDEwYjcxZDAwMDAwMDAwLCAweGYyMjBiMDZhMDAwMDAwMDAsCisgICAgMHg0ODcxYjlmMzAwMDAwMDAwLCAweGRlNDFiZTg0MDAwMDAwMDAsIDB4N2RkNGRhMWEwMDAwMDAwMCwKKyAgICAweGViZTRkZDZkMDAwMDAwMDAsIDB4NTFiNWQ0ZjQwMDAwMDAwMCwgMHhjNzg1ZDM4MzAwMDAwMDAwLAorICAgIDB4NTY5ODZjMTMwMDAwMDAwMCwgMHhjMGE4NmI2NDAwMDAwMDAwLCAweDdhZjk2MmZkMDAwMDAwMDAsCisgICAgMHhlY2M5NjU4YTAwMDAwMDAwLCAweDRmNWMwMTE0MDAwMDAwMDAsIDB4ZDk2YzA2NjMwMDAwMDAwMCwKKyAgICAweDYzM2QwZmZhMDAwMDAwMDAsIDB4ZjUwZDA4OGQwMDAwMDAwMCwgMHhjODIwNmUzYjAwMDAwMDAwLAorICAgIDB4NWUxMDY5NGMwMDAwMDAwMCwgMHhlNDQxNjBkNTAwMDAwMDAwLCAweDcyNzE2N2EyMDAwMDAwMDAsCisgICAgMHhkMWU0MDMzYzAwMDAwMDAwLCAweDQ3ZDQwNDRiMDAwMDAwMDAsIDB4ZmQ4NTBkZDIwMDAwMDAwMCwKKyAgICAweDZiYjUwYWE1MDAwMDAwMDAsIDB4ZmFhOGI1MzUwMDAwMDAwMCwgMHg2Yzk4YjI0MjAwMDAwMDAwLAorICAgIDB4ZDZjOWJiZGIwMDAwMDAwMCwgMHg0MGY5YmNhYzAwMDAwMDAwLCAweGUzNmNkODMyMDAwMDAwMDAsCisgICAgMHg3NTVjZGY0NTAwMDAwMDAwLCAweGNmMGRkNmRjMDAwMDAwMDAsIDB4NTkzZGQxYWIwMDAwMDAwMCwKKyAgICAweGFjMzBkOTI2MDAwMDAwMDAsIDB4M2EwMGRlNTEwMDAwMDAwMCwgMHg4MDUxZDdjODAwMDAwMDAwLAorICAgIDB4MTY2MWQwYmYwMDAwMDAwMCwgMHhiNWY0YjQyMTAwMDAwMDAwLCAweDIzYzRiMzU2MDAwMDAwMDAsCisgICAgMHg5OTk1YmFjZjAwMDAwMDAwLCAweDBmYTViZGI4MDAwMDAwMDAsIDB4OWViODAyMjgwMDAwMDAwMCwKKyAgICAweDA4ODgwNTVmMDAwMDAwMDAsIDB4YjJkOTBjYzYwMDAwMDAwMCwgMHgyNGU5MGJiMTAwMDAwMDAwLAorICAgIDB4ODc3YzZmMmYwMDAwMDAwMCwgMHgxMTRjNjg1ODAwMDAwMDAwLCAweGFiMWQ2MWMxMDAwMDAwMDAsCisgICAgMHgzZDJkNjZiNjAwMDAwMDAwLCAweDkwNDFkYzc2MDAwMDAwMDAsIDB4MDY3MWRiMDEwMDAwMDAwMCwKKyAgICAweGJjMjBkMjk4MDAwMDAwMDAsIDB4MmExMGQ1ZWYwMDAwMDAwMCwgMHg4OTg1YjE3MTAwMDAwMDAwLAorICAgIDB4MWZiNWI2MDYwMDAwMDAwMCwgMHhhNWU0YmY5ZjAwMDAwMDAwLCAweDMzZDRiOGU4MDAwMDAwMDAsCisgICAgMHhhMmM5MDc3ODAwMDAwMDAwLCAweDM0ZjkwMDBmMDAwMDAwMDAsIDB4OGVhODA5OTYwMDAwMDAwMCwKKyAgICAweDE4OTgwZWUxMDAwMDAwMDAsIDB4YmIwZDZhN2YwMDAwMDAwMCwgMHgyZDNkNmQwODAwMDAwMDAwLAorICAgIDB4OTc2YzY0OTEwMDAwMDAwMCwgMHgwMTVjNjNlNjAwMDAwMDAwLCAweGY0NTE2YjZiMDAwMDAwMDAsCisgICAgMHg2MjYxNmMxYzAwMDAwMDAwLCAweGQ4MzA2NTg1MDAwMDAwMDAsIDB4NGUwMDYyZjIwMDAwMDAwMCwKKyAgICAweGVkOTUwNjZjMDAwMDAwMDAsIDB4N2JhNTAxMWIwMDAwMDAwMCwgMHhjMWY0MDg4MjAwMDAwMDAwLAorICAgIDB4NTdjNDBmZjUwMDAwMDAwMCwgMHhjNmQ5YjA2NTAwMDAwMDAwLCAweDUwZTliNzEyMDAwMDAwMDAsCisgICAgMHhlYWI4YmU4YjAwMDAwMDAwLCAweDdjODhiOWZjMDAwMDAwMDAsIDB4ZGYxZGRkNjIwMDAwMDAwMCwKKyAgICAweDQ5MmRkYTE1MDAwMDAwMDAsIDB4ZjM3Y2QzOGMwMDAwMDAwMCwgMHg2NTRjZDRmYjAwMDAwMDAwLAorICAgIDB4NTg2MWIyNGQwMDAwMDAwMCwgMHhjZTUxYjUzYTAwMDAwMDAwLCAweDc0MDBiY2EzMDAwMDAwMDAsCisgICAgMHhlMjMwYmJkNDAwMDAwMDAwLCAweDQxYTVkZjRhMDAwMDAwMDAsIDB4ZDc5NWQ4M2QwMDAwMDAwMCwKKyAgICAweDZkYzRkMWE0MDAwMDAwMDAsIDB4ZmJmNGQ2ZDMwMDAwMDAwMCwgMHg2YWU5Njk0MzAwMDAwMDAwLAorICAgIDB4ZmNkOTZlMzQwMDAwMDAwMCwgMHg0Njg4NjdhZDAwMDAwMDAwLCAweGQwYjg2MGRhMDAwMDAwMDAsCisgICAgMHg3MzJkMDQ0NDAwMDAwMDAwLCAweGU1MWQwMzMzMDAwMDAwMDAsIDB4NWY0YzBhYWEwMDAwMDAwMCwKKyAgICAweGM5N2MwZGRkMDAwMDAwMDAsIDB4M2M3MTA1NTAwMDAwMDAwMCwgMHhhYTQxMDIyNzAwMDAwMDAwLAorICAgIDB4MTAxMDBiYmUwMDAwMDAwMCwgMHg4NjIwMGNjOTAwMDAwMDAwLCAweDI1YjU2ODU3MDAwMDAwMDAsCisgICAgMHhiMzg1NmYyMDAwMDAwMDAwLCAweDA5ZDQ2NmI5MDAwMDAwMDAsIDB4OWZlNDYxY2UwMDAwMDAwMCwKKyAgICAweDBlZjlkZTVlMDAwMDAwMDAsIDB4OThjOWQ5MjkwMDAwMDAwMCwgMHgyMjk4ZDBiMDAwMDAwMDAwLAorICAgIDB4YjRhOGQ3YzcwMDAwMDAwMCwgMHgxNzNkYjM1OTAwMDAwMDAwLCAweDgxMGRiNDJlMDAwMDAwMDAsCisgICAgMHgzYjVjYmRiNzAwMDAwMDAwLCAweGFkNmNiYWMwMDAwMDAwMDAsIDB4MjA4M2I4ZWQwMDAwMDAwMCwKKyAgICAweGI2YjNiZjlhMDAwMDAwMDAsIDB4MGNlMmI2MDMwMDAwMDAwMCwgMHg5YWQyYjE3NDAwMDAwMDAwLAorICAgIDB4Mzk0N2Q1ZWEwMDAwMDAwMCwgMHhhZjc3ZDI5ZDAwMDAwMDAwLCAweDE1MjZkYjA0MDAwMDAwMDAsCisgICAgMHg4MzE2ZGM3MzAwMDAwMDAwLCAweDEyMGI2M2UzMDAwMDAwMDAsIDB4ODQzYjY0OTQwMDAwMDAwMCwKKyAgICAweDNlNmE2ZDBkMDAwMDAwMDAsIDB4YTg1YTZhN2EwMDAwMDAwMCwgMHgwYmNmMGVlNDAwMDAwMDAwLAorICAgIDB4OWRmZjA5OTMwMDAwMDAwMCwgMHgyN2FlMDAwYTAwMDAwMDAwLCAweGIxOWUwNzdkMDAwMDAwMDAsCisgICAgMHg0NDkzMGZmMDAwMDAwMDAwLCAweGQyYTMwODg3MDAwMDAwMDAsIDB4NjhmMjAxMWUwMDAwMDAwMCwKKyAgICAweGZlYzIwNjY5MDAwMDAwMDAsIDB4NWQ1NzYyZjcwMDAwMDAwMCwgMHhjYjY3NjU4MDAwMDAwMDAwLAorICAgIDB4NzEzNjZjMTkwMDAwMDAwMCwgMHhlNzA2NmI2ZTAwMDAwMDAwLCAweDc2MWJkNGZlMDAwMDAwMDAsCisgICAgMHhlMDJiZDM4OTAwMDAwMDAwLCAweDVhN2FkYTEwMDAwMDAwMDAsIDB4Y2M0YWRkNjcwMDAwMDAwMCwKKyAgICAweDZmZGZiOWY5MDAwMDAwMDAsIDB4ZjllZmJlOGUwMDAwMDAwMCwgMHg0M2JlYjcxNzAwMDAwMDAwLAorICAgIDB4ZDU4ZWIwNjAwMDAwMDAwMCwgMHhlOGEzZDZkNjAwMDAwMDAwLCAweDdlOTNkMWExMDAwMDAwMDAsCisgICAgMHhjNGMyZDgzODAwMDAwMDAwLCAweDUyZjJkZjRmMDAwMDAwMDAsIDB4ZjE2N2JiZDEwMDAwMDAwMCwKKyAgICAweDY3NTdiY2E2MDAwMDAwMDAsIDB4ZGQwNmI1M2YwMDAwMDAwMCwgMHg0YjM2YjI0ODAwMDAwMDAwLAorICAgIDB4ZGEyYjBkZDgwMDAwMDAwMCwgMHg0YzFiMGFhZjAwMDAwMDAwLCAweGY2NGEwMzM2MDAwMDAwMDAsCisgICAgMHg2MDdhMDQ0MTAwMDAwMDAwLCAweGMzZWY2MGRmMDAwMDAwMDAsIDB4NTVkZjY3YTgwMDAwMDAwMCwKKyAgICAweGVmOGU2ZTMxMDAwMDAwMDAsIDB4NzliZTY5NDYwMDAwMDAwMCwgMHg4Y2IzNjFjYjAwMDAwMDAwLAorICAgIDB4MWE4MzY2YmMwMDAwMDAwMCwgMHhhMGQyNmYyNTAwMDAwMDAwLCAweDM2ZTI2ODUyMDAwMDAwMDAsCisgICAgMHg5NTc3MGNjYzAwMDAwMDAwLCAweDAzNDcwYmJiMDAwMDAwMDAsIDB4YjkxNjAyMjIwMDAwMDAwMCwKKyAgICAweDJmMjYwNTU1MDAwMDAwMDAsIDB4YmUzYmJhYzUwMDAwMDAwMCwgMHgyODBiYmRiMjAwMDAwMDAwLAorICAgIDB4OTI1YWI0MmIwMDAwMDAwMCwgMHgwNDZhYjM1YzAwMDAwMDAwLCAweGE3ZmZkN2MyMDAwMDAwMDAsCisgICAgMHgzMWNmZDBiNTAwMDAwMDAwLCAweDhiOWVkOTJjMDAwMDAwMDAsIDB4MWRhZWRlNWIwMDAwMDAwMCwKKyAgICAweGIwYzI2NDliMDAwMDAwMDAsIDB4MjZmMjYzZWMwMDAwMDAwMCwgMHg5Y2EzNmE3NTAwMDAwMDAwLAorICAgIDB4MGE5MzZkMDIwMDAwMDAwMCwgMHhhOTA2MDk5YzAwMDAwMDAwLCAweDNmMzYwZWViMDAwMDAwMDAsCisgICAgMHg4NTY3MDc3MjAwMDAwMDAwLCAweDEzNTcwMDA1MDAwMDAwMDAsIDB4ODI0YWJmOTUwMDAwMDAwMCwKKyAgICAweDE0N2FiOGUyMDAwMDAwMDAsIDB4YWUyYmIxN2IwMDAwMDAwMCwgMHgzODFiYjYwYzAwMDAwMDAwLAorICAgIDB4OWI4ZWQyOTIwMDAwMDAwMCwgMHgwZGJlZDVlNTAwMDAwMDAwLCAweGI3ZWZkYzdjMDAwMDAwMDAsCisgICAgMHgyMWRmZGIwYjAwMDAwMDAwLCAweGQ0ZDJkMzg2MDAwMDAwMDAsIDB4NDJlMmQ0ZjEwMDAwMDAwMCwKKyAgICAweGY4YjNkZDY4MDAwMDAwMDAsIDB4NmU4M2RhMWYwMDAwMDAwMCwgMHhjZDE2YmU4MTAwMDAwMDAwLAorICAgIDB4NWIyNmI5ZjYwMDAwMDAwMCwgMHhlMTc3YjA2ZjAwMDAwMDAwLCAweDc3NDdiNzE4MDAwMDAwMDAsCisgICAgMHhlNjVhMDg4ODAwMDAwMDAwLCAweDcwNmEwZmZmMDAwMDAwMDAsIDB4Y2EzYjA2NjYwMDAwMDAwMCwKKyAgICAweDVjMGIwMTExMDAwMDAwMDAsIDB4ZmY5ZTY1OGYwMDAwMDAwMCwgMHg2OWFlNjJmODAwMDAwMDAwLAorICAgIDB4ZDNmZjZiNjEwMDAwMDAwMCwgMHg0NWNmNmMxNjAwMDAwMDAwLCAweDc4ZTIwYWEwMDAwMDAwMDAsCisgICAgMHhlZWQyMGRkNzAwMDAwMDAwLCAweDU0ODMwNDRlMDAwMDAwMDAsIDB4YzJiMzAzMzkwMDAwMDAwMCwKKyAgICAweDYxMjY2N2E3MDAwMDAwMDAsIDB4ZjcxNjYwZDAwMDAwMDAwMCwgMHg0ZDQ3Njk0OTAwMDAwMDAwLAorICAgIDB4ZGI3NzZlM2UwMDAwMDAwMCwgMHg0YTZhZDFhZTAwMDAwMDAwLCAweGRjNWFkNmQ5MDAwMDAwMDAsCisgICAgMHg2NjBiZGY0MDAwMDAwMDAwLCAweGYwM2JkODM3MDAwMDAwMDAsIDB4NTNhZWJjYTkwMDAwMDAwMCwKKyAgICAweGM1OWViYmRlMDAwMDAwMDAsIDB4N2ZjZmIyNDcwMDAwMDAwMCwgMHhlOWZmYjUzMDAwMDAwMDAwLAorICAgIDB4MWNmMmJkYmQwMDAwMDAwMCwgMHg4YWMyYmFjYTAwMDAwMDAwLCAweDMwOTNiMzUzMDAwMDAwMDAsCisgICAgMHhhNmEzYjQyNDAwMDAwMDAwLCAweDA1MzZkMGJhMDAwMDAwMDAsIDB4OTMwNmQ3Y2QwMDAwMDAwMCwKKyAgICAweDI5NTdkZTU0MDAwMDAwMDAsIDB4YmY2N2Q5MjMwMDAwMDAwMCwgMHgyZTdhNjZiMzAwMDAwMDAwLAorICAgIDB4Yjg0YTYxYzQwMDAwMDAwMCwgMHgwMjFiNjg1ZDAwMDAwMDAwLCAweDk0MmI2ZjJhMDAwMDAwMDAsCisgICAgMHgzN2JlMGJiNDAwMDAwMDAwLCAweGExOGUwY2MzMDAwMDAwMDAsIDB4MWJkZjA1NWEwMDAwMDAwMCwKKyAgICAweDhkZWYwMjJkMDAwMDAwMDB9OworCisjZWxzZSAvKiBXID09IDQgKi8KKworbG9jYWwgY29uc3Qgel93b3JkX3QgRkFSIGNyY19iaWdfdGFibGVbXSA9IHsKKyAgICAweDAwMDAwMDAwLCAweDk2MzAwNzc3LCAweDJjNjEwZWVlLCAweGJhNTEwOTk5LCAweDE5YzQ2ZDA3LAorICAgIDB4OGZmNDZhNzAsIDB4MzVhNTYzZTksIDB4YTM5NTY0OWUsIDB4MzI4OGRiMGUsIDB4YTRiOGRjNzksCisgICAgMHgxZWU5ZDVlMCwgMHg4OGQ5ZDI5NywgMHgyYjRjYjYwOSwgMHhiZDdjYjE3ZSwgMHgwNzJkYjhlNywKKyAgICAweDkxMWRiZjkwLCAweDY0MTBiNzFkLCAweGYyMjBiMDZhLCAweDQ4NzFiOWYzLCAweGRlNDFiZTg0LAorICAgIDB4N2RkNGRhMWEsIDB4ZWJlNGRkNmQsIDB4NTFiNWQ0ZjQsIDB4Yzc4NWQzODMsIDB4NTY5ODZjMTMsCisgICAgMHhjMGE4NmI2NCwgMHg3YWY5NjJmZCwgMHhlY2M5NjU4YSwgMHg0ZjVjMDExNCwgMHhkOTZjMDY2MywKKyAgICAweDYzM2QwZmZhLCAweGY1MGQwODhkLCAweGM4MjA2ZTNiLCAweDVlMTA2OTRjLCAweGU0NDE2MGQ1LAorICAgIDB4NzI3MTY3YTIsIDB4ZDFlNDAzM2MsIDB4NDdkNDA0NGIsIDB4ZmQ4NTBkZDIsIDB4NmJiNTBhYTUsCisgICAgMHhmYWE4YjUzNSwgMHg2Yzk4YjI0MiwgMHhkNmM5YmJkYiwgMHg0MGY5YmNhYywgMHhlMzZjZDgzMiwKKyAgICAweDc1NWNkZjQ1LCAweGNmMGRkNmRjLCAweDU5M2RkMWFiLCAweGFjMzBkOTI2LCAweDNhMDBkZTUxLAorICAgIDB4ODA1MWQ3YzgsIDB4MTY2MWQwYmYsIDB4YjVmNGI0MjEsIDB4MjNjNGIzNTYsIDB4OTk5NWJhY2YsCisgICAgMHgwZmE1YmRiOCwgMHg5ZWI4MDIyOCwgMHgwODg4MDU1ZiwgMHhiMmQ5MGNjNiwgMHgyNGU5MGJiMSwKKyAgICAweDg3N2M2ZjJmLCAweDExNGM2ODU4LCAweGFiMWQ2MWMxLCAweDNkMmQ2NmI2LCAweDkwNDFkYzc2LAorICAgIDB4MDY3MWRiMDEsIDB4YmMyMGQyOTgsIDB4MmExMGQ1ZWYsIDB4ODk4NWIxNzEsIDB4MWZiNWI2MDYsCisgICAgMHhhNWU0YmY5ZiwgMHgzM2Q0YjhlOCwgMHhhMmM5MDc3OCwgMHgzNGY5MDAwZiwgMHg4ZWE4MDk5NiwKKyAgICAweDE4OTgwZWUxLCAweGJiMGQ2YTdmLCAweDJkM2Q2ZDA4LCAweDk3NmM2NDkxLCAweDAxNWM2M2U2LAorICAgIDB4ZjQ1MTZiNmIsIDB4NjI2MTZjMWMsIDB4ZDgzMDY1ODUsIDB4NGUwMDYyZjIsIDB4ZWQ5NTA2NmMsCisgICAgMHg3YmE1MDExYiwgMHhjMWY0MDg4MiwgMHg1N2M0MGZmNSwgMHhjNmQ5YjA2NSwgMHg1MGU5YjcxMiwKKyAgICAweGVhYjhiZThiLCAweDdjODhiOWZjLCAweGRmMWRkZDYyLCAweDQ5MmRkYTE1LCAweGYzN2NkMzhjLAorICAgIDB4NjU0Y2Q0ZmIsIDB4NTg2MWIyNGQsIDB4Y2U1MWI1M2EsIDB4NzQwMGJjYTMsIDB4ZTIzMGJiZDQsCisgICAgMHg0MWE1ZGY0YSwgMHhkNzk1ZDgzZCwgMHg2ZGM0ZDFhNCwgMHhmYmY0ZDZkMywgMHg2YWU5Njk0MywKKyAgICAweGZjZDk2ZTM0LCAweDQ2ODg2N2FkLCAweGQwYjg2MGRhLCAweDczMmQwNDQ0LCAweGU1MWQwMzMzLAorICAgIDB4NWY0YzBhYWEsIDB4Yzk3YzBkZGQsIDB4M2M3MTA1NTAsIDB4YWE0MTAyMjcsIDB4MTAxMDBiYmUsCisgICAgMHg4NjIwMGNjOSwgMHgyNWI1Njg1NywgMHhiMzg1NmYyMCwgMHgwOWQ0NjZiOSwgMHg5ZmU0NjFjZSwKKyAgICAweDBlZjlkZTVlLCAweDk4YzlkOTI5LCAweDIyOThkMGIwLCAweGI0YThkN2M3LCAweDE3M2RiMzU5LAorICAgIDB4ODEwZGI0MmUsIDB4M2I1Y2JkYjcsIDB4YWQ2Y2JhYzAsIDB4MjA4M2I4ZWQsIDB4YjZiM2JmOWEsCisgICAgMHgwY2UyYjYwMywgMHg5YWQyYjE3NCwgMHgzOTQ3ZDVlYSwgMHhhZjc3ZDI5ZCwgMHgxNTI2ZGIwNCwKKyAgICAweDgzMTZkYzczLCAweDEyMGI2M2UzLCAweDg0M2I2NDk0LCAweDNlNmE2ZDBkLCAweGE4NWE2YTdhLAorICAgIDB4MGJjZjBlZTQsIDB4OWRmZjA5OTMsIDB4MjdhZTAwMGEsIDB4YjE5ZTA3N2QsIDB4NDQ5MzBmZjAsCisgICAgMHhkMmEzMDg4NywgMHg2OGYyMDExZSwgMHhmZWMyMDY2OSwgMHg1ZDU3NjJmNywgMHhjYjY3NjU4MCwKKyAgICAweDcxMzY2YzE5LCAweGU3MDY2YjZlLCAweDc2MWJkNGZlLCAweGUwMmJkMzg5LCAweDVhN2FkYTEwLAorICAgIDB4Y2M0YWRkNjcsIDB4NmZkZmI5ZjksIDB4ZjllZmJlOGUsIDB4NDNiZWI3MTcsIDB4ZDU4ZWIwNjAsCisgICAgMHhlOGEzZDZkNiwgMHg3ZTkzZDFhMSwgMHhjNGMyZDgzOCwgMHg1MmYyZGY0ZiwgMHhmMTY3YmJkMSwKKyAgICAweDY3NTdiY2E2LCAweGRkMDZiNTNmLCAweDRiMzZiMjQ4LCAweGRhMmIwZGQ4LCAweDRjMWIwYWFmLAorICAgIDB4ZjY0YTAzMzYsIDB4NjA3YTA0NDEsIDB4YzNlZjYwZGYsIDB4NTVkZjY3YTgsIDB4ZWY4ZTZlMzEsCisgICAgMHg3OWJlNjk0NiwgMHg4Y2IzNjFjYiwgMHgxYTgzNjZiYywgMHhhMGQyNmYyNSwgMHgzNmUyNjg1MiwKKyAgICAweDk1NzcwY2NjLCAweDAzNDcwYmJiLCAweGI5MTYwMjIyLCAweDJmMjYwNTU1LCAweGJlM2JiYWM1LAorICAgIDB4MjgwYmJkYjIsIDB4OTI1YWI0MmIsIDB4MDQ2YWIzNWMsIDB4YTdmZmQ3YzIsIDB4MzFjZmQwYjUsCisgICAgMHg4YjllZDkyYywgMHgxZGFlZGU1YiwgMHhiMGMyNjQ5YiwgMHgyNmYyNjNlYywgMHg5Y2EzNmE3NSwKKyAgICAweDBhOTM2ZDAyLCAweGE5MDYwOTljLCAweDNmMzYwZWViLCAweDg1NjcwNzcyLCAweDEzNTcwMDA1LAorICAgIDB4ODI0YWJmOTUsIDB4MTQ3YWI4ZTIsIDB4YWUyYmIxN2IsIDB4MzgxYmI2MGMsIDB4OWI4ZWQyOTIsCisgICAgMHgwZGJlZDVlNSwgMHhiN2VmZGM3YywgMHgyMWRmZGIwYiwgMHhkNGQyZDM4NiwgMHg0MmUyZDRmMSwKKyAgICAweGY4YjNkZDY4LCAweDZlODNkYTFmLCAweGNkMTZiZTgxLCAweDViMjZiOWY2LCAweGUxNzdiMDZmLAorICAgIDB4Nzc0N2I3MTgsIDB4ZTY1YTA4ODgsIDB4NzA2YTBmZmYsIDB4Y2EzYjA2NjYsIDB4NWMwYjAxMTEsCisgICAgMHhmZjllNjU4ZiwgMHg2OWFlNjJmOCwgMHhkM2ZmNmI2MSwgMHg0NWNmNmMxNiwgMHg3OGUyMGFhMCwKKyAgICAweGVlZDIwZGQ3LCAweDU0ODMwNDRlLCAweGMyYjMwMzM5LCAweDYxMjY2N2E3LCAweGY3MTY2MGQwLAorICAgIDB4NGQ0NzY5NDksIDB4ZGI3NzZlM2UsIDB4NGE2YWQxYWUsIDB4ZGM1YWQ2ZDksIDB4NjYwYmRmNDAsCisgICAgMHhmMDNiZDgzNywgMHg1M2FlYmNhOSwgMHhjNTllYmJkZSwgMHg3ZmNmYjI0NywgMHhlOWZmYjUzMCwKKyAgICAweDFjZjJiZGJkLCAweDhhYzJiYWNhLCAweDMwOTNiMzUzLCAweGE2YTNiNDI0LCAweDA1MzZkMGJhLAorICAgIDB4OTMwNmQ3Y2QsIDB4Mjk1N2RlNTQsIDB4YmY2N2Q5MjMsIDB4MmU3YTY2YjMsIDB4Yjg0YTYxYzQsCisgICAgMHgwMjFiNjg1ZCwgMHg5NDJiNmYyYSwgMHgzN2JlMGJiNCwgMHhhMThlMGNjMywgMHgxYmRmMDU1YSwKKyAgICAweDhkZWYwMjJkfTsKKworI2VuZGlmCisKKyNpZiBOID09IDEKKworI2lmIFcgPT0gOAorCitsb2NhbCBjb25zdCB6X2NyY190IEZBUiBjcmNfYnJhaWRfdGFibGVbXVsyNTZdID0geworICAgezB4MDAwMDAwMDAsIDB4Y2NhYTAwOWUsIDB4NDIyNTA3N2QsIDB4OGU4ZjA3ZTMsIDB4ODQ0YTBlZmEsCisgICAgMHg0OGUwMGU2NCwgMHhjNjZmMDk4NywgMHgwYWM1MDkxOSwgMHhkM2U1MWJiNSwgMHgxZjRmMWIyYiwKKyAgICAweDkxYzAxY2M4LCAweDVkNmExYzU2LCAweDU3YWYxNTRmLCAweDliMDUxNWQxLCAweDE1OGExMjMyLAorICAgIDB4ZDkyMDEyYWMsIDB4N2NiYjMxMmIsIDB4YjAxMTMxYjUsIDB4M2U5ZTM2NTYsIDB4ZjIzNDM2YzgsCisgICAgMHhmOGYxM2ZkMSwgMHgzNDViM2Y0ZiwgMHhiYWQ0MzhhYywgMHg3NjdlMzgzMiwgMHhhZjVlMmE5ZSwKKyAgICAweDYzZjQyYTAwLCAweGVkN2IyZGUzLCAweDIxZDEyZDdkLCAweDJiMTQyNDY0LCAweGU3YmUyNGZhLAorICAgIDB4NjkzMTIzMTksIDB4YTU5YjIzODcsIDB4Zjk3NjYyNTYsIDB4MzVkYzYyYzgsIDB4YmI1MzY1MmIsCisgICAgMHg3N2Y5NjViNSwgMHg3ZDNjNmNhYywgMHhiMTk2NmMzMiwgMHgzZjE5NmJkMSwgMHhmM2IzNmI0ZiwKKyAgICAweDJhOTM3OWUzLCAweGU2Mzk3OTdkLCAweDY4YjY3ZTllLCAweGE0MWM3ZTAwLCAweGFlZDk3NzE5LAorICAgIDB4NjI3Mzc3ODcsIDB4ZWNmYzcwNjQsIDB4MjA1NjcwZmEsIDB4ODVjZDUzN2QsIDB4NDk2NzUzZTMsCisgICAgMHhjN2U4NTQwMCwgMHgwYjQyNTQ5ZSwgMHgwMTg3NWQ4NywgMHhjZDJkNWQxOSwgMHg0M2EyNWFmYSwKKyAgICAweDhmMDg1YTY0LCAweDU2Mjg0OGM4LCAweDlhODI0ODU2LCAweDE0MGQ0ZmI1LCAweGQ4YTc0ZjJiLAorICAgIDB4ZDI2MjQ2MzIsIDB4MWVjODQ2YWMsIDB4OTA0NzQxNGYsIDB4NWNlZDQxZDEsIDB4Mjk5ZGMyZWQsCisgICAgMHhlNTM3YzI3MywgMHg2YmI4YzU5MCwgMHhhNzEyYzUwZSwgMHhhZGQ3Y2MxNywgMHg2MTdkY2M4OSwKKyAgICAweGVmZjJjYjZhLCAweDIzNThjYmY0LCAweGZhNzhkOTU4LCAweDM2ZDJkOWM2LCAweGI4NWRkZTI1LAorICAgIDB4NzRmN2RlYmIsIDB4N2UzMmQ3YTIsIDB4YjI5OGQ3M2MsIDB4M2MxN2QwZGYsIDB4ZjBiZGQwNDEsCisgICAgMHg1NTI2ZjNjNiwgMHg5OThjZjM1OCwgMHgxNzAzZjRiYiwgMHhkYmE5ZjQyNSwgMHhkMTZjZmQzYywKKyAgICAweDFkYzZmZGEyLCAweDkzNDlmYTQxLCAweDVmZTNmYWRmLCAweDg2YzNlODczLCAweDRhNjllOGVkLAorICAgIDB4YzRlNmVmMGUsIDB4MDg0Y2VmOTAsIDB4MDI4OWU2ODksIDB4Y2UyM2U2MTcsIDB4NDBhY2UxZjQsCisgICAgMHg4YzA2ZTE2YSwgMHhkMGViYTBiYiwgMHgxYzQxYTAyNSwgMHg5MmNlYTdjNiwgMHg1ZTY0YTc1OCwKKyAgICAweDU0YTFhZTQxLCAweDk4MGJhZWRmLCAweDE2ODRhOTNjLCAweGRhMmVhOWEyLCAweDAzMGViYjBlLAorICAgIDB4Y2ZhNGJiOTAsIDB4NDEyYmJjNzMsIDB4OGQ4MWJjZWQsIDB4ODc0NGI1ZjQsIDB4NGJlZWI1NmEsCisgICAgMHhjNTYxYjI4OSwgMHgwOWNiYjIxNywgMHhhYzUwOTE5MCwgMHg2MGZhOTEwZSwgMHhlZTc1OTZlZCwKKyAgICAweDIyZGY5NjczLCAweDI4MWE5ZjZhLCAweGU0YjA5ZmY0LCAweDZhM2Y5ODE3LCAweGE2OTU5ODg5LAorICAgIDB4N2ZiNThhMjUsIDB4YjMxZjhhYmIsIDB4M2Q5MDhkNTgsIDB4ZjEzYThkYzYsIDB4ZmJmZjg0ZGYsCisgICAgMHgzNzU1ODQ0MSwgMHhiOWRhODNhMiwgMHg3NTcwODMzYywgMHg1MzNiODVkYSwgMHg5ZjkxODU0NCwKKyAgICAweDExMWU4MmE3LCAweGRkYjQ4MjM5LCAweGQ3NzE4YjIwLCAweDFiZGI4YmJlLCAweDk1NTQ4YzVkLAorICAgIDB4NTlmZThjYzMsIDB4ODBkZTllNmYsIDB4NGM3NDllZjEsIDB4YzJmYjk5MTIsIDB4MGU1MTk5OGMsCisgICAgMHgwNDk0OTA5NSwgMHhjODNlOTAwYiwgMHg0NmIxOTdlOCwgMHg4YTFiOTc3NiwgMHgyZjgwYjRmMSwKKyAgICAweGUzMmFiNDZmLCAweDZkYTViMzhjLCAweGExMGZiMzEyLCAweGFiY2FiYTBiLCAweDY3NjBiYTk1LAorICAgIDB4ZTllZmJkNzYsIDB4MjU0NWJkZTgsIDB4ZmM2NWFmNDQsIDB4MzBjZmFmZGEsIDB4YmU0MGE4MzksCisgICAgMHg3MmVhYThhNywgMHg3ODJmYTFiZSwgMHhiNDg1YTEyMCwgMHgzYTBhYTZjMywgMHhmNmEwYTY1ZCwKKyAgICAweGFhNGRlNzhjLCAweDY2ZTdlNzEyLCAweGU4NjhlMGYxLCAweDI0YzJlMDZmLCAweDJlMDdlOTc2LAorICAgIDB4ZTJhZGU5ZTgsIDB4NmMyMmVlMGIsIDB4YTA4OGVlOTUsIDB4NzlhOGZjMzksIDB4YjUwMmZjYTcsCisgICAgMHgzYjhkZmI0NCwgMHhmNzI3ZmJkYSwgMHhmZGUyZjJjMywgMHgzMTQ4ZjI1ZCwgMHhiZmM3ZjViZSwKKyAgICAweDczNmRmNTIwLCAweGQ2ZjZkNmE3LCAweDFhNWNkNjM5LCAweDk0ZDNkMWRhLCAweDU4NzlkMTQ0LAorICAgIDB4NTJiY2Q4NWQsIDB4OWUxNmQ4YzMsIDB4MTA5OWRmMjAsIDB4ZGMzM2RmYmUsIDB4MDUxM2NkMTIsCisgICAgMHhjOWI5Y2Q4YywgMHg0NzM2Y2E2ZiwgMHg4YjljY2FmMSwgMHg4MTU5YzNlOCwgMHg0ZGYzYzM3NiwKKyAgICAweGMzN2NjNDk1LCAweDBmZDZjNDBiLCAweDdhYTY0NzM3LCAweGI2MGM0N2E5LCAweDM4ODM0MDRhLAorICAgIDB4ZjQyOTQwZDQsIDB4ZmVlYzQ5Y2QsIDB4MzI0NjQ5NTMsIDB4YmNjOTRlYjAsIDB4NzA2MzRlMmUsCisgICAgMHhhOTQzNWM4MiwgMHg2NWU5NWMxYywgMHhlYjY2NWJmZiwgMHgyN2NjNWI2MSwgMHgyZDA5NTI3OCwKKyAgICAweGUxYTM1MmU2LCAweDZmMmM1NTA1LCAweGEzODY1NTliLCAweDA2MWQ3NjFjLCAweGNhYjc3NjgyLAorICAgIDB4NDQzODcxNjEsIDB4ODg5MjcxZmYsIDB4ODI1Nzc4ZTYsIDB4NGVmZDc4NzgsIDB4YzA3MjdmOWIsCisgICAgMHgwY2Q4N2YwNSwgMHhkNWY4NmRhOSwgMHgxOTUyNmQzNywgMHg5N2RkNmFkNCwgMHg1Yjc3NmE0YSwKKyAgICAweDUxYjI2MzUzLCAweDlkMTg2M2NkLCAweDEzOTc2NDJlLCAweGRmM2Q2NGIwLCAweDgzZDAyNTYxLAorICAgIDB4NGY3YTI1ZmYsIDB4YzFmNTIyMWMsIDB4MGQ1ZjIyODIsIDB4MDc5YTJiOWIsIDB4Y2IzMDJiMDUsCisgICAgMHg0NWJmMmNlNiwgMHg4OTE1MmM3OCwgMHg1MDM1M2VkNCwgMHg5YzlmM2U0YSwgMHgxMjEwMzlhOSwKKyAgICAweGRlYmEzOTM3LCAweGQ0N2YzMDJlLCAweDE4ZDUzMGIwLCAweDk2NWEzNzUzLCAweDVhZjAzN2NkLAorICAgIDB4ZmY2YjE0NGEsIDB4MzNjMTE0ZDQsIDB4YmQ0ZTEzMzcsIDB4NzFlNDEzYTksIDB4N2IyMTFhYjAsCisgICAgMHhiNzhiMWEyZSwgMHgzOTA0MWRjZCwgMHhmNWFlMWQ1MywgMHgyYzhlMGZmZiwgMHhlMDI0MGY2MSwKKyAgICAweDZlYWIwODgyLCAweGEyMDEwODFjLCAweGE4YzQwMTA1LCAweDY0NmUwMTliLCAweGVhZTEwNjc4LAorICAgIDB4MjY0YjA2ZTZ9LAorICAgezB4MDAwMDAwMDAsIDB4YTY3NzBiYjQsIDB4OTc5ZjExMjksIDB4MzFlODFhOWQsIDB4ZjQ0ZjI0MTMsCisgICAgMHg1MjM4MmZhNywgMHg2M2QwMzUzYSwgMHhjNWE3M2U4ZSwgMHgzM2VmNGU2NywgMHg5NTk4NDVkMywKKyAgICAweGE0NzA1ZjRlLCAweDAyMDc1NGZhLCAweGM3YTA2YTc0LCAweDYxZDc2MWMwLCAweDUwM2Y3YjVkLAorICAgIDB4ZjY0ODcwZTksIDB4NjdkZTljY2UsIDB4YzFhOTk3N2EsIDB4ZjA0MThkZTcsIDB4NTYzNjg2NTMsCisgICAgMHg5MzkxYjhkZCwgMHgzNWU2YjM2OSwgMHgwNDBlYTlmNCwgMHhhMjc5YTI0MCwgMHg1NDMxZDJhOSwKKyAgICAweGYyNDZkOTFkLCAweGMzYWVjMzgwLCAweDY1ZDljODM0LCAweGEwN2VmNmJhLCAweDA2MDlmZDBlLAorICAgIDB4MzdlMWU3OTMsIDB4OTE5NmVjMjcsIDB4Y2ZiZDM5OWMsIDB4NjljYTMyMjgsIDB4NTgyMjI4YjUsCisgICAgMHhmZTU1MjMwMSwgMHgzYmYyMWQ4ZiwgMHg5ZDg1MTYzYiwgMHhhYzZkMGNhNiwgMHgwYTFhMDcxMiwKKyAgICAweGZjNTI3N2ZiLCAweDVhMjU3YzRmLCAweDZiY2Q2NmQyLCAweGNkYmE2ZDY2LCAweDA4MWQ1M2U4LAorICAgIDB4YWU2YTU4NWMsIDB4OWY4MjQyYzEsIDB4MzlmNTQ5NzUsIDB4YTg2M2E1NTIsIDB4MGUxNGFlZTYsCisgICAgMHgzZmZjYjQ3YiwgMHg5OThiYmZjZiwgMHg1YzJjODE0MSwgMHhmYTViOGFmNSwgMHhjYmIzOTA2OCwKKyAgICAweDZkYzQ5YmRjLCAweDliOGNlYjM1LCAweDNkZmJlMDgxLCAweDBjMTNmYTFjLCAweGFhNjRmMWE4LAorICAgIDB4NmZjM2NmMjYsIDB4YzliNGM0OTIsIDB4Zjg1Y2RlMGYsIDB4NWUyYmQ1YmIsIDB4NDQwYjc1NzksCisgICAgMHhlMjdjN2VjZCwgMHhkMzk0NjQ1MCwgMHg3NWUzNmZlNCwgMHhiMDQ0NTE2YSwgMHgxNjMzNWFkZSwKKyAgICAweDI3ZGI0MDQzLCAweDgxYWM0YmY3LCAweDc3ZTQzYjFlLCAweGQxOTMzMGFhLCAweGUwN2IyYTM3LAorICAgIDB4NDYwYzIxODMsIDB4ODNhYjFmMGQsIDB4MjVkYzE0YjksIDB4MTQzNDBlMjQsIDB4YjI0MzA1OTAsCisgICAgMHgyM2Q1ZTliNywgMHg4NWEyZTIwMywgMHhiNDRhZjg5ZSwgMHgxMjNkZjMyYSwgMHhkNzlhY2RhNCwKKyAgICAweDcxZWRjNjEwLCAweDQwMDVkYzhkLCAweGU2NzJkNzM5LCAweDEwM2FhN2QwLCAweGI2NGRhYzY0LAorICAgIDB4ODdhNWI2ZjksIDB4MjFkMmJkNGQsIDB4ZTQ3NTgzYzMsIDB4NDIwMjg4NzcsIDB4NzNlYTkyZWEsCisgICAgMHhkNTlkOTk1ZSwgMHg4YmI2NGNlNSwgMHgyZGMxNDc1MSwgMHgxYzI5NWRjYywgMHhiYTVlNTY3OCwKKyAgICAweDdmZjk2OGY2LCAweGQ5OGU2MzQyLCAweGU4NjY3OWRmLCAweDRlMTE3MjZiLCAweGI4NTkwMjgyLAorICAgIDB4MWUyZTA5MzYsIDB4MmZjNjEzYWIsIDB4ODliMTE4MWYsIDB4NGMxNjI2OTEsIDB4ZWE2MTJkMjUsCisgICAgMHhkYjg5MzdiOCwgMHg3ZGZlM2MwYywgMHhlYzY4ZDAyYiwgMHg0YTFmZGI5ZiwgMHg3YmY3YzEwMiwKKyAgICAweGRkODBjYWI2LCAweDE4MjdmNDM4LCAweGJlNTBmZjhjLCAweDhmYjhlNTExLCAweDI5Y2ZlZWE1LAorICAgIDB4ZGY4NzllNGMsIDB4NzlmMDk1ZjgsIDB4NDgxODhmNjUsIDB4ZWU2Zjg0ZDEsIDB4MmJjOGJhNWYsCisgICAgMHg4ZGJmYjFlYiwgMHhiYzU3YWI3NiwgMHgxYTIwYTBjMiwgMHg4ODE2ZWFmMiwgMHgyZTYxZTE0NiwKKyAgICAweDFmODlmYmRiLCAweGI5ZmVmMDZmLCAweDdjNTljZWUxLCAweGRhMmVjNTU1LCAweGViYzZkZmM4LAorICAgIDB4NGRiMWQ0N2MsIDB4YmJmOWE0OTUsIDB4MWQ4ZWFmMjEsIDB4MmM2NmI1YmMsIDB4OGExMWJlMDgsCisgICAgMHg0ZmI2ODA4NiwgMHhlOWMxOGIzMiwgMHhkODI5OTFhZiwgMHg3ZTVlOWExYiwgMHhlZmM4NzYzYywKKyAgICAweDQ5YmY3ZDg4LCAweDc4NTc2NzE1LCAweGRlMjA2Y2ExLCAweDFiODc1MjJmLCAweGJkZjA1OTliLAorICAgIDB4OGMxODQzMDYsIDB4MmE2ZjQ4YjIsIDB4ZGMyNzM4NWIsIDB4N2E1MDMzZWYsIDB4NGJiODI5NzIsCisgICAgMHhlZGNmMjJjNiwgMHgyODY4MWM0OCwgMHg4ZTFmMTdmYywgMHhiZmY3MGQ2MSwgMHgxOTgwMDZkNSwKKyAgICAweDQ3YWJkMzZlLCAweGUxZGNkOGRhLCAweGQwMzRjMjQ3LCAweDc2NDNjOWYzLCAweGIzZTRmNzdkLAorICAgIDB4MTU5M2ZjYzksIDB4MjQ3YmU2NTQsIDB4ODIwY2VkZTAsIDB4NzQ0NDlkMDksIDB4ZDIzMzk2YmQsCisgICAgMHhlM2RiOGMyMCwgMHg0NWFjODc5NCwgMHg4MDBiYjkxYSwgMHgyNjdjYjJhZSwgMHgxNzk0YTgzMywKKyAgICAweGIxZTNhMzg3LCAweDIwNzU0ZmEwLCAweDg2MDI0NDE0LCAweGI3ZWE1ZTg5LCAweDExOWQ1NTNkLAorICAgIDB4ZDQzYTZiYjMsIDB4NzI0ZDYwMDcsIDB4NDNhNTdhOWEsIDB4ZTVkMjcxMmUsIDB4MTM5YTAxYzcsCisgICAgMHhiNWVkMGE3MywgMHg4NDA1MTBlZSwgMHgyMjcyMWI1YSwgMHhlN2Q1MjVkNCwgMHg0MWEyMmU2MCwKKyAgICAweDcwNGEzNGZkLCAweGQ2M2QzZjQ5LCAweGNjMWQ5ZjhiLCAweDZhNmE5NDNmLCAweDViODI4ZWEyLAorICAgIDB4ZmRmNTg1MTYsIDB4Mzg1MmJiOTgsIDB4OWUyNWIwMmMsIDB4YWZjZGFhYjEsIDB4MDliYWExMDUsCisgICAgMHhmZmYyZDFlYywgMHg1OTg1ZGE1OCwgMHg2ODZkYzBjNSwgMHhjZTFhY2I3MSwgMHgwYmJkZjVmZiwKKyAgICAweGFkY2FmZTRiLCAweDljMjJlNGQ2LCAweDNhNTVlZjYyLCAweGFiYzMwMzQ1LCAweDBkYjQwOGYxLAorICAgIDB4M2M1YzEyNmMsIDB4OWEyYjE5ZDgsIDB4NWY4YzI3NTYsIDB4ZjlmYjJjZTIsIDB4YzgxMzM2N2YsCisgICAgMHg2ZTY0M2RjYiwgMHg5ODJjNGQyMiwgMHgzZTViNDY5NiwgMHgwZmIzNWMwYiwgMHhhOWM0NTdiZiwKKyAgICAweDZjNjM2OTMxLCAweGNhMTQ2Mjg1LCAweGZiZmM3ODE4LCAweDVkOGI3M2FjLCAweDAzYTBhNjE3LAorICAgIDB4YTVkN2FkYTMsIDB4OTQzZmI3M2UsIDB4MzI0OGJjOGEsIDB4ZjdlZjgyMDQsIDB4NTE5ODg5YjAsCisgICAgMHg2MDcwOTMyZCwgMHhjNjA3OTg5OSwgMHgzMDRmZTg3MCwgMHg5NjM4ZTNjNCwgMHhhN2QwZjk1OSwKKyAgICAweDAxYTdmMmVkLCAweGM0MDBjYzYzLCAweDYyNzdjN2Q3LCAweDUzOWZkZDRhLCAweGY1ZThkNmZlLAorICAgIDB4NjQ3ZTNhZDksIDB4YzIwOTMxNmQsIDB4ZjNlMTJiZjAsIDB4NTU5NjIwNDQsIDB4OTAzMTFlY2EsCisgICAgMHgzNjQ2MTU3ZSwgMHgwN2FlMGZlMywgMHhhMWQ5MDQ1NywgMHg1NzkxNzRiZSwgMHhmMWU2N2YwYSwKKyAgICAweGMwMGU2NTk3LCAweDY2Nzk2ZTIzLCAweGEzZGU1MGFkLCAweDA1YTk1YjE5LCAweDM0NDE0MTg0LAorICAgIDB4OTIzNjRhMzB9LAorICAgezB4MDAwMDAwMDAsIDB4Y2I1Y2QzYTUsIDB4NGRjOGExMGIsIDB4ODY5NDcyYWUsIDB4OWI5MTQyMTYsCisgICAgMHg1MGNkOTFiMywgMHhkNjU5ZTMxZCwgMHgxZDA1MzBiOCwgMHhlYzUzODI2ZCwgMHgyNzBmNTFjOCwKKyAgICAweGExOWIyMzY2LCAweDZhYzdmMGMzLCAweDc3YzJjMDdiLCAweGJjOWUxM2RlLCAweDNhMGE2MTcwLAorICAgIDB4ZjE1NmIyZDUsIDB4MDNkNjAyOWIsIDB4Yzg4YWQxM2UsIDB4NGUxZWEzOTAsIDB4ODU0MjcwMzUsCisgICAgMHg5ODQ3NDA4ZCwgMHg1MzFiOTMyOCwgMHhkNThmZTE4NiwgMHgxZWQzMzIyMywgMHhlZjg1ODBmNiwKKyAgICAweDI0ZDk1MzUzLCAweGEyNGQyMWZkLCAweDY5MTFmMjU4LCAweDc0MTRjMmUwLCAweGJmNDgxMTQ1LAorICAgIDB4MzlkYzYzZWIsIDB4ZjI4MGIwNGUsIDB4MDdhYzA1MzYsIDB4Y2NmMGQ2OTMsIDB4NGE2NGE0M2QsCisgICAgMHg4MTM4Nzc5OCwgMHg5YzNkNDcyMCwgMHg1NzYxOTQ4NSwgMHhkMWY1ZTYyYiwgMHgxYWE5MzU4ZSwKKyAgICAweGViZmY4NzViLCAweDIwYTM1NGZlLCAweGE2MzcyNjUwLCAweDZkNmJmNWY1LCAweDcwNmVjNTRkLAorICAgIDB4YmIzMjE2ZTgsIDB4M2RhNjY0NDYsIDB4ZjZmYWI3ZTMsIDB4MDQ3YTA3YWQsIDB4Y2YyNmQ0MDgsCisgICAgMHg0OWIyYTZhNiwgMHg4MmVlNzUwMywgMHg5ZmViNDViYiwgMHg1NGI3OTYxZSwgMHhkMjIzZTRiMCwKKyAgICAweDE5N2YzNzE1LCAweGU4Mjk4NWMwLCAweDIzNzU1NjY1LCAweGE1ZTEyNGNiLCAweDZlYmRmNzZlLAorICAgIDB4NzNiOGM3ZDYsIDB4YjhlNDE0NzMsIDB4M2U3MDY2ZGQsIDB4ZjUyY2I1NzgsIDB4MGY1ODBhNmMsCisgICAgMHhjNDA0ZDljOSwgMHg0MjkwYWI2NywgMHg4OWNjNzhjMiwgMHg5NGM5NDg3YSwgMHg1Zjk1OWJkZiwKKyAgICAweGQ5MDFlOTcxLCAweDEyNWQzYWQ0LCAweGUzMGI4ODAxLCAweDI4NTc1YmE0LCAweGFlYzMyOTBhLAorICAgIDB4NjU5ZmZhYWYsIDB4Nzg5YWNhMTcsIDB4YjNjNjE5YjIsIDB4MzU1MjZiMWMsIDB4ZmUwZWI4YjksCisgICAgMHgwYzhlMDhmNywgMHhjN2QyZGI1MiwgMHg0MTQ2YTlmYywgMHg4YTFhN2E1OSwgMHg5NzFmNGFlMSwKKyAgICAweDVjNDM5OTQ0LCAweGRhZDdlYmVhLCAweDExOGIzODRmLCAweGUwZGQ4YTlhLCAweDJiODE1OTNmLAorICAgIDB4YWQxNTJiOTEsIDB4NjY0OWY4MzQsIDB4N2I0Y2M4OGMsIDB4YjAxMDFiMjksIDB4MzY4NDY5ODcsCisgICAgMHhmZGQ4YmEyMiwgMHgwOGY0MGY1YSwgMHhjM2E4ZGNmZiwgMHg0NTNjYWU1MSwgMHg4ZTYwN2RmNCwKKyAgICAweDkzNjU0ZDRjLCAweDU4Mzk5ZWU5LCAweGRlYWRlYzQ3LCAweDE1ZjEzZmUyLCAweGU0YTc4ZDM3LAorICAgIDB4MmZmYjVlOTIsIDB4YTk2ZjJjM2MsIDB4NjIzM2ZmOTksIDB4N2YzNmNmMjEsIDB4YjQ2YTFjODQsCisgICAgMHgzMmZlNmUyYSwgMHhmOWEyYmQ4ZiwgMHgwYjIyMGRjMSwgMHhjMDdlZGU2NCwgMHg0NmVhYWNjYSwKKyAgICAweDhkYjY3ZjZmLCAweDkwYjM0ZmQ3LCAweDViZWY5YzcyLCAweGRkN2JlZWRjLCAweDE2MjczZDc5LAorICAgIDB4ZTc3MThmYWMsIDB4MmMyZDVjMDksIDB4YWFiOTJlYTcsIDB4NjFlNWZkMDIsIDB4N2NlMGNkYmEsCisgICAgMHhiN2JjMWUxZiwgMHgzMTI4NmNiMSwgMHhmYTc0YmYxNCwgMHgxZWIwMTRkOCwgMHhkNWVjYzc3ZCwKKyAgICAweDUzNzhiNWQzLCAweDk4MjQ2Njc2LCAweDg1MjE1NmNlLCAweDRlN2Q4NTZiLCAweGM4ZTlmN2M1LAorICAgIDB4MDNiNTI0NjAsIDB4ZjJlMzk2YjUsIDB4MzliZjQ1MTAsIDB4YmYyYjM3YmUsIDB4NzQ3N2U0MWIsCisgICAgMHg2OTcyZDRhMywgMHhhMjJlMDcwNiwgMHgyNGJhNzVhOCwgMHhlZmU2YTYwZCwgMHgxZDY2MTY0MywKKyAgICAweGQ2M2FjNWU2LCAweDUwYWViNzQ4LCAweDliZjI2NGVkLCAweDg2Zjc1NDU1LCAweDRkYWI4N2YwLAorICAgIDB4Y2IzZmY1NWUsIDB4MDA2MzI2ZmIsIDB4ZjEzNTk0MmUsIDB4M2E2OTQ3OGIsIDB4YmNmZDM1MjUsCisgICAgMHg3N2ExZTY4MCwgMHg2YWE0ZDYzOCwgMHhhMWY4MDU5ZCwgMHgyNzZjNzczMywgMHhlYzMwYTQ5NiwKKyAgICAweDE5MWMxMWVlLCAweGQyNDBjMjRiLCAweDU0ZDRiMGU1LCAweDlmODg2MzQwLCAweDgyOGQ1M2Y4LAorICAgIDB4NDlkMTgwNWQsIDB4Y2Y0NWYyZjMsIDB4MDQxOTIxNTYsIDB4ZjU0ZjkzODMsIDB4M2UxMzQwMjYsCisgICAgMHhiODg3MzI4OCwgMHg3M2RiZTEyZCwgMHg2ZWRlZDE5NSwgMHhhNTgyMDIzMCwgMHgyMzE2NzA5ZSwKKyAgICAweGU4NGFhMzNiLCAweDFhY2ExMzc1LCAweGQxOTZjMGQwLCAweDU3MDJiMjdlLCAweDljNWU2MWRiLAorICAgIDB4ODE1YjUxNjMsIDB4NGEwNzgyYzYsIDB4Y2M5M2YwNjgsIDB4MDdjZjIzY2QsIDB4ZjY5OTkxMTgsCisgICAgMHgzZGM1NDJiZCwgMHhiYjUxMzAxMywgMHg3MDBkZTNiNiwgMHg2ZDA4ZDMwZSwgMHhhNjU0MDBhYiwKKyAgICAweDIwYzA3MjA1LCAweGViOWNhMWEwLCAweDExZTgxZWI0LCAweGRhYjRjZDExLCAweDVjMjBiZmJmLAorICAgIDB4OTc3YzZjMWEsIDB4OGE3OTVjYTIsIDB4NDEyNThmMDcsIDB4YzdiMWZkYTksIDB4MGNlZDJlMGMsCisgICAgMHhmZGJiOWNkOSwgMHgzNmU3NGY3YywgMHhiMDczM2RkMiwgMHg3YjJmZWU3NywgMHg2NjJhZGVjZiwKKyAgICAweGFkNzYwZDZhLCAweDJiZTI3ZmM0LCAweGUwYmVhYzYxLCAweDEyM2UxYzJmLCAweGQ5NjJjZjhhLAorICAgIDB4NWZmNmJkMjQsIDB4OTRhYTZlODEsIDB4ODlhZjVlMzksIDB4NDJmMzhkOWMsIDB4YzQ2N2ZmMzIsCisgICAgMHgwZjNiMmM5NywgMHhmZTZkOWU0MiwgMHgzNTMxNGRlNywgMHhiM2E1M2Y0OSwgMHg3OGY5ZWNlYywKKyAgICAweDY1ZmNkYzU0LCAweGFlYTAwZmYxLCAweDI4MzQ3ZDVmLCAweGUzNjhhZWZhLCAweDE2NDQxYjgyLAorICAgIDB4ZGQxOGM4MjcsIDB4NWI4Y2JhODksIDB4OTBkMDY5MmMsIDB4OGRkNTU5OTQsIDB4NDY4OThhMzEsCisgICAgMHhjMDFkZjg5ZiwgMHgwYjQxMmIzYSwgMHhmYTE3OTllZiwgMHgzMTRiNGE0YSwgMHhiN2RmMzhlNCwKKyAgICAweDdjODNlYjQxLCAweDYxODZkYmY5LCAweGFhZGEwODVjLCAweDJjNGU3YWYyLCAweGU3MTJhOTU3LAorICAgIDB4MTU5MjE5MTksIDB4ZGVjZWNhYmMsIDB4NTg1YWI4MTIsIDB4OTMwNjZiYjcsIDB4OGUwMzViMGYsCisgICAgMHg0NTVmODhhYSwgMHhjM2NiZmEwNCwgMHgwODk3MjlhMSwgMHhmOWMxOWI3NCwgMHgzMjlkNDhkMSwKKyAgICAweGI0MDkzYTdmLCAweDdmNTVlOWRhLCAweDYyNTBkOTYyLCAweGE5MGMwYWM3LCAweDJmOTg3ODY5LAorICAgIDB4ZTRjNGFiY2N9LAorICAgezB4MDAwMDAwMDAsIDB4M2Q2MDI5YjAsIDB4N2FjMDUzNjAsIDB4NDdhMDdhZDAsIDB4ZjU4MGE2YzAsCisgICAgMHhjOGUwOGY3MCwgMHg4ZjQwZjVhMCwgMHhiMjIwZGMxMCwgMHgzMDcwNGJjMSwgMHgwZDEwNjI3MSwKKyAgICAweDRhYjAxOGExLCAweDc3ZDAzMTExLCAweGM1ZjBlZDAxLCAweGY4OTBjNGIxLCAweGJmMzBiZTYxLAorICAgIDB4ODI1MDk3ZDEsIDB4NjBlMDk3ODIsIDB4NWQ4MGJlMzIsIDB4MWEyMGM0ZTIsIDB4Mjc0MGVkNTIsCisgICAgMHg5NTYwMzE0MiwgMHhhODAwMThmMiwgMHhlZmEwNjIyMiwgMHhkMmMwNGI5MiwgMHg1MDkwZGM0MywKKyAgICAweDZkZjBmNWYzLCAweDJhNTA4ZjIzLCAweDE3MzBhNjkzLCAweGE1MTA3YTgzLCAweDk4NzA1MzMzLAorICAgIDB4ZGZkMDI5ZTMsIDB4ZTJiMDAwNTMsIDB4YzFjMTJmMDQsIDB4ZmNhMTA2YjQsIDB4YmIwMTdjNjQsCisgICAgMHg4NjYxNTVkNCwgMHgzNDQxODljNCwgMHgwOTIxYTA3NCwgMHg0ZTgxZGFhNCwgMHg3M2UxZjMxNCwKKyAgICAweGYxYjE2NGM1LCAweGNjZDE0ZDc1LCAweDhiNzEzN2E1LCAweGI2MTExZTE1LCAweDA0MzFjMjA1LAorICAgIDB4Mzk1MWViYjUsIDB4N2VmMTkxNjUsIDB4NDM5MWI4ZDUsIDB4YTEyMWI4ODYsIDB4OWM0MTkxMzYsCisgICAgMHhkYmUxZWJlNiwgMHhlNjgxYzI1NiwgMHg1NGExMWU0NiwgMHg2OWMxMzdmNiwgMHgyZTYxNGQyNiwKKyAgICAweDEzMDE2NDk2LCAweDkxNTFmMzQ3LCAweGFjMzFkYWY3LCAweGViOTFhMDI3LCAweGQ2ZjE4OTk3LAorICAgIDB4NjRkMTU1ODcsIDB4NTliMTdjMzcsIDB4MWUxMTA2ZTcsIDB4MjM3MTJmNTcsIDB4NThmMzU4NDksCisgICAgMHg2NTkzNzFmOSwgMHgyMjMzMGIyOSwgMHgxZjUzMjI5OSwgMHhhZDczZmU4OSwgMHg5MDEzZDczOSwKKyAgICAweGQ3YjNhZGU5LCAweGVhZDM4NDU5LCAweDY4ODMxMzg4LCAweDU1ZTMzYTM4LCAweDEyNDM0MGU4LAorICAgIDB4MmYyMzY5NTgsIDB4OWQwM2I1NDgsIDB4YTA2MzljZjgsIDB4ZTdjM2U2MjgsIDB4ZGFhM2NmOTgsCisgICAgMHgzODEzY2ZjYiwgMHgwNTczZTY3YiwgMHg0MmQzOWNhYiwgMHg3ZmIzYjUxYiwgMHhjZDkzNjkwYiwKKyAgICAweGYwZjM0MGJiLCAweGI3NTMzYTZiLCAweDhhMzMxM2RiLCAweDA4NjM4NDBhLCAweDM1MDNhZGJhLAorICAgIDB4NzJhM2Q3NmEsIDB4NGZjM2ZlZGEsIDB4ZmRlMzIyY2EsIDB4YzA4MzBiN2EsIDB4ODcyMzcxYWEsCisgICAgMHhiYTQzNTgxYSwgMHg5OTMyNzc0ZCwgMHhhNDUyNWVmZCwgMHhlM2YyMjQyZCwgMHhkZTkyMGQ5ZCwKKyAgICAweDZjYjJkMThkLCAweDUxZDJmODNkLCAweDE2NzI4MmVkLCAweDJiMTJhYjVkLCAweGE5NDIzYzhjLAorICAgIDB4OTQyMjE1M2MsIDB4ZDM4MjZmZWMsIDB4ZWVlMjQ2NWMsIDB4NWNjMjlhNGMsIDB4NjFhMmIzZmMsCisgICAgMHgyNjAyYzkyYywgMHgxYjYyZTA5YywgMHhmOWQyZTBjZiwgMHhjNGIyYzk3ZiwgMHg4MzEyYjNhZiwKKyAgICAweGJlNzI5YTFmLCAweDBjNTI0NjBmLCAweDMxMzI2ZmJmLCAweDc2OTIxNTZmLCAweDRiZjIzY2RmLAorICAgIDB4YzlhMmFiMGUsIDB4ZjRjMjgyYmUsIDB4YjM2MmY4NmUsIDB4OGUwMmQxZGUsIDB4M2MyMjBkY2UsCisgICAgMHgwMTQyMjQ3ZSwgMHg0NmUyNWVhZSwgMHg3YjgyNzcxZSwgMHhiMWU2YjA5MiwgMHg4Yzg2OTkyMiwKKyAgICAweGNiMjZlM2YyLCAweGY2NDZjYTQyLCAweDQ0NjYxNjUyLCAweDc5MDYzZmUyLCAweDNlYTY0NTMyLAorICAgIDB4MDNjNjZjODIsIDB4ODE5NmZiNTMsIDB4YmNmNmQyZTMsIDB4ZmI1NmE4MzMsIDB4YzYzNjgxODMsCisgICAgMHg3NDE2NWQ5MywgMHg0OTc2NzQyMywgMHgwZWQ2MGVmMywgMHgzM2I2Mjc0MywgMHhkMTA2MjcxMCwKKyAgICAweGVjNjYwZWEwLCAweGFiYzY3NDcwLCAweDk2YTY1ZGMwLCAweDI0ODY4MWQwLCAweDE5ZTZhODYwLAorICAgIDB4NWU0NmQyYjAsIDB4NjMyNmZiMDAsIDB4ZTE3NjZjZDEsIDB4ZGMxNjQ1NjEsIDB4OWJiNjNmYjEsCisgICAgMHhhNmQ2MTYwMSwgMHgxNGY2Y2ExMSwgMHgyOTk2ZTNhMSwgMHg2ZTM2OTk3MSwgMHg1MzU2YjBjMSwKKyAgICAweDcwMjc5Zjk2LCAweDRkNDdiNjI2LCAweDBhZTdjY2Y2LCAweDM3ODdlNTQ2LCAweDg1YTczOTU2LAorICAgIDB4YjhjNzEwZTYsIDB4ZmY2NzZhMzYsIDB4YzIwNzQzODYsIDB4NDA1N2Q0NTcsIDB4N2QzN2ZkZTcsCisgICAgMHgzYTk3ODczNywgMHgwN2Y3YWU4NywgMHhiNWQ3NzI5NywgMHg4OGI3NWIyNywgMHhjZjE3MjFmNywKKyAgICAweGYyNzcwODQ3LCAweDEwYzcwODE0LCAweDJkYTcyMWE0LCAweDZhMDc1Yjc0LCAweDU3Njc3MmM0LAorICAgIDB4ZTU0N2FlZDQsIDB4ZDgyNzg3NjQsIDB4OWY4N2ZkYjQsIDB4YTJlN2Q0MDQsIDB4MjBiNzQzZDUsCisgICAgMHgxZGQ3NmE2NSwgMHg1YTc3MTBiNSwgMHg2NzE3MzkwNSwgMHhkNTM3ZTUxNSwgMHhlODU3Y2NhNSwKKyAgICAweGFmZjdiNjc1LCAweDkyOTc5ZmM1LCAweGU5MTVlOGRiLCAweGQ0NzVjMTZiLCAweDkzZDViYmJiLAorICAgIDB4YWViNTkyMGIsIDB4MWM5NTRlMWIsIDB4MjFmNTY3YWIsIDB4NjY1NTFkN2IsIDB4NWIzNTM0Y2IsCisgICAgMHhkOTY1YTMxYSwgMHhlNDA1OGFhYSwgMHhhM2E1ZjA3YSwgMHg5ZWM1ZDljYSwgMHgyY2U1MDVkYSwKKyAgICAweDExODUyYzZhLCAweDU2MjU1NmJhLCAweDZiNDU3ZjBhLCAweDg5ZjU3ZjU5LCAweGI0OTU1NmU5LAorICAgIDB4ZjMzNTJjMzksIDB4Y2U1NTA1ODksIDB4N2M3NWQ5OTksIDB4NDExNWYwMjksIDB4MDZiNThhZjksCisgICAgMHgzYmQ1YTM0OSwgMHhiOTg1MzQ5OCwgMHg4NGU1MWQyOCwgMHhjMzQ1NjdmOCwgMHhmZTI1NGU0OCwKKyAgICAweDRjMDU5MjU4LCAweDcxNjViYmU4LCAweDM2YzVjMTM4LCAweDBiYTVlODg4LCAweDI4ZDRjN2RmLAorICAgIDB4MTViNGVlNmYsIDB4NTIxNDk0YmYsIDB4NmY3NGJkMGYsIDB4ZGQ1NDYxMWYsIDB4ZTAzNDQ4YWYsCisgICAgMHhhNzk0MzI3ZiwgMHg5YWY0MWJjZiwgMHgxOGE0OGMxZSwgMHgyNWM0YTVhZSwgMHg2MjY0ZGY3ZSwKKyAgICAweDVmMDRmNmNlLCAweGVkMjQyYWRlLCAweGQwNDQwMzZlLCAweDk3ZTQ3OWJlLCAweGFhODQ1MDBlLAorICAgIDB4NDgzNDUwNWQsIDB4NzU1NDc5ZWQsIDB4MzJmNDAzM2QsIDB4MGY5NDJhOGQsIDB4YmRiNGY2OWQsCisgICAgMHg4MGQ0ZGYyZCwgMHhjNzc0YTVmZCwgMHhmYTE0OGM0ZCwgMHg3ODQ0MWI5YywgMHg0NTI0MzIyYywKKyAgICAweDAyODQ0OGZjLCAweDNmZTQ2MTRjLCAweDhkYzRiZDVjLCAweGIwYTQ5NGVjLCAweGY3MDRlZTNjLAorICAgIDB4Y2E2NGM3OGN9LAorICAgezB4MDAwMDAwMDAsIDB4YjhiYzY3NjUsIDB4YWEwOWM4OGIsIDB4MTJiNWFmZWUsIDB4OGY2Mjk3NTcsCisgICAgMHgzN2RlZjAzMiwgMHgyNTZiNWZkYywgMHg5ZGQ3MzhiOSwgMHhjNWI0MjhlZiwgMHg3ZDA4NGY4YSwKKyAgICAweDZmYmRlMDY0LCAweGQ3MDE4NzAxLCAweDRhZDZiZmI4LCAweGYyNmFkOGRkLCAweGUwZGY3NzMzLAorICAgIDB4NTg2MzEwNTYsIDB4NTAxOTU3OWYsIDB4ZThhNTMwZmEsIDB4ZmExMDlmMTQsIDB4NDJhY2Y4NzEsCisgICAgMHhkZjdiYzBjOCwgMHg2N2M3YTdhZCwgMHg3NTcyMDg0MywgMHhjZGNlNmYyNiwgMHg5NWFkN2Y3MCwKKyAgICAweDJkMTExODE1LCAweDNmYTRiN2ZiLCAweDg3MThkMDllLCAweDFhY2ZlODI3LCAweGEyNzM4ZjQyLAorICAgIDB4YjBjNjIwYWMsIDB4MDg3YTQ3YzksIDB4YTAzMmFmM2UsIDB4MTg4ZWM4NWIsIDB4MGEzYjY3YjUsCisgICAgMHhiMjg3MDBkMCwgMHgyZjUwMzg2OSwgMHg5N2VjNWYwYywgMHg4NTU5ZjBlMiwgMHgzZGU1OTc4NywKKyAgICAweDY1ODY4N2QxLCAweGRkM2FlMGI0LCAweGNmOGY0ZjVhLCAweDc3MzMyODNmLCAweGVhZTQxMDg2LAorICAgIDB4NTI1ODc3ZTMsIDB4NDBlZGQ4MGQsIDB4Zjg1MWJmNjgsIDB4ZjAyYmY4YTEsIDB4NDg5NzlmYzQsCisgICAgMHg1YTIyMzAyYSwgMHhlMjllNTc0ZiwgMHg3ZjQ5NmZmNiwgMHhjN2Y1MDg5MywgMHhkNTQwYTc3ZCwKKyAgICAweDZkZmNjMDE4LCAweDM1OWZkMDRlLCAweDhkMjNiNzJiLCAweDlmOTYxOGM1LCAweDI3MmE3ZmEwLAorICAgIDB4YmFmZDQ3MTksIDB4MDI0MTIwN2MsIDB4MTBmNDhmOTIsIDB4YTg0OGU4ZjcsIDB4OWIxNDU4M2QsCisgICAgMHgyM2E4M2Y1OCwgMHgzMTFkOTBiNiwgMHg4OWExZjdkMywgMHgxNDc2Y2Y2YSwgMHhhY2NhYTgwZiwKKyAgICAweGJlN2YwN2UxLCAweDA2YzM2MDg0LCAweDVlYTA3MGQyLCAweGU2MWMxN2I3LCAweGY0YTliODU5LAorICAgIDB4NGMxNWRmM2MsIDB4ZDFjMmU3ODUsIDB4Njk3ZTgwZTAsIDB4N2JjYjJmMGUsIDB4YzM3NzQ4NmIsCisgICAgMHhjYjBkMGZhMiwgMHg3M2IxNjhjNywgMHg2MTA0YzcyOSwgMHhkOWI4YTA0YywgMHg0NDZmOThmNSwKKyAgICAweGZjZDNmZjkwLCAweGVlNjY1MDdlLCAweDU2ZGEzNzFiLCAweDBlYjkyNzRkLCAweGI2MDU0MDI4LAorICAgIDB4YTRiMGVmYzYsIDB4MWMwYzg4YTMsIDB4ODFkYmIwMWEsIDB4Mzk2N2Q3N2YsIDB4MmJkMjc4OTEsCisgICAgMHg5MzZlMWZmNCwgMHgzYjI2ZjcwMywgMHg4MzlhOTA2NiwgMHg5MTJmM2Y4OCwgMHgyOTkzNThlZCwKKyAgICAweGI0NDQ2MDU0LCAweDBjZjgwNzMxLCAweDFlNGRhOGRmLCAweGE2ZjFjZmJhLCAweGZlOTJkZmVjLAorICAgIDB4NDYyZWI4ODksIDB4NTQ5YjE3NjcsIDB4ZWMyNzcwMDIsIDB4NzFmMDQ4YmIsIDB4Yzk0YzJmZGUsCisgICAgMHhkYmY5ODAzMCwgMHg2MzQ1ZTc1NSwgMHg2YjNmYTA5YywgMHhkMzgzYzdmOSwgMHhjMTM2NjgxNywKKyAgICAweDc5OGEwZjcyLCAweGU0NWQzN2NiLCAweDVjZTE1MGFlLCAweDRlNTRmZjQwLCAweGY2ZTg5ODI1LAorICAgIDB4YWU4Yjg4NzMsIDB4MTYzN2VmMTYsIDB4MDQ4MjQwZjgsIDB4YmMzZTI3OWQsIDB4MjFlOTFmMjQsCisgICAgMHg5OTU1Nzg0MSwgMHg4YmUwZDdhZiwgMHgzMzVjYjBjYSwgMHhlZDU5YjYzYiwgMHg1NWU1ZDE1ZSwKKyAgICAweDQ3NTA3ZWIwLCAweGZmZWMxOWQ1LCAweDYyM2IyMTZjLCAweGRhODc0NjA5LCAweGM4MzJlOWU3LAorICAgIDB4NzA4ZThlODIsIDB4MjhlZDllZDQsIDB4OTA1MWY5YjEsIDB4ODJlNDU2NWYsIDB4M2E1ODMxM2EsCisgICAgMHhhNzhmMDk4MywgMHgxZjMzNmVlNiwgMHgwZDg2YzEwOCwgMHhiNTNhYTY2ZCwgMHhiZDQwZTFhNCwKKyAgICAweDA1ZmM4NmMxLCAweDE3NDkyOTJmLCAweGFmZjU0ZTRhLCAweDMyMjI3NmYzLCAweDhhOWUxMTk2LAorICAgIDB4OTgyYmJlNzgsIDB4MjA5N2Q5MWQsIDB4NzhmNGM5NGIsIDB4YzA0OGFlMmUsIDB4ZDJmZDAxYzAsCisgICAgMHg2YTQxNjZhNSwgMHhmNzk2NWUxYywgMHg0ZjJhMzk3OSwgMHg1ZDlmOTY5NywgMHhlNTIzZjFmMiwKKyAgICAweDRkNmIxOTA1LCAweGY1ZDc3ZTYwLCAweGU3NjJkMThlLCAweDVmZGViNmViLCAweGMyMDk4ZTUyLAorICAgIDB4N2FiNWU5MzcsIDB4NjgwMDQ2ZDksIDB4ZDBiYzIxYmMsIDB4ODhkZjMxZWEsIDB4MzA2MzU2OGYsCisgICAgMHgyMmQ2Zjk2MSwgMHg5YTZhOWUwNCwgMHgwN2JkYTZiZCwgMHhiZjAxYzFkOCwgMHhhZGI0NmUzNiwKKyAgICAweDE1MDgwOTUzLCAweDFkNzI0ZTlhLCAweGE1Y2UyOWZmLCAweGI3N2I4NjExLCAweDBmYzdlMTc0LAorICAgIDB4OTIxMGQ5Y2QsIDB4MmFhY2JlYTgsIDB4MzgxOTExNDYsIDB4ODBhNTc2MjMsIDB4ZDhjNjY2NzUsCisgICAgMHg2MDdhMDExMCwgMHg3MmNmYWVmZSwgMHhjYTczYzk5YiwgMHg1N2E0ZjEyMiwgMHhlZjE4OTY0NywKKyAgICAweGZkYWQzOWE5LCAweDQ1MTE1ZWNjLCAweDc2NGRlZTA2LCAweGNlZjE4OTYzLCAweGRjNDQyNjhkLAorICAgIDB4NjRmODQxZTgsIDB4ZjkyZjc5NTEsIDB4NDE5MzFlMzQsIDB4NTMyNmIxZGEsIDB4ZWI5YWQ2YmYsCisgICAgMHhiM2Y5YzZlOSwgMHgwYjQ1YTE4YywgMHgxOWYwMGU2MiwgMHhhMTRjNjkwNywgMHgzYzliNTFiZSwKKyAgICAweDg0MjczNmRiLCAweDk2OTI5OTM1LCAweDJlMmVmZTUwLCAweDI2NTRiOTk5LCAweDllZThkZWZjLAorICAgIDB4OGM1ZDcxMTIsIDB4MzRlMTE2NzcsIDB4YTkzNjJlY2UsIDB4MTE4YTQ5YWIsIDB4MDMzZmU2NDUsCisgICAgMHhiYjgzODEyMCwgMHhlM2UwOTE3NiwgMHg1YjVjZjYxMywgMHg0OWU5NTlmZCwgMHhmMTU1M2U5OCwKKyAgICAweDZjODIwNjIxLCAweGQ0M2U2MTQ0LCAweGM2OGJjZWFhLCAweDdlMzdhOWNmLCAweGQ2N2Y0MTM4LAorICAgIDB4NmVjMzI2NWQsIDB4N2M3Njg5YjMsIDB4YzRjYWVlZDYsIDB4NTkxZGQ2NmYsIDB4ZTFhMWIxMGEsCisgICAgMHhmMzE0MWVlNCwgMHg0YmE4Nzk4MSwgMHgxM2NiNjlkNywgMHhhYjc3MGViMiwgMHhiOWMyYTE1YywKKyAgICAweDAxN2VjNjM5LCAweDljYTlmZTgwLCAweDI0MTU5OWU1LCAweDM2YTAzNjBiLCAweDhlMWM1MTZlLAorICAgIDB4ODY2NjE2YTcsIDB4M2VkYTcxYzIsIDB4MmM2ZmRlMmMsIDB4OTRkM2I5NDksIDB4MDkwNDgxZjAsCisgICAgMHhiMWI4ZTY5NSwgMHhhMzBkNDk3YiwgMHgxYmIxMmUxZSwgMHg0M2QyM2U0OCwgMHhmYjZlNTkyZCwKKyAgICAweGU5ZGJmNmMzLCAweDUxNjc5MWE2LCAweGNjYjBhOTFmLCAweDc0MGNjZTdhLCAweDY2Yjk2MTk0LAorICAgIDB4ZGUwNTA2ZjF9LAorICAgezB4MDAwMDAwMDAsIDB4MDFjMjZhMzcsIDB4MDM4NGQ0NmUsIDB4MDI0NmJlNTksIDB4MDcwOWE4ZGMsCisgICAgMHgwNmNiYzJlYiwgMHgwNDhkN2NiMiwgMHgwNTRmMTY4NSwgMHgwZTEzNTFiOCwgMHgwZmQxM2I4ZiwKKyAgICAweDBkOTc4NWQ2LCAweDBjNTVlZmUxLCAweDA5MWFmOTY0LCAweDA4ZDg5MzUzLCAweDBhOWUyZDBhLAorICAgIDB4MGI1YzQ3M2QsIDB4MWMyNmEzNzAsIDB4MWRlNGM5NDcsIDB4MWZhMjc3MWUsIDB4MWU2MDFkMjksCisgICAgMHgxYjJmMGJhYywgMHgxYWVkNjE5YiwgMHgxOGFiZGZjMiwgMHgxOTY5YjVmNSwgMHgxMjM1ZjJjOCwKKyAgICAweDEzZjc5OGZmLCAweDExYjEyNmE2LCAweDEwNzM0YzkxLCAweDE1M2M1YTE0LCAweDE0ZmUzMDIzLAorICAgIDB4MTZiODhlN2EsIDB4MTc3YWU0NGQsIDB4Mzg0ZDQ2ZTAsIDB4Mzk4ZjJjZDcsIDB4M2JjOTkyOGUsCisgICAgMHgzYTBiZjhiOSwgMHgzZjQ0ZWUzYywgMHgzZTg2ODQwYiwgMHgzY2MwM2E1MiwgMHgzZDAyNTA2NSwKKyAgICAweDM2NWUxNzU4LCAweDM3OWM3ZDZmLCAweDM1ZGFjMzM2LCAweDM0MThhOTAxLCAweDMxNTdiZjg0LAorICAgIDB4MzA5NWQ1YjMsIDB4MzJkMzZiZWEsIDB4MzMxMTAxZGQsIDB4MjQ2YmU1OTAsIDB4MjVhOThmYTcsCisgICAgMHgyN2VmMzFmZSwgMHgyNjJkNWJjOSwgMHgyMzYyNGQ0YywgMHgyMmEwMjc3YiwgMHgyMGU2OTkyMiwKKyAgICAweDIxMjRmMzE1LCAweDJhNzhiNDI4LCAweDJiYmFkZTFmLCAweDI5ZmM2MDQ2LCAweDI4M2UwYTcxLAorICAgIDB4MmQ3MTFjZjQsIDB4MmNiMzc2YzMsIDB4MmVmNWM4OWEsIDB4MmYzN2EyYWQsIDB4NzA5YThkYzAsCisgICAgMHg3MTU4ZTdmNywgMHg3MzFlNTlhZSwgMHg3MmRjMzM5OSwgMHg3NzkzMjUxYywgMHg3NjUxNGYyYiwKKyAgICAweDc0MTdmMTcyLCAweDc1ZDU5YjQ1LCAweDdlODlkYzc4LCAweDdmNGJiNjRmLCAweDdkMGQwODE2LAorICAgIDB4N2NjZjYyMjEsIDB4Nzk4MDc0YTQsIDB4Nzg0MjFlOTMsIDB4N2EwNGEwY2EsIDB4N2JjNmNhZmQsCisgICAgMHg2Y2JjMmViMCwgMHg2ZDdlNDQ4NywgMHg2ZjM4ZmFkZSwgMHg2ZWZhOTBlOSwgMHg2YmI1ODY2YywKKyAgICAweDZhNzdlYzViLCAweDY4MzE1MjAyLCAweDY5ZjMzODM1LCAweDYyYWY3ZjA4LCAweDYzNmQxNTNmLAorICAgIDB4NjEyYmFiNjYsIDB4NjBlOWMxNTEsIDB4NjVhNmQ3ZDQsIDB4NjQ2NGJkZTMsIDB4NjYyMjAzYmEsCisgICAgMHg2N2UwNjk4ZCwgMHg0OGQ3Y2IyMCwgMHg0OTE1YTExNywgMHg0YjUzMWY0ZSwgMHg0YTkxNzU3OSwKKyAgICAweDRmZGU2M2ZjLCAweDRlMWMwOWNiLCAweDRjNWFiNzkyLCAweDRkOThkZGE1LCAweDQ2YzQ5YTk4LAorICAgIDB4NDcwNmYwYWYsIDB4NDU0MDRlZjYsIDB4NDQ4MjI0YzEsIDB4NDFjZDMyNDQsIDB4NDAwZjU4NzMsCisgICAgMHg0MjQ5ZTYyYSwgMHg0MzhiOGMxZCwgMHg1NGYxNjg1MCwgMHg1NTMzMDI2NywgMHg1Nzc1YmMzZSwKKyAgICAweDU2YjdkNjA5LCAweDUzZjhjMDhjLCAweDUyM2FhYWJiLCAweDUwN2MxNGUyLCAweDUxYmU3ZWQ1LAorICAgIDB4NWFlMjM5ZTgsIDB4NWIyMDUzZGYsIDB4NTk2NmVkODYsIDB4NThhNDg3YjEsIDB4NWRlYjkxMzQsCisgICAgMHg1YzI5ZmIwMywgMHg1ZTZmNDU1YSwgMHg1ZmFkMmY2ZCwgMHhlMTM1MWI4MCwgMHhlMGY3NzFiNywKKyAgICAweGUyYjFjZmVlLCAweGUzNzNhNWQ5LCAweGU2M2NiMzVjLCAweGU3ZmVkOTZiLCAweGU1Yjg2NzMyLAorICAgIDB4ZTQ3YTBkMDUsIDB4ZWYyNjRhMzgsIDB4ZWVlNDIwMGYsIDB4ZWNhMjllNTYsIDB4ZWQ2MGY0NjEsCisgICAgMHhlODJmZTJlNCwgMHhlOWVkODhkMywgMHhlYmFiMzY4YSwgMHhlYTY5NWNiZCwgMHhmZDEzYjhmMCwKKyAgICAweGZjZDFkMmM3LCAweGZlOTc2YzllLCAweGZmNTUwNmE5LCAweGZhMWExMDJjLCAweGZiZDg3YTFiLAorICAgIDB4Zjk5ZWM0NDIsIDB4Zjg1Y2FlNzUsIDB4ZjMwMGU5NDgsIDB4ZjJjMjgzN2YsIDB4ZjA4NDNkMjYsCisgICAgMHhmMTQ2NTcxMSwgMHhmNDA5NDE5NCwgMHhmNWNiMmJhMywgMHhmNzhkOTVmYSwgMHhmNjRmZmZjZCwKKyAgICAweGQ5Nzg1ZDYwLCAweGQ4YmEzNzU3LCAweGRhZmM4OTBlLCAweGRiM2VlMzM5LCAweGRlNzFmNWJjLAorICAgIDB4ZGZiMzlmOGIsIDB4ZGRmNTIxZDIsIDB4ZGMzNzRiZTUsIDB4ZDc2YjBjZDgsIDB4ZDZhOTY2ZWYsCisgICAgMHhkNGVmZDhiNiwgMHhkNTJkYjI4MSwgMHhkMDYyYTQwNCwgMHhkMWEwY2UzMywgMHhkM2U2NzA2YSwKKyAgICAweGQyMjQxYTVkLCAweGM1NWVmZTEwLCAweGM0OWM5NDI3LCAweGM2ZGEyYTdlLCAweGM3MTg0MDQ5LAorICAgIDB4YzI1NzU2Y2MsIDB4YzM5NTNjZmIsIDB4YzFkMzgyYTIsIDB4YzAxMWU4OTUsIDB4Y2I0ZGFmYTgsCisgICAgMHhjYThmYzU5ZiwgMHhjOGM5N2JjNiwgMHhjOTBiMTFmMSwgMHhjYzQ0MDc3NCwgMHhjZDg2NmQ0MywKKyAgICAweGNmYzBkMzFhLCAweGNlMDJiOTJkLCAweDkxYWY5NjQwLCAweDkwNmRmYzc3LCAweDkyMmI0MjJlLAorICAgIDB4OTNlOTI4MTksIDB4OTZhNjNlOWMsIDB4OTc2NDU0YWIsIDB4OTUyMmVhZjIsIDB4OTRlMDgwYzUsCisgICAgMHg5ZmJjYzdmOCwgMHg5ZTdlYWRjZiwgMHg5YzM4MTM5NiwgMHg5ZGZhNzlhMSwgMHg5OGI1NmYyNCwKKyAgICAweDk5NzcwNTEzLCAweDliMzFiYjRhLCAweDlhZjNkMTdkLCAweDhkODkzNTMwLCAweDhjNGI1ZjA3LAorICAgIDB4OGUwZGUxNWUsIDB4OGZjZjhiNjksIDB4OGE4MDlkZWMsIDB4OGI0MmY3ZGIsIDB4ODkwNDQ5ODIsCisgICAgMHg4OGM2MjNiNSwgMHg4MzlhNjQ4OCwgMHg4MjU4MGViZiwgMHg4MDFlYjBlNiwgMHg4MWRjZGFkMSwKKyAgICAweDg0OTNjYzU0LCAweDg1NTFhNjYzLCAweDg3MTcxODNhLCAweDg2ZDU3MjBkLCAweGE5ZTJkMGEwLAorICAgIDB4YTgyMGJhOTcsIDB4YWE2NjA0Y2UsIDB4YWJhNDZlZjksIDB4YWVlYjc4N2MsIDB4YWYyOTEyNGIsCisgICAgMHhhZDZmYWMxMiwgMHhhY2FkYzYyNSwgMHhhN2YxODExOCwgMHhhNjMzZWIyZiwgMHhhNDc1NTU3NiwKKyAgICAweGE1YjczZjQxLCAweGEwZjgyOWM0LCAweGExM2E0M2YzLCAweGEzN2NmZGFhLCAweGEyYmU5NzlkLAorICAgIDB4YjVjNDczZDAsIDB4YjQwNjE5ZTcsIDB4YjY0MGE3YmUsIDB4Yjc4MmNkODksIDB4YjJjZGRiMGMsCisgICAgMHhiMzBmYjEzYiwgMHhiMTQ5MGY2MiwgMHhiMDhiNjU1NSwgMHhiYmQ3MjI2OCwgMHhiYTE1NDg1ZiwKKyAgICAweGI4NTNmNjA2LCAweGI5OTE5YzMxLCAweGJjZGU4YWI0LCAweGJkMWNlMDgzLCAweGJmNWE1ZWRhLAorICAgIDB4YmU5ODM0ZWR9LAorICAgezB4MDAwMDAwMDAsIDB4MTkxYjMxNDEsIDB4MzIzNjYyODIsIDB4MmIyZDUzYzMsIDB4NjQ2Y2M1MDQsCisgICAgMHg3ZDc3ZjQ0NSwgMHg1NjVhYTc4NiwgMHg0ZjQxOTZjNywgMHhjOGQ5OGEwOCwgMHhkMWMyYmI0OSwKKyAgICAweGZhZWZlODhhLCAweGUzZjRkOWNiLCAweGFjYjU0ZjBjLCAweGI1YWU3ZTRkLCAweDllODMyZDhlLAorICAgIDB4ODc5ODFjY2YsIDB4NGFjMjEyNTEsIDB4NTNkOTIzMTAsIDB4NzhmNDcwZDMsIDB4NjFlZjQxOTIsCisgICAgMHgyZWFlZDc1NSwgMHgzN2I1ZTYxNCwgMHgxYzk4YjVkNywgMHgwNTgzODQ5NiwgMHg4MjFiOTg1OSwKKyAgICAweDliMDBhOTE4LCAweGIwMmRmYWRiLCAweGE5MzZjYjlhLCAweGU2Nzc1ZDVkLCAweGZmNmM2YzFjLAorICAgIDB4ZDQ0MTNmZGYsIDB4Y2Q1YTBlOWUsIDB4OTU4NDI0YTIsIDB4OGM5ZjE1ZTMsIDB4YTdiMjQ2MjAsCisgICAgMHhiZWE5Nzc2MSwgMHhmMWU4ZTFhNiwgMHhlOGYzZDBlNywgMHhjM2RlODMyNCwgMHhkYWM1YjI2NSwKKyAgICAweDVkNWRhZWFhLCAweDQ0NDY5ZmViLCAweDZmNmJjYzI4LCAweDc2NzBmZDY5LCAweDM5MzE2YmFlLAorICAgIDB4MjAyYTVhZWYsIDB4MGIwNzA5MmMsIDB4MTIxYzM4NmQsIDB4ZGY0NjM2ZjMsIDB4YzY1ZDA3YjIsCisgICAgMHhlZDcwNTQ3MSwgMHhmNDZiNjUzMCwgMHhiYjJhZjNmNywgMHhhMjMxYzJiNiwgMHg4OTFjOTE3NSwKKyAgICAweDkwMDdhMDM0LCAweDE3OWZiY2ZiLCAweDBlODQ4ZGJhLCAweDI1YTlkZTc5LCAweDNjYjJlZjM4LAorICAgIDB4NzNmMzc5ZmYsIDB4NmFlODQ4YmUsIDB4NDFjNTFiN2QsIDB4NThkZTJhM2MsIDB4ZjA3OTRmMDUsCisgICAgMHhlOTYyN2U0NCwgMHhjMjRmMmQ4NywgMHhkYjU0MWNjNiwgMHg5NDE1OGEwMSwgMHg4ZDBlYmI0MCwKKyAgICAweGE2MjNlODgzLCAweGJmMzhkOWMyLCAweDM4YTBjNTBkLCAweDIxYmJmNDRjLCAweDBhOTZhNzhmLAorICAgIDB4MTM4ZDk2Y2UsIDB4NWNjYzAwMDksIDB4NDVkNzMxNDgsIDB4NmVmYTYyOGIsIDB4NzdlMTUzY2EsCisgICAgMHhiYWJiNWQ1NCwgMHhhM2EwNmMxNSwgMHg4ODhkM2ZkNiwgMHg5MTk2MGU5NywgMHhkZWQ3OTg1MCwKKyAgICAweGM3Y2NhOTExLCAweGVjZTFmYWQyLCAweGY1ZmFjYjkzLCAweDcyNjJkNzVjLCAweDZiNzllNjFkLAorICAgIDB4NDA1NGI1ZGUsIDB4NTk0Zjg0OWYsIDB4MTYwZTEyNTgsIDB4MGYxNTIzMTksIDB4MjQzODcwZGEsCisgICAgMHgzZDIzNDE5YiwgMHg2NWZkNmJhNywgMHg3Y2U2NWFlNiwgMHg1N2NiMDkyNSwgMHg0ZWQwMzg2NCwKKyAgICAweDAxOTFhZWEzLCAweDE4OGE5ZmUyLCAweDMzYTdjYzIxLCAweDJhYmNmZDYwLCAweGFkMjRlMWFmLAorICAgIDB4YjQzZmQwZWUsIDB4OWYxMjgzMmQsIDB4ODYwOWIyNmMsIDB4Yzk0ODI0YWIsIDB4ZDA1MzE1ZWEsCisgICAgMHhmYjdlNDYyOSwgMHhlMjY1Nzc2OCwgMHgyZjNmNzlmNiwgMHgzNjI0NDhiNywgMHgxZDA5MWI3NCwKKyAgICAweDA0MTIyYTM1LCAweDRiNTNiY2YyLCAweDUyNDg4ZGIzLCAweDc5NjVkZTcwLCAweDYwN2VlZjMxLAorICAgIDB4ZTdlNmYzZmUsIDB4ZmVmZGMyYmYsIDB4ZDVkMDkxN2MsIDB4Y2NjYmEwM2QsIDB4ODM4YTM2ZmEsCisgICAgMHg5YTkxMDdiYiwgMHhiMWJjNTQ3OCwgMHhhOGE3NjUzOSwgMHgzYjgzOTg0YiwgMHgyMjk4YTkwYSwKKyAgICAweDA5YjVmYWM5LCAweDEwYWVjYjg4LCAweDVmZWY1ZDRmLCAweDQ2ZjQ2YzBlLCAweDZkZDkzZmNkLAorICAgIDB4NzRjMjBlOGMsIDB4ZjM1YTEyNDMsIDB4ZWE0MTIzMDIsIDB4YzE2YzcwYzEsIDB4ZDg3NzQxODAsCisgICAgMHg5NzM2ZDc0NywgMHg4ZTJkZTYwNiwgMHhhNTAwYjVjNSwgMHhiYzFiODQ4NCwgMHg3MTQxOGExYSwKKyAgICAweDY4NWFiYjViLCAweDQzNzdlODk4LCAweDVhNmNkOWQ5LCAweDE1MmQ0ZjFlLCAweDBjMzY3ZTVmLAorICAgIDB4MjcxYjJkOWMsIDB4M2UwMDFjZGQsIDB4Yjk5ODAwMTIsIDB4YTA4MzMxNTMsIDB4OGJhZTYyOTAsCisgICAgMHg5MmI1NTNkMSwgMHhkZGY0YzUxNiwgMHhjNGVmZjQ1NywgMHhlZmMyYTc5NCwgMHhmNmQ5OTZkNSwKKyAgICAweGFlMDdiY2U5LCAweGI3MWM4ZGE4LCAweDljMzFkZTZiLCAweDg1MmFlZjJhLCAweGNhNmI3OWVkLAorICAgIDB4ZDM3MDQ4YWMsIDB4Zjg1ZDFiNmYsIDB4ZTE0NjJhMmUsIDB4NjZkZTM2ZTEsIDB4N2ZjNTA3YTAsCisgICAgMHg1NGU4NTQ2MywgMHg0ZGYzNjUyMiwgMHgwMmIyZjNlNSwgMHgxYmE5YzJhNCwgMHgzMDg0OTE2NywKKyAgICAweDI5OWZhMDI2LCAweGU0YzVhZWI4LCAweGZkZGU5ZmY5LCAweGQ2ZjNjYzNhLCAweGNmZThmZDdiLAorICAgIDB4ODBhOTZiYmMsIDB4OTliMjVhZmQsIDB4YjI5ZjA5M2UsIDB4YWI4NDM4N2YsIDB4MmMxYzI0YjAsCisgICAgMHgzNTA3MTVmMSwgMHgxZTJhNDYzMiwgMHgwNzMxNzc3MywgMHg0ODcwZTFiNCwgMHg1MTZiZDBmNSwKKyAgICAweDdhNDY4MzM2LCAweDYzNWRiMjc3LCAweGNiZmFkNzRlLCAweGQyZTFlNjBmLCAweGY5Y2NiNWNjLAorICAgIDB4ZTBkNzg0OGQsIDB4YWY5NjEyNGEsIDB4YjY4ZDIzMGIsIDB4OWRhMDcwYzgsIDB4ODRiYjQxODksCisgICAgMHgwMzIzNWQ0NiwgMHgxYTM4NmMwNywgMHgzMTE1M2ZjNCwgMHgyODBlMGU4NSwgMHg2NzRmOTg0MiwKKyAgICAweDdlNTRhOTAzLCAweDU1NzlmYWMwLCAweDRjNjJjYjgxLCAweDgxMzhjNTFmLCAweDk4MjNmNDVlLAorICAgIDB4YjMwZWE3OWQsIDB4YWExNTk2ZGMsIDB4ZTU1NDAwMWIsIDB4ZmM0ZjMxNWEsIDB4ZDc2MjYyOTksCisgICAgMHhjZTc5NTNkOCwgMHg0OWUxNGYxNywgMHg1MGZhN2U1NiwgMHg3YmQ3MmQ5NSwgMHg2MmNjMWNkNCwKKyAgICAweDJkOGQ4YTEzLCAweDM0OTZiYjUyLCAweDFmYmJlODkxLCAweDA2YTBkOWQwLCAweDVlN2VmM2VjLAorICAgIDB4NDc2NWMyYWQsIDB4NmM0ODkxNmUsIDB4NzU1M2EwMmYsIDB4M2ExMjM2ZTgsIDB4MjMwOTA3YTksCisgICAgMHgwODI0NTQ2YSwgMHgxMTNmNjUyYiwgMHg5NmE3NzllNCwgMHg4ZmJjNDhhNSwgMHhhNDkxMWI2NiwKKyAgICAweGJkOGEyYTI3LCAweGYyY2JiY2UwLCAweGViZDA4ZGExLCAweGMwZmRkZTYyLCAweGQ5ZTZlZjIzLAorICAgIDB4MTRiY2UxYmQsIDB4MGRhN2QwZmMsIDB4MjY4YTgzM2YsIDB4M2Y5MWIyN2UsIDB4NzBkMDI0YjksCisgICAgMHg2OWNiMTVmOCwgMHg0MmU2NDYzYiwgMHg1YmZkNzc3YSwgMHhkYzY1NmJiNSwgMHhjNTdlNWFmNCwKKyAgICAweGVlNTMwOTM3LCAweGY3NDgzODc2LCAweGI4MDlhZWIxLCAweGExMTI5ZmYwLCAweDhhM2ZjYzMzLAorICAgIDB4OTMyNGZkNzJ9LAorICAgezB4MDAwMDAwMDAsIDB4NzcwNzMwOTYsIDB4ZWUwZTYxMmMsIDB4OTkwOTUxYmEsIDB4MDc2ZGM0MTksCisgICAgMHg3MDZhZjQ4ZiwgMHhlOTYzYTUzNSwgMHg5ZTY0OTVhMywgMHgwZWRiODgzMiwgMHg3OWRjYjhhNCwKKyAgICAweGUwZDVlOTFlLCAweDk3ZDJkOTg4LCAweDA5YjY0YzJiLCAweDdlYjE3Y2JkLCAweGU3YjgyZDA3LAorICAgIDB4OTBiZjFkOTEsIDB4MWRiNzEwNjQsIDB4NmFiMDIwZjIsIDB4ZjNiOTcxNDgsIDB4ODRiZTQxZGUsCisgICAgMHgxYWRhZDQ3ZCwgMHg2ZGRkZTRlYiwgMHhmNGQ0YjU1MSwgMHg4M2QzODVjNywgMHgxMzZjOTg1NiwKKyAgICAweDY0NmJhOGMwLCAweGZkNjJmOTdhLCAweDhhNjVjOWVjLCAweDE0MDE1YzRmLCAweDYzMDY2Y2Q5LAorICAgIDB4ZmEwZjNkNjMsIDB4OGQwODBkZjUsIDB4M2I2ZTIwYzgsIDB4NGM2OTEwNWUsIDB4ZDU2MDQxZTQsCisgICAgMHhhMjY3NzE3MiwgMHgzYzAzZTRkMSwgMHg0YjA0ZDQ0NywgMHhkMjBkODVmZCwgMHhhNTBhYjU2YiwKKyAgICAweDM1YjVhOGZhLCAweDQyYjI5ODZjLCAweGRiYmJjOWQ2LCAweGFjYmNmOTQwLCAweDMyZDg2Y2UzLAorICAgIDB4NDVkZjVjNzUsIDB4ZGNkNjBkY2YsIDB4YWJkMTNkNTksIDB4MjZkOTMwYWMsIDB4NTFkZTAwM2EsCisgICAgMHhjOGQ3NTE4MCwgMHhiZmQwNjExNiwgMHgyMWI0ZjRiNSwgMHg1NmIzYzQyMywgMHhjZmJhOTU5OSwKKyAgICAweGI4YmRhNTBmLCAweDI4MDJiODllLCAweDVmMDU4ODA4LCAweGM2MGNkOWIyLCAweGIxMGJlOTI0LAorICAgIDB4MmY2ZjdjODcsIDB4NTg2ODRjMTEsIDB4YzE2MTFkYWIsIDB4YjY2NjJkM2QsIDB4NzZkYzQxOTAsCisgICAgMHgwMWRiNzEwNiwgMHg5OGQyMjBiYywgMHhlZmQ1MTAyYSwgMHg3MWIxODU4OSwgMHgwNmI2YjUxZiwKKyAgICAweDlmYmZlNGE1LCAweGU4YjhkNDMzLCAweDc4MDdjOWEyLCAweDBmMDBmOTM0LCAweDk2MDlhODhlLAorICAgIDB4ZTEwZTk4MTgsIDB4N2Y2YTBkYmIsIDB4MDg2ZDNkMmQsIDB4OTE2NDZjOTcsIDB4ZTY2MzVjMDEsCisgICAgMHg2YjZiNTFmNCwgMHgxYzZjNjE2MiwgMHg4NTY1MzBkOCwgMHhmMjYyMDA0ZSwgMHg2YzA2OTVlZCwKKyAgICAweDFiMDFhNTdiLCAweDgyMDhmNGMxLCAweGY1MGZjNDU3LCAweDY1YjBkOWM2LCAweDEyYjdlOTUwLAorICAgIDB4OGJiZWI4ZWEsIDB4ZmNiOTg4N2MsIDB4NjJkZDFkZGYsIDB4MTVkYTJkNDksIDB4OGNkMzdjZjMsCisgICAgMHhmYmQ0NGM2NSwgMHg0ZGIyNjE1OCwgMHgzYWI1NTFjZSwgMHhhM2JjMDA3NCwgMHhkNGJiMzBlMiwKKyAgICAweDRhZGZhNTQxLCAweDNkZDg5NWQ3LCAweGE0ZDFjNDZkLCAweGQzZDZmNGZiLCAweDQzNjllOTZhLAorICAgIDB4MzQ2ZWQ5ZmMsIDB4YWQ2Nzg4NDYsIDB4ZGE2MGI4ZDAsIDB4NDQwNDJkNzMsIDB4MzMwMzFkZTUsCisgICAgMHhhYTBhNGM1ZiwgMHhkZDBkN2NjOSwgMHg1MDA1NzEzYywgMHgyNzAyNDFhYSwgMHhiZTBiMTAxMCwKKyAgICAweGM5MGMyMDg2LCAweDU3NjhiNTI1LCAweDIwNmY4NWIzLCAweGI5NjZkNDA5LCAweGNlNjFlNDlmLAorICAgIDB4NWVkZWY5MGUsIDB4MjlkOWM5OTgsIDB4YjBkMDk4MjIsIDB4YzdkN2E4YjQsIDB4NTliMzNkMTcsCisgICAgMHgyZWI0MGQ4MSwgMHhiN2JkNWMzYiwgMHhjMGJhNmNhZCwgMHhlZGI4ODMyMCwgMHg5YWJmYjNiNiwKKyAgICAweDAzYjZlMjBjLCAweDc0YjFkMjlhLCAweGVhZDU0NzM5LCAweDlkZDI3N2FmLCAweDA0ZGIyNjE1LAorICAgIDB4NzNkYzE2ODMsIDB4ZTM2MzBiMTIsIDB4OTQ2NDNiODQsIDB4MGQ2ZDZhM2UsIDB4N2E2YTVhYTgsCisgICAgMHhlNDBlY2YwYiwgMHg5MzA5ZmY5ZCwgMHgwYTAwYWUyNywgMHg3ZDA3OWViMSwgMHhmMDBmOTM0NCwKKyAgICAweDg3MDhhM2QyLCAweDFlMDFmMjY4LCAweDY5MDZjMmZlLCAweGY3NjI1NzVkLCAweDgwNjU2N2NiLAorICAgIDB4MTk2YzM2NzEsIDB4NmU2YjA2ZTcsIDB4ZmVkNDFiNzYsIDB4ODlkMzJiZTAsIDB4MTBkYTdhNWEsCisgICAgMHg2N2RkNGFjYywgMHhmOWI5ZGY2ZiwgMHg4ZWJlZWZmOSwgMHgxN2I3YmU0MywgMHg2MGIwOGVkNSwKKyAgICAweGQ2ZDZhM2U4LCAweGExZDE5MzdlLCAweDM4ZDhjMmM0LCAweDRmZGZmMjUyLCAweGQxYmI2N2YxLAorICAgIDB4YTZiYzU3NjcsIDB4M2ZiNTA2ZGQsIDB4NDhiMjM2NGIsIDB4ZDgwZDJiZGEsIDB4YWYwYTFiNGMsCisgICAgMHgzNjAzNGFmNiwgMHg0MTA0N2E2MCwgMHhkZjYwZWZjMywgMHhhODY3ZGY1NSwgMHgzMTZlOGVlZiwKKyAgICAweDQ2NjliZTc5LCAweGNiNjFiMzhjLCAweGJjNjY4MzFhLCAweDI1NmZkMmEwLCAweDUyNjhlMjM2LAorICAgIDB4Y2MwYzc3OTUsIDB4YmIwYjQ3MDMsIDB4MjIwMjE2YjksIDB4NTUwNTI2MmYsIDB4YzViYTNiYmUsCisgICAgMHhiMmJkMGIyOCwgMHgyYmI0NWE5MiwgMHg1Y2IzNmEwNCwgMHhjMmQ3ZmZhNywgMHhiNWQwY2YzMSwKKyAgICAweDJjZDk5ZThiLCAweDViZGVhZTFkLCAweDliNjRjMmIwLCAweGVjNjNmMjI2LCAweDc1NmFhMzljLAorICAgIDB4MDI2ZDkzMGEsIDB4OWMwOTA2YTksIDB4ZWIwZTM2M2YsIDB4NzIwNzY3ODUsIDB4MDUwMDU3MTMsCisgICAgMHg5NWJmNGE4MiwgMHhlMmI4N2ExNCwgMHg3YmIxMmJhZSwgMHgwY2I2MWIzOCwgMHg5MmQyOGU5YiwKKyAgICAweGU1ZDViZTBkLCAweDdjZGNlZmI3LCAweDBiZGJkZjIxLCAweDg2ZDNkMmQ0LCAweGYxZDRlMjQyLAorICAgIDB4NjhkZGIzZjgsIDB4MWZkYTgzNmUsIDB4ODFiZTE2Y2QsIDB4ZjZiOTI2NWIsIDB4NmZiMDc3ZTEsCisgICAgMHgxOGI3NDc3NywgMHg4ODA4NWFlNiwgMHhmZjBmNmE3MCwgMHg2NjA2M2JjYSwgMHgxMTAxMGI1YywKKyAgICAweDhmNjU5ZWZmLCAweGY4NjJhZTY5LCAweDYxNmJmZmQzLCAweDE2NmNjZjQ1LCAweGEwMGFlMjc4LAorICAgIDB4ZDcwZGQyZWUsIDB4NGUwNDgzNTQsIDB4MzkwM2IzYzIsIDB4YTc2NzI2NjEsIDB4ZDA2MDE2ZjcsCisgICAgMHg0OTY5NDc0ZCwgMHgzZTZlNzdkYiwgMHhhZWQxNmE0YSwgMHhkOWQ2NWFkYywgMHg0MGRmMGI2NiwKKyAgICAweDM3ZDgzYmYwLCAweGE5YmNhZTUzLCAweGRlYmI5ZWM1LCAweDQ3YjJjZjdmLCAweDMwYjVmZmU5LAorICAgIDB4YmRiZGYyMWMsIDB4Y2FiYWMyOGEsIDB4NTNiMzkzMzAsIDB4MjRiNGEzYTYsIDB4YmFkMDM2MDUsCisgICAgMHhjZGQ3MDY5MywgMHg1NGRlNTcyOSwgMHgyM2Q5NjdiZiwgMHhiMzY2N2EyZSwgMHhjNDYxNGFiOCwKKyAgICAweDVkNjgxYjAyLCAweDJhNmYyYjk0LCAweGI0MGJiZTM3LCAweGMzMGM4ZWExLCAweDVhMDVkZjFiLAorICAgIDB4MmQwMmVmOGR9fTsKKworbG9jYWwgY29uc3Qgel93b3JkX3QgRkFSIGNyY19icmFpZF9iaWdfdGFibGVbXVsyNTZdID0geworICAgezB4MDAwMDAwMDAwMDAwMDAwMCwgMHg5NjMwMDc3NzAwMDAwMDAwLCAweDJjNjEwZWVlMDAwMDAwMDAsCisgICAgMHhiYTUxMDk5OTAwMDAwMDAwLCAweDE5YzQ2ZDA3MDAwMDAwMDAsIDB4OGZmNDZhNzAwMDAwMDAwMCwKKyAgICAweDM1YTU2M2U5MDAwMDAwMDAsIDB4YTM5NTY0OWUwMDAwMDAwMCwgMHgzMjg4ZGIwZTAwMDAwMDAwLAorICAgIDB4YTRiOGRjNzkwMDAwMDAwMCwgMHgxZWU5ZDVlMDAwMDAwMDAwLCAweDg4ZDlkMjk3MDAwMDAwMDAsCisgICAgMHgyYjRjYjYwOTAwMDAwMDAwLCAweGJkN2NiMTdlMDAwMDAwMDAsIDB4MDcyZGI4ZTcwMDAwMDAwMCwKKyAgICAweDkxMWRiZjkwMDAwMDAwMDAsIDB4NjQxMGI3MWQwMDAwMDAwMCwgMHhmMjIwYjA2YTAwMDAwMDAwLAorICAgIDB4NDg3MWI5ZjMwMDAwMDAwMCwgMHhkZTQxYmU4NDAwMDAwMDAwLCAweDdkZDRkYTFhMDAwMDAwMDAsCisgICAgMHhlYmU0ZGQ2ZDAwMDAwMDAwLCAweDUxYjVkNGY0MDAwMDAwMDAsIDB4Yzc4NWQzODMwMDAwMDAwMCwKKyAgICAweDU2OTg2YzEzMDAwMDAwMDAsIDB4YzBhODZiNjQwMDAwMDAwMCwgMHg3YWY5NjJmZDAwMDAwMDAwLAorICAgIDB4ZWNjOTY1OGEwMDAwMDAwMCwgMHg0ZjVjMDExNDAwMDAwMDAwLCAweGQ5NmMwNjYzMDAwMDAwMDAsCisgICAgMHg2MzNkMGZmYTAwMDAwMDAwLCAweGY1MGQwODhkMDAwMDAwMDAsIDB4YzgyMDZlM2IwMDAwMDAwMCwKKyAgICAweDVlMTA2OTRjMDAwMDAwMDAsIDB4ZTQ0MTYwZDUwMDAwMDAwMCwgMHg3MjcxNjdhMjAwMDAwMDAwLAorICAgIDB4ZDFlNDAzM2MwMDAwMDAwMCwgMHg0N2Q0MDQ0YjAwMDAwMDAwLCAweGZkODUwZGQyMDAwMDAwMDAsCisgICAgMHg2YmI1MGFhNTAwMDAwMDAwLCAweGZhYThiNTM1MDAwMDAwMDAsIDB4NmM5OGIyNDIwMDAwMDAwMCwKKyAgICAweGQ2YzliYmRiMDAwMDAwMDAsIDB4NDBmOWJjYWMwMDAwMDAwMCwgMHhlMzZjZDgzMjAwMDAwMDAwLAorICAgIDB4NzU1Y2RmNDUwMDAwMDAwMCwgMHhjZjBkZDZkYzAwMDAwMDAwLCAweDU5M2RkMWFiMDAwMDAwMDAsCisgICAgMHhhYzMwZDkyNjAwMDAwMDAwLCAweDNhMDBkZTUxMDAwMDAwMDAsIDB4ODA1MWQ3YzgwMDAwMDAwMCwKKyAgICAweDE2NjFkMGJmMDAwMDAwMDAsIDB4YjVmNGI0MjEwMDAwMDAwMCwgMHgyM2M0YjM1NjAwMDAwMDAwLAorICAgIDB4OTk5NWJhY2YwMDAwMDAwMCwgMHgwZmE1YmRiODAwMDAwMDAwLCAweDllYjgwMjI4MDAwMDAwMDAsCisgICAgMHgwODg4MDU1ZjAwMDAwMDAwLCAweGIyZDkwY2M2MDAwMDAwMDAsIDB4MjRlOTBiYjEwMDAwMDAwMCwKKyAgICAweDg3N2M2ZjJmMDAwMDAwMDAsIDB4MTE0YzY4NTgwMDAwMDAwMCwgMHhhYjFkNjFjMTAwMDAwMDAwLAorICAgIDB4M2QyZDY2YjYwMDAwMDAwMCwgMHg5MDQxZGM3NjAwMDAwMDAwLCAweDA2NzFkYjAxMDAwMDAwMDAsCisgICAgMHhiYzIwZDI5ODAwMDAwMDAwLCAweDJhMTBkNWVmMDAwMDAwMDAsIDB4ODk4NWIxNzEwMDAwMDAwMCwKKyAgICAweDFmYjViNjA2MDAwMDAwMDAsIDB4YTVlNGJmOWYwMDAwMDAwMCwgMHgzM2Q0YjhlODAwMDAwMDAwLAorICAgIDB4YTJjOTA3NzgwMDAwMDAwMCwgMHgzNGY5MDAwZjAwMDAwMDAwLCAweDhlYTgwOTk2MDAwMDAwMDAsCisgICAgMHgxODk4MGVlMTAwMDAwMDAwLCAweGJiMGQ2YTdmMDAwMDAwMDAsIDB4MmQzZDZkMDgwMDAwMDAwMCwKKyAgICAweDk3NmM2NDkxMDAwMDAwMDAsIDB4MDE1YzYzZTYwMDAwMDAwMCwgMHhmNDUxNmI2YjAwMDAwMDAwLAorICAgIDB4NjI2MTZjMWMwMDAwMDAwMCwgMHhkODMwNjU4NTAwMDAwMDAwLCAweDRlMDA2MmYyMDAwMDAwMDAsCisgICAgMHhlZDk1MDY2YzAwMDAwMDAwLCAweDdiYTUwMTFiMDAwMDAwMDAsIDB4YzFmNDA4ODIwMDAwMDAwMCwKKyAgICAweDU3YzQwZmY1MDAwMDAwMDAsIDB4YzZkOWIwNjUwMDAwMDAwMCwgMHg1MGU5YjcxMjAwMDAwMDAwLAorICAgIDB4ZWFiOGJlOGIwMDAwMDAwMCwgMHg3Yzg4YjlmYzAwMDAwMDAwLCAweGRmMWRkZDYyMDAwMDAwMDAsCisgICAgMHg0OTJkZGExNTAwMDAwMDAwLCAweGYzN2NkMzhjMDAwMDAwMDAsIDB4NjU0Y2Q0ZmIwMDAwMDAwMCwKKyAgICAweDU4NjFiMjRkMDAwMDAwMDAsIDB4Y2U1MWI1M2EwMDAwMDAwMCwgMHg3NDAwYmNhMzAwMDAwMDAwLAorICAgIDB4ZTIzMGJiZDQwMDAwMDAwMCwgMHg0MWE1ZGY0YTAwMDAwMDAwLCAweGQ3OTVkODNkMDAwMDAwMDAsCisgICAgMHg2ZGM0ZDFhNDAwMDAwMDAwLCAweGZiZjRkNmQzMDAwMDAwMDAsIDB4NmFlOTY5NDMwMDAwMDAwMCwKKyAgICAweGZjZDk2ZTM0MDAwMDAwMDAsIDB4NDY4ODY3YWQwMDAwMDAwMCwgMHhkMGI4NjBkYTAwMDAwMDAwLAorICAgIDB4NzMyZDA0NDQwMDAwMDAwMCwgMHhlNTFkMDMzMzAwMDAwMDAwLCAweDVmNGMwYWFhMDAwMDAwMDAsCisgICAgMHhjOTdjMGRkZDAwMDAwMDAwLCAweDNjNzEwNTUwMDAwMDAwMDAsIDB4YWE0MTAyMjcwMDAwMDAwMCwKKyAgICAweDEwMTAwYmJlMDAwMDAwMDAsIDB4ODYyMDBjYzkwMDAwMDAwMCwgMHgyNWI1Njg1NzAwMDAwMDAwLAorICAgIDB4YjM4NTZmMjAwMDAwMDAwMCwgMHgwOWQ0NjZiOTAwMDAwMDAwLCAweDlmZTQ2MWNlMDAwMDAwMDAsCisgICAgMHgwZWY5ZGU1ZTAwMDAwMDAwLCAweDk4YzlkOTI5MDAwMDAwMDAsIDB4MjI5OGQwYjAwMDAwMDAwMCwKKyAgICAweGI0YThkN2M3MDAwMDAwMDAsIDB4MTczZGIzNTkwMDAwMDAwMCwgMHg4MTBkYjQyZTAwMDAwMDAwLAorICAgIDB4M2I1Y2JkYjcwMDAwMDAwMCwgMHhhZDZjYmFjMDAwMDAwMDAwLCAweDIwODNiOGVkMDAwMDAwMDAsCisgICAgMHhiNmIzYmY5YTAwMDAwMDAwLCAweDBjZTJiNjAzMDAwMDAwMDAsIDB4OWFkMmIxNzQwMDAwMDAwMCwKKyAgICAweDM5NDdkNWVhMDAwMDAwMDAsIDB4YWY3N2QyOWQwMDAwMDAwMCwgMHgxNTI2ZGIwNDAwMDAwMDAwLAorICAgIDB4ODMxNmRjNzMwMDAwMDAwMCwgMHgxMjBiNjNlMzAwMDAwMDAwLCAweDg0M2I2NDk0MDAwMDAwMDAsCisgICAgMHgzZTZhNmQwZDAwMDAwMDAwLCAweGE4NWE2YTdhMDAwMDAwMDAsIDB4MGJjZjBlZTQwMDAwMDAwMCwKKyAgICAweDlkZmYwOTkzMDAwMDAwMDAsIDB4MjdhZTAwMGEwMDAwMDAwMCwgMHhiMTllMDc3ZDAwMDAwMDAwLAorICAgIDB4NDQ5MzBmZjAwMDAwMDAwMCwgMHhkMmEzMDg4NzAwMDAwMDAwLCAweDY4ZjIwMTFlMDAwMDAwMDAsCisgICAgMHhmZWMyMDY2OTAwMDAwMDAwLCAweDVkNTc2MmY3MDAwMDAwMDAsIDB4Y2I2NzY1ODAwMDAwMDAwMCwKKyAgICAweDcxMzY2YzE5MDAwMDAwMDAsIDB4ZTcwNjZiNmUwMDAwMDAwMCwgMHg3NjFiZDRmZTAwMDAwMDAwLAorICAgIDB4ZTAyYmQzODkwMDAwMDAwMCwgMHg1YTdhZGExMDAwMDAwMDAwLCAweGNjNGFkZDY3MDAwMDAwMDAsCisgICAgMHg2ZmRmYjlmOTAwMDAwMDAwLCAweGY5ZWZiZThlMDAwMDAwMDAsIDB4NDNiZWI3MTcwMDAwMDAwMCwKKyAgICAweGQ1OGViMDYwMDAwMDAwMDAsIDB4ZThhM2Q2ZDYwMDAwMDAwMCwgMHg3ZTkzZDFhMTAwMDAwMDAwLAorICAgIDB4YzRjMmQ4MzgwMDAwMDAwMCwgMHg1MmYyZGY0ZjAwMDAwMDAwLCAweGYxNjdiYmQxMDAwMDAwMDAsCisgICAgMHg2NzU3YmNhNjAwMDAwMDAwLCAweGRkMDZiNTNmMDAwMDAwMDAsIDB4NGIzNmIyNDgwMDAwMDAwMCwKKyAgICAweGRhMmIwZGQ4MDAwMDAwMDAsIDB4NGMxYjBhYWYwMDAwMDAwMCwgMHhmNjRhMDMzNjAwMDAwMDAwLAorICAgIDB4NjA3YTA0NDEwMDAwMDAwMCwgMHhjM2VmNjBkZjAwMDAwMDAwLCAweDU1ZGY2N2E4MDAwMDAwMDAsCisgICAgMHhlZjhlNmUzMTAwMDAwMDAwLCAweDc5YmU2OTQ2MDAwMDAwMDAsIDB4OGNiMzYxY2IwMDAwMDAwMCwKKyAgICAweDFhODM2NmJjMDAwMDAwMDAsIDB4YTBkMjZmMjUwMDAwMDAwMCwgMHgzNmUyNjg1MjAwMDAwMDAwLAorICAgIDB4OTU3NzBjY2MwMDAwMDAwMCwgMHgwMzQ3MGJiYjAwMDAwMDAwLCAweGI5MTYwMjIyMDAwMDAwMDAsCisgICAgMHgyZjI2MDU1NTAwMDAwMDAwLCAweGJlM2JiYWM1MDAwMDAwMDAsIDB4MjgwYmJkYjIwMDAwMDAwMCwKKyAgICAweDkyNWFiNDJiMDAwMDAwMDAsIDB4MDQ2YWIzNWMwMDAwMDAwMCwgMHhhN2ZmZDdjMjAwMDAwMDAwLAorICAgIDB4MzFjZmQwYjUwMDAwMDAwMCwgMHg4YjllZDkyYzAwMDAwMDAwLCAweDFkYWVkZTViMDAwMDAwMDAsCisgICAgMHhiMGMyNjQ5YjAwMDAwMDAwLCAweDI2ZjI2M2VjMDAwMDAwMDAsIDB4OWNhMzZhNzUwMDAwMDAwMCwKKyAgICAweDBhOTM2ZDAyMDAwMDAwMDAsIDB4YTkwNjA5OWMwMDAwMDAwMCwgMHgzZjM2MGVlYjAwMDAwMDAwLAorICAgIDB4ODU2NzA3NzIwMDAwMDAwMCwgMHgxMzU3MDAwNTAwMDAwMDAwLCAweDgyNGFiZjk1MDAwMDAwMDAsCisgICAgMHgxNDdhYjhlMjAwMDAwMDAwLCAweGFlMmJiMTdiMDAwMDAwMDAsIDB4MzgxYmI2MGMwMDAwMDAwMCwKKyAgICAweDliOGVkMjkyMDAwMDAwMDAsIDB4MGRiZWQ1ZTUwMDAwMDAwMCwgMHhiN2VmZGM3YzAwMDAwMDAwLAorICAgIDB4MjFkZmRiMGIwMDAwMDAwMCwgMHhkNGQyZDM4NjAwMDAwMDAwLCAweDQyZTJkNGYxMDAwMDAwMDAsCisgICAgMHhmOGIzZGQ2ODAwMDAwMDAwLCAweDZlODNkYTFmMDAwMDAwMDAsIDB4Y2QxNmJlODEwMDAwMDAwMCwKKyAgICAweDViMjZiOWY2MDAwMDAwMDAsIDB4ZTE3N2IwNmYwMDAwMDAwMCwgMHg3NzQ3YjcxODAwMDAwMDAwLAorICAgIDB4ZTY1YTA4ODgwMDAwMDAwMCwgMHg3MDZhMGZmZjAwMDAwMDAwLCAweGNhM2IwNjY2MDAwMDAwMDAsCisgICAgMHg1YzBiMDExMTAwMDAwMDAwLCAweGZmOWU2NThmMDAwMDAwMDAsIDB4NjlhZTYyZjgwMDAwMDAwMCwKKyAgICAweGQzZmY2YjYxMDAwMDAwMDAsIDB4NDVjZjZjMTYwMDAwMDAwMCwgMHg3OGUyMGFhMDAwMDAwMDAwLAorICAgIDB4ZWVkMjBkZDcwMDAwMDAwMCwgMHg1NDgzMDQ0ZTAwMDAwMDAwLCAweGMyYjMwMzM5MDAwMDAwMDAsCisgICAgMHg2MTI2NjdhNzAwMDAwMDAwLCAweGY3MTY2MGQwMDAwMDAwMDAsIDB4NGQ0NzY5NDkwMDAwMDAwMCwKKyAgICAweGRiNzc2ZTNlMDAwMDAwMDAsIDB4NGE2YWQxYWUwMDAwMDAwMCwgMHhkYzVhZDZkOTAwMDAwMDAwLAorICAgIDB4NjYwYmRmNDAwMDAwMDAwMCwgMHhmMDNiZDgzNzAwMDAwMDAwLCAweDUzYWViY2E5MDAwMDAwMDAsCisgICAgMHhjNTllYmJkZTAwMDAwMDAwLCAweDdmY2ZiMjQ3MDAwMDAwMDAsIDB4ZTlmZmI1MzAwMDAwMDAwMCwKKyAgICAweDFjZjJiZGJkMDAwMDAwMDAsIDB4OGFjMmJhY2EwMDAwMDAwMCwgMHgzMDkzYjM1MzAwMDAwMDAwLAorICAgIDB4YTZhM2I0MjQwMDAwMDAwMCwgMHgwNTM2ZDBiYTAwMDAwMDAwLCAweDkzMDZkN2NkMDAwMDAwMDAsCisgICAgMHgyOTU3ZGU1NDAwMDAwMDAwLCAweGJmNjdkOTIzMDAwMDAwMDAsIDB4MmU3YTY2YjMwMDAwMDAwMCwKKyAgICAweGI4NGE2MWM0MDAwMDAwMDAsIDB4MDIxYjY4NWQwMDAwMDAwMCwgMHg5NDJiNmYyYTAwMDAwMDAwLAorICAgIDB4MzdiZTBiYjQwMDAwMDAwMCwgMHhhMThlMGNjMzAwMDAwMDAwLCAweDFiZGYwNTVhMDAwMDAwMDAsCisgICAgMHg4ZGVmMDIyZDAwMDAwMDAwfSwKKyAgIHsweDAwMDAwMDAwMDAwMDAwMDAsIDB4NDEzMTFiMTkwMDAwMDAwMCwgMHg4MjYyMzYzMjAwMDAwMDAwLAorICAgIDB4YzM1MzJkMmIwMDAwMDAwMCwgMHgwNGM1NmM2NDAwMDAwMDAwLCAweDQ1ZjQ3NzdkMDAwMDAwMDAsCisgICAgMHg4NmE3NWE1NjAwMDAwMDAwLCAweGM3OTY0MTRmMDAwMDAwMDAsIDB4MDg4YWQ5YzgwMDAwMDAwMCwKKyAgICAweDQ5YmJjMmQxMDAwMDAwMDAsIDB4OGFlOGVmZmEwMDAwMDAwMCwgMHhjYmQ5ZjRlMzAwMDAwMDAwLAorICAgIDB4MGM0ZmI1YWMwMDAwMDAwMCwgMHg0ZDdlYWViNTAwMDAwMDAwLCAweDhlMmQ4MzllMDAwMDAwMDAsCisgICAgMHhjZjFjOTg4NzAwMDAwMDAwLCAweDUxMTJjMjRhMDAwMDAwMDAsIDB4MTAyM2Q5NTMwMDAwMDAwMCwKKyAgICAweGQzNzBmNDc4MDAwMDAwMDAsIDB4OTI0MWVmNjEwMDAwMDAwMCwgMHg1NWQ3YWUyZTAwMDAwMDAwLAorICAgIDB4MTRlNmI1MzcwMDAwMDAwMCwgMHhkN2I1OTgxYzAwMDAwMDAwLCAweDk2ODQ4MzA1MDAwMDAwMDAsCisgICAgMHg1OTk4MWI4MjAwMDAwMDAwLCAweDE4YTkwMDliMDAwMDAwMDAsIDB4ZGJmYTJkYjAwMDAwMDAwMCwKKyAgICAweDlhY2IzNmE5MDAwMDAwMDAsIDB4NWQ1ZDc3ZTYwMDAwMDAwMCwgMHgxYzZjNmNmZjAwMDAwMDAwLAorICAgIDB4ZGYzZjQxZDQwMDAwMDAwMCwgMHg5ZTBlNWFjZDAwMDAwMDAwLCAweGEyMjQ4NDk1MDAwMDAwMDAsCisgICAgMHhlMzE1OWY4YzAwMDAwMDAwLCAweDIwNDZiMmE3MDAwMDAwMDAsIDB4NjE3N2E5YmUwMDAwMDAwMCwKKyAgICAweGE2ZTFlOGYxMDAwMDAwMDAsIDB4ZTdkMGYzZTgwMDAwMDAwMCwgMHgyNDgzZGVjMzAwMDAwMDAwLAorICAgIDB4NjViMmM1ZGEwMDAwMDAwMCwgMHhhYWFlNWQ1ZDAwMDAwMDAwLCAweGViOWY0NjQ0MDAwMDAwMDAsCisgICAgMHgyOGNjNmI2ZjAwMDAwMDAwLCAweDY5ZmQ3MDc2MDAwMDAwMDAsIDB4YWU2YjMxMzkwMDAwMDAwMCwKKyAgICAweGVmNWEyYTIwMDAwMDAwMDAsIDB4MmMwOTA3MGIwMDAwMDAwMCwgMHg2ZDM4MWMxMjAwMDAwMDAwLAorICAgIDB4ZjMzNjQ2ZGYwMDAwMDAwMCwgMHhiMjA3NWRjNjAwMDAwMDAwLCAweDcxNTQ3MGVkMDAwMDAwMDAsCisgICAgMHgzMDY1NmJmNDAwMDAwMDAwLCAweGY3ZjMyYWJiMDAwMDAwMDAsIDB4YjZjMjMxYTIwMDAwMDAwMCwKKyAgICAweDc1OTExYzg5MDAwMDAwMDAsIDB4MzRhMDA3OTAwMDAwMDAwMCwgMHhmYmJjOWYxNzAwMDAwMDAwLAorICAgIDB4YmE4ZDg0MGUwMDAwMDAwMCwgMHg3OWRlYTkyNTAwMDAwMDAwLCAweDM4ZWZiMjNjMDAwMDAwMDAsCisgICAgMHhmZjc5ZjM3MzAwMDAwMDAwLCAweGJlNDhlODZhMDAwMDAwMDAsIDB4N2QxYmM1NDEwMDAwMDAwMCwKKyAgICAweDNjMmFkZTU4MDAwMDAwMDAsIDB4MDU0Zjc5ZjAwMDAwMDAwMCwgMHg0NDdlNjJlOTAwMDAwMDAwLAorICAgIDB4ODcyZDRmYzIwMDAwMDAwMCwgMHhjNjFjNTRkYjAwMDAwMDAwLCAweDAxOGExNTk0MDAwMDAwMDAsCisgICAgMHg0MGJiMGU4ZDAwMDAwMDAwLCAweDgzZTgyM2E2MDAwMDAwMDAsIDB4YzJkOTM4YmYwMDAwMDAwMCwKKyAgICAweDBkYzVhMDM4MDAwMDAwMDAsIDB4NGNmNGJiMjEwMDAwMDAwMCwgMHg4ZmE3OTYwYTAwMDAwMDAwLAorICAgIDB4Y2U5NjhkMTMwMDAwMDAwMCwgMHgwOTAwY2M1YzAwMDAwMDAwLCAweDQ4MzFkNzQ1MDAwMDAwMDAsCisgICAgMHg4YjYyZmE2ZTAwMDAwMDAwLCAweGNhNTNlMTc3MDAwMDAwMDAsIDB4NTQ1ZGJiYmEwMDAwMDAwMCwKKyAgICAweDE1NmNhMGEzMDAwMDAwMDAsIDB4ZDYzZjhkODgwMDAwMDAwMCwgMHg5NzBlOTY5MTAwMDAwMDAwLAorICAgIDB4NTA5OGQ3ZGUwMDAwMDAwMCwgMHgxMWE5Y2NjNzAwMDAwMDAwLCAweGQyZmFlMWVjMDAwMDAwMDAsCisgICAgMHg5M2NiZmFmNTAwMDAwMDAwLCAweDVjZDc2MjcyMDAwMDAwMDAsIDB4MWRlNjc5NmIwMDAwMDAwMCwKKyAgICAweGRlYjU1NDQwMDAwMDAwMDAsIDB4OWY4NDRmNTkwMDAwMDAwMCwgMHg1ODEyMGUxNjAwMDAwMDAwLAorICAgIDB4MTkyMzE1MGYwMDAwMDAwMCwgMHhkYTcwMzgyNDAwMDAwMDAwLCAweDliNDEyMzNkMDAwMDAwMDAsCisgICAgMHhhNzZiZmQ2NTAwMDAwMDAwLCAweGU2NWFlNjdjMDAwMDAwMDAsIDB4MjUwOWNiNTcwMDAwMDAwMCwKKyAgICAweDY0MzhkMDRlMDAwMDAwMDAsIDB4YTNhZTkxMDEwMDAwMDAwMCwgMHhlMjlmOGExODAwMDAwMDAwLAorICAgIDB4MjFjY2E3MzMwMDAwMDAwMCwgMHg2MGZkYmMyYTAwMDAwMDAwLCAweGFmZTEyNGFkMDAwMDAwMDAsCisgICAgMHhlZWQwM2ZiNDAwMDAwMDAwLCAweDJkODMxMjlmMDAwMDAwMDAsIDB4NmNiMjA5ODYwMDAwMDAwMCwKKyAgICAweGFiMjQ0OGM5MDAwMDAwMDAsIDB4ZWExNTUzZDAwMDAwMDAwMCwgMHgyOTQ2N2VmYjAwMDAwMDAwLAorICAgIDB4Njg3NzY1ZTIwMDAwMDAwMCwgMHhmNjc5M2YyZjAwMDAwMDAwLCAweGI3NDgyNDM2MDAwMDAwMDAsCisgICAgMHg3NDFiMDkxZDAwMDAwMDAwLCAweDM1MmExMjA0MDAwMDAwMDAsIDB4ZjJiYzUzNGIwMDAwMDAwMCwKKyAgICAweGIzOGQ0ODUyMDAwMDAwMDAsIDB4NzBkZTY1NzkwMDAwMDAwMCwgMHgzMWVmN2U2MDAwMDAwMDAwLAorICAgIDB4ZmVmM2U2ZTcwMDAwMDAwMCwgMHhiZmMyZmRmZTAwMDAwMDAwLCAweDdjOTFkMGQ1MDAwMDAwMDAsCisgICAgMHgzZGEwY2JjYzAwMDAwMDAwLCAweGZhMzY4YTgzMDAwMDAwMDAsIDB4YmIwNzkxOWEwMDAwMDAwMCwKKyAgICAweDc4NTRiY2IxMDAwMDAwMDAsIDB4Mzk2NWE3YTgwMDAwMDAwMCwgMHg0Yjk4ODMzYjAwMDAwMDAwLAorICAgIDB4MGFhOTk4MjIwMDAwMDAwMCwgMHhjOWZhYjUwOTAwMDAwMDAwLCAweDg4Y2JhZTEwMDAwMDAwMDAsCisgICAgMHg0ZjVkZWY1ZjAwMDAwMDAwLCAweDBlNmNmNDQ2MDAwMDAwMDAsIDB4Y2QzZmQ5NmQwMDAwMDAwMCwKKyAgICAweDhjMGVjMjc0MDAwMDAwMDAsIDB4NDMxMjVhZjMwMDAwMDAwMCwgMHgwMjIzNDFlYTAwMDAwMDAwLAorICAgIDB4YzE3MDZjYzEwMDAwMDAwMCwgMHg4MDQxNzdkODAwMDAwMDAwLCAweDQ3ZDczNjk3MDAwMDAwMDAsCisgICAgMHgwNmU2MmQ4ZTAwMDAwMDAwLCAweGM1YjUwMGE1MDAwMDAwMDAsIDB4ODQ4NDFiYmMwMDAwMDAwMCwKKyAgICAweDFhOGE0MTcxMDAwMDAwMDAsIDB4NWJiYjVhNjgwMDAwMDAwMCwgMHg5OGU4Nzc0MzAwMDAwMDAwLAorICAgIDB4ZDlkOTZjNWEwMDAwMDAwMCwgMHgxZTRmMmQxNTAwMDAwMDAwLCAweDVmN2UzNjBjMDAwMDAwMDAsCisgICAgMHg5YzJkMWIyNzAwMDAwMDAwLCAweGRkMWMwMDNlMDAwMDAwMDAsIDB4MTIwMDk4YjkwMDAwMDAwMCwKKyAgICAweDUzMzE4M2EwMDAwMDAwMDAsIDB4OTA2MmFlOGIwMDAwMDAwMCwgMHhkMTUzYjU5MjAwMDAwMDAwLAorICAgIDB4MTZjNWY0ZGQwMDAwMDAwMCwgMHg1N2Y0ZWZjNDAwMDAwMDAwLCAweDk0YTdjMmVmMDAwMDAwMDAsCisgICAgMHhkNTk2ZDlmNjAwMDAwMDAwLCAweGU5YmMwN2FlMDAwMDAwMDAsIDB4YTg4ZDFjYjcwMDAwMDAwMCwKKyAgICAweDZiZGUzMTljMDAwMDAwMDAsIDB4MmFlZjJhODUwMDAwMDAwMCwgMHhlZDc5NmJjYTAwMDAwMDAwLAorICAgIDB4YWM0ODcwZDMwMDAwMDAwMCwgMHg2ZjFiNWRmODAwMDAwMDAwLCAweDJlMmE0NmUxMDAwMDAwMDAsCisgICAgMHhlMTM2ZGU2NjAwMDAwMDAwLCAweGEwMDdjNTdmMDAwMDAwMDAsIDB4NjM1NGU4NTQwMDAwMDAwMCwKKyAgICAweDIyNjVmMzRkMDAwMDAwMDAsIDB4ZTVmM2IyMDIwMDAwMDAwMCwgMHhhNGMyYTkxYjAwMDAwMDAwLAorICAgIDB4Njc5MTg0MzAwMDAwMDAwMCwgMHgyNmEwOWYyOTAwMDAwMDAwLCAweGI4YWVjNWU0MDAwMDAwMDAsCisgICAgMHhmOTlmZGVmZDAwMDAwMDAwLCAweDNhY2NmM2Q2MDAwMDAwMDAsIDB4N2JmZGU4Y2YwMDAwMDAwMCwKKyAgICAweGJjNmJhOTgwMDAwMDAwMDAsIDB4ZmQ1YWIyOTkwMDAwMDAwMCwgMHgzZTA5OWZiMjAwMDAwMDAwLAorICAgIDB4N2YzODg0YWIwMDAwMDAwMCwgMHhiMDI0MWMyYzAwMDAwMDAwLCAweGYxMTUwNzM1MDAwMDAwMDAsCisgICAgMHgzMjQ2MmExZTAwMDAwMDAwLCAweDczNzczMTA3MDAwMDAwMDAsIDB4YjRlMTcwNDgwMDAwMDAwMCwKKyAgICAweGY1ZDA2YjUxMDAwMDAwMDAsIDB4MzY4MzQ2N2EwMDAwMDAwMCwgMHg3N2IyNWQ2MzAwMDAwMDAwLAorICAgIDB4NGVkN2ZhY2IwMDAwMDAwMCwgMHgwZmU2ZTFkMjAwMDAwMDAwLCAweGNjYjVjY2Y5MDAwMDAwMDAsCisgICAgMHg4ZDg0ZDdlMDAwMDAwMDAwLCAweDRhMTI5NmFmMDAwMDAwMDAsIDB4MGIyMzhkYjYwMDAwMDAwMCwKKyAgICAweGM4NzBhMDlkMDAwMDAwMDAsIDB4ODk0MWJiODQwMDAwMDAwMCwgMHg0NjVkMjMwMzAwMDAwMDAwLAorICAgIDB4MDc2YzM4MWEwMDAwMDAwMCwgMHhjNDNmMTUzMTAwMDAwMDAwLCAweDg1MGUwZTI4MDAwMDAwMDAsCisgICAgMHg0Mjk4NGY2NzAwMDAwMDAwLCAweDAzYTk1NDdlMDAwMDAwMDAsIDB4YzBmYTc5NTUwMDAwMDAwMCwKKyAgICAweDgxY2I2MjRjMDAwMDAwMDAsIDB4MWZjNTM4ODEwMDAwMDAwMCwgMHg1ZWY0MjM5ODAwMDAwMDAwLAorICAgIDB4OWRhNzBlYjMwMDAwMDAwMCwgMHhkYzk2MTVhYTAwMDAwMDAwLCAweDFiMDA1NGU1MDAwMDAwMDAsCisgICAgMHg1YTMxNGZmYzAwMDAwMDAwLCAweDk5NjI2MmQ3MDAwMDAwMDAsIDB4ZDg1Mzc5Y2UwMDAwMDAwMCwKKyAgICAweDE3NGZlMTQ5MDAwMDAwMDAsIDB4NTY3ZWZhNTAwMDAwMDAwMCwgMHg5NTJkZDc3YjAwMDAwMDAwLAorICAgIDB4ZDQxY2NjNjIwMDAwMDAwMCwgMHgxMzhhOGQyZDAwMDAwMDAwLCAweDUyYmI5NjM0MDAwMDAwMDAsCisgICAgMHg5MWU4YmIxZjAwMDAwMDAwLCAweGQwZDlhMDA2MDAwMDAwMDAsIDB4ZWNmMzdlNWUwMDAwMDAwMCwKKyAgICAweGFkYzI2NTQ3MDAwMDAwMDAsIDB4NmU5MTQ4NmMwMDAwMDAwMCwgMHgyZmEwNTM3NTAwMDAwMDAwLAorICAgIDB4ZTgzNjEyM2EwMDAwMDAwMCwgMHhhOTA3MDkyMzAwMDAwMDAwLCAweDZhNTQyNDA4MDAwMDAwMDAsCisgICAgMHgyYjY1M2YxMTAwMDAwMDAwLCAweGU0NzlhNzk2MDAwMDAwMDAsIDB4YTU0OGJjOGYwMDAwMDAwMCwKKyAgICAweDY2MWI5MWE0MDAwMDAwMDAsIDB4MjcyYThhYmQwMDAwMDAwMCwgMHhlMGJjY2JmMjAwMDAwMDAwLAorICAgIDB4YTE4ZGQwZWIwMDAwMDAwMCwgMHg2MmRlZmRjMDAwMDAwMDAwLCAweDIzZWZlNmQ5MDAwMDAwMDAsCisgICAgMHhiZGUxYmMxNDAwMDAwMDAwLCAweGZjZDBhNzBkMDAwMDAwMDAsIDB4M2Y4MzhhMjYwMDAwMDAwMCwKKyAgICAweDdlYjI5MTNmMDAwMDAwMDAsIDB4YjkyNGQwNzAwMDAwMDAwMCwgMHhmODE1Y2I2OTAwMDAwMDAwLAorICAgIDB4M2I0NmU2NDIwMDAwMDAwMCwgMHg3YTc3ZmQ1YjAwMDAwMDAwLCAweGI1NmI2NWRjMDAwMDAwMDAsCisgICAgMHhmNDVhN2VjNTAwMDAwMDAwLCAweDM3MDk1M2VlMDAwMDAwMDAsIDB4NzYzODQ4ZjcwMDAwMDAwMCwKKyAgICAweGIxYWUwOWI4MDAwMDAwMDAsIDB4ZjA5ZjEyYTEwMDAwMDAwMCwgMHgzM2NjM2Y4YTAwMDAwMDAwLAorICAgIDB4NzJmZDI0OTMwMDAwMDAwMH0sCisgICB7MHgwMDAwMDAwMDAwMDAwMDAwLCAweDM3NmFjMjAxMDAwMDAwMDAsIDB4NmVkNDg0MDMwMDAwMDAwMCwKKyAgICAweDU5YmU0NjAyMDAwMDAwMDAsIDB4ZGNhODA5MDcwMDAwMDAwMCwgMHhlYmMyY2IwNjAwMDAwMDAwLAorICAgIDB4YjI3YzhkMDQwMDAwMDAwMCwgMHg4NTE2NGYwNTAwMDAwMDAwLCAweGI4NTExMzBlMDAwMDAwMDAsCisgICAgMHg4ZjNiZDEwZjAwMDAwMDAwLCAweGQ2ODU5NzBkMDAwMDAwMDAsIDB4ZTFlZjU1MGMwMDAwMDAwMCwKKyAgICAweDY0ZjkxYTA5MDAwMDAwMDAsIDB4NTM5M2Q4MDgwMDAwMDAwMCwgMHgwYTJkOWUwYTAwMDAwMDAwLAorICAgIDB4M2Q0NzVjMGIwMDAwMDAwMCwgMHg3MGEzMjYxYzAwMDAwMDAwLCAweDQ3YzllNDFkMDAwMDAwMDAsCisgICAgMHgxZTc3YTIxZjAwMDAwMDAwLCAweDI5MWQ2MDFlMDAwMDAwMDAsIDB4YWMwYjJmMWIwMDAwMDAwMCwKKyAgICAweDliNjFlZDFhMDAwMDAwMDAsIDB4YzJkZmFiMTgwMDAwMDAwMCwgMHhmNWI1NjkxOTAwMDAwMDAwLAorICAgIDB4YzhmMjM1MTIwMDAwMDAwMCwgMHhmZjk4ZjcxMzAwMDAwMDAwLCAweGE2MjZiMTExMDAwMDAwMDAsCisgICAgMHg5MTRjNzMxMDAwMDAwMDAwLCAweDE0NWEzYzE1MDAwMDAwMDAsIDB4MjMzMGZlMTQwMDAwMDAwMCwKKyAgICAweDdhOGViODE2MDAwMDAwMDAsIDB4NGRlNDdhMTcwMDAwMDAwMCwgMHhlMDQ2NGQzODAwMDAwMDAwLAorICAgIDB4ZDcyYzhmMzkwMDAwMDAwMCwgMHg4ZTkyYzkzYjAwMDAwMDAwLCAweGI5ZjgwYjNhMDAwMDAwMDAsCisgICAgMHgzY2VlNDQzZjAwMDAwMDAwLCAweDBiODQ4NjNlMDAwMDAwMDAsIDB4NTIzYWMwM2MwMDAwMDAwMCwKKyAgICAweDY1NTAwMjNkMDAwMDAwMDAsIDB4NTgxNzVlMzYwMDAwMDAwMCwgMHg2ZjdkOWMzNzAwMDAwMDAwLAorICAgIDB4MzZjM2RhMzUwMDAwMDAwMCwgMHgwMWE5MTgzNDAwMDAwMDAwLCAweDg0YmY1NzMxMDAwMDAwMDAsCisgICAgMHhiM2Q1OTUzMDAwMDAwMDAwLCAweGVhNmJkMzMyMDAwMDAwMDAsIDB4ZGQwMTExMzMwMDAwMDAwMCwKKyAgICAweDkwZTU2YjI0MDAwMDAwMDAsIDB4YTc4ZmE5MjUwMDAwMDAwMCwgMHhmZTMxZWYyNzAwMDAwMDAwLAorICAgIDB4Yzk1YjJkMjYwMDAwMDAwMCwgMHg0YzRkNjIyMzAwMDAwMDAwLCAweDdiMjdhMDIyMDAwMDAwMDAsCisgICAgMHgyMjk5ZTYyMDAwMDAwMDAwLCAweDE1ZjMyNDIxMDAwMDAwMDAsIDB4MjhiNDc4MmEwMDAwMDAwMCwKKyAgICAweDFmZGViYTJiMDAwMDAwMDAsIDB4NDY2MGZjMjkwMDAwMDAwMCwgMHg3MTBhM2UyODAwMDAwMDAwLAorICAgIDB4ZjQxYzcxMmQwMDAwMDAwMCwgMHhjMzc2YjMyYzAwMDAwMDAwLCAweDlhYzhmNTJlMDAwMDAwMDAsCisgICAgMHhhZGEyMzcyZjAwMDAwMDAwLCAweGMwOGQ5YTcwMDAwMDAwMDAsIDB4ZjdlNzU4NzEwMDAwMDAwMCwKKyAgICAweGFlNTkxZTczMDAwMDAwMDAsIDB4OTkzM2RjNzIwMDAwMDAwMCwgMHgxYzI1OTM3NzAwMDAwMDAwLAorICAgIDB4MmI0ZjUxNzYwMDAwMDAwMCwgMHg3MmYxMTc3NDAwMDAwMDAwLCAweDQ1OWJkNTc1MDAwMDAwMDAsCisgICAgMHg3OGRjODk3ZTAwMDAwMDAwLCAweDRmYjY0YjdmMDAwMDAwMDAsIDB4MTYwODBkN2QwMDAwMDAwMCwKKyAgICAweDIxNjJjZjdjMDAwMDAwMDAsIDB4YTQ3NDgwNzkwMDAwMDAwMCwgMHg5MzFlNDI3ODAwMDAwMDAwLAorICAgIDB4Y2FhMDA0N2EwMDAwMDAwMCwgMHhmZGNhYzY3YjAwMDAwMDAwLCAweGIwMmViYzZjMDAwMDAwMDAsCisgICAgMHg4NzQ0N2U2ZDAwMDAwMDAwLCAweGRlZmEzODZmMDAwMDAwMDAsIDB4ZTk5MGZhNmUwMDAwMDAwMCwKKyAgICAweDZjODZiNTZiMDAwMDAwMDAsIDB4NWJlYzc3NmEwMDAwMDAwMCwgMHgwMjUyMzE2ODAwMDAwMDAwLAorICAgIDB4MzUzOGYzNjkwMDAwMDAwMCwgMHgwODdmYWY2MjAwMDAwMDAwLCAweDNmMTU2ZDYzMDAwMDAwMDAsCisgICAgMHg2NmFiMmI2MTAwMDAwMDAwLCAweDUxYzFlOTYwMDAwMDAwMDAsIDB4ZDRkN2E2NjUwMDAwMDAwMCwKKyAgICAweGUzYmQ2NDY0MDAwMDAwMDAsIDB4YmEwMzIyNjYwMDAwMDAwMCwgMHg4ZDY5ZTA2NzAwMDAwMDAwLAorICAgIDB4MjBjYmQ3NDgwMDAwMDAwMCwgMHgxN2ExMTU0OTAwMDAwMDAwLCAweDRlMWY1MzRiMDAwMDAwMDAsCisgICAgMHg3OTc1OTE0YTAwMDAwMDAwLCAweGZjNjNkZTRmMDAwMDAwMDAsIDB4Y2IwOTFjNGUwMDAwMDAwMCwKKyAgICAweDkyYjc1YTRjMDAwMDAwMDAsIDB4YTVkZDk4NGQwMDAwMDAwMCwgMHg5ODlhYzQ0NjAwMDAwMDAwLAorICAgIDB4YWZmMDA2NDcwMDAwMDAwMCwgMHhmNjRlNDA0NTAwMDAwMDAwLCAweGMxMjQ4MjQ0MDAwMDAwMDAsCisgICAgMHg0NDMyY2Q0MTAwMDAwMDAwLCAweDczNTgwZjQwMDAwMDAwMDAsIDB4MmFlNjQ5NDIwMDAwMDAwMCwKKyAgICAweDFkOGM4YjQzMDAwMDAwMDAsIDB4NTA2OGYxNTQwMDAwMDAwMCwgMHg2NzAyMzM1NTAwMDAwMDAwLAorICAgIDB4M2ViYzc1NTcwMDAwMDAwMCwgMHgwOWQ2Yjc1NjAwMDAwMDAwLCAweDhjYzBmODUzMDAwMDAwMDAsCisgICAgMHhiYmFhM2E1MjAwMDAwMDAwLCAweGUyMTQ3YzUwMDAwMDAwMDAsIDB4ZDU3ZWJlNTEwMDAwMDAwMCwKKyAgICAweGU4MzllMjVhMDAwMDAwMDAsIDB4ZGY1MzIwNWIwMDAwMDAwMCwgMHg4NmVkNjY1OTAwMDAwMDAwLAorICAgIDB4YjE4N2E0NTgwMDAwMDAwMCwgMHgzNDkxZWI1ZDAwMDAwMDAwLCAweDAzZmIyOTVjMDAwMDAwMDAsCisgICAgMHg1YTQ1NmY1ZTAwMDAwMDAwLCAweDZkMmZhZDVmMDAwMDAwMDAsIDB4ODAxYjM1ZTEwMDAwMDAwMCwKKyAgICAweGI3NzFmN2UwMDAwMDAwMDAsIDB4ZWVjZmIxZTIwMDAwMDAwMCwgMHhkOWE1NzNlMzAwMDAwMDAwLAorICAgIDB4NWNiMzNjZTYwMDAwMDAwMCwgMHg2YmQ5ZmVlNzAwMDAwMDAwLCAweDMyNjdiOGU1MDAwMDAwMDAsCisgICAgMHgwNTBkN2FlNDAwMDAwMDAwLCAweDM4NGEyNmVmMDAwMDAwMDAsIDB4MGYyMGU0ZWUwMDAwMDAwMCwKKyAgICAweDU2OWVhMmVjMDAwMDAwMDAsIDB4NjFmNDYwZWQwMDAwMDAwMCwgMHhlNGUyMmZlODAwMDAwMDAwLAorICAgIDB4ZDM4OGVkZTkwMDAwMDAwMCwgMHg4YTM2YWJlYjAwMDAwMDAwLCAweGJkNWM2OWVhMDAwMDAwMDAsCisgICAgMHhmMGI4MTNmZDAwMDAwMDAwLCAweGM3ZDJkMWZjMDAwMDAwMDAsIDB4OWU2Yzk3ZmUwMDAwMDAwMCwKKyAgICAweGE5MDY1NWZmMDAwMDAwMDAsIDB4MmMxMDFhZmEwMDAwMDAwMCwgMHgxYjdhZDhmYjAwMDAwMDAwLAorICAgIDB4NDJjNDllZjkwMDAwMDAwMCwgMHg3NWFlNWNmODAwMDAwMDAwLCAweDQ4ZTkwMGYzMDAwMDAwMDAsCisgICAgMHg3ZjgzYzJmMjAwMDAwMDAwLCAweDI2M2Q4NGYwMDAwMDAwMDAsIDB4MTE1NzQ2ZjEwMDAwMDAwMCwKKyAgICAweDk0NDEwOWY0MDAwMDAwMDAsIDB4YTMyYmNiZjUwMDAwMDAwMCwgMHhmYTk1OGRmNzAwMDAwMDAwLAorICAgIDB4Y2RmZjRmZjYwMDAwMDAwMCwgMHg2MDVkNzhkOTAwMDAwMDAwLCAweDU3MzdiYWQ4MDAwMDAwMDAsCisgICAgMHgwZTg5ZmNkYTAwMDAwMDAwLCAweDM5ZTMzZWRiMDAwMDAwMDAsIDB4YmNmNTcxZGUwMDAwMDAwMCwKKyAgICAweDhiOWZiM2RmMDAwMDAwMDAsIDB4ZDIyMWY1ZGQwMDAwMDAwMCwgMHhlNTRiMzdkYzAwMDAwMDAwLAorICAgIDB4ZDgwYzZiZDcwMDAwMDAwMCwgMHhlZjY2YTlkNjAwMDAwMDAwLCAweGI2ZDhlZmQ0MDAwMDAwMDAsCisgICAgMHg4MWIyMmRkNTAwMDAwMDAwLCAweDA0YTQ2MmQwMDAwMDAwMDAsIDB4MzNjZWEwZDEwMDAwMDAwMCwKKyAgICAweDZhNzBlNmQzMDAwMDAwMDAsIDB4NWQxYTI0ZDIwMDAwMDAwMCwgMHgxMGZlNWVjNTAwMDAwMDAwLAorICAgIDB4Mjc5NDljYzQwMDAwMDAwMCwgMHg3ZTJhZGFjNjAwMDAwMDAwLCAweDQ5NDAxOGM3MDAwMDAwMDAsCisgICAgMHhjYzU2NTdjMjAwMDAwMDAwLCAweGZiM2M5NWMzMDAwMDAwMDAsIDB4YTI4MmQzYzEwMDAwMDAwMCwKKyAgICAweDk1ZTgxMWMwMDAwMDAwMDAsIDB4YThhZjRkY2IwMDAwMDAwMCwgMHg5ZmM1OGZjYTAwMDAwMDAwLAorICAgIDB4YzY3YmM5YzgwMDAwMDAwMCwgMHhmMTExMGJjOTAwMDAwMDAwLCAweDc0MDc0NGNjMDAwMDAwMDAsCisgICAgMHg0MzZkODZjZDAwMDAwMDAwLCAweDFhZDNjMGNmMDAwMDAwMDAsIDB4MmRiOTAyY2UwMDAwMDAwMCwKKyAgICAweDQwOTZhZjkxMDAwMDAwMDAsIDB4NzdmYzZkOTAwMDAwMDAwMCwgMHgyZTQyMmI5MjAwMDAwMDAwLAorICAgIDB4MTkyOGU5OTMwMDAwMDAwMCwgMHg5YzNlYTY5NjAwMDAwMDAwLCAweGFiNTQ2NDk3MDAwMDAwMDAsCisgICAgMHhmMmVhMjI5NTAwMDAwMDAwLCAweGM1ODBlMDk0MDAwMDAwMDAsIDB4ZjhjN2JjOWYwMDAwMDAwMCwKKyAgICAweGNmYWQ3ZTllMDAwMDAwMDAsIDB4OTYxMzM4OWMwMDAwMDAwMCwgMHhhMTc5ZmE5ZDAwMDAwMDAwLAorICAgIDB4MjQ2ZmI1OTgwMDAwMDAwMCwgMHgxMzA1Nzc5OTAwMDAwMDAwLCAweDRhYmIzMTliMDAwMDAwMDAsCisgICAgMHg3ZGQxZjM5YTAwMDAwMDAwLCAweDMwMzU4OThkMDAwMDAwMDAsIDB4MDc1ZjRiOGMwMDAwMDAwMCwKKyAgICAweDVlZTEwZDhlMDAwMDAwMDAsIDB4Njk4YmNmOGYwMDAwMDAwMCwgMHhlYzlkODA4YTAwMDAwMDAwLAorICAgIDB4ZGJmNzQyOGIwMDAwMDAwMCwgMHg4MjQ5MDQ4OTAwMDAwMDAwLCAweGI1MjNjNjg4MDAwMDAwMDAsCisgICAgMHg4ODY0OWE4MzAwMDAwMDAwLCAweGJmMGU1ODgyMDAwMDAwMDAsIDB4ZTZiMDFlODAwMDAwMDAwMCwKKyAgICAweGQxZGFkYzgxMDAwMDAwMDAsIDB4NTRjYzkzODQwMDAwMDAwMCwgMHg2M2E2NTE4NTAwMDAwMDAwLAorICAgIDB4M2ExODE3ODcwMDAwMDAwMCwgMHgwZDcyZDU4NjAwMDAwMDAwLCAweGEwZDBlMmE5MDAwMDAwMDAsCisgICAgMHg5N2JhMjBhODAwMDAwMDAwLCAweGNlMDQ2NmFhMDAwMDAwMDAsIDB4Zjk2ZWE0YWIwMDAwMDAwMCwKKyAgICAweDdjNzhlYmFlMDAwMDAwMDAsIDB4NGIxMjI5YWYwMDAwMDAwMCwgMHgxMmFjNmZhZDAwMDAwMDAwLAorICAgIDB4MjVjNmFkYWMwMDAwMDAwMCwgMHgxODgxZjFhNzAwMDAwMDAwLCAweDJmZWIzM2E2MDAwMDAwMDAsCisgICAgMHg3NjU1NzVhNDAwMDAwMDAwLCAweDQxM2ZiN2E1MDAwMDAwMDAsIDB4YzQyOWY4YTAwMDAwMDAwMCwKKyAgICAweGYzNDMzYWExMDAwMDAwMDAsIDB4YWFmZDdjYTMwMDAwMDAwMCwgMHg5ZDk3YmVhMjAwMDAwMDAwLAorICAgIDB4ZDA3M2M0YjUwMDAwMDAwMCwgMHhlNzE5MDZiNDAwMDAwMDAwLCAweGJlYTc0MGI2MDAwMDAwMDAsCisgICAgMHg4OWNkODJiNzAwMDAwMDAwLCAweDBjZGJjZGIyMDAwMDAwMDAsIDB4M2JiMTBmYjMwMDAwMDAwMCwKKyAgICAweDYyMGY0OWIxMDAwMDAwMDAsIDB4NTU2NThiYjAwMDAwMDAwMCwgMHg2ODIyZDdiYjAwMDAwMDAwLAorICAgIDB4NWY0ODE1YmEwMDAwMDAwMCwgMHgwNmY2NTNiODAwMDAwMDAwLCAweDMxOWM5MWI5MDAwMDAwMDAsCisgICAgMHhiNDhhZGViYzAwMDAwMDAwLCAweDgzZTAxY2JkMDAwMDAwMDAsIDB4ZGE1ZTVhYmYwMDAwMDAwMCwKKyAgICAweGVkMzQ5OGJlMDAwMDAwMDB9LAorICAgezB4MDAwMDAwMDAwMDAwMDAwMCwgMHg2NTY3YmNiODAwMDAwMDAwLCAweDhiYzgwOWFhMDAwMDAwMDAsCisgICAgMHhlZWFmYjUxMjAwMDAwMDAwLCAweDU3OTc2MjhmMDAwMDAwMDAsIDB4MzJmMGRlMzcwMDAwMDAwMCwKKyAgICAweGRjNWY2YjI1MDAwMDAwMDAsIDB4YjkzOGQ3OWQwMDAwMDAwMCwgMHhlZjI4YjRjNTAwMDAwMDAwLAorICAgIDB4OGE0ZjA4N2QwMDAwMDAwMCwgMHg2NGUwYmQ2ZjAwMDAwMDAwLCAweDAxODcwMWQ3MDAwMDAwMDAsCisgICAgMHhiOGJmZDY0YTAwMDAwMDAwLCAweGRkZDg2YWYyMDAwMDAwMDAsIDB4MzM3N2RmZTAwMDAwMDAwMCwKKyAgICAweDU2MTA2MzU4MDAwMDAwMDAsIDB4OWY1NzE5NTAwMDAwMDAwMCwgMHhmYTMwYTVlODAwMDAwMDAwLAorICAgIDB4MTQ5ZjEwZmEwMDAwMDAwMCwgMHg3MWY4YWM0MjAwMDAwMDAwLCAweGM4YzA3YmRmMDAwMDAwMDAsCisgICAgMHhhZGE3Yzc2NzAwMDAwMDAwLCAweDQzMDg3Mjc1MDAwMDAwMDAsIDB4MjY2ZmNlY2QwMDAwMDAwMCwKKyAgICAweDcwN2ZhZDk1MDAwMDAwMDAsIDB4MTUxODExMmQwMDAwMDAwMCwgMHhmYmI3YTQzZjAwMDAwMDAwLAorICAgIDB4OWVkMDE4ODcwMDAwMDAwMCwgMHgyN2U4Y2YxYTAwMDAwMDAwLCAweDQyOGY3M2EyMDAwMDAwMDAsCisgICAgMHhhYzIwYzZiMDAwMDAwMDAwLCAweGM5NDc3YTA4MDAwMDAwMDAsIDB4M2VhZjMyYTAwMDAwMDAwMCwKKyAgICAweDViYzg4ZTE4MDAwMDAwMDAsIDB4YjU2NzNiMGEwMDAwMDAwMCwgMHhkMDAwODdiMjAwMDAwMDAwLAorICAgIDB4NjkzODUwMmYwMDAwMDAwMCwgMHgwYzVmZWM5NzAwMDAwMDAwLCAweGUyZjA1OTg1MDAwMDAwMDAsCisgICAgMHg4Nzk3ZTUzZDAwMDAwMDAwLCAweGQxODc4NjY1MDAwMDAwMDAsIDB4YjRlMDNhZGQwMDAwMDAwMCwKKyAgICAweDVhNGY4ZmNmMDAwMDAwMDAsIDB4M2YyODMzNzcwMDAwMDAwMCwgMHg4NjEwZTRlYTAwMDAwMDAwLAorICAgIDB4ZTM3NzU4NTIwMDAwMDAwMCwgMHgwZGQ4ZWQ0MDAwMDAwMDAwLCAweDY4YmY1MWY4MDAwMDAwMDAsCisgICAgMHhhMWY4MmJmMDAwMDAwMDAwLCAweGM0OWY5NzQ4MDAwMDAwMDAsIDB4MmEzMDIyNWEwMDAwMDAwMCwKKyAgICAweDRmNTc5ZWUyMDAwMDAwMDAsIDB4ZjY2ZjQ5N2YwMDAwMDAwMCwgMHg5MzA4ZjVjNzAwMDAwMDAwLAorICAgIDB4N2RhNzQwZDUwMDAwMDAwMCwgMHgxOGMwZmM2ZDAwMDAwMDAwLCAweDRlZDA5ZjM1MDAwMDAwMDAsCisgICAgMHgyYmI3MjM4ZDAwMDAwMDAwLCAweGM1MTg5NjlmMDAwMDAwMDAsIDB4YTA3ZjJhMjcwMDAwMDAwMCwKKyAgICAweDE5NDdmZGJhMDAwMDAwMDAsIDB4N2MyMDQxMDIwMDAwMDAwMCwgMHg5MjhmZjQxMDAwMDAwMDAwLAorICAgIDB4ZjdlODQ4YTgwMDAwMDAwMCwgMHgzZDU4MTQ5YjAwMDAwMDAwLCAweDU4M2ZhODIzMDAwMDAwMDAsCisgICAgMHhiNjkwMWQzMTAwMDAwMDAwLCAweGQzZjdhMTg5MDAwMDAwMDAsIDB4NmFjZjc2MTQwMDAwMDAwMCwKKyAgICAweDBmYThjYWFjMDAwMDAwMDAsIDB4ZTEwNzdmYmUwMDAwMDAwMCwgMHg4NDYwYzMwNjAwMDAwMDAwLAorICAgIDB4ZDI3MGEwNWUwMDAwMDAwMCwgMHhiNzE3MWNlNjAwMDAwMDAwLCAweDU5YjhhOWY0MDAwMDAwMDAsCisgICAgMHgzY2RmMTU0YzAwMDAwMDAwLCAweDg1ZTdjMmQxMDAwMDAwMDAsIDB4ZTA4MDdlNjkwMDAwMDAwMCwKKyAgICAweDBlMmZjYjdiMDAwMDAwMDAsIDB4NmI0ODc3YzMwMDAwMDAwMCwgMHhhMjBmMGRjYjAwMDAwMDAwLAorICAgIDB4Yzc2OGIxNzMwMDAwMDAwMCwgMHgyOWM3MDQ2MTAwMDAwMDAwLCAweDRjYTBiOGQ5MDAwMDAwMDAsCisgICAgMHhmNTk4NmY0NDAwMDAwMDAwLCAweDkwZmZkM2ZjMDAwMDAwMDAsIDB4N2U1MDY2ZWUwMDAwMDAwMCwKKyAgICAweDFiMzdkYTU2MDAwMDAwMDAsIDB4NGQyN2I5MGUwMDAwMDAwMCwgMHgyODQwMDViNjAwMDAwMDAwLAorICAgIDB4YzZlZmIwYTQwMDAwMDAwMCwgMHhhMzg4MGMxYzAwMDAwMDAwLCAweDFhYjBkYjgxMDAwMDAwMDAsCisgICAgMHg3ZmQ3NjczOTAwMDAwMDAwLCAweDkxNzhkMjJiMDAwMDAwMDAsIDB4ZjQxZjZlOTMwMDAwMDAwMCwKKyAgICAweDAzZjcyNjNiMDAwMDAwMDAsIDB4NjY5MDlhODMwMDAwMDAwMCwgMHg4ODNmMmY5MTAwMDAwMDAwLAorICAgIDB4ZWQ1ODkzMjkwMDAwMDAwMCwgMHg1NDYwNDRiNDAwMDAwMDAwLCAweDMxMDdmODBjMDAwMDAwMDAsCisgICAgMHhkZmE4NGQxZTAwMDAwMDAwLCAweGJhY2ZmMWE2MDAwMDAwMDAsIDB4ZWNkZjkyZmUwMDAwMDAwMCwKKyAgICAweDg5YjgyZTQ2MDAwMDAwMDAsIDB4NjcxNzliNTQwMDAwMDAwMCwgMHgwMjcwMjdlYzAwMDAwMDAwLAorICAgIDB4YmI0OGYwNzEwMDAwMDAwMCwgMHhkZTJmNGNjOTAwMDAwMDAwLCAweDMwODBmOWRiMDAwMDAwMDAsCisgICAgMHg1NWU3NDU2MzAwMDAwMDAwLCAweDljYTAzZjZiMDAwMDAwMDAsIDB4ZjljNzgzZDMwMDAwMDAwMCwKKyAgICAweDE3NjgzNmMxMDAwMDAwMDAsIDB4NzIwZjhhNzkwMDAwMDAwMCwgMHhjYjM3NWRlNDAwMDAwMDAwLAorICAgIDB4YWU1MGUxNWMwMDAwMDAwMCwgMHg0MGZmNTQ0ZTAwMDAwMDAwLCAweDI1OThlOGY2MDAwMDAwMDAsCisgICAgMHg3Mzg4OGJhZTAwMDAwMDAwLCAweDE2ZWYzNzE2MDAwMDAwMDAsIDB4Zjg0MDgyMDQwMDAwMDAwMCwKKyAgICAweDlkMjczZWJjMDAwMDAwMDAsIDB4MjQxZmU5MjEwMDAwMDAwMCwgMHg0MTc4NTU5OTAwMDAwMDAwLAorICAgIDB4YWZkN2UwOGIwMDAwMDAwMCwgMHhjYWIwNWMzMzAwMDAwMDAwLCAweDNiYjY1OWVkMDAwMDAwMDAsCisgICAgMHg1ZWQxZTU1NTAwMDAwMDAwLCAweGIwN2U1MDQ3MDAwMDAwMDAsIDB4ZDUxOWVjZmYwMDAwMDAwMCwKKyAgICAweDZjMjEzYjYyMDAwMDAwMDAsIDB4MDk0Njg3ZGEwMDAwMDAwMCwgMHhlN2U5MzJjODAwMDAwMDAwLAorICAgIDB4ODI4ZThlNzAwMDAwMDAwMCwgMHhkNDllZWQyODAwMDAwMDAwLCAweGIxZjk1MTkwMDAwMDAwMDAsCisgICAgMHg1ZjU2ZTQ4MjAwMDAwMDAwLCAweDNhMzE1ODNhMDAwMDAwMDAsIDB4ODMwOThmYTcwMDAwMDAwMCwKKyAgICAweGU2NmUzMzFmMDAwMDAwMDAsIDB4MDhjMTg2MGQwMDAwMDAwMCwgMHg2ZGE2M2FiNTAwMDAwMDAwLAorICAgIDB4YTRlMTQwYmQwMDAwMDAwMCwgMHhjMTg2ZmMwNTAwMDAwMDAwLCAweDJmMjk0OTE3MDAwMDAwMDAsCisgICAgMHg0YTRlZjVhZjAwMDAwMDAwLCAweGYzNzYyMjMyMDAwMDAwMDAsIDB4OTYxMTllOGEwMDAwMDAwMCwKKyAgICAweDc4YmUyYjk4MDAwMDAwMDAsIDB4MWRkOTk3MjAwMDAwMDAwMCwgMHg0YmM5ZjQ3ODAwMDAwMDAwLAorICAgIDB4MmVhZTQ4YzAwMDAwMDAwMCwgMHhjMDAxZmRkMjAwMDAwMDAwLCAweGE1NjY0MTZhMDAwMDAwMDAsCisgICAgMHgxYzVlOTZmNzAwMDAwMDAwLCAweDc5MzkyYTRmMDAwMDAwMDAsIDB4OTc5NjlmNWQwMDAwMDAwMCwKKyAgICAweGYyZjEyM2U1MDAwMDAwMDAsIDB4MDUxOTZiNGQwMDAwMDAwMCwgMHg2MDdlZDdmNTAwMDAwMDAwLAorICAgIDB4OGVkMTYyZTcwMDAwMDAwMCwgMHhlYmI2ZGU1ZjAwMDAwMDAwLCAweDUyOGUwOWMyMDAwMDAwMDAsCisgICAgMHgzN2U5YjU3YTAwMDAwMDAwLCAweGQ5NDYwMDY4MDAwMDAwMDAsIDB4YmMyMWJjZDAwMDAwMDAwMCwKKyAgICAweGVhMzFkZjg4MDAwMDAwMDAsIDB4OGY1NjYzMzAwMDAwMDAwMCwgMHg2MWY5ZDYyMjAwMDAwMDAwLAorICAgIDB4MDQ5ZTZhOWEwMDAwMDAwMCwgMHhiZGE2YmQwNzAwMDAwMDAwLCAweGQ4YzEwMWJmMDAwMDAwMDAsCisgICAgMHgzNjZlYjRhZDAwMDAwMDAwLCAweDUzMDkwODE1MDAwMDAwMDAsIDB4OWE0ZTcyMWQwMDAwMDAwMCwKKyAgICAweGZmMjljZWE1MDAwMDAwMDAsIDB4MTE4NjdiYjcwMDAwMDAwMCwgMHg3NGUxYzcwZjAwMDAwMDAwLAorICAgIDB4Y2RkOTEwOTIwMDAwMDAwMCwgMHhhOGJlYWMyYTAwMDAwMDAwLCAweDQ2MTExOTM4MDAwMDAwMDAsCisgICAgMHgyMzc2YTU4MDAwMDAwMDAwLCAweDc1NjZjNmQ4MDAwMDAwMDAsIDB4MTAwMTdhNjAwMDAwMDAwMCwKKyAgICAweGZlYWVjZjcyMDAwMDAwMDAsIDB4OWJjOTczY2EwMDAwMDAwMCwgMHgyMmYxYTQ1NzAwMDAwMDAwLAorICAgIDB4NDc5NjE4ZWYwMDAwMDAwMCwgMHhhOTM5YWRmZDAwMDAwMDAwLCAweGNjNWUxMTQ1MDAwMDAwMDAsCisgICAgMHgwNmVlNGQ3NjAwMDAwMDAwLCAweDYzODlmMWNlMDAwMDAwMDAsIDB4OGQyNjQ0ZGMwMDAwMDAwMCwKKyAgICAweGU4NDFmODY0MDAwMDAwMDAsIDB4NTE3OTJmZjkwMDAwMDAwMCwgMHgzNDFlOTM0MTAwMDAwMDAwLAorICAgIDB4ZGFiMTI2NTMwMDAwMDAwMCwgMHhiZmQ2OWFlYjAwMDAwMDAwLCAweGU5YzZmOWIzMDAwMDAwMDAsCisgICAgMHg4Y2ExNDUwYjAwMDAwMDAwLCAweDYyMGVmMDE5MDAwMDAwMDAsIDB4MDc2OTRjYTEwMDAwMDAwMCwKKyAgICAweGJlNTE5YjNjMDAwMDAwMDAsIDB4ZGIzNjI3ODQwMDAwMDAwMCwgMHgzNTk5OTI5NjAwMDAwMDAwLAorICAgIDB4NTBmZTJlMmUwMDAwMDAwMCwgMHg5OWI5NTQyNjAwMDAwMDAwLCAweGZjZGVlODllMDAwMDAwMDAsCisgICAgMHgxMjcxNWQ4YzAwMDAwMDAwLCAweDc3MTZlMTM0MDAwMDAwMDAsIDB4Y2UyZTM2YTkwMDAwMDAwMCwKKyAgICAweGFiNDk4YTExMDAwMDAwMDAsIDB4NDVlNjNmMDMwMDAwMDAwMCwgMHgyMDgxODNiYjAwMDAwMDAwLAorICAgIDB4NzY5MWUwZTMwMDAwMDAwMCwgMHgxM2Y2NWM1YjAwMDAwMDAwLCAweGZkNTllOTQ5MDAwMDAwMDAsCisgICAgMHg5ODNlNTVmMTAwMDAwMDAwLCAweDIxMDY4MjZjMDAwMDAwMDAsIDB4NDQ2MTNlZDQwMDAwMDAwMCwKKyAgICAweGFhY2U4YmM2MDAwMDAwMDAsIDB4Y2ZhOTM3N2UwMDAwMDAwMCwgMHgzODQxN2ZkNjAwMDAwMDAwLAorICAgIDB4NWQyNmMzNmUwMDAwMDAwMCwgMHhiMzg5NzY3YzAwMDAwMDAwLCAweGQ2ZWVjYWM0MDAwMDAwMDAsCisgICAgMHg2ZmQ2MWQ1OTAwMDAwMDAwLCAweDBhYjFhMWUxMDAwMDAwMDAsIDB4ZTQxZTE0ZjMwMDAwMDAwMCwKKyAgICAweDgxNzlhODRiMDAwMDAwMDAsIDB4ZDc2OWNiMTMwMDAwMDAwMCwgMHhiMjBlNzdhYjAwMDAwMDAwLAorICAgIDB4NWNhMWMyYjkwMDAwMDAwMCwgMHgzOWM2N2UwMTAwMDAwMDAwLCAweDgwZmVhOTljMDAwMDAwMDAsCisgICAgMHhlNTk5MTUyNDAwMDAwMDAwLCAweDBiMzZhMDM2MDAwMDAwMDAsIDB4NmU1MTFjOGUwMDAwMDAwMCwKKyAgICAweGE3MTY2Njg2MDAwMDAwMDAsIDB4YzI3MWRhM2UwMDAwMDAwMCwgMHgyY2RlNmYyYzAwMDAwMDAwLAorICAgIDB4NDliOWQzOTQwMDAwMDAwMCwgMHhmMDgxMDQwOTAwMDAwMDAwLCAweDk1ZTZiOGIxMDAwMDAwMDAsCisgICAgMHg3YjQ5MGRhMzAwMDAwMDAwLCAweDFlMmViMTFiMDAwMDAwMDAsIDB4NDgzZWQyNDMwMDAwMDAwMCwKKyAgICAweDJkNTk2ZWZiMDAwMDAwMDAsIDB4YzNmNmRiZTkwMDAwMDAwMCwgMHhhNjkxNjc1MTAwMDAwMDAwLAorICAgIDB4MWZhOWIwY2MwMDAwMDAwMCwgMHg3YWNlMGM3NDAwMDAwMDAwLCAweDk0NjFiOTY2MDAwMDAwMDAsCisgICAgMHhmMTA2MDVkZTAwMDAwMDAwfSwKKyAgIHsweDAwMDAwMDAwMDAwMDAwMDAsIDB4YjAyOTYwM2QwMDAwMDAwMCwgMHg2MDUzYzA3YTAwMDAwMDAwLAorICAgIDB4ZDA3YWEwNDcwMDAwMDAwMCwgMHhjMGE2ODBmNTAwMDAwMDAwLCAweDcwOGZlMGM4MDAwMDAwMDAsCisgICAgMHhhMGY1NDA4ZjAwMDAwMDAwLCAweDEwZGMyMGIyMDAwMDAwMDAsIDB4YzE0YjcwMzAwMDAwMDAwMCwKKyAgICAweDcxNjIxMDBkMDAwMDAwMDAsIDB4YTExOGIwNGEwMDAwMDAwMCwgMHgxMTMxZDA3NzAwMDAwMDAwLAorICAgIDB4MDFlZGYwYzUwMDAwMDAwMCwgMHhiMWM0OTBmODAwMDAwMDAwLCAweDYxYmUzMGJmMDAwMDAwMDAsCisgICAgMHhkMTk3NTA4MjAwMDAwMDAwLCAweDgyOTdlMDYwMDAwMDAwMDAsIDB4MzJiZTgwNWQwMDAwMDAwMCwKKyAgICAweGUyYzQyMDFhMDAwMDAwMDAsIDB4NTJlZDQwMjcwMDAwMDAwMCwgMHg0MjMxNjA5NTAwMDAwMDAwLAorICAgIDB4ZjIxODAwYTgwMDAwMDAwMCwgMHgyMjYyYTBlZjAwMDAwMDAwLCAweDkyNGJjMGQyMDAwMDAwMDAsCisgICAgMHg0M2RjOTA1MDAwMDAwMDAwLCAweGYzZjVmMDZkMDAwMDAwMDAsIDB4MjM4ZjUwMmEwMDAwMDAwMCwKKyAgICAweDkzYTYzMDE3MDAwMDAwMDAsIDB4ODM3YTEwYTUwMDAwMDAwMCwgMHgzMzUzNzA5ODAwMDAwMDAwLAorICAgIDB4ZTMyOWQwZGYwMDAwMDAwMCwgMHg1MzAwYjBlMjAwMDAwMDAwLCAweDA0MmZjMWMxMDAwMDAwMDAsCisgICAgMHhiNDA2YTFmYzAwMDAwMDAwLCAweDY0N2MwMWJiMDAwMDAwMDAsIDB4ZDQ1NTYxODYwMDAwMDAwMCwKKyAgICAweGM0ODk0MTM0MDAwMDAwMDAsIDB4NzRhMDIxMDkwMDAwMDAwMCwgMHhhNGRhODE0ZTAwMDAwMDAwLAorICAgIDB4MTRmM2UxNzMwMDAwMDAwMCwgMHhjNTY0YjFmMTAwMDAwMDAwLCAweDc1NGRkMWNjMDAwMDAwMDAsCisgICAgMHhhNTM3NzE4YjAwMDAwMDAwLCAweDE1MWUxMWI2MDAwMDAwMDAsIDB4MDVjMjMxMDQwMDAwMDAwMCwKKyAgICAweGI1ZWI1MTM5MDAwMDAwMDAsIDB4NjU5MWYxN2UwMDAwMDAwMCwgMHhkNWI4OTE0MzAwMDAwMDAwLAorICAgIDB4ODZiODIxYTEwMDAwMDAwMCwgMHgzNjkxNDE5YzAwMDAwMDAwLCAweGU2ZWJlMWRiMDAwMDAwMDAsCisgICAgMHg1NmMyODFlNjAwMDAwMDAwLCAweDQ2MWVhMTU0MDAwMDAwMDAsIDB4ZjYzN2MxNjkwMDAwMDAwMCwKKyAgICAweDI2NGQ2MTJlMDAwMDAwMDAsIDB4OTY2NDAxMTMwMDAwMDAwMCwgMHg0N2YzNTE5MTAwMDAwMDAwLAorICAgIDB4ZjdkYTMxYWMwMDAwMDAwMCwgMHgyN2EwOTFlYjAwMDAwMDAwLCAweDk3ODlmMWQ2MDAwMDAwMDAsCisgICAgMHg4NzU1ZDE2NDAwMDAwMDAwLCAweDM3N2NiMTU5MDAwMDAwMDAsIDB4ZTcwNjExMWUwMDAwMDAwMCwKKyAgICAweDU3MmY3MTIzMDAwMDAwMDAsIDB4NDk1OGYzNTgwMDAwMDAwMCwgMHhmOTcxOTM2NTAwMDAwMDAwLAorICAgIDB4MjkwYjMzMjIwMDAwMDAwMCwgMHg5OTIyNTMxZjAwMDAwMDAwLCAweDg5ZmU3M2FkMDAwMDAwMDAsCisgICAgMHgzOWQ3MTM5MDAwMDAwMDAwLCAweGU5YWRiM2Q3MDAwMDAwMDAsIDB4NTk4NGQzZWEwMDAwMDAwMCwKKyAgICAweDg4MTM4MzY4MDAwMDAwMDAsIDB4MzgzYWUzNTUwMDAwMDAwMCwgMHhlODQwNDMxMjAwMDAwMDAwLAorICAgIDB4NTg2OTIzMmYwMDAwMDAwMCwgMHg0OGI1MDM5ZDAwMDAwMDAwLCAweGY4OWM2M2EwMDAwMDAwMDAsCisgICAgMHgyOGU2YzNlNzAwMDAwMDAwLCAweDk4Y2ZhM2RhMDAwMDAwMDAsIDB4Y2JjZjEzMzgwMDAwMDAwMCwKKyAgICAweDdiZTY3MzA1MDAwMDAwMDAsIDB4YWI5Y2QzNDIwMDAwMDAwMCwgMHgxYmI1YjM3ZjAwMDAwMDAwLAorICAgIDB4MGI2OTkzY2QwMDAwMDAwMCwgMHhiYjQwZjNmMDAwMDAwMDAwLCAweDZiM2E1M2I3MDAwMDAwMDAsCisgICAgMHhkYjEzMzM4YTAwMDAwMDAwLCAweDBhODQ2MzA4MDAwMDAwMDAsIDB4YmFhZDAzMzUwMDAwMDAwMCwKKyAgICAweDZhZDdhMzcyMDAwMDAwMDAsIDB4ZGFmZWMzNGYwMDAwMDAwMCwgMHhjYTIyZTNmZDAwMDAwMDAwLAorICAgIDB4N2EwYjgzYzAwMDAwMDAwMCwgMHhhYTcxMjM4NzAwMDAwMDAwLCAweDFhNTg0M2JhMDAwMDAwMDAsCisgICAgMHg0ZDc3MzI5OTAwMDAwMDAwLCAweGZkNWU1MmE0MDAwMDAwMDAsIDB4MmQyNGYyZTMwMDAwMDAwMCwKKyAgICAweDlkMGQ5MmRlMDAwMDAwMDAsIDB4OGRkMWIyNmMwMDAwMDAwMCwgMHgzZGY4ZDI1MTAwMDAwMDAwLAorICAgIDB4ZWQ4MjcyMTYwMDAwMDAwMCwgMHg1ZGFiMTIyYjAwMDAwMDAwLCAweDhjM2M0MmE5MDAwMDAwMDAsCisgICAgMHgzYzE1MjI5NDAwMDAwMDAwLCAweGVjNmY4MmQzMDAwMDAwMDAsIDB4NWM0NmUyZWUwMDAwMDAwMCwKKyAgICAweDRjOWFjMjVjMDAwMDAwMDAsIDB4ZmNiM2EyNjEwMDAwMDAwMCwgMHgyY2M5MDIyNjAwMDAwMDAwLAorICAgIDB4OWNlMDYyMWIwMDAwMDAwMCwgMHhjZmUwZDJmOTAwMDAwMDAwLCAweDdmYzliMmM0MDAwMDAwMDAsCisgICAgMHhhZmIzMTI4MzAwMDAwMDAwLCAweDFmOWE3MmJlMDAwMDAwMDAsIDB4MGY0NjUyMGMwMDAwMDAwMCwKKyAgICAweGJmNmYzMjMxMDAwMDAwMDAsIDB4NmYxNTkyNzYwMDAwMDAwMCwgMHhkZjNjZjI0YjAwMDAwMDAwLAorICAgIDB4MGVhYmEyYzkwMDAwMDAwMCwgMHhiZTgyYzJmNDAwMDAwMDAwLCAweDZlZjg2MmIzMDAwMDAwMDAsCisgICAgMHhkZWQxMDI4ZTAwMDAwMDAwLCAweGNlMGQyMjNjMDAwMDAwMDAsIDB4N2UyNDQyMDEwMDAwMDAwMCwKKyAgICAweGFlNWVlMjQ2MDAwMDAwMDAsIDB4MWU3NzgyN2IwMDAwMDAwMCwgMHg5MmIwZTZiMTAwMDAwMDAwLAorICAgIDB4MjI5OTg2OGMwMDAwMDAwMCwgMHhmMmUzMjZjYjAwMDAwMDAwLCAweDQyY2E0NmY2MDAwMDAwMDAsCisgICAgMHg1MjE2NjY0NDAwMDAwMDAwLCAweGUyM2YwNjc5MDAwMDAwMDAsIDB4MzI0NWE2M2UwMDAwMDAwMCwKKyAgICAweDgyNmNjNjAzMDAwMDAwMDAsIDB4NTNmYjk2ODEwMDAwMDAwMCwgMHhlM2QyZjZiYzAwMDAwMDAwLAorICAgIDB4MzNhODU2ZmIwMDAwMDAwMCwgMHg4MzgxMzZjNjAwMDAwMDAwLCAweDkzNWQxNjc0MDAwMDAwMDAsCisgICAgMHgyMzc0NzY0OTAwMDAwMDAwLCAweGYzMGVkNjBlMDAwMDAwMDAsIDB4NDMyN2I2MzMwMDAwMDAwMCwKKyAgICAweDEwMjcwNmQxMDAwMDAwMDAsIDB4YTAwZTY2ZWMwMDAwMDAwMCwgMHg3MDc0YzZhYjAwMDAwMDAwLAorICAgIDB4YzA1ZGE2OTYwMDAwMDAwMCwgMHhkMDgxODYyNDAwMDAwMDAwLCAweDYwYThlNjE5MDAwMDAwMDAsCisgICAgMHhiMGQyNDY1ZTAwMDAwMDAwLCAweDAwZmIyNjYzMDAwMDAwMDAsIDB4ZDE2Yzc2ZTEwMDAwMDAwMCwKKyAgICAweDYxNDUxNmRjMDAwMDAwMDAsIDB4YjEzZmI2OWIwMDAwMDAwMCwgMHgwMTE2ZDZhNjAwMDAwMDAwLAorICAgIDB4MTFjYWY2MTQwMDAwMDAwMCwgMHhhMWUzOTYyOTAwMDAwMDAwLCAweDcxOTkzNjZlMDAwMDAwMDAsCisgICAgMHhjMWIwNTY1MzAwMDAwMDAwLCAweDk2OWYyNzcwMDAwMDAwMDAsIDB4MjZiNjQ3NGQwMDAwMDAwMCwKKyAgICAweGY2Y2NlNzBhMDAwMDAwMDAsIDB4NDZlNTg3MzcwMDAwMDAwMCwgMHg1NjM5YTc4NTAwMDAwMDAwLAorICAgIDB4ZTYxMGM3YjgwMDAwMDAwMCwgMHgzNjZhNjdmZjAwMDAwMDAwLCAweDg2NDMwN2MyMDAwMDAwMDAsCisgICAgMHg1N2Q0NTc0MDAwMDAwMDAwLCAweGU3ZmQzNzdkMDAwMDAwMDAsIDB4Mzc4Nzk3M2EwMDAwMDAwMCwKKyAgICAweDg3YWVmNzA3MDAwMDAwMDAsIDB4OTc3MmQ3YjUwMDAwMDAwMCwgMHgyNzViYjc4ODAwMDAwMDAwLAorICAgIDB4ZjcyMTE3Y2YwMDAwMDAwMCwgMHg0NzA4NzdmMjAwMDAwMDAwLCAweDE0MDhjNzEwMDAwMDAwMDAsCisgICAgMHhhNDIxYTcyZDAwMDAwMDAwLCAweDc0NWIwNzZhMDAwMDAwMDAsIDB4YzQ3MjY3NTcwMDAwMDAwMCwKKyAgICAweGQ0YWU0N2U1MDAwMDAwMDAsIDB4NjQ4NzI3ZDgwMDAwMDAwMCwgMHhiNGZkODc5ZjAwMDAwMDAwLAorICAgIDB4MDRkNGU3YTIwMDAwMDAwMCwgMHhkNTQzYjcyMDAwMDAwMDAwLCAweDY1NmFkNzFkMDAwMDAwMDAsCisgICAgMHhiNTEwNzc1YTAwMDAwMDAwLCAweDA1MzkxNzY3MDAwMDAwMDAsIDB4MTVlNTM3ZDUwMDAwMDAwMCwKKyAgICAweGE1Y2M1N2U4MDAwMDAwMDAsIDB4NzViNmY3YWYwMDAwMDAwMCwgMHhjNTlmOTc5MjAwMDAwMDAwLAorICAgIDB4ZGJlODE1ZTkwMDAwMDAwMCwgMHg2YmMxNzVkNDAwMDAwMDAwLCAweGJiYmJkNTkzMDAwMDAwMDAsCisgICAgMHgwYjkyYjVhZTAwMDAwMDAwLCAweDFiNGU5NTFjMDAwMDAwMDAsIDB4YWI2N2Y1MjEwMDAwMDAwMCwKKyAgICAweDdiMWQ1NTY2MDAwMDAwMDAsIDB4Y2IzNDM1NWIwMDAwMDAwMCwgMHgxYWEzNjVkOTAwMDAwMDAwLAorICAgIDB4YWE4YTA1ZTQwMDAwMDAwMCwgMHg3YWYwYTVhMzAwMDAwMDAwLCAweGNhZDljNTllMDAwMDAwMDAsCisgICAgMHhkYTA1ZTUyYzAwMDAwMDAwLCAweDZhMmM4NTExMDAwMDAwMDAsIDB4YmE1NjI1NTYwMDAwMDAwMCwKKyAgICAweDBhN2Y0NTZiMDAwMDAwMDAsIDB4NTk3ZmY1ODkwMDAwMDAwMCwgMHhlOTU2OTViNDAwMDAwMDAwLAorICAgIDB4MzkyYzM1ZjMwMDAwMDAwMCwgMHg4OTA1NTVjZTAwMDAwMDAwLCAweDk5ZDk3NTdjMDAwMDAwMDAsCisgICAgMHgyOWYwMTU0MTAwMDAwMDAwLCAweGY5OGFiNTA2MDAwMDAwMDAsIDB4NDlhM2Q1M2IwMDAwMDAwMCwKKyAgICAweDk4MzQ4NWI5MDAwMDAwMDAsIDB4MjgxZGU1ODQwMDAwMDAwMCwgMHhmODY3NDVjMzAwMDAwMDAwLAorICAgIDB4NDg0ZTI1ZmUwMDAwMDAwMCwgMHg1ODkyMDU0YzAwMDAwMDAwLCAweGU4YmI2NTcxMDAwMDAwMDAsCisgICAgMHgzOGMxYzUzNjAwMDAwMDAwLCAweDg4ZThhNTBiMDAwMDAwMDAsIDB4ZGZjN2Q0MjgwMDAwMDAwMCwKKyAgICAweDZmZWViNDE1MDAwMDAwMDAsIDB4YmY5NDE0NTIwMDAwMDAwMCwgMHgwZmJkNzQ2ZjAwMDAwMDAwLAorICAgIDB4MWY2MTU0ZGQwMDAwMDAwMCwgMHhhZjQ4MzRlMDAwMDAwMDAwLCAweDdmMzI5NGE3MDAwMDAwMDAsCisgICAgMHhjZjFiZjQ5YTAwMDAwMDAwLCAweDFlOGNhNDE4MDAwMDAwMDAsIDB4YWVhNWM0MjUwMDAwMDAwMCwKKyAgICAweDdlZGY2NDYyMDAwMDAwMDAsIDB4Y2VmNjA0NWYwMDAwMDAwMCwgMHhkZTJhMjRlZDAwMDAwMDAwLAorICAgIDB4NmUwMzQ0ZDAwMDAwMDAwMCwgMHhiZTc5ZTQ5NzAwMDAwMDAwLCAweDBlNTA4NGFhMDAwMDAwMDAsCisgICAgMHg1ZDUwMzQ0ODAwMDAwMDAwLCAweGVkNzk1NDc1MDAwMDAwMDAsIDB4M2QwM2Y0MzIwMDAwMDAwMCwKKyAgICAweDhkMmE5NDBmMDAwMDAwMDAsIDB4OWRmNmI0YmQwMDAwMDAwMCwgMHgyZGRmZDQ4MDAwMDAwMDAwLAorICAgIDB4ZmRhNTc0YzcwMDAwMDAwMCwgMHg0ZDhjMTRmYTAwMDAwMDAwLCAweDljMWI0NDc4MDAwMDAwMDAsCisgICAgMHgyYzMyMjQ0NTAwMDAwMDAwLCAweGZjNDg4NDAyMDAwMDAwMDAsIDB4NGM2MWU0M2YwMDAwMDAwMCwKKyAgICAweDVjYmRjNDhkMDAwMDAwMDAsIDB4ZWM5NGE0YjAwMDAwMDAwMCwgMHgzY2VlMDRmNzAwMDAwMDAwLAorICAgIDB4OGNjNzY0Y2EwMDAwMDAwMH0sCisgICB7MHgwMDAwMDAwMDAwMDAwMDAwLCAweGE1ZDM1Y2NiMDAwMDAwMDAsIDB4MGJhMWM4NGQwMDAwMDAwMCwKKyAgICAweGFlNzI5NDg2MDAwMDAwMDAsIDB4MTY0MjkxOWIwMDAwMDAwMCwgMHhiMzkxY2Q1MDAwMDAwMDAwLAorICAgIDB4MWRlMzU5ZDYwMDAwMDAwMCwgMHhiODMwMDUxZDAwMDAwMDAwLCAweDZkODI1M2VjMDAwMDAwMDAsCisgICAgMHhjODUxMGYyNzAwMDAwMDAwLCAweDY2MjM5YmExMDAwMDAwMDAsIDB4YzNmMGM3NmEwMDAwMDAwMCwKKyAgICAweDdiYzBjMjc3MDAwMDAwMDAsIDB4ZGUxMzllYmMwMDAwMDAwMCwgMHg3MDYxMGEzYTAwMDAwMDAwLAorICAgIDB4ZDViMjU2ZjEwMDAwMDAwMCwgMHg5YjAyZDYwMzAwMDAwMDAwLCAweDNlZDE4YWM4MDAwMDAwMDAsCisgICAgMHg5MGEzMWU0ZTAwMDAwMDAwLCAweDM1NzA0Mjg1MDAwMDAwMDAsIDB4OGQ0MDQ3OTgwMDAwMDAwMCwKKyAgICAweDI4OTMxYjUzMDAwMDAwMDAsIDB4ODZlMThmZDUwMDAwMDAwMCwgMHgyMzMyZDMxZTAwMDAwMDAwLAorICAgIDB4ZjY4MDg1ZWYwMDAwMDAwMCwgMHg1MzUzZDkyNDAwMDAwMDAwLCAweGZkMjE0ZGEyMDAwMDAwMDAsCisgICAgMHg1OGYyMTE2OTAwMDAwMDAwLCAweGUwYzIxNDc0MDAwMDAwMDAsIDB4NDUxMTQ4YmYwMDAwMDAwMCwKKyAgICAweGViNjNkYzM5MDAwMDAwMDAsIDB4NGViMDgwZjIwMDAwMDAwMCwgMHgzNjA1YWMwNzAwMDAwMDAwLAorICAgIDB4OTNkNmYwY2MwMDAwMDAwMCwgMHgzZGE0NjQ0YTAwMDAwMDAwLCAweDk4NzczODgxMDAwMDAwMDAsCisgICAgMHgyMDQ3M2Q5YzAwMDAwMDAwLCAweDg1OTQ2MTU3MDAwMDAwMDAsIDB4MmJlNmY1ZDEwMDAwMDAwMCwKKyAgICAweDhlMzVhOTFhMDAwMDAwMDAsIDB4NWI4N2ZmZWIwMDAwMDAwMCwgMHhmZTU0YTMyMDAwMDAwMDAwLAorICAgIDB4NTAyNjM3YTYwMDAwMDAwMCwgMHhmNWY1NmI2ZDAwMDAwMDAwLCAweDRkYzU2ZTcwMDAwMDAwMDAsCisgICAgMHhlODE2MzJiYjAwMDAwMDAwLCAweDQ2NjRhNjNkMDAwMDAwMDAsIDB4ZTNiN2ZhZjYwMDAwMDAwMCwKKyAgICAweGFkMDc3YTA0MDAwMDAwMDAsIDB4MDhkNDI2Y2YwMDAwMDAwMCwgMHhhNmE2YjI0OTAwMDAwMDAwLAorICAgIDB4MDM3NWVlODIwMDAwMDAwMCwgMHhiYjQ1ZWI5ZjAwMDAwMDAwLCAweDFlOTZiNzU0MDAwMDAwMDAsCisgICAgMHhiMGU0MjNkMjAwMDAwMDAwLCAweDE1Mzc3ZjE5MDAwMDAwMDAsIDB4YzA4NTI5ZTgwMDAwMDAwMCwKKyAgICAweDY1NTY3NTIzMDAwMDAwMDAsIDB4Y2IyNGUxYTUwMDAwMDAwMCwgMHg2ZWY3YmQ2ZTAwMDAwMDAwLAorICAgIDB4ZDZjN2I4NzMwMDAwMDAwMCwgMHg3MzE0ZTRiODAwMDAwMDAwLCAweGRkNjY3MDNlMDAwMDAwMDAsCisgICAgMHg3OGI1MmNmNTAwMDAwMDAwLCAweDZjMGE1ODBmMDAwMDAwMDAsIDB4YzlkOTA0YzQwMDAwMDAwMCwKKyAgICAweDY3YWI5MDQyMDAwMDAwMDAsIDB4YzI3OGNjODkwMDAwMDAwMCwgMHg3YTQ4Yzk5NDAwMDAwMDAwLAorICAgIDB4ZGY5Yjk1NWYwMDAwMDAwMCwgMHg3MWU5MDFkOTAwMDAwMDAwLCAweGQ0M2E1ZDEyMDAwMDAwMDAsCisgICAgMHgwMTg4MGJlMzAwMDAwMDAwLCAweGE0NWI1NzI4MDAwMDAwMDAsIDB4MGEyOWMzYWUwMDAwMDAwMCwKKyAgICAweGFmZmE5ZjY1MDAwMDAwMDAsIDB4MTdjYTlhNzgwMDAwMDAwMCwgMHhiMjE5YzZiMzAwMDAwMDAwLAorICAgIDB4MWM2YjUyMzUwMDAwMDAwMCwgMHhiOWI4MGVmZTAwMDAwMDAwLCAweGY3MDg4ZTBjMDAwMDAwMDAsCisgICAgMHg1MmRiZDJjNzAwMDAwMDAwLCAweGZjYTk0NjQxMDAwMDAwMDAsIDB4NTk3YTFhOGEwMDAwMDAwMCwKKyAgICAweGUxNGExZjk3MDAwMDAwMDAsIDB4NDQ5OTQzNWMwMDAwMDAwMCwgMHhlYWViZDdkYTAwMDAwMDAwLAorICAgIDB4NGYzODhiMTEwMDAwMDAwMCwgMHg5YThhZGRlMDAwMDAwMDAwLCAweDNmNTk4MTJiMDAwMDAwMDAsCisgICAgMHg5MTJiMTVhZDAwMDAwMDAwLCAweDM0Zjg0OTY2MDAwMDAwMDAsIDB4OGNjODRjN2IwMDAwMDAwMCwKKyAgICAweDI5MWIxMGIwMDAwMDAwMDAsIDB4ODc2OTg0MzYwMDAwMDAwMCwgMHgyMmJhZDhmZDAwMDAwMDAwLAorICAgIDB4NWEwZmY0MDgwMDAwMDAwMCwgMHhmZmRjYThjMzAwMDAwMDAwLCAweDUxYWUzYzQ1MDAwMDAwMDAsCisgICAgMHhmNDdkNjA4ZTAwMDAwMDAwLCAweDRjNGQ2NTkzMDAwMDAwMDAsIDB4ZTk5ZTM5NTgwMDAwMDAwMCwKKyAgICAweDQ3ZWNhZGRlMDAwMDAwMDAsIDB4ZTIzZmYxMTUwMDAwMDAwMCwgMHgzNzhkYTdlNDAwMDAwMDAwLAorICAgIDB4OTI1ZWZiMmYwMDAwMDAwMCwgMHgzYzJjNmZhOTAwMDAwMDAwLCAweDk5ZmYzMzYyMDAwMDAwMDAsCisgICAgMHgyMWNmMzY3ZjAwMDAwMDAwLCAweDg0MWM2YWI0MDAwMDAwMDAsIDB4MmE2ZWZlMzIwMDAwMDAwMCwKKyAgICAweDhmYmRhMmY5MDAwMDAwMDAsIDB4YzEwZDIyMGIwMDAwMDAwMCwgMHg2NGRlN2VjMDAwMDAwMDAwLAorICAgIDB4Y2FhY2VhNDYwMDAwMDAwMCwgMHg2ZjdmYjY4ZDAwMDAwMDAwLCAweGQ3NGZiMzkwMDAwMDAwMDAsCisgICAgMHg3MjljZWY1YjAwMDAwMDAwLCAweGRjZWU3YmRkMDAwMDAwMDAsIDB4NzkzZDI3MTYwMDAwMDAwMCwKKyAgICAweGFjOGY3MWU3MDAwMDAwMDAsIDB4MDk1YzJkMmMwMDAwMDAwMCwgMHhhNzJlYjlhYTAwMDAwMDAwLAorICAgIDB4MDJmZGU1NjEwMDAwMDAwMCwgMHhiYWNkZTA3YzAwMDAwMDAwLCAweDFmMWViY2I3MDAwMDAwMDAsCisgICAgMHhiMTZjMjgzMTAwMDAwMDAwLCAweDE0YmY3NGZhMDAwMDAwMDAsIDB4ZDgxNGIwMWUwMDAwMDAwMCwKKyAgICAweDdkYzdlY2Q1MDAwMDAwMDAsIDB4ZDNiNTc4NTMwMDAwMDAwMCwgMHg3NjY2MjQ5ODAwMDAwMDAwLAorICAgIDB4Y2U1NjIxODUwMDAwMDAwMCwgMHg2Yjg1N2Q0ZTAwMDAwMDAwLCAweGM1ZjdlOWM4MDAwMDAwMDAsCisgICAgMHg2MDI0YjUwMzAwMDAwMDAwLCAweGI1OTZlM2YyMDAwMDAwMDAsIDB4MTA0NWJmMzkwMDAwMDAwMCwKKyAgICAweGJlMzcyYmJmMDAwMDAwMDAsIDB4MWJlNDc3NzQwMDAwMDAwMCwgMHhhM2Q0NzI2OTAwMDAwMDAwLAorICAgIDB4MDYwNzJlYTIwMDAwMDAwMCwgMHhhODc1YmEyNDAwMDAwMDAwLCAweDBkYTZlNmVmMDAwMDAwMDAsCisgICAgMHg0MzE2NjYxZDAwMDAwMDAwLCAweGU2YzUzYWQ2MDAwMDAwMDAsIDB4NDhiN2FlNTAwMDAwMDAwMCwKKyAgICAweGVkNjRmMjliMDAwMDAwMDAsIDB4NTU1NGY3ODYwMDAwMDAwMCwgMHhmMDg3YWI0ZDAwMDAwMDAwLAorICAgIDB4NWVmNTNmY2IwMDAwMDAwMCwgMHhmYjI2NjMwMDAwMDAwMDAwLCAweDJlOTQzNWYxMDAwMDAwMDAsCisgICAgMHg4YjQ3NjkzYTAwMDAwMDAwLCAweDI1MzVmZGJjMDAwMDAwMDAsIDB4ODBlNmExNzcwMDAwMDAwMCwKKyAgICAweDM4ZDZhNDZhMDAwMDAwMDAsIDB4OWQwNWY4YTEwMDAwMDAwMCwgMHgzMzc3NmMyNzAwMDAwMDAwLAorICAgIDB4OTZhNDMwZWMwMDAwMDAwMCwgMHhlZTExMWMxOTAwMDAwMDAwLCAweDRiYzI0MGQyMDAwMDAwMDAsCisgICAgMHhlNWIwZDQ1NDAwMDAwMDAwLCAweDQwNjM4ODlmMDAwMDAwMDAsIDB4Zjg1MzhkODIwMDAwMDAwMCwKKyAgICAweDVkODBkMTQ5MDAwMDAwMDAsIDB4ZjNmMjQ1Y2YwMDAwMDAwMCwgMHg1NjIxMTkwNDAwMDAwMDAwLAorICAgIDB4ODM5MzRmZjUwMDAwMDAwMCwgMHgyNjQwMTMzZTAwMDAwMDAwLCAweDg4MzI4N2I4MDAwMDAwMDAsCisgICAgMHgyZGUxZGI3MzAwMDAwMDAwLCAweDk1ZDFkZTZlMDAwMDAwMDAsIDB4MzAwMjgyYTUwMDAwMDAwMCwKKyAgICAweDllNzAxNjIzMDAwMDAwMDAsIDB4M2JhMzRhZTgwMDAwMDAwMCwgMHg3NTEzY2ExYTAwMDAwMDAwLAorICAgIDB4ZDBjMDk2ZDEwMDAwMDAwMCwgMHg3ZWIyMDI1NzAwMDAwMDAwLCAweGRiNjE1ZTljMDAwMDAwMDAsCisgICAgMHg2MzUxNWI4MTAwMDAwMDAwLCAweGM2ODIwNzRhMDAwMDAwMDAsIDB4NjhmMDkzY2MwMDAwMDAwMCwKKyAgICAweGNkMjNjZjA3MDAwMDAwMDAsIDB4MTg5MTk5ZjYwMDAwMDAwMCwgMHhiZDQyYzUzZDAwMDAwMDAwLAorICAgIDB4MTMzMDUxYmIwMDAwMDAwMCwgMHhiNmUzMGQ3MDAwMDAwMDAwLCAweDBlZDMwODZkMDAwMDAwMDAsCisgICAgMHhhYjAwNTRhNjAwMDAwMDAwLCAweDA1NzJjMDIwMDAwMDAwMDAsIDB4YTBhMTljZWIwMDAwMDAwMCwKKyAgICAweGI0MWVlODExMDAwMDAwMDAsIDB4MTFjZGI0ZGEwMDAwMDAwMCwgMHhiZmJmMjA1YzAwMDAwMDAwLAorICAgIDB4MWE2YzdjOTcwMDAwMDAwMCwgMHhhMjVjNzk4YTAwMDAwMDAwLCAweDA3OGYyNTQxMDAwMDAwMDAsCisgICAgMHhhOWZkYjFjNzAwMDAwMDAwLCAweDBjMmVlZDBjMDAwMDAwMDAsIDB4ZDk5Y2JiZmQwMDAwMDAwMCwKKyAgICAweDdjNGZlNzM2MDAwMDAwMDAsIDB4ZDIzZDczYjAwMDAwMDAwMCwgMHg3N2VlMmY3YjAwMDAwMDAwLAorICAgIDB4Y2ZkZTJhNjYwMDAwMDAwMCwgMHg2YTBkNzZhZDAwMDAwMDAwLCAweGM0N2ZlMjJiMDAwMDAwMDAsCisgICAgMHg2MWFjYmVlMDAwMDAwMDAwLCAweDJmMWMzZTEyMDAwMDAwMDAsIDB4OGFjZjYyZDkwMDAwMDAwMCwKKyAgICAweDI0YmRmNjVmMDAwMDAwMDAsIDB4ODE2ZWFhOTQwMDAwMDAwMCwgMHgzOTVlYWY4OTAwMDAwMDAwLAorICAgIDB4OWM4ZGYzNDIwMDAwMDAwMCwgMHgzMmZmNjdjNDAwMDAwMDAwLCAweDk3MmMzYjBmMDAwMDAwMDAsCisgICAgMHg0MjllNmRmZTAwMDAwMDAwLCAweGU3NGQzMTM1MDAwMDAwMDAsIDB4NDkzZmE1YjMwMDAwMDAwMCwKKyAgICAweGVjZWNmOTc4MDAwMDAwMDAsIDB4NTRkY2ZjNjUwMDAwMDAwMCwgMHhmMTBmYTBhZTAwMDAwMDAwLAorICAgIDB4NWY3ZDM0MjgwMDAwMDAwMCwgMHhmYWFlNjhlMzAwMDAwMDAwLCAweDgyMWI0NDE2MDAwMDAwMDAsCisgICAgMHgyN2M4MThkZDAwMDAwMDAwLCAweDg5YmE4YzViMDAwMDAwMDAsIDB4MmM2OWQwOTAwMDAwMDAwMCwKKyAgICAweDk0NTlkNThkMDAwMDAwMDAsIDB4MzE4YTg5NDYwMDAwMDAwMCwgMHg5ZmY4MWRjMDAwMDAwMDAwLAorICAgIDB4M2EyYjQxMGIwMDAwMDAwMCwgMHhlZjk5MTdmYTAwMDAwMDAwLCAweDRhNGE0YjMxMDAwMDAwMDAsCisgICAgMHhlNDM4ZGZiNzAwMDAwMDAwLCAweDQxZWI4MzdjMDAwMDAwMDAsIDB4ZjlkYjg2NjEwMDAwMDAwMCwKKyAgICAweDVjMDhkYWFhMDAwMDAwMDAsIDB4ZjI3YTRlMmMwMDAwMDAwMCwgMHg1N2E5MTJlNzAwMDAwMDAwLAorICAgIDB4MTkxOTkyMTUwMDAwMDAwMCwgMHhiY2NhY2VkZTAwMDAwMDAwLCAweDEyYjg1YTU4MDAwMDAwMDAsCisgICAgMHhiNzZiMDY5MzAwMDAwMDAwLCAweDBmNWIwMzhlMDAwMDAwMDAsIDB4YWE4ODVmNDUwMDAwMDAwMCwKKyAgICAweDA0ZmFjYmMzMDAwMDAwMDAsIDB4YTEyOTk3MDgwMDAwMDAwMCwgMHg3NDliYzFmOTAwMDAwMDAwLAorICAgIDB4ZDE0ODlkMzIwMDAwMDAwMCwgMHg3ZjNhMDliNDAwMDAwMDAwLCAweGRhZTk1NTdmMDAwMDAwMDAsCisgICAgMHg2MmQ5NTA2MjAwMDAwMDAwLCAweGM3MGEwY2E5MDAwMDAwMDAsIDB4Njk3ODk4MmYwMDAwMDAwMCwKKyAgICAweGNjYWJjNGU0MDAwMDAwMDB9LAorICAgezB4MDAwMDAwMDAwMDAwMDAwMCwgMHhiNDBiNzdhNjAwMDAwMDAwLCAweDI5MTE5Zjk3MDAwMDAwMDAsCisgICAgMHg5ZDFhZTgzMTAwMDAwMDAwLCAweDEzMjQ0ZmY0MDAwMDAwMDAsIDB4YTcyZjM4NTIwMDAwMDAwMCwKKyAgICAweDNhMzVkMDYzMDAwMDAwMDAsIDB4OGUzZWE3YzUwMDAwMDAwMCwgMHg2NzRlZWYzMzAwMDAwMDAwLAorICAgIDB4ZDM0NTk4OTUwMDAwMDAwMCwgMHg0ZTVmNzBhNDAwMDAwMDAwLCAweGZhNTQwNzAyMDAwMDAwMDAsCisgICAgMHg3NDZhYTBjNzAwMDAwMDAwLCAweGMwNjFkNzYxMDAwMDAwMDAsIDB4NWQ3YjNmNTAwMDAwMDAwMCwKKyAgICAweGU5NzA0OGY2MDAwMDAwMDAsIDB4Y2U5Y2RlNjcwMDAwMDAwMCwgMHg3YTk3YTljMTAwMDAwMDAwLAorICAgIDB4ZTc4ZDQxZjAwMDAwMDAwMCwgMHg1Mzg2MzY1NjAwMDAwMDAwLCAweGRkYjg5MTkzMDAwMDAwMDAsCisgICAgMHg2OWIzZTYzNTAwMDAwMDAwLCAweGY0YTkwZTA0MDAwMDAwMDAsIDB4NDBhMjc5YTIwMDAwMDAwMCwKKyAgICAweGE5ZDIzMTU0MDAwMDAwMDAsIDB4MWRkOTQ2ZjIwMDAwMDAwMCwgMHg4MGMzYWVjMzAwMDAwMDAwLAorICAgIDB4MzRjOGQ5NjUwMDAwMDAwMCwgMHhiYWY2N2VhMDAwMDAwMDAwLCAweDBlZmQwOTA2MDAwMDAwMDAsCisgICAgMHg5M2U3ZTEzNzAwMDAwMDAwLCAweDI3ZWM5NjkxMDAwMDAwMDAsIDB4OWMzOWJkY2YwMDAwMDAwMCwKKyAgICAweDI4MzJjYTY5MDAwMDAwMDAsIDB4YjUyODIyNTgwMDAwMDAwMCwgMHgwMTIzNTVmZTAwMDAwMDAwLAorICAgIDB4OGYxZGYyM2IwMDAwMDAwMCwgMHgzYjE2ODU5ZDAwMDAwMDAwLCAweGE2MGM2ZGFjMDAwMDAwMDAsCisgICAgMHgxMjA3MWEwYTAwMDAwMDAwLCAweGZiNzc1MmZjMDAwMDAwMDAsIDB4NGY3YzI1NWEwMDAwMDAwMCwKKyAgICAweGQyNjZjZDZiMDAwMDAwMDAsIDB4NjY2ZGJhY2QwMDAwMDAwMCwgMHhlODUzMWQwODAwMDAwMDAwLAorICAgIDB4NWM1ODZhYWUwMDAwMDAwMCwgMHhjMTQyODI5ZjAwMDAwMDAwLCAweDc1NDlmNTM5MDAwMDAwMDAsCisgICAgMHg1MmE1NjNhODAwMDAwMDAwLCAweGU2YWUxNDBlMDAwMDAwMDAsIDB4N2JiNGZjM2YwMDAwMDAwMCwKKyAgICAweGNmYmY4Yjk5MDAwMDAwMDAsIDB4NDE4MTJjNWMwMDAwMDAwMCwgMHhmNThhNWJmYTAwMDAwMDAwLAorICAgIDB4Njg5MGIzY2IwMDAwMDAwMCwgMHhkYzliYzQ2ZDAwMDAwMDAwLCAweDM1ZWI4YzliMDAwMDAwMDAsCisgICAgMHg4MWUwZmIzZDAwMDAwMDAwLCAweDFjZmExMzBjMDAwMDAwMDAsIDB4YThmMTY0YWEwMDAwMDAwMCwKKyAgICAweDI2Y2ZjMzZmMDAwMDAwMDAsIDB4OTJjNGI0YzkwMDAwMDAwMCwgMHgwZmRlNWNmODAwMDAwMDAwLAorICAgIDB4YmJkNTJiNWUwMDAwMDAwMCwgMHg3OTc1MGI0NDAwMDAwMDAwLCAweGNkN2U3Y2UyMDAwMDAwMDAsCisgICAgMHg1MDY0OTRkMzAwMDAwMDAwLCAweGU0NmZlMzc1MDAwMDAwMDAsIDB4NmE1MTQ0YjAwMDAwMDAwMCwKKyAgICAweGRlNWEzMzE2MDAwMDAwMDAsIDB4NDM0MGRiMjcwMDAwMDAwMCwgMHhmNzRiYWM4MTAwMDAwMDAwLAorICAgIDB4MWUzYmU0NzcwMDAwMDAwMCwgMHhhYTMwOTNkMTAwMDAwMDAwLCAweDM3MmE3YmUwMDAwMDAwMDAsCisgICAgMHg4MzIxMGM0NjAwMDAwMDAwLCAweDBkMWZhYjgzMDAwMDAwMDAsIDB4YjkxNGRjMjUwMDAwMDAwMCwKKyAgICAweDI0MGUzNDE0MDAwMDAwMDAsIDB4OTAwNTQzYjIwMDAwMDAwMCwgMHhiN2U5ZDUyMzAwMDAwMDAwLAorICAgIDB4MDNlMmEyODUwMDAwMDAwMCwgMHg5ZWY4NGFiNDAwMDAwMDAwLCAweDJhZjMzZDEyMDAwMDAwMDAsCisgICAgMHhhNGNkOWFkNzAwMDAwMDAwLCAweDEwYzZlZDcxMDAwMDAwMDAsIDB4OGRkYzA1NDAwMDAwMDAwMCwKKyAgICAweDM5ZDc3MmU2MDAwMDAwMDAsIDB4ZDBhNzNhMTAwMDAwMDAwMCwgMHg2NGFjNGRiNjAwMDAwMDAwLAorICAgIDB4ZjliNmE1ODcwMDAwMDAwMCwgMHg0ZGJkZDIyMTAwMDAwMDAwLCAweGMzODM3NWU0MDAwMDAwMDAsCisgICAgMHg3Nzg4MDI0MjAwMDAwMDAwLCAweGVhOTJlYTczMDAwMDAwMDAsIDB4NWU5OTlkZDUwMDAwMDAwMCwKKyAgICAweGU1NGNiNjhiMDAwMDAwMDAsIDB4NTE0N2MxMmQwMDAwMDAwMCwgMHhjYzVkMjkxYzAwMDAwMDAwLAorICAgIDB4Nzg1NjVlYmEwMDAwMDAwMCwgMHhmNjY4Zjk3ZjAwMDAwMDAwLCAweDQyNjM4ZWQ5MDAwMDAwMDAsCisgICAgMHhkZjc5NjZlODAwMDAwMDAwLCAweDZiNzIxMTRlMDAwMDAwMDAsIDB4ODIwMjU5YjgwMDAwMDAwMCwKKyAgICAweDM2MDkyZTFlMDAwMDAwMDAsIDB4YWIxM2M2MmYwMDAwMDAwMCwgMHgxZjE4YjE4OTAwMDAwMDAwLAorICAgIDB4OTEyNjE2NGMwMDAwMDAwMCwgMHgyNTJkNjFlYTAwMDAwMDAwLCAweGI4Mzc4OWRiMDAwMDAwMDAsCisgICAgMHgwYzNjZmU3ZDAwMDAwMDAwLCAweDJiZDA2OGVjMDAwMDAwMDAsIDB4OWZkYjFmNGEwMDAwMDAwMCwKKyAgICAweDAyYzFmNzdiMDAwMDAwMDAsIDB4YjZjYTgwZGQwMDAwMDAwMCwgMHgzOGY0MjcxODAwMDAwMDAwLAorICAgIDB4OGNmZjUwYmUwMDAwMDAwMCwgMHgxMWU1Yjg4ZjAwMDAwMDAwLCAweGE1ZWVjZjI5MDAwMDAwMDAsCisgICAgMHg0YzllODdkZjAwMDAwMDAwLCAweGY4OTVmMDc5MDAwMDAwMDAsIDB4NjU4ZjE4NDgwMDAwMDAwMCwKKyAgICAweGQxODQ2ZmVlMDAwMDAwMDAsIDB4NWZiYWM4MmIwMDAwMDAwMCwgMHhlYmIxYmY4ZDAwMDAwMDAwLAorICAgIDB4NzZhYjU3YmMwMDAwMDAwMCwgMHhjMmEwMjAxYTAwMDAwMDAwLCAweGYyZWExNjg4MDAwMDAwMDAsCisgICAgMHg0NmUxNjEyZTAwMDAwMDAwLCAweGRiZmI4OTFmMDAwMDAwMDAsIDB4NmZmMGZlYjkwMDAwMDAwMCwKKyAgICAweGUxY2U1OTdjMDAwMDAwMDAsIDB4NTVjNTJlZGEwMDAwMDAwMCwgMHhjOGRmYzZlYjAwMDAwMDAwLAorICAgIDB4N2NkNGIxNGQwMDAwMDAwMCwgMHg5NWE0ZjliYjAwMDAwMDAwLCAweDIxYWY4ZTFkMDAwMDAwMDAsCisgICAgMHhiY2I1NjYyYzAwMDAwMDAwLCAweDA4YmUxMThhMDAwMDAwMDAsIDB4ODY4MGI2NGYwMDAwMDAwMCwKKyAgICAweDMyOGJjMWU5MDAwMDAwMDAsIDB4YWY5MTI5ZDgwMDAwMDAwMCwgMHgxYjlhNWU3ZTAwMDAwMDAwLAorICAgIDB4M2M3NmM4ZWYwMDAwMDAwMCwgMHg4ODdkYmY0OTAwMDAwMDAwLCAweDE1Njc1Nzc4MDAwMDAwMDAsCisgICAgMHhhMTZjMjBkZTAwMDAwMDAwLCAweDJmNTI4NzFiMDAwMDAwMDAsIDB4OWI1OWYwYmQwMDAwMDAwMCwKKyAgICAweDA2NDMxODhjMDAwMDAwMDAsIDB4YjI0ODZmMmEwMDAwMDAwMCwgMHg1YjM4MjdkYzAwMDAwMDAwLAorICAgIDB4ZWYzMzUwN2EwMDAwMDAwMCwgMHg3MjI5Yjg0YjAwMDAwMDAwLCAweGM2MjJjZmVkMDAwMDAwMDAsCisgICAgMHg0ODFjNjgyODAwMDAwMDAwLCAweGZjMTcxZjhlMDAwMDAwMDAsIDB4NjEwZGY3YmYwMDAwMDAwMCwKKyAgICAweGQ1MDY4MDE5MDAwMDAwMDAsIDB4NmVkM2FiNDcwMDAwMDAwMCwgMHhkYWQ4ZGNlMTAwMDAwMDAwLAorICAgIDB4NDdjMjM0ZDAwMDAwMDAwMCwgMHhmM2M5NDM3NjAwMDAwMDAwLCAweDdkZjdlNGIzMDAwMDAwMDAsCisgICAgMHhjOWZjOTMxNTAwMDAwMDAwLCAweDU0ZTY3YjI0MDAwMDAwMDAsIDB4ZTBlZDBjODIwMDAwMDAwMCwKKyAgICAweDA5OWQ0NDc0MDAwMDAwMDAsIDB4YmQ5NjMzZDIwMDAwMDAwMCwgMHgyMDhjZGJlMzAwMDAwMDAwLAorICAgIDB4OTQ4N2FjNDUwMDAwMDAwMCwgMHgxYWI5MGI4MDAwMDAwMDAwLCAweGFlYjI3YzI2MDAwMDAwMDAsCisgICAgMHgzM2E4OTQxNzAwMDAwMDAwLCAweDg3YTNlM2IxMDAwMDAwMDAsIDB4YTA0Zjc1MjAwMDAwMDAwMCwKKyAgICAweDE0NDQwMjg2MDAwMDAwMDAsIDB4ODk1ZWVhYjcwMDAwMDAwMCwgMHgzZDU1OWQxMTAwMDAwMDAwLAorICAgIDB4YjM2YjNhZDQwMDAwMDAwMCwgMHgwNzYwNGQ3MjAwMDAwMDAwLCAweDlhN2FhNTQzMDAwMDAwMDAsCisgICAgMHgyZTcxZDJlNTAwMDAwMDAwLCAweGM3MDE5YTEzMDAwMDAwMDAsIDB4NzMwYWVkYjUwMDAwMDAwMCwKKyAgICAweGVlMTAwNTg0MDAwMDAwMDAsIDB4NWExYjcyMjIwMDAwMDAwMCwgMHhkNDI1ZDVlNzAwMDAwMDAwLAorICAgIDB4NjAyZWEyNDEwMDAwMDAwMCwgMHhmZDM0NGE3MDAwMDAwMDAwLCAweDQ5M2YzZGQ2MDAwMDAwMDAsCisgICAgMHg4YjlmMWRjYzAwMDAwMDAwLCAweDNmOTQ2YTZhMDAwMDAwMDAsIDB4YTI4ZTgyNWIwMDAwMDAwMCwKKyAgICAweDE2ODVmNWZkMDAwMDAwMDAsIDB4OThiYjUyMzgwMDAwMDAwMCwgMHgyY2IwMjU5ZTAwMDAwMDAwLAorICAgIDB4YjFhYWNkYWYwMDAwMDAwMCwgMHgwNWExYmEwOTAwMDAwMDAwLCAweGVjZDFmMmZmMDAwMDAwMDAsCisgICAgMHg1OGRhODU1OTAwMDAwMDAwLCAweGM1YzA2ZDY4MDAwMDAwMDAsIDB4NzFjYjFhY2UwMDAwMDAwMCwKKyAgICAweGZmZjViZDBiMDAwMDAwMDAsIDB4NGJmZWNhYWQwMDAwMDAwMCwgMHhkNmU0MjI5YzAwMDAwMDAwLAorICAgIDB4NjJlZjU1M2EwMDAwMDAwMCwgMHg0NTAzYzNhYjAwMDAwMDAwLCAweGYxMDhiNDBkMDAwMDAwMDAsCisgICAgMHg2YzEyNWMzYzAwMDAwMDAwLCAweGQ4MTkyYjlhMDAwMDAwMDAsIDB4NTYyNzhjNWYwMDAwMDAwMCwKKyAgICAweGUyMmNmYmY5MDAwMDAwMDAsIDB4N2YzNjEzYzgwMDAwMDAwMCwgMHhjYjNkNjQ2ZTAwMDAwMDAwLAorICAgIDB4MjI0ZDJjOTgwMDAwMDAwMCwgMHg5NjQ2NWIzZTAwMDAwMDAwLCAweDBiNWNiMzBmMDAwMDAwMDAsCisgICAgMHhiZjU3YzRhOTAwMDAwMDAwLCAweDMxNjk2MzZjMDAwMDAwMDAsIDB4ODU2MjE0Y2EwMDAwMDAwMCwKKyAgICAweDE4NzhmY2ZiMDAwMDAwMDAsIDB4YWM3MzhiNWQwMDAwMDAwMCwgMHgxN2E2YTAwMzAwMDAwMDAwLAorICAgIDB4YTNhZGQ3YTUwMDAwMDAwMCwgMHgzZWI3M2Y5NDAwMDAwMDAwLCAweDhhYmM0ODMyMDAwMDAwMDAsCisgICAgMHgwNDgyZWZmNzAwMDAwMDAwLCAweGIwODk5ODUxMDAwMDAwMDAsIDB4MmQ5MzcwNjAwMDAwMDAwMCwKKyAgICAweDk5OTgwN2M2MDAwMDAwMDAsIDB4NzBlODRmMzAwMDAwMDAwMCwgMHhjNGUzMzg5NjAwMDAwMDAwLAorICAgIDB4NTlmOWQwYTcwMDAwMDAwMCwgMHhlZGYyYTcwMTAwMDAwMDAwLCAweDYzY2MwMGM0MDAwMDAwMDAsCisgICAgMHhkN2M3Nzc2MjAwMDAwMDAwLCAweDRhZGQ5ZjUzMDAwMDAwMDAsIDB4ZmVkNmU4ZjUwMDAwMDAwMCwKKyAgICAweGQ5M2E3ZTY0MDAwMDAwMDAsIDB4NmQzMTA5YzIwMDAwMDAwMCwgMHhmMDJiZTFmMzAwMDAwMDAwLAorICAgIDB4NDQyMDk2NTUwMDAwMDAwMCwgMHhjYTFlMzE5MDAwMDAwMDAwLCAweDdlMTU0NjM2MDAwMDAwMDAsCisgICAgMHhlMzBmYWUwNzAwMDAwMDAwLCAweDU3MDRkOWExMDAwMDAwMDAsIDB4YmU3NDkxNTcwMDAwMDAwMCwKKyAgICAweDBhN2ZlNmYxMDAwMDAwMDAsIDB4OTc2NTBlYzAwMDAwMDAwMCwgMHgyMzZlNzk2NjAwMDAwMDAwLAorICAgIDB4YWQ1MGRlYTMwMDAwMDAwMCwgMHgxOTViYTkwNTAwMDAwMDAwLCAweDg0NDE0MTM0MDAwMDAwMDAsCisgICAgMHgzMDRhMzY5MjAwMDAwMDAwfSwKKyAgIHsweDAwMDAwMDAwMDAwMDAwMDAsIDB4OWUwMGFhY2MwMDAwMDAwMCwgMHg3ZDA3MjU0MjAwMDAwMDAwLAorICAgIDB4ZTMwNzhmOGUwMDAwMDAwMCwgMHhmYTBlNGE4NDAwMDAwMDAwLCAweDY0MGVlMDQ4MDAwMDAwMDAsCisgICAgMHg4NzA5NmZjNjAwMDAwMDAwLCAweDE5MDljNTBhMDAwMDAwMDAsIDB4YjUxYmU1ZDMwMDAwMDAwMCwKKyAgICAweDJiMWI0ZjFmMDAwMDAwMDAsIDB4YzgxY2MwOTEwMDAwMDAwMCwgMHg1NjFjNmE1ZDAwMDAwMDAwLAorICAgIDB4NGYxNWFmNTcwMDAwMDAwMCwgMHhkMTE1MDU5YjAwMDAwMDAwLCAweDMyMTI4YTE1MDAwMDAwMDAsCisgICAgMHhhYzEyMjBkOTAwMDAwMDAwLCAweDJiMzFiYjdjMDAwMDAwMDAsIDB4YjUzMTExYjAwMDAwMDAwMCwKKyAgICAweDU2MzY5ZTNlMDAwMDAwMDAsIDB4YzgzNjM0ZjIwMDAwMDAwMCwgMHhkMTNmZjFmODAwMDAwMDAwLAorICAgIDB4NGYzZjViMzQwMDAwMDAwMCwgMHhhYzM4ZDRiYTAwMDAwMDAwLCAweDMyMzg3ZTc2MDAwMDAwMDAsCisgICAgMHg5ZTJhNWVhZjAwMDAwMDAwLCAweDAwMmFmNDYzMDAwMDAwMDAsIDB4ZTMyZDdiZWQwMDAwMDAwMCwKKyAgICAweDdkMmRkMTIxMDAwMDAwMDAsIDB4NjQyNDE0MmIwMDAwMDAwMCwgMHhmYTI0YmVlNzAwMDAwMDAwLAorICAgIDB4MTkyMzMxNjkwMDAwMDAwMCwgMHg4NzIzOWJhNTAwMDAwMDAwLCAweDU2NjI3NmY5MDAwMDAwMDAsCisgICAgMHhjODYyZGMzNTAwMDAwMDAwLCAweDJiNjU1M2JiMDAwMDAwMDAsIDB4YjU2NWY5NzcwMDAwMDAwMCwKKyAgICAweGFjNmMzYzdkMDAwMDAwMDAsIDB4MzI2Yzk2YjEwMDAwMDAwMCwgMHhkMTZiMTkzZjAwMDAwMDAwLAorICAgIDB4NGY2YmIzZjMwMDAwMDAwMCwgMHhlMzc5OTMyYTAwMDAwMDAwLCAweDdkNzkzOWU2MDAwMDAwMDAsCisgICAgMHg5ZTdlYjY2ODAwMDAwMDAwLCAweDAwN2UxY2E0MDAwMDAwMDAsIDB4MTk3N2Q5YWUwMDAwMDAwMCwKKyAgICAweDg3Nzc3MzYyMDAwMDAwMDAsIDB4NjQ3MGZjZWMwMDAwMDAwMCwgMHhmYTcwNTYyMDAwMDAwMDAwLAorICAgIDB4N2Q1M2NkODUwMDAwMDAwMCwgMHhlMzUzNjc0OTAwMDAwMDAwLCAweDAwNTRlOGM3MDAwMDAwMDAsCisgICAgMHg5ZTU0NDIwYjAwMDAwMDAwLCAweDg3NWQ4NzAxMDAwMDAwMDAsIDB4MTk1ZDJkY2QwMDAwMDAwMCwKKyAgICAweGZhNWFhMjQzMDAwMDAwMDAsIDB4NjQ1YTA4OGYwMDAwMDAwMCwgMHhjODQ4Mjg1NjAwMDAwMDAwLAorICAgIDB4NTY0ODgyOWEwMDAwMDAwMCwgMHhiNTRmMGQxNDAwMDAwMDAwLCAweDJiNGZhN2Q4MDAwMDAwMDAsCisgICAgMHgzMjQ2NjJkMjAwMDAwMDAwLCAweGFjNDZjODFlMDAwMDAwMDAsIDB4NGY0MTQ3OTAwMDAwMDAwMCwKKyAgICAweGQxNDFlZDVjMDAwMDAwMDAsIDB4ZWRjMjlkMjkwMDAwMDAwMCwgMHg3M2MyMzdlNTAwMDAwMDAwLAorICAgIDB4OTBjNWI4NmIwMDAwMDAwMCwgMHgwZWM1MTJhNzAwMDAwMDAwLCAweDE3Y2NkN2FkMDAwMDAwMDAsCisgICAgMHg4OWNjN2Q2MTAwMDAwMDAwLCAweDZhY2JmMmVmMDAwMDAwMDAsIDB4ZjRjYjU4MjMwMDAwMDAwMCwKKyAgICAweDU4ZDk3OGZhMDAwMDAwMDAsIDB4YzZkOWQyMzYwMDAwMDAwMCwgMHgyNWRlNWRiODAwMDAwMDAwLAorICAgIDB4YmJkZWY3NzQwMDAwMDAwMCwgMHhhMmQ3MzI3ZTAwMDAwMDAwLCAweDNjZDc5OGIyMDAwMDAwMDAsCisgICAgMHhkZmQwMTczYzAwMDAwMDAwLCAweDQxZDBiZGYwMDAwMDAwMDAsIDB4YzZmMzI2NTUwMDAwMDAwMCwKKyAgICAweDU4ZjM4Yzk5MDAwMDAwMDAsIDB4YmJmNDAzMTcwMDAwMDAwMCwgMHgyNWY0YTlkYjAwMDAwMDAwLAorICAgIDB4M2NmZDZjZDEwMDAwMDAwMCwgMHhhMmZkYzYxZDAwMDAwMDAwLCAweDQxZmE0OTkzMDAwMDAwMDAsCisgICAgMHhkZmZhZTM1ZjAwMDAwMDAwLCAweDczZThjMzg2MDAwMDAwMDAsIDB4ZWRlODY5NGEwMDAwMDAwMCwKKyAgICAweDBlZWZlNmM0MDAwMDAwMDAsIDB4OTBlZjRjMDgwMDAwMDAwMCwgMHg4OWU2ODkwMjAwMDAwMDAwLAorICAgIDB4MTdlNjIzY2UwMDAwMDAwMCwgMHhmNGUxYWM0MDAwMDAwMDAwLCAweDZhZTEwNjhjMDAwMDAwMDAsCisgICAgMHhiYmEwZWJkMDAwMDAwMDAwLCAweDI1YTA0MTFjMDAwMDAwMDAsIDB4YzZhN2NlOTIwMDAwMDAwMCwKKyAgICAweDU4YTc2NDVlMDAwMDAwMDAsIDB4NDFhZWExNTQwMDAwMDAwMCwgMHhkZmFlMGI5ODAwMDAwMDAwLAorICAgIDB4M2NhOTg0MTYwMDAwMDAwMCwgMHhhMmE5MmVkYTAwMDAwMDAwLCAweDBlYmIwZTAzMDAwMDAwMDAsCisgICAgMHg5MGJiYTRjZjAwMDAwMDAwLCAweDczYmMyYjQxMDAwMDAwMDAsIDB4ZWRiYzgxOGQwMDAwMDAwMCwKKyAgICAweGY0YjU0NDg3MDAwMDAwMDAsIDB4NmFiNWVlNGIwMDAwMDAwMCwgMHg4OWIyNjFjNTAwMDAwMDAwLAorICAgIDB4MTdiMmNiMDkwMDAwMDAwMCwgMHg5MDkxNTBhYzAwMDAwMDAwLCAweDBlOTFmYTYwMDAwMDAwMDAsCisgICAgMHhlZDk2NzVlZTAwMDAwMDAwLCAweDczOTZkZjIyMDAwMDAwMDAsIDB4NmE5ZjFhMjgwMDAwMDAwMCwKKyAgICAweGY0OWZiMGU0MDAwMDAwMDAsIDB4MTc5ODNmNmEwMDAwMDAwMCwgMHg4OTk4OTVhNjAwMDAwMDAwLAorICAgIDB4MjU4YWI1N2YwMDAwMDAwMCwgMHhiYjhhMWZiMzAwMDAwMDAwLCAweDU4OGQ5MDNkMDAwMDAwMDAsCisgICAgMHhjNjhkM2FmMTAwMDAwMDAwLCAweGRmODRmZmZiMDAwMDAwMDAsIDB4NDE4NDU1MzcwMDAwMDAwMCwKKyAgICAweGEyODNkYWI5MDAwMDAwMDAsIDB4M2M4MzcwNzUwMDAwMDAwMCwgMHhkYTg1M2I1MzAwMDAwMDAwLAorICAgIDB4NDQ4NTkxOWYwMDAwMDAwMCwgMHhhNzgyMWUxMTAwMDAwMDAwLCAweDM5ODJiNGRkMDAwMDAwMDAsCisgICAgMHgyMDhiNzFkNzAwMDAwMDAwLCAweGJlOGJkYjFiMDAwMDAwMDAsIDB4NWQ4YzU0OTUwMDAwMDAwMCwKKyAgICAweGMzOGNmZTU5MDAwMDAwMDAsIDB4NmY5ZWRlODAwMDAwMDAwMCwgMHhmMTllNzQ0YzAwMDAwMDAwLAorICAgIDB4MTI5OWZiYzIwMDAwMDAwMCwgMHg4Yzk5NTEwZTAwMDAwMDAwLCAweDk1OTA5NDA0MDAwMDAwMDAsCisgICAgMHgwYjkwM2VjODAwMDAwMDAwLCAweGU4OTdiMTQ2MDAwMDAwMDAsIDB4NzY5NzFiOGEwMDAwMDAwMCwKKyAgICAweGYxYjQ4MDJmMDAwMDAwMDAsIDB4NmZiNDJhZTMwMDAwMDAwMCwgMHg4Y2IzYTU2ZDAwMDAwMDAwLAorICAgIDB4MTJiMzBmYTEwMDAwMDAwMCwgMHgwYmJhY2FhYjAwMDAwMDAwLCAweDk1YmE2MDY3MDAwMDAwMDAsCisgICAgMHg3NmJkZWZlOTAwMDAwMDAwLCAweGU4YmQ0NTI1MDAwMDAwMDAsIDB4NDRhZjY1ZmMwMDAwMDAwMCwKKyAgICAweGRhYWZjZjMwMDAwMDAwMDAsIDB4MzlhODQwYmUwMDAwMDAwMCwgMHhhN2E4ZWE3MjAwMDAwMDAwLAorICAgIDB4YmVhMTJmNzgwMDAwMDAwMCwgMHgyMGExODViNDAwMDAwMDAwLCAweGMzYTYwYTNhMDAwMDAwMDAsCisgICAgMHg1ZGE2YTBmNjAwMDAwMDAwLCAweDhjZTc0ZGFhMDAwMDAwMDAsIDB4MTJlN2U3NjYwMDAwMDAwMCwKKyAgICAweGYxZTA2OGU4MDAwMDAwMDAsIDB4NmZlMGMyMjQwMDAwMDAwMCwgMHg3NmU5MDcyZTAwMDAwMDAwLAorICAgIDB4ZThlOWFkZTIwMDAwMDAwMCwgMHgwYmVlMjI2YzAwMDAwMDAwLCAweDk1ZWU4OGEwMDAwMDAwMDAsCisgICAgMHgzOWZjYTg3OTAwMDAwMDAwLCAweGE3ZmMwMmI1MDAwMDAwMDAsIDB4NDRmYjhkM2IwMDAwMDAwMCwKKyAgICAweGRhZmIyN2Y3MDAwMDAwMDAsIDB4YzNmMmUyZmQwMDAwMDAwMCwgMHg1ZGYyNDgzMTAwMDAwMDAwLAorICAgIDB4YmVmNWM3YmYwMDAwMDAwMCwgMHgyMGY1NmQ3MzAwMDAwMDAwLCAweGE3ZDZmNmQ2MDAwMDAwMDAsCisgICAgMHgzOWQ2NWMxYTAwMDAwMDAwLCAweGRhZDFkMzk0MDAwMDAwMDAsIDB4NDRkMTc5NTgwMDAwMDAwMCwKKyAgICAweDVkZDhiYzUyMDAwMDAwMDAsIDB4YzNkODE2OWUwMDAwMDAwMCwgMHgyMGRmOTkxMDAwMDAwMDAwLAorICAgIDB4YmVkZjMzZGMwMDAwMDAwMCwgMHgxMmNkMTMwNTAwMDAwMDAwLCAweDhjY2RiOWM5MDAwMDAwMDAsCisgICAgMHg2ZmNhMzY0NzAwMDAwMDAwLCAweGYxY2E5YzhiMDAwMDAwMDAsIDB4ZThjMzU5ODEwMDAwMDAwMCwKKyAgICAweDc2YzNmMzRkMDAwMDAwMDAsIDB4OTVjNDdjYzMwMDAwMDAwMCwgMHgwYmM0ZDYwZjAwMDAwMDAwLAorICAgIDB4Mzc0N2E2N2EwMDAwMDAwMCwgMHhhOTQ3MGNiNjAwMDAwMDAwLCAweDRhNDA4MzM4MDAwMDAwMDAsCisgICAgMHhkNDQwMjlmNDAwMDAwMDAwLCAweGNkNDllY2ZlMDAwMDAwMDAsIDB4NTM0OTQ2MzIwMDAwMDAwMCwKKyAgICAweGIwNGVjOWJjMDAwMDAwMDAsIDB4MmU0ZTYzNzAwMDAwMDAwMCwgMHg4MjVjNDNhOTAwMDAwMDAwLAorICAgIDB4MWM1Y2U5NjUwMDAwMDAwMCwgMHhmZjViNjZlYjAwMDAwMDAwLCAweDYxNWJjYzI3MDAwMDAwMDAsCisgICAgMHg3ODUyMDkyZDAwMDAwMDAwLCAweGU2NTJhM2UxMDAwMDAwMDAsIDB4MDU1NTJjNmYwMDAwMDAwMCwKKyAgICAweDliNTU4NmEzMDAwMDAwMDAsIDB4MWM3NjFkMDYwMDAwMDAwMCwgMHg4Mjc2YjdjYTAwMDAwMDAwLAorICAgIDB4NjE3MTM4NDQwMDAwMDAwMCwgMHhmZjcxOTI4ODAwMDAwMDAwLCAweGU2Nzg1NzgyMDAwMDAwMDAsCisgICAgMHg3ODc4ZmQ0ZTAwMDAwMDAwLCAweDliN2Y3MmMwMDAwMDAwMDAsIDB4MDU3ZmQ4MGMwMDAwMDAwMCwKKyAgICAweGE5NmRmOGQ1MDAwMDAwMDAsIDB4Mzc2ZDUyMTkwMDAwMDAwMCwgMHhkNDZhZGQ5NzAwMDAwMDAwLAorICAgIDB4NGE2YTc3NWIwMDAwMDAwMCwgMHg1MzYzYjI1MTAwMDAwMDAwLCAweGNkNjMxODlkMDAwMDAwMDAsCisgICAgMHgyZTY0OTcxMzAwMDAwMDAwLCAweGIwNjQzZGRmMDAwMDAwMDAsIDB4NjEyNWQwODMwMDAwMDAwMCwKKyAgICAweGZmMjU3YTRmMDAwMDAwMDAsIDB4MWMyMmY1YzEwMDAwMDAwMCwgMHg4MjIyNWYwZDAwMDAwMDAwLAorICAgIDB4OWIyYjlhMDcwMDAwMDAwMCwgMHgwNTJiMzBjYjAwMDAwMDAwLCAweGU2MmNiZjQ1MDAwMDAwMDAsCisgICAgMHg3ODJjMTU4OTAwMDAwMDAwLCAweGQ0M2UzNTUwMDAwMDAwMDAsIDB4NGEzZTlmOWMwMDAwMDAwMCwKKyAgICAweGE5MzkxMDEyMDAwMDAwMDAsIDB4MzczOWJhZGUwMDAwMDAwMCwgMHgyZTMwN2ZkNDAwMDAwMDAwLAorICAgIDB4YjAzMGQ1MTgwMDAwMDAwMCwgMHg1MzM3NWE5NjAwMDAwMDAwLCAweGNkMzdmMDVhMDAwMDAwMDAsCisgICAgMHg0YTE0NmJmZjAwMDAwMDAwLCAweGQ0MTRjMTMzMDAwMDAwMDAsIDB4MzcxMzRlYmQwMDAwMDAwMCwKKyAgICAweGE5MTNlNDcxMDAwMDAwMDAsIDB4YjAxYTIxN2IwMDAwMDAwMCwgMHgyZTFhOGJiNzAwMDAwMDAwLAorICAgIDB4Y2QxZDA0MzkwMDAwMDAwMCwgMHg1MzFkYWVmNTAwMDAwMDAwLCAweGZmMGY4ZTJjMDAwMDAwMDAsCisgICAgMHg2MTBmMjRlMDAwMDAwMDAwLCAweDgyMDhhYjZlMDAwMDAwMDAsIDB4MWMwODAxYTIwMDAwMDAwMCwKKyAgICAweDA1MDFjNGE4MDAwMDAwMDAsIDB4OWIwMTZlNjQwMDAwMDAwMCwgMHg3ODA2ZTFlYTAwMDAwMDAwLAorICAgIDB4ZTYwNjRiMjYwMDAwMDAwMH19OworCisjZWxzZSAvKiBXID09IDQgKi8KKworbG9jYWwgY29uc3Qgel9jcmNfdCBGQVIgY3JjX2JyYWlkX3RhYmxlW11bMjU2XSA9IHsKKyAgIHsweDAwMDAwMDAwLCAweGI4YmM2NzY1LCAweGFhMDljODhiLCAweDEyYjVhZmVlLCAweDhmNjI5NzU3LAorICAgIDB4MzdkZWYwMzIsIDB4MjU2YjVmZGMsIDB4OWRkNzM4YjksIDB4YzViNDI4ZWYsIDB4N2QwODRmOGEsCisgICAgMHg2ZmJkZTA2NCwgMHhkNzAxODcwMSwgMHg0YWQ2YmZiOCwgMHhmMjZhZDhkZCwgMHhlMGRmNzczMywKKyAgICAweDU4NjMxMDU2LCAweDUwMTk1NzlmLCAweGU4YTUzMGZhLCAweGZhMTA5ZjE0LCAweDQyYWNmODcxLAorICAgIDB4ZGY3YmMwYzgsIDB4NjdjN2E3YWQsIDB4NzU3MjA4NDMsIDB4Y2RjZTZmMjYsIDB4OTVhZDdmNzAsCisgICAgMHgyZDExMTgxNSwgMHgzZmE0YjdmYiwgMHg4NzE4ZDA5ZSwgMHgxYWNmZTgyNywgMHhhMjczOGY0MiwKKyAgICAweGIwYzYyMGFjLCAweDA4N2E0N2M5LCAweGEwMzJhZjNlLCAweDE4OGVjODViLCAweDBhM2I2N2I1LAorICAgIDB4YjI4NzAwZDAsIDB4MmY1MDM4NjksIDB4OTdlYzVmMGMsIDB4ODU1OWYwZTIsIDB4M2RlNTk3ODcsCisgICAgMHg2NTg2ODdkMSwgMHhkZDNhZTBiNCwgMHhjZjhmNGY1YSwgMHg3NzMzMjgzZiwgMHhlYWU0MTA4NiwKKyAgICAweDUyNTg3N2UzLCAweDQwZWRkODBkLCAweGY4NTFiZjY4LCAweGYwMmJmOGExLCAweDQ4OTc5ZmM0LAorICAgIDB4NWEyMjMwMmEsIDB4ZTI5ZTU3NGYsIDB4N2Y0OTZmZjYsIDB4YzdmNTA4OTMsIDB4ZDU0MGE3N2QsCisgICAgMHg2ZGZjYzAxOCwgMHgzNTlmZDA0ZSwgMHg4ZDIzYjcyYiwgMHg5Zjk2MThjNSwgMHgyNzJhN2ZhMCwKKyAgICAweGJhZmQ0NzE5LCAweDAyNDEyMDdjLCAweDEwZjQ4ZjkyLCAweGE4NDhlOGY3LCAweDliMTQ1ODNkLAorICAgIDB4MjNhODNmNTgsIDB4MzExZDkwYjYsIDB4ODlhMWY3ZDMsIDB4MTQ3NmNmNmEsIDB4YWNjYWE4MGYsCisgICAgMHhiZTdmMDdlMSwgMHgwNmMzNjA4NCwgMHg1ZWEwNzBkMiwgMHhlNjFjMTdiNywgMHhmNGE5Yjg1OSwKKyAgICAweDRjMTVkZjNjLCAweGQxYzJlNzg1LCAweDY5N2U4MGUwLCAweDdiY2IyZjBlLCAweGMzNzc0ODZiLAorICAgIDB4Y2IwZDBmYTIsIDB4NzNiMTY4YzcsIDB4NjEwNGM3MjksIDB4ZDliOGEwNGMsIDB4NDQ2Zjk4ZjUsCisgICAgMHhmY2QzZmY5MCwgMHhlZTY2NTA3ZSwgMHg1NmRhMzcxYiwgMHgwZWI5Mjc0ZCwgMHhiNjA1NDAyOCwKKyAgICAweGE0YjBlZmM2LCAweDFjMGM4OGEzLCAweDgxZGJiMDFhLCAweDM5NjdkNzdmLCAweDJiZDI3ODkxLAorICAgIDB4OTM2ZTFmZjQsIDB4M2IyNmY3MDMsIDB4ODM5YTkwNjYsIDB4OTEyZjNmODgsIDB4Mjk5MzU4ZWQsCisgICAgMHhiNDQ0NjA1NCwgMHgwY2Y4MDczMSwgMHgxZTRkYThkZiwgMHhhNmYxY2ZiYSwgMHhmZTkyZGZlYywKKyAgICAweDQ2MmViODg5LCAweDU0OWIxNzY3LCAweGVjMjc3MDAyLCAweDcxZjA0OGJiLCAweGM5NGMyZmRlLAorICAgIDB4ZGJmOTgwMzAsIDB4NjM0NWU3NTUsIDB4NmIzZmEwOWMsIDB4ZDM4M2M3ZjksIDB4YzEzNjY4MTcsCisgICAgMHg3OThhMGY3MiwgMHhlNDVkMzdjYiwgMHg1Y2UxNTBhZSwgMHg0ZTU0ZmY0MCwgMHhmNmU4OTgyNSwKKyAgICAweGFlOGI4ODczLCAweDE2MzdlZjE2LCAweDA0ODI0MGY4LCAweGJjM2UyNzlkLCAweDIxZTkxZjI0LAorICAgIDB4OTk1NTc4NDEsIDB4OGJlMGQ3YWYsIDB4MzM1Y2IwY2EsIDB4ZWQ1OWI2M2IsIDB4NTVlNWQxNWUsCisgICAgMHg0NzUwN2ViMCwgMHhmZmVjMTlkNSwgMHg2MjNiMjE2YywgMHhkYTg3NDYwOSwgMHhjODMyZTllNywKKyAgICAweDcwOGU4ZTgyLCAweDI4ZWQ5ZWQ0LCAweDkwNTFmOWIxLCAweDgyZTQ1NjVmLCAweDNhNTgzMTNhLAorICAgIDB4YTc4ZjA5ODMsIDB4MWYzMzZlZTYsIDB4MGQ4NmMxMDgsIDB4YjUzYWE2NmQsIDB4YmQ0MGUxYTQsCisgICAgMHgwNWZjODZjMSwgMHgxNzQ5MjkyZiwgMHhhZmY1NGU0YSwgMHgzMjIyNzZmMywgMHg4YTllMTE5NiwKKyAgICAweDk4MmJiZTc4LCAweDIwOTdkOTFkLCAweDc4ZjRjOTRiLCAweGMwNDhhZTJlLCAweGQyZmQwMWMwLAorICAgIDB4NmE0MTY2YTUsIDB4Zjc5NjVlMWMsIDB4NGYyYTM5NzksIDB4NWQ5Zjk2OTcsIDB4ZTUyM2YxZjIsCisgICAgMHg0ZDZiMTkwNSwgMHhmNWQ3N2U2MCwgMHhlNzYyZDE4ZSwgMHg1ZmRlYjZlYiwgMHhjMjA5OGU1MiwKKyAgICAweDdhYjVlOTM3LCAweDY4MDA0NmQ5LCAweGQwYmMyMWJjLCAweDg4ZGYzMWVhLCAweDMwNjM1NjhmLAorICAgIDB4MjJkNmY5NjEsIDB4OWE2YTllMDQsIDB4MDdiZGE2YmQsIDB4YmYwMWMxZDgsIDB4YWRiNDZlMzYsCisgICAgMHgxNTA4MDk1MywgMHgxZDcyNGU5YSwgMHhhNWNlMjlmZiwgMHhiNzdiODYxMSwgMHgwZmM3ZTE3NCwKKyAgICAweDkyMTBkOWNkLCAweDJhYWNiZWE4LCAweDM4MTkxMTQ2LCAweDgwYTU3NjIzLCAweGQ4YzY2Njc1LAorICAgIDB4NjA3YTAxMTAsIDB4NzJjZmFlZmUsIDB4Y2E3M2M5OWIsIDB4NTdhNGYxMjIsIDB4ZWYxODk2NDcsCisgICAgMHhmZGFkMzlhOSwgMHg0NTExNWVjYywgMHg3NjRkZWUwNiwgMHhjZWYxODk2MywgMHhkYzQ0MjY4ZCwKKyAgICAweDY0Zjg0MWU4LCAweGY5MmY3OTUxLCAweDQxOTMxZTM0LCAweDUzMjZiMWRhLCAweGViOWFkNmJmLAorICAgIDB4YjNmOWM2ZTksIDB4MGI0NWExOGMsIDB4MTlmMDBlNjIsIDB4YTE0YzY5MDcsIDB4M2M5YjUxYmUsCisgICAgMHg4NDI3MzZkYiwgMHg5NjkyOTkzNSwgMHgyZTJlZmU1MCwgMHgyNjU0Yjk5OSwgMHg5ZWU4ZGVmYywKKyAgICAweDhjNWQ3MTEyLCAweDM0ZTExNjc3LCAweGE5MzYyZWNlLCAweDExOGE0OWFiLCAweDAzM2ZlNjQ1LAorICAgIDB4YmI4MzgxMjAsIDB4ZTNlMDkxNzYsIDB4NWI1Y2Y2MTMsIDB4NDllOTU5ZmQsIDB4ZjE1NTNlOTgsCisgICAgMHg2YzgyMDYyMSwgMHhkNDNlNjE0NCwgMHhjNjhiY2VhYSwgMHg3ZTM3YTljZiwgMHhkNjdmNDEzOCwKKyAgICAweDZlYzMyNjVkLCAweDdjNzY4OWIzLCAweGM0Y2FlZWQ2LCAweDU5MWRkNjZmLCAweGUxYTFiMTBhLAorICAgIDB4ZjMxNDFlZTQsIDB4NGJhODc5ODEsIDB4MTNjYjY5ZDcsIDB4YWI3NzBlYjIsIDB4YjljMmExNWMsCisgICAgMHgwMTdlYzYzOSwgMHg5Y2E5ZmU4MCwgMHgyNDE1OTllNSwgMHgzNmEwMzYwYiwgMHg4ZTFjNTE2ZSwKKyAgICAweDg2NjYxNmE3LCAweDNlZGE3MWMyLCAweDJjNmZkZTJjLCAweDk0ZDNiOTQ5LCAweDA5MDQ4MWYwLAorICAgIDB4YjFiOGU2OTUsIDB4YTMwZDQ5N2IsIDB4MWJiMTJlMWUsIDB4NDNkMjNlNDgsIDB4ZmI2ZTU5MmQsCisgICAgMHhlOWRiZjZjMywgMHg1MTY3OTFhNiwgMHhjY2IwYTkxZiwgMHg3NDBjY2U3YSwgMHg2NmI5NjE5NCwKKyAgICAweGRlMDUwNmYxfSwKKyAgIHsweDAwMDAwMDAwLCAweDAxYzI2YTM3LCAweDAzODRkNDZlLCAweDAyNDZiZTU5LCAweDA3MDlhOGRjLAorICAgIDB4MDZjYmMyZWIsIDB4MDQ4ZDdjYjIsIDB4MDU0ZjE2ODUsIDB4MGUxMzUxYjgsIDB4MGZkMTNiOGYsCisgICAgMHgwZDk3ODVkNiwgMHgwYzU1ZWZlMSwgMHgwOTFhZjk2NCwgMHgwOGQ4OTM1MywgMHgwYTllMmQwYSwKKyAgICAweDBiNWM0NzNkLCAweDFjMjZhMzcwLCAweDFkZTRjOTQ3LCAweDFmYTI3NzFlLCAweDFlNjAxZDI5LAorICAgIDB4MWIyZjBiYWMsIDB4MWFlZDYxOWIsIDB4MThhYmRmYzIsIDB4MTk2OWI1ZjUsIDB4MTIzNWYyYzgsCisgICAgMHgxM2Y3OThmZiwgMHgxMWIxMjZhNiwgMHgxMDczNGM5MSwgMHgxNTNjNWExNCwgMHgxNGZlMzAyMywKKyAgICAweDE2Yjg4ZTdhLCAweDE3N2FlNDRkLCAweDM4NGQ0NmUwLCAweDM5OGYyY2Q3LCAweDNiYzk5MjhlLAorICAgIDB4M2EwYmY4YjksIDB4M2Y0NGVlM2MsIDB4M2U4Njg0MGIsIDB4M2NjMDNhNTIsIDB4M2QwMjUwNjUsCisgICAgMHgzNjVlMTc1OCwgMHgzNzljN2Q2ZiwgMHgzNWRhYzMzNiwgMHgzNDE4YTkwMSwgMHgzMTU3YmY4NCwKKyAgICAweDMwOTVkNWIzLCAweDMyZDM2YmVhLCAweDMzMTEwMWRkLCAweDI0NmJlNTkwLCAweDI1YTk4ZmE3LAorICAgIDB4MjdlZjMxZmUsIDB4MjYyZDViYzksIDB4MjM2MjRkNGMsIDB4MjJhMDI3N2IsIDB4MjBlNjk5MjIsCisgICAgMHgyMTI0ZjMxNSwgMHgyYTc4YjQyOCwgMHgyYmJhZGUxZiwgMHgyOWZjNjA0NiwgMHgyODNlMGE3MSwKKyAgICAweDJkNzExY2Y0LCAweDJjYjM3NmMzLCAweDJlZjVjODlhLCAweDJmMzdhMmFkLCAweDcwOWE4ZGMwLAorICAgIDB4NzE1OGU3ZjcsIDB4NzMxZTU5YWUsIDB4NzJkYzMzOTksIDB4Nzc5MzI1MWMsIDB4NzY1MTRmMmIsCisgICAgMHg3NDE3ZjE3MiwgMHg3NWQ1OWI0NSwgMHg3ZTg5ZGM3OCwgMHg3ZjRiYjY0ZiwgMHg3ZDBkMDgxNiwKKyAgICAweDdjY2Y2MjIxLCAweDc5ODA3NGE0LCAweDc4NDIxZTkzLCAweDdhMDRhMGNhLCAweDdiYzZjYWZkLAorICAgIDB4NmNiYzJlYjAsIDB4NmQ3ZTQ0ODcsIDB4NmYzOGZhZGUsIDB4NmVmYTkwZTksIDB4NmJiNTg2NmMsCisgICAgMHg2YTc3ZWM1YiwgMHg2ODMxNTIwMiwgMHg2OWYzMzgzNSwgMHg2MmFmN2YwOCwgMHg2MzZkMTUzZiwKKyAgICAweDYxMmJhYjY2LCAweDYwZTljMTUxLCAweDY1YTZkN2Q0LCAweDY0NjRiZGUzLCAweDY2MjIwM2JhLAorICAgIDB4NjdlMDY5OGQsIDB4NDhkN2NiMjAsIDB4NDkxNWExMTcsIDB4NGI1MzFmNGUsIDB4NGE5MTc1NzksCisgICAgMHg0ZmRlNjNmYywgMHg0ZTFjMDljYiwgMHg0YzVhYjc5MiwgMHg0ZDk4ZGRhNSwgMHg0NmM0OWE5OCwKKyAgICAweDQ3MDZmMGFmLCAweDQ1NDA0ZWY2LCAweDQ0ODIyNGMxLCAweDQxY2QzMjQ0LCAweDQwMGY1ODczLAorICAgIDB4NDI0OWU2MmEsIDB4NDM4YjhjMWQsIDB4NTRmMTY4NTAsIDB4NTUzMzAyNjcsIDB4NTc3NWJjM2UsCisgICAgMHg1NmI3ZDYwOSwgMHg1M2Y4YzA4YywgMHg1MjNhYWFiYiwgMHg1MDdjMTRlMiwgMHg1MWJlN2VkNSwKKyAgICAweDVhZTIzOWU4LCAweDViMjA1M2RmLCAweDU5NjZlZDg2LCAweDU4YTQ4N2IxLCAweDVkZWI5MTM0LAorICAgIDB4NWMyOWZiMDMsIDB4NWU2ZjQ1NWEsIDB4NWZhZDJmNmQsIDB4ZTEzNTFiODAsIDB4ZTBmNzcxYjcsCisgICAgMHhlMmIxY2ZlZSwgMHhlMzczYTVkOSwgMHhlNjNjYjM1YywgMHhlN2ZlZDk2YiwgMHhlNWI4NjczMiwKKyAgICAweGU0N2EwZDA1LCAweGVmMjY0YTM4LCAweGVlZTQyMDBmLCAweGVjYTI5ZTU2LCAweGVkNjBmNDYxLAorICAgIDB4ZTgyZmUyZTQsIDB4ZTllZDg4ZDMsIDB4ZWJhYjM2OGEsIDB4ZWE2OTVjYmQsIDB4ZmQxM2I4ZjAsCisgICAgMHhmY2QxZDJjNywgMHhmZTk3NmM5ZSwgMHhmZjU1MDZhOSwgMHhmYTFhMTAyYywgMHhmYmQ4N2ExYiwKKyAgICAweGY5OWVjNDQyLCAweGY4NWNhZTc1LCAweGYzMDBlOTQ4LCAweGYyYzI4MzdmLCAweGYwODQzZDI2LAorICAgIDB4ZjE0NjU3MTEsIDB4ZjQwOTQxOTQsIDB4ZjVjYjJiYTMsIDB4Zjc4ZDk1ZmEsIDB4ZjY0ZmZmY2QsCisgICAgMHhkOTc4NWQ2MCwgMHhkOGJhMzc1NywgMHhkYWZjODkwZSwgMHhkYjNlZTMzOSwgMHhkZTcxZjViYywKKyAgICAweGRmYjM5ZjhiLCAweGRkZjUyMWQyLCAweGRjMzc0YmU1LCAweGQ3NmIwY2Q4LCAweGQ2YTk2NmVmLAorICAgIDB4ZDRlZmQ4YjYsIDB4ZDUyZGIyODEsIDB4ZDA2MmE0MDQsIDB4ZDFhMGNlMzMsIDB4ZDNlNjcwNmEsCisgICAgMHhkMjI0MWE1ZCwgMHhjNTVlZmUxMCwgMHhjNDljOTQyNywgMHhjNmRhMmE3ZSwgMHhjNzE4NDA0OSwKKyAgICAweGMyNTc1NmNjLCAweGMzOTUzY2ZiLCAweGMxZDM4MmEyLCAweGMwMTFlODk1LCAweGNiNGRhZmE4LAorICAgIDB4Y2E4ZmM1OWYsIDB4YzhjOTdiYzYsIDB4YzkwYjExZjEsIDB4Y2M0NDA3NzQsIDB4Y2Q4NjZkNDMsCisgICAgMHhjZmMwZDMxYSwgMHhjZTAyYjkyZCwgMHg5MWFmOTY0MCwgMHg5MDZkZmM3NywgMHg5MjJiNDIyZSwKKyAgICAweDkzZTkyODE5LCAweDk2YTYzZTljLCAweDk3NjQ1NGFiLCAweDk1MjJlYWYyLCAweDk0ZTA4MGM1LAorICAgIDB4OWZiY2M3ZjgsIDB4OWU3ZWFkY2YsIDB4OWMzODEzOTYsIDB4OWRmYTc5YTEsIDB4OThiNTZmMjQsCisgICAgMHg5OTc3MDUxMywgMHg5YjMxYmI0YSwgMHg5YWYzZDE3ZCwgMHg4ZDg5MzUzMCwgMHg4YzRiNWYwNywKKyAgICAweDhlMGRlMTVlLCAweDhmY2Y4YjY5LCAweDhhODA5ZGVjLCAweDhiNDJmN2RiLCAweDg5MDQ0OTgyLAorICAgIDB4ODhjNjIzYjUsIDB4ODM5YTY0ODgsIDB4ODI1ODBlYmYsIDB4ODAxZWIwZTYsIDB4ODFkY2RhZDEsCisgICAgMHg4NDkzY2M1NCwgMHg4NTUxYTY2MywgMHg4NzE3MTgzYSwgMHg4NmQ1NzIwZCwgMHhhOWUyZDBhMCwKKyAgICAweGE4MjBiYTk3LCAweGFhNjYwNGNlLCAweGFiYTQ2ZWY5LCAweGFlZWI3ODdjLCAweGFmMjkxMjRiLAorICAgIDB4YWQ2ZmFjMTIsIDB4YWNhZGM2MjUsIDB4YTdmMTgxMTgsIDB4YTYzM2ViMmYsIDB4YTQ3NTU1NzYsCisgICAgMHhhNWI3M2Y0MSwgMHhhMGY4MjljNCwgMHhhMTNhNDNmMywgMHhhMzdjZmRhYSwgMHhhMmJlOTc5ZCwKKyAgICAweGI1YzQ3M2QwLCAweGI0MDYxOWU3LCAweGI2NDBhN2JlLCAweGI3ODJjZDg5LCAweGIyY2RkYjBjLAorICAgIDB4YjMwZmIxM2IsIDB4YjE0OTBmNjIsIDB4YjA4YjY1NTUsIDB4YmJkNzIyNjgsIDB4YmExNTQ4NWYsCisgICAgMHhiODUzZjYwNiwgMHhiOTkxOWMzMSwgMHhiY2RlOGFiNCwgMHhiZDFjZTA4MywgMHhiZjVhNWVkYSwKKyAgICAweGJlOTgzNGVkfSwKKyAgIHsweDAwMDAwMDAwLCAweDE5MWIzMTQxLCAweDMyMzY2MjgyLCAweDJiMmQ1M2MzLCAweDY0NmNjNTA0LAorICAgIDB4N2Q3N2Y0NDUsIDB4NTY1YWE3ODYsIDB4NGY0MTk2YzcsIDB4YzhkOThhMDgsIDB4ZDFjMmJiNDksCisgICAgMHhmYWVmZTg4YSwgMHhlM2Y0ZDljYiwgMHhhY2I1NGYwYywgMHhiNWFlN2U0ZCwgMHg5ZTgzMmQ4ZSwKKyAgICAweDg3OTgxY2NmLCAweDRhYzIxMjUxLCAweDUzZDkyMzEwLCAweDc4ZjQ3MGQzLCAweDYxZWY0MTkyLAorICAgIDB4MmVhZWQ3NTUsIDB4MzdiNWU2MTQsIDB4MWM5OGI1ZDcsIDB4MDU4Mzg0OTYsIDB4ODIxYjk4NTksCisgICAgMHg5YjAwYTkxOCwgMHhiMDJkZmFkYiwgMHhhOTM2Y2I5YSwgMHhlNjc3NWQ1ZCwgMHhmZjZjNmMxYywKKyAgICAweGQ0NDEzZmRmLCAweGNkNWEwZTllLCAweDk1ODQyNGEyLCAweDhjOWYxNWUzLCAweGE3YjI0NjIwLAorICAgIDB4YmVhOTc3NjEsIDB4ZjFlOGUxYTYsIDB4ZThmM2QwZTcsIDB4YzNkZTgzMjQsIDB4ZGFjNWIyNjUsCisgICAgMHg1ZDVkYWVhYSwgMHg0NDQ2OWZlYiwgMHg2ZjZiY2MyOCwgMHg3NjcwZmQ2OSwgMHgzOTMxNmJhZSwKKyAgICAweDIwMmE1YWVmLCAweDBiMDcwOTJjLCAweDEyMWMzODZkLCAweGRmNDYzNmYzLCAweGM2NWQwN2IyLAorICAgIDB4ZWQ3MDU0NzEsIDB4ZjQ2YjY1MzAsIDB4YmIyYWYzZjcsIDB4YTIzMWMyYjYsIDB4ODkxYzkxNzUsCisgICAgMHg5MDA3YTAzNCwgMHgxNzlmYmNmYiwgMHgwZTg0OGRiYSwgMHgyNWE5ZGU3OSwgMHgzY2IyZWYzOCwKKyAgICAweDczZjM3OWZmLCAweDZhZTg0OGJlLCAweDQxYzUxYjdkLCAweDU4ZGUyYTNjLCAweGYwNzk0ZjA1LAorICAgIDB4ZTk2MjdlNDQsIDB4YzI0ZjJkODcsIDB4ZGI1NDFjYzYsIDB4OTQxNThhMDEsIDB4OGQwZWJiNDAsCisgICAgMHhhNjIzZTg4MywgMHhiZjM4ZDljMiwgMHgzOGEwYzUwZCwgMHgyMWJiZjQ0YywgMHgwYTk2YTc4ZiwKKyAgICAweDEzOGQ5NmNlLCAweDVjY2MwMDA5LCAweDQ1ZDczMTQ4LCAweDZlZmE2MjhiLCAweDc3ZTE1M2NhLAorICAgIDB4YmFiYjVkNTQsIDB4YTNhMDZjMTUsIDB4ODg4ZDNmZDYsIDB4OTE5NjBlOTcsIDB4ZGVkNzk4NTAsCisgICAgMHhjN2NjYTkxMSwgMHhlY2UxZmFkMiwgMHhmNWZhY2I5MywgMHg3MjYyZDc1YywgMHg2Yjc5ZTYxZCwKKyAgICAweDQwNTRiNWRlLCAweDU5NGY4NDlmLCAweDE2MGUxMjU4LCAweDBmMTUyMzE5LCAweDI0Mzg3MGRhLAorICAgIDB4M2QyMzQxOWIsIDB4NjVmZDZiYTcsIDB4N2NlNjVhZTYsIDB4NTdjYjA5MjUsIDB4NGVkMDM4NjQsCisgICAgMHgwMTkxYWVhMywgMHgxODhhOWZlMiwgMHgzM2E3Y2MyMSwgMHgyYWJjZmQ2MCwgMHhhZDI0ZTFhZiwKKyAgICAweGI0M2ZkMGVlLCAweDlmMTI4MzJkLCAweDg2MDliMjZjLCAweGM5NDgyNGFiLCAweGQwNTMxNWVhLAorICAgIDB4ZmI3ZTQ2MjksIDB4ZTI2NTc3NjgsIDB4MmYzZjc5ZjYsIDB4MzYyNDQ4YjcsIDB4MWQwOTFiNzQsCisgICAgMHgwNDEyMmEzNSwgMHg0YjUzYmNmMiwgMHg1MjQ4OGRiMywgMHg3OTY1ZGU3MCwgMHg2MDdlZWYzMSwKKyAgICAweGU3ZTZmM2ZlLCAweGZlZmRjMmJmLCAweGQ1ZDA5MTdjLCAweGNjY2JhMDNkLCAweDgzOGEzNmZhLAorICAgIDB4OWE5MTA3YmIsIDB4YjFiYzU0NzgsIDB4YThhNzY1MzksIDB4M2I4Mzk4NGIsIDB4MjI5OGE5MGEsCisgICAgMHgwOWI1ZmFjOSwgMHgxMGFlY2I4OCwgMHg1ZmVmNWQ0ZiwgMHg0NmY0NmMwZSwgMHg2ZGQ5M2ZjZCwKKyAgICAweDc0YzIwZThjLCAweGYzNWExMjQzLCAweGVhNDEyMzAyLCAweGMxNmM3MGMxLCAweGQ4Nzc0MTgwLAorICAgIDB4OTczNmQ3NDcsIDB4OGUyZGU2MDYsIDB4YTUwMGI1YzUsIDB4YmMxYjg0ODQsIDB4NzE0MThhMWEsCisgICAgMHg2ODVhYmI1YiwgMHg0Mzc3ZTg5OCwgMHg1YTZjZDlkOSwgMHgxNTJkNGYxZSwgMHgwYzM2N2U1ZiwKKyAgICAweDI3MWIyZDljLCAweDNlMDAxY2RkLCAweGI5OTgwMDEyLCAweGEwODMzMTUzLCAweDhiYWU2MjkwLAorICAgIDB4OTJiNTUzZDEsIDB4ZGRmNGM1MTYsIDB4YzRlZmY0NTcsIDB4ZWZjMmE3OTQsIDB4ZjZkOTk2ZDUsCisgICAgMHhhZTA3YmNlOSwgMHhiNzFjOGRhOCwgMHg5YzMxZGU2YiwgMHg4NTJhZWYyYSwgMHhjYTZiNzllZCwKKyAgICAweGQzNzA0OGFjLCAweGY4NWQxYjZmLCAweGUxNDYyYTJlLCAweDY2ZGUzNmUxLCAweDdmYzUwN2EwLAorICAgIDB4NTRlODU0NjMsIDB4NGRmMzY1MjIsIDB4MDJiMmYzZTUsIDB4MWJhOWMyYTQsIDB4MzA4NDkxNjcsCisgICAgMHgyOTlmYTAyNiwgMHhlNGM1YWViOCwgMHhmZGRlOWZmOSwgMHhkNmYzY2MzYSwgMHhjZmU4ZmQ3YiwKKyAgICAweDgwYTk2YmJjLCAweDk5YjI1YWZkLCAweGIyOWYwOTNlLCAweGFiODQzODdmLCAweDJjMWMyNGIwLAorICAgIDB4MzUwNzE1ZjEsIDB4MWUyYTQ2MzIsIDB4MDczMTc3NzMsIDB4NDg3MGUxYjQsIDB4NTE2YmQwZjUsCisgICAgMHg3YTQ2ODMzNiwgMHg2MzVkYjI3NywgMHhjYmZhZDc0ZSwgMHhkMmUxZTYwZiwgMHhmOWNjYjVjYywKKyAgICAweGUwZDc4NDhkLCAweGFmOTYxMjRhLCAweGI2OGQyMzBiLCAweDlkYTA3MGM4LCAweDg0YmI0MTg5LAorICAgIDB4MDMyMzVkNDYsIDB4MWEzODZjMDcsIDB4MzExNTNmYzQsIDB4MjgwZTBlODUsIDB4Njc0Zjk4NDIsCisgICAgMHg3ZTU0YTkwMywgMHg1NTc5ZmFjMCwgMHg0YzYyY2I4MSwgMHg4MTM4YzUxZiwgMHg5ODIzZjQ1ZSwKKyAgICAweGIzMGVhNzlkLCAweGFhMTU5NmRjLCAweGU1NTQwMDFiLCAweGZjNGYzMTVhLCAweGQ3NjI2Mjk5LAorICAgIDB4Y2U3OTUzZDgsIDB4NDllMTRmMTcsIDB4NTBmYTdlNTYsIDB4N2JkNzJkOTUsIDB4NjJjYzFjZDQsCisgICAgMHgyZDhkOGExMywgMHgzNDk2YmI1MiwgMHgxZmJiZTg5MSwgMHgwNmEwZDlkMCwgMHg1ZTdlZjNlYywKKyAgICAweDQ3NjVjMmFkLCAweDZjNDg5MTZlLCAweDc1NTNhMDJmLCAweDNhMTIzNmU4LCAweDIzMDkwN2E5LAorICAgIDB4MDgyNDU0NmEsIDB4MTEzZjY1MmIsIDB4OTZhNzc5ZTQsIDB4OGZiYzQ4YTUsIDB4YTQ5MTFiNjYsCisgICAgMHhiZDhhMmEyNywgMHhmMmNiYmNlMCwgMHhlYmQwOGRhMSwgMHhjMGZkZGU2MiwgMHhkOWU2ZWYyMywKKyAgICAweDE0YmNlMWJkLCAweDBkYTdkMGZjLCAweDI2OGE4MzNmLCAweDNmOTFiMjdlLCAweDcwZDAyNGI5LAorICAgIDB4NjljYjE1ZjgsIDB4NDJlNjQ2M2IsIDB4NWJmZDc3N2EsIDB4ZGM2NTZiYjUsIDB4YzU3ZTVhZjQsCisgICAgMHhlZTUzMDkzNywgMHhmNzQ4Mzg3NiwgMHhiODA5YWViMSwgMHhhMTEyOWZmMCwgMHg4YTNmY2MzMywKKyAgICAweDkzMjRmZDcyfSwKKyAgIHsweDAwMDAwMDAwLCAweDc3MDczMDk2LCAweGVlMGU2MTJjLCAweDk5MDk1MWJhLCAweDA3NmRjNDE5LAorICAgIDB4NzA2YWY0OGYsIDB4ZTk2M2E1MzUsIDB4OWU2NDk1YTMsIDB4MGVkYjg4MzIsIDB4NzlkY2I4YTQsCisgICAgMHhlMGQ1ZTkxZSwgMHg5N2QyZDk4OCwgMHgwOWI2NGMyYiwgMHg3ZWIxN2NiZCwgMHhlN2I4MmQwNywKKyAgICAweDkwYmYxZDkxLCAweDFkYjcxMDY0LCAweDZhYjAyMGYyLCAweGYzYjk3MTQ4LCAweDg0YmU0MWRlLAorICAgIDB4MWFkYWQ0N2QsIDB4NmRkZGU0ZWIsIDB4ZjRkNGI1NTEsIDB4ODNkMzg1YzcsIDB4MTM2Yzk4NTYsCisgICAgMHg2NDZiYThjMCwgMHhmZDYyZjk3YSwgMHg4YTY1YzllYywgMHgxNDAxNWM0ZiwgMHg2MzA2NmNkOSwKKyAgICAweGZhMGYzZDYzLCAweDhkMDgwZGY1LCAweDNiNmUyMGM4LCAweDRjNjkxMDVlLCAweGQ1NjA0MWU0LAorICAgIDB4YTI2NzcxNzIsIDB4M2MwM2U0ZDEsIDB4NGIwNGQ0NDcsIDB4ZDIwZDg1ZmQsIDB4YTUwYWI1NmIsCisgICAgMHgzNWI1YThmYSwgMHg0MmIyOTg2YywgMHhkYmJiYzlkNiwgMHhhY2JjZjk0MCwgMHgzMmQ4NmNlMywKKyAgICAweDQ1ZGY1Yzc1LCAweGRjZDYwZGNmLCAweGFiZDEzZDU5LCAweDI2ZDkzMGFjLCAweDUxZGUwMDNhLAorICAgIDB4YzhkNzUxODAsIDB4YmZkMDYxMTYsIDB4MjFiNGY0YjUsIDB4NTZiM2M0MjMsIDB4Y2ZiYTk1OTksCisgICAgMHhiOGJkYTUwZiwgMHgyODAyYjg5ZSwgMHg1ZjA1ODgwOCwgMHhjNjBjZDliMiwgMHhiMTBiZTkyNCwKKyAgICAweDJmNmY3Yzg3LCAweDU4Njg0YzExLCAweGMxNjExZGFiLCAweGI2NjYyZDNkLCAweDc2ZGM0MTkwLAorICAgIDB4MDFkYjcxMDYsIDB4OThkMjIwYmMsIDB4ZWZkNTEwMmEsIDB4NzFiMTg1ODksIDB4MDZiNmI1MWYsCisgICAgMHg5ZmJmZTRhNSwgMHhlOGI4ZDQzMywgMHg3ODA3YzlhMiwgMHgwZjAwZjkzNCwgMHg5NjA5YTg4ZSwKKyAgICAweGUxMGU5ODE4LCAweDdmNmEwZGJiLCAweDA4NmQzZDJkLCAweDkxNjQ2Yzk3LCAweGU2NjM1YzAxLAorICAgIDB4NmI2YjUxZjQsIDB4MWM2YzYxNjIsIDB4ODU2NTMwZDgsIDB4ZjI2MjAwNGUsIDB4NmMwNjk1ZWQsCisgICAgMHgxYjAxYTU3YiwgMHg4MjA4ZjRjMSwgMHhmNTBmYzQ1NywgMHg2NWIwZDljNiwgMHgxMmI3ZTk1MCwKKyAgICAweDhiYmViOGVhLCAweGZjYjk4ODdjLCAweDYyZGQxZGRmLCAweDE1ZGEyZDQ5LCAweDhjZDM3Y2YzLAorICAgIDB4ZmJkNDRjNjUsIDB4NGRiMjYxNTgsIDB4M2FiNTUxY2UsIDB4YTNiYzAwNzQsIDB4ZDRiYjMwZTIsCisgICAgMHg0YWRmYTU0MSwgMHgzZGQ4OTVkNywgMHhhNGQxYzQ2ZCwgMHhkM2Q2ZjRmYiwgMHg0MzY5ZTk2YSwKKyAgICAweDM0NmVkOWZjLCAweGFkNjc4ODQ2LCAweGRhNjBiOGQwLCAweDQ0MDQyZDczLCAweDMzMDMxZGU1LAorICAgIDB4YWEwYTRjNWYsIDB4ZGQwZDdjYzksIDB4NTAwNTcxM2MsIDB4MjcwMjQxYWEsIDB4YmUwYjEwMTAsCisgICAgMHhjOTBjMjA4NiwgMHg1NzY4YjUyNSwgMHgyMDZmODViMywgMHhiOTY2ZDQwOSwgMHhjZTYxZTQ5ZiwKKyAgICAweDVlZGVmOTBlLCAweDI5ZDljOTk4LCAweGIwZDA5ODIyLCAweGM3ZDdhOGI0LCAweDU5YjMzZDE3LAorICAgIDB4MmViNDBkODEsIDB4YjdiZDVjM2IsIDB4YzBiYTZjYWQsIDB4ZWRiODgzMjAsIDB4OWFiZmIzYjYsCisgICAgMHgwM2I2ZTIwYywgMHg3NGIxZDI5YSwgMHhlYWQ1NDczOSwgMHg5ZGQyNzdhZiwgMHgwNGRiMjYxNSwKKyAgICAweDczZGMxNjgzLCAweGUzNjMwYjEyLCAweDk0NjQzYjg0LCAweDBkNmQ2YTNlLCAweDdhNmE1YWE4LAorICAgIDB4ZTQwZWNmMGIsIDB4OTMwOWZmOWQsIDB4MGEwMGFlMjcsIDB4N2QwNzllYjEsIDB4ZjAwZjkzNDQsCisgICAgMHg4NzA4YTNkMiwgMHgxZTAxZjI2OCwgMHg2OTA2YzJmZSwgMHhmNzYyNTc1ZCwgMHg4MDY1NjdjYiwKKyAgICAweDE5NmMzNjcxLCAweDZlNmIwNmU3LCAweGZlZDQxYjc2LCAweDg5ZDMyYmUwLCAweDEwZGE3YTVhLAorICAgIDB4NjdkZDRhY2MsIDB4ZjliOWRmNmYsIDB4OGViZWVmZjksIDB4MTdiN2JlNDMsIDB4NjBiMDhlZDUsCisgICAgMHhkNmQ2YTNlOCwgMHhhMWQxOTM3ZSwgMHgzOGQ4YzJjNCwgMHg0ZmRmZjI1MiwgMHhkMWJiNjdmMSwKKyAgICAweGE2YmM1NzY3LCAweDNmYjUwNmRkLCAweDQ4YjIzNjRiLCAweGQ4MGQyYmRhLCAweGFmMGExYjRjLAorICAgIDB4MzYwMzRhZjYsIDB4NDEwNDdhNjAsIDB4ZGY2MGVmYzMsIDB4YTg2N2RmNTUsIDB4MzE2ZThlZWYsCisgICAgMHg0NjY5YmU3OSwgMHhjYjYxYjM4YywgMHhiYzY2ODMxYSwgMHgyNTZmZDJhMCwgMHg1MjY4ZTIzNiwKKyAgICAweGNjMGM3Nzk1LCAweGJiMGI0NzAzLCAweDIyMDIxNmI5LCAweDU1MDUyNjJmLCAweGM1YmEzYmJlLAorICAgIDB4YjJiZDBiMjgsIDB4MmJiNDVhOTIsIDB4NWNiMzZhMDQsIDB4YzJkN2ZmYTcsIDB4YjVkMGNmMzEsCisgICAgMHgyY2Q5OWU4YiwgMHg1YmRlYWUxZCwgMHg5YjY0YzJiMCwgMHhlYzYzZjIyNiwgMHg3NTZhYTM5YywKKyAgICAweDAyNmQ5MzBhLCAweDljMDkwNmE5LCAweGViMGUzNjNmLCAweDcyMDc2Nzg1LCAweDA1MDA1NzEzLAorICAgIDB4OTViZjRhODIsIDB4ZTJiODdhMTQsIDB4N2JiMTJiYWUsIDB4MGNiNjFiMzgsIDB4OTJkMjhlOWIsCisgICAgMHhlNWQ1YmUwZCwgMHg3Y2RjZWZiNywgMHgwYmRiZGYyMSwgMHg4NmQzZDJkNCwgMHhmMWQ0ZTI0MiwKKyAgICAweDY4ZGRiM2Y4LCAweDFmZGE4MzZlLCAweDgxYmUxNmNkLCAweGY2YjkyNjViLCAweDZmYjA3N2UxLAorICAgIDB4MThiNzQ3NzcsIDB4ODgwODVhZTYsIDB4ZmYwZjZhNzAsIDB4NjYwNjNiY2EsIDB4MTEwMTBiNWMsCisgICAgMHg4ZjY1OWVmZiwgMHhmODYyYWU2OSwgMHg2MTZiZmZkMywgMHgxNjZjY2Y0NSwgMHhhMDBhZTI3OCwKKyAgICAweGQ3MGRkMmVlLCAweDRlMDQ4MzU0LCAweDM5MDNiM2MyLCAweGE3NjcyNjYxLCAweGQwNjAxNmY3LAorICAgIDB4NDk2OTQ3NGQsIDB4M2U2ZTc3ZGIsIDB4YWVkMTZhNGEsIDB4ZDlkNjVhZGMsIDB4NDBkZjBiNjYsCisgICAgMHgzN2Q4M2JmMCwgMHhhOWJjYWU1MywgMHhkZWJiOWVjNSwgMHg0N2IyY2Y3ZiwgMHgzMGI1ZmZlOSwKKyAgICAweGJkYmRmMjFjLCAweGNhYmFjMjhhLCAweDUzYjM5MzMwLCAweDI0YjRhM2E2LCAweGJhZDAzNjA1LAorICAgIDB4Y2RkNzA2OTMsIDB4NTRkZTU3MjksIDB4MjNkOTY3YmYsIDB4YjM2NjdhMmUsIDB4YzQ2MTRhYjgsCisgICAgMHg1ZDY4MWIwMiwgMHgyYTZmMmI5NCwgMHhiNDBiYmUzNywgMHhjMzBjOGVhMSwgMHg1YTA1ZGYxYiwKKyAgICAweDJkMDJlZjhkfX07CisKK2xvY2FsIGNvbnN0IHpfd29yZF90IEZBUiBjcmNfYnJhaWRfYmlnX3RhYmxlW11bMjU2XSA9IHsKKyAgIHsweDAwMDAwMDAwLCAweDk2MzAwNzc3LCAweDJjNjEwZWVlLCAweGJhNTEwOTk5LCAweDE5YzQ2ZDA3LAorICAgIDB4OGZmNDZhNzAsIDB4MzVhNTYzZTksIDB4YTM5NTY0OWUsIDB4MzI4OGRiMGUsIDB4YTRiOGRjNzksCisgICAgMHgxZWU5ZDVlMCwgMHg4OGQ5ZDI5NywgMHgyYjRjYjYwOSwgMHhiZDdjYjE3ZSwgMHgwNzJkYjhlNywKKyAgICAweDkxMWRiZjkwLCAweDY0MTBiNzFkLCAweGYyMjBiMDZhLCAweDQ4NzFiOWYzLCAweGRlNDFiZTg0LAorICAgIDB4N2RkNGRhMWEsIDB4ZWJlNGRkNmQsIDB4NTFiNWQ0ZjQsIDB4Yzc4NWQzODMsIDB4NTY5ODZjMTMsCisgICAgMHhjMGE4NmI2NCwgMHg3YWY5NjJmZCwgMHhlY2M5NjU4YSwgMHg0ZjVjMDExNCwgMHhkOTZjMDY2MywKKyAgICAweDYzM2QwZmZhLCAweGY1MGQwODhkLCAweGM4MjA2ZTNiLCAweDVlMTA2OTRjLCAweGU0NDE2MGQ1LAorICAgIDB4NzI3MTY3YTIsIDB4ZDFlNDAzM2MsIDB4NDdkNDA0NGIsIDB4ZmQ4NTBkZDIsIDB4NmJiNTBhYTUsCisgICAgMHhmYWE4YjUzNSwgMHg2Yzk4YjI0MiwgMHhkNmM5YmJkYiwgMHg0MGY5YmNhYywgMHhlMzZjZDgzMiwKKyAgICAweDc1NWNkZjQ1LCAweGNmMGRkNmRjLCAweDU5M2RkMWFiLCAweGFjMzBkOTI2LCAweDNhMDBkZTUxLAorICAgIDB4ODA1MWQ3YzgsIDB4MTY2MWQwYmYsIDB4YjVmNGI0MjEsIDB4MjNjNGIzNTYsIDB4OTk5NWJhY2YsCisgICAgMHgwZmE1YmRiOCwgMHg5ZWI4MDIyOCwgMHgwODg4MDU1ZiwgMHhiMmQ5MGNjNiwgMHgyNGU5MGJiMSwKKyAgICAweDg3N2M2ZjJmLCAweDExNGM2ODU4LCAweGFiMWQ2MWMxLCAweDNkMmQ2NmI2LCAweDkwNDFkYzc2LAorICAgIDB4MDY3MWRiMDEsIDB4YmMyMGQyOTgsIDB4MmExMGQ1ZWYsIDB4ODk4NWIxNzEsIDB4MWZiNWI2MDYsCisgICAgMHhhNWU0YmY5ZiwgMHgzM2Q0YjhlOCwgMHhhMmM5MDc3OCwgMHgzNGY5MDAwZiwgMHg4ZWE4MDk5NiwKKyAgICAweDE4OTgwZWUxLCAweGJiMGQ2YTdmLCAweDJkM2Q2ZDA4LCAweDk3NmM2NDkxLCAweDAxNWM2M2U2LAorICAgIDB4ZjQ1MTZiNmIsIDB4NjI2MTZjMWMsIDB4ZDgzMDY1ODUsIDB4NGUwMDYyZjIsIDB4ZWQ5NTA2NmMsCisgICAgMHg3YmE1MDExYiwgMHhjMWY0MDg4MiwgMHg1N2M0MGZmNSwgMHhjNmQ5YjA2NSwgMHg1MGU5YjcxMiwKKyAgICAweGVhYjhiZThiLCAweDdjODhiOWZjLCAweGRmMWRkZDYyLCAweDQ5MmRkYTE1LCAweGYzN2NkMzhjLAorICAgIDB4NjU0Y2Q0ZmIsIDB4NTg2MWIyNGQsIDB4Y2U1MWI1M2EsIDB4NzQwMGJjYTMsIDB4ZTIzMGJiZDQsCisgICAgMHg0MWE1ZGY0YSwgMHhkNzk1ZDgzZCwgMHg2ZGM0ZDFhNCwgMHhmYmY0ZDZkMywgMHg2YWU5Njk0MywKKyAgICAweGZjZDk2ZTM0LCAweDQ2ODg2N2FkLCAweGQwYjg2MGRhLCAweDczMmQwNDQ0LCAweGU1MWQwMzMzLAorICAgIDB4NWY0YzBhYWEsIDB4Yzk3YzBkZGQsIDB4M2M3MTA1NTAsIDB4YWE0MTAyMjcsIDB4MTAxMDBiYmUsCisgICAgMHg4NjIwMGNjOSwgMHgyNWI1Njg1NywgMHhiMzg1NmYyMCwgMHgwOWQ0NjZiOSwgMHg5ZmU0NjFjZSwKKyAgICAweDBlZjlkZTVlLCAweDk4YzlkOTI5LCAweDIyOThkMGIwLCAweGI0YThkN2M3LCAweDE3M2RiMzU5LAorICAgIDB4ODEwZGI0MmUsIDB4M2I1Y2JkYjcsIDB4YWQ2Y2JhYzAsIDB4MjA4M2I4ZWQsIDB4YjZiM2JmOWEsCisgICAgMHgwY2UyYjYwMywgMHg5YWQyYjE3NCwgMHgzOTQ3ZDVlYSwgMHhhZjc3ZDI5ZCwgMHgxNTI2ZGIwNCwKKyAgICAweDgzMTZkYzczLCAweDEyMGI2M2UzLCAweDg0M2I2NDk0LCAweDNlNmE2ZDBkLCAweGE4NWE2YTdhLAorICAgIDB4MGJjZjBlZTQsIDB4OWRmZjA5OTMsIDB4MjdhZTAwMGEsIDB4YjE5ZTA3N2QsIDB4NDQ5MzBmZjAsCisgICAgMHhkMmEzMDg4NywgMHg2OGYyMDExZSwgMHhmZWMyMDY2OSwgMHg1ZDU3NjJmNywgMHhjYjY3NjU4MCwKKyAgICAweDcxMzY2YzE5LCAweGU3MDY2YjZlLCAweDc2MWJkNGZlLCAweGUwMmJkMzg5LCAweDVhN2FkYTEwLAorICAgIDB4Y2M0YWRkNjcsIDB4NmZkZmI5ZjksIDB4ZjllZmJlOGUsIDB4NDNiZWI3MTcsIDB4ZDU4ZWIwNjAsCisgICAgMHhlOGEzZDZkNiwgMHg3ZTkzZDFhMSwgMHhjNGMyZDgzOCwgMHg1MmYyZGY0ZiwgMHhmMTY3YmJkMSwKKyAgICAweDY3NTdiY2E2LCAweGRkMDZiNTNmLCAweDRiMzZiMjQ4LCAweGRhMmIwZGQ4LCAweDRjMWIwYWFmLAorICAgIDB4ZjY0YTAzMzYsIDB4NjA3YTA0NDEsIDB4YzNlZjYwZGYsIDB4NTVkZjY3YTgsIDB4ZWY4ZTZlMzEsCisgICAgMHg3OWJlNjk0NiwgMHg4Y2IzNjFjYiwgMHgxYTgzNjZiYywgMHhhMGQyNmYyNSwgMHgzNmUyNjg1MiwKKyAgICAweDk1NzcwY2NjLCAweDAzNDcwYmJiLCAweGI5MTYwMjIyLCAweDJmMjYwNTU1LCAweGJlM2JiYWM1LAorICAgIDB4MjgwYmJkYjIsIDB4OTI1YWI0MmIsIDB4MDQ2YWIzNWMsIDB4YTdmZmQ3YzIsIDB4MzFjZmQwYjUsCisgICAgMHg4YjllZDkyYywgMHgxZGFlZGU1YiwgMHhiMGMyNjQ5YiwgMHgyNmYyNjNlYywgMHg5Y2EzNmE3NSwKKyAgICAweDBhOTM2ZDAyLCAweGE5MDYwOTljLCAweDNmMzYwZWViLCAweDg1NjcwNzcyLCAweDEzNTcwMDA1LAorICAgIDB4ODI0YWJmOTUsIDB4MTQ3YWI4ZTIsIDB4YWUyYmIxN2IsIDB4MzgxYmI2MGMsIDB4OWI4ZWQyOTIsCisgICAgMHgwZGJlZDVlNSwgMHhiN2VmZGM3YywgMHgyMWRmZGIwYiwgMHhkNGQyZDM4NiwgMHg0MmUyZDRmMSwKKyAgICAweGY4YjNkZDY4LCAweDZlODNkYTFmLCAweGNkMTZiZTgxLCAweDViMjZiOWY2LCAweGUxNzdiMDZmLAorICAgIDB4Nzc0N2I3MTgsIDB4ZTY1YTA4ODgsIDB4NzA2YTBmZmYsIDB4Y2EzYjA2NjYsIDB4NWMwYjAxMTEsCisgICAgMHhmZjllNjU4ZiwgMHg2OWFlNjJmOCwgMHhkM2ZmNmI2MSwgMHg0NWNmNmMxNiwgMHg3OGUyMGFhMCwKKyAgICAweGVlZDIwZGQ3LCAweDU0ODMwNDRlLCAweGMyYjMwMzM5LCAweDYxMjY2N2E3LCAweGY3MTY2MGQwLAorICAgIDB4NGQ0NzY5NDksIDB4ZGI3NzZlM2UsIDB4NGE2YWQxYWUsIDB4ZGM1YWQ2ZDksIDB4NjYwYmRmNDAsCisgICAgMHhmMDNiZDgzNywgMHg1M2FlYmNhOSwgMHhjNTllYmJkZSwgMHg3ZmNmYjI0NywgMHhlOWZmYjUzMCwKKyAgICAweDFjZjJiZGJkLCAweDhhYzJiYWNhLCAweDMwOTNiMzUzLCAweGE2YTNiNDI0LCAweDA1MzZkMGJhLAorICAgIDB4OTMwNmQ3Y2QsIDB4Mjk1N2RlNTQsIDB4YmY2N2Q5MjMsIDB4MmU3YTY2YjMsIDB4Yjg0YTYxYzQsCisgICAgMHgwMjFiNjg1ZCwgMHg5NDJiNmYyYSwgMHgzN2JlMGJiNCwgMHhhMThlMGNjMywgMHgxYmRmMDU1YSwKKyAgICAweDhkZWYwMjJkfSwKKyAgIHsweDAwMDAwMDAwLCAweDQxMzExYjE5LCAweDgyNjIzNjMyLCAweGMzNTMyZDJiLCAweDA0YzU2YzY0LAorICAgIDB4NDVmNDc3N2QsIDB4ODZhNzVhNTYsIDB4Yzc5NjQxNGYsIDB4MDg4YWQ5YzgsIDB4NDliYmMyZDEsCisgICAgMHg4YWU4ZWZmYSwgMHhjYmQ5ZjRlMywgMHgwYzRmYjVhYywgMHg0ZDdlYWViNSwgMHg4ZTJkODM5ZSwKKyAgICAweGNmMWM5ODg3LCAweDUxMTJjMjRhLCAweDEwMjNkOTUzLCAweGQzNzBmNDc4LCAweDkyNDFlZjYxLAorICAgIDB4NTVkN2FlMmUsIDB4MTRlNmI1MzcsIDB4ZDdiNTk4MWMsIDB4OTY4NDgzMDUsIDB4NTk5ODFiODIsCisgICAgMHgxOGE5MDA5YiwgMHhkYmZhMmRiMCwgMHg5YWNiMzZhOSwgMHg1ZDVkNzdlNiwgMHgxYzZjNmNmZiwKKyAgICAweGRmM2Y0MWQ0LCAweDllMGU1YWNkLCAweGEyMjQ4NDk1LCAweGUzMTU5ZjhjLCAweDIwNDZiMmE3LAorICAgIDB4NjE3N2E5YmUsIDB4YTZlMWU4ZjEsIDB4ZTdkMGYzZTgsIDB4MjQ4M2RlYzMsIDB4NjViMmM1ZGEsCisgICAgMHhhYWFlNWQ1ZCwgMHhlYjlmNDY0NCwgMHgyOGNjNmI2ZiwgMHg2OWZkNzA3NiwgMHhhZTZiMzEzOSwKKyAgICAweGVmNWEyYTIwLCAweDJjMDkwNzBiLCAweDZkMzgxYzEyLCAweGYzMzY0NmRmLCAweGIyMDc1ZGM2LAorICAgIDB4NzE1NDcwZWQsIDB4MzA2NTZiZjQsIDB4ZjdmMzJhYmIsIDB4YjZjMjMxYTIsIDB4NzU5MTFjODksCisgICAgMHgzNGEwMDc5MCwgMHhmYmJjOWYxNywgMHhiYThkODQwZSwgMHg3OWRlYTkyNSwgMHgzOGVmYjIzYywKKyAgICAweGZmNzlmMzczLCAweGJlNDhlODZhLCAweDdkMWJjNTQxLCAweDNjMmFkZTU4LCAweDA1NGY3OWYwLAorICAgIDB4NDQ3ZTYyZTksIDB4ODcyZDRmYzIsIDB4YzYxYzU0ZGIsIDB4MDE4YTE1OTQsIDB4NDBiYjBlOGQsCisgICAgMHg4M2U4MjNhNiwgMHhjMmQ5MzhiZiwgMHgwZGM1YTAzOCwgMHg0Y2Y0YmIyMSwgMHg4ZmE3OTYwYSwKKyAgICAweGNlOTY4ZDEzLCAweDA5MDBjYzVjLCAweDQ4MzFkNzQ1LCAweDhiNjJmYTZlLCAweGNhNTNlMTc3LAorICAgIDB4NTQ1ZGJiYmEsIDB4MTU2Y2EwYTMsIDB4ZDYzZjhkODgsIDB4OTcwZTk2OTEsIDB4NTA5OGQ3ZGUsCisgICAgMHgxMWE5Y2NjNywgMHhkMmZhZTFlYywgMHg5M2NiZmFmNSwgMHg1Y2Q3NjI3MiwgMHgxZGU2Nzk2YiwKKyAgICAweGRlYjU1NDQwLCAweDlmODQ0ZjU5LCAweDU4MTIwZTE2LCAweDE5MjMxNTBmLCAweGRhNzAzODI0LAorICAgIDB4OWI0MTIzM2QsIDB4YTc2YmZkNjUsIDB4ZTY1YWU2N2MsIDB4MjUwOWNiNTcsIDB4NjQzOGQwNGUsCisgICAgMHhhM2FlOTEwMSwgMHhlMjlmOGExOCwgMHgyMWNjYTczMywgMHg2MGZkYmMyYSwgMHhhZmUxMjRhZCwKKyAgICAweGVlZDAzZmI0LCAweDJkODMxMjlmLCAweDZjYjIwOTg2LCAweGFiMjQ0OGM5LCAweGVhMTU1M2QwLAorICAgIDB4Mjk0NjdlZmIsIDB4Njg3NzY1ZTIsIDB4ZjY3OTNmMmYsIDB4Yjc0ODI0MzYsIDB4NzQxYjA5MWQsCisgICAgMHgzNTJhMTIwNCwgMHhmMmJjNTM0YiwgMHhiMzhkNDg1MiwgMHg3MGRlNjU3OSwgMHgzMWVmN2U2MCwKKyAgICAweGZlZjNlNmU3LCAweGJmYzJmZGZlLCAweDdjOTFkMGQ1LCAweDNkYTBjYmNjLCAweGZhMzY4YTgzLAorICAgIDB4YmIwNzkxOWEsIDB4Nzg1NGJjYjEsIDB4Mzk2NWE3YTgsIDB4NGI5ODgzM2IsIDB4MGFhOTk4MjIsCisgICAgMHhjOWZhYjUwOSwgMHg4OGNiYWUxMCwgMHg0ZjVkZWY1ZiwgMHgwZTZjZjQ0NiwgMHhjZDNmZDk2ZCwKKyAgICAweDhjMGVjMjc0LCAweDQzMTI1YWYzLCAweDAyMjM0MWVhLCAweGMxNzA2Y2MxLCAweDgwNDE3N2Q4LAorICAgIDB4NDdkNzM2OTcsIDB4MDZlNjJkOGUsIDB4YzViNTAwYTUsIDB4ODQ4NDFiYmMsIDB4MWE4YTQxNzEsCisgICAgMHg1YmJiNWE2OCwgMHg5OGU4Nzc0MywgMHhkOWQ5NmM1YSwgMHgxZTRmMmQxNSwgMHg1ZjdlMzYwYywKKyAgICAweDljMmQxYjI3LCAweGRkMWMwMDNlLCAweDEyMDA5OGI5LCAweDUzMzE4M2EwLCAweDkwNjJhZThiLAorICAgIDB4ZDE1M2I1OTIsIDB4MTZjNWY0ZGQsIDB4NTdmNGVmYzQsIDB4OTRhN2MyZWYsIDB4ZDU5NmQ5ZjYsCisgICAgMHhlOWJjMDdhZSwgMHhhODhkMWNiNywgMHg2YmRlMzE5YywgMHgyYWVmMmE4NSwgMHhlZDc5NmJjYSwKKyAgICAweGFjNDg3MGQzLCAweDZmMWI1ZGY4LCAweDJlMmE0NmUxLCAweGUxMzZkZTY2LCAweGEwMDdjNTdmLAorICAgIDB4NjM1NGU4NTQsIDB4MjI2NWYzNGQsIDB4ZTVmM2IyMDIsIDB4YTRjMmE5MWIsIDB4Njc5MTg0MzAsCisgICAgMHgyNmEwOWYyOSwgMHhiOGFlYzVlNCwgMHhmOTlmZGVmZCwgMHgzYWNjZjNkNiwgMHg3YmZkZThjZiwKKyAgICAweGJjNmJhOTgwLCAweGZkNWFiMjk5LCAweDNlMDk5ZmIyLCAweDdmMzg4NGFiLCAweGIwMjQxYzJjLAorICAgIDB4ZjExNTA3MzUsIDB4MzI0NjJhMWUsIDB4NzM3NzMxMDcsIDB4YjRlMTcwNDgsIDB4ZjVkMDZiNTEsCisgICAgMHgzNjgzNDY3YSwgMHg3N2IyNWQ2MywgMHg0ZWQ3ZmFjYiwgMHgwZmU2ZTFkMiwgMHhjY2I1Y2NmOSwKKyAgICAweDhkODRkN2UwLCAweDRhMTI5NmFmLCAweDBiMjM4ZGI2LCAweGM4NzBhMDlkLCAweDg5NDFiYjg0LAorICAgIDB4NDY1ZDIzMDMsIDB4MDc2YzM4MWEsIDB4YzQzZjE1MzEsIDB4ODUwZTBlMjgsIDB4NDI5ODRmNjcsCisgICAgMHgwM2E5NTQ3ZSwgMHhjMGZhNzk1NSwgMHg4MWNiNjI0YywgMHgxZmM1Mzg4MSwgMHg1ZWY0MjM5OCwKKyAgICAweDlkYTcwZWIzLCAweGRjOTYxNWFhLCAweDFiMDA1NGU1LCAweDVhMzE0ZmZjLCAweDk5NjI2MmQ3LAorICAgIDB4ZDg1Mzc5Y2UsIDB4MTc0ZmUxNDksIDB4NTY3ZWZhNTAsIDB4OTUyZGQ3N2IsIDB4ZDQxY2NjNjIsCisgICAgMHgxMzhhOGQyZCwgMHg1MmJiOTYzNCwgMHg5MWU4YmIxZiwgMHhkMGQ5YTAwNiwgMHhlY2YzN2U1ZSwKKyAgICAweGFkYzI2NTQ3LCAweDZlOTE0ODZjLCAweDJmYTA1Mzc1LCAweGU4MzYxMjNhLCAweGE5MDcwOTIzLAorICAgIDB4NmE1NDI0MDgsIDB4MmI2NTNmMTEsIDB4ZTQ3OWE3OTYsIDB4YTU0OGJjOGYsIDB4NjYxYjkxYTQsCisgICAgMHgyNzJhOGFiZCwgMHhlMGJjY2JmMiwgMHhhMThkZDBlYiwgMHg2MmRlZmRjMCwgMHgyM2VmZTZkOSwKKyAgICAweGJkZTFiYzE0LCAweGZjZDBhNzBkLCAweDNmODM4YTI2LCAweDdlYjI5MTNmLCAweGI5MjRkMDcwLAorICAgIDB4ZjgxNWNiNjksIDB4M2I0NmU2NDIsIDB4N2E3N2ZkNWIsIDB4YjU2YjY1ZGMsIDB4ZjQ1YTdlYzUsCisgICAgMHgzNzA5NTNlZSwgMHg3NjM4NDhmNywgMHhiMWFlMDliOCwgMHhmMDlmMTJhMSwgMHgzM2NjM2Y4YSwKKyAgICAweDcyZmQyNDkzfSwKKyAgIHsweDAwMDAwMDAwLCAweDM3NmFjMjAxLCAweDZlZDQ4NDAzLCAweDU5YmU0NjAyLCAweGRjYTgwOTA3LAorICAgIDB4ZWJjMmNiMDYsIDB4YjI3YzhkMDQsIDB4ODUxNjRmMDUsIDB4Yjg1MTEzMGUsIDB4OGYzYmQxMGYsCisgICAgMHhkNjg1OTcwZCwgMHhlMWVmNTUwYywgMHg2NGY5MWEwOSwgMHg1MzkzZDgwOCwgMHgwYTJkOWUwYSwKKyAgICAweDNkNDc1YzBiLCAweDcwYTMyNjFjLCAweDQ3YzllNDFkLCAweDFlNzdhMjFmLCAweDI5MWQ2MDFlLAorICAgIDB4YWMwYjJmMWIsIDB4OWI2MWVkMWEsIDB4YzJkZmFiMTgsIDB4ZjViNTY5MTksIDB4YzhmMjM1MTIsCisgICAgMHhmZjk4ZjcxMywgMHhhNjI2YjExMSwgMHg5MTRjNzMxMCwgMHgxNDVhM2MxNSwgMHgyMzMwZmUxNCwKKyAgICAweDdhOGViODE2LCAweDRkZTQ3YTE3LCAweGUwNDY0ZDM4LCAweGQ3MmM4ZjM5LCAweDhlOTJjOTNiLAorICAgIDB4YjlmODBiM2EsIDB4M2NlZTQ0M2YsIDB4MGI4NDg2M2UsIDB4NTIzYWMwM2MsIDB4NjU1MDAyM2QsCisgICAgMHg1ODE3NWUzNiwgMHg2ZjdkOWMzNywgMHgzNmMzZGEzNSwgMHgwMWE5MTgzNCwgMHg4NGJmNTczMSwKKyAgICAweGIzZDU5NTMwLCAweGVhNmJkMzMyLCAweGRkMDExMTMzLCAweDkwZTU2YjI0LCAweGE3OGZhOTI1LAorICAgIDB4ZmUzMWVmMjcsIDB4Yzk1YjJkMjYsIDB4NGM0ZDYyMjMsIDB4N2IyN2EwMjIsIDB4MjI5OWU2MjAsCisgICAgMHgxNWYzMjQyMSwgMHgyOGI0NzgyYSwgMHgxZmRlYmEyYiwgMHg0NjYwZmMyOSwgMHg3MTBhM2UyOCwKKyAgICAweGY0MWM3MTJkLCAweGMzNzZiMzJjLCAweDlhYzhmNTJlLCAweGFkYTIzNzJmLCAweGMwOGQ5YTcwLAorICAgIDB4ZjdlNzU4NzEsIDB4YWU1OTFlNzMsIDB4OTkzM2RjNzIsIDB4MWMyNTkzNzcsIDB4MmI0ZjUxNzYsCisgICAgMHg3MmYxMTc3NCwgMHg0NTliZDU3NSwgMHg3OGRjODk3ZSwgMHg0ZmI2NGI3ZiwgMHgxNjA4MGQ3ZCwKKyAgICAweDIxNjJjZjdjLCAweGE0NzQ4MDc5LCAweDkzMWU0Mjc4LCAweGNhYTAwNDdhLCAweGZkY2FjNjdiLAorICAgIDB4YjAyZWJjNmMsIDB4ODc0NDdlNmQsIDB4ZGVmYTM4NmYsIDB4ZTk5MGZhNmUsIDB4NmM4NmI1NmIsCisgICAgMHg1YmVjNzc2YSwgMHgwMjUyMzE2OCwgMHgzNTM4ZjM2OSwgMHgwODdmYWY2MiwgMHgzZjE1NmQ2MywKKyAgICAweDY2YWIyYjYxLCAweDUxYzFlOTYwLCAweGQ0ZDdhNjY1LCAweGUzYmQ2NDY0LCAweGJhMDMyMjY2LAorICAgIDB4OGQ2OWUwNjcsIDB4MjBjYmQ3NDgsIDB4MTdhMTE1NDksIDB4NGUxZjUzNGIsIDB4Nzk3NTkxNGEsCisgICAgMHhmYzYzZGU0ZiwgMHhjYjA5MWM0ZSwgMHg5MmI3NWE0YywgMHhhNWRkOTg0ZCwgMHg5ODlhYzQ0NiwKKyAgICAweGFmZjAwNjQ3LCAweGY2NGU0MDQ1LCAweGMxMjQ4MjQ0LCAweDQ0MzJjZDQxLCAweDczNTgwZjQwLAorICAgIDB4MmFlNjQ5NDIsIDB4MWQ4YzhiNDMsIDB4NTA2OGYxNTQsIDB4NjcwMjMzNTUsIDB4M2ViYzc1NTcsCisgICAgMHgwOWQ2Yjc1NiwgMHg4Y2MwZjg1MywgMHhiYmFhM2E1MiwgMHhlMjE0N2M1MCwgMHhkNTdlYmU1MSwKKyAgICAweGU4MzllMjVhLCAweGRmNTMyMDViLCAweDg2ZWQ2NjU5LCAweGIxODdhNDU4LCAweDM0OTFlYjVkLAorICAgIDB4MDNmYjI5NWMsIDB4NWE0NTZmNWUsIDB4NmQyZmFkNWYsIDB4ODAxYjM1ZTEsIDB4Yjc3MWY3ZTAsCisgICAgMHhlZWNmYjFlMiwgMHhkOWE1NzNlMywgMHg1Y2IzM2NlNiwgMHg2YmQ5ZmVlNywgMHgzMjY3YjhlNSwKKyAgICAweDA1MGQ3YWU0LCAweDM4NGEyNmVmLCAweDBmMjBlNGVlLCAweDU2OWVhMmVjLCAweDYxZjQ2MGVkLAorICAgIDB4ZTRlMjJmZTgsIDB4ZDM4OGVkZTksIDB4OGEzNmFiZWIsIDB4YmQ1YzY5ZWEsIDB4ZjBiODEzZmQsCisgICAgMHhjN2QyZDFmYywgMHg5ZTZjOTdmZSwgMHhhOTA2NTVmZiwgMHgyYzEwMWFmYSwgMHgxYjdhZDhmYiwKKyAgICAweDQyYzQ5ZWY5LCAweDc1YWU1Y2Y4LCAweDQ4ZTkwMGYzLCAweDdmODNjMmYyLCAweDI2M2Q4NGYwLAorICAgIDB4MTE1NzQ2ZjEsIDB4OTQ0MTA5ZjQsIDB4YTMyYmNiZjUsIDB4ZmE5NThkZjcsIDB4Y2RmZjRmZjYsCisgICAgMHg2MDVkNzhkOSwgMHg1NzM3YmFkOCwgMHgwZTg5ZmNkYSwgMHgzOWUzM2VkYiwgMHhiY2Y1NzFkZSwKKyAgICAweDhiOWZiM2RmLCAweGQyMjFmNWRkLCAweGU1NGIzN2RjLCAweGQ4MGM2YmQ3LCAweGVmNjZhOWQ2LAorICAgIDB4YjZkOGVmZDQsIDB4ODFiMjJkZDUsIDB4MDRhNDYyZDAsIDB4MzNjZWEwZDEsIDB4NmE3MGU2ZDMsCisgICAgMHg1ZDFhMjRkMiwgMHgxMGZlNWVjNSwgMHgyNzk0OWNjNCwgMHg3ZTJhZGFjNiwgMHg0OTQwMThjNywKKyAgICAweGNjNTY1N2MyLCAweGZiM2M5NWMzLCAweGEyODJkM2MxLCAweDk1ZTgxMWMwLCAweGE4YWY0ZGNiLAorICAgIDB4OWZjNThmY2EsIDB4YzY3YmM5YzgsIDB4ZjExMTBiYzksIDB4NzQwNzQ0Y2MsIDB4NDM2ZDg2Y2QsCisgICAgMHgxYWQzYzBjZiwgMHgyZGI5MDJjZSwgMHg0MDk2YWY5MSwgMHg3N2ZjNmQ5MCwgMHgyZTQyMmI5MiwKKyAgICAweDE5MjhlOTkzLCAweDljM2VhNjk2LCAweGFiNTQ2NDk3LCAweGYyZWEyMjk1LCAweGM1ODBlMDk0LAorICAgIDB4ZjhjN2JjOWYsIDB4Y2ZhZDdlOWUsIDB4OTYxMzM4OWMsIDB4YTE3OWZhOWQsIDB4MjQ2ZmI1OTgsCisgICAgMHgxMzA1Nzc5OSwgMHg0YWJiMzE5YiwgMHg3ZGQxZjM5YSwgMHgzMDM1ODk4ZCwgMHgwNzVmNGI4YywKKyAgICAweDVlZTEwZDhlLCAweDY5OGJjZjhmLCAweGVjOWQ4MDhhLCAweGRiZjc0MjhiLCAweDgyNDkwNDg5LAorICAgIDB4YjUyM2M2ODgsIDB4ODg2NDlhODMsIDB4YmYwZTU4ODIsIDB4ZTZiMDFlODAsIDB4ZDFkYWRjODEsCisgICAgMHg1NGNjOTM4NCwgMHg2M2E2NTE4NSwgMHgzYTE4MTc4NywgMHgwZDcyZDU4NiwgMHhhMGQwZTJhOSwKKyAgICAweDk3YmEyMGE4LCAweGNlMDQ2NmFhLCAweGY5NmVhNGFiLCAweDdjNzhlYmFlLCAweDRiMTIyOWFmLAorICAgIDB4MTJhYzZmYWQsIDB4MjVjNmFkYWMsIDB4MTg4MWYxYTcsIDB4MmZlYjMzYTYsIDB4NzY1NTc1YTQsCisgICAgMHg0MTNmYjdhNSwgMHhjNDI5ZjhhMCwgMHhmMzQzM2FhMSwgMHhhYWZkN2NhMywgMHg5ZDk3YmVhMiwKKyAgICAweGQwNzNjNGI1LCAweGU3MTkwNmI0LCAweGJlYTc0MGI2LCAweDg5Y2Q4MmI3LCAweDBjZGJjZGIyLAorICAgIDB4M2JiMTBmYjMsIDB4NjIwZjQ5YjEsIDB4NTU2NThiYjAsIDB4NjgyMmQ3YmIsIDB4NWY0ODE1YmEsCisgICAgMHgwNmY2NTNiOCwgMHgzMTljOTFiOSwgMHhiNDhhZGViYywgMHg4M2UwMWNiZCwgMHhkYTVlNWFiZiwKKyAgICAweGVkMzQ5OGJlfSwKKyAgIHsweDAwMDAwMDAwLCAweDY1NjdiY2I4LCAweDhiYzgwOWFhLCAweGVlYWZiNTEyLCAweDU3OTc2MjhmLAorICAgIDB4MzJmMGRlMzcsIDB4ZGM1ZjZiMjUsIDB4YjkzOGQ3OWQsIDB4ZWYyOGI0YzUsIDB4OGE0ZjA4N2QsCisgICAgMHg2NGUwYmQ2ZiwgMHgwMTg3MDFkNywgMHhiOGJmZDY0YSwgMHhkZGQ4NmFmMiwgMHgzMzc3ZGZlMCwKKyAgICAweDU2MTA2MzU4LCAweDlmNTcxOTUwLCAweGZhMzBhNWU4LCAweDE0OWYxMGZhLCAweDcxZjhhYzQyLAorICAgIDB4YzhjMDdiZGYsIDB4YWRhN2M3NjcsIDB4NDMwODcyNzUsIDB4MjY2ZmNlY2QsIDB4NzA3ZmFkOTUsCisgICAgMHgxNTE4MTEyZCwgMHhmYmI3YTQzZiwgMHg5ZWQwMTg4NywgMHgyN2U4Y2YxYSwgMHg0MjhmNzNhMiwKKyAgICAweGFjMjBjNmIwLCAweGM5NDc3YTA4LCAweDNlYWYzMmEwLCAweDViYzg4ZTE4LCAweGI1NjczYjBhLAorICAgIDB4ZDAwMDg3YjIsIDB4NjkzODUwMmYsIDB4MGM1ZmVjOTcsIDB4ZTJmMDU5ODUsIDB4ODc5N2U1M2QsCisgICAgMHhkMTg3ODY2NSwgMHhiNGUwM2FkZCwgMHg1YTRmOGZjZiwgMHgzZjI4MzM3NywgMHg4NjEwZTRlYSwKKyAgICAweGUzNzc1ODUyLCAweDBkZDhlZDQwLCAweDY4YmY1MWY4LCAweGExZjgyYmYwLCAweGM0OWY5NzQ4LAorICAgIDB4MmEzMDIyNWEsIDB4NGY1NzllZTIsIDB4ZjY2ZjQ5N2YsIDB4OTMwOGY1YzcsIDB4N2RhNzQwZDUsCisgICAgMHgxOGMwZmM2ZCwgMHg0ZWQwOWYzNSwgMHgyYmI3MjM4ZCwgMHhjNTE4OTY5ZiwgMHhhMDdmMmEyNywKKyAgICAweDE5NDdmZGJhLCAweDdjMjA0MTAyLCAweDkyOGZmNDEwLCAweGY3ZTg0OGE4LCAweDNkNTgxNDliLAorICAgIDB4NTgzZmE4MjMsIDB4YjY5MDFkMzEsIDB4ZDNmN2ExODksIDB4NmFjZjc2MTQsIDB4MGZhOGNhYWMsCisgICAgMHhlMTA3N2ZiZSwgMHg4NDYwYzMwNiwgMHhkMjcwYTA1ZSwgMHhiNzE3MWNlNiwgMHg1OWI4YTlmNCwKKyAgICAweDNjZGYxNTRjLCAweDg1ZTdjMmQxLCAweGUwODA3ZTY5LCAweDBlMmZjYjdiLCAweDZiNDg3N2MzLAorICAgIDB4YTIwZjBkY2IsIDB4Yzc2OGIxNzMsIDB4MjljNzA0NjEsIDB4NGNhMGI4ZDksIDB4ZjU5ODZmNDQsCisgICAgMHg5MGZmZDNmYywgMHg3ZTUwNjZlZSwgMHgxYjM3ZGE1NiwgMHg0ZDI3YjkwZSwgMHgyODQwMDViNiwKKyAgICAweGM2ZWZiMGE0LCAweGEzODgwYzFjLCAweDFhYjBkYjgxLCAweDdmZDc2NzM5LCAweDkxNzhkMjJiLAorICAgIDB4ZjQxZjZlOTMsIDB4MDNmNzI2M2IsIDB4NjY5MDlhODMsIDB4ODgzZjJmOTEsIDB4ZWQ1ODkzMjksCisgICAgMHg1NDYwNDRiNCwgMHgzMTA3ZjgwYywgMHhkZmE4NGQxZSwgMHhiYWNmZjFhNiwgMHhlY2RmOTJmZSwKKyAgICAweDg5YjgyZTQ2LCAweDY3MTc5YjU0LCAweDAyNzAyN2VjLCAweGJiNDhmMDcxLCAweGRlMmY0Y2M5LAorICAgIDB4MzA4MGY5ZGIsIDB4NTVlNzQ1NjMsIDB4OWNhMDNmNmIsIDB4ZjljNzgzZDMsIDB4MTc2ODM2YzEsCisgICAgMHg3MjBmOGE3OSwgMHhjYjM3NWRlNCwgMHhhZTUwZTE1YywgMHg0MGZmNTQ0ZSwgMHgyNTk4ZThmNiwKKyAgICAweDczODg4YmFlLCAweDE2ZWYzNzE2LCAweGY4NDA4MjA0LCAweDlkMjczZWJjLCAweDI0MWZlOTIxLAorICAgIDB4NDE3ODU1OTksIDB4YWZkN2UwOGIsIDB4Y2FiMDVjMzMsIDB4M2JiNjU5ZWQsIDB4NWVkMWU1NTUsCisgICAgMHhiMDdlNTA0NywgMHhkNTE5ZWNmZiwgMHg2YzIxM2I2MiwgMHgwOTQ2ODdkYSwgMHhlN2U5MzJjOCwKKyAgICAweDgyOGU4ZTcwLCAweGQ0OWVlZDI4LCAweGIxZjk1MTkwLCAweDVmNTZlNDgyLCAweDNhMzE1ODNhLAorICAgIDB4ODMwOThmYTcsIDB4ZTY2ZTMzMWYsIDB4MDhjMTg2MGQsIDB4NmRhNjNhYjUsIDB4YTRlMTQwYmQsCisgICAgMHhjMTg2ZmMwNSwgMHgyZjI5NDkxNywgMHg0YTRlZjVhZiwgMHhmMzc2MjIzMiwgMHg5NjExOWU4YSwKKyAgICAweDc4YmUyYjk4LCAweDFkZDk5NzIwLCAweDRiYzlmNDc4LCAweDJlYWU0OGMwLCAweGMwMDFmZGQyLAorICAgIDB4YTU2NjQxNmEsIDB4MWM1ZTk2ZjcsIDB4NzkzOTJhNGYsIDB4OTc5NjlmNWQsIDB4ZjJmMTIzZTUsCisgICAgMHgwNTE5NmI0ZCwgMHg2MDdlZDdmNSwgMHg4ZWQxNjJlNywgMHhlYmI2ZGU1ZiwgMHg1MjhlMDljMiwKKyAgICAweDM3ZTliNTdhLCAweGQ5NDYwMDY4LCAweGJjMjFiY2QwLCAweGVhMzFkZjg4LCAweDhmNTY2MzMwLAorICAgIDB4NjFmOWQ2MjIsIDB4MDQ5ZTZhOWEsIDB4YmRhNmJkMDcsIDB4ZDhjMTAxYmYsIDB4MzY2ZWI0YWQsCisgICAgMHg1MzA5MDgxNSwgMHg5YTRlNzIxZCwgMHhmZjI5Y2VhNSwgMHgxMTg2N2JiNywgMHg3NGUxYzcwZiwKKyAgICAweGNkZDkxMDkyLCAweGE4YmVhYzJhLCAweDQ2MTExOTM4LCAweDIzNzZhNTgwLCAweDc1NjZjNmQ4LAorICAgIDB4MTAwMTdhNjAsIDB4ZmVhZWNmNzIsIDB4OWJjOTczY2EsIDB4MjJmMWE0NTcsIDB4NDc5NjE4ZWYsCisgICAgMHhhOTM5YWRmZCwgMHhjYzVlMTE0NSwgMHgwNmVlNGQ3NiwgMHg2Mzg5ZjFjZSwgMHg4ZDI2NDRkYywKKyAgICAweGU4NDFmODY0LCAweDUxNzkyZmY5LCAweDM0MWU5MzQxLCAweGRhYjEyNjUzLCAweGJmZDY5YWViLAorICAgIDB4ZTljNmY5YjMsIDB4OGNhMTQ1MGIsIDB4NjIwZWYwMTksIDB4MDc2OTRjYTEsIDB4YmU1MTliM2MsCisgICAgMHhkYjM2Mjc4NCwgMHgzNTk5OTI5NiwgMHg1MGZlMmUyZSwgMHg5OWI5NTQyNiwgMHhmY2RlZTg5ZSwKKyAgICAweDEyNzE1ZDhjLCAweDc3MTZlMTM0LCAweGNlMmUzNmE5LCAweGFiNDk4YTExLCAweDQ1ZTYzZjAzLAorICAgIDB4MjA4MTgzYmIsIDB4NzY5MWUwZTMsIDB4MTNmNjVjNWIsIDB4ZmQ1OWU5NDksIDB4OTgzZTU1ZjEsCisgICAgMHgyMTA2ODI2YywgMHg0NDYxM2VkNCwgMHhhYWNlOGJjNiwgMHhjZmE5Mzc3ZSwgMHgzODQxN2ZkNiwKKyAgICAweDVkMjZjMzZlLCAweGIzODk3NjdjLCAweGQ2ZWVjYWM0LCAweDZmZDYxZDU5LCAweDBhYjFhMWUxLAorICAgIDB4ZTQxZTE0ZjMsIDB4ODE3OWE4NGIsIDB4ZDc2OWNiMTMsIDB4YjIwZTc3YWIsIDB4NWNhMWMyYjksCisgICAgMHgzOWM2N2UwMSwgMHg4MGZlYTk5YywgMHhlNTk5MTUyNCwgMHgwYjM2YTAzNiwgMHg2ZTUxMWM4ZSwKKyAgICAweGE3MTY2Njg2LCAweGMyNzFkYTNlLCAweDJjZGU2ZjJjLCAweDQ5YjlkMzk0LCAweGYwODEwNDA5LAorICAgIDB4OTVlNmI4YjEsIDB4N2I0OTBkYTMsIDB4MWUyZWIxMWIsIDB4NDgzZWQyNDMsIDB4MmQ1OTZlZmIsCisgICAgMHhjM2Y2ZGJlOSwgMHhhNjkxNjc1MSwgMHgxZmE5YjBjYywgMHg3YWNlMGM3NCwgMHg5NDYxYjk2NiwKKyAgICAweGYxMDYwNWRlfX07CisKKyNlbmRpZgorCisjZW5kaWYKKworI2lmIE4gPT0gMgorCisjaWYgVyA9PSA4CisKK2xvY2FsIGNvbnN0IHpfY3JjX3QgRkFSIGNyY19icmFpZF90YWJsZVtdWzI1Nl0gPSB7CisgICB7MHgwMDAwMDAwMCwgMHhhZTY4OTE5MSwgMHg4N2EwMjU2MywgMHgyOWM4YjRmMiwgMHhkNDMxNGM4NywKKyAgICAweDdhNTlkZDE2LCAweDUzOTE2OWU0LCAweGZkZjlmODc1LCAweDczMTM5ZjRmLCAweGRkN2IwZWRlLAorICAgIDB4ZjRiM2JhMmMsIDB4NWFkYjJiYmQsIDB4YTcyMmQzYzgsIDB4MDk0YTQyNTksIDB4MjA4MmY2YWIsCisgICAgMHg4ZWVhNjczYSwgMHhlNjI3M2U5ZSwgMHg0ODRmYWYwZiwgMHg2MTg3MWJmZCwgMHhjZmVmOGE2YywKKyAgICAweDMyMTY3MjE5LCAweDljN2VlMzg4LCAweGI1YjY1NzdhLCAweDFiZGVjNmViLCAweDk1MzRhMWQxLAorICAgIDB4M2I1YzMwNDAsIDB4MTI5NDg0YjIsIDB4YmNmYzE1MjMsIDB4NDEwNWVkNTYsIDB4ZWY2ZDdjYzcsCisgICAgMHhjNmE1YzgzNSwgMHg2OGNkNTlhNCwgMHgxNzNmN2I3ZCwgMHhiOTU3ZWFlYywgMHg5MDlmNWUxZSwKKyAgICAweDNlZjdjZjhmLCAweGMzMGUzN2ZhLCAweDZkNjZhNjZiLCAweDQ0YWUxMjk5LCAweGVhYzY4MzA4LAorICAgIDB4NjQyY2U0MzIsIDB4Y2E0NDc1YTMsIDB4ZTM4Y2MxNTEsIDB4NGRlNDUwYzAsIDB4YjAxZGE4YjUsCisgICAgMHgxZTc1MzkyNCwgMHgzN2JkOGRkNiwgMHg5OWQ1MWM0NywgMHhmMTE4NDVlMywgMHg1ZjcwZDQ3MiwKKyAgICAweDc2Yjg2MDgwLCAweGQ4ZDBmMTExLCAweDI1MjkwOTY0LCAweDhiNDE5OGY1LCAweGEyODkyYzA3LAorICAgIDB4MGNlMWJkOTYsIDB4ODIwYmRhYWMsIDB4MmM2MzRiM2QsIDB4MDVhYmZmY2YsIDB4YWJjMzZlNWUsCisgICAgMHg1NjNhOTYyYiwgMHhmODUyMDdiYSwgMHhkMTlhYjM0OCwgMHg3ZmYyMjJkOSwgMHgyZTdlZjZmYSwKKyAgICAweDgwMTY2NzZiLCAweGE5ZGVkMzk5LCAweDA3YjY0MjA4LCAweGZhNGZiYTdkLCAweDU0MjcyYmVjLAorICAgIDB4N2RlZjlmMWUsIDB4ZDM4NzBlOGYsIDB4NWQ2ZDY5YjUsIDB4ZjMwNWY4MjQsIDB4ZGFjZDRjZDYsCisgICAgMHg3NGE1ZGQ0NywgMHg4OTVjMjUzMiwgMHgyNzM0YjRhMywgMHgwZWZjMDA1MSwgMHhhMDk0OTFjMCwKKyAgICAweGM4NTljODY0LCAweDY2MzE1OWY1LCAweDRmZjllZDA3LCAweGUxOTE3Yzk2LCAweDFjNjg4NGUzLAorICAgIDB4YjIwMDE1NzIsIDB4OWJjOGExODAsIDB4MzVhMDMwMTEsIDB4YmI0YTU3MmIsIDB4MTUyMmM2YmEsCisgICAgMHgzY2VhNzI0OCwgMHg5MjgyZTNkOSwgMHg2ZjdiMWJhYywgMHhjMTEzOGEzZCwgMHhlOGRiM2VjZiwKKyAgICAweDQ2YjNhZjVlLCAweDM5NDE4ZDg3LCAweDk3MjkxYzE2LCAweGJlZTFhOGU0LCAweDEwODkzOTc1LAorICAgIDB4ZWQ3MGMxMDAsIDB4NDMxODUwOTEsIDB4NmFkMGU0NjMsIDB4YzRiODc1ZjIsIDB4NGE1MjEyYzgsCisgICAgMHhlNDNhODM1OSwgMHhjZGYyMzdhYiwgMHg2MzlhYTYzYSwgMHg5ZTYzNWU0ZiwgMHgzMDBiY2ZkZSwKKyAgICAweDE5YzM3YjJjLCAweGI3YWJlYWJkLCAweGRmNjZiMzE5LCAweDcxMGUyMjg4LCAweDU4YzY5NjdhLAorICAgIDB4ZjZhZTA3ZWIsIDB4MGI1N2ZmOWUsIDB4YTUzZjZlMGYsIDB4OGNmN2RhZmQsIDB4MjI5ZjRiNmMsCisgICAgMHhhYzc1MmM1NiwgMHgwMjFkYmRjNywgMHgyYmQ1MDkzNSwgMHg4NWJkOThhNCwgMHg3ODQ0NjBkMSwKKyAgICAweGQ2MmNmMTQwLCAweGZmZTQ0NWIyLCAweDUxOGNkNDIzLCAweDVjZmRlZGY0LCAweGYyOTU3YzY1LAorICAgIDB4ZGI1ZGM4OTcsIDB4NzUzNTU5MDYsIDB4ODhjY2ExNzMsIDB4MjZhNDMwZTIsIDB4MGY2Yzg0MTAsCisgICAgMHhhMTA0MTU4MSwgMHgyZmVlNzJiYiwgMHg4MTg2ZTMyYSwgMHhhODRlNTdkOCwgMHgwNjI2YzY0OSwKKyAgICAweGZiZGYzZTNjLCAweDU1YjdhZmFkLCAweDdjN2YxYjVmLCAweGQyMTc4YWNlLCAweGJhZGFkMzZhLAorICAgIDB4MTRiMjQyZmIsIDB4M2Q3YWY2MDksIDB4OTMxMjY3OTgsIDB4NmVlYjlmZWQsIDB4YzA4MzBlN2MsCisgICAgMHhlOTRiYmE4ZSwgMHg0NzIzMmIxZiwgMHhjOWM5NGMyNSwgMHg2N2ExZGRiNCwgMHg0ZTY5Njk0NiwKKyAgICAweGUwMDFmOGQ3LCAweDFkZjgwMGEyLCAweGIzOTA5MTMzLCAweDlhNTgyNWMxLCAweDM0MzBiNDUwLAorICAgIDB4NGJjMjk2ODksIDB4ZTVhYTA3MTgsIDB4Y2M2MmIzZWEsIDB4NjIwYTIyN2IsIDB4OWZmM2RhMGUsCisgICAgMHgzMTliNGI5ZiwgMHgxODUzZmY2ZCwgMHhiNjNiNmVmYywgMHgzOGQxMDljNiwgMHg5NmI5OTg1NywKKyAgICAweGJmNzEyY2E1LCAweDExMTliZDM0LCAweGVjZTA0NTQxLCAweDQyODhkNGQwLCAweDZiNDA2MDIyLAorICAgIDB4YzUyOGYxYjMsIDB4YWRlNWE4MTcsIDB4MDM4ZDM5ODYsIDB4MmE0NThkNzQsIDB4ODQyZDFjZTUsCisgICAgMHg3OWQ0ZTQ5MCwgMHhkN2JjNzUwMSwgMHhmZTc0YzFmMywgMHg1MDFjNTA2MiwgMHhkZWY2Mzc1OCwKKyAgICAweDcwOWVhNmM5LCAweDU5NTYxMjNiLCAweGY3M2U4M2FhLCAweDBhYzc3YmRmLCAweGE0YWZlYTRlLAorICAgIDB4OGQ2NzVlYmMsIDB4MjMwZmNmMmQsIDB4NzI4MzFiMGUsIDB4ZGNlYjhhOWYsIDB4ZjUyMzNlNmQsCisgICAgMHg1YjRiYWZmYywgMHhhNmIyNTc4OSwgMHgwOGRhYzYxOCwgMHgyMTEyNzJlYSwgMHg4ZjdhZTM3YiwKKyAgICAweDAxOTA4NDQxLCAweGFmZjgxNWQwLCAweDg2MzBhMTIyLCAweDI4NTgzMGIzLCAweGQ1YTFjOGM2LAorICAgIDB4N2JjOTU5NTcsIDB4NTIwMWVkYTUsIDB4ZmM2OTdjMzQsIDB4OTRhNDI1OTAsIDB4M2FjY2I0MDEsCisgICAgMHgxMzA0MDBmMywgMHhiZDZjOTE2MiwgMHg0MDk1NjkxNywgMHhlZWZkZjg4NiwgMHhjNzM1NGM3NCwKKyAgICAweDY5NWRkZGU1LCAweGU3YjdiYWRmLCAweDQ5ZGYyYjRlLCAweDYwMTc5ZmJjLCAweGNlN2YwZTJkLAorICAgIDB4MzM4NmY2NTgsIDB4OWRlZTY3YzksIDB4YjQyNmQzM2IsIDB4MWE0ZTQyYWEsIDB4NjViYzYwNzMsCisgICAgMHhjYmQ0ZjFlMiwgMHhlMjFjNDUxMCwgMHg0Yzc0ZDQ4MSwgMHhiMThkMmNmNCwgMHgxZmU1YmQ2NSwKKyAgICAweDM2MmQwOTk3LCAweDk4NDU5ODA2LCAweDE2YWZmZjNjLCAweGI4Yzc2ZWFkLCAweDkxMGZkYTVmLAorICAgIDB4M2Y2NzRiY2UsIDB4YzI5ZWIzYmIsIDB4NmNmNjIyMmEsIDB4NDUzZTk2ZDgsIDB4ZWI1NjA3NDksCisgICAgMHg4MzliNWVlZCwgMHgyZGYzY2Y3YywgMHgwNDNiN2I4ZSwgMHhhYTUzZWExZiwgMHg1N2FhMTI2YSwKKyAgICAweGY5YzI4M2ZiLCAweGQwMGEzNzA5LCAweDdlNjJhNjk4LCAweGYwODhjMWEyLCAweDVlZTA1MDMzLAorICAgIDB4NzcyOGU0YzEsIDB4ZDk0MDc1NTAsIDB4MjRiOThkMjUsIDB4OGFkMTFjYjQsIDB4YTMxOWE4NDYsCisgICAgMHgwZDcxMzlkN30sCisgICB7MHgwMDAwMDAwMCwgMHhiOWZiZGJlOCwgMHhhODg2YjE5MSwgMHgxMTdkNmE3OSwgMHg4YTdjNjU2MywKKyAgICAweDMzODdiZThiLCAweDIyZmFkNGYyLCAweDliMDEwZjFhLCAweGNmODljYzg3LCAweDc2NzIxNzZmLAorICAgIDB4NjcwZjdkMTYsIDB4ZGVmNGE2ZmUsIDB4NDVmNWE5ZTQsIDB4ZmMwZTcyMGMsIDB4ZWQ3MzE4NzUsCisgICAgMHg1NDg4YzM5ZCwgMHg0NDYyOWY0ZiwgMHhmZDk5NDRhNywgMHhlY2U0MmVkZSwgMHg1NTFmZjUzNiwKKyAgICAweGNlMWVmYTJjLCAweDc3ZTUyMWM0LCAweDY2OTg0YmJkLCAweGRmNjM5MDU1LCAweDhiZWI1M2M4LAorICAgIDB4MzIxMDg4MjAsIDB4MjM2ZGUyNTksIDB4OWE5NjM5YjEsIDB4MDE5NzM2YWIsIDB4Yjg2Y2VkNDMsCisgICAgMHhhOTExODczYSwgMHgxMGVhNWNkMiwgMHg4OGM1M2U5ZSwgMHgzMTNlZTU3NiwgMHgyMDQzOGYwZiwKKyAgICAweDk5Yjg1NGU3LCAweDAyYjk1YmZkLCAweGJiNDI4MDE1LCAweGFhM2ZlYTZjLCAweDEzYzQzMTg0LAorICAgIDB4NDc0Y2YyMTksIDB4ZmViNzI5ZjEsIDB4ZWZjYTQzODgsIDB4NTYzMTk4NjAsIDB4Y2QzMDk3N2EsCisgICAgMHg3NGNiNGM5MiwgMHg2NWI2MjZlYiwgMHhkYzRkZmQwMywgMHhjY2E3YTFkMSwgMHg3NTVjN2EzOSwKKyAgICAweDY0MjExMDQwLCAweGRkZGFjYmE4LCAweDQ2ZGJjNGIyLCAweGZmMjAxZjVhLCAweGVlNWQ3NTIzLAorICAgIDB4NTdhNmFlY2IsIDB4MDMyZTZkNTYsIDB4YmFkNWI2YmUsIDB4YWJhOGRjYzcsIDB4MTI1MzA3MmYsCisgICAgMHg4OTUyMDgzNSwgMHgzMGE5ZDNkZCwgMHgyMWQ0YjlhNCwgMHg5ODJmNjI0YywgMHhjYWZiN2I3ZCwKKyAgICAweDczMDBhMDk1LCAweDYyN2RjYWVjLCAweGRiODYxMTA0LCAweDQwODcxZTFlLCAweGY5N2NjNWY2LAorICAgIDB4ZTgwMWFmOGYsIDB4NTFmYTc0NjcsIDB4MDU3MmI3ZmEsIDB4YmM4OTZjMTIsIDB4YWRmNDA2NmIsCisgICAgMHgxNDBmZGQ4MywgMHg4ZjBlZDI5OSwgMHgzNmY1MDk3MSwgMHgyNzg4NjMwOCwgMHg5ZTczYjhlMCwKKyAgICAweDhlOTllNDMyLCAweDM3NjIzZmRhLCAweDI2MWY1NWEzLCAweDlmZTQ4ZTRiLCAweDA0ZTU4MTUxLAorICAgIDB4YmQxZTVhYjksIDB4YWM2MzMwYzAsIDB4MTU5OGViMjgsIDB4NDExMDI4YjUsIDB4ZjhlYmYzNWQsCisgICAgMHhlOTk2OTkyNCwgMHg1MDZkNDJjYywgMHhjYjZjNGRkNiwgMHg3Mjk3OTYzZSwgMHg2M2VhZmM0NywKKyAgICAweGRhMTEyN2FmLCAweDQyM2U0NWUzLCAweGZiYzU5ZTBiLCAweGVhYjhmNDcyLCAweDUzNDMyZjlhLAorICAgIDB4Yzg0MjIwODAsIDB4NzFiOWZiNjgsIDB4NjBjNDkxMTEsIDB4ZDkzZjRhZjksIDB4OGRiNzg5NjQsCisgICAgMHgzNDRjNTI4YywgMHgyNTMxMzhmNSwgMHg5Y2NhZTMxZCwgMHgwN2NiZWMwNywgMHhiZTMwMzdlZiwKKyAgICAweGFmNGQ1ZDk2LCAweDE2YjY4NjdlLCAweDA2NWNkYWFjLCAweGJmYTcwMTQ0LCAweGFlZGE2YjNkLAorICAgIDB4MTcyMWIwZDUsIDB4OGMyMGJmY2YsIDB4MzVkYjY0MjcsIDB4MjRhNjBlNWUsIDB4OWQ1ZGQ1YjYsCisgICAgMHhjOWQ1MTYyYiwgMHg3MDJlY2RjMywgMHg2MTUzYTdiYSwgMHhkOGE4N2M1MiwgMHg0M2E5NzM0OCwKKyAgICAweGZhNTJhOGEwLCAweGViMmZjMmQ5LCAweDUyZDQxOTMxLCAweDRlODdmMGJiLCAweGY3N2MyYjUzLAorICAgIDB4ZTYwMTQxMmEsIDB4NWZmYTlhYzIsIDB4YzRmYjk1ZDgsIDB4N2QwMDRlMzAsIDB4NmM3ZDI0NDksCisgICAgMHhkNTg2ZmZhMSwgMHg4MTBlM2MzYywgMHgzOGY1ZTdkNCwgMHgyOTg4OGRhZCwgMHg5MDczNTY0NSwKKyAgICAweDBiNzI1OTVmLCAweGIyODk4MmI3LCAweGEzZjRlOGNlLCAweDFhMGYzMzI2LCAweDBhZTU2ZmY0LAorICAgIDB4YjMxZWI0MWMsIDB4YTI2M2RlNjUsIDB4MWI5ODA1OGQsIDB4ODA5OTBhOTcsIDB4Mzk2MmQxN2YsCisgICAgMHgyODFmYmIwNiwgMHg5MWU0NjBlZSwgMHhjNTZjYTM3MywgMHg3Yzk3Nzg5YiwgMHg2ZGVhMTJlMiwKKyAgICAweGQ0MTFjOTBhLCAweDRmMTBjNjEwLCAweGY2ZWIxZGY4LCAweGU3OTY3NzgxLCAweDVlNmRhYzY5LAorICAgIDB4YzY0MmNlMjUsIDB4N2ZiOTE1Y2QsIDB4NmVjNDdmYjQsIDB4ZDczZmE0NWMsIDB4NGMzZWFiNDYsCisgICAgMHhmNWM1NzBhZSwgMHhlNGI4MWFkNywgMHg1ZDQzYzEzZiwgMHgwOWNiMDJhMiwgMHhiMDMwZDk0YSwKKyAgICAweGExNGRiMzMzLCAweDE4YjY2OGRiLCAweDgzYjc2N2MxLCAweDNhNGNiYzI5LCAweDJiMzFkNjUwLAorICAgIDB4OTJjYTBkYjgsIDB4ODIyMDUxNmEsIDB4M2JkYjhhODIsIDB4MmFhNmUwZmIsIDB4OTM1ZDNiMTMsCisgICAgMHgwODVjMzQwOSwgMHhiMWE3ZWZlMSwgMHhhMGRhODU5OCwgMHgxOTIxNWU3MCwgMHg0ZGE5OWRlZCwKKyAgICAweGY0NTI0NjA1LCAweGU1MmYyYzdjLCAweDVjZDRmNzk0LCAweGM3ZDVmODhlLCAweDdlMmUyMzY2LAorICAgIDB4NmY1MzQ5MWYsIDB4ZDZhODkyZjcsIDB4ODQ3YzhiYzYsIDB4M2Q4NzUwMmUsIDB4MmNmYTNhNTcsCisgICAgMHg5NTAxZTFiZiwgMHgwZTAwZWVhNSwgMHhiN2ZiMzU0ZCwgMHhhNjg2NWYzNCwgMHgxZjdkODRkYywKKyAgICAweDRiZjU0NzQxLCAweGYyMGU5Y2E5LCAweGUzNzNmNmQwLCAweDVhODgyZDM4LCAweGMxODkyMjIyLAorICAgIDB4Nzg3MmY5Y2EsIDB4NjkwZjkzYjMsIDB4ZDBmNDQ4NWIsIDB4YzAxZTE0ODksIDB4NzllNWNmNjEsCisgICAgMHg2ODk4YTUxOCwgMHhkMTYzN2VmMCwgMHg0YTYyNzFlYSwgMHhmMzk5YWEwMiwgMHhlMmU0YzA3YiwKKyAgICAweDViMWYxYjkzLCAweDBmOTdkODBlLCAweGI2NmMwM2U2LCAweGE3MTE2OTlmLCAweDFlZWFiMjc3LAorICAgIDB4ODVlYmJkNmQsIDB4M2MxMDY2ODUsIDB4MmQ2ZDBjZmMsIDB4OTQ5NmQ3MTQsIDB4MGNiOWI1NTgsCisgICAgMHhiNTQyNmViMCwgMHhhNDNmMDRjOSwgMHgxZGM0ZGYyMSwgMHg4NmM1ZDAzYiwgMHgzZjNlMGJkMywKKyAgICAweDJlNDM2MWFhLCAweDk3YjhiYTQyLCAweGMzMzA3OWRmLCAweDdhY2JhMjM3LCAweDZiYjZjODRlLAorICAgIDB4ZDI0ZDEzYTYsIDB4NDk0YzFjYmMsIDB4ZjBiN2M3NTQsIDB4ZTFjYWFkMmQsIDB4NTgzMTc2YzUsCisgICAgMHg0OGRiMmExNywgMHhmMTIwZjFmZiwgMHhlMDVkOWI4NiwgMHg1OWE2NDA2ZSwgMHhjMmE3NGY3NCwKKyAgICAweDdiNWM5NDljLCAweDZhMjFmZWU1LCAweGQzZGEyNTBkLCAweDg3NTJlNjkwLCAweDNlYTkzZDc4LAorICAgIDB4MmZkNDU3MDEsIDB4OTYyZjhjZTksIDB4MGQyZTgzZjMsIDB4YjRkNTU4MWIsIDB4YTVhODMyNjIsCisgICAgMHgxYzUzZTk4YX0sCisgICB7MHgwMDAwMDAwMCwgMHg5ZDBmZTE3NiwgMHhlMTZlYzRhZCwgMHg3YzYxMjVkYiwgMHgxOWFjOGYxYiwKKyAgICAweDg0YTM2ZTZkLCAweGY4YzI0YmI2LCAweDY1Y2RhYWMwLCAweDMzNTkxZTM2LCAweGFlNTZmZjQwLAorICAgIDB4ZDIzN2RhOWIsIDB4NGYzODNiZWQsIDB4MmFmNTkxMmQsIDB4YjdmYTcwNWIsIDB4Y2I5YjU1ODAsCisgICAgMHg1Njk0YjRmNiwgMHg2NmIyM2M2YywgMHhmYmJkZGQxYSwgMHg4N2RjZjhjMSwgMHgxYWQzMTliNywKKyAgICAweDdmMWViMzc3LCAweGUyMTE1MjAxLCAweDllNzA3N2RhLCAweDAzN2Y5NmFjLCAweDU1ZWIyMjVhLAorICAgIDB4YzhlNGMzMmMsIDB4YjQ4NWU2ZjcsIDB4Mjk4YTA3ODEsIDB4NGM0N2FkNDEsIDB4ZDE0ODRjMzcsCisgICAgMHhhZDI5NjllYywgMHgzMDI2ODg5YSwgMHhjZDY0NzhkOCwgMHg1MDZiOTlhZSwgMHgyYzBhYmM3NSwKKyAgICAweGIxMDU1ZDAzLCAweGQ0YzhmN2MzLCAweDQ5YzcxNmI1LCAweDM1YTYzMzZlLCAweGE4YTlkMjE4LAorICAgIDB4ZmUzZDY2ZWUsIDB4NjMzMjg3OTgsIDB4MWY1M2EyNDMsIDB4ODI1YzQzMzUsIDB4ZTc5MWU5ZjUsCisgICAgMHg3YTllMDg4MywgMHgwNmZmMmQ1OCwgMHg5YmYwY2MyZSwgMHhhYmQ2NDRiNCwgMHgzNmQ5YTVjMiwKKyAgICAweDRhYjg4MDE5LCAweGQ3Yjc2MTZmLCAweGIyN2FjYmFmLCAweDJmNzUyYWQ5LCAweDUzMTQwZjAyLAorICAgIDB4Y2UxYmVlNzQsIDB4OTg4ZjVhODIsIDB4MDU4MGJiZjQsIDB4NzllMTllMmYsIDB4ZTRlZTdmNTksCisgICAgMHg4MTIzZDU5OSwgMHgxYzJjMzRlZiwgMHg2MDRkMTEzNCwgMHhmZDQyZjA0MiwgMHg0MWI5ZjdmMSwKKyAgICAweGRjYjYxNjg3LCAweGEwZDczMzVjLCAweDNkZDhkMjJhLCAweDU4MTU3OGVhLCAweGM1MWE5OTljLAorICAgIDB4Yjk3YmJjNDcsIDB4MjQ3NDVkMzEsIDB4NzJlMGU5YzcsIDB4ZWZlZjA4YjEsIDB4OTM4ZTJkNmEsCisgICAgMHgwZTgxY2MxYywgMHg2YjRjNjZkYywgMHhmNjQzODdhYSwgMHg4YTIyYTI3MSwgMHgxNzJkNDMwNywKKyAgICAweDI3MGJjYjlkLCAweGJhMDQyYWViLCAweGM2NjUwZjMwLCAweDViNmFlZTQ2LCAweDNlYTc0NDg2LAorICAgIDB4YTNhOGE1ZjAsIDB4ZGZjOTgwMmIsIDB4NDJjNjYxNWQsIDB4MTQ1MmQ1YWIsIDB4ODk1ZDM0ZGQsCisgICAgMHhmNTNjMTEwNiwgMHg2ODMzZjA3MCwgMHgwZGZlNWFiMCwgMHg5MGYxYmJjNiwgMHhlYzkwOWUxZCwKKyAgICAweDcxOWY3ZjZiLCAweDhjZGQ4ZjI5LCAweDExZDI2ZTVmLCAweDZkYjM0Yjg0LCAweGYwYmNhYWYyLAorICAgIDB4OTU3MTAwMzIsIDB4MDg3ZWUxNDQsIDB4NzQxZmM0OWYsIDB4ZTkxMDI1ZTksIDB4YmY4NDkxMWYsCisgICAgMHgyMjhiNzA2OSwgMHg1ZWVhNTViMiwgMHhjM2U1YjRjNCwgMHhhNjI4MWUwNCwgMHgzYjI3ZmY3MiwKKyAgICAweDQ3NDZkYWE5LCAweGRhNDkzYmRmLCAweGVhNmZiMzQ1LCAweDc3NjA1MjMzLCAweDBiMDE3N2U4LAorICAgIDB4OTYwZTk2OWUsIDB4ZjNjMzNjNWUsIDB4NmVjY2RkMjgsIDB4MTJhZGY4ZjMsIDB4OGZhMjE5ODUsCisgICAgMHhkOTM2YWQ3MywgMHg0NDM5NGMwNSwgMHgzODU4NjlkZSwgMHhhNTU3ODhhOCwgMHhjMDlhMjI2OCwKKyAgICAweDVkOTVjMzFlLCAweDIxZjRlNmM1LCAweGJjZmIwN2IzLCAweDgzNzNlZmUyLCAweDFlN2MwZTk0LAorICAgIDB4NjIxZDJiNGYsIDB4ZmYxMmNhMzksIDB4OWFkZjYwZjksIDB4MDdkMDgxOGYsIDB4N2JiMWE0NTQsCisgICAgMHhlNmJlNDUyMiwgMHhiMDJhZjFkNCwgMHgyZDI1MTBhMiwgMHg1MTQ0MzU3OSwgMHhjYzRiZDQwZiwKKyAgICAweGE5ODY3ZWNmLCAweDM0ODk5ZmI5LCAweDQ4ZThiYTYyLCAweGQ1ZTc1YjE0LCAweGU1YzFkMzhlLAorICAgIDB4NzhjZTMyZjgsIDB4MDRhZjE3MjMsIDB4OTlhMGY2NTUsIDB4ZmM2ZDVjOTUsIDB4NjE2MmJkZTMsCisgICAgMHgxZDAzOTgzOCwgMHg4MDBjNzk0ZSwgMHhkNjk4Y2RiOCwgMHg0Yjk3MmNjZSwgMHgzN2Y2MDkxNSwKKyAgICAweGFhZjllODYzLCAweGNmMzQ0MmEzLCAweDUyM2JhM2Q1LCAweDJlNWE4NjBlLCAweGIzNTU2Nzc4LAorICAgIDB4NGUxNzk3M2EsIDB4ZDMxODc2NGMsIDB4YWY3OTUzOTcsIDB4MzI3NmIyZTEsIDB4NTdiYjE4MjEsCisgICAgMHhjYWI0Zjk1NywgMHhiNmQ1ZGM4YywgMHgyYmRhM2RmYSwgMHg3ZDRlODkwYywgMHhlMDQxNjg3YSwKKyAgICAweDljMjA0ZGExLCAweDAxMmZhY2Q3LCAweDY0ZTIwNjE3LCAweGY5ZWRlNzYxLCAweDg1OGNjMmJhLAorICAgIDB4MTg4MzIzY2MsIDB4MjhhNWFiNTYsIDB4YjVhYTRhMjAsIDB4YzljYjZmZmIsIDB4NTRjNDhlOGQsCisgICAgMHgzMTA5MjQ0ZCwgMHhhYzA2YzUzYiwgMHhkMDY3ZTBlMCwgMHg0ZDY4MDE5NiwgMHgxYmZjYjU2MCwKKyAgICAweDg2ZjM1NDE2LCAweGZhOTI3MWNkLCAweDY3OWQ5MGJiLCAweDAyNTAzYTdiLCAweDlmNWZkYjBkLAorICAgIDB4ZTMzZWZlZDYsIDB4N2UzMTFmYTAsIDB4YzJjYTE4MTMsIDB4NWZjNWY5NjUsIDB4MjNhNGRjYmUsCisgICAgMHhiZWFiM2RjOCwgMHhkYjY2OTcwOCwgMHg0NjY5NzY3ZSwgMHgzYTA4NTNhNSwgMHhhNzA3YjJkMywKKyAgICAweGYxOTMwNjI1LCAweDZjOWNlNzUzLCAweDEwZmRjMjg4LCAweDhkZjIyM2ZlLCAweGU4M2Y4OTNlLAorICAgIDB4NzUzMDY4NDgsIDB4MDk1MTRkOTMsIDB4OTQ1ZWFjZTUsIDB4YTQ3ODI0N2YsIDB4Mzk3N2M1MDksCisgICAgMHg0NTE2ZTBkMiwgMHhkODE5MDFhNCwgMHhiZGQ0YWI2NCwgMHgyMGRiNGExMiwgMHg1Y2JhNmZjOSwKKyAgICAweGMxYjU4ZWJmLCAweDk3MjEzYTQ5LCAweDBhMmVkYjNmLCAweDc2NGZmZWU0LCAweGViNDAxZjkyLAorICAgIDB4OGU4ZGI1NTIsIDB4MTM4MjU0MjQsIDB4NmZlMzcxZmYsIDB4ZjJlYzkwODksIDB4MGZhZTYwY2IsCisgICAgMHg5MmExODFiZCwgMHhlZWMwYTQ2NiwgMHg3M2NmNDUxMCwgMHgxNjAyZWZkMCwgMHg4YjBkMGVhNiwKKyAgICAweGY3NmMyYjdkLCAweDZhNjNjYTBiLCAweDNjZjc3ZWZkLCAweGExZjg5ZjhiLCAweGRkOTliYTUwLAorICAgIDB4NDA5NjViMjYsIDB4MjU1YmYxZTYsIDB4Yjg1NDEwOTAsIDB4YzQzNTM1NGIsIDB4NTkzYWQ0M2QsCisgICAgMHg2OTFjNWNhNywgMHhmNDEzYmRkMSwgMHg4ODcyOTgwYSwgMHgxNTdkNzk3YywgMHg3MGIwZDNiYywKKyAgICAweGVkYmYzMmNhLCAweDkxZGUxNzExLCAweDBjZDFmNjY3LCAweDVhNDU0MjkxLCAweGM3NGFhM2U3LAorICAgIDB4YmIyYjg2M2MsIDB4MjYyNDY3NGEsIDB4NDNlOWNkOGEsIDB4ZGVlNjJjZmMsIDB4YTI4NzA5MjcsCisgICAgMHgzZjg4ZTg1MX0sCisgICB7MHgwMDAwMDAwMCwgMHhkZDk2ZDk4NSwgMHg2MDVjYjU0YiwgMHhiZGNhNmNjZSwgMHhjMGI5NmE5NiwKKyAgICAweDFkMmZiMzEzLCAweGEwZTVkZmRkLCAweDdkNzMwNjU4LCAweDVhMDNkMzZkLCAweDg3OTUwYWU4LAorICAgIDB4M2E1ZjY2MjYsIDB4ZTdjOWJmYTMsIDB4OWFiYWI5ZmIsIDB4NDcyYzYwN2UsIDB4ZmFlNjBjYjAsCisgICAgMHgyNzcwZDUzNSwgMHhiNDA3YTZkYSwgMHg2OTkxN2Y1ZiwgMHhkNDViMTM5MSwgMHgwOWNkY2ExNCwKKyAgICAweDc0YmVjYzRjLCAweGE5MjgxNWM5LCAweDE0ZTI3OTA3LCAweGM5NzRhMDgyLCAweGVlMDQ3NWI3LAorICAgIDB4MzM5MmFjMzIsIDB4OGU1OGMwZmMsIDB4NTNjZTE5NzksIDB4MmViZDFmMjEsIDB4ZjMyYmM2YTQsCisgICAgMHg0ZWUxYWE2YSwgMHg5Mzc3NzNlZiwgMHhiMzdlNGJmNSwgMHg2ZWU4OTI3MCwgMHhkMzIyZmViZSwKKyAgICAweDBlYjQyNzNiLCAweDczYzcyMTYzLCAweGFlNTFmOGU2LCAweDEzOWI5NDI4LCAweGNlMGQ0ZGFkLAorICAgIDB4ZTk3ZDk4OTgsIDB4MzRlYjQxMWQsIDB4ODkyMTJkZDMsIDB4NTRiN2Y0NTYsIDB4MjljNGYyMGUsCisgICAgMHhmNDUyMmI4YiwgMHg0OTk4NDc0NSwgMHg5NDBlOWVjMCwgMHgwNzc5ZWQyZiwgMHhkYWVmMzRhYSwKKyAgICAweDY3MjU1ODY0LCAweGJhYjM4MWUxLCAweGM3YzA4N2I5LCAweDFhNTY1ZTNjLCAweGE3OWMzMmYyLAorICAgIDB4N2EwYWViNzcsIDB4NWQ3YTNlNDIsIDB4ODBlY2U3YzcsIDB4M2QyNjhiMDksIDB4ZTBiMDUyOGMsCisgICAgMHg5ZGMzNTRkNCwgMHg0MDU1OGQ1MSwgMHhmZDlmZTE5ZiwgMHgyMDA5MzgxYSwgMHhiZDhkOTFhYiwKKyAgICAweDYwMWI0ODJlLCAweGRkZDEyNGUwLCAweDAwNDdmZDY1LCAweDdkMzRmYjNkLCAweGEwYTIyMmI4LAorICAgIDB4MWQ2ODRlNzYsIDB4YzBmZTk3ZjMsIDB4ZTc4ZTQyYzYsIDB4M2ExODliNDMsIDB4ODdkMmY3OGQsCisgICAgMHg1YTQ0MmUwOCwgMHgyNzM3Mjg1MCwgMHhmYWExZjFkNSwgMHg0NzZiOWQxYiwgMHg5YWZkNDQ5ZSwKKyAgICAweDA5OGEzNzcxLCAweGQ0MWNlZWY0LCAweDY5ZDY4MjNhLCAweGI0NDA1YmJmLCAweGM5MzM1ZGU3LAorICAgIDB4MTRhNTg0NjIsIDB4YTk2ZmU4YWMsIDB4NzRmOTMxMjksIDB4NTM4OWU0MWMsIDB4OGUxZjNkOTksCisgICAgMHgzM2Q1NTE1NywgMHhlZTQzODhkMiwgMHg5MzMwOGU4YSwgMHg0ZWE2NTcwZiwgMHhmMzZjM2JjMSwKKyAgICAweDJlZmFlMjQ0LCAweDBlZjNkYTVlLCAweGQzNjUwM2RiLCAweDZlYWY2ZjE1LCAweGIzMzliNjkwLAorICAgIDB4Y2U0YWIwYzgsIDB4MTNkYzY5NGQsIDB4YWUxNjA1ODMsIDB4NzM4MGRjMDYsIDB4NTRmMDA5MzMsCisgICAgMHg4OTY2ZDBiNiwgMHgzNGFjYmM3OCwgMHhlOTNhNjVmZCwgMHg5NDQ5NjNhNSwgMHg0OWRmYmEyMCwKKyAgICAweGY0MTVkNmVlLCAweDI5ODMwZjZiLCAweGJhZjQ3Yzg0LCAweDY3NjJhNTAxLCAweGRhYThjOWNmLAorICAgIDB4MDczZTEwNGEsIDB4N2E0ZDE2MTIsIDB4YTdkYmNmOTcsIDB4MWExMWEzNTksIDB4Yzc4NzdhZGMsCisgICAgMHhlMGY3YWZlOSwgMHgzZDYxNzY2YywgMHg4MGFiMWFhMiwgMHg1ZDNkYzMyNywgMHgyMDRlYzU3ZiwKKyAgICAweGZkZDgxY2ZhLCAweDQwMTI3MDM0LCAweDlkODRhOWIxLCAweGEwNmEyNTE3LCAweDdkZmNmYzkyLAorICAgIDB4YzAzNjkwNWMsIDB4MWRhMDQ5ZDksIDB4NjBkMzRmODEsIDB4YmQ0NTk2MDQsIDB4MDA4ZmZhY2EsCisgICAgMHhkZDE5MjM0ZiwgMHhmYTY5ZjY3YSwgMHgyN2ZmMmZmZiwgMHg5YTM1NDMzMSwgMHg0N2EzOWFiNCwKKyAgICAweDNhZDA5Y2VjLCAweGU3NDY0NTY5LCAweDVhOGMyOWE3LCAweDg3MWFmMDIyLCAweDE0NmQ4M2NkLAorICAgIDB4YzlmYjVhNDgsIDB4NzQzMTM2ODYsIDB4YTlhN2VmMDMsIDB4ZDRkNGU5NWIsIDB4MDk0MjMwZGUsCisgICAgMHhiNDg4NWMxMCwgMHg2OTFlODU5NSwgMHg0ZTZlNTBhMCwgMHg5M2Y4ODkyNSwgMHgyZTMyZTVlYiwKKyAgICAweGYzYTQzYzZlLCAweDhlZDczYTM2LCAweDUzNDFlM2IzLCAweGVlOGI4ZjdkLCAweDMzMWQ1NmY4LAorICAgIDB4MTMxNDZlZTIsIDB4Y2U4MmI3NjcsIDB4NzM0OGRiYTksIDB4YWVkZTAyMmMsIDB4ZDNhZDA0NzQsCisgICAgMHgwZTNiZGRmMSwgMHhiM2YxYjEzZiwgMHg2ZTY3NjhiYSwgMHg0OTE3YmQ4ZiwgMHg5NDgxNjQwYSwKKyAgICAweDI5NGIwOGM0LCAweGY0ZGRkMTQxLCAweDg5YWVkNzE5LCAweDU0MzgwZTljLCAweGU5ZjI2MjUyLAorICAgIDB4MzQ2NGJiZDcsIDB4YTcxM2M4MzgsIDB4N2E4NTExYmQsIDB4Yzc0ZjdkNzMsIDB4MWFkOWE0ZjYsCisgICAgMHg2N2FhYTJhZSwgMHhiYTNjN2IyYiwgMHgwN2Y2MTdlNSwgMHhkYTYwY2U2MCwgMHhmZDEwMWI1NSwKKyAgICAweDIwODZjMmQwLCAweDlkNGNhZTFlLCAweDQwZGE3NzliLCAweDNkYTk3MWMzLCAweGUwM2ZhODQ2LAorICAgIDB4NWRmNWM0ODgsIDB4ODA2MzFkMGQsIDB4MWRlN2I0YmMsIDB4YzA3MTZkMzksIDB4N2RiYjAxZjcsCisgICAgMHhhMDJkZDg3MiwgMHhkZDVlZGUyYSwgMHgwMGM4MDdhZiwgMHhiZDAyNmI2MSwgMHg2MDk0YjJlNCwKKyAgICAweDQ3ZTQ2N2QxLCAweDlhNzJiZTU0LCAweDI3YjhkMjlhLCAweGZhMmUwYjFmLCAweDg3NWQwZDQ3LAorICAgIDB4NWFjYmQ0YzIsIDB4ZTcwMWI4MGMsIDB4M2E5NzYxODksIDB4YTllMDEyNjYsIDB4NzQ3NmNiZTMsCisgICAgMHhjOWJjYTcyZCwgMHgxNDJhN2VhOCwgMHg2OTU5NzhmMCwgMHhiNGNmYTE3NSwgMHgwOTA1Y2RiYiwKKyAgICAweGQ0OTMxNDNlLCAweGYzZTNjMTBiLCAweDJlNzUxODhlLCAweDkzYmY3NDQwLCAweDRlMjlhZGM1LAorICAgIDB4MzM1YWFiOWQsIDB4ZWVjYzcyMTgsIDB4NTMwNjFlZDYsIDB4OGU5MGM3NTMsIDB4YWU5OWZmNDksCisgICAgMHg3MzBmMjZjYywgMHhjZWM1NGEwMiwgMHgxMzUzOTM4NywgMHg2ZTIwOTVkZiwgMHhiM2I2NGM1YSwKKyAgICAweDBlN2MyMDk0LCAweGQzZWFmOTExLCAweGY0OWEyYzI0LCAweDI5MGNmNWExLCAweDk0YzY5OTZmLAorICAgIDB4NDk1MDQwZWEsIDB4MzQyMzQ2YjIsIDB4ZTliNTlmMzcsIDB4NTQ3ZmYzZjksIDB4ODllOTJhN2MsCisgICAgMHgxYTllNTk5MywgMHhjNzA4ODAxNiwgMHg3YWMyZWNkOCwgMHhhNzU0MzU1ZCwgMHhkYTI3MzMwNSwKKyAgICAweDA3YjFlYTgwLCAweGJhN2I4NjRlLCAweDY3ZWQ1ZmNiLCAweDQwOWQ4YWZlLCAweDlkMGI1MzdiLAorICAgIDB4MjBjMTNmYjUsIDB4ZmQ1N2U2MzAsIDB4ODAyNGUwNjgsIDB4NWRiMjM5ZWQsIDB4ZTA3ODU1MjMsCisgICAgMHgzZGVlOGNhNn0sCisgICB7MHgwMDAwMDAwMCwgMHg5YmE1NGM2ZiwgMHhlYzNiOWU5ZiwgMHg3NzllZDJmMCwgMHgwMzA2M2I3ZiwKKyAgICAweDk4YTM3NzEwLCAweGVmM2RhNWUwLCAweDc0OThlOThmLCAweDA2MGM3NmZlLCAweDlkYTkzYTkxLAorICAgIDB4ZWEzN2U4NjEsIDB4NzE5MmE0MGUsIDB4MDUwYTRkODEsIDB4OWVhZjAxZWUsIDB4ZTkzMWQzMWUsCisgICAgMHg3Mjk0OWY3MSwgMHgwYzE4ZWRmYywgMHg5N2JkYTE5MywgMHhlMDIzNzM2MywgMHg3Yjg2M2YwYywKKyAgICAweDBmMWVkNjgzLCAweDk0YmI5YWVjLCAweGUzMjU0ODFjLCAweDc4ODAwNDczLCAweDBhMTQ5YjAyLAorICAgIDB4OTFiMWQ3NmQsIDB4ZTYyZjA1OWQsIDB4N2Q4YTQ5ZjIsIDB4MDkxMmEwN2QsIDB4OTJiN2VjMTIsCisgICAgMHhlNTI5M2VlMiwgMHg3ZThjNzI4ZCwgMHgxODMxZGJmOCwgMHg4Mzk0OTc5NywgMHhmNDBhNDU2NywKKyAgICAweDZmYWYwOTA4LCAweDFiMzdlMDg3LCAweDgwOTJhY2U4LCAweGY3MGM3ZTE4LCAweDZjYTkzMjc3LAorICAgIDB4MWUzZGFkMDYsIDB4ODU5OGUxNjksIDB4ZjIwNjMzOTksIDB4NjlhMzdmZjYsIDB4MWQzYjk2NzksCisgICAgMHg4NjllZGExNiwgMHhmMTAwMDhlNiwgMHg2YWE1NDQ4OSwgMHgxNDI5MzYwNCwgMHg4ZjhjN2E2YiwKKyAgICAweGY4MTJhODliLCAweDYzYjdlNGY0LCAweDE3MmYwZDdiLCAweDhjOGE0MTE0LCAweGZiMTQ5M2U0LAorICAgIDB4NjBiMWRmOGIsIDB4MTIyNTQwZmEsIDB4ODk4MDBjOTUsIDB4ZmUxZWRlNjUsIDB4NjViYjkyMGEsCisgICAgMHgxMTIzN2I4NSwgMHg4YTg2MzdlYSwgMHhmZDE4ZTUxYSwgMHg2NmJkYTk3NSwgMHgzMDYzYjdmMCwKKyAgICAweGFiYzZmYjlmLCAweGRjNTgyOTZmLCAweDQ3ZmQ2NTAwLCAweDMzNjU4YzhmLCAweGE4YzBjMGUwLAorICAgIDB4ZGY1ZTEyMTAsIDB4NDRmYjVlN2YsIDB4MzY2ZmMxMGUsIDB4YWRjYThkNjEsIDB4ZGE1NDVmOTEsCisgICAgMHg0MWYxMTNmZSwgMHgzNTY5ZmE3MSwgMHhhZWNjYjYxZSwgMHhkOTUyNjRlZSwgMHg0MmY3Mjg4MSwKKyAgICAweDNjN2I1YTBjLCAweGE3ZGUxNjYzLCAweGQwNDBjNDkzLCAweDRiZTU4OGZjLCAweDNmN2Q2MTczLAorICAgIDB4YTRkODJkMWMsIDB4ZDM0NmZmZWMsIDB4NDhlM2IzODMsIDB4M2E3NzJjZjIsIDB4YTFkMjYwOWQsCisgICAgMHhkNjRjYjI2ZCwgMHg0ZGU5ZmUwMiwgMHgzOTcxMTc4ZCwgMHhhMmQ0NWJlMiwgMHhkNTRhODkxMiwKKyAgICAweDRlZWZjNTdkLCAweDI4NTI2YzA4LCAweGIzZjcyMDY3LCAweGM0NjlmMjk3LCAweDVmY2NiZWY4LAorICAgIDB4MmI1NDU3NzcsIDB4YjBmMTFiMTgsIDB4Yzc2ZmM5ZTgsIDB4NWNjYTg1ODcsIDB4MmU1ZTFhZjYsCisgICAgMHhiNWZiNTY5OSwgMHhjMjY1ODQ2OSwgMHg1OWMwYzgwNiwgMHgyZDU4MjE4OSwgMHhiNmZkNmRlNiwKKyAgICAweGMxNjNiZjE2LCAweDVhYzZmMzc5LCAweDI0NGE4MWY0LCAweGJmZWZjZDliLCAweGM4NzExZjZiLAorICAgIDB4NTNkNDUzMDQsIDB4Mjc0Y2JhOGIsIDB4YmNlOWY2ZTQsIDB4Y2I3NzI0MTQsIDB4NTBkMjY4N2IsCisgICAgMHgyMjQ2ZjcwYSwgMHhiOWUzYmI2NSwgMHhjZTdkNjk5NSwgMHg1NWQ4MjVmYSwgMHgyMTQwY2M3NSwKKyAgICAweGJhZTU4MDFhLCAweGNkN2I1MmVhLCAweDU2ZGUxZTg1LCAweDYwYzc2ZmUwLCAweGZiNjIyMzhmLAorICAgIDB4OGNmY2YxN2YsIDB4MTc1OWJkMTAsIDB4NjNjMTU0OWYsIDB4Zjg2NDE4ZjAsIDB4OGZmYWNhMDAsCisgICAgMHgxNDVmODY2ZiwgMHg2NmNiMTkxZSwgMHhmZDZlNTU3MSwgMHg4YWYwODc4MSwgMHgxMTU1Y2JlZSwKKyAgICAweDY1Y2QyMjYxLCAweGZlNjg2ZTBlLCAweDg5ZjZiY2ZlLCAweDEyNTNmMDkxLCAweDZjZGY4MjFjLAorICAgIDB4Zjc3YWNlNzMsIDB4ODBlNDFjODMsIDB4MWI0MTUwZWMsIDB4NmZkOWI5NjMsIDB4ZjQ3Y2Y1MGMsCisgICAgMHg4M2UyMjdmYywgMHgxODQ3NmI5MywgMHg2YWQzZjRlMiwgMHhmMTc2Yjg4ZCwgMHg4NmU4NmE3ZCwKKyAgICAweDFkNGQyNjEyLCAweDY5ZDVjZjlkLCAweGYyNzA4M2YyLCAweDg1ZWU1MTAyLCAweDFlNGIxZDZkLAorICAgIDB4NzhmNmI0MTgsIDB4ZTM1M2Y4NzcsIDB4OTRjZDJhODcsIDB4MGY2ODY2ZTgsIDB4N2JmMDhmNjcsCisgICAgMHhlMDU1YzMwOCwgMHg5N2NiMTFmOCwgMHgwYzZlNWQ5NywgMHg3ZWZhYzJlNiwgMHhlNTVmOGU4OSwKKyAgICAweDkyYzE1Yzc5LCAweDA5NjQxMDE2LCAweDdkZmNmOTk5LCAweGU2NTliNWY2LCAweDkxYzc2NzA2LAorICAgIDB4MGE2MjJiNjksIDB4NzRlZTU5ZTQsIDB4ZWY0YjE1OGIsIDB4OThkNWM3N2IsIDB4MDM3MDhiMTQsCisgICAgMHg3N2U4NjI5YiwgMHhlYzRkMmVmNCwgMHg5YmQzZmMwNCwgMHgwMDc2YjA2YiwgMHg3MmUyMmYxYSwKKyAgICAweGU5NDc2Mzc1LCAweDllZDliMTg1LCAweDA1N2NmZGVhLCAweDcxZTQxNDY1LCAweGVhNDE1ODBhLAorICAgIDB4OWRkZjhhZmEsIDB4MDY3YWM2OTUsIDB4NTBhNGQ4MTAsIDB4Y2IwMTk0N2YsIDB4YmM5ZjQ2OGYsCisgICAgMHgyNzNhMGFlMCwgMHg1M2EyZTM2ZiwgMHhjODA3YWYwMCwgMHhiZjk5N2RmMCwgMHgyNDNjMzE5ZiwKKyAgICAweDU2YThhZWVlLCAweGNkMGRlMjgxLCAweGJhOTMzMDcxLCAweDIxMzY3YzFlLCAweDU1YWU5NTkxLAorICAgIDB4Y2UwYmQ5ZmUsIDB4Yjk5NTBiMGUsIDB4MjIzMDQ3NjEsIDB4NWNiYzM1ZWMsIDB4YzcxOTc5ODMsCisgICAgMHhiMDg3YWI3MywgMHgyYjIyZTcxYywgMHg1ZmJhMGU5MywgMHhjNDFmNDJmYywgMHhiMzgxOTAwYywKKyAgICAweDI4MjRkYzYzLCAweDVhYjA0MzEyLCAweGMxMTUwZjdkLCAweGI2OGJkZDhkLCAweDJkMmU5MWUyLAorICAgIDB4NTliNjc4NmQsIDB4YzIxMzM0MDIsIDB4YjU4ZGU2ZjIsIDB4MmUyOGFhOWQsIDB4NDg5NTAzZTgsCisgICAgMHhkMzMwNGY4NywgMHhhNGFlOWQ3NywgMHgzZjBiZDExOCwgMHg0YjkzMzg5NywgMHhkMDM2NzRmOCwKKyAgICAweGE3YThhNjA4LCAweDNjMGRlYTY3LCAweDRlOTk3NTE2LCAweGQ1M2MzOTc5LCAweGEyYTJlYjg5LAorICAgIDB4MzkwN2E3ZTYsIDB4NGQ5ZjRlNjksIDB4ZDYzYTAyMDYsIDB4YTFhNGQwZjYsIDB4M2EwMTljOTksCisgICAgMHg0NDhkZWUxNCwgMHhkZjI4YTI3YiwgMHhhOGI2NzA4YiwgMHgzMzEzM2NlNCwgMHg0NzhiZDU2YiwKKyAgICAweGRjMmU5OTA0LCAweGFiYjA0YmY0LCAweDMwMTUwNzliLCAweDQyODE5OGVhLCAweGQ5MjRkNDg1LAorICAgIDB4YWViYTA2NzUsIDB4MzUxZjRhMWEsIDB4NDE4N2EzOTUsIDB4ZGEyMmVmZmEsIDB4YWRiYzNkMGEsCisgICAgMHgzNjE5NzE2NX0sCisgICB7MHgwMDAwMDAwMCwgMHhjMThlZGZjMCwgMHg1ODZjYjljMSwgMHg5OWUyNjYwMSwgMHhiMGQ5NzM4MiwKKyAgICAweDcxNTdhYzQyLCAweGU4YjVjYTQzLCAweDI5M2IxNTgzLCAweGJhYzNlMTQ1LCAweDdiNGQzZTg1LAorICAgIDB4ZTJhZjU4ODQsIDB4MjMyMTg3NDQsIDB4MGExYTkyYzcsIDB4Y2I5NDRkMDcsIDB4NTI3NjJiMDYsCisgICAgMHg5M2Y4ZjRjNiwgMHhhZWY2YzRjYiwgMHg2Zjc4MWIwYiwgMHhmNjlhN2QwYSwgMHgzNzE0YTJjYSwKKyAgICAweDFlMmZiNzQ5LCAweGRmYTE2ODg5LCAweDQ2NDMwZTg4LCAweDg3Y2RkMTQ4LCAweDE0MzUyNThlLAorICAgIDB4ZDViYmZhNGUsIDB4NGM1OTljNGYsIDB4OGRkNzQzOGYsIDB4YTRlYzU2MGMsIDB4NjU2Mjg5Y2MsCisgICAgMHhmYzgwZWZjZCwgMHgzZDBlMzAwZCwgMHg4NjljOGZkNywgMHg0NzEyNTAxNywgMHhkZWYwMzYxNiwKKyAgICAweDFmN2VlOWQ2LCAweDM2NDVmYzU1LCAweGY3Y2IyMzk1LCAweDZlMjk0NTk0LCAweGFmYTc5YTU0LAorICAgIDB4M2M1ZjZlOTIsIDB4ZmRkMWIxNTIsIDB4NjQzM2Q3NTMsIDB4YTViZDA4OTMsIDB4OGM4NjFkMTAsCisgICAgMHg0ZDA4YzJkMCwgMHhkNGVhYTRkMSwgMHgxNTY0N2IxMSwgMHgyODZhNGIxYywgMHhlOWU0OTRkYywKKyAgICAweDcwMDZmMmRkLCAweGIxODgyZDFkLCAweDk4YjMzODllLCAweDU5M2RlNzVlLCAweGMwZGY4MTVmLAorICAgIDB4MDE1MTVlOWYsIDB4OTJhOWFhNTksIDB4NTMyNzc1OTksIDB4Y2FjNTEzOTgsIDB4MGI0YmNjNTgsCisgICAgMHgyMjcwZDlkYiwgMHhlM2ZlMDYxYiwgMHg3YTFjNjAxYSwgMHhiYjkyYmZkYSwgMHhkNjQ4MTllZiwKKyAgICAweDE3YzZjNjJmLCAweDhlMjRhMDJlLCAweDRmYWE3ZmVlLCAweDY2OTE2YTZkLCAweGE3MWZiNWFkLAorICAgIDB4M2VmZGQzYWMsIDB4ZmY3MzBjNmMsIDB4NmM4YmY4YWEsIDB4YWQwNTI3NmEsIDB4MzRlNzQxNmIsCisgICAgMHhmNTY5OWVhYiwgMHhkYzUyOGIyOCwgMHgxZGRjNTRlOCwgMHg4NDNlMzJlOSwgMHg0NWIwZWQyOSwKKyAgICAweDc4YmVkZDI0LCAweGI5MzAwMmU0LCAweDIwZDI2NGU1LCAweGUxNWNiYjI1LCAweGM4NjdhZWE2LAorICAgIDB4MDllOTcxNjYsIDB4OTAwYjE3NjcsIDB4NTE4NWM4YTcsIDB4YzI3ZDNjNjEsIDB4MDNmM2UzYTEsCisgICAgMHg5YTExODVhMCwgMHg1YjlmNWE2MCwgMHg3MmE0NGZlMywgMHhiMzJhOTAyMywgMHgyYWM4ZjYyMiwKKyAgICAweGViNDYyOWUyLCAweDUwZDQ5NjM4LCAweDkxNWE0OWY4LCAweDA4YjgyZmY5LCAweGM5MzZmMDM5LAorICAgIDB4ZTAwZGU1YmEsIDB4MjE4MzNhN2EsIDB4Yjg2MTVjN2IsIDB4NzllZjgzYmIsIDB4ZWExNzc3N2QsCisgICAgMHgyYjk5YThiZCwgMHhiMjdiY2ViYywgMHg3M2Y1MTE3YywgMHg1YWNlMDRmZiwgMHg5YjQwZGIzZiwKKyAgICAweDAyYTJiZDNlLCAweGMzMmM2MmZlLCAweGZlMjI1MmYzLCAweDNmYWM4ZDMzLCAweGE2NGVlYjMyLAorICAgIDB4NjdjMDM0ZjIsIDB4NGVmYjIxNzEsIDB4OGY3NWZlYjEsIDB4MTY5Nzk4YjAsIDB4ZDcxOTQ3NzAsCisgICAgMHg0NGUxYjNiNiwgMHg4NTZmNmM3NiwgMHgxYzhkMGE3NywgMHhkZDAzZDViNywgMHhmNDM4YzAzNCwKKyAgICAweDM1YjYxZmY0LCAweGFjNTQ3OWY1LCAweDZkZGFhNjM1LCAweDc3ZTEzNTlmLCAweGI2NmZlYTVmLAorICAgIDB4MmY4ZDhjNWUsIDB4ZWUwMzUzOWUsIDB4YzczODQ2MWQsIDB4MDZiNjk5ZGQsIDB4OWY1NGZmZGMsCisgICAgMHg1ZWRhMjAxYywgMHhjZDIyZDRkYSwgMHgwY2FjMGIxYSwgMHg5NTRlNmQxYiwgMHg1NGMwYjJkYiwKKyAgICAweDdkZmJhNzU4LCAweGJjNzU3ODk4LCAweDI1OTcxZTk5LCAweGU0MTljMTU5LCAweGQ5MTdmMTU0LAorICAgIDB4MTg5OTJlOTQsIDB4ODE3YjQ4OTUsIDB4NDBmNTk3NTUsIDB4NjljZTgyZDYsIDB4YTg0MDVkMTYsCisgICAgMHgzMWEyM2IxNywgMHhmMDJjZTRkNywgMHg2M2Q0MTAxMSwgMHhhMjVhY2ZkMSwgMHgzYmI4YTlkMCwKKyAgICAweGZhMzY3NjEwLCAweGQzMGQ2MzkzLCAweDEyODNiYzUzLCAweDhiNjFkYTUyLCAweDRhZWYwNTkyLAorICAgIDB4ZjE3ZGJhNDgsIDB4MzBmMzY1ODgsIDB4YTkxMTAzODksIDB4Njg5ZmRjNDksIDB4NDFhNGM5Y2EsCisgICAgMHg4MDJhMTYwYSwgMHgxOWM4NzAwYiwgMHhkODQ2YWZjYiwgMHg0YmJlNWIwZCwgMHg4YTMwODRjZCwKKyAgICAweDEzZDJlMmNjLCAweGQyNWMzZDBjLCAweGZiNjcyODhmLCAweDNhZTlmNzRmLCAweGEzMGI5MTRlLAorICAgIDB4NjI4NTRlOGUsIDB4NWY4YjdlODMsIDB4OWUwNWExNDMsIDB4MDdlN2M3NDIsIDB4YzY2OTE4ODIsCisgICAgMHhlZjUyMGQwMSwgMHgyZWRjZDJjMSwgMHhiNzNlYjRjMCwgMHg3NmIwNmIwMCwgMHhlNTQ4OWZjNiwKKyAgICAweDI0YzY0MDA2LCAweGJkMjQyNjA3LCAweDdjYWFmOWM3LCAweDU1OTFlYzQ0LCAweDk0MWYzMzg0LAorICAgIDB4MGRmZDU1ODUsIDB4Y2M3MzhhNDUsIDB4YTFhOTJjNzAsIDB4NjAyN2YzYjAsIDB4ZjljNTk1YjEsCisgICAgMHgzODRiNGE3MSwgMHgxMTcwNWZmMiwgMHhkMGZlODAzMiwgMHg0OTFjZTYzMywgMHg4ODkyMzlmMywKKyAgICAweDFiNmFjZDM1LCAweGRhZTQxMmY1LCAweDQzMDY3NGY0LCAweDgyODhhYjM0LCAweGFiYjNiZWI3LAorICAgIDB4NmEzZDYxNzcsIDB4ZjNkZjA3NzYsIDB4MzI1MWQ4YjYsIDB4MGY1ZmU4YmIsIDB4Y2VkMTM3N2IsCisgICAgMHg1NzMzNTE3YSwgMHg5NmJkOGViYSwgMHhiZjg2OWIzOSwgMHg3ZTA4NDRmOSwgMHhlN2VhMjJmOCwKKyAgICAweDI2NjRmZDM4LCAweGI1OWMwOWZlLCAweDc0MTJkNjNlLCAweGVkZjBiMDNmLCAweDJjN2U2ZmZmLAorICAgIDB4MDU0NTdhN2MsIDB4YzRjYmE1YmMsIDB4NWQyOWMzYmQsIDB4OWNhNzFjN2QsIDB4MjczNWEzYTcsCisgICAgMHhlNmJiN2M2NywgMHg3ZjU5MWE2NiwgMHhiZWQ3YzVhNiwgMHg5N2VjZDAyNSwgMHg1NjYyMGZlNSwKKyAgICAweGNmODA2OWU0LCAweDBlMGViNjI0LCAweDlkZjY0MmUyLCAweDVjNzg5ZDIyLCAweGM1OWFmYjIzLAorICAgIDB4MDQxNDI0ZTMsIDB4MmQyZjMxNjAsIDB4ZWNhMWVlYTAsIDB4NzU0Mzg4YTEsIDB4YjRjZDU3NjEsCisgICAgMHg4OWMzNjc2YywgMHg0ODRkYjhhYywgMHhkMWFmZGVhZCwgMHgxMDIxMDE2ZCwgMHgzOTFhMTRlZSwKKyAgICAweGY4OTRjYjJlLCAweDYxNzZhZDJmLCAweGEwZjg3MmVmLCAweDMzMDA4NjI5LCAweGYyOGU1OWU5LAorICAgIDB4NmI2YzNmZTgsIDB4YWFlMmUwMjgsIDB4ODNkOWY1YWIsIDB4NDI1NzJhNmIsIDB4ZGJiNTRjNmEsCisgICAgMHgxYTNiOTNhYX0sCisgICB7MHgwMDAwMDAwMCwgMHhlZmMyNmIzZSwgMHgwNGY1ZDAzZCwgMHhlYjM3YmIwMywgMHgwOWViYTA3YSwKKyAgICAweGU2MjljYjQ0LCAweDBkMWU3MDQ3LCAweGUyZGMxYjc5LCAweDEzZDc0MGY0LCAweGZjMTUyYmNhLAorICAgIDB4MTcyMjkwYzksIDB4ZjhlMGZiZjcsIDB4MWEzY2UwOGUsIDB4ZjVmZThiYjAsIDB4MWVjOTMwYjMsCisgICAgMHhmMTBiNWI4ZCwgMHgyN2FlODFlOCwgMHhjODZjZWFkNiwgMHgyMzViNTFkNSwgMHhjYzk5M2FlYiwKKyAgICAweDJlNDUyMTkyLCAweGMxODc0YWFjLCAweDJhYjBmMWFmLCAweGM1NzI5YTkxLCAweDM0NzljMTFjLAorICAgIDB4ZGJiYmFhMjIsIDB4MzA4YzExMjEsIDB4ZGY0ZTdhMWYsIDB4M2Q5MjYxNjYsIDB4ZDI1MDBhNTgsCisgICAgMHgzOTY3YjE1YiwgMHhkNmE1ZGE2NSwgMHg0ZjVkMDNkMCwgMHhhMDlmNjhlZSwgMHg0YmE4ZDNlZCwKKyAgICAweGE0NmFiOGQzLCAweDQ2YjZhM2FhLCAweGE5NzRjODk0LCAweDQyNDM3Mzk3LCAweGFkODExOGE5LAorICAgIDB4NWM4YTQzMjQsIDB4YjM0ODI4MWEsIDB4NTg3ZjkzMTksIDB4YjdiZGY4MjcsIDB4NTU2MWUzNWUsCisgICAgMHhiYWEzODg2MCwgMHg1MTk0MzM2MywgMHhiZTU2NTg1ZCwgMHg2OGYzODIzOCwgMHg4NzMxZTkwNiwKKyAgICAweDZjMDY1MjA1LCAweDgzYzQzOTNiLCAweDYxMTgyMjQyLCAweDhlZGE0OTdjLCAweDY1ZWRmMjdmLAorICAgIDB4OGEyZjk5NDEsIDB4N2IyNGMyY2MsIDB4OTRlNmE5ZjIsIDB4N2ZkMTEyZjEsIDB4OTAxMzc5Y2YsCisgICAgMHg3MmNmNjJiNiwgMHg5ZDBkMDk4OCwgMHg3NjNhYjI4YiwgMHg5OWY4ZDliNSwgMHg5ZWJhMDdhMCwKKyAgICAweDcxNzg2YzllLCAweDlhNGZkNzlkLCAweDc1OGRiY2EzLCAweDk3NTFhN2RhLCAweDc4OTNjY2U0LAorICAgIDB4OTNhNDc3ZTcsIDB4N2M2NjFjZDksIDB4OGQ2ZDQ3NTQsIDB4NjJhZjJjNmEsIDB4ODk5ODk3NjksCisgICAgMHg2NjVhZmM1NywgMHg4NDg2ZTcyZSwgMHg2YjQ0OGMxMCwgMHg4MDczMzcxMywgMHg2ZmIxNWMyZCwKKyAgICAweGI5MTQ4NjQ4LCAweDU2ZDZlZDc2LCAweGJkZTE1Njc1LCAweDUyMjMzZDRiLCAweGIwZmYyNjMyLAorICAgIDB4NWYzZDRkMGMsIDB4YjQwYWY2MGYsIDB4NWJjODlkMzEsIDB4YWFjM2M2YmMsIDB4NDUwMWFkODIsCisgICAgMHhhZTM2MTY4MSwgMHg0MWY0N2RiZiwgMHhhMzI4NjZjNiwgMHg0Y2VhMGRmOCwgMHhhN2RkYjZmYiwKKyAgICAweDQ4MWZkZGM1LCAweGQxZTcwNDcwLCAweDNlMjU2ZjRlLCAweGQ1MTJkNDRkLCAweDNhZDBiZjczLAorICAgIDB4ZDgwY2E0MGEsIDB4MzdjZWNmMzQsIDB4ZGNmOTc0MzcsIDB4MzMzYjFmMDksIDB4YzIzMDQ0ODQsCisgICAgMHgyZGYyMmZiYSwgMHhjNmM1OTRiOSwgMHgyOTA3ZmY4NywgMHhjYmRiZTRmZSwgMHgyNDE5OGZjMCwKKyAgICAweGNmMmUzNGMzLCAweDIwZWM1ZmZkLCAweGY2NDk4NTk4LCAweDE5OGJlZWE2LCAweGYyYmM1NWE1LAorICAgIDB4MWQ3ZTNlOWIsIDB4ZmZhMjI1ZTIsIDB4MTA2MDRlZGMsIDB4ZmI1N2Y1ZGYsIDB4MTQ5NTllZTEsCisgICAgMHhlNTllYzU2YywgMHgwYTVjYWU1MiwgMHhlMTZiMTU1MSwgMHgwZWE5N2U2ZiwgMHhlYzc1NjUxNiwKKyAgICAweDAzYjcwZTI4LCAweGU4ODBiNTJiLCAweDA3NDJkZTE1LCAweGU2MDUwOTAxLCAweDA5Yzc2MjNmLAorICAgIDB4ZTJmMGQ5M2MsIDB4MGQzMmIyMDIsIDB4ZWZlZWE5N2IsIDB4MDAyY2MyNDUsIDB4ZWIxYjc5NDYsCisgICAgMHgwNGQ5MTI3OCwgMHhmNWQyNDlmNSwgMHgxYTEwMjJjYiwgMHhmMTI3OTljOCwgMHgxZWU1ZjJmNiwKKyAgICAweGZjMzllOThmLCAweDEzZmI4MmIxLCAweGY4Y2MzOWIyLCAweDE3MGU1MjhjLCAweGMxYWI4OGU5LAorICAgIDB4MmU2OWUzZDcsIDB4YzU1ZTU4ZDQsIDB4MmE5YzMzZWEsIDB4Yzg0MDI4OTMsIDB4Mjc4MjQzYWQsCisgICAgMHhjY2I1ZjhhZSwgMHgyMzc3OTM5MCwgMHhkMjdjYzgxZCwgMHgzZGJlYTMyMywgMHhkNjg5MTgyMCwKKyAgICAweDM5NGI3MzFlLCAweGRiOTc2ODY3LCAweDM0NTUwMzU5LCAweGRmNjJiODVhLCAweDMwYTBkMzY0LAorICAgIDB4YTk1ODBhZDEsIDB4NDY5YTYxZWYsIDB4YWRhZGRhZWMsIDB4NDI2ZmIxZDIsIDB4YTBiM2FhYWIsCisgICAgMHg0ZjcxYzE5NSwgMHhhNDQ2N2E5NiwgMHg0Yjg0MTFhOCwgMHhiYThmNGEyNSwgMHg1NTRkMjExYiwKKyAgICAweGJlN2E5YTE4LCAweDUxYjhmMTI2LCAweGIzNjRlYTVmLCAweDVjYTY4MTYxLCAweGI3OTEzYTYyLAorICAgIDB4NTg1MzUxNWMsIDB4OGVmNjhiMzksIDB4NjEzNGUwMDcsIDB4OGEwMzViMDQsIDB4NjVjMTMwM2EsCisgICAgMHg4NzFkMmI0MywgMHg2OGRmNDA3ZCwgMHg4M2U4ZmI3ZSwgMHg2YzJhOTA0MCwgMHg5ZDIxY2JjZCwKKyAgICAweDcyZTNhMGYzLCAweDk5ZDQxYmYwLCAweDc2MTY3MGNlLCAweDk0Y2E2YmI3LCAweDdiMDgwMDg5LAorICAgIDB4OTAzZmJiOGEsIDB4N2ZmZGQwYjQsIDB4NzhiZjBlYTEsIDB4OTc3ZDY1OWYsIDB4N2M0YWRlOWMsCisgICAgMHg5Mzg4YjVhMiwgMHg3MTU0YWVkYiwgMHg5ZTk2YzVlNSwgMHg3NWExN2VlNiwgMHg5YTYzMTVkOCwKKyAgICAweDZiNjg0ZTU1LCAweDg0YWEyNTZiLCAweDZmOWQ5ZTY4LCAweDgwNWZmNTU2LCAweDYyODNlZTJmLAorICAgIDB4OGQ0MTg1MTEsIDB4NjY3NjNlMTIsIDB4ODliNDU1MmMsIDB4NWYxMThmNDksIDB4YjBkM2U0NzcsCisgICAgMHg1YmU0NWY3NCwgMHhiNDI2MzQ0YSwgMHg1NmZhMmYzMywgMHhiOTM4NDQwZCwgMHg1MjBmZmYwZSwKKyAgICAweGJkY2Q5NDMwLCAweDRjYzZjZmJkLCAweGEzMDRhNDgzLCAweDQ4MzMxZjgwLCAweGE3ZjE3NGJlLAorICAgIDB4NDUyZDZmYzcsIDB4YWFlZjA0ZjksIDB4NDFkOGJmZmEsIDB4YWUxYWQ0YzQsIDB4MzdlMjBkNzEsCisgICAgMHhkODIwNjY0ZiwgMHgzMzE3ZGQ0YywgMHhkY2Q1YjY3MiwgMHgzZTA5YWQwYiwgMHhkMWNiYzYzNSwKKyAgICAweDNhZmM3ZDM2LCAweGQ1M2UxNjA4LCAweDI0MzU0ZDg1LCAweGNiZjcyNmJiLCAweDIwYzA5ZGI4LAorICAgIDB4Y2YwMmY2ODYsIDB4MmRkZWVkZmYsIDB4YzIxYzg2YzEsIDB4MjkyYjNkYzIsIDB4YzZlOTU2ZmMsCisgICAgMHgxMDRjOGM5OSwgMHhmZjhlZTdhNywgMHgxNGI5NWNhNCwgMHhmYjdiMzc5YSwgMHgxOWE3MmNlMywKKyAgICAweGY2NjU0N2RkLCAweDFkNTJmY2RlLCAweGYyOTA5N2UwLCAweDAzOWJjYzZkLCAweGVjNTlhNzUzLAorICAgIDB4MDc2ZTFjNTAsIDB4ZThhYzc3NmUsIDB4MGE3MDZjMTcsIDB4ZTViMjA3MjksIDB4MGU4NWJjMmEsCisgICAgMHhlMTQ3ZDcxNH0sCisgICB7MHgwMDAwMDAwMCwgMHgxNzdiMTQ0MywgMHgyZWY2Mjg4NiwgMHgzOThkM2NjNSwgMHg1ZGVjNTEwYywKKyAgICAweDRhOTc0NTRmLCAweDczMWE3OThhLCAweDY0NjE2ZGM5LCAweGJiZDhhMjE4LCAweGFjYTNiNjViLAorICAgIDB4OTUyZThhOWUsIDB4ODI1NTllZGQsIDB4ZTYzNGYzMTQsIDB4ZjE0ZmU3NTcsIDB4YzhjMmRiOTIsCisgICAgMHhkZmI5Y2ZkMSwgMHhhY2MwNDI3MSwgMHhiYmJiNTYzMiwgMHg4MjM2NmFmNywgMHg5NTRkN2ViNCwKKyAgICAweGYxMmMxMzdkLCAweGU2NTcwNzNlLCAweGRmZGEzYmZiLCAweGM4YTEyZmI4LCAweDE3MThlMDY5LAorICAgIDB4MDA2M2Y0MmEsIDB4MzllZWM4ZWYsIDB4MmU5NWRjYWMsIDB4NGFmNGIxNjUsIDB4NWQ4ZmE1MjYsCisgICAgMHg2NDAyOTllMywgMHg3Mzc5OGRhMCwgMHg4MmYxODJhMywgMHg5NThhOTZlMCwgMHhhYzA3YWEyNSwKKyAgICAweGJiN2NiZTY2LCAweGRmMWRkM2FmLCAweGM4NjZjN2VjLCAweGYxZWJmYjI5LCAweGU2OTBlZjZhLAorICAgIDB4MzkyOTIwYmIsIDB4MmU1MjM0ZjgsIDB4MTdkZjA4M2QsIDB4MDBhNDFjN2UsIDB4NjRjNTcxYjcsCisgICAgMHg3M2JlNjVmNCwgMHg0YTMzNTkzMSwgMHg1ZDQ4NGQ3MiwgMHgyZTMxYzBkMiwgMHgzOTRhZDQ5MSwKKyAgICAweDAwYzdlODU0LCAweDE3YmNmYzE3LCAweDczZGQ5MWRlLCAweDY0YTY4NTlkLCAweDVkMmJiOTU4LAorICAgIDB4NGE1MGFkMWIsIDB4OTVlOTYyY2EsIDB4ODI5Mjc2ODksIDB4YmIxZjRhNGMsIDB4YWM2NDVlMGYsCisgICAgMHhjODA1MzNjNiwgMHhkZjdlMjc4NSwgMHhlNmYzMWI0MCwgMHhmMTg4MGYwMywgMHhkZTkyMDMwNywKKyAgICAweGM5ZTkxNzQ0LCAweGYwNjQyYjgxLCAweGU3MWYzZmMyLCAweDgzN2U1MjBiLCAweDk0MDU0NjQ4LAorICAgIDB4YWQ4ODdhOGQsIDB4YmFmMzZlY2UsIDB4NjU0YWExMWYsIDB4NzIzMWI1NWMsIDB4NGJiYzg5OTksCisgICAgMHg1Y2M3OWRkYSwgMHgzOGE2ZjAxMywgMHgyZmRkZTQ1MCwgMHgxNjUwZDg5NSwgMHgwMTJiY2NkNiwKKyAgICAweDcyNTI0MTc2LCAweDY1Mjk1NTM1LCAweDVjYTQ2OWYwLCAweDRiZGY3ZGIzLCAweDJmYmUxMDdhLAorICAgIDB4MzhjNTA0MzksIDB4MDE0ODM4ZmMsIDB4MTYzMzJjYmYsIDB4Yzk4YWUzNmUsIDB4ZGVmMWY3MmQsCisgICAgMHhlNzdjY2JlOCwgMHhmMDA3ZGZhYiwgMHg5NDY2YjI2MiwgMHg4MzFkYTYyMSwgMHhiYTkwOWFlNCwKKyAgICAweGFkZWI4ZWE3LCAweDVjNjM4MWE0LCAweDRiMTg5NWU3LCAweDcyOTVhOTIyLCAweDY1ZWViZDYxLAorICAgIDB4MDE4ZmQwYTgsIDB4MTZmNGM0ZWIsIDB4MmY3OWY4MmUsIDB4MzgwMmVjNmQsIDB4ZTdiYjIzYmMsCisgICAgMHhmMGMwMzdmZiwgMHhjOTRkMGIzYSwgMHhkZTM2MWY3OSwgMHhiYTU3NzJiMCwgMHhhZDJjNjZmMywKKyAgICAweDk0YTE1YTM2LCAweDgzZGE0ZTc1LCAweGYwYTNjM2Q1LCAweGU3ZDhkNzk2LCAweGRlNTVlYjUzLAorICAgIDB4YzkyZWZmMTAsIDB4YWQ0ZjkyZDksIDB4YmEzNDg2OWEsIDB4ODNiOWJhNWYsIDB4OTRjMmFlMWMsCisgICAgMHg0YjdiNjFjZCwgMHg1YzAwNzU4ZSwgMHg2NThkNDk0YiwgMHg3MmY2NWQwOCwgMHgxNjk3MzBjMSwKKyAgICAweDAxZWMyNDgyLCAweDM4NjExODQ3LCAweDJmMWEwYzA0LCAweDY2NTUwMDRmLCAweDcxMmUxNDBjLAorICAgIDB4NDhhMzI4YzksIDB4NWZkODNjOGEsIDB4M2JiOTUxNDMsIDB4MmNjMjQ1MDAsIDB4MTU0Zjc5YzUsCisgICAgMHgwMjM0NmQ4NiwgMHhkZDhkYTI1NywgMHhjYWY2YjYxNCwgMHhmMzdiOGFkMSwgMHhlNDAwOWU5MiwKKyAgICAweDgwNjFmMzViLCAweDk3MWFlNzE4LCAweGFlOTdkYmRkLCAweGI5ZWNjZjllLCAweGNhOTU0MjNlLAorICAgIDB4ZGRlZTU2N2QsIDB4ZTQ2MzZhYjgsIDB4ZjMxODdlZmIsIDB4OTc3OTEzMzIsIDB4ODAwMjA3NzEsCisgICAgMHhiOThmM2JiNCwgMHhhZWY0MmZmNywgMHg3MTRkZTAyNiwgMHg2NjM2ZjQ2NSwgMHg1ZmJiYzhhMCwKKyAgICAweDQ4YzBkY2UzLCAweDJjYTFiMTJhLCAweDNiZGFhNTY5LCAweDAyNTc5OWFjLCAweDE1MmM4ZGVmLAorICAgIDB4ZTRhNDgyZWMsIDB4ZjNkZjk2YWYsIDB4Y2E1MmFhNmEsIDB4ZGQyOWJlMjksIDB4Yjk0OGQzZTAsCisgICAgMHhhZTMzYzdhMywgMHg5N2JlZmI2NiwgMHg4MGM1ZWYyNSwgMHg1ZjdjMjBmNCwgMHg0ODA3MzRiNywKKyAgICAweDcxOGEwODcyLCAweDY2ZjExYzMxLCAweDAyOTA3MWY4LCAweDE1ZWI2NWJiLCAweDJjNjY1OTdlLAorICAgIDB4M2IxZDRkM2QsIDB4NDg2NGMwOWQsIDB4NWYxZmQ0ZGUsIDB4NjY5MmU4MWIsIDB4NzFlOWZjNTgsCisgICAgMHgxNTg4OTE5MSwgMHgwMmYzODVkMiwgMHgzYjdlYjkxNywgMHgyYzA1YWQ1NCwgMHhmM2JjNjI4NSwKKyAgICAweGU0Yzc3NmM2LCAweGRkNGE0YTAzLCAweGNhMzE1ZTQwLCAweGFlNTAzMzg5LCAweGI5MmIyN2NhLAorICAgIDB4ODBhNjFiMGYsIDB4OTdkZDBmNGMsIDB4YjhjNzAzNDgsIDB4YWZiYzE3MGIsIDB4OTYzMTJiY2UsCisgICAgMHg4MTRhM2Y4ZCwgMHhlNTJiNTI0NCwgMHhmMjUwNDYwNywgMHhjYmRkN2FjMiwgMHhkY2E2NmU4MSwKKyAgICAweDAzMWZhMTUwLCAweDE0NjRiNTEzLCAweDJkZTk4OWQ2LCAweDNhOTI5ZDk1LCAweDVlZjNmMDVjLAorICAgIDB4NDk4OGU0MWYsIDB4NzAwNWQ4ZGEsIDB4Njc3ZWNjOTksIDB4MTQwNzQxMzksIDB4MDM3YzU1N2EsCisgICAgMHgzYWYxNjliZiwgMHgyZDhhN2RmYywgMHg0OWViMTAzNSwgMHg1ZTkwMDQ3NiwgMHg2NzFkMzhiMywKKyAgICAweDcwNjYyY2YwLCAweGFmZGZlMzIxLCAweGI4YTRmNzYyLCAweDgxMjljYmE3LCAweDk2NTJkZmU0LAorICAgIDB4ZjIzM2IyMmQsIDB4ZTU0OGE2NmUsIDB4ZGNjNTlhYWIsIDB4Y2JiZThlZTgsIDB4M2EzNjgxZWIsCisgICAgMHgyZDRkOTVhOCwgMHgxNGMwYTk2ZCwgMHgwM2JiYmQyZSwgMHg2N2RhZDBlNywgMHg3MGExYzRhNCwKKyAgICAweDQ5MmNmODYxLCAweDVlNTdlYzIyLCAweDgxZWUyM2YzLCAweDk2OTUzN2IwLCAweGFmMTgwYjc1LAorICAgIDB4Yjg2MzFmMzYsIDB4ZGMwMjcyZmYsIDB4Y2I3OTY2YmMsIDB4ZjJmNDVhNzksIDB4ZTU4ZjRlM2EsCisgICAgMHg5NmY2YzM5YSwgMHg4MThkZDdkOSwgMHhiODAwZWIxYywgMHhhZjdiZmY1ZiwgMHhjYjFhOTI5NiwKKyAgICAweGRjNjE4NmQ1LCAweGU1ZWNiYTEwLCAweGYyOTdhZTUzLCAweDJkMmU2MTgyLCAweDNhNTU3NWMxLAorICAgIDB4MDNkODQ5MDQsIDB4MTRhMzVkNDcsIDB4NzBjMjMwOGUsIDB4NjdiOTI0Y2QsIDB4NWUzNDE4MDgsCisgICAgMHg0OTRmMGM0Yn19OworCitsb2NhbCBjb25zdCB6X3dvcmRfdCBGQVIgY3JjX2JyYWlkX2JpZ190YWJsZVtdWzI1Nl0gPSB7CisgICB7MHgwMDAwMDAwMDAwMDAwMDAwLCAweDQzMTQ3YjE3MDAwMDAwMDAsIDB4ODYyOGY2MmUwMDAwMDAwMCwKKyAgICAweGM1M2M4ZDM5MDAwMDAwMDAsIDB4MGM1MWVjNWQwMDAwMDAwMCwgMHg0ZjQ1OTc0YTAwMDAwMDAwLAorICAgIDB4OGE3OTFhNzMwMDAwMDAwMCwgMHhjOTZkNjE2NDAwMDAwMDAwLCAweDE4YTJkOGJiMDAwMDAwMDAsCisgICAgMHg1YmI2YTNhYzAwMDAwMDAwLCAweDllOGEyZTk1MDAwMDAwMDAsIDB4ZGQ5ZTU1ODIwMDAwMDAwMCwKKyAgICAweDE0ZjMzNGU2MDAwMDAwMDAsIDB4NTdlNzRmZjEwMDAwMDAwMCwgMHg5MmRiYzJjODAwMDAwMDAwLAorICAgIDB4ZDFjZmI5ZGYwMDAwMDAwMCwgMHg3MTQyYzBhYzAwMDAwMDAwLCAweDMyNTZiYmJiMDAwMDAwMDAsCisgICAgMHhmNzZhMzY4MjAwMDAwMDAwLCAweGI0N2U0ZDk1MDAwMDAwMDAsIDB4N2QxMzJjZjEwMDAwMDAwMCwKKyAgICAweDNlMDc1N2U2MDAwMDAwMDAsIDB4ZmIzYmRhZGYwMDAwMDAwMCwgMHhiODJmYTFjODAwMDAwMDAwLAorICAgIDB4NjllMDE4MTcwMDAwMDAwMCwgMHgyYWY0NjMwMDAwMDAwMDAwLCAweGVmYzhlZTM5MDAwMDAwMDAsCisgICAgMHhhY2RjOTUyZTAwMDAwMDAwLCAweDY1YjFmNDRhMDAwMDAwMDAsIDB4MjZhNThmNWQwMDAwMDAwMCwKKyAgICAweGUzOTkwMjY0MDAwMDAwMDAsIDB4YTA4ZDc5NzMwMDAwMDAwMCwgMHhhMzgyZjE4MjAwMDAwMDAwLAorICAgIDB4ZTA5NjhhOTUwMDAwMDAwMCwgMHgyNWFhMDdhYzAwMDAwMDAwLCAweDY2YmU3Y2JiMDAwMDAwMDAsCisgICAgMHhhZmQzMWRkZjAwMDAwMDAwLCAweGVjYzc2NmM4MDAwMDAwMDAsIDB4MjlmYmViZjEwMDAwMDAwMCwKKyAgICAweDZhZWY5MGU2MDAwMDAwMDAsIDB4YmIyMDI5MzkwMDAwMDAwMCwgMHhmODM0NTIyZTAwMDAwMDAwLAorICAgIDB4M2QwOGRmMTcwMDAwMDAwMCwgMHg3ZTFjYTQwMDAwMDAwMDAwLCAweGI3NzFjNTY0MDAwMDAwMDAsCisgICAgMHhmNDY1YmU3MzAwMDAwMDAwLCAweDMxNTkzMzRhMDAwMDAwMDAsIDB4NzI0ZDQ4NWQwMDAwMDAwMCwKKyAgICAweGQyYzAzMTJlMDAwMDAwMDAsIDB4OTFkNDRhMzkwMDAwMDAwMCwgMHg1NGU4YzcwMDAwMDAwMDAwLAorICAgIDB4MTdmY2JjMTcwMDAwMDAwMCwgMHhkZTkxZGQ3MzAwMDAwMDAwLCAweDlkODVhNjY0MDAwMDAwMDAsCisgICAgMHg1OGI5MmI1ZDAwMDAwMDAwLCAweDFiYWQ1MDRhMDAwMDAwMDAsIDB4Y2E2MmU5OTUwMDAwMDAwMCwKKyAgICAweDg5NzY5MjgyMDAwMDAwMDAsIDB4NGM0YTFmYmIwMDAwMDAwMCwgMHgwZjVlNjRhYzAwMDAwMDAwLAorICAgIDB4YzYzMzA1YzgwMDAwMDAwMCwgMHg4NTI3N2VkZjAwMDAwMDAwLCAweDQwMWJmM2U2MDAwMDAwMDAsCisgICAgMHgwMzBmODhmMTAwMDAwMDAwLCAweDA3MDM5MmRlMDAwMDAwMDAsIDB4NDQxN2U5YzkwMDAwMDAwMCwKKyAgICAweDgxMmI2NGYwMDAwMDAwMDAsIDB4YzIzZjFmZTcwMDAwMDAwMCwgMHgwYjUyN2U4MzAwMDAwMDAwLAorICAgIDB4NDg0NjA1OTQwMDAwMDAwMCwgMHg4ZDdhODhhZDAwMDAwMDAwLCAweGNlNmVmM2JhMDAwMDAwMDAsCisgICAgMHgxZmExNGE2NTAwMDAwMDAwLCAweDVjYjUzMTcyMDAwMDAwMDAsIDB4OTk4OWJjNGIwMDAwMDAwMCwKKyAgICAweGRhOWRjNzVjMDAwMDAwMDAsIDB4MTNmMGE2MzgwMDAwMDAwMCwgMHg1MGU0ZGQyZjAwMDAwMDAwLAorICAgIDB4OTVkODUwMTYwMDAwMDAwMCwgMHhkNmNjMmIwMTAwMDAwMDAwLCAweDc2NDE1MjcyMDAwMDAwMDAsCisgICAgMHgzNTU1Mjk2NTAwMDAwMDAwLCAweGYwNjlhNDVjMDAwMDAwMDAsIDB4YjM3ZGRmNGIwMDAwMDAwMCwKKyAgICAweDdhMTBiZTJmMDAwMDAwMDAsIDB4MzkwNGM1MzgwMDAwMDAwMCwgMHhmYzM4NDgwMTAwMDAwMDAwLAorICAgIDB4YmYyYzMzMTYwMDAwMDAwMCwgMHg2ZWUzOGFjOTAwMDAwMDAwLCAweDJkZjdmMWRlMDAwMDAwMDAsCisgICAgMHhlOGNiN2NlNzAwMDAwMDAwLCAweGFiZGYwN2YwMDAwMDAwMDAsIDB4NjJiMjY2OTQwMDAwMDAwMCwKKyAgICAweDIxYTYxZDgzMDAwMDAwMDAsIDB4ZTQ5YTkwYmEwMDAwMDAwMCwgMHhhNzhlZWJhZDAwMDAwMDAwLAorICAgIDB4YTQ4MTYzNWMwMDAwMDAwMCwgMHhlNzk1MTg0YjAwMDAwMDAwLCAweDIyYTk5NTcyMDAwMDAwMDAsCisgICAgMHg2MWJkZWU2NTAwMDAwMDAwLCAweGE4ZDA4ZjAxMDAwMDAwMDAsIDB4ZWJjNGY0MTYwMDAwMDAwMCwKKyAgICAweDJlZjg3OTJmMDAwMDAwMDAsIDB4NmRlYzAyMzgwMDAwMDAwMCwgMHhiYzIzYmJlNzAwMDAwMDAwLAorICAgIDB4ZmYzN2MwZjAwMDAwMDAwMCwgMHgzYTBiNGRjOTAwMDAwMDAwLCAweDc5MWYzNmRlMDAwMDAwMDAsCisgICAgMHhiMDcyNTdiYTAwMDAwMDAwLCAweGYzNjYyY2FkMDAwMDAwMDAsIDB4MzY1YWExOTQwMDAwMDAwMCwKKyAgICAweDc1NGVkYTgzMDAwMDAwMDAsIDB4ZDVjM2EzZjAwMDAwMDAwMCwgMHg5NmQ3ZDhlNzAwMDAwMDAwLAorICAgIDB4NTNlYjU1ZGUwMDAwMDAwMCwgMHgxMGZmMmVjOTAwMDAwMDAwLCAweGQ5OTI0ZmFkMDAwMDAwMDAsCisgICAgMHg5YTg2MzRiYTAwMDAwMDAwLCAweDVmYmFiOTgzMDAwMDAwMDAsIDB4MWNhZWMyOTQwMDAwMDAwMCwKKyAgICAweGNkNjE3YjRiMDAwMDAwMDAsIDB4OGU3NTAwNWMwMDAwMDAwMCwgMHg0YjQ5OGQ2NTAwMDAwMDAwLAorICAgIDB4MDg1ZGY2NzIwMDAwMDAwMCwgMHhjMTMwOTcxNjAwMDAwMDAwLCAweDgyMjRlYzAxMDAwMDAwMDAsCisgICAgMHg0NzE4NjEzODAwMDAwMDAwLCAweDA0MGMxYTJmMDAwMDAwMDAsIDB4NGYwMDU1NjYwMDAwMDAwMCwKKyAgICAweDBjMTQyZTcxMDAwMDAwMDAsIDB4YzkyOGEzNDgwMDAwMDAwMCwgMHg4YTNjZDg1ZjAwMDAwMDAwLAorICAgIDB4NDM1MWI5M2IwMDAwMDAwMCwgMHgwMDQ1YzIyYzAwMDAwMDAwLCAweGM1Nzk0ZjE1MDAwMDAwMDAsCisgICAgMHg4NjZkMzQwMjAwMDAwMDAwLCAweDU3YTI4ZGRkMDAwMDAwMDAsIDB4MTRiNmY2Y2EwMDAwMDAwMCwKKyAgICAweGQxOGE3YmYzMDAwMDAwMDAsIDB4OTI5ZTAwZTQwMDAwMDAwMCwgMHg1YmYzNjE4MDAwMDAwMDAwLAorICAgIDB4MThlNzFhOTcwMDAwMDAwMCwgMHhkZGRiOTdhZTAwMDAwMDAwLCAweDllY2ZlY2I5MDAwMDAwMDAsCisgICAgMHgzZTQyOTVjYTAwMDAwMDAwLCAweDdkNTZlZWRkMDAwMDAwMDAsIDB4Yjg2YTYzZTQwMDAwMDAwMCwKKyAgICAweGZiN2UxOGYzMDAwMDAwMDAsIDB4MzIxMzc5OTcwMDAwMDAwMCwgMHg3MTA3MDI4MDAwMDAwMDAwLAorICAgIDB4YjQzYjhmYjkwMDAwMDAwMCwgMHhmNzJmZjRhZTAwMDAwMDAwLCAweDI2ZTA0ZDcxMDAwMDAwMDAsCisgICAgMHg2NWY0MzY2NjAwMDAwMDAwLCAweGEwYzhiYjVmMDAwMDAwMDAsIDB4ZTNkY2MwNDgwMDAwMDAwMCwKKyAgICAweDJhYjFhMTJjMDAwMDAwMDAsIDB4NjlhNWRhM2IwMDAwMDAwMCwgMHhhYzk5NTcwMjAwMDAwMDAwLAorICAgIDB4ZWY4ZDJjMTUwMDAwMDAwMCwgMHhlYzgyYTRlNDAwMDAwMDAwLCAweGFmOTZkZmYzMDAwMDAwMDAsCisgICAgMHg2YWFhNTJjYTAwMDAwMDAwLCAweDI5YmUyOWRkMDAwMDAwMDAsIDB4ZTBkMzQ4YjkwMDAwMDAwMCwKKyAgICAweGEzYzczM2FlMDAwMDAwMDAsIDB4NjZmYmJlOTcwMDAwMDAwMCwgMHgyNWVmYzU4MDAwMDAwMDAwLAorICAgIDB4ZjQyMDdjNWYwMDAwMDAwMCwgMHhiNzM0MDc0ODAwMDAwMDAwLCAweDcyMDg4YTcxMDAwMDAwMDAsCisgICAgMHgzMTFjZjE2NjAwMDAwMDAwLCAweGY4NzE5MDAyMDAwMDAwMDAsIDB4YmI2NWViMTUwMDAwMDAwMCwKKyAgICAweDdlNTk2NjJjMDAwMDAwMDAsIDB4M2Q0ZDFkM2IwMDAwMDAwMCwgMHg5ZGMwNjQ0ODAwMDAwMDAwLAorICAgIDB4ZGVkNDFmNWYwMDAwMDAwMCwgMHgxYmU4OTI2NjAwMDAwMDAwLCAweDU4ZmNlOTcxMDAwMDAwMDAsCisgICAgMHg5MTkxODgxNTAwMDAwMDAwLCAweGQyODVmMzAyMDAwMDAwMDAsIDB4MTdiOTdlM2IwMDAwMDAwMCwKKyAgICAweDU0YWQwNTJjMDAwMDAwMDAsIDB4ODU2MmJjZjMwMDAwMDAwMCwgMHhjNjc2YzdlNDAwMDAwMDAwLAorICAgIDB4MDM0YTRhZGQwMDAwMDAwMCwgMHg0MDVlMzFjYTAwMDAwMDAwLCAweDg5MzM1MGFlMDAwMDAwMDAsCisgICAgMHhjYTI3MmJiOTAwMDAwMDAwLCAweDBmMWJhNjgwMDAwMDAwMDAsIDB4NGMwZmRkOTcwMDAwMDAwMCwKKyAgICAweDQ4MDNjN2I4MDAwMDAwMDAsIDB4MGIxN2JjYWYwMDAwMDAwMCwgMHhjZTJiMzE5NjAwMDAwMDAwLAorICAgIDB4OGQzZjRhODEwMDAwMDAwMCwgMHg0NDUyMmJlNTAwMDAwMDAwLCAweDA3NDY1MGYyMDAwMDAwMDAsCisgICAgMHhjMjdhZGRjYjAwMDAwMDAwLCAweDgxNmVhNmRjMDAwMDAwMDAsIDB4NTBhMTFmMDMwMDAwMDAwMCwKKyAgICAweDEzYjU2NDE0MDAwMDAwMDAsIDB4ZDY4OWU5MmQwMDAwMDAwMCwgMHg5NTlkOTIzYTAwMDAwMDAwLAorICAgIDB4NWNmMGYzNWUwMDAwMDAwMCwgMHgxZmU0ODg0OTAwMDAwMDAwLCAweGRhZDgwNTcwMDAwMDAwMDAsCisgICAgMHg5OWNjN2U2NzAwMDAwMDAwLCAweDM5NDEwNzE0MDAwMDAwMDAsIDB4N2E1NTdjMDMwMDAwMDAwMCwKKyAgICAweGJmNjlmMTNhMDAwMDAwMDAsIDB4ZmM3ZDhhMmQwMDAwMDAwMCwgMHgzNTEwZWI0OTAwMDAwMDAwLAorICAgIDB4NzYwNDkwNWUwMDAwMDAwMCwgMHhiMzM4MWQ2NzAwMDAwMDAwLCAweGYwMmM2NjcwMDAwMDAwMDAsCisgICAgMHgyMWUzZGZhZjAwMDAwMDAwLCAweDYyZjdhNGI4MDAwMDAwMDAsIDB4YTdjYjI5ODEwMDAwMDAwMCwKKyAgICAweGU0ZGY1Mjk2MDAwMDAwMDAsIDB4MmRiMjMzZjIwMDAwMDAwMCwgMHg2ZWE2NDhlNTAwMDAwMDAwLAorICAgIDB4YWI5YWM1ZGMwMDAwMDAwMCwgMHhlODhlYmVjYjAwMDAwMDAwLCAweGViODEzNjNhMDAwMDAwMDAsCisgICAgMHhhODk1NGQyZDAwMDAwMDAwLCAweDZkYTljMDE0MDAwMDAwMDAsIDB4MmViZGJiMDMwMDAwMDAwMCwKKyAgICAweGU3ZDBkYTY3MDAwMDAwMDAsIDB4YTRjNGExNzAwMDAwMDAwMCwgMHg2MWY4MmM0OTAwMDAwMDAwLAorICAgIDB4MjJlYzU3NWUwMDAwMDAwMCwgMHhmMzIzZWU4MTAwMDAwMDAwLCAweGIwMzc5NTk2MDAwMDAwMDAsCisgICAgMHg3NTBiMThhZjAwMDAwMDAwLCAweDM2MWY2M2I4MDAwMDAwMDAsIDB4ZmY3MjAyZGMwMDAwMDAwMCwKKyAgICAweGJjNjY3OWNiMDAwMDAwMDAsIDB4Nzk1YWY0ZjIwMDAwMDAwMCwgMHgzYTRlOGZlNTAwMDAwMDAwLAorICAgIDB4OWFjM2Y2OTYwMDAwMDAwMCwgMHhkOWQ3OGQ4MTAwMDAwMDAwLCAweDFjZWIwMGI4MDAwMDAwMDAsCisgICAgMHg1ZmZmN2JhZjAwMDAwMDAwLCAweDk2OTIxYWNiMDAwMDAwMDAsIDB4ZDU4NjYxZGMwMDAwMDAwMCwKKyAgICAweDEwYmFlY2U1MDAwMDAwMDAsIDB4NTNhZTk3ZjIwMDAwMDAwMCwgMHg4MjYxMmUyZDAwMDAwMDAwLAorICAgIDB4YzE3NTU1M2EwMDAwMDAwMCwgMHgwNDQ5ZDgwMzAwMDAwMDAwLCAweDQ3NWRhMzE0MDAwMDAwMDAsCisgICAgMHg4ZTMwYzI3MDAwMDAwMDAwLCAweGNkMjRiOTY3MDAwMDAwMDAsIDB4MDgxODM0NWUwMDAwMDAwMCwKKyAgICAweDRiMGM0ZjQ5MDAwMDAwMDB9LAorICAgezB4MDAwMDAwMDAwMDAwMDAwMCwgMHgzZTZiYzJlZjAwMDAwMDAwLCAweDNkZDBmNTA0MDAwMDAwMDAsCisgICAgMHgwM2JiMzdlYjAwMDAwMDAwLCAweDdhYTBlYjA5MDAwMDAwMDAsIDB4NDRjYjI5ZTYwMDAwMDAwMCwKKyAgICAweDQ3NzAxZTBkMDAwMDAwMDAsIDB4NzkxYmRjZTIwMDAwMDAwMCwgMHhmNDQwZDcxMzAwMDAwMDAwLAorICAgIDB4Y2EyYjE1ZmMwMDAwMDAwMCwgMHhjOTkwMjIxNzAwMDAwMDAwLCAweGY3ZmJlMGY4MDAwMDAwMDAsCisgICAgMHg4ZWUwM2MxYTAwMDAwMDAwLCAweGIwOGJmZWY1MDAwMDAwMDAsIDB4YjMzMGM5MWUwMDAwMDAwMCwKKyAgICAweDhkNWIwYmYxMDAwMDAwMDAsIDB4ZTg4MWFlMjcwMDAwMDAwMCwgMHhkNmVhNmNjODAwMDAwMDAwLAorICAgIDB4ZDU1MTViMjMwMDAwMDAwMCwgMHhlYjNhOTljYzAwMDAwMDAwLCAweDkyMjE0NTJlMDAwMDAwMDAsCisgICAgMHhhYzRhODdjMTAwMDAwMDAwLCAweGFmZjFiMDJhMDAwMDAwMDAsIDB4OTE5YTcyYzUwMDAwMDAwMCwKKyAgICAweDFjYzE3OTM0MDAwMDAwMDAsIDB4MjJhYWJiZGIwMDAwMDAwMCwgMHgyMTExOGMzMDAwMDAwMDAwLAorICAgIDB4MWY3YTRlZGYwMDAwMDAwMCwgMHg2NjYxOTIzZDAwMDAwMDAwLCAweDU4MGE1MGQyMDAwMDAwMDAsCisgICAgMHg1YmIxNjczOTAwMDAwMDAwLCAweDY1ZGFhNWQ2MDAwMDAwMDAsIDB4ZDAwMzVkNGYwMDAwMDAwMCwKKyAgICAweGVlNjg5ZmEwMDAwMDAwMDAsIDB4ZWRkM2E4NGIwMDAwMDAwMCwgMHhkM2I4NmFhNDAwMDAwMDAwLAorICAgIDB4YWFhM2I2NDYwMDAwMDAwMCwgMHg5NGM4NzRhOTAwMDAwMDAwLCAweDk3NzM0MzQyMDAwMDAwMDAsCisgICAgMHhhOTE4ODFhZDAwMDAwMDAwLCAweDI0NDM4YTVjMDAwMDAwMDAsIDB4MWEyODQ4YjMwMDAwMDAwMCwKKyAgICAweDE5OTM3ZjU4MDAwMDAwMDAsIDB4MjdmOGJkYjcwMDAwMDAwMCwgMHg1ZWUzNjE1NTAwMDAwMDAwLAorICAgIDB4NjA4OGEzYmEwMDAwMDAwMCwgMHg2MzMzOTQ1MTAwMDAwMDAwLCAweDVkNTg1NmJlMDAwMDAwMDAsCisgICAgMHgzODgyZjM2ODAwMDAwMDAwLCAweDA2ZTkzMTg3MDAwMDAwMDAsIDB4MDU1MjA2NmMwMDAwMDAwMCwKKyAgICAweDNiMzljNDgzMDAwMDAwMDAsIDB4NDIyMjE4NjEwMDAwMDAwMCwgMHg3YzQ5ZGE4ZTAwMDAwMDAwLAorICAgIDB4N2ZmMmVkNjUwMDAwMDAwMCwgMHg0MTk5MmY4YTAwMDAwMDAwLCAweGNjYzIyNDdiMDAwMDAwMDAsCisgICAgMHhmMmE5ZTY5NDAwMDAwMDAwLCAweGYxMTJkMTdmMDAwMDAwMDAsIDB4Y2Y3OTEzOTAwMDAwMDAwMCwKKyAgICAweGI2NjJjZjcyMDAwMDAwMDAsIDB4ODgwOTBkOWQwMDAwMDAwMCwgMHg4YmIyM2E3NjAwMDAwMDAwLAorICAgIDB4YjVkOWY4OTkwMDAwMDAwMCwgMHhhMDA3YmE5ZTAwMDAwMDAwLCAweDllNmM3ODcxMDAwMDAwMDAsCisgICAgMHg5ZGQ3NGY5YTAwMDAwMDAwLCAweGEzYmM4ZDc1MDAwMDAwMDAsIDB4ZGFhNzUxOTcwMDAwMDAwMCwKKyAgICAweGU0Y2M5Mzc4MDAwMDAwMDAsIDB4ZTc3N2E0OTMwMDAwMDAwMCwgMHhkOTFjNjY3YzAwMDAwMDAwLAorICAgIDB4NTQ0NzZkOGQwMDAwMDAwMCwgMHg2YTJjYWY2MjAwMDAwMDAwLCAweDY5OTc5ODg5MDAwMDAwMDAsCisgICAgMHg1N2ZjNWE2NjAwMDAwMDAwLCAweDJlZTc4Njg0MDAwMDAwMDAsIDB4MTA4YzQ0NmIwMDAwMDAwMCwKKyAgICAweDEzMzc3MzgwMDAwMDAwMDAsIDB4MmQ1Y2IxNmYwMDAwMDAwMCwgMHg0ODg2MTRiOTAwMDAwMDAwLAorICAgIDB4NzZlZGQ2NTYwMDAwMDAwMCwgMHg3NTU2ZTFiZDAwMDAwMDAwLCAweDRiM2QyMzUyMDAwMDAwMDAsCisgICAgMHgzMjI2ZmZiMDAwMDAwMDAwLCAweDBjNGQzZDVmMDAwMDAwMDAsIDB4MGZmNjBhYjQwMDAwMDAwMCwKKyAgICAweDMxOWRjODViMDAwMDAwMDAsIDB4YmNjNmMzYWEwMDAwMDAwMCwgMHg4MmFkMDE0NTAwMDAwMDAwLAorICAgIDB4ODExNjM2YWUwMDAwMDAwMCwgMHhiZjdkZjQ0MTAwMDAwMDAwLCAweGM2NjYyOGEzMDAwMDAwMDAsCisgICAgMHhmODBkZWE0YzAwMDAwMDAwLCAweGZiYjZkZGE3MDAwMDAwMDAsIDB4YzVkZDFmNDgwMDAwMDAwMCwKKyAgICAweDcwMDRlN2QxMDAwMDAwMDAsIDB4NGU2ZjI1M2UwMDAwMDAwMCwgMHg0ZGQ0MTJkNTAwMDAwMDAwLAorICAgIDB4NzNiZmQwM2EwMDAwMDAwMCwgMHgwYWE0MGNkODAwMDAwMDAwLCAweDM0Y2ZjZTM3MDAwMDAwMDAsCisgICAgMHgzNzc0ZjlkYzAwMDAwMDAwLCAweDA5MWYzYjMzMDAwMDAwMDAsIDB4ODQ0NDMwYzIwMDAwMDAwMCwKKyAgICAweGJhMmZmMjJkMDAwMDAwMDAsIDB4Yjk5NGM1YzYwMDAwMDAwMCwgMHg4N2ZmMDcyOTAwMDAwMDAwLAorICAgIDB4ZmVlNGRiY2IwMDAwMDAwMCwgMHhjMDhmMTkyNDAwMDAwMDAwLCAweGMzMzQyZWNmMDAwMDAwMDAsCisgICAgMHhmZDVmZWMyMDAwMDAwMDAwLCAweDk4ODU0OWY2MDAwMDAwMDAsIDB4YTZlZThiMTkwMDAwMDAwMCwKKyAgICAweGE1NTViY2YyMDAwMDAwMDAsIDB4OWIzZTdlMWQwMDAwMDAwMCwgMHhlMjI1YTJmZjAwMDAwMDAwLAorICAgIDB4ZGM0ZTYwMTAwMDAwMDAwMCwgMHhkZmY1NTdmYjAwMDAwMDAwLCAweGUxOWU5NTE0MDAwMDAwMDAsCisgICAgMHg2Y2M1OWVlNTAwMDAwMDAwLCAweDUyYWU1YzBhMDAwMDAwMDAsIDB4NTExNTZiZTEwMDAwMDAwMCwKKyAgICAweDZmN2VhOTBlMDAwMDAwMDAsIDB4MTY2NTc1ZWMwMDAwMDAwMCwgMHgyODBlYjcwMzAwMDAwMDAwLAorICAgIDB4MmJiNTgwZTgwMDAwMDAwMCwgMHgxNWRlNDIwNzAwMDAwMDAwLCAweDAxMDkwNWU2MDAwMDAwMDAsCisgICAgMHgzZjYyYzcwOTAwMDAwMDAwLCAweDNjZDlmMGUyMDAwMDAwMDAsIDB4MDJiMjMyMGQwMDAwMDAwMCwKKyAgICAweDdiYTllZWVmMDAwMDAwMDAsIDB4NDVjMjJjMDAwMDAwMDAwMCwgMHg0Njc5MWJlYjAwMDAwMDAwLAorICAgIDB4NzgxMmQ5MDQwMDAwMDAwMCwgMHhmNTQ5ZDJmNTAwMDAwMDAwLCAweGNiMjIxMDFhMDAwMDAwMDAsCisgICAgMHhjODk5MjdmMTAwMDAwMDAwLCAweGY2ZjJlNTFlMDAwMDAwMDAsIDB4OGZlOTM5ZmMwMDAwMDAwMCwKKyAgICAweGIxODJmYjEzMDAwMDAwMDAsIDB4YjIzOWNjZjgwMDAwMDAwMCwgMHg4YzUyMGUxNzAwMDAwMDAwLAorICAgIDB4ZTk4OGFiYzEwMDAwMDAwMCwgMHhkN2UzNjkyZTAwMDAwMDAwLCAweGQ0NTg1ZWM1MDAwMDAwMDAsCisgICAgMHhlYTMzOWMyYTAwMDAwMDAwLCAweDkzMjg0MGM4MDAwMDAwMDAsIDB4YWQ0MzgyMjcwMDAwMDAwMCwKKyAgICAweGFlZjhiNWNjMDAwMDAwMDAsIDB4OTA5Mzc3MjMwMDAwMDAwMCwgMHgxZGM4N2NkMjAwMDAwMDAwLAorICAgIDB4MjNhM2JlM2QwMDAwMDAwMCwgMHgyMDE4ODlkNjAwMDAwMDAwLCAweDFlNzM0YjM5MDAwMDAwMDAsCisgICAgMHg2NzY4OTdkYjAwMDAwMDAwLCAweDU5MDM1NTM0MDAwMDAwMDAsIDB4NWFiODYyZGYwMDAwMDAwMCwKKyAgICAweDY0ZDNhMDMwMDAwMDAwMDAsIDB4ZDEwYTU4YTkwMDAwMDAwMCwgMHhlZjYxOWE0NjAwMDAwMDAwLAorICAgIDB4ZWNkYWFkYWQwMDAwMDAwMCwgMHhkMmIxNmY0MjAwMDAwMDAwLCAweGFiYWFiM2EwMDAwMDAwMDAsCisgICAgMHg5NWMxNzE0ZjAwMDAwMDAwLCAweDk2N2E0NmE0MDAwMDAwMDAsIDB4YTgxMTg0NGIwMDAwMDAwMCwKKyAgICAweDI1NGE4ZmJhMDAwMDAwMDAsIDB4MWIyMTRkNTUwMDAwMDAwMCwgMHgxODlhN2FiZTAwMDAwMDAwLAorICAgIDB4MjZmMWI4NTEwMDAwMDAwMCwgMHg1ZmVhNjRiMzAwMDAwMDAwLCAweDYxODFhNjVjMDAwMDAwMDAsCisgICAgMHg2MjNhOTFiNzAwMDAwMDAwLCAweDVjNTE1MzU4MDAwMDAwMDAsIDB4Mzk4YmY2OGUwMDAwMDAwMCwKKyAgICAweDA3ZTAzNDYxMDAwMDAwMDAsIDB4MDQ1YjAzOGEwMDAwMDAwMCwgMHgzYTMwYzE2NTAwMDAwMDAwLAorICAgIDB4NDMyYjFkODcwMDAwMDAwMCwgMHg3ZDQwZGY2ODAwMDAwMDAwLCAweDdlZmJlODgzMDAwMDAwMDAsCisgICAgMHg0MDkwMmE2YzAwMDAwMDAwLCAweGNkY2IyMTlkMDAwMDAwMDAsIDB4ZjNhMGUzNzIwMDAwMDAwMCwKKyAgICAweGYwMWJkNDk5MDAwMDAwMDAsIDB4Y2U3MDE2NzYwMDAwMDAwMCwgMHhiNzZiY2E5NDAwMDAwMDAwLAorICAgIDB4ODkwMDA4N2IwMDAwMDAwMCwgMHg4YWJiM2Y5MDAwMDAwMDAwLCAweGI0ZDBmZDdmMDAwMDAwMDAsCisgICAgMHhhMTBlYmY3ODAwMDAwMDAwLCAweDlmNjU3ZDk3MDAwMDAwMDAsIDB4OWNkZTRhN2MwMDAwMDAwMCwKKyAgICAweGEyYjU4ODkzMDAwMDAwMDAsIDB4ZGJhZTU0NzEwMDAwMDAwMCwgMHhlNWM1OTY5ZTAwMDAwMDAwLAorICAgIDB4ZTY3ZWExNzUwMDAwMDAwMCwgMHhkODE1NjM5YTAwMDAwMDAwLCAweDU1NGU2ODZiMDAwMDAwMDAsCisgICAgMHg2YjI1YWE4NDAwMDAwMDAwLCAweDY4OWU5ZDZmMDAwMDAwMDAsIDB4NTZmNTVmODAwMDAwMDAwMCwKKyAgICAweDJmZWU4MzYyMDAwMDAwMDAsIDB4MTE4NTQxOGQwMDAwMDAwMCwgMHgxMjNlNzY2NjAwMDAwMDAwLAorICAgIDB4MmM1NWI0ODkwMDAwMDAwMCwgMHg0OThmMTE1ZjAwMDAwMDAwLCAweDc3ZTRkM2IwMDAwMDAwMDAsCisgICAgMHg3NDVmZTQ1YjAwMDAwMDAwLCAweDRhMzQyNmI0MDAwMDAwMDAsIDB4MzMyZmZhNTYwMDAwMDAwMCwKKyAgICAweDBkNDQzOGI5MDAwMDAwMDAsIDB4MGVmZjBmNTIwMDAwMDAwMCwgMHgzMDk0Y2RiZDAwMDAwMDAwLAorICAgIDB4YmRjZmM2NGMwMDAwMDAwMCwgMHg4M2E0MDRhMzAwMDAwMDAwLCAweDgwMWYzMzQ4MDAwMDAwMDAsCisgICAgMHhiZTc0ZjFhNzAwMDAwMDAwLCAweGM3NmYyZDQ1MDAwMDAwMDAsIDB4ZjkwNGVmYWEwMDAwMDAwMCwKKyAgICAweGZhYmZkODQxMDAwMDAwMDAsIDB4YzRkNDFhYWUwMDAwMDAwMCwgMHg3MTBkZTIzNzAwMDAwMDAwLAorICAgIDB4NGY2NjIwZDgwMDAwMDAwMCwgMHg0Y2RkMTczMzAwMDAwMDAwLCAweDcyYjZkNWRjMDAwMDAwMDAsCisgICAgMHgwYmFkMDkzZTAwMDAwMDAwLCAweDM1YzZjYmQxMDAwMDAwMDAsIDB4MzY3ZGZjM2EwMDAwMDAwMCwKKyAgICAweDA4MTYzZWQ1MDAwMDAwMDAsIDB4ODU0ZDM1MjQwMDAwMDAwMCwgMHhiYjI2ZjdjYjAwMDAwMDAwLAorICAgIDB4Yjg5ZGMwMjAwMDAwMDAwMCwgMHg4NmY2MDJjZjAwMDAwMDAwLCAweGZmZWRkZTJkMDAwMDAwMDAsCisgICAgMHhjMTg2MWNjMjAwMDAwMDAwLCAweGMyM2QyYjI5MDAwMDAwMDAsIDB4ZmM1NmU5YzYwMDAwMDAwMCwKKyAgICAweDk5OGM0YzEwMDAwMDAwMDAsIDB4YTdlNzhlZmYwMDAwMDAwMCwgMHhhNDVjYjkxNDAwMDAwMDAwLAorICAgIDB4OWEzNzdiZmIwMDAwMDAwMCwgMHhlMzJjYTcxOTAwMDAwMDAwLCAweGRkNDc2NWY2MDAwMDAwMDAsCisgICAgMHhkZWZjNTIxZDAwMDAwMDAwLCAweGUwOTc5MGYyMDAwMDAwMDAsIDB4NmRjYzliMDMwMDAwMDAwMCwKKyAgICAweDUzYTc1OWVjMDAwMDAwMDAsIDB4NTAxYzZlMDcwMDAwMDAwMCwgMHg2ZTc3YWNlODAwMDAwMDAwLAorICAgIDB4MTc2YzcwMGEwMDAwMDAwMCwgMHgyOTA3YjJlNTAwMDAwMDAwLCAweDJhYmM4NTBlMDAwMDAwMDAsCisgICAgMHgxNGQ3NDdlMTAwMDAwMDAwfSwKKyAgIHsweDAwMDAwMDAwMDAwMDAwMDAsIDB4YzBkZjhlYzEwMDAwMDAwMCwgMHhjMWI5NmM1ODAwMDAwMDAwLAorICAgIDB4MDE2NmUyOTkwMDAwMDAwMCwgMHg4MjczZDliMDAwMDAwMDAwLCAweDQyYWM1NzcxMDAwMDAwMDAsCisgICAgMHg0M2NhYjVlODAwMDAwMDAwLCAweDgzMTUzYjI5MDAwMDAwMDAsIDB4NDVlMWMzYmEwMDAwMDAwMCwKKyAgICAweDg1M2U0ZDdiMDAwMDAwMDAsIDB4ODQ1OGFmZTIwMDAwMDAwMCwgMHg0NDg3MjEyMzAwMDAwMDAwLAorICAgIDB4Yzc5MjFhMGEwMDAwMDAwMCwgMHgwNzRkOTRjYjAwMDAwMDAwLCAweDA2MmI3NjUyMDAwMDAwMDAsCisgICAgMHhjNmY0Zjg5MzAwMDAwMDAwLCAweGNiYzRmNmFlMDAwMDAwMDAsIDB4MGIxYjc4NmYwMDAwMDAwMCwKKyAgICAweDBhN2Q5YWY2MDAwMDAwMDAsIDB4Y2FhMjE0MzcwMDAwMDAwMCwgMHg0OWI3MmYxZTAwMDAwMDAwLAorICAgIDB4ODk2OGExZGYwMDAwMDAwMCwgMHg4ODBlNDM0NjAwMDAwMDAwLCAweDQ4ZDFjZDg3MDAwMDAwMDAsCisgICAgMHg4ZTI1MzUxNDAwMDAwMDAwLCAweDRlZmFiYmQ1MDAwMDAwMDAsIDB4NGY5YzU5NGMwMDAwMDAwMCwKKyAgICAweDhmNDNkNzhkMDAwMDAwMDAsIDB4MGM1NmVjYTQwMDAwMDAwMCwgMHhjYzg5NjI2NTAwMDAwMDAwLAorICAgIDB4Y2RlZjgwZmMwMDAwMDAwMCwgMHgwZDMwMGUzZDAwMDAwMDAwLCAweGQ3OGY5Yzg2MDAwMDAwMDAsCisgICAgMHgxNzUwMTI0NzAwMDAwMDAwLCAweDE2MzZmMGRlMDAwMDAwMDAsIDB4ZDZlOTdlMWYwMDAwMDAwMCwKKyAgICAweDU1ZmM0NTM2MDAwMDAwMDAsIDB4OTUyM2NiZjcwMDAwMDAwMCwgMHg5NDQ1Mjk2ZTAwMDAwMDAwLAorICAgIDB4NTQ5YWE3YWYwMDAwMDAwMCwgMHg5MjZlNWYzYzAwMDAwMDAwLCAweDUyYjFkMWZkMDAwMDAwMDAsCisgICAgMHg1M2Q3MzM2NDAwMDAwMDAwLCAweDkzMDhiZGE1MDAwMDAwMDAsIDB4MTAxZDg2OGMwMDAwMDAwMCwKKyAgICAweGQwYzIwODRkMDAwMDAwMDAsIDB4ZDFhNGVhZDQwMDAwMDAwMCwgMHgxMTdiNjQxNTAwMDAwMDAwLAorICAgIDB4MWM0YjZhMjgwMDAwMDAwMCwgMHhkYzk0ZTRlOTAwMDAwMDAwLCAweGRkZjIwNjcwMDAwMDAwMDAsCisgICAgMHgxZDJkODhiMTAwMDAwMDAwLCAweDllMzhiMzk4MDAwMDAwMDAsIDB4NWVlNzNkNTkwMDAwMDAwMCwKKyAgICAweDVmODFkZmMwMDAwMDAwMDAsIDB4OWY1ZTUxMDEwMDAwMDAwMCwgMHg1OWFhYTk5MjAwMDAwMDAwLAorICAgIDB4OTk3NTI3NTMwMDAwMDAwMCwgMHg5ODEzYzVjYTAwMDAwMDAwLCAweDU4Y2M0YjBiMDAwMDAwMDAsCisgICAgMHhkYmQ5NzAyMjAwMDAwMDAwLCAweDFiMDZmZWUzMDAwMDAwMDAsIDB4MWE2MDFjN2EwMDAwMDAwMCwKKyAgICAweGRhYmY5MmJiMDAwMDAwMDAsIDB4ZWYxOTQ4ZDYwMDAwMDAwMCwgMHgyZmM2YzYxNzAwMDAwMDAwLAorICAgIDB4MmVhMDI0OGUwMDAwMDAwMCwgMHhlZTdmYWE0ZjAwMDAwMDAwLCAweDZkNmE5MTY2MDAwMDAwMDAsCisgICAgMHhhZGI1MWZhNzAwMDAwMDAwLCAweGFjZDNmZDNlMDAwMDAwMDAsIDB4NmMwYzczZmYwMDAwMDAwMCwKKyAgICAweGFhZjg4YjZjMDAwMDAwMDAsIDB4NmEyNzA1YWQwMDAwMDAwMCwgMHg2YjQxZTczNDAwMDAwMDAwLAorICAgIDB4YWI5ZTY5ZjUwMDAwMDAwMCwgMHgyODhiNTJkYzAwMDAwMDAwLCAweGU4NTRkYzFkMDAwMDAwMDAsCisgICAgMHhlOTMyM2U4NDAwMDAwMDAwLCAweDI5ZWRiMDQ1MDAwMDAwMDAsIDB4MjRkZGJlNzgwMDAwMDAwMCwKKyAgICAweGU0MDIzMGI5MDAwMDAwMDAsIDB4ZTU2NGQyMjAwMDAwMDAwMCwgMHgyNWJiNWNlMTAwMDAwMDAwLAorICAgIDB4YTZhZTY3YzgwMDAwMDAwMCwgMHg2NjcxZTkwOTAwMDAwMDAwLCAweDY3MTcwYjkwMDAwMDAwMDAsCisgICAgMHhhN2M4ODU1MTAwMDAwMDAwLCAweDYxM2M3ZGMyMDAwMDAwMDAsIDB4YTFlM2YzMDMwMDAwMDAwMCwKKyAgICAweGEwODUxMTlhMDAwMDAwMDAsIDB4NjA1YTlmNWIwMDAwMDAwMCwgMHhlMzRmYTQ3MjAwMDAwMDAwLAorICAgIDB4MjM5MDJhYjMwMDAwMDAwMCwgMHgyMmY2YzgyYTAwMDAwMDAwLCAweGUyMjk0NmViMDAwMDAwMDAsCisgICAgMHgzODk2ZDQ1MDAwMDAwMDAwLCAweGY4NDk1YTkxMDAwMDAwMDAsIDB4ZjkyZmI4MDgwMDAwMDAwMCwKKyAgICAweDM5ZjAzNmM5MDAwMDAwMDAsIDB4YmFlNTBkZTAwMDAwMDAwMCwgMHg3YTNhODMyMTAwMDAwMDAwLAorICAgIDB4N2I1YzYxYjgwMDAwMDAwMCwgMHhiYjgzZWY3OTAwMDAwMDAwLCAweDdkNzcxN2VhMDAwMDAwMDAsCisgICAgMHhiZGE4OTkyYjAwMDAwMDAwLCAweGJjY2U3YmIyMDAwMDAwMDAsIDB4N2MxMWY1NzMwMDAwMDAwMCwKKyAgICAweGZmMDRjZTVhMDAwMDAwMDAsIDB4M2ZkYjQwOWIwMDAwMDAwMCwgMHgzZWJkYTIwMjAwMDAwMDAwLAorICAgIDB4ZmU2MjJjYzMwMDAwMDAwMCwgMHhmMzUyMjJmZTAwMDAwMDAwLCAweDMzOGRhYzNmMDAwMDAwMDAsCisgICAgMHgzMmViNGVhNjAwMDAwMDAwLCAweGYyMzRjMDY3MDAwMDAwMDAsIDB4NzEyMWZiNGUwMDAwMDAwMCwKKyAgICAweGIxZmU3NThmMDAwMDAwMDAsIDB4YjA5ODk3MTYwMDAwMDAwMCwgMHg3MDQ3MTlkNzAwMDAwMDAwLAorICAgIDB4YjZiM2UxNDQwMDAwMDAwMCwgMHg3NjZjNmY4NTAwMDAwMDAwLCAweDc3MGE4ZDFjMDAwMDAwMDAsCisgICAgMHhiN2Q1MDNkZDAwMDAwMDAwLCAweDM0YzAzOGY0MDAwMDAwMDAsIDB4ZjQxZmI2MzUwMDAwMDAwMCwKKyAgICAweGY1Nzk1NGFjMDAwMDAwMDAsIDB4MzVhNmRhNmQwMDAwMDAwMCwgMHg5ZjM1ZTE3NzAwMDAwMDAwLAorICAgIDB4NWZlYTZmYjYwMDAwMDAwMCwgMHg1ZThjOGQyZjAwMDAwMDAwLCAweDllNTMwM2VlMDAwMDAwMDAsCisgICAgMHgxZDQ2MzhjNzAwMDAwMDAwLCAweGRkOTliNjA2MDAwMDAwMDAsIDB4ZGNmZjU0OWYwMDAwMDAwMCwKKyAgICAweDFjMjBkYTVlMDAwMDAwMDAsIDB4ZGFkNDIyY2QwMDAwMDAwMCwgMHgxYTBiYWMwYzAwMDAwMDAwLAorICAgIDB4MWI2ZDRlOTUwMDAwMDAwMCwgMHhkYmIyYzA1NDAwMDAwMDAwLCAweDU4YTdmYjdkMDAwMDAwMDAsCisgICAgMHg5ODc4NzViYzAwMDAwMDAwLCAweDk5MWU5NzI1MDAwMDAwMDAsIDB4NTljMTE5ZTQwMDAwMDAwMCwKKyAgICAweDU0ZjExN2Q5MDAwMDAwMDAsIDB4OTQyZTk5MTgwMDAwMDAwMCwgMHg5NTQ4N2I4MTAwMDAwMDAwLAorICAgIDB4NTU5N2Y1NDAwMDAwMDAwMCwgMHhkNjgyY2U2OTAwMDAwMDAwLCAweDE2NWQ0MGE4MDAwMDAwMDAsCisgICAgMHgxNzNiYTIzMTAwMDAwMDAwLCAweGQ3ZTQyY2YwMDAwMDAwMDAsIDB4MTExMGQ0NjMwMDAwMDAwMCwKKyAgICAweGQxY2Y1YWEyMDAwMDAwMDAsIDB4ZDBhOWI4M2IwMDAwMDAwMCwgMHgxMDc2MzZmYTAwMDAwMDAwLAorICAgIDB4OTM2MzBkZDMwMDAwMDAwMCwgMHg1M2JjODMxMjAwMDAwMDAwLCAweDUyZGE2MThiMDAwMDAwMDAsCisgICAgMHg5MjA1ZWY0YTAwMDAwMDAwLCAweDQ4YmE3ZGYxMDAwMDAwMDAsIDB4ODg2NWYzMzAwMDAwMDAwMCwKKyAgICAweDg5MDMxMWE5MDAwMDAwMDAsIDB4NDlkYzlmNjgwMDAwMDAwMCwgMHhjYWM5YTQ0MTAwMDAwMDAwLAorICAgIDB4MGExNjJhODAwMDAwMDAwMCwgMHgwYjcwYzgxOTAwMDAwMDAwLCAweGNiYWY0NmQ4MDAwMDAwMDAsCisgICAgMHgwZDViYmU0YjAwMDAwMDAwLCAweGNkODQzMDhhMDAwMDAwMDAsIDB4Y2NlMmQyMTMwMDAwMDAwMCwKKyAgICAweDBjM2Q1Y2QyMDAwMDAwMDAsIDB4OGYyODY3ZmIwMDAwMDAwMCwgMHg0ZmY3ZTkzYTAwMDAwMDAwLAorICAgIDB4NGU5MTBiYTMwMDAwMDAwMCwgMHg4ZTRlODU2MjAwMDAwMDAwLCAweDgzN2U4YjVmMDAwMDAwMDAsCisgICAgMHg0M2ExMDU5ZTAwMDAwMDAwLCAweDQyYzdlNzA3MDAwMDAwMDAsIDB4ODIxODY5YzYwMDAwMDAwMCwKKyAgICAweDAxMGQ1MmVmMDAwMDAwMDAsIDB4YzFkMmRjMmUwMDAwMDAwMCwgMHhjMGI0M2ViNzAwMDAwMDAwLAorICAgIDB4MDA2YmIwNzYwMDAwMDAwMCwgMHhjNjlmNDhlNTAwMDAwMDAwLCAweDA2NDBjNjI0MDAwMDAwMDAsCisgICAgMHgwNzI2MjRiZDAwMDAwMDAwLCAweGM3ZjlhYTdjMDAwMDAwMDAsIDB4NDRlYzkxNTUwMDAwMDAwMCwKKyAgICAweDg0MzMxZjk0MDAwMDAwMDAsIDB4ODU1NWZkMGQwMDAwMDAwMCwgMHg0NThhNzNjYzAwMDAwMDAwLAorICAgIDB4NzAyY2E5YTEwMDAwMDAwMCwgMHhiMGYzMjc2MDAwMDAwMDAwLCAweGIxOTVjNWY5MDAwMDAwMDAsCisgICAgMHg3MTRhNGIzODAwMDAwMDAwLCAweGYyNWY3MDExMDAwMDAwMDAsIDB4MzI4MGZlZDAwMDAwMDAwMCwKKyAgICAweDMzZTYxYzQ5MDAwMDAwMDAsIDB4ZjMzOTkyODgwMDAwMDAwMCwgMHgzNWNkNmExYjAwMDAwMDAwLAorICAgIDB4ZjUxMmU0ZGEwMDAwMDAwMCwgMHhmNDc0MDY0MzAwMDAwMDAwLCAweDM0YWI4ODgyMDAwMDAwMDAsCisgICAgMHhiN2JlYjNhYjAwMDAwMDAwLCAweDc3NjEzZDZhMDAwMDAwMDAsIDB4NzYwN2RmZjMwMDAwMDAwMCwKKyAgICAweGI2ZDg1MTMyMDAwMDAwMDAsIDB4YmJlODVmMGYwMDAwMDAwMCwgMHg3YjM3ZDFjZTAwMDAwMDAwLAorICAgIDB4N2E1MTMzNTcwMDAwMDAwMCwgMHhiYThlYmQ5NjAwMDAwMDAwLCAweDM5OWI4NmJmMDAwMDAwMDAsCisgICAgMHhmOTQ0MDg3ZTAwMDAwMDAwLCAweGY4MjJlYWU3MDAwMDAwMDAsIDB4MzhmZDY0MjYwMDAwMDAwMCwKKyAgICAweGZlMDk5Y2I1MDAwMDAwMDAsIDB4M2VkNjEyNzQwMDAwMDAwMCwgMHgzZmIwZjBlZDAwMDAwMDAwLAorICAgIDB4ZmY2ZjdlMmMwMDAwMDAwMCwgMHg3YzdhNDUwNTAwMDAwMDAwLCAweGJjYTVjYmM0MDAwMDAwMDAsCisgICAgMHhiZGMzMjk1ZDAwMDAwMDAwLCAweDdkMWNhNzljMDAwMDAwMDAsIDB4YTdhMzM1MjcwMDAwMDAwMCwKKyAgICAweDY3N2NiYmU2MDAwMDAwMDAsIDB4NjYxYTU5N2YwMDAwMDAwMCwgMHhhNmM1ZDdiZTAwMDAwMDAwLAorICAgIDB4MjVkMGVjOTcwMDAwMDAwMCwgMHhlNTBmNjI1NjAwMDAwMDAwLCAweGU0Njk4MGNmMDAwMDAwMDAsCisgICAgMHgyNGI2MGUwZTAwMDAwMDAwLCAweGUyNDJmNjlkMDAwMDAwMDAsIDB4MjI5ZDc4NWMwMDAwMDAwMCwKKyAgICAweDIzZmI5YWM1MDAwMDAwMDAsIDB4ZTMyNDE0MDQwMDAwMDAwMCwgMHg2MDMxMmYyZDAwMDAwMDAwLAorICAgIDB4YTBlZWExZWMwMDAwMDAwMCwgMHhhMTg4NDM3NTAwMDAwMDAwLCAweDYxNTdjZGI0MDAwMDAwMDAsCisgICAgMHg2YzY3YzM4OTAwMDAwMDAwLCAweGFjYjg0ZDQ4MDAwMDAwMDAsIDB4YWRkZWFmZDEwMDAwMDAwMCwKKyAgICAweDZkMDEyMTEwMDAwMDAwMDAsIDB4ZWUxNDFhMzkwMDAwMDAwMCwgMHgyZWNiOTRmODAwMDAwMDAwLAorICAgIDB4MmZhZDc2NjEwMDAwMDAwMCwgMHhlZjcyZjhhMDAwMDAwMDAwLCAweDI5ODYwMDMzMDAwMDAwMDAsCisgICAgMHhlOTU5OGVmMjAwMDAwMDAwLCAweGU4M2Y2YzZiMDAwMDAwMDAsIDB4MjhlMGUyYWEwMDAwMDAwMCwKKyAgICAweGFiZjVkOTgzMDAwMDAwMDAsIDB4NmIyYTU3NDIwMDAwMDAwMCwgMHg2YTRjYjVkYjAwMDAwMDAwLAorICAgIDB4YWE5MzNiMWEwMDAwMDAwMH0sCisgICB7MHgwMDAwMDAwMDAwMDAwMDAwLCAweDZmNGNhNTliMDAwMDAwMDAsIDB4OWY5ZTNiZWMwMDAwMDAwMCwKKyAgICAweGYwZDI5ZTc3MDAwMDAwMDAsIDB4N2YzYjA2MDMwMDAwMDAwMCwgMHgxMDc3YTM5ODAwMDAwMDAwLAorICAgIDB4ZTBhNTNkZWYwMDAwMDAwMCwgMHg4ZmU5OTg3NDAwMDAwMDAwLCAweGZlNzYwYzA2MDAwMDAwMDAsCisgICAgMHg5MTNhYTk5ZDAwMDAwMDAwLCAweDYxZTgzN2VhMDAwMDAwMDAsIDB4MGVhNDkyNzEwMDAwMDAwMCwKKyAgICAweDgxNGQwYTA1MDAwMDAwMDAsIDB4ZWUwMWFmOWUwMDAwMDAwMCwgMHgxZWQzMzFlOTAwMDAwMDAwLAorICAgIDB4NzE5Zjk0NzIwMDAwMDAwMCwgMHhmY2VkMTgwYzAwMDAwMDAwLCAweDkzYTFiZDk3MDAwMDAwMDAsCisgICAgMHg2MzczMjNlMDAwMDAwMDAwLCAweDBjM2Y4NjdiMDAwMDAwMDAsIDB4ODNkNjFlMGYwMDAwMDAwMCwKKyAgICAweGVjOWFiYjk0MDAwMDAwMDAsIDB4MWM0ODI1ZTMwMDAwMDAwMCwgMHg3MzA0ODA3ODAwMDAwMDAwLAorICAgIDB4MDI5YjE0MGEwMDAwMDAwMCwgMHg2ZGQ3YjE5MTAwMDAwMDAwLCAweDlkMDUyZmU2MDAwMDAwMDAsCisgICAgMHhmMjQ5OGE3ZDAwMDAwMDAwLCAweDdkYTAxMjA5MDAwMDAwMDAsIDB4MTJlY2I3OTIwMDAwMDAwMCwKKyAgICAweGUyM2UyOWU1MDAwMDAwMDAsIDB4OGQ3MjhjN2UwMDAwMDAwMCwgMHhmOGRiMzExODAwMDAwMDAwLAorICAgIDB4OTc5Nzk0ODMwMDAwMDAwMCwgMHg2NzQ1MGFmNDAwMDAwMDAwLCAweDA4MDlhZjZmMDAwMDAwMDAsCisgICAgMHg4N2UwMzcxYjAwMDAwMDAwLCAweGU4YWM5MjgwMDAwMDAwMDAsIDB4MTg3ZTBjZjcwMDAwMDAwMCwKKyAgICAweDc3MzJhOTZjMDAwMDAwMDAsIDB4MDZhZDNkMWUwMDAwMDAwMCwgMHg2OWUxOTg4NTAwMDAwMDAwLAorICAgIDB4OTkzMzA2ZjIwMDAwMDAwMCwgMHhmNjdmYTM2OTAwMDAwMDAwLCAweDc5OTYzYjFkMDAwMDAwMDAsCisgICAgMHgxNmRhOWU4NjAwMDAwMDAwLCAweGU2MDgwMGYxMDAwMDAwMDAsIDB4ODk0NGE1NmEwMDAwMDAwMCwKKyAgICAweDA0MzYyOTE0MDAwMDAwMDAsIDB4NmI3YThjOGYwMDAwMDAwMCwgMHg5YmE4MTJmODAwMDAwMDAwLAorICAgIDB4ZjRlNGI3NjMwMDAwMDAwMCwgMHg3YjBkMmYxNzAwMDAwMDAwLCAweDE0NDE4YThjMDAwMDAwMDAsCisgICAgMHhlNDkzMTRmYjAwMDAwMDAwLCAweDhiZGZiMTYwMDAwMDAwMDAsIDB4ZmE0MDI1MTIwMDAwMDAwMCwKKyAgICAweDk1MGM4MDg5MDAwMDAwMDAsIDB4NjVkZTFlZmUwMDAwMDAwMCwgMHgwYTkyYmI2NTAwMDAwMDAwLAorICAgIDB4ODU3YjIzMTEwMDAwMDAwMCwgMHhlYTM3ODY4YTAwMDAwMDAwLCAweDFhZTUxOGZkMDAwMDAwMDAsCisgICAgMHg3NWE5YmQ2NjAwMDAwMDAwLCAweGYwYjc2MzMwMDAwMDAwMDAsIDB4OWZmYmM2YWIwMDAwMDAwMCwKKyAgICAweDZmMjk1OGRjMDAwMDAwMDAsIDB4MDA2NWZkNDcwMDAwMDAwMCwgMHg4ZjhjNjUzMzAwMDAwMDAwLAorICAgIDB4ZTBjMGMwYTgwMDAwMDAwMCwgMHgxMDEyNWVkZjAwMDAwMDAwLCAweDdmNWVmYjQ0MDAwMDAwMDAsCisgICAgMHgwZWMxNmYzNjAwMDAwMDAwLCAweDYxOGRjYWFkMDAwMDAwMDAsIDB4OTE1ZjU0ZGEwMDAwMDAwMCwKKyAgICAweGZlMTNmMTQxMDAwMDAwMDAsIDB4NzFmYTY5MzUwMDAwMDAwMCwgMHgxZWI2Y2NhZTAwMDAwMDAwLAorICAgIDB4ZWU2NDUyZDkwMDAwMDAwMCwgMHg4MTI4Zjc0MjAwMDAwMDAwLCAweDBjNWE3YjNjMDAwMDAwMDAsCisgICAgMHg2MzE2ZGVhNzAwMDAwMDAwLCAweDkzYzQ0MGQwMDAwMDAwMDAsIDB4ZmM4OGU1NGIwMDAwMDAwMCwKKyAgICAweDczNjE3ZDNmMDAwMDAwMDAsIDB4MWMyZGQ4YTQwMDAwMDAwMCwgMHhlY2ZmNDZkMzAwMDAwMDAwLAorICAgIDB4ODNiM2UzNDgwMDAwMDAwMCwgMHhmMjJjNzczYTAwMDAwMDAwLCAweDlkNjBkMmExMDAwMDAwMDAsCisgICAgMHg2ZGIyNGNkNjAwMDAwMDAwLCAweDAyZmVlOTRkMDAwMDAwMDAsIDB4OGQxNzcxMzkwMDAwMDAwMCwKKyAgICAweGUyNWJkNGEyMDAwMDAwMDAsIDB4MTI4OTRhZDUwMDAwMDAwMCwgMHg3ZGM1ZWY0ZTAwMDAwMDAwLAorICAgIDB4MDg2YzUyMjgwMDAwMDAwMCwgMHg2NzIwZjdiMzAwMDAwMDAwLCAweDk3ZjI2OWM0MDAwMDAwMDAsCisgICAgMHhmOGJlY2M1ZjAwMDAwMDAwLCAweDc3NTc1NDJiMDAwMDAwMDAsIDB4MTgxYmYxYjAwMDAwMDAwMCwKKyAgICAweGU4Yzk2ZmM3MDAwMDAwMDAsIDB4ODc4NWNhNWMwMDAwMDAwMCwgMHhmNjFhNWUyZTAwMDAwMDAwLAorICAgIDB4OTk1NmZiYjUwMDAwMDAwMCwgMHg2OTg0NjVjMjAwMDAwMDAwLCAweDA2YzhjMDU5MDAwMDAwMDAsCisgICAgMHg4OTIxNTgyZDAwMDAwMDAwLCAweGU2NmRmZGI2MDAwMDAwMDAsIDB4MTZiZjYzYzEwMDAwMDAwMCwKKyAgICAweDc5ZjNjNjVhMDAwMDAwMDAsIDB4ZjQ4MTRhMjQwMDAwMDAwMCwgMHg5YmNkZWZiZjAwMDAwMDAwLAorICAgIDB4NmIxZjcxYzgwMDAwMDAwMCwgMHgwNDUzZDQ1MzAwMDAwMDAwLCAweDhiYmE0YzI3MDAwMDAwMDAsCisgICAgMHhlNGY2ZTliYzAwMDAwMDAwLCAweDE0MjQ3N2NiMDAwMDAwMDAsIDB4N2I2OGQyNTAwMDAwMDAwMCwKKyAgICAweDBhZjc0NjIyMDAwMDAwMDAsIDB4NjViYmUzYjkwMDAwMDAwMCwgMHg5NTY5N2RjZTAwMDAwMDAwLAorICAgIDB4ZmEyNWQ4NTUwMDAwMDAwMCwgMHg3NWNjNDAyMTAwMDAwMDAwLCAweDFhODBlNWJhMDAwMDAwMDAsCisgICAgMHhlYTUyN2JjZDAwMDAwMDAwLCAweDg1MWVkZTU2MDAwMDAwMDAsIDB4ZTA2ZmM3NjAwMDAwMDAwMCwKKyAgICAweDhmMjM2MmZiMDAwMDAwMDAsIDB4N2ZmMWZjOGMwMDAwMDAwMCwgMHgxMGJkNTkxNzAwMDAwMDAwLAorICAgIDB4OWY1NGMxNjMwMDAwMDAwMCwgMHhmMDE4NjRmODAwMDAwMDAwLCAweDAwY2FmYThmMDAwMDAwMDAsCisgICAgMHg2Zjg2NWYxNDAwMDAwMDAwLCAweDFlMTljYjY2MDAwMDAwMDAsIDB4NzE1NTZlZmQwMDAwMDAwMCwKKyAgICAweDgxODdmMDhhMDAwMDAwMDAsIDB4ZWVjYjU1MTEwMDAwMDAwMCwgMHg2MTIyY2Q2NTAwMDAwMDAwLAorICAgIDB4MGU2ZTY4ZmUwMDAwMDAwMCwgMHhmZWJjZjY4OTAwMDAwMDAwLCAweDkxZjA1MzEyMDAwMDAwMDAsCisgICAgMHgxYzgyZGY2YzAwMDAwMDAwLCAweDczY2U3YWY3MDAwMDAwMDAsIDB4ODMxY2U0ODAwMDAwMDAwMCwKKyAgICAweGVjNTA0MTFiMDAwMDAwMDAsIDB4NjNiOWQ5NmYwMDAwMDAwMCwgMHgwY2Y1N2NmNDAwMDAwMDAwLAorICAgIDB4ZmMyN2UyODMwMDAwMDAwMCwgMHg5MzZiNDcxODAwMDAwMDAwLCAweGUyZjRkMzZhMDAwMDAwMDAsCisgICAgMHg4ZGI4NzZmMTAwMDAwMDAwLCAweDdkNmFlODg2MDAwMDAwMDAsIDB4MTIyNjRkMWQwMDAwMDAwMCwKKyAgICAweDlkY2ZkNTY5MDAwMDAwMDAsIDB4ZjI4MzcwZjIwMDAwMDAwMCwgMHgwMjUxZWU4NTAwMDAwMDAwLAorICAgIDB4NmQxZDRiMWUwMDAwMDAwMCwgMHgxOGI0ZjY3ODAwMDAwMDAwLCAweDc3Zjg1M2UzMDAwMDAwMDAsCisgICAgMHg4NzJhY2Q5NDAwMDAwMDAwLCAweGU4NjY2ODBmMDAwMDAwMDAsIDB4Njc4ZmYwN2IwMDAwMDAwMCwKKyAgICAweDA4YzM1NWUwMDAwMDAwMDAsIDB4ZjgxMWNiOTcwMDAwMDAwMCwgMHg5NzVkNmUwYzAwMDAwMDAwLAorICAgIDB4ZTZjMmZhN2UwMDAwMDAwMCwgMHg4OThlNWZlNTAwMDAwMDAwLCAweDc5NWNjMTkyMDAwMDAwMDAsCisgICAgMHgxNjEwNjQwOTAwMDAwMDAwLCAweDk5ZjlmYzdkMDAwMDAwMDAsIDB4ZjZiNTU5ZTYwMDAwMDAwMCwKKyAgICAweDA2NjdjNzkxMDAwMDAwMDAsIDB4NjkyYjYyMGEwMDAwMDAwMCwgMHhlNDU5ZWU3NDAwMDAwMDAwLAorICAgIDB4OGIxNTRiZWYwMDAwMDAwMCwgMHg3YmM3ZDU5ODAwMDAwMDAwLCAweDE0OGI3MDAzMDAwMDAwMDAsCisgICAgMHg5YjYyZTg3NzAwMDAwMDAwLCAweGY0MmU0ZGVjMDAwMDAwMDAsIDB4MDRmY2QzOWIwMDAwMDAwMCwKKyAgICAweDZiYjA3NjAwMDAwMDAwMDAsIDB4MWEyZmUyNzIwMDAwMDAwMCwgMHg3NTYzNDdlOTAwMDAwMDAwLAorICAgIDB4ODViMWQ5OWUwMDAwMDAwMCwgMHhlYWZkN2MwNTAwMDAwMDAwLCAweDY1MTRlNDcxMDAwMDAwMDAsCisgICAgMHgwYTU4NDFlYTAwMDAwMDAwLCAweGZhOGFkZjlkMDAwMDAwMDAsIDB4OTVjNjdhMDYwMDAwMDAwMCwKKyAgICAweDEwZDhhNDUwMDAwMDAwMDAsIDB4N2Y5NDAxY2IwMDAwMDAwMCwgMHg4ZjQ2OWZiYzAwMDAwMDAwLAorICAgIDB4ZTAwYTNhMjcwMDAwMDAwMCwgMHg2ZmUzYTI1MzAwMDAwMDAwLCAweDAwYWYwN2M4MDAwMDAwMDAsCisgICAgMHhmMDdkOTliZjAwMDAwMDAwLCAweDlmMzEzYzI0MDAwMDAwMDAsIDB4ZWVhZWE4NTYwMDAwMDAwMCwKKyAgICAweDgxZTIwZGNkMDAwMDAwMDAsIDB4NzEzMDkzYmEwMDAwMDAwMCwgMHgxZTdjMzYyMTAwMDAwMDAwLAorICAgIDB4OTE5NWFlNTUwMDAwMDAwMCwgMHhmZWQ5MGJjZTAwMDAwMDAwLCAweDBlMGI5NWI5MDAwMDAwMDAsCisgICAgMHg2MTQ3MzAyMjAwMDAwMDAwLCAweGVjMzViYzVjMDAwMDAwMDAsIDB4ODM3OTE5YzcwMDAwMDAwMCwKKyAgICAweDczYWI4N2IwMDAwMDAwMDAsIDB4MWNlNzIyMmIwMDAwMDAwMCwgMHg5MzBlYmE1ZjAwMDAwMDAwLAorICAgIDB4ZmM0MjFmYzQwMDAwMDAwMCwgMHgwYzkwODFiMzAwMDAwMDAwLCAweDYzZGMyNDI4MDAwMDAwMDAsCisgICAgMHgxMjQzYjA1YTAwMDAwMDAwLCAweDdkMGYxNWMxMDAwMDAwMDAsIDB4OGRkZDhiYjYwMDAwMDAwMCwKKyAgICAweGUyOTEyZTJkMDAwMDAwMDAsIDB4NmQ3OGI2NTkwMDAwMDAwMCwgMHgwMjM0MTNjMjAwMDAwMDAwLAorICAgIDB4ZjJlNjhkYjUwMDAwMDAwMCwgMHg5ZGFhMjgyZTAwMDAwMDAwLCAweGU4MDM5NTQ4MDAwMDAwMDAsCisgICAgMHg4NzRmMzBkMzAwMDAwMDAwLCAweDc3OWRhZWE0MDAwMDAwMDAsIDB4MThkMTBiM2YwMDAwMDAwMCwKKyAgICAweDk3Mzg5MzRiMDAwMDAwMDAsIDB4Zjg3NDM2ZDAwMDAwMDAwMCwgMHgwOGE2YThhNzAwMDAwMDAwLAorICAgIDB4NjdlYTBkM2MwMDAwMDAwMCwgMHgxNjc1OTk0ZTAwMDAwMDAwLCAweDc5MzkzY2Q1MDAwMDAwMDAsCisgICAgMHg4OWViYTJhMjAwMDAwMDAwLCAweGU2YTcwNzM5MDAwMDAwMDAsIDB4Njk0ZTlmNGQwMDAwMDAwMCwKKyAgICAweDA2MDIzYWQ2MDAwMDAwMDAsIDB4ZjZkMGE0YTEwMDAwMDAwMCwgMHg5OTljMDEzYTAwMDAwMDAwLAorICAgIDB4MTRlZThkNDQwMDAwMDAwMCwgMHg3YmEyMjhkZjAwMDAwMDAwLCAweDhiNzBiNmE4MDAwMDAwMDAsCisgICAgMHhlNDNjMTMzMzAwMDAwMDAwLCAweDZiZDU4YjQ3MDAwMDAwMDAsIDB4MDQ5OTJlZGMwMDAwMDAwMCwKKyAgICAweGY0NGJiMGFiMDAwMDAwMDAsIDB4OWIwNzE1MzAwMDAwMDAwMCwgMHhlYTk4ODE0MjAwMDAwMDAwLAorICAgIDB4ODVkNDI0ZDkwMDAwMDAwMCwgMHg3NTA2YmFhZTAwMDAwMDAwLCAweDFhNGExZjM1MDAwMDAwMDAsCisgICAgMHg5NWEzODc0MTAwMDAwMDAwLCAweGZhZWYyMmRhMDAwMDAwMDAsIDB4MGEzZGJjYWQwMDAwMDAwMCwKKyAgICAweDY1NzExOTM2MDAwMDAwMDB9LAorICAgezB4MDAwMDAwMDAwMDAwMDAwMCwgMHg4NWQ5OTZkZDAwMDAwMDAwLCAweDRiYjU1YzYwMDAwMDAwMDAsCisgICAgMHhjZTZjY2FiZDAwMDAwMDAwLCAweDk2NmFiOWMwMDAwMDAwMDAsIDB4MTNiMzJmMWQwMDAwMDAwMCwKKyAgICAweGRkZGZlNWEwMDAwMDAwMDAsIDB4NTgwNjczN2QwMDAwMDAwMCwgMHg2ZGQzMDM1YTAwMDAwMDAwLAorICAgIDB4ZTgwYTk1ODcwMDAwMDAwMCwgMHgyNjY2NWYzYTAwMDAwMDAwLCAweGEzYmZjOWU3MDAwMDAwMDAsCisgICAgMHhmYmI5YmE5YTAwMDAwMDAwLCAweDdlNjAyYzQ3MDAwMDAwMDAsIDB4YjAwY2U2ZmEwMDAwMDAwMCwKKyAgICAweDM1ZDU3MDI3MDAwMDAwMDAsIDB4ZGFhNjA3YjQwMDAwMDAwMCwgMHg1ZjdmOTE2OTAwMDAwMDAwLAorICAgIDB4OTExMzViZDQwMDAwMDAwMCwgMHgxNGNhY2QwOTAwMDAwMDAwLCAweDRjY2NiZTc0MDAwMDAwMDAsCisgICAgMHhjOTE1MjhhOTAwMDAwMDAwLCAweDA3NzllMjE0MDAwMDAwMDAsIDB4ODJhMDc0YzkwMDAwMDAwMCwKKyAgICAweGI3NzUwNGVlMDAwMDAwMDAsIDB4MzJhYzkyMzMwMDAwMDAwMCwgMHhmY2MwNTg4ZTAwMDAwMDAwLAorICAgIDB4NzkxOWNlNTMwMDAwMDAwMCwgMHgyMTFmYmQyZTAwMDAwMDAwLCAweGE0YzYyYmYzMDAwMDAwMDAsCisgICAgMHg2YWFhZTE0ZTAwMDAwMDAwLCAweGVmNzM3NzkzMDAwMDAwMDAsIDB4ZjU0YjdlYjMwMDAwMDAwMCwKKyAgICAweDcwOTJlODZlMDAwMDAwMDAsIDB4YmVmZTIyZDMwMDAwMDAwMCwgMHgzYjI3YjQwZTAwMDAwMDAwLAorICAgIDB4NjMyMWM3NzMwMDAwMDAwMCwgMHhlNmY4NTFhZTAwMDAwMDAwLCAweDI4OTQ5YjEzMDAwMDAwMDAsCisgICAgMHhhZDRkMGRjZTAwMDAwMDAwLCAweDk4OTg3ZGU5MDAwMDAwMDAsIDB4MWQ0MWViMzQwMDAwMDAwMCwKKyAgICAweGQzMmQyMTg5MDAwMDAwMDAsIDB4NTZmNGI3NTQwMDAwMDAwMCwgMHgwZWYyYzQyOTAwMDAwMDAwLAorICAgIDB4OGIyYjUyZjQwMDAwMDAwMCwgMHg0NTQ3OTg0OTAwMDAwMDAwLCAweGMwOWUwZTk0MDAwMDAwMDAsCisgICAgMHgyZmVkNzkwNzAwMDAwMDAwLCAweGFhMzRlZmRhMDAwMDAwMDAsIDB4NjQ1ODI1NjcwMDAwMDAwMCwKKyAgICAweGUxODFiM2JhMDAwMDAwMDAsIDB4Yjk4N2MwYzcwMDAwMDAwMCwgMHgzYzVlNTYxYTAwMDAwMDAwLAorICAgIDB4ZjIzMjljYTcwMDAwMDAwMCwgMHg3N2ViMGE3YTAwMDAwMDAwLCAweDQyM2U3YTVkMDAwMDAwMDAsCisgICAgMHhjN2U3ZWM4MDAwMDAwMDAwLCAweDA5OGIyNjNkMDAwMDAwMDAsIDB4OGM1MmIwZTAwMDAwMDAwMCwKKyAgICAweGQ0NTRjMzlkMDAwMDAwMDAsIDB4NTE4ZDU1NDAwMDAwMDAwMCwgMHg5ZmUxOWZmZDAwMDAwMDAwLAorICAgIDB4MWEzODA5MjAwMDAwMDAwMCwgMHhhYjkxOGRiZDAwMDAwMDAwLCAweDJlNDgxYjYwMDAwMDAwMDAsCisgICAgMHhlMDI0ZDFkZDAwMDAwMDAwLCAweDY1ZmQ0NzAwMDAwMDAwMDAsIDB4M2RmYjM0N2QwMDAwMDAwMCwKKyAgICAweGI4MjJhMmEwMDAwMDAwMDAsIDB4NzY0ZTY4MWQwMDAwMDAwMCwgMHhmMzk3ZmVjMDAwMDAwMDAwLAorICAgIDB4YzY0MjhlZTcwMDAwMDAwMCwgMHg0MzliMTgzYTAwMDAwMDAwLCAweDhkZjdkMjg3MDAwMDAwMDAsCisgICAgMHgwODJlNDQ1YTAwMDAwMDAwLCAweDUwMjgzNzI3MDAwMDAwMDAsIDB4ZDVmMWExZmEwMDAwMDAwMCwKKyAgICAweDFiOWQ2YjQ3MDAwMDAwMDAsIDB4OWU0NGZkOWEwMDAwMDAwMCwgMHg3MTM3OGEwOTAwMDAwMDAwLAorICAgIDB4ZjRlZTFjZDQwMDAwMDAwMCwgMHgzYTgyZDY2OTAwMDAwMDAwLCAweGJmNWI0MGI0MDAwMDAwMDAsCisgICAgMHhlNzVkMzNjOTAwMDAwMDAwLCAweDYyODRhNTE0MDAwMDAwMDAsIDB4YWNlODZmYTkwMDAwMDAwMCwKKyAgICAweDI5MzFmOTc0MDAwMDAwMDAsIDB4MWNlNDg5NTMwMDAwMDAwMCwgMHg5OTNkMWY4ZTAwMDAwMDAwLAorICAgIDB4NTc1MWQ1MzMwMDAwMDAwMCwgMHhkMjg4NDNlZTAwMDAwMDAwLCAweDhhOGUzMDkzMDAwMDAwMDAsCisgICAgMHgwZjU3YTY0ZTAwMDAwMDAwLCAweGMxM2I2Y2YzMDAwMDAwMDAsIDB4NDRlMmZhMmUwMDAwMDAwMCwKKyAgICAweDVlZGFmMzBlMDAwMDAwMDAsIDB4ZGIwMzY1ZDMwMDAwMDAwMCwgMHgxNTZmYWY2ZTAwMDAwMDAwLAorICAgIDB4OTBiNjM5YjMwMDAwMDAwMCwgMHhjOGIwNGFjZTAwMDAwMDAwLCAweDRkNjlkYzEzMDAwMDAwMDAsCisgICAgMHg4MzA1MTZhZTAwMDAwMDAwLCAweDA2ZGM4MDczMDAwMDAwMDAsIDB4MzMwOWYwNTQwMDAwMDAwMCwKKyAgICAweGI2ZDA2Njg5MDAwMDAwMDAsIDB4NzhiY2FjMzQwMDAwMDAwMCwgMHhmZDY1M2FlOTAwMDAwMDAwLAorICAgIDB4YTU2MzQ5OTQwMDAwMDAwMCwgMHgyMGJhZGY0OTAwMDAwMDAwLCAweGVlZDYxNWY0MDAwMDAwMDAsCisgICAgMHg2YjBmODMyOTAwMDAwMDAwLCAweDg0N2NmNGJhMDAwMDAwMDAsIDB4MDFhNTYyNjcwMDAwMDAwMCwKKyAgICAweGNmYzlhOGRhMDAwMDAwMDAsIDB4NGExMDNlMDcwMDAwMDAwMCwgMHgxMjE2NGQ3YTAwMDAwMDAwLAorICAgIDB4OTdjZmRiYTcwMDAwMDAwMCwgMHg1OWEzMTExYTAwMDAwMDAwLCAweGRjN2E4N2M3MDAwMDAwMDAsCisgICAgMHhlOWFmZjdlMDAwMDAwMDAwLCAweDZjNzY2MTNkMDAwMDAwMDAsIDB4YTIxYWFiODAwMDAwMDAwMCwKKyAgICAweDI3YzMzZDVkMDAwMDAwMDAsIDB4N2ZjNTRlMjAwMDAwMDAwMCwgMHhmYTFjZDhmZDAwMDAwMDAwLAorICAgIDB4MzQ3MDEyNDAwMDAwMDAwMCwgMHhiMWE5ODQ5ZDAwMDAwMDAwLCAweDE3MjU2YWEwMDAwMDAwMDAsCisgICAgMHg5MmZjZmM3ZDAwMDAwMDAwLCAweDVjOTAzNmMwMDAwMDAwMDAsIDB4ZDk0OWEwMWQwMDAwMDAwMCwKKyAgICAweDgxNGZkMzYwMDAwMDAwMDAsIDB4MDQ5NjQ1YmQwMDAwMDAwMCwgMHhjYWZhOGYwMDAwMDAwMDAwLAorICAgIDB4NGYyMzE5ZGQwMDAwMDAwMCwgMHg3YWY2NjlmYTAwMDAwMDAwLCAweGZmMmZmZjI3MDAwMDAwMDAsCisgICAgMHgzMTQzMzU5YTAwMDAwMDAwLCAweGI0OWFhMzQ3MDAwMDAwMDAsIDB4ZWM5Y2QwM2EwMDAwMDAwMCwKKyAgICAweDY5NDU0NmU3MDAwMDAwMDAsIDB4YTcyOThjNWEwMDAwMDAwMCwgMHgyMmYwMWE4NzAwMDAwMDAwLAorICAgIDB4Y2Q4MzZkMTQwMDAwMDAwMCwgMHg0ODVhZmJjOTAwMDAwMDAwLCAweDg2MzYzMTc0MDAwMDAwMDAsCisgICAgMHgwM2VmYTdhOTAwMDAwMDAwLCAweDViZTlkNGQ0MDAwMDAwMDAsIDB4ZGUzMDQyMDkwMDAwMDAwMCwKKyAgICAweDEwNWM4OGI0MDAwMDAwMDAsIDB4OTU4NTFlNjkwMDAwMDAwMCwgMHhhMDUwNmU0ZTAwMDAwMDAwLAorICAgIDB4MjU4OWY4OTMwMDAwMDAwMCwgMHhlYmU1MzIyZTAwMDAwMDAwLCAweDZlM2NhNGYzMDAwMDAwMDAsCisgICAgMHgzNjNhZDc4ZTAwMDAwMDAwLCAweGIzZTM0MTUzMDAwMDAwMDAsIDB4N2Q4ZjhiZWUwMDAwMDAwMCwKKyAgICAweGY4NTYxZDMzMDAwMDAwMDAsIDB4ZTI2ZTE0MTMwMDAwMDAwMCwgMHg2N2I3ODJjZTAwMDAwMDAwLAorICAgIDB4YTlkYjQ4NzMwMDAwMDAwMCwgMHgyYzAyZGVhZTAwMDAwMDAwLCAweDc0MDRhZGQzMDAwMDAwMDAsCisgICAgMHhmMWRkM2IwZTAwMDAwMDAwLCAweDNmYjFmMWIzMDAwMDAwMDAsIDB4YmE2ODY3NmUwMDAwMDAwMCwKKyAgICAweDhmYmQxNzQ5MDAwMDAwMDAsIDB4MGE2NDgxOTQwMDAwMDAwMCwgMHhjNDA4NGIyOTAwMDAwMDAwLAorICAgIDB4NDFkMWRkZjQwMDAwMDAwMCwgMHgxOWQ3YWU4OTAwMDAwMDAwLCAweDljMGUzODU0MDAwMDAwMDAsCisgICAgMHg1MjYyZjJlOTAwMDAwMDAwLCAweGQ3YmI2NDM0MDAwMDAwMDAsIDB4MzhjODEzYTcwMDAwMDAwMCwKKyAgICAweGJkMTE4NTdhMDAwMDAwMDAsIDB4NzM3ZDRmYzcwMDAwMDAwMCwgMHhmNmE0ZDkxYTAwMDAwMDAwLAorICAgIDB4YWVhMmFhNjcwMDAwMDAwMCwgMHgyYjdiM2NiYTAwMDAwMDAwLCAweGU1MTdmNjA3MDAwMDAwMDAsCisgICAgMHg2MGNlNjBkYTAwMDAwMDAwLCAweDU1MWIxMGZkMDAwMDAwMDAsIDB4ZDBjMjg2MjAwMDAwMDAwMCwKKyAgICAweDFlYWU0YzlkMDAwMDAwMDAsIDB4OWI3N2RhNDAwMDAwMDAwMCwgMHhjMzcxYTkzZDAwMDAwMDAwLAorICAgIDB4NDZhODNmZTAwMDAwMDAwMCwgMHg4OGM0ZjU1ZDAwMDAwMDAwLCAweDBkMWQ2MzgwMDAwMDAwMDAsCisgICAgMHhiY2I0ZTcxZDAwMDAwMDAwLCAweDM5NmQ3MWMwMDAwMDAwMDAsIDB4ZjcwMWJiN2QwMDAwMDAwMCwKKyAgICAweDcyZDgyZGEwMDAwMDAwMDAsIDB4MmFkZTVlZGQwMDAwMDAwMCwgMHhhZjA3YzgwMDAwMDAwMDAwLAorICAgIDB4NjE2YjAyYmQwMDAwMDAwMCwgMHhlNGIyOTQ2MDAwMDAwMDAwLCAweGQxNjdlNDQ3MDAwMDAwMDAsCisgICAgMHg1NGJlNzI5YTAwMDAwMDAwLCAweDlhZDJiODI3MDAwMDAwMDAsIDB4MWYwYjJlZmEwMDAwMDAwMCwKKyAgICAweDQ3MGQ1ZDg3MDAwMDAwMDAsIDB4YzJkNGNiNWEwMDAwMDAwMCwgMHgwY2I4MDFlNzAwMDAwMDAwLAorICAgIDB4ODk2MTk3M2EwMDAwMDAwMCwgMHg2NjEyZTBhOTAwMDAwMDAwLCAweGUzY2I3Njc0MDAwMDAwMDAsCisgICAgMHgyZGE3YmNjOTAwMDAwMDAwLCAweGE4N2UyYTE0MDAwMDAwMDAsIDB4ZjA3ODU5NjkwMDAwMDAwMCwKKyAgICAweDc1YTFjZmI0MDAwMDAwMDAsIDB4YmJjZDA1MDkwMDAwMDAwMCwgMHgzZTE0OTNkNDAwMDAwMDAwLAorICAgIDB4MGJjMWUzZjMwMDAwMDAwMCwgMHg4ZTE4NzUyZTAwMDAwMDAwLCAweDQwNzRiZjkzMDAwMDAwMDAsCisgICAgMHhjNWFkMjk0ZTAwMDAwMDAwLCAweDlkYWI1YTMzMDAwMDAwMDAsIDB4MTg3MmNjZWUwMDAwMDAwMCwKKyAgICAweGQ2MWUwNjUzMDAwMDAwMDAsIDB4NTNjNzkwOGUwMDAwMDAwMCwgMHg0OWZmOTlhZTAwMDAwMDAwLAorICAgIDB4Y2MyNjBmNzMwMDAwMDAwMCwgMHgwMjRhYzVjZTAwMDAwMDAwLCAweDg3OTM1MzEzMDAwMDAwMDAsCisgICAgMHhkZjk1MjA2ZTAwMDAwMDAwLCAweDVhNGNiNmIzMDAwMDAwMDAsIDB4OTQyMDdjMGUwMDAwMDAwMCwKKyAgICAweDExZjllYWQzMDAwMDAwMDAsIDB4MjQyYzlhZjQwMDAwMDAwMCwgMHhhMWY1MGMyOTAwMDAwMDAwLAorICAgIDB4NmY5OWM2OTQwMDAwMDAwMCwgMHhlYTQwNTA0OTAwMDAwMDAwLCAweGIyNDYyMzM0MDAwMDAwMDAsCisgICAgMHgzNzlmYjVlOTAwMDAwMDAwLCAweGY5ZjM3ZjU0MDAwMDAwMDAsIDB4N2MyYWU5ODkwMDAwMDAwMCwKKyAgICAweDkzNTk5ZTFhMDAwMDAwMDAsIDB4MTY4MDA4YzcwMDAwMDAwMCwgMHhkOGVjYzI3YTAwMDAwMDAwLAorICAgIDB4NWQzNTU0YTcwMDAwMDAwMCwgMHgwNTMzMjdkYTAwMDAwMDAwLCAweDgwZWFiMTA3MDAwMDAwMDAsCisgICAgMHg0ZTg2N2JiYTAwMDAwMDAwLCAweGNiNWZlZDY3MDAwMDAwMDAsIDB4ZmU4YTlkNDAwMDAwMDAwMCwKKyAgICAweDdiNTMwYjlkMDAwMDAwMDAsIDB4YjUzZmMxMjAwMDAwMDAwMCwgMHgzMGU2NTdmZDAwMDAwMDAwLAorICAgIDB4NjhlMDI0ODAwMDAwMDAwMCwgMHhlZDM5YjI1ZDAwMDAwMDAwLCAweDIzNTU3OGUwMDAwMDAwMDAsCisgICAgMHhhNjhjZWUzZDAwMDAwMDAwfSwKKyAgIHsweDAwMDAwMDAwMDAwMDAwMDAsIDB4NzZlMTBmOWQwMDAwMDAwMCwgMHhhZGM0NmVlMTAwMDAwMDAwLAorICAgIDB4ZGIyNTYxN2MwMDAwMDAwMCwgMHgxYjhmYWMxOTAwMDAwMDAwLCAweDZkNmVhMzg0MDAwMDAwMDAsCisgICAgMHhiNjRiYzJmODAwMDAwMDAwLCAweGMwYWFjZDY1MDAwMDAwMDAsIDB4MzYxZTU5MzMwMDAwMDAwMCwKKyAgICAweDQwZmY1NmFlMDAwMDAwMDAsIDB4OWJkYTM3ZDIwMDAwMDAwMCwgMHhlZDNiMzg0ZjAwMDAwMDAwLAorICAgIDB4MmQ5MWY1MmEwMDAwMDAwMCwgMHg1YjcwZmFiNzAwMDAwMDAwLCAweDgwNTU5YmNiMDAwMDAwMDAsCisgICAgMHhmNmI0OTQ1NjAwMDAwMDAwLCAweDZjM2NiMjY2MDAwMDAwMDAsIDB4MWFkZGJkZmIwMDAwMDAwMCwKKyAgICAweGMxZjhkYzg3MDAwMDAwMDAsIDB4YjcxOWQzMWEwMDAwMDAwMCwgMHg3N2IzMWU3ZjAwMDAwMDAwLAorICAgIDB4MDE1MjExZTIwMDAwMDAwMCwgMHhkYTc3NzA5ZTAwMDAwMDAwLCAweGFjOTY3ZjAzMDAwMDAwMDAsCisgICAgMHg1YTIyZWI1NTAwMDAwMDAwLCAweDJjYzNlNGM4MDAwMDAwMDAsIDB4ZjdlNjg1YjQwMDAwMDAwMCwKKyAgICAweDgxMDc4YTI5MDAwMDAwMDAsIDB4NDFhZDQ3NGMwMDAwMDAwMCwgMHgzNzRjNDhkMTAwMDAwMDAwLAorICAgIDB4ZWM2OTI5YWQwMDAwMDAwMCwgMHg5YTg4MjYzMDAwMDAwMDAwLCAweGQ4Nzg2NGNkMDAwMDAwMDAsCisgICAgMHhhZTk5NmI1MDAwMDAwMDAwLCAweDc1YmMwYTJjMDAwMDAwMDAsIDB4MDM1ZDA1YjEwMDAwMDAwMCwKKyAgICAweGMzZjdjOGQ0MDAwMDAwMDAsIDB4YjUxNmM3NDkwMDAwMDAwMCwgMHg2ZTMzYTYzNTAwMDAwMDAwLAorICAgIDB4MThkMmE5YTgwMDAwMDAwMCwgMHhlZTY2M2RmZTAwMDAwMDAwLCAweDk4ODczMjYzMDAwMDAwMDAsCisgICAgMHg0M2EyNTMxZjAwMDAwMDAwLCAweDM1NDM1YzgyMDAwMDAwMDAsIDB4ZjVlOTkxZTcwMDAwMDAwMCwKKyAgICAweDgzMDg5ZTdhMDAwMDAwMDAsIDB4NTgyZGZmMDYwMDAwMDAwMCwgMHgyZWNjZjA5YjAwMDAwMDAwLAorICAgIDB4YjQ0NGQ2YWIwMDAwMDAwMCwgMHhjMmE1ZDkzNjAwMDAwMDAwLCAweDE5ODBiODRhMDAwMDAwMDAsCisgICAgMHg2ZjYxYjdkNzAwMDAwMDAwLCAweGFmY2I3YWIyMDAwMDAwMDAsIDB4ZDkyYTc1MmYwMDAwMDAwMCwKKyAgICAweDAyMGYxNDUzMDAwMDAwMDAsIDB4NzRlZTFiY2UwMDAwMDAwMCwgMHg4MjVhOGY5ODAwMDAwMDAwLAorICAgIDB4ZjRiYjgwMDUwMDAwMDAwMCwgMHgyZjllZTE3OTAwMDAwMDAwLCAweDU5N2ZlZWU0MDAwMDAwMDAsCisgICAgMHg5OWQ1MjM4MTAwMDAwMDAwLCAweGVmMzQyYzFjMDAwMDAwMDAsIDB4MzQxMTRkNjAwMDAwMDAwMCwKKyAgICAweDQyZjA0MmZkMDAwMDAwMDAsIDB4ZjFmN2I5NDEwMDAwMDAwMCwgMHg4NzE2YjZkYzAwMDAwMDAwLAorICAgIDB4NWMzM2Q3YTAwMDAwMDAwMCwgMHgyYWQyZDgzZDAwMDAwMDAwLCAweGVhNzgxNTU4MDAwMDAwMDAsCisgICAgMHg5Yzk5MWFjNTAwMDAwMDAwLCAweDQ3YmM3YmI5MDAwMDAwMDAsIDB4MzE1ZDc0MjQwMDAwMDAwMCwKKyAgICAweGM3ZTllMDcyMDAwMDAwMDAsIDB4YjEwOGVmZWYwMDAwMDAwMCwgMHg2YTJkOGU5MzAwMDAwMDAwLAorICAgIDB4MWNjYzgxMGUwMDAwMDAwMCwgMHhkYzY2NGM2YjAwMDAwMDAwLCAweGFhODc0M2Y2MDAwMDAwMDAsCisgICAgMHg3MWEyMjI4YTAwMDAwMDAwLCAweDA3NDMyZDE3MDAwMDAwMDAsIDB4OWRjYjBiMjcwMDAwMDAwMCwKKyAgICAweGViMmEwNGJhMDAwMDAwMDAsIDB4MzAwZjY1YzYwMDAwMDAwMCwgMHg0NmVlNmE1YjAwMDAwMDAwLAorICAgIDB4ODY0NGE3M2UwMDAwMDAwMCwgMHhmMGE1YThhMzAwMDAwMDAwLCAweDJiODBjOWRmMDAwMDAwMDAsCisgICAgMHg1ZDYxYzY0MjAwMDAwMDAwLCAweGFiZDU1MjE0MDAwMDAwMDAsIDB4ZGQzNDVkODkwMDAwMDAwMCwKKyAgICAweDA2MTEzY2Y1MDAwMDAwMDAsIDB4NzBmMDMzNjgwMDAwMDAwMCwgMHhiMDVhZmUwZDAwMDAwMDAwLAorICAgIDB4YzZiYmYxOTAwMDAwMDAwMCwgMHgxZDllOTBlYzAwMDAwMDAwLCAweDZiN2Y5ZjcxMDAwMDAwMDAsCisgICAgMHgyOThmZGQ4YzAwMDAwMDAwLCAweDVmNmVkMjExMDAwMDAwMDAsIDB4ODQ0YmIzNmQwMDAwMDAwMCwKKyAgICAweGYyYWFiY2YwMDAwMDAwMDAsIDB4MzIwMDcxOTUwMDAwMDAwMCwgMHg0NGUxN2UwODAwMDAwMDAwLAorICAgIDB4OWZjNDFmNzQwMDAwMDAwMCwgMHhlOTI1MTBlOTAwMDAwMDAwLCAweDFmOTE4NGJmMDAwMDAwMDAsCisgICAgMHg2OTcwOGIyMjAwMDAwMDAwLCAweGIyNTVlYTVlMDAwMDAwMDAsIDB4YzRiNGU1YzMwMDAwMDAwMCwKKyAgICAweDA0MWUyOGE2MDAwMDAwMDAsIDB4NzJmZjI3M2IwMDAwMDAwMCwgMHhhOWRhNDY0NzAwMDAwMDAwLAorICAgIDB4ZGYzYjQ5ZGEwMDAwMDAwMCwgMHg0NWIzNmZlYTAwMDAwMDAwLCAweDMzNTI2MDc3MDAwMDAwMDAsCisgICAgMHhlODc3MDEwYjAwMDAwMDAwLCAweDllOTYwZTk2MDAwMDAwMDAsIDB4NWUzY2MzZjMwMDAwMDAwMCwKKyAgICAweDI4ZGRjYzZlMDAwMDAwMDAsIDB4ZjNmOGFkMTIwMDAwMDAwMCwgMHg4NTE5YTI4ZjAwMDAwMDAwLAorICAgIDB4NzNhZDM2ZDkwMDAwMDAwMCwgMHgwNTRjMzk0NDAwMDAwMDAwLCAweGRlNjk1ODM4MDAwMDAwMDAsCisgICAgMHhhODg4NTdhNTAwMDAwMDAwLCAweDY4MjI5YWMwMDAwMDAwMDAsIDB4MWVjMzk1NWQwMDAwMDAwMCwKKyAgICAweGM1ZTZmNDIxMDAwMDAwMDAsIDB4YjMwN2ZiYmMwMDAwMDAwMCwgMHhlMmVmNzM4MzAwMDAwMDAwLAorICAgIDB4OTQwZTdjMWUwMDAwMDAwMCwgMHg0ZjJiMWQ2MjAwMDAwMDAwLCAweDM5Y2ExMmZmMDAwMDAwMDAsCisgICAgMHhmOTYwZGY5YTAwMDAwMDAwLCAweDhmODFkMDA3MDAwMDAwMDAsIDB4NTRhNGIxN2IwMDAwMDAwMCwKKyAgICAweDIyNDViZWU2MDAwMDAwMDAsIDB4ZDRmMTJhYjAwMDAwMDAwMCwgMHhhMjEwMjUyZDAwMDAwMDAwLAorICAgIDB4NzkzNTQ0NTEwMDAwMDAwMCwgMHgwZmQ0NGJjYzAwMDAwMDAwLCAweGNmN2U4NmE5MDAwMDAwMDAsCisgICAgMHhiOTlmODkzNDAwMDAwMDAwLCAweDYyYmFlODQ4MDAwMDAwMDAsIDB4MTQ1YmU3ZDUwMDAwMDAwMCwKKyAgICAweDhlZDNjMWU1MDAwMDAwMDAsIDB4ZjgzMmNlNzgwMDAwMDAwMCwgMHgyMzE3YWYwNDAwMDAwMDAwLAorICAgIDB4NTVmNmEwOTkwMDAwMDAwMCwgMHg5NTVjNmRmYzAwMDAwMDAwLCAweGUzYmQ2MjYxMDAwMDAwMDAsCisgICAgMHgzODk4MDMxZDAwMDAwMDAwLCAweDRlNzkwYzgwMDAwMDAwMDAsIDB4YjhjZDk4ZDYwMDAwMDAwMCwKKyAgICAweGNlMmM5NzRiMDAwMDAwMDAsIDB4MTUwOWY2MzcwMDAwMDAwMCwgMHg2M2U4ZjlhYTAwMDAwMDAwLAorICAgIDB4YTM0MjM0Y2YwMDAwMDAwMCwgMHhkNWEzM2I1MjAwMDAwMDAwLCAweDBlODY1YTJlMDAwMDAwMDAsCisgICAgMHg3ODY3NTViMzAwMDAwMDAwLCAweDNhOTcxNzRlMDAwMDAwMDAsIDB4NGM3NjE4ZDMwMDAwMDAwMCwKKyAgICAweDk3NTM3OWFmMDAwMDAwMDAsIDB4ZTFiMjc2MzIwMDAwMDAwMCwgMHgyMTE4YmI1NzAwMDAwMDAwLAorICAgIDB4NTdmOWI0Y2EwMDAwMDAwMCwgMHg4Y2RjZDViNjAwMDAwMDAwLCAweGZhM2RkYTJiMDAwMDAwMDAsCisgICAgMHgwYzg5NGU3ZDAwMDAwMDAwLCAweDdhNjg0MWUwMDAwMDAwMDAsIDB4YTE0ZDIwOWMwMDAwMDAwMCwKKyAgICAweGQ3YWMyZjAxMDAwMDAwMDAsIDB4MTcwNmUyNjQwMDAwMDAwMCwgMHg2MWU3ZWRmOTAwMDAwMDAwLAorICAgIDB4YmFjMjhjODUwMDAwMDAwMCwgMHhjYzIzODMxODAwMDAwMDAwLCAweDU2YWJhNTI4MDAwMDAwMDAsCisgICAgMHgyMDRhYWFiNTAwMDAwMDAwLCAweGZiNmZjYmM5MDAwMDAwMDAsIDB4OGQ4ZWM0NTQwMDAwMDAwMCwKKyAgICAweDRkMjQwOTMxMDAwMDAwMDAsIDB4M2JjNTA2YWMwMDAwMDAwMCwgMHhlMGUwNjdkMDAwMDAwMDAwLAorICAgIDB4OTYwMTY4NGQwMDAwMDAwMCwgMHg2MGI1ZmMxYjAwMDAwMDAwLCAweDE2NTRmMzg2MDAwMDAwMDAsCisgICAgMHhjZDcxOTJmYTAwMDAwMDAwLCAweGJiOTA5ZDY3MDAwMDAwMDAsIDB4N2IzYTUwMDIwMDAwMDAwMCwKKyAgICAweDBkZGI1ZjlmMDAwMDAwMDAsIDB4ZDZmZTNlZTMwMDAwMDAwMCwgMHhhMDFmMzE3ZTAwMDAwMDAwLAorICAgIDB4MTMxOGNhYzIwMDAwMDAwMCwgMHg2NWY5YzU1ZjAwMDAwMDAwLCAweGJlZGNhNDIzMDAwMDAwMDAsCisgICAgMHhjODNkYWJiZTAwMDAwMDAwLCAweDA4OTc2NmRiMDAwMDAwMDAsIDB4N2U3NjY5NDYwMDAwMDAwMCwKKyAgICAweGE1NTMwODNhMDAwMDAwMDAsIDB4ZDNiMjA3YTcwMDAwMDAwMCwgMHgyNTA2OTNmMTAwMDAwMDAwLAorICAgIDB4NTNlNzljNmMwMDAwMDAwMCwgMHg4OGMyZmQxMDAwMDAwMDAwLCAweGZlMjNmMjhkMDAwMDAwMDAsCisgICAgMHgzZTg5M2ZlODAwMDAwMDAwLCAweDQ4NjgzMDc1MDAwMDAwMDAsIDB4OTM0ZDUxMDkwMDAwMDAwMCwKKyAgICAweGU1YWM1ZTk0MDAwMDAwMDAsIDB4N2YyNDc4YTQwMDAwMDAwMCwgMHgwOWM1NzczOTAwMDAwMDAwLAorICAgIDB4ZDJlMDE2NDUwMDAwMDAwMCwgMHhhNDAxMTlkODAwMDAwMDAwLCAweDY0YWJkNGJkMDAwMDAwMDAsCisgICAgMHgxMjRhZGIyMDAwMDAwMDAwLCAweGM5NmZiYTVjMDAwMDAwMDAsIDB4YmY4ZWI1YzEwMDAwMDAwMCwKKyAgICAweDQ5M2EyMTk3MDAwMDAwMDAsIDB4M2ZkYjJlMGEwMDAwMDAwMCwgMHhlNGZlNGY3NjAwMDAwMDAwLAorICAgIDB4OTIxZjQwZWIwMDAwMDAwMCwgMHg1MmI1OGQ4ZTAwMDAwMDAwLCAweDI0NTQ4MjEzMDAwMDAwMDAsCisgICAgMHhmZjcxZTM2ZjAwMDAwMDAwLCAweDg5OTBlY2YyMDAwMDAwMDAsIDB4Y2I2MGFlMGYwMDAwMDAwMCwKKyAgICAweGJkODFhMTkyMDAwMDAwMDAsIDB4NjZhNGMwZWUwMDAwMDAwMCwgMHgxMDQ1Y2Y3MzAwMDAwMDAwLAorICAgIDB4ZDBlZjAyMTYwMDAwMDAwMCwgMHhhNjBlMGQ4YjAwMDAwMDAwLCAweDdkMmI2Y2Y3MDAwMDAwMDAsCisgICAgMHgwYmNhNjM2YTAwMDAwMDAwLCAweGZkN2VmNzNjMDAwMDAwMDAsIDB4OGI5ZmY4YTEwMDAwMDAwMCwKKyAgICAweDUwYmE5OWRkMDAwMDAwMDAsIDB4MjY1Yjk2NDAwMDAwMDAwMCwgMHhlNmYxNWIyNTAwMDAwMDAwLAorICAgIDB4OTAxMDU0YjgwMDAwMDAwMCwgMHg0YjM1MzVjNDAwMDAwMDAwLCAweDNkZDQzYTU5MDAwMDAwMDAsCisgICAgMHhhNzVjMWM2OTAwMDAwMDAwLCAweGQxYmQxM2Y0MDAwMDAwMDAsIDB4MGE5ODcyODgwMDAwMDAwMCwKKyAgICAweDdjNzk3ZDE1MDAwMDAwMDAsIDB4YmNkM2IwNzAwMDAwMDAwMCwgMHhjYTMyYmZlZDAwMDAwMDAwLAorICAgIDB4MTExN2RlOTEwMDAwMDAwMCwgMHg2N2Y2ZDEwYzAwMDAwMDAwLCAweDkxNDI0NTVhMDAwMDAwMDAsCisgICAgMHhlN2EzNGFjNzAwMDAwMDAwLCAweDNjODYyYmJiMDAwMDAwMDAsIDB4NGE2NzI0MjYwMDAwMDAwMCwKKyAgICAweDhhY2RlOTQzMDAwMDAwMDAsIDB4ZmMyY2U2ZGUwMDAwMDAwMCwgMHgyNzA5ODdhMjAwMDAwMDAwLAorICAgIDB4NTFlODg4M2YwMDAwMDAwMH0sCisgICB7MHgwMDAwMDAwMDAwMDAwMDAwLCAweGU4ZGJmYmI5MDAwMDAwMDAsIDB4OTFiMTg2YTgwMDAwMDAwMCwKKyAgICAweDc5NmE3ZDExMDAwMDAwMDAsIDB4NjM2NTdjOGEwMDAwMDAwMCwgMHg4YmJlODczMzAwMDAwMDAwLAorICAgIDB4ZjJkNGZhMjIwMDAwMDAwMCwgMHgxYTBmMDE5YjAwMDAwMDAwLCAweDg3Y2M4OWNmMDAwMDAwMDAsCisgICAgMHg2ZjE3NzI3NjAwMDAwMDAwLCAweDE2N2QwZjY3MDAwMDAwMDAsIDB4ZmVhNmY0ZGUwMDAwMDAwMCwKKyAgICAweGU0YTlmNTQ1MDAwMDAwMDAsIDB4MGM3MjBlZmMwMDAwMDAwMCwgMHg3NTE4NzNlZDAwMDAwMDAwLAorICAgIDB4OWRjMzg4NTQwMDAwMDAwMCwgMHg0ZjlmNjI0NDAwMDAwMDAwLCAweGE3NDQ5OWZkMDAwMDAwMDAsCisgICAgMHhkZTJlZTRlYzAwMDAwMDAwLCAweDM2ZjUxZjU1MDAwMDAwMDAsIDB4MmNmYTFlY2UwMDAwMDAwMCwKKyAgICAweGM0MjFlNTc3MDAwMDAwMDAsIDB4YmQ0Yjk4NjYwMDAwMDAwMCwgMHg1NTkwNjNkZjAwMDAwMDAwLAorICAgIDB4Yzg1M2ViOGIwMDAwMDAwMCwgMHgyMDg4MTAzMjAwMDAwMDAwLCAweDU5ZTI2ZDIzMDAwMDAwMDAsCisgICAgMHhiMTM5OTY5YTAwMDAwMDAwLCAweGFiMzY5NzAxMDAwMDAwMDAsIDB4NDNlZDZjYjgwMDAwMDAwMCwKKyAgICAweDNhODcxMWE5MDAwMDAwMDAsIDB4ZDI1Y2VhMTAwMDAwMDAwMCwgMHg5ZTNlYzU4ODAwMDAwMDAwLAorICAgIDB4NzZlNTNlMzEwMDAwMDAwMCwgMHgwZjhmNDMyMDAwMDAwMDAwLCAweGU3NTRiODk5MDAwMDAwMDAsCisgICAgMHhmZDViYjkwMjAwMDAwMDAwLCAweDE1ODA0MmJiMDAwMDAwMDAsIDB4NmNlYTNmYWEwMDAwMDAwMCwKKyAgICAweDg0MzFjNDEzMDAwMDAwMDAsIDB4MTlmMjRjNDcwMDAwMDAwMCwgMHhmMTI5YjdmZTAwMDAwMDAwLAorICAgIDB4ODg0M2NhZWYwMDAwMDAwMCwgMHg2MDk4MzE1NjAwMDAwMDAwLCAweDdhOTczMGNkMDAwMDAwMDAsCisgICAgMHg5MjRjY2I3NDAwMDAwMDAwLCAweGViMjZiNjY1MDAwMDAwMDAsIDB4MDNmZDRkZGMwMDAwMDAwMCwKKyAgICAweGQxYTFhN2NjMDAwMDAwMDAsIDB4Mzk3YTVjNzUwMDAwMDAwMCwgMHg0MDEwMjE2NDAwMDAwMDAwLAorICAgIDB4YThjYmRhZGQwMDAwMDAwMCwgMHhiMmM0ZGI0NjAwMDAwMDAwLCAweDVhMWYyMGZmMDAwMDAwMDAsCisgICAgMHgyMzc1NWRlZTAwMDAwMDAwLCAweGNiYWVhNjU3MDAwMDAwMDAsIDB4NTY2ZDJlMDMwMDAwMDAwMCwKKyAgICAweGJlYjZkNWJhMDAwMDAwMDAsIDB4YzdkY2E4YWIwMDAwMDAwMCwgMHgyZjA3NTMxMjAwMDAwMDAwLAorICAgIDB4MzUwODUyODkwMDAwMDAwMCwgMHhkZGQzYTkzMDAwMDAwMDAwLCAweGE0YjlkNDIxMDAwMDAwMDAsCisgICAgMHg0YzYyMmY5ODAwMDAwMDAwLCAweDdkN2JmYmNhMDAwMDAwMDAsIDB4OTVhMDAwNzMwMDAwMDAwMCwKKyAgICAweGVjY2E3ZDYyMDAwMDAwMDAsIDB4MDQxMTg2ZGIwMDAwMDAwMCwgMHgxZTFlODc0MDAwMDAwMDAwLAorICAgIDB4ZjZjNTdjZjkwMDAwMDAwMCwgMHg4ZmFmMDFlODAwMDAwMDAwLCAweDY3NzRmYTUxMDAwMDAwMDAsCisgICAgMHhmYWI3NzIwNTAwMDAwMDAwLCAweDEyNmM4OWJjMDAwMDAwMDAsIDB4NmIwNmY0YWQwMDAwMDAwMCwKKyAgICAweDgzZGQwZjE0MDAwMDAwMDAsIDB4OTlkMjBlOGYwMDAwMDAwMCwgMHg3MTA5ZjUzNjAwMDAwMDAwLAorICAgIDB4MDg2Mzg4MjcwMDAwMDAwMCwgMHhlMGI4NzM5ZTAwMDAwMDAwLCAweDMyZTQ5OThlMDAwMDAwMDAsCisgICAgMHhkYTNmNjIzNzAwMDAwMDAwLCAweGEzNTUxZjI2MDAwMDAwMDAsIDB4NGI4ZWU0OWYwMDAwMDAwMCwKKyAgICAweDUxODFlNTA0MDAwMDAwMDAsIDB4Yjk1YTFlYmQwMDAwMDAwMCwgMHhjMDMwNjNhYzAwMDAwMDAwLAorICAgIDB4MjhlYjk4MTUwMDAwMDAwMCwgMHhiNTI4MTA0MTAwMDAwMDAwLCAweDVkZjNlYmY4MDAwMDAwMDAsCisgICAgMHgyNDk5OTZlOTAwMDAwMDAwLCAweGNjNDI2ZDUwMDAwMDAwMDAsIDB4ZDY0ZDZjY2IwMDAwMDAwMCwKKyAgICAweDNlOTY5NzcyMDAwMDAwMDAsIDB4NDdmY2VhNjMwMDAwMDAwMCwgMHhhZjI3MTFkYTAwMDAwMDAwLAorICAgIDB4ZTM0NTNlNDIwMDAwMDAwMCwgMHgwYjllYzVmYjAwMDAwMDAwLCAweDcyZjRiOGVhMDAwMDAwMDAsCisgICAgMHg5YTJmNDM1MzAwMDAwMDAwLCAweDgwMjA0MmM4MDAwMDAwMDAsIDB4NjhmYmI5NzEwMDAwMDAwMCwKKyAgICAweDExOTFjNDYwMDAwMDAwMDAsIDB4Zjk0YTNmZDkwMDAwMDAwMCwgMHg2NDg5Yjc4ZDAwMDAwMDAwLAorICAgIDB4OGM1MjRjMzQwMDAwMDAwMCwgMHhmNTM4MzEyNTAwMDAwMDAwLCAweDFkZTNjYTljMDAwMDAwMDAsCisgICAgMHgwN2VjY2IwNzAwMDAwMDAwLCAweGVmMzczMGJlMDAwMDAwMDAsIDB4OTY1ZDRkYWYwMDAwMDAwMCwKKyAgICAweDdlODZiNjE2MDAwMDAwMDAsIDB4YWNkYTVjMDYwMDAwMDAwMCwgMHg0NDAxYTdiZjAwMDAwMDAwLAorICAgIDB4M2Q2YmRhYWUwMDAwMDAwMCwgMHhkNWIwMjExNzAwMDAwMDAwLCAweGNmYmYyMDhjMDAwMDAwMDAsCisgICAgMHgyNzY0ZGIzNTAwMDAwMDAwLCAweDVlMGVhNjI0MDAwMDAwMDAsIDB4YjZkNTVkOWQwMDAwMDAwMCwKKyAgICAweDJiMTZkNWM5MDAwMDAwMDAsIDB4YzNjZDJlNzAwMDAwMDAwMCwgMHhiYWE3NTM2MTAwMDAwMDAwLAorICAgIDB4NTI3Y2E4ZDgwMDAwMDAwMCwgMHg0ODczYTk0MzAwMDAwMDAwLCAweGEwYTg1MmZhMDAwMDAwMDAsCisgICAgMHhkOWMyMmZlYjAwMDAwMDAwLCAweDMxMTlkNDUyMDAwMDAwMDAsIDB4YmJmMDg3NGUwMDAwMDAwMCwKKyAgICAweDUzMmI3Y2Y3MDAwMDAwMDAsIDB4MmE0MTAxZTYwMDAwMDAwMCwgMHhjMjlhZmE1ZjAwMDAwMDAwLAorICAgIDB4ZDg5NWZiYzQwMDAwMDAwMCwgMHgzMDRlMDA3ZDAwMDAwMDAwLCAweDQ5MjQ3ZDZjMDAwMDAwMDAsCisgICAgMHhhMWZmODZkNTAwMDAwMDAwLCAweDNjM2MwZTgxMDAwMDAwMDAsIDB4ZDRlN2Y1MzgwMDAwMDAwMCwKKyAgICAweGFkOGQ4ODI5MDAwMDAwMDAsIDB4NDU1NjczOTAwMDAwMDAwMCwgMHg1ZjU5NzIwYjAwMDAwMDAwLAorICAgIDB4Yjc4Mjg5YjIwMDAwMDAwMCwgMHhjZWU4ZjRhMzAwMDAwMDAwLCAweDI2MzMwZjFhMDAwMDAwMDAsCisgICAgMHhmNDZmZTUwYTAwMDAwMDAwLCAweDFjYjQxZWIzMDAwMDAwMDAsIDB4NjVkZTYzYTIwMDAwMDAwMCwKKyAgICAweDhkMDU5ODFiMDAwMDAwMDAsIDB4OTcwYTk5ODAwMDAwMDAwMCwgMHg3ZmQxNjIzOTAwMDAwMDAwLAorICAgIDB4MDZiYjFmMjgwMDAwMDAwMCwgMHhlZTYwZTQ5MTAwMDAwMDAwLCAweDczYTM2Y2M1MDAwMDAwMDAsCisgICAgMHg5Yjc4OTc3YzAwMDAwMDAwLCAweGUyMTJlYTZkMDAwMDAwMDAsIDB4MGFjOTExZDQwMDAwMDAwMCwKKyAgICAweDEwYzYxMDRmMDAwMDAwMDAsIDB4ZjgxZGViZjYwMDAwMDAwMCwgMHg4MTc3OTZlNzAwMDAwMDAwLAorICAgIDB4NjlhYzZkNWUwMDAwMDAwMCwgMHgyNWNlNDJjNjAwMDAwMDAwLCAweGNkMTViOTdmMDAwMDAwMDAsCisgICAgMHhiNDdmYzQ2ZTAwMDAwMDAwLCAweDVjYTQzZmQ3MDAwMDAwMDAsIDB4NDZhYjNlNGMwMDAwMDAwMCwKKyAgICAweGFlNzBjNWY1MDAwMDAwMDAsIDB4ZDcxYWI4ZTQwMDAwMDAwMCwgMHgzZmMxNDM1ZDAwMDAwMDAwLAorICAgIDB4YTIwMmNiMDkwMDAwMDAwMCwgMHg0YWQ5MzBiMDAwMDAwMDAwLCAweDMzYjM0ZGExMDAwMDAwMDAsCisgICAgMHhkYjY4YjYxODAwMDAwMDAwLCAweGMxNjdiNzgzMDAwMDAwMDAsIDB4MjliYzRjM2EwMDAwMDAwMCwKKyAgICAweDUwZDYzMTJiMDAwMDAwMDAsIDB4YjgwZGNhOTIwMDAwMDAwMCwgMHg2YTUxMjA4MjAwMDAwMDAwLAorICAgIDB4ODI4YWRiM2IwMDAwMDAwMCwgMHhmYmUwYTYyYTAwMDAwMDAwLCAweDEzM2I1ZDkzMDAwMDAwMDAsCisgICAgMHgwOTM0NWMwODAwMDAwMDAwLCAweGUxZWZhN2IxMDAwMDAwMDAsIDB4OTg4NWRhYTAwMDAwMDAwMCwKKyAgICAweDcwNWUyMTE5MDAwMDAwMDAsIDB4ZWQ5ZGE5NGQwMDAwMDAwMCwgMHgwNTQ2NTJmNDAwMDAwMDAwLAorICAgIDB4N2MyYzJmZTUwMDAwMDAwMCwgMHg5NGY3ZDQ1YzAwMDAwMDAwLCAweDhlZjhkNWM3MDAwMDAwMDAsCisgICAgMHg2NjIzMmU3ZTAwMDAwMDAwLCAweDFmNDk1MzZmMDAwMDAwMDAsIDB4Zjc5MmE4ZDYwMDAwMDAwMCwKKyAgICAweGM2OGI3Yzg0MDAwMDAwMDAsIDB4MmU1MDg3M2QwMDAwMDAwMCwgMHg1NzNhZmEyYzAwMDAwMDAwLAorICAgIDB4YmZlMTAxOTUwMDAwMDAwMCwgMHhhNWVlMDAwZTAwMDAwMDAwLCAweDRkMzVmYmI3MDAwMDAwMDAsCisgICAgMHgzNDVmODZhNjAwMDAwMDAwLCAweGRjODQ3ZDFmMDAwMDAwMDAsIDB4NDE0N2Y1NGIwMDAwMDAwMCwKKyAgICAweGE5OWMwZWYyMDAwMDAwMDAsIDB4ZDBmNjczZTMwMDAwMDAwMCwgMHgzODJkODg1YTAwMDAwMDAwLAorICAgIDB4MjIyMjg5YzEwMDAwMDAwMCwgMHhjYWY5NzI3ODAwMDAwMDAwLCAweGIzOTMwZjY5MDAwMDAwMDAsCisgICAgMHg1YjQ4ZjRkMDAwMDAwMDAwLCAweDg5MTQxZWMwMDAwMDAwMDAsIDB4NjFjZmU1NzkwMDAwMDAwMCwKKyAgICAweDE4YTU5ODY4MDAwMDAwMDAsIDB4ZjA3ZTYzZDEwMDAwMDAwMCwgMHhlYTcxNjI0YTAwMDAwMDAwLAorICAgIDB4MDJhYTk5ZjMwMDAwMDAwMCwgMHg3YmMwZTRlMjAwMDAwMDAwLCAweDkzMWIxZjViMDAwMDAwMDAsCisgICAgMHgwZWQ4OTcwZjAwMDAwMDAwLCAweGU2MDM2Y2I2MDAwMDAwMDAsIDB4OWY2OTExYTcwMDAwMDAwMCwKKyAgICAweDc3YjJlYTFlMDAwMDAwMDAsIDB4NmRiZGViODUwMDAwMDAwMCwgMHg4NTY2MTAzYzAwMDAwMDAwLAorICAgIDB4ZmMwYzZkMmQwMDAwMDAwMCwgMHgxNGQ3OTY5NDAwMDAwMDAwLCAweDU4YjViOTBjMDAwMDAwMDAsCisgICAgMHhiMDZlNDJiNTAwMDAwMDAwLCAweGM5MDQzZmE0MDAwMDAwMDAsIDB4MjFkZmM0MWQwMDAwMDAwMCwKKyAgICAweDNiZDBjNTg2MDAwMDAwMDAsIDB4ZDMwYjNlM2YwMDAwMDAwMCwgMHhhYTYxNDMyZTAwMDAwMDAwLAorICAgIDB4NDJiYWI4OTcwMDAwMDAwMCwgMHhkZjc5MzBjMzAwMDAwMDAwLCAweDM3YTJjYjdhMDAwMDAwMDAsCisgICAgMHg0ZWM4YjY2YjAwMDAwMDAwLCAweGE2MTM0ZGQyMDAwMDAwMDAsIDB4YmMxYzRjNDkwMDAwMDAwMCwKKyAgICAweDU0YzdiN2YwMDAwMDAwMDAsIDB4MmRhZGNhZTEwMDAwMDAwMCwgMHhjNTc2MzE1ODAwMDAwMDAwLAorICAgIDB4MTcyYWRiNDgwMDAwMDAwMCwgMHhmZmYxMjBmMTAwMDAwMDAwLCAweDg2OWI1ZGUwMDAwMDAwMDAsCisgICAgMHg2ZTQwYTY1OTAwMDAwMDAwLCAweDc0NGZhN2MyMDAwMDAwMDAsIDB4OWM5NDVjN2IwMDAwMDAwMCwKKyAgICAweGU1ZmUyMTZhMDAwMDAwMDAsIDB4MGQyNWRhZDMwMDAwMDAwMCwgMHg5MGU2NTI4NzAwMDAwMDAwLAorICAgIDB4NzgzZGE5M2UwMDAwMDAwMCwgMHgwMTU3ZDQyZjAwMDAwMDAwLCAweGU5OGMyZjk2MDAwMDAwMDAsCisgICAgMHhmMzgzMmUwZDAwMDAwMDAwLCAweDFiNThkNWI0MDAwMDAwMDAsIDB4NjIzMmE4YTUwMDAwMDAwMCwKKyAgICAweDhhZTk1MzFjMDAwMDAwMDB9LAorICAgezB4MDAwMDAwMDAwMDAwMDAwMCwgMHg5MTkxNjhhZTAwMDAwMDAwLCAweDYzMjVhMDg3MDAwMDAwMDAsCisgICAgMHhmMmI0YzgyOTAwMDAwMDAwLCAweDg3NGMzMWQ0MDAwMDAwMDAsIDB4MTZkZDU5N2EwMDAwMDAwMCwKKyAgICAweGU0Njk5MTUzMDAwMDAwMDAsIDB4NzVmOGY5ZmQwMDAwMDAwMCwgMHg0ZjlmMTM3MzAwMDAwMDAwLAorICAgIDB4ZGUwZTdiZGQwMDAwMDAwMCwgMHgyY2JhYjNmNDAwMDAwMDAwLCAweGJkMmJkYjVhMDAwMDAwMDAsCisgICAgMHhjOGQzMjJhNzAwMDAwMDAwLCAweDU5NDI0YTA5MDAwMDAwMDAsIDB4YWJmNjgyMjAwMDAwMDAwMCwKKyAgICAweDNhNjdlYThlMDAwMDAwMDAsIDB4OWUzZTI3ZTYwMDAwMDAwMCwgMHgwZmFmNGY0ODAwMDAwMDAwLAorICAgIDB4ZmQxYjg3NjEwMDAwMDAwMCwgMHg2YzhhZWZjZjAwMDAwMDAwLCAweDE5NzIxNjMyMDAwMDAwMDAsCisgICAgMHg4OGUzN2U5YzAwMDAwMDAwLCAweDdhNTdiNmI1MDAwMDAwMDAsIDB4ZWJjNmRlMWIwMDAwMDAwMCwKKyAgICAweGQxYTEzNDk1MDAwMDAwMDAsIDB4NDAzMDVjM2IwMDAwMDAwMCwgMHhiMjg0OTQxMjAwMDAwMDAwLAorICAgIDB4MjMxNWZjYmMwMDAwMDAwMCwgMHg1NmVkMDU0MTAwMDAwMDAwLCAweGM3N2M2ZGVmMDAwMDAwMDAsCisgICAgMHgzNWM4YTVjNjAwMDAwMDAwLCAweGE0NTljZDY4MDAwMDAwMDAsIDB4N2Q3YjNmMTcwMDAwMDAwMCwKKyAgICAweGVjZWE1N2I5MDAwMDAwMDAsIDB4MWU1ZTlmOTAwMDAwMDAwMCwgMHg4ZmNmZjczZTAwMDAwMDAwLAorICAgIDB4ZmEzNzBlYzMwMDAwMDAwMCwgMHg2YmE2NjY2ZDAwMDAwMDAwLCAweDk5MTJhZTQ0MDAwMDAwMDAsCisgICAgMHgwODgzYzZlYTAwMDAwMDAwLCAweDMyZTQyYzY0MDAwMDAwMDAsIDB4YTM3NTQ0Y2EwMDAwMDAwMCwKKyAgICAweDUxYzE4Y2UzMDAwMDAwMDAsIDB4YzA1MGU0NGQwMDAwMDAwMCwgMHhiNWE4MWRiMDAwMDAwMDAwLAorICAgIDB4MjQzOTc1MWUwMDAwMDAwMCwgMHhkNjhkYmQzNzAwMDAwMDAwLCAweDQ3MWNkNTk5MDAwMDAwMDAsCisgICAgMHhlMzQ1MThmMTAwMDAwMDAwLCAweDcyZDQ3MDVmMDAwMDAwMDAsIDB4ODA2MGI4NzYwMDAwMDAwMCwKKyAgICAweDExZjFkMGQ4MDAwMDAwMDAsIDB4NjQwOTI5MjUwMDAwMDAwMCwgMHhmNTk4NDE4YjAwMDAwMDAwLAorICAgIDB4MDcyYzg5YTIwMDAwMDAwMCwgMHg5NmJkZTEwYzAwMDAwMDAwLCAweGFjZGEwYjgyMDAwMDAwMDAsCisgICAgMHgzZDRiNjMyYzAwMDAwMDAwLCAweGNmZmZhYjA1MDAwMDAwMDAsIDB4NWU2ZWMzYWIwMDAwMDAwMCwKKyAgICAweDJiOTYzYTU2MDAwMDAwMDAsIDB4YmEwNzUyZjgwMDAwMDAwMCwgMHg0OGIzOWFkMTAwMDAwMDAwLAorICAgIDB4ZDkyMmYyN2YwMDAwMDAwMCwgMHhmYWY2N2UyZTAwMDAwMDAwLCAweDZiNjcxNjgwMDAwMDAwMDAsCisgICAgMHg5OWQzZGVhOTAwMDAwMDAwLCAweDA4NDJiNjA3MDAwMDAwMDAsIDB4N2RiYTRmZmEwMDAwMDAwMCwKKyAgICAweGVjMmIyNzU0MDAwMDAwMDAsIDB4MWU5ZmVmN2QwMDAwMDAwMCwgMHg4ZjBlODdkMzAwMDAwMDAwLAorICAgIDB4YjU2OTZkNWQwMDAwMDAwMCwgMHgyNGY4MDVmMzAwMDAwMDAwLCAweGQ2NGNjZGRhMDAwMDAwMDAsCisgICAgMHg0N2RkYTU3NDAwMDAwMDAwLCAweDMyMjU1Yzg5MDAwMDAwMDAsIDB4YTNiNDM0MjcwMDAwMDAwMCwKKyAgICAweDUxMDBmYzBlMDAwMDAwMDAsIDB4YzA5MTk0YTAwMDAwMDAwMCwgMHg2NGM4NTljODAwMDAwMDAwLAorICAgIDB4ZjU1OTMxNjYwMDAwMDAwMCwgMHgwN2VkZjk0ZjAwMDAwMDAwLCAweDk2N2M5MWUxMDAwMDAwMDAsCisgICAgMHhlMzg0NjgxYzAwMDAwMDAwLCAweDcyMTUwMGIyMDAwMDAwMDAsIDB4ODBhMWM4OWIwMDAwMDAwMCwKKyAgICAweDExMzBhMDM1MDAwMDAwMDAsIDB4MmI1NzRhYmIwMDAwMDAwMCwgMHhiYWM2MjIxNTAwMDAwMDAwLAorICAgIDB4NDg3MmVhM2MwMDAwMDAwMCwgMHhkOWUzODI5MjAwMDAwMDAwLCAweGFjMWI3YjZmMDAwMDAwMDAsCisgICAgMHgzZDhhMTNjMTAwMDAwMDAwLCAweGNmM2VkYmU4MDAwMDAwMDAsIDB4NWVhZmIzNDYwMDAwMDAwMCwKKyAgICAweDg3OGQ0MTM5MDAwMDAwMDAsIDB4MTYxYzI5OTcwMDAwMDAwMCwgMHhlNGE4ZTFiZTAwMDAwMDAwLAorICAgIDB4NzUzOTg5MTAwMDAwMDAwMCwgMHgwMGMxNzBlZDAwMDAwMDAwLCAweDkxNTAxODQzMDAwMDAwMDAsCisgICAgMHg2M2U0ZDA2YTAwMDAwMDAwLCAweGYyNzViOGM0MDAwMDAwMDAsIDB4YzgxMjUyNGEwMDAwMDAwMCwKKyAgICAweDU5ODMzYWU0MDAwMDAwMDAsIDB4YWIzN2YyY2QwMDAwMDAwMCwgMHgzYWE2OWE2MzAwMDAwMDAwLAorICAgIDB4NGY1ZTYzOWUwMDAwMDAwMCwgMHhkZWNmMGIzMDAwMDAwMDAwLCAweDJjN2JjMzE5MDAwMDAwMDAsCisgICAgMHhiZGVhYWJiNzAwMDAwMDAwLCAweDE5YjM2NmRmMDAwMDAwMDAsIDB4ODgyMjBlNzEwMDAwMDAwMCwKKyAgICAweDdhOTZjNjU4MDAwMDAwMDAsIDB4ZWIwN2FlZjYwMDAwMDAwMCwgMHg5ZWZmNTcwYjAwMDAwMDAwLAorICAgIDB4MGY2ZTNmYTUwMDAwMDAwMCwgMHhmZGRhZjc4YzAwMDAwMDAwLCAweDZjNGI5ZjIyMDAwMDAwMDAsCisgICAgMHg1NjJjNzVhYzAwMDAwMDAwLCAweGM3YmQxZDAyMDAwMDAwMDAsIDB4MzUwOWQ1MmIwMDAwMDAwMCwKKyAgICAweGE0OThiZDg1MDAwMDAwMDAsIDB4ZDE2MDQ0NzgwMDAwMDAwMCwgMHg0MGYxMmNkNjAwMDAwMDAwLAorICAgIDB4YjI0NWU0ZmYwMDAwMDAwMCwgMHgyM2Q0OGM1MTAwMDAwMDAwLCAweGY0ZWRmZDVjMDAwMDAwMDAsCisgICAgMHg2NTdjOTVmMjAwMDAwMDAwLCAweDk3Yzg1ZGRiMDAwMDAwMDAsIDB4MDY1OTM1NzUwMDAwMDAwMCwKKyAgICAweDczYTFjYzg4MDAwMDAwMDAsIDB4ZTIzMGE0MjYwMDAwMDAwMCwgMHgxMDg0NmMwZjAwMDAwMDAwLAorICAgIDB4ODExNTA0YTEwMDAwMDAwMCwgMHhiYjcyZWUyZjAwMDAwMDAwLCAweDJhZTM4NjgxMDAwMDAwMDAsCisgICAgMHhkODU3NGVhODAwMDAwMDAwLCAweDQ5YzYyNjA2MDAwMDAwMDAsIDB4M2MzZWRmZmIwMDAwMDAwMCwKKyAgICAweGFkYWZiNzU1MDAwMDAwMDAsIDB4NWYxYjdmN2MwMDAwMDAwMCwgMHhjZThhMTdkMjAwMDAwMDAwLAorICAgIDB4NmFkM2RhYmEwMDAwMDAwMCwgMHhmYjQyYjIxNDAwMDAwMDAwLCAweDA5ZjY3YTNkMDAwMDAwMDAsCisgICAgMHg5ODY3MTI5MzAwMDAwMDAwLCAweGVkOWZlYjZlMDAwMDAwMDAsIDB4N2MwZTgzYzAwMDAwMDAwMCwKKyAgICAweDhlYmE0YmU5MDAwMDAwMDAsIDB4MWYyYjIzNDcwMDAwMDAwMCwgMHgyNTRjYzljOTAwMDAwMDAwLAorICAgIDB4YjRkZGExNjcwMDAwMDAwMCwgMHg0NjY5Njk0ZTAwMDAwMDAwLCAweGQ3ZjgwMWUwMDAwMDAwMDAsCisgICAgMHhhMjAwZjgxZDAwMDAwMDAwLCAweDMzOTE5MGIzMDAwMDAwMDAsIDB4YzEyNTU4OWEwMDAwMDAwMCwKKyAgICAweDUwYjQzMDM0MDAwMDAwMDAsIDB4ODk5NmMyNGIwMDAwMDAwMCwgMHgxODA3YWFlNTAwMDAwMDAwLAorICAgIDB4ZWFiMzYyY2MwMDAwMDAwMCwgMHg3YjIyMGE2MjAwMDAwMDAwLCAweDBlZGFmMzlmMDAwMDAwMDAsCisgICAgMHg5ZjRiOWIzMTAwMDAwMDAwLCAweDZkZmY1MzE4MDAwMDAwMDAsIDB4ZmM2ZTNiYjYwMDAwMDAwMCwKKyAgICAweGM2MDlkMTM4MDAwMDAwMDAsIDB4NTc5OGI5OTYwMDAwMDAwMCwgMHhhNTJjNzFiZjAwMDAwMDAwLAorICAgIDB4MzRiZDE5MTEwMDAwMDAwMCwgMHg0MTQ1ZTBlYzAwMDAwMDAwLCAweGQwZDQ4ODQyMDAwMDAwMDAsCisgICAgMHgyMjYwNDA2YjAwMDAwMDAwLCAweGIzZjEyOGM1MDAwMDAwMDAsIDB4MTdhOGU1YWQwMDAwMDAwMCwKKyAgICAweDg2Mzk4ZDAzMDAwMDAwMDAsIDB4NzQ4ZDQ1MmEwMDAwMDAwMCwgMHhlNTFjMmQ4NDAwMDAwMDAwLAorICAgIDB4OTBlNGQ0NzkwMDAwMDAwMCwgMHgwMTc1YmNkNzAwMDAwMDAwLCAweGYzYzE3NGZlMDAwMDAwMDAsCisgICAgMHg2MjUwMWM1MDAwMDAwMDAwLCAweDU4MzdmNmRlMDAwMDAwMDAsIDB4YzlhNjllNzAwMDAwMDAwMCwKKyAgICAweDNiMTI1NjU5MDAwMDAwMDAsIDB4YWE4MzNlZjcwMDAwMDAwMCwgMHhkZjdiYzcwYTAwMDAwMDAwLAorICAgIDB4NGVlYWFmYTQwMDAwMDAwMCwgMHhiYzVlNjc4ZDAwMDAwMDAwLCAweDJkY2YwZjIzMDAwMDAwMDAsCisgICAgMHgwZTFiODM3MjAwMDAwMDAwLCAweDlmOGFlYmRjMDAwMDAwMDAsIDB4NmQzZTIzZjUwMDAwMDAwMCwKKyAgICAweGZjYWY0YjViMDAwMDAwMDAsIDB4ODk1N2IyYTYwMDAwMDAwMCwgMHgxOGM2ZGEwODAwMDAwMDAwLAorICAgIDB4ZWE3MjEyMjEwMDAwMDAwMCwgMHg3YmUzN2E4ZjAwMDAwMDAwLCAweDQxODQ5MDAxMDAwMDAwMDAsCisgICAgMHhkMDE1ZjhhZjAwMDAwMDAwLCAweDIyYTEzMDg2MDAwMDAwMDAsIDB4YjMzMDU4MjgwMDAwMDAwMCwKKyAgICAweGM2YzhhMWQ1MDAwMDAwMDAsIDB4NTc1OWM5N2IwMDAwMDAwMCwgMHhhNWVkMDE1MjAwMDAwMDAwLAorICAgIDB4MzQ3YzY5ZmMwMDAwMDAwMCwgMHg5MDI1YTQ5NDAwMDAwMDAwLCAweDAxYjRjYzNhMDAwMDAwMDAsCisgICAgMHhmMzAwMDQxMzAwMDAwMDAwLCAweDYyOTE2Y2JkMDAwMDAwMDAsIDB4MTc2OTk1NDAwMDAwMDAwMCwKKyAgICAweDg2ZjhmZGVlMDAwMDAwMDAsIDB4NzQ0YzM1YzcwMDAwMDAwMCwgMHhlNWRkNWQ2OTAwMDAwMDAwLAorICAgIDB4ZGZiYWI3ZTcwMDAwMDAwMCwgMHg0ZTJiZGY0OTAwMDAwMDAwLCAweGJjOWYxNzYwMDAwMDAwMDAsCisgICAgMHgyZDBlN2ZjZTAwMDAwMDAwLCAweDU4ZjY4NjMzMDAwMDAwMDAsIDB4Yzk2N2VlOWQwMDAwMDAwMCwKKyAgICAweDNiZDMyNmI0MDAwMDAwMDAsIDB4YWE0MjRlMWEwMDAwMDAwMCwgMHg3MzYwYmM2NTAwMDAwMDAwLAorICAgIDB4ZTJmMWQ0Y2IwMDAwMDAwMCwgMHgxMDQ1MWNlMjAwMDAwMDAwLCAweDgxZDQ3NDRjMDAwMDAwMDAsCisgICAgMHhmNDJjOGRiMTAwMDAwMDAwLCAweDY1YmRlNTFmMDAwMDAwMDAsIDB4OTcwOTJkMzYwMDAwMDAwMCwKKyAgICAweDA2OTg0NTk4MDAwMDAwMDAsIDB4M2NmZmFmMTYwMDAwMDAwMCwgMHhhZDZlYzdiODAwMDAwMDAwLAorICAgIDB4NWZkYTBmOTEwMDAwMDAwMCwgMHhjZTRiNjczZjAwMDAwMDAwLCAweGJiYjM5ZWMyMDAwMDAwMDAsCisgICAgMHgyYTIyZjY2YzAwMDAwMDAwLCAweGQ4OTYzZTQ1MDAwMDAwMDAsIDB4NDkwNzU2ZWIwMDAwMDAwMCwKKyAgICAweGVkNWU5YjgzMDAwMDAwMDAsIDB4N2NjZmYzMmQwMDAwMDAwMCwgMHg4ZTdiM2IwNDAwMDAwMDAwLAorICAgIDB4MWZlYTUzYWEwMDAwMDAwMCwgMHg2YTEyYWE1NzAwMDAwMDAwLCAweGZiODNjMmY5MDAwMDAwMDAsCisgICAgMHgwOTM3MGFkMDAwMDAwMDAwLCAweDk4YTY2MjdlMDAwMDAwMDAsIDB4YTJjMTg4ZjAwMDAwMDAwMCwKKyAgICAweDMzNTBlMDVlMDAwMDAwMDAsIDB4YzFlNDI4NzcwMDAwMDAwMCwgMHg1MDc1NDBkOTAwMDAwMDAwLAorICAgIDB4MjU4ZGI5MjQwMDAwMDAwMCwgMHhiNDFjZDE4YTAwMDAwMDAwLCAweDQ2YTgxOWEzMDAwMDAwMDAsCisgICAgMHhkNzM5NzEwZDAwMDAwMDAwfX07CisKKyNlbHNlIC8qIFcgPT0gNCAqLworCitsb2NhbCBjb25zdCB6X2NyY190IEZBUiBjcmNfYnJhaWRfdGFibGVbXVsyNTZdID0geworICAgezB4MDAwMDAwMDAsIDB4Y2NhYTAwOWUsIDB4NDIyNTA3N2QsIDB4OGU4ZjA3ZTMsIDB4ODQ0YTBlZmEsCisgICAgMHg0OGUwMGU2NCwgMHhjNjZmMDk4NywgMHgwYWM1MDkxOSwgMHhkM2U1MWJiNSwgMHgxZjRmMWIyYiwKKyAgICAweDkxYzAxY2M4LCAweDVkNmExYzU2LCAweDU3YWYxNTRmLCAweDliMDUxNWQxLCAweDE1OGExMjMyLAorICAgIDB4ZDkyMDEyYWMsIDB4N2NiYjMxMmIsIDB4YjAxMTMxYjUsIDB4M2U5ZTM2NTYsIDB4ZjIzNDM2YzgsCisgICAgMHhmOGYxM2ZkMSwgMHgzNDViM2Y0ZiwgMHhiYWQ0MzhhYywgMHg3NjdlMzgzMiwgMHhhZjVlMmE5ZSwKKyAgICAweDYzZjQyYTAwLCAweGVkN2IyZGUzLCAweDIxZDEyZDdkLCAweDJiMTQyNDY0LCAweGU3YmUyNGZhLAorICAgIDB4NjkzMTIzMTksIDB4YTU5YjIzODcsIDB4Zjk3NjYyNTYsIDB4MzVkYzYyYzgsIDB4YmI1MzY1MmIsCisgICAgMHg3N2Y5NjViNSwgMHg3ZDNjNmNhYywgMHhiMTk2NmMzMiwgMHgzZjE5NmJkMSwgMHhmM2IzNmI0ZiwKKyAgICAweDJhOTM3OWUzLCAweGU2Mzk3OTdkLCAweDY4YjY3ZTllLCAweGE0MWM3ZTAwLCAweGFlZDk3NzE5LAorICAgIDB4NjI3Mzc3ODcsIDB4ZWNmYzcwNjQsIDB4MjA1NjcwZmEsIDB4ODVjZDUzN2QsIDB4NDk2NzUzZTMsCisgICAgMHhjN2U4NTQwMCwgMHgwYjQyNTQ5ZSwgMHgwMTg3NWQ4NywgMHhjZDJkNWQxOSwgMHg0M2EyNWFmYSwKKyAgICAweDhmMDg1YTY0LCAweDU2Mjg0OGM4LCAweDlhODI0ODU2LCAweDE0MGQ0ZmI1LCAweGQ4YTc0ZjJiLAorICAgIDB4ZDI2MjQ2MzIsIDB4MWVjODQ2YWMsIDB4OTA0NzQxNGYsIDB4NWNlZDQxZDEsIDB4Mjk5ZGMyZWQsCisgICAgMHhlNTM3YzI3MywgMHg2YmI4YzU5MCwgMHhhNzEyYzUwZSwgMHhhZGQ3Y2MxNywgMHg2MTdkY2M4OSwKKyAgICAweGVmZjJjYjZhLCAweDIzNThjYmY0LCAweGZhNzhkOTU4LCAweDM2ZDJkOWM2LCAweGI4NWRkZTI1LAorICAgIDB4NzRmN2RlYmIsIDB4N2UzMmQ3YTIsIDB4YjI5OGQ3M2MsIDB4M2MxN2QwZGYsIDB4ZjBiZGQwNDEsCisgICAgMHg1NTI2ZjNjNiwgMHg5OThjZjM1OCwgMHgxNzAzZjRiYiwgMHhkYmE5ZjQyNSwgMHhkMTZjZmQzYywKKyAgICAweDFkYzZmZGEyLCAweDkzNDlmYTQxLCAweDVmZTNmYWRmLCAweDg2YzNlODczLCAweDRhNjllOGVkLAorICAgIDB4YzRlNmVmMGUsIDB4MDg0Y2VmOTAsIDB4MDI4OWU2ODksIDB4Y2UyM2U2MTcsIDB4NDBhY2UxZjQsCisgICAgMHg4YzA2ZTE2YSwgMHhkMGViYTBiYiwgMHgxYzQxYTAyNSwgMHg5MmNlYTdjNiwgMHg1ZTY0YTc1OCwKKyAgICAweDU0YTFhZTQxLCAweDk4MGJhZWRmLCAweDE2ODRhOTNjLCAweGRhMmVhOWEyLCAweDAzMGViYjBlLAorICAgIDB4Y2ZhNGJiOTAsIDB4NDEyYmJjNzMsIDB4OGQ4MWJjZWQsIDB4ODc0NGI1ZjQsIDB4NGJlZWI1NmEsCisgICAgMHhjNTYxYjI4OSwgMHgwOWNiYjIxNywgMHhhYzUwOTE5MCwgMHg2MGZhOTEwZSwgMHhlZTc1OTZlZCwKKyAgICAweDIyZGY5NjczLCAweDI4MWE5ZjZhLCAweGU0YjA5ZmY0LCAweDZhM2Y5ODE3LCAweGE2OTU5ODg5LAorICAgIDB4N2ZiNThhMjUsIDB4YjMxZjhhYmIsIDB4M2Q5MDhkNTgsIDB4ZjEzYThkYzYsIDB4ZmJmZjg0ZGYsCisgICAgMHgzNzU1ODQ0MSwgMHhiOWRhODNhMiwgMHg3NTcwODMzYywgMHg1MzNiODVkYSwgMHg5ZjkxODU0NCwKKyAgICAweDExMWU4MmE3LCAweGRkYjQ4MjM5LCAweGQ3NzE4YjIwLCAweDFiZGI4YmJlLCAweDk1NTQ4YzVkLAorICAgIDB4NTlmZThjYzMsIDB4ODBkZTllNmYsIDB4NGM3NDllZjEsIDB4YzJmYjk5MTIsIDB4MGU1MTk5OGMsCisgICAgMHgwNDk0OTA5NSwgMHhjODNlOTAwYiwgMHg0NmIxOTdlOCwgMHg4YTFiOTc3NiwgMHgyZjgwYjRmMSwKKyAgICAweGUzMmFiNDZmLCAweDZkYTViMzhjLCAweGExMGZiMzEyLCAweGFiY2FiYTBiLCAweDY3NjBiYTk1LAorICAgIDB4ZTllZmJkNzYsIDB4MjU0NWJkZTgsIDB4ZmM2NWFmNDQsIDB4MzBjZmFmZGEsIDB4YmU0MGE4MzksCisgICAgMHg3MmVhYThhNywgMHg3ODJmYTFiZSwgMHhiNDg1YTEyMCwgMHgzYTBhYTZjMywgMHhmNmEwYTY1ZCwKKyAgICAweGFhNGRlNzhjLCAweDY2ZTdlNzEyLCAweGU4NjhlMGYxLCAweDI0YzJlMDZmLCAweDJlMDdlOTc2LAorICAgIDB4ZTJhZGU5ZTgsIDB4NmMyMmVlMGIsIDB4YTA4OGVlOTUsIDB4NzlhOGZjMzksIDB4YjUwMmZjYTcsCisgICAgMHgzYjhkZmI0NCwgMHhmNzI3ZmJkYSwgMHhmZGUyZjJjMywgMHgzMTQ4ZjI1ZCwgMHhiZmM3ZjViZSwKKyAgICAweDczNmRmNTIwLCAweGQ2ZjZkNmE3LCAweDFhNWNkNjM5LCAweDk0ZDNkMWRhLCAweDU4NzlkMTQ0LAorICAgIDB4NTJiY2Q4NWQsIDB4OWUxNmQ4YzMsIDB4MTA5OWRmMjAsIDB4ZGMzM2RmYmUsIDB4MDUxM2NkMTIsCisgICAgMHhjOWI5Y2Q4YywgMHg0NzM2Y2E2ZiwgMHg4YjljY2FmMSwgMHg4MTU5YzNlOCwgMHg0ZGYzYzM3NiwKKyAgICAweGMzN2NjNDk1LCAweDBmZDZjNDBiLCAweDdhYTY0NzM3LCAweGI2MGM0N2E5LCAweDM4ODM0MDRhLAorICAgIDB4ZjQyOTQwZDQsIDB4ZmVlYzQ5Y2QsIDB4MzI0NjQ5NTMsIDB4YmNjOTRlYjAsIDB4NzA2MzRlMmUsCisgICAgMHhhOTQzNWM4MiwgMHg2NWU5NWMxYywgMHhlYjY2NWJmZiwgMHgyN2NjNWI2MSwgMHgyZDA5NTI3OCwKKyAgICAweGUxYTM1MmU2LCAweDZmMmM1NTA1LCAweGEzODY1NTliLCAweDA2MWQ3NjFjLCAweGNhYjc3NjgyLAorICAgIDB4NDQzODcxNjEsIDB4ODg5MjcxZmYsIDB4ODI1Nzc4ZTYsIDB4NGVmZDc4NzgsIDB4YzA3MjdmOWIsCisgICAgMHgwY2Q4N2YwNSwgMHhkNWY4NmRhOSwgMHgxOTUyNmQzNywgMHg5N2RkNmFkNCwgMHg1Yjc3NmE0YSwKKyAgICAweDUxYjI2MzUzLCAweDlkMTg2M2NkLCAweDEzOTc2NDJlLCAweGRmM2Q2NGIwLCAweDgzZDAyNTYxLAorICAgIDB4NGY3YTI1ZmYsIDB4YzFmNTIyMWMsIDB4MGQ1ZjIyODIsIDB4MDc5YTJiOWIsIDB4Y2IzMDJiMDUsCisgICAgMHg0NWJmMmNlNiwgMHg4OTE1MmM3OCwgMHg1MDM1M2VkNCwgMHg5YzlmM2U0YSwgMHgxMjEwMzlhOSwKKyAgICAweGRlYmEzOTM3LCAweGQ0N2YzMDJlLCAweDE4ZDUzMGIwLCAweDk2NWEzNzUzLCAweDVhZjAzN2NkLAorICAgIDB4ZmY2YjE0NGEsIDB4MzNjMTE0ZDQsIDB4YmQ0ZTEzMzcsIDB4NzFlNDEzYTksIDB4N2IyMTFhYjAsCisgICAgMHhiNzhiMWEyZSwgMHgzOTA0MWRjZCwgMHhmNWFlMWQ1MywgMHgyYzhlMGZmZiwgMHhlMDI0MGY2MSwKKyAgICAweDZlYWIwODgyLCAweGEyMDEwODFjLCAweGE4YzQwMTA1LCAweDY0NmUwMTliLCAweGVhZTEwNjc4LAorICAgIDB4MjY0YjA2ZTZ9LAorICAgezB4MDAwMDAwMDAsIDB4YTY3NzBiYjQsIDB4OTc5ZjExMjksIDB4MzFlODFhOWQsIDB4ZjQ0ZjI0MTMsCisgICAgMHg1MjM4MmZhNywgMHg2M2QwMzUzYSwgMHhjNWE3M2U4ZSwgMHgzM2VmNGU2NywgMHg5NTk4NDVkMywKKyAgICAweGE0NzA1ZjRlLCAweDAyMDc1NGZhLCAweGM3YTA2YTc0LCAweDYxZDc2MWMwLCAweDUwM2Y3YjVkLAorICAgIDB4ZjY0ODcwZTksIDB4NjdkZTljY2UsIDB4YzFhOTk3N2EsIDB4ZjA0MThkZTcsIDB4NTYzNjg2NTMsCisgICAgMHg5MzkxYjhkZCwgMHgzNWU2YjM2OSwgMHgwNDBlYTlmNCwgMHhhMjc5YTI0MCwgMHg1NDMxZDJhOSwKKyAgICAweGYyNDZkOTFkLCAweGMzYWVjMzgwLCAweDY1ZDljODM0LCAweGEwN2VmNmJhLCAweDA2MDlmZDBlLAorICAgIDB4MzdlMWU3OTMsIDB4OTE5NmVjMjcsIDB4Y2ZiZDM5OWMsIDB4NjljYTMyMjgsIDB4NTgyMjI4YjUsCisgICAgMHhmZTU1MjMwMSwgMHgzYmYyMWQ4ZiwgMHg5ZDg1MTYzYiwgMHhhYzZkMGNhNiwgMHgwYTFhMDcxMiwKKyAgICAweGZjNTI3N2ZiLCAweDVhMjU3YzRmLCAweDZiY2Q2NmQyLCAweGNkYmE2ZDY2LCAweDA4MWQ1M2U4LAorICAgIDB4YWU2YTU4NWMsIDB4OWY4MjQyYzEsIDB4MzlmNTQ5NzUsIDB4YTg2M2E1NTIsIDB4MGUxNGFlZTYsCisgICAgMHgzZmZjYjQ3YiwgMHg5OThiYmZjZiwgMHg1YzJjODE0MSwgMHhmYTViOGFmNSwgMHhjYmIzOTA2OCwKKyAgICAweDZkYzQ5YmRjLCAweDliOGNlYjM1LCAweDNkZmJlMDgxLCAweDBjMTNmYTFjLCAweGFhNjRmMWE4LAorICAgIDB4NmZjM2NmMjYsIDB4YzliNGM0OTIsIDB4Zjg1Y2RlMGYsIDB4NWUyYmQ1YmIsIDB4NDQwYjc1NzksCisgICAgMHhlMjdjN2VjZCwgMHhkMzk0NjQ1MCwgMHg3NWUzNmZlNCwgMHhiMDQ0NTE2YSwgMHgxNjMzNWFkZSwKKyAgICAweDI3ZGI0MDQzLCAweDgxYWM0YmY3LCAweDc3ZTQzYjFlLCAweGQxOTMzMGFhLCAweGUwN2IyYTM3LAorICAgIDB4NDYwYzIxODMsIDB4ODNhYjFmMGQsIDB4MjVkYzE0YjksIDB4MTQzNDBlMjQsIDB4YjI0MzA1OTAsCisgICAgMHgyM2Q1ZTliNywgMHg4NWEyZTIwMywgMHhiNDRhZjg5ZSwgMHgxMjNkZjMyYSwgMHhkNzlhY2RhNCwKKyAgICAweDcxZWRjNjEwLCAweDQwMDVkYzhkLCAweGU2NzJkNzM5LCAweDEwM2FhN2QwLCAweGI2NGRhYzY0LAorICAgIDB4ODdhNWI2ZjksIDB4MjFkMmJkNGQsIDB4ZTQ3NTgzYzMsIDB4NDIwMjg4NzcsIDB4NzNlYTkyZWEsCisgICAgMHhkNTlkOTk1ZSwgMHg4YmI2NGNlNSwgMHgyZGMxNDc1MSwgMHgxYzI5NWRjYywgMHhiYTVlNTY3OCwKKyAgICAweDdmZjk2OGY2LCAweGQ5OGU2MzQyLCAweGU4NjY3OWRmLCAweDRlMTE3MjZiLCAweGI4NTkwMjgyLAorICAgIDB4MWUyZTA5MzYsIDB4MmZjNjEzYWIsIDB4ODliMTE4MWYsIDB4NGMxNjI2OTEsIDB4ZWE2MTJkMjUsCisgICAgMHhkYjg5MzdiOCwgMHg3ZGZlM2MwYywgMHhlYzY4ZDAyYiwgMHg0YTFmZGI5ZiwgMHg3YmY3YzEwMiwKKyAgICAweGRkODBjYWI2LCAweDE4MjdmNDM4LCAweGJlNTBmZjhjLCAweDhmYjhlNTExLCAweDI5Y2ZlZWE1LAorICAgIDB4ZGY4NzllNGMsIDB4NzlmMDk1ZjgsIDB4NDgxODhmNjUsIDB4ZWU2Zjg0ZDEsIDB4MmJjOGJhNWYsCisgICAgMHg4ZGJmYjFlYiwgMHhiYzU3YWI3NiwgMHgxYTIwYTBjMiwgMHg4ODE2ZWFmMiwgMHgyZTYxZTE0NiwKKyAgICAweDFmODlmYmRiLCAweGI5ZmVmMDZmLCAweDdjNTljZWUxLCAweGRhMmVjNTU1LCAweGViYzZkZmM4LAorICAgIDB4NGRiMWQ0N2MsIDB4YmJmOWE0OTUsIDB4MWQ4ZWFmMjEsIDB4MmM2NmI1YmMsIDB4OGExMWJlMDgsCisgICAgMHg0ZmI2ODA4NiwgMHhlOWMxOGIzMiwgMHhkODI5OTFhZiwgMHg3ZTVlOWExYiwgMHhlZmM4NzYzYywKKyAgICAweDQ5YmY3ZDg4LCAweDc4NTc2NzE1LCAweGRlMjA2Y2ExLCAweDFiODc1MjJmLCAweGJkZjA1OTliLAorICAgIDB4OGMxODQzMDYsIDB4MmE2ZjQ4YjIsIDB4ZGMyNzM4NWIsIDB4N2E1MDMzZWYsIDB4NGJiODI5NzIsCisgICAgMHhlZGNmMjJjNiwgMHgyODY4MWM0OCwgMHg4ZTFmMTdmYywgMHhiZmY3MGQ2MSwgMHgxOTgwMDZkNSwKKyAgICAweDQ3YWJkMzZlLCAweGUxZGNkOGRhLCAweGQwMzRjMjQ3LCAweDc2NDNjOWYzLCAweGIzZTRmNzdkLAorICAgIDB4MTU5M2ZjYzksIDB4MjQ3YmU2NTQsIDB4ODIwY2VkZTAsIDB4NzQ0NDlkMDksIDB4ZDIzMzk2YmQsCisgICAgMHhlM2RiOGMyMCwgMHg0NWFjODc5NCwgMHg4MDBiYjkxYSwgMHgyNjdjYjJhZSwgMHgxNzk0YTgzMywKKyAgICAweGIxZTNhMzg3LCAweDIwNzU0ZmEwLCAweDg2MDI0NDE0LCAweGI3ZWE1ZTg5LCAweDExOWQ1NTNkLAorICAgIDB4ZDQzYTZiYjMsIDB4NzI0ZDYwMDcsIDB4NDNhNTdhOWEsIDB4ZTVkMjcxMmUsIDB4MTM5YTAxYzcsCisgICAgMHhiNWVkMGE3MywgMHg4NDA1MTBlZSwgMHgyMjcyMWI1YSwgMHhlN2Q1MjVkNCwgMHg0MWEyMmU2MCwKKyAgICAweDcwNGEzNGZkLCAweGQ2M2QzZjQ5LCAweGNjMWQ5ZjhiLCAweDZhNmE5NDNmLCAweDViODI4ZWEyLAorICAgIDB4ZmRmNTg1MTYsIDB4Mzg1MmJiOTgsIDB4OWUyNWIwMmMsIDB4YWZjZGFhYjEsIDB4MDliYWExMDUsCisgICAgMHhmZmYyZDFlYywgMHg1OTg1ZGE1OCwgMHg2ODZkYzBjNSwgMHhjZTFhY2I3MSwgMHgwYmJkZjVmZiwKKyAgICAweGFkY2FmZTRiLCAweDljMjJlNGQ2LCAweDNhNTVlZjYyLCAweGFiYzMwMzQ1LCAweDBkYjQwOGYxLAorICAgIDB4M2M1YzEyNmMsIDB4OWEyYjE5ZDgsIDB4NWY4YzI3NTYsIDB4ZjlmYjJjZTIsIDB4YzgxMzM2N2YsCisgICAgMHg2ZTY0M2RjYiwgMHg5ODJjNGQyMiwgMHgzZTViNDY5NiwgMHgwZmIzNWMwYiwgMHhhOWM0NTdiZiwKKyAgICAweDZjNjM2OTMxLCAweGNhMTQ2Mjg1LCAweGZiZmM3ODE4LCAweDVkOGI3M2FjLCAweDAzYTBhNjE3LAorICAgIDB4YTVkN2FkYTMsIDB4OTQzZmI3M2UsIDB4MzI0OGJjOGEsIDB4ZjdlZjgyMDQsIDB4NTE5ODg5YjAsCisgICAgMHg2MDcwOTMyZCwgMHhjNjA3OTg5OSwgMHgzMDRmZTg3MCwgMHg5NjM4ZTNjNCwgMHhhN2QwZjk1OSwKKyAgICAweDAxYTdmMmVkLCAweGM0MDBjYzYzLCAweDYyNzdjN2Q3LCAweDUzOWZkZDRhLCAweGY1ZThkNmZlLAorICAgIDB4NjQ3ZTNhZDksIDB4YzIwOTMxNmQsIDB4ZjNlMTJiZjAsIDB4NTU5NjIwNDQsIDB4OTAzMTFlY2EsCisgICAgMHgzNjQ2MTU3ZSwgMHgwN2FlMGZlMywgMHhhMWQ5MDQ1NywgMHg1NzkxNzRiZSwgMHhmMWU2N2YwYSwKKyAgICAweGMwMGU2NTk3LCAweDY2Nzk2ZTIzLCAweGEzZGU1MGFkLCAweDA1YTk1YjE5LCAweDM0NDE0MTg0LAorICAgIDB4OTIzNjRhMzB9LAorICAgezB4MDAwMDAwMDAsIDB4Y2I1Y2QzYTUsIDB4NGRjOGExMGIsIDB4ODY5NDcyYWUsIDB4OWI5MTQyMTYsCisgICAgMHg1MGNkOTFiMywgMHhkNjU5ZTMxZCwgMHgxZDA1MzBiOCwgMHhlYzUzODI2ZCwgMHgyNzBmNTFjOCwKKyAgICAweGExOWIyMzY2LCAweDZhYzdmMGMzLCAweDc3YzJjMDdiLCAweGJjOWUxM2RlLCAweDNhMGE2MTcwLAorICAgIDB4ZjE1NmIyZDUsIDB4MDNkNjAyOWIsIDB4Yzg4YWQxM2UsIDB4NGUxZWEzOTAsIDB4ODU0MjcwMzUsCisgICAgMHg5ODQ3NDA4ZCwgMHg1MzFiOTMyOCwgMHhkNThmZTE4NiwgMHgxZWQzMzIyMywgMHhlZjg1ODBmNiwKKyAgICAweDI0ZDk1MzUzLCAweGEyNGQyMWZkLCAweDY5MTFmMjU4LCAweDc0MTRjMmUwLCAweGJmNDgxMTQ1LAorICAgIDB4MzlkYzYzZWIsIDB4ZjI4MGIwNGUsIDB4MDdhYzA1MzYsIDB4Y2NmMGQ2OTMsIDB4NGE2NGE0M2QsCisgICAgMHg4MTM4Nzc5OCwgMHg5YzNkNDcyMCwgMHg1NzYxOTQ4NSwgMHhkMWY1ZTYyYiwgMHgxYWE5MzU4ZSwKKyAgICAweGViZmY4NzViLCAweDIwYTM1NGZlLCAweGE2MzcyNjUwLCAweDZkNmJmNWY1LCAweDcwNmVjNTRkLAorICAgIDB4YmIzMjE2ZTgsIDB4M2RhNjY0NDYsIDB4ZjZmYWI3ZTMsIDB4MDQ3YTA3YWQsIDB4Y2YyNmQ0MDgsCisgICAgMHg0OWIyYTZhNiwgMHg4MmVlNzUwMywgMHg5ZmViNDViYiwgMHg1NGI3OTYxZSwgMHhkMjIzZTRiMCwKKyAgICAweDE5N2YzNzE1LCAweGU4Mjk4NWMwLCAweDIzNzU1NjY1LCAweGE1ZTEyNGNiLCAweDZlYmRmNzZlLAorICAgIDB4NzNiOGM3ZDYsIDB4YjhlNDE0NzMsIDB4M2U3MDY2ZGQsIDB4ZjUyY2I1NzgsIDB4MGY1ODBhNmMsCisgICAgMHhjNDA0ZDljOSwgMHg0MjkwYWI2NywgMHg4OWNjNzhjMiwgMHg5NGM5NDg3YSwgMHg1Zjk1OWJkZiwKKyAgICAweGQ5MDFlOTcxLCAweDEyNWQzYWQ0LCAweGUzMGI4ODAxLCAweDI4NTc1YmE0LCAweGFlYzMyOTBhLAorICAgIDB4NjU5ZmZhYWYsIDB4Nzg5YWNhMTcsIDB4YjNjNjE5YjIsIDB4MzU1MjZiMWMsIDB4ZmUwZWI4YjksCisgICAgMHgwYzhlMDhmNywgMHhjN2QyZGI1MiwgMHg0MTQ2YTlmYywgMHg4YTFhN2E1OSwgMHg5NzFmNGFlMSwKKyAgICAweDVjNDM5OTQ0LCAweGRhZDdlYmVhLCAweDExOGIzODRmLCAweGUwZGQ4YTlhLCAweDJiODE1OTNmLAorICAgIDB4YWQxNTJiOTEsIDB4NjY0OWY4MzQsIDB4N2I0Y2M4OGMsIDB4YjAxMDFiMjksIDB4MzY4NDY5ODcsCisgICAgMHhmZGQ4YmEyMiwgMHgwOGY0MGY1YSwgMHhjM2E4ZGNmZiwgMHg0NTNjYWU1MSwgMHg4ZTYwN2RmNCwKKyAgICAweDkzNjU0ZDRjLCAweDU4Mzk5ZWU5LCAweGRlYWRlYzQ3LCAweDE1ZjEzZmUyLCAweGU0YTc4ZDM3LAorICAgIDB4MmZmYjVlOTIsIDB4YTk2ZjJjM2MsIDB4NjIzM2ZmOTksIDB4N2YzNmNmMjEsIDB4YjQ2YTFjODQsCisgICAgMHgzMmZlNmUyYSwgMHhmOWEyYmQ4ZiwgMHgwYjIyMGRjMSwgMHhjMDdlZGU2NCwgMHg0NmVhYWNjYSwKKyAgICAweDhkYjY3ZjZmLCAweDkwYjM0ZmQ3LCAweDViZWY5YzcyLCAweGRkN2JlZWRjLCAweDE2MjczZDc5LAorICAgIDB4ZTc3MThmYWMsIDB4MmMyZDVjMDksIDB4YWFiOTJlYTcsIDB4NjFlNWZkMDIsIDB4N2NlMGNkYmEsCisgICAgMHhiN2JjMWUxZiwgMHgzMTI4NmNiMSwgMHhmYTc0YmYxNCwgMHgxZWIwMTRkOCwgMHhkNWVjYzc3ZCwKKyAgICAweDUzNzhiNWQzLCAweDk4MjQ2Njc2LCAweDg1MjE1NmNlLCAweDRlN2Q4NTZiLCAweGM4ZTlmN2M1LAorICAgIDB4MDNiNTI0NjAsIDB4ZjJlMzk2YjUsIDB4MzliZjQ1MTAsIDB4YmYyYjM3YmUsIDB4NzQ3N2U0MWIsCisgICAgMHg2OTcyZDRhMywgMHhhMjJlMDcwNiwgMHgyNGJhNzVhOCwgMHhlZmU2YTYwZCwgMHgxZDY2MTY0MywKKyAgICAweGQ2M2FjNWU2LCAweDUwYWViNzQ4LCAweDliZjI2NGVkLCAweDg2Zjc1NDU1LCAweDRkYWI4N2YwLAorICAgIDB4Y2IzZmY1NWUsIDB4MDA2MzI2ZmIsIDB4ZjEzNTk0MmUsIDB4M2E2OTQ3OGIsIDB4YmNmZDM1MjUsCisgICAgMHg3N2ExZTY4MCwgMHg2YWE0ZDYzOCwgMHhhMWY4MDU5ZCwgMHgyNzZjNzczMywgMHhlYzMwYTQ5NiwKKyAgICAweDE5MWMxMWVlLCAweGQyNDBjMjRiLCAweDU0ZDRiMGU1LCAweDlmODg2MzQwLCAweDgyOGQ1M2Y4LAorICAgIDB4NDlkMTgwNWQsIDB4Y2Y0NWYyZjMsIDB4MDQxOTIxNTYsIDB4ZjU0ZjkzODMsIDB4M2UxMzQwMjYsCisgICAgMHhiODg3MzI4OCwgMHg3M2RiZTEyZCwgMHg2ZWRlZDE5NSwgMHhhNTgyMDIzMCwgMHgyMzE2NzA5ZSwKKyAgICAweGU4NGFhMzNiLCAweDFhY2ExMzc1LCAweGQxOTZjMGQwLCAweDU3MDJiMjdlLCAweDljNWU2MWRiLAorICAgIDB4ODE1YjUxNjMsIDB4NGEwNzgyYzYsIDB4Y2M5M2YwNjgsIDB4MDdjZjIzY2QsIDB4ZjY5OTkxMTgsCisgICAgMHgzZGM1NDJiZCwgMHhiYjUxMzAxMywgMHg3MDBkZTNiNiwgMHg2ZDA4ZDMwZSwgMHhhNjU0MDBhYiwKKyAgICAweDIwYzA3MjA1LCAweGViOWNhMWEwLCAweDExZTgxZWI0LCAweGRhYjRjZDExLCAweDVjMjBiZmJmLAorICAgIDB4OTc3YzZjMWEsIDB4OGE3OTVjYTIsIDB4NDEyNThmMDcsIDB4YzdiMWZkYTksIDB4MGNlZDJlMGMsCisgICAgMHhmZGJiOWNkOSwgMHgzNmU3NGY3YywgMHhiMDczM2RkMiwgMHg3YjJmZWU3NywgMHg2NjJhZGVjZiwKKyAgICAweGFkNzYwZDZhLCAweDJiZTI3ZmM0LCAweGUwYmVhYzYxLCAweDEyM2UxYzJmLCAweGQ5NjJjZjhhLAorICAgIDB4NWZmNmJkMjQsIDB4OTRhYTZlODEsIDB4ODlhZjVlMzksIDB4NDJmMzhkOWMsIDB4YzQ2N2ZmMzIsCisgICAgMHgwZjNiMmM5NywgMHhmZTZkOWU0MiwgMHgzNTMxNGRlNywgMHhiM2E1M2Y0OSwgMHg3OGY5ZWNlYywKKyAgICAweDY1ZmNkYzU0LCAweGFlYTAwZmYxLCAweDI4MzQ3ZDVmLCAweGUzNjhhZWZhLCAweDE2NDQxYjgyLAorICAgIDB4ZGQxOGM4MjcsIDB4NWI4Y2JhODksIDB4OTBkMDY5MmMsIDB4OGRkNTU5OTQsIDB4NDY4OThhMzEsCisgICAgMHhjMDFkZjg5ZiwgMHgwYjQxMmIzYSwgMHhmYTE3OTllZiwgMHgzMTRiNGE0YSwgMHhiN2RmMzhlNCwKKyAgICAweDdjODNlYjQxLCAweDYxODZkYmY5LCAweGFhZGEwODVjLCAweDJjNGU3YWYyLCAweGU3MTJhOTU3LAorICAgIDB4MTU5MjE5MTksIDB4ZGVjZWNhYmMsIDB4NTg1YWI4MTIsIDB4OTMwNjZiYjcsIDB4OGUwMzViMGYsCisgICAgMHg0NTVmODhhYSwgMHhjM2NiZmEwNCwgMHgwODk3MjlhMSwgMHhmOWMxOWI3NCwgMHgzMjlkNDhkMSwKKyAgICAweGI0MDkzYTdmLCAweDdmNTVlOWRhLCAweDYyNTBkOTYyLCAweGE5MGMwYWM3LCAweDJmOTg3ODY5LAorICAgIDB4ZTRjNGFiY2N9LAorICAgezB4MDAwMDAwMDAsIDB4M2Q2MDI5YjAsIDB4N2FjMDUzNjAsIDB4NDdhMDdhZDAsIDB4ZjU4MGE2YzAsCisgICAgMHhjOGUwOGY3MCwgMHg4ZjQwZjVhMCwgMHhiMjIwZGMxMCwgMHgzMDcwNGJjMSwgMHgwZDEwNjI3MSwKKyAgICAweDRhYjAxOGExLCAweDc3ZDAzMTExLCAweGM1ZjBlZDAxLCAweGY4OTBjNGIxLCAweGJmMzBiZTYxLAorICAgIDB4ODI1MDk3ZDEsIDB4NjBlMDk3ODIsIDB4NWQ4MGJlMzIsIDB4MWEyMGM0ZTIsIDB4Mjc0MGVkNTIsCisgICAgMHg5NTYwMzE0MiwgMHhhODAwMThmMiwgMHhlZmEwNjIyMiwgMHhkMmMwNGI5MiwgMHg1MDkwZGM0MywKKyAgICAweDZkZjBmNWYzLCAweDJhNTA4ZjIzLCAweDE3MzBhNjkzLCAweGE1MTA3YTgzLCAweDk4NzA1MzMzLAorICAgIDB4ZGZkMDI5ZTMsIDB4ZTJiMDAwNTMsIDB4YzFjMTJmMDQsIDB4ZmNhMTA2YjQsIDB4YmIwMTdjNjQsCisgICAgMHg4NjYxNTVkNCwgMHgzNDQxODljNCwgMHgwOTIxYTA3NCwgMHg0ZTgxZGFhNCwgMHg3M2UxZjMxNCwKKyAgICAweGYxYjE2NGM1LCAweGNjZDE0ZDc1LCAweDhiNzEzN2E1LCAweGI2MTExZTE1LCAweDA0MzFjMjA1LAorICAgIDB4Mzk1MWViYjUsIDB4N2VmMTkxNjUsIDB4NDM5MWI4ZDUsIDB4YTEyMWI4ODYsIDB4OWM0MTkxMzYsCisgICAgMHhkYmUxZWJlNiwgMHhlNjgxYzI1NiwgMHg1NGExMWU0NiwgMHg2OWMxMzdmNiwgMHgyZTYxNGQyNiwKKyAgICAweDEzMDE2NDk2LCAweDkxNTFmMzQ3LCAweGFjMzFkYWY3LCAweGViOTFhMDI3LCAweGQ2ZjE4OTk3LAorICAgIDB4NjRkMTU1ODcsIDB4NTliMTdjMzcsIDB4MWUxMTA2ZTcsIDB4MjM3MTJmNTcsIDB4NThmMzU4NDksCisgICAgMHg2NTkzNzFmOSwgMHgyMjMzMGIyOSwgMHgxZjUzMjI5OSwgMHhhZDczZmU4OSwgMHg5MDEzZDczOSwKKyAgICAweGQ3YjNhZGU5LCAweGVhZDM4NDU5LCAweDY4ODMxMzg4LCAweDU1ZTMzYTM4LCAweDEyNDM0MGU4LAorICAgIDB4MmYyMzY5NTgsIDB4OWQwM2I1NDgsIDB4YTA2MzljZjgsIDB4ZTdjM2U2MjgsIDB4ZGFhM2NmOTgsCisgICAgMHgzODEzY2ZjYiwgMHgwNTczZTY3YiwgMHg0MmQzOWNhYiwgMHg3ZmIzYjUxYiwgMHhjZDkzNjkwYiwKKyAgICAweGYwZjM0MGJiLCAweGI3NTMzYTZiLCAweDhhMzMxM2RiLCAweDA4NjM4NDBhLCAweDM1MDNhZGJhLAorICAgIDB4NzJhM2Q3NmEsIDB4NGZjM2ZlZGEsIDB4ZmRlMzIyY2EsIDB4YzA4MzBiN2EsIDB4ODcyMzcxYWEsCisgICAgMHhiYTQzNTgxYSwgMHg5OTMyNzc0ZCwgMHhhNDUyNWVmZCwgMHhlM2YyMjQyZCwgMHhkZTkyMGQ5ZCwKKyAgICAweDZjYjJkMThkLCAweDUxZDJmODNkLCAweDE2NzI4MmVkLCAweDJiMTJhYjVkLCAweGE5NDIzYzhjLAorICAgIDB4OTQyMjE1M2MsIDB4ZDM4MjZmZWMsIDB4ZWVlMjQ2NWMsIDB4NWNjMjlhNGMsIDB4NjFhMmIzZmMsCisgICAgMHgyNjAyYzkyYywgMHgxYjYyZTA5YywgMHhmOWQyZTBjZiwgMHhjNGIyYzk3ZiwgMHg4MzEyYjNhZiwKKyAgICAweGJlNzI5YTFmLCAweDBjNTI0NjBmLCAweDMxMzI2ZmJmLCAweDc2OTIxNTZmLCAweDRiZjIzY2RmLAorICAgIDB4YzlhMmFiMGUsIDB4ZjRjMjgyYmUsIDB4YjM2MmY4NmUsIDB4OGUwMmQxZGUsIDB4M2MyMjBkY2UsCisgICAgMHgwMTQyMjQ3ZSwgMHg0NmUyNWVhZSwgMHg3YjgyNzcxZSwgMHhiMWU2YjA5MiwgMHg4Yzg2OTkyMiwKKyAgICAweGNiMjZlM2YyLCAweGY2NDZjYTQyLCAweDQ0NjYxNjUyLCAweDc5MDYzZmUyLCAweDNlYTY0NTMyLAorICAgIDB4MDNjNjZjODIsIDB4ODE5NmZiNTMsIDB4YmNmNmQyZTMsIDB4ZmI1NmE4MzMsIDB4YzYzNjgxODMsCisgICAgMHg3NDE2NWQ5MywgMHg0OTc2NzQyMywgMHgwZWQ2MGVmMywgMHgzM2I2Mjc0MywgMHhkMTA2MjcxMCwKKyAgICAweGVjNjYwZWEwLCAweGFiYzY3NDcwLCAweDk2YTY1ZGMwLCAweDI0ODY4MWQwLCAweDE5ZTZhODYwLAorICAgIDB4NWU0NmQyYjAsIDB4NjMyNmZiMDAsIDB4ZTE3NjZjZDEsIDB4ZGMxNjQ1NjEsIDB4OWJiNjNmYjEsCisgICAgMHhhNmQ2MTYwMSwgMHgxNGY2Y2ExMSwgMHgyOTk2ZTNhMSwgMHg2ZTM2OTk3MSwgMHg1MzU2YjBjMSwKKyAgICAweDcwMjc5Zjk2LCAweDRkNDdiNjI2LCAweDBhZTdjY2Y2LCAweDM3ODdlNTQ2LCAweDg1YTczOTU2LAorICAgIDB4YjhjNzEwZTYsIDB4ZmY2NzZhMzYsIDB4YzIwNzQzODYsIDB4NDA1N2Q0NTcsIDB4N2QzN2ZkZTcsCisgICAgMHgzYTk3ODczNywgMHgwN2Y3YWU4NywgMHhiNWQ3NzI5NywgMHg4OGI3NWIyNywgMHhjZjE3MjFmNywKKyAgICAweGYyNzcwODQ3LCAweDEwYzcwODE0LCAweDJkYTcyMWE0LCAweDZhMDc1Yjc0LCAweDU3Njc3MmM0LAorICAgIDB4ZTU0N2FlZDQsIDB4ZDgyNzg3NjQsIDB4OWY4N2ZkYjQsIDB4YTJlN2Q0MDQsIDB4MjBiNzQzZDUsCisgICAgMHgxZGQ3NmE2NSwgMHg1YTc3MTBiNSwgMHg2NzE3MzkwNSwgMHhkNTM3ZTUxNSwgMHhlODU3Y2NhNSwKKyAgICAweGFmZjdiNjc1LCAweDkyOTc5ZmM1LCAweGU5MTVlOGRiLCAweGQ0NzVjMTZiLCAweDkzZDViYmJiLAorICAgIDB4YWViNTkyMGIsIDB4MWM5NTRlMWIsIDB4MjFmNTY3YWIsIDB4NjY1NTFkN2IsIDB4NWIzNTM0Y2IsCisgICAgMHhkOTY1YTMxYSwgMHhlNDA1OGFhYSwgMHhhM2E1ZjA3YSwgMHg5ZWM1ZDljYSwgMHgyY2U1MDVkYSwKKyAgICAweDExODUyYzZhLCAweDU2MjU1NmJhLCAweDZiNDU3ZjBhLCAweDg5ZjU3ZjU5LCAweGI0OTU1NmU5LAorICAgIDB4ZjMzNTJjMzksIDB4Y2U1NTA1ODksIDB4N2M3NWQ5OTksIDB4NDExNWYwMjksIDB4MDZiNThhZjksCisgICAgMHgzYmQ1YTM0OSwgMHhiOTg1MzQ5OCwgMHg4NGU1MWQyOCwgMHhjMzQ1NjdmOCwgMHhmZTI1NGU0OCwKKyAgICAweDRjMDU5MjU4LCAweDcxNjViYmU4LCAweDM2YzVjMTM4LCAweDBiYTVlODg4LCAweDI4ZDRjN2RmLAorICAgIDB4MTViNGVlNmYsIDB4NTIxNDk0YmYsIDB4NmY3NGJkMGYsIDB4ZGQ1NDYxMWYsIDB4ZTAzNDQ4YWYsCisgICAgMHhhNzk0MzI3ZiwgMHg5YWY0MWJjZiwgMHgxOGE0OGMxZSwgMHgyNWM0YTVhZSwgMHg2MjY0ZGY3ZSwKKyAgICAweDVmMDRmNmNlLCAweGVkMjQyYWRlLCAweGQwNDQwMzZlLCAweDk3ZTQ3OWJlLCAweGFhODQ1MDBlLAorICAgIDB4NDgzNDUwNWQsIDB4NzU1NDc5ZWQsIDB4MzJmNDAzM2QsIDB4MGY5NDJhOGQsIDB4YmRiNGY2OWQsCisgICAgMHg4MGQ0ZGYyZCwgMHhjNzc0YTVmZCwgMHhmYTE0OGM0ZCwgMHg3ODQ0MWI5YywgMHg0NTI0MzIyYywKKyAgICAweDAyODQ0OGZjLCAweDNmZTQ2MTRjLCAweDhkYzRiZDVjLCAweGIwYTQ5NGVjLCAweGY3MDRlZTNjLAorICAgIDB4Y2E2NGM3OGN9fTsKKworbG9jYWwgY29uc3Qgel93b3JkX3QgRkFSIGNyY19icmFpZF9iaWdfdGFibGVbXVsyNTZdID0geworICAgezB4MDAwMDAwMDAsIDB4YjAyOTYwM2QsIDB4NjA1M2MwN2EsIDB4ZDA3YWEwNDcsIDB4YzBhNjgwZjUsCisgICAgMHg3MDhmZTBjOCwgMHhhMGY1NDA4ZiwgMHgxMGRjMjBiMiwgMHhjMTRiNzAzMCwgMHg3MTYyMTAwZCwKKyAgICAweGExMThiMDRhLCAweDExMzFkMDc3LCAweDAxZWRmMGM1LCAweGIxYzQ5MGY4LCAweDYxYmUzMGJmLAorICAgIDB4ZDE5NzUwODIsIDB4ODI5N2UwNjAsIDB4MzJiZTgwNWQsIDB4ZTJjNDIwMWEsIDB4NTJlZDQwMjcsCisgICAgMHg0MjMxNjA5NSwgMHhmMjE4MDBhOCwgMHgyMjYyYTBlZiwgMHg5MjRiYzBkMiwgMHg0M2RjOTA1MCwKKyAgICAweGYzZjVmMDZkLCAweDIzOGY1MDJhLCAweDkzYTYzMDE3LCAweDgzN2ExMGE1LCAweDMzNTM3MDk4LAorICAgIDB4ZTMyOWQwZGYsIDB4NTMwMGIwZTIsIDB4MDQyZmMxYzEsIDB4YjQwNmExZmMsIDB4NjQ3YzAxYmIsCisgICAgMHhkNDU1NjE4NiwgMHhjNDg5NDEzNCwgMHg3NGEwMjEwOSwgMHhhNGRhODE0ZSwgMHgxNGYzZTE3MywKKyAgICAweGM1NjRiMWYxLCAweDc1NGRkMWNjLCAweGE1Mzc3MThiLCAweDE1MWUxMWI2LCAweDA1YzIzMTA0LAorICAgIDB4YjVlYjUxMzksIDB4NjU5MWYxN2UsIDB4ZDViODkxNDMsIDB4ODZiODIxYTEsIDB4MzY5MTQxOWMsCisgICAgMHhlNmViZTFkYiwgMHg1NmMyODFlNiwgMHg0NjFlYTE1NCwgMHhmNjM3YzE2OSwgMHgyNjRkNjEyZSwKKyAgICAweDk2NjQwMTEzLCAweDQ3ZjM1MTkxLCAweGY3ZGEzMWFjLCAweDI3YTA5MWViLCAweDk3ODlmMWQ2LAorICAgIDB4ODc1NWQxNjQsIDB4Mzc3Y2IxNTksIDB4ZTcwNjExMWUsIDB4NTcyZjcxMjMsIDB4NDk1OGYzNTgsCisgICAgMHhmOTcxOTM2NSwgMHgyOTBiMzMyMiwgMHg5OTIyNTMxZiwgMHg4OWZlNzNhZCwgMHgzOWQ3MTM5MCwKKyAgICAweGU5YWRiM2Q3LCAweDU5ODRkM2VhLCAweDg4MTM4MzY4LCAweDM4M2FlMzU1LCAweGU4NDA0MzEyLAorICAgIDB4NTg2OTIzMmYsIDB4NDhiNTAzOWQsIDB4Zjg5YzYzYTAsIDB4MjhlNmMzZTcsIDB4OThjZmEzZGEsCisgICAgMHhjYmNmMTMzOCwgMHg3YmU2NzMwNSwgMHhhYjljZDM0MiwgMHgxYmI1YjM3ZiwgMHgwYjY5OTNjZCwKKyAgICAweGJiNDBmM2YwLCAweDZiM2E1M2I3LCAweGRiMTMzMzhhLCAweDBhODQ2MzA4LCAweGJhYWQwMzM1LAorICAgIDB4NmFkN2EzNzIsIDB4ZGFmZWMzNGYsIDB4Y2EyMmUzZmQsIDB4N2EwYjgzYzAsIDB4YWE3MTIzODcsCisgICAgMHgxYTU4NDNiYSwgMHg0ZDc3MzI5OSwgMHhmZDVlNTJhNCwgMHgyZDI0ZjJlMywgMHg5ZDBkOTJkZSwKKyAgICAweDhkZDFiMjZjLCAweDNkZjhkMjUxLCAweGVkODI3MjE2LCAweDVkYWIxMjJiLCAweDhjM2M0MmE5LAorICAgIDB4M2MxNTIyOTQsIDB4ZWM2ZjgyZDMsIDB4NWM0NmUyZWUsIDB4NGM5YWMyNWMsIDB4ZmNiM2EyNjEsCisgICAgMHgyY2M5MDIyNiwgMHg5Y2UwNjIxYiwgMHhjZmUwZDJmOSwgMHg3ZmM5YjJjNCwgMHhhZmIzMTI4MywKKyAgICAweDFmOWE3MmJlLCAweDBmNDY1MjBjLCAweGJmNmYzMjMxLCAweDZmMTU5Mjc2LCAweGRmM2NmMjRiLAorICAgIDB4MGVhYmEyYzksIDB4YmU4MmMyZjQsIDB4NmVmODYyYjMsIDB4ZGVkMTAyOGUsIDB4Y2UwZDIyM2MsCisgICAgMHg3ZTI0NDIwMSwgMHhhZTVlZTI0NiwgMHgxZTc3ODI3YiwgMHg5MmIwZTZiMSwgMHgyMjk5ODY4YywKKyAgICAweGYyZTMyNmNiLCAweDQyY2E0NmY2LCAweDUyMTY2NjQ0LCAweGUyM2YwNjc5LCAweDMyNDVhNjNlLAorICAgIDB4ODI2Y2M2MDMsIDB4NTNmYjk2ODEsIDB4ZTNkMmY2YmMsIDB4MzNhODU2ZmIsIDB4ODM4MTM2YzYsCisgICAgMHg5MzVkMTY3NCwgMHgyMzc0NzY0OSwgMHhmMzBlZDYwZSwgMHg0MzI3YjYzMywgMHgxMDI3MDZkMSwKKyAgICAweGEwMGU2NmVjLCAweDcwNzRjNmFiLCAweGMwNWRhNjk2LCAweGQwODE4NjI0LCAweDYwYThlNjE5LAorICAgIDB4YjBkMjQ2NWUsIDB4MDBmYjI2NjMsIDB4ZDE2Yzc2ZTEsIDB4NjE0NTE2ZGMsIDB4YjEzZmI2OWIsCisgICAgMHgwMTE2ZDZhNiwgMHgxMWNhZjYxNCwgMHhhMWUzOTYyOSwgMHg3MTk5MzY2ZSwgMHhjMWIwNTY1MywKKyAgICAweDk2OWYyNzcwLCAweDI2YjY0NzRkLCAweGY2Y2NlNzBhLCAweDQ2ZTU4NzM3LCAweDU2MzlhNzg1LAorICAgIDB4ZTYxMGM3YjgsIDB4MzY2YTY3ZmYsIDB4ODY0MzA3YzIsIDB4NTdkNDU3NDAsIDB4ZTdmZDM3N2QsCisgICAgMHgzNzg3OTczYSwgMHg4N2FlZjcwNywgMHg5NzcyZDdiNSwgMHgyNzViYjc4OCwgMHhmNzIxMTdjZiwKKyAgICAweDQ3MDg3N2YyLCAweDE0MDhjNzEwLCAweGE0MjFhNzJkLCAweDc0NWIwNzZhLCAweGM0NzI2NzU3LAorICAgIDB4ZDRhZTQ3ZTUsIDB4NjQ4NzI3ZDgsIDB4YjRmZDg3OWYsIDB4MDRkNGU3YTIsIDB4ZDU0M2I3MjAsCisgICAgMHg2NTZhZDcxZCwgMHhiNTEwNzc1YSwgMHgwNTM5MTc2NywgMHgxNWU1MzdkNSwgMHhhNWNjNTdlOCwKKyAgICAweDc1YjZmN2FmLCAweGM1OWY5NzkyLCAweGRiZTgxNWU5LCAweDZiYzE3NWQ0LCAweGJiYmJkNTkzLAorICAgIDB4MGI5MmI1YWUsIDB4MWI0ZTk1MWMsIDB4YWI2N2Y1MjEsIDB4N2IxZDU1NjYsIDB4Y2IzNDM1NWIsCisgICAgMHgxYWEzNjVkOSwgMHhhYThhMDVlNCwgMHg3YWYwYTVhMywgMHhjYWQ5YzU5ZSwgMHhkYTA1ZTUyYywKKyAgICAweDZhMmM4NTExLCAweGJhNTYyNTU2LCAweDBhN2Y0NTZiLCAweDU5N2ZmNTg5LCAweGU5NTY5NWI0LAorICAgIDB4MzkyYzM1ZjMsIDB4ODkwNTU1Y2UsIDB4OTlkOTc1N2MsIDB4MjlmMDE1NDEsIDB4Zjk4YWI1MDYsCisgICAgMHg0OWEzZDUzYiwgMHg5ODM0ODViOSwgMHgyODFkZTU4NCwgMHhmODY3NDVjMywgMHg0ODRlMjVmZSwKKyAgICAweDU4OTIwNTRjLCAweGU4YmI2NTcxLCAweDM4YzFjNTM2LCAweDg4ZThhNTBiLCAweGRmYzdkNDI4LAorICAgIDB4NmZlZWI0MTUsIDB4YmY5NDE0NTIsIDB4MGZiZDc0NmYsIDB4MWY2MTU0ZGQsIDB4YWY0ODM0ZTAsCisgICAgMHg3ZjMyOTRhNywgMHhjZjFiZjQ5YSwgMHgxZThjYTQxOCwgMHhhZWE1YzQyNSwgMHg3ZWRmNjQ2MiwKKyAgICAweGNlZjYwNDVmLCAweGRlMmEyNGVkLCAweDZlMDM0NGQwLCAweGJlNzllNDk3LCAweDBlNTA4NGFhLAorICAgIDB4NWQ1MDM0NDgsIDB4ZWQ3OTU0NzUsIDB4M2QwM2Y0MzIsIDB4OGQyYTk0MGYsIDB4OWRmNmI0YmQsCisgICAgMHgyZGRmZDQ4MCwgMHhmZGE1NzRjNywgMHg0ZDhjMTRmYSwgMHg5YzFiNDQ3OCwgMHgyYzMyMjQ0NSwKKyAgICAweGZjNDg4NDAyLCAweDRjNjFlNDNmLCAweDVjYmRjNDhkLCAweGVjOTRhNGIwLCAweDNjZWUwNGY3LAorICAgIDB4OGNjNzY0Y2F9LAorICAgezB4MDAwMDAwMDAsIDB4YTVkMzVjY2IsIDB4MGJhMWM4NGQsIDB4YWU3Mjk0ODYsIDB4MTY0MjkxOWIsCisgICAgMHhiMzkxY2Q1MCwgMHgxZGUzNTlkNiwgMHhiODMwMDUxZCwgMHg2ZDgyNTNlYywgMHhjODUxMGYyNywKKyAgICAweDY2MjM5YmExLCAweGMzZjBjNzZhLCAweDdiYzBjMjc3LCAweGRlMTM5ZWJjLCAweDcwNjEwYTNhLAorICAgIDB4ZDViMjU2ZjEsIDB4OWIwMmQ2MDMsIDB4M2VkMThhYzgsIDB4OTBhMzFlNGUsIDB4MzU3MDQyODUsCisgICAgMHg4ZDQwNDc5OCwgMHgyODkzMWI1MywgMHg4NmUxOGZkNSwgMHgyMzMyZDMxZSwgMHhmNjgwODVlZiwKKyAgICAweDUzNTNkOTI0LCAweGZkMjE0ZGEyLCAweDU4ZjIxMTY5LCAweGUwYzIxNDc0LCAweDQ1MTE0OGJmLAorICAgIDB4ZWI2M2RjMzksIDB4NGViMDgwZjIsIDB4MzYwNWFjMDcsIDB4OTNkNmYwY2MsIDB4M2RhNDY0NGEsCisgICAgMHg5ODc3Mzg4MSwgMHgyMDQ3M2Q5YywgMHg4NTk0NjE1NywgMHgyYmU2ZjVkMSwgMHg4ZTM1YTkxYSwKKyAgICAweDViODdmZmViLCAweGZlNTRhMzIwLCAweDUwMjYzN2E2LCAweGY1ZjU2YjZkLCAweDRkYzU2ZTcwLAorICAgIDB4ZTgxNjMyYmIsIDB4NDY2NGE2M2QsIDB4ZTNiN2ZhZjYsIDB4YWQwNzdhMDQsIDB4MDhkNDI2Y2YsCisgICAgMHhhNmE2YjI0OSwgMHgwMzc1ZWU4MiwgMHhiYjQ1ZWI5ZiwgMHgxZTk2Yjc1NCwgMHhiMGU0MjNkMiwKKyAgICAweDE1Mzc3ZjE5LCAweGMwODUyOWU4LCAweDY1NTY3NTIzLCAweGNiMjRlMWE1LCAweDZlZjdiZDZlLAorICAgIDB4ZDZjN2I4NzMsIDB4NzMxNGU0YjgsIDB4ZGQ2NjcwM2UsIDB4NzhiNTJjZjUsIDB4NmMwYTU4MGYsCisgICAgMHhjOWQ5MDRjNCwgMHg2N2FiOTA0MiwgMHhjMjc4Y2M4OSwgMHg3YTQ4Yzk5NCwgMHhkZjliOTU1ZiwKKyAgICAweDcxZTkwMWQ5LCAweGQ0M2E1ZDEyLCAweDAxODgwYmUzLCAweGE0NWI1NzI4LCAweDBhMjljM2FlLAorICAgIDB4YWZmYTlmNjUsIDB4MTdjYTlhNzgsIDB4YjIxOWM2YjMsIDB4MWM2YjUyMzUsIDB4YjliODBlZmUsCisgICAgMHhmNzA4OGUwYywgMHg1MmRiZDJjNywgMHhmY2E5NDY0MSwgMHg1OTdhMWE4YSwgMHhlMTRhMWY5NywKKyAgICAweDQ0OTk0MzVjLCAweGVhZWJkN2RhLCAweDRmMzg4YjExLCAweDlhOGFkZGUwLCAweDNmNTk4MTJiLAorICAgIDB4OTEyYjE1YWQsIDB4MzRmODQ5NjYsIDB4OGNjODRjN2IsIDB4MjkxYjEwYjAsIDB4ODc2OTg0MzYsCisgICAgMHgyMmJhZDhmZCwgMHg1YTBmZjQwOCwgMHhmZmRjYThjMywgMHg1MWFlM2M0NSwgMHhmNDdkNjA4ZSwKKyAgICAweDRjNGQ2NTkzLCAweGU5OWUzOTU4LCAweDQ3ZWNhZGRlLCAweGUyM2ZmMTE1LCAweDM3OGRhN2U0LAorICAgIDB4OTI1ZWZiMmYsIDB4M2MyYzZmYTksIDB4OTlmZjMzNjIsIDB4MjFjZjM2N2YsIDB4ODQxYzZhYjQsCisgICAgMHgyYTZlZmUzMiwgMHg4ZmJkYTJmOSwgMHhjMTBkMjIwYiwgMHg2NGRlN2VjMCwgMHhjYWFjZWE0NiwKKyAgICAweDZmN2ZiNjhkLCAweGQ3NGZiMzkwLCAweDcyOWNlZjViLCAweGRjZWU3YmRkLCAweDc5M2QyNzE2LAorICAgIDB4YWM4ZjcxZTcsIDB4MDk1YzJkMmMsIDB4YTcyZWI5YWEsIDB4MDJmZGU1NjEsIDB4YmFjZGUwN2MsCisgICAgMHgxZjFlYmNiNywgMHhiMTZjMjgzMSwgMHgxNGJmNzRmYSwgMHhkODE0YjAxZSwgMHg3ZGM3ZWNkNSwKKyAgICAweGQzYjU3ODUzLCAweDc2NjYyNDk4LCAweGNlNTYyMTg1LCAweDZiODU3ZDRlLCAweGM1ZjdlOWM4LAorICAgIDB4NjAyNGI1MDMsIDB4YjU5NmUzZjIsIDB4MTA0NWJmMzksIDB4YmUzNzJiYmYsIDB4MWJlNDc3NzQsCisgICAgMHhhM2Q0NzI2OSwgMHgwNjA3MmVhMiwgMHhhODc1YmEyNCwgMHgwZGE2ZTZlZiwgMHg0MzE2NjYxZCwKKyAgICAweGU2YzUzYWQ2LCAweDQ4YjdhZTUwLCAweGVkNjRmMjliLCAweDU1NTRmNzg2LCAweGYwODdhYjRkLAorICAgIDB4NWVmNTNmY2IsIDB4ZmIyNjYzMDAsIDB4MmU5NDM1ZjEsIDB4OGI0NzY5M2EsIDB4MjUzNWZkYmMsCisgICAgMHg4MGU2YTE3NywgMHgzOGQ2YTQ2YSwgMHg5ZDA1ZjhhMSwgMHgzMzc3NmMyNywgMHg5NmE0MzBlYywKKyAgICAweGVlMTExYzE5LCAweDRiYzI0MGQyLCAweGU1YjBkNDU0LCAweDQwNjM4ODlmLCAweGY4NTM4ZDgyLAorICAgIDB4NWQ4MGQxNDksIDB4ZjNmMjQ1Y2YsIDB4NTYyMTE5MDQsIDB4ODM5MzRmZjUsIDB4MjY0MDEzM2UsCisgICAgMHg4ODMyODdiOCwgMHgyZGUxZGI3MywgMHg5NWQxZGU2ZSwgMHgzMDAyODJhNSwgMHg5ZTcwMTYyMywKKyAgICAweDNiYTM0YWU4LCAweDc1MTNjYTFhLCAweGQwYzA5NmQxLCAweDdlYjIwMjU3LCAweGRiNjE1ZTljLAorICAgIDB4NjM1MTViODEsIDB4YzY4MjA3NGEsIDB4NjhmMDkzY2MsIDB4Y2QyM2NmMDcsIDB4MTg5MTk5ZjYsCisgICAgMHhiZDQyYzUzZCwgMHgxMzMwNTFiYiwgMHhiNmUzMGQ3MCwgMHgwZWQzMDg2ZCwgMHhhYjAwNTRhNiwKKyAgICAweDA1NzJjMDIwLCAweGEwYTE5Y2ViLCAweGI0MWVlODExLCAweDExY2RiNGRhLCAweGJmYmYyMDVjLAorICAgIDB4MWE2YzdjOTcsIDB4YTI1Yzc5OGEsIDB4MDc4ZjI1NDEsIDB4YTlmZGIxYzcsIDB4MGMyZWVkMGMsCisgICAgMHhkOTljYmJmZCwgMHg3YzRmZTczNiwgMHhkMjNkNzNiMCwgMHg3N2VlMmY3YiwgMHhjZmRlMmE2NiwKKyAgICAweDZhMGQ3NmFkLCAweGM0N2ZlMjJiLCAweDYxYWNiZWUwLCAweDJmMWMzZTEyLCAweDhhY2Y2MmQ5LAorICAgIDB4MjRiZGY2NWYsIDB4ODE2ZWFhOTQsIDB4Mzk1ZWFmODksIDB4OWM4ZGYzNDIsIDB4MzJmZjY3YzQsCisgICAgMHg5NzJjM2IwZiwgMHg0MjllNmRmZSwgMHhlNzRkMzEzNSwgMHg0OTNmYTViMywgMHhlY2VjZjk3OCwKKyAgICAweDU0ZGNmYzY1LCAweGYxMGZhMGFlLCAweDVmN2QzNDI4LCAweGZhYWU2OGUzLCAweDgyMWI0NDE2LAorICAgIDB4MjdjODE4ZGQsIDB4ODliYThjNWIsIDB4MmM2OWQwOTAsIDB4OTQ1OWQ1OGQsIDB4MzE4YTg5NDYsCisgICAgMHg5ZmY4MWRjMCwgMHgzYTJiNDEwYiwgMHhlZjk5MTdmYSwgMHg0YTRhNGIzMSwgMHhlNDM4ZGZiNywKKyAgICAweDQxZWI4MzdjLCAweGY5ZGI4NjYxLCAweDVjMDhkYWFhLCAweGYyN2E0ZTJjLCAweDU3YTkxMmU3LAorICAgIDB4MTkxOTkyMTUsIDB4YmNjYWNlZGUsIDB4MTJiODVhNTgsIDB4Yjc2YjA2OTMsIDB4MGY1YjAzOGUsCisgICAgMHhhYTg4NWY0NSwgMHgwNGZhY2JjMywgMHhhMTI5OTcwOCwgMHg3NDliYzFmOSwgMHhkMTQ4OWQzMiwKKyAgICAweDdmM2EwOWI0LCAweGRhZTk1NTdmLCAweDYyZDk1MDYyLCAweGM3MGEwY2E5LCAweDY5Nzg5ODJmLAorICAgIDB4Y2NhYmM0ZTR9LAorICAgezB4MDAwMDAwMDAsIDB4YjQwYjc3YTYsIDB4MjkxMTlmOTcsIDB4OWQxYWU4MzEsIDB4MTMyNDRmZjQsCisgICAgMHhhNzJmMzg1MiwgMHgzYTM1ZDA2MywgMHg4ZTNlYTdjNSwgMHg2NzRlZWYzMywgMHhkMzQ1OTg5NSwKKyAgICAweDRlNWY3MGE0LCAweGZhNTQwNzAyLCAweDc0NmFhMGM3LCAweGMwNjFkNzYxLCAweDVkN2IzZjUwLAorICAgIDB4ZTk3MDQ4ZjYsIDB4Y2U5Y2RlNjcsIDB4N2E5N2E5YzEsIDB4ZTc4ZDQxZjAsIDB4NTM4NjM2NTYsCisgICAgMHhkZGI4OTE5MywgMHg2OWIzZTYzNSwgMHhmNGE5MGUwNCwgMHg0MGEyNzlhMiwgMHhhOWQyMzE1NCwKKyAgICAweDFkZDk0NmYyLCAweDgwYzNhZWMzLCAweDM0YzhkOTY1LCAweGJhZjY3ZWEwLCAweDBlZmQwOTA2LAorICAgIDB4OTNlN2UxMzcsIDB4MjdlYzk2OTEsIDB4OWMzOWJkY2YsIDB4MjgzMmNhNjksIDB4YjUyODIyNTgsCisgICAgMHgwMTIzNTVmZSwgMHg4ZjFkZjIzYiwgMHgzYjE2ODU5ZCwgMHhhNjBjNmRhYywgMHgxMjA3MWEwYSwKKyAgICAweGZiNzc1MmZjLCAweDRmN2MyNTVhLCAweGQyNjZjZDZiLCAweDY2NmRiYWNkLCAweGU4NTMxZDA4LAorICAgIDB4NWM1ODZhYWUsIDB4YzE0MjgyOWYsIDB4NzU0OWY1MzksIDB4NTJhNTYzYTgsIDB4ZTZhZTE0MGUsCisgICAgMHg3YmI0ZmMzZiwgMHhjZmJmOGI5OSwgMHg0MTgxMmM1YywgMHhmNThhNWJmYSwgMHg2ODkwYjNjYiwKKyAgICAweGRjOWJjNDZkLCAweDM1ZWI4YzliLCAweDgxZTBmYjNkLCAweDFjZmExMzBjLCAweGE4ZjE2NGFhLAorICAgIDB4MjZjZmMzNmYsIDB4OTJjNGI0YzksIDB4MGZkZTVjZjgsIDB4YmJkNTJiNWUsIDB4Nzk3NTBiNDQsCisgICAgMHhjZDdlN2NlMiwgMHg1MDY0OTRkMywgMHhlNDZmZTM3NSwgMHg2YTUxNDRiMCwgMHhkZTVhMzMxNiwKKyAgICAweDQzNDBkYjI3LCAweGY3NGJhYzgxLCAweDFlM2JlNDc3LCAweGFhMzA5M2QxLCAweDM3MmE3YmUwLAorICAgIDB4ODMyMTBjNDYsIDB4MGQxZmFiODMsIDB4YjkxNGRjMjUsIDB4MjQwZTM0MTQsIDB4OTAwNTQzYjIsCisgICAgMHhiN2U5ZDUyMywgMHgwM2UyYTI4NSwgMHg5ZWY4NGFiNCwgMHgyYWYzM2QxMiwgMHhhNGNkOWFkNywKKyAgICAweDEwYzZlZDcxLCAweDhkZGMwNTQwLCAweDM5ZDc3MmU2LCAweGQwYTczYTEwLCAweDY0YWM0ZGI2LAorICAgIDB4ZjliNmE1ODcsIDB4NGRiZGQyMjEsIDB4YzM4Mzc1ZTQsIDB4Nzc4ODAyNDIsIDB4ZWE5MmVhNzMsCisgICAgMHg1ZTk5OWRkNSwgMHhlNTRjYjY4YiwgMHg1MTQ3YzEyZCwgMHhjYzVkMjkxYywgMHg3ODU2NWViYSwKKyAgICAweGY2NjhmOTdmLCAweDQyNjM4ZWQ5LCAweGRmNzk2NmU4LCAweDZiNzIxMTRlLCAweDgyMDI1OWI4LAorICAgIDB4MzYwOTJlMWUsIDB4YWIxM2M2MmYsIDB4MWYxOGIxODksIDB4OTEyNjE2NGMsIDB4MjUyZDYxZWEsCisgICAgMHhiODM3ODlkYiwgMHgwYzNjZmU3ZCwgMHgyYmQwNjhlYywgMHg5ZmRiMWY0YSwgMHgwMmMxZjc3YiwKKyAgICAweGI2Y2E4MGRkLCAweDM4ZjQyNzE4LCAweDhjZmY1MGJlLCAweDExZTViODhmLCAweGE1ZWVjZjI5LAorICAgIDB4NGM5ZTg3ZGYsIDB4Zjg5NWYwNzksIDB4NjU4ZjE4NDgsIDB4ZDE4NDZmZWUsIDB4NWZiYWM4MmIsCisgICAgMHhlYmIxYmY4ZCwgMHg3NmFiNTdiYywgMHhjMmEwMjAxYSwgMHhmMmVhMTY4OCwgMHg0NmUxNjEyZSwKKyAgICAweGRiZmI4OTFmLCAweDZmZjBmZWI5LCAweGUxY2U1OTdjLCAweDU1YzUyZWRhLCAweGM4ZGZjNmViLAorICAgIDB4N2NkNGIxNGQsIDB4OTVhNGY5YmIsIDB4MjFhZjhlMWQsIDB4YmNiNTY2MmMsIDB4MDhiZTExOGEsCisgICAgMHg4NjgwYjY0ZiwgMHgzMjhiYzFlOSwgMHhhZjkxMjlkOCwgMHgxYjlhNWU3ZSwgMHgzYzc2YzhlZiwKKyAgICAweDg4N2RiZjQ5LCAweDE1Njc1Nzc4LCAweGExNmMyMGRlLCAweDJmNTI4NzFiLCAweDliNTlmMGJkLAorICAgIDB4MDY0MzE4OGMsIDB4YjI0ODZmMmEsIDB4NWIzODI3ZGMsIDB4ZWYzMzUwN2EsIDB4NzIyOWI4NGIsCisgICAgMHhjNjIyY2ZlZCwgMHg0ODFjNjgyOCwgMHhmYzE3MWY4ZSwgMHg2MTBkZjdiZiwgMHhkNTA2ODAxOSwKKyAgICAweDZlZDNhYjQ3LCAweGRhZDhkY2UxLCAweDQ3YzIzNGQwLCAweGYzYzk0Mzc2LCAweDdkZjdlNGIzLAorICAgIDB4YzlmYzkzMTUsIDB4NTRlNjdiMjQsIDB4ZTBlZDBjODIsIDB4MDk5ZDQ0NzQsIDB4YmQ5NjMzZDIsCisgICAgMHgyMDhjZGJlMywgMHg5NDg3YWM0NSwgMHgxYWI5MGI4MCwgMHhhZWIyN2MyNiwgMHgzM2E4OTQxNywKKyAgICAweDg3YTNlM2IxLCAweGEwNGY3NTIwLCAweDE0NDQwMjg2LCAweDg5NWVlYWI3LCAweDNkNTU5ZDExLAorICAgIDB4YjM2YjNhZDQsIDB4MDc2MDRkNzIsIDB4OWE3YWE1NDMsIDB4MmU3MWQyZTUsIDB4YzcwMTlhMTMsCisgICAgMHg3MzBhZWRiNSwgMHhlZTEwMDU4NCwgMHg1YTFiNzIyMiwgMHhkNDI1ZDVlNywgMHg2MDJlYTI0MSwKKyAgICAweGZkMzQ0YTcwLCAweDQ5M2YzZGQ2LCAweDhiOWYxZGNjLCAweDNmOTQ2YTZhLCAweGEyOGU4MjViLAorICAgIDB4MTY4NWY1ZmQsIDB4OThiYjUyMzgsIDB4MmNiMDI1OWUsIDB4YjFhYWNkYWYsIDB4MDVhMWJhMDksCisgICAgMHhlY2QxZjJmZiwgMHg1OGRhODU1OSwgMHhjNWMwNmQ2OCwgMHg3MWNiMWFjZSwgMHhmZmY1YmQwYiwKKyAgICAweDRiZmVjYWFkLCAweGQ2ZTQyMjljLCAweDYyZWY1NTNhLCAweDQ1MDNjM2FiLCAweGYxMDhiNDBkLAorICAgIDB4NmMxMjVjM2MsIDB4ZDgxOTJiOWEsIDB4NTYyNzhjNWYsIDB4ZTIyY2ZiZjksIDB4N2YzNjEzYzgsCisgICAgMHhjYjNkNjQ2ZSwgMHgyMjRkMmM5OCwgMHg5NjQ2NWIzZSwgMHgwYjVjYjMwZiwgMHhiZjU3YzRhOSwKKyAgICAweDMxNjk2MzZjLCAweDg1NjIxNGNhLCAweDE4NzhmY2ZiLCAweGFjNzM4YjVkLCAweDE3YTZhMDAzLAorICAgIDB4YTNhZGQ3YTUsIDB4M2ViNzNmOTQsIDB4OGFiYzQ4MzIsIDB4MDQ4MmVmZjcsIDB4YjA4OTk4NTEsCisgICAgMHgyZDkzNzA2MCwgMHg5OTk4MDdjNiwgMHg3MGU4NGYzMCwgMHhjNGUzMzg5NiwgMHg1OWY5ZDBhNywKKyAgICAweGVkZjJhNzAxLCAweDYzY2MwMGM0LCAweGQ3Yzc3NzYyLCAweDRhZGQ5ZjUzLCAweGZlZDZlOGY1LAorICAgIDB4ZDkzYTdlNjQsIDB4NmQzMTA5YzIsIDB4ZjAyYmUxZjMsIDB4NDQyMDk2NTUsIDB4Y2ExZTMxOTAsCisgICAgMHg3ZTE1NDYzNiwgMHhlMzBmYWUwNywgMHg1NzA0ZDlhMSwgMHhiZTc0OTE1NywgMHgwYTdmZTZmMSwKKyAgICAweDk3NjUwZWMwLCAweDIzNmU3OTY2LCAweGFkNTBkZWEzLCAweDE5NWJhOTA1LCAweDg0NDE0MTM0LAorICAgIDB4MzA0YTM2OTJ9LAorICAgezB4MDAwMDAwMDAsIDB4OWUwMGFhY2MsIDB4N2QwNzI1NDIsIDB4ZTMwNzhmOGUsIDB4ZmEwZTRhODQsCisgICAgMHg2NDBlZTA0OCwgMHg4NzA5NmZjNiwgMHgxOTA5YzUwYSwgMHhiNTFiZTVkMywgMHgyYjFiNGYxZiwKKyAgICAweGM4MWNjMDkxLCAweDU2MWM2YTVkLCAweDRmMTVhZjU3LCAweGQxMTUwNTliLCAweDMyMTI4YTE1LAorICAgIDB4YWMxMjIwZDksIDB4MmIzMWJiN2MsIDB4YjUzMTExYjAsIDB4NTYzNjllM2UsIDB4YzgzNjM0ZjIsCisgICAgMHhkMTNmZjFmOCwgMHg0ZjNmNWIzNCwgMHhhYzM4ZDRiYSwgMHgzMjM4N2U3NiwgMHg5ZTJhNWVhZiwKKyAgICAweDAwMmFmNDYzLCAweGUzMmQ3YmVkLCAweDdkMmRkMTIxLCAweDY0MjQxNDJiLCAweGZhMjRiZWU3LAorICAgIDB4MTkyMzMxNjksIDB4ODcyMzliYTUsIDB4NTY2Mjc2ZjksIDB4Yzg2MmRjMzUsIDB4MmI2NTUzYmIsCisgICAgMHhiNTY1Zjk3NywgMHhhYzZjM2M3ZCwgMHgzMjZjOTZiMSwgMHhkMTZiMTkzZiwgMHg0ZjZiYjNmMywKKyAgICAweGUzNzk5MzJhLCAweDdkNzkzOWU2LCAweDllN2ViNjY4LCAweDAwN2UxY2E0LCAweDE5NzdkOWFlLAorICAgIDB4ODc3NzczNjIsIDB4NjQ3MGZjZWMsIDB4ZmE3MDU2MjAsIDB4N2Q1M2NkODUsIDB4ZTM1MzY3NDksCisgICAgMHgwMDU0ZThjNywgMHg5ZTU0NDIwYiwgMHg4NzVkODcwMSwgMHgxOTVkMmRjZCwgMHhmYTVhYTI0MywKKyAgICAweDY0NWEwODhmLCAweGM4NDgyODU2LCAweDU2NDg4MjlhLCAweGI1NGYwZDE0LCAweDJiNGZhN2Q4LAorICAgIDB4MzI0NjYyZDIsIDB4YWM0NmM4MWUsIDB4NGY0MTQ3OTAsIDB4ZDE0MWVkNWMsIDB4ZWRjMjlkMjksCisgICAgMHg3M2MyMzdlNSwgMHg5MGM1Yjg2YiwgMHgwZWM1MTJhNywgMHgxN2NjZDdhZCwgMHg4OWNjN2Q2MSwKKyAgICAweDZhY2JmMmVmLCAweGY0Y2I1ODIzLCAweDU4ZDk3OGZhLCAweGM2ZDlkMjM2LCAweDI1ZGU1ZGI4LAorICAgIDB4YmJkZWY3NzQsIDB4YTJkNzMyN2UsIDB4M2NkNzk4YjIsIDB4ZGZkMDE3M2MsIDB4NDFkMGJkZjAsCisgICAgMHhjNmYzMjY1NSwgMHg1OGYzOGM5OSwgMHhiYmY0MDMxNywgMHgyNWY0YTlkYiwgMHgzY2ZkNmNkMSwKKyAgICAweGEyZmRjNjFkLCAweDQxZmE0OTkzLCAweGRmZmFlMzVmLCAweDczZThjMzg2LCAweGVkZTg2OTRhLAorICAgIDB4MGVlZmU2YzQsIDB4OTBlZjRjMDgsIDB4ODllNjg5MDIsIDB4MTdlNjIzY2UsIDB4ZjRlMWFjNDAsCisgICAgMHg2YWUxMDY4YywgMHhiYmEwZWJkMCwgMHgyNWEwNDExYywgMHhjNmE3Y2U5MiwgMHg1OGE3NjQ1ZSwKKyAgICAweDQxYWVhMTU0LCAweGRmYWUwYjk4LCAweDNjYTk4NDE2LCAweGEyYTkyZWRhLCAweDBlYmIwZTAzLAorICAgIDB4OTBiYmE0Y2YsIDB4NzNiYzJiNDEsIDB4ZWRiYzgxOGQsIDB4ZjRiNTQ0ODcsIDB4NmFiNWVlNGIsCisgICAgMHg4OWIyNjFjNSwgMHgxN2IyY2IwOSwgMHg5MDkxNTBhYywgMHgwZTkxZmE2MCwgMHhlZDk2NzVlZSwKKyAgICAweDczOTZkZjIyLCAweDZhOWYxYTI4LCAweGY0OWZiMGU0LCAweDE3OTgzZjZhLCAweDg5OTg5NWE2LAorICAgIDB4MjU4YWI1N2YsIDB4YmI4YTFmYjMsIDB4NTg4ZDkwM2QsIDB4YzY4ZDNhZjEsIDB4ZGY4NGZmZmIsCisgICAgMHg0MTg0NTUzNywgMHhhMjgzZGFiOSwgMHgzYzgzNzA3NSwgMHhkYTg1M2I1MywgMHg0NDg1OTE5ZiwKKyAgICAweGE3ODIxZTExLCAweDM5ODJiNGRkLCAweDIwOGI3MWQ3LCAweGJlOGJkYjFiLCAweDVkOGM1NDk1LAorICAgIDB4YzM4Y2ZlNTksIDB4NmY5ZWRlODAsIDB4ZjE5ZTc0NGMsIDB4MTI5OWZiYzIsIDB4OGM5OTUxMGUsCisgICAgMHg5NTkwOTQwNCwgMHgwYjkwM2VjOCwgMHhlODk3YjE0NiwgMHg3Njk3MWI4YSwgMHhmMWI0ODAyZiwKKyAgICAweDZmYjQyYWUzLCAweDhjYjNhNTZkLCAweDEyYjMwZmExLCAweDBiYmFjYWFiLCAweDk1YmE2MDY3LAorICAgIDB4NzZiZGVmZTksIDB4ZThiZDQ1MjUsIDB4NDRhZjY1ZmMsIDB4ZGFhZmNmMzAsIDB4MzlhODQwYmUsCisgICAgMHhhN2E4ZWE3MiwgMHhiZWExMmY3OCwgMHgyMGExODViNCwgMHhjM2E2MGEzYSwgMHg1ZGE2YTBmNiwKKyAgICAweDhjZTc0ZGFhLCAweDEyZTdlNzY2LCAweGYxZTA2OGU4LCAweDZmZTBjMjI0LCAweDc2ZTkwNzJlLAorICAgIDB4ZThlOWFkZTIsIDB4MGJlZTIyNmMsIDB4OTVlZTg4YTAsIDB4MzlmY2E4NzksIDB4YTdmYzAyYjUsCisgICAgMHg0NGZiOGQzYiwgMHhkYWZiMjdmNywgMHhjM2YyZTJmZCwgMHg1ZGYyNDgzMSwgMHhiZWY1YzdiZiwKKyAgICAweDIwZjU2ZDczLCAweGE3ZDZmNmQ2LCAweDM5ZDY1YzFhLCAweGRhZDFkMzk0LCAweDQ0ZDE3OTU4LAorICAgIDB4NWRkOGJjNTIsIDB4YzNkODE2OWUsIDB4MjBkZjk5MTAsIDB4YmVkZjMzZGMsIDB4MTJjZDEzMDUsCisgICAgMHg4Y2NkYjljOSwgMHg2ZmNhMzY0NywgMHhmMWNhOWM4YiwgMHhlOGMzNTk4MSwgMHg3NmMzZjM0ZCwKKyAgICAweDk1YzQ3Y2MzLCAweDBiYzRkNjBmLCAweDM3NDdhNjdhLCAweGE5NDcwY2I2LCAweDRhNDA4MzM4LAorICAgIDB4ZDQ0MDI5ZjQsIDB4Y2Q0OWVjZmUsIDB4NTM0OTQ2MzIsIDB4YjA0ZWM5YmMsIDB4MmU0ZTYzNzAsCisgICAgMHg4MjVjNDNhOSwgMHgxYzVjZTk2NSwgMHhmZjViNjZlYiwgMHg2MTViY2MyNywgMHg3ODUyMDkyZCwKKyAgICAweGU2NTJhM2UxLCAweDA1NTUyYzZmLCAweDliNTU4NmEzLCAweDFjNzYxZDA2LCAweDgyNzZiN2NhLAorICAgIDB4NjE3MTM4NDQsIDB4ZmY3MTkyODgsIDB4ZTY3ODU3ODIsIDB4Nzg3OGZkNGUsIDB4OWI3ZjcyYzAsCisgICAgMHgwNTdmZDgwYywgMHhhOTZkZjhkNSwgMHgzNzZkNTIxOSwgMHhkNDZhZGQ5NywgMHg0YTZhNzc1YiwKKyAgICAweDUzNjNiMjUxLCAweGNkNjMxODlkLCAweDJlNjQ5NzEzLCAweGIwNjQzZGRmLCAweDYxMjVkMDgzLAorICAgIDB4ZmYyNTdhNGYsIDB4MWMyMmY1YzEsIDB4ODIyMjVmMGQsIDB4OWIyYjlhMDcsIDB4MDUyYjMwY2IsCisgICAgMHhlNjJjYmY0NSwgMHg3ODJjMTU4OSwgMHhkNDNlMzU1MCwgMHg0YTNlOWY5YywgMHhhOTM5MTAxMiwKKyAgICAweDM3MzliYWRlLCAweDJlMzA3ZmQ0LCAweGIwMzBkNTE4LCAweDUzMzc1YTk2LCAweGNkMzdmMDVhLAorICAgIDB4NGExNDZiZmYsIDB4ZDQxNGMxMzMsIDB4MzcxMzRlYmQsIDB4YTkxM2U0NzEsIDB4YjAxYTIxN2IsCisgICAgMHgyZTFhOGJiNywgMHhjZDFkMDQzOSwgMHg1MzFkYWVmNSwgMHhmZjBmOGUyYywgMHg2MTBmMjRlMCwKKyAgICAweDgyMDhhYjZlLCAweDFjMDgwMWEyLCAweDA1MDFjNGE4LCAweDliMDE2ZTY0LCAweDc4MDZlMWVhLAorICAgIDB4ZTYwNjRiMjZ9fTsKKworI2VuZGlmCisKKyNlbmRpZgorCisjaWYgTiA9PSAzCisKKyNpZiBXID09IDgKKworbG9jYWwgY29uc3Qgel9jcmNfdCBGQVIgY3JjX2JyYWlkX3RhYmxlW11bMjU2XSA9IHsKKyAgIHsweDAwMDAwMDAwLCAweDgxMjU2NTI3LCAweGQ5M2JjYzBmLCAweDU4MWVhOTI4LCAweDY5MDY5ZTVmLAorICAgIDB4ZTgyM2ZiNzgsIDB4YjAzZDUyNTAsIDB4MzExODM3NzcsIDB4ZDIwZDNjYmUsIDB4NTMyODU5OTksCisgICAgMHgwYjM2ZjBiMSwgMHg4YTEzOTU5NiwgMHhiYjBiYTJlMSwgMHgzYTJlYzdjNiwgMHg2MjMwNmVlZSwKKyAgICAweGUzMTUwYmM5LCAweDdmNmI3ZjNkLCAweGZlNGUxYTFhLCAweGE2NTBiMzMyLCAweDI3NzVkNjE1LAorICAgIDB4MTY2ZGUxNjIsIDB4OTc0ODg0NDUsIDB4Y2Y1NjJkNmQsIDB4NGU3MzQ4NGEsIDB4YWQ2NjQzODMsCisgICAgMHgyYzQzMjZhNCwgMHg3NDVkOGY4YywgMHhmNTc4ZWFhYiwgMHhjNDYwZGRkYywgMHg0NTQ1YjhmYiwKKyAgICAweDFkNWIxMWQzLCAweDljN2U3NGY0LCAweGZlZDZmZTdhLCAweDdmZjM5YjVkLCAweDI3ZWQzMjc1LAorICAgIDB4YTZjODU3NTIsIDB4OTdkMDYwMjUsIDB4MTZmNTA1MDIsIDB4NGVlYmFjMmEsIDB4Y2ZjZWM5MGQsCisgICAgMHgyY2RiYzJjNCwgMHhhZGZlYTdlMywgMHhmNWUwMGVjYiwgMHg3NGM1NmJlYywgMHg0NWRkNWM5YiwKKyAgICAweGM0ZjgzOWJjLCAweDljZTY5MDk0LCAweDFkYzNmNWIzLCAweDgxYmQ4MTQ3LCAweDAwOThlNDYwLAorICAgIDB4NTg4NjRkNDgsIDB4ZDlhMzI4NmYsIDB4ZThiYjFmMTgsIDB4Njk5ZTdhM2YsIDB4MzE4MGQzMTcsCisgICAgMHhiMGE1YjYzMCwgMHg1M2IwYmRmOSwgMHhkMjk1ZDhkZSwgMHg4YThiNzFmNiwgMHgwYmFlMTRkMSwKKyAgICAweDNhYjYyM2E2LCAweGJiOTM0NjgxLCAweGUzOGRlZmE5LCAweDYyYTg4YThlLCAweDI2ZGNmYWI1LAorICAgIDB4YTdmOTlmOTIsIDB4ZmZlNzM2YmEsIDB4N2VjMjUzOWQsIDB4NGZkYTY0ZWEsIDB4Y2VmZjAxY2QsCisgICAgMHg5NmUxYThlNSwgMHgxN2M0Y2RjMiwgMHhmNGQxYzYwYiwgMHg3NWY0YTMyYywgMHgyZGVhMGEwNCwKKyAgICAweGFjY2Y2ZjIzLCAweDlkZDc1ODU0LCAweDFjZjIzZDczLCAweDQ0ZWM5NDViLCAweGM1YzlmMTdjLAorICAgIDB4NTliNzg1ODgsIDB4ZDg5MmUwYWYsIDB4ODA4YzQ5ODcsIDB4MDFhOTJjYTAsIDB4MzBiMTFiZDcsCisgICAgMHhiMTk0N2VmMCwgMHhlOThhZDdkOCwgMHg2OGFmYjJmZiwgMHg4YmJhYjkzNiwgMHgwYTlmZGMxMSwKKyAgICAweDUyODE3NTM5LCAweGQzYTQxMDFlLCAweGUyYmMyNzY5LCAweDYzOTk0MjRlLCAweDNiODdlYjY2LAorICAgIDB4YmFhMjhlNDEsIDB4ZDgwYTA0Y2YsIDB4NTkyZjYxZTgsIDB4MDEzMWM4YzAsIDB4ODAxNGFkZTcsCisgICAgMHhiMTBjOWE5MCwgMHgzMDI5ZmZiNywgMHg2ODM3NTY5ZiwgMHhlOTEyMzNiOCwgMHgwYTA3Mzg3MSwKKyAgICAweDhiMjI1ZDU2LCAweGQzM2NmNDdlLCAweDUyMTk5MTU5LCAweDYzMDFhNjJlLCAweGUyMjRjMzA5LAorICAgIDB4YmEzYTZhMjEsIDB4M2IxZjBmMDYsIDB4YTc2MTdiZjIsIDB4MjY0NDFlZDUsIDB4N2U1YWI3ZmQsCisgICAgMHhmZjdmZDJkYSwgMHhjZTY3ZTVhZCwgMHg0ZjQyODA4YSwgMHgxNzVjMjlhMiwgMHg5Njc5NGM4NSwKKyAgICAweDc1NmM0NzRjLCAweGY0NDkyMjZiLCAweGFjNTc4YjQzLCAweDJkNzJlZTY0LCAweDFjNmFkOTEzLAorICAgIDB4OWQ0ZmJjMzQsIDB4YzU1MTE1MWMsIDB4NDQ3NDcwM2IsIDB4NGRiOWY1NmEsIDB4Y2M5YzkwNGQsCisgICAgMHg5NDgyMzk2NSwgMHgxNWE3NWM0MiwgMHgyNGJmNmIzNSwgMHhhNTlhMGUxMiwgMHhmZDg0YTczYSwKKyAgICAweDdjYTFjMjFkLCAweDlmYjRjOWQ0LCAweDFlOTFhY2YzLCAweDQ2OGYwNWRiLCAweGM3YWE2MGZjLAorICAgIDB4ZjZiMjU3OGIsIDB4Nzc5NzMyYWMsIDB4MmY4OTliODQsIDB4YWVhY2ZlYTMsIDB4MzJkMjhhNTcsCisgICAgMHhiM2Y3ZWY3MCwgMHhlYmU5NDY1OCwgMHg2YWNjMjM3ZiwgMHg1YmQ0MTQwOCwgMHhkYWYxNzEyZiwKKyAgICAweDgyZWZkODA3LCAweDAzY2FiZDIwLCAweGUwZGZiNmU5LCAweDYxZmFkM2NlLCAweDM5ZTQ3YWU2LAorICAgIDB4YjhjMTFmYzEsIDB4ODlkOTI4YjYsIDB4MDhmYzRkOTEsIDB4NTBlMmU0YjksIDB4ZDFjNzgxOWUsCisgICAgMHhiMzZmMGIxMCwgMHgzMjRhNmUzNywgMHg2YTU0YzcxZiwgMHhlYjcxYTIzOCwgMHhkYTY5OTU0ZiwKKyAgICAweDViNGNmMDY4LCAweDAzNTI1OTQwLCAweDgyNzczYzY3LCAweDYxNjIzN2FlLCAweGUwNDc1Mjg5LAorICAgIDB4Yjg1OWZiYTEsIDB4Mzk3YzllODYsIDB4MDg2NGE5ZjEsIDB4ODk0MWNjZDYsIDB4ZDE1ZjY1ZmUsCisgICAgMHg1MDdhMDBkOSwgMHhjYzA0NzQyZCwgMHg0ZDIxMTEwYSwgMHgxNTNmYjgyMiwgMHg5NDFhZGQwNSwKKyAgICAweGE1MDJlYTcyLCAweDI0Mjc4ZjU1LCAweDdjMzkyNjdkLCAweGZkMWM0MzVhLCAweDFlMDk0ODkzLAorICAgIDB4OWYyYzJkYjQsIDB4YzczMjg0OWMsIDB4NDYxN2UxYmIsIDB4NzcwZmQ2Y2MsIDB4ZjYyYWIzZWIsCisgICAgMHhhZTM0MWFjMywgMHgyZjExN2ZlNCwgMHg2YjY1MGZkZiwgMHhlYTQwNmFmOCwgMHhiMjVlYzNkMCwKKyAgICAweDMzN2JhNmY3LCAweDAyNjM5MTgwLCAweDgzNDZmNGE3LCAweGRiNTg1ZDhmLCAweDVhN2QzOGE4LAorICAgIDB4Yjk2ODMzNjEsIDB4Mzg0ZDU2NDYsIDB4NjA1M2ZmNmUsIDB4ZTE3NjlhNDksIDB4ZDA2ZWFkM2UsCisgICAgMHg1MTRiYzgxOSwgMHgwOTU1NjEzMSwgMHg4ODcwMDQxNiwgMHgxNDBlNzBlMiwgMHg5NTJiMTVjNSwKKyAgICAweGNkMzViY2VkLCAweDRjMTBkOWNhLCAweDdkMDhlZWJkLCAweGZjMmQ4YjlhLCAweGE0MzMyMmIyLAorICAgIDB4MjUxNjQ3OTUsIDB4YzYwMzRjNWMsIDB4NDcyNjI5N2IsIDB4MWYzODgwNTMsIDB4OWUxZGU1NzQsCisgICAgMHhhZjA1ZDIwMywgMHgyZTIwYjcyNCwgMHg3NjNlMWUwYywgMHhmNzFiN2IyYiwgMHg5NWIzZjFhNSwKKyAgICAweDE0OTY5NDgyLCAweDRjODgzZGFhLCAweGNkYWQ1ODhkLCAweGZjYjU2ZmZhLCAweDdkOTAwYWRkLAorICAgIDB4MjU4ZWEzZjUsIDB4YTRhYmM2ZDIsIDB4NDdiZWNkMWIsIDB4YzY5YmE4M2MsIDB4OWU4NTAxMTQsCisgICAgMHgxZmEwNjQzMywgMHgyZWI4NTM0NCwgMHhhZjlkMzY2MywgMHhmNzgzOWY0YiwgMHg3NmE2ZmE2YywKKyAgICAweGVhZDg4ZTk4LCAweDZiZmRlYmJmLCAweDMzZTM0Mjk3LCAweGIyYzYyN2IwLCAweDgzZGUxMGM3LAorICAgIDB4MDJmYjc1ZTAsIDB4NWFlNWRjYzgsIDB4ZGJjMGI5ZWYsIDB4MzhkNWIyMjYsIDB4YjlmMGQ3MDEsCisgICAgMHhlMWVlN2UyOSwgMHg2MGNiMWIwZSwgMHg1MWQzMmM3OSwgMHhkMGY2NDk1ZSwgMHg4OGU4ZTA3NiwKKyAgICAweDA5Y2Q4NTUxfSwKKyAgIHsweDAwMDAwMDAwLCAweDliNzNlYWQ0LCAweGVkOTZkM2U5LCAweDc2ZTUzOTNkLCAweDAwNWNhMTkzLAorICAgIDB4OWIyZjRiNDcsIDB4ZWRjYTcyN2EsIDB4NzZiOTk4YWUsIDB4MDBiOTQzMjYsIDB4OWJjYWE5ZjIsCisgICAgMHhlZDJmOTBjZiwgMHg3NjVjN2ExYiwgMHgwMGU1ZTJiNSwgMHg5Yjk2MDg2MSwgMHhlZDczMzE1YywKKyAgICAweDc2MDBkYjg4LCAweDAxNzI4NjRjLCAweDlhMDE2Yzk4LCAweGVjZTQ1NWE1LCAweDc3OTdiZjcxLAorICAgIDB4MDEyZTI3ZGYsIDB4OWE1ZGNkMGIsIDB4ZWNiOGY0MzYsIDB4NzdjYjFlZTIsIDB4MDFjYmM1NmEsCisgICAgMHg5YWI4MmZiZSwgMHhlYzVkMTY4MywgMHg3NzJlZmM1NywgMHgwMTk3NjRmOSwgMHg5YWU0OGUyZCwKKyAgICAweGVjMDFiNzEwLCAweDc3NzI1ZGM0LCAweDAyZTUwYzk4LCAweDk5OTZlNjRjLCAweGVmNzNkZjcxLAorICAgIDB4NzQwMDM1YTUsIDB4MDJiOWFkMGIsIDB4OTljYTQ3ZGYsIDB4ZWYyZjdlZTIsIDB4NzQ1Yzk0MzYsCisgICAgMHgwMjVjNGZiZSwgMHg5OTJmYTU2YSwgMHhlZmNhOWM1NywgMHg3NGI5NzY4MywgMHgwMjAwZWUyZCwKKyAgICAweDk5NzMwNGY5LCAweGVmOTYzZGM0LCAweDc0ZTVkNzEwLCAweDAzOTc4YWQ0LCAweDk4ZTQ2MDAwLAorICAgIDB4ZWUwMTU5M2QsIDB4NzU3MmIzZTksIDB4MDNjYjJiNDcsIDB4OThiOGMxOTMsIDB4ZWU1ZGY4YWUsCisgICAgMHg3NTJlMTI3YSwgMHgwMzJlYzlmMiwgMHg5ODVkMjMyNiwgMHhlZWI4MWExYiwgMHg3NWNiZjBjZiwKKyAgICAweDAzNzI2ODYxLCAweDk4MDE4MmI1LCAweGVlZTRiYjg4LCAweDc1OTc1MTVjLCAweDA1Y2ExOTMwLAorICAgIDB4OWViOWYzZTQsIDB4ZTg1Y2NhZDksIDB4NzMyZjIwMGQsIDB4MDU5NmI4YTMsIDB4OWVlNTUyNzcsCisgICAgMHhlODAwNmI0YSwgMHg3MzczODE5ZSwgMHgwNTczNWExNiwgMHg5ZTAwYjBjMiwgMHhlOGU1ODlmZiwKKyAgICAweDczOTY2MzJiLCAweDA1MmZmYjg1LCAweDllNWMxMTUxLCAweGU4YjkyODZjLCAweDczY2FjMmI4LAorICAgIDB4MDRiODlmN2MsIDB4OWZjYjc1YTgsIDB4ZTkyZTRjOTUsIDB4NzI1ZGE2NDEsIDB4MDRlNDNlZWYsCisgICAgMHg5Zjk3ZDQzYiwgMHhlOTcyZWQwNiwgMHg3MjAxMDdkMiwgMHgwNDAxZGM1YSwgMHg5ZjcyMzY4ZSwKKyAgICAweGU5OTcwZmIzLCAweDcyZTRlNTY3LCAweDA0NWQ3ZGM5LCAweDlmMmU5NzFkLCAweGU5Y2JhZTIwLAorICAgIDB4NzJiODQ0ZjQsIDB4MDcyZjE1YTgsIDB4OWM1Y2ZmN2MsIDB4ZWFiOWM2NDEsIDB4NzFjYTJjOTUsCisgICAgMHgwNzczYjQzYiwgMHg5YzAwNWVlZiwgMHhlYWU1NjdkMiwgMHg3MTk2OGQwNiwgMHgwNzk2NTY4ZSwKKyAgICAweDljZTViYzVhLCAweGVhMDA4NTY3LCAweDcxNzM2ZmIzLCAweDA3Y2FmNzFkLCAweDljYjkxZGM5LAorICAgIDB4ZWE1YzI0ZjQsIDB4NzEyZmNlMjAsIDB4MDY1ZDkzZTQsIDB4OWQyZTc5MzAsIDB4ZWJjYjQwMGQsCisgICAgMHg3MGI4YWFkOSwgMHgwNjAxMzI3NywgMHg5ZDcyZDhhMywgMHhlYjk3ZTE5ZSwgMHg3MGU0MGI0YSwKKyAgICAweDA2ZTRkMGMyLCAweDlkOTczYTE2LCAweGViNzIwMzJiLCAweDcwMDFlOWZmLCAweDA2Yjg3MTUxLAorICAgIDB4OWRjYjliODUsIDB4ZWIyZWEyYjgsIDB4NzA1ZDQ4NmMsIDB4MGI5NDMyNjAsIDB4OTBlN2Q4YjQsCisgICAgMHhlNjAyZTE4OSwgMHg3ZDcxMGI1ZCwgMHgwYmM4OTNmMywgMHg5MGJiNzkyNywgMHhlNjVlNDAxYSwKKyAgICAweDdkMmRhYWNlLCAweDBiMmQ3MTQ2LCAweDkwNWU5YjkyLCAweGU2YmJhMmFmLCAweDdkYzg0ODdiLAorICAgIDB4MGI3MWQwZDUsIDB4OTAwMjNhMDEsIDB4ZTZlNzAzM2MsIDB4N2Q5NGU5ZTgsIDB4MGFlNmI0MmMsCisgICAgMHg5MTk1NWVmOCwgMHhlNzcwNjdjNSwgMHg3YzAzOGQxMSwgMHgwYWJhMTViZiwgMHg5MWM5ZmY2YiwKKyAgICAweGU3MmNjNjU2LCAweDdjNWYyYzgyLCAweDBhNWZmNzBhLCAweDkxMmMxZGRlLCAweGU3YzkyNGUzLAorICAgIDB4N2NiYWNlMzcsIDB4MGEwMzU2OTksIDB4OTE3MGJjNGQsIDB4ZTc5NTg1NzAsIDB4N2NlNjZmYTQsCisgICAgMHgwOTcxM2VmOCwgMHg5MjAyZDQyYywgMHhlNGU3ZWQxMSwgMHg3Zjk0MDdjNSwgMHgwOTJkOWY2YiwKKyAgICAweDkyNWU3NWJmLCAweGU0YmI0YzgyLCAweDdmYzhhNjU2LCAweDA5Yzg3ZGRlLCAweDkyYmI5NzBhLAorICAgIDB4ZTQ1ZWFlMzcsIDB4N2YyZDQ0ZTMsIDB4MDk5NGRjNGQsIDB4OTJlNzM2OTksIDB4ZTQwMjBmYTQsCisgICAgMHg3ZjcxZTU3MCwgMHgwODAzYjhiNCwgMHg5MzcwNTI2MCwgMHhlNTk1NmI1ZCwgMHg3ZWU2ODE4OSwKKyAgICAweDA4NWYxOTI3LCAweDkzMmNmM2YzLCAweGU1YzljYWNlLCAweDdlYmEyMDFhLCAweDA4YmFmYjkyLAorICAgIDB4OTNjOTExNDYsIDB4ZTUyYzI4N2IsIDB4N2U1ZmMyYWYsIDB4MDhlNjVhMDEsIDB4OTM5NWIwZDUsCisgICAgMHhlNTcwODllOCwgMHg3ZTAzNjMzYywgMHgwZTVlMmI1MCwgMHg5NTJkYzE4NCwgMHhlM2M4ZjhiOSwKKyAgICAweDc4YmIxMjZkLCAweDBlMDI4YWMzLCAweDk1NzE2MDE3LCAweGUzOTQ1OTJhLCAweDc4ZTdiM2ZlLAorICAgIDB4MGVlNzY4NzYsIDB4OTU5NDgyYTIsIDB4ZTM3MWJiOWYsIDB4NzgwMjUxNGIsIDB4MGViYmM5ZTUsCisgICAgMHg5NWM4MjMzMSwgMHhlMzJkMWEwYywgMHg3ODVlZjBkOCwgMHgwZjJjYWQxYywgMHg5NDVmNDdjOCwKKyAgICAweGUyYmE3ZWY1LCAweDc5Yzk5NDIxLCAweDBmNzAwYzhmLCAweDk0MDNlNjViLCAweGUyZTZkZjY2LAorICAgIDB4Nzk5NTM1YjIsIDB4MGY5NWVlM2EsIDB4OTRlNjA0ZWUsIDB4ZTIwMzNkZDMsIDB4Nzk3MGQ3MDcsCisgICAgMHgwZmM5NGZhOSwgMHg5NGJhYTU3ZCwgMHhlMjVmOWM0MCwgMHg3OTJjNzY5NCwgMHgwY2JiMjdjOCwKKyAgICAweDk3YzhjZDFjLCAweGUxMmRmNDIxLCAweDdhNWUxZWY1LCAweDBjZTc4NjViLCAweDk3OTQ2YzhmLAorICAgIDB4ZTE3MTU1YjIsIDB4N2EwMmJmNjYsIDB4MGMwMjY0ZWUsIDB4OTc3MThlM2EsIDB4ZTE5NGI3MDcsCisgICAgMHg3YWU3NWRkMywgMHgwYzVlYzU3ZCwgMHg5NzJkMmZhOSwgMHhlMWM4MTY5NCwgMHg3YWJiZmM0MCwKKyAgICAweDBkYzlhMTg0LCAweDk2YmE0YjUwLCAweGUwNWY3MjZkLCAweDdiMmM5OGI5LCAweDBkOTUwMDE3LAorICAgIDB4OTZlNmVhYzMsIDB4ZTAwM2QzZmUsIDB4N2I3MDM5MmEsIDB4MGQ3MGUyYTIsIDB4OTYwMzA4NzYsCisgICAgMHhlMGU2MzE0YiwgMHg3Yjk1ZGI5ZiwgMHgwZDJjNDMzMSwgMHg5NjVmYTllNSwgMHhlMGJhOTBkOCwKKyAgICAweDdiYzk3YTBjfSwKKyAgIHsweDAwMDAwMDAwLCAweDE3Mjg2NGMwLCAweDJlNTBjOTgwLCAweDM5NzhhZDQwLCAweDVjYTE5MzAwLAorICAgIDB4NGI4OWY3YzAsIDB4NzJmMTVhODAsIDB4NjVkOTNlNDAsIDB4Yjk0MzI2MDAsIDB4YWU2YjQyYzAsCisgICAgMHg5NzEzZWY4MCwgMHg4MDNiOGI0MCwgMHhlNWUyYjUwMCwgMHhmMmNhZDFjMCwgMHhjYmIyN2M4MCwKKyAgICAweGRjOWExODQwLCAweGE5Zjc0YTQxLCAweGJlZGYyZTgxLCAweDg3YTc4M2MxLCAweDkwOGZlNzAxLAorICAgIDB4ZjU1NmQ5NDEsIDB4ZTI3ZWJkODEsIDB4ZGIwNjEwYzEsIDB4Y2MyZTc0MDEsIDB4MTBiNDZjNDEsCisgICAgMHgwNzljMDg4MSwgMHgzZWU0YTVjMSwgMHgyOWNjYzEwMSwgMHg0YzE1ZmY0MSwgMHg1YjNkOWI4MSwKKyAgICAweDYyNDUzNmMxLCAweDc1NmQ1MjAxLCAweDg4OWY5MmMzLCAweDlmYjdmNjAzLCAweGE2Y2Y1YjQzLAorICAgIDB4YjFlNzNmODMsIDB4ZDQzZTAxYzMsIDB4YzMxNjY1MDMsIDB4ZmE2ZWM4NDMsIDB4ZWQ0NmFjODMsCisgICAgMHgzMWRjYjRjMywgMHgyNmY0ZDAwMywgMHgxZjhjN2Q0MywgMHgwOGE0MTk4MywgMHg2ZDdkMjdjMywKKyAgICAweDdhNTU0MzAzLCAweDQzMmRlZTQzLCAweDU0MDU4YTgzLCAweDIxNjhkODgyLCAweDM2NDBiYzQyLAorICAgIDB4MGYzODExMDIsIDB4MTgxMDc1YzIsIDB4N2RjOTRiODIsIDB4NmFlMTJmNDIsIDB4NTM5OTgyMDIsCisgICAgMHg0NGIxZTZjMiwgMHg5ODJiZmU4MiwgMHg4ZjAzOWE0MiwgMHhiNjdiMzcwMiwgMHhhMTUzNTNjMiwKKyAgICAweGM0OGE2ZDgyLCAweGQzYTIwOTQyLCAweGVhZGFhNDAyLCAweGZkZjJjMGMyLCAweGNhNGUyM2M3LAorICAgIDB4ZGQ2NjQ3MDcsIDB4ZTQxZWVhNDcsIDB4ZjMzNjhlODcsIDB4OTZlZmIwYzcsIDB4ODFjN2Q0MDcsCisgICAgMHhiOGJmNzk0NywgMHhhZjk3MWQ4NywgMHg3MzBkMDVjNywgMHg2NDI1NjEwNywgMHg1ZDVkY2M0NywKKyAgICAweDRhNzVhODg3LCAweDJmYWM5NmM3LCAweDM4ODRmMjA3LCAweDAxZmM1ZjQ3LCAweDE2ZDQzYjg3LAorICAgIDB4NjNiOTY5ODYsIDB4NzQ5MTBkNDYsIDB4NGRlOWEwMDYsIDB4NWFjMWM0YzYsIDB4M2YxOGZhODYsCisgICAgMHgyODMwOWU0NiwgMHgxMTQ4MzMwNiwgMHgwNjYwNTdjNiwgMHhkYWZhNGY4NiwgMHhjZGQyMmI0NiwKKyAgICAweGY0YWE4NjA2LCAweGUzODJlMmM2LCAweDg2NWJkYzg2LCAweDkxNzNiODQ2LCAweGE4MGIxNTA2LAorICAgIDB4YmYyMzcxYzYsIDB4NDJkMWIxMDQsIDB4NTVmOWQ1YzQsIDB4NmM4MTc4ODQsIDB4N2JhOTFjNDQsCisgICAgMHgxZTcwMjIwNCwgMHgwOTU4NDZjNCwgMHgzMDIwZWI4NCwgMHgyNzA4OGY0NCwgMHhmYjkyOTcwNCwKKyAgICAweGVjYmFmM2M0LCAweGQ1YzI1ZTg0LCAweGMyZWEzYTQ0LCAweGE3MzMwNDA0LCAweGIwMWI2MGM0LAorICAgIDB4ODk2M2NkODQsIDB4OWU0YmE5NDQsIDB4ZWIyNmZiNDUsIDB4ZmMwZTlmODUsIDB4YzU3NjMyYzUsCisgICAgMHhkMjVlNTYwNSwgMHhiNzg3Njg0NSwgMHhhMGFmMGM4NSwgMHg5OWQ3YTFjNSwgMHg4ZWZmYzUwNSwKKyAgICAweDUyNjVkZDQ1LCAweDQ1NGRiOTg1LCAweDdjMzUxNGM1LCAweDZiMWQ3MDA1LCAweDBlYzQ0ZTQ1LAorICAgIDB4MTllYzJhODUsIDB4MjA5NDg3YzUsIDB4MzdiY2UzMDUsIDB4NGZlZDQxY2YsIDB4NThjNTI1MGYsCisgICAgMHg2MWJkODg0ZiwgMHg3Njk1ZWM4ZiwgMHgxMzRjZDJjZiwgMHgwNDY0YjYwZiwgMHgzZDFjMWI0ZiwKKyAgICAweDJhMzQ3ZjhmLCAweGY2YWU2N2NmLCAweGUxODYwMzBmLCAweGQ4ZmVhZTRmLCAweGNmZDZjYThmLAorICAgIDB4YWEwZmY0Y2YsIDB4YmQyNzkwMGYsIDB4ODQ1ZjNkNGYsIDB4OTM3NzU5OGYsIDB4ZTYxYTBiOGUsCisgICAgMHhmMTMyNmY0ZSwgMHhjODRhYzIwZSwgMHhkZjYyYTZjZSwgMHhiYWJiOTg4ZSwgMHhhZDkzZmM0ZSwKKyAgICAweDk0ZWI1MTBlLCAweDgzYzMzNWNlLCAweDVmNTkyZDhlLCAweDQ4NzE0OTRlLCAweDcxMDllNDBlLAorICAgIDB4NjYyMTgwY2UsIDB4MDNmOGJlOGUsIDB4MTRkMGRhNGUsIDB4MmRhODc3MGUsIDB4M2E4MDEzY2UsCisgICAgMHhjNzcyZDMwYywgMHhkMDVhYjdjYywgMHhlOTIyMWE4YywgMHhmZTBhN2U0YywgMHg5YmQzNDAwYywKKyAgICAweDhjZmIyNGNjLCAweGI1ODM4OThjLCAweGEyYWJlZDRjLCAweDdlMzFmNTBjLCAweDY5MTk5MWNjLAorICAgIDB4NTA2MTNjOGMsIDB4NDc0OTU4NGMsIDB4MjI5MDY2MGMsIDB4MzViODAyY2MsIDB4MGNjMGFmOGMsCisgICAgMHgxYmU4Y2I0YywgMHg2ZTg1OTk0ZCwgMHg3OWFkZmQ4ZCwgMHg0MGQ1NTBjZCwgMHg1N2ZkMzQwZCwKKyAgICAweDMyMjQwYTRkLCAweDI1MGM2ZThkLCAweDFjNzRjM2NkLCAweDBiNWNhNzBkLCAweGQ3YzZiZjRkLAorICAgIDB4YzBlZWRiOGQsIDB4Zjk5Njc2Y2QsIDB4ZWViZTEyMGQsIDB4OGI2NzJjNGQsIDB4OWM0ZjQ4OGQsCisgICAgMHhhNTM3ZTVjZCwgMHhiMjFmODEwZCwgMHg4NWEzNjIwOCwgMHg5MjhiMDZjOCwgMHhhYmYzYWI4OCwKKyAgICAweGJjZGJjZjQ4LCAweGQ5MDJmMTA4LCAweGNlMmE5NWM4LCAweGY3NTIzODg4LCAweGUwN2E1YzQ4LAorICAgIDB4M2NlMDQ0MDgsIDB4MmJjODIwYzgsIDB4MTJiMDhkODgsIDB4MDU5OGU5NDgsIDB4NjA0MWQ3MDgsCisgICAgMHg3NzY5YjNjOCwgMHg0ZTExMWU4OCwgMHg1OTM5N2E0OCwgMHgyYzU0Mjg0OSwgMHgzYjdjNGM4OSwKKyAgICAweDAyMDRlMWM5LCAweDE1MmM4NTA5LCAweDcwZjViYjQ5LCAweDY3ZGRkZjg5LCAweDVlYTU3MmM5LAorICAgIDB4NDk4ZDE2MDksIDB4OTUxNzBlNDksIDB4ODIzZjZhODksIDB4YmI0N2M3YzksIDB4YWM2ZmEzMDksCisgICAgMHhjOWI2OWQ0OSwgMHhkZTllZjk4OSwgMHhlN2U2NTRjOSwgMHhmMGNlMzAwOSwgMHgwZDNjZjBjYiwKKyAgICAweDFhMTQ5NDBiLCAweDIzNmMzOTRiLCAweDM0NDQ1ZDhiLCAweDUxOWQ2M2NiLCAweDQ2YjUwNzBiLAorICAgIDB4N2ZjZGFhNGIsIDB4NjhlNWNlOGIsIDB4YjQ3ZmQ2Y2IsIDB4YTM1N2IyMGIsIDB4OWEyZjFmNGIsCisgICAgMHg4ZDA3N2I4YiwgMHhlOGRlNDVjYiwgMHhmZmY2MjEwYiwgMHhjNjhlOGM0YiwgMHhkMWE2ZTg4YiwKKyAgICAweGE0Y2JiYThhLCAweGIzZTNkZTRhLCAweDhhOWI3MzBhLCAweDlkYjMxN2NhLCAweGY4NmEyOThhLAorICAgIDB4ZWY0MjRkNGEsIDB4ZDYzYWUwMGEsIDB4YzExMjg0Y2EsIDB4MWQ4ODljOGEsIDB4MGFhMGY4NGEsCisgICAgMHgzM2Q4NTUwYSwgMHgyNGYwMzFjYSwgMHg0MTI5MGY4YSwgMHg1NjAxNmI0YSwgMHg2Zjc5YzYwYSwKKyAgICAweDc4NTFhMmNhfSwKKyAgIHsweDAwMDAwMDAwLCAweDlmZGE4MzllLCAweGU0YzQwMTdkLCAweDdiMWU4MmUzLCAweDEyZjkwNGJiLAorICAgIDB4OGQyMzg3MjUsIDB4ZjYzZDA1YzYsIDB4NjllNzg2NTgsIDB4MjVmMjA5NzYsIDB4YmEyODhhZTgsCisgICAgMHhjMTM2MDgwYiwgMHg1ZWVjOGI5NSwgMHgzNzBiMGRjZCwgMHhhOGQxOGU1MywgMHhkM2NmMGNiMCwKKyAgICAweDRjMTU4ZjJlLCAweDRiZTQxMmVjLCAweGQ0M2U5MTcyLCAweGFmMjAxMzkxLCAweDMwZmE5MDBmLAorICAgIDB4NTkxZDE2NTcsIDB4YzZjNzk1YzksIDB4YmRkOTE3MmEsIDB4MjIwMzk0YjQsIDB4NmUxNjFiOWEsCisgICAgMHhmMWNjOTgwNCwgMHg4YWQyMWFlNywgMHgxNTA4OTk3OSwgMHg3Y2VmMWYyMSwgMHhlMzM1OWNiZiwKKyAgICAweDk4MmIxZTVjLCAweDA3ZjE5ZGMyLCAweDk3YzgyNWQ4LCAweDA4MTJhNjQ2LCAweDczMGMyNGE1LAorICAgIDB4ZWNkNmE3M2IsIDB4ODUzMTIxNjMsIDB4MWFlYmEyZmQsIDB4NjFmNTIwMWUsIDB4ZmUyZmEzODAsCisgICAgMHhiMjNhMmNhZSwgMHgyZGUwYWYzMCwgMHg1NmZlMmRkMywgMHhjOTI0YWU0ZCwgMHhhMGMzMjgxNSwKKyAgICAweDNmMTlhYjhiLCAweDQ0MDcyOTY4LCAweGRiZGRhYWY2LCAweGRjMmMzNzM0LCAweDQzZjZiNGFhLAorICAgIDB4MzhlODM2NDksIDB4YTczMmI1ZDcsIDB4Y2VkNTMzOGYsIDB4NTEwZmIwMTEsIDB4MmExMTMyZjIsCisgICAgMHhiNWNiYjE2YywgMHhmOWRlM2U0MiwgMHg2NjA0YmRkYywgMHgxZDFhM2YzZiwgMHg4MmMwYmNhMSwKKyAgICAweGViMjczYWY5LCAweDc0ZmRiOTY3LCAweDBmZTMzYjg0LCAweDkwMzliODFhLCAweGY0ZTE0ZGYxLAorICAgIDB4NmIzYmNlNmYsIDB4MTAyNTRjOGMsIDB4OGZmZmNmMTIsIDB4ZTYxODQ5NGEsIDB4NzljMmNhZDQsCisgICAgMHgwMmRjNDgzNywgMHg5ZDA2Y2JhOSwgMHhkMTEzNDQ4NywgMHg0ZWM5YzcxOSwgMHgzNWQ3NDVmYSwKKyAgICAweGFhMGRjNjY0LCAweGMzZWE0MDNjLCAweDVjMzBjM2EyLCAweDI3MmU0MTQxLCAweGI4ZjRjMmRmLAorICAgIDB4YmYwNTVmMWQsIDB4MjBkZmRjODMsIDB4NWJjMTVlNjAsIDB4YzQxYmRkZmUsIDB4YWRmYzViYTYsCisgICAgMHgzMjI2ZDgzOCwgMHg0OTM4NWFkYiwgMHhkNmUyZDk0NSwgMHg5YWY3NTY2YiwgMHgwNTJkZDVmNSwKKyAgICAweDdlMzM1NzE2LCAweGUxZTlkNDg4LCAweDg4MGU1MmQwLCAweDE3ZDRkMTRlLCAweDZjY2E1M2FkLAorICAgIDB4ZjMxMGQwMzMsIDB4NjMyOTY4MjksIDB4ZmNmM2ViYjcsIDB4ODdlZDY5NTQsIDB4MTgzN2VhY2EsCisgICAgMHg3MWQwNmM5MiwgMHhlZTBhZWYwYywgMHg5NTE0NmRlZiwgMHgwYWNlZWU3MSwgMHg0NmRiNjE1ZiwKKyAgICAweGQ5MDFlMmMxLCAweGEyMWY2MDIyLCAweDNkYzVlM2JjLCAweDU0MjI2NWU0LCAweGNiZjhlNjdhLAorICAgIDB4YjBlNjY0OTksIDB4MmYzY2U3MDcsIDB4MjhjZDdhYzUsIDB4YjcxN2Y5NWIsIDB4Y2MwOTdiYjgsCisgICAgMHg1M2QzZjgyNiwgMHgzYTM0N2U3ZSwgMHhhNWVlZmRlMCwgMHhkZWYwN2YwMywgMHg0MTJhZmM5ZCwKKyAgICAweDBkM2Y3M2IzLCAweDkyZTVmMDJkLCAweGU5ZmI3MmNlLCAweDc2MjFmMTUwLCAweDFmYzY3NzA4LAorICAgIDB4ODAxY2Y0OTYsIDB4ZmIwMjc2NzUsIDB4NjRkOGY1ZWIsIDB4MzJiMzlkYTMsIDB4YWQ2OTFlM2QsCisgICAgMHhkNjc3OWNkZSwgMHg0OWFkMWY0MCwgMHgyMDRhOTkxOCwgMHhiZjkwMWE4NiwgMHhjNDhlOTg2NSwKKyAgICAweDViNTQxYmZiLCAweDE3NDE5NGQ1LCAweDg4OWIxNzRiLCAweGYzODU5NWE4LCAweDZjNWYxNjM2LAorICAgIDB4MDViODkwNmUsIDB4OWE2MjEzZjAsIDB4ZTE3YzkxMTMsIDB4N2VhNjEyOGQsIDB4Nzk1NzhmNGYsCisgICAgMHhlNjhkMGNkMSwgMHg5ZDkzOGUzMiwgMHgwMjQ5MGRhYywgMHg2YmFlOGJmNCwgMHhmNDc0MDg2YSwKKyAgICAweDhmNmE4YTg5LCAweDEwYjAwOTE3LCAweDVjYTU4NjM5LCAweGMzN2YwNWE3LCAweGI4NjE4NzQ0LAorICAgIDB4MjdiYjA0ZGEsIDB4NGU1YzgyODIsIDB4ZDE4NjAxMWMsIDB4YWE5ODgzZmYsIDB4MzU0MjAwNjEsCisgICAgMHhhNTdiYjg3YiwgMHgzYWExM2JlNSwgMHg0MWJmYjkwNiwgMHhkZTY1M2E5OCwgMHhiNzgyYmNjMCwKKyAgICAweDI4NTgzZjVlLCAweDUzNDZiZGJkLCAweGNjOWMzZTIzLCAweDgwODliMTBkLCAweDFmNTMzMjkzLAorICAgIDB4NjQ0ZGIwNzAsIDB4ZmI5NzMzZWUsIDB4OTI3MGI1YjYsIDB4MGRhYTM2MjgsIDB4NzZiNGI0Y2IsCisgICAgMHhlOTZlMzc1NSwgMHhlZTlmYWE5NywgMHg3MTQ1MjkwOSwgMHgwYTViYWJlYSwgMHg5NTgxMjg3NCwKKyAgICAweGZjNjZhZTJjLCAweDYzYmMyZGIyLCAweDE4YTJhZjUxLCAweDg3NzgyY2NmLCAweGNiNmRhM2UxLAorICAgIDB4NTRiNzIwN2YsIDB4MmZhOWEyOWMsIDB4YjA3MzIxMDIsIDB4ZDk5NGE3NWEsIDB4NDY0ZTI0YzQsCisgICAgMHgzZDUwYTYyNywgMHhhMjhhMjViOSwgMHhjNjUyZDA1MiwgMHg1OTg4NTNjYywgMHgyMjk2ZDEyZiwKKyAgICAweGJkNGM1MmIxLCAweGQ0YWJkNGU5LCAweDRiNzE1Nzc3LCAweDMwNmZkNTk0LCAweGFmYjU1NjBhLAorICAgIDB4ZTNhMGQ5MjQsIDB4N2M3YTVhYmEsIDB4MDc2NGQ4NTksIDB4OThiZTViYzcsIDB4ZjE1OWRkOWYsCisgICAgMHg2ZTgzNWUwMSwgMHgxNTlkZGNlMiwgMHg4YTQ3NWY3YywgMHg4ZGI2YzJiZSwgMHgxMjZjNDEyMCwKKyAgICAweDY5NzJjM2MzLCAweGY2YTg0MDVkLCAweDlmNGZjNjA1LCAweDAwOTU0NTliLCAweDdiOGJjNzc4LAorICAgIDB4ZTQ1MTQ0ZTYsIDB4YTg0NGNiYzgsIDB4Mzc5ZTQ4NTYsIDB4NGM4MGNhYjUsIDB4ZDM1YTQ5MmIsCisgICAgMHhiYWJkY2Y3MywgMHgyNTY3NGNlZCwgMHg1ZTc5Y2UwZSwgMHhjMWEzNGQ5MCwgMHg1MTlhZjU4YSwKKyAgICAweGNlNDA3NjE0LCAweGI1NWVmNGY3LCAweDJhODQ3NzY5LCAweDQzNjNmMTMxLCAweGRjYjk3MmFmLAorICAgIDB4YTdhN2YwNGMsIDB4Mzg3ZDczZDIsIDB4NzQ2OGZjZmMsIDB4ZWJiMjdmNjIsIDB4OTBhY2ZkODEsCisgICAgMHgwZjc2N2UxZiwgMHg2NjkxZjg0NywgMHhmOTRiN2JkOSwgMHg4MjU1ZjkzYSwgMHgxZDhmN2FhNCwKKyAgICAweDFhN2VlNzY2LCAweDg1YTQ2NGY4LCAweGZlYmFlNjFiLCAweDYxNjA2NTg1LCAweDA4ODdlM2RkLAorICAgIDB4OTc1ZDYwNDMsIDB4ZWM0M2UyYTAsIDB4NzM5OTYxM2UsIDB4M2Y4Y2VlMTAsIDB4YTA1NjZkOGUsCisgICAgMHhkYjQ4ZWY2ZCwgMHg0NDkyNmNmMywgMHgyZDc1ZWFhYiwgMHhiMmFmNjkzNSwgMHhjOWIxZWJkNiwKKyAgICAweDU2NmI2ODQ4fSwKKyAgIHsweDAwMDAwMDAwLCAweDY1NjczYjQ2LCAweGNhY2U3NjhjLCAweGFmYTk0ZGNhLCAweDRlZWRlYjU5LAorICAgIDB4MmI4YWQwMWYsIDB4ODQyMzlkZDUsIDB4ZTE0NGE2OTMsIDB4OWRkYmQ2YjIsIDB4ZjhiY2VkZjQsCisgICAgMHg1NzE1YTAzZSwgMHgzMjcyOWI3OCwgMHhkMzM2M2RlYiwgMHhiNjUxMDZhZCwgMHgxOWY4NGI2NywKKyAgICAweDdjOWY3MDIxLCAweGUwYzZhYjI1LCAweDg1YTE5MDYzLCAweDJhMDhkZGE5LCAweDRmNmZlNmVmLAorICAgIDB4YWUyYjQwN2MsIDB4Y2I0YzdiM2EsIDB4NjRlNTM2ZjAsIDB4MDE4MjBkYjYsIDB4N2QxZDdkOTcsCisgICAgMHgxODdhNDZkMSwgMHhiN2QzMGIxYiwgMHhkMmI0MzA1ZCwgMHgzM2YwOTZjZSwgMHg1Njk3YWQ4OCwKKyAgICAweGY5M2VlMDQyLCAweDljNTlkYjA0LCAweDFhZmM1MDBiLCAweDdmOWI2YjRkLCAweGQwMzIyNjg3LAorICAgIDB4YjU1NTFkYzEsIDB4NTQxMWJiNTIsIDB4MzE3NjgwMTQsIDB4OWVkZmNkZGUsIDB4ZmJiOGY2OTgsCisgICAgMHg4NzI3ODZiOSwgMHhlMjQwYmRmZiwgMHg0ZGU5ZjAzNSwgMHgyODhlY2I3MywgMHhjOWNhNmRlMCwKKyAgICAweGFjYWQ1NmE2LCAweDAzMDQxYjZjLCAweDY2NjMyMDJhLCAweGZhM2FmYjJlLCAweDlmNWRjMDY4LAorICAgIDB4MzBmNDhkYTIsIDB4NTU5M2I2ZTQsIDB4YjRkNzEwNzcsIDB4ZDFiMDJiMzEsIDB4N2UxOTY2ZmIsCisgICAgMHgxYjdlNWRiZCwgMHg2N2UxMmQ5YywgMHgwMjg2MTZkYSwgMHhhZDJmNWIxMCwgMHhjODQ4NjA1NiwKKyAgICAweDI5MGNjNmM1LCAweDRjNmJmZDgzLCAweGUzYzJiMDQ5LCAweDg2YTU4YjBmLCAweDM1ZjhhMDE2LAorICAgIDB4NTA5ZjliNTAsIDB4ZmYzNmQ2OWEsIDB4OWE1MWVkZGMsIDB4N2IxNTRiNGYsIDB4MWU3MjcwMDksCisgICAgMHhiMWRiM2RjMywgMHhkNGJjMDY4NSwgMHhhODIzNzZhNCwgMHhjZDQ0NGRlMiwgMHg2MmVkMDAyOCwKKyAgICAweDA3OGEzYjZlLCAweGU2Y2U5ZGZkLCAweDgzYTlhNmJiLCAweDJjMDBlYjcxLCAweDQ5NjdkMDM3LAorICAgIDB4ZDUzZTBiMzMsIDB4YjA1OTMwNzUsIDB4MWZmMDdkYmYsIDB4N2E5NzQ2ZjksIDB4OWJkM2UwNmEsCisgICAgMHhmZWI0ZGIyYywgMHg1MTFkOTZlNiwgMHgzNDdhYWRhMCwgMHg0OGU1ZGQ4MSwgMHgyZDgyZTZjNywKKyAgICAweDgyMmJhYjBkLCAweGU3NGM5MDRiLCAweDA2MDgzNmQ4LCAweDYzNmYwZDllLCAweGNjYzY0MDU0LAorICAgIDB4YTlhMTdiMTIsIDB4MmYwNGYwMWQsIDB4NGE2M2NiNWIsIDB4ZTVjYTg2OTEsIDB4ODBhZGJkZDcsCisgICAgMHg2MWU5MWI0NCwgMHgwNDhlMjAwMiwgMHhhYjI3NmRjOCwgMHhjZTQwNTY4ZSwgMHhiMmRmMjZhZiwKKyAgICAweGQ3YjgxZGU5LCAweDc4MTE1MDIzLCAweDFkNzY2YjY1LCAweGZjMzJjZGY2LCAweDk5NTVmNmIwLAorICAgIDB4MzZmY2JiN2EsIDB4NTM5YjgwM2MsIDB4Y2ZjMjViMzgsIDB4YWFhNTYwN2UsIDB4MDUwYzJkYjQsCisgICAgMHg2MDZiMTZmMiwgMHg4MTJmYjA2MSwgMHhlNDQ4OGIyNywgMHg0YmUxYzZlZCwgMHgyZTg2ZmRhYiwKKyAgICAweDUyMTk4ZDhhLCAweDM3N2ViNmNjLCAweDk4ZDdmYjA2LCAweGZkYjBjMDQwLCAweDFjZjQ2NmQzLAorICAgIDB4Nzk5MzVkOTUsIDB4ZDYzYTEwNWYsIDB4YjM1ZDJiMTksIDB4NmJmMTQwMmMsIDB4MGU5NjdiNmEsCisgICAgMHhhMTNmMzZhMCwgMHhjNDU4MGRlNiwgMHgyNTFjYWI3NSwgMHg0MDdiOTAzMywgMHhlZmQyZGRmOSwKKyAgICAweDhhYjVlNmJmLCAweGY2MmE5NjllLCAweDkzNGRhZGQ4LCAweDNjZTRlMDEyLCAweDU5ODNkYjU0LAorICAgIDB4YjhjNzdkYzcsIDB4ZGRhMDQ2ODEsIDB4NzIwOTBiNGIsIDB4MTc2ZTMwMGQsIDB4OGIzN2ViMDksCisgICAgMHhlZTUwZDA0ZiwgMHg0MWY5OWQ4NSwgMHgyNDllYTZjMywgMHhjNWRhMDA1MCwgMHhhMGJkM2IxNiwKKyAgICAweDBmMTQ3NmRjLCAweDZhNzM0ZDlhLCAweDE2ZWMzZGJiLCAweDczOGIwNmZkLCAweGRjMjI0YjM3LAorICAgIDB4Yjk0NTcwNzEsIDB4NTgwMWQ2ZTIsIDB4M2Q2NmVkYTQsIDB4OTJjZmEwNmUsIDB4ZjdhODliMjgsCisgICAgMHg3MTBkMTAyNywgMHgxNDZhMmI2MSwgMHhiYmMzNjZhYiwgMHhkZWE0NWRlZCwgMHgzZmUwZmI3ZSwKKyAgICAweDVhODdjMDM4LCAweGY1MmU4ZGYyLCAweDkwNDliNmI0LCAweGVjZDZjNjk1LCAweDg5YjFmZGQzLAorICAgIDB4MjYxOGIwMTksIDB4NDM3ZjhiNWYsIDB4YTIzYjJkY2MsIDB4Yzc1YzE2OGEsIDB4NjhmNTViNDAsCisgICAgMHgwZDkyNjAwNiwgMHg5MWNiYmIwMiwgMHhmNGFjODA0NCwgMHg1YjA1Y2Q4ZSwgMHgzZTYyZjZjOCwKKyAgICAweGRmMjY1MDViLCAweGJhNDE2YjFkLCAweDE1ZTgyNmQ3LCAweDcwOGYxZDkxLCAweDBjMTA2ZGIwLAorICAgIDB4Njk3NzU2ZjYsIDB4YzZkZTFiM2MsIDB4YTNiOTIwN2EsIDB4NDJmZDg2ZTksIDB4Mjc5YWJkYWYsCisgICAgMHg4ODMzZjA2NSwgMHhlZDU0Y2IyMywgMHg1ZTA5ZTAzYSwgMHgzYjZlZGI3YywgMHg5NGM3OTZiNiwKKyAgICAweGYxYTBhZGYwLCAweDEwZTQwYjYzLCAweDc1ODMzMDI1LCAweGRhMmE3ZGVmLCAweGJmNGQ0NmE5LAorICAgIDB4YzNkMjM2ODgsIDB4YTZiNTBkY2UsIDB4MDkxYzQwMDQsIDB4NmM3YjdiNDIsIDB4OGQzZmRkZDEsCisgICAgMHhlODU4ZTY5NywgMHg0N2YxYWI1ZCwgMHgyMjk2OTAxYiwgMHhiZWNmNGIxZiwgMHhkYmE4NzA1OSwKKyAgICAweDc0MDEzZDkzLCAweDExNjYwNmQ1LCAweGYwMjJhMDQ2LCAweDk1NDU5YjAwLCAweDNhZWNkNmNhLAorICAgIDB4NWY4YmVkOGMsIDB4MjMxNDlkYWQsIDB4NDY3M2E2ZWIsIDB4ZTlkYWViMjEsIDB4OGNiZGQwNjcsCisgICAgMHg2ZGY5NzZmNCwgMHgwODllNGRiMiwgMHhhNzM3MDA3OCwgMHhjMjUwM2IzZSwgMHg0NGY1YjAzMSwKKyAgICAweDIxOTI4Yjc3LCAweDhlM2JjNmJkLCAweGViNWNmZGZiLCAweDBhMTg1YjY4LCAweDZmN2Y2MDJlLAorICAgIDB4YzBkNjJkZTQsIDB4YTViMTE2YTIsIDB4ZDkyZTY2ODMsIDB4YmM0OTVkYzUsIDB4MTNlMDEwMGYsCisgICAgMHg3Njg3MmI0OSwgMHg5N2MzOGRkYSwgMHhmMmE0YjY5YywgMHg1ZDBkZmI1NiwgMHgzODZhYzAxMCwKKyAgICAweGE0MzMxYjE0LCAweGMxNTQyMDUyLCAweDZlZmQ2ZDk4LCAweDBiOWE1NmRlLCAweGVhZGVmMDRkLAorICAgIDB4OGZiOWNiMGIsIDB4MjAxMDg2YzEsIDB4NDU3N2JkODcsIDB4MzllOGNkYTYsIDB4NWM4ZmY2ZTAsCisgICAgMHhmMzI2YmIyYSwgMHg5NjQxODA2YywgMHg3NzA1MjZmZiwgMHgxMjYyMWRiOSwgMHhiZGNiNTA3MywKKyAgICAweGQ4YWM2YjM1fSwKKyAgIHsweDAwMDAwMDAwLCAweGQ3ZTI4MDU4LCAweDc0YjQwNmYxLCAweGEzNTY4NmE5LCAweGU5NjgwZGUyLAorICAgIDB4M2U4YThkYmEsIDB4OWRkYzBiMTMsIDB4NGEzZThiNGIsIDB4MDlhMTFkODUsIDB4ZGU0MzlkZGQsCisgICAgMHg3ZDE1MWI3NCwgMHhhYWY3OWIyYywgMHhlMGM5MTA2NywgMHgzNzJiOTAzZiwgMHg5NDdkMTY5NiwKKyAgICAweDQzOWY5NmNlLCAweDEzNDIzYjBhLCAweGM0YTBiYjUyLCAweDY3ZjYzZGZiLCAweGIwMTRiZGEzLAorICAgIDB4ZmEyYTM2ZTgsIDB4MmRjOGI2YjAsIDB4OGU5ZTMwMTksIDB4NTk3Y2IwNDEsIDB4MWFlMzI2OGYsCisgICAgMHhjZDAxYTZkNywgMHg2ZTU3MjA3ZSwgMHhiOWI1YTAyNiwgMHhmMzhiMmI2ZCwgMHgyNDY5YWIzNSwKKyAgICAweDg3M2YyZDljLCAweDUwZGRhZGM0LCAweDI2ODQ3NjE0LCAweGYxNjZmNjRjLCAweDUyMzA3MGU1LAorICAgIDB4ODVkMmYwYmQsIDB4Y2ZlYzdiZjYsIDB4MTgwZWZiYWUsIDB4YmI1ODdkMDcsIDB4NmNiYWZkNWYsCisgICAgMHgyZjI1NmI5MSwgMHhmOGM3ZWJjOSwgMHg1YjkxNmQ2MCwgMHg4YzczZWQzOCwgMHhjNjRkNjY3MywKKyAgICAweDExYWZlNjJiLCAweGIyZjk2MDgyLCAweDY1MWJlMGRhLCAweDM1YzY0ZDFlLCAweGUyMjRjZDQ2LAorICAgIDB4NDE3MjRiZWYsIDB4OTY5MGNiYjcsIDB4ZGNhZTQwZmMsIDB4MGI0Y2MwYTQsIDB4YTgxYTQ2MGQsCisgICAgMHg3ZmY4YzY1NSwgMHgzYzY3NTA5YiwgMHhlYjg1ZDBjMywgMHg0OGQzNTY2YSwgMHg5ZjMxZDYzMiwKKyAgICAweGQ1MGY1ZDc5LCAweDAyZWRkZDIxLCAweGExYmI1Yjg4LCAweDc2NTlkYmQwLCAweDRkMDhlYzI4LAorICAgIDB4OWFlYTZjNzAsIDB4MzliY2VhZDksIDB4ZWU1ZTZhODEsIDB4YTQ2MGUxY2EsIDB4NzM4MjYxOTIsCisgICAgMHhkMGQ0ZTczYiwgMHgwNzM2Njc2MywgMHg0NGE5ZjFhZCwgMHg5MzRiNzFmNSwgMHgzMDFkZjc1YywKKyAgICAweGU3ZmY3NzA0LCAweGFkYzFmYzRmLCAweDdhMjM3YzE3LCAweGQ5NzVmYWJlLCAweDBlOTc3YWU2LAorICAgIDB4NWU0YWQ3MjIsIDB4ODlhODU3N2EsIDB4MmFmZWQxZDMsIDB4ZmQxYzUxOGIsIDB4YjcyMmRhYzAsCisgICAgMHg2MGMwNWE5OCwgMHhjMzk2ZGMzMSwgMHgxNDc0NWM2OSwgMHg1N2ViY2FhNywgMHg4MDA5NGFmZiwKKyAgICAweDIzNWZjYzU2LCAweGY0YmQ0YzBlLCAweGJlODNjNzQ1LCAweDY5NjE0NzFkLCAweGNhMzdjMWI0LAorICAgIDB4MWRkNTQxZWMsIDB4NmI4YzlhM2MsIDB4YmM2ZTFhNjQsIDB4MWYzODljY2QsIDB4YzhkYTFjOTUsCisgICAgMHg4MmU0OTdkZSwgMHg1NTA2MTc4NiwgMHhmNjUwOTEyZiwgMHgyMWIyMTE3NywgMHg2MjJkODdiOSwKKyAgICAweGI1Y2YwN2UxLCAweDE2OTk4MTQ4LCAweGMxN2IwMTEwLCAweDhiNDU4YTViLCAweDVjYTcwYTAzLAorICAgIDB4ZmZmMThjYWEsIDB4MjgxMzBjZjIsIDB4NzhjZWExMzYsIDB4YWYyYzIxNmUsIDB4MGM3YWE3YzcsCisgICAgMHhkYjk4Mjc5ZiwgMHg5MWE2YWNkNCwgMHg0NjQ0MmM4YywgMHhlNTEyYWEyNSwgMHgzMmYwMmE3ZCwKKyAgICAweDcxNmZiY2IzLCAweGE2OGQzY2ViLCAweDA1ZGJiYTQyLCAweGQyMzkzYTFhLCAweDk4MDdiMTUxLAorICAgIDB4NGZlNTMxMDksIDB4ZWNiM2I3YTAsIDB4M2I1MTM3ZjgsIDB4OWExMWQ4NTAsIDB4NGRmMzU4MDgsCisgICAgMHhlZWE1ZGVhMSwgMHgzOTQ3NWVmOSwgMHg3Mzc5ZDViMiwgMHhhNDliNTVlYSwgMHgwN2NkZDM0MywKKyAgICAweGQwMmY1MzFiLCAweDkzYjBjNWQ1LCAweDQ0NTI0NThkLCAweGU3MDRjMzI0LCAweDMwZTY0MzdjLAorICAgIDB4N2FkOGM4MzcsIDB4YWQzYTQ4NmYsIDB4MGU2Y2NlYzYsIDB4ZDk4ZTRlOWUsIDB4ODk1M2UzNWEsCisgICAgMHg1ZWIxNjMwMiwgMHhmZGU3ZTVhYiwgMHgyYTA1NjVmMywgMHg2MDNiZWViOCwgMHhiN2Q5NmVlMCwKKyAgICAweDE0OGZlODQ5LCAweGMzNmQ2ODExLCAweDgwZjJmZWRmLCAweDU3MTA3ZTg3LCAweGY0NDZmODJlLAorICAgIDB4MjNhNDc4NzYsIDB4Njk5YWYzM2QsIDB4YmU3ODczNjUsIDB4MWQyZWY1Y2MsIDB4Y2FjYzc1OTQsCisgICAgMHhiYzk1YWU0NCwgMHg2Yjc3MmUxYywgMHhjODIxYThiNSwgMHgxZmMzMjhlZCwgMHg1NWZkYTNhNiwKKyAgICAweDgyMWYyM2ZlLCAweDIxNDlhNTU3LCAweGY2YWIyNTBmLCAweGI1MzRiM2MxLCAweDYyZDYzMzk5LAorICAgIDB4YzE4MGI1MzAsIDB4MTY2MjM1NjgsIDB4NWM1Y2JlMjMsIDB4OGJiZTNlN2IsIDB4MjhlOGI4ZDIsCisgICAgMHhmZjBhMzg4YSwgMHhhZmQ3OTU0ZSwgMHg3ODM1MTUxNiwgMHhkYjYzOTNiZiwgMHgwYzgxMTNlNywKKyAgICAweDQ2YmY5OGFjLCAweDkxNWQxOGY0LCAweDMyMGI5ZTVkLCAweGU1ZTkxZTA1LCAweGE2NzY4OGNiLAorICAgIDB4NzE5NDA4OTMsIDB4ZDJjMjhlM2EsIDB4MDUyMDBlNjIsIDB4NGYxZTg1MjksIDB4OThmYzA1NzEsCisgICAgMHgzYmFhODNkOCwgMHhlYzQ4MDM4MCwgMHhkNzE5MzQ3OCwgMHgwMGZiYjQyMCwgMHhhM2FkMzI4OSwKKyAgICAweDc0NGZiMmQxLCAweDNlNzEzOTlhLCAweGU5OTNiOWMyLCAweDRhYzUzZjZiLCAweDlkMjdiZjMzLAorICAgIDB4ZGViODI5ZmQsIDB4MDk1YWE5YTUsIDB4YWEwYzJmMGMsIDB4N2RlZWFmNTQsIDB4MzdkMDI0MWYsCisgICAgMHhlMDMyYTQ0NywgMHg0MzY0MjJlZSwgMHg5NDg2YTJiNiwgMHhjNDViMGY3MiwgMHgxM2I5OGYyYSwKKyAgICAweGIwZWYwOTgzLCAweDY3MGQ4OWRiLCAweDJkMzMwMjkwLCAweGZhZDE4MmM4LCAweDU5ODcwNDYxLAorICAgIDB4OGU2NTg0MzksIDB4Y2RmYTEyZjcsIDB4MWExODkyYWYsIDB4Yjk0ZTE0MDYsIDB4NmVhYzk0NWUsCisgICAgMHgyNDkyMWYxNSwgMHhmMzcwOWY0ZCwgMHg1MDI2MTllNCwgMHg4N2M0OTliYywgMHhmMTlkNDI2YywKKyAgICAweDI2N2ZjMjM0LCAweDg1Mjk0NDlkLCAweDUyY2JjNGM1LCAweDE4ZjU0ZjhlLCAweGNmMTdjZmQ2LAorICAgIDB4NmM0MTQ5N2YsIDB4YmJhM2M5MjcsIDB4ZjgzYzVmZTksIDB4MmZkZWRmYjEsIDB4OGM4ODU5MTgsCisgICAgMHg1YjZhZDk0MCwgMHgxMTU0NTIwYiwgMHhjNmI2ZDI1MywgMHg2NWUwNTRmYSwgMHhiMjAyZDRhMiwKKyAgICAweGUyZGY3OTY2LCAweDM1M2RmOTNlLCAweDk2NmI3Zjk3LCAweDQxODlmZmNmLCAweDBiYjc3NDg0LAorICAgIDB4ZGM1NWY0ZGMsIDB4N2YwMzcyNzUsIDB4YThlMWYyMmQsIDB4ZWI3ZTY0ZTMsIDB4M2M5Y2U0YmIsCisgICAgMHg5ZmNhNjIxMiwgMHg0ODI4ZTI0YSwgMHgwMjE2NjkwMSwgMHhkNWY0ZTk1OSwgMHg3NmEyNmZmMCwKKyAgICAweGExNDBlZmE4fSwKKyAgIHsweDAwMDAwMDAwLCAweGVmNTJiNmUxLCAweDA1ZDQ2YjgzLCAweGVhODZkZDYyLCAweDBiYThkNzA2LAorICAgIDB4ZTRmYTYxZTcsIDB4MGU3Y2JjODUsIDB4ZTEyZTBhNjQsIDB4MTc1MWFlMGMsIDB4ZjgwMzE4ZWQsCisgICAgMHgxMjg1YzU4ZiwgMHhmZGQ3NzM2ZSwgMHgxY2Y5NzkwYSwgMHhmM2FiY2ZlYiwgMHgxOTJkMTI4OSwKKyAgICAweGY2N2ZhNDY4LCAweDJlYTM1YzE4LCAweGMxZjFlYWY5LCAweDJiNzczNzliLCAweGM0MjU4MTdhLAorICAgIDB4MjUwYjhiMWUsIDB4Y2E1OTNkZmYsIDB4MjBkZmUwOWQsIDB4Y2Y4ZDU2N2MsIDB4MzlmMmYyMTQsCisgICAgMHhkNmEwNDRmNSwgMHgzYzI2OTk5NywgMHhkMzc0MmY3NiwgMHgzMjVhMjUxMiwgMHhkZDA4OTNmMywKKyAgICAweDM3OGU0ZTkxLCAweGQ4ZGNmODcwLCAweDVkNDZiODMwLCAweGIyMTQwZWQxLCAweDU4OTJkM2IzLAorICAgIDB4YjdjMDY1NTIsIDB4NTZlZTZmMzYsIDB4YjliY2Q5ZDcsIDB4NTMzYTA0YjUsIDB4YmM2OGIyNTQsCisgICAgMHg0YTE3MTYzYywgMHhhNTQ1YTBkZCwgMHg0ZmMzN2RiZiwgMHhhMDkxY2I1ZSwgMHg0MWJmYzEzYSwKKyAgICAweGFlZWQ3N2RiLCAweDQ0NmJhYWI5LCAweGFiMzkxYzU4LCAweDczZTVlNDI4LCAweDljYjc1MmM5LAorICAgIDB4NzYzMThmYWIsIDB4OTk2MzM5NGEsIDB4Nzg0ZDMzMmUsIDB4OTcxZjg1Y2YsIDB4N2Q5OTU4YWQsCisgICAgMHg5MmNiZWU0YywgMHg2NGI0NGEyNCwgMHg4YmU2ZmNjNSwgMHg2MTYwMjFhNywgMHg4ZTMyOTc0NiwKKyAgICAweDZmMWM5ZDIyLCAweDgwNGUyYmMzLCAweDZhYzhmNmExLCAweDg1OWE0MDQwLCAweGJhOGQ3MDYwLAorICAgIDB4NTVkZmM2ODEsIDB4YmY1OTFiZTMsIDB4NTAwYmFkMDIsIDB4YjEyNWE3NjYsIDB4NWU3NzExODcsCisgICAgMHhiNGYxY2NlNSwgMHg1YmEzN2EwNCwgMHhhZGRjZGU2YywgMHg0MjhlNjg4ZCwgMHhhODA4YjVlZiwKKyAgICAweDQ3NWEwMzBlLCAweGE2NzQwOTZhLCAweDQ5MjZiZjhiLCAweGEzYTA2MmU5LCAweDRjZjJkNDA4LAorICAgIDB4OTQyZTJjNzgsIDB4N2I3YzlhOTksIDB4OTFmYTQ3ZmIsIDB4N2VhOGYxMWEsIDB4OWY4NmZiN2UsCisgICAgMHg3MGQ0NGQ5ZiwgMHg5YTUyOTBmZCwgMHg3NTAwMjYxYywgMHg4MzdmODI3NCwgMHg2YzJkMzQ5NSwKKyAgICAweDg2YWJlOWY3LCAweDY5Zjk1ZjE2LCAweDg4ZDc1NTcyLCAweDY3ODVlMzkzLCAweDhkMDMzZWYxLAorICAgIDB4NjI1MTg4MTAsIDB4ZTdjYmM4NTAsIDB4MDg5OTdlYjEsIDB4ZTIxZmEzZDMsIDB4MGQ0ZDE1MzIsCisgICAgMHhlYzYzMWY1NiwgMHgwMzMxYTliNywgMHhlOWI3NzRkNSwgMHgwNmU1YzIzNCwgMHhmMDlhNjY1YywKKyAgICAweDFmYzhkMGJkLCAweGY1NGUwZGRmLCAweDFhMWNiYjNlLCAweGZiMzJiMTVhLCAweDE0NjAwN2JiLAorICAgIDB4ZmVlNmRhZDksIDB4MTFiNDZjMzgsIDB4Yzk2ODk0NDgsIDB4MjYzYTIyYTksIDB4Y2NiY2ZmY2IsCisgICAgMHgyM2VlNDkyYSwgMHhjMmMwNDM0ZSwgMHgyZDkyZjVhZiwgMHhjNzE0MjhjZCwgMHgyODQ2OWUyYywKKyAgICAweGRlMzkzYTQ0LCAweDMxNmI4Y2E1LCAweGRiZWQ1MWM3LCAweDM0YmZlNzI2LCAweGQ1OTFlZDQyLAorICAgIDB4M2FjMzViYTMsIDB4ZDA0NTg2YzEsIDB4M2YxNzMwMjAsIDB4YWU2YmU2ODEsIDB4NDEzOTUwNjAsCisgICAgMHhhYmJmOGQwMiwgMHg0NGVkM2JlMywgMHhhNWMzMzE4NywgMHg0YTkxODc2NiwgMHhhMDE3NWEwNCwKKyAgICAweDRmNDVlY2U1LCAweGI5M2E0ODhkLCAweDU2NjhmZTZjLCAweGJjZWUyMzBlLCAweDUzYmM5NWVmLAorICAgIDB4YjI5MjlmOGIsIDB4NWRjMDI5NmEsIDB4Yjc0NmY0MDgsIDB4NTgxNDQyZTksIDB4ODBjOGJhOTksCisgICAgMHg2ZjlhMGM3OCwgMHg4NTFjZDExYSwgMHg2YTRlNjdmYiwgMHg4YjYwNmQ5ZiwgMHg2NDMyZGI3ZSwKKyAgICAweDhlYjQwNjFjLCAweDYxZTZiMGZkLCAweDk3OTkxNDk1LCAweDc4Y2JhMjc0LCAweDkyNGQ3ZjE2LAorICAgIDB4N2QxZmM5ZjcsIDB4OWMzMWMzOTMsIDB4NzM2Mzc1NzIsIDB4OTllNWE4MTAsIDB4NzZiNzFlZjEsCisgICAgMHhmMzJkNWViMSwgMHgxYzdmZTg1MCwgMHhmNmY5MzUzMiwgMHgxOWFiODNkMywgMHhmODg1ODliNywKKyAgICAweDE3ZDczZjU2LCAweGZkNTFlMjM0LCAweDEyMDM1NGQ1LCAweGU0N2NmMGJkLCAweDBiMmU0NjVjLAorICAgIDB4ZTFhODliM2UsIDB4MGVmYTJkZGYsIDB4ZWZkNDI3YmIsIDB4MDA4NjkxNWEsIDB4ZWEwMDRjMzgsCisgICAgMHgwNTUyZmFkOSwgMHhkZDhlMDJhOSwgMHgzMmRjYjQ0OCwgMHhkODVhNjkyYSwgMHgzNzA4ZGZjYiwKKyAgICAweGQ2MjZkNWFmLCAweDM5NzQ2MzRlLCAweGQzZjJiZTJjLCAweDNjYTAwOGNkLCAweGNhZGZhY2E1LAorICAgIDB4MjU4ZDFhNDQsIDB4Y2YwYmM3MjYsIDB4MjA1OTcxYzcsIDB4YzE3NzdiYTMsIDB4MmUyNWNkNDIsCisgICAgMHhjNGEzMTAyMCwgMHgyYmYxYTZjMSwgMHgxNGU2OTZlMSwgMHhmYmI0MjAwMCwgMHgxMTMyZmQ2MiwKKyAgICAweGZlNjA0YjgzLCAweDFmNGU0MWU3LCAweGYwMWNmNzA2LCAweDFhOWEyYTY0LCAweGY1Yzg5Yzg1LAorICAgIDB4MDNiNzM4ZWQsIDB4ZWNlNThlMGMsIDB4MDY2MzUzNmUsIDB4ZTkzMWU1OGYsIDB4MDgxZmVmZWIsCisgICAgMHhlNzRkNTkwYSwgMHgwZGNiODQ2OCwgMHhlMjk5MzI4OSwgMHgzYTQ1Y2FmOSwgMHhkNTE3N2MxOCwKKyAgICAweDNmOTFhMTdhLCAweGQwYzMxNzliLCAweDMxZWQxZGZmLCAweGRlYmZhYjFlLCAweDM0Mzk3NjdjLAorICAgIDB4ZGI2YmMwOWQsIDB4MmQxNDY0ZjUsIDB4YzI0NmQyMTQsIDB4MjhjMDBmNzYsIDB4Yzc5MmI5OTcsCisgICAgMHgyNmJjYjNmMywgMHhjOWVlMDUxMiwgMHgyMzY4ZDg3MCwgMHhjYzNhNmU5MSwgMHg0OWEwMmVkMSwKKyAgICAweGE2ZjI5ODMwLCAweDRjNzQ0NTUyLCAweGEzMjZmM2IzLCAweDQyMDhmOWQ3LCAweGFkNWE0ZjM2LAorICAgIDB4NDdkYzkyNTQsIDB4YTg4ZTI0YjUsIDB4NWVmMTgwZGQsIDB4YjFhMzM2M2MsIDB4NWIyNWViNWUsCisgICAgMHhiNDc3NWRiZiwgMHg1NTU5NTdkYiwgMHhiYTBiZTEzYSwgMHg1MDhkM2M1OCwgMHhiZmRmOGFiOSwKKyAgICAweDY3MDM3MmM5LCAweDg4NTFjNDI4LCAweDYyZDcxOTRhLCAweDhkODVhZmFiLCAweDZjYWJhNWNmLAorICAgIDB4ODNmOTEzMmUsIDB4Njk3ZmNlNGMsIDB4ODYyZDc4YWQsIDB4NzA1MmRjYzUsIDB4OWYwMDZhMjQsCisgICAgMHg3NTg2Yjc0NiwgMHg5YWQ0MDFhNywgMHg3YmZhMGJjMywgMHg5NGE4YmQyMiwgMHg3ZTJlNjA0MCwKKyAgICAweDkxN2NkNmExfSwKKyAgIHsweDAwMDAwMDAwLCAweDg3YTZjYjQzLCAweGQ0M2M5MGM3LCAweDUzOWE1Yjg0LCAweDczMDgyN2NmLAorICAgIDB4ZjRhZWVjOGMsIDB4YTczNGI3MDgsIDB4MjA5MjdjNGIsIDB4ZTYxMDRmOWUsIDB4NjFiNjg0ZGQsCisgICAgMHgzMjJjZGY1OSwgMHhiNThhMTQxYSwgMHg5NTE4Njg1MSwgMHgxMmJlYTMxMiwgMHg0MTI0Zjg5NiwKKyAgICAweGM2ODIzM2Q1LCAweDE3NTE5OTdkLCAweDkwZjc1MjNlLCAweGMzNmQwOWJhLCAweDQ0Y2JjMmY5LAorICAgIDB4NjQ1OWJlYjIsIDB4ZTNmZjc1ZjEsIDB4YjA2NTJlNzUsIDB4MzdjM2U1MzYsIDB4ZjE0MWQ2ZTMsCisgICAgMHg3NmU3MWRhMCwgMHgyNTdkNDYyNCwgMHhhMmRiOGQ2NywgMHg4MjQ5ZjEyYywgMHgwNWVmM2E2ZiwKKyAgICAweDU2NzU2MWViLCAweGQxZDNhYWE4LCAweDJlYTMzMmZhLCAweGE5MDVmOWI5LCAweGZhOWZhMjNkLAorICAgIDB4N2QzOTY5N2UsIDB4NWRhYjE1MzUsIDB4ZGEwZGRlNzYsIDB4ODk5Nzg1ZjIsIDB4MGUzMTRlYjEsCisgICAgMHhjOGIzN2Q2NCwgMHg0ZjE1YjYyNywgMHgxYzhmZWRhMywgMHg5YjI5MjZlMCwgMHhiYmJiNWFhYiwKKyAgICAweDNjMWQ5MWU4LCAweDZmODdjYTZjLCAweGU4MjEwMTJmLCAweDM5ZjJhYjg3LCAweGJlNTQ2MGM0LAorICAgIDB4ZWRjZTNiNDAsIDB4NmE2OGYwMDMsIDB4NGFmYThjNDgsIDB4Y2Q1YzQ3MGIsIDB4OWVjNjFjOGYsCisgICAgMHgxOTYwZDdjYywgMHhkZmUyZTQxOSwgMHg1ODQ0MmY1YSwgMHgwYmRlNzRkZSwgMHg4Yzc4YmY5ZCwKKyAgICAweGFjZWFjM2Q2LCAweDJiNGMwODk1LCAweDc4ZDY1MzExLCAweGZmNzA5ODUyLCAweDVkNDY2NWY0LAorICAgIDB4ZGFlMGFlYjcsIDB4ODk3YWY1MzMsIDB4MGVkYzNlNzAsIDB4MmU0ZTQyM2IsIDB4YTllODg5NzgsCisgICAgMHhmYTcyZDJmYywgMHg3ZGQ0MTliZiwgMHhiYjU2MmE2YSwgMHgzY2YwZTEyOSwgMHg2ZjZhYmFhZCwKKyAgICAweGU4Y2M3MWVlLCAweGM4NWUwZGE1LCAweDRmZjhjNmU2LCAweDFjNjI5ZDYyLCAweDliYzQ1NjIxLAorICAgIDB4NGExN2ZjODksIDB4Y2RiMTM3Y2EsIDB4OWUyYjZjNGUsIDB4MTk4ZGE3MGQsIDB4MzkxZmRiNDYsCisgICAgMHhiZWI5MTAwNSwgMHhlZDIzNGI4MSwgMHg2YTg1ODBjMiwgMHhhYzA3YjMxNywgMHgyYmExNzg1NCwKKyAgICAweDc4M2IyM2QwLCAweGZmOWRlODkzLCAweGRmMGY5NGQ4LCAweDU4YTk1ZjliLCAweDBiMzMwNDFmLAorICAgIDB4OGM5NWNmNWMsIDB4NzNlNTU3MGUsIDB4ZjQ0MzljNGQsIDB4YTdkOWM3YzksIDB4MjA3ZjBjOGEsCisgICAgMHgwMGVkNzBjMSwgMHg4NzRiYmI4MiwgMHhkNGQxZTAwNiwgMHg1Mzc3MmI0NSwgMHg5NWY1MTg5MCwKKyAgICAweDEyNTNkM2QzLCAweDQxYzk4ODU3LCAweGM2NmY0MzE0LCAweGU2ZmQzZjVmLCAweDYxNWJmNDFjLAorICAgIDB4MzJjMWFmOTgsIDB4YjU2NzY0ZGIsIDB4NjRiNGNlNzMsIDB4ZTMxMjA1MzAsIDB4YjA4ODVlYjQsCisgICAgMHgzNzJlOTVmNywgMHgxN2JjZTliYywgMHg5MDFhMjJmZiwgMHhjMzgwNzk3YiwgMHg0NDI2YjIzOCwKKyAgICAweDgyYTQ4MWVkLCAweDA1MDI0YWFlLCAweDU2OTgxMTJhLCAweGQxM2VkYTY5LCAweGYxYWNhNjIyLAorICAgIDB4NzYwYTZkNjEsIDB4MjU5MDM2ZTUsIDB4YTIzNmZkYTYsIDB4YmE4Y2NiZTgsIDB4M2QyYTAwYWIsCisgICAgMHg2ZWIwNWIyZiwgMHhlOTE2OTA2YywgMHhjOTg0ZWMyNywgMHg0ZTIyMjc2NCwgMHgxZGI4N2NlMCwKKyAgICAweDlhMWViN2EzLCAweDVjOWM4NDc2LCAweGRiM2E0ZjM1LCAweDg4YTAxNGIxLCAweDBmMDZkZmYyLAorICAgIDB4MmY5NGEzYjksIDB4YTgzMjY4ZmEsIDB4ZmJhODMzN2UsIDB4N2MwZWY4M2QsIDB4YWRkZDUyOTUsCisgICAgMHgyYTdiOTlkNiwgMHg3OWUxYzI1MiwgMHhmZTQ3MDkxMSwgMHhkZWQ1NzU1YSwgMHg1OTczYmUxOSwKKyAgICAweDBhZTllNTlkLCAweDhkNGYyZWRlLCAweDRiY2QxZDBiLCAweGNjNmJkNjQ4LCAweDlmZjE4ZGNjLAorICAgIDB4MTg1NzQ2OGYsIDB4MzhjNTNhYzQsIDB4YmY2M2YxODcsIDB4ZWNmOWFhMDMsIDB4NmI1ZjYxNDAsCisgICAgMHg5NDJmZjkxMiwgMHgxMzg5MzI1MSwgMHg0MDEzNjlkNSwgMHhjN2I1YTI5NiwgMHhlNzI3ZGVkZCwKKyAgICAweDYwODExNTllLCAweDMzMWI0ZTFhLCAweGI0YmQ4NTU5LCAweDcyM2ZiNjhjLCAweGY1OTk3ZGNmLAorICAgIDB4YTYwMzI2NGIsIDB4MjFhNWVkMDgsIDB4MDEzNzkxNDMsIDB4ODY5MTVhMDAsIDB4ZDUwYjAxODQsCisgICAgMHg1MmFkY2FjNywgMHg4MzdlNjA2ZiwgMHgwNGQ4YWIyYywgMHg1NzQyZjBhOCwgMHhkMGU0M2JlYiwKKyAgICAweGYwNzY0N2EwLCAweDc3ZDA4Y2UzLCAweDI0NGFkNzY3LCAweGEzZWMxYzI0LCAweDY1NmUyZmYxLAorICAgIDB4ZTJjOGU0YjIsIDB4YjE1MmJmMzYsIDB4MzZmNDc0NzUsIDB4MTY2NjA4M2UsIDB4OTFjMGMzN2QsCisgICAgMHhjMjVhOThmOSwgMHg0NWZjNTNiYSwgMHhlN2NhYWUxYywgMHg2MDZjNjU1ZiwgMHgzM2Y2M2VkYiwKKyAgICAweGI0NTBmNTk4LCAweDk0YzI4OWQzLCAweDEzNjQ0MjkwLCAweDQwZmUxOTE0LCAweGM3NThkMjU3LAorICAgIDB4MDFkYWUxODIsIDB4ODY3YzJhYzEsIDB4ZDVlNjcxNDUsIDB4NTI0MGJhMDYsIDB4NzJkMmM2NGQsCisgICAgMHhmNTc0MGQwZSwgMHhhNmVlNTY4YSwgMHgyMTQ4OWRjOSwgMHhmMDliMzc2MSwgMHg3NzNkZmMyMiwKKyAgICAweDI0YTdhN2E2LCAweGEzMDE2Y2U1LCAweDgzOTMxMGFlLCAweDA0MzVkYmVkLCAweDU3YWY4MDY5LAorICAgIDB4ZDAwOTRiMmEsIDB4MTY4Yjc4ZmYsIDB4OTEyZGIzYmMsIDB4YzJiN2U4MzgsIDB4NDUxMTIzN2IsCisgICAgMHg2NTgzNWYzMCwgMHhlMjI1OTQ3MywgMHhiMWJmY2ZmNywgMHgzNjE5MDRiNCwgMHhjOTY5OWNlNiwKKyAgICAweDRlY2Y1N2E1LCAweDFkNTUwYzIxLCAweDlhZjNjNzYyLCAweGJhNjFiYjI5LCAweDNkYzc3MDZhLAorICAgIDB4NmU1ZDJiZWUsIDB4ZTlmYmUwYWQsIDB4MmY3OWQzNzgsIDB4YThkZjE4M2IsIDB4ZmI0NTQzYmYsCisgICAgMHg3Y2UzODhmYywgMHg1YzcxZjRiNywgMHhkYmQ3M2ZmNCwgMHg4ODRkNjQ3MCwgMHgwZmViYWYzMywKKyAgICAweGRlMzgwNTliLCAweDU5OWVjZWQ4LCAweDBhMDQ5NTVjLCAweDhkYTI1ZTFmLCAweGFkMzAyMjU0LAorICAgIDB4MmE5NmU5MTcsIDB4NzkwY2IyOTMsIDB4ZmVhYTc5ZDAsIDB4MzgyODRhMDUsIDB4YmY4ZTgxNDYsCisgICAgMHhlYzE0ZGFjMiwgMHg2YmIyMTE4MSwgMHg0YjIwNmRjYSwgMHhjYzg2YTY4OSwgMHg5ZjFjZmQwZCwKKyAgICAweDE4YmEzNjRlfX07CisKK2xvY2FsIGNvbnN0IHpfd29yZF90IEZBUiBjcmNfYnJhaWRfYmlnX3RhYmxlW11bMjU2XSA9IHsKKyAgIHsweDAwMDAwMDAwMDAwMDAwMDAsIDB4NDNjYmE2ODcwMDAwMDAwMCwgMHhjNzkwM2NkNDAwMDAwMDAwLAorICAgIDB4ODQ1YjlhNTMwMDAwMDAwMCwgMHhjZjI3MDg3MzAwMDAwMDAwLCAweDhjZWNhZWY0MDAwMDAwMDAsCisgICAgMHgwOGI3MzRhNzAwMDAwMDAwLCAweDRiN2M5MjIwMDAwMDAwMDAsIDB4OWU0ZjEwZTYwMDAwMDAwMCwKKyAgICAweGRkODRiNjYxMDAwMDAwMDAsIDB4NTlkZjJjMzIwMDAwMDAwMCwgMHgxYTE0OGFiNTAwMDAwMDAwLAorICAgIDB4NTE2ODE4OTUwMDAwMDAwMCwgMHgxMmEzYmUxMjAwMDAwMDAwLCAweDk2ZjgyNDQxMDAwMDAwMDAsCisgICAgMHhkNTMzODJjNjAwMDAwMDAwLCAweDdkOTk1MTE3MDAwMDAwMDAsIDB4M2U1MmY3OTAwMDAwMDAwMCwKKyAgICAweGJhMDk2ZGMzMDAwMDAwMDAsIDB4ZjljMmNiNDQwMDAwMDAwMCwgMHhiMmJlNTk2NDAwMDAwMDAwLAorICAgIDB4ZjE3NWZmZTMwMDAwMDAwMCwgMHg3NTJlNjViMDAwMDAwMDAwLCAweDM2ZTVjMzM3MDAwMDAwMDAsCisgICAgMHhlM2Q2NDFmMTAwMDAwMDAwLCAweGEwMWRlNzc2MDAwMDAwMDAsIDB4MjQ0NjdkMjUwMDAwMDAwMCwKKyAgICAweDY3OGRkYmEyMDAwMDAwMDAsIDB4MmNmMTQ5ODIwMDAwMDAwMCwgMHg2ZjNhZWYwNTAwMDAwMDAwLAorICAgIDB4ZWI2MTc1NTYwMDAwMDAwMCwgMHhhOGFhZDNkMTAwMDAwMDAwLCAweGZhMzJhMzJlMDAwMDAwMDAsCisgICAgMHhiOWY5MDVhOTAwMDAwMDAwLCAweDNkYTI5ZmZhMDAwMDAwMDAsIDB4N2U2OTM5N2QwMDAwMDAwMCwKKyAgICAweDM1MTVhYjVkMDAwMDAwMDAsIDB4NzZkZTBkZGEwMDAwMDAwMCwgMHhmMjg1OTc4OTAwMDAwMDAwLAorICAgIDB4YjE0ZTMxMGUwMDAwMDAwMCwgMHg2NDdkYjNjODAwMDAwMDAwLCAweDI3YjYxNTRmMDAwMDAwMDAsCisgICAgMHhhM2VkOGYxYzAwMDAwMDAwLCAweGUwMjYyOTliMDAwMDAwMDAsIDB4YWI1YWJiYmIwMDAwMDAwMCwKKyAgICAweGU4OTExZDNjMDAwMDAwMDAsIDB4NmNjYTg3NmYwMDAwMDAwMCwgMHgyZjAxMjFlODAwMDAwMDAwLAorICAgIDB4ODdhYmYyMzkwMDAwMDAwMCwgMHhjNDYwNTRiZTAwMDAwMDAwLCAweDQwM2JjZWVkMDAwMDAwMDAsCisgICAgMHgwM2YwNjg2YTAwMDAwMDAwLCAweDQ4OGNmYTRhMDAwMDAwMDAsIDB4MGI0NzVjY2QwMDAwMDAwMCwKKyAgICAweDhmMWNjNjllMDAwMDAwMDAsIDB4Y2NkNzYwMTkwMDAwMDAwMCwgMHgxOWU0ZTJkZjAwMDAwMDAwLAorICAgIDB4NWEyZjQ0NTgwMDAwMDAwMCwgMHhkZTc0ZGUwYjAwMDAwMDAwLCAweDlkYmY3ODhjMDAwMDAwMDAsCisgICAgMHhkNmMzZWFhYzAwMDAwMDAwLCAweDk1MDg0YzJiMDAwMDAwMDAsIDB4MTE1M2Q2NzgwMDAwMDAwMCwKKyAgICAweDUyOTg3MGZmMDAwMDAwMDAsIDB4ZjQ2NTQ2NWQwMDAwMDAwMCwgMHhiN2FlZTBkYTAwMDAwMDAwLAorICAgIDB4MzNmNTdhODkwMDAwMDAwMCwgMHg3MDNlZGMwZTAwMDAwMDAwLCAweDNiNDI0ZTJlMDAwMDAwMDAsCisgICAgMHg3ODg5ZThhOTAwMDAwMDAwLCAweGZjZDI3MmZhMDAwMDAwMDAsIDB4YmYxOWQ0N2QwMDAwMDAwMCwKKyAgICAweDZhMmE1NmJiMDAwMDAwMDAsIDB4MjllMWYwM2MwMDAwMDAwMCwgMHhhZGJhNmE2ZjAwMDAwMDAwLAorICAgIDB4ZWU3MWNjZTgwMDAwMDAwMCwgMHhhNTBkNWVjODAwMDAwMDAwLCAweGU2YzZmODRmMDAwMDAwMDAsCisgICAgMHg2MjlkNjIxYzAwMDAwMDAwLCAweDIxNTZjNDliMDAwMDAwMDAsIDB4ODlmYzE3NGEwMDAwMDAwMCwKKyAgICAweGNhMzdiMWNkMDAwMDAwMDAsIDB4NGU2YzJiOWUwMDAwMDAwMCwgMHgwZGE3OGQxOTAwMDAwMDAwLAorICAgIDB4NDZkYjFmMzkwMDAwMDAwMCwgMHgwNTEwYjliZTAwMDAwMDAwLCAweDgxNGIyM2VkMDAwMDAwMDAsCisgICAgMHhjMjgwODU2YTAwMDAwMDAwLCAweDE3YjMwN2FjMDAwMDAwMDAsIDB4NTQ3OGExMmIwMDAwMDAwMCwKKyAgICAweGQwMjMzYjc4MDAwMDAwMDAsIDB4OTNlODlkZmYwMDAwMDAwMCwgMHhkODk0MGZkZjAwMDAwMDAwLAorICAgIDB4OWI1ZmE5NTgwMDAwMDAwMCwgMHgxZjA0MzMwYjAwMDAwMDAwLCAweDVjY2Y5NThjMDAwMDAwMDAsCisgICAgMHgwZTU3ZTU3MzAwMDAwMDAwLCAweDRkOWM0M2Y0MDAwMDAwMDAsIDB4YzljN2Q5YTcwMDAwMDAwMCwKKyAgICAweDhhMGM3ZjIwMDAwMDAwMDAsIDB4YzE3MGVkMDAwMDAwMDAwMCwgMHg4MmJiNGI4NzAwMDAwMDAwLAorICAgIDB4MDZlMGQxZDQwMDAwMDAwMCwgMHg0NTJiNzc1MzAwMDAwMDAwLCAweDkwMThmNTk1MDAwMDAwMDAsCisgICAgMHhkM2QzNTMxMjAwMDAwMDAwLCAweDU3ODhjOTQxMDAwMDAwMDAsIDB4MTQ0MzZmYzYwMDAwMDAwMCwKKyAgICAweDVmM2ZmZGU2MDAwMDAwMDAsIDB4MWNmNDViNjEwMDAwMDAwMCwgMHg5OGFmYzEzMjAwMDAwMDAwLAorICAgIDB4ZGI2NDY3YjUwMDAwMDAwMCwgMHg3M2NlYjQ2NDAwMDAwMDAwLCAweDMwMDUxMmUzMDAwMDAwMDAsCisgICAgMHhiNDVlODhiMDAwMDAwMDAwLCAweGY3OTUyZTM3MDAwMDAwMDAsIDB4YmNlOWJjMTcwMDAwMDAwMCwKKyAgICAweGZmMjIxYTkwMDAwMDAwMDAsIDB4N2I3OTgwYzMwMDAwMDAwMCwgMHgzOGIyMjY0NDAwMDAwMDAwLAorICAgIDB4ZWQ4MWE0ODIwMDAwMDAwMCwgMHhhZTRhMDIwNTAwMDAwMDAwLCAweDJhMTE5ODU2MDAwMDAwMDAsCisgICAgMHg2OWRhM2VkMTAwMDAwMDAwLCAweDIyYTZhY2YxMDAwMDAwMDAsIDB4NjE2ZDBhNzYwMDAwMDAwMCwKKyAgICAweGU1MzY5MDI1MDAwMDAwMDAsIDB4YTZmZDM2YTIwMDAwMDAwMCwgMHhlOGNiOGNiYTAwMDAwMDAwLAorICAgIDB4YWIwMDJhM2QwMDAwMDAwMCwgMHgyZjViYjA2ZTAwMDAwMDAwLCAweDZjOTAxNmU5MDAwMDAwMDAsCisgICAgMHgyN2VjODRjOTAwMDAwMDAwLCAweDY0MjcyMjRlMDAwMDAwMDAsIDB4ZTA3Y2I4MWQwMDAwMDAwMCwKKyAgICAweGEzYjcxZTlhMDAwMDAwMDAsIDB4NzY4NDljNWMwMDAwMDAwMCwgMHgzNTRmM2FkYjAwMDAwMDAwLAorICAgIDB4YjExNGEwODgwMDAwMDAwMCwgMHhmMmRmMDYwZjAwMDAwMDAwLCAweGI5YTM5NDJmMDAwMDAwMDAsCisgICAgMHhmYTY4MzJhODAwMDAwMDAwLCAweDdlMzNhOGZiMDAwMDAwMDAsIDB4M2RmODBlN2MwMDAwMDAwMCwKKyAgICAweDk1NTJkZGFkMDAwMDAwMDAsIDB4ZDY5OTdiMmEwMDAwMDAwMCwgMHg1MmMyZTE3OTAwMDAwMDAwLAorICAgIDB4MTEwOTQ3ZmUwMDAwMDAwMCwgMHg1YTc1ZDVkZTAwMDAwMDAwLCAweDE5YmU3MzU5MDAwMDAwMDAsCisgICAgMHg5ZGU1ZTkwYTAwMDAwMDAwLCAweGRlMmU0ZjhkMDAwMDAwMDAsIDB4MGIxZGNkNGIwMDAwMDAwMCwKKyAgICAweDQ4ZDY2YmNjMDAwMDAwMDAsIDB4Y2M4ZGYxOWYwMDAwMDAwMCwgMHg4ZjQ2NTcxODAwMDAwMDAwLAorICAgIDB4YzQzYWM1MzgwMDAwMDAwMCwgMHg4N2YxNjNiZjAwMDAwMDAwLCAweDAzYWFmOWVjMDAwMDAwMDAsCisgICAgMHg0MDYxNWY2YjAwMDAwMDAwLCAweDEyZjkyZjk0MDAwMDAwMDAsIDB4NTEzMjg5MTMwMDAwMDAwMCwKKyAgICAweGQ1NjkxMzQwMDAwMDAwMDAsIDB4OTZhMmI1YzcwMDAwMDAwMCwgMHhkZGRlMjdlNzAwMDAwMDAwLAorICAgIDB4OWUxNTgxNjAwMDAwMDAwMCwgMHgxYTRlMWIzMzAwMDAwMDAwLCAweDU5ODViZGI0MDAwMDAwMDAsCisgICAgMHg4Y2I2M2Y3MjAwMDAwMDAwLCAweGNmN2Q5OWY1MDAwMDAwMDAsIDB4NGIyNjAzYTYwMDAwMDAwMCwKKyAgICAweDA4ZWRhNTIxMDAwMDAwMDAsIDB4NDM5MTM3MDEwMDAwMDAwMCwgMHgwMDVhOTE4NjAwMDAwMDAwLAorICAgIDB4ODQwMTBiZDUwMDAwMDAwMCwgMHhjN2NhYWQ1MjAwMDAwMDAwLCAweDZmNjA3ZTgzMDAwMDAwMDAsCisgICAgMHgyY2FiZDgwNDAwMDAwMDAwLCAweGE4ZjA0MjU3MDAwMDAwMDAsIDB4ZWIzYmU0ZDAwMDAwMDAwMCwKKyAgICAweGEwNDc3NmYwMDAwMDAwMDAsIDB4ZTM4Y2QwNzcwMDAwMDAwMCwgMHg2N2Q3NGEyNDAwMDAwMDAwLAorICAgIDB4MjQxY2VjYTMwMDAwMDAwMCwgMHhmMTJmNmU2NTAwMDAwMDAwLCAweGIyZTRjOGUyMDAwMDAwMDAsCisgICAgMHgzNmJmNTJiMTAwMDAwMDAwLCAweDc1NzRmNDM2MDAwMDAwMDAsIDB4M2UwODY2MTYwMDAwMDAwMCwKKyAgICAweDdkYzNjMDkxMDAwMDAwMDAsIDB4Zjk5ODVhYzIwMDAwMDAwMCwgMHhiYTUzZmM0NTAwMDAwMDAwLAorICAgIDB4MWNhZWNhZTcwMDAwMDAwMCwgMHg1ZjY1NmM2MDAwMDAwMDAwLCAweGRiM2VmNjMzMDAwMDAwMDAsCisgICAgMHg5OGY1NTBiNDAwMDAwMDAwLCAweGQzODljMjk0MDAwMDAwMDAsIDB4OTA0MjY0MTMwMDAwMDAwMCwKKyAgICAweDE0MTlmZTQwMDAwMDAwMDAsIDB4NTdkMjU4YzcwMDAwMDAwMCwgMHg4MmUxZGEwMTAwMDAwMDAwLAorICAgIDB4YzEyYTdjODYwMDAwMDAwMCwgMHg0NTcxZTZkNTAwMDAwMDAwLCAweDA2YmE0MDUyMDAwMDAwMDAsCisgICAgMHg0ZGM2ZDI3MjAwMDAwMDAwLCAweDBlMGQ3NGY1MDAwMDAwMDAsIDB4OGE1NmVlYTYwMDAwMDAwMCwKKyAgICAweGM5OWQ0ODIxMDAwMDAwMDAsIDB4NjEzNzliZjAwMDAwMDAwMCwgMHgyMmZjM2Q3NzAwMDAwMDAwLAorICAgIDB4YTZhN2E3MjQwMDAwMDAwMCwgMHhlNTZjMDFhMzAwMDAwMDAwLCAweGFlMTA5MzgzMDAwMDAwMDAsCisgICAgMHhlZGRiMzUwNDAwMDAwMDAwLCAweDY5ODBhZjU3MDAwMDAwMDAsIDB4MmE0YjA5ZDAwMDAwMDAwMCwKKyAgICAweGZmNzg4YjE2MDAwMDAwMDAsIDB4YmNiMzJkOTEwMDAwMDAwMCwgMHgzOGU4YjdjMjAwMDAwMDAwLAorICAgIDB4N2IyMzExNDUwMDAwMDAwMCwgMHgzMDVmODM2NTAwMDAwMDAwLCAweDczOTQyNWUyMDAwMDAwMDAsCisgICAgMHhmN2NmYmZiMTAwMDAwMDAwLCAweGI0MDQxOTM2MDAwMDAwMDAsIDB4ZTY5YzY5YzkwMDAwMDAwMCwKKyAgICAweGE1NTdjZjRlMDAwMDAwMDAsIDB4MjEwYzU1MWQwMDAwMDAwMCwgMHg2MmM3ZjM5YTAwMDAwMDAwLAorICAgIDB4MjliYjYxYmEwMDAwMDAwMCwgMHg2YTcwYzczZDAwMDAwMDAwLCAweGVlMmI1ZDZlMDAwMDAwMDAsCisgICAgMHhhZGUwZmJlOTAwMDAwMDAwLCAweDc4ZDM3OTJmMDAwMDAwMDAsIDB4M2IxOGRmYTgwMDAwMDAwMCwKKyAgICAweGJmNDM0NWZiMDAwMDAwMDAsIDB4ZmM4OGUzN2MwMDAwMDAwMCwgMHhiN2Y0NzE1YzAwMDAwMDAwLAorICAgIDB4ZjQzZmQ3ZGIwMDAwMDAwMCwgMHg3MDY0NGQ4ODAwMDAwMDAwLCAweDMzYWZlYjBmMDAwMDAwMDAsCisgICAgMHg5YjA1MzhkZTAwMDAwMDAwLCAweGQ4Y2U5ZTU5MDAwMDAwMDAsIDB4NWM5NTA0MGEwMDAwMDAwMCwKKyAgICAweDFmNWVhMjhkMDAwMDAwMDAsIDB4NTQyMjMwYWQwMDAwMDAwMCwgMHgxN2U5OTYyYTAwMDAwMDAwLAorICAgIDB4OTNiMjBjNzkwMDAwMDAwMCwgMHhkMDc5YWFmZTAwMDAwMDAwLCAweDA1NGEyODM4MDAwMDAwMDAsCisgICAgMHg0NjgxOGViZjAwMDAwMDAwLCAweGMyZGExNGVjMDAwMDAwMDAsIDB4ODExMWIyNmIwMDAwMDAwMCwKKyAgICAweGNhNmQyMDRiMDAwMDAwMDAsIDB4ODlhNjg2Y2MwMDAwMDAwMCwgMHgwZGZkMWM5ZjAwMDAwMDAwLAorICAgIDB4NGUzNmJhMTgwMDAwMDAwMH0sCisgICB7MHgwMDAwMDAwMDAwMDAwMDAwLCAweGUxYjY1MmVmMDAwMDAwMDAsIDB4ODM2YmQ0MDUwMDAwMDAwMCwKKyAgICAweDYyZGQ4NmVhMDAwMDAwMDAsIDB4MDZkN2E4MGIwMDAwMDAwMCwgMHhlNzYxZmFlNDAwMDAwMDAwLAorICAgIDB4ODViYzdjMGUwMDAwMDAwMCwgMHg2NDBhMmVlMTAwMDAwMDAwLCAweDBjYWU1MTE3MDAwMDAwMDAsCisgICAgMHhlZDE4MDNmODAwMDAwMDAwLCAweDhmYzU4NTEyMDAwMDAwMDAsIDB4NmU3M2Q3ZmQwMDAwMDAwMCwKKyAgICAweDBhNzlmOTFjMDAwMDAwMDAsIDB4ZWJjZmFiZjMwMDAwMDAwMCwgMHg4OTEyMmQxOTAwMDAwMDAwLAorICAgIDB4NjhhNDdmZjYwMDAwMDAwMCwgMHgxODVjYTMyZTAwMDAwMDAwLCAweGY5ZWFmMWMxMDAwMDAwMDAsCisgICAgMHg5YjM3NzcyYjAwMDAwMDAwLCAweDdhODEyNWM0MDAwMDAwMDAsIDB4MWU4YjBiMjUwMDAwMDAwMCwKKyAgICAweGZmM2Q1OWNhMDAwMDAwMDAsIDB4OWRlMGRmMjAwMDAwMDAwMCwgMHg3YzU2OGRjZjAwMDAwMDAwLAorICAgIDB4MTRmMmYyMzkwMDAwMDAwMCwgMHhmNTQ0YTBkNjAwMDAwMDAwLCAweDk3OTkyNjNjMDAwMDAwMDAsCisgICAgMHg3NjJmNzRkMzAwMDAwMDAwLCAweDEyMjU1YTMyMDAwMDAwMDAsIDB4ZjM5MzA4ZGQwMDAwMDAwMCwKKyAgICAweDkxNGU4ZTM3MDAwMDAwMDAsIDB4NzBmOGRjZDgwMDAwMDAwMCwgMHgzMGI4NDY1ZDAwMDAwMDAwLAorICAgIDB4ZDEwZTE0YjIwMDAwMDAwMCwgMHhiM2QzOTI1ODAwMDAwMDAwLCAweDUyNjVjMGI3MDAwMDAwMDAsCisgICAgMHgzNjZmZWU1NjAwMDAwMDAwLCAweGQ3ZDliY2I5MDAwMDAwMDAsIDB4YjUwNDNhNTMwMDAwMDAwMCwKKyAgICAweDU0YjI2OGJjMDAwMDAwMDAsIDB4M2MxNjE3NGEwMDAwMDAwMCwgMHhkZGEwNDVhNTAwMDAwMDAwLAorICAgIDB4YmY3ZGMzNGYwMDAwMDAwMCwgMHg1ZWNiOTFhMDAwMDAwMDAwLCAweDNhYzFiZjQxMDAwMDAwMDAsCisgICAgMHhkYjc3ZWRhZTAwMDAwMDAwLCAweGI5YWE2YjQ0MDAwMDAwMDAsIDB4NTgxYzM5YWIwMDAwMDAwMCwKKyAgICAweDI4ZTRlNTczMDAwMDAwMDAsIDB4Yzk1MmI3OWMwMDAwMDAwMCwgMHhhYjhmMzE3NjAwMDAwMDAwLAorICAgIDB4NGEzOTYzOTkwMDAwMDAwMCwgMHgyZTMzNGQ3ODAwMDAwMDAwLCAweGNmODUxZjk3MDAwMDAwMDAsCisgICAgMHhhZDU4OTk3ZDAwMDAwMDAwLCAweDRjZWVjYjkyMDAwMDAwMDAsIDB4MjQ0YWI0NjQwMDAwMDAwMCwKKyAgICAweGM1ZmNlNjhiMDAwMDAwMDAsIDB4YTcyMTYwNjEwMDAwMDAwMCwgMHg0Njk3MzI4ZTAwMDAwMDAwLAorICAgIDB4MjI5ZDFjNmYwMDAwMDAwMCwgMHhjMzJiNGU4MDAwMDAwMDAwLCAweGExZjZjODZhMDAwMDAwMDAsCisgICAgMHg0MDQwOWE4NTAwMDAwMDAwLCAweDYwNzA4ZGJhMDAwMDAwMDAsIDB4ODFjNmRmNTUwMDAwMDAwMCwKKyAgICAweGUzMWI1OWJmMDAwMDAwMDAsIDB4MDJhZDBiNTAwMDAwMDAwMCwgMHg2NmE3MjViMTAwMDAwMDAwLAorICAgIDB4ODcxMTc3NWUwMDAwMDAwMCwgMHhlNWNjZjFiNDAwMDAwMDAwLCAweDA0N2FhMzViMDAwMDAwMDAsCisgICAgMHg2Y2RlZGNhZDAwMDAwMDAwLCAweDhkNjg4ZTQyMDAwMDAwMDAsIDB4ZWZiNTA4YTgwMDAwMDAwMCwKKyAgICAweDBlMDM1YTQ3MDAwMDAwMDAsIDB4NmEwOTc0YTYwMDAwMDAwMCwgMHg4YmJmMjY0OTAwMDAwMDAwLAorICAgIDB4ZTk2MmEwYTMwMDAwMDAwMCwgMHgwOGQ0ZjI0YzAwMDAwMDAwLCAweDc4MmMyZTk0MDAwMDAwMDAsCisgICAgMHg5OTlhN2M3YjAwMDAwMDAwLCAweGZiNDdmYTkxMDAwMDAwMDAsIDB4MWFmMWE4N2UwMDAwMDAwMCwKKyAgICAweDdlZmI4NjlmMDAwMDAwMDAsIDB4OWY0ZGQ0NzAwMDAwMDAwMCwgMHhmZDkwNTI5YTAwMDAwMDAwLAorICAgIDB4MWMyNjAwNzUwMDAwMDAwMCwgMHg3NDgyN2Y4MzAwMDAwMDAwLCAweDk1MzQyZDZjMDAwMDAwMDAsCisgICAgMHhmN2U5YWI4NjAwMDAwMDAwLCAweDE2NWZmOTY5MDAwMDAwMDAsIDB4NzI1NWQ3ODgwMDAwMDAwMCwKKyAgICAweDkzZTM4NTY3MDAwMDAwMDAsIDB4ZjEzZTAzOGQwMDAwMDAwMCwgMHgxMDg4NTE2MjAwMDAwMDAwLAorICAgIDB4NTBjOGNiZTcwMDAwMDAwMCwgMHhiMTdlOTkwODAwMDAwMDAwLCAweGQzYTMxZmUyMDAwMDAwMDAsCisgICAgMHgzMjE1NGQwZDAwMDAwMDAwLCAweDU2MWY2M2VjMDAwMDAwMDAsIDB4YjdhOTMxMDMwMDAwMDAwMCwKKyAgICAweGQ1NzRiN2U5MDAwMDAwMDAsIDB4MzRjMmU1MDYwMDAwMDAwMCwgMHg1YzY2OWFmMDAwMDAwMDAwLAorICAgIDB4YmRkMGM4MWYwMDAwMDAwMCwgMHhkZjBkNGVmNTAwMDAwMDAwLCAweDNlYmIxYzFhMDAwMDAwMDAsCisgICAgMHg1YWIxMzJmYjAwMDAwMDAwLCAweGJiMDc2MDE0MDAwMDAwMDAsIDB4ZDlkYWU2ZmUwMDAwMDAwMCwKKyAgICAweDM4NmNiNDExMDAwMDAwMDAsIDB4NDg5NDY4YzkwMDAwMDAwMCwgMHhhOTIyM2EyNjAwMDAwMDAwLAorICAgIDB4Y2JmZmJjY2MwMDAwMDAwMCwgMHgyYTQ5ZWUyMzAwMDAwMDAwLCAweDRlNDNjMGMyMDAwMDAwMDAsCisgICAgMHhhZmY1OTIyZDAwMDAwMDAwLCAweGNkMjgxNGM3MDAwMDAwMDAsIDB4MmM5ZTQ2MjgwMDAwMDAwMCwKKyAgICAweDQ0M2EzOWRlMDAwMDAwMDAsIDB4YTU4YzZiMzEwMDAwMDAwMCwgMHhjNzUxZWRkYjAwMDAwMDAwLAorICAgIDB4MjZlN2JmMzQwMDAwMDAwMCwgMHg0MmVkOTFkNTAwMDAwMDAwLCAweGEzNWJjMzNhMDAwMDAwMDAsCisgICAgMHhjMTg2NDVkMDAwMDAwMDAwLCAweDIwMzAxNzNmMDAwMDAwMDAsIDB4ODFlNjZiYWUwMDAwMDAwMCwKKyAgICAweDYwNTAzOTQxMDAwMDAwMDAsIDB4MDI4ZGJmYWIwMDAwMDAwMCwgMHhlMzNiZWQ0NDAwMDAwMDAwLAorICAgIDB4ODczMWMzYTUwMDAwMDAwMCwgMHg2Njg3OTE0YTAwMDAwMDAwLCAweDA0NWExN2EwMDAwMDAwMDAsCisgICAgMHhlNWVjNDU0ZjAwMDAwMDAwLCAweDhkNDgzYWI5MDAwMDAwMDAsIDB4NmNmZTY4NTYwMDAwMDAwMCwKKyAgICAweDBlMjNlZWJjMDAwMDAwMDAsIDB4ZWY5NWJjNTMwMDAwMDAwMCwgMHg4YjlmOTJiMjAwMDAwMDAwLAorICAgIDB4NmEyOWMwNWQwMDAwMDAwMCwgMHgwOGY0NDZiNzAwMDAwMDAwLCAweGU5NDIxNDU4MDAwMDAwMDAsCisgICAgMHg5OWJhYzg4MDAwMDAwMDAwLCAweDc4MGM5YTZmMDAwMDAwMDAsIDB4MWFkMTFjODUwMDAwMDAwMCwKKyAgICAweGZiNjc0ZTZhMDAwMDAwMDAsIDB4OWY2ZDYwOGIwMDAwMDAwMCwgMHg3ZWRiMzI2NDAwMDAwMDAwLAorICAgIDB4MWMwNmI0OGUwMDAwMDAwMCwgMHhmZGIwZTY2MTAwMDAwMDAwLCAweDk1MTQ5OTk3MDAwMDAwMDAsCisgICAgMHg3NGEyY2I3ODAwMDAwMDAwLCAweDE2N2Y0ZDkyMDAwMDAwMDAsIDB4ZjdjOTFmN2QwMDAwMDAwMCwKKyAgICAweDkzYzMzMTljMDAwMDAwMDAsIDB4NzI3NTYzNzMwMDAwMDAwMCwgMHgxMGE4ZTU5OTAwMDAwMDAwLAorICAgIDB4ZjExZWI3NzYwMDAwMDAwMCwgMHhiMTVlMmRmMzAwMDAwMDAwLCAweDUwZTg3ZjFjMDAwMDAwMDAsCisgICAgMHgzMjM1ZjlmNjAwMDAwMDAwLCAweGQzODNhYjE5MDAwMDAwMDAsIDB4Yjc4OTg1ZjgwMDAwMDAwMCwKKyAgICAweDU2M2ZkNzE3MDAwMDAwMDAsIDB4MzRlMjUxZmQwMDAwMDAwMCwgMHhkNTU0MDMxMjAwMDAwMDAwLAorICAgIDB4YmRmMDdjZTQwMDAwMDAwMCwgMHg1YzQ2MmUwYjAwMDAwMDAwLCAweDNlOWJhOGUxMDAwMDAwMDAsCisgICAgMHhkZjJkZmEwZTAwMDAwMDAwLCAweGJiMjdkNGVmMDAwMDAwMDAsIDB4NWE5MTg2MDAwMDAwMDAwMCwKKyAgICAweDM4NGMwMGVhMDAwMDAwMDAsIDB4ZDlmYTUyMDUwMDAwMDAwMCwgMHhhOTAyOGVkZDAwMDAwMDAwLAorICAgIDB4NDhiNGRjMzIwMDAwMDAwMCwgMHgyYTY5NWFkODAwMDAwMDAwLCAweGNiZGYwODM3MDAwMDAwMDAsCisgICAgMHhhZmQ1MjZkNjAwMDAwMDAwLCAweDRlNjM3NDM5MDAwMDAwMDAsIDB4MmNiZWYyZDMwMDAwMDAwMCwKKyAgICAweGNkMDhhMDNjMDAwMDAwMDAsIDB4YTVhY2RmY2EwMDAwMDAwMCwgMHg0NDFhOGQyNTAwMDAwMDAwLAorICAgIDB4MjZjNzBiY2YwMDAwMDAwMCwgMHhjNzcxNTkyMDAwMDAwMDAwLCAweGEzN2I3N2MxMDAwMDAwMDAsCisgICAgMHg0MmNkMjUyZTAwMDAwMDAwLCAweDIwMTBhM2M0MDAwMDAwMDAsIDB4YzFhNmYxMmIwMDAwMDAwMCwKKyAgICAweGUxOTZlNjE0MDAwMDAwMDAsIDB4MDAyMGI0ZmIwMDAwMDAwMCwgMHg2MmZkMzIxMTAwMDAwMDAwLAorICAgIDB4ODM0YjYwZmUwMDAwMDAwMCwgMHhlNzQxNGUxZjAwMDAwMDAwLCAweDA2ZjcxY2YwMDAwMDAwMDAsCisgICAgMHg2NDJhOWExYTAwMDAwMDAwLCAweDg1OWNjOGY1MDAwMDAwMDAsIDB4ZWQzOGI3MDMwMDAwMDAwMCwKKyAgICAweDBjOGVlNWVjMDAwMDAwMDAsIDB4NmU1MzYzMDYwMDAwMDAwMCwgMHg4ZmU1MzFlOTAwMDAwMDAwLAorICAgIDB4ZWJlZjFmMDgwMDAwMDAwMCwgMHgwYTU5NGRlNzAwMDAwMDAwLCAweDY4ODRjYjBkMDAwMDAwMDAsCisgICAgMHg4OTMyOTllMjAwMDAwMDAwLCAweGY5Y2E0NTNhMDAwMDAwMDAsIDB4MTg3YzE3ZDUwMDAwMDAwMCwKKyAgICAweDdhYTE5MTNmMDAwMDAwMDAsIDB4OWIxN2MzZDAwMDAwMDAwMCwgMHhmZjFkZWQzMTAwMDAwMDAwLAorICAgIDB4MWVhYmJmZGUwMDAwMDAwMCwgMHg3Yzc2MzkzNDAwMDAwMDAwLCAweDlkYzA2YmRiMDAwMDAwMDAsCisgICAgMHhmNTY0MTQyZDAwMDAwMDAwLCAweDE0ZDI0NmMyMDAwMDAwMDAsIDB4NzYwZmMwMjgwMDAwMDAwMCwKKyAgICAweDk3Yjk5MmM3MDAwMDAwMDAsIDB4ZjNiM2JjMjYwMDAwMDAwMCwgMHgxMjA1ZWVjOTAwMDAwMDAwLAorICAgIDB4NzBkODY4MjMwMDAwMDAwMCwgMHg5MTZlM2FjYzAwMDAwMDAwLCAweGQxMmVhMDQ5MDAwMDAwMDAsCisgICAgMHgzMDk4ZjJhNjAwMDAwMDAwLCAweDUyNDU3NDRjMDAwMDAwMDAsIDB4YjNmMzI2YTMwMDAwMDAwMCwKKyAgICAweGQ3ZjkwODQyMDAwMDAwMDAsIDB4MzY0ZjVhYWQwMDAwMDAwMCwgMHg1NDkyZGM0NzAwMDAwMDAwLAorICAgIDB4YjUyNDhlYTgwMDAwMDAwMCwgMHhkZDgwZjE1ZTAwMDAwMDAwLCAweDNjMzZhM2IxMDAwMDAwMDAsCisgICAgMHg1ZWViMjU1YjAwMDAwMDAwLCAweGJmNWQ3N2I0MDAwMDAwMDAsIDB4ZGI1NzU5NTUwMDAwMDAwMCwKKyAgICAweDNhZTEwYmJhMDAwMDAwMDAsIDB4NTgzYzhkNTAwMDAwMDAwMCwgMHhiOThhZGZiZjAwMDAwMDAwLAorICAgIDB4Yzk3MjAzNjcwMDAwMDAwMCwgMHgyOGM0NTE4ODAwMDAwMDAwLCAweDRhMTlkNzYyMDAwMDAwMDAsCisgICAgMHhhYmFmODU4ZDAwMDAwMDAwLCAweGNmYTVhYjZjMDAwMDAwMDAsIDB4MmUxM2Y5ODMwMDAwMDAwMCwKKyAgICAweDRjY2U3ZjY5MDAwMDAwMDAsIDB4YWQ3ODJkODYwMDAwMDAwMCwgMHhjNWRjNTI3MDAwMDAwMDAwLAorICAgIDB4MjQ2YTAwOWYwMDAwMDAwMCwgMHg0NmI3ODY3NTAwMDAwMDAwLCAweGE3MDFkNDlhMDAwMDAwMDAsCisgICAgMHhjMzBiZmE3YjAwMDAwMDAwLCAweDIyYmRhODk0MDAwMDAwMDAsIDB4NDA2MDJlN2UwMDAwMDAwMCwKKyAgICAweGExZDY3YzkxMDAwMDAwMDB9LAorICAgezB4MDAwMDAwMDAwMDAwMDAwMCwgMHg1ODgwZTJkNzAwMDAwMDAwLCAweGYxMDZiNDc0MDAwMDAwMDAsCisgICAgMHhhOTg2NTZhMzAwMDAwMDAwLCAweGUyMGQ2OGU5MDAwMDAwMDAsIDB4YmE4ZDhhM2UwMDAwMDAwMCwKKyAgICAweDEzMGJkYzlkMDAwMDAwMDAsIDB4NGI4YjNlNGEwMDAwMDAwMCwgMHg4NTFkYTEwOTAwMDAwMDAwLAorICAgIDB4ZGQ5ZDQzZGUwMDAwMDAwMCwgMHg3NDFiMTU3ZDAwMDAwMDAwLCAweDJjOWJmN2FhMDAwMDAwMDAsCisgICAgMHg2NzEwYzllMDAwMDAwMDAwLCAweDNmOTAyYjM3MDAwMDAwMDAsIDB4OTYxNjdkOTQwMDAwMDAwMCwKKyAgICAweGNlOTY5ZjQzMDAwMDAwMDAsIDB4MGEzYjQyMTMwMDAwMDAwMCwgMHg1MmJiYTBjNDAwMDAwMDAwLAorICAgIDB4ZmIzZGY2NjcwMDAwMDAwMCwgMHhhM2JkMTRiMDAwMDAwMDAwLCAweGU4MzYyYWZhMDAwMDAwMDAsCisgICAgMHhiMGI2YzgyZDAwMDAwMDAwLCAweDE5MzA5ZThlMDAwMDAwMDAsIDB4NDFiMDdjNTkwMDAwMDAwMCwKKyAgICAweDhmMjZlMzFhMDAwMDAwMDAsIDB4ZDdhNjAxY2QwMDAwMDAwMCwgMHg3ZTIwNTc2ZTAwMDAwMDAwLAorICAgIDB4MjZhMGI1YjkwMDAwMDAwMCwgMHg2ZDJiOGJmMzAwMDAwMDAwLCAweDM1YWI2OTI0MDAwMDAwMDAsCisgICAgMHg5YzJkM2Y4NzAwMDAwMDAwLCAweGM0YWRkZDUwMDAwMDAwMDAsIDB4MTQ3Njg0MjYwMDAwMDAwMCwKKyAgICAweDRjZjY2NmYxMDAwMDAwMDAsIDB4ZTU3MDMwNTIwMDAwMDAwMCwgMHhiZGYwZDI4NTAwMDAwMDAwLAorICAgIDB4ZjY3YmVjY2YwMDAwMDAwMCwgMHhhZWZiMGUxODAwMDAwMDAwLCAweDA3N2Q1OGJiMDAwMDAwMDAsCisgICAgMHg1ZmZkYmE2YzAwMDAwMDAwLCAweDkxNmIyNTJmMDAwMDAwMDAsIDB4YzllYmM3ZjgwMDAwMDAwMCwKKyAgICAweDYwNmQ5MTViMDAwMDAwMDAsIDB4MzhlZDczOGMwMDAwMDAwMCwgMHg3MzY2NGRjNjAwMDAwMDAwLAorICAgIDB4MmJlNmFmMTEwMDAwMDAwMCwgMHg4MjYwZjliMjAwMDAwMDAwLCAweGRhZTAxYjY1MDAwMDAwMDAsCisgICAgMHgxZTRkYzYzNTAwMDAwMDAwLCAweDQ2Y2QyNGUyMDAwMDAwMDAsIDB4ZWY0YjcyNDEwMDAwMDAwMCwKKyAgICAweGI3Y2I5MDk2MDAwMDAwMDAsIDB4ZmM0MGFlZGMwMDAwMDAwMCwgMHhhNGMwNGMwYjAwMDAwMDAwLAorICAgIDB4MGQ0NjFhYTgwMDAwMDAwMCwgMHg1NWM2Zjg3ZjAwMDAwMDAwLCAweDliNTA2NzNjMDAwMDAwMDAsCisgICAgMHhjM2QwODVlYjAwMDAwMDAwLCAweDZhNTZkMzQ4MDAwMDAwMDAsIDB4MzJkNjMxOWYwMDAwMDAwMCwKKyAgICAweDc5NWQwZmQ1MDAwMDAwMDAsIDB4MjFkZGVkMDIwMDAwMDAwMCwgMHg4ODViYmJhMTAwMDAwMDAwLAorICAgIDB4ZDBkYjU5NzYwMDAwMDAwMCwgMHgyOGVjMDg0ZDAwMDAwMDAwLCAweDcwNmNlYTlhMDAwMDAwMDAsCisgICAgMHhkOWVhYmMzOTAwMDAwMDAwLCAweDgxNmE1ZWVlMDAwMDAwMDAsIDB4Y2FlMTYwYTQwMDAwMDAwMCwKKyAgICAweDkyNjE4MjczMDAwMDAwMDAsIDB4M2JlN2Q0ZDAwMDAwMDAwMCwgMHg2MzY3MzYwNzAwMDAwMDAwLAorICAgIDB4YWRmMWE5NDQwMDAwMDAwMCwgMHhmNTcxNGI5MzAwMDAwMDAwLCAweDVjZjcxZDMwMDAwMDAwMDAsCisgICAgMHgwNDc3ZmZlNzAwMDAwMDAwLCAweDRmZmNjMWFkMDAwMDAwMDAsIDB4MTc3YzIzN2EwMDAwMDAwMCwKKyAgICAweGJlZmE3NWQ5MDAwMDAwMDAsIDB4ZTY3YTk3MGUwMDAwMDAwMCwgMHgyMmQ3NGE1ZTAwMDAwMDAwLAorICAgIDB4N2E1N2E4ODkwMDAwMDAwMCwgMHhkM2QxZmUyYTAwMDAwMDAwLCAweDhiNTExY2ZkMDAwMDAwMDAsCisgICAgMHhjMGRhMjJiNzAwMDAwMDAwLCAweDk4NWFjMDYwMDAwMDAwMDAsIDB4MzFkYzk2YzMwMDAwMDAwMCwKKyAgICAweDY5NWM3NDE0MDAwMDAwMDAsIDB4YTdjYWViNTcwMDAwMDAwMCwgMHhmZjRhMDk4MDAwMDAwMDAwLAorICAgIDB4NTZjYzVmMjMwMDAwMDAwMCwgMHgwZTRjYmRmNDAwMDAwMDAwLCAweDQ1Yzc4M2JlMDAwMDAwMDAsCisgICAgMHgxZDQ3NjE2OTAwMDAwMDAwLCAweGI0YzEzN2NhMDAwMDAwMDAsIDB4ZWM0MWQ1MWQwMDAwMDAwMCwKKyAgICAweDNjOWE4YzZiMDAwMDAwMDAsIDB4NjQxYTZlYmMwMDAwMDAwMCwgMHhjZDljMzgxZjAwMDAwMDAwLAorICAgIDB4OTUxY2RhYzgwMDAwMDAwMCwgMHhkZTk3ZTQ4MjAwMDAwMDAwLCAweDg2MTcwNjU1MDAwMDAwMDAsCisgICAgMHgyZjkxNTBmNjAwMDAwMDAwLCAweDc3MTFiMjIxMDAwMDAwMDAsIDB4Yjk4NzJkNjIwMDAwMDAwMCwKKyAgICAweGUxMDdjZmI1MDAwMDAwMDAsIDB4NDg4MTk5MTYwMDAwMDAwMCwgMHgxMDAxN2JjMTAwMDAwMDAwLAorICAgIDB4NWI4YTQ1OGIwMDAwMDAwMCwgMHgwMzBhYTc1YzAwMDAwMDAwLCAweGFhOGNmMWZmMDAwMDAwMDAsCisgICAgMHhmMjBjMTMyODAwMDAwMDAwLCAweDM2YTFjZTc4MDAwMDAwMDAsIDB4NmUyMTJjYWYwMDAwMDAwMCwKKyAgICAweGM3YTc3YTBjMDAwMDAwMDAsIDB4OWYyNzk4ZGIwMDAwMDAwMCwgMHhkNGFjYTY5MTAwMDAwMDAwLAorICAgIDB4OGMyYzQ0NDYwMDAwMDAwMCwgMHgyNWFhMTJlNTAwMDAwMDAwLCAweDdkMmFmMDMyMDAwMDAwMDAsCisgICAgMHhiM2JjNmY3MTAwMDAwMDAwLCAweGViM2M4ZGE2MDAwMDAwMDAsIDB4NDJiYWRiMDUwMDAwMDAwMCwKKyAgICAweDFhM2EzOWQyMDAwMDAwMDAsIDB4NTFiMTA3OTgwMDAwMDAwMCwgMHgwOTMxZTU0ZjAwMDAwMDAwLAorICAgIDB4YTBiN2IzZWMwMDAwMDAwMCwgMHhmODM3NTEzYjAwMDAwMDAwLCAweDUwZDgxMTlhMDAwMDAwMDAsCisgICAgMHgwODU4ZjM0ZDAwMDAwMDAwLCAweGExZGVhNWVlMDAwMDAwMDAsIDB4Zjk1ZTQ3MzkwMDAwMDAwMCwKKyAgICAweGIyZDU3OTczMDAwMDAwMDAsIDB4ZWE1NTliYTQwMDAwMDAwMCwgMHg0M2QzY2QwNzAwMDAwMDAwLAorICAgIDB4MWI1MzJmZDAwMDAwMDAwMCwgMHhkNWM1YjA5MzAwMDAwMDAwLCAweDhkNDU1MjQ0MDAwMDAwMDAsCisgICAgMHgyNGMzMDRlNzAwMDAwMDAwLCAweDdjNDNlNjMwMDAwMDAwMDAsIDB4MzdjOGQ4N2EwMDAwMDAwMCwKKyAgICAweDZmNDgzYWFkMDAwMDAwMDAsIDB4YzZjZTZjMGUwMDAwMDAwMCwgMHg5ZTRlOGVkOTAwMDAwMDAwLAorICAgIDB4NWFlMzUzODkwMDAwMDAwMCwgMHgwMjYzYjE1ZTAwMDAwMDAwLCAweGFiZTVlN2ZkMDAwMDAwMDAsCisgICAgMHhmMzY1MDUyYTAwMDAwMDAwLCAweGI4ZWUzYjYwMDAwMDAwMDAsIDB4ZTA2ZWQ5YjcwMDAwMDAwMCwKKyAgICAweDQ5ZTg4ZjE0MDAwMDAwMDAsIDB4MTE2ODZkYzMwMDAwMDAwMCwgMHhkZmZlZjI4MDAwMDAwMDAwLAorICAgIDB4ODc3ZTEwNTcwMDAwMDAwMCwgMHgyZWY4NDZmNDAwMDAwMDAwLCAweDc2NzhhNDIzMDAwMDAwMDAsCisgICAgMHgzZGYzOWE2OTAwMDAwMDAwLCAweDY1NzM3OGJlMDAwMDAwMDAsIDB4Y2NmNTJlMWQwMDAwMDAwMCwKKyAgICAweDk0NzVjY2NhMDAwMDAwMDAsIDB4NDRhZTk1YmMwMDAwMDAwMCwgMHgxYzJlNzc2YjAwMDAwMDAwLAorICAgIDB4YjVhODIxYzgwMDAwMDAwMCwgMHhlZDI4YzMxZjAwMDAwMDAwLCAweGE2YTNmZDU1MDAwMDAwMDAsCisgICAgMHhmZTIzMWY4MjAwMDAwMDAwLCAweDU3YTU0OTIxMDAwMDAwMDAsIDB4MGYyNWFiZjYwMDAwMDAwMCwKKyAgICAweGMxYjMzNGI1MDAwMDAwMDAsIDB4OTkzM2Q2NjIwMDAwMDAwMCwgMHgzMGI1ODBjMTAwMDAwMDAwLAorICAgIDB4NjgzNTYyMTYwMDAwMDAwMCwgMHgyM2JlNWM1YzAwMDAwMDAwLCAweDdiM2ViZThiMDAwMDAwMDAsCisgICAgMHhkMmI4ZTgyODAwMDAwMDAwLCAweDhhMzgwYWZmMDAwMDAwMDAsIDB4NGU5NWQ3YWYwMDAwMDAwMCwKKyAgICAweDE2MTUzNTc4MDAwMDAwMDAsIDB4YmY5MzYzZGIwMDAwMDAwMCwgMHhlNzEzODEwYzAwMDAwMDAwLAorICAgIDB4YWM5OGJmNDYwMDAwMDAwMCwgMHhmNDE4NWQ5MTAwMDAwMDAwLCAweDVkOWUwYjMyMDAwMDAwMDAsCisgICAgMHgwNTFlZTllNTAwMDAwMDAwLCAweGNiODg3NmE2MDAwMDAwMDAsIDB4OTMwODk0NzEwMDAwMDAwMCwKKyAgICAweDNhOGVjMmQyMDAwMDAwMDAsIDB4NjIwZTIwMDUwMDAwMDAwMCwgMHgyOTg1MWU0ZjAwMDAwMDAwLAorICAgIDB4NzEwNWZjOTgwMDAwMDAwMCwgMHhkODgzYWEzYjAwMDAwMDAwLCAweDgwMDM0OGVjMDAwMDAwMDAsCisgICAgMHg3ODM0MTlkNzAwMDAwMDAwLCAweDIwYjRmYjAwMDAwMDAwMDAsIDB4ODkzMmFkYTMwMDAwMDAwMCwKKyAgICAweGQxYjI0Zjc0MDAwMDAwMDAsIDB4OWEzOTcxM2UwMDAwMDAwMCwgMHhjMmI5OTNlOTAwMDAwMDAwLAorICAgIDB4NmIzZmM1NGEwMDAwMDAwMCwgMHgzM2JmMjc5ZDAwMDAwMDAwLCAweGZkMjliOGRlMDAwMDAwMDAsCisgICAgMHhhNWE5NWEwOTAwMDAwMDAwLCAweDBjMmYwY2FhMDAwMDAwMDAsIDB4NTRhZmVlN2QwMDAwMDAwMCwKKyAgICAweDFmMjRkMDM3MDAwMDAwMDAsIDB4NDdhNDMyZTAwMDAwMDAwMCwgMHhlZTIyNjQ0MzAwMDAwMDAwLAorICAgIDB4YjZhMjg2OTQwMDAwMDAwMCwgMHg3MjBmNWJjNDAwMDAwMDAwLCAweDJhOGZiOTEzMDAwMDAwMDAsCisgICAgMHg4MzA5ZWZiMDAwMDAwMDAwLCAweGRiODkwZDY3MDAwMDAwMDAsIDB4OTAwMjMzMmQwMDAwMDAwMCwKKyAgICAweGM4ODJkMWZhMDAwMDAwMDAsIDB4NjEwNDg3NTkwMDAwMDAwMCwgMHgzOTg0NjU4ZTAwMDAwMDAwLAorICAgIDB4ZjcxMmZhY2QwMDAwMDAwMCwgMHhhZjkyMTgxYTAwMDAwMDAwLCAweDA2MTQ0ZWI5MDAwMDAwMDAsCisgICAgMHg1ZTk0YWM2ZTAwMDAwMDAwLCAweDE1MWY5MjI0MDAwMDAwMDAsIDB4NGQ5ZjcwZjMwMDAwMDAwMCwKKyAgICAweGU0MTkyNjUwMDAwMDAwMDAsIDB4YmM5OWM0ODcwMDAwMDAwMCwgMHg2YzQyOWRmMTAwMDAwMDAwLAorICAgIDB4MzRjMjdmMjYwMDAwMDAwMCwgMHg5ZDQ0Mjk4NTAwMDAwMDAwLCAweGM1YzRjYjUyMDAwMDAwMDAsCisgICAgMHg4ZTRmZjUxODAwMDAwMDAwLCAweGQ2Y2YxN2NmMDAwMDAwMDAsIDB4N2Y0OTQxNmMwMDAwMDAwMCwKKyAgICAweDI3YzlhM2JiMDAwMDAwMDAsIDB4ZTk1ZjNjZjgwMDAwMDAwMCwgMHhiMWRmZGUyZjAwMDAwMDAwLAorICAgIDB4MTg1OTg4OGMwMDAwMDAwMCwgMHg0MGQ5NmE1YjAwMDAwMDAwLCAweDBiNTI1NDExMDAwMDAwMDAsCisgICAgMHg1M2QyYjZjNjAwMDAwMDAwLCAweGZhNTRlMDY1MDAwMDAwMDAsIDB4YTJkNDAyYjIwMDAwMDAwMCwKKyAgICAweDY2NzlkZmUyMDAwMDAwMDAsIDB4M2VmOTNkMzUwMDAwMDAwMCwgMHg5NzdmNmI5NjAwMDAwMDAwLAorICAgIDB4Y2ZmZjg5NDEwMDAwMDAwMCwgMHg4NDc0YjcwYjAwMDAwMDAwLCAweGRjZjQ1NWRjMDAwMDAwMDAsCisgICAgMHg3NTcyMDM3ZjAwMDAwMDAwLCAweDJkZjJlMWE4MDAwMDAwMDAsIDB4ZTM2NDdlZWIwMDAwMDAwMCwKKyAgICAweGJiZTQ5YzNjMDAwMDAwMDAsIDB4MTI2MmNhOWYwMDAwMDAwMCwgMHg0YWUyMjg0ODAwMDAwMDAwLAorICAgIDB4MDE2OTE2MDIwMDAwMDAwMCwgMHg1OWU5ZjRkNTAwMDAwMDAwLCAweGYwNmZhMjc2MDAwMDAwMDAsCisgICAgMHhhOGVmNDBhMTAwMDAwMDAwfSwKKyAgIHsweDAwMDAwMDAwMDAwMDAwMDAsIDB4NDYzYjY3NjUwMDAwMDAwMCwgMHg4Yzc2Y2VjYTAwMDAwMDAwLAorICAgIDB4Y2E0ZGE5YWYwMDAwMDAwMCwgMHg1OWViZWQ0ZTAwMDAwMDAwLCAweDFmZDA4YTJiMDAwMDAwMDAsCisgICAgMHhkNTlkMjM4NDAwMDAwMDAwLCAweDkzYTY0NGUxMDAwMDAwMDAsIDB4YjJkNmRiOWQwMDAwMDAwMCwKKyAgICAweGY0ZWRiY2Y4MDAwMDAwMDAsIDB4M2VhMDE1NTcwMDAwMDAwMCwgMHg3ODliNzIzMjAwMDAwMDAwLAorICAgIDB4ZWIzZDM2ZDMwMDAwMDAwMCwgMHhhZDA2NTFiNjAwMDAwMDAwLCAweDY3NGJmODE5MDAwMDAwMDAsCisgICAgMHgyMTcwOWY3YzAwMDAwMDAwLCAweDI1YWJjNmUwMDAwMDAwMDAsIDB4NjM5MGExODUwMDAwMDAwMCwKKyAgICAweGE5ZGQwODJhMDAwMDAwMDAsIDB4ZWZlNjZmNGYwMDAwMDAwMCwgMHg3YzQwMmJhZTAwMDAwMDAwLAorICAgIDB4M2E3YjRjY2IwMDAwMDAwMCwgMHhmMDM2ZTU2NDAwMDAwMDAwLCAweGI2MGQ4MjAxMDAwMDAwMDAsCisgICAgMHg5NzdkMWQ3ZDAwMDAwMDAwLCAweGQxNDY3YTE4MDAwMDAwMDAsIDB4MWIwYmQzYjcwMDAwMDAwMCwKKyAgICAweDVkMzBiNGQyMDAwMDAwMDAsIDB4Y2U5NmYwMzMwMDAwMDAwMCwgMHg4OGFkOTc1NjAwMDAwMDAwLAorICAgIDB4NDJlMDNlZjkwMDAwMDAwMCwgMHgwNGRiNTk5YzAwMDAwMDAwLCAweDBiNTBmYzFhMDAwMDAwMDAsCisgICAgMHg0ZDZiOWI3ZjAwMDAwMDAwLCAweDg3MjYzMmQwMDAwMDAwMDAsIDB4YzExZDU1YjUwMDAwMDAwMCwKKyAgICAweDUyYmIxMTU0MDAwMDAwMDAsIDB4MTQ4MDc2MzEwMDAwMDAwMCwgMHhkZWNkZGY5ZTAwMDAwMDAwLAorICAgIDB4OThmNmI4ZmIwMDAwMDAwMCwgMHhiOTg2Mjc4NzAwMDAwMDAwLCAweGZmYmQ0MGUyMDAwMDAwMDAsCisgICAgMHgzNWYwZTk0ZDAwMDAwMDAwLCAweDczY2I4ZTI4MDAwMDAwMDAsIDB4ZTA2ZGNhYzkwMDAwMDAwMCwKKyAgICAweGE2NTZhZGFjMDAwMDAwMDAsIDB4NmMxYjA0MDMwMDAwMDAwMCwgMHgyYTIwNjM2NjAwMDAwMDAwLAorICAgIDB4MmVmYjNhZmEwMDAwMDAwMCwgMHg2OGMwNWQ5ZjAwMDAwMDAwLCAweGEyOGRmNDMwMDAwMDAwMDAsCisgICAgMHhlNGI2OTM1NTAwMDAwMDAwLCAweDc3MTBkN2I0MDAwMDAwMDAsIDB4MzEyYmIwZDEwMDAwMDAwMCwKKyAgICAweGZiNjYxOTdlMDAwMDAwMDAsIDB4YmQ1ZDdlMWIwMDAwMDAwMCwgMHg5YzJkZTE2NzAwMDAwMDAwLAorICAgIDB4ZGExNjg2MDIwMDAwMDAwMCwgMHgxMDViMmZhZDAwMDAwMDAwLCAweDU2NjA0OGM4MDAwMDAwMDAsCisgICAgMHhjNWM2MGMyOTAwMDAwMDAwLCAweDgzZmQ2YjRjMDAwMDAwMDAsIDB4NDliMGMyZTMwMDAwMDAwMCwKKyAgICAweDBmOGJhNTg2MDAwMDAwMDAsIDB4MTZhMGY4MzUwMDAwMDAwMCwgMHg1MDliOWY1MDAwMDAwMDAwLAorICAgIDB4OWFkNjM2ZmYwMDAwMDAwMCwgMHhkY2VkNTE5YTAwMDAwMDAwLCAweDRmNGIxNTdiMDAwMDAwMDAsCisgICAgMHgwOTcwNzIxZTAwMDAwMDAwLCAweGMzM2RkYmIxMDAwMDAwMDAsIDB4ODUwNmJjZDQwMDAwMDAwMCwKKyAgICAweGE0NzYyM2E4MDAwMDAwMDAsIDB4ZTI0ZDQ0Y2QwMDAwMDAwMCwgMHgyODAwZWQ2MjAwMDAwMDAwLAorICAgIDB4NmUzYjhhMDcwMDAwMDAwMCwgMHhmZDlkY2VlNjAwMDAwMDAwLCAweGJiYTZhOTgzMDAwMDAwMDAsCisgICAgMHg3MWViMDAyYzAwMDAwMDAwLCAweDM3ZDA2NzQ5MDAwMDAwMDAsIDB4MzMwYjNlZDUwMDAwMDAwMCwKKyAgICAweDc1MzA1OWIwMDAwMDAwMDAsIDB4YmY3ZGYwMWYwMDAwMDAwMCwgMHhmOTQ2OTc3YTAwMDAwMDAwLAorICAgIDB4NmFlMGQzOWIwMDAwMDAwMCwgMHgyY2RiYjRmZTAwMDAwMDAwLCAweGU2OTYxZDUxMDAwMDAwMDAsCisgICAgMHhhMGFkN2EzNDAwMDAwMDAwLCAweDgxZGRlNTQ4MDAwMDAwMDAsIDB4YzdlNjgyMmQwMDAwMDAwMCwKKyAgICAweDBkYWIyYjgyMDAwMDAwMDAsIDB4NGI5MDRjZTcwMDAwMDAwMCwgMHhkODM2MDgwNjAwMDAwMDAwLAorICAgIDB4OWUwZDZmNjMwMDAwMDAwMCwgMHg1NDQwYzZjYzAwMDAwMDAwLCAweDEyN2JhMWE5MDAwMDAwMDAsCisgICAgMHgxZGYwMDQyZjAwMDAwMDAwLCAweDViY2I2MzRhMDAwMDAwMDAsIDB4OTE4NmNhZTUwMDAwMDAwMCwKKyAgICAweGQ3YmRhZDgwMDAwMDAwMDAsIDB4NDQxYmU5NjEwMDAwMDAwMCwgMHgwMjIwOGUwNDAwMDAwMDAwLAorICAgIDB4Yzg2ZDI3YWIwMDAwMDAwMCwgMHg4ZTU2NDBjZTAwMDAwMDAwLCAweGFmMjZkZmIyMDAwMDAwMDAsCisgICAgMHhlOTFkYjhkNzAwMDAwMDAwLCAweDIzNTAxMTc4MDAwMDAwMDAsIDB4NjU2Yjc2MWQwMDAwMDAwMCwKKyAgICAweGY2Y2QzMmZjMDAwMDAwMDAsIDB4YjBmNjU1OTkwMDAwMDAwMCwgMHg3YWJiZmMzNjAwMDAwMDAwLAorICAgIDB4M2M4MDliNTMwMDAwMDAwMCwgMHgzODViYzJjZjAwMDAwMDAwLCAweDdlNjBhNWFhMDAwMDAwMDAsCisgICAgMHhiNDJkMGMwNTAwMDAwMDAwLCAweGYyMTY2YjYwMDAwMDAwMDAsIDB4NjFiMDJmODEwMDAwMDAwMCwKKyAgICAweDI3OGI0OGU0MDAwMDAwMDAsIDB4ZWRjNmUxNGIwMDAwMDAwMCwgMHhhYmZkODYyZTAwMDAwMDAwLAorICAgIDB4OGE4ZDE5NTIwMDAwMDAwMCwgMHhjY2I2N2UzNzAwMDAwMDAwLCAweDA2ZmJkNzk4MDAwMDAwMDAsCisgICAgMHg0MGMwYjBmZDAwMDAwMDAwLCAweGQzNjZmNDFjMDAwMDAwMDAsIDB4OTU1ZDkzNzkwMDAwMDAwMCwKKyAgICAweDVmMTAzYWQ2MDAwMDAwMDAsIDB4MTkyYjVkYjMwMDAwMDAwMCwgMHgyYzQwZjE2YjAwMDAwMDAwLAorICAgIDB4NmE3Yjk2MGUwMDAwMDAwMCwgMHhhMDM2M2ZhMTAwMDAwMDAwLCAweGU2MGQ1OGM0MDAwMDAwMDAsCisgICAgMHg3NWFiMWMyNTAwMDAwMDAwLCAweDMzOTA3YjQwMDAwMDAwMDAsIDB4ZjlkZGQyZWYwMDAwMDAwMCwKKyAgICAweGJmZTZiNThhMDAwMDAwMDAsIDB4OWU5NjJhZjYwMDAwMDAwMCwgMHhkOGFkNGQ5MzAwMDAwMDAwLAorICAgIDB4MTJlMGU0M2MwMDAwMDAwMCwgMHg1NGRiODM1OTAwMDAwMDAwLCAweGM3N2RjN2I4MDAwMDAwMDAsCisgICAgMHg4MTQ2YTBkZDAwMDAwMDAwLCAweDRiMGIwOTcyMDAwMDAwMDAsIDB4MGQzMDZlMTcwMDAwMDAwMCwKKyAgICAweDA5ZWIzNzhiMDAwMDAwMDAsIDB4NGZkMDUwZWUwMDAwMDAwMCwgMHg4NTlkZjk0MTAwMDAwMDAwLAorICAgIDB4YzNhNjllMjQwMDAwMDAwMCwgMHg1MDAwZGFjNTAwMDAwMDAwLCAweDE2M2JiZGEwMDAwMDAwMDAsCisgICAgMHhkYzc2MTQwZjAwMDAwMDAwLCAweDlhNGQ3MzZhMDAwMDAwMDAsIDB4YmIzZGVjMTYwMDAwMDAwMCwKKyAgICAweGZkMDY4YjczMDAwMDAwMDAsIDB4Mzc0YjIyZGMwMDAwMDAwMCwgMHg3MTcwNDViOTAwMDAwMDAwLAorICAgIDB4ZTJkNjAxNTgwMDAwMDAwMCwgMHhhNGVkNjYzZDAwMDAwMDAwLCAweDZlYTBjZjkyMDAwMDAwMDAsCisgICAgMHgyODliYThmNzAwMDAwMDAwLCAweDI3MTAwZDcxMDAwMDAwMDAsIDB4NjEyYjZhMTQwMDAwMDAwMCwKKyAgICAweGFiNjZjM2JiMDAwMDAwMDAsIDB4ZWQ1ZGE0ZGUwMDAwMDAwMCwgMHg3ZWZiZTAzZjAwMDAwMDAwLAorICAgIDB4MzhjMDg3NWEwMDAwMDAwMCwgMHhmMjhkMmVmNTAwMDAwMDAwLCAweGI0YjY0OTkwMDAwMDAwMDAsCisgICAgMHg5NWM2ZDZlYzAwMDAwMDAwLCAweGQzZmRiMTg5MDAwMDAwMDAsIDB4MTliMDE4MjYwMDAwMDAwMCwKKyAgICAweDVmOGI3ZjQzMDAwMDAwMDAsIDB4Y2MyZDNiYTIwMDAwMDAwMCwgMHg4YTE2NWNjNzAwMDAwMDAwLAorICAgIDB4NDA1YmY1NjgwMDAwMDAwMCwgMHgwNjYwOTIwZDAwMDAwMDAwLCAweDAyYmJjYjkxMDAwMDAwMDAsCisgICAgMHg0NDgwYWNmNDAwMDAwMDAwLCAweDhlY2QwNTViMDAwMDAwMDAsIDB4YzhmNjYyM2UwMDAwMDAwMCwKKyAgICAweDViNTAyNmRmMDAwMDAwMDAsIDB4MWQ2YjQxYmEwMDAwMDAwMCwgMHhkNzI2ZTgxNTAwMDAwMDAwLAorICAgIDB4OTExZDhmNzAwMDAwMDAwMCwgMHhiMDZkMTAwYzAwMDAwMDAwLCAweGY2NTY3NzY5MDAwMDAwMDAsCisgICAgMHgzYzFiZGVjNjAwMDAwMDAwLCAweDdhMjBiOWEzMDAwMDAwMDAsIDB4ZTk4NmZkNDIwMDAwMDAwMCwKKyAgICAweGFmYmQ5YTI3MDAwMDAwMDAsIDB4NjVmMDMzODgwMDAwMDAwMCwgMHgyM2NiNTRlZDAwMDAwMDAwLAorICAgIDB4M2FlMDA5NWUwMDAwMDAwMCwgMHg3Y2RiNmUzYjAwMDAwMDAwLCAweGI2OTZjNzk0MDAwMDAwMDAsCisgICAgMHhmMGFkYTBmMTAwMDAwMDAwLCAweDYzMGJlNDEwMDAwMDAwMDAsIDB4MjUzMDgzNzUwMDAwMDAwMCwKKyAgICAweGVmN2QyYWRhMDAwMDAwMDAsIDB4YTk0NjRkYmYwMDAwMDAwMCwgMHg4ODM2ZDJjMzAwMDAwMDAwLAorICAgIDB4Y2UwZGI1YTYwMDAwMDAwMCwgMHgwNDQwMWMwOTAwMDAwMDAwLCAweDQyN2I3YjZjMDAwMDAwMDAsCisgICAgMHhkMWRkM2Y4ZDAwMDAwMDAwLCAweDk3ZTY1OGU4MDAwMDAwMDAsIDB4NWRhYmYxNDcwMDAwMDAwMCwKKyAgICAweDFiOTA5NjIyMDAwMDAwMDAsIDB4MWY0YmNmYmUwMDAwMDAwMCwgMHg1OTcwYThkYjAwMDAwMDAwLAorICAgIDB4OTMzZDAxNzQwMDAwMDAwMCwgMHhkNTA2NjYxMTAwMDAwMDAwLCAweDQ2YTAyMmYwMDAwMDAwMDAsCisgICAgMHgwMDliNDU5NTAwMDAwMDAwLCAweGNhZDZlYzNhMDAwMDAwMDAsIDB4OGNlZDhiNWYwMDAwMDAwMCwKKyAgICAweGFkOWQxNDIzMDAwMDAwMDAsIDB4ZWJhNjczNDYwMDAwMDAwMCwgMHgyMWViZGFlOTAwMDAwMDAwLAorICAgIDB4NjdkMGJkOGMwMDAwMDAwMCwgMHhmNDc2Zjk2ZDAwMDAwMDAwLCAweGIyNGQ5ZTA4MDAwMDAwMDAsCisgICAgMHg3ODAwMzdhNzAwMDAwMDAwLCAweDNlM2I1MGMyMDAwMDAwMDAsIDB4MzFiMGY1NDQwMDAwMDAwMCwKKyAgICAweDc3OGI5MjIxMDAwMDAwMDAsIDB4YmRjNjNiOGUwMDAwMDAwMCwgMHhmYmZkNWNlYjAwMDAwMDAwLAorICAgIDB4Njg1YjE4MGEwMDAwMDAwMCwgMHgyZTYwN2Y2ZjAwMDAwMDAwLCAweGU0MmRkNmMwMDAwMDAwMDAsCisgICAgMHhhMjE2YjFhNTAwMDAwMDAwLCAweDgzNjYyZWQ5MDAwMDAwMDAsIDB4YzU1ZDQ5YmMwMDAwMDAwMCwKKyAgICAweDBmMTBlMDEzMDAwMDAwMDAsIDB4NDkyYjg3NzYwMDAwMDAwMCwgMHhkYThkYzM5NzAwMDAwMDAwLAorICAgIDB4OWNiNmE0ZjIwMDAwMDAwMCwgMHg1NmZiMGQ1ZDAwMDAwMDAwLCAweDEwYzA2YTM4MDAwMDAwMDAsCisgICAgMHgxNDFiMzNhNDAwMDAwMDAwLCAweDUyMjA1NGMxMDAwMDAwMDAsIDB4OTg2ZGZkNmUwMDAwMDAwMCwKKyAgICAweGRlNTY5YTBiMDAwMDAwMDAsIDB4NGRmMGRlZWEwMDAwMDAwMCwgMHgwYmNiYjk4ZjAwMDAwMDAwLAorICAgIDB4YzE4NjEwMjAwMDAwMDAwMCwgMHg4N2JkNzc0NTAwMDAwMDAwLCAweGE2Y2RlODM5MDAwMDAwMDAsCisgICAgMHhlMGY2OGY1YzAwMDAwMDAwLCAweDJhYmIyNmYzMDAwMDAwMDAsIDB4NmM4MDQxOTYwMDAwMDAwMCwKKyAgICAweGZmMjYwNTc3MDAwMDAwMDAsIDB4YjkxZDYyMTIwMDAwMDAwMCwgMHg3MzUwY2JiZDAwMDAwMDAwLAorICAgIDB4MzU2YmFjZDgwMDAwMDAwMH0sCisgICB7MHgwMDAwMDAwMDAwMDAwMDAwLCAweDllODNkYTlmMDAwMDAwMDAsIDB4N2QwMWM0ZTQwMDAwMDAwMCwKKyAgICAweGUzODIxZTdiMDAwMDAwMDAsIDB4YmIwNGY5MTIwMDAwMDAwMCwgMHgyNTg3MjM4ZDAwMDAwMDAwLAorICAgIDB4YzYwNTNkZjYwMDAwMDAwMCwgMHg1ODg2ZTc2OTAwMDAwMDAwLCAweDc2MDlmMjI1MDAwMDAwMDAsCisgICAgMHhlODhhMjhiYTAwMDAwMDAwLCAweDBiMDgzNmMxMDAwMDAwMDAsIDB4OTU4YmVjNWUwMDAwMDAwMCwKKyAgICAweGNkMGQwYjM3MDAwMDAwMDAsIDB4NTM4ZWQxYTgwMDAwMDAwMCwgMHhiMDBjY2ZkMzAwMDAwMDAwLAorICAgIDB4MmU4ZjE1NGMwMDAwMDAwMCwgMHhlYzEyZTQ0YjAwMDAwMDAwLCAweDcyOTEzZWQ0MDAwMDAwMDAsCisgICAgMHg5MTEzMjBhZjAwMDAwMDAwLCAweDBmOTBmYTMwMDAwMDAwMDAsIDB4NTcxNjFkNTkwMDAwMDAwMCwKKyAgICAweGM5OTVjN2M2MDAwMDAwMDAsIDB4MmExN2Q5YmQwMDAwMDAwMCwgMHhiNDk0MDMyMjAwMDAwMDAwLAorICAgIDB4OWExYjE2NmUwMDAwMDAwMCwgMHgwNDk4Y2NmMTAwMDAwMDAwLCAweGU3MWFkMjhhMDAwMDAwMDAsCisgICAgMHg3OTk5MDgxNTAwMDAwMDAwLCAweDIxMWZlZjdjMDAwMDAwMDAsIDB4YmY5YzM1ZTMwMDAwMDAwMCwKKyAgICAweDVjMWUyYjk4MDAwMDAwMDAsIDB4YzI5ZGYxMDcwMDAwMDAwMCwgMHhkODI1Yzg5NzAwMDAwMDAwLAorICAgIDB4NDZhNjEyMDgwMDAwMDAwMCwgMHhhNTI0MGM3MzAwMDAwMDAwLCAweDNiYTdkNmVjMDAwMDAwMDAsCisgICAgMHg2MzIxMzE4NTAwMDAwMDAwLCAweGZkYTJlYjFhMDAwMDAwMDAsIDB4MWUyMGY1NjEwMDAwMDAwMCwKKyAgICAweDgwYTMyZmZlMDAwMDAwMDAsIDB4YWUyYzNhYjIwMDAwMDAwMCwgMHgzMGFmZTAyZDAwMDAwMDAwLAorICAgIDB4ZDMyZGZlNTYwMDAwMDAwMCwgMHg0ZGFlMjRjOTAwMDAwMDAwLCAweDE1MjhjM2EwMDAwMDAwMDAsCisgICAgMHg4YmFiMTkzZjAwMDAwMDAwLCAweDY4MjkwNzQ0MDAwMDAwMDAsIDB4ZjZhYWRkZGIwMDAwMDAwMCwKKyAgICAweDM0MzcyY2RjMDAwMDAwMDAsIDB4YWFiNGY2NDMwMDAwMDAwMCwgMHg0OTM2ZTgzODAwMDAwMDAwLAorICAgIDB4ZDdiNTMyYTcwMDAwMDAwMCwgMHg4ZjMzZDVjZTAwMDAwMDAwLCAweDExYjAwZjUxMDAwMDAwMDAsCisgICAgMHhmMjMyMTEyYTAwMDAwMDAwLCAweDZjYjFjYmI1MDAwMDAwMDAsIDB4NDIzZWRlZjkwMDAwMDAwMCwKKyAgICAweGRjYmQwNDY2MDAwMDAwMDAsIDB4M2YzZjFhMWQwMDAwMDAwMCwgMHhhMWJjYzA4MjAwMDAwMDAwLAorICAgIDB4ZjkzYTI3ZWIwMDAwMDAwMCwgMHg2N2I5ZmQ3NDAwMDAwMDAwLCAweDg0M2JlMzBmMDAwMDAwMDAsCisgICAgMHgxYWI4Mzk5MDAwMDAwMDAwLCAweGYxNGRlMWY0MDAwMDAwMDAsIDB4NmZjZTNiNmIwMDAwMDAwMCwKKyAgICAweDhjNGMyNTEwMDAwMDAwMDAsIDB4MTJjZmZmOGYwMDAwMDAwMCwgMHg0YTQ5MThlNjAwMDAwMDAwLAorICAgIDB4ZDRjYWMyNzkwMDAwMDAwMCwgMHgzNzQ4ZGMwMjAwMDAwMDAwLCAweGE5Y2IwNjlkMDAwMDAwMDAsCisgICAgMHg4NzQ0MTNkMTAwMDAwMDAwLCAweDE5YzdjOTRlMDAwMDAwMDAsIDB4ZmE0NWQ3MzUwMDAwMDAwMCwKKyAgICAweDY0YzYwZGFhMDAwMDAwMDAsIDB4M2M0MGVhYzMwMDAwMDAwMCwgMHhhMmMzMzA1YzAwMDAwMDAwLAorICAgIDB4NDE0MTJlMjcwMDAwMDAwMCwgMHhkZmMyZjRiODAwMDAwMDAwLCAweDFkNWYwNWJmMDAwMDAwMDAsCisgICAgMHg4M2RjZGYyMDAwMDAwMDAwLCAweDYwNWVjMTViMDAwMDAwMDAsIDB4ZmVkZDFiYzQwMDAwMDAwMCwKKyAgICAweGE2NWJmY2FkMDAwMDAwMDAsIDB4MzhkODI2MzIwMDAwMDAwMCwgMHhkYjVhMzg0OTAwMDAwMDAwLAorICAgIDB4NDVkOWUyZDYwMDAwMDAwMCwgMHg2YjU2Zjc5YTAwMDAwMDAwLCAweGY1ZDUyZDA1MDAwMDAwMDAsCisgICAgMHgxNjU3MzM3ZTAwMDAwMDAwLCAweDg4ZDRlOWUxMDAwMDAwMDAsIDB4ZDA1MjBlODgwMDAwMDAwMCwKKyAgICAweDRlZDFkNDE3MDAwMDAwMDAsIDB4YWQ1M2NhNmMwMDAwMDAwMCwgMHgzM2QwMTBmMzAwMDAwMDAwLAorICAgIDB4Mjk2ODI5NjMwMDAwMDAwMCwgMHhiN2ViZjNmYzAwMDAwMDAwLCAweDU0NjllZDg3MDAwMDAwMDAsCisgICAgMHhjYWVhMzcxODAwMDAwMDAwLCAweDkyNmNkMDcxMDAwMDAwMDAsIDB4MGNlZjBhZWUwMDAwMDAwMCwKKyAgICAweGVmNmQxNDk1MDAwMDAwMDAsIDB4NzFlZWNlMGEwMDAwMDAwMCwgMHg1ZjYxZGI0NjAwMDAwMDAwLAorICAgIDB4YzFlMjAxZDkwMDAwMDAwMCwgMHgyMjYwMWZhMjAwMDAwMDAwLCAweGJjZTNjNTNkMDAwMDAwMDAsCisgICAgMHhlNDY1MjI1NDAwMDAwMDAwLCAweDdhZTZmOGNiMDAwMDAwMDAsIDB4OTk2NGU2YjAwMDAwMDAwMCwKKyAgICAweDA3ZTczYzJmMDAwMDAwMDAsIDB4YzU3YWNkMjgwMDAwMDAwMCwgMHg1YmY5MTdiNzAwMDAwMDAwLAorICAgIDB4Yjg3YjA5Y2MwMDAwMDAwMCwgMHgyNmY4ZDM1MzAwMDAwMDAwLCAweDdlN2UzNDNhMDAwMDAwMDAsCisgICAgMHhlMGZkZWVhNTAwMDAwMDAwLCAweDAzN2ZmMGRlMDAwMDAwMDAsIDB4OWRmYzJhNDEwMDAwMDAwMCwKKyAgICAweGIzNzMzZjBkMDAwMDAwMDAsIDB4MmRmMGU1OTIwMDAwMDAwMCwgMHhjZTcyZmJlOTAwMDAwMDAwLAorICAgIDB4NTBmMTIxNzYwMDAwMDAwMCwgMHgwODc3YzYxZjAwMDAwMDAwLCAweDk2ZjQxYzgwMDAwMDAwMDAsCisgICAgMHg3NTc2MDJmYjAwMDAwMDAwLCAweGViZjVkODY0MDAwMDAwMDAsIDB4YTM5ZGIzMzIwMDAwMDAwMCwKKyAgICAweDNkMWU2OWFkMDAwMDAwMDAsIDB4ZGU5Yzc3ZDYwMDAwMDAwMCwgMHg0MDFmYWQ0OTAwMDAwMDAwLAorICAgIDB4MTg5OTRhMjAwMDAwMDAwMCwgMHg4NjFhOTBiZjAwMDAwMDAwLCAweDY1OTg4ZWM0MDAwMDAwMDAsCisgICAgMHhmYjFiNTQ1YjAwMDAwMDAwLCAweGQ1OTQ0MTE3MDAwMDAwMDAsIDB4NGIxNzliODgwMDAwMDAwMCwKKyAgICAweGE4OTU4NWYzMDAwMDAwMDAsIDB4MzYxNjVmNmMwMDAwMDAwMCwgMHg2ZTkwYjgwNTAwMDAwMDAwLAorICAgIDB4ZjAxMzYyOWEwMDAwMDAwMCwgMHgxMzkxN2NlMTAwMDAwMDAwLCAweDhkMTJhNjdlMDAwMDAwMDAsCisgICAgMHg0ZjhmNTc3OTAwMDAwMDAwLCAweGQxMGM4ZGU2MDAwMDAwMDAsIDB4MzI4ZTkzOWQwMDAwMDAwMCwKKyAgICAweGFjMGQ0OTAyMDAwMDAwMDAsIDB4ZjQ4YmFlNmIwMDAwMDAwMCwgMHg2YTA4NzRmNDAwMDAwMDAwLAorICAgIDB4ODk4YTZhOGYwMDAwMDAwMCwgMHgxNzA5YjAxMDAwMDAwMDAwLCAweDM5ODZhNTVjMDAwMDAwMDAsCisgICAgMHhhNzA1N2ZjMzAwMDAwMDAwLCAweDQ0ODc2MWI4MDAwMDAwMDAsIDB4ZGEwNGJiMjcwMDAwMDAwMCwKKyAgICAweDgyODI1YzRlMDAwMDAwMDAsIDB4MWMwMTg2ZDEwMDAwMDAwMCwgMHhmZjgzOThhYTAwMDAwMDAwLAorICAgIDB4NjEwMDQyMzUwMDAwMDAwMCwgMHg3YmI4N2JhNTAwMDAwMDAwLCAweGU1M2JhMTNhMDAwMDAwMDAsCisgICAgMHgwNmI5YmY0MTAwMDAwMDAwLCAweDk4M2E2NWRlMDAwMDAwMDAsIDB4YzBiYzgyYjcwMDAwMDAwMCwKKyAgICAweDVlM2Y1ODI4MDAwMDAwMDAsIDB4YmRiZDQ2NTMwMDAwMDAwMCwgMHgyMzNlOWNjYzAwMDAwMDAwLAorICAgIDB4MGRiMTg5ODAwMDAwMDAwMCwgMHg5MzMyNTMxZjAwMDAwMDAwLCAweDcwYjA0ZDY0MDAwMDAwMDAsCisgICAgMHhlZTMzOTdmYjAwMDAwMDAwLCAweGI2YjU3MDkyMDAwMDAwMDAsIDB4MjgzNmFhMGQwMDAwMDAwMCwKKyAgICAweGNiYjRiNDc2MDAwMDAwMDAsIDB4NTUzNzZlZTkwMDAwMDAwMCwgMHg5N2FhOWZlZTAwMDAwMDAwLAorICAgIDB4MDkyOTQ1NzEwMDAwMDAwMCwgMHhlYWFiNWIwYTAwMDAwMDAwLCAweDc0Mjg4MTk1MDAwMDAwMDAsCisgICAgMHgyY2FlNjZmYzAwMDAwMDAwLCAweGIyMmRiYzYzMDAwMDAwMDAsIDB4NTFhZmEyMTgwMDAwMDAwMCwKKyAgICAweGNmMmM3ODg3MDAwMDAwMDAsIDB4ZTFhMzZkY2IwMDAwMDAwMCwgMHg3ZjIwYjc1NDAwMDAwMDAwLAorICAgIDB4OWNhMmE5MmYwMDAwMDAwMCwgMHgwMjIxNzNiMDAwMDAwMDAwLCAweDVhYTc5NGQ5MDAwMDAwMDAsCisgICAgMHhjNDI0NGU0NjAwMDAwMDAwLCAweDI3YTY1MDNkMDAwMDAwMDAsIDB4YjkyNThhYTIwMDAwMDAwMCwKKyAgICAweDUyZDA1MmM2MDAwMDAwMDAsIDB4Y2M1Mzg4NTkwMDAwMDAwMCwgMHgyZmQxOTYyMjAwMDAwMDAwLAorICAgIDB4YjE1MjRjYmQwMDAwMDAwMCwgMHhlOWQ0YWJkNDAwMDAwMDAwLCAweDc3NTc3MTRiMDAwMDAwMDAsCisgICAgMHg5NGQ1NmYzMDAwMDAwMDAwLCAweDBhNTZiNWFmMDAwMDAwMDAsIDB4MjRkOWEwZTMwMDAwMDAwMCwKKyAgICAweGJhNWE3YTdjMDAwMDAwMDAsIDB4NTlkODY0MDcwMDAwMDAwMCwgMHhjNzViYmU5ODAwMDAwMDAwLAorICAgIDB4OWZkZDU5ZjEwMDAwMDAwMCwgMHgwMTVlODM2ZTAwMDAwMDAwLCAweGUyZGM5ZDE1MDAwMDAwMDAsCisgICAgMHg3YzVmNDc4YTAwMDAwMDAwLCAweGJlYzJiNjhkMDAwMDAwMDAsIDB4MjA0MTZjMTIwMDAwMDAwMCwKKyAgICAweGMzYzM3MjY5MDAwMDAwMDAsIDB4NWQ0MGE4ZjYwMDAwMDAwMCwgMHgwNWM2NGY5ZjAwMDAwMDAwLAorICAgIDB4OWI0NTk1MDAwMDAwMDAwMCwgMHg3OGM3OGI3YjAwMDAwMDAwLCAweGU2NDQ1MWU0MDAwMDAwMDAsCisgICAgMHhjOGNiNDRhODAwMDAwMDAwLCAweDU2NDg5ZTM3MDAwMDAwMDAsIDB4YjVjYTgwNGMwMDAwMDAwMCwKKyAgICAweDJiNDk1YWQzMDAwMDAwMDAsIDB4NzNjZmJkYmEwMDAwMDAwMCwgMHhlZDRjNjcyNTAwMDAwMDAwLAorICAgIDB4MGVjZTc5NWUwMDAwMDAwMCwgMHg5MDRkYTNjMTAwMDAwMDAwLCAweDhhZjU5YTUxMDAwMDAwMDAsCisgICAgMHgxNDc2NDBjZTAwMDAwMDAwLCAweGY3ZjQ1ZWI1MDAwMDAwMDAsIDB4Njk3Nzg0MmEwMDAwMDAwMCwKKyAgICAweDMxZjE2MzQzMDAwMDAwMDAsIDB4YWY3MmI5ZGMwMDAwMDAwMCwgMHg0Y2YwYTdhNzAwMDAwMDAwLAorICAgIDB4ZDI3MzdkMzgwMDAwMDAwMCwgMHhmY2ZjNjg3NDAwMDAwMDAwLCAweDYyN2ZiMmViMDAwMDAwMDAsCisgICAgMHg4MWZkYWM5MDAwMDAwMDAwLCAweDFmN2U3NjBmMDAwMDAwMDAsIDB4NDdmODkxNjYwMDAwMDAwMCwKKyAgICAweGQ5N2I0YmY5MDAwMDAwMDAsIDB4M2FmOTU1ODIwMDAwMDAwMCwgMHhhNDdhOGYxZDAwMDAwMDAwLAorICAgIDB4NjZlNzdlMWEwMDAwMDAwMCwgMHhmODY0YTQ4NTAwMDAwMDAwLCAweDFiZTZiYWZlMDAwMDAwMDAsCisgICAgMHg4NTY1NjA2MTAwMDAwMDAwLCAweGRkZTM4NzA4MDAwMDAwMDAsIDB4NDM2MDVkOTcwMDAwMDAwMCwKKyAgICAweGEwZTI0M2VjMDAwMDAwMDAsIDB4M2U2MTk5NzMwMDAwMDAwMCwgMHgxMGVlOGMzZjAwMDAwMDAwLAorICAgIDB4OGU2ZDU2YTAwMDAwMDAwMCwgMHg2ZGVmNDhkYjAwMDAwMDAwLCAweGYzNmM5MjQ0MDAwMDAwMDAsCisgICAgMHhhYmVhNzUyZDAwMDAwMDAwLCAweDM1NjlhZmIyMDAwMDAwMDAsIDB4ZDZlYmIxYzkwMDAwMDAwMCwKKyAgICAweDQ4Njg2YjU2MDAwMDAwMDB9LAorICAgezB4MDAwMDAwMDAwMDAwMDAwMCwgMHhjMDY0MjgxNzAwMDAwMDAwLCAweDgwYzk1MDJlMDAwMDAwMDAsCisgICAgMHg0MGFkNzgzOTAwMDAwMDAwLCAweDAwOTNhMTVjMDAwMDAwMDAsIDB4YzBmNzg5NGIwMDAwMDAwMCwKKyAgICAweDgwNWFmMTcyMDAwMDAwMDAsIDB4NDAzZWQ5NjUwMDAwMDAwMCwgMHgwMDI2NDNiOTAwMDAwMDAwLAorICAgIDB4YzA0MjZiYWUwMDAwMDAwMCwgMHg4MGVmMTM5NzAwMDAwMDAwLCAweDQwOGIzYjgwMDAwMDAwMDAsCisgICAgMHgwMGI1ZTJlNTAwMDAwMDAwLCAweGMwZDFjYWYyMDAwMDAwMDAsIDB4ODA3Y2IyY2IwMDAwMDAwMCwKKyAgICAweDQwMTg5YWRjMDAwMDAwMDAsIDB4NDE0YWY3YTkwMDAwMDAwMCwgMHg4MTJlZGZiZTAwMDAwMDAwLAorICAgIDB4YzE4M2E3ODcwMDAwMDAwMCwgMHgwMWU3OGY5MDAwMDAwMDAwLCAweDQxZDk1NmY1MDAwMDAwMDAsCisgICAgMHg4MWJkN2VlMjAwMDAwMDAwLCAweGMxMTAwNmRiMDAwMDAwMDAsIDB4MDE3NDJlY2MwMDAwMDAwMCwKKyAgICAweDQxNmNiNDEwMDAwMDAwMDAsIDB4ODEwODljMDcwMDAwMDAwMCwgMHhjMWE1ZTQzZTAwMDAwMDAwLAorICAgIDB4MDFjMWNjMjkwMDAwMDAwMCwgMHg0MWZmMTU0YzAwMDAwMDAwLCAweDgxOWIzZDViMDAwMDAwMDAsCisgICAgMHhjMTM2NDU2MjAwMDAwMDAwLCAweDAxNTI2ZDc1MDAwMDAwMDAsIDB4YzM5MjlmODgwMDAwMDAwMCwKKyAgICAweDAzZjZiNzlmMDAwMDAwMDAsIDB4NDM1YmNmYTYwMDAwMDAwMCwgMHg4MzNmZTdiMTAwMDAwMDAwLAorICAgIDB4YzMwMTNlZDQwMDAwMDAwMCwgMHgwMzY1MTZjMzAwMDAwMDAwLCAweDQzYzg2ZWZhMDAwMDAwMDAsCisgICAgMHg4M2FjNDZlZDAwMDAwMDAwLCAweGMzYjRkYzMxMDAwMDAwMDAsIDB4MDNkMGY0MjYwMDAwMDAwMCwKKyAgICAweDQzN2Q4YzFmMDAwMDAwMDAsIDB4ODMxOWE0MDgwMDAwMDAwMCwgMHhjMzI3N2Q2ZDAwMDAwMDAwLAorICAgIDB4MDM0MzU1N2EwMDAwMDAwMCwgMHg0M2VlMmQ0MzAwMDAwMDAwLCAweDgzOGEwNTU0MDAwMDAwMDAsCisgICAgMHg4MmQ4NjgyMTAwMDAwMDAwLCAweDQyYmM0MDM2MDAwMDAwMDAsIDB4MDIxMTM4MGYwMDAwMDAwMCwKKyAgICAweGMyNzUxMDE4MDAwMDAwMDAsIDB4ODI0YmM5N2QwMDAwMDAwMCwgMHg0MjJmZTE2YTAwMDAwMDAwLAorICAgIDB4MDI4Mjk5NTMwMDAwMDAwMCwgMHhjMmU2YjE0NDAwMDAwMDAwLCAweDgyZmUyYjk4MDAwMDAwMDAsCisgICAgMHg0MjlhMDM4ZjAwMDAwMDAwLCAweDAyMzc3YmI2MDAwMDAwMDAsIDB4YzI1MzUzYTEwMDAwMDAwMCwKKyAgICAweDgyNmQ4YWM0MDAwMDAwMDAsIDB4NDIwOWEyZDMwMDAwMDAwMCwgMHgwMmE0ZGFlYTAwMDAwMDAwLAorICAgIDB4YzJjMGYyZmQwMDAwMDAwMCwgMHhjNzIzNGVjYTAwMDAwMDAwLCAweDA3NDc2NmRkMDAwMDAwMDAsCisgICAgMHg0N2VhMWVlNDAwMDAwMDAwLCAweDg3OGUzNmYzMDAwMDAwMDAsIDB4YzdiMGVmOTYwMDAwMDAwMCwKKyAgICAweDA3ZDRjNzgxMDAwMDAwMDAsIDB4NDc3OWJmYjgwMDAwMDAwMCwgMHg4NzFkOTdhZjAwMDAwMDAwLAorICAgIDB4YzcwNTBkNzMwMDAwMDAwMCwgMHgwNzYxMjU2NDAwMDAwMDAwLCAweDQ3Y2M1ZDVkMDAwMDAwMDAsCisgICAgMHg4N2E4NzU0YTAwMDAwMDAwLCAweGM3OTZhYzJmMDAwMDAwMDAsIDB4MDdmMjg0MzgwMDAwMDAwMCwKKyAgICAweDQ3NWZmYzAxMDAwMDAwMDAsIDB4ODczYmQ0MTYwMDAwMDAwMCwgMHg4NjY5Yjk2MzAwMDAwMDAwLAorICAgIDB4NDYwZDkxNzQwMDAwMDAwMCwgMHgwNmEwZTk0ZDAwMDAwMDAwLCAweGM2YzRjMTVhMDAwMDAwMDAsCisgICAgMHg4NmZhMTgzZjAwMDAwMDAwLCAweDQ2OWUzMDI4MDAwMDAwMDAsIDB4MDYzMzQ4MTEwMDAwMDAwMCwKKyAgICAweGM2NTc2MDA2MDAwMDAwMDAsIDB4ODY0ZmZhZGEwMDAwMDAwMCwgMHg0NjJiZDJjZDAwMDAwMDAwLAorICAgIDB4MDY4NmFhZjQwMDAwMDAwMCwgMHhjNmUyODJlMzAwMDAwMDAwLCAweDg2ZGM1Yjg2MDAwMDAwMDAsCisgICAgMHg0NmI4NzM5MTAwMDAwMDAwLCAweDA2MTUwYmE4MDAwMDAwMDAsIDB4YzY3MTIzYmYwMDAwMDAwMCwKKyAgICAweDA0YjFkMTQyMDAwMDAwMDAsIDB4YzRkNWY5NTUwMDAwMDAwMCwgMHg4NDc4ODE2YzAwMDAwMDAwLAorICAgIDB4NDQxY2E5N2IwMDAwMDAwMCwgMHgwNDIyNzAxZTAwMDAwMDAwLCAweGM0NDY1ODA5MDAwMDAwMDAsCisgICAgMHg4NGViMjAzMDAwMDAwMDAwLCAweDQ0OGYwODI3MDAwMDAwMDAsIDB4MDQ5NzkyZmIwMDAwMDAwMCwKKyAgICAweGM0ZjNiYWVjMDAwMDAwMDAsIDB4ODQ1ZWMyZDUwMDAwMDAwMCwgMHg0NDNhZWFjMjAwMDAwMDAwLAorICAgIDB4MDQwNDMzYTcwMDAwMDAwMCwgMHhjNDYwMWJiMDAwMDAwMDAwLCAweDg0Y2Q2Mzg5MDAwMDAwMDAsCisgICAgMHg0NGE5NGI5ZTAwMDAwMDAwLCAweDQ1ZmIyNmViMDAwMDAwMDAsIDB4ODU5ZjBlZmMwMDAwMDAwMCwKKyAgICAweGM1MzI3NmM1MDAwMDAwMDAsIDB4MDU1NjVlZDIwMDAwMDAwMCwgMHg0NTY4ODdiNzAwMDAwMDAwLAorICAgIDB4ODUwY2FmYTAwMDAwMDAwMCwgMHhjNWExZDc5OTAwMDAwMDAwLCAweDA1YzVmZjhlMDAwMDAwMDAsCisgICAgMHg0NWRkNjU1MjAwMDAwMDAwLCAweDg1Yjk0ZDQ1MDAwMDAwMDAsIDB4YzUxNDM1N2MwMDAwMDAwMCwKKyAgICAweDA1NzAxZDZiMDAwMDAwMDAsIDB4NDU0ZWM0MGUwMDAwMDAwMCwgMHg4NTJhZWMxOTAwMDAwMDAwLAorICAgIDB4YzU4Nzk0MjAwMDAwMDAwMCwgMHgwNWUzYmMzNzAwMDAwMDAwLCAweGNmNDFlZDRmMDAwMDAwMDAsCisgICAgMHgwZjI1YzU1ODAwMDAwMDAwLCAweDRmODhiZDYxMDAwMDAwMDAsIDB4OGZlYzk1NzYwMDAwMDAwMCwKKyAgICAweGNmZDI0YzEzMDAwMDAwMDAsIDB4MGZiNjY0MDQwMDAwMDAwMCwgMHg0ZjFiMWMzZDAwMDAwMDAwLAorICAgIDB4OGY3ZjM0MmEwMDAwMDAwMCwgMHhjZjY3YWVmNjAwMDAwMDAwLCAweDBmMDM4NmUxMDAwMDAwMDAsCisgICAgMHg0ZmFlZmVkODAwMDAwMDAwLCAweDhmY2FkNmNmMDAwMDAwMDAsIDB4Y2ZmNDBmYWEwMDAwMDAwMCwKKyAgICAweDBmOTAyN2JkMDAwMDAwMDAsIDB4NGYzZDVmODQwMDAwMDAwMCwgMHg4ZjU5Nzc5MzAwMDAwMDAwLAorICAgIDB4OGUwYjFhZTYwMDAwMDAwMCwgMHg0ZTZmMzJmMTAwMDAwMDAwLCAweDBlYzI0YWM4MDAwMDAwMDAsCisgICAgMHhjZWE2NjJkZjAwMDAwMDAwLCAweDhlOThiYmJhMDAwMDAwMDAsIDB4NGVmYzkzYWQwMDAwMDAwMCwKKyAgICAweDBlNTFlYjk0MDAwMDAwMDAsIDB4Y2UzNWMzODMwMDAwMDAwMCwgMHg4ZTJkNTk1ZjAwMDAwMDAwLAorICAgIDB4NGU0OTcxNDgwMDAwMDAwMCwgMHgwZWU0MDk3MTAwMDAwMDAwLCAweGNlODAyMTY2MDAwMDAwMDAsCisgICAgMHg4ZWJlZjgwMzAwMDAwMDAwLCAweDRlZGFkMDE0MDAwMDAwMDAsIDB4MGU3N2E4MmQwMDAwMDAwMCwKKyAgICAweGNlMTM4MDNhMDAwMDAwMDAsIDB4MGNkMzcyYzcwMDAwMDAwMCwgMHhjY2I3NWFkMDAwMDAwMDAwLAorICAgIDB4OGMxYTIyZTkwMDAwMDAwMCwgMHg0YzdlMGFmZTAwMDAwMDAwLCAweDBjNDBkMzliMDAwMDAwMDAsCisgICAgMHhjYzI0ZmI4YzAwMDAwMDAwLCAweDhjODk4M2I1MDAwMDAwMDAsIDB4NGNlZGFiYTIwMDAwMDAwMCwKKyAgICAweDBjZjUzMTdlMDAwMDAwMDAsIDB4Y2M5MTE5NjkwMDAwMDAwMCwgMHg4YzNjNjE1MDAwMDAwMDAwLAorICAgIDB4NGM1ODQ5NDcwMDAwMDAwMCwgMHgwYzY2OTAyMjAwMDAwMDAwLCAweGNjMDJiODM1MDAwMDAwMDAsCisgICAgMHg4Y2FmYzAwYzAwMDAwMDAwLCAweDRjY2JlODFiMDAwMDAwMDAsIDB4NGQ5OTg1NmUwMDAwMDAwMCwKKyAgICAweDhkZmRhZDc5MDAwMDAwMDAsIDB4Y2Q1MGQ1NDAwMDAwMDAwMCwgMHgwZDM0ZmQ1NzAwMDAwMDAwLAorICAgIDB4NGQwYTI0MzIwMDAwMDAwMCwgMHg4ZDZlMGMyNTAwMDAwMDAwLCAweGNkYzM3NDFjMDAwMDAwMDAsCisgICAgMHgwZGE3NWMwYjAwMDAwMDAwLCAweDRkYmZjNmQ3MDAwMDAwMDAsIDB4OGRkYmVlYzAwMDAwMDAwMCwKKyAgICAweGNkNzY5NmY5MDAwMDAwMDAsIDB4MGQxMmJlZWUwMDAwMDAwMCwgMHg0ZDJjNjc4YjAwMDAwMDAwLAorICAgIDB4OGQ0ODRmOWMwMDAwMDAwMCwgMHhjZGU1MzdhNTAwMDAwMDAwLCAweDBkODExZmIyMDAwMDAwMDAsCisgICAgMHgwODYyYTM4NTAwMDAwMDAwLCAweGM4MDY4YjkyMDAwMDAwMDAsIDB4ODhhYmYzYWIwMDAwMDAwMCwKKyAgICAweDQ4Y2ZkYmJjMDAwMDAwMDAsIDB4MDhmMTAyZDkwMDAwMDAwMCwgMHhjODk1MmFjZTAwMDAwMDAwLAorICAgIDB4ODgzODUyZjcwMDAwMDAwMCwgMHg0ODVjN2FlMDAwMDAwMDAwLCAweDA4NDRlMDNjMDAwMDAwMDAsCisgICAgMHhjODIwYzgyYjAwMDAwMDAwLCAweDg4OGRiMDEyMDAwMDAwMDAsIDB4NDhlOTk4MDUwMDAwMDAwMCwKKyAgICAweDA4ZDc0MTYwMDAwMDAwMDAsIDB4YzhiMzY5NzcwMDAwMDAwMCwgMHg4ODFlMTE0ZTAwMDAwMDAwLAorICAgIDB4NDg3YTM5NTkwMDAwMDAwMCwgMHg0OTI4NTQyYzAwMDAwMDAwLCAweDg5NGM3YzNiMDAwMDAwMDAsCisgICAgMHhjOWUxMDQwMjAwMDAwMDAwLCAweDA5ODUyYzE1MDAwMDAwMDAsIDB4NDliYmY1NzAwMDAwMDAwMCwKKyAgICAweDg5ZGZkZDY3MDAwMDAwMDAsIDB4Yzk3MmE1NWUwMDAwMDAwMCwgMHgwOTE2OGQ0OTAwMDAwMDAwLAorICAgIDB4NDkwZTE3OTUwMDAwMDAwMCwgMHg4OTZhM2Y4MjAwMDAwMDAwLCAweGM5Yzc0N2JiMDAwMDAwMDAsCisgICAgMHgwOWEzNmZhYzAwMDAwMDAwLCAweDQ5OWRiNmM5MDAwMDAwMDAsIDB4ODlmOTllZGUwMDAwMDAwMCwKKyAgICAweGM5NTRlNmU3MDAwMDAwMDAsIDB4MDkzMGNlZjAwMDAwMDAwMCwgMHhjYmYwM2MwZDAwMDAwMDAwLAorICAgIDB4MGI5NDE0MWEwMDAwMDAwMCwgMHg0YjM5NmMyMzAwMDAwMDAwLCAweDhiNWQ0NDM0MDAwMDAwMDAsCisgICAgMHhjYjYzOWQ1MTAwMDAwMDAwLCAweDBiMDdiNTQ2MDAwMDAwMDAsIDB4NGJhYWNkN2YwMDAwMDAwMCwKKyAgICAweDhiY2VlNTY4MDAwMDAwMDAsIDB4Y2JkNjdmYjQwMDAwMDAwMCwgMHgwYmIyNTdhMzAwMDAwMDAwLAorICAgIDB4NGIxZjJmOWEwMDAwMDAwMCwgMHg4YjdiMDc4ZDAwMDAwMDAwLCAweGNiNDVkZWU4MDAwMDAwMDAsCisgICAgMHgwYjIxZjZmZjAwMDAwMDAwLCAweDRiOGM4ZWM2MDAwMDAwMDAsIDB4OGJlOGE2ZDEwMDAwMDAwMCwKKyAgICAweDhhYmFjYmE0MDAwMDAwMDAsIDB4NGFkZWUzYjMwMDAwMDAwMCwgMHgwYTczOWI4YTAwMDAwMDAwLAorICAgIDB4Y2ExN2IzOWQwMDAwMDAwMCwgMHg4YTI5NmFmODAwMDAwMDAwLCAweDRhNGQ0MmVmMDAwMDAwMDAsCisgICAgMHgwYWUwM2FkNjAwMDAwMDAwLCAweGNhODQxMmMxMDAwMDAwMDAsIDB4OGE5Yzg4MWQwMDAwMDAwMCwKKyAgICAweDRhZjhhMDBhMDAwMDAwMDAsIDB4MGE1NWQ4MzMwMDAwMDAwMCwgMHhjYTMxZjAyNDAwMDAwMDAwLAorICAgIDB4OGEwZjI5NDEwMDAwMDAwMCwgMHg0YTZiMDE1NjAwMDAwMDAwLCAweDBhYzY3OTZmMDAwMDAwMDAsCisgICAgMHhjYWEyNTE3ODAwMDAwMDAwfSwKKyAgIHsweDAwMDAwMDAwMDAwMDAwMDAsIDB4ZDRlYTczOWIwMDAwMDAwMCwgMHhlOWQzOTZlZDAwMDAwMDAwLAorICAgIDB4M2QzOWU1NzYwMDAwMDAwMCwgMHg5M2ExNWMwMDAwMDAwMDAwLCAweDQ3NGIyZjliMDAwMDAwMDAsCisgICAgMHg3YTcyY2FlZDAwMDAwMDAwLCAweGFlOThiOTc2MDAwMDAwMDAsIDB4MjY0M2I5MDAwMDAwMDAwMCwKKyAgICAweGYyYTljYTliMDAwMDAwMDAsIDB4Y2Y5MDJmZWQwMDAwMDAwMCwgMHgxYjdhNWM3NjAwMDAwMDAwLAorICAgIDB4YjVlMmU1MDAwMDAwMDAwMCwgMHg2MTA4OTY5YjAwMDAwMDAwLCAweDVjMzE3M2VkMDAwMDAwMDAsCisgICAgMHg4OGRiMDA3NjAwMDAwMDAwLCAweDRjODY3MjAxMDAwMDAwMDAsIDB4OTg2YzAxOWEwMDAwMDAwMCwKKyAgICAweGE1NTVlNGVjMDAwMDAwMDAsIDB4NzFiZjk3NzcwMDAwMDAwMCwgMHhkZjI3MmUwMTAwMDAwMDAwLAorICAgIDB4MGJjZDVkOWEwMDAwMDAwMCwgMHgzNmY0YjhlYzAwMDAwMDAwLCAweGUyMWVjYjc3MDAwMDAwMDAsCisgICAgMHg2YWM1Y2IwMTAwMDAwMDAwLCAweGJlMmZiODlhMDAwMDAwMDAsIDB4ODMxNjVkZWMwMDAwMDAwMCwKKyAgICAweDU3ZmMyZTc3MDAwMDAwMDAsIDB4Zjk2NDk3MDEwMDAwMDAwMCwgMHgyZDhlZTQ5YTAwMDAwMDAwLAorICAgIDB4MTBiNzAxZWMwMDAwMDAwMCwgMHhjNDVkNzI3NzAwMDAwMDAwLCAweDk4MGNlNTAyMDAwMDAwMDAsCisgICAgMHg0Y2U2OTY5OTAwMDAwMDAwLCAweDcxZGY3M2VmMDAwMDAwMDAsIDB4YTUzNTAwNzQwMDAwMDAwMCwKKyAgICAweDBiYWRiOTAyMDAwMDAwMDAsIDB4ZGY0N2NhOTkwMDAwMDAwMCwgMHhlMjdlMmZlZjAwMDAwMDAwLAorICAgIDB4MzY5NDVjNzQwMDAwMDAwMCwgMHhiZTRmNWMwMjAwMDAwMDAwLCAweDZhYTUyZjk5MDAwMDAwMDAsCisgICAgMHg1NzljY2FlZjAwMDAwMDAwLCAweDgzNzZiOTc0MDAwMDAwMDAsIDB4MmRlZTAwMDIwMDAwMDAwMCwKKyAgICAweGY5MDQ3Mzk5MDAwMDAwMDAsIDB4YzQzZDk2ZWYwMDAwMDAwMCwgMHgxMGQ3ZTU3NDAwMDAwMDAwLAorICAgIDB4ZDQ4YTk3MDMwMDAwMDAwMCwgMHgwMDYwZTQ5ODAwMDAwMDAwLCAweDNkNTkwMWVlMDAwMDAwMDAsCisgICAgMHhlOWIzNzI3NTAwMDAwMDAwLCAweDQ3MmJjYjAzMDAwMDAwMDAsIDB4OTNjMWI4OTgwMDAwMDAwMCwKKyAgICAweGFlZjg1ZGVlMDAwMDAwMDAsIDB4N2ExMjJlNzUwMDAwMDAwMCwgMHhmMmM5MmUwMzAwMDAwMDAwLAorICAgIDB4MjYyMzVkOTgwMDAwMDAwMCwgMHgxYjFhYjhlZTAwMDAwMDAwLCAweGNmZjBjYjc1MDAwMDAwMDAsCisgICAgMHg2MTY4NzIwMzAwMDAwMDAwLCAweGI1ODIwMTk4MDAwMDAwMDAsIDB4ODhiYmU0ZWUwMDAwMDAwMCwKKyAgICAweDVjNTE5Nzc1MDAwMDAwMDAsIDB4MzAxOWNhMDUwMDAwMDAwMCwgMHhlNGYzYjk5ZTAwMDAwMDAwLAorICAgIDB4ZDljYTVjZTgwMDAwMDAwMCwgMHgwZDIwMmY3MzAwMDAwMDAwLCAweGEzYjg5NjA1MDAwMDAwMDAsCisgICAgMHg3NzUyZTU5ZTAwMDAwMDAwLCAweDRhNmIwMGU4MDAwMDAwMDAsIDB4OWU4MTczNzMwMDAwMDAwMCwKKyAgICAweDE2NWE3MzA1MDAwMDAwMDAsIDB4YzJiMDAwOWUwMDAwMDAwMCwgMHhmZjg5ZTVlODAwMDAwMDAwLAorICAgIDB4MmI2Mzk2NzMwMDAwMDAwMCwgMHg4NWZiMmYwNTAwMDAwMDAwLCAweDUxMTE1YzllMDAwMDAwMDAsCisgICAgMHg2YzI4YjllODAwMDAwMDAwLCAweGI4YzJjYTczMDAwMDAwMDAsIDB4N2M5ZmI4MDQwMDAwMDAwMCwKKyAgICAweGE4NzVjYjlmMDAwMDAwMDAsIDB4OTU0YzJlZTkwMDAwMDAwMCwgMHg0MWE2NWQ3MjAwMDAwMDAwLAorICAgIDB4ZWYzZWU0MDQwMDAwMDAwMCwgMHgzYmQ0OTc5ZjAwMDAwMDAwLCAweDA2ZWQ3MmU5MDAwMDAwMDAsCisgICAgMHhkMjA3MDE3MjAwMDAwMDAwLCAweDVhZGMwMTA0MDAwMDAwMDAsIDB4OGUzNjcyOWYwMDAwMDAwMCwKKyAgICAweGIzMGY5N2U5MDAwMDAwMDAsIDB4NjdlNWU0NzIwMDAwMDAwMCwgMHhjOTdkNWQwNDAwMDAwMDAwLAorICAgIDB4MWQ5NzJlOWYwMDAwMDAwMCwgMHgyMGFlY2JlOTAwMDAwMDAwLCAweGY0NDRiODcyMDAwMDAwMDAsCisgICAgMHhhODE1MmYwNzAwMDAwMDAwLCAweDdjZmY1YzljMDAwMDAwMDAsIDB4NDFjNmI5ZWEwMDAwMDAwMCwKKyAgICAweDk1MmNjYTcxMDAwMDAwMDAsIDB4M2JiNDczMDcwMDAwMDAwMCwgMHhlZjVlMDA5YzAwMDAwMDAwLAorICAgIDB4ZDI2N2U1ZWEwMDAwMDAwMCwgMHgwNjhkOTY3MTAwMDAwMDAwLCAweDhlNTY5NjA3MDAwMDAwMDAsCisgICAgMHg1YWJjZTU5YzAwMDAwMDAwLCAweDY3ODUwMGVhMDAwMDAwMDAsIDB4YjM2ZjczNzEwMDAwMDAwMCwKKyAgICAweDFkZjdjYTA3MDAwMDAwMDAsIDB4YzkxZGI5OWMwMDAwMDAwMCwgMHhmNDI0NWNlYTAwMDAwMDAwLAorICAgIDB4MjBjZTJmNzEwMDAwMDAwMCwgMHhlNDkzNWQwNjAwMDAwMDAwLCAweDMwNzkyZTlkMDAwMDAwMDAsCisgICAgMHgwZDQwY2JlYjAwMDAwMDAwLCAweGQ5YWFiODcwMDAwMDAwMDAsIDB4NzczMjAxMDYwMDAwMDAwMCwKKyAgICAweGEzZDg3MjlkMDAwMDAwMDAsIDB4OWVlMTk3ZWIwMDAwMDAwMCwgMHg0YTBiZTQ3MDAwMDAwMDAwLAorICAgIDB4YzJkMGU0MDYwMDAwMDAwMCwgMHgxNjNhOTc5ZDAwMDAwMDAwLCAweDJiMDM3MmViMDAwMDAwMDAsCisgICAgMHhmZmU5MDE3MDAwMDAwMDAwLCAweDUxNzFiODA2MDAwMDAwMDAsIDB4ODU5YmNiOWQwMDAwMDAwMCwKKyAgICAweGI4YTIyZWViMDAwMDAwMDAsIDB4NmM0ODVkNzAwMDAwMDAwMCwgMHg2MDMyOTQwYjAwMDAwMDAwLAorICAgIDB4YjRkOGU3OTAwMDAwMDAwMCwgMHg4OWUxMDJlNjAwMDAwMDAwLCAweDVkMGI3MTdkMDAwMDAwMDAsCisgICAgMHhmMzkzYzgwYjAwMDAwMDAwLCAweDI3NzliYjkwMDAwMDAwMDAsIDB4MWE0MDVlZTYwMDAwMDAwMCwKKyAgICAweGNlYWEyZDdkMDAwMDAwMDAsIDB4NDY3MTJkMGIwMDAwMDAwMCwgMHg5MjliNWU5MDAwMDAwMDAwLAorICAgIDB4YWZhMmJiZTYwMDAwMDAwMCwgMHg3YjQ4Yzg3ZDAwMDAwMDAwLCAweGQ1ZDA3MTBiMDAwMDAwMDAsCisgICAgMHgwMTNhMDI5MDAwMDAwMDAwLCAweDNjMDNlN2U2MDAwMDAwMDAsIDB4ZThlOTk0N2QwMDAwMDAwMCwKKyAgICAweDJjYjRlNjBhMDAwMDAwMDAsIDB4Zjg1ZTk1OTEwMDAwMDAwMCwgMHhjNTY3NzBlNzAwMDAwMDAwLAorICAgIDB4MTE4ZDAzN2MwMDAwMDAwMCwgMHhiZjE1YmEwYTAwMDAwMDAwLCAweDZiZmZjOTkxMDAwMDAwMDAsCisgICAgMHg1NmM2MmNlNzAwMDAwMDAwLCAweDgyMmM1ZjdjMDAwMDAwMDAsIDB4MGFmNzVmMGEwMDAwMDAwMCwKKyAgICAweGRlMWQyYzkxMDAwMDAwMDAsIDB4ZTMyNGM5ZTcwMDAwMDAwMCwgMHgzN2NlYmE3YzAwMDAwMDAwLAorICAgIDB4OTk1NjAzMGEwMDAwMDAwMCwgMHg0ZGJjNzA5MTAwMDAwMDAwLCAweDcwODU5NWU3MDAwMDAwMDAsCisgICAgMHhhNDZmZTY3YzAwMDAwMDAwLCAweGY4M2U3MTA5MDAwMDAwMDAsIDB4MmNkNDAyOTIwMDAwMDAwMCwKKyAgICAweDExZWRlN2U0MDAwMDAwMDAsIDB4YzUwNzk0N2YwMDAwMDAwMCwgMHg2YjlmMmQwOTAwMDAwMDAwLAorICAgIDB4YmY3NTVlOTIwMDAwMDAwMCwgMHg4MjRjYmJlNDAwMDAwMDAwLCAweDU2YTZjODdmMDAwMDAwMDAsCisgICAgMHhkZTdkYzgwOTAwMDAwMDAwLCAweDBhOTdiYjkyMDAwMDAwMDAsIDB4MzdhZTVlZTQwMDAwMDAwMCwKKyAgICAweGUzNDQyZDdmMDAwMDAwMDAsIDB4NGRkYzk0MDkwMDAwMDAwMCwgMHg5OTM2ZTc5MjAwMDAwMDAwLAorICAgIDB4YTQwZjAyZTQwMDAwMDAwMCwgMHg3MGU1NzE3ZjAwMDAwMDAwLCAweGI0YjgwMzA4MDAwMDAwMDAsCisgICAgMHg2MDUyNzA5MzAwMDAwMDAwLCAweDVkNmI5NWU1MDAwMDAwMDAsIDB4ODk4MWU2N2UwMDAwMDAwMCwKKyAgICAweDI3MTk1ZjA4MDAwMDAwMDAsIDB4ZjNmMzJjOTMwMDAwMDAwMCwgMHhjZWNhYzllNTAwMDAwMDAwLAorICAgIDB4MWEyMGJhN2UwMDAwMDAwMCwgMHg5MmZiYmEwODAwMDAwMDAwLCAweDQ2MTFjOTkzMDAwMDAwMDAsCisgICAgMHg3YjI4MmNlNTAwMDAwMDAwLCAweGFmYzI1ZjdlMDAwMDAwMDAsIDB4MDE1YWU2MDgwMDAwMDAwMCwKKyAgICAweGQ1YjA5NTkzMDAwMDAwMDAsIDB4ZTg4OTcwZTUwMDAwMDAwMCwgMHgzYzYzMDM3ZTAwMDAwMDAwLAorICAgIDB4NTAyYjVlMGUwMDAwMDAwMCwgMHg4NGMxMmQ5NTAwMDAwMDAwLCAweGI5ZjhjOGUzMDAwMDAwMDAsCisgICAgMHg2ZDEyYmI3ODAwMDAwMDAwLCAweGMzOGEwMjBlMDAwMDAwMDAsIDB4MTc2MDcxOTUwMDAwMDAwMCwKKyAgICAweDJhNTk5NGUzMDAwMDAwMDAsIDB4ZmViM2U3NzgwMDAwMDAwMCwgMHg3NjY4ZTcwZTAwMDAwMDAwLAorICAgIDB4YTI4Mjk0OTUwMDAwMDAwMCwgMHg5ZmJiNzFlMzAwMDAwMDAwLCAweDRiNTEwMjc4MDAwMDAwMDAsCisgICAgMHhlNWM5YmIwZTAwMDAwMDAwLCAweDMxMjNjODk1MDAwMDAwMDAsIDB4MGMxYTJkZTMwMDAwMDAwMCwKKyAgICAweGQ4ZjA1ZTc4MDAwMDAwMDAsIDB4MWNhZDJjMGYwMDAwMDAwMCwgMHhjODQ3NWY5NDAwMDAwMDAwLAorICAgIDB4ZjU3ZWJhZTIwMDAwMDAwMCwgMHgyMTk0Yzk3OTAwMDAwMDAwLCAweDhmMGM3MDBmMDAwMDAwMDAsCisgICAgMHg1YmU2MDM5NDAwMDAwMDAwLCAweDY2ZGZlNmUyMDAwMDAwMDAsIDB4YjIzNTk1NzkwMDAwMDAwMCwKKyAgICAweDNhZWU5NTBmMDAwMDAwMDAsIDB4ZWUwNGU2OTQwMDAwMDAwMCwgMHhkMzNkMDNlMjAwMDAwMDAwLAorICAgIDB4MDdkNzcwNzkwMDAwMDAwMCwgMHhhOTRmYzkwZjAwMDAwMDAwLCAweDdkYTViYTk0MDAwMDAwMDAsCisgICAgMHg0MDljNWZlMjAwMDAwMDAwLCAweDk0NzYyYzc5MDAwMDAwMDAsIDB4YzgyN2JiMGMwMDAwMDAwMCwKKyAgICAweDFjY2RjODk3MDAwMDAwMDAsIDB4MjFmNDJkZTEwMDAwMDAwMCwgMHhmNTFlNWU3YTAwMDAwMDAwLAorICAgIDB4NWI4NmU3MGMwMDAwMDAwMCwgMHg4ZjZjOTQ5NzAwMDAwMDAwLCAweGIyNTU3MWUxMDAwMDAwMDAsCisgICAgMHg2NmJmMDI3YTAwMDAwMDAwLCAweGVlNjQwMjBjMDAwMDAwMDAsIDB4M2E4ZTcxOTcwMDAwMDAwMCwKKyAgICAweDA3Yjc5NGUxMDAwMDAwMDAsIDB4ZDM1ZGU3N2EwMDAwMDAwMCwgMHg3ZGM1NWUwYzAwMDAwMDAwLAorICAgIDB4YTkyZjJkOTcwMDAwMDAwMCwgMHg5NDE2YzhlMTAwMDAwMDAwLCAweDQwZmNiYjdhMDAwMDAwMDAsCisgICAgMHg4NGExYzkwZDAwMDAwMDAwLCAweDUwNGJiYTk2MDAwMDAwMDAsIDB4NmQ3MjVmZTAwMDAwMDAwMCwKKyAgICAweGI5OTgyYzdiMDAwMDAwMDAsIDB4MTcwMDk1MGQwMDAwMDAwMCwgMHhjM2VhZTY5NjAwMDAwMDAwLAorICAgIDB4ZmVkMzAzZTAwMDAwMDAwMCwgMHgyYTM5NzA3YjAwMDAwMDAwLCAweGEyZTI3MDBkMDAwMDAwMDAsCisgICAgMHg3NjA4MDM5NjAwMDAwMDAwLCAweDRiMzFlNmUwMDAwMDAwMDAsIDB4OWZkYjk1N2IwMDAwMDAwMCwKKyAgICAweDMxNDMyYzBkMDAwMDAwMDAsIDB4ZTVhOTVmOTYwMDAwMDAwMCwgMHhkODkwYmFlMDAwMDAwMDAwLAorICAgIDB4MGM3YWM5N2IwMDAwMDAwMH0sCisgICB7MHgwMDAwMDAwMDAwMDAwMDAwLCAweDI3NjUyNTgxMDAwMDAwMDAsIDB4MGZjYzNiZDkwMDAwMDAwMCwKKyAgICAweDI4YTkxZTU4MDAwMDAwMDAsIDB4NWY5ZTA2NjkwMDAwMDAwMCwgMHg3OGZiMjNlODAwMDAwMDAwLAorICAgIDB4NTA1MjNkYjAwMDAwMDAwMCwgMHg3NzM3MTgzMTAwMDAwMDAwLCAweGJlM2MwZGQyMDAwMDAwMDAsCisgICAgMHg5OTU5Mjg1MzAwMDAwMDAwLCAweGIxZjAzNjBiMDAwMDAwMDAsIDB4OTY5NTEzOGEwMDAwMDAwMCwKKyAgICAweGUxYTIwYmJiMDAwMDAwMDAsIDB4YzZjNzJlM2EwMDAwMDAwMCwgMHhlZTZlMzA2MjAwMDAwMDAwLAorICAgIDB4YzkwYjE1ZTMwMDAwMDAwMCwgMHgzZDdmNmI3ZjAwMDAwMDAwLCAweDFhMWE0ZWZlMDAwMDAwMDAsCisgICAgMHgzMmIzNTBhNjAwMDAwMDAwLCAweDE1ZDY3NTI3MDAwMDAwMDAsIDB4NjJlMTZkMTYwMDAwMDAwMCwKKyAgICAweDQ1ODQ0ODk3MDAwMDAwMDAsIDB4NmQyZDU2Y2YwMDAwMDAwMCwgMHg0YTQ4NzM0ZTAwMDAwMDAwLAorICAgIDB4ODM0MzY2YWQwMDAwMDAwMCwgMHhhNDI2NDMyYzAwMDAwMDAwLCAweDhjOGY1ZDc0MDAwMDAwMDAsCisgICAgMHhhYmVhNzhmNTAwMDAwMDAwLCAweGRjZGQ2MGM0MDAwMDAwMDAsIDB4ZmJiODQ1NDUwMDAwMDAwMCwKKyAgICAweGQzMTE1YjFkMDAwMDAwMDAsIDB4ZjQ3NDdlOWMwMDAwMDAwMCwgMHg3YWZlZDZmZTAwMDAwMDAwLAorICAgIDB4NWQ5YmYzN2YwMDAwMDAwMCwgMHg3NTMyZWQyNzAwMDAwMDAwLCAweDUyNTdjOGE2MDAwMDAwMDAsCisgICAgMHgyNTYwZDA5NzAwMDAwMDAwLCAweDAyMDVmNTE2MDAwMDAwMDAsIDB4MmFhY2ViNGUwMDAwMDAwMCwKKyAgICAweDBkYzljZWNmMDAwMDAwMDAsIDB4YzRjMmRiMmMwMDAwMDAwMCwgMHhlM2E3ZmVhZDAwMDAwMDAwLAorICAgIDB4Y2IwZWUwZjUwMDAwMDAwMCwgMHhlYzZiYzU3NDAwMDAwMDAwLCAweDliNWNkZDQ1MDAwMDAwMDAsCisgICAgMHhiYzM5ZjhjNDAwMDAwMDAwLCAweDk0OTBlNjljMDAwMDAwMDAsIDB4YjNmNWMzMWQwMDAwMDAwMCwKKyAgICAweDQ3ODFiZDgxMDAwMDAwMDAsIDB4NjBlNDk4MDAwMDAwMDAwMCwgMHg0ODRkODY1ODAwMDAwMDAwLAorICAgIDB4NmYyOGEzZDkwMDAwMDAwMCwgMHgxODFmYmJlODAwMDAwMDAwLCAweDNmN2E5ZTY5MDAwMDAwMDAsCisgICAgMHgxN2QzODAzMTAwMDAwMDAwLCAweDMwYjZhNWIwMDAwMDAwMDAsIDB4ZjliZGIwNTMwMDAwMDAwMCwKKyAgICAweGRlZDg5NWQyMDAwMDAwMDAsIDB4ZjY3MThiOGEwMDAwMDAwMCwgMHhkMTE0YWUwYjAwMDAwMDAwLAorICAgIDB4YTYyM2I2M2EwMDAwMDAwMCwgMHg4MTQ2OTNiYjAwMDAwMDAwLCAweGE5ZWY4ZGUzMDAwMDAwMDAsCisgICAgMHg4ZThhYTg2MjAwMDAwMDAwLCAweGI1ZmFkYzI2MDAwMDAwMDAsIDB4OTI5ZmY5YTcwMDAwMDAwMCwKKyAgICAweGJhMzZlN2ZmMDAwMDAwMDAsIDB4OWQ1M2MyN2UwMDAwMDAwMCwgMHhlYTY0ZGE0ZjAwMDAwMDAwLAorICAgIDB4Y2QwMWZmY2UwMDAwMDAwMCwgMHhlNWE4ZTE5NjAwMDAwMDAwLCAweGMyY2RjNDE3MDAwMDAwMDAsCisgICAgMHgwYmM2ZDFmNDAwMDAwMDAwLCAweDJjYTNmNDc1MDAwMDAwMDAsIDB4MDQwYWVhMmQwMDAwMDAwMCwKKyAgICAweDIzNmZjZmFjMDAwMDAwMDAsIDB4NTQ1OGQ3OWQwMDAwMDAwMCwgMHg3MzNkZjIxYzAwMDAwMDAwLAorICAgIDB4NWI5NGVjNDQwMDAwMDAwMCwgMHg3Y2YxYzljNTAwMDAwMDAwLCAweDg4ODViNzU5MDAwMDAwMDAsCisgICAgMHhhZmUwOTJkODAwMDAwMDAwLCAweDg3NDk4YzgwMDAwMDAwMDAsIDB4YTAyY2E5MDEwMDAwMDAwMCwKKyAgICAweGQ3MWJiMTMwMDAwMDAwMDAsIDB4ZjA3ZTk0YjEwMDAwMDAwMCwgMHhkOGQ3OGFlOTAwMDAwMDAwLAorICAgIDB4ZmZiMmFmNjgwMDAwMDAwMCwgMHgzNmI5YmE4YjAwMDAwMDAwLCAweDExZGM5ZjBhMDAwMDAwMDAsCisgICAgMHgzOTc1ODE1MjAwMDAwMDAwLCAweDFlMTBhNGQzMDAwMDAwMDAsIDB4NjkyN2JjZTIwMDAwMDAwMCwKKyAgICAweDRlNDI5OTYzMDAwMDAwMDAsIDB4NjZlYjg3M2IwMDAwMDAwMCwgMHg0MThlYTJiYTAwMDAwMDAwLAorICAgIDB4Y2YwNDBhZDgwMDAwMDAwMCwgMHhlODYxMmY1OTAwMDAwMDAwLCAweGMwYzgzMTAxMDAwMDAwMDAsCisgICAgMHhlN2FkMTQ4MDAwMDAwMDAwLCAweDkwOWEwY2IxMDAwMDAwMDAsIDB4YjdmZjI5MzAwMDAwMDAwMCwKKyAgICAweDlmNTYzNzY4MDAwMDAwMDAsIDB4YjgzMzEyZTkwMDAwMDAwMCwgMHg3MTM4MDcwYTAwMDAwMDAwLAorICAgIDB4NTY1ZDIyOGIwMDAwMDAwMCwgMHg3ZWY0M2NkMzAwMDAwMDAwLCAweDU5OTExOTUyMDAwMDAwMDAsCisgICAgMHgyZWE2MDE2MzAwMDAwMDAwLCAweDA5YzMyNGUyMDAwMDAwMDAsIDB4MjE2YTNhYmEwMDAwMDAwMCwKKyAgICAweDA2MGYxZjNiMDAwMDAwMDAsIDB4ZjI3YjYxYTcwMDAwMDAwMCwgMHhkNTFlNDQyNjAwMDAwMDAwLAorICAgIDB4ZmRiNzVhN2UwMDAwMDAwMCwgMHhkYWQyN2ZmZjAwMDAwMDAwLCAweGFkZTU2N2NlMDAwMDAwMDAsCisgICAgMHg4YTgwNDI0ZjAwMDAwMDAwLCAweGEyMjk1YzE3MDAwMDAwMDAsIDB4ODU0Yzc5OTYwMDAwMDAwMCwKKyAgICAweDRjNDc2Yzc1MDAwMDAwMDAsIDB4NmIyMjQ5ZjQwMDAwMDAwMCwgMHg0MzhiNTdhYzAwMDAwMDAwLAorICAgIDB4NjRlZTcyMmQwMDAwMDAwMCwgMHgxM2Q5NmExYzAwMDAwMDAwLCAweDM0YmM0ZjlkMDAwMDAwMDAsCisgICAgMHgxYzE1NTFjNTAwMDAwMDAwLCAweDNiNzA3NDQ0MDAwMDAwMDAsIDB4NmFmNWI5NGQwMDAwMDAwMCwKKyAgICAweDRkOTA5Y2NjMDAwMDAwMDAsIDB4NjUzOTgyOTQwMDAwMDAwMCwgMHg0MjVjYTcxNTAwMDAwMDAwLAorICAgIDB4MzU2YmJmMjQwMDAwMDAwMCwgMHgxMjBlOWFhNTAwMDAwMDAwLCAweDNhYTc4NGZkMDAwMDAwMDAsCisgICAgMHgxZGMyYTE3YzAwMDAwMDAwLCAweGQ0YzliNDlmMDAwMDAwMDAsIDB4ZjNhYzkxMWUwMDAwMDAwMCwKKyAgICAweGRiMDU4ZjQ2MDAwMDAwMDAsIDB4ZmM2MGFhYzcwMDAwMDAwMCwgMHg4YjU3YjJmNjAwMDAwMDAwLAorICAgIDB4YWMzMjk3NzcwMDAwMDAwMCwgMHg4NDliODkyZjAwMDAwMDAwLCAweGEzZmVhY2FlMDAwMDAwMDAsCisgICAgMHg1NzhhZDIzMjAwMDAwMDAwLCAweDcwZWZmN2IzMDAwMDAwMDAsIDB4NTg0NmU5ZWIwMDAwMDAwMCwKKyAgICAweDdmMjNjYzZhMDAwMDAwMDAsIDB4MDgxNGQ0NWIwMDAwMDAwMCwgMHgyZjcxZjFkYTAwMDAwMDAwLAorICAgIDB4MDdkOGVmODIwMDAwMDAwMCwgMHgyMGJkY2EwMzAwMDAwMDAwLCAweGU5YjZkZmUwMDAwMDAwMDAsCisgICAgMHhjZWQzZmE2MTAwMDAwMDAwLCAweGU2N2FlNDM5MDAwMDAwMDAsIDB4YzExZmMxYjgwMDAwMDAwMCwKKyAgICAweGI2MjhkOTg5MDAwMDAwMDAsIDB4OTE0ZGZjMDgwMDAwMDAwMCwgMHhiOWU0ZTI1MDAwMDAwMDAwLAorICAgIDB4OWU4MWM3ZDEwMDAwMDAwMCwgMHgxMDBiNmZiMzAwMDAwMDAwLCAweDM3NmU0YTMyMDAwMDAwMDAsCisgICAgMHgxZmM3NTQ2YTAwMDAwMDAwLCAweDM4YTI3MWViMDAwMDAwMDAsIDB4NGY5NTY5ZGEwMDAwMDAwMCwKKyAgICAweDY4ZjA0YzViMDAwMDAwMDAsIDB4NDA1OTUyMDMwMDAwMDAwMCwgMHg2NzNjNzc4MjAwMDAwMDAwLAorICAgIDB4YWUzNzYyNjEwMDAwMDAwMCwgMHg4OTUyNDdlMDAwMDAwMDAwLCAweGExZmI1OWI4MDAwMDAwMDAsCisgICAgMHg4NjllN2MzOTAwMDAwMDAwLCAweGYxYTk2NDA4MDAwMDAwMDAsIDB4ZDZjYzQxODkwMDAwMDAwMCwKKyAgICAweGZlNjU1ZmQxMDAwMDAwMDAsIDB4ZDkwMDdhNTAwMDAwMDAwMCwgMHgyZDc0MDRjYzAwMDAwMDAwLAorICAgIDB4MGExMTIxNGQwMDAwMDAwMCwgMHgyMmI4M2YxNTAwMDAwMDAwLCAweDA1ZGQxYTk0MDAwMDAwMDAsCisgICAgMHg3MmVhMDJhNTAwMDAwMDAwLCAweDU1OGYyNzI0MDAwMDAwMDAsIDB4N2QyNjM5N2MwMDAwMDAwMCwKKyAgICAweDVhNDMxY2ZkMDAwMDAwMDAsIDB4OTM0ODA5MWUwMDAwMDAwMCwgMHhiNDJkMmM5ZjAwMDAwMDAwLAorICAgIDB4OWM4NDMyYzcwMDAwMDAwMCwgMHhiYmUxMTc0NjAwMDAwMDAwLCAweGNjZDYwZjc3MDAwMDAwMDAsCisgICAgMHhlYmIzMmFmNjAwMDAwMDAwLCAweGMzMWEzNGFlMDAwMDAwMDAsIDB4ZTQ3ZjExMmYwMDAwMDAwMCwKKyAgICAweGRmMGY2NTZiMDAwMDAwMDAsIDB4Zjg2YTQwZWEwMDAwMDAwMCwgMHhkMGMzNWViMjAwMDAwMDAwLAorICAgIDB4ZjdhNjdiMzMwMDAwMDAwMCwgMHg4MDkxNjMwMjAwMDAwMDAwLCAweGE3ZjQ0NjgzMDAwMDAwMDAsCisgICAgMHg4ZjVkNThkYjAwMDAwMDAwLCAweGE4Mzg3ZDVhMDAwMDAwMDAsIDB4NjEzMzY4YjkwMDAwMDAwMCwKKyAgICAweDQ2NTY0ZDM4MDAwMDAwMDAsIDB4NmVmZjUzNjAwMDAwMDAwMCwgMHg0OTlhNzZlMTAwMDAwMDAwLAorICAgIDB4M2VhZDZlZDAwMDAwMDAwMCwgMHgxOWM4NGI1MTAwMDAwMDAwLCAweDMxNjE1NTA5MDAwMDAwMDAsCisgICAgMHgxNjA0NzA4ODAwMDAwMDAwLCAweGUyNzAwZTE0MDAwMDAwMDAsIDB4YzUxNTJiOTUwMDAwMDAwMCwKKyAgICAweGVkYmMzNWNkMDAwMDAwMDAsIDB4Y2FkOTEwNGMwMDAwMDAwMCwgMHhiZGVlMDg3ZDAwMDAwMDAwLAorICAgIDB4OWE4YjJkZmMwMDAwMDAwMCwgMHhiMjIyMzNhNDAwMDAwMDAwLCAweDk1NDcxNjI1MDAwMDAwMDAsCisgICAgMHg1YzRjMDNjNjAwMDAwMDAwLCAweDdiMjkyNjQ3MDAwMDAwMDAsIDB4NTM4MDM4MWYwMDAwMDAwMCwKKyAgICAweDc0ZTUxZDllMDAwMDAwMDAsIDB4MDNkMjA1YWYwMDAwMDAwMCwgMHgyNGI3MjAyZTAwMDAwMDAwLAorICAgIDB4MGMxZTNlNzYwMDAwMDAwMCwgMHgyYjdiMWJmNzAwMDAwMDAwLCAweGE1ZjFiMzk1MDAwMDAwMDAsCisgICAgMHg4Mjk0OTYxNDAwMDAwMDAwLCAweGFhM2Q4ODRjMDAwMDAwMDAsIDB4OGQ1OGFkY2QwMDAwMDAwMCwKKyAgICAweGZhNmZiNWZjMDAwMDAwMDAsIDB4ZGQwYTkwN2QwMDAwMDAwMCwgMHhmNWEzOGUyNTAwMDAwMDAwLAorICAgIDB4ZDJjNmFiYTQwMDAwMDAwMCwgMHgxYmNkYmU0NzAwMDAwMDAwLCAweDNjYTg5YmM2MDAwMDAwMDAsCisgICAgMHgxNDAxODU5ZTAwMDAwMDAwLCAweDMzNjRhMDFmMDAwMDAwMDAsIDB4NDQ1M2I4MmUwMDAwMDAwMCwKKyAgICAweDYzMzY5ZGFmMDAwMDAwMDAsIDB4NGI5ZjgzZjcwMDAwMDAwMCwgMHg2Y2ZhYTY3NjAwMDAwMDAwLAorICAgIDB4OTg4ZWQ4ZWEwMDAwMDAwMCwgMHhiZmViZmQ2YjAwMDAwMDAwLCAweDk3NDJlMzMzMDAwMDAwMDAsCisgICAgMHhiMDI3YzZiMjAwMDAwMDAwLCAweGM3MTBkZTgzMDAwMDAwMDAsIDB4ZTA3NWZiMDIwMDAwMDAwMCwKKyAgICAweGM4ZGNlNTVhMDAwMDAwMDAsIDB4ZWZiOWMwZGIwMDAwMDAwMCwgMHgyNmIyZDUzODAwMDAwMDAwLAorICAgIDB4MDFkN2YwYjkwMDAwMDAwMCwgMHgyOTdlZWVlMTAwMDAwMDAwLCAweDBlMWJjYjYwMDAwMDAwMDAsCisgICAgMHg3OTJjZDM1MTAwMDAwMDAwLCAweDVlNDlmNmQwMDAwMDAwMDAsIDB4NzZlMGU4ODgwMDAwMDAwMCwKKyAgICAweDUxODVjZDA5MDAwMDAwMDB9fTsKKworI2Vsc2UgLyogVyA9PSA0ICovCisKK2xvY2FsIGNvbnN0IHpfY3JjX3QgRkFSIGNyY19icmFpZF90YWJsZVtdWzI1Nl0gPSB7CisgICB7MHgwMDAwMDAwMCwgMHg5YmE1NGM2ZiwgMHhlYzNiOWU5ZiwgMHg3NzllZDJmMCwgMHgwMzA2M2I3ZiwKKyAgICAweDk4YTM3NzEwLCAweGVmM2RhNWUwLCAweDc0OThlOThmLCAweDA2MGM3NmZlLCAweDlkYTkzYTkxLAorICAgIDB4ZWEzN2U4NjEsIDB4NzE5MmE0MGUsIDB4MDUwYTRkODEsIDB4OWVhZjAxZWUsIDB4ZTkzMWQzMWUsCisgICAgMHg3Mjk0OWY3MSwgMHgwYzE4ZWRmYywgMHg5N2JkYTE5MywgMHhlMDIzNzM2MywgMHg3Yjg2M2YwYywKKyAgICAweDBmMWVkNjgzLCAweDk0YmI5YWVjLCAweGUzMjU0ODFjLCAweDc4ODAwNDczLCAweDBhMTQ5YjAyLAorICAgIDB4OTFiMWQ3NmQsIDB4ZTYyZjA1OWQsIDB4N2Q4YTQ5ZjIsIDB4MDkxMmEwN2QsIDB4OTJiN2VjMTIsCisgICAgMHhlNTI5M2VlMiwgMHg3ZThjNzI4ZCwgMHgxODMxZGJmOCwgMHg4Mzk0OTc5NywgMHhmNDBhNDU2NywKKyAgICAweDZmYWYwOTA4LCAweDFiMzdlMDg3LCAweDgwOTJhY2U4LCAweGY3MGM3ZTE4LCAweDZjYTkzMjc3LAorICAgIDB4MWUzZGFkMDYsIDB4ODU5OGUxNjksIDB4ZjIwNjMzOTksIDB4NjlhMzdmZjYsIDB4MWQzYjk2NzksCisgICAgMHg4NjllZGExNiwgMHhmMTAwMDhlNiwgMHg2YWE1NDQ4OSwgMHgxNDI5MzYwNCwgMHg4ZjhjN2E2YiwKKyAgICAweGY4MTJhODliLCAweDYzYjdlNGY0LCAweDE3MmYwZDdiLCAweDhjOGE0MTE0LCAweGZiMTQ5M2U0LAorICAgIDB4NjBiMWRmOGIsIDB4MTIyNTQwZmEsIDB4ODk4MDBjOTUsIDB4ZmUxZWRlNjUsIDB4NjViYjkyMGEsCisgICAgMHgxMTIzN2I4NSwgMHg4YTg2MzdlYSwgMHhmZDE4ZTUxYSwgMHg2NmJkYTk3NSwgMHgzMDYzYjdmMCwKKyAgICAweGFiYzZmYjlmLCAweGRjNTgyOTZmLCAweDQ3ZmQ2NTAwLCAweDMzNjU4YzhmLCAweGE4YzBjMGUwLAorICAgIDB4ZGY1ZTEyMTAsIDB4NDRmYjVlN2YsIDB4MzY2ZmMxMGUsIDB4YWRjYThkNjEsIDB4ZGE1NDVmOTEsCisgICAgMHg0MWYxMTNmZSwgMHgzNTY5ZmE3MSwgMHhhZWNjYjYxZSwgMHhkOTUyNjRlZSwgMHg0MmY3Mjg4MSwKKyAgICAweDNjN2I1YTBjLCAweGE3ZGUxNjYzLCAweGQwNDBjNDkzLCAweDRiZTU4OGZjLCAweDNmN2Q2MTczLAorICAgIDB4YTRkODJkMWMsIDB4ZDM0NmZmZWMsIDB4NDhlM2IzODMsIDB4M2E3NzJjZjIsIDB4YTFkMjYwOWQsCisgICAgMHhkNjRjYjI2ZCwgMHg0ZGU5ZmUwMiwgMHgzOTcxMTc4ZCwgMHhhMmQ0NWJlMiwgMHhkNTRhODkxMiwKKyAgICAweDRlZWZjNTdkLCAweDI4NTI2YzA4LCAweGIzZjcyMDY3LCAweGM0NjlmMjk3LCAweDVmY2NiZWY4LAorICAgIDB4MmI1NDU3NzcsIDB4YjBmMTFiMTgsIDB4Yzc2ZmM5ZTgsIDB4NWNjYTg1ODcsIDB4MmU1ZTFhZjYsCisgICAgMHhiNWZiNTY5OSwgMHhjMjY1ODQ2OSwgMHg1OWMwYzgwNiwgMHgyZDU4MjE4OSwgMHhiNmZkNmRlNiwKKyAgICAweGMxNjNiZjE2LCAweDVhYzZmMzc5LCAweDI0NGE4MWY0LCAweGJmZWZjZDliLCAweGM4NzExZjZiLAorICAgIDB4NTNkNDUzMDQsIDB4Mjc0Y2JhOGIsIDB4YmNlOWY2ZTQsIDB4Y2I3NzI0MTQsIDB4NTBkMjY4N2IsCisgICAgMHgyMjQ2ZjcwYSwgMHhiOWUzYmI2NSwgMHhjZTdkNjk5NSwgMHg1NWQ4MjVmYSwgMHgyMTQwY2M3NSwKKyAgICAweGJhZTU4MDFhLCAweGNkN2I1MmVhLCAweDU2ZGUxZTg1LCAweDYwYzc2ZmUwLCAweGZiNjIyMzhmLAorICAgIDB4OGNmY2YxN2YsIDB4MTc1OWJkMTAsIDB4NjNjMTU0OWYsIDB4Zjg2NDE4ZjAsIDB4OGZmYWNhMDAsCisgICAgMHgxNDVmODY2ZiwgMHg2NmNiMTkxZSwgMHhmZDZlNTU3MSwgMHg4YWYwODc4MSwgMHgxMTU1Y2JlZSwKKyAgICAweDY1Y2QyMjYxLCAweGZlNjg2ZTBlLCAweDg5ZjZiY2ZlLCAweDEyNTNmMDkxLCAweDZjZGY4MjFjLAorICAgIDB4Zjc3YWNlNzMsIDB4ODBlNDFjODMsIDB4MWI0MTUwZWMsIDB4NmZkOWI5NjMsIDB4ZjQ3Y2Y1MGMsCisgICAgMHg4M2UyMjdmYywgMHgxODQ3NmI5MywgMHg2YWQzZjRlMiwgMHhmMTc2Yjg4ZCwgMHg4NmU4NmE3ZCwKKyAgICAweDFkNGQyNjEyLCAweDY5ZDVjZjlkLCAweGYyNzA4M2YyLCAweDg1ZWU1MTAyLCAweDFlNGIxZDZkLAorICAgIDB4NzhmNmI0MTgsIDB4ZTM1M2Y4NzcsIDB4OTRjZDJhODcsIDB4MGY2ODY2ZTgsIDB4N2JmMDhmNjcsCisgICAgMHhlMDU1YzMwOCwgMHg5N2NiMTFmOCwgMHgwYzZlNWQ5NywgMHg3ZWZhYzJlNiwgMHhlNTVmOGU4OSwKKyAgICAweDkyYzE1Yzc5LCAweDA5NjQxMDE2LCAweDdkZmNmOTk5LCAweGU2NTliNWY2LCAweDkxYzc2NzA2LAorICAgIDB4MGE2MjJiNjksIDB4NzRlZTU5ZTQsIDB4ZWY0YjE1OGIsIDB4OThkNWM3N2IsIDB4MDM3MDhiMTQsCisgICAgMHg3N2U4NjI5YiwgMHhlYzRkMmVmNCwgMHg5YmQzZmMwNCwgMHgwMDc2YjA2YiwgMHg3MmUyMmYxYSwKKyAgICAweGU5NDc2Mzc1LCAweDllZDliMTg1LCAweDA1N2NmZGVhLCAweDcxZTQxNDY1LCAweGVhNDE1ODBhLAorICAgIDB4OWRkZjhhZmEsIDB4MDY3YWM2OTUsIDB4NTBhNGQ4MTAsIDB4Y2IwMTk0N2YsIDB4YmM5ZjQ2OGYsCisgICAgMHgyNzNhMGFlMCwgMHg1M2EyZTM2ZiwgMHhjODA3YWYwMCwgMHhiZjk5N2RmMCwgMHgyNDNjMzE5ZiwKKyAgICAweDU2YThhZWVlLCAweGNkMGRlMjgxLCAweGJhOTMzMDcxLCAweDIxMzY3YzFlLCAweDU1YWU5NTkxLAorICAgIDB4Y2UwYmQ5ZmUsIDB4Yjk5NTBiMGUsIDB4MjIzMDQ3NjEsIDB4NWNiYzM1ZWMsIDB4YzcxOTc5ODMsCisgICAgMHhiMDg3YWI3MywgMHgyYjIyZTcxYywgMHg1ZmJhMGU5MywgMHhjNDFmNDJmYywgMHhiMzgxOTAwYywKKyAgICAweDI4MjRkYzYzLCAweDVhYjA0MzEyLCAweGMxMTUwZjdkLCAweGI2OGJkZDhkLCAweDJkMmU5MWUyLAorICAgIDB4NTliNjc4NmQsIDB4YzIxMzM0MDIsIDB4YjU4ZGU2ZjIsIDB4MmUyOGFhOWQsIDB4NDg5NTAzZTgsCisgICAgMHhkMzMwNGY4NywgMHhhNGFlOWQ3NywgMHgzZjBiZDExOCwgMHg0YjkzMzg5NywgMHhkMDM2NzRmOCwKKyAgICAweGE3YThhNjA4LCAweDNjMGRlYTY3LCAweDRlOTk3NTE2LCAweGQ1M2MzOTc5LCAweGEyYTJlYjg5LAorICAgIDB4MzkwN2E3ZTYsIDB4NGQ5ZjRlNjksIDB4ZDYzYTAyMDYsIDB4YTFhNGQwZjYsIDB4M2EwMTljOTksCisgICAgMHg0NDhkZWUxNCwgMHhkZjI4YTI3YiwgMHhhOGI2NzA4YiwgMHgzMzEzM2NlNCwgMHg0NzhiZDU2YiwKKyAgICAweGRjMmU5OTA0LCAweGFiYjA0YmY0LCAweDMwMTUwNzliLCAweDQyODE5OGVhLCAweGQ5MjRkNDg1LAorICAgIDB4YWViYTA2NzUsIDB4MzUxZjRhMWEsIDB4NDE4N2EzOTUsIDB4ZGEyMmVmZmEsIDB4YWRiYzNkMGEsCisgICAgMHgzNjE5NzE2NX0sCisgICB7MHgwMDAwMDAwMCwgMHhjMThlZGZjMCwgMHg1ODZjYjljMSwgMHg5OWUyNjYwMSwgMHhiMGQ5NzM4MiwKKyAgICAweDcxNTdhYzQyLCAweGU4YjVjYTQzLCAweDI5M2IxNTgzLCAweGJhYzNlMTQ1LCAweDdiNGQzZTg1LAorICAgIDB4ZTJhZjU4ODQsIDB4MjMyMTg3NDQsIDB4MGExYTkyYzcsIDB4Y2I5NDRkMDcsIDB4NTI3NjJiMDYsCisgICAgMHg5M2Y4ZjRjNiwgMHhhZWY2YzRjYiwgMHg2Zjc4MWIwYiwgMHhmNjlhN2QwYSwgMHgzNzE0YTJjYSwKKyAgICAweDFlMmZiNzQ5LCAweGRmYTE2ODg5LCAweDQ2NDMwZTg4LCAweDg3Y2RkMTQ4LCAweDE0MzUyNThlLAorICAgIDB4ZDViYmZhNGUsIDB4NGM1OTljNGYsIDB4OGRkNzQzOGYsIDB4YTRlYzU2MGMsIDB4NjU2Mjg5Y2MsCisgICAgMHhmYzgwZWZjZCwgMHgzZDBlMzAwZCwgMHg4NjljOGZkNywgMHg0NzEyNTAxNywgMHhkZWYwMzYxNiwKKyAgICAweDFmN2VlOWQ2LCAweDM2NDVmYzU1LCAweGY3Y2IyMzk1LCAweDZlMjk0NTk0LCAweGFmYTc5YTU0LAorICAgIDB4M2M1ZjZlOTIsIDB4ZmRkMWIxNTIsIDB4NjQzM2Q3NTMsIDB4YTViZDA4OTMsIDB4OGM4NjFkMTAsCisgICAgMHg0ZDA4YzJkMCwgMHhkNGVhYTRkMSwgMHgxNTY0N2IxMSwgMHgyODZhNGIxYywgMHhlOWU0OTRkYywKKyAgICAweDcwMDZmMmRkLCAweGIxODgyZDFkLCAweDk4YjMzODllLCAweDU5M2RlNzVlLCAweGMwZGY4MTVmLAorICAgIDB4MDE1MTVlOWYsIDB4OTJhOWFhNTksIDB4NTMyNzc1OTksIDB4Y2FjNTEzOTgsIDB4MGI0YmNjNTgsCisgICAgMHgyMjcwZDlkYiwgMHhlM2ZlMDYxYiwgMHg3YTFjNjAxYSwgMHhiYjkyYmZkYSwgMHhkNjQ4MTllZiwKKyAgICAweDE3YzZjNjJmLCAweDhlMjRhMDJlLCAweDRmYWE3ZmVlLCAweDY2OTE2YTZkLCAweGE3MWZiNWFkLAorICAgIDB4M2VmZGQzYWMsIDB4ZmY3MzBjNmMsIDB4NmM4YmY4YWEsIDB4YWQwNTI3NmEsIDB4MzRlNzQxNmIsCisgICAgMHhmNTY5OWVhYiwgMHhkYzUyOGIyOCwgMHgxZGRjNTRlOCwgMHg4NDNlMzJlOSwgMHg0NWIwZWQyOSwKKyAgICAweDc4YmVkZDI0LCAweGI5MzAwMmU0LCAweDIwZDI2NGU1LCAweGUxNWNiYjI1LCAweGM4NjdhZWE2LAorICAgIDB4MDllOTcxNjYsIDB4OTAwYjE3NjcsIDB4NTE4NWM4YTcsIDB4YzI3ZDNjNjEsIDB4MDNmM2UzYTEsCisgICAgMHg5YTExODVhMCwgMHg1YjlmNWE2MCwgMHg3MmE0NGZlMywgMHhiMzJhOTAyMywgMHgyYWM4ZjYyMiwKKyAgICAweGViNDYyOWUyLCAweDUwZDQ5NjM4LCAweDkxNWE0OWY4LCAweDA4YjgyZmY5LCAweGM5MzZmMDM5LAorICAgIDB4ZTAwZGU1YmEsIDB4MjE4MzNhN2EsIDB4Yjg2MTVjN2IsIDB4NzllZjgzYmIsIDB4ZWExNzc3N2QsCisgICAgMHgyYjk5YThiZCwgMHhiMjdiY2ViYywgMHg3M2Y1MTE3YywgMHg1YWNlMDRmZiwgMHg5YjQwZGIzZiwKKyAgICAweDAyYTJiZDNlLCAweGMzMmM2MmZlLCAweGZlMjI1MmYzLCAweDNmYWM4ZDMzLCAweGE2NGVlYjMyLAorICAgIDB4NjdjMDM0ZjIsIDB4NGVmYjIxNzEsIDB4OGY3NWZlYjEsIDB4MTY5Nzk4YjAsIDB4ZDcxOTQ3NzAsCisgICAgMHg0NGUxYjNiNiwgMHg4NTZmNmM3NiwgMHgxYzhkMGE3NywgMHhkZDAzZDViNywgMHhmNDM4YzAzNCwKKyAgICAweDM1YjYxZmY0LCAweGFjNTQ3OWY1LCAweDZkZGFhNjM1LCAweDc3ZTEzNTlmLCAweGI2NmZlYTVmLAorICAgIDB4MmY4ZDhjNWUsIDB4ZWUwMzUzOWUsIDB4YzczODQ2MWQsIDB4MDZiNjk5ZGQsIDB4OWY1NGZmZGMsCisgICAgMHg1ZWRhMjAxYywgMHhjZDIyZDRkYSwgMHgwY2FjMGIxYSwgMHg5NTRlNmQxYiwgMHg1NGMwYjJkYiwKKyAgICAweDdkZmJhNzU4LCAweGJjNzU3ODk4LCAweDI1OTcxZTk5LCAweGU0MTljMTU5LCAweGQ5MTdmMTU0LAorICAgIDB4MTg5OTJlOTQsIDB4ODE3YjQ4OTUsIDB4NDBmNTk3NTUsIDB4NjljZTgyZDYsIDB4YTg0MDVkMTYsCisgICAgMHgzMWEyM2IxNywgMHhmMDJjZTRkNywgMHg2M2Q0MTAxMSwgMHhhMjVhY2ZkMSwgMHgzYmI4YTlkMCwKKyAgICAweGZhMzY3NjEwLCAweGQzMGQ2MzkzLCAweDEyODNiYzUzLCAweDhiNjFkYTUyLCAweDRhZWYwNTkyLAorICAgIDB4ZjE3ZGJhNDgsIDB4MzBmMzY1ODgsIDB4YTkxMTAzODksIDB4Njg5ZmRjNDksIDB4NDFhNGM5Y2EsCisgICAgMHg4MDJhMTYwYSwgMHgxOWM4NzAwYiwgMHhkODQ2YWZjYiwgMHg0YmJlNWIwZCwgMHg4YTMwODRjZCwKKyAgICAweDEzZDJlMmNjLCAweGQyNWMzZDBjLCAweGZiNjcyODhmLCAweDNhZTlmNzRmLCAweGEzMGI5MTRlLAorICAgIDB4NjI4NTRlOGUsIDB4NWY4YjdlODMsIDB4OWUwNWExNDMsIDB4MDdlN2M3NDIsIDB4YzY2OTE4ODIsCisgICAgMHhlZjUyMGQwMSwgMHgyZWRjZDJjMSwgMHhiNzNlYjRjMCwgMHg3NmIwNmIwMCwgMHhlNTQ4OWZjNiwKKyAgICAweDI0YzY0MDA2LCAweGJkMjQyNjA3LCAweDdjYWFmOWM3LCAweDU1OTFlYzQ0LCAweDk0MWYzMzg0LAorICAgIDB4MGRmZDU1ODUsIDB4Y2M3MzhhNDUsIDB4YTFhOTJjNzAsIDB4NjAyN2YzYjAsIDB4ZjljNTk1YjEsCisgICAgMHgzODRiNGE3MSwgMHgxMTcwNWZmMiwgMHhkMGZlODAzMiwgMHg0OTFjZTYzMywgMHg4ODkyMzlmMywKKyAgICAweDFiNmFjZDM1LCAweGRhZTQxMmY1LCAweDQzMDY3NGY0LCAweDgyODhhYjM0LCAweGFiYjNiZWI3LAorICAgIDB4NmEzZDYxNzcsIDB4ZjNkZjA3NzYsIDB4MzI1MWQ4YjYsIDB4MGY1ZmU4YmIsIDB4Y2VkMTM3N2IsCisgICAgMHg1NzMzNTE3YSwgMHg5NmJkOGViYSwgMHhiZjg2OWIzOSwgMHg3ZTA4NDRmOSwgMHhlN2VhMjJmOCwKKyAgICAweDI2NjRmZDM4LCAweGI1OWMwOWZlLCAweDc0MTJkNjNlLCAweGVkZjBiMDNmLCAweDJjN2U2ZmZmLAorICAgIDB4MDU0NTdhN2MsIDB4YzRjYmE1YmMsIDB4NWQyOWMzYmQsIDB4OWNhNzFjN2QsIDB4MjczNWEzYTcsCisgICAgMHhlNmJiN2M2NywgMHg3ZjU5MWE2NiwgMHhiZWQ3YzVhNiwgMHg5N2VjZDAyNSwgMHg1NjYyMGZlNSwKKyAgICAweGNmODA2OWU0LCAweDBlMGViNjI0LCAweDlkZjY0MmUyLCAweDVjNzg5ZDIyLCAweGM1OWFmYjIzLAorICAgIDB4MDQxNDI0ZTMsIDB4MmQyZjMxNjAsIDB4ZWNhMWVlYTAsIDB4NzU0Mzg4YTEsIDB4YjRjZDU3NjEsCisgICAgMHg4OWMzNjc2YywgMHg0ODRkYjhhYywgMHhkMWFmZGVhZCwgMHgxMDIxMDE2ZCwgMHgzOTFhMTRlZSwKKyAgICAweGY4OTRjYjJlLCAweDYxNzZhZDJmLCAweGEwZjg3MmVmLCAweDMzMDA4NjI5LCAweGYyOGU1OWU5LAorICAgIDB4NmI2YzNmZTgsIDB4YWFlMmUwMjgsIDB4ODNkOWY1YWIsIDB4NDI1NzJhNmIsIDB4ZGJiNTRjNmEsCisgICAgMHgxYTNiOTNhYX0sCisgICB7MHgwMDAwMDAwMCwgMHhlZmMyNmIzZSwgMHgwNGY1ZDAzZCwgMHhlYjM3YmIwMywgMHgwOWViYTA3YSwKKyAgICAweGU2MjljYjQ0LCAweDBkMWU3MDQ3LCAweGUyZGMxYjc5LCAweDEzZDc0MGY0LCAweGZjMTUyYmNhLAorICAgIDB4MTcyMjkwYzksIDB4ZjhlMGZiZjcsIDB4MWEzY2UwOGUsIDB4ZjVmZThiYjAsIDB4MWVjOTMwYjMsCisgICAgMHhmMTBiNWI4ZCwgMHgyN2FlODFlOCwgMHhjODZjZWFkNiwgMHgyMzViNTFkNSwgMHhjYzk5M2FlYiwKKyAgICAweDJlNDUyMTkyLCAweGMxODc0YWFjLCAweDJhYjBmMWFmLCAweGM1NzI5YTkxLCAweDM0NzljMTFjLAorICAgIDB4ZGJiYmFhMjIsIDB4MzA4YzExMjEsIDB4ZGY0ZTdhMWYsIDB4M2Q5MjYxNjYsIDB4ZDI1MDBhNTgsCisgICAgMHgzOTY3YjE1YiwgMHhkNmE1ZGE2NSwgMHg0ZjVkMDNkMCwgMHhhMDlmNjhlZSwgMHg0YmE4ZDNlZCwKKyAgICAweGE0NmFiOGQzLCAweDQ2YjZhM2FhLCAweGE5NzRjODk0LCAweDQyNDM3Mzk3LCAweGFkODExOGE5LAorICAgIDB4NWM4YTQzMjQsIDB4YjM0ODI4MWEsIDB4NTg3ZjkzMTksIDB4YjdiZGY4MjcsIDB4NTU2MWUzNWUsCisgICAgMHhiYWEzODg2MCwgMHg1MTk0MzM2MywgMHhiZTU2NTg1ZCwgMHg2OGYzODIzOCwgMHg4NzMxZTkwNiwKKyAgICAweDZjMDY1MjA1LCAweDgzYzQzOTNiLCAweDYxMTgyMjQyLCAweDhlZGE0OTdjLCAweDY1ZWRmMjdmLAorICAgIDB4OGEyZjk5NDEsIDB4N2IyNGMyY2MsIDB4OTRlNmE5ZjIsIDB4N2ZkMTEyZjEsIDB4OTAxMzc5Y2YsCisgICAgMHg3MmNmNjJiNiwgMHg5ZDBkMDk4OCwgMHg3NjNhYjI4YiwgMHg5OWY4ZDliNSwgMHg5ZWJhMDdhMCwKKyAgICAweDcxNzg2YzllLCAweDlhNGZkNzlkLCAweDc1OGRiY2EzLCAweDk3NTFhN2RhLCAweDc4OTNjY2U0LAorICAgIDB4OTNhNDc3ZTcsIDB4N2M2NjFjZDksIDB4OGQ2ZDQ3NTQsIDB4NjJhZjJjNmEsIDB4ODk5ODk3NjksCisgICAgMHg2NjVhZmM1NywgMHg4NDg2ZTcyZSwgMHg2YjQ0OGMxMCwgMHg4MDczMzcxMywgMHg2ZmIxNWMyZCwKKyAgICAweGI5MTQ4NjQ4LCAweDU2ZDZlZDc2LCAweGJkZTE1Njc1LCAweDUyMjMzZDRiLCAweGIwZmYyNjMyLAorICAgIDB4NWYzZDRkMGMsIDB4YjQwYWY2MGYsIDB4NWJjODlkMzEsIDB4YWFjM2M2YmMsIDB4NDUwMWFkODIsCisgICAgMHhhZTM2MTY4MSwgMHg0MWY0N2RiZiwgMHhhMzI4NjZjNiwgMHg0Y2VhMGRmOCwgMHhhN2RkYjZmYiwKKyAgICAweDQ4MWZkZGM1LCAweGQxZTcwNDcwLCAweDNlMjU2ZjRlLCAweGQ1MTJkNDRkLCAweDNhZDBiZjczLAorICAgIDB4ZDgwY2E0MGEsIDB4MzdjZWNmMzQsIDB4ZGNmOTc0MzcsIDB4MzMzYjFmMDksIDB4YzIzMDQ0ODQsCisgICAgMHgyZGYyMmZiYSwgMHhjNmM1OTRiOSwgMHgyOTA3ZmY4NywgMHhjYmRiZTRmZSwgMHgyNDE5OGZjMCwKKyAgICAweGNmMmUzNGMzLCAweDIwZWM1ZmZkLCAweGY2NDk4NTk4LCAweDE5OGJlZWE2LCAweGYyYmM1NWE1LAorICAgIDB4MWQ3ZTNlOWIsIDB4ZmZhMjI1ZTIsIDB4MTA2MDRlZGMsIDB4ZmI1N2Y1ZGYsIDB4MTQ5NTllZTEsCisgICAgMHhlNTllYzU2YywgMHgwYTVjYWU1MiwgMHhlMTZiMTU1MSwgMHgwZWE5N2U2ZiwgMHhlYzc1NjUxNiwKKyAgICAweDAzYjcwZTI4LCAweGU4ODBiNTJiLCAweDA3NDJkZTE1LCAweGU2MDUwOTAxLCAweDA5Yzc2MjNmLAorICAgIDB4ZTJmMGQ5M2MsIDB4MGQzMmIyMDIsIDB4ZWZlZWE5N2IsIDB4MDAyY2MyNDUsIDB4ZWIxYjc5NDYsCisgICAgMHgwNGQ5MTI3OCwgMHhmNWQyNDlmNSwgMHgxYTEwMjJjYiwgMHhmMTI3OTljOCwgMHgxZWU1ZjJmNiwKKyAgICAweGZjMzllOThmLCAweDEzZmI4MmIxLCAweGY4Y2MzOWIyLCAweDE3MGU1MjhjLCAweGMxYWI4OGU5LAorICAgIDB4MmU2OWUzZDcsIDB4YzU1ZTU4ZDQsIDB4MmE5YzMzZWEsIDB4Yzg0MDI4OTMsIDB4Mjc4MjQzYWQsCisgICAgMHhjY2I1ZjhhZSwgMHgyMzc3OTM5MCwgMHhkMjdjYzgxZCwgMHgzZGJlYTMyMywgMHhkNjg5MTgyMCwKKyAgICAweDM5NGI3MzFlLCAweGRiOTc2ODY3LCAweDM0NTUwMzU5LCAweGRmNjJiODVhLCAweDMwYTBkMzY0LAorICAgIDB4YTk1ODBhZDEsIDB4NDY5YTYxZWYsIDB4YWRhZGRhZWMsIDB4NDI2ZmIxZDIsIDB4YTBiM2FhYWIsCisgICAgMHg0ZjcxYzE5NSwgMHhhNDQ2N2E5NiwgMHg0Yjg0MTFhOCwgMHhiYThmNGEyNSwgMHg1NTRkMjExYiwKKyAgICAweGJlN2E5YTE4LCAweDUxYjhmMTI2LCAweGIzNjRlYTVmLCAweDVjYTY4MTYxLCAweGI3OTEzYTYyLAorICAgIDB4NTg1MzUxNWMsIDB4OGVmNjhiMzksIDB4NjEzNGUwMDcsIDB4OGEwMzViMDQsIDB4NjVjMTMwM2EsCisgICAgMHg4NzFkMmI0MywgMHg2OGRmNDA3ZCwgMHg4M2U4ZmI3ZSwgMHg2YzJhOTA0MCwgMHg5ZDIxY2JjZCwKKyAgICAweDcyZTNhMGYzLCAweDk5ZDQxYmYwLCAweDc2MTY3MGNlLCAweDk0Y2E2YmI3LCAweDdiMDgwMDg5LAorICAgIDB4OTAzZmJiOGEsIDB4N2ZmZGQwYjQsIDB4NzhiZjBlYTEsIDB4OTc3ZDY1OWYsIDB4N2M0YWRlOWMsCisgICAgMHg5Mzg4YjVhMiwgMHg3MTU0YWVkYiwgMHg5ZTk2YzVlNSwgMHg3NWExN2VlNiwgMHg5YTYzMTVkOCwKKyAgICAweDZiNjg0ZTU1LCAweDg0YWEyNTZiLCAweDZmOWQ5ZTY4LCAweDgwNWZmNTU2LCAweDYyODNlZTJmLAorICAgIDB4OGQ0MTg1MTEsIDB4NjY3NjNlMTIsIDB4ODliNDU1MmMsIDB4NWYxMThmNDksIDB4YjBkM2U0NzcsCisgICAgMHg1YmU0NWY3NCwgMHhiNDI2MzQ0YSwgMHg1NmZhMmYzMywgMHhiOTM4NDQwZCwgMHg1MjBmZmYwZSwKKyAgICAweGJkY2Q5NDMwLCAweDRjYzZjZmJkLCAweGEzMDRhNDgzLCAweDQ4MzMxZjgwLCAweGE3ZjE3NGJlLAorICAgIDB4NDUyZDZmYzcsIDB4YWFlZjA0ZjksIDB4NDFkOGJmZmEsIDB4YWUxYWQ0YzQsIDB4MzdlMjBkNzEsCisgICAgMHhkODIwNjY0ZiwgMHgzMzE3ZGQ0YywgMHhkY2Q1YjY3MiwgMHgzZTA5YWQwYiwgMHhkMWNiYzYzNSwKKyAgICAweDNhZmM3ZDM2LCAweGQ1M2UxNjA4LCAweDI0MzU0ZDg1LCAweGNiZjcyNmJiLCAweDIwYzA5ZGI4LAorICAgIDB4Y2YwMmY2ODYsIDB4MmRkZWVkZmYsIDB4YzIxYzg2YzEsIDB4MjkyYjNkYzIsIDB4YzZlOTU2ZmMsCisgICAgMHgxMDRjOGM5OSwgMHhmZjhlZTdhNywgMHgxNGI5NWNhNCwgMHhmYjdiMzc5YSwgMHgxOWE3MmNlMywKKyAgICAweGY2NjU0N2RkLCAweDFkNTJmY2RlLCAweGYyOTA5N2UwLCAweDAzOWJjYzZkLCAweGVjNTlhNzUzLAorICAgIDB4MDc2ZTFjNTAsIDB4ZThhYzc3NmUsIDB4MGE3MDZjMTcsIDB4ZTViMjA3MjksIDB4MGU4NWJjMmEsCisgICAgMHhlMTQ3ZDcxNH0sCisgICB7MHgwMDAwMDAwMCwgMHgxNzdiMTQ0MywgMHgyZWY2Mjg4NiwgMHgzOThkM2NjNSwgMHg1ZGVjNTEwYywKKyAgICAweDRhOTc0NTRmLCAweDczMWE3OThhLCAweDY0NjE2ZGM5LCAweGJiZDhhMjE4LCAweGFjYTNiNjViLAorICAgIDB4OTUyZThhOWUsIDB4ODI1NTllZGQsIDB4ZTYzNGYzMTQsIDB4ZjE0ZmU3NTcsIDB4YzhjMmRiOTIsCisgICAgMHhkZmI5Y2ZkMSwgMHhhY2MwNDI3MSwgMHhiYmJiNTYzMiwgMHg4MjM2NmFmNywgMHg5NTRkN2ViNCwKKyAgICAweGYxMmMxMzdkLCAweGU2NTcwNzNlLCAweGRmZGEzYmZiLCAweGM4YTEyZmI4LCAweDE3MThlMDY5LAorICAgIDB4MDA2M2Y0MmEsIDB4MzllZWM4ZWYsIDB4MmU5NWRjYWMsIDB4NGFmNGIxNjUsIDB4NWQ4ZmE1MjYsCisgICAgMHg2NDAyOTllMywgMHg3Mzc5OGRhMCwgMHg4MmYxODJhMywgMHg5NThhOTZlMCwgMHhhYzA3YWEyNSwKKyAgICAweGJiN2NiZTY2LCAweGRmMWRkM2FmLCAweGM4NjZjN2VjLCAweGYxZWJmYjI5LCAweGU2OTBlZjZhLAorICAgIDB4MzkyOTIwYmIsIDB4MmU1MjM0ZjgsIDB4MTdkZjA4M2QsIDB4MDBhNDFjN2UsIDB4NjRjNTcxYjcsCisgICAgMHg3M2JlNjVmNCwgMHg0YTMzNTkzMSwgMHg1ZDQ4NGQ3MiwgMHgyZTMxYzBkMiwgMHgzOTRhZDQ5MSwKKyAgICAweDAwYzdlODU0LCAweDE3YmNmYzE3LCAweDczZGQ5MWRlLCAweDY0YTY4NTlkLCAweDVkMmJiOTU4LAorICAgIDB4NGE1MGFkMWIsIDB4OTVlOTYyY2EsIDB4ODI5Mjc2ODksIDB4YmIxZjRhNGMsIDB4YWM2NDVlMGYsCisgICAgMHhjODA1MzNjNiwgMHhkZjdlMjc4NSwgMHhlNmYzMWI0MCwgMHhmMTg4MGYwMywgMHhkZTkyMDMwNywKKyAgICAweGM5ZTkxNzQ0LCAweGYwNjQyYjgxLCAweGU3MWYzZmMyLCAweDgzN2U1MjBiLCAweDk0MDU0NjQ4LAorICAgIDB4YWQ4ODdhOGQsIDB4YmFmMzZlY2UsIDB4NjU0YWExMWYsIDB4NzIzMWI1NWMsIDB4NGJiYzg5OTksCisgICAgMHg1Y2M3OWRkYSwgMHgzOGE2ZjAxMywgMHgyZmRkZTQ1MCwgMHgxNjUwZDg5NSwgMHgwMTJiY2NkNiwKKyAgICAweDcyNTI0MTc2LCAweDY1Mjk1NTM1LCAweDVjYTQ2OWYwLCAweDRiZGY3ZGIzLCAweDJmYmUxMDdhLAorICAgIDB4MzhjNTA0MzksIDB4MDE0ODM4ZmMsIDB4MTYzMzJjYmYsIDB4Yzk4YWUzNmUsIDB4ZGVmMWY3MmQsCisgICAgMHhlNzdjY2JlOCwgMHhmMDA3ZGZhYiwgMHg5NDY2YjI2MiwgMHg4MzFkYTYyMSwgMHhiYTkwOWFlNCwKKyAgICAweGFkZWI4ZWE3LCAweDVjNjM4MWE0LCAweDRiMTg5NWU3LCAweDcyOTVhOTIyLCAweDY1ZWViZDYxLAorICAgIDB4MDE4ZmQwYTgsIDB4MTZmNGM0ZWIsIDB4MmY3OWY4MmUsIDB4MzgwMmVjNmQsIDB4ZTdiYjIzYmMsCisgICAgMHhmMGMwMzdmZiwgMHhjOTRkMGIzYSwgMHhkZTM2MWY3OSwgMHhiYTU3NzJiMCwgMHhhZDJjNjZmMywKKyAgICAweDk0YTE1YTM2LCAweDgzZGE0ZTc1LCAweGYwYTNjM2Q1LCAweGU3ZDhkNzk2LCAweGRlNTVlYjUzLAorICAgIDB4YzkyZWZmMTAsIDB4YWQ0ZjkyZDksIDB4YmEzNDg2OWEsIDB4ODNiOWJhNWYsIDB4OTRjMmFlMWMsCisgICAgMHg0YjdiNjFjZCwgMHg1YzAwNzU4ZSwgMHg2NThkNDk0YiwgMHg3MmY2NWQwOCwgMHgxNjk3MzBjMSwKKyAgICAweDAxZWMyNDgyLCAweDM4NjExODQ3LCAweDJmMWEwYzA0LCAweDY2NTUwMDRmLCAweDcxMmUxNDBjLAorICAgIDB4NDhhMzI4YzksIDB4NWZkODNjOGEsIDB4M2JiOTUxNDMsIDB4MmNjMjQ1MDAsIDB4MTU0Zjc5YzUsCisgICAgMHgwMjM0NmQ4NiwgMHhkZDhkYTI1NywgMHhjYWY2YjYxNCwgMHhmMzdiOGFkMSwgMHhlNDAwOWU5MiwKKyAgICAweDgwNjFmMzViLCAweDk3MWFlNzE4LCAweGFlOTdkYmRkLCAweGI5ZWNjZjllLCAweGNhOTU0MjNlLAorICAgIDB4ZGRlZTU2N2QsIDB4ZTQ2MzZhYjgsIDB4ZjMxODdlZmIsIDB4OTc3OTEzMzIsIDB4ODAwMjA3NzEsCisgICAgMHhiOThmM2JiNCwgMHhhZWY0MmZmNywgMHg3MTRkZTAyNiwgMHg2NjM2ZjQ2NSwgMHg1ZmJiYzhhMCwKKyAgICAweDQ4YzBkY2UzLCAweDJjYTFiMTJhLCAweDNiZGFhNTY5LCAweDAyNTc5OWFjLCAweDE1MmM4ZGVmLAorICAgIDB4ZTRhNDgyZWMsIDB4ZjNkZjk2YWYsIDB4Y2E1MmFhNmEsIDB4ZGQyOWJlMjksIDB4Yjk0OGQzZTAsCisgICAgMHhhZTMzYzdhMywgMHg5N2JlZmI2NiwgMHg4MGM1ZWYyNSwgMHg1ZjdjMjBmNCwgMHg0ODA3MzRiNywKKyAgICAweDcxOGEwODcyLCAweDY2ZjExYzMxLCAweDAyOTA3MWY4LCAweDE1ZWI2NWJiLCAweDJjNjY1OTdlLAorICAgIDB4M2IxZDRkM2QsIDB4NDg2NGMwOWQsIDB4NWYxZmQ0ZGUsIDB4NjY5MmU4MWIsIDB4NzFlOWZjNTgsCisgICAgMHgxNTg4OTE5MSwgMHgwMmYzODVkMiwgMHgzYjdlYjkxNywgMHgyYzA1YWQ1NCwgMHhmM2JjNjI4NSwKKyAgICAweGU0Yzc3NmM2LCAweGRkNGE0YTAzLCAweGNhMzE1ZTQwLCAweGFlNTAzMzg5LCAweGI5MmIyN2NhLAorICAgIDB4ODBhNjFiMGYsIDB4OTdkZDBmNGMsIDB4YjhjNzAzNDgsIDB4YWZiYzE3MGIsIDB4OTYzMTJiY2UsCisgICAgMHg4MTRhM2Y4ZCwgMHhlNTJiNTI0NCwgMHhmMjUwNDYwNywgMHhjYmRkN2FjMiwgMHhkY2E2NmU4MSwKKyAgICAweDAzMWZhMTUwLCAweDE0NjRiNTEzLCAweDJkZTk4OWQ2LCAweDNhOTI5ZDk1LCAweDVlZjNmMDVjLAorICAgIDB4NDk4OGU0MWYsIDB4NzAwNWQ4ZGEsIDB4Njc3ZWNjOTksIDB4MTQwNzQxMzksIDB4MDM3YzU1N2EsCisgICAgMHgzYWYxNjliZiwgMHgyZDhhN2RmYywgMHg0OWViMTAzNSwgMHg1ZTkwMDQ3NiwgMHg2NzFkMzhiMywKKyAgICAweDcwNjYyY2YwLCAweGFmZGZlMzIxLCAweGI4YTRmNzYyLCAweDgxMjljYmE3LCAweDk2NTJkZmU0LAorICAgIDB4ZjIzM2IyMmQsIDB4ZTU0OGE2NmUsIDB4ZGNjNTlhYWIsIDB4Y2JiZThlZTgsIDB4M2EzNjgxZWIsCisgICAgMHgyZDRkOTVhOCwgMHgxNGMwYTk2ZCwgMHgwM2JiYmQyZSwgMHg2N2RhZDBlNywgMHg3MGExYzRhNCwKKyAgICAweDQ5MmNmODYxLCAweDVlNTdlYzIyLCAweDgxZWUyM2YzLCAweDk2OTUzN2IwLCAweGFmMTgwYjc1LAorICAgIDB4Yjg2MzFmMzYsIDB4ZGMwMjcyZmYsIDB4Y2I3OTY2YmMsIDB4ZjJmNDVhNzksIDB4ZTU4ZjRlM2EsCisgICAgMHg5NmY2YzM5YSwgMHg4MThkZDdkOSwgMHhiODAwZWIxYywgMHhhZjdiZmY1ZiwgMHhjYjFhOTI5NiwKKyAgICAweGRjNjE4NmQ1LCAweGU1ZWNiYTEwLCAweGYyOTdhZTUzLCAweDJkMmU2MTgyLCAweDNhNTU3NWMxLAorICAgIDB4MDNkODQ5MDQsIDB4MTRhMzVkNDcsIDB4NzBjMjMwOGUsIDB4NjdiOTI0Y2QsIDB4NWUzNDE4MDgsCisgICAgMHg0OTRmMGM0Yn19OworCitsb2NhbCBjb25zdCB6X3dvcmRfdCBGQVIgY3JjX2JyYWlkX2JpZ190YWJsZVtdWzI1Nl0gPSB7CisgICB7MHgwMDAwMDAwMCwgMHg0MzE0N2IxNywgMHg4NjI4ZjYyZSwgMHhjNTNjOGQzOSwgMHgwYzUxZWM1ZCwKKyAgICAweDRmNDU5NzRhLCAweDhhNzkxYTczLCAweGM5NmQ2MTY0LCAweDE4YTJkOGJiLCAweDViYjZhM2FjLAorICAgIDB4OWU4YTJlOTUsIDB4ZGQ5ZTU1ODIsIDB4MTRmMzM0ZTYsIDB4NTdlNzRmZjEsIDB4OTJkYmMyYzgsCisgICAgMHhkMWNmYjlkZiwgMHg3MTQyYzBhYywgMHgzMjU2YmJiYiwgMHhmNzZhMzY4MiwgMHhiNDdlNGQ5NSwKKyAgICAweDdkMTMyY2YxLCAweDNlMDc1N2U2LCAweGZiM2JkYWRmLCAweGI4MmZhMWM4LCAweDY5ZTAxODE3LAorICAgIDB4MmFmNDYzMDAsIDB4ZWZjOGVlMzksIDB4YWNkYzk1MmUsIDB4NjViMWY0NGEsIDB4MjZhNThmNWQsCisgICAgMHhlMzk5MDI2NCwgMHhhMDhkNzk3MywgMHhhMzgyZjE4MiwgMHhlMDk2OGE5NSwgMHgyNWFhMDdhYywKKyAgICAweDY2YmU3Y2JiLCAweGFmZDMxZGRmLCAweGVjYzc2NmM4LCAweDI5ZmJlYmYxLCAweDZhZWY5MGU2LAorICAgIDB4YmIyMDI5MzksIDB4ZjgzNDUyMmUsIDB4M2QwOGRmMTcsIDB4N2UxY2E0MDAsIDB4Yjc3MWM1NjQsCisgICAgMHhmNDY1YmU3MywgMHgzMTU5MzM0YSwgMHg3MjRkNDg1ZCwgMHhkMmMwMzEyZSwgMHg5MWQ0NGEzOSwKKyAgICAweDU0ZThjNzAwLCAweDE3ZmNiYzE3LCAweGRlOTFkZDczLCAweDlkODVhNjY0LCAweDU4YjkyYjVkLAorICAgIDB4MWJhZDUwNGEsIDB4Y2E2MmU5OTUsIDB4ODk3NjkyODIsIDB4NGM0YTFmYmIsIDB4MGY1ZTY0YWMsCisgICAgMHhjNjMzMDVjOCwgMHg4NTI3N2VkZiwgMHg0MDFiZjNlNiwgMHgwMzBmODhmMSwgMHgwNzAzOTJkZSwKKyAgICAweDQ0MTdlOWM5LCAweDgxMmI2NGYwLCAweGMyM2YxZmU3LCAweDBiNTI3ZTgzLCAweDQ4NDYwNTk0LAorICAgIDB4OGQ3YTg4YWQsIDB4Y2U2ZWYzYmEsIDB4MWZhMTRhNjUsIDB4NWNiNTMxNzIsIDB4OTk4OWJjNGIsCisgICAgMHhkYTlkYzc1YywgMHgxM2YwYTYzOCwgMHg1MGU0ZGQyZiwgMHg5NWQ4NTAxNiwgMHhkNmNjMmIwMSwKKyAgICAweDc2NDE1MjcyLCAweDM1NTUyOTY1LCAweGYwNjlhNDVjLCAweGIzN2RkZjRiLCAweDdhMTBiZTJmLAorICAgIDB4MzkwNGM1MzgsIDB4ZmMzODQ4MDEsIDB4YmYyYzMzMTYsIDB4NmVlMzhhYzksIDB4MmRmN2YxZGUsCisgICAgMHhlOGNiN2NlNywgMHhhYmRmMDdmMCwgMHg2MmIyNjY5NCwgMHgyMWE2MWQ4MywgMHhlNDlhOTBiYSwKKyAgICAweGE3OGVlYmFkLCAweGE0ODE2MzVjLCAweGU3OTUxODRiLCAweDIyYTk5NTcyLCAweDYxYmRlZTY1LAorICAgIDB4YThkMDhmMDEsIDB4ZWJjNGY0MTYsIDB4MmVmODc5MmYsIDB4NmRlYzAyMzgsIDB4YmMyM2JiZTcsCisgICAgMHhmZjM3YzBmMCwgMHgzYTBiNGRjOSwgMHg3OTFmMzZkZSwgMHhiMDcyNTdiYSwgMHhmMzY2MmNhZCwKKyAgICAweDM2NWFhMTk0LCAweDc1NGVkYTgzLCAweGQ1YzNhM2YwLCAweDk2ZDdkOGU3LCAweDUzZWI1NWRlLAorICAgIDB4MTBmZjJlYzksIDB4ZDk5MjRmYWQsIDB4OWE4NjM0YmEsIDB4NWZiYWI5ODMsIDB4MWNhZWMyOTQsCisgICAgMHhjZDYxN2I0YiwgMHg4ZTc1MDA1YywgMHg0YjQ5OGQ2NSwgMHgwODVkZjY3MiwgMHhjMTMwOTcxNiwKKyAgICAweDgyMjRlYzAxLCAweDQ3MTg2MTM4LCAweDA0MGMxYTJmLCAweDRmMDA1NTY2LCAweDBjMTQyZTcxLAorICAgIDB4YzkyOGEzNDgsIDB4OGEzY2Q4NWYsIDB4NDM1MWI5M2IsIDB4MDA0NWMyMmMsIDB4YzU3OTRmMTUsCisgICAgMHg4NjZkMzQwMiwgMHg1N2EyOGRkZCwgMHgxNGI2ZjZjYSwgMHhkMThhN2JmMywgMHg5MjllMDBlNCwKKyAgICAweDViZjM2MTgwLCAweDE4ZTcxYTk3LCAweGRkZGI5N2FlLCAweDllY2ZlY2I5LCAweDNlNDI5NWNhLAorICAgIDB4N2Q1NmVlZGQsIDB4Yjg2YTYzZTQsIDB4ZmI3ZTE4ZjMsIDB4MzIxMzc5OTcsIDB4NzEwNzAyODAsCisgICAgMHhiNDNiOGZiOSwgMHhmNzJmZjRhZSwgMHgyNmUwNGQ3MSwgMHg2NWY0MzY2NiwgMHhhMGM4YmI1ZiwKKyAgICAweGUzZGNjMDQ4LCAweDJhYjFhMTJjLCAweDY5YTVkYTNiLCAweGFjOTk1NzAyLCAweGVmOGQyYzE1LAorICAgIDB4ZWM4MmE0ZTQsIDB4YWY5NmRmZjMsIDB4NmFhYTUyY2EsIDB4MjliZTI5ZGQsIDB4ZTBkMzQ4YjksCisgICAgMHhhM2M3MzNhZSwgMHg2NmZiYmU5NywgMHgyNWVmYzU4MCwgMHhmNDIwN2M1ZiwgMHhiNzM0MDc0OCwKKyAgICAweDcyMDg4YTcxLCAweDMxMWNmMTY2LCAweGY4NzE5MDAyLCAweGJiNjVlYjE1LCAweDdlNTk2NjJjLAorICAgIDB4M2Q0ZDFkM2IsIDB4OWRjMDY0NDgsIDB4ZGVkNDFmNWYsIDB4MWJlODkyNjYsIDB4NThmY2U5NzEsCisgICAgMHg5MTkxODgxNSwgMHhkMjg1ZjMwMiwgMHgxN2I5N2UzYiwgMHg1NGFkMDUyYywgMHg4NTYyYmNmMywKKyAgICAweGM2NzZjN2U0LCAweDAzNGE0YWRkLCAweDQwNWUzMWNhLCAweDg5MzM1MGFlLCAweGNhMjcyYmI5LAorICAgIDB4MGYxYmE2ODAsIDB4NGMwZmRkOTcsIDB4NDgwM2M3YjgsIDB4MGIxN2JjYWYsIDB4Y2UyYjMxOTYsCisgICAgMHg4ZDNmNGE4MSwgMHg0NDUyMmJlNSwgMHgwNzQ2NTBmMiwgMHhjMjdhZGRjYiwgMHg4MTZlYTZkYywKKyAgICAweDUwYTExZjAzLCAweDEzYjU2NDE0LCAweGQ2ODllOTJkLCAweDk1OWQ5MjNhLCAweDVjZjBmMzVlLAorICAgIDB4MWZlNDg4NDksIDB4ZGFkODA1NzAsIDB4OTljYzdlNjcsIDB4Mzk0MTA3MTQsIDB4N2E1NTdjMDMsCisgICAgMHhiZjY5ZjEzYSwgMHhmYzdkOGEyZCwgMHgzNTEwZWI0OSwgMHg3NjA0OTA1ZSwgMHhiMzM4MWQ2NywKKyAgICAweGYwMmM2NjcwLCAweDIxZTNkZmFmLCAweDYyZjdhNGI4LCAweGE3Y2IyOTgxLCAweGU0ZGY1Mjk2LAorICAgIDB4MmRiMjMzZjIsIDB4NmVhNjQ4ZTUsIDB4YWI5YWM1ZGMsIDB4ZTg4ZWJlY2IsIDB4ZWI4MTM2M2EsCisgICAgMHhhODk1NGQyZCwgMHg2ZGE5YzAxNCwgMHgyZWJkYmIwMywgMHhlN2QwZGE2NywgMHhhNGM0YTE3MCwKKyAgICAweDYxZjgyYzQ5LCAweDIyZWM1NzVlLCAweGYzMjNlZTgxLCAweGIwMzc5NTk2LCAweDc1MGIxOGFmLAorICAgIDB4MzYxZjYzYjgsIDB4ZmY3MjAyZGMsIDB4YmM2Njc5Y2IsIDB4Nzk1YWY0ZjIsIDB4M2E0ZThmZTUsCisgICAgMHg5YWMzZjY5NiwgMHhkOWQ3OGQ4MSwgMHgxY2ViMDBiOCwgMHg1ZmZmN2JhZiwgMHg5NjkyMWFjYiwKKyAgICAweGQ1ODY2MWRjLCAweDEwYmFlY2U1LCAweDUzYWU5N2YyLCAweDgyNjEyZTJkLCAweGMxNzU1NTNhLAorICAgIDB4MDQ0OWQ4MDMsIDB4NDc1ZGEzMTQsIDB4OGUzMGMyNzAsIDB4Y2QyNGI5NjcsIDB4MDgxODM0NWUsCisgICAgMHg0YjBjNGY0OX0sCisgICB7MHgwMDAwMDAwMCwgMHgzZTZiYzJlZiwgMHgzZGQwZjUwNCwgMHgwM2JiMzdlYiwgMHg3YWEwZWIwOSwKKyAgICAweDQ0Y2IyOWU2LCAweDQ3NzAxZTBkLCAweDc5MWJkY2UyLCAweGY0NDBkNzEzLCAweGNhMmIxNWZjLAorICAgIDB4Yzk5MDIyMTcsIDB4ZjdmYmUwZjgsIDB4OGVlMDNjMWEsIDB4YjA4YmZlZjUsIDB4YjMzMGM5MWUsCisgICAgMHg4ZDViMGJmMSwgMHhlODgxYWUyNywgMHhkNmVhNmNjOCwgMHhkNTUxNWIyMywgMHhlYjNhOTljYywKKyAgICAweDkyMjE0NTJlLCAweGFjNGE4N2MxLCAweGFmZjFiMDJhLCAweDkxOWE3MmM1LCAweDFjYzE3OTM0LAorICAgIDB4MjJhYWJiZGIsIDB4MjExMThjMzAsIDB4MWY3YTRlZGYsIDB4NjY2MTkyM2QsIDB4NTgwYTUwZDIsCisgICAgMHg1YmIxNjczOSwgMHg2NWRhYTVkNiwgMHhkMDAzNWQ0ZiwgMHhlZTY4OWZhMCwgMHhlZGQzYTg0YiwKKyAgICAweGQzYjg2YWE0LCAweGFhYTNiNjQ2LCAweDk0Yzg3NGE5LCAweDk3NzM0MzQyLCAweGE5MTg4MWFkLAorICAgIDB4MjQ0MzhhNWMsIDB4MWEyODQ4YjMsIDB4MTk5MzdmNTgsIDB4MjdmOGJkYjcsIDB4NWVlMzYxNTUsCisgICAgMHg2MDg4YTNiYSwgMHg2MzMzOTQ1MSwgMHg1ZDU4NTZiZSwgMHgzODgyZjM2OCwgMHgwNmU5MzE4NywKKyAgICAweDA1NTIwNjZjLCAweDNiMzljNDgzLCAweDQyMjIxODYxLCAweDdjNDlkYThlLCAweDdmZjJlZDY1LAorICAgIDB4NDE5OTJmOGEsIDB4Y2NjMjI0N2IsIDB4ZjJhOWU2OTQsIDB4ZjExMmQxN2YsIDB4Y2Y3OTEzOTAsCisgICAgMHhiNjYyY2Y3MiwgMHg4ODA5MGQ5ZCwgMHg4YmIyM2E3NiwgMHhiNWQ5Zjg5OSwgMHhhMDA3YmE5ZSwKKyAgICAweDllNmM3ODcxLCAweDlkZDc0ZjlhLCAweGEzYmM4ZDc1LCAweGRhYTc1MTk3LCAweGU0Y2M5Mzc4LAorICAgIDB4ZTc3N2E0OTMsIDB4ZDkxYzY2N2MsIDB4NTQ0NzZkOGQsIDB4NmEyY2FmNjIsIDB4Njk5Nzk4ODksCisgICAgMHg1N2ZjNWE2NiwgMHgyZWU3ODY4NCwgMHgxMDhjNDQ2YiwgMHgxMzM3NzM4MCwgMHgyZDVjYjE2ZiwKKyAgICAweDQ4ODYxNGI5LCAweDc2ZWRkNjU2LCAweDc1NTZlMWJkLCAweDRiM2QyMzUyLCAweDMyMjZmZmIwLAorICAgIDB4MGM0ZDNkNWYsIDB4MGZmNjBhYjQsIDB4MzE5ZGM4NWIsIDB4YmNjNmMzYWEsIDB4ODJhZDAxNDUsCisgICAgMHg4MTE2MzZhZSwgMHhiZjdkZjQ0MSwgMHhjNjY2MjhhMywgMHhmODBkZWE0YywgMHhmYmI2ZGRhNywKKyAgICAweGM1ZGQxZjQ4LCAweDcwMDRlN2QxLCAweDRlNmYyNTNlLCAweDRkZDQxMmQ1LCAweDczYmZkMDNhLAorICAgIDB4MGFhNDBjZDgsIDB4MzRjZmNlMzcsIDB4Mzc3NGY5ZGMsIDB4MDkxZjNiMzMsIDB4ODQ0NDMwYzIsCisgICAgMHhiYTJmZjIyZCwgMHhiOTk0YzVjNiwgMHg4N2ZmMDcyOSwgMHhmZWU0ZGJjYiwgMHhjMDhmMTkyNCwKKyAgICAweGMzMzQyZWNmLCAweGZkNWZlYzIwLCAweDk4ODU0OWY2LCAweGE2ZWU4YjE5LCAweGE1NTViY2YyLAorICAgIDB4OWIzZTdlMWQsIDB4ZTIyNWEyZmYsIDB4ZGM0ZTYwMTAsIDB4ZGZmNTU3ZmIsIDB4ZTE5ZTk1MTQsCisgICAgMHg2Y2M1OWVlNSwgMHg1MmFlNWMwYSwgMHg1MTE1NmJlMSwgMHg2ZjdlYTkwZSwgMHgxNjY1NzVlYywKKyAgICAweDI4MGViNzAzLCAweDJiYjU4MGU4LCAweDE1ZGU0MjA3LCAweDAxMDkwNWU2LCAweDNmNjJjNzA5LAorICAgIDB4M2NkOWYwZTIsIDB4MDJiMjMyMGQsIDB4N2JhOWVlZWYsIDB4NDVjMjJjMDAsIDB4NDY3OTFiZWIsCisgICAgMHg3ODEyZDkwNCwgMHhmNTQ5ZDJmNSwgMHhjYjIyMTAxYSwgMHhjODk5MjdmMSwgMHhmNmYyZTUxZSwKKyAgICAweDhmZTkzOWZjLCAweGIxODJmYjEzLCAweGIyMzljY2Y4LCAweDhjNTIwZTE3LCAweGU5ODhhYmMxLAorICAgIDB4ZDdlMzY5MmUsIDB4ZDQ1ODVlYzUsIDB4ZWEzMzljMmEsIDB4OTMyODQwYzgsIDB4YWQ0MzgyMjcsCisgICAgMHhhZWY4YjVjYywgMHg5MDkzNzcyMywgMHgxZGM4N2NkMiwgMHgyM2EzYmUzZCwgMHgyMDE4ODlkNiwKKyAgICAweDFlNzM0YjM5LCAweDY3Njg5N2RiLCAweDU5MDM1NTM0LCAweDVhYjg2MmRmLCAweDY0ZDNhMDMwLAorICAgIDB4ZDEwYTU4YTksIDB4ZWY2MTlhNDYsIDB4ZWNkYWFkYWQsIDB4ZDJiMTZmNDIsIDB4YWJhYWIzYTAsCisgICAgMHg5NWMxNzE0ZiwgMHg5NjdhNDZhNCwgMHhhODExODQ0YiwgMHgyNTRhOGZiYSwgMHgxYjIxNGQ1NSwKKyAgICAweDE4OWE3YWJlLCAweDI2ZjFiODUxLCAweDVmZWE2NGIzLCAweDYxODFhNjVjLCAweDYyM2E5MWI3LAorICAgIDB4NWM1MTUzNTgsIDB4Mzk4YmY2OGUsIDB4MDdlMDM0NjEsIDB4MDQ1YjAzOGEsIDB4M2EzMGMxNjUsCisgICAgMHg0MzJiMWQ4NywgMHg3ZDQwZGY2OCwgMHg3ZWZiZTg4MywgMHg0MDkwMmE2YywgMHhjZGNiMjE5ZCwKKyAgICAweGYzYTBlMzcyLCAweGYwMWJkNDk5LCAweGNlNzAxNjc2LCAweGI3NmJjYTk0LCAweDg5MDAwODdiLAorICAgIDB4OGFiYjNmOTAsIDB4YjRkMGZkN2YsIDB4YTEwZWJmNzgsIDB4OWY2NTdkOTcsIDB4OWNkZTRhN2MsCisgICAgMHhhMmI1ODg5MywgMHhkYmFlNTQ3MSwgMHhlNWM1OTY5ZSwgMHhlNjdlYTE3NSwgMHhkODE1NjM5YSwKKyAgICAweDU1NGU2ODZiLCAweDZiMjVhYTg0LCAweDY4OWU5ZDZmLCAweDU2ZjU1ZjgwLCAweDJmZWU4MzYyLAorICAgIDB4MTE4NTQxOGQsIDB4MTIzZTc2NjYsIDB4MmM1NWI0ODksIDB4NDk4ZjExNWYsIDB4NzdlNGQzYjAsCisgICAgMHg3NDVmZTQ1YiwgMHg0YTM0MjZiNCwgMHgzMzJmZmE1NiwgMHgwZDQ0MzhiOSwgMHgwZWZmMGY1MiwKKyAgICAweDMwOTRjZGJkLCAweGJkY2ZjNjRjLCAweDgzYTQwNGEzLCAweDgwMWYzMzQ4LCAweGJlNzRmMWE3LAorICAgIDB4Yzc2ZjJkNDUsIDB4ZjkwNGVmYWEsIDB4ZmFiZmQ4NDEsIDB4YzRkNDFhYWUsIDB4NzEwZGUyMzcsCisgICAgMHg0ZjY2MjBkOCwgMHg0Y2RkMTczMywgMHg3MmI2ZDVkYywgMHgwYmFkMDkzZSwgMHgzNWM2Y2JkMSwKKyAgICAweDM2N2RmYzNhLCAweDA4MTYzZWQ1LCAweDg1NGQzNTI0LCAweGJiMjZmN2NiLCAweGI4OWRjMDIwLAorICAgIDB4ODZmNjAyY2YsIDB4ZmZlZGRlMmQsIDB4YzE4NjFjYzIsIDB4YzIzZDJiMjksIDB4ZmM1NmU5YzYsCisgICAgMHg5OThjNGMxMCwgMHhhN2U3OGVmZiwgMHhhNDVjYjkxNCwgMHg5YTM3N2JmYiwgMHhlMzJjYTcxOSwKKyAgICAweGRkNDc2NWY2LCAweGRlZmM1MjFkLCAweGUwOTc5MGYyLCAweDZkY2M5YjAzLCAweDUzYTc1OWVjLAorICAgIDB4NTAxYzZlMDcsIDB4NmU3N2FjZTgsIDB4MTc2YzcwMGEsIDB4MjkwN2IyZTUsIDB4MmFiYzg1MGUsCisgICAgMHgxNGQ3NDdlMX0sCisgICB7MHgwMDAwMDAwMCwgMHhjMGRmOGVjMSwgMHhjMWI5NmM1OCwgMHgwMTY2ZTI5OSwgMHg4MjczZDliMCwKKyAgICAweDQyYWM1NzcxLCAweDQzY2FiNWU4LCAweDgzMTUzYjI5LCAweDQ1ZTFjM2JhLCAweDg1M2U0ZDdiLAorICAgIDB4ODQ1OGFmZTIsIDB4NDQ4NzIxMjMsIDB4Yzc5MjFhMGEsIDB4MDc0ZDk0Y2IsIDB4MDYyYjc2NTIsCisgICAgMHhjNmY0Zjg5MywgMHhjYmM0ZjZhZSwgMHgwYjFiNzg2ZiwgMHgwYTdkOWFmNiwgMHhjYWEyMTQzNywKKyAgICAweDQ5YjcyZjFlLCAweDg5NjhhMWRmLCAweDg4MGU0MzQ2LCAweDQ4ZDFjZDg3LCAweDhlMjUzNTE0LAorICAgIDB4NGVmYWJiZDUsIDB4NGY5YzU5NGMsIDB4OGY0M2Q3OGQsIDB4MGM1NmVjYTQsIDB4Y2M4OTYyNjUsCisgICAgMHhjZGVmODBmYywgMHgwZDMwMGUzZCwgMHhkNzhmOWM4NiwgMHgxNzUwMTI0NywgMHgxNjM2ZjBkZSwKKyAgICAweGQ2ZTk3ZTFmLCAweDU1ZmM0NTM2LCAweDk1MjNjYmY3LCAweDk0NDUyOTZlLCAweDU0OWFhN2FmLAorICAgIDB4OTI2ZTVmM2MsIDB4NTJiMWQxZmQsIDB4NTNkNzMzNjQsIDB4OTMwOGJkYTUsIDB4MTAxZDg2OGMsCisgICAgMHhkMGMyMDg0ZCwgMHhkMWE0ZWFkNCwgMHgxMTdiNjQxNSwgMHgxYzRiNmEyOCwgMHhkYzk0ZTRlOSwKKyAgICAweGRkZjIwNjcwLCAweDFkMmQ4OGIxLCAweDllMzhiMzk4LCAweDVlZTczZDU5LCAweDVmODFkZmMwLAorICAgIDB4OWY1ZTUxMDEsIDB4NTlhYWE5OTIsIDB4OTk3NTI3NTMsIDB4OTgxM2M1Y2EsIDB4NThjYzRiMGIsCisgICAgMHhkYmQ5NzAyMiwgMHgxYjA2ZmVlMywgMHgxYTYwMWM3YSwgMHhkYWJmOTJiYiwgMHhlZjE5NDhkNiwKKyAgICAweDJmYzZjNjE3LCAweDJlYTAyNDhlLCAweGVlN2ZhYTRmLCAweDZkNmE5MTY2LCAweGFkYjUxZmE3LAorICAgIDB4YWNkM2ZkM2UsIDB4NmMwYzczZmYsIDB4YWFmODhiNmMsIDB4NmEyNzA1YWQsIDB4NmI0MWU3MzQsCisgICAgMHhhYjllNjlmNSwgMHgyODhiNTJkYywgMHhlODU0ZGMxZCwgMHhlOTMyM2U4NCwgMHgyOWVkYjA0NSwKKyAgICAweDI0ZGRiZTc4LCAweGU0MDIzMGI5LCAweGU1NjRkMjIwLCAweDI1YmI1Y2UxLCAweGE2YWU2N2M4LAorICAgIDB4NjY3MWU5MDksIDB4NjcxNzBiOTAsIDB4YTdjODg1NTEsIDB4NjEzYzdkYzIsIDB4YTFlM2YzMDMsCisgICAgMHhhMDg1MTE5YSwgMHg2MDVhOWY1YiwgMHhlMzRmYTQ3MiwgMHgyMzkwMmFiMywgMHgyMmY2YzgyYSwKKyAgICAweGUyMjk0NmViLCAweDM4OTZkNDUwLCAweGY4NDk1YTkxLCAweGY5MmZiODA4LCAweDM5ZjAzNmM5LAorICAgIDB4YmFlNTBkZTAsIDB4N2EzYTgzMjEsIDB4N2I1YzYxYjgsIDB4YmI4M2VmNzksIDB4N2Q3NzE3ZWEsCisgICAgMHhiZGE4OTkyYiwgMHhiY2NlN2JiMiwgMHg3YzExZjU3MywgMHhmZjA0Y2U1YSwgMHgzZmRiNDA5YiwKKyAgICAweDNlYmRhMjAyLCAweGZlNjIyY2MzLCAweGYzNTIyMmZlLCAweDMzOGRhYzNmLCAweDMyZWI0ZWE2LAorICAgIDB4ZjIzNGMwNjcsIDB4NzEyMWZiNGUsIDB4YjFmZTc1OGYsIDB4YjA5ODk3MTYsIDB4NzA0NzE5ZDcsCisgICAgMHhiNmIzZTE0NCwgMHg3NjZjNmY4NSwgMHg3NzBhOGQxYywgMHhiN2Q1MDNkZCwgMHgzNGMwMzhmNCwKKyAgICAweGY0MWZiNjM1LCAweGY1Nzk1NGFjLCAweDM1YTZkYTZkLCAweDlmMzVlMTc3LCAweDVmZWE2ZmI2LAorICAgIDB4NWU4YzhkMmYsIDB4OWU1MzAzZWUsIDB4MWQ0NjM4YzcsIDB4ZGQ5OWI2MDYsIDB4ZGNmZjU0OWYsCisgICAgMHgxYzIwZGE1ZSwgMHhkYWQ0MjJjZCwgMHgxYTBiYWMwYywgMHgxYjZkNGU5NSwgMHhkYmIyYzA1NCwKKyAgICAweDU4YTdmYjdkLCAweDk4Nzg3NWJjLCAweDk5MWU5NzI1LCAweDU5YzExOWU0LCAweDU0ZjExN2Q5LAorICAgIDB4OTQyZTk5MTgsIDB4OTU0ODdiODEsIDB4NTU5N2Y1NDAsIDB4ZDY4MmNlNjksIDB4MTY1ZDQwYTgsCisgICAgMHgxNzNiYTIzMSwgMHhkN2U0MmNmMCwgMHgxMTEwZDQ2MywgMHhkMWNmNWFhMiwgMHhkMGE5YjgzYiwKKyAgICAweDEwNzYzNmZhLCAweDkzNjMwZGQzLCAweDUzYmM4MzEyLCAweDUyZGE2MThiLCAweDkyMDVlZjRhLAorICAgIDB4NDhiYTdkZjEsIDB4ODg2NWYzMzAsIDB4ODkwMzExYTksIDB4NDlkYzlmNjgsIDB4Y2FjOWE0NDEsCisgICAgMHgwYTE2MmE4MCwgMHgwYjcwYzgxOSwgMHhjYmFmNDZkOCwgMHgwZDViYmU0YiwgMHhjZDg0MzA4YSwKKyAgICAweGNjZTJkMjEzLCAweDBjM2Q1Y2QyLCAweDhmMjg2N2ZiLCAweDRmZjdlOTNhLCAweDRlOTEwYmEzLAorICAgIDB4OGU0ZTg1NjIsIDB4ODM3ZThiNWYsIDB4NDNhMTA1OWUsIDB4NDJjN2U3MDcsIDB4ODIxODY5YzYsCisgICAgMHgwMTBkNTJlZiwgMHhjMWQyZGMyZSwgMHhjMGI0M2ViNywgMHgwMDZiYjA3NiwgMHhjNjlmNDhlNSwKKyAgICAweDA2NDBjNjI0LCAweDA3MjYyNGJkLCAweGM3ZjlhYTdjLCAweDQ0ZWM5MTU1LCAweDg0MzMxZjk0LAorICAgIDB4ODU1NWZkMGQsIDB4NDU4YTczY2MsIDB4NzAyY2E5YTEsIDB4YjBmMzI3NjAsIDB4YjE5NWM1ZjksCisgICAgMHg3MTRhNGIzOCwgMHhmMjVmNzAxMSwgMHgzMjgwZmVkMCwgMHgzM2U2MWM0OSwgMHhmMzM5OTI4OCwKKyAgICAweDM1Y2Q2YTFiLCAweGY1MTJlNGRhLCAweGY0NzQwNjQzLCAweDM0YWI4ODgyLCAweGI3YmViM2FiLAorICAgIDB4Nzc2MTNkNmEsIDB4NzYwN2RmZjMsIDB4YjZkODUxMzIsIDB4YmJlODVmMGYsIDB4N2IzN2QxY2UsCisgICAgMHg3YTUxMzM1NywgMHhiYThlYmQ5NiwgMHgzOTliODZiZiwgMHhmOTQ0MDg3ZSwgMHhmODIyZWFlNywKKyAgICAweDM4ZmQ2NDI2LCAweGZlMDk5Y2I1LCAweDNlZDYxMjc0LCAweDNmYjBmMGVkLCAweGZmNmY3ZTJjLAorICAgIDB4N2M3YTQ1MDUsIDB4YmNhNWNiYzQsIDB4YmRjMzI5NWQsIDB4N2QxY2E3OWMsIDB4YTdhMzM1MjcsCisgICAgMHg2NzdjYmJlNiwgMHg2NjFhNTk3ZiwgMHhhNmM1ZDdiZSwgMHgyNWQwZWM5NywgMHhlNTBmNjI1NiwKKyAgICAweGU0Njk4MGNmLCAweDI0YjYwZTBlLCAweGUyNDJmNjlkLCAweDIyOWQ3ODVjLCAweDIzZmI5YWM1LAorICAgIDB4ZTMyNDE0MDQsIDB4NjAzMTJmMmQsIDB4YTBlZWExZWMsIDB4YTE4ODQzNzUsIDB4NjE1N2NkYjQsCisgICAgMHg2YzY3YzM4OSwgMHhhY2I4NGQ0OCwgMHhhZGRlYWZkMSwgMHg2ZDAxMjExMCwgMHhlZTE0MWEzOSwKKyAgICAweDJlY2I5NGY4LCAweDJmYWQ3NjYxLCAweGVmNzJmOGEwLCAweDI5ODYwMDMzLCAweGU5NTk4ZWYyLAorICAgIDB4ZTgzZjZjNmIsIDB4MjhlMGUyYWEsIDB4YWJmNWQ5ODMsIDB4NmIyYTU3NDIsIDB4NmE0Y2I1ZGIsCisgICAgMHhhYTkzM2IxYX0sCisgICB7MHgwMDAwMDAwMCwgMHg2ZjRjYTU5YiwgMHg5ZjllM2JlYywgMHhmMGQyOWU3NywgMHg3ZjNiMDYwMywKKyAgICAweDEwNzdhMzk4LCAweGUwYTUzZGVmLCAweDhmZTk5ODc0LCAweGZlNzYwYzA2LCAweDkxM2FhOTlkLAorICAgIDB4NjFlODM3ZWEsIDB4MGVhNDkyNzEsIDB4ODE0ZDBhMDUsIDB4ZWUwMWFmOWUsIDB4MWVkMzMxZTksCisgICAgMHg3MTlmOTQ3MiwgMHhmY2VkMTgwYywgMHg5M2ExYmQ5NywgMHg2MzczMjNlMCwgMHgwYzNmODY3YiwKKyAgICAweDgzZDYxZTBmLCAweGVjOWFiYjk0LCAweDFjNDgyNWUzLCAweDczMDQ4MDc4LCAweDAyOWIxNDBhLAorICAgIDB4NmRkN2IxOTEsIDB4OWQwNTJmZTYsIDB4ZjI0OThhN2QsIDB4N2RhMDEyMDksIDB4MTJlY2I3OTIsCisgICAgMHhlMjNlMjllNSwgMHg4ZDcyOGM3ZSwgMHhmOGRiMzExOCwgMHg5Nzk3OTQ4MywgMHg2NzQ1MGFmNCwKKyAgICAweDA4MDlhZjZmLCAweDg3ZTAzNzFiLCAweGU4YWM5MjgwLCAweDE4N2UwY2Y3LCAweDc3MzJhOTZjLAorICAgIDB4MDZhZDNkMWUsIDB4NjllMTk4ODUsIDB4OTkzMzA2ZjIsIDB4ZjY3ZmEzNjksIDB4Nzk5NjNiMWQsCisgICAgMHgxNmRhOWU4NiwgMHhlNjA4MDBmMSwgMHg4OTQ0YTU2YSwgMHgwNDM2MjkxNCwgMHg2YjdhOGM4ZiwKKyAgICAweDliYTgxMmY4LCAweGY0ZTRiNzYzLCAweDdiMGQyZjE3LCAweDE0NDE4YThjLCAweGU0OTMxNGZiLAorICAgIDB4OGJkZmIxNjAsIDB4ZmE0MDI1MTIsIDB4OTUwYzgwODksIDB4NjVkZTFlZmUsIDB4MGE5MmJiNjUsCisgICAgMHg4NTdiMjMxMSwgMHhlYTM3ODY4YSwgMHgxYWU1MThmZCwgMHg3NWE5YmQ2NiwgMHhmMGI3NjMzMCwKKyAgICAweDlmZmJjNmFiLCAweDZmMjk1OGRjLCAweDAwNjVmZDQ3LCAweDhmOGM2NTMzLCAweGUwYzBjMGE4LAorICAgIDB4MTAxMjVlZGYsIDB4N2Y1ZWZiNDQsIDB4MGVjMTZmMzYsIDB4NjE4ZGNhYWQsIDB4OTE1ZjU0ZGEsCisgICAgMHhmZTEzZjE0MSwgMHg3MWZhNjkzNSwgMHgxZWI2Y2NhZSwgMHhlZTY0NTJkOSwgMHg4MTI4Zjc0MiwKKyAgICAweDBjNWE3YjNjLCAweDYzMTZkZWE3LCAweDkzYzQ0MGQwLCAweGZjODhlNTRiLCAweDczNjE3ZDNmLAorICAgIDB4MWMyZGQ4YTQsIDB4ZWNmZjQ2ZDMsIDB4ODNiM2UzNDgsIDB4ZjIyYzc3M2EsIDB4OWQ2MGQyYTEsCisgICAgMHg2ZGIyNGNkNiwgMHgwMmZlZTk0ZCwgMHg4ZDE3NzEzOSwgMHhlMjViZDRhMiwgMHgxMjg5NGFkNSwKKyAgICAweDdkYzVlZjRlLCAweDA4NmM1MjI4LCAweDY3MjBmN2IzLCAweDk3ZjI2OWM0LCAweGY4YmVjYzVmLAorICAgIDB4Nzc1NzU0MmIsIDB4MTgxYmYxYjAsIDB4ZThjOTZmYzcsIDB4ODc4NWNhNWMsIDB4ZjYxYTVlMmUsCisgICAgMHg5OTU2ZmJiNSwgMHg2OTg0NjVjMiwgMHgwNmM4YzA1OSwgMHg4OTIxNTgyZCwgMHhlNjZkZmRiNiwKKyAgICAweDE2YmY2M2MxLCAweDc5ZjNjNjVhLCAweGY0ODE0YTI0LCAweDliY2RlZmJmLCAweDZiMWY3MWM4LAorICAgIDB4MDQ1M2Q0NTMsIDB4OGJiYTRjMjcsIDB4ZTRmNmU5YmMsIDB4MTQyNDc3Y2IsIDB4N2I2OGQyNTAsCisgICAgMHgwYWY3NDYyMiwgMHg2NWJiZTNiOSwgMHg5NTY5N2RjZSwgMHhmYTI1ZDg1NSwgMHg3NWNjNDAyMSwKKyAgICAweDFhODBlNWJhLCAweGVhNTI3YmNkLCAweDg1MWVkZTU2LCAweGUwNmZjNzYwLCAweDhmMjM2MmZiLAorICAgIDB4N2ZmMWZjOGMsIDB4MTBiZDU5MTcsIDB4OWY1NGMxNjMsIDB4ZjAxODY0ZjgsIDB4MDBjYWZhOGYsCisgICAgMHg2Zjg2NWYxNCwgMHgxZTE5Y2I2NiwgMHg3MTU1NmVmZCwgMHg4MTg3ZjA4YSwgMHhlZWNiNTUxMSwKKyAgICAweDYxMjJjZDY1LCAweDBlNmU2OGZlLCAweGZlYmNmNjg5LCAweDkxZjA1MzEyLCAweDFjODJkZjZjLAorICAgIDB4NzNjZTdhZjcsIDB4ODMxY2U0ODAsIDB4ZWM1MDQxMWIsIDB4NjNiOWQ5NmYsIDB4MGNmNTdjZjQsCisgICAgMHhmYzI3ZTI4MywgMHg5MzZiNDcxOCwgMHhlMmY0ZDM2YSwgMHg4ZGI4NzZmMSwgMHg3ZDZhZTg4NiwKKyAgICAweDEyMjY0ZDFkLCAweDlkY2ZkNTY5LCAweGYyODM3MGYyLCAweDAyNTFlZTg1LCAweDZkMWQ0YjFlLAorICAgIDB4MThiNGY2NzgsIDB4NzdmODUzZTMsIDB4ODcyYWNkOTQsIDB4ZTg2NjY4MGYsIDB4Njc4ZmYwN2IsCisgICAgMHgwOGMzNTVlMCwgMHhmODExY2I5NywgMHg5NzVkNmUwYywgMHhlNmMyZmE3ZSwgMHg4OThlNWZlNSwKKyAgICAweDc5NWNjMTkyLCAweDE2MTA2NDA5LCAweDk5ZjlmYzdkLCAweGY2YjU1OWU2LCAweDA2NjdjNzkxLAorICAgIDB4NjkyYjYyMGEsIDB4ZTQ1OWVlNzQsIDB4OGIxNTRiZWYsIDB4N2JjN2Q1OTgsIDB4MTQ4YjcwMDMsCisgICAgMHg5YjYyZTg3NywgMHhmNDJlNGRlYywgMHgwNGZjZDM5YiwgMHg2YmIwNzYwMCwgMHgxYTJmZTI3MiwKKyAgICAweDc1NjM0N2U5LCAweDg1YjFkOTllLCAweGVhZmQ3YzA1LCAweDY1MTRlNDcxLCAweDBhNTg0MWVhLAorICAgIDB4ZmE4YWRmOWQsIDB4OTVjNjdhMDYsIDB4MTBkOGE0NTAsIDB4N2Y5NDAxY2IsIDB4OGY0NjlmYmMsCisgICAgMHhlMDBhM2EyNywgMHg2ZmUzYTI1MywgMHgwMGFmMDdjOCwgMHhmMDdkOTliZiwgMHg5ZjMxM2MyNCwKKyAgICAweGVlYWVhODU2LCAweDgxZTIwZGNkLCAweDcxMzA5M2JhLCAweDFlN2MzNjIxLCAweDkxOTVhZTU1LAorICAgIDB4ZmVkOTBiY2UsIDB4MGUwYjk1YjksIDB4NjE0NzMwMjIsIDB4ZWMzNWJjNWMsIDB4ODM3OTE5YzcsCisgICAgMHg3M2FiODdiMCwgMHgxY2U3MjIyYiwgMHg5MzBlYmE1ZiwgMHhmYzQyMWZjNCwgMHgwYzkwODFiMywKKyAgICAweDYzZGMyNDI4LCAweDEyNDNiMDVhLCAweDdkMGYxNWMxLCAweDhkZGQ4YmI2LCAweGUyOTEyZTJkLAorICAgIDB4NmQ3OGI2NTksIDB4MDIzNDEzYzIsIDB4ZjJlNjhkYjUsIDB4OWRhYTI4MmUsIDB4ZTgwMzk1NDgsCisgICAgMHg4NzRmMzBkMywgMHg3NzlkYWVhNCwgMHgxOGQxMGIzZiwgMHg5NzM4OTM0YiwgMHhmODc0MzZkMCwKKyAgICAweDA4YTZhOGE3LCAweDY3ZWEwZDNjLCAweDE2NzU5OTRlLCAweDc5MzkzY2Q1LCAweDg5ZWJhMmEyLAorICAgIDB4ZTZhNzA3MzksIDB4Njk0ZTlmNGQsIDB4MDYwMjNhZDYsIDB4ZjZkMGE0YTEsIDB4OTk5YzAxM2EsCisgICAgMHgxNGVlOGQ0NCwgMHg3YmEyMjhkZiwgMHg4YjcwYjZhOCwgMHhlNDNjMTMzMywgMHg2YmQ1OGI0NywKKyAgICAweDA0OTkyZWRjLCAweGY0NGJiMGFiLCAweDliMDcxNTMwLCAweGVhOTg4MTQyLCAweDg1ZDQyNGQ5LAorICAgIDB4NzUwNmJhYWUsIDB4MWE0YTFmMzUsIDB4OTVhMzg3NDEsIDB4ZmFlZjIyZGEsIDB4MGEzZGJjYWQsCisgICAgMHg2NTcxMTkzNn19OworCisjZW5kaWYKKworI2VuZGlmCisKKyNpZiBOID09IDQKKworI2lmIFcgPT0gOAorCitsb2NhbCBjb25zdCB6X2NyY190IEZBUiBjcmNfYnJhaWRfdGFibGVbXVsyNTZdID0geworICAgezB4MDAwMDAwMDAsIDB4ZjFkYTA1YWEsIDB4MzhjNTBkMTUsIDB4YzkxZjA4YmYsIDB4NzE4YTFhMmEsCisgICAgMHg4MDUwMWY4MCwgMHg0OTRmMTczZiwgMHhiODk1MTI5NSwgMHhlMzE0MzQ1NCwgMHgxMmNlMzFmZSwKKyAgICAweGRiZDEzOTQxLCAweDJhMGIzY2ViLCAweDkyOWUyZTdlLCAweDYzNDQyYmQ0LCAweGFhNWIyMzZiLAorICAgIDB4NWI4MTI2YzEsIDB4MWQ1OTZlZTksIDB4ZWM4MzZiNDMsIDB4MjU5YzYzZmMsIDB4ZDQ0NjY2NTYsCisgICAgMHg2Y2QzNzRjMywgMHg5ZDA5NzE2OSwgMHg1NDE2NzlkNiwgMHhhNWNjN2M3YywgMHhmZTRkNWFiZCwKKyAgICAweDBmOTc1ZjE3LCAweGM2ODg1N2E4LCAweDM3NTI1MjAyLCAweDhmYzc0MDk3LCAweDdlMWQ0NTNkLAorICAgIDB4YjcwMjRkODIsIDB4NDZkODQ4MjgsIDB4M2FiMmRkZDIsIDB4Y2I2OGQ4NzgsIDB4MDI3N2QwYzcsCisgICAgMHhmM2FkZDU2ZCwgMHg0YjM4YzdmOCwgMHhiYWUyYzI1MiwgMHg3M2ZkY2FlZCwgMHg4MjI3Y2Y0NywKKyAgICAweGQ5YTZlOTg2LCAweDI4N2NlYzJjLCAweGUxNjNlNDkzLCAweDEwYjllMTM5LCAweGE4MmNmM2FjLAorICAgIDB4NTlmNmY2MDYsIDB4OTBlOWZlYjksIDB4NjEzM2ZiMTMsIDB4MjdlYmIzM2IsIDB4ZDYzMWI2OTEsCisgICAgMHgxZjJlYmUyZSwgMHhlZWY0YmI4NCwgMHg1NjYxYTkxMSwgMHhhN2JiYWNiYiwgMHg2ZWE0YTQwNCwKKyAgICAweDlmN2VhMWFlLCAweGM0ZmY4NzZmLCAweDM1MjU4MmM1LCAweGZjM2E4YTdhLCAweDBkZTA4ZmQwLAorICAgIDB4YjU3NTlkNDUsIDB4NDRhZjk4ZWYsIDB4OGRiMDkwNTAsIDB4N2M2YTk1ZmEsIDB4NzU2NWJiYTQsCisgICAgMHg4NGJmYmUwZSwgMHg0ZGEwYjZiMSwgMHhiYzdhYjMxYiwgMHgwNGVmYTE4ZSwgMHhmNTM1YTQyNCwKKyAgICAweDNjMmFhYzliLCAweGNkZjBhOTMxLCAweDk2NzE4ZmYwLCAweDY3YWI4YTVhLCAweGFlYjQ4MmU1LAorICAgIDB4NWY2ZTg3NGYsIDB4ZTdmYjk1ZGEsIDB4MTYyMTkwNzAsIDB4ZGYzZTk4Y2YsIDB4MmVlNDlkNjUsCisgICAgMHg2ODNjZDU0ZCwgMHg5OWU2ZDBlNywgMHg1MGY5ZDg1OCwgMHhhMTIzZGRmMiwgMHgxOWI2Y2Y2NywKKyAgICAweGU4NmNjYWNkLCAweDIxNzNjMjcyLCAweGQwYTljN2Q4LCAweDhiMjhlMTE5LCAweDdhZjJlNGIzLAorICAgIDB4YjNlZGVjMGMsIDB4NDIzN2U5YTYsIDB4ZmFhMmZiMzMsIDB4MGI3OGZlOTksIDB4YzI2N2Y2MjYsCisgICAgMHgzM2JkZjM4YywgMHg0ZmQ3NjY3NiwgMHhiZTBkNjNkYywgMHg3NzEyNmI2MywgMHg4NmM4NmVjOSwKKyAgICAweDNlNWQ3YzVjLCAweGNmODc3OWY2LCAweDA2OTg3MTQ5LCAweGY3NDI3NGUzLCAweGFjYzM1MjIyLAorICAgIDB4NWQxOTU3ODgsIDB4OTQwNjVmMzcsIDB4NjVkYzVhOWQsIDB4ZGQ0OTQ4MDgsIDB4MmM5MzRkYTIsCisgICAgMHhlNThjNDUxZCwgMHgxNDU2NDBiNywgMHg1MjhlMDg5ZiwgMHhhMzU0MGQzNSwgMHg2YTRiMDU4YSwKKyAgICAweDliOTEwMDIwLCAweDIzMDQxMmI1LCAweGQyZGUxNzFmLCAweDFiYzExZmEwLCAweGVhMWIxYTBhLAorICAgIDB4YjE5YTNjY2IsIDB4NDA0MDM5NjEsIDB4ODk1ZjMxZGUsIDB4Nzg4NTM0NzQsIDB4YzAxMDI2ZTEsCisgICAgMHgzMWNhMjM0YiwgMHhmOGQ1MmJmNCwgMHgwOTBmMmU1ZSwgMHhlYWNiNzc0OCwgMHgxYjExNzJlMiwKKyAgICAweGQyMGU3YTVkLCAweDIzZDQ3ZmY3LCAweDliNDE2ZDYyLCAweDZhOWI2OGM4LCAweGEzODQ2MDc3LAorICAgIDB4NTI1ZTY1ZGQsIDB4MDlkZjQzMWMsIDB4ZjgwNTQ2YjYsIDB4MzExYTRlMDksIDB4YzBjMDRiYTMsCisgICAgMHg3ODU1NTkzNiwgMHg4OThmNWM5YywgMHg0MDkwNTQyMywgMHhiMTRhNTE4OSwgMHhmNzkyMTlhMSwKKyAgICAweDA2NDgxYzBiLCAweGNmNTcxNGI0LCAweDNlOGQxMTFlLCAweDg2MTgwMzhiLCAweDc3YzIwNjIxLAorICAgIDB4YmVkZDBlOWUsIDB4NGYwNzBiMzQsIDB4MTQ4NjJkZjUsIDB4ZTU1YzI4NWYsIDB4MmM0MzIwZTAsCisgICAgMHhkZDk5MjU0YSwgMHg2NTBjMzdkZiwgMHg5NGQ2MzI3NSwgMHg1ZGM5M2FjYSwgMHhhYzEzM2Y2MCwKKyAgICAweGQwNzlhYTlhLCAweDIxYTNhZjMwLCAweGU4YmNhNzhmLCAweDE5NjZhMjI1LCAweGExZjNiMGIwLAorICAgIDB4NTAyOWI1MWEsIDB4OTkzNmJkYTUsIDB4NjhlY2I4MGYsIDB4MzM2ZDllY2UsIDB4YzJiNzliNjQsCisgICAgMHgwYmE4OTNkYiwgMHhmYTcyOTY3MSwgMHg0MmU3ODRlNCwgMHhiMzNkODE0ZSwgMHg3YTIyODlmMSwKKyAgICAweDhiZjg4YzViLCAweGNkMjBjNDczLCAweDNjZmFjMWQ5LCAweGY1ZTVjOTY2LCAweDA0M2ZjY2NjLAorICAgIDB4YmNhYWRlNTksIDB4NGQ3MGRiZjMsIDB4ODQ2ZmQzNGMsIDB4NzViNWQ2ZTYsIDB4MmUzNGYwMjcsCisgICAgMHhkZmVlZjU4ZCwgMHgxNmYxZmQzMiwgMHhlNzJiZjg5OCwgMHg1ZmJlZWEwZCwgMHhhZTY0ZWZhNywKKyAgICAweDY3N2JlNzE4LCAweDk2YTFlMmIyLCAweDlmYWVjY2VjLCAweDZlNzRjOTQ2LCAweGE3NmJjMWY5LAorICAgIDB4NTZiMWM0NTMsIDB4ZWUyNGQ2YzYsIDB4MWZmZWQzNmMsIDB4ZDZlMWRiZDMsIDB4MjczYmRlNzksCisgICAgMHg3Y2JhZjhiOCwgMHg4ZDYwZmQxMiwgMHg0NDdmZjVhZCwgMHhiNWE1ZjAwNywgMHgwZDMwZTI5MiwKKyAgICAweGZjZWFlNzM4LCAweDM1ZjVlZjg3LCAweGM0MmZlYTJkLCAweDgyZjdhMjA1LCAweDczMmRhN2FmLAorICAgIDB4YmEzMmFmMTAsIDB4NGJlOGFhYmEsIDB4ZjM3ZGI4MmYsIDB4MDJhN2JkODUsIDB4Y2JiOGI1M2EsCisgICAgMHgzYTYyYjA5MCwgMHg2MWUzOTY1MSwgMHg5MDM5OTNmYiwgMHg1OTI2OWI0NCwgMHhhOGZjOWVlZSwKKyAgICAweDEwNjk4YzdiLCAweGUxYjM4OWQxLCAweDI4YWM4MTZlLCAweGQ5NzY4NGM0LCAweGE1MWMxMTNlLAorICAgIDB4NTRjNjE0OTQsIDB4OWRkOTFjMmIsIDB4NmMwMzE5ODEsIDB4ZDQ5NjBiMTQsIDB4MjU0YzBlYmUsCisgICAgMHhlYzUzMDYwMSwgMHgxZDg5MDNhYiwgMHg0NjA4MjU2YSwgMHhiN2QyMjBjMCwgMHg3ZWNkMjg3ZiwKKyAgICAweDhmMTcyZGQ1LCAweDM3ODIzZjQwLCAweGM2NTgzYWVhLCAweDBmNDczMjU1LCAweGZlOWQzN2ZmLAorICAgIDB4Yjg0NTdmZDcsIDB4NDk5ZjdhN2QsIDB4ODA4MDcyYzIsIDB4NzE1YTc3NjgsIDB4YzljZjY1ZmQsCisgICAgMHgzODE1NjA1NywgMHhmMTBhNjhlOCwgMHgwMGQwNmQ0MiwgMHg1YjUxNGI4MywgMHhhYThiNGUyOSwKKyAgICAweDYzOTQ0Njk2LCAweDkyNGU0MzNjLCAweDJhZGI1MWE5LCAweGRiMDE1NDAzLCAweDEyMWU1Y2JjLAorICAgIDB4ZTNjNDU5MTZ9LAorICAgezB4MDAwMDAwMDAsIDB4MGVlN2U4ZDEsIDB4MWRjZmQxYTIsIDB4MTMyODM5NzMsIDB4M2I5ZmEzNDQsCisgICAgMHgzNTc4NGI5NSwgMHgyNjUwNzJlNiwgMHgyOGI3OWEzNywgMHg3NzNmNDY4OCwgMHg3OWQ4YWU1OSwKKyAgICAweDZhZjA5NzJhLCAweDY0MTc3ZmZiLCAweDRjYTBlNWNjLCAweDQyNDcwZDFkLCAweDUxNmYzNDZlLAorICAgIDB4NWY4OGRjYmYsIDB4ZWU3ZThkMTAsIDB4ZTA5OTY1YzEsIDB4ZjNiMTVjYjIsIDB4ZmQ1NmI0NjMsCisgICAgMHhkNWUxMmU1NCwgMHhkYjA2YzY4NSwgMHhjODJlZmZmNiwgMHhjNmM5MTcyNywgMHg5OTQxY2I5OCwKKyAgICAweDk3YTYyMzQ5LCAweDg0OGUxYTNhLCAweDhhNjlmMmViLCAweGEyZGU2OGRjLCAweGFjMzk4MDBkLAorICAgIDB4YmYxMWI5N2UsIDB4YjFmNjUxYWYsIDB4MDc4YzFjNjEsIDB4MDk2YmY0YjAsIDB4MWE0M2NkYzMsCisgICAgMHgxNGE0MjUxMiwgMHgzYzEzYmYyNSwgMHgzMmY0NTdmNCwgMHgyMWRjNmU4NywgMHgyZjNiODY1NiwKKyAgICAweDcwYjM1YWU5LCAweDdlNTRiMjM4LCAweDZkN2M4YjRiLCAweDYzOWI2MzlhLCAweDRiMmNmOWFkLAorICAgIDB4NDVjYjExN2MsIDB4NTZlMzI4MGYsIDB4NTgwNGMwZGUsIDB4ZTlmMjkxNzEsIDB4ZTcxNTc5YTAsCisgICAgMHhmNDNkNDBkMywgMHhmYWRhYTgwMiwgMHhkMjZkMzIzNSwgMHhkYzhhZGFlNCwgMHhjZmEyZTM5NywKKyAgICAweGMxNDUwYjQ2LCAweDllY2RkN2Y5LCAweDkwMmEzZjI4LCAweDgzMDIwNjViLCAweDhkZTVlZThhLAorICAgIDB4YTU1Mjc0YmQsIDB4YWJiNTljNmMsIDB4Yjg5ZGE1MWYsIDB4YjY3YTRkY2UsIDB4MGYxODM4YzIsCisgICAgMHgwMWZmZDAxMywgMHgxMmQ3ZTk2MCwgMHgxYzMwMDFiMSwgMHgzNDg3OWI4NiwgMHgzYTYwNzM1NywKKyAgICAweDI5NDg0YTI0LCAweDI3YWZhMmY1LCAweDc4Mjc3ZTRhLCAweDc2YzA5NjliLCAweDY1ZThhZmU4LAorICAgIDB4NmIwZjQ3MzksIDB4NDNiOGRkMGUsIDB4NGQ1ZjM1ZGYsIDB4NWU3NzBjYWMsIDB4NTA5MGU0N2QsCisgICAgMHhlMTY2YjVkMiwgMHhlZjgxNWQwMywgMHhmY2E5NjQ3MCwgMHhmMjRlOGNhMSwgMHhkYWY5MTY5NiwKKyAgICAweGQ0MWVmZTQ3LCAweGM3MzZjNzM0LCAweGM5ZDEyZmU1LCAweDk2NTlmMzVhLCAweDk4YmUxYjhiLAorICAgIDB4OGI5NjIyZjgsIDB4ODU3MWNhMjksIDB4YWRjNjUwMWUsIDB4YTMyMWI4Y2YsIDB4YjAwOTgxYmMsCisgICAgMHhiZWVlNjk2ZCwgMHgwODk0MjRhMywgMHgwNjczY2M3MiwgMHgxNTViZjUwMSwgMHgxYmJjMWRkMCwKKyAgICAweDMzMGI4N2U3LCAweDNkZWM2ZjM2LCAweDJlYzQ1NjQ1LCAweDIwMjNiZTk0LCAweDdmYWI2MjJiLAorICAgIDB4NzE0YzhhZmEsIDB4NjI2NGIzODksIDB4NmM4MzViNTgsIDB4NDQzNGMxNmYsIDB4NGFkMzI5YmUsCisgICAgMHg1OWZiMTBjZCwgMHg1NzFjZjgxYywgMHhlNmVhYTliMywgMHhlODBkNDE2MiwgMHhmYjI1NzgxMSwKKyAgICAweGY1YzI5MGMwLCAweGRkNzUwYWY3LCAweGQzOTJlMjI2LCAweGMwYmFkYjU1LCAweGNlNWQzMzg0LAorICAgIDB4OTFkNWVmM2IsIDB4OWYzMjA3ZWEsIDB4OGMxYTNlOTksIDB4ODJmZGQ2NDgsIDB4YWE0YTRjN2YsCisgICAgMHhhNGFkYTRhZSwgMHhiNzg1OWRkZCwgMHhiOTYyNzUwYywgMHgxZTMwNzE4NCwgMHgxMGQ3OTk1NSwKKyAgICAweDAzZmZhMDI2LCAweDBkMTg0OGY3LCAweDI1YWZkMmMwLCAweDJiNDgzYTExLCAweDM4NjAwMzYyLAorICAgIDB4MzY4N2ViYjMsIDB4NjkwZjM3MGMsIDB4NjdlOGRmZGQsIDB4NzRjMGU2YWUsIDB4N2EyNzBlN2YsCisgICAgMHg1MjkwOTQ0OCwgMHg1Yzc3N2M5OSwgMHg0ZjVmNDVlYSwgMHg0MWI4YWQzYiwgMHhmMDRlZmM5NCwKKyAgICAweGZlYTkxNDQ1LCAweGVkODEyZDM2LCAweGUzNjZjNWU3LCAweGNiZDE1ZmQwLCAweGM1MzZiNzAxLAorICAgIDB4ZDYxZThlNzIsIDB4ZDhmOTY2YTMsIDB4ODc3MWJhMWMsIDB4ODk5NjUyY2QsIDB4OWFiZTZiYmUsCisgICAgMHg5NDU5ODM2ZiwgMHhiY2VlMTk1OCwgMHhiMjA5ZjE4OSwgMHhhMTIxYzhmYSwgMHhhZmM2MjAyYiwKKyAgICAweDE5YmM2ZGU1LCAweDE3NWI4NTM0LCAweDA0NzNiYzQ3LCAweDBhOTQ1NDk2LCAweDIyMjNjZWExLAorICAgIDB4MmNjNDI2NzAsIDB4M2ZlYzFmMDMsIDB4MzEwYmY3ZDIsIDB4NmU4MzJiNmQsIDB4NjA2NGMzYmMsCisgICAgMHg3MzRjZmFjZiwgMHg3ZGFiMTIxZSwgMHg1NTFjODgyOSwgMHg1YmZiNjBmOCwgMHg0OGQzNTk4YiwKKyAgICAweDQ2MzRiMTVhLCAweGY3YzJlMGY1LCAweGY5MjUwODI0LCAweGVhMGQzMTU3LCAweGU0ZWFkOTg2LAorICAgIDB4Y2M1ZDQzYjEsIDB4YzJiYWFiNjAsIDB4ZDE5MjkyMTMsIDB4ZGY3NTdhYzIsIDB4ODBmZGE2N2QsCisgICAgMHg4ZTFhNGVhYywgMHg5ZDMyNzdkZiwgMHg5M2Q1OWYwZSwgMHhiYjYyMDUzOSwgMHhiNTg1ZWRlOCwKKyAgICAweGE2YWRkNDliLCAweGE4NGEzYzRhLCAweDExMjg0OTQ2LCAweDFmY2ZhMTk3LCAweDBjZTc5OGU0LAorICAgIDB4MDIwMDcwMzUsIDB4MmFiN2VhMDIsIDB4MjQ1MDAyZDMsIDB4Mzc3ODNiYTAsIDB4Mzk5ZmQzNzEsCisgICAgMHg2NjE3MGZjZSwgMHg2OGYwZTcxZiwgMHg3YmQ4ZGU2YywgMHg3NTNmMzZiZCwgMHg1ZDg4YWM4YSwKKyAgICAweDUzNmY0NDViLCAweDQwNDc3ZDI4LCAweDRlYTA5NWY5LCAweGZmNTZjNDU2LCAweGYxYjEyYzg3LAorICAgIDB4ZTI5OTE1ZjQsIDB4ZWM3ZWZkMjUsIDB4YzRjOTY3MTIsIDB4Y2EyZThmYzMsIDB4ZDkwNmI2YjAsCisgICAgMHhkN2UxNWU2MSwgMHg4ODY5ODJkZSwgMHg4NjhlNmEwZiwgMHg5NWE2NTM3YywgMHg5YjQxYmJhZCwKKyAgICAweGIzZjYyMTlhLCAweGJkMTFjOTRiLCAweGFlMzlmMDM4LCAweGEwZGUxOGU5LCAweDE2YTQ1NTI3LAorICAgIDB4MTg0M2JkZjYsIDB4MGI2Yjg0ODUsIDB4MDU4YzZjNTQsIDB4MmQzYmY2NjMsIDB4MjNkYzFlYjIsCisgICAgMHgzMGY0MjdjMSwgMHgzZTEzY2YxMCwgMHg2MTliMTNhZiwgMHg2ZjdjZmI3ZSwgMHg3YzU0YzIwZCwKKyAgICAweDcyYjMyYWRjLCAweDVhMDRiMGViLCAweDU0ZTM1ODNhLCAweDQ3Y2I2MTQ5LCAweDQ5MmM4OTk4LAorICAgIDB4ZjhkYWQ4MzcsIDB4ZjYzZDMwZTYsIDB4ZTUxNTA5OTUsIDB4ZWJmMmUxNDQsIDB4YzM0NTdiNzMsCisgICAgMHhjZGEyOTNhMiwgMHhkZThhYWFkMSwgMHhkMDZkNDIwMCwgMHg4ZmU1OWViZiwgMHg4MTAyNzY2ZSwKKyAgICAweDkyMmE0ZjFkLCAweDljY2RhN2NjLCAweGI0N2EzZGZiLCAweGJhOWRkNTJhLCAweGE5YjVlYzU5LAorICAgIDB4YTc1MjA0ODh9LAorICAgezB4MDAwMDAwMDAsIDB4M2M2MGUzMDgsIDB4NzhjMWM2MTAsIDB4NDRhMTI1MTgsIDB4ZjE4MzhjMjAsCisgICAgMHhjZGUzNmYyOCwgMHg4OTQyNGEzMCwgMHhiNTIyYTkzOCwgMHgzODc2MWUwMSwgMHgwNDE2ZmQwOSwKKyAgICAweDQwYjdkODExLCAweDdjZDczYjE5LCAweGM5ZjU5MjIxLCAweGY1OTU3MTI5LCAweGIxMzQ1NDMxLAorICAgIDB4OGQ1NGI3MzksIDB4NzBlYzNjMDIsIDB4NGM4Y2RmMGEsIDB4MDgyZGZhMTIsIDB4MzQ0ZDE5MWEsCisgICAgMHg4MTZmYjAyMiwgMHhiZDBmNTMyYSwgMHhmOWFlNzYzMiwgMHhjNWNlOTUzYSwgMHg0ODlhMjIwMywKKyAgICAweDc0ZmFjMTBiLCAweDMwNWJlNDEzLCAweDBjM2IwNzFiLCAweGI5MTlhZTIzLCAweDg1Nzk0ZDJiLAorICAgIDB4YzFkODY4MzMsIDB4ZmRiODhiM2IsIDB4ZTFkODc4MDQsIDB4ZGRiODliMGMsIDB4OTkxOWJlMTQsCisgICAgMHhhNTc5NWQxYywgMHgxMDViZjQyNCwgMHgyYzNiMTcyYywgMHg2ODlhMzIzNCwgMHg1NGZhZDEzYywKKyAgICAweGQ5YWU2NjA1LCAweGU1Y2U4NTBkLCAweGExNmZhMDE1LCAweDlkMGY0MzFkLCAweDI4MmRlYTI1LAorICAgIDB4MTQ0ZDA5MmQsIDB4NTBlYzJjMzUsIDB4NmM4Y2NmM2QsIDB4OTEzNDQ0MDYsIDB4YWQ1NGE3MGUsCisgICAgMHhlOWY1ODIxNiwgMHhkNTk1NjExZSwgMHg2MGI3YzgyNiwgMHg1Y2Q3MmIyZSwgMHgxODc2MGUzNiwKKyAgICAweDI0MTZlZDNlLCAweGE5NDI1YTA3LCAweDk1MjJiOTBmLCAweGQxODM5YzE3LCAweGVkZTM3ZjFmLAorICAgIDB4NThjMWQ2MjcsIDB4NjRhMTM1MmYsIDB4MjAwMDEwMzcsIDB4MWM2MGYzM2YsIDB4MThjMWY2NDksCisgICAgMHgyNGExMTU0MSwgMHg2MDAwMzA1OSwgMHg1YzYwZDM1MSwgMHhlOTQyN2E2OSwgMHhkNTIyOTk2MSwKKyAgICAweDkxODNiYzc5LCAweGFkZTM1ZjcxLCAweDIwYjdlODQ4LCAweDFjZDcwYjQwLCAweDU4NzYyZTU4LAorICAgIDB4NjQxNmNkNTAsIDB4ZDEzNDY0NjgsIDB4ZWQ1NDg3NjAsIDB4YTlmNWEyNzgsIDB4OTU5NTQxNzAsCisgICAgMHg2ODJkY2E0YiwgMHg1NDRkMjk0MywgMHgxMGVjMGM1YiwgMHgyYzhjZWY1MywgMHg5OWFlNDY2YiwKKyAgICAweGE1Y2VhNTYzLCAweGUxNmY4MDdiLCAweGRkMGY2MzczLCAweDUwNWJkNDRhLCAweDZjM2IzNzQyLAorICAgIDB4Mjg5YTEyNWEsIDB4MTRmYWYxNTIsIDB4YTFkODU4NmEsIDB4OWRiOGJiNjIsIDB4ZDkxOTllN2EsCisgICAgMHhlNTc5N2Q3MiwgMHhmOTE5OGU0ZCwgMHhjNTc5NmQ0NSwgMHg4MWQ4NDg1ZCwgMHhiZGI4YWI1NSwKKyAgICAweDA4OWEwMjZkLCAweDM0ZmFlMTY1LCAweDcwNWJjNDdkLCAweDRjM2IyNzc1LCAweGMxNmY5MDRjLAorICAgIDB4ZmQwZjczNDQsIDB4YjlhZTU2NWMsIDB4ODVjZWI1NTQsIDB4MzBlYzFjNmMsIDB4MGM4Y2ZmNjQsCisgICAgMHg0ODJkZGE3YywgMHg3NDRkMzk3NCwgMHg4OWY1YjI0ZiwgMHhiNTk1NTE0NywgMHhmMTM0NzQ1ZiwKKyAgICAweGNkNTQ5NzU3LCAweDc4NzYzZTZmLCAweDQ0MTZkZDY3LCAweDAwYjdmODdmLCAweDNjZDcxYjc3LAorICAgIDB4YjE4M2FjNGUsIDB4OGRlMzRmNDYsIDB4Yzk0MjZhNWUsIDB4ZjUyMjg5NTYsIDB4NDAwMDIwNmUsCisgICAgMHg3YzYwYzM2NiwgMHgzOGMxZTY3ZSwgMHgwNGExMDU3NiwgMHgzMTgzZWM5MiwgMHgwZGUzMGY5YSwKKyAgICAweDQ5NDIyYTgyLCAweDc1MjJjOThhLCAweGMwMDA2MGIyLCAweGZjNjA4M2JhLCAweGI4YzFhNmEyLAorICAgIDB4ODRhMTQ1YWEsIDB4MDlmNWYyOTMsIDB4MzU5NTExOWIsIDB4NzEzNDM0ODMsIDB4NGQ1NGQ3OGIsCisgICAgMHhmODc2N2ViMywgMHhjNDE2OWRiYiwgMHg4MGI3YjhhMywgMHhiY2Q3NWJhYiwgMHg0MTZmZDA5MCwKKyAgICAweDdkMGYzMzk4LCAweDM5YWUxNjgwLCAweDA1Y2VmNTg4LCAweGIwZWM1Y2IwLCAweDhjOGNiZmI4LAorICAgIDB4YzgyZDlhYTAsIDB4ZjQ0ZDc5YTgsIDB4NzkxOWNlOTEsIDB4NDU3OTJkOTksIDB4MDFkODA4ODEsCisgICAgMHgzZGI4ZWI4OSwgMHg4ODlhNDJiMSwgMHhiNGZhYTFiOSwgMHhmMDViODRhMSwgMHhjYzNiNjdhOSwKKyAgICAweGQwNWI5NDk2LCAweGVjM2I3NzllLCAweGE4OWE1Mjg2LCAweDk0ZmFiMThlLCAweDIxZDgxOGI2LAorICAgIDB4MWRiOGZiYmUsIDB4NTkxOWRlYTYsIDB4NjU3OTNkYWUsIDB4ZTgyZDhhOTcsIDB4ZDQ0ZDY5OWYsCisgICAgMHg5MGVjNGM4NywgMHhhYzhjYWY4ZiwgMHgxOWFlMDZiNywgMHgyNWNlZTViZiwgMHg2MTZmYzBhNywKKyAgICAweDVkMGYyM2FmLCAweGEwYjdhODk0LCAweDljZDc0YjljLCAweGQ4NzY2ZTg0LCAweGU0MTY4ZDhjLAorICAgIDB4NTEzNDI0YjQsIDB4NmQ1NGM3YmMsIDB4MjlmNWUyYTQsIDB4MTU5NTAxYWMsIDB4OThjMWI2OTUsCisgICAgMHhhNGExNTU5ZCwgMHhlMDAwNzA4NSwgMHhkYzYwOTM4ZCwgMHg2OTQyM2FiNSwgMHg1NTIyZDliZCwKKyAgICAweDExODNmY2E1LCAweDJkZTMxZmFkLCAweDI5NDIxYWRiLCAweDE1MjJmOWQzLCAweDUxODNkY2NiLAorICAgIDB4NmRlMzNmYzMsIDB4ZDhjMTk2ZmIsIDB4ZTRhMTc1ZjMsIDB4YTAwMDUwZWIsIDB4OWM2MGIzZTMsCisgICAgMHgxMTM0MDRkYSwgMHgyZDU0ZTdkMiwgMHg2OWY1YzJjYSwgMHg1NTk1MjFjMiwgMHhlMGI3ODhmYSwKKyAgICAweGRjZDc2YmYyLCAweDk4NzY0ZWVhLCAweGE0MTZhZGUyLCAweDU5YWUyNmQ5LCAweDY1Y2VjNWQxLAorICAgIDB4MjE2ZmUwYzksIDB4MWQwZjAzYzEsIDB4YTgyZGFhZjksIDB4OTQ0ZDQ5ZjEsIDB4ZDBlYzZjZTksCisgICAgMHhlYzhjOGZlMSwgMHg2MWQ4MzhkOCwgMHg1ZGI4ZGJkMCwgMHgxOTE5ZmVjOCwgMHgyNTc5MWRjMCwKKyAgICAweDkwNWJiNGY4LCAweGFjM2I1N2YwLCAweGU4OWE3MmU4LCAweGQ0ZmE5MWUwLCAweGM4OWE2MmRmLAorICAgIDB4ZjRmYTgxZDcsIDB4YjA1YmE0Y2YsIDB4OGMzYjQ3YzcsIDB4MzkxOWVlZmYsIDB4MDU3OTBkZjcsCisgICAgMHg0MWQ4MjhlZiwgMHg3ZGI4Y2JlNywgMHhmMGVjN2NkZSwgMHhjYzhjOWZkNiwgMHg4ODJkYmFjZSwKKyAgICAweGI0NGQ1OWM2LCAweDAxNmZmMGZlLCAweDNkMGYxM2Y2LCAweDc5YWUzNmVlLCAweDQ1Y2VkNWU2LAorICAgIDB4Yjg3NjVlZGQsIDB4ODQxNmJkZDUsIDB4YzBiNzk4Y2QsIDB4ZmNkNzdiYzUsIDB4NDlmNWQyZmQsCisgICAgMHg3NTk1MzFmNSwgMHgzMTM0MTRlZCwgMHgwZDU0ZjdlNSwgMHg4MDAwNDBkYywgMHhiYzYwYTNkNCwKKyAgICAweGY4YzE4NmNjLCAweGM0YTE2NWM0LCAweDcxODNjY2ZjLCAweDRkZTMyZmY0LCAweDA5NDIwYWVjLAorICAgIDB4MzUyMmU5ZTR9LAorICAgezB4MDAwMDAwMDAsIDB4NjMwN2Q5MjQsIDB4YzYwZmIyNDgsIDB4YTUwODZiNmMsIDB4NTc2ZTYyZDEsCisgICAgMHgzNDY5YmJmNSwgMHg5MTYxZDA5OSwgMHhmMjY2MDliZCwgMHhhZWRjYzVhMiwgMHhjZGRiMWM4NiwKKyAgICAweDY4ZDM3N2VhLCAweDBiZDRhZWNlLCAweGY5YjJhNzczLCAweDlhYjU3ZTU3LCAweDNmYmQxNTNiLAorICAgIDB4NWNiYWNjMWYsIDB4ODZjODhkMDUsIDB4ZTVjZjU0MjEsIDB4NDBjNzNmNGQsIDB4MjNjMGU2NjksCisgICAgMHhkMWE2ZWZkNCwgMHhiMmExMzZmMCwgMHgxN2E5NWQ5YywgMHg3NGFlODRiOCwgMHgyODE0NDhhNywKKyAgICAweDRiMTM5MTgzLCAweGVlMWJmYWVmLCAweDhkMWMyM2NiLCAweDdmN2EyYTc2LCAweDFjN2RmMzUyLAorICAgIDB4Yjk3NTk4M2UsIDB4ZGE3MjQxMWEsIDB4ZDZlMDFjNGIsIDB4YjVlN2M1NmYsIDB4MTBlZmFlMDMsCisgICAgMHg3M2U4NzcyNywgMHg4MThlN2U5YSwgMHhlMjg5YTdiZSwgMHg0NzgxY2NkMiwgMHgyNDg2MTVmNiwKKyAgICAweDc4M2NkOWU5LCAweDFiM2IwMGNkLCAweGJlMzM2YmExLCAweGRkMzRiMjg1LCAweDJmNTJiYjM4LAorICAgIDB4NGM1NTYyMWMsIDB4ZTk1ZDA5NzAsIDB4OGE1YWQwNTQsIDB4NTAyODkxNGUsIDB4MzMyZjQ4NmEsCisgICAgMHg5NjI3MjMwNiwgMHhmNTIwZmEyMiwgMHgwNzQ2ZjM5ZiwgMHg2NDQxMmFiYiwgMHhjMTQ5NDFkNywKKyAgICAweGEyNGU5OGYzLCAweGZlZjQ1NGVjLCAweDlkZjM4ZGM4LCAweDM4ZmJlNmE0LCAweDViZmMzZjgwLAorICAgIDB4YTk5YTM2M2QsIDB4Y2E5ZGVmMTksIDB4NmY5NTg0NzUsIDB4MGM5MjVkNTEsIDB4NzZiMTNlZDcsCisgICAgMHgxNWI2ZTdmMywgMHhiMGJlOGM5ZiwgMHhkM2I5NTViYiwgMHgyMWRmNWMwNiwgMHg0MmQ4ODUyMiwKKyAgICAweGU3ZDBlZTRlLCAweDg0ZDczNzZhLCAweGQ4NmRmYjc1LCAweGJiNmEyMjUxLCAweDFlNjI0OTNkLAorICAgIDB4N2Q2NTkwMTksIDB4OGYwMzk5YTQsIDB4ZWMwNDQwODAsIDB4NDkwYzJiZWMsIDB4MmEwYmYyYzgsCisgICAgMHhmMDc5YjNkMiwgMHg5MzdlNmFmNiwgMHgzNjc2MDE5YSwgMHg1NTcxZDhiZSwgMHhhNzE3ZDEwMywKKyAgICAweGM0MTAwODI3LCAweDYxMTg2MzRiLCAweDAyMWZiYTZmLCAweDVlYTU3NjcwLCAweDNkYTJhZjU0LAorICAgIDB4OThhYWM0MzgsIDB4ZmJhZDFkMWMsIDB4MDljYjE0YTEsIDB4NmFjY2NkODUsIDB4Y2ZjNGE2ZTksCisgICAgMHhhY2MzN2ZjZCwgMHhhMDUxMjI5YywgMHhjMzU2ZmJiOCwgMHg2NjVlOTBkNCwgMHgwNTU5NDlmMCwKKyAgICAweGY3M2Y0MDRkLCAweDk0Mzg5OTY5LCAweDMxMzBmMjA1LCAweDUyMzcyYjIxLCAweDBlOGRlNzNlLAorICAgIDB4NmQ4YTNlMWEsIDB4Yzg4MjU1NzYsIDB4YWI4NThjNTIsIDB4NTllMzg1ZWYsIDB4M2FlNDVjY2IsCisgICAgMHg5ZmVjMzdhNywgMHhmY2ViZWU4MywgMHgyNjk5YWY5OSwgMHg0NTllNzZiZCwgMHhlMDk2MWRkMSwKKyAgICAweDgzOTFjNGY1LCAweDcxZjdjZDQ4LCAweDEyZjAxNDZjLCAweGI3Zjg3ZjAwLCAweGQ0ZmZhNjI0LAorICAgIDB4ODg0NTZhM2IsIDB4ZWI0MmIzMWYsIDB4NGU0YWQ4NzMsIDB4MmQ0ZDAxNTcsIDB4ZGYyYjA4ZWEsCisgICAgMHhiYzJjZDFjZSwgMHgxOTI0YmFhMiwgMHg3YTIzNjM4NiwgMHhlZDYyN2RhZSwgMHg4ZTY1YTQ4YSwKKyAgICAweDJiNmRjZmU2LCAweDQ4NmExNmMyLCAweGJhMGMxZjdmLCAweGQ5MGJjNjViLCAweDdjMDNhZDM3LAorICAgIDB4MWYwNDc0MTMsIDB4NDNiZWI4MGMsIDB4MjBiOTYxMjgsIDB4ODViMTBhNDQsIDB4ZTZiNmQzNjAsCisgICAgMHgxNGQwZGFkZCwgMHg3N2Q3MDNmOSwgMHhkMmRmNjg5NSwgMHhiMWQ4YjFiMSwgMHg2YmFhZjBhYiwKKyAgICAweDA4YWQyOThmLCAweGFkYTU0MmUzLCAweGNlYTI5YmM3LCAweDNjYzQ5MjdhLCAweDVmYzM0YjVlLAorICAgIDB4ZmFjYjIwMzIsIDB4OTljY2Y5MTYsIDB4YzU3NjM1MDksIDB4YTY3MWVjMmQsIDB4MDM3OTg3NDEsCisgICAgMHg2MDdlNWU2NSwgMHg5MjE4NTdkOCwgMHhmMTFmOGVmYywgMHg1NDE3ZTU5MCwgMHgzNzEwM2NiNCwKKyAgICAweDNiODI2MWU1LCAweDU4ODViOGMxLCAweGZkOGRkM2FkLCAweDllOGEwYTg5LCAweDZjZWMwMzM0LAorICAgIDB4MGZlYmRhMTAsIDB4YWFlM2IxN2MsIDB4YzllNDY4NTgsIDB4OTU1ZWE0NDcsIDB4ZjY1OTdkNjMsCisgICAgMHg1MzUxMTYwZiwgMHgzMDU2Y2YyYiwgMHhjMjMwYzY5NiwgMHhhMTM3MWZiMiwgMHgwNDNmNzRkZSwKKyAgICAweDY3MzhhZGZhLCAweGJkNGFlY2UwLCAweGRlNGQzNWM0LCAweDdiNDU1ZWE4LCAweDE4NDI4NzhjLAorICAgIDB4ZWEyNDhlMzEsIDB4ODkyMzU3MTUsIDB4MmMyYjNjNzksIDB4NGYyY2U1NWQsIDB4MTM5NjI5NDIsCisgICAgMHg3MDkxZjA2NiwgMHhkNTk5OWIwYSwgMHhiNjllNDIyZSwgMHg0NGY4NGI5MywgMHgyN2ZmOTJiNywKKyAgICAweDgyZjdmOWRiLCAweGUxZjAyMGZmLCAweDliZDM0Mzc5LCAweGY4ZDQ5YTVkLCAweDVkZGNmMTMxLAorICAgIDB4M2VkYjI4MTUsIDB4Y2NiZDIxYTgsIDB4YWZiYWY4OGMsIDB4MGFiMjkzZTAsIDB4NjliNTRhYzQsCisgICAgMHgzNTBmODZkYiwgMHg1NjA4NWZmZiwgMHhmMzAwMzQ5MywgMHg5MDA3ZWRiNywgMHg2MjYxZTQwYSwKKyAgICAweDAxNjYzZDJlLCAweGE0NmU1NjQyLCAweGM3Njk4ZjY2LCAweDFkMWJjZTdjLCAweDdlMWMxNzU4LAorICAgIDB4ZGIxNDdjMzQsIDB4YjgxM2E1MTAsIDB4NGE3NWFjYWQsIDB4Mjk3Mjc1ODksIDB4OGM3YTFlZTUsCisgICAgMHhlZjdkYzdjMSwgMHhiM2M3MGJkZSwgMHhkMGMwZDJmYSwgMHg3NWM4Yjk5NiwgMHgxNmNmNjBiMiwKKyAgICAweGU0YTk2OTBmLCAweDg3YWViMDJiLCAweDIyYTZkYjQ3LCAweDQxYTEwMjYzLCAweDRkMzM1ZjMyLAorICAgIDB4MmUzNDg2MTYsIDB4OGIzY2VkN2EsIDB4ZTgzYjM0NWUsIDB4MWE1ZDNkZTMsIDB4Nzk1YWU0YzcsCisgICAgMHhkYzUyOGZhYiwgMHhiZjU1NTY4ZiwgMHhlM2VmOWE5MCwgMHg4MGU4NDNiNCwgMHgyNWUwMjhkOCwKKyAgICAweDQ2ZTdmMWZjLCAweGI0ODFmODQxLCAweGQ3ODYyMTY1LCAweDcyOGU0YTA5LCAweDExODk5MzJkLAorICAgIDB4Y2JmYmQyMzcsIDB4YThmYzBiMTMsIDB4MGRmNDYwN2YsIDB4NmVmM2I5NWIsIDB4OWM5NWIwZTYsCisgICAgMHhmZjkyNjljMiwgMHg1YTlhMDJhZSwgMHgzOTlkZGI4YSwgMHg2NTI3MTc5NSwgMHgwNjIwY2ViMSwKKyAgICAweGEzMjhhNWRkLCAweGMwMmY3Y2Y5LCAweDMyNDk3NTQ0LCAweDUxNGVhYzYwLCAweGY0NDZjNzBjLAorICAgIDB4OTc0MTFlMjh9LAorICAgezB4MDAwMDAwMDAsIDB4MDFiNWZkMWQsIDB4MDM2YmZhM2EsIDB4MDJkZTA3MjcsIDB4MDZkN2Y0NzQsCisgICAgMHgwNzYyMDk2OSwgMHgwNWJjMGU0ZSwgMHgwNDA5ZjM1MywgMHgwZGFmZThlOCwgMHgwYzFhMTVmNSwKKyAgICAweDBlYzQxMmQyLCAweDBmNzFlZmNmLCAweDBiNzgxYzljLCAweDBhY2RlMTgxLCAweDA4MTNlNmE2LAorICAgIDB4MDlhNjFiYmIsIDB4MWI1ZmQxZDAsIDB4MWFlYTJjY2QsIDB4MTgzNDJiZWEsIDB4MTk4MWQ2ZjcsCisgICAgMHgxZDg4MjVhNCwgMHgxYzNkZDhiOSwgMHgxZWUzZGY5ZSwgMHgxZjU2MjI4MywgMHgxNmYwMzkzOCwKKyAgICAweDE3NDVjNDI1LCAweDE1OWJjMzAyLCAweDE0MmUzZTFmLCAweDEwMjdjZDRjLCAweDExOTIzMDUxLAorICAgIDB4MTM0YzM3NzYsIDB4MTJmOWNhNmIsIDB4MzZiZmEzYTAsIDB4MzcwYTVlYmQsIDB4MzVkNDU5OWEsCisgICAgMHgzNDYxYTQ4NywgMHgzMDY4NTdkNCwgMHgzMWRkYWFjOSwgMHgzMzAzYWRlZSwgMHgzMmI2NTBmMywKKyAgICAweDNiMTA0YjQ4LCAweDNhYTViNjU1LCAweDM4N2JiMTcyLCAweDM5Y2U0YzZmLCAweDNkYzdiZjNjLAorICAgIDB4M2M3MjQyMjEsIDB4M2VhYzQ1MDYsIDB4M2YxOWI4MWIsIDB4MmRlMDcyNzAsIDB4MmM1NThmNmQsCisgICAgMHgyZThiODg0YSwgMHgyZjNlNzU1NywgMHgyYjM3ODYwNCwgMHgyYTgyN2IxOSwgMHgyODVjN2MzZSwKKyAgICAweDI5ZTk4MTIzLCAweDIwNGY5YTk4LCAweDIxZmE2Nzg1LCAweDIzMjQ2MGEyLCAweDIyOTE5ZGJmLAorICAgIDB4MjY5ODZlZWMsIDB4MjcyZDkzZjEsIDB4MjVmMzk0ZDYsIDB4MjQ0NjY5Y2IsIDB4NmQ3ZjQ3NDAsCisgICAgMHg2Y2NhYmE1ZCwgMHg2ZTE0YmQ3YSwgMHg2ZmExNDA2NywgMHg2YmE4YjMzNCwgMHg2YTFkNGUyOSwKKyAgICAweDY4YzM0OTBlLCAweDY5NzZiNDEzLCAweDYwZDBhZmE4LCAweDYxNjU1MmI1LCAweDYzYmI1NTkyLAorICAgIDB4NjIwZWE4OGYsIDB4NjYwNzViZGMsIDB4NjdiMmE2YzEsIDB4NjU2Y2ExZTYsIDB4NjRkOTVjZmIsCisgICAgMHg3NjIwOTY5MCwgMHg3Nzk1NmI4ZCwgMHg3NTRiNmNhYSwgMHg3NGZlOTFiNywgMHg3MGY3NjJlNCwKKyAgICAweDcxNDI5ZmY5LCAweDczOWM5OGRlLCAweDcyMjk2NWMzLCAweDdiOGY3ZTc4LCAweDdhM2E4MzY1LAorICAgIDB4NzhlNDg0NDIsIDB4Nzk1MTc5NWYsIDB4N2Q1ODhhMGMsIDB4N2NlZDc3MTEsIDB4N2UzMzcwMzYsCisgICAgMHg3Zjg2OGQyYiwgMHg1YmMwZTRlMCwgMHg1YTc1MTlmZCwgMHg1OGFiMWVkYSwgMHg1OTFlZTNjNywKKyAgICAweDVkMTcxMDk0LCAweDVjYTJlZDg5LCAweDVlN2NlYWFlLCAweDVmYzkxN2IzLCAweDU2NmYwYzA4LAorICAgIDB4NTdkYWYxMTUsIDB4NTUwNGY2MzIsIDB4NTRiMTBiMmYsIDB4NTBiOGY4N2MsIDB4NTEwZDA1NjEsCisgICAgMHg1M2QzMDI0NiwgMHg1MjY2ZmY1YiwgMHg0MDlmMzUzMCwgMHg0MTJhYzgyZCwgMHg0M2Y0Y2YwYSwKKyAgICAweDQyNDEzMjE3LCAweDQ2NDhjMTQ0LCAweDQ3ZmQzYzU5LCAweDQ1MjMzYjdlLCAweDQ0OTZjNjYzLAorICAgIDB4NGQzMGRkZDgsIDB4NGM4NTIwYzUsIDB4NGU1YjI3ZTIsIDB4NGZlZWRhZmYsIDB4NGJlNzI5YWMsCisgICAgMHg0YTUyZDRiMSwgMHg0ODhjZDM5NiwgMHg0OTM5MmU4YiwgMHhkYWZlOGU4MCwgMHhkYjRiNzM5ZCwKKyAgICAweGQ5OTU3NGJhLCAweGQ4MjA4OWE3LCAweGRjMjk3YWY0LCAweGRkOWM4N2U5LCAweGRmNDI4MGNlLAorICAgIDB4ZGVmNzdkZDMsIDB4ZDc1MTY2NjgsIDB4ZDZlNDliNzUsIDB4ZDQzYTljNTIsIDB4ZDU4ZjYxNGYsCisgICAgMHhkMTg2OTIxYywgMHhkMDMzNmYwMSwgMHhkMmVkNjgyNiwgMHhkMzU4OTUzYiwgMHhjMWExNWY1MCwKKyAgICAweGMwMTRhMjRkLCAweGMyY2FhNTZhLCAweGMzN2Y1ODc3LCAweGM3NzZhYjI0LCAweGM2YzM1NjM5LAorICAgIDB4YzQxZDUxMWUsIDB4YzVhOGFjMDMsIDB4Y2MwZWI3YjgsIDB4Y2RiYjRhYTUsIDB4Y2Y2NTRkODIsCisgICAgMHhjZWQwYjA5ZiwgMHhjYWQ5NDNjYywgMHhjYjZjYmVkMSwgMHhjOWIyYjlmNiwgMHhjODA3NDRlYiwKKyAgICAweGVjNDEyZDIwLCAweGVkZjRkMDNkLCAweGVmMmFkNzFhLCAweGVlOWYyYTA3LCAweGVhOTZkOTU0LAorICAgIDB4ZWIyMzI0NDksIDB4ZTlmZDIzNmUsIDB4ZTg0OGRlNzMsIDB4ZTFlZWM1YzgsIDB4ZTA1YjM4ZDUsCisgICAgMHhlMjg1M2ZmMiwgMHhlMzMwYzJlZiwgMHhlNzM5MzFiYywgMHhlNjhjY2NhMSwgMHhlNDUyY2I4NiwKKyAgICAweGU1ZTczNjliLCAweGY3MWVmY2YwLCAweGY2YWIwMWVkLCAweGY0NzUwNmNhLCAweGY1YzBmYmQ3LAorICAgIDB4ZjFjOTA4ODQsIDB4ZjA3Y2Y1OTksIDB4ZjJhMmYyYmUsIDB4ZjMxNzBmYTMsIDB4ZmFiMTE0MTgsCisgICAgMHhmYjA0ZTkwNSwgMHhmOWRhZWUyMiwgMHhmODZmMTMzZiwgMHhmYzY2ZTA2YywgMHhmZGQzMWQ3MSwKKyAgICAweGZmMGQxYTU2LCAweGZlYjhlNzRiLCAweGI3ODFjOWMwLCAweGI2MzQzNGRkLCAweGI0ZWEzM2ZhLAorICAgIDB4YjU1ZmNlZTcsIDB4YjE1NjNkYjQsIDB4YjBlM2MwYTksIDB4YjIzZGM3OGUsIDB4YjM4ODNhOTMsCisgICAgMHhiYTJlMjEyOCwgMHhiYjliZGMzNSwgMHhiOTQ1ZGIxMiwgMHhiOGYwMjYwZiwgMHhiY2Y5ZDU1YywKKyAgICAweGJkNGMyODQxLCAweGJmOTIyZjY2LCAweGJlMjdkMjdiLCAweGFjZGUxODEwLCAweGFkNmJlNTBkLAorICAgIDB4YWZiNWUyMmEsIDB4YWUwMDFmMzcsIDB4YWEwOWVjNjQsIDB4YWJiYzExNzksIDB4YTk2MjE2NWUsCisgICAgMHhhOGQ3ZWI0MywgMHhhMTcxZjBmOCwgMHhhMGM0MGRlNSwgMHhhMjFhMGFjMiwgMHhhM2FmZjdkZiwKKyAgICAweGE3YTYwNDhjLCAweGE2MTNmOTkxLCAweGE0Y2RmZWI2LCAweGE1NzgwM2FiLCAweDgxM2U2YTYwLAorICAgIDB4ODA4Yjk3N2QsIDB4ODI1NTkwNWEsIDB4ODNlMDZkNDcsIDB4ODdlOTllMTQsIDB4ODY1YzYzMDksCisgICAgMHg4NDgyNjQyZSwgMHg4NTM3OTkzMywgMHg4YzkxODI4OCwgMHg4ZDI0N2Y5NSwgMHg4ZmZhNzhiMiwKKyAgICAweDhlNGY4NWFmLCAweDhhNDY3NmZjLCAweDhiZjM4YmUxLCAweDg5MmQ4Y2M2LCAweDg4OTg3MWRiLAorICAgIDB4OWE2MWJiYjAsIDB4OWJkNDQ2YWQsIDB4OTkwYTQxOGEsIDB4OThiZmJjOTcsIDB4OWNiNjRmYzQsCisgICAgMHg5ZDAzYjJkOSwgMHg5ZmRkYjVmZSwgMHg5ZTY4NDhlMywgMHg5N2NlNTM1OCwgMHg5NjdiYWU0NSwKKyAgICAweDk0YTVhOTYyLCAweDk1MTA1NDdmLCAweDkxMTlhNzJjLCAweDkwYWM1YTMxLCAweDkyNzI1ZDE2LAorICAgIDB4OTNjN2EwMGJ9LAorICAgezB4MDAwMDAwMDAsIDB4NmU4YzFiNDEsIDB4ZGQxODM2ODIsIDB4YjM5NDJkYzMsIDB4NjE0MTZiNDUsCisgICAgMHgwZmNkNzAwNCwgMHhiYzU5NWRjNywgMHhkMmQ1NDY4NiwgMHhjMjgyZDY4YSwgMHhhYzBlY2RjYiwKKyAgICAweDFmOWFlMDA4LCAweDcxMTZmYjQ5LCAweGEzYzNiZGNmLCAweGNkNGZhNjhlLCAweDdlZGI4YjRkLAorICAgIDB4MTA1NzkwMGMsIDB4NWU3NGFiNTUsIDB4MzBmOGIwMTQsIDB4ODM2YzlkZDcsIDB4ZWRlMDg2OTYsCisgICAgMHgzZjM1YzAxMCwgMHg1MWI5ZGI1MSwgMHhlMjJkZjY5MiwgMHg4Y2ExZWRkMywgMHg5Y2Y2N2RkZiwKKyAgICAweGYyN2E2NjllLCAweDQxZWU0YjVkLCAweDJmNjI1MDFjLCAweGZkYjcxNjlhLCAweDkzM2IwZGRiLAorICAgIDB4MjBhZjIwMTgsIDB4NGUyMzNiNTksIDB4YmNlOTU2YWEsIDB4ZDI2NTRkZWIsIDB4NjFmMTYwMjgsCisgICAgMHgwZjdkN2I2OSwgMHhkZGE4M2RlZiwgMHhiMzI0MjZhZSwgMHgwMGIwMGI2ZCwgMHg2ZTNjMTAyYywKKyAgICAweDdlNmI4MDIwLCAweDEwZTc5YjYxLCAweGEzNzNiNmEyLCAweGNkZmZhZGUzLCAweDFmMmFlYjY1LAorICAgIDB4NzFhNmYwMjQsIDB4YzIzMmRkZTcsIDB4YWNiZWM2YTYsIDB4ZTI5ZGZkZmYsIDB4OGMxMWU2YmUsCisgICAgMHgzZjg1Y2I3ZCwgMHg1MTA5ZDAzYywgMHg4M2RjOTZiYSwgMHhlZDUwOGRmYiwgMHg1ZWM0YTAzOCwKKyAgICAweDMwNDhiYjc5LCAweDIwMWYyYjc1LCAweDRlOTMzMDM0LCAweGZkMDcxZGY3LCAweDkzOGIwNmI2LAorICAgIDB4NDE1ZTQwMzAsIDB4MmZkMjViNzEsIDB4OWM0Njc2YjIsIDB4ZjJjYTZkZjMsIDB4YTJhM2FiMTUsCisgICAgMHhjYzJmYjA1NCwgMHg3ZmJiOWQ5NywgMHgxMTM3ODZkNiwgMHhjM2UyYzA1MCwgMHhhZDZlZGIxMSwKKyAgICAweDFlZmFmNmQyLCAweDcwNzZlZDkzLCAweDYwMjE3ZDlmLCAweDBlYWQ2NmRlLCAweGJkMzk0YjFkLAorICAgIDB4ZDNiNTUwNWMsIDB4MDE2MDE2ZGEsIDB4NmZlYzBkOWIsIDB4ZGM3ODIwNTgsIDB4YjJmNDNiMTksCisgICAgMHhmY2Q3MDA0MCwgMHg5MjViMWIwMSwgMHgyMWNmMzZjMiwgMHg0ZjQzMmQ4MywgMHg5ZDk2NmIwNSwKKyAgICAweGYzMWE3MDQ0LCAweDQwOGU1ZDg3LCAweDJlMDI0NmM2LCAweDNlNTVkNmNhLCAweDUwZDljZDhiLAorICAgIDB4ZTM0ZGUwNDgsIDB4OGRjMWZiMDksIDB4NWYxNGJkOGYsIDB4MzE5OGE2Y2UsIDB4ODIwYzhiMGQsCisgICAgMHhlYzgwOTA0YywgMHgxZTRhZmRiZiwgMHg3MGM2ZTZmZSwgMHhjMzUyY2IzZCwgMHhhZGRlZDA3YywKKyAgICAweDdmMGI5NmZhLCAweDExODc4ZGJiLCAweGEyMTNhMDc4LCAweGNjOWZiYjM5LCAweGRjYzgyYjM1LAorICAgIDB4YjI0NDMwNzQsIDB4MDFkMDFkYjcsIDB4NmY1YzA2ZjYsIDB4YmQ4OTQwNzAsIDB4ZDMwNTViMzEsCisgICAgMHg2MDkxNzZmMiwgMHgwZTFkNmRiMywgMHg0MDNlNTZlYSwgMHgyZWIyNGRhYiwgMHg5ZDI2NjA2OCwKKyAgICAweGYzYWE3YjI5LCAweDIxN2YzZGFmLCAweDRmZjMyNmVlLCAweGZjNjcwYjJkLCAweDkyZWIxMDZjLAorICAgIDB4ODJiYzgwNjAsIDB4ZWMzMDliMjEsIDB4NWZhNGI2ZTIsIDB4MzEyOGFkYTMsIDB4ZTNmZGViMjUsCisgICAgMHg4ZDcxZjA2NCwgMHgzZWU1ZGRhNywgMHg1MDY5YzZlNiwgMHg5ZTM2NTA2YiwgMHhmMGJhNGIyYSwKKyAgICAweDQzMmU2NmU5LCAweDJkYTI3ZGE4LCAweGZmNzczYjJlLCAweDkxZmIyMDZmLCAweDIyNmYwZGFjLAorICAgIDB4NGNlMzE2ZWQsIDB4NWNiNDg2ZTEsIDB4MzIzODlkYTAsIDB4ODFhY2IwNjMsIDB4ZWYyMGFiMjIsCisgICAgMHgzZGY1ZWRhNCwgMHg1Mzc5ZjZlNSwgMHhlMGVkZGIyNiwgMHg4ZTYxYzA2NywgMHhjMDQyZmIzZSwKKyAgICAweGFlY2VlMDdmLCAweDFkNWFjZGJjLCAweDczZDZkNmZkLCAweGExMDM5MDdiLCAweGNmOGY4YjNhLAorICAgIDB4N2MxYmE2ZjksIDB4MTI5N2JkYjgsIDB4MDJjMDJkYjQsIDB4NmM0YzM2ZjUsIDB4ZGZkODFiMzYsCisgICAgMHhiMTU0MDA3NywgMHg2MzgxNDZmMSwgMHgwZDBkNWRiMCwgMHhiZTk5NzA3MywgMHhkMDE1NmIzMiwKKyAgICAweDIyZGYwNmMxLCAweDRjNTMxZDgwLCAweGZmYzczMDQzLCAweDkxNGIyYjAyLCAweDQzOWU2ZDg0LAorICAgIDB4MmQxMjc2YzUsIDB4OWU4NjViMDYsIDB4ZjAwYTQwNDcsIDB4ZTA1ZGQwNGIsIDB4OGVkMWNiMGEsCisgICAgMHgzZDQ1ZTZjOSwgMHg1M2M5ZmQ4OCwgMHg4MTFjYmIwZSwgMHhlZjkwYTA0ZiwgMHg1YzA0OGQ4YywKKyAgICAweDMyODg5NmNkLCAweDdjYWJhZDk0LCAweDEyMjdiNmQ1LCAweGExYjM5YjE2LCAweGNmM2Y4MDU3LAorICAgIDB4MWRlYWM2ZDEsIDB4NzM2NmRkOTAsIDB4YzBmMmYwNTMsIDB4YWU3ZWViMTIsIDB4YmUyOTdiMWUsCisgICAgMHhkMGE1NjA1ZiwgMHg2MzMxNGQ5YywgMHgwZGJkNTZkZCwgMHhkZjY4MTA1YiwgMHhiMWU0MGIxYSwKKyAgICAweDAyNzAyNmQ5LCAweDZjZmMzZDk4LCAweDNjOTVmYjdlLCAweDUyMTllMDNmLCAweGUxOGRjZGZjLAorICAgIDB4OGYwMWQ2YmQsIDB4NWRkNDkwM2IsIDB4MzM1ODhiN2EsIDB4ODBjY2E2YjksIDB4ZWU0MGJkZjgsCisgICAgMHhmZTE3MmRmNCwgMHg5MDliMzZiNSwgMHgyMzBmMWI3NiwgMHg0ZDgzMDAzNywgMHg5ZjU2NDZiMSwKKyAgICAweGYxZGE1ZGYwLCAweDQyNGU3MDMzLCAweDJjYzI2YjcyLCAweDYyZTE1MDJiLCAweDBjNmQ0YjZhLAorICAgIDB4YmZmOTY2YTksIDB4ZDE3NTdkZTgsIDB4MDNhMDNiNmUsIDB4NmQyYzIwMmYsIDB4ZGViODBkZWMsCisgICAgMHhiMDM0MTZhZCwgMHhhMDYzODZhMSwgMHhjZWVmOWRlMCwgMHg3ZDdiYjAyMywgMHgxM2Y3YWI2MiwKKyAgICAweGMxMjJlZGU0LCAweGFmYWVmNmE1LCAweDFjM2FkYjY2LCAweDcyYjZjMDI3LCAweDgwN2NhZGQ0LAorICAgIDB4ZWVmMGI2OTUsIDB4NWQ2NDliNTYsIDB4MzNlODgwMTcsIDB4ZTEzZGM2OTEsIDB4OGZiMWRkZDAsCisgICAgMHgzYzI1ZjAxMywgMHg1MmE5ZWI1MiwgMHg0MmZlN2I1ZSwgMHgyYzcyNjAxZiwgMHg5ZmU2NGRkYywKKyAgICAweGYxNmE1NjlkLCAweDIzYmYxMDFiLCAweDRkMzMwYjVhLCAweGZlYTcyNjk5LCAweDkwMmIzZGQ4LAorICAgIDB4ZGUwODA2ODEsIDB4YjA4NDFkYzAsIDB4MDMxMDMwMDMsIDB4NmQ5YzJiNDIsIDB4YmY0OTZkYzQsCisgICAgMHhkMWM1NzY4NSwgMHg2MjUxNWI0NiwgMHgwY2RkNDAwNywgMHgxYzhhZDAwYiwgMHg3MjA2Y2I0YSwKKyAgICAweGMxOTJlNjg5LCAweGFmMWVmZGM4LCAweDdkY2JiYjRlLCAweDEzNDdhMDBmLCAweGEwZDM4ZGNjLAorICAgIDB4Y2U1Zjk2OGR9LAorICAgezB4MDAwMDAwMDAsIDB4ZTcxZGE2OTcsIDB4MTU0YTRiNmYsIDB4ZjI1N2VkZjgsIDB4MmE5NDk2ZGUsCisgICAgMHhjZDg5MzA0OSwgMHgzZmRlZGRiMSwgMHhkOGMzN2IyNiwgMHg1NTI5MmRiYywgMHhiMjM0OGIyYiwKKyAgICAweDQwNjM2NmQzLCAweGE3N2VjMDQ0LCAweDdmYmRiYjYyLCAweDk4YTAxZGY1LCAweDZhZjdmMDBkLAorICAgIDB4OGRlYTU2OWEsIDB4YWE1MjViNzgsIDB4NGQ0ZmZkZWYsIDB4YmYxODEwMTcsIDB4NTgwNWI2ODAsCisgICAgMHg4MGM2Y2RhNiwgMHg2N2RiNmIzMSwgMHg5NThjODZjOSwgMHg3MjkxMjA1ZSwgMHhmZjdiNzZjNCwKKyAgICAweDE4NjZkMDUzLCAweGVhMzEzZGFiLCAweDBkMmM5YjNjLCAweGQ1ZWZlMDFhLCAweDMyZjI0NjhkLAorICAgIDB4YzBhNWFiNzUsIDB4MjdiODBkZTIsIDB4OGZkNWIwYjEsIDB4NjhjODE2MjYsIDB4OWE5ZmZiZGUsCisgICAgMHg3ZDgyNWQ0OSwgMHhhNTQxMjY2ZiwgMHg0MjVjODBmOCwgMHhiMDBiNmQwMCwgMHg1NzE2Y2I5NywKKyAgICAweGRhZmM5ZDBkLCAweDNkZTEzYjlhLCAweGNmYjZkNjYyLCAweDI4YWI3MGY1LCAweGYwNjgwYmQzLAorICAgIDB4MTc3NWFkNDQsIDB4ZTUyMjQwYmMsIDB4MDIzZmU2MmIsIDB4MjU4N2ViYzksIDB4YzI5YTRkNWUsCisgICAgMHgzMGNkYTBhNiwgMHhkN2QwMDYzMSwgMHgwZjEzN2QxNywgMHhlODBlZGI4MCwgMHgxYTU5MzY3OCwKKyAgICAweGZkNDQ5MGVmLCAweDcwYWVjNjc1LCAweDk3YjM2MGUyLCAweDY1ZTQ4ZDFhLCAweDgyZjkyYjhkLAorICAgIDB4NWEzYTUwYWIsIDB4YmQyN2Y2M2MsIDB4NGY3MDFiYzQsIDB4YTg2ZGJkNTMsIDB4YzRkYTY3MjMsCisgICAgMHgyM2M3YzFiNCwgMHhkMTkwMmM0YywgMHgzNjhkOGFkYiwgMHhlZTRlZjFmZCwgMHgwOTUzNTc2YSwKKyAgICAweGZiMDRiYTkyLCAweDFjMTkxYzA1LCAweDkxZjM0YTlmLCAweDc2ZWVlYzA4LCAweDg0YjkwMWYwLAorICAgIDB4NjNhNGE3NjcsIDB4YmI2N2RjNDEsIDB4NWM3YTdhZDYsIDB4YWUyZDk3MmUsIDB4NDkzMDMxYjksCisgICAgMHg2ZTg4M2M1YiwgMHg4OTk1OWFjYywgMHg3YmMyNzczNCwgMHg5Y2RmZDFhMywgMHg0NDFjYWE4NSwKKyAgICAweGEzMDEwYzEyLCAweDUxNTZlMWVhLCAweGI2NGI0NzdkLCAweDNiYTExMWU3LCAweGRjYmNiNzcwLAorICAgIDB4MmVlYjVhODgsIDB4YzlmNmZjMWYsIDB4MTEzNTg3MzksIDB4ZjYyODIxYWUsIDB4MDQ3ZmNjNTYsCisgICAgMHhlMzYyNmFjMSwgMHg0YjBmZDc5MiwgMHhhYzEyNzEwNSwgMHg1ZTQ1OWNmZCwgMHhiOTU4M2E2YSwKKyAgICAweDYxOWI0MTRjLCAweDg2ODZlN2RiLCAweDc0ZDEwYTIzLCAweDkzY2NhY2I0LCAweDFlMjZmYTJlLAorICAgIDB4ZjkzYjVjYjksIDB4MGI2Y2IxNDEsIDB4ZWM3MTE3ZDYsIDB4MzRiMjZjZjAsIDB4ZDNhZmNhNjcsCisgICAgMHgyMWY4Mjc5ZiwgMHhjNmU1ODEwOCwgMHhlMTVkOGNlYSwgMHgwNjQwMmE3ZCwgMHhmNDE3Yzc4NSwKKyAgICAweDEzMGE2MTEyLCAweGNiYzkxYTM0LCAweDJjZDRiY2EzLCAweGRlODM1MTViLCAweDM5OWVmN2NjLAorICAgIDB4YjQ3NGExNTYsIDB4NTM2OTA3YzEsIDB4YTEzZWVhMzksIDB4NDYyMzRjYWUsIDB4OWVlMDM3ODgsCisgICAgMHg3OWZkOTExZiwgMHg4YmFhN2NlNywgMHg2Y2I3ZGE3MCwgMHg1MmM1YzgwNywgMHhiNWQ4NmU5MCwKKyAgICAweDQ3OGY4MzY4LCAweGEwOTIyNWZmLCAweDc4NTE1ZWQ5LCAweDlmNGNmODRlLCAweDZkMWIxNWI2LAorICAgIDB4OGEwNmIzMjEsIDB4MDdlY2U1YmIsIDB4ZTBmMTQzMmMsIDB4MTJhNmFlZDQsIDB4ZjViYjA4NDMsCisgICAgMHgyZDc4NzM2NSwgMHhjYTY1ZDVmMiwgMHgzODMyMzgwYSwgMHhkZjJmOWU5ZCwgMHhmODk3OTM3ZiwKKyAgICAweDFmOGEzNWU4LCAweGVkZGRkODEwLCAweDBhYzA3ZTg3LCAweGQyMDMwNWExLCAweDM1MWVhMzM2LAorICAgIDB4Yzc0OTRlY2UsIDB4MjA1NGU4NTksIDB4YWRiZWJlYzMsIDB4NGFhMzE4NTQsIDB4YjhmNGY1YWMsCisgICAgMHg1ZmU5NTMzYiwgMHg4NzJhMjgxZCwgMHg2MDM3OGU4YSwgMHg5MjYwNjM3MiwgMHg3NTdkYzVlNSwKKyAgICAweGRkMTA3OGI2LCAweDNhMGRkZTIxLCAweGM4NWEzM2Q5LCAweDJmNDc5NTRlLCAweGY3ODRlZTY4LAorICAgIDB4MTA5OTQ4ZmYsIDB4ZTJjZWE1MDcsIDB4MDVkMzAzOTAsIDB4ODgzOTU1MGEsIDB4NmYyNGYzOWQsCisgICAgMHg5ZDczMWU2NSwgMHg3YTZlYjhmMiwgMHhhMmFkYzNkNCwgMHg0NWIwNjU0MywgMHhiN2U3ODhiYiwKKyAgICAweDUwZmEyZTJjLCAweDc3NDIyM2NlLCAweDkwNWY4NTU5LCAweDYyMDg2OGExLCAweDg1MTVjZTM2LAorICAgIDB4NWRkNmI1MTAsIDB4YmFjYjEzODcsIDB4NDg5Y2ZlN2YsIDB4YWY4MTU4ZTgsIDB4MjI2YjBlNzIsCisgICAgMHhjNTc2YThlNSwgMHgzNzIxNDUxZCwgMHhkMDNjZTM4YSwgMHgwOGZmOThhYywgMHhlZmUyM2UzYiwKKyAgICAweDFkYjVkM2MzLCAweGZhYTg3NTU0LCAweDk2MWZhZjI0LCAweDcxMDIwOWIzLCAweDgzNTVlNDRiLAorICAgIDB4NjQ0ODQyZGMsIDB4YmM4YjM5ZmEsIDB4NWI5NjlmNmQsIDB4YTljMTcyOTUsIDB4NGVkY2Q0MDIsCisgICAgMHhjMzM2ODI5OCwgMHgyNDJiMjQwZiwgMHhkNjdjYzlmNywgMHgzMTYxNmY2MCwgMHhlOWEyMTQ0NiwKKyAgICAweDBlYmZiMmQxLCAweGZjZTg1ZjI5LCAweDFiZjVmOWJlLCAweDNjNGRmNDVjLCAweGRiNTA1MmNiLAorICAgIDB4MjkwN2JmMzMsIDB4Y2UxYTE5YTQsIDB4MTZkOTYyODIsIDB4ZjFjNGM0MTUsIDB4MDM5MzI5ZWQsCisgICAgMHhlNDhlOGY3YSwgMHg2OTY0ZDllMCwgMHg4ZTc5N2Y3NywgMHg3YzJlOTI4ZiwgMHg5YjMzMzQxOCwKKyAgICAweDQzZjA0ZjNlLCAweGE0ZWRlOWE5LCAweDU2YmEwNDUxLCAweGIxYTdhMmM2LCAweDE5Y2ExZjk1LAorICAgIDB4ZmVkN2I5MDIsIDB4MGM4MDU0ZmEsIDB4ZWI5ZGYyNmQsIDB4MzM1ZTg5NGIsIDB4ZDQ0MzJmZGMsCisgICAgMHgyNjE0YzIyNCwgMHhjMTA5NjRiMywgMHg0Y2UzMzIyOSwgMHhhYmZlOTRiZSwgMHg1OWE5Nzk0NiwKKyAgICAweGJlYjRkZmQxLCAweDY2NzdhNGY3LCAweDgxNmEwMjYwLCAweDczM2RlZjk4LCAweDk0MjA0OTBmLAorICAgIDB4YjM5ODQ0ZWQsIDB4NTQ4NWUyN2EsIDB4YTZkMjBmODIsIDB4NDFjZmE5MTUsIDB4OTkwY2QyMzMsCisgICAgMHg3ZTExNzRhNCwgMHg4YzQ2OTk1YywgMHg2YjViM2ZjYiwgMHhlNmIxNjk1MSwgMHgwMWFjY2ZjNiwKKyAgICAweGYzZmIyMjNlLCAweDE0ZTY4NGE5LCAweGNjMjVmZjhmLCAweDJiMzg1OTE4LCAweGQ5NmZiNGUwLAorICAgIDB4M2U3MjEyNzd9LAorICAgezB4MDAwMDAwMDAsIDB4YTU4YjkwMGUsIDB4OTA2NjI2NWQsIDB4MzVlZGI2NTMsIDB4ZmJiZDRhZmIsCisgICAgMHg1ZTM2ZGFmNSwgMHg2YmRiNmNhNiwgMHhjZTUwZmNhOCwgMHgyYzBiOTNiNywgMHg4OTgwMDNiOSwKKyAgICAweGJjNmRiNWVhLCAweDE5ZTYyNWU0LCAweGQ3YjZkOTRjLCAweDcyM2Q0OTQyLCAweDQ3ZDBmZjExLAorICAgIDB4ZTI1YjZmMWYsIDB4NTgxNzI3NmUsIDB4ZmQ5Y2I3NjAsIDB4Yzg3MTAxMzMsIDB4NmRmYTkxM2QsCisgICAgMHhhM2FhNmQ5NSwgMHgwNjIxZmQ5YiwgMHgzM2NjNGJjOCwgMHg5NjQ3ZGJjNiwgMHg3NDFjYjRkOSwKKyAgICAweGQxOTcyNGQ3LCAweGU0N2E5Mjg0LCAweDQxZjEwMjhhLCAweDhmYTFmZTIyLCAweDJhMmE2ZTJjLAorICAgIDB4MWZjN2Q4N2YsIDB4YmE0YzQ4NzEsIDB4YjAyZTRlZGMsIDB4MTVhNWRlZDIsIDB4MjA0ODY4ODEsCisgICAgMHg4NWMzZjg4ZiwgMHg0YjkzMDQyNywgMHhlZTE4OTQyOSwgMHhkYmY1MjI3YSwgMHg3ZTdlYjI3NCwKKyAgICAweDljMjVkZDZiLCAweDM5YWU0ZDY1LCAweDBjNDNmYjM2LCAweGE5Yzg2YjM4LCAweDY3OTg5NzkwLAorICAgIDB4YzIxMzA3OWUsIDB4ZjdmZWIxY2QsIDB4NTI3NTIxYzMsIDB4ZTgzOTY5YjIsIDB4NGRiMmY5YmMsCisgICAgMHg3ODVmNGZlZiwgMHhkZGQ0ZGZlMSwgMHgxMzg0MjM0OSwgMHhiNjBmYjM0NywgMHg4M2UyMDUxNCwKKyAgICAweDI2Njk5NTFhLCAweGM0MzJmYTA1LCAweDYxYjk2YTBiLCAweDU0NTRkYzU4LCAweGYxZGY0YzU2LAorICAgIDB4M2Y4ZmIwZmUsIDB4OWEwNDIwZjAsIDB4YWZlOTk2YTMsIDB4MGE2MjA2YWQsIDB4YmIyZDliZjksCisgICAgMHgxZWE2MGJmNywgMHgyYjRiYmRhNCwgMHg4ZWMwMmRhYSwgMHg0MDkwZDEwMiwgMHhlNTFiNDEwYywKKyAgICAweGQwZjZmNzVmLCAweDc1N2Q2NzUxLCAweDk3MjYwODRlLCAweDMyYWQ5ODQwLCAweDA3NDAyZTEzLAorICAgIDB4YTJjYmJlMWQsIDB4NmM5YjQyYjUsIDB4YzkxMGQyYmIsIDB4ZmNmZDY0ZTgsIDB4NTk3NmY0ZTYsCisgICAgMHhlMzNhYmM5NywgMHg0NmIxMmM5OSwgMHg3MzVjOWFjYSwgMHhkNmQ3MGFjNCwgMHgxODg3ZjY2YywKKyAgICAweGJkMGM2NjYyLCAweDg4ZTFkMDMxLCAweDJkNmE0MDNmLCAweGNmMzEyZjIwLCAweDZhYmFiZjJlLAorICAgIDB4NWY1NzA5N2QsIDB4ZmFkYzk5NzMsIDB4MzQ4YzY1ZGIsIDB4OTEwN2Y1ZDUsIDB4YTRlYTQzODYsCisgICAgMHgwMTYxZDM4OCwgMHgwYjAzZDUyNSwgMHhhZTg4NDUyYiwgMHg5YjY1ZjM3OCwgMHgzZWVlNjM3NiwKKyAgICAweGYwYmU5ZmRlLCAweDU1MzUwZmQwLCAweDYwZDhiOTgzLCAweGM1NTMyOThkLCAweDI3MDg0NjkyLAorICAgIDB4ODI4M2Q2OWMsIDB4Yjc2ZTYwY2YsIDB4MTJlNWYwYzEsIDB4ZGNiNTBjNjksIDB4NzkzZTljNjcsCisgICAgMHg0Y2QzMmEzNCwgMHhlOTU4YmEzYSwgMHg1MzE0ZjI0YiwgMHhmNjlmNjI0NSwgMHhjMzcyZDQxNiwKKyAgICAweDY2Zjk0NDE4LCAweGE4YTliOGIwLCAweDBkMjIyOGJlLCAweDM4Y2Y5ZWVkLCAweDlkNDQwZWUzLAorICAgIDB4N2YxZjYxZmMsIDB4ZGE5NGYxZjIsIDB4ZWY3OTQ3YTEsIDB4NGFmMmQ3YWYsIDB4ODRhMjJiMDcsCisgICAgMHgyMTI5YmIwOSwgMHgxNGM0MGQ1YSwgMHhiMTRmOWQ1NCwgMHhhZDJhMzFiMywgMHgwOGExYTFiZCwKKyAgICAweDNkNGMxN2VlLCAweDk4Yzc4N2UwLCAweDU2OTc3YjQ4LCAweGYzMWNlYjQ2LCAweGM2ZjE1ZDE1LAorICAgIDB4NjM3YWNkMWIsIDB4ODEyMWEyMDQsIDB4MjRhYTMyMGEsIDB4MTE0Nzg0NTksIDB4YjRjYzE0NTcsCisgICAgMHg3YTljZThmZiwgMHhkZjE3NzhmMSwgMHhlYWZhY2VhMiwgMHg0ZjcxNWVhYywgMHhmNTNkMTZkZCwKKyAgICAweDUwYjY4NmQzLCAweDY1NWIzMDgwLCAweGMwZDBhMDhlLCAweDBlODA1YzI2LCAweGFiMGJjYzI4LAorICAgIDB4OWVlNjdhN2IsIDB4M2I2ZGVhNzUsIDB4ZDkzNjg1NmEsIDB4N2NiZDE1NjQsIDB4NDk1MGEzMzcsCisgICAgMHhlY2RiMzMzOSwgMHgyMjhiY2Y5MSwgMHg4NzAwNWY5ZiwgMHhiMmVkZTljYywgMHgxNzY2NzljMiwKKyAgICAweDFkMDQ3ZjZmLCAweGI4OGZlZjYxLCAweDhkNjI1OTMyLCAweDI4ZTljOTNjLCAweGU2YjkzNTk0LAorICAgIDB4NDMzMmE1OWEsIDB4NzZkZjEzYzksIDB4ZDM1NDgzYzcsIDB4MzEwZmVjZDgsIDB4OTQ4NDdjZDYsCisgICAgMHhhMTY5Y2E4NSwgMHgwNGUyNWE4YiwgMHhjYWIyYTYyMywgMHg2ZjM5MzYyZCwgMHg1YWQ0ODA3ZSwKKyAgICAweGZmNWYxMDcwLCAweDQ1MTM1ODAxLCAweGUwOThjODBmLCAweGQ1NzU3ZTVjLCAweDcwZmVlZTUyLAorICAgIDB4YmVhZTEyZmEsIDB4MWIyNTgyZjQsIDB4MmVjODM0YTcsIDB4OGI0M2E0YTksIDB4NjkxOGNiYjYsCisgICAgMHhjYzkzNWJiOCwgMHhmOTdlZWRlYiwgMHg1Y2Y1N2RlNSwgMHg5MmE1ODE0ZCwgMHgzNzJlMTE0MywKKyAgICAweDAyYzNhNzEwLCAweGE3NDgzNzFlLCAweDE2MDdhYTRhLCAweGIzOGMzYTQ0LCAweDg2NjE4YzE3LAorICAgIDB4MjNlYTFjMTksIDB4ZWRiYWUwYjEsIDB4NDgzMTcwYmYsIDB4N2RkY2M2ZWMsIDB4ZDg1NzU2ZTIsCisgICAgMHgzYTBjMzlmZCwgMHg5Zjg3YTlmMywgMHhhYTZhMWZhMCwgMHgwZmUxOGZhZSwgMHhjMWIxNzMwNiwKKyAgICAweDY0M2FlMzA4LCAweDUxZDc1NTViLCAweGY0NWNjNTU1LCAweDRlMTA4ZDI0LCAweGViOWIxZDJhLAorICAgIDB4ZGU3NmFiNzksIDB4N2JmZDNiNzcsIDB4YjVhZGM3ZGYsIDB4MTAyNjU3ZDEsIDB4MjVjYmUxODIsCisgICAgMHg4MDQwNzE4YywgMHg2MjFiMWU5MywgMHhjNzkwOGU5ZCwgMHhmMjdkMzhjZSwgMHg1N2Y2YThjMCwKKyAgICAweDk5YTY1NDY4LCAweDNjMmRjNDY2LCAweDA5YzA3MjM1LCAweGFjNGJlMjNiLCAweGE2MjllNDk2LAorICAgIDB4MDNhMjc0OTgsIDB4MzY0ZmMyY2IsIDB4OTNjNDUyYzUsIDB4NWQ5NGFlNmQsIDB4ZjgxZjNlNjMsCisgICAgMHhjZGYyODgzMCwgMHg2ODc5MTgzZSwgMHg4YTIyNzcyMSwgMHgyZmE5ZTcyZiwgMHgxYTQ0NTE3YywKKyAgICAweGJmY2ZjMTcyLCAweDcxOWYzZGRhLCAweGQ0MTRhZGQ0LCAweGUxZjkxYjg3LCAweDQ0NzI4Yjg5LAorICAgIDB4ZmUzZWMzZjgsIDB4NWJiNTUzZjYsIDB4NmU1OGU1YTUsIDB4Y2JkMzc1YWIsIDB4MDU4Mzg5MDMsCisgICAgMHhhMDA4MTkwZCwgMHg5NWU1YWY1ZSwgMHgzMDZlM2Y1MCwgMHhkMjM1NTA0ZiwgMHg3N2JlYzA0MSwKKyAgICAweDQyNTM3NjEyLCAweGU3ZDhlNjFjLCAweDI5ODgxYWI0LCAweDhjMDM4YWJhLCAweGI5ZWUzY2U5LAorICAgIDB4MWM2NWFjZTd9fTsKKworbG9jYWwgY29uc3Qgel93b3JkX3QgRkFSIGNyY19icmFpZF9iaWdfdGFibGVbXVsyNTZdID0geworICAgezB4MDAwMDAwMDAwMDAwMDAwMCwgMHgwZTkwOGJhNTAwMDAwMDAwLCAweDVkMjY2NjkwMDAwMDAwMDAsCisgICAgMHg1M2I2ZWQzNTAwMDAwMDAwLCAweGZiNGFiZGZiMDAwMDAwMDAsIDB4ZjVkYTM2NWUwMDAwMDAwMCwKKyAgICAweGE2NmNkYjZiMDAwMDAwMDAsIDB4YThmYzUwY2UwMDAwMDAwMCwgMHhiNzkzMGIyYzAwMDAwMDAwLAorICAgIDB4YjkwMzgwODkwMDAwMDAwMCwgMHhlYWI1NmRiYzAwMDAwMDAwLCAweGU0MjVlNjE5MDAwMDAwMDAsCisgICAgMHg0Y2Q5YjZkNzAwMDAwMDAwLCAweDQyNDkzZDcyMDAwMDAwMDAsIDB4MTFmZmQwNDcwMDAwMDAwMCwKKyAgICAweDFmNmY1YmUyMDAwMDAwMDAsIDB4NmUyNzE3NTgwMDAwMDAwMCwgMHg2MGI3OWNmZDAwMDAwMDAwLAorICAgIDB4MzMwMTcxYzgwMDAwMDAwMCwgMHgzZDkxZmE2ZDAwMDAwMDAwLCAweDk1NmRhYWEzMDAwMDAwMDAsCisgICAgMHg5YmZkMjEwNjAwMDAwMDAwLCAweGM4NGJjYzMzMDAwMDAwMDAsIDB4YzZkYjQ3OTYwMDAwMDAwMCwKKyAgICAweGQ5YjQxYzc0MDAwMDAwMDAsIDB4ZDcyNDk3ZDEwMDAwMDAwMCwgMHg4NDkyN2FlNDAwMDAwMDAwLAorICAgIDB4OGEwMmYxNDEwMDAwMDAwMCwgMHgyMmZlYTE4ZjAwMDAwMDAwLCAweDJjNmUyYTJhMDAwMDAwMDAsCisgICAgMHg3ZmQ4YzcxZjAwMDAwMDAwLCAweDcxNDg0Y2JhMDAwMDAwMDAsIDB4ZGM0ZTJlYjAwMDAwMDAwMCwKKyAgICAweGQyZGVhNTE1MDAwMDAwMDAsIDB4ODE2ODQ4MjAwMDAwMDAwMCwgMHg4ZmY4YzM4NTAwMDAwMDAwLAorICAgIDB4MjcwNDkzNGIwMDAwMDAwMCwgMHgyOTk0MThlZTAwMDAwMDAwLCAweDdhMjJmNWRiMDAwMDAwMDAsCisgICAgMHg3NGIyN2U3ZTAwMDAwMDAwLCAweDZiZGQyNTljMDAwMDAwMDAsIDB4NjU0ZGFlMzkwMDAwMDAwMCwKKyAgICAweDM2ZmI0MzBjMDAwMDAwMDAsIDB4Mzg2YmM4YTkwMDAwMDAwMCwgMHg5MDk3OTg2NzAwMDAwMDAwLAorICAgIDB4OWUwNzEzYzIwMDAwMDAwMCwgMHhjZGIxZmVmNzAwMDAwMDAwLCAweGMzMjE3NTUyMDAwMDAwMDAsCisgICAgMHhiMjY5MzllODAwMDAwMDAwLCAweGJjZjliMjRkMDAwMDAwMDAsIDB4ZWY0ZjVmNzgwMDAwMDAwMCwKKyAgICAweGUxZGZkNGRkMDAwMDAwMDAsIDB4NDkyMzg0MTMwMDAwMDAwMCwgMHg0N2IzMGZiNjAwMDAwMDAwLAorICAgIDB4MTQwNWUyODMwMDAwMDAwMCwgMHgxYTk1NjkyNjAwMDAwMDAwLCAweDA1ZmEzMmM0MDAwMDAwMDAsCisgICAgMHgwYjZhYjk2MTAwMDAwMDAwLCAweDU4ZGM1NDU0MDAwMDAwMDAsIDB4NTY0Y2RmZjEwMDAwMDAwMCwKKyAgICAweGZlYjA4ZjNmMDAwMDAwMDAsIDB4ZjAyMDA0OWEwMDAwMDAwMCwgMHhhMzk2ZTlhZjAwMDAwMDAwLAorICAgIDB4YWQwNjYyMGEwMDAwMDAwMCwgMHhmOTliMmRiYjAwMDAwMDAwLCAweGY3MGJhNjFlMDAwMDAwMDAsCisgICAgMHhhNGJkNGIyYjAwMDAwMDAwLCAweGFhMmRjMDhlMDAwMDAwMDAsIDB4MDJkMTkwNDAwMDAwMDAwMCwKKyAgICAweDBjNDExYmU1MDAwMDAwMDAsIDB4NWZmN2Y2ZDAwMDAwMDAwMCwgMHg1MTY3N2Q3NTAwMDAwMDAwLAorICAgIDB4NGUwODI2OTcwMDAwMDAwMCwgMHg0MDk4YWQzMjAwMDAwMDAwLCAweDEzMmU0MDA3MDAwMDAwMDAsCisgICAgMHgxZGJlY2JhMjAwMDAwMDAwLCAweGI1NDI5YjZjMDAwMDAwMDAsIDB4YmJkMjEwYzkwMDAwMDAwMCwKKyAgICAweGU4NjRmZGZjMDAwMDAwMDAsIDB4ZTZmNDc2NTkwMDAwMDAwMCwgMHg5N2JjM2FlMzAwMDAwMDAwLAorICAgIDB4OTkyY2IxNDYwMDAwMDAwMCwgMHhjYTlhNWM3MzAwMDAwMDAwLCAweGM0MGFkN2Q2MDAwMDAwMDAsCisgICAgMHg2Y2Y2ODcxODAwMDAwMDAwLCAweDYyNjYwY2JkMDAwMDAwMDAsIDB4MzFkMGUxODgwMDAwMDAwMCwKKyAgICAweDNmNDA2YTJkMDAwMDAwMDAsIDB4MjAyZjMxY2YwMDAwMDAwMCwgMHgyZWJmYmE2YTAwMDAwMDAwLAorICAgIDB4N2QwOTU3NWYwMDAwMDAwMCwgMHg3Mzk5ZGNmYTAwMDAwMDAwLCAweGRiNjU4YzM0MDAwMDAwMDAsCisgICAgMHhkNWY1MDc5MTAwMDAwMDAwLCAweDg2NDNlYWE0MDAwMDAwMDAsIDB4ODhkMzYxMDEwMDAwMDAwMCwKKyAgICAweDI1ZDUwMzBiMDAwMDAwMDAsIDB4MmI0NTg4YWUwMDAwMDAwMCwgMHg3OGYzNjU5YjAwMDAwMDAwLAorICAgIDB4NzY2M2VlM2UwMDAwMDAwMCwgMHhkZTlmYmVmMDAwMDAwMDAwLCAweGQwMGYzNTU1MDAwMDAwMDAsCisgICAgMHg4M2I5ZDg2MDAwMDAwMDAwLCAweDhkMjk1M2M1MDAwMDAwMDAsIDB4OTI0NjA4MjcwMDAwMDAwMCwKKyAgICAweDljZDY4MzgyMDAwMDAwMDAsIDB4Y2Y2MDZlYjcwMDAwMDAwMCwgMHhjMWYwZTUxMjAwMDAwMDAwLAorICAgIDB4NjkwY2I1ZGMwMDAwMDAwMCwgMHg2NzljM2U3OTAwMDAwMDAwLCAweDM0MmFkMzRjMDAwMDAwMDAsCisgICAgMHgzYWJhNThlOTAwMDAwMDAwLCAweDRiZjIxNDUzMDAwMDAwMDAsIDB4NDU2MjlmZjYwMDAwMDAwMCwKKyAgICAweDE2ZDQ3MmMzMDAwMDAwMDAsIDB4MTg0NGY5NjYwMDAwMDAwMCwgMHhiMGI4YTlhODAwMDAwMDAwLAorICAgIDB4YmUyODIyMGQwMDAwMDAwMCwgMHhlZDllY2YzODAwMDAwMDAwLCAweGUzMGU0NDlkMDAwMDAwMDAsCisgICAgMHhmYzYxMWY3ZjAwMDAwMDAwLCAweGYyZjE5NGRhMDAwMDAwMDAsIDB4YTE0Nzc5ZWYwMDAwMDAwMCwKKyAgICAweGFmZDdmMjRhMDAwMDAwMDAsIDB4MDcyYmEyODQwMDAwMDAwMCwgMHgwOWJiMjkyMTAwMDAwMDAwLAorICAgIDB4NWEwZGM0MTQwMDAwMDAwMCwgMHg1NDlkNGZiMTAwMDAwMDAwLCAweGIzMzEyYWFkMDAwMDAwMDAsCisgICAgMHhiZGExYTEwODAwMDAwMDAwLCAweGVlMTc0YzNkMDAwMDAwMDAsIDB4ZTA4N2M3OTgwMDAwMDAwMCwKKyAgICAweDQ4N2I5NzU2MDAwMDAwMDAsIDB4NDZlYjFjZjMwMDAwMDAwMCwgMHgxNTVkZjFjNjAwMDAwMDAwLAorICAgIDB4MWJjZDdhNjMwMDAwMDAwMCwgMHgwNGEyMjE4MTAwMDAwMDAwLCAweDBhMzJhYTI0MDAwMDAwMDAsCisgICAgMHg1OTg0NDcxMTAwMDAwMDAwLCAweDU3MTRjY2I0MDAwMDAwMDAsIDB4ZmZlODljN2EwMDAwMDAwMCwKKyAgICAweGYxNzgxN2RmMDAwMDAwMDAsIDB4YTJjZWZhZWEwMDAwMDAwMCwgMHhhYzVlNzE0ZjAwMDAwMDAwLAorICAgIDB4ZGQxNjNkZjUwMDAwMDAwMCwgMHhkMzg2YjY1MDAwMDAwMDAwLCAweDgwMzA1YjY1MDAwMDAwMDAsCisgICAgMHg4ZWEwZDBjMDAwMDAwMDAwLCAweDI2NWM4MDBlMDAwMDAwMDAsIDB4MjhjYzBiYWIwMDAwMDAwMCwKKyAgICAweDdiN2FlNjllMDAwMDAwMDAsIDB4NzVlYTZkM2IwMDAwMDAwMCwgMHg2YTg1MzZkOTAwMDAwMDAwLAorICAgIDB4NjQxNWJkN2MwMDAwMDAwMCwgMHgzN2EzNTA0OTAwMDAwMDAwLCAweDM5MzNkYmVjMDAwMDAwMDAsCisgICAgMHg5MWNmOGIyMjAwMDAwMDAwLCAweDlmNWYwMDg3MDAwMDAwMDAsIDB4Y2NlOWVkYjIwMDAwMDAwMCwKKyAgICAweGMyNzk2NjE3MDAwMDAwMDAsIDB4NmY3ZjA0MWQwMDAwMDAwMCwgMHg2MWVmOGZiODAwMDAwMDAwLAorICAgIDB4MzI1OTYyOGQwMDAwMDAwMCwgMHgzY2M5ZTkyODAwMDAwMDAwLCAweDk0MzViOWU2MDAwMDAwMDAsCisgICAgMHg5YWE1MzI0MzAwMDAwMDAwLCAweGM5MTNkZjc2MDAwMDAwMDAsIDB4Yzc4MzU0ZDMwMDAwMDAwMCwKKyAgICAweGQ4ZWMwZjMxMDAwMDAwMDAsIDB4ZDY3Yzg0OTQwMDAwMDAwMCwgMHg4NWNhNjlhMTAwMDAwMDAwLAorICAgIDB4OGI1YWUyMDQwMDAwMDAwMCwgMHgyM2E2YjJjYTAwMDAwMDAwLCAweDJkMzYzOTZmMDAwMDAwMDAsCisgICAgMHg3ZTgwZDQ1YTAwMDAwMDAwLCAweDcwMTA1ZmZmMDAwMDAwMDAsIDB4MDE1ODEzNDUwMDAwMDAwMCwKKyAgICAweDBmYzg5OGUwMDAwMDAwMDAsIDB4NWM3ZTc1ZDUwMDAwMDAwMCwgMHg1MmVlZmU3MDAwMDAwMDAwLAorICAgIDB4ZmExMmFlYmUwMDAwMDAwMCwgMHhmNDgyMjUxYjAwMDAwMDAwLCAweGE3MzRjODJlMDAwMDAwMDAsCisgICAgMHhhOWE0NDM4YjAwMDAwMDAwLCAweGI2Y2IxODY5MDAwMDAwMDAsIDB4Yjg1YjkzY2MwMDAwMDAwMCwKKyAgICAweGViZWQ3ZWY5MDAwMDAwMDAsIDB4ZTU3ZGY1NWMwMDAwMDAwMCwgMHg0ZDgxYTU5MjAwMDAwMDAwLAorICAgIDB4NDMxMTJlMzcwMDAwMDAwMCwgMHgxMGE3YzMwMjAwMDAwMDAwLCAweDFlMzc0OGE3MDAwMDAwMDAsCisgICAgMHg0YWFhMDcxNjAwMDAwMDAwLCAweDQ0M2E4Y2IzMDAwMDAwMDAsIDB4MTc4YzYxODYwMDAwMDAwMCwKKyAgICAweDE5MWNlYTIzMDAwMDAwMDAsIDB4YjFlMGJhZWQwMDAwMDAwMCwgMHhiZjcwMzE0ODAwMDAwMDAwLAorICAgIDB4ZWNjNmRjN2QwMDAwMDAwMCwgMHhlMjU2NTdkODAwMDAwMDAwLCAweGZkMzkwYzNhMDAwMDAwMDAsCisgICAgMHhmM2E5ODc5ZjAwMDAwMDAwLCAweGEwMWY2YWFhMDAwMDAwMDAsIDB4YWU4ZmUxMGYwMDAwMDAwMCwKKyAgICAweDA2NzNiMWMxMDAwMDAwMDAsIDB4MDhlMzNhNjQwMDAwMDAwMCwgMHg1YjU1ZDc1MTAwMDAwMDAwLAorICAgIDB4NTVjNTVjZjQwMDAwMDAwMCwgMHgyNDhkMTA0ZTAwMDAwMDAwLCAweDJhMWQ5YmViMDAwMDAwMDAsCisgICAgMHg3OWFiNzZkZTAwMDAwMDAwLCAweDc3M2JmZDdiMDAwMDAwMDAsIDB4ZGZjN2FkYjUwMDAwMDAwMCwKKyAgICAweGQxNTcyNjEwMDAwMDAwMDAsIDB4ODJlMWNiMjUwMDAwMDAwMCwgMHg4YzcxNDA4MDAwMDAwMDAwLAorICAgIDB4OTMxZTFiNjIwMDAwMDAwMCwgMHg5ZDhlOTBjNzAwMDAwMDAwLCAweGNlMzg3ZGYyMDAwMDAwMDAsCisgICAgMHhjMGE4ZjY1NzAwMDAwMDAwLCAweDY4NTRhNjk5MDAwMDAwMDAsIDB4NjZjNDJkM2MwMDAwMDAwMCwKKyAgICAweDM1NzJjMDA5MDAwMDAwMDAsIDB4M2JlMjRiYWMwMDAwMDAwMCwgMHg5NmU0MjlhNjAwMDAwMDAwLAorICAgIDB4OTg3NGEyMDMwMDAwMDAwMCwgMHhjYmMyNGYzNjAwMDAwMDAwLCAweGM1NTJjNDkzMDAwMDAwMDAsCisgICAgMHg2ZGFlOTQ1ZDAwMDAwMDAwLCAweDYzM2UxZmY4MDAwMDAwMDAsIDB4MzA4OGYyY2QwMDAwMDAwMCwKKyAgICAweDNlMTg3OTY4MDAwMDAwMDAsIDB4MjE3NzIyOGEwMDAwMDAwMCwgMHgyZmU3YTkyZjAwMDAwMDAwLAorICAgIDB4N2M1MTQ0MWEwMDAwMDAwMCwgMHg3MmMxY2ZiZjAwMDAwMDAwLCAweGRhM2Q5ZjcxMDAwMDAwMDAsCisgICAgMHhkNGFkMTRkNDAwMDAwMDAwLCAweDg3MWJmOWUxMDAwMDAwMDAsIDB4ODk4YjcyNDQwMDAwMDAwMCwKKyAgICAweGY4YzMzZWZlMDAwMDAwMDAsIDB4ZjY1M2I1NWIwMDAwMDAwMCwgMHhhNWU1NTg2ZTAwMDAwMDAwLAorICAgIDB4YWI3NWQzY2IwMDAwMDAwMCwgMHgwMzg5ODMwNTAwMDAwMDAwLCAweDBkMTkwOGEwMDAwMDAwMDAsCisgICAgMHg1ZWFmZTU5NTAwMDAwMDAwLCAweDUwM2Y2ZTMwMDAwMDAwMDAsIDB4NGY1MDM1ZDIwMDAwMDAwMCwKKyAgICAweDQxYzBiZTc3MDAwMDAwMDAsIDB4MTI3NjUzNDIwMDAwMDAwMCwgMHgxY2U2ZDhlNzAwMDAwMDAwLAorICAgIDB4YjQxYTg4MjkwMDAwMDAwMCwgMHhiYThhMDM4YzAwMDAwMDAwLCAweGU5M2NlZWI5MDAwMDAwMDAsCisgICAgMHhlN2FjNjUxYzAwMDAwMDAwfSwKKyAgIHsweDAwMDAwMDAwMDAwMDAwMDAsIDB4OTdhNjFkZTcwMDAwMDAwMCwgMHg2ZjRiNGExNTAwMDAwMDAwLAorICAgIDB4ZjhlZDU3ZjIwMDAwMDAwMCwgMHhkZTk2OTQyYTAwMDAwMDAwLCAweDQ5MzA4OWNkMDAwMDAwMDAsCisgICAgMHhiMWRkZGUzZjAwMDAwMDAwLCAweDI2N2JjM2Q4MDAwMDAwMDAsIDB4YmMyZDI5NTUwMDAwMDAwMCwKKyAgICAweDJiOGIzNGIyMDAwMDAwMDAsIDB4ZDM2NjYzNDAwMDAwMDAwMCwgMHg0NGMwN2VhNzAwMDAwMDAwLAorICAgIDB4NjJiYmJkN2YwMDAwMDAwMCwgMHhmNTFkYTA5ODAwMDAwMDAwLCAweDBkZjBmNzZhMDAwMDAwMDAsCisgICAgMHg5YTU2ZWE4ZDAwMDAwMDAwLCAweDc4NWI1MmFhMDAwMDAwMDAsIDB4ZWZmZDRmNGQwMDAwMDAwMCwKKyAgICAweDE3MTAxOGJmMDAwMDAwMDAsIDB4ODBiNjA1NTgwMDAwMDAwMCwgMHhhNmNkYzY4MDAwMDAwMDAwLAorICAgIDB4MzE2YmRiNjcwMDAwMDAwMCwgMHhjOTg2OGM5NTAwMDAwMDAwLCAweDVlMjA5MTcyMDAwMDAwMDAsCisgICAgMHhjNDc2N2JmZjAwMDAwMDAwLCAweDUzZDA2NjE4MDAwMDAwMDAsIDB4YWIzZDMxZWEwMDAwMDAwMCwKKyAgICAweDNjOWIyYzBkMDAwMDAwMDAsIDB4MWFlMGVmZDUwMDAwMDAwMCwgMHg4ZDQ2ZjIzMjAwMDAwMDAwLAorICAgIDB4NzVhYmE1YzAwMDAwMDAwMCwgMHhlMjBkYjgyNzAwMDAwMDAwLCAweGIxYjBkNThmMDAwMDAwMDAsCisgICAgMHgyNjE2Yzg2ODAwMDAwMDAwLCAweGRlZmI5ZjlhMDAwMDAwMDAsIDB4NDk1ZDgyN2QwMDAwMDAwMCwKKyAgICAweDZmMjY0MWE1MDAwMDAwMDAsIDB4Zjg4MDVjNDIwMDAwMDAwMCwgMHgwMDZkMGJiMDAwMDAwMDAwLAorICAgIDB4OTdjYjE2NTcwMDAwMDAwMCwgMHgwZDlkZmNkYTAwMDAwMDAwLCAweDlhM2JlMTNkMDAwMDAwMDAsCisgICAgMHg2MmQ2YjZjZjAwMDAwMDAwLCAweGY1NzBhYjI4MDAwMDAwMDAsIDB4ZDMwYjY4ZjAwMDAwMDAwMCwKKyAgICAweDQ0YWQ3NTE3MDAwMDAwMDAsIDB4YmM0MDIyZTUwMDAwMDAwMCwgMHgyYmU2M2YwMjAwMDAwMDAwLAorICAgIDB4YzllYjg3MjUwMDAwMDAwMCwgMHg1ZTRkOWFjMjAwMDAwMDAwLCAweGE2YTBjZDMwMDAwMDAwMDAsCisgICAgMHgzMTA2ZDBkNzAwMDAwMDAwLCAweDE3N2QxMzBmMDAwMDAwMDAsIDB4ODBkYjBlZTgwMDAwMDAwMCwKKyAgICAweDc4MzY1OTFhMDAwMDAwMDAsIDB4ZWY5MDQ0ZmQwMDAwMDAwMCwgMHg3NWM2YWU3MDAwMDAwMDAwLAorICAgIDB4ZTI2MGIzOTcwMDAwMDAwMCwgMHgxYThkZTQ2NTAwMDAwMDAwLCAweDhkMmJmOTgyMDAwMDAwMDAsCisgICAgMHhhYjUwM2E1YTAwMDAwMDAwLCAweDNjZjYyN2JkMDAwMDAwMDAsIDB4YzQxYjcwNGYwMDAwMDAwMCwKKyAgICAweDUzYmQ2ZGE4MDAwMDAwMDAsIDB4MjM2N2RhYzQwMDAwMDAwMCwgMHhiNGMxYzcyMzAwMDAwMDAwLAorICAgIDB4NGMyYzkwZDEwMDAwMDAwMCwgMHhkYjhhOGQzNjAwMDAwMDAwLCAweGZkZjE0ZWVlMDAwMDAwMDAsCisgICAgMHg2YTU3NTMwOTAwMDAwMDAwLCAweDkyYmEwNGZiMDAwMDAwMDAsIDB4MDUxYzE5MWMwMDAwMDAwMCwKKyAgICAweDlmNGFmMzkxMDAwMDAwMDAsIDB4MDhlY2VlNzYwMDAwMDAwMCwgMHhmMDAxYjk4NDAwMDAwMDAwLAorICAgIDB4NjdhN2E0NjMwMDAwMDAwMCwgMHg0MWRjNjdiYjAwMDAwMDAwLCAweGQ2N2E3YTVjMDAwMDAwMDAsCisgICAgMHgyZTk3MmRhZTAwMDAwMDAwLCAweGI5MzEzMDQ5MDAwMDAwMDAsIDB4NWIzYzg4NmUwMDAwMDAwMCwKKyAgICAweGNjOWE5NTg5MDAwMDAwMDAsIDB4MzQ3N2MyN2IwMDAwMDAwMCwgMHhhM2QxZGY5YzAwMDAwMDAwLAorICAgIDB4ODVhYTFjNDQwMDAwMDAwMCwgMHgxMjBjMDFhMzAwMDAwMDAwLCAweGVhZTE1NjUxMDAwMDAwMDAsCisgICAgMHg3ZDQ3NGJiNjAwMDAwMDAwLCAweGU3MTFhMTNiMDAwMDAwMDAsIDB4NzBiN2JjZGMwMDAwMDAwMCwKKyAgICAweDg4NWFlYjJlMDAwMDAwMDAsIDB4MWZmY2Y2YzkwMDAwMDAwMCwgMHgzOTg3MzUxMTAwMDAwMDAwLAorICAgIDB4YWUyMTI4ZjYwMDAwMDAwMCwgMHg1NmNjN2YwNDAwMDAwMDAwLCAweGMxNmE2MmUzMDAwMDAwMDAsCisgICAgMHg5MmQ3MGY0YjAwMDAwMDAwLCAweDA1NzExMmFjMDAwMDAwMDAsIDB4ZmQ5YzQ1NWUwMDAwMDAwMCwKKyAgICAweDZhM2E1OGI5MDAwMDAwMDAsIDB4NGM0MTliNjEwMDAwMDAwMCwgMHhkYmU3ODY4NjAwMDAwMDAwLAorICAgIDB4MjMwYWQxNzQwMDAwMDAwMCwgMHhiNGFjY2M5MzAwMDAwMDAwLCAweDJlZmEyNjFlMDAwMDAwMDAsCisgICAgMHhiOTVjM2JmOTAwMDAwMDAwLCAweDQxYjE2YzBiMDAwMDAwMDAsIDB4ZDYxNzcxZWMwMDAwMDAwMCwKKyAgICAweGYwNmNiMjM0MDAwMDAwMDAsIDB4NjdjYWFmZDMwMDAwMDAwMCwgMHg5ZjI3ZjgyMTAwMDAwMDAwLAorICAgIDB4MDg4MWU1YzYwMDAwMDAwMCwgMHhlYThjNWRlMTAwMDAwMDAwLCAweDdkMmE0MDA2MDAwMDAwMDAsCisgICAgMHg4NWM3MTdmNDAwMDAwMDAwLCAweDEyNjEwYTEzMDAwMDAwMDAsIDB4MzQxYWM5Y2IwMDAwMDAwMCwKKyAgICAweGEzYmNkNDJjMDAwMDAwMDAsIDB4NWI1MTgzZGUwMDAwMDAwMCwgMHhjY2Y3OWUzOTAwMDAwMDAwLAorICAgIDB4NTZhMTc0YjQwMDAwMDAwMCwgMHhjMTA3Njk1MzAwMDAwMDAwLCAweDM5ZWEzZWExMDAwMDAwMDAsCisgICAgMHhhZTRjMjM0NjAwMDAwMDAwLCAweDg4MzdlMDllMDAwMDAwMDAsIDB4MWY5MWZkNzkwMDAwMDAwMCwKKyAgICAweGU3N2NhYThiMDAwMDAwMDAsIDB4NzBkYWI3NmMwMDAwMDAwMCwgMHgwN2M4YzU1MjAwMDAwMDAwLAorICAgIDB4OTA2ZWQ4YjUwMDAwMDAwMCwgMHg2ODgzOGY0NzAwMDAwMDAwLCAweGZmMjU5MmEwMDAwMDAwMDAsCisgICAgMHhkOTVlNTE3ODAwMDAwMDAwLCAweDRlZjg0YzlmMDAwMDAwMDAsIDB4YjYxNTFiNmQwMDAwMDAwMCwKKyAgICAweDIxYjMwNjhhMDAwMDAwMDAsIDB4YmJlNWVjMDcwMDAwMDAwMCwgMHgyYzQzZjFlMDAwMDAwMDAwLAorICAgIDB4ZDRhZWE2MTIwMDAwMDAwMCwgMHg0MzA4YmJmNTAwMDAwMDAwLCAweDY1NzM3ODJkMDAwMDAwMDAsCisgICAgMHhmMmQ1NjVjYTAwMDAwMDAwLCAweDBhMzgzMjM4MDAwMDAwMDAsIDB4OWQ5ZTJmZGYwMDAwMDAwMCwKKyAgICAweDdmOTM5N2Y4MDAwMDAwMDAsIDB4ZTgzNThhMWYwMDAwMDAwMCwgMHgxMGQ4ZGRlZDAwMDAwMDAwLAorICAgIDB4ODc3ZWMwMGEwMDAwMDAwMCwgMHhhMTA1MDNkMjAwMDAwMDAwLCAweDM2YTMxZTM1MDAwMDAwMDAsCisgICAgMHhjZTRlNDljNzAwMDAwMDAwLCAweDU5ZTg1NDIwMDAwMDAwMDAsIDB4YzNiZWJlYWQwMDAwMDAwMCwKKyAgICAweDU0MThhMzRhMDAwMDAwMDAsIDB4YWNmNWY0YjgwMDAwMDAwMCwgMHgzYjUzZTk1ZjAwMDAwMDAwLAorICAgIDB4MWQyODJhODcwMDAwMDAwMCwgMHg4YThlMzc2MDAwMDAwMDAwLCAweDcyNjM2MDkyMDAwMDAwMDAsCisgICAgMHhlNWM1N2Q3NTAwMDAwMDAwLCAweGI2NzgxMGRkMDAwMDAwMDAsIDB4MjFkZTBkM2EwMDAwMDAwMCwKKyAgICAweGQ5MzM1YWM4MDAwMDAwMDAsIDB4NGU5NTQ3MmYwMDAwMDAwMCwgMHg2OGVlODRmNzAwMDAwMDAwLAorICAgIDB4ZmY0ODk5MTAwMDAwMDAwMCwgMHgwN2E1Y2VlMjAwMDAwMDAwLCAweDkwMDNkMzA1MDAwMDAwMDAsCisgICAgMHgwYTU1Mzk4ODAwMDAwMDAwLCAweDlkZjMyNDZmMDAwMDAwMDAsIDB4NjUxZTczOWQwMDAwMDAwMCwKKyAgICAweGYyYjg2ZTdhMDAwMDAwMDAsIDB4ZDRjM2FkYTIwMDAwMDAwMCwgMHg0MzY1YjA0NTAwMDAwMDAwLAorICAgIDB4YmI4OGU3YjcwMDAwMDAwMCwgMHgyYzJlZmE1MDAwMDAwMDAwLCAweGNlMjM0Mjc3MDAwMDAwMDAsCisgICAgMHg1OTg1NWY5MDAwMDAwMDAwLCAweGExNjgwODYyMDAwMDAwMDAsIDB4MzZjZTE1ODUwMDAwMDAwMCwKKyAgICAweDEwYjVkNjVkMDAwMDAwMDAsIDB4ODcxM2NiYmEwMDAwMDAwMCwgMHg3ZmZlOWM0ODAwMDAwMDAwLAorICAgIDB4ZTg1ODgxYWYwMDAwMDAwMCwgMHg3MjBlNmIyMjAwMDAwMDAwLCAweGU1YTg3NmM1MDAwMDAwMDAsCisgICAgMHgxZDQ1MjEzNzAwMDAwMDAwLCAweDhhZTMzY2QwMDAwMDAwMDAsIDB4YWM5OGZmMDgwMDAwMDAwMCwKKyAgICAweDNiM2VlMmVmMDAwMDAwMDAsIDB4YzNkM2I1MWQwMDAwMDAwMCwgMHg1NDc1YThmYTAwMDAwMDAwLAorICAgIDB4MjRhZjFmOTYwMDAwMDAwMCwgMHhiMzA5MDI3MTAwMDAwMDAwLCAweDRiZTQ1NTgzMDAwMDAwMDAsCisgICAgMHhkYzQyNDg2NDAwMDAwMDAwLCAweGZhMzk4YmJjMDAwMDAwMDAsIDB4NmQ5Zjk2NWIwMDAwMDAwMCwKKyAgICAweDk1NzJjMWE5MDAwMDAwMDAsIDB4MDJkNGRjNGUwMDAwMDAwMCwgMHg5ODgyMzZjMzAwMDAwMDAwLAorICAgIDB4MGYyNDJiMjQwMDAwMDAwMCwgMHhmN2M5N2NkNjAwMDAwMDAwLCAweDYwNmY2MTMxMDAwMDAwMDAsCisgICAgMHg0NjE0YTJlOTAwMDAwMDAwLCAweGQxYjJiZjBlMDAwMDAwMDAsIDB4Mjk1ZmU4ZmMwMDAwMDAwMCwKKyAgICAweGJlZjlmNTFiMDAwMDAwMDAsIDB4NWNmNDRkM2MwMDAwMDAwMCwgMHhjYjUyNTBkYjAwMDAwMDAwLAorICAgIDB4MzNiZjA3MjkwMDAwMDAwMCwgMHhhNDE5MWFjZTAwMDAwMDAwLCAweDgyNjJkOTE2MDAwMDAwMDAsCisgICAgMHgxNWM0YzRmMTAwMDAwMDAwLCAweGVkMjk5MzAzMDAwMDAwMDAsIDB4N2E4ZjhlZTQwMDAwMDAwMCwKKyAgICAweGUwZDk2NDY5MDAwMDAwMDAsIDB4Nzc3Zjc5OGUwMDAwMDAwMCwgMHg4ZjkyMmU3YzAwMDAwMDAwLAorICAgIDB4MTgzNDMzOWIwMDAwMDAwMCwgMHgzZTRmZjA0MzAwMDAwMDAwLCAweGE5ZTllZGE0MDAwMDAwMDAsCisgICAgMHg1MTA0YmE1NjAwMDAwMDAwLCAweGM2YTJhN2IxMDAwMDAwMDAsIDB4OTUxZmNhMTkwMDAwMDAwMCwKKyAgICAweDAyYjlkN2ZlMDAwMDAwMDAsIDB4ZmE1NDgwMGMwMDAwMDAwMCwgMHg2ZGYyOWRlYjAwMDAwMDAwLAorICAgIDB4NGI4OTVlMzMwMDAwMDAwMCwgMHhkYzJmNDNkNDAwMDAwMDAwLCAweDI0YzIxNDI2MDAwMDAwMDAsCisgICAgMHhiMzY0MDljMTAwMDAwMDAwLCAweDI5MzJlMzRjMDAwMDAwMDAsIDB4YmU5NGZlYWIwMDAwMDAwMCwKKyAgICAweDQ2NzlhOTU5MDAwMDAwMDAsIDB4ZDFkZmI0YmUwMDAwMDAwMCwgMHhmN2E0Nzc2NjAwMDAwMDAwLAorICAgIDB4NjAwMjZhODEwMDAwMDAwMCwgMHg5OGVmM2Q3MzAwMDAwMDAwLCAweDBmNDkyMDk0MDAwMDAwMDAsCisgICAgMHhlZDQ0OThiMzAwMDAwMDAwLCAweDdhZTI4NTU0MDAwMDAwMDAsIDB4ODIwZmQyYTYwMDAwMDAwMCwKKyAgICAweDE1YTljZjQxMDAwMDAwMDAsIDB4MzNkMjBjOTkwMDAwMDAwMCwgMHhhNDc0MTE3ZTAwMDAwMDAwLAorICAgIDB4NWM5OTQ2OGMwMDAwMDAwMCwgMHhjYjNmNWI2YjAwMDAwMDAwLCAweDUxNjliMWU2MDAwMDAwMDAsCisgICAgMHhjNmNmYWMwMTAwMDAwMDAwLCAweDNlMjJmYmYzMDAwMDAwMDAsIDB4YTk4NGU2MTQwMDAwMDAwMCwKKyAgICAweDhmZmYyNWNjMDAwMDAwMDAsIDB4MTg1OTM4MmIwMDAwMDAwMCwgMHhlMGI0NmZkOTAwMDAwMDAwLAorICAgIDB4NzcxMjcyM2UwMDAwMDAwMH0sCisgICB7MHgwMDAwMDAwMDAwMDAwMDAwLCAweDQxMWI4YzZlMDAwMDAwMDAsIDB4ODIzNjE4ZGQwMDAwMDAwMCwKKyAgICAweGMzMmQ5NGIzMDAwMDAwMDAsIDB4NDU2YjQxNjEwMDAwMDAwMCwgMHgwNDcwY2QwZjAwMDAwMDAwLAorICAgIDB4Yzc1ZDU5YmMwMDAwMDAwMCwgMHg4NjQ2ZDVkMjAwMDAwMDAwLCAweDhhZDY4MmMyMDAwMDAwMDAsCisgICAgMHhjYmNkMGVhYzAwMDAwMDAwLCAweDA4ZTA5YTFmMDAwMDAwMDAsIDB4NDlmYjE2NzEwMDAwMDAwMCwKKyAgICAweGNmYmRjM2EzMDAwMDAwMDAsIDB4OGVhNjRmY2QwMDAwMDAwMCwgMHg0ZDhiZGI3ZTAwMDAwMDAwLAorICAgIDB4MGM5MDU3MTAwMDAwMDAwMCwgMHg1NWFiNzQ1ZTAwMDAwMDAwLCAweDE0YjBmODMwMDAwMDAwMDAsCisgICAgMHhkNzlkNmM4MzAwMDAwMDAwLCAweDk2ODZlMGVkMDAwMDAwMDAsIDB4MTBjMDM1M2YwMDAwMDAwMCwKKyAgICAweDUxZGJiOTUxMDAwMDAwMDAsIDB4OTJmNjJkZTIwMDAwMDAwMCwgMHhkM2VkYTE4YzAwMDAwMDAwLAorICAgIDB4ZGY3ZGY2OWMwMDAwMDAwMCwgMHg5ZTY2N2FmMjAwMDAwMDAwLCAweDVkNGJlZTQxMDAwMDAwMDAsCisgICAgMHgxYzUwNjIyZjAwMDAwMDAwLCAweDlhMTZiN2ZkMDAwMDAwMDAsIDB4ZGIwZDNiOTMwMDAwMDAwMCwKKyAgICAweDE4MjBhZjIwMDAwMDAwMDAsIDB4NTkzYjIzNGUwMDAwMDAwMCwgMHhhYTU2ZTliYzAwMDAwMDAwLAorICAgIDB4ZWI0ZDY1ZDIwMDAwMDAwMCwgMHgyODYwZjE2MTAwMDAwMDAwLCAweDY5N2I3ZDBmMDAwMDAwMDAsCisgICAgMHhlZjNkYThkZDAwMDAwMDAwLCAweGFlMjYyNGIzMDAwMDAwMDAsIDB4NmQwYmIwMDAwMDAwMDAwMCwKKyAgICAweDJjMTAzYzZlMDAwMDAwMDAsIDB4MjA4MDZiN2UwMDAwMDAwMCwgMHg2MTliZTcxMDAwMDAwMDAwLAorICAgIDB4YTJiNjczYTMwMDAwMDAwMCwgMHhlM2FkZmZjZDAwMDAwMDAwLCAweDY1ZWIyYTFmMDAwMDAwMDAsCisgICAgMHgyNGYwYTY3MTAwMDAwMDAwLCAweGU3ZGQzMmMyMDAwMDAwMDAsIDB4YTZjNmJlYWMwMDAwMDAwMCwKKyAgICAweGZmZmQ5ZGUyMDAwMDAwMDAsIDB4YmVlNjExOGMwMDAwMDAwMCwgMHg3ZGNiODUzZjAwMDAwMDAwLAorICAgIDB4M2NkMDA5NTEwMDAwMDAwMCwgMHhiYTk2ZGM4MzAwMDAwMDAwLCAweGZiOGQ1MGVkMDAwMDAwMDAsCisgICAgMHgzOGEwYzQ1ZTAwMDAwMDAwLCAweDc5YmI0ODMwMDAwMDAwMDAsIDB4NzUyYjFmMjAwMDAwMDAwMCwKKyAgICAweDM0MzA5MzRlMDAwMDAwMDAsIDB4ZjcxZDA3ZmQwMDAwMDAwMCwgMHhiNjA2OGI5MzAwMDAwMDAwLAorICAgIDB4MzA0MDVlNDEwMDAwMDAwMCwgMHg3MTViZDIyZjAwMDAwMDAwLCAweGIyNzY0NjljMDAwMDAwMDAsCisgICAgMHhmMzZkY2FmMjAwMDAwMDAwLCAweDE1YWJhM2EyMDAwMDAwMDAsIDB4NTRiMDJmY2MwMDAwMDAwMCwKKyAgICAweDk3OWRiYjdmMDAwMDAwMDAsIDB4ZDY4NjM3MTEwMDAwMDAwMCwgMHg1MGMwZTJjMzAwMDAwMDAwLAorICAgIDB4MTFkYjZlYWQwMDAwMDAwMCwgMHhkMmY2ZmExZTAwMDAwMDAwLCAweDkzZWQ3NjcwMDAwMDAwMDAsCisgICAgMHg5ZjdkMjE2MDAwMDAwMDAwLCAweGRlNjZhZDBlMDAwMDAwMDAsIDB4MWQ0YjM5YmQwMDAwMDAwMCwKKyAgICAweDVjNTBiNWQzMDAwMDAwMDAsIDB4ZGExNjYwMDEwMDAwMDAwMCwgMHg5YjBkZWM2ZjAwMDAwMDAwLAorICAgIDB4NTgyMDc4ZGMwMDAwMDAwMCwgMHgxOTNiZjRiMjAwMDAwMDAwLCAweDQwMDBkN2ZjMDAwMDAwMDAsCisgICAgMHgwMTFiNWI5MjAwMDAwMDAwLCAweGMyMzZjZjIxMDAwMDAwMDAsIDB4ODMyZDQzNGYwMDAwMDAwMCwKKyAgICAweDA1NmI5NjlkMDAwMDAwMDAsIDB4NDQ3MDFhZjMwMDAwMDAwMCwgMHg4NzVkOGU0MDAwMDAwMDAwLAorICAgIDB4YzY0NjAyMmUwMDAwMDAwMCwgMHhjYWQ2NTUzZTAwMDAwMDAwLCAweDhiY2RkOTUwMDAwMDAwMDAsCisgICAgMHg0OGUwNGRlMzAwMDAwMDAwLCAweDA5ZmJjMThkMDAwMDAwMDAsIDB4OGZiZDE0NWYwMDAwMDAwMCwKKyAgICAweGNlYTY5ODMxMDAwMDAwMDAsIDB4MGQ4YjBjODIwMDAwMDAwMCwgMHg0YzkwODBlYzAwMDAwMDAwLAorICAgIDB4YmZmZDRhMWUwMDAwMDAwMCwgMHhmZWU2YzY3MDAwMDAwMDAwLCAweDNkY2I1MmMzMDAwMDAwMDAsCisgICAgMHg3Y2QwZGVhZDAwMDAwMDAwLCAweGZhOTYwYjdmMDAwMDAwMDAsIDB4YmI4ZDg3MTEwMDAwMDAwMCwKKyAgICAweDc4YTAxM2EyMDAwMDAwMDAsIDB4MzliYjlmY2MwMDAwMDAwMCwgMHgzNTJiYzhkYzAwMDAwMDAwLAorICAgIDB4NzQzMDQ0YjIwMDAwMDAwMCwgMHhiNzFkZDAwMTAwMDAwMDAwLCAweGY2MDY1YzZmMDAwMDAwMDAsCisgICAgMHg3MDQwODliZDAwMDAwMDAwLCAweDMxNWIwNWQzMDAwMDAwMDAsIDB4ZjI3NjkxNjAwMDAwMDAwMCwKKyAgICAweGIzNmQxZDBlMDAwMDAwMDAsIDB4ZWE1NjNlNDAwMDAwMDAwMCwgMHhhYjRkYjIyZTAwMDAwMDAwLAorICAgIDB4Njg2MDI2OWQwMDAwMDAwMCwgMHgyOTdiYWFmMzAwMDAwMDAwLCAweGFmM2Q3ZjIxMDAwMDAwMDAsCisgICAgMHhlZTI2ZjM0ZjAwMDAwMDAwLCAweDJkMGI2N2ZjMDAwMDAwMDAsIDB4NmMxMGViOTIwMDAwMDAwMCwKKyAgICAweDYwODBiYzgyMDAwMDAwMDAsIDB4MjE5YjMwZWMwMDAwMDAwMCwgMHhlMmI2YTQ1ZjAwMDAwMDAwLAorICAgIDB4YTNhZDI4MzEwMDAwMDAwMCwgMHgyNWViZmRlMzAwMDAwMDAwLCAweDY0ZjA3MThkMDAwMDAwMDAsCisgICAgMHhhN2RkZTUzZTAwMDAwMDAwLCAweGU2YzY2OTUwMDAwMDAwMDAsIDB4NmI1MDM2OWUwMDAwMDAwMCwKKyAgICAweDJhNGJiYWYwMDAwMDAwMDAsIDB4ZTk2NjJlNDMwMDAwMDAwMCwgMHhhODdkYTIyZDAwMDAwMDAwLAorICAgIDB4MmUzYjc3ZmYwMDAwMDAwMCwgMHg2ZjIwZmI5MTAwMDAwMDAwLCAweGFjMGQ2ZjIyMDAwMDAwMDAsCisgICAgMHhlZDE2ZTM0YzAwMDAwMDAwLCAweGUxODZiNDVjMDAwMDAwMDAsIDB4YTA5ZDM4MzIwMDAwMDAwMCwKKyAgICAweDYzYjBhYzgxMDAwMDAwMDAsIDB4MjJhYjIwZWYwMDAwMDAwMCwgMHhhNGVkZjUzZDAwMDAwMDAwLAorICAgIDB4ZTVmNjc5NTMwMDAwMDAwMCwgMHgyNmRiZWRlMDAwMDAwMDAwLCAweDY3YzA2MThlMDAwMDAwMDAsCisgICAgMHgzZWZiNDJjMDAwMDAwMDAwLCAweDdmZTBjZWFlMDAwMDAwMDAsIDB4YmNjZDVhMWQwMDAwMDAwMCwKKyAgICAweGZkZDZkNjczMDAwMDAwMDAsIDB4N2I5MDAzYTEwMDAwMDAwMCwgMHgzYThiOGZjZjAwMDAwMDAwLAorICAgIDB4ZjlhNjFiN2MwMDAwMDAwMCwgMHhiOGJkOTcxMjAwMDAwMDAwLCAweGI0MmRjMDAyMDAwMDAwMDAsCisgICAgMHhmNTM2NGM2YzAwMDAwMDAwLCAweDM2MWJkOGRmMDAwMDAwMDAsIDB4NzcwMDU0YjEwMDAwMDAwMCwKKyAgICAweGYxNDY4MTYzMDAwMDAwMDAsIDB4YjA1ZDBkMGQwMDAwMDAwMCwgMHg3MzcwOTliZTAwMDAwMDAwLAorICAgIDB4MzI2YjE1ZDAwMDAwMDAwMCwgMHhjMTA2ZGYyMjAwMDAwMDAwLCAweDgwMWQ1MzRjMDAwMDAwMDAsCisgICAgMHg0MzMwYzdmZjAwMDAwMDAwLCAweDAyMmI0YjkxMDAwMDAwMDAsIDB4ODQ2ZDllNDMwMDAwMDAwMCwKKyAgICAweGM1NzYxMjJkMDAwMDAwMDAsIDB4MDY1Yjg2OWUwMDAwMDAwMCwgMHg0NzQwMGFmMDAwMDAwMDAwLAorICAgIDB4NGJkMDVkZTAwMDAwMDAwMCwgMHgwYWNiZDE4ZTAwMDAwMDAwLCAweGM5ZTY0NTNkMDAwMDAwMDAsCisgICAgMHg4OGZkYzk1MzAwMDAwMDAwLCAweDBlYmIxYzgxMDAwMDAwMDAsIDB4NGZhMDkwZWYwMDAwMDAwMCwKKyAgICAweDhjOGQwNDVjMDAwMDAwMDAsIDB4Y2Q5Njg4MzIwMDAwMDAwMCwgMHg5NGFkYWI3YzAwMDAwMDAwLAorICAgIDB4ZDViNjI3MTIwMDAwMDAwMCwgMHgxNjliYjNhMTAwMDAwMDAwLCAweDU3ODAzZmNmMDAwMDAwMDAsCisgICAgMHhkMWM2ZWExZDAwMDAwMDAwLCAweDkwZGQ2NjczMDAwMDAwMDAsIDB4NTNmMGYyYzAwMDAwMDAwMCwKKyAgICAweDEyZWI3ZWFlMDAwMDAwMDAsIDB4MWU3YjI5YmUwMDAwMDAwMCwgMHg1ZjYwYTVkMDAwMDAwMDAwLAorICAgIDB4OWM0ZDMxNjMwMDAwMDAwMCwgMHhkZDU2YmQwZDAwMDAwMDAwLCAweDViMTA2OGRmMDAwMDAwMDAsCisgICAgMHgxYTBiZTRiMTAwMDAwMDAwLCAweGQ5MjY3MDAyMDAwMDAwMDAsIDB4OTgzZGZjNmMwMDAwMDAwMCwKKyAgICAweDdlZmI5NTNjMDAwMDAwMDAsIDB4M2ZlMDE5NTIwMDAwMDAwMCwgMHhmY2NkOGRlMTAwMDAwMDAwLAorICAgIDB4YmRkNjAxOGYwMDAwMDAwMCwgMHgzYjkwZDQ1ZDAwMDAwMDAwLCAweDdhOGI1ODMzMDAwMDAwMDAsCisgICAgMHhiOWE2Y2M4MDAwMDAwMDAwLCAweGY4YmQ0MGVlMDAwMDAwMDAsIDB4ZjQyZDE3ZmUwMDAwMDAwMCwKKyAgICAweGI1MzY5YjkwMDAwMDAwMDAsIDB4NzYxYjBmMjMwMDAwMDAwMCwgMHgzNzAwODM0ZDAwMDAwMDAwLAorICAgIDB4YjE0NjU2OWYwMDAwMDAwMCwgMHhmMDVkZGFmMTAwMDAwMDAwLCAweDMzNzA0ZTQyMDAwMDAwMDAsCisgICAgMHg3MjZiYzIyYzAwMDAwMDAwLCAweDJiNTBlMTYyMDAwMDAwMDAsIDB4NmE0YjZkMGMwMDAwMDAwMCwKKyAgICAweGE5NjZmOWJmMDAwMDAwMDAsIDB4ZTg3ZDc1ZDEwMDAwMDAwMCwgMHg2ZTNiYTAwMzAwMDAwMDAwLAorICAgIDB4MmYyMDJjNmQwMDAwMDAwMCwgMHhlYzBkYjhkZTAwMDAwMDAwLCAweGFkMTYzNGIwMDAwMDAwMDAsCisgICAgMHhhMTg2NjNhMDAwMDAwMDAwLCAweGUwOWRlZmNlMDAwMDAwMDAsIDB4MjNiMDdiN2QwMDAwMDAwMCwKKyAgICAweDYyYWJmNzEzMDAwMDAwMDAsIDB4ZTRlZDIyYzEwMDAwMDAwMCwgMHhhNWY2YWVhZjAwMDAwMDAwLAorICAgIDB4NjZkYjNhMWMwMDAwMDAwMCwgMHgyN2MwYjY3MjAwMDAwMDAwLCAweGQ0YWQ3YzgwMDAwMDAwMDAsCisgICAgMHg5NWI2ZjBlZTAwMDAwMDAwLCAweDU2OWI2NDVkMDAwMDAwMDAsIDB4MTc4MGU4MzMwMDAwMDAwMCwKKyAgICAweDkxYzYzZGUxMDAwMDAwMDAsIDB4ZDBkZGIxOGYwMDAwMDAwMCwgMHgxM2YwMjUzYzAwMDAwMDAwLAorICAgIDB4NTJlYmE5NTIwMDAwMDAwMCwgMHg1ZTdiZmU0MjAwMDAwMDAwLCAweDFmNjA3MjJjMDAwMDAwMDAsCisgICAgMHhkYzRkZTY5ZjAwMDAwMDAwLCAweDlkNTY2YWYxMDAwMDAwMDAsIDB4MWIxMGJmMjMwMDAwMDAwMCwKKyAgICAweDVhMGIzMzRkMDAwMDAwMDAsIDB4OTkyNmE3ZmUwMDAwMDAwMCwgMHhkODNkMmI5MDAwMDAwMDAwLAorICAgIDB4ODEwNjA4ZGUwMDAwMDAwMCwgMHhjMDFkODRiMDAwMDAwMDAwLCAweDAzMzAxMDAzMDAwMDAwMDAsCisgICAgMHg0MjJiOWM2ZDAwMDAwMDAwLCAweGM0NmQ0OWJmMDAwMDAwMDAsIDB4ODU3NmM1ZDEwMDAwMDAwMCwKKyAgICAweDQ2NWI1MTYyMDAwMDAwMDAsIDB4MDc0MGRkMGMwMDAwMDAwMCwgMHgwYmQwOGExYzAwMDAwMDAwLAorICAgIDB4NGFjYjA2NzIwMDAwMDAwMCwgMHg4OWU2OTJjMTAwMDAwMDAwLCAweGM4ZmQxZWFmMDAwMDAwMDAsCisgICAgMHg0ZWJiY2I3ZDAwMDAwMDAwLCAweDBmYTA0NzEzMDAwMDAwMDAsIDB4Y2M4ZGQzYTAwMDAwMDAwMCwKKyAgICAweDhkOTY1ZmNlMDAwMDAwMDB9LAorICAgezB4MDAwMDAwMDAwMDAwMDAwMCwgMHgxZGZkYjUwMTAwMDAwMDAwLCAweDNhZmE2YjAzMDAwMDAwMDAsCisgICAgMHgyNzA3ZGUwMjAwMDAwMDAwLCAweDc0ZjRkNzA2MDAwMDAwMDAsIDB4NjkwOTYyMDcwMDAwMDAwMCwKKyAgICAweDRlMGViYzA1MDAwMDAwMDAsIDB4NTNmMzA5MDQwMDAwMDAwMCwgMHhlOGU4YWYwZDAwMDAwMDAwLAorICAgIDB4ZjUxNTFhMGMwMDAwMDAwMCwgMHhkMjEyYzQwZTAwMDAwMDAwLCAweGNmZWY3MTBmMDAwMDAwMDAsCisgICAgMHg5YzFjNzgwYjAwMDAwMDAwLCAweDgxZTFjZDBhMDAwMDAwMDAsIDB4YTZlNjEzMDgwMDAwMDAwMCwKKyAgICAweGJiMWJhNjA5MDAwMDAwMDAsIDB4ZDBkMTVmMWIwMDAwMDAwMCwgMHhjZDJjZWExYTAwMDAwMDAwLAorICAgIDB4ZWEyYjM0MTgwMDAwMDAwMCwgMHhmN2Q2ODExOTAwMDAwMDAwLCAweGE0MjU4ODFkMDAwMDAwMDAsCisgICAgMHhiOWQ4M2QxYzAwMDAwMDAwLCAweDllZGZlMzFlMDAwMDAwMDAsIDB4ODMyMjU2MWYwMDAwMDAwMCwKKyAgICAweDM4MzlmMDE2MDAwMDAwMDAsIDB4MjVjNDQ1MTcwMDAwMDAwMCwgMHgwMmMzOWIxNTAwMDAwMDAwLAorICAgIDB4MWYzZTJlMTQwMDAwMDAwMCwgMHg0Y2NkMjcxMDAwMDAwMDAwLCAweDUxMzA5MjExMDAwMDAwMDAsCisgICAgMHg3NjM3NGMxMzAwMDAwMDAwLCAweDZiY2FmOTEyMDAwMDAwMDAsIDB4YTBhM2JmMzYwMDAwMDAwMCwKKyAgICAweGJkNWUwYTM3MDAwMDAwMDAsIDB4OWE1OWQ0MzUwMDAwMDAwMCwgMHg4N2E0NjEzNDAwMDAwMDAwLAorICAgIDB4ZDQ1NzY4MzAwMDAwMDAwMCwgMHhjOWFhZGQzMTAwMDAwMDAwLCAweGVlYWQwMzMzMDAwMDAwMDAsCisgICAgMHhmMzUwYjYzMjAwMDAwMDAwLCAweDQ4NGIxMDNiMDAwMDAwMDAsIDB4NTViNmE1M2EwMDAwMDAwMCwKKyAgICAweDcyYjE3YjM4MDAwMDAwMDAsIDB4NmY0Y2NlMzkwMDAwMDAwMCwgMHgzY2JmYzczZDAwMDAwMDAwLAorICAgIDB4MjE0MjcyM2MwMDAwMDAwMCwgMHgwNjQ1YWMzZTAwMDAwMDAwLCAweDFiYjgxOTNmMDAwMDAwMDAsCisgICAgMHg3MDcyZTAyZDAwMDAwMDAwLCAweDZkOGY1NTJjMDAwMDAwMDAsIDB4NGE4ODhiMmUwMDAwMDAwMCwKKyAgICAweDU3NzUzZTJmMDAwMDAwMDAsIDB4MDQ4NjM3MmIwMDAwMDAwMCwgMHgxOTdiODIyYTAwMDAwMDAwLAorICAgIDB4M2U3YzVjMjgwMDAwMDAwMCwgMHgyMzgxZTkyOTAwMDAwMDAwLCAweDk4OWE0ZjIwMDAwMDAwMDAsCisgICAgMHg4NTY3ZmEyMTAwMDAwMDAwLCAweGEyNjAyNDIzMDAwMDAwMDAsIDB4YmY5ZDkxMjIwMDAwMDAwMCwKKyAgICAweGVjNmU5ODI2MDAwMDAwMDAsIDB4ZjE5MzJkMjcwMDAwMDAwMCwgMHhkNjk0ZjMyNTAwMDAwMDAwLAorICAgIDB4Y2I2OTQ2MjQwMDAwMDAwMCwgMHg0MDQ3N2Y2ZDAwMDAwMDAwLCAweDVkYmFjYTZjMDAwMDAwMDAsCisgICAgMHg3YWJkMTQ2ZTAwMDAwMDAwLCAweDY3NDBhMTZmMDAwMDAwMDAsIDB4MzRiM2E4NmIwMDAwMDAwMCwKKyAgICAweDI5NGUxZDZhMDAwMDAwMDAsIDB4MGU0OWMzNjgwMDAwMDAwMCwgMHgxM2I0NzY2OTAwMDAwMDAwLAorICAgIDB4YThhZmQwNjAwMDAwMDAwMCwgMHhiNTUyNjU2MTAwMDAwMDAwLCAweDkyNTViYjYzMDAwMDAwMDAsCisgICAgMHg4ZmE4MGU2MjAwMDAwMDAwLCAweGRjNWIwNzY2MDAwMDAwMDAsIDB4YzFhNmIyNjcwMDAwMDAwMCwKKyAgICAweGU2YTE2YzY1MDAwMDAwMDAsIDB4ZmI1Y2Q5NjQwMDAwMDAwMCwgMHg5MDk2MjA3NjAwMDAwMDAwLAorICAgIDB4OGQ2Yjk1NzcwMDAwMDAwMCwgMHhhYTZjNGI3NTAwMDAwMDAwLCAweGI3OTFmZTc0MDAwMDAwMDAsCisgICAgMHhlNDYyZjc3MDAwMDAwMDAwLCAweGY5OWY0MjcxMDAwMDAwMDAsIDB4ZGU5ODljNzMwMDAwMDAwMCwKKyAgICAweGMzNjUyOTcyMDAwMDAwMDAsIDB4Nzg3ZThmN2IwMDAwMDAwMCwgMHg2NTgzM2E3YTAwMDAwMDAwLAorICAgIDB4NDI4NGU0NzgwMDAwMDAwMCwgMHg1Zjc5NTE3OTAwMDAwMDAwLCAweDBjOGE1ODdkMDAwMDAwMDAsCisgICAgMHgxMTc3ZWQ3YzAwMDAwMDAwLCAweDM2NzAzMzdlMDAwMDAwMDAsIDB4MmI4ZDg2N2YwMDAwMDAwMCwKKyAgICAweGUwZTRjMDViMDAwMDAwMDAsIDB4ZmQxOTc1NWEwMDAwMDAwMCwgMHhkYTFlYWI1ODAwMDAwMDAwLAorICAgIDB4YzdlMzFlNTkwMDAwMDAwMCwgMHg5NDEwMTc1ZDAwMDAwMDAwLCAweDg5ZWRhMjVjMDAwMDAwMDAsCisgICAgMHhhZWVhN2M1ZTAwMDAwMDAwLCAweGIzMTdjOTVmMDAwMDAwMDAsIDB4MDgwYzZmNTYwMDAwMDAwMCwKKyAgICAweDE1ZjFkYTU3MDAwMDAwMDAsIDB4MzJmNjA0NTUwMDAwMDAwMCwgMHgyZjBiYjE1NDAwMDAwMDAwLAorICAgIDB4N2NmOGI4NTAwMDAwMDAwMCwgMHg2MTA1MGQ1MTAwMDAwMDAwLCAweDQ2MDJkMzUzMDAwMDAwMDAsCisgICAgMHg1YmZmNjY1MjAwMDAwMDAwLCAweDMwMzU5ZjQwMDAwMDAwMDAsIDB4MmRjODJhNDEwMDAwMDAwMCwKKyAgICAweDBhY2ZmNDQzMDAwMDAwMDAsIDB4MTczMjQxNDIwMDAwMDAwMCwgMHg0NGMxNDg0NjAwMDAwMDAwLAorICAgIDB4NTkzY2ZkNDcwMDAwMDAwMCwgMHg3ZTNiMjM0NTAwMDAwMDAwLCAweDYzYzY5NjQ0MDAwMDAwMDAsCisgICAgMHhkOGRkMzA0ZDAwMDAwMDAwLCAweGM1MjA4NTRjMDAwMDAwMDAsIDB4ZTIyNzViNGUwMDAwMDAwMCwKKyAgICAweGZmZGFlZTRmMDAwMDAwMDAsIDB4YWMyOWU3NGIwMDAwMDAwMCwgMHhiMWQ0NTI0YTAwMDAwMDAwLAorICAgIDB4OTZkMzhjNDgwMDAwMDAwMCwgMHg4YjJlMzk0OTAwMDAwMDAwLCAweDgwOGVmZWRhMDAwMDAwMDAsCisgICAgMHg5ZDczNGJkYjAwMDAwMDAwLCAweGJhNzQ5NWQ5MDAwMDAwMDAsIDB4YTc4OTIwZDgwMDAwMDAwMCwKKyAgICAweGY0N2EyOWRjMDAwMDAwMDAsIDB4ZTk4NzljZGQwMDAwMDAwMCwgMHhjZTgwNDJkZjAwMDAwMDAwLAorICAgIDB4ZDM3ZGY3ZGUwMDAwMDAwMCwgMHg2ODY2NTFkNzAwMDAwMDAwLCAweDc1OWJlNGQ2MDAwMDAwMDAsCisgICAgMHg1MjljM2FkNDAwMDAwMDAwLCAweDRmNjE4ZmQ1MDAwMDAwMDAsIDB4MWM5Mjg2ZDEwMDAwMDAwMCwKKyAgICAweDAxNmYzM2QwMDAwMDAwMDAsIDB4MjY2OGVkZDIwMDAwMDAwMCwgMHgzYjk1NThkMzAwMDAwMDAwLAorICAgIDB4NTA1ZmExYzEwMDAwMDAwMCwgMHg0ZGEyMTRjMDAwMDAwMDAwLCAweDZhYTVjYWMyMDAwMDAwMDAsCisgICAgMHg3NzU4N2ZjMzAwMDAwMDAwLCAweDI0YWI3NmM3MDAwMDAwMDAsIDB4Mzk1NmMzYzYwMDAwMDAwMCwKKyAgICAweDFlNTExZGM0MDAwMDAwMDAsIDB4MDNhY2E4YzUwMDAwMDAwMCwgMHhiOGI3MGVjYzAwMDAwMDAwLAorICAgIDB4YTU0YWJiY2QwMDAwMDAwMCwgMHg4MjRkNjVjZjAwMDAwMDAwLCAweDlmYjBkMGNlMDAwMDAwMDAsCisgICAgMHhjYzQzZDljYTAwMDAwMDAwLCAweGQxYmU2Y2NiMDAwMDAwMDAsIDB4ZjZiOWIyYzkwMDAwMDAwMCwKKyAgICAweGViNDQwN2M4MDAwMDAwMDAsIDB4MjAyZDQxZWMwMDAwMDAwMCwgMHgzZGQwZjRlZDAwMDAwMDAwLAorICAgIDB4MWFkNzJhZWYwMDAwMDAwMCwgMHgwNzJhOWZlZTAwMDAwMDAwLCAweDU0ZDk5NmVhMDAwMDAwMDAsCisgICAgMHg0OTI0MjNlYjAwMDAwMDAwLCAweDZlMjNmZGU5MDAwMDAwMDAsIDB4NzNkZTQ4ZTgwMDAwMDAwMCwKKyAgICAweGM4YzVlZWUxMDAwMDAwMDAsIDB4ZDUzODViZTAwMDAwMDAwMCwgMHhmMjNmODVlMjAwMDAwMDAwLAorICAgIDB4ZWZjMjMwZTMwMDAwMDAwMCwgMHhiYzMxMzllNzAwMDAwMDAwLCAweGExY2M4Y2U2MDAwMDAwMDAsCisgICAgMHg4NmNiNTJlNDAwMDAwMDAwLCAweDliMzZlN2U1MDAwMDAwMDAsIDB4ZjBmYzFlZjcwMDAwMDAwMCwKKyAgICAweGVkMDFhYmY2MDAwMDAwMDAsIDB4Y2EwNjc1ZjQwMDAwMDAwMCwgMHhkN2ZiYzBmNTAwMDAwMDAwLAorICAgIDB4ODQwOGM5ZjEwMDAwMDAwMCwgMHg5OWY1N2NmMDAwMDAwMDAwLCAweGJlZjJhMmYyMDAwMDAwMDAsCisgICAgMHhhMzBmMTdmMzAwMDAwMDAwLCAweDE4MTRiMWZhMDAwMDAwMDAsIDB4MDVlOTA0ZmIwMDAwMDAwMCwKKyAgICAweDIyZWVkYWY5MDAwMDAwMDAsIDB4M2YxMzZmZjgwMDAwMDAwMCwgMHg2Y2UwNjZmYzAwMDAwMDAwLAorICAgIDB4NzExZGQzZmQwMDAwMDAwMCwgMHg1NjFhMGRmZjAwMDAwMDAwLCAweDRiZTdiOGZlMDAwMDAwMDAsCisgICAgMHhjMGM5ODFiNzAwMDAwMDAwLCAweGRkMzQzNGI2MDAwMDAwMDAsIDB4ZmEzM2VhYjQwMDAwMDAwMCwKKyAgICAweGU3Y2U1ZmI1MDAwMDAwMDAsIDB4YjQzZDU2YjEwMDAwMDAwMCwgMHhhOWMwZTNiMDAwMDAwMDAwLAorICAgIDB4OGVjNzNkYjIwMDAwMDAwMCwgMHg5MzNhODhiMzAwMDAwMDAwLCAweDI4MjEyZWJhMDAwMDAwMDAsCisgICAgMHgzNWRjOWJiYjAwMDAwMDAwLCAweDEyZGI0NWI5MDAwMDAwMDAsIDB4MGYyNmYwYjgwMDAwMDAwMCwKKyAgICAweDVjZDVmOWJjMDAwMDAwMDAsIDB4NDEyODRjYmQwMDAwMDAwMCwgMHg2NjJmOTJiZjAwMDAwMDAwLAorICAgIDB4N2JkMjI3YmUwMDAwMDAwMCwgMHgxMDE4ZGVhYzAwMDAwMDAwLCAweDBkZTU2YmFkMDAwMDAwMDAsCisgICAgMHgyYWUyYjVhZjAwMDAwMDAwLCAweDM3MWYwMGFlMDAwMDAwMDAsIDB4NjRlYzA5YWEwMDAwMDAwMCwKKyAgICAweDc5MTFiY2FiMDAwMDAwMDAsIDB4NWUxNjYyYTkwMDAwMDAwMCwgMHg0M2ViZDdhODAwMDAwMDAwLAorICAgIDB4ZjhmMDcxYTEwMDAwMDAwMCwgMHhlNTBkYzRhMDAwMDAwMDAwLCAweGMyMGExYWEyMDAwMDAwMDAsCisgICAgMHhkZmY3YWZhMzAwMDAwMDAwLCAweDhjMDRhNmE3MDAwMDAwMDAsIDB4OTFmOTEzYTYwMDAwMDAwMCwKKyAgICAweGI2ZmVjZGE0MDAwMDAwMDAsIDB4YWIwMzc4YTUwMDAwMDAwMCwgMHg2MDZhM2U4MTAwMDAwMDAwLAorICAgIDB4N2Q5NzhiODAwMDAwMDAwMCwgMHg1YTkwNTU4MjAwMDAwMDAwLCAweDQ3NmRlMDgzMDAwMDAwMDAsCisgICAgMHgxNDllZTk4NzAwMDAwMDAwLCAweDA5NjM1Yzg2MDAwMDAwMDAsIDB4MmU2NDgyODQwMDAwMDAwMCwKKyAgICAweDMzOTkzNzg1MDAwMDAwMDAsIDB4ODg4MjkxOGMwMDAwMDAwMCwgMHg5NTdmMjQ4ZDAwMDAwMDAwLAorICAgIDB4YjI3OGZhOGYwMDAwMDAwMCwgMHhhZjg1NGY4ZTAwMDAwMDAwLCAweGZjNzY0NjhhMDAwMDAwMDAsCisgICAgMHhlMThiZjM4YjAwMDAwMDAwLCAweGM2OGMyZDg5MDAwMDAwMDAsIDB4ZGI3MTk4ODgwMDAwMDAwMCwKKyAgICAweGIwYmI2MTlhMDAwMDAwMDAsIDB4YWQ0NmQ0OWIwMDAwMDAwMCwgMHg4YTQxMGE5OTAwMDAwMDAwLAorICAgIDB4OTdiY2JmOTgwMDAwMDAwMCwgMHhjNDRmYjY5YzAwMDAwMDAwLCAweGQ5YjIwMzlkMDAwMDAwMDAsCisgICAgMHhmZWI1ZGQ5ZjAwMDAwMDAwLCAweGUzNDg2ODllMDAwMDAwMDAsIDB4NTg1M2NlOTcwMDAwMDAwMCwKKyAgICAweDQ1YWU3Yjk2MDAwMDAwMDAsIDB4NjJhOWE1OTQwMDAwMDAwMCwgMHg3ZjU0MTA5NTAwMDAwMDAwLAorICAgIDB4MmNhNzE5OTEwMDAwMDAwMCwgMHgzMTVhYWM5MDAwMDAwMDAwLCAweDE2NWQ3MjkyMDAwMDAwMDAsCisgICAgMHgwYmEwYzc5MzAwMDAwMDAwfSwKKyAgIHsweDAwMDAwMDAwMDAwMDAwMDAsIDB4MjRkOTA3NjMwMDAwMDAwMCwgMHg0OGIyMGZjNjAwMDAwMDAwLAorICAgIDB4NmM2YjA4YTUwMDAwMDAwMCwgMHhkMTYyNmU1NzAwMDAwMDAwLCAweGY1YmI2OTM0MDAwMDAwMDAsCisgICAgMHg5OWQwNjE5MTAwMDAwMDAwLCAweGJkMDk2NmYyMDAwMDAwMDAsIDB4YTJjNWRjYWUwMDAwMDAwMCwKKyAgICAweDg2MWNkYmNkMDAwMDAwMDAsIDB4ZWE3N2QzNjgwMDAwMDAwMCwgMHhjZWFlZDQwYjAwMDAwMDAwLAorICAgIDB4NzNhN2IyZjkwMDAwMDAwMCwgMHg1NzdlYjU5YTAwMDAwMDAwLCAweDNiMTViZDNmMDAwMDAwMDAsCisgICAgMHgxZmNjYmE1YzAwMDAwMDAwLCAweDA1OGRjODg2MDAwMDAwMDAsIDB4MjE1NGNmZTUwMDAwMDAwMCwKKyAgICAweDRkM2ZjNzQwMDAwMDAwMDAsIDB4NjllNmMwMjMwMDAwMDAwMCwgMHhkNGVmYTZkMTAwMDAwMDAwLAorICAgIDB4ZjAzNmExYjIwMDAwMDAwMCwgMHg5YzVkYTkxNzAwMDAwMDAwLCAweGI4ODRhZTc0MDAwMDAwMDAsCisgICAgMHhhNzQ4MTQyODAwMDAwMDAwLCAweDgzOTExMzRiMDAwMDAwMDAsIDB4ZWZmYTFiZWUwMDAwMDAwMCwKKyAgICAweGNiMjMxYzhkMDAwMDAwMDAsIDB4NzYyYTdhN2YwMDAwMDAwMCwgMHg1MmYzN2QxYzAwMDAwMDAwLAorICAgIDB4M2U5ODc1YjkwMDAwMDAwMCwgMHgxYTQxNzJkYTAwMDAwMDAwLCAweDRiMWNlMGQ2MDAwMDAwMDAsCisgICAgMHg2ZmM1ZTdiNTAwMDAwMDAwLCAweDAzYWVlZjEwMDAwMDAwMDAsIDB4Mjc3N2U4NzMwMDAwMDAwMCwKKyAgICAweDlhN2U4ZTgxMDAwMDAwMDAsIDB4YmVhNzg5ZTIwMDAwMDAwMCwgMHhkMmNjODE0NzAwMDAwMDAwLAorICAgIDB4ZjYxNTg2MjQwMDAwMDAwMCwgMHhlOWQ5M2M3ODAwMDAwMDAwLCAweGNkMDAzYjFiMDAwMDAwMDAsCisgICAgMHhhMTZiMzNiZTAwMDAwMDAwLCAweDg1YjIzNGRkMDAwMDAwMDAsIDB4MzhiYjUyMmYwMDAwMDAwMCwKKyAgICAweDFjNjI1NTRjMDAwMDAwMDAsIDB4NzAwOTVkZTkwMDAwMDAwMCwgMHg1NGQwNWE4YTAwMDAwMDAwLAorICAgIDB4NGU5MTI4NTAwMDAwMDAwMCwgMHg2YTQ4MmYzMzAwMDAwMDAwLCAweDA2MjMyNzk2MDAwMDAwMDAsCisgICAgMHgyMmZhMjBmNTAwMDAwMDAwLCAweDlmZjM0NjA3MDAwMDAwMDAsIDB4YmIyYTQxNjQwMDAwMDAwMCwKKyAgICAweGQ3NDE0OWMxMDAwMDAwMDAsIDB4ZjM5ODRlYTIwMDAwMDAwMCwgMHhlYzU0ZjRmZTAwMDAwMDAwLAorICAgIDB4Yzg4ZGYzOWQwMDAwMDAwMCwgMHhhNGU2ZmIzODAwMDAwMDAwLCAweDgwM2ZmYzViMDAwMDAwMDAsCisgICAgMHgzZDM2OWFhOTAwMDAwMDAwLCAweDE5ZWY5ZGNhMDAwMDAwMDAsIDB4NzU4NDk1NmYwMDAwMDAwMCwKKyAgICAweDUxNWQ5MjBjMDAwMDAwMDAsIDB4ZDczZWIxNzYwMDAwMDAwMCwgMHhmM2U3YjYxNTAwMDAwMDAwLAorICAgIDB4OWY4Y2JlYjAwMDAwMDAwMCwgMHhiYjU1YjlkMzAwMDAwMDAwLCAweDA2NWNkZjIxMDAwMDAwMDAsCisgICAgMHgyMjg1ZDg0MjAwMDAwMDAwLCAweDRlZWVkMGU3MDAwMDAwMDAsIDB4NmEzN2Q3ODQwMDAwMDAwMCwKKyAgICAweDc1ZmI2ZGQ4MDAwMDAwMDAsIDB4NTEyMjZhYmIwMDAwMDAwMCwgMHgzZDQ5NjIxZTAwMDAwMDAwLAorICAgIDB4MTk5MDY1N2QwMDAwMDAwMCwgMHhhNDk5MDM4ZjAwMDAwMDAwLCAweDgwNDAwNGVjMDAwMDAwMDAsCisgICAgMHhlYzJiMGM0OTAwMDAwMDAwLCAweGM4ZjIwYjJhMDAwMDAwMDAsIDB4ZDJiMzc5ZjAwMDAwMDAwMCwKKyAgICAweGY2NmE3ZTkzMDAwMDAwMDAsIDB4OWEwMTc2MzYwMDAwMDAwMCwgMHhiZWQ4NzE1NTAwMDAwMDAwLAorICAgIDB4MDNkMTE3YTcwMDAwMDAwMCwgMHgyNzA4MTBjNDAwMDAwMDAwLCAweDRiNjMxODYxMDAwMDAwMDAsCisgICAgMHg2ZmJhMWYwMjAwMDAwMDAwLCAweDcwNzZhNTVlMDAwMDAwMDAsIDB4NTRhZmEyM2QwMDAwMDAwMCwKKyAgICAweDM4YzRhYTk4MDAwMDAwMDAsIDB4MWMxZGFkZmIwMDAwMDAwMCwgMHhhMTE0Y2IwOTAwMDAwMDAwLAorICAgIDB4ODVjZGNjNmEwMDAwMDAwMCwgMHhlOWE2YzRjZjAwMDAwMDAwLCAweGNkN2ZjM2FjMDAwMDAwMDAsCisgICAgMHg5YzIyNTFhMDAwMDAwMDAwLCAweGI4ZmI1NmMzMDAwMDAwMDAsIDB4ZDQ5MDVlNjYwMDAwMDAwMCwKKyAgICAweGYwNDk1OTA1MDAwMDAwMDAsIDB4NGQ0MDNmZjcwMDAwMDAwMCwgMHg2OTk5Mzg5NDAwMDAwMDAwLAorICAgIDB4MDVmMjMwMzEwMDAwMDAwMCwgMHgyMTJiMzc1MjAwMDAwMDAwLCAweDNlZTc4ZDBlMDAwMDAwMDAsCisgICAgMHgxYTNlOGE2ZDAwMDAwMDAwLCAweDc2NTU4MmM4MDAwMDAwMDAsIDB4NTI4Yzg1YWIwMDAwMDAwMCwKKyAgICAweGVmODVlMzU5MDAwMDAwMDAsIDB4Y2I1Y2U0M2EwMDAwMDAwMCwgMHhhNzM3ZWM5ZjAwMDAwMDAwLAorICAgIDB4ODNlZWViZmMwMDAwMDAwMCwgMHg5OWFmOTkyNjAwMDAwMDAwLCAweGJkNzY5ZTQ1MDAwMDAwMDAsCisgICAgMHhkMTFkOTZlMDAwMDAwMDAwLCAweGY1YzQ5MTgzMDAwMDAwMDAsIDB4NDhjZGY3NzEwMDAwMDAwMCwKKyAgICAweDZjMTRmMDEyMDAwMDAwMDAsIDB4MDA3ZmY4YjcwMDAwMDAwMCwgMHgyNGE2ZmZkNDAwMDAwMDAwLAorICAgIDB4M2I2YTQ1ODgwMDAwMDAwMCwgMHgxZmIzNDJlYjAwMDAwMDAwLCAweDczZDg0YTRlMDAwMDAwMDAsCisgICAgMHg1NzAxNGQyZDAwMDAwMDAwLCAweGVhMDgyYmRmMDAwMDAwMDAsIDB4Y2VkMTJjYmMwMDAwMDAwMCwKKyAgICAweGEyYmEyNDE5MDAwMDAwMDAsIDB4ODY2MzIzN2EwMDAwMDAwMCwgMHhhZTdkNjJlZDAwMDAwMDAwLAorICAgIDB4OGFhNDY1OGUwMDAwMDAwMCwgMHhlNmNmNmQyYjAwMDAwMDAwLCAweGMyMTY2YTQ4MDAwMDAwMDAsCisgICAgMHg3ZjFmMGNiYTAwMDAwMDAwLCAweDViYzYwYmQ5MDAwMDAwMDAsIDB4MzdhZDAzN2MwMDAwMDAwMCwKKyAgICAweDEzNzQwNDFmMDAwMDAwMDAsIDB4MGNiOGJlNDMwMDAwMDAwMCwgMHgyODYxYjkyMDAwMDAwMDAwLAorICAgIDB4NDQwYWIxODUwMDAwMDAwMCwgMHg2MGQzYjZlNjAwMDAwMDAwLCAweGRkZGFkMDE0MDAwMDAwMDAsCisgICAgMHhmOTAzZDc3NzAwMDAwMDAwLCAweDk1NjhkZmQyMDAwMDAwMDAsIDB4YjFiMWQ4YjEwMDAwMDAwMCwKKyAgICAweGFiZjBhYTZiMDAwMDAwMDAsIDB4OGYyOWFkMDgwMDAwMDAwMCwgMHhlMzQyYTVhZDAwMDAwMDAwLAorICAgIDB4Yzc5YmEyY2UwMDAwMDAwMCwgMHg3YTkyYzQzYzAwMDAwMDAwLCAweDVlNGJjMzVmMDAwMDAwMDAsCisgICAgMHgzMjIwY2JmYTAwMDAwMDAwLCAweDE2ZjljYzk5MDAwMDAwMDAsIDB4MDkzNTc2YzUwMDAwMDAwMCwKKyAgICAweDJkZWM3MWE2MDAwMDAwMDAsIDB4NDE4Nzc5MDMwMDAwMDAwMCwgMHg2NTVlN2U2MDAwMDAwMDAwLAorICAgIDB4ZDg1NzE4OTIwMDAwMDAwMCwgMHhmYzhlMWZmMTAwMDAwMDAwLCAweDkwZTUxNzU0MDAwMDAwMDAsCisgICAgMHhiNDNjMTAzNzAwMDAwMDAwLCAweGU1NjE4MjNiMDAwMDAwMDAsIDB4YzFiODg1NTgwMDAwMDAwMCwKKyAgICAweGFkZDM4ZGZkMDAwMDAwMDAsIDB4ODkwYThhOWUwMDAwMDAwMCwgMHgzNDAzZWM2YzAwMDAwMDAwLAorICAgIDB4MTBkYWViMGYwMDAwMDAwMCwgMHg3Y2IxZTNhYTAwMDAwMDAwLCAweDU4NjhlNGM5MDAwMDAwMDAsCisgICAgMHg0N2E0NWU5NTAwMDAwMDAwLCAweDYzN2Q1OWY2MDAwMDAwMDAsIDB4MGYxNjUxNTMwMDAwMDAwMCwKKyAgICAweDJiY2Y1NjMwMDAwMDAwMDAsIDB4OTZjNjMwYzIwMDAwMDAwMCwgMHhiMjFmMzdhMTAwMDAwMDAwLAorICAgIDB4ZGU3NDNmMDQwMDAwMDAwMCwgMHhmYWFkMzg2NzAwMDAwMDAwLCAweGUwZWM0YWJkMDAwMDAwMDAsCisgICAgMHhjNDM1NGRkZTAwMDAwMDAwLCAweGE4NWU0NTdiMDAwMDAwMDAsIDB4OGM4NzQyMTgwMDAwMDAwMCwKKyAgICAweDMxOGUyNGVhMDAwMDAwMDAsIDB4MTU1NzIzODkwMDAwMDAwMCwgMHg3OTNjMmIyYzAwMDAwMDAwLAorICAgIDB4NWRlNTJjNGYwMDAwMDAwMCwgMHg0MjI5OTYxMzAwMDAwMDAwLCAweDY2ZjA5MTcwMDAwMDAwMDAsCisgICAgMHgwYTliOTlkNTAwMDAwMDAwLCAweDJlNDI5ZWI2MDAwMDAwMDAsIDB4OTM0YmY4NDQwMDAwMDAwMCwKKyAgICAweGI3OTJmZjI3MDAwMDAwMDAsIDB4ZGJmOWY3ODIwMDAwMDAwMCwgMHhmZjIwZjBlMTAwMDAwMDAwLAorICAgIDB4Nzk0M2QzOWIwMDAwMDAwMCwgMHg1ZDlhZDRmODAwMDAwMDAwLCAweDMxZjFkYzVkMDAwMDAwMDAsCisgICAgMHgxNTI4ZGIzZTAwMDAwMDAwLCAweGE4MjFiZGNjMDAwMDAwMDAsIDB4OGNmOGJhYWYwMDAwMDAwMCwKKyAgICAweGUwOTNiMjBhMDAwMDAwMDAsIDB4YzQ0YWI1NjkwMDAwMDAwMCwgMHhkYjg2MGYzNTAwMDAwMDAwLAorICAgIDB4ZmY1ZjA4NTYwMDAwMDAwMCwgMHg5MzM0MDBmMzAwMDAwMDAwLCAweGI3ZWQwNzkwMDAwMDAwMDAsCisgICAgMHgwYWU0NjE2MjAwMDAwMDAwLCAweDJlM2Q2NjAxMDAwMDAwMDAsIDB4NDI1NjZlYTQwMDAwMDAwMCwKKyAgICAweDY2OGY2OWM3MDAwMDAwMDAsIDB4N2NjZTFiMWQwMDAwMDAwMCwgMHg1ODE3MWM3ZTAwMDAwMDAwLAorICAgIDB4MzQ3YzE0ZGIwMDAwMDAwMCwgMHgxMGE1MTNiODAwMDAwMDAwLCAweGFkYWM3NTRhMDAwMDAwMDAsCisgICAgMHg4OTc1NzIyOTAwMDAwMDAwLCAweGU1MWU3YThjMDAwMDAwMDAsIDB4YzFjNzdkZWYwMDAwMDAwMCwKKyAgICAweGRlMGJjN2IzMDAwMDAwMDAsIDB4ZmFkMmMwZDAwMDAwMDAwMCwgMHg5NmI5Yzg3NTAwMDAwMDAwLAorICAgIDB4YjI2MGNmMTYwMDAwMDAwMCwgMHgwZjY5YTllNDAwMDAwMDAwLCAweDJiYjBhZTg3MDAwMDAwMDAsCisgICAgMHg0N2RiYTYyMjAwMDAwMDAwLCAweDYzMDJhMTQxMDAwMDAwMDAsIDB4MzI1ZjMzNGQwMDAwMDAwMCwKKyAgICAweDE2ODYzNDJlMDAwMDAwMDAsIDB4N2FlZDNjOGIwMDAwMDAwMCwgMHg1ZTM0M2JlODAwMDAwMDAwLAorICAgIDB4ZTMzZDVkMWEwMDAwMDAwMCwgMHhjN2U0NWE3OTAwMDAwMDAwLCAweGFiOGY1MmRjMDAwMDAwMDAsCisgICAgMHg4ZjU2NTViZjAwMDAwMDAwLCAweDkwOWFlZmUzMDAwMDAwMDAsIDB4YjQ0M2U4ODAwMDAwMDAwMCwKKyAgICAweGQ4MjhlMDI1MDAwMDAwMDAsIDB4ZmNmMWU3NDYwMDAwMDAwMCwgMHg0MWY4ODFiNDAwMDAwMDAwLAorICAgIDB4NjUyMTg2ZDcwMDAwMDAwMCwgMHgwOTRhOGU3MjAwMDAwMDAwLCAweDJkOTM4OTExMDAwMDAwMDAsCisgICAgMHgzN2QyZmJjYjAwMDAwMDAwLCAweDEzMGJmY2E4MDAwMDAwMDAsIDB4N2Y2MGY0MGQwMDAwMDAwMCwKKyAgICAweDViYjlmMzZlMDAwMDAwMDAsIDB4ZTZiMDk1OWMwMDAwMDAwMCwgMHhjMjY5OTJmZjAwMDAwMDAwLAorICAgIDB4YWUwMjlhNWEwMDAwMDAwMCwgMHg4YWRiOWQzOTAwMDAwMDAwLCAweDk1MTcyNzY1MDAwMDAwMDAsCisgICAgMHhiMWNlMjAwNjAwMDAwMDAwLCAweGRkYTUyOGEzMDAwMDAwMDAsIDB4Zjk3YzJmYzAwMDAwMDAwMCwKKyAgICAweDQ0NzU0OTMyMDAwMDAwMDAsIDB4NjBhYzRlNTEwMDAwMDAwMCwgMHgwY2M3NDZmNDAwMDAwMDAwLAorICAgIDB4MjgxZTQxOTcwMDAwMDAwMH0sCisgICB7MHgwMDAwMDAwMDAwMDAwMDAwLCAweDA4ZTM2MDNjMDAwMDAwMDAsIDB4MTBjNmMxNzgwMDAwMDAwMCwKKyAgICAweDE4MjVhMTQ0MDAwMDAwMDAsIDB4MjA4YzgzZjEwMDAwMDAwMCwgMHgyODZmZTNjZDAwMDAwMDAwLAorICAgIDB4MzA0YTQyODkwMDAwMDAwMCwgMHgzOGE5MjJiNTAwMDAwMDAwLCAweDAxMWU3NjM4MDAwMDAwMDAsCisgICAgMHgwOWZkMTYwNDAwMDAwMDAwLCAweDExZDhiNzQwMDAwMDAwMDAsIDB4MTkzYmQ3N2MwMDAwMDAwMCwKKyAgICAweDIxOTJmNWM5MDAwMDAwMDAsIDB4Mjk3MTk1ZjUwMDAwMDAwMCwgMHgzMTU0MzRiMTAwMDAwMDAwLAorICAgIDB4MzliNzU0OGQwMDAwMDAwMCwgMHgwMjNjZWM3MDAwMDAwMDAwLCAweDBhZGY4YzRjMDAwMDAwMDAsCisgICAgMHgxMmZhMmQwODAwMDAwMDAwLCAweDFhMTk0ZDM0MDAwMDAwMDAsIDB4MjJiMDZmODEwMDAwMDAwMCwKKyAgICAweDJhNTMwZmJkMDAwMDAwMDAsIDB4MzI3NmFlZjkwMDAwMDAwMCwgMHgzYTk1Y2VjNTAwMDAwMDAwLAorICAgIDB4MDMyMjlhNDgwMDAwMDAwMCwgMHgwYmMxZmE3NDAwMDAwMDAwLCAweDEzZTQ1YjMwMDAwMDAwMDAsCisgICAgMHgxYjA3M2IwYzAwMDAwMDAwLCAweDIzYWUxOWI5MDAwMDAwMDAsIDB4MmI0ZDc5ODUwMDAwMDAwMCwKKyAgICAweDMzNjhkOGMxMDAwMDAwMDAsIDB4M2I4YmI4ZmQwMDAwMDAwMCwgMHgwNDc4ZDhlMTAwMDAwMDAwLAorICAgIDB4MGM5YmI4ZGQwMDAwMDAwMCwgMHgxNGJlMTk5OTAwMDAwMDAwLCAweDFjNWQ3OWE1MDAwMDAwMDAsCisgICAgMHgyNGY0NWIxMDAwMDAwMDAwLCAweDJjMTczYjJjMDAwMDAwMDAsIDB4MzQzMjlhNjgwMDAwMDAwMCwKKyAgICAweDNjZDFmYTU0MDAwMDAwMDAsIDB4MDU2NmFlZDkwMDAwMDAwMCwgMHgwZDg1Y2VlNTAwMDAwMDAwLAorICAgIDB4MTVhMDZmYTEwMDAwMDAwMCwgMHgxZDQzMGY5ZDAwMDAwMDAwLCAweDI1ZWEyZDI4MDAwMDAwMDAsCisgICAgMHgyZDA5NGQxNDAwMDAwMDAwLCAweDM1MmNlYzUwMDAwMDAwMDAsIDB4M2RjZjhjNmMwMDAwMDAwMCwKKyAgICAweDA2NDQzNDkxMDAwMDAwMDAsIDB4MGVhNzU0YWQwMDAwMDAwMCwgMHgxNjgyZjVlOTAwMDAwMDAwLAorICAgIDB4MWU2MTk1ZDUwMDAwMDAwMCwgMHgyNmM4Yjc2MDAwMDAwMDAwLCAweDJlMmJkNzVjMDAwMDAwMDAsCisgICAgMHgzNjBlNzYxODAwMDAwMDAwLCAweDNlZWQxNjI0MDAwMDAwMDAsIDB4MDc1YTQyYTkwMDAwMDAwMCwKKyAgICAweDBmYjkyMjk1MDAwMDAwMDAsIDB4MTc5YzgzZDEwMDAwMDAwMCwgMHgxZjdmZTNlZDAwMDAwMDAwLAorICAgIDB4MjdkNmMxNTgwMDAwMDAwMCwgMHgyZjM1YTE2NDAwMDAwMDAwLCAweDM3MTAwMDIwMDAwMDAwMDAsCisgICAgMHgzZmYzNjAxYzAwMDAwMDAwLCAweDQ5ZjZjMTE4MDAwMDAwMDAsIDB4NDExNWExMjQwMDAwMDAwMCwKKyAgICAweDU5MzAwMDYwMDAwMDAwMDAsIDB4NTFkMzYwNWMwMDAwMDAwMCwgMHg2OTdhNDJlOTAwMDAwMDAwLAorICAgIDB4NjE5OTIyZDUwMDAwMDAwMCwgMHg3OWJjODM5MTAwMDAwMDAwLCAweDcxNWZlM2FkMDAwMDAwMDAsCisgICAgMHg0OGU4YjcyMDAwMDAwMDAwLCAweDQwMGJkNzFjMDAwMDAwMDAsIDB4NTgyZTc2NTgwMDAwMDAwMCwKKyAgICAweDUwY2QxNjY0MDAwMDAwMDAsIDB4Njg2NDM0ZDEwMDAwMDAwMCwgMHg2MDg3NTRlZDAwMDAwMDAwLAorICAgIDB4NzhhMmY1YTkwMDAwMDAwMCwgMHg3MDQxOTU5NTAwMDAwMDAwLCAweDRiY2EyZDY4MDAwMDAwMDAsCisgICAgMHg0MzI5NGQ1NDAwMDAwMDAwLCAweDViMGNlYzEwMDAwMDAwMDAsIDB4NTNlZjhjMmMwMDAwMDAwMCwKKyAgICAweDZiNDZhZTk5MDAwMDAwMDAsIDB4NjNhNWNlYTUwMDAwMDAwMCwgMHg3YjgwNmZlMTAwMDAwMDAwLAorICAgIDB4NzM2MzBmZGQwMDAwMDAwMCwgMHg0YWQ0NWI1MDAwMDAwMDAwLCAweDQyMzczYjZjMDAwMDAwMDAsCisgICAgMHg1YTEyOWEyODAwMDAwMDAwLCAweDUyZjFmYTE0MDAwMDAwMDAsIDB4NmE1OGQ4YTEwMDAwMDAwMCwKKyAgICAweDYyYmJiODlkMDAwMDAwMDAsIDB4N2E5ZTE5ZDkwMDAwMDAwMCwgMHg3MjdkNzllNTAwMDAwMDAwLAorICAgIDB4NGQ4ZTE5ZjkwMDAwMDAwMCwgMHg0NTZkNzljNTAwMDAwMDAwLCAweDVkNDhkODgxMDAwMDAwMDAsCisgICAgMHg1NWFiYjhiZDAwMDAwMDAwLCAweDZkMDI5YTA4MDAwMDAwMDAsIDB4NjVlMWZhMzQwMDAwMDAwMCwKKyAgICAweDdkYzQ1YjcwMDAwMDAwMDAsIDB4NzUyNzNiNGMwMDAwMDAwMCwgMHg0YzkwNmZjMTAwMDAwMDAwLAorICAgIDB4NDQ3MzBmZmQwMDAwMDAwMCwgMHg1YzU2YWViOTAwMDAwMDAwLCAweDU0YjVjZTg1MDAwMDAwMDAsCisgICAgMHg2YzFjZWMzMDAwMDAwMDAwLCAweDY0ZmY4YzBjMDAwMDAwMDAsIDB4N2NkYTJkNDgwMDAwMDAwMCwKKyAgICAweDc0Mzk0ZDc0MDAwMDAwMDAsIDB4NGZiMmY1ODkwMDAwMDAwMCwgMHg0NzUxOTViNTAwMDAwMDAwLAorICAgIDB4NWY3NDM0ZjEwMDAwMDAwMCwgMHg1Nzk3NTRjZDAwMDAwMDAwLCAweDZmM2U3Njc4MDAwMDAwMDAsCisgICAgMHg2N2RkMTY0NDAwMDAwMDAwLCAweDdmZjhiNzAwMDAwMDAwMDAsIDB4NzcxYmQ3M2MwMDAwMDAwMCwKKyAgICAweDRlYWM4M2IxMDAwMDAwMDAsIDB4NDY0ZmUzOGQwMDAwMDAwMCwgMHg1ZTZhNDJjOTAwMDAwMDAwLAorICAgIDB4NTY4OTIyZjUwMDAwMDAwMCwgMHg2ZTIwMDA0MDAwMDAwMDAwLCAweDY2YzM2MDdjMDAwMDAwMDAsCisgICAgMHg3ZWU2YzEzODAwMDAwMDAwLCAweDc2MDVhMTA0MDAwMDAwMDAsIDB4OTJlYzgzMzEwMDAwMDAwMCwKKyAgICAweDlhMGZlMzBkMDAwMDAwMDAsIDB4ODIyYTQyNDkwMDAwMDAwMCwgMHg4YWM5MjI3NTAwMDAwMDAwLAorICAgIDB4YjI2MDAwYzAwMDAwMDAwMCwgMHhiYTgzNjBmYzAwMDAwMDAwLCAweGEyYTZjMWI4MDAwMDAwMDAsCisgICAgMHhhYTQ1YTE4NDAwMDAwMDAwLCAweDkzZjJmNTA5MDAwMDAwMDAsIDB4OWIxMTk1MzUwMDAwMDAwMCwKKyAgICAweDgzMzQzNDcxMDAwMDAwMDAsIDB4OGJkNzU0NGQwMDAwMDAwMCwgMHhiMzdlNzZmODAwMDAwMDAwLAorICAgIDB4YmI5ZDE2YzQwMDAwMDAwMCwgMHhhM2I4Yjc4MDAwMDAwMDAwLCAweGFiNWJkN2JjMDAwMDAwMDAsCisgICAgMHg5MGQwNmY0MTAwMDAwMDAwLCAweDk4MzMwZjdkMDAwMDAwMDAsIDB4ODAxNmFlMzkwMDAwMDAwMCwKKyAgICAweDg4ZjVjZTA1MDAwMDAwMDAsIDB4YjA1Y2VjYjAwMDAwMDAwMCwgMHhiOGJmOGM4YzAwMDAwMDAwLAorICAgIDB4YTA5YTJkYzgwMDAwMDAwMCwgMHhhODc5NGRmNDAwMDAwMDAwLCAweDkxY2UxOTc5MDAwMDAwMDAsCisgICAgMHg5OTJkNzk0NTAwMDAwMDAwLCAweDgxMDhkODAxMDAwMDAwMDAsIDB4ODllYmI4M2QwMDAwMDAwMCwKKyAgICAweGIxNDI5YTg4MDAwMDAwMDAsIDB4YjlhMWZhYjQwMDAwMDAwMCwgMHhhMTg0NWJmMDAwMDAwMDAwLAorICAgIDB4YTk2NzNiY2MwMDAwMDAwMCwgMHg5Njk0NWJkMDAwMDAwMDAwLCAweDllNzczYmVjMDAwMDAwMDAsCisgICAgMHg4NjUyOWFhODAwMDAwMDAwLCAweDhlYjFmYTk0MDAwMDAwMDAsIDB4YjYxOGQ4MjEwMDAwMDAwMCwKKyAgICAweGJlZmJiODFkMDAwMDAwMDAsIDB4YTZkZTE5NTkwMDAwMDAwMCwgMHhhZTNkNzk2NTAwMDAwMDAwLAorICAgIDB4OTc4YTJkZTgwMDAwMDAwMCwgMHg5ZjY5NGRkNDAwMDAwMDAwLCAweDg3NGNlYzkwMDAwMDAwMDAsCisgICAgMHg4ZmFmOGNhYzAwMDAwMDAwLCAweGI3MDZhZTE5MDAwMDAwMDAsIDB4YmZlNWNlMjUwMDAwMDAwMCwKKyAgICAweGE3YzA2ZjYxMDAwMDAwMDAsIDB4YWYyMzBmNWQwMDAwMDAwMCwgMHg5NGE4YjdhMDAwMDAwMDAwLAorICAgIDB4OWM0YmQ3OWMwMDAwMDAwMCwgMHg4NDZlNzZkODAwMDAwMDAwLCAweDhjOGQxNmU0MDAwMDAwMDAsCisgICAgMHhiNDI0MzQ1MTAwMDAwMDAwLCAweGJjYzc1NDZkMDAwMDAwMDAsIDB4YTRlMmY1MjkwMDAwMDAwMCwKKyAgICAweGFjMDE5NTE1MDAwMDAwMDAsIDB4OTViNmMxOTgwMDAwMDAwMCwgMHg5ZDU1YTFhNDAwMDAwMDAwLAorICAgIDB4ODU3MDAwZTAwMDAwMDAwMCwgMHg4ZDkzNjBkYzAwMDAwMDAwLCAweGI1M2E0MjY5MDAwMDAwMDAsCisgICAgMHhiZGQ5MjI1NTAwMDAwMDAwLCAweGE1ZmM4MzExMDAwMDAwMDAsIDB4YWQxZmUzMmQwMDAwMDAwMCwKKyAgICAweGRiMWE0MjI5MDAwMDAwMDAsIDB4ZDNmOTIyMTUwMDAwMDAwMCwgMHhjYmRjODM1MTAwMDAwMDAwLAorICAgIDB4YzMzZmUzNmQwMDAwMDAwMCwgMHhmYjk2YzFkODAwMDAwMDAwLCAweGYzNzVhMWU0MDAwMDAwMDAsCisgICAgMHhlYjUwMDBhMDAwMDAwMDAwLCAweGUzYjM2MDljMDAwMDAwMDAsIDB4ZGEwNDM0MTEwMDAwMDAwMCwKKyAgICAweGQyZTc1NDJkMDAwMDAwMDAsIDB4Y2FjMmY1NjkwMDAwMDAwMCwgMHhjMjIxOTU1NTAwMDAwMDAwLAorICAgIDB4ZmE4OGI3ZTAwMDAwMDAwMCwgMHhmMjZiZDdkYzAwMDAwMDAwLCAweGVhNGU3Njk4MDAwMDAwMDAsCisgICAgMHhlMmFkMTZhNDAwMDAwMDAwLCAweGQ5MjZhZTU5MDAwMDAwMDAsIDB4ZDFjNWNlNjUwMDAwMDAwMCwKKyAgICAweGM5ZTA2ZjIxMDAwMDAwMDAsIDB4YzEwMzBmMWQwMDAwMDAwMCwgMHhmOWFhMmRhODAwMDAwMDAwLAorICAgIDB4ZjE0OTRkOTQwMDAwMDAwMCwgMHhlOTZjZWNkMDAwMDAwMDAwLCAweGUxOGY4Y2VjMDAwMDAwMDAsCisgICAgMHhkODM4ZDg2MTAwMDAwMDAwLCAweGQwZGJiODVkMDAwMDAwMDAsIDB4YzhmZTE5MTkwMDAwMDAwMCwKKyAgICAweGMwMWQ3OTI1MDAwMDAwMDAsIDB4ZjhiNDViOTAwMDAwMDAwMCwgMHhmMDU3M2JhYzAwMDAwMDAwLAorICAgIDB4ZTg3MjlhZTgwMDAwMDAwMCwgMHhlMDkxZmFkNDAwMDAwMDAwLCAweGRmNjI5YWM4MDAwMDAwMDAsCisgICAgMHhkNzgxZmFmNDAwMDAwMDAwLCAweGNmYTQ1YmIwMDAwMDAwMDAsIDB4Yzc0NzNiOGMwMDAwMDAwMCwKKyAgICAweGZmZWUxOTM5MDAwMDAwMDAsIDB4ZjcwZDc5MDUwMDAwMDAwMCwgMHhlZjI4ZDg0MTAwMDAwMDAwLAorICAgIDB4ZTdjYmI4N2QwMDAwMDAwMCwgMHhkZTdjZWNmMDAwMDAwMDAwLCAweGQ2OWY4Y2NjMDAwMDAwMDAsCisgICAgMHhjZWJhMmQ4ODAwMDAwMDAwLCAweGM2NTk0ZGI0MDAwMDAwMDAsIDB4ZmVmMDZmMDEwMDAwMDAwMCwKKyAgICAweGY2MTMwZjNkMDAwMDAwMDAsIDB4ZWUzNmFlNzkwMDAwMDAwMCwgMHhlNmQ1Y2U0NTAwMDAwMDAwLAorICAgIDB4ZGQ1ZTc2YjgwMDAwMDAwMCwgMHhkNWJkMTY4NDAwMDAwMDAwLCAweGNkOThiN2MwMDAwMDAwMDAsCisgICAgMHhjNTdiZDdmYzAwMDAwMDAwLCAweGZkZDJmNTQ5MDAwMDAwMDAsIDB4ZjUzMTk1NzUwMDAwMDAwMCwKKyAgICAweGVkMTQzNDMxMDAwMDAwMDAsIDB4ZTVmNzU0MGQwMDAwMDAwMCwgMHhkYzQwMDA4MDAwMDAwMDAwLAorICAgIDB4ZDRhMzYwYmMwMDAwMDAwMCwgMHhjYzg2YzFmODAwMDAwMDAwLCAweGM0NjVhMWM0MDAwMDAwMDAsCisgICAgMHhmY2NjODM3MTAwMDAwMDAwLCAweGY0MmZlMzRkMDAwMDAwMDAsIDB4ZWMwYTQyMDkwMDAwMDAwMCwKKyAgICAweGU0ZTkyMjM1MDAwMDAwMDB9LAorICAgezB4MDAwMDAwMDAwMDAwMDAwMCwgMHhkMWU4ZTcwZTAwMDAwMDAwLCAweGEyZDFjZjFkMDAwMDAwMDAsCisgICAgMHg3MzM5MjgxMzAwMDAwMDAwLCAweDQ0YTM5ZjNiMDAwMDAwMDAsIDB4OTU0Yjc4MzUwMDAwMDAwMCwKKyAgICAweGU2NzI1MDI2MDAwMDAwMDAsIDB4Mzc5YWI3MjgwMDAwMDAwMCwgMHg4ODQ2M2Y3NzAwMDAwMDAwLAorICAgIDB4NTlhZWQ4NzkwMDAwMDAwMCwgMHgyYTk3ZjA2YTAwMDAwMDAwLCAweGZiN2YxNzY0MDAwMDAwMDAsCisgICAgMHhjY2U1YTA0YzAwMDAwMDAwLCAweDFkMGQ0NzQyMDAwMDAwMDAsIDB4NmUzNDZmNTEwMDAwMDAwMCwKKyAgICAweGJmZGM4ODVmMDAwMDAwMDAsIDB4MTA4ZDdlZWUwMDAwMDAwMCwgMHhjMTY1OTllMDAwMDAwMDAwLAorICAgIDB4YjI1Y2IxZjMwMDAwMDAwMCwgMHg2M2I0NTZmZDAwMDAwMDAwLCAweDU0MmVlMWQ1MDAwMDAwMDAsCisgICAgMHg4NWM2MDZkYjAwMDAwMDAwLCAweGY2ZmYyZWM4MDAwMDAwMDAsIDB4MjcxN2M5YzYwMDAwMDAwMCwKKyAgICAweDk4Y2I0MTk5MDAwMDAwMDAsIDB4NDkyM2E2OTcwMDAwMDAwMCwgMHgzYTFhOGU4NDAwMDAwMDAwLAorICAgIDB4ZWJmMjY5OGEwMDAwMDAwMCwgMHhkYzY4ZGVhMjAwMDAwMDAwLCAweDBkODAzOWFjMDAwMDAwMDAsCisgICAgMHg3ZWI5MTFiZjAwMDAwMDAwLCAweGFmNTFmNmIxMDAwMDAwMDAsIDB4NjExYzhjMDcwMDAwMDAwMCwKKyAgICAweGIwZjQ2YjA5MDAwMDAwMDAsIDB4YzNjZDQzMWEwMDAwMDAwMCwgMHgxMjI1YTQxNDAwMDAwMDAwLAorICAgIDB4MjViZjEzM2MwMDAwMDAwMCwgMHhmNDU3ZjQzMjAwMDAwMDAwLCAweDg3NmVkYzIxMDAwMDAwMDAsCisgICAgMHg1Njg2M2IyZjAwMDAwMDAwLCAweGU5NWFiMzcwMDAwMDAwMDAsIDB4MzhiMjU0N2UwMDAwMDAwMCwKKyAgICAweDRiOGI3YzZkMDAwMDAwMDAsIDB4OWE2MzliNjMwMDAwMDAwMCwgMHhhZGY5MmM0YjAwMDAwMDAwLAorICAgIDB4N2MxMWNiNDUwMDAwMDAwMCwgMHgwZjI4ZTM1NjAwMDAwMDAwLCAweGRlYzAwNDU4MDAwMDAwMDAsCisgICAgMHg3MTkxZjJlOTAwMDAwMDAwLCAweGEwNzkxNWU3MDAwMDAwMDAsIDB4ZDM0MDNkZjQwMDAwMDAwMCwKKyAgICAweDAyYThkYWZhMDAwMDAwMDAsIDB4MzUzMjZkZDIwMDAwMDAwMCwgMHhlNGRhOGFkYzAwMDAwMDAwLAorICAgIDB4OTdlM2EyY2YwMDAwMDAwMCwgMHg0NjBiNDVjMTAwMDAwMDAwLCAweGY5ZDdjZDllMDAwMDAwMDAsCisgICAgMHgyODNmMmE5MDAwMDAwMDAwLCAweDViMDYwMjgzMDAwMDAwMDAsIDB4OGFlZWU1OGQwMDAwMDAwMCwKKyAgICAweGJkNzQ1MmE1MDAwMDAwMDAsIDB4NmM5Y2I1YWIwMDAwMDAwMCwgMHgxZmE1OWRiODAwMDAwMDAwLAorICAgIDB4Y2U0ZDdhYjYwMDAwMDAwMCwgMHhjMjM4MTgwZjAwMDAwMDAwLCAweDEzZDBmZjAxMDAwMDAwMDAsCisgICAgMHg2MGU5ZDcxMjAwMDAwMDAwLCAweGIxMDEzMDFjMDAwMDAwMDAsIDB4ODY5Yjg3MzQwMDAwMDAwMCwKKyAgICAweDU3NzM2MDNhMDAwMDAwMDAsIDB4MjQ0YTQ4MjkwMDAwMDAwMCwgMHhmNWEyYWYyNzAwMDAwMDAwLAorICAgIDB4NGE3ZTI3NzgwMDAwMDAwMCwgMHg5Yjk2YzA3NjAwMDAwMDAwLCAweGU4YWZlODY1MDAwMDAwMDAsCisgICAgMHgzOTQ3MGY2YjAwMDAwMDAwLCAweDBlZGRiODQzMDAwMDAwMDAsIDB4ZGYzNTVmNGQwMDAwMDAwMCwKKyAgICAweGFjMGM3NzVlMDAwMDAwMDAsIDB4N2RlNDkwNTAwMDAwMDAwMCwgMHhkMmI1NjZlMTAwMDAwMDAwLAorICAgIDB4MDM1ZDgxZWYwMDAwMDAwMCwgMHg3MDY0YTlmYzAwMDAwMDAwLCAweGExOGM0ZWYyMDAwMDAwMDAsCisgICAgMHg5NjE2ZjlkYTAwMDAwMDAwLCAweDQ3ZmUxZWQ0MDAwMDAwMDAsIDB4MzRjNzM2YzcwMDAwMDAwMCwKKyAgICAweGU1MmZkMWM5MDAwMDAwMDAsIDB4NWFmMzU5OTYwMDAwMDAwMCwgMHg4YjFiYmU5ODAwMDAwMDAwLAorICAgIDB4ZjgyMjk2OGIwMDAwMDAwMCwgMHgyOWNhNzE4NTAwMDAwMDAwLCAweDFlNTBjNmFkMDAwMDAwMDAsCisgICAgMHhjZmI4MjFhMzAwMDAwMDAwLCAweGJjODEwOWIwMDAwMDAwMDAsIDB4NmQ2OWVlYmUwMDAwMDAwMCwKKyAgICAweGEzMjQ5NDA4MDAwMDAwMDAsIDB4NzJjYzczMDYwMDAwMDAwMCwgMHgwMWY1NWIxNTAwMDAwMDAwLAorICAgIDB4ZDAxZGJjMWIwMDAwMDAwMCwgMHhlNzg3MGIzMzAwMDAwMDAwLCAweDM2NmZlYzNkMDAwMDAwMDAsCisgICAgMHg0NTU2YzQyZTAwMDAwMDAwLCAweDk0YmUyMzIwMDAwMDAwMDAsIDB4MmI2MmFiN2YwMDAwMDAwMCwKKyAgICAweGZhOGE0YzcxMDAwMDAwMDAsIDB4ODliMzY0NjIwMDAwMDAwMCwgMHg1ODViODM2YzAwMDAwMDAwLAorICAgIDB4NmZjMTM0NDQwMDAwMDAwMCwgMHhiZTI5ZDM0YTAwMDAwMDAwLCAweGNkMTBmYjU5MDAwMDAwMDAsCisgICAgMHgxY2Y4MWM1NzAwMDAwMDAwLCAweGIzYTllYWU2MDAwMDAwMDAsIDB4NjI0MTBkZTgwMDAwMDAwMCwKKyAgICAweDExNzgyNWZiMDAwMDAwMDAsIDB4YzA5MGMyZjUwMDAwMDAwMCwgMHhmNzBhNzVkZDAwMDAwMDAwLAorICAgIDB4MjZlMjkyZDMwMDAwMDAwMCwgMHg1NWRiYmFjMDAwMDAwMDAwLCAweDg0MzM1ZGNlMDAwMDAwMDAsCisgICAgMHgzYmVmZDU5MTAwMDAwMDAwLCAweGVhMDczMjlmMDAwMDAwMDAsIDB4OTkzZTFhOGMwMDAwMDAwMCwKKyAgICAweDQ4ZDZmZDgyMDAwMDAwMDAsIDB4N2Y0YzRhYWEwMDAwMDAwMCwgMHhhZWE0YWRhNDAwMDAwMDAwLAorICAgIDB4ZGQ5ZDg1YjcwMDAwMDAwMCwgMHgwYzc1NjJiOTAwMDAwMDAwLCAweDg0NzEzMDFlMDAwMDAwMDAsCisgICAgMHg1NTk5ZDcxMDAwMDAwMDAwLCAweDI2YTBmZjAzMDAwMDAwMDAsIDB4Zjc0ODE4MGQwMDAwMDAwMCwKKyAgICAweGMwZDJhZjI1MDAwMDAwMDAsIDB4MTEzYTQ4MmIwMDAwMDAwMCwgMHg2MjAzNjAzODAwMDAwMDAwLAorICAgIDB4YjNlYjg3MzYwMDAwMDAwMCwgMHgwYzM3MGY2OTAwMDAwMDAwLCAweGRkZGZlODY3MDAwMDAwMDAsCisgICAgMHhhZWU2YzA3NDAwMDAwMDAwLCAweDdmMGUyNzdhMDAwMDAwMDAsIDB4NDg5NDkwNTIwMDAwMDAwMCwKKyAgICAweDk5N2M3NzVjMDAwMDAwMDAsIDB4ZWE0NTVmNGYwMDAwMDAwMCwgMHgzYmFkYjg0MTAwMDAwMDAwLAorICAgIDB4OTRmYzRlZjAwMDAwMDAwMCwgMHg0NTE0YTlmZTAwMDAwMDAwLCAweDM2MmQ4MWVkMDAwMDAwMDAsCisgICAgMHhlN2M1NjZlMzAwMDAwMDAwLCAweGQwNWZkMWNiMDAwMDAwMDAsIDB4MDFiNzM2YzUwMDAwMDAwMCwKKyAgICAweDcyOGUxZWQ2MDAwMDAwMDAsIDB4YTM2NmY5ZDgwMDAwMDAwMCwgMHgxY2JhNzE4NzAwMDAwMDAwLAorICAgIDB4Y2Q1Mjk2ODkwMDAwMDAwMCwgMHhiZTZiYmU5YTAwMDAwMDAwLCAweDZmODM1OTk0MDAwMDAwMDAsCisgICAgMHg1ODE5ZWViYzAwMDAwMDAwLCAweDg5ZjEwOWIyMDAwMDAwMDAsIDB4ZmFjODIxYTEwMDAwMDAwMCwKKyAgICAweDJiMjBjNmFmMDAwMDAwMDAsIDB4ZTU2ZGJjMTkwMDAwMDAwMCwgMHgzNDg1NWIxNzAwMDAwMDAwLAorICAgIDB4NDdiYzczMDQwMDAwMDAwMCwgMHg5NjU0OTQwYTAwMDAwMDAwLCAweGExY2UyMzIyMDAwMDAwMDAsCisgICAgMHg3MDI2YzQyYzAwMDAwMDAwLCAweDAzMWZlYzNmMDAwMDAwMDAsIDB4ZDJmNzBiMzEwMDAwMDAwMCwKKyAgICAweDZkMmI4MzZlMDAwMDAwMDAsIDB4YmNjMzY0NjAwMDAwMDAwMCwgMHhjZmZhNGM3MzAwMDAwMDAwLAorICAgIDB4MWUxMmFiN2QwMDAwMDAwMCwgMHgyOTg4MWM1NTAwMDAwMDAwLCAweGY4NjBmYjViMDAwMDAwMDAsCisgICAgMHg4YjU5ZDM0ODAwMDAwMDAwLCAweDVhYjEzNDQ2MDAwMDAwMDAsIDB4ZjVlMGMyZjcwMDAwMDAwMCwKKyAgICAweDI0MDgyNWY5MDAwMDAwMDAsIDB4NTczMTBkZWEwMDAwMDAwMCwgMHg4NmQ5ZWFlNDAwMDAwMDAwLAorICAgIDB4YjE0MzVkY2MwMDAwMDAwMCwgMHg2MGFiYmFjMjAwMDAwMDAwLCAweDEzOTI5MmQxMDAwMDAwMDAsCisgICAgMHhjMjdhNzVkZjAwMDAwMDAwLCAweDdkYTZmZDgwMDAwMDAwMDAsIDB4YWM0ZTFhOGUwMDAwMDAwMCwKKyAgICAweGRmNzczMjlkMDAwMDAwMDAsIDB4MGU5ZmQ1OTMwMDAwMDAwMCwgMHgzOTA1NjJiYjAwMDAwMDAwLAorICAgIDB4ZThlZDg1YjUwMDAwMDAwMCwgMHg5YmQ0YWRhNjAwMDAwMDAwLCAweDRhM2M0YWE4MDAwMDAwMDAsCisgICAgMHg0NjQ5MjgxMTAwMDAwMDAwLCAweDk3YTFjZjFmMDAwMDAwMDAsIDB4ZTQ5OGU3MGMwMDAwMDAwMCwKKyAgICAweDM1NzAwMDAyMDAwMDAwMDAsIDB4MDJlYWI3MmEwMDAwMDAwMCwgMHhkMzAyNTAyNDAwMDAwMDAwLAorICAgIDB4YTAzYjc4MzcwMDAwMDAwMCwgMHg3MWQzOWYzOTAwMDAwMDAwLCAweGNlMGYxNzY2MDAwMDAwMDAsCisgICAgMHgxZmU3ZjA2ODAwMDAwMDAwLCAweDZjZGVkODdiMDAwMDAwMDAsIDB4YmQzNjNmNzUwMDAwMDAwMCwKKyAgICAweDhhYWM4ODVkMDAwMDAwMDAsIDB4NWI0NDZmNTMwMDAwMDAwMCwgMHgyODdkNDc0MDAwMDAwMDAwLAorICAgIDB4Zjk5NWEwNGUwMDAwMDAwMCwgMHg1NmM0NTZmZjAwMDAwMDAwLCAweDg3MmNiMWYxMDAwMDAwMDAsCisgICAgMHhmNDE1OTllMjAwMDAwMDAwLCAweDI1ZmQ3ZWVjMDAwMDAwMDAsIDB4MTI2N2M5YzQwMDAwMDAwMCwKKyAgICAweGMzOGYyZWNhMDAwMDAwMDAsIDB4YjBiNjA2ZDkwMDAwMDAwMCwgMHg2MTVlZTFkNzAwMDAwMDAwLAorICAgIDB4ZGU4MjY5ODgwMDAwMDAwMCwgMHgwZjZhOGU4NjAwMDAwMDAwLCAweDdjNTNhNjk1MDAwMDAwMDAsCisgICAgMHhhZGJiNDE5YjAwMDAwMDAwLCAweDlhMjFmNmIzMDAwMDAwMDAsIDB4NGJjOTExYmQwMDAwMDAwMCwKKyAgICAweDM4ZjAzOWFlMDAwMDAwMDAsIDB4ZTkxOGRlYTAwMDAwMDAwMCwgMHgyNzU1YTQxNjAwMDAwMDAwLAorICAgIDB4ZjZiZDQzMTgwMDAwMDAwMCwgMHg4NTg0NmIwYjAwMDAwMDAwLCAweDU0NmM4YzA1MDAwMDAwMDAsCisgICAgMHg2M2Y2M2IyZDAwMDAwMDAwLCAweGIyMWVkYzIzMDAwMDAwMDAsIDB4YzEyN2Y0MzAwMDAwMDAwMCwKKyAgICAweDEwY2YxMzNlMDAwMDAwMDAsIDB4YWYxMzliNjEwMDAwMDAwMCwgMHg3ZWZiN2M2ZjAwMDAwMDAwLAorICAgIDB4MGRjMjU0N2MwMDAwMDAwMCwgMHhkYzJhYjM3MjAwMDAwMDAwLCAweGViYjAwNDVhMDAwMDAwMDAsCisgICAgMHgzYTU4ZTM1NDAwMDAwMDAwLCAweDQ5NjFjYjQ3MDAwMDAwMDAsIDB4OTg4OTJjNDkwMDAwMDAwMCwKKyAgICAweDM3ZDhkYWY4MDAwMDAwMDAsIDB4ZTYzMDNkZjYwMDAwMDAwMCwgMHg5NTA5MTVlNTAwMDAwMDAwLAorICAgIDB4NDRlMWYyZWIwMDAwMDAwMCwgMHg3MzdiNDVjMzAwMDAwMDAwLCAweGEyOTNhMmNkMDAwMDAwMDAsCisgICAgMHhkMWFhOGFkZTAwMDAwMDAwLCAweDAwNDI2ZGQwMDAwMDAwMDAsIDB4YmY5ZWU1OGYwMDAwMDAwMCwKKyAgICAweDZlNzYwMjgxMDAwMDAwMDAsIDB4MWQ0ZjJhOTIwMDAwMDAwMCwgMHhjY2E3Y2Q5YzAwMDAwMDAwLAorICAgIDB4ZmIzZDdhYjQwMDAwMDAwMCwgMHgyYWQ1OWRiYTAwMDAwMDAwLCAweDU5ZWNiNWE5MDAwMDAwMDAsCisgICAgMHg4ODA0NTJhNzAwMDAwMDAwfSwKKyAgIHsweDAwMDAwMDAwMDAwMDAwMDAsIDB4YWEwNWRhZjEwMDAwMDAwMCwgMHgxNTBkYzUzODAwMDAwMDAwLAorICAgIDB4YmYwODFmYzkwMDAwMDAwMCwgMHgyYTFhOGE3MTAwMDAwMDAwLCAweDgwMWY1MDgwMDAwMDAwMDAsCisgICAgMHgzZjE3NGY0OTAwMDAwMDAwLCAweDk1MTI5NWI4MDAwMDAwMDAsIDB4NTQzNDE0ZTMwMDAwMDAwMCwKKyAgICAweGZlMzFjZTEyMDAwMDAwMDAsIDB4NDEzOWQxZGIwMDAwMDAwMCwgMHhlYjNjMGIyYTAwMDAwMDAwLAorICAgIDB4N2UyZTllOTIwMDAwMDAwMCwgMHhkNDJiNDQ2MzAwMDAwMDAwLCAweDZiMjM1YmFhMDAwMDAwMDAsCisgICAgMHhjMTI2ODE1YjAwMDAwMDAwLCAweGU5NmU1OTFkMDAwMDAwMDAsIDB4NDM2YjgzZWMwMDAwMDAwMCwKKyAgICAweGZjNjM5YzI1MDAwMDAwMDAsIDB4NTY2NjQ2ZDQwMDAwMDAwMCwgMHhjMzc0ZDM2YzAwMDAwMDAwLAorICAgIDB4Njk3MTA5OWQwMDAwMDAwMCwgMHhkNjc5MTY1NDAwMDAwMDAwLCAweDdjN2NjY2E1MDAwMDAwMDAsCisgICAgMHhiZDVhNGRmZTAwMDAwMDAwLCAweDE3NWY5NzBmMDAwMDAwMDAsIDB4YTg1Nzg4YzYwMDAwMDAwMCwKKyAgICAweDAyNTI1MjM3MDAwMDAwMDAsIDB4OTc0MGM3OGYwMDAwMDAwMCwgMHgzZDQ1MWQ3ZTAwMDAwMDAwLAorICAgIDB4ODI0ZDAyYjcwMDAwMDAwMCwgMHgyODQ4ZDg0NjAwMDAwMDAwLCAweGQyZGRiMjNhMDAwMDAwMDAsCisgICAgMHg3OGQ4NjhjYjAwMDAwMDAwLCAweGM3ZDA3NzAyMDAwMDAwMDAsIDB4NmRkNWFkZjMwMDAwMDAwMCwKKyAgICAweGY4YzczODRiMDAwMDAwMDAsIDB4NTJjMmUyYmEwMDAwMDAwMCwgMHhlZGNhZmQ3MzAwMDAwMDAwLAorICAgIDB4NDdjZjI3ODIwMDAwMDAwMCwgMHg4NmU5YTZkOTAwMDAwMDAwLCAweDJjZWM3YzI4MDAwMDAwMDAsCisgICAgMHg5M2U0NjNlMTAwMDAwMDAwLCAweDM5ZTFiOTEwMDAwMDAwMDAsIDB4YWNmMzJjYTgwMDAwMDAwMCwKKyAgICAweDA2ZjZmNjU5MDAwMDAwMDAsIDB4YjlmZWU5OTAwMDAwMDAwMCwgMHgxM2ZiMzM2MTAwMDAwMDAwLAorICAgIDB4M2JiM2ViMjcwMDAwMDAwMCwgMHg5MWI2MzFkNjAwMDAwMDAwLCAweDJlYmUyZTFmMDAwMDAwMDAsCisgICAgMHg4NGJiZjRlZTAwMDAwMDAwLCAweDExYTk2MTU2MDAwMDAwMDAsIDB4YmJhY2JiYTcwMDAwMDAwMCwKKyAgICAweDA0YTRhNDZlMDAwMDAwMDAsIDB4YWVhMTdlOWYwMDAwMDAwMCwgMHg2Zjg3ZmZjNDAwMDAwMDAwLAorICAgIDB4YzU4MjI1MzUwMDAwMDAwMCwgMHg3YThhM2FmYzAwMDAwMDAwLCAweGQwOGZlMDBkMDAwMDAwMDAsCisgICAgMHg0NTlkNzViNTAwMDAwMDAwLCAweGVmOThhZjQ0MDAwMDAwMDAsIDB4NTA5MGIwOGQwMDAwMDAwMCwKKyAgICAweGZhOTU2YTdjMDAwMDAwMDAsIDB4YTRiYjY1NzUwMDAwMDAwMCwgMHgwZWJlYmY4NDAwMDAwMDAwLAorICAgIDB4YjFiNmEwNGQwMDAwMDAwMCwgMHgxYmIzN2FiYzAwMDAwMDAwLCAweDhlYTFlZjA0MDAwMDAwMDAsCisgICAgMHgyNGE0MzVmNTAwMDAwMDAwLCAweDliYWMyYTNjMDAwMDAwMDAsIDB4MzFhOWYwY2QwMDAwMDAwMCwKKyAgICAweGYwOGY3MTk2MDAwMDAwMDAsIDB4NWE4YWFiNjcwMDAwMDAwMCwgMHhlNTgyYjRhZTAwMDAwMDAwLAorICAgIDB4NGY4NzZlNWYwMDAwMDAwMCwgMHhkYTk1ZmJlNzAwMDAwMDAwLCAweDcwOTAyMTE2MDAwMDAwMDAsCisgICAgMHhjZjk4M2VkZjAwMDAwMDAwLCAweDY1OWRlNDJlMDAwMDAwMDAsIDB4NGRkNTNjNjgwMDAwMDAwMCwKKyAgICAweGU3ZDBlNjk5MDAwMDAwMDAsIDB4NThkOGY5NTAwMDAwMDAwMCwgMHhmMmRkMjNhMTAwMDAwMDAwLAorICAgIDB4NjdjZmI2MTkwMDAwMDAwMCwgMHhjZGNhNmNlODAwMDAwMDAwLCAweDcyYzI3MzIxMDAwMDAwMDAsCisgICAgMHhkOGM3YTlkMDAwMDAwMDAwLCAweDE5ZTEyODhiMDAwMDAwMDAsIDB4YjNlNGYyN2EwMDAwMDAwMCwKKyAgICAweDBjZWNlZGIzMDAwMDAwMDAsIDB4YTZlOTM3NDIwMDAwMDAwMCwgMHgzM2ZiYTJmYTAwMDAwMDAwLAorICAgIDB4OTlmZTc4MGIwMDAwMDAwMCwgMHgyNmY2NjdjMjAwMDAwMDAwLCAweDhjZjNiZDMzMDAwMDAwMDAsCisgICAgMHg3NjY2ZDc0ZjAwMDAwMDAwLCAweGRjNjMwZGJlMDAwMDAwMDAsIDB4NjM2YjEyNzcwMDAwMDAwMCwKKyAgICAweGM5NmVjODg2MDAwMDAwMDAsIDB4NWM3YzVkM2UwMDAwMDAwMCwgMHhmNjc5ODdjZjAwMDAwMDAwLAorICAgIDB4NDk3MTk4MDYwMDAwMDAwMCwgMHhlMzc0NDJmNzAwMDAwMDAwLCAweDIyNTJjM2FjMDAwMDAwMDAsCisgICAgMHg4ODU3MTk1ZDAwMDAwMDAwLCAweDM3NWYwNjk0MDAwMDAwMDAsIDB4OWQ1YWRjNjUwMDAwMDAwMCwKKyAgICAweDA4NDg0OWRkMDAwMDAwMDAsIDB4YTI0ZDkzMmMwMDAwMDAwMCwgMHgxZDQ1OGNlNTAwMDAwMDAwLAorICAgIDB4Yjc0MDU2MTQwMDAwMDAwMCwgMHg5ZjA4OGU1MjAwMDAwMDAwLCAweDM1MGQ1NGEzMDAwMDAwMDAsCisgICAgMHg4YTA1NGI2YTAwMDAwMDAwLCAweDIwMDA5MTliMDAwMDAwMDAsIDB4YjUxMjA0MjMwMDAwMDAwMCwKKyAgICAweDFmMTdkZWQyMDAwMDAwMDAsIDB4YTAxZmMxMWIwMDAwMDAwMCwgMHgwYTFhMWJlYTAwMDAwMDAwLAorICAgIDB4Y2IzYzlhYjEwMDAwMDAwMCwgMHg2MTM5NDA0MDAwMDAwMDAwLCAweGRlMzE1Zjg5MDAwMDAwMDAsCisgICAgMHg3NDM0ODU3ODAwMDAwMDAwLCAweGUxMjYxMGMwMDAwMDAwMDAsIDB4NGIyM2NhMzEwMDAwMDAwMCwKKyAgICAweGY0MmJkNWY4MDAwMDAwMDAsIDB4NWUyZTBmMDkwMDAwMDAwMCwgMHg0ODc3Y2JlYTAwMDAwMDAwLAorICAgIDB4ZTI3MjExMWIwMDAwMDAwMCwgMHg1ZDdhMGVkMjAwMDAwMDAwLCAweGY3N2ZkNDIzMDAwMDAwMDAsCisgICAgMHg2MjZkNDE5YjAwMDAwMDAwLCAweGM4Njg5YjZhMDAwMDAwMDAsIDB4Nzc2MDg0YTMwMDAwMDAwMCwKKyAgICAweGRkNjU1ZTUyMDAwMDAwMDAsIDB4MWM0M2RmMDkwMDAwMDAwMCwgMHhiNjQ2MDVmODAwMDAwMDAwLAorICAgIDB4MDk0ZTFhMzEwMDAwMDAwMCwgMHhhMzRiYzBjMDAwMDAwMDAwLCAweDM2NTk1NTc4MDAwMDAwMDAsCisgICAgMHg5YzVjOGY4OTAwMDAwMDAwLCAweDIzNTQ5MDQwMDAwMDAwMDAsIDB4ODk1MTRhYjEwMDAwMDAwMCwKKyAgICAweGExMTk5MmY3MDAwMDAwMDAsIDB4MGIxYzQ4MDYwMDAwMDAwMCwgMHhiNDE0NTdjZjAwMDAwMDAwLAorICAgIDB4MWUxMThkM2UwMDAwMDAwMCwgMHg4YjAzMTg4NjAwMDAwMDAwLCAweDIxMDZjMjc3MDAwMDAwMDAsCisgICAgMHg5ZTBlZGRiZTAwMDAwMDAwLCAweDM0MGIwNzRmMDAwMDAwMDAsIDB4ZjUyZDg2MTQwMDAwMDAwMCwKKyAgICAweDVmMjg1Y2U1MDAwMDAwMDAsIDB4ZTAyMDQzMmMwMDAwMDAwMCwgMHg0YTI1OTlkZDAwMDAwMDAwLAorICAgIDB4ZGYzNzBjNjUwMDAwMDAwMCwgMHg3NTMyZDY5NDAwMDAwMDAwLCAweGNhM2FjOTVkMDAwMDAwMDAsCisgICAgMHg2MDNmMTNhYzAwMDAwMDAwLCAweDlhYWE3OWQwMDAwMDAwMDAsIDB4MzBhZmEzMjEwMDAwMDAwMCwKKyAgICAweDhmYTdiY2U4MDAwMDAwMDAsIDB4MjVhMjY2MTkwMDAwMDAwMCwgMHhiMGIwZjNhMTAwMDAwMDAwLAorICAgIDB4MWFiNTI5NTAwMDAwMDAwMCwgMHhhNWJkMzY5OTAwMDAwMDAwLCAweDBmYjhlYzY4MDAwMDAwMDAsCisgICAgMHhjZTllNmQzMzAwMDAwMDAwLCAweDY0OWJiN2MyMDAwMDAwMDAsIDB4ZGI5M2E4MGIwMDAwMDAwMCwKKyAgICAweDcxOTY3MmZhMDAwMDAwMDAsIDB4ZTQ4NGU3NDIwMDAwMDAwMCwgMHg0ZTgxM2RiMzAwMDAwMDAwLAorICAgIDB4ZjE4OTIyN2EwMDAwMDAwMCwgMHg1YjhjZjg4YjAwMDAwMDAwLCAweDczYzQyMGNkMDAwMDAwMDAsCisgICAgMHhkOWMxZmEzYzAwMDAwMDAwLCAweDY2YzllNWY1MDAwMDAwMDAsIDB4Y2NjYzNmMDQwMDAwMDAwMCwKKyAgICAweDU5ZGVhYWJjMDAwMDAwMDAsIDB4ZjNkYjcwNGQwMDAwMDAwMCwgMHg0Y2QzNmY4NDAwMDAwMDAwLAorICAgIDB4ZTZkNmI1NzUwMDAwMDAwMCwgMHgyN2YwMzQyZTAwMDAwMDAwLCAweDhkZjVlZWRmMDAwMDAwMDAsCisgICAgMHgzMmZkZjExNjAwMDAwMDAwLCAweDk4ZjgyYmU3MDAwMDAwMDAsIDB4MGRlYWJlNWYwMDAwMDAwMCwKKyAgICAweGE3ZWY2NGFlMDAwMDAwMDAsIDB4MThlNzdiNjcwMDAwMDAwMCwgMHhiMmUyYTE5NjAwMDAwMDAwLAorICAgIDB4ZWNjY2FlOWYwMDAwMDAwMCwgMHg0NmM5NzQ2ZTAwMDAwMDAwLCAweGY5YzE2YmE3MDAwMDAwMDAsCisgICAgMHg1M2M0YjE1NjAwMDAwMDAwLCAweGM2ZDYyNGVlMDAwMDAwMDAsIDB4NmNkM2ZlMWYwMDAwMDAwMCwKKyAgICAweGQzZGJlMWQ2MDAwMDAwMDAsIDB4NzlkZTNiMjcwMDAwMDAwMCwgMHhiOGY4YmE3YzAwMDAwMDAwLAorICAgIDB4MTJmZDYwOGQwMDAwMDAwMCwgMHhhZGY1N2Y0NDAwMDAwMDAwLCAweDA3ZjBhNWI1MDAwMDAwMDAsCisgICAgMHg5MmUyMzAwZDAwMDAwMDAwLCAweDM4ZTdlYWZjMDAwMDAwMDAsIDB4ODdlZmY1MzUwMDAwMDAwMCwKKyAgICAweDJkZWEyZmM0MDAwMDAwMDAsIDB4MDVhMmY3ODIwMDAwMDAwMCwgMHhhZmE3MmQ3MzAwMDAwMDAwLAorICAgIDB4MTBhZjMyYmEwMDAwMDAwMCwgMHhiYWFhZTg0YjAwMDAwMDAwLCAweDJmYjg3ZGYzMDAwMDAwMDAsCisgICAgMHg4NWJkYTcwMjAwMDAwMDAwLCAweDNhYjViOGNiMDAwMDAwMDAsIDB4OTBiMDYyM2EwMDAwMDAwMCwKKyAgICAweDUxOTZlMzYxMDAwMDAwMDAsIDB4ZmI5MzM5OTAwMDAwMDAwMCwgMHg0NDliMjY1OTAwMDAwMDAwLAorICAgIDB4ZWU5ZWZjYTgwMDAwMDAwMCwgMHg3YjhjNjkxMDAwMDAwMDAwLCAweGQxODliM2UxMDAwMDAwMDAsCisgICAgMHg2ZTgxYWMyODAwMDAwMDAwLCAweGM0ODQ3NmQ5MDAwMDAwMDAsIDB4M2UxMTFjYTUwMDAwMDAwMCwKKyAgICAweDk0MTRjNjU0MDAwMDAwMDAsIDB4MmIxY2Q5OWQwMDAwMDAwMCwgMHg4MTE5MDM2YzAwMDAwMDAwLAorICAgIDB4MTQwYjk2ZDQwMDAwMDAwMCwgMHhiZTBlNGMyNTAwMDAwMDAwLCAweDAxMDY1M2VjMDAwMDAwMDAsCisgICAgMHhhYjAzODkxZDAwMDAwMDAwLCAweDZhMjUwODQ2MDAwMDAwMDAsIDB4YzAyMGQyYjcwMDAwMDAwMCwKKyAgICAweDdmMjhjZDdlMDAwMDAwMDAsIDB4ZDUyZDE3OGYwMDAwMDAwMCwgMHg0MDNmODIzNzAwMDAwMDAwLAorICAgIDB4ZWEzYTU4YzYwMDAwMDAwMCwgMHg1NTMyNDcwZjAwMDAwMDAwLCAweGZmMzc5ZGZlMDAwMDAwMDAsCisgICAgMHhkNzdmNDViODAwMDAwMDAwLCAweDdkN2E5ZjQ5MDAwMDAwMDAsIDB4YzI3MjgwODAwMDAwMDAwMCwKKyAgICAweDY4Nzc1YTcxMDAwMDAwMDAsIDB4ZmQ2NWNmYzkwMDAwMDAwMCwgMHg1NzYwMTUzODAwMDAwMDAwLAorICAgIDB4ZTg2ODBhZjEwMDAwMDAwMCwgMHg0MjZkZDAwMDAwMDAwMDAwLCAweDgzNGI1MTViMDAwMDAwMDAsCisgICAgMHgyOTRlOGJhYTAwMDAwMDAwLCAweDk2NDY5NDYzMDAwMDAwMDAsIDB4M2M0MzRlOTIwMDAwMDAwMCwKKyAgICAweGE5NTFkYjJhMDAwMDAwMDAsIDB4MDM1NDAxZGIwMDAwMDAwMCwgMHhiYzVjMWUxMjAwMDAwMDAwLAorICAgIDB4MTY1OWM0ZTMwMDAwMDAwMH19OworCisjZWxzZSAvKiBXID09IDQgKi8KKworbG9jYWwgY29uc3Qgel9jcmNfdCBGQVIgY3JjX2JyYWlkX3RhYmxlW11bMjU2XSA9IHsKKyAgIHsweDAwMDAwMDAwLCAweGFlNjg5MTkxLCAweDg3YTAyNTYzLCAweDI5YzhiNGYyLCAweGQ0MzE0Yzg3LAorICAgIDB4N2E1OWRkMTYsIDB4NTM5MTY5ZTQsIDB4ZmRmOWY4NzUsIDB4NzMxMzlmNGYsIDB4ZGQ3YjBlZGUsCisgICAgMHhmNGIzYmEyYywgMHg1YWRiMmJiZCwgMHhhNzIyZDNjOCwgMHgwOTRhNDI1OSwgMHgyMDgyZjZhYiwKKyAgICAweDhlZWE2NzNhLCAweGU2MjczZTllLCAweDQ4NGZhZjBmLCAweDYxODcxYmZkLCAweGNmZWY4YTZjLAorICAgIDB4MzIxNjcyMTksIDB4OWM3ZWUzODgsIDB4YjViNjU3N2EsIDB4MWJkZWM2ZWIsIDB4OTUzNGExZDEsCisgICAgMHgzYjVjMzA0MCwgMHgxMjk0ODRiMiwgMHhiY2ZjMTUyMywgMHg0MTA1ZWQ1NiwgMHhlZjZkN2NjNywKKyAgICAweGM2YTVjODM1LCAweDY4Y2Q1OWE0LCAweDE3M2Y3YjdkLCAweGI5NTdlYWVjLCAweDkwOWY1ZTFlLAorICAgIDB4M2VmN2NmOGYsIDB4YzMwZTM3ZmEsIDB4NmQ2NmE2NmIsIDB4NDRhZTEyOTksIDB4ZWFjNjgzMDgsCisgICAgMHg2NDJjZTQzMiwgMHhjYTQ0NzVhMywgMHhlMzhjYzE1MSwgMHg0ZGU0NTBjMCwgMHhiMDFkYThiNSwKKyAgICAweDFlNzUzOTI0LCAweDM3YmQ4ZGQ2LCAweDk5ZDUxYzQ3LCAweGYxMTg0NWUzLCAweDVmNzBkNDcyLAorICAgIDB4NzZiODYwODAsIDB4ZDhkMGYxMTEsIDB4MjUyOTA5NjQsIDB4OGI0MTk4ZjUsIDB4YTI4OTJjMDcsCisgICAgMHgwY2UxYmQ5NiwgMHg4MjBiZGFhYywgMHgyYzYzNGIzZCwgMHgwNWFiZmZjZiwgMHhhYmMzNmU1ZSwKKyAgICAweDU2M2E5NjJiLCAweGY4NTIwN2JhLCAweGQxOWFiMzQ4LCAweDdmZjIyMmQ5LCAweDJlN2VmNmZhLAorICAgIDB4ODAxNjY3NmIsIDB4YTlkZWQzOTksIDB4MDdiNjQyMDgsIDB4ZmE0ZmJhN2QsIDB4NTQyNzJiZWMsCisgICAgMHg3ZGVmOWYxZSwgMHhkMzg3MGU4ZiwgMHg1ZDZkNjliNSwgMHhmMzA1ZjgyNCwgMHhkYWNkNGNkNiwKKyAgICAweDc0YTVkZDQ3LCAweDg5NWMyNTMyLCAweDI3MzRiNGEzLCAweDBlZmMwMDUxLCAweGEwOTQ5MWMwLAorICAgIDB4Yzg1OWM4NjQsIDB4NjYzMTU5ZjUsIDB4NGZmOWVkMDcsIDB4ZTE5MTdjOTYsIDB4MWM2ODg0ZTMsCisgICAgMHhiMjAwMTU3MiwgMHg5YmM4YTE4MCwgMHgzNWEwMzAxMSwgMHhiYjRhNTcyYiwgMHgxNTIyYzZiYSwKKyAgICAweDNjZWE3MjQ4LCAweDkyODJlM2Q5LCAweDZmN2IxYmFjLCAweGMxMTM4YTNkLCAweGU4ZGIzZWNmLAorICAgIDB4NDZiM2FmNWUsIDB4Mzk0MThkODcsIDB4OTcyOTFjMTYsIDB4YmVlMWE4ZTQsIDB4MTA4OTM5NzUsCisgICAgMHhlZDcwYzEwMCwgMHg0MzE4NTA5MSwgMHg2YWQwZTQ2MywgMHhjNGI4NzVmMiwgMHg0YTUyMTJjOCwKKyAgICAweGU0M2E4MzU5LCAweGNkZjIzN2FiLCAweDYzOWFhNjNhLCAweDllNjM1ZTRmLCAweDMwMGJjZmRlLAorICAgIDB4MTljMzdiMmMsIDB4YjdhYmVhYmQsIDB4ZGY2NmIzMTksIDB4NzEwZTIyODgsIDB4NThjNjk2N2EsCisgICAgMHhmNmFlMDdlYiwgMHgwYjU3ZmY5ZSwgMHhhNTNmNmUwZiwgMHg4Y2Y3ZGFmZCwgMHgyMjlmNGI2YywKKyAgICAweGFjNzUyYzU2LCAweDAyMWRiZGM3LCAweDJiZDUwOTM1LCAweDg1YmQ5OGE0LCAweDc4NDQ2MGQxLAorICAgIDB4ZDYyY2YxNDAsIDB4ZmZlNDQ1YjIsIDB4NTE4Y2Q0MjMsIDB4NWNmZGVkZjQsIDB4ZjI5NTdjNjUsCisgICAgMHhkYjVkYzg5NywgMHg3NTM1NTkwNiwgMHg4OGNjYTE3MywgMHgyNmE0MzBlMiwgMHgwZjZjODQxMCwKKyAgICAweGExMDQxNTgxLCAweDJmZWU3MmJiLCAweDgxODZlMzJhLCAweGE4NGU1N2Q4LCAweDA2MjZjNjQ5LAorICAgIDB4ZmJkZjNlM2MsIDB4NTViN2FmYWQsIDB4N2M3ZjFiNWYsIDB4ZDIxNzhhY2UsIDB4YmFkYWQzNmEsCisgICAgMHgxNGIyNDJmYiwgMHgzZDdhZjYwOSwgMHg5MzEyNjc5OCwgMHg2ZWViOWZlZCwgMHhjMDgzMGU3YywKKyAgICAweGU5NGJiYThlLCAweDQ3MjMyYjFmLCAweGM5Yzk0YzI1LCAweDY3YTFkZGI0LCAweDRlNjk2OTQ2LAorICAgIDB4ZTAwMWY4ZDcsIDB4MWRmODAwYTIsIDB4YjM5MDkxMzMsIDB4OWE1ODI1YzEsIDB4MzQzMGI0NTAsCisgICAgMHg0YmMyOTY4OSwgMHhlNWFhMDcxOCwgMHhjYzYyYjNlYSwgMHg2MjBhMjI3YiwgMHg5ZmYzZGEwZSwKKyAgICAweDMxOWI0YjlmLCAweDE4NTNmZjZkLCAweGI2M2I2ZWZjLCAweDM4ZDEwOWM2LCAweDk2Yjk5ODU3LAorICAgIDB4YmY3MTJjYTUsIDB4MTExOWJkMzQsIDB4ZWNlMDQ1NDEsIDB4NDI4OGQ0ZDAsIDB4NmI0MDYwMjIsCisgICAgMHhjNTI4ZjFiMywgMHhhZGU1YTgxNywgMHgwMzhkMzk4NiwgMHgyYTQ1OGQ3NCwgMHg4NDJkMWNlNSwKKyAgICAweDc5ZDRlNDkwLCAweGQ3YmM3NTAxLCAweGZlNzRjMWYzLCAweDUwMWM1MDYyLCAweGRlZjYzNzU4LAorICAgIDB4NzA5ZWE2YzksIDB4NTk1NjEyM2IsIDB4ZjczZTgzYWEsIDB4MGFjNzdiZGYsIDB4YTRhZmVhNGUsCisgICAgMHg4ZDY3NWViYywgMHgyMzBmY2YyZCwgMHg3MjgzMWIwZSwgMHhkY2ViOGE5ZiwgMHhmNTIzM2U2ZCwKKyAgICAweDViNGJhZmZjLCAweGE2YjI1Nzg5LCAweDA4ZGFjNjE4LCAweDIxMTI3MmVhLCAweDhmN2FlMzdiLAorICAgIDB4MDE5MDg0NDEsIDB4YWZmODE1ZDAsIDB4ODYzMGExMjIsIDB4Mjg1ODMwYjMsIDB4ZDVhMWM4YzYsCisgICAgMHg3YmM5NTk1NywgMHg1MjAxZWRhNSwgMHhmYzY5N2MzNCwgMHg5NGE0MjU5MCwgMHgzYWNjYjQwMSwKKyAgICAweDEzMDQwMGYzLCAweGJkNmM5MTYyLCAweDQwOTU2OTE3LCAweGVlZmRmODg2LCAweGM3MzU0Yzc0LAorICAgIDB4Njk1ZGRkZTUsIDB4ZTdiN2JhZGYsIDB4NDlkZjJiNGUsIDB4NjAxNzlmYmMsIDB4Y2U3ZjBlMmQsCisgICAgMHgzMzg2ZjY1OCwgMHg5ZGVlNjdjOSwgMHhiNDI2ZDMzYiwgMHgxYTRlNDJhYSwgMHg2NWJjNjA3MywKKyAgICAweGNiZDRmMWUyLCAweGUyMWM0NTEwLCAweDRjNzRkNDgxLCAweGIxOGQyY2Y0LCAweDFmZTViZDY1LAorICAgIDB4MzYyZDA5OTcsIDB4OTg0NTk4MDYsIDB4MTZhZmZmM2MsIDB4YjhjNzZlYWQsIDB4OTEwZmRhNWYsCisgICAgMHgzZjY3NGJjZSwgMHhjMjllYjNiYiwgMHg2Y2Y2MjIyYSwgMHg0NTNlOTZkOCwgMHhlYjU2MDc0OSwKKyAgICAweDgzOWI1ZWVkLCAweDJkZjNjZjdjLCAweDA0M2I3YjhlLCAweGFhNTNlYTFmLCAweDU3YWExMjZhLAorICAgIDB4ZjljMjgzZmIsIDB4ZDAwYTM3MDksIDB4N2U2MmE2OTgsIDB4ZjA4OGMxYTIsIDB4NWVlMDUwMzMsCisgICAgMHg3NzI4ZTRjMSwgMHhkOTQwNzU1MCwgMHgyNGI5OGQyNSwgMHg4YWQxMWNiNCwgMHhhMzE5YTg0NiwKKyAgICAweDBkNzEzOWQ3fSwKKyAgIHsweDAwMDAwMDAwLCAweGI5ZmJkYmU4LCAweGE4ODZiMTkxLCAweDExN2Q2YTc5LCAweDhhN2M2NTYzLAorICAgIDB4MzM4N2JlOGIsIDB4MjJmYWQ0ZjIsIDB4OWIwMTBmMWEsIDB4Y2Y4OWNjODcsIDB4NzY3MjE3NmYsCisgICAgMHg2NzBmN2QxNiwgMHhkZWY0YTZmZSwgMHg0NWY1YTllNCwgMHhmYzBlNzIwYywgMHhlZDczMTg3NSwKKyAgICAweDU0ODhjMzlkLCAweDQ0NjI5ZjRmLCAweGZkOTk0NGE3LCAweGVjZTQyZWRlLCAweDU1MWZmNTM2LAorICAgIDB4Y2UxZWZhMmMsIDB4NzdlNTIxYzQsIDB4NjY5ODRiYmQsIDB4ZGY2MzkwNTUsIDB4OGJlYjUzYzgsCisgICAgMHgzMjEwODgyMCwgMHgyMzZkZTI1OSwgMHg5YTk2MzliMSwgMHgwMTk3MzZhYiwgMHhiODZjZWQ0MywKKyAgICAweGE5MTE4NzNhLCAweDEwZWE1Y2QyLCAweDg4YzUzZTllLCAweDMxM2VlNTc2LCAweDIwNDM4ZjBmLAorICAgIDB4OTliODU0ZTcsIDB4MDJiOTViZmQsIDB4YmI0MjgwMTUsIDB4YWEzZmVhNmMsIDB4MTNjNDMxODQsCisgICAgMHg0NzRjZjIxOSwgMHhmZWI3MjlmMSwgMHhlZmNhNDM4OCwgMHg1NjMxOTg2MCwgMHhjZDMwOTc3YSwKKyAgICAweDc0Y2I0YzkyLCAweDY1YjYyNmViLCAweGRjNGRmZDAzLCAweGNjYTdhMWQxLCAweDc1NWM3YTM5LAorICAgIDB4NjQyMTEwNDAsIDB4ZGRkYWNiYTgsIDB4NDZkYmM0YjIsIDB4ZmYyMDFmNWEsIDB4ZWU1ZDc1MjMsCisgICAgMHg1N2E2YWVjYiwgMHgwMzJlNmQ1NiwgMHhiYWQ1YjZiZSwgMHhhYmE4ZGNjNywgMHgxMjUzMDcyZiwKKyAgICAweDg5NTIwODM1LCAweDMwYTlkM2RkLCAweDIxZDRiOWE0LCAweDk4MmY2MjRjLCAweGNhZmI3YjdkLAorICAgIDB4NzMwMGEwOTUsIDB4NjI3ZGNhZWMsIDB4ZGI4NjExMDQsIDB4NDA4NzFlMWUsIDB4Zjk3Y2M1ZjYsCisgICAgMHhlODAxYWY4ZiwgMHg1MWZhNzQ2NywgMHgwNTcyYjdmYSwgMHhiYzg5NmMxMiwgMHhhZGY0MDY2YiwKKyAgICAweDE0MGZkZDgzLCAweDhmMGVkMjk5LCAweDM2ZjUwOTcxLCAweDI3ODg2MzA4LCAweDllNzNiOGUwLAorICAgIDB4OGU5OWU0MzIsIDB4Mzc2MjNmZGEsIDB4MjYxZjU1YTMsIDB4OWZlNDhlNGIsIDB4MDRlNTgxNTEsCisgICAgMHhiZDFlNWFiOSwgMHhhYzYzMzBjMCwgMHgxNTk4ZWIyOCwgMHg0MTEwMjhiNSwgMHhmOGViZjM1ZCwKKyAgICAweGU5OTY5OTI0LCAweDUwNmQ0MmNjLCAweGNiNmM0ZGQ2LCAweDcyOTc5NjNlLCAweDYzZWFmYzQ3LAorICAgIDB4ZGExMTI3YWYsIDB4NDIzZTQ1ZTMsIDB4ZmJjNTllMGIsIDB4ZWFiOGY0NzIsIDB4NTM0MzJmOWEsCisgICAgMHhjODQyMjA4MCwgMHg3MWI5ZmI2OCwgMHg2MGM0OTExMSwgMHhkOTNmNGFmOSwgMHg4ZGI3ODk2NCwKKyAgICAweDM0NGM1MjhjLCAweDI1MzEzOGY1LCAweDljY2FlMzFkLCAweDA3Y2JlYzA3LCAweGJlMzAzN2VmLAorICAgIDB4YWY0ZDVkOTYsIDB4MTZiNjg2N2UsIDB4MDY1Y2RhYWMsIDB4YmZhNzAxNDQsIDB4YWVkYTZiM2QsCisgICAgMHgxNzIxYjBkNSwgMHg4YzIwYmZjZiwgMHgzNWRiNjQyNywgMHgyNGE2MGU1ZSwgMHg5ZDVkZDViNiwKKyAgICAweGM5ZDUxNjJiLCAweDcwMmVjZGMzLCAweDYxNTNhN2JhLCAweGQ4YTg3YzUyLCAweDQzYTk3MzQ4LAorICAgIDB4ZmE1MmE4YTAsIDB4ZWIyZmMyZDksIDB4NTJkNDE5MzEsIDB4NGU4N2YwYmIsIDB4Zjc3YzJiNTMsCisgICAgMHhlNjAxNDEyYSwgMHg1ZmZhOWFjMiwgMHhjNGZiOTVkOCwgMHg3ZDAwNGUzMCwgMHg2YzdkMjQ0OSwKKyAgICAweGQ1ODZmZmExLCAweDgxMGUzYzNjLCAweDM4ZjVlN2Q0LCAweDI5ODg4ZGFkLCAweDkwNzM1NjQ1LAorICAgIDB4MGI3MjU5NWYsIDB4YjI4OTgyYjcsIDB4YTNmNGU4Y2UsIDB4MWEwZjMzMjYsIDB4MGFlNTZmZjQsCisgICAgMHhiMzFlYjQxYywgMHhhMjYzZGU2NSwgMHgxYjk4MDU4ZCwgMHg4MDk5MGE5NywgMHgzOTYyZDE3ZiwKKyAgICAweDI4MWZiYjA2LCAweDkxZTQ2MGVlLCAweGM1NmNhMzczLCAweDdjOTc3ODliLCAweDZkZWExMmUyLAorICAgIDB4ZDQxMWM5MGEsIDB4NGYxMGM2MTAsIDB4ZjZlYjFkZjgsIDB4ZTc5Njc3ODEsIDB4NWU2ZGFjNjksCisgICAgMHhjNjQyY2UyNSwgMHg3ZmI5MTVjZCwgMHg2ZWM0N2ZiNCwgMHhkNzNmYTQ1YywgMHg0YzNlYWI0NiwKKyAgICAweGY1YzU3MGFlLCAweGU0YjgxYWQ3LCAweDVkNDNjMTNmLCAweDA5Y2IwMmEyLCAweGIwMzBkOTRhLAorICAgIDB4YTE0ZGIzMzMsIDB4MThiNjY4ZGIsIDB4ODNiNzY3YzEsIDB4M2E0Y2JjMjksIDB4MmIzMWQ2NTAsCisgICAgMHg5MmNhMGRiOCwgMHg4MjIwNTE2YSwgMHgzYmRiOGE4MiwgMHgyYWE2ZTBmYiwgMHg5MzVkM2IxMywKKyAgICAweDA4NWMzNDA5LCAweGIxYTdlZmUxLCAweGEwZGE4NTk4LCAweDE5MjE1ZTcwLCAweDRkYTk5ZGVkLAorICAgIDB4ZjQ1MjQ2MDUsIDB4ZTUyZjJjN2MsIDB4NWNkNGY3OTQsIDB4YzdkNWY4OGUsIDB4N2UyZTIzNjYsCisgICAgMHg2ZjUzNDkxZiwgMHhkNmE4OTJmNywgMHg4NDdjOGJjNiwgMHgzZDg3NTAyZSwgMHgyY2ZhM2E1NywKKyAgICAweDk1MDFlMWJmLCAweDBlMDBlZWE1LCAweGI3ZmIzNTRkLCAweGE2ODY1ZjM0LCAweDFmN2Q4NGRjLAorICAgIDB4NGJmNTQ3NDEsIDB4ZjIwZTljYTksIDB4ZTM3M2Y2ZDAsIDB4NWE4ODJkMzgsIDB4YzE4OTIyMjIsCisgICAgMHg3ODcyZjljYSwgMHg2OTBmOTNiMywgMHhkMGY0NDg1YiwgMHhjMDFlMTQ4OSwgMHg3OWU1Y2Y2MSwKKyAgICAweDY4OThhNTE4LCAweGQxNjM3ZWYwLCAweDRhNjI3MWVhLCAweGYzOTlhYTAyLCAweGUyZTRjMDdiLAorICAgIDB4NWIxZjFiOTMsIDB4MGY5N2Q4MGUsIDB4YjY2YzAzZTYsIDB4YTcxMTY5OWYsIDB4MWVlYWIyNzcsCisgICAgMHg4NWViYmQ2ZCwgMHgzYzEwNjY4NSwgMHgyZDZkMGNmYywgMHg5NDk2ZDcxNCwgMHgwY2I5YjU1OCwKKyAgICAweGI1NDI2ZWIwLCAweGE0M2YwNGM5LCAweDFkYzRkZjIxLCAweDg2YzVkMDNiLCAweDNmM2UwYmQzLAorICAgIDB4MmU0MzYxYWEsIDB4OTdiOGJhNDIsIDB4YzMzMDc5ZGYsIDB4N2FjYmEyMzcsIDB4NmJiNmM4NGUsCisgICAgMHhkMjRkMTNhNiwgMHg0OTRjMWNiYywgMHhmMGI3Yzc1NCwgMHhlMWNhYWQyZCwgMHg1ODMxNzZjNSwKKyAgICAweDQ4ZGIyYTE3LCAweGYxMjBmMWZmLCAweGUwNWQ5Yjg2LCAweDU5YTY0MDZlLCAweGMyYTc0Zjc0LAorICAgIDB4N2I1Yzk0OWMsIDB4NmEyMWZlZTUsIDB4ZDNkYTI1MGQsIDB4ODc1MmU2OTAsIDB4M2VhOTNkNzgsCisgICAgMHgyZmQ0NTcwMSwgMHg5NjJmOGNlOSwgMHgwZDJlODNmMywgMHhiNGQ1NTgxYiwgMHhhNWE4MzI2MiwKKyAgICAweDFjNTNlOThhfSwKKyAgIHsweDAwMDAwMDAwLCAweDlkMGZlMTc2LCAweGUxNmVjNGFkLCAweDdjNjEyNWRiLCAweDE5YWM4ZjFiLAorICAgIDB4ODRhMzZlNmQsIDB4ZjhjMjRiYjYsIDB4NjVjZGFhYzAsIDB4MzM1OTFlMzYsIDB4YWU1NmZmNDAsCisgICAgMHhkMjM3ZGE5YiwgMHg0ZjM4M2JlZCwgMHgyYWY1OTEyZCwgMHhiN2ZhNzA1YiwgMHhjYjliNTU4MCwKKyAgICAweDU2OTRiNGY2LCAweDY2YjIzYzZjLCAweGZiYmRkZDFhLCAweDg3ZGNmOGMxLCAweDFhZDMxOWI3LAorICAgIDB4N2YxZWIzNzcsIDB4ZTIxMTUyMDEsIDB4OWU3MDc3ZGEsIDB4MDM3Zjk2YWMsIDB4NTVlYjIyNWEsCisgICAgMHhjOGU0YzMyYywgMHhiNDg1ZTZmNywgMHgyOThhMDc4MSwgMHg0YzQ3YWQ0MSwgMHhkMTQ4NGMzNywKKyAgICAweGFkMjk2OWVjLCAweDMwMjY4ODlhLCAweGNkNjQ3OGQ4LCAweDUwNmI5OWFlLCAweDJjMGFiYzc1LAorICAgIDB4YjEwNTVkMDMsIDB4ZDRjOGY3YzMsIDB4NDljNzE2YjUsIDB4MzVhNjMzNmUsIDB4YThhOWQyMTgsCisgICAgMHhmZTNkNjZlZSwgMHg2MzMyODc5OCwgMHgxZjUzYTI0MywgMHg4MjVjNDMzNSwgMHhlNzkxZTlmNSwKKyAgICAweDdhOWUwODgzLCAweDA2ZmYyZDU4LCAweDliZjBjYzJlLCAweGFiZDY0NGI0LCAweDM2ZDlhNWMyLAorICAgIDB4NGFiODgwMTksIDB4ZDdiNzYxNmYsIDB4YjI3YWNiYWYsIDB4MmY3NTJhZDksIDB4NTMxNDBmMDIsCisgICAgMHhjZTFiZWU3NCwgMHg5ODhmNWE4MiwgMHgwNTgwYmJmNCwgMHg3OWUxOWUyZiwgMHhlNGVlN2Y1OSwKKyAgICAweDgxMjNkNTk5LCAweDFjMmMzNGVmLCAweDYwNGQxMTM0LCAweGZkNDJmMDQyLCAweDQxYjlmN2YxLAorICAgIDB4ZGNiNjE2ODcsIDB4YTBkNzMzNWMsIDB4M2RkOGQyMmEsIDB4NTgxNTc4ZWEsIDB4YzUxYTk5OWMsCisgICAgMHhiOTdiYmM0NywgMHgyNDc0NWQzMSwgMHg3MmUwZTljNywgMHhlZmVmMDhiMSwgMHg5MzhlMmQ2YSwKKyAgICAweDBlODFjYzFjLCAweDZiNGM2NmRjLCAweGY2NDM4N2FhLCAweDhhMjJhMjcxLCAweDE3MmQ0MzA3LAorICAgIDB4MjcwYmNiOWQsIDB4YmEwNDJhZWIsIDB4YzY2NTBmMzAsIDB4NWI2YWVlNDYsIDB4M2VhNzQ0ODYsCisgICAgMHhhM2E4YTVmMCwgMHhkZmM5ODAyYiwgMHg0MmM2NjE1ZCwgMHgxNDUyZDVhYiwgMHg4OTVkMzRkZCwKKyAgICAweGY1M2MxMTA2LCAweDY4MzNmMDcwLCAweDBkZmU1YWIwLCAweDkwZjFiYmM2LCAweGVjOTA5ZTFkLAorICAgIDB4NzE5ZjdmNmIsIDB4OGNkZDhmMjksIDB4MTFkMjZlNWYsIDB4NmRiMzRiODQsIDB4ZjBiY2FhZjIsCisgICAgMHg5NTcxMDAzMiwgMHgwODdlZTE0NCwgMHg3NDFmYzQ5ZiwgMHhlOTEwMjVlOSwgMHhiZjg0OTExZiwKKyAgICAweDIyOGI3MDY5LCAweDVlZWE1NWIyLCAweGMzZTViNGM0LCAweGE2MjgxZTA0LCAweDNiMjdmZjcyLAorICAgIDB4NDc0NmRhYTksIDB4ZGE0OTNiZGYsIDB4ZWE2ZmIzNDUsIDB4Nzc2MDUyMzMsIDB4MGIwMTc3ZTgsCisgICAgMHg5NjBlOTY5ZSwgMHhmM2MzM2M1ZSwgMHg2ZWNjZGQyOCwgMHgxMmFkZjhmMywgMHg4ZmEyMTk4NSwKKyAgICAweGQ5MzZhZDczLCAweDQ0Mzk0YzA1LCAweDM4NTg2OWRlLCAweGE1NTc4OGE4LCAweGMwOWEyMjY4LAorICAgIDB4NWQ5NWMzMWUsIDB4MjFmNGU2YzUsIDB4YmNmYjA3YjMsIDB4ODM3M2VmZTIsIDB4MWU3YzBlOTQsCisgICAgMHg2MjFkMmI0ZiwgMHhmZjEyY2EzOSwgMHg5YWRmNjBmOSwgMHgwN2QwODE4ZiwgMHg3YmIxYTQ1NCwKKyAgICAweGU2YmU0NTIyLCAweGIwMmFmMWQ0LCAweDJkMjUxMGEyLCAweDUxNDQzNTc5LCAweGNjNGJkNDBmLAorICAgIDB4YTk4NjdlY2YsIDB4MzQ4OTlmYjksIDB4NDhlOGJhNjIsIDB4ZDVlNzViMTQsIDB4ZTVjMWQzOGUsCisgICAgMHg3OGNlMzJmOCwgMHgwNGFmMTcyMywgMHg5OWEwZjY1NSwgMHhmYzZkNWM5NSwgMHg2MTYyYmRlMywKKyAgICAweDFkMDM5ODM4LCAweDgwMGM3OTRlLCAweGQ2OThjZGI4LCAweDRiOTcyY2NlLCAweDM3ZjYwOTE1LAorICAgIDB4YWFmOWU4NjMsIDB4Y2YzNDQyYTMsIDB4NTIzYmEzZDUsIDB4MmU1YTg2MGUsIDB4YjM1NTY3NzgsCisgICAgMHg0ZTE3OTczYSwgMHhkMzE4NzY0YywgMHhhZjc5NTM5NywgMHgzMjc2YjJlMSwgMHg1N2JiMTgyMSwKKyAgICAweGNhYjRmOTU3LCAweGI2ZDVkYzhjLCAweDJiZGEzZGZhLCAweDdkNGU4OTBjLCAweGUwNDE2ODdhLAorICAgIDB4OWMyMDRkYTEsIDB4MDEyZmFjZDcsIDB4NjRlMjA2MTcsIDB4ZjllZGU3NjEsIDB4ODU4Y2MyYmEsCisgICAgMHgxODgzMjNjYywgMHgyOGE1YWI1NiwgMHhiNWFhNGEyMCwgMHhjOWNiNmZmYiwgMHg1NGM0OGU4ZCwKKyAgICAweDMxMDkyNDRkLCAweGFjMDZjNTNiLCAweGQwNjdlMGUwLCAweDRkNjgwMTk2LCAweDFiZmNiNTYwLAorICAgIDB4ODZmMzU0MTYsIDB4ZmE5MjcxY2QsIDB4Njc5ZDkwYmIsIDB4MDI1MDNhN2IsIDB4OWY1ZmRiMGQsCisgICAgMHhlMzNlZmVkNiwgMHg3ZTMxMWZhMCwgMHhjMmNhMTgxMywgMHg1ZmM1Zjk2NSwgMHgyM2E0ZGNiZSwKKyAgICAweGJlYWIzZGM4LCAweGRiNjY5NzA4LCAweDQ2Njk3NjdlLCAweDNhMDg1M2E1LCAweGE3MDdiMmQzLAorICAgIDB4ZjE5MzA2MjUsIDB4NmM5Y2U3NTMsIDB4MTBmZGMyODgsIDB4OGRmMjIzZmUsIDB4ZTgzZjg5M2UsCisgICAgMHg3NTMwNjg0OCwgMHgwOTUxNGQ5MywgMHg5NDVlYWNlNSwgMHhhNDc4MjQ3ZiwgMHgzOTc3YzUwOSwKKyAgICAweDQ1MTZlMGQyLCAweGQ4MTkwMWE0LCAweGJkZDRhYjY0LCAweDIwZGI0YTEyLCAweDVjYmE2ZmM5LAorICAgIDB4YzFiNThlYmYsIDB4OTcyMTNhNDksIDB4MGEyZWRiM2YsIDB4NzY0ZmZlZTQsIDB4ZWI0MDFmOTIsCisgICAgMHg4ZThkYjU1MiwgMHgxMzgyNTQyNCwgMHg2ZmUzNzFmZiwgMHhmMmVjOTA4OSwgMHgwZmFlNjBjYiwKKyAgICAweDkyYTE4MWJkLCAweGVlYzBhNDY2LCAweDczY2Y0NTEwLCAweDE2MDJlZmQwLCAweDhiMGQwZWE2LAorICAgIDB4Zjc2YzJiN2QsIDB4NmE2M2NhMGIsIDB4M2NmNzdlZmQsIDB4YTFmODlmOGIsIDB4ZGQ5OWJhNTAsCisgICAgMHg0MDk2NWIyNiwgMHgyNTViZjFlNiwgMHhiODU0MTA5MCwgMHhjNDM1MzU0YiwgMHg1OTNhZDQzZCwKKyAgICAweDY5MWM1Y2E3LCAweGY0MTNiZGQxLCAweDg4NzI5ODBhLCAweDE1N2Q3OTdjLCAweDcwYjBkM2JjLAorICAgIDB4ZWRiZjMyY2EsIDB4OTFkZTE3MTEsIDB4MGNkMWY2NjcsIDB4NWE0NTQyOTEsIDB4Yzc0YWEzZTcsCisgICAgMHhiYjJiODYzYywgMHgyNjI0Njc0YSwgMHg0M2U5Y2Q4YSwgMHhkZWU2MmNmYywgMHhhMjg3MDkyNywKKyAgICAweDNmODhlODUxfSwKKyAgIHsweDAwMDAwMDAwLCAweGRkOTZkOTg1LCAweDYwNWNiNTRiLCAweGJkY2E2Y2NlLCAweGMwYjk2YTk2LAorICAgIDB4MWQyZmIzMTMsIDB4YTBlNWRmZGQsIDB4N2Q3MzA2NTgsIDB4NWEwM2QzNmQsIDB4ODc5NTBhZTgsCisgICAgMHgzYTVmNjYyNiwgMHhlN2M5YmZhMywgMHg5YWJhYjlmYiwgMHg0NzJjNjA3ZSwgMHhmYWU2MGNiMCwKKyAgICAweDI3NzBkNTM1LCAweGI0MDdhNmRhLCAweDY5OTE3ZjVmLCAweGQ0NWIxMzkxLCAweDA5Y2RjYTE0LAorICAgIDB4NzRiZWNjNGMsIDB4YTkyODE1YzksIDB4MTRlMjc5MDcsIDB4Yzk3NGEwODIsIDB4ZWUwNDc1YjcsCisgICAgMHgzMzkyYWMzMiwgMHg4ZTU4YzBmYywgMHg1M2NlMTk3OSwgMHgyZWJkMWYyMSwgMHhmMzJiYzZhNCwKKyAgICAweDRlZTFhYTZhLCAweDkzNzc3M2VmLCAweGIzN2U0YmY1LCAweDZlZTg5MjcwLCAweGQzMjJmZWJlLAorICAgIDB4MGViNDI3M2IsIDB4NzNjNzIxNjMsIDB4YWU1MWY4ZTYsIDB4MTM5Yjk0MjgsIDB4Y2UwZDRkYWQsCisgICAgMHhlOTdkOTg5OCwgMHgzNGViNDExZCwgMHg4OTIxMmRkMywgMHg1NGI3ZjQ1NiwgMHgyOWM0ZjIwZSwKKyAgICAweGY0NTIyYjhiLCAweDQ5OTg0NzQ1LCAweDk0MGU5ZWMwLCAweDA3NzllZDJmLCAweGRhZWYzNGFhLAorICAgIDB4NjcyNTU4NjQsIDB4YmFiMzgxZTEsIDB4YzdjMDg3YjksIDB4MWE1NjVlM2MsIDB4YTc5YzMyZjIsCisgICAgMHg3YTBhZWI3NywgMHg1ZDdhM2U0MiwgMHg4MGVjZTdjNywgMHgzZDI2OGIwOSwgMHhlMGIwNTI4YywKKyAgICAweDlkYzM1NGQ0LCAweDQwNTU4ZDUxLCAweGZkOWZlMTlmLCAweDIwMDkzODFhLCAweGJkOGQ5MWFiLAorICAgIDB4NjAxYjQ4MmUsIDB4ZGRkMTI0ZTAsIDB4MDA0N2ZkNjUsIDB4N2QzNGZiM2QsIDB4YTBhMjIyYjgsCisgICAgMHgxZDY4NGU3NiwgMHhjMGZlOTdmMywgMHhlNzhlNDJjNiwgMHgzYTE4OWI0MywgMHg4N2QyZjc4ZCwKKyAgICAweDVhNDQyZTA4LCAweDI3MzcyODUwLCAweGZhYTFmMWQ1LCAweDQ3NmI5ZDFiLCAweDlhZmQ0NDllLAorICAgIDB4MDk4YTM3NzEsIDB4ZDQxY2VlZjQsIDB4NjlkNjgyM2EsIDB4YjQ0MDViYmYsIDB4YzkzMzVkZTcsCisgICAgMHgxNGE1ODQ2MiwgMHhhOTZmZThhYywgMHg3NGY5MzEyOSwgMHg1Mzg5ZTQxYywgMHg4ZTFmM2Q5OSwKKyAgICAweDMzZDU1MTU3LCAweGVlNDM4OGQyLCAweDkzMzA4ZThhLCAweDRlYTY1NzBmLCAweGYzNmMzYmMxLAorICAgIDB4MmVmYWUyNDQsIDB4MGVmM2RhNWUsIDB4ZDM2NTAzZGIsIDB4NmVhZjZmMTUsIDB4YjMzOWI2OTAsCisgICAgMHhjZTRhYjBjOCwgMHgxM2RjNjk0ZCwgMHhhZTE2MDU4MywgMHg3MzgwZGMwNiwgMHg1NGYwMDkzMywKKyAgICAweDg5NjZkMGI2LCAweDM0YWNiYzc4LCAweGU5M2E2NWZkLCAweDk0NDk2M2E1LCAweDQ5ZGZiYTIwLAorICAgIDB4ZjQxNWQ2ZWUsIDB4Mjk4MzBmNmIsIDB4YmFmNDdjODQsIDB4Njc2MmE1MDEsIDB4ZGFhOGM5Y2YsCisgICAgMHgwNzNlMTA0YSwgMHg3YTRkMTYxMiwgMHhhN2RiY2Y5NywgMHgxYTExYTM1OSwgMHhjNzg3N2FkYywKKyAgICAweGUwZjdhZmU5LCAweDNkNjE3NjZjLCAweDgwYWIxYWEyLCAweDVkM2RjMzI3LCAweDIwNGVjNTdmLAorICAgIDB4ZmRkODFjZmEsIDB4NDAxMjcwMzQsIDB4OWQ4NGE5YjEsIDB4YTA2YTI1MTcsIDB4N2RmY2ZjOTIsCisgICAgMHhjMDM2OTA1YywgMHgxZGEwNDlkOSwgMHg2MGQzNGY4MSwgMHhiZDQ1OTYwNCwgMHgwMDhmZmFjYSwKKyAgICAweGRkMTkyMzRmLCAweGZhNjlmNjdhLCAweDI3ZmYyZmZmLCAweDlhMzU0MzMxLCAweDQ3YTM5YWI0LAorICAgIDB4M2FkMDljZWMsIDB4ZTc0NjQ1NjksIDB4NWE4YzI5YTcsIDB4ODcxYWYwMjIsIDB4MTQ2ZDgzY2QsCisgICAgMHhjOWZiNWE0OCwgMHg3NDMxMzY4NiwgMHhhOWE3ZWYwMywgMHhkNGQ0ZTk1YiwgMHgwOTQyMzBkZSwKKyAgICAweGI0ODg1YzEwLCAweDY5MWU4NTk1LCAweDRlNmU1MGEwLCAweDkzZjg4OTI1LCAweDJlMzJlNWViLAorICAgIDB4ZjNhNDNjNmUsIDB4OGVkNzNhMzYsIDB4NTM0MWUzYjMsIDB4ZWU4YjhmN2QsIDB4MzMxZDU2ZjgsCisgICAgMHgxMzE0NmVlMiwgMHhjZTgyYjc2NywgMHg3MzQ4ZGJhOSwgMHhhZWRlMDIyYywgMHhkM2FkMDQ3NCwKKyAgICAweDBlM2JkZGYxLCAweGIzZjFiMTNmLCAweDZlNjc2OGJhLCAweDQ5MTdiZDhmLCAweDk0ODE2NDBhLAorICAgIDB4Mjk0YjA4YzQsIDB4ZjRkZGQxNDEsIDB4ODlhZWQ3MTksIDB4NTQzODBlOWMsIDB4ZTlmMjYyNTIsCisgICAgMHgzNDY0YmJkNywgMHhhNzEzYzgzOCwgMHg3YTg1MTFiZCwgMHhjNzRmN2Q3MywgMHgxYWQ5YTRmNiwKKyAgICAweDY3YWFhMmFlLCAweGJhM2M3YjJiLCAweDA3ZjYxN2U1LCAweGRhNjBjZTYwLCAweGZkMTAxYjU1LAorICAgIDB4MjA4NmMyZDAsIDB4OWQ0Y2FlMWUsIDB4NDBkYTc3OWIsIDB4M2RhOTcxYzMsIDB4ZTAzZmE4NDYsCisgICAgMHg1ZGY1YzQ4OCwgMHg4MDYzMWQwZCwgMHgxZGU3YjRiYywgMHhjMDcxNmQzOSwgMHg3ZGJiMDFmNywKKyAgICAweGEwMmRkODcyLCAweGRkNWVkZTJhLCAweDAwYzgwN2FmLCAweGJkMDI2YjYxLCAweDYwOTRiMmU0LAorICAgIDB4NDdlNDY3ZDEsIDB4OWE3MmJlNTQsIDB4MjdiOGQyOWEsIDB4ZmEyZTBiMWYsIDB4ODc1ZDBkNDcsCisgICAgMHg1YWNiZDRjMiwgMHhlNzAxYjgwYywgMHgzYTk3NjE4OSwgMHhhOWUwMTI2NiwgMHg3NDc2Y2JlMywKKyAgICAweGM5YmNhNzJkLCAweDE0MmE3ZWE4LCAweDY5NTk3OGYwLCAweGI0Y2ZhMTc1LCAweDA5MDVjZGJiLAorICAgIDB4ZDQ5MzE0M2UsIDB4ZjNlM2MxMGIsIDB4MmU3NTE4OGUsIDB4OTNiZjc0NDAsIDB4NGUyOWFkYzUsCisgICAgMHgzMzVhYWI5ZCwgMHhlZWNjNzIxOCwgMHg1MzA2MWVkNiwgMHg4ZTkwYzc1MywgMHhhZTk5ZmY0OSwKKyAgICAweDczMGYyNmNjLCAweGNlYzU0YTAyLCAweDEzNTM5Mzg3LCAweDZlMjA5NWRmLCAweGIzYjY0YzVhLAorICAgIDB4MGU3YzIwOTQsIDB4ZDNlYWY5MTEsIDB4ZjQ5YTJjMjQsIDB4MjkwY2Y1YTEsIDB4OTRjNjk5NmYsCisgICAgMHg0OTUwNDBlYSwgMHgzNDIzNDZiMiwgMHhlOWI1OWYzNywgMHg1NDdmZjNmOSwgMHg4OWU5MmE3YywKKyAgICAweDFhOWU1OTkzLCAweGM3MDg4MDE2LCAweDdhYzJlY2Q4LCAweGE3NTQzNTVkLCAweGRhMjczMzA1LAorICAgIDB4MDdiMWVhODAsIDB4YmE3Yjg2NGUsIDB4NjdlZDVmY2IsIDB4NDA5ZDhhZmUsIDB4OWQwYjUzN2IsCisgICAgMHgyMGMxM2ZiNSwgMHhmZDU3ZTYzMCwgMHg4MDI0ZTA2OCwgMHg1ZGIyMzllZCwgMHhlMDc4NTUyMywKKyAgICAweDNkZWU4Y2E2fX07CisKK2xvY2FsIGNvbnN0IHpfd29yZF90IEZBUiBjcmNfYnJhaWRfYmlnX3RhYmxlW11bMjU2XSA9IHsKKyAgIHsweDAwMDAwMDAwLCAweDg1ZDk5NmRkLCAweDRiYjU1YzYwLCAweGNlNmNjYWJkLCAweDk2NmFiOWMwLAorICAgIDB4MTNiMzJmMWQsIDB4ZGRkZmU1YTAsIDB4NTgwNjczN2QsIDB4NmRkMzAzNWEsIDB4ZTgwYTk1ODcsCisgICAgMHgyNjY2NWYzYSwgMHhhM2JmYzllNywgMHhmYmI5YmE5YSwgMHg3ZTYwMmM0NywgMHhiMDBjZTZmYSwKKyAgICAweDM1ZDU3MDI3LCAweGRhYTYwN2I0LCAweDVmN2Y5MTY5LCAweDkxMTM1YmQ0LCAweDE0Y2FjZDA5LAorICAgIDB4NGNjY2JlNzQsIDB4YzkxNTI4YTksIDB4MDc3OWUyMTQsIDB4ODJhMDc0YzksIDB4Yjc3NTA0ZWUsCisgICAgMHgzMmFjOTIzMywgMHhmY2MwNTg4ZSwgMHg3OTE5Y2U1MywgMHgyMTFmYmQyZSwgMHhhNGM2MmJmMywKKyAgICAweDZhYWFlMTRlLCAweGVmNzM3NzkzLCAweGY1NGI3ZWIzLCAweDcwOTJlODZlLCAweGJlZmUyMmQzLAorICAgIDB4M2IyN2I0MGUsIDB4NjMyMWM3NzMsIDB4ZTZmODUxYWUsIDB4Mjg5NDliMTMsIDB4YWQ0ZDBkY2UsCisgICAgMHg5ODk4N2RlOSwgMHgxZDQxZWIzNCwgMHhkMzJkMjE4OSwgMHg1NmY0Yjc1NCwgMHgwZWYyYzQyOSwKKyAgICAweDhiMmI1MmY0LCAweDQ1NDc5ODQ5LCAweGMwOWUwZTk0LCAweDJmZWQ3OTA3LCAweGFhMzRlZmRhLAorICAgIDB4NjQ1ODI1NjcsIDB4ZTE4MWIzYmEsIDB4Yjk4N2MwYzcsIDB4M2M1ZTU2MWEsIDB4ZjIzMjljYTcsCisgICAgMHg3N2ViMGE3YSwgMHg0MjNlN2E1ZCwgMHhjN2U3ZWM4MCwgMHgwOThiMjYzZCwgMHg4YzUyYjBlMCwKKyAgICAweGQ0NTRjMzlkLCAweDUxOGQ1NTQwLCAweDlmZTE5ZmZkLCAweDFhMzgwOTIwLCAweGFiOTE4ZGJkLAorICAgIDB4MmU0ODFiNjAsIDB4ZTAyNGQxZGQsIDB4NjVmZDQ3MDAsIDB4M2RmYjM0N2QsIDB4YjgyMmEyYTAsCisgICAgMHg3NjRlNjgxZCwgMHhmMzk3ZmVjMCwgMHhjNjQyOGVlNywgMHg0MzliMTgzYSwgMHg4ZGY3ZDI4NywKKyAgICAweDA4MmU0NDVhLCAweDUwMjgzNzI3LCAweGQ1ZjFhMWZhLCAweDFiOWQ2YjQ3LCAweDllNDRmZDlhLAorICAgIDB4NzEzNzhhMDksIDB4ZjRlZTFjZDQsIDB4M2E4MmQ2NjksIDB4YmY1YjQwYjQsIDB4ZTc1ZDMzYzksCisgICAgMHg2Mjg0YTUxNCwgMHhhY2U4NmZhOSwgMHgyOTMxZjk3NCwgMHgxY2U0ODk1MywgMHg5OTNkMWY4ZSwKKyAgICAweDU3NTFkNTMzLCAweGQyODg0M2VlLCAweDhhOGUzMDkzLCAweDBmNTdhNjRlLCAweGMxM2I2Y2YzLAorICAgIDB4NDRlMmZhMmUsIDB4NWVkYWYzMGUsIDB4ZGIwMzY1ZDMsIDB4MTU2ZmFmNmUsIDB4OTBiNjM5YjMsCisgICAgMHhjOGIwNGFjZSwgMHg0ZDY5ZGMxMywgMHg4MzA1MTZhZSwgMHgwNmRjODA3MywgMHgzMzA5ZjA1NCwKKyAgICAweGI2ZDA2Njg5LCAweDc4YmNhYzM0LCAweGZkNjUzYWU5LCAweGE1NjM0OTk0LCAweDIwYmFkZjQ5LAorICAgIDB4ZWVkNjE1ZjQsIDB4NmIwZjgzMjksIDB4ODQ3Y2Y0YmEsIDB4MDFhNTYyNjcsIDB4Y2ZjOWE4ZGEsCisgICAgMHg0YTEwM2UwNywgMHgxMjE2NGQ3YSwgMHg5N2NmZGJhNywgMHg1OWEzMTExYSwgMHhkYzdhODdjNywKKyAgICAweGU5YWZmN2UwLCAweDZjNzY2MTNkLCAweGEyMWFhYjgwLCAweDI3YzMzZDVkLCAweDdmYzU0ZTIwLAorICAgIDB4ZmExY2Q4ZmQsIDB4MzQ3MDEyNDAsIDB4YjFhOTg0OWQsIDB4MTcyNTZhYTAsIDB4OTJmY2ZjN2QsCisgICAgMHg1YzkwMzZjMCwgMHhkOTQ5YTAxZCwgMHg4MTRmZDM2MCwgMHgwNDk2NDViZCwgMHhjYWZhOGYwMCwKKyAgICAweDRmMjMxOWRkLCAweDdhZjY2OWZhLCAweGZmMmZmZjI3LCAweDMxNDMzNTlhLCAweGI0OWFhMzQ3LAorICAgIDB4ZWM5Y2QwM2EsIDB4Njk0NTQ2ZTcsIDB4YTcyOThjNWEsIDB4MjJmMDFhODcsIDB4Y2Q4MzZkMTQsCisgICAgMHg0ODVhZmJjOSwgMHg4NjM2MzE3NCwgMHgwM2VmYTdhOSwgMHg1YmU5ZDRkNCwgMHhkZTMwNDIwOSwKKyAgICAweDEwNWM4OGI0LCAweDk1ODUxZTY5LCAweGEwNTA2ZTRlLCAweDI1ODlmODkzLCAweGViZTUzMjJlLAorICAgIDB4NmUzY2E0ZjMsIDB4MzYzYWQ3OGUsIDB4YjNlMzQxNTMsIDB4N2Q4ZjhiZWUsIDB4Zjg1NjFkMzMsCisgICAgMHhlMjZlMTQxMywgMHg2N2I3ODJjZSwgMHhhOWRiNDg3MywgMHgyYzAyZGVhZSwgMHg3NDA0YWRkMywKKyAgICAweGYxZGQzYjBlLCAweDNmYjFmMWIzLCAweGJhNjg2NzZlLCAweDhmYmQxNzQ5LCAweDBhNjQ4MTk0LAorICAgIDB4YzQwODRiMjksIDB4NDFkMWRkZjQsIDB4MTlkN2FlODksIDB4OWMwZTM4NTQsIDB4NTI2MmYyZTksCisgICAgMHhkN2JiNjQzNCwgMHgzOGM4MTNhNywgMHhiZDExODU3YSwgMHg3MzdkNGZjNywgMHhmNmE0ZDkxYSwKKyAgICAweGFlYTJhYTY3LCAweDJiN2IzY2JhLCAweGU1MTdmNjA3LCAweDYwY2U2MGRhLCAweDU1MWIxMGZkLAorICAgIDB4ZDBjMjg2MjAsIDB4MWVhZTRjOWQsIDB4OWI3N2RhNDAsIDB4YzM3MWE5M2QsIDB4NDZhODNmZTAsCisgICAgMHg4OGM0ZjU1ZCwgMHgwZDFkNjM4MCwgMHhiY2I0ZTcxZCwgMHgzOTZkNzFjMCwgMHhmNzAxYmI3ZCwKKyAgICAweDcyZDgyZGEwLCAweDJhZGU1ZWRkLCAweGFmMDdjODAwLCAweDYxNmIwMmJkLCAweGU0YjI5NDYwLAorICAgIDB4ZDE2N2U0NDcsIDB4NTRiZTcyOWEsIDB4OWFkMmI4MjcsIDB4MWYwYjJlZmEsIDB4NDcwZDVkODcsCisgICAgMHhjMmQ0Y2I1YSwgMHgwY2I4MDFlNywgMHg4OTYxOTczYSwgMHg2NjEyZTBhOSwgMHhlM2NiNzY3NCwKKyAgICAweDJkYTdiY2M5LCAweGE4N2UyYTE0LCAweGYwNzg1OTY5LCAweDc1YTFjZmI0LCAweGJiY2QwNTA5LAorICAgIDB4M2UxNDkzZDQsIDB4MGJjMWUzZjMsIDB4OGUxODc1MmUsIDB4NDA3NGJmOTMsIDB4YzVhZDI5NGUsCisgICAgMHg5ZGFiNWEzMywgMHgxODcyY2NlZSwgMHhkNjFlMDY1MywgMHg1M2M3OTA4ZSwgMHg0OWZmOTlhZSwKKyAgICAweGNjMjYwZjczLCAweDAyNGFjNWNlLCAweDg3OTM1MzEzLCAweGRmOTUyMDZlLCAweDVhNGNiNmIzLAorICAgIDB4OTQyMDdjMGUsIDB4MTFmOWVhZDMsIDB4MjQyYzlhZjQsIDB4YTFmNTBjMjksIDB4NmY5OWM2OTQsCisgICAgMHhlYTQwNTA0OSwgMHhiMjQ2MjMzNCwgMHgzNzlmYjVlOSwgMHhmOWYzN2Y1NCwgMHg3YzJhZTk4OSwKKyAgICAweDkzNTk5ZTFhLCAweDE2ODAwOGM3LCAweGQ4ZWNjMjdhLCAweDVkMzU1NGE3LCAweDA1MzMyN2RhLAorICAgIDB4ODBlYWIxMDcsIDB4NGU4NjdiYmEsIDB4Y2I1ZmVkNjcsIDB4ZmU4YTlkNDAsIDB4N2I1MzBiOWQsCisgICAgMHhiNTNmYzEyMCwgMHgzMGU2NTdmZCwgMHg2OGUwMjQ4MCwgMHhlZDM5YjI1ZCwgMHgyMzU1NzhlMCwKKyAgICAweGE2OGNlZTNkfSwKKyAgIHsweDAwMDAwMDAwLCAweDc2ZTEwZjlkLCAweGFkYzQ2ZWUxLCAweGRiMjU2MTdjLCAweDFiOGZhYzE5LAorICAgIDB4NmQ2ZWEzODQsIDB4YjY0YmMyZjgsIDB4YzBhYWNkNjUsIDB4MzYxZTU5MzMsIDB4NDBmZjU2YWUsCisgICAgMHg5YmRhMzdkMiwgMHhlZDNiMzg0ZiwgMHgyZDkxZjUyYSwgMHg1YjcwZmFiNywgMHg4MDU1OWJjYiwKKyAgICAweGY2YjQ5NDU2LCAweDZjM2NiMjY2LCAweDFhZGRiZGZiLCAweGMxZjhkYzg3LCAweGI3MTlkMzFhLAorICAgIDB4NzdiMzFlN2YsIDB4MDE1MjExZTIsIDB4ZGE3NzcwOWUsIDB4YWM5NjdmMDMsIDB4NWEyMmViNTUsCisgICAgMHgyY2MzZTRjOCwgMHhmN2U2ODViNCwgMHg4MTA3OGEyOSwgMHg0MWFkNDc0YywgMHgzNzRjNDhkMSwKKyAgICAweGVjNjkyOWFkLCAweDlhODgyNjMwLCAweGQ4Nzg2NGNkLCAweGFlOTk2YjUwLCAweDc1YmMwYTJjLAorICAgIDB4MDM1ZDA1YjEsIDB4YzNmN2M4ZDQsIDB4YjUxNmM3NDksIDB4NmUzM2E2MzUsIDB4MThkMmE5YTgsCisgICAgMHhlZTY2M2RmZSwgMHg5ODg3MzI2MywgMHg0M2EyNTMxZiwgMHgzNTQzNWM4MiwgMHhmNWU5OTFlNywKKyAgICAweDgzMDg5ZTdhLCAweDU4MmRmZjA2LCAweDJlY2NmMDliLCAweGI0NDRkNmFiLCAweGMyYTVkOTM2LAorICAgIDB4MTk4MGI4NGEsIDB4NmY2MWI3ZDcsIDB4YWZjYjdhYjIsIDB4ZDkyYTc1MmYsIDB4MDIwZjE0NTMsCisgICAgMHg3NGVlMWJjZSwgMHg4MjVhOGY5OCwgMHhmNGJiODAwNSwgMHgyZjllZTE3OSwgMHg1OTdmZWVlNCwKKyAgICAweDk5ZDUyMzgxLCAweGVmMzQyYzFjLCAweDM0MTE0ZDYwLCAweDQyZjA0MmZkLCAweGYxZjdiOTQxLAorICAgIDB4ODcxNmI2ZGMsIDB4NWMzM2Q3YTAsIDB4MmFkMmQ4M2QsIDB4ZWE3ODE1NTgsIDB4OWM5OTFhYzUsCisgICAgMHg0N2JjN2JiOSwgMHgzMTVkNzQyNCwgMHhjN2U5ZTA3MiwgMHhiMTA4ZWZlZiwgMHg2YTJkOGU5MywKKyAgICAweDFjY2M4MTBlLCAweGRjNjY0YzZiLCAweGFhODc0M2Y2LCAweDcxYTIyMjhhLCAweDA3NDMyZDE3LAorICAgIDB4OWRjYjBiMjcsIDB4ZWIyYTA0YmEsIDB4MzAwZjY1YzYsIDB4NDZlZTZhNWIsIDB4ODY0NGE3M2UsCisgICAgMHhmMGE1YThhMywgMHgyYjgwYzlkZiwgMHg1ZDYxYzY0MiwgMHhhYmQ1NTIxNCwgMHhkZDM0NWQ4OSwKKyAgICAweDA2MTEzY2Y1LCAweDcwZjAzMzY4LCAweGIwNWFmZTBkLCAweGM2YmJmMTkwLCAweDFkOWU5MGVjLAorICAgIDB4NmI3ZjlmNzEsIDB4Mjk4ZmRkOGMsIDB4NWY2ZWQyMTEsIDB4ODQ0YmIzNmQsIDB4ZjJhYWJjZjAsCisgICAgMHgzMjAwNzE5NSwgMHg0NGUxN2UwOCwgMHg5ZmM0MWY3NCwgMHhlOTI1MTBlOSwgMHgxZjkxODRiZiwKKyAgICAweDY5NzA4YjIyLCAweGIyNTVlYTVlLCAweGM0YjRlNWMzLCAweDA0MWUyOGE2LCAweDcyZmYyNzNiLAorICAgIDB4YTlkYTQ2NDcsIDB4ZGYzYjQ5ZGEsIDB4NDViMzZmZWEsIDB4MzM1MjYwNzcsIDB4ZTg3NzAxMGIsCisgICAgMHg5ZTk2MGU5NiwgMHg1ZTNjYzNmMywgMHgyOGRkY2M2ZSwgMHhmM2Y4YWQxMiwgMHg4NTE5YTI4ZiwKKyAgICAweDczYWQzNmQ5LCAweDA1NGMzOTQ0LCAweGRlNjk1ODM4LCAweGE4ODg1N2E1LCAweDY4MjI5YWMwLAorICAgIDB4MWVjMzk1NWQsIDB4YzVlNmY0MjEsIDB4YjMwN2ZiYmMsIDB4ZTJlZjczODMsIDB4OTQwZTdjMWUsCisgICAgMHg0ZjJiMWQ2MiwgMHgzOWNhMTJmZiwgMHhmOTYwZGY5YSwgMHg4ZjgxZDAwNywgMHg1NGE0YjE3YiwKKyAgICAweDIyNDViZWU2LCAweGQ0ZjEyYWIwLCAweGEyMTAyNTJkLCAweDc5MzU0NDUxLCAweDBmZDQ0YmNjLAorICAgIDB4Y2Y3ZTg2YTksIDB4Yjk5Zjg5MzQsIDB4NjJiYWU4NDgsIDB4MTQ1YmU3ZDUsIDB4OGVkM2MxZTUsCisgICAgMHhmODMyY2U3OCwgMHgyMzE3YWYwNCwgMHg1NWY2YTA5OSwgMHg5NTVjNmRmYywgMHhlM2JkNjI2MSwKKyAgICAweDM4OTgwMzFkLCAweDRlNzkwYzgwLCAweGI4Y2Q5OGQ2LCAweGNlMmM5NzRiLCAweDE1MDlmNjM3LAorICAgIDB4NjNlOGY5YWEsIDB4YTM0MjM0Y2YsIDB4ZDVhMzNiNTIsIDB4MGU4NjVhMmUsIDB4Nzg2NzU1YjMsCisgICAgMHgzYTk3MTc0ZSwgMHg0Yzc2MThkMywgMHg5NzUzNzlhZiwgMHhlMWIyNzYzMiwgMHgyMTE4YmI1NywKKyAgICAweDU3ZjliNGNhLCAweDhjZGNkNWI2LCAweGZhM2RkYTJiLCAweDBjODk0ZTdkLCAweDdhNjg0MWUwLAorICAgIDB4YTE0ZDIwOWMsIDB4ZDdhYzJmMDEsIDB4MTcwNmUyNjQsIDB4NjFlN2VkZjksIDB4YmFjMjhjODUsCisgICAgMHhjYzIzODMxOCwgMHg1NmFiYTUyOCwgMHgyMDRhYWFiNSwgMHhmYjZmY2JjOSwgMHg4ZDhlYzQ1NCwKKyAgICAweDRkMjQwOTMxLCAweDNiYzUwNmFjLCAweGUwZTA2N2QwLCAweDk2MDE2ODRkLCAweDYwYjVmYzFiLAorICAgIDB4MTY1NGYzODYsIDB4Y2Q3MTkyZmEsIDB4YmI5MDlkNjcsIDB4N2IzYTUwMDIsIDB4MGRkYjVmOWYsCisgICAgMHhkNmZlM2VlMywgMHhhMDFmMzE3ZSwgMHgxMzE4Y2FjMiwgMHg2NWY5YzU1ZiwgMHhiZWRjYTQyMywKKyAgICAweGM4M2RhYmJlLCAweDA4OTc2NmRiLCAweDdlNzY2OTQ2LCAweGE1NTMwODNhLCAweGQzYjIwN2E3LAorICAgIDB4MjUwNjkzZjEsIDB4NTNlNzljNmMsIDB4ODhjMmZkMTAsIDB4ZmUyM2YyOGQsIDB4M2U4OTNmZTgsCisgICAgMHg0ODY4MzA3NSwgMHg5MzRkNTEwOSwgMHhlNWFjNWU5NCwgMHg3ZjI0NzhhNCwgMHgwOWM1NzczOSwKKyAgICAweGQyZTAxNjQ1LCAweGE0MDExOWQ4LCAweDY0YWJkNGJkLCAweDEyNGFkYjIwLCAweGM5NmZiYTVjLAorICAgIDB4YmY4ZWI1YzEsIDB4NDkzYTIxOTcsIDB4M2ZkYjJlMGEsIDB4ZTRmZTRmNzYsIDB4OTIxZjQwZWIsCisgICAgMHg1MmI1OGQ4ZSwgMHgyNDU0ODIxMywgMHhmZjcxZTM2ZiwgMHg4OTkwZWNmMiwgMHhjYjYwYWUwZiwKKyAgICAweGJkODFhMTkyLCAweDY2YTRjMGVlLCAweDEwNDVjZjczLCAweGQwZWYwMjE2LCAweGE2MGUwZDhiLAorICAgIDB4N2QyYjZjZjcsIDB4MGJjYTYzNmEsIDB4ZmQ3ZWY3M2MsIDB4OGI5ZmY4YTEsIDB4NTBiYTk5ZGQsCisgICAgMHgyNjViOTY0MCwgMHhlNmYxNWIyNSwgMHg5MDEwNTRiOCwgMHg0YjM1MzVjNCwgMHgzZGQ0M2E1OSwKKyAgICAweGE3NWMxYzY5LCAweGQxYmQxM2Y0LCAweDBhOTg3Mjg4LCAweDdjNzk3ZDE1LCAweGJjZDNiMDcwLAorICAgIDB4Y2EzMmJmZWQsIDB4MTExN2RlOTEsIDB4NjdmNmQxMGMsIDB4OTE0MjQ1NWEsIDB4ZTdhMzRhYzcsCisgICAgMHgzYzg2MmJiYiwgMHg0YTY3MjQyNiwgMHg4YWNkZTk0MywgMHhmYzJjZTZkZSwgMHgyNzA5ODdhMiwKKyAgICAweDUxZTg4ODNmfSwKKyAgIHsweDAwMDAwMDAwLCAweGU4ZGJmYmI5LCAweDkxYjE4NmE4LCAweDc5NmE3ZDExLCAweDYzNjU3YzhhLAorICAgIDB4OGJiZTg3MzMsIDB4ZjJkNGZhMjIsIDB4MWEwZjAxOWIsIDB4ODdjYzg5Y2YsIDB4NmYxNzcyNzYsCisgICAgMHgxNjdkMGY2NywgMHhmZWE2ZjRkZSwgMHhlNGE5ZjU0NSwgMHgwYzcyMGVmYywgMHg3NTE4NzNlZCwKKyAgICAweDlkYzM4ODU0LCAweDRmOWY2MjQ0LCAweGE3NDQ5OWZkLCAweGRlMmVlNGVjLCAweDM2ZjUxZjU1LAorICAgIDB4MmNmYTFlY2UsIDB4YzQyMWU1NzcsIDB4YmQ0Yjk4NjYsIDB4NTU5MDYzZGYsIDB4Yzg1M2ViOGIsCisgICAgMHgyMDg4MTAzMiwgMHg1OWUyNmQyMywgMHhiMTM5OTY5YSwgMHhhYjM2OTcwMSwgMHg0M2VkNmNiOCwKKyAgICAweDNhODcxMWE5LCAweGQyNWNlYTEwLCAweDllM2VjNTg4LCAweDc2ZTUzZTMxLCAweDBmOGY0MzIwLAorICAgIDB4ZTc1NGI4OTksIDB4ZmQ1YmI5MDIsIDB4MTU4MDQyYmIsIDB4NmNlYTNmYWEsIDB4ODQzMWM0MTMsCisgICAgMHgxOWYyNGM0NywgMHhmMTI5YjdmZSwgMHg4ODQzY2FlZiwgMHg2MDk4MzE1NiwgMHg3YTk3MzBjZCwKKyAgICAweDkyNGNjYjc0LCAweGViMjZiNjY1LCAweDAzZmQ0ZGRjLCAweGQxYTFhN2NjLCAweDM5N2E1Yzc1LAorICAgIDB4NDAxMDIxNjQsIDB4YThjYmRhZGQsIDB4YjJjNGRiNDYsIDB4NWExZjIwZmYsIDB4MjM3NTVkZWUsCisgICAgMHhjYmFlYTY1NywgMHg1NjZkMmUwMywgMHhiZWI2ZDViYSwgMHhjN2RjYThhYiwgMHgyZjA3NTMxMiwKKyAgICAweDM1MDg1Mjg5LCAweGRkZDNhOTMwLCAweGE0YjlkNDIxLCAweDRjNjIyZjk4LCAweDdkN2JmYmNhLAorICAgIDB4OTVhMDAwNzMsIDB4ZWNjYTdkNjIsIDB4MDQxMTg2ZGIsIDB4MWUxZTg3NDAsIDB4ZjZjNTdjZjksCisgICAgMHg4ZmFmMDFlOCwgMHg2Nzc0ZmE1MSwgMHhmYWI3NzIwNSwgMHgxMjZjODliYywgMHg2YjA2ZjRhZCwKKyAgICAweDgzZGQwZjE0LCAweDk5ZDIwZThmLCAweDcxMDlmNTM2LCAweDA4NjM4ODI3LCAweGUwYjg3MzllLAorICAgIDB4MzJlNDk5OGUsIDB4ZGEzZjYyMzcsIDB4YTM1NTFmMjYsIDB4NGI4ZWU0OWYsIDB4NTE4MWU1MDQsCisgICAgMHhiOTVhMWViZCwgMHhjMDMwNjNhYywgMHgyOGViOTgxNSwgMHhiNTI4MTA0MSwgMHg1ZGYzZWJmOCwKKyAgICAweDI0OTk5NmU5LCAweGNjNDI2ZDUwLCAweGQ2NGQ2Y2NiLCAweDNlOTY5NzcyLCAweDQ3ZmNlYTYzLAorICAgIDB4YWYyNzExZGEsIDB4ZTM0NTNlNDIsIDB4MGI5ZWM1ZmIsIDB4NzJmNGI4ZWEsIDB4OWEyZjQzNTMsCisgICAgMHg4MDIwNDJjOCwgMHg2OGZiYjk3MSwgMHgxMTkxYzQ2MCwgMHhmOTRhM2ZkOSwgMHg2NDg5Yjc4ZCwKKyAgICAweDhjNTI0YzM0LCAweGY1MzgzMTI1LCAweDFkZTNjYTljLCAweDA3ZWNjYjA3LCAweGVmMzczMGJlLAorICAgIDB4OTY1ZDRkYWYsIDB4N2U4NmI2MTYsIDB4YWNkYTVjMDYsIDB4NDQwMWE3YmYsIDB4M2Q2YmRhYWUsCisgICAgMHhkNWIwMjExNywgMHhjZmJmMjA4YywgMHgyNzY0ZGIzNSwgMHg1ZTBlYTYyNCwgMHhiNmQ1NWQ5ZCwKKyAgICAweDJiMTZkNWM5LCAweGMzY2QyZTcwLCAweGJhYTc1MzYxLCAweDUyN2NhOGQ4LCAweDQ4NzNhOTQzLAorICAgIDB4YTBhODUyZmEsIDB4ZDljMjJmZWIsIDB4MzExOWQ0NTIsIDB4YmJmMDg3NGUsIDB4NTMyYjdjZjcsCisgICAgMHgyYTQxMDFlNiwgMHhjMjlhZmE1ZiwgMHhkODk1ZmJjNCwgMHgzMDRlMDA3ZCwgMHg0OTI0N2Q2YywKKyAgICAweGExZmY4NmQ1LCAweDNjM2MwZTgxLCAweGQ0ZTdmNTM4LCAweGFkOGQ4ODI5LCAweDQ1NTY3MzkwLAorICAgIDB4NWY1OTcyMGIsIDB4Yjc4Mjg5YjIsIDB4Y2VlOGY0YTMsIDB4MjYzMzBmMWEsIDB4ZjQ2ZmU1MGEsCisgICAgMHgxY2I0MWViMywgMHg2NWRlNjNhMiwgMHg4ZDA1OTgxYiwgMHg5NzBhOTk4MCwgMHg3ZmQxNjIzOSwKKyAgICAweDA2YmIxZjI4LCAweGVlNjBlNDkxLCAweDczYTM2Y2M1LCAweDliNzg5NzdjLCAweGUyMTJlYTZkLAorICAgIDB4MGFjOTExZDQsIDB4MTBjNjEwNGYsIDB4ZjgxZGViZjYsIDB4ODE3Nzk2ZTcsIDB4NjlhYzZkNWUsCisgICAgMHgyNWNlNDJjNiwgMHhjZDE1Yjk3ZiwgMHhiNDdmYzQ2ZSwgMHg1Y2E0M2ZkNywgMHg0NmFiM2U0YywKKyAgICAweGFlNzBjNWY1LCAweGQ3MWFiOGU0LCAweDNmYzE0MzVkLCAweGEyMDJjYjA5LCAweDRhZDkzMGIwLAorICAgIDB4MzNiMzRkYTEsIDB4ZGI2OGI2MTgsIDB4YzE2N2I3ODMsIDB4MjliYzRjM2EsIDB4NTBkNjMxMmIsCisgICAgMHhiODBkY2E5MiwgMHg2YTUxMjA4MiwgMHg4MjhhZGIzYiwgMHhmYmUwYTYyYSwgMHgxMzNiNWQ5MywKKyAgICAweDA5MzQ1YzA4LCAweGUxZWZhN2IxLCAweDk4ODVkYWEwLCAweDcwNWUyMTE5LCAweGVkOWRhOTRkLAorICAgIDB4MDU0NjUyZjQsIDB4N2MyYzJmZTUsIDB4OTRmN2Q0NWMsIDB4OGVmOGQ1YzcsIDB4NjYyMzJlN2UsCisgICAgMHgxZjQ5NTM2ZiwgMHhmNzkyYThkNiwgMHhjNjhiN2M4NCwgMHgyZTUwODczZCwgMHg1NzNhZmEyYywKKyAgICAweGJmZTEwMTk1LCAweGE1ZWUwMDBlLCAweDRkMzVmYmI3LCAweDM0NWY4NmE2LCAweGRjODQ3ZDFmLAorICAgIDB4NDE0N2Y1NGIsIDB4YTk5YzBlZjIsIDB4ZDBmNjczZTMsIDB4MzgyZDg4NWEsIDB4MjIyMjg5YzEsCisgICAgMHhjYWY5NzI3OCwgMHhiMzkzMGY2OSwgMHg1YjQ4ZjRkMCwgMHg4OTE0MWVjMCwgMHg2MWNmZTU3OSwKKyAgICAweDE4YTU5ODY4LCAweGYwN2U2M2QxLCAweGVhNzE2MjRhLCAweDAyYWE5OWYzLCAweDdiYzBlNGUyLAorICAgIDB4OTMxYjFmNWIsIDB4MGVkODk3MGYsIDB4ZTYwMzZjYjYsIDB4OWY2OTExYTcsIDB4NzdiMmVhMWUsCisgICAgMHg2ZGJkZWI4NSwgMHg4NTY2MTAzYywgMHhmYzBjNmQyZCwgMHgxNGQ3OTY5NCwgMHg1OGI1YjkwYywKKyAgICAweGIwNmU0MmI1LCAweGM5MDQzZmE0LCAweDIxZGZjNDFkLCAweDNiZDBjNTg2LCAweGQzMGIzZTNmLAorICAgIDB4YWE2MTQzMmUsIDB4NDJiYWI4OTcsIDB4ZGY3OTMwYzMsIDB4MzdhMmNiN2EsIDB4NGVjOGI2NmIsCisgICAgMHhhNjEzNGRkMiwgMHhiYzFjNGM0OSwgMHg1NGM3YjdmMCwgMHgyZGFkY2FlMSwgMHhjNTc2MzE1OCwKKyAgICAweDE3MmFkYjQ4LCAweGZmZjEyMGYxLCAweDg2OWI1ZGUwLCAweDZlNDBhNjU5LCAweDc0NGZhN2MyLAorICAgIDB4OWM5NDVjN2IsIDB4ZTVmZTIxNmEsIDB4MGQyNWRhZDMsIDB4OTBlNjUyODcsIDB4NzgzZGE5M2UsCisgICAgMHgwMTU3ZDQyZiwgMHhlOThjMmY5NiwgMHhmMzgzMmUwZCwgMHgxYjU4ZDViNCwgMHg2MjMyYThhNSwKKyAgICAweDhhZTk1MzFjfSwKKyAgIHsweDAwMDAwMDAwLCAweDkxOTE2OGFlLCAweDYzMjVhMDg3LCAweGYyYjRjODI5LCAweDg3NGMzMWQ0LAorICAgIDB4MTZkZDU5N2EsIDB4ZTQ2OTkxNTMsIDB4NzVmOGY5ZmQsIDB4NGY5ZjEzNzMsIDB4ZGUwZTdiZGQsCisgICAgMHgyY2JhYjNmNCwgMHhiZDJiZGI1YSwgMHhjOGQzMjJhNywgMHg1OTQyNGEwOSwgMHhhYmY2ODIyMCwKKyAgICAweDNhNjdlYThlLCAweDllM2UyN2U2LCAweDBmYWY0ZjQ4LCAweGZkMWI4NzYxLCAweDZjOGFlZmNmLAorICAgIDB4MTk3MjE2MzIsIDB4ODhlMzdlOWMsIDB4N2E1N2I2YjUsIDB4ZWJjNmRlMWIsIDB4ZDFhMTM0OTUsCisgICAgMHg0MDMwNWMzYiwgMHhiMjg0OTQxMiwgMHgyMzE1ZmNiYywgMHg1NmVkMDU0MSwgMHhjNzdjNmRlZiwKKyAgICAweDM1YzhhNWM2LCAweGE0NTljZDY4LCAweDdkN2IzZjE3LCAweGVjZWE1N2I5LCAweDFlNWU5ZjkwLAorICAgIDB4OGZjZmY3M2UsIDB4ZmEzNzBlYzMsIDB4NmJhNjY2NmQsIDB4OTkxMmFlNDQsIDB4MDg4M2M2ZWEsCisgICAgMHgzMmU0MmM2NCwgMHhhMzc1NDRjYSwgMHg1MWMxOGNlMywgMHhjMDUwZTQ0ZCwgMHhiNWE4MWRiMCwKKyAgICAweDI0Mzk3NTFlLCAweGQ2OGRiZDM3LCAweDQ3MWNkNTk5LCAweGUzNDUxOGYxLCAweDcyZDQ3MDVmLAorICAgIDB4ODA2MGI4NzYsIDB4MTFmMWQwZDgsIDB4NjQwOTI5MjUsIDB4ZjU5ODQxOGIsIDB4MDcyYzg5YTIsCisgICAgMHg5NmJkZTEwYywgMHhhY2RhMGI4MiwgMHgzZDRiNjMyYywgMHhjZmZmYWIwNSwgMHg1ZTZlYzNhYiwKKyAgICAweDJiOTYzYTU2LCAweGJhMDc1MmY4LCAweDQ4YjM5YWQxLCAweGQ5MjJmMjdmLCAweGZhZjY3ZTJlLAorICAgIDB4NmI2NzE2ODAsIDB4OTlkM2RlYTksIDB4MDg0MmI2MDcsIDB4N2RiYTRmZmEsIDB4ZWMyYjI3NTQsCisgICAgMHgxZTlmZWY3ZCwgMHg4ZjBlODdkMywgMHhiNTY5NmQ1ZCwgMHgyNGY4MDVmMywgMHhkNjRjY2RkYSwKKyAgICAweDQ3ZGRhNTc0LCAweDMyMjU1Yzg5LCAweGEzYjQzNDI3LCAweDUxMDBmYzBlLCAweGMwOTE5NGEwLAorICAgIDB4NjRjODU5YzgsIDB4ZjU1OTMxNjYsIDB4MDdlZGY5NGYsIDB4OTY3YzkxZTEsIDB4ZTM4NDY4MWMsCisgICAgMHg3MjE1MDBiMiwgMHg4MGExYzg5YiwgMHgxMTMwYTAzNSwgMHgyYjU3NGFiYiwgMHhiYWM2MjIxNSwKKyAgICAweDQ4NzJlYTNjLCAweGQ5ZTM4MjkyLCAweGFjMWI3YjZmLCAweDNkOGExM2MxLCAweGNmM2VkYmU4LAorICAgIDB4NWVhZmIzNDYsIDB4ODc4ZDQxMzksIDB4MTYxYzI5OTcsIDB4ZTRhOGUxYmUsIDB4NzUzOTg5MTAsCisgICAgMHgwMGMxNzBlZCwgMHg5MTUwMTg0MywgMHg2M2U0ZDA2YSwgMHhmMjc1YjhjNCwgMHhjODEyNTI0YSwKKyAgICAweDU5ODMzYWU0LCAweGFiMzdmMmNkLCAweDNhYTY5YTYzLCAweDRmNWU2MzllLCAweGRlY2YwYjMwLAorICAgIDB4MmM3YmMzMTksIDB4YmRlYWFiYjcsIDB4MTliMzY2ZGYsIDB4ODgyMjBlNzEsIDB4N2E5NmM2NTgsCisgICAgMHhlYjA3YWVmNiwgMHg5ZWZmNTcwYiwgMHgwZjZlM2ZhNSwgMHhmZGRhZjc4YywgMHg2YzRiOWYyMiwKKyAgICAweDU2MmM3NWFjLCAweGM3YmQxZDAyLCAweDM1MDlkNTJiLCAweGE0OThiZDg1LCAweGQxNjA0NDc4LAorICAgIDB4NDBmMTJjZDYsIDB4YjI0NWU0ZmYsIDB4MjNkNDhjNTEsIDB4ZjRlZGZkNWMsIDB4NjU3Yzk1ZjIsCisgICAgMHg5N2M4NWRkYiwgMHgwNjU5MzU3NSwgMHg3M2ExY2M4OCwgMHhlMjMwYTQyNiwgMHgxMDg0NmMwZiwKKyAgICAweDgxMTUwNGExLCAweGJiNzJlZTJmLCAweDJhZTM4NjgxLCAweGQ4NTc0ZWE4LCAweDQ5YzYyNjA2LAorICAgIDB4M2MzZWRmZmIsIDB4YWRhZmI3NTUsIDB4NWYxYjdmN2MsIDB4Y2U4YTE3ZDIsIDB4NmFkM2RhYmEsCisgICAgMHhmYjQyYjIxNCwgMHgwOWY2N2EzZCwgMHg5ODY3MTI5MywgMHhlZDlmZWI2ZSwgMHg3YzBlODNjMCwKKyAgICAweDhlYmE0YmU5LCAweDFmMmIyMzQ3LCAweDI1NGNjOWM5LCAweGI0ZGRhMTY3LCAweDQ2Njk2OTRlLAorICAgIDB4ZDdmODAxZTAsIDB4YTIwMGY4MWQsIDB4MzM5MTkwYjMsIDB4YzEyNTU4OWEsIDB4NTBiNDMwMzQsCisgICAgMHg4OTk2YzI0YiwgMHgxODA3YWFlNSwgMHhlYWIzNjJjYywgMHg3YjIyMGE2MiwgMHgwZWRhZjM5ZiwKKyAgICAweDlmNGI5YjMxLCAweDZkZmY1MzE4LCAweGZjNmUzYmI2LCAweGM2MDlkMTM4LCAweDU3OThiOTk2LAorICAgIDB4YTUyYzcxYmYsIDB4MzRiZDE5MTEsIDB4NDE0NWUwZWMsIDB4ZDBkNDg4NDIsIDB4MjI2MDQwNmIsCisgICAgMHhiM2YxMjhjNSwgMHgxN2E4ZTVhZCwgMHg4NjM5OGQwMywgMHg3NDhkNDUyYSwgMHhlNTFjMmQ4NCwKKyAgICAweDkwZTRkNDc5LCAweDAxNzViY2Q3LCAweGYzYzE3NGZlLCAweDYyNTAxYzUwLCAweDU4MzdmNmRlLAorICAgIDB4YzlhNjllNzAsIDB4M2IxMjU2NTksIDB4YWE4MzNlZjcsIDB4ZGY3YmM3MGEsIDB4NGVlYWFmYTQsCisgICAgMHhiYzVlNjc4ZCwgMHgyZGNmMGYyMywgMHgwZTFiODM3MiwgMHg5ZjhhZWJkYywgMHg2ZDNlMjNmNSwKKyAgICAweGZjYWY0YjViLCAweDg5NTdiMmE2LCAweDE4YzZkYTA4LCAweGVhNzIxMjIxLCAweDdiZTM3YThmLAorICAgIDB4NDE4NDkwMDEsIDB4ZDAxNWY4YWYsIDB4MjJhMTMwODYsIDB4YjMzMDU4MjgsIDB4YzZjOGExZDUsCisgICAgMHg1NzU5Yzk3YiwgMHhhNWVkMDE1MiwgMHgzNDdjNjlmYywgMHg5MDI1YTQ5NCwgMHgwMWI0Y2MzYSwKKyAgICAweGYzMDAwNDEzLCAweDYyOTE2Y2JkLCAweDE3Njk5NTQwLCAweDg2ZjhmZGVlLCAweDc0NGMzNWM3LAorICAgIDB4ZTVkZDVkNjksIDB4ZGZiYWI3ZTcsIDB4NGUyYmRmNDksIDB4YmM5ZjE3NjAsIDB4MmQwZTdmY2UsCisgICAgMHg1OGY2ODYzMywgMHhjOTY3ZWU5ZCwgMHgzYmQzMjZiNCwgMHhhYTQyNGUxYSwgMHg3MzYwYmM2NSwKKyAgICAweGUyZjFkNGNiLCAweDEwNDUxY2UyLCAweDgxZDQ3NDRjLCAweGY0MmM4ZGIxLCAweDY1YmRlNTFmLAorICAgIDB4OTcwOTJkMzYsIDB4MDY5ODQ1OTgsIDB4M2NmZmFmMTYsIDB4YWQ2ZWM3YjgsIDB4NWZkYTBmOTEsCisgICAgMHhjZTRiNjczZiwgMHhiYmIzOWVjMiwgMHgyYTIyZjY2YywgMHhkODk2M2U0NSwgMHg0OTA3NTZlYiwKKyAgICAweGVkNWU5YjgzLCAweDdjY2ZmMzJkLCAweDhlN2IzYjA0LCAweDFmZWE1M2FhLCAweDZhMTJhYTU3LAorICAgIDB4ZmI4M2MyZjksIDB4MDkzNzBhZDAsIDB4OThhNjYyN2UsIDB4YTJjMTg4ZjAsIDB4MzM1MGUwNWUsCisgICAgMHhjMWU0Mjg3NywgMHg1MDc1NDBkOSwgMHgyNThkYjkyNCwgMHhiNDFjZDE4YSwgMHg0NmE4MTlhMywKKyAgICAweGQ3Mzk3MTBkfX07CisKKyNlbmRpZgorCisjZW5kaWYKKworI2lmIE4gPT0gNQorCisjaWYgVyA9PSA4CisKK2xvY2FsIGNvbnN0IHpfY3JjX3QgRkFSIGNyY19icmFpZF90YWJsZVtdWzI1Nl0gPSB7CisgICB7MHgwMDAwMDAwMCwgMHhhZjQ0OTI0NywgMHg4NWY4MjJjZiwgMHgyYWJjYjA4OCwgMHhkMDgxNDNkZiwKKyAgICAweDdmYzVkMTk4LCAweDU1Nzk2MTEwLCAweGZhM2RmMzU3LCAweDdhNzM4MWZmLCAweGQ1MzcxM2I4LAorICAgIDB4ZmY4YmEzMzAsIDB4NTBjZjMxNzcsIDB4YWFmMmMyMjAsIDB4MDViNjUwNjcsIDB4MmYwYWUwZWYsCisgICAgMHg4MDRlNzJhOCwgMHhmNGU3MDNmZSwgMHg1YmEzOTFiOSwgMHg3MTFmMjEzMSwgMHhkZTViYjM3NiwKKyAgICAweDI0NjY0MDIxLCAweDhiMjJkMjY2LCAweGExOWU2MmVlLCAweDBlZGFmMGE5LCAweDhlOTQ4MjAxLAorICAgIDB4MjFkMDEwNDYsIDB4MGI2Y2EwY2UsIDB4YTQyODMyODksIDB4NWUxNWMxZGUsIDB4ZjE1MTUzOTksCisgICAgMHhkYmVkZTMxMSwgMHg3NGE5NzE1NiwgMHgzMmJmMDFiZCwgMHg5ZGZiOTNmYSwgMHhiNzQ3MjM3MiwKKyAgICAweDE4MDNiMTM1LCAweGUyM2U0MjYyLCAweDRkN2FkMDI1LCAweDY3YzY2MGFkLCAweGM4ODJmMmVhLAorICAgIDB4NDhjYzgwNDIsIDB4ZTc4ODEyMDUsIDB4Y2QzNGEyOGQsIDB4NjI3MDMwY2EsIDB4OTg0ZGMzOWQsCisgICAgMHgzNzA5NTFkYSwgMHgxZGI1ZTE1MiwgMHhiMmYxNzMxNSwgMHhjNjU4MDI0MywgMHg2OTFjOTAwNCwKKyAgICAweDQzYTAyMDhjLCAweGVjZTRiMmNiLCAweDE2ZDk0MTljLCAweGI5OWRkM2RiLCAweDkzMjE2MzUzLAorICAgIDB4M2M2NWYxMTQsIDB4YmMyYjgzYmMsIDB4MTM2ZjExZmIsIDB4MzlkM2ExNzMsIDB4OTY5NzMzMzQsCisgICAgMHg2Y2FhYzA2MywgMHhjM2VlNTIyNCwgMHhlOTUyZTJhYywgMHg0NjE2NzBlYiwgMHg2NTdlMDM3YSwKKyAgICAweGNhM2E5MTNkLCAweGUwODYyMWI1LCAweDRmYzJiM2YyLCAweGI1ZmY0MGE1LCAweDFhYmJkMmUyLAorICAgIDB4MzAwNzYyNmEsIDB4OWY0M2YwMmQsIDB4MWYwZDgyODUsIDB4YjA0OTEwYzIsIDB4OWFmNWEwNGEsCisgICAgMHgzNWIxMzIwZCwgMHhjZjhjYzE1YSwgMHg2MGM4NTMxZCwgMHg0YTc0ZTM5NSwgMHhlNTMwNzFkMiwKKyAgICAweDkxOTkwMDg0LCAweDNlZGQ5MmMzLCAweDE0NjEyMjRiLCAweGJiMjViMDBjLCAweDQxMTg0MzViLAorICAgIDB4ZWU1Y2QxMWMsIDB4YzRlMDYxOTQsIDB4NmJhNGYzZDMsIDB4ZWJlYTgxN2IsIDB4NDRhZTEzM2MsCisgICAgMHg2ZTEyYTNiNCwgMHhjMTU2MzFmMywgMHgzYjZiYzJhNCwgMHg5NDJmNTBlMywgMHhiZTkzZTA2YiwKKyAgICAweDExZDc3MjJjLCAweDU3YzEwMmM3LCAweGY4ODU5MDgwLCAweGQyMzkyMDA4LCAweDdkN2RiMjRmLAorICAgIDB4ODc0MDQxMTgsIDB4MjgwNGQzNWYsIDB4MDJiODYzZDcsIDB4YWRmY2YxOTAsIDB4MmRiMjgzMzgsCisgICAgMHg4MmY2MTE3ZiwgMHhhODRhYTFmNywgMHgwNzBlMzNiMCwgMHhmZDMzYzBlNywgMHg1Mjc3NTJhMCwKKyAgICAweDc4Y2JlMjI4LCAweGQ3OGY3MDZmLCAweGEzMjYwMTM5LCAweDBjNjI5MzdlLCAweDI2ZGUyM2Y2LAorICAgIDB4ODk5YWIxYjEsIDB4NzNhNzQyZTYsIDB4ZGNlM2QwYTEsIDB4ZjY1ZjYwMjksIDB4NTkxYmYyNmUsCisgICAgMHhkOTU1ODBjNiwgMHg3NjExMTI4MSwgMHg1Y2FkYTIwOSwgMHhmM2U5MzA0ZSwgMHgwOWQ0YzMxOSwKKyAgICAweGE2OTA1MTVlLCAweDhjMmNlMWQ2LCAweDIzNjg3MzkxLCAweGNhZmMwNmY0LCAweDY1Yjg5NGIzLAorICAgIDB4NGYwNDI0M2IsIDB4ZTA0MGI2N2MsIDB4MWE3ZDQ1MmIsIDB4YjUzOWQ3NmMsIDB4OWY4NTY3ZTQsCisgICAgMHgzMGMxZjVhMywgMHhiMDhmODcwYiwgMHgxZmNiMTU0YywgMHgzNTc3YTVjNCwgMHg5YTMzMzc4MywKKyAgICAweDYwMGVjNGQ0LCAweGNmNGE1NjkzLCAweGU1ZjZlNjFiLCAweDRhYjI3NDVjLCAweDNlMWIwNTBhLAorICAgIDB4OTE1Zjk3NGQsIDB4YmJlMzI3YzUsIDB4MTRhN2I1ODIsIDB4ZWU5YTQ2ZDUsIDB4NDFkZWQ0OTIsCisgICAgMHg2YjYyNjQxYSwgMHhjNDI2ZjY1ZCwgMHg0NDY4ODRmNSwgMHhlYjJjMTZiMiwgMHhjMTkwYTYzYSwKKyAgICAweDZlZDQzNDdkLCAweDk0ZTljNzJhLCAweDNiYWQ1NTZkLCAweDExMTFlNWU1LCAweGJlNTU3N2EyLAorICAgIDB4Zjg0MzA3NDksIDB4NTcwNzk1MGUsIDB4N2RiYjI1ODYsIDB4ZDJmZmI3YzEsIDB4MjhjMjQ0OTYsCisgICAgMHg4Nzg2ZDZkMSwgMHhhZDNhNjY1OSwgMHgwMjdlZjQxZSwgMHg4MjMwODZiNiwgMHgyZDc0MTRmMSwKKyAgICAweDA3YzhhNDc5LCAweGE4OGMzNjNlLCAweDUyYjFjNTY5LCAweGZkZjU1NzJlLCAweGQ3NDllN2E2LAorICAgIDB4NzgwZDc1ZTEsIDB4MGNhNDA0YjcsIDB4YTNlMDk2ZjAsIDB4ODk1YzI2NzgsIDB4MjYxOGI0M2YsCisgICAgMHhkYzI1NDc2OCwgMHg3MzYxZDUyZiwgMHg1OWRkNjVhNywgMHhmNjk5ZjdlMCwgMHg3NmQ3ODU0OCwKKyAgICAweGQ5OTMxNzBmLCAweGYzMmZhNzg3LCAweDVjNmIzNWMwLCAweGE2NTZjNjk3LCAweDA5MTI1NGQwLAorICAgIDB4MjNhZWU0NTgsIDB4OGNlYTc2MWYsIDB4YWY4MjA1OGUsIDB4MDBjNjk3YzksIDB4MmE3YTI3NDEsCisgICAgMHg4NTNlYjUwNiwgMHg3ZjAzNDY1MSwgMHhkMDQ3ZDQxNiwgMHhmYWZiNjQ5ZSwgMHg1NWJmZjZkOSwKKyAgICAweGQ1ZjE4NDcxLCAweDdhYjUxNjM2LCAweDUwMDlhNmJlLCAweGZmNGQzNGY5LCAweDA1NzBjN2FlLAorICAgIDB4YWEzNDU1ZTksIDB4ODA4OGU1NjEsIDB4MmZjYzc3MjYsIDB4NWI2NTA2NzAsIDB4ZjQyMTk0MzcsCisgICAgMHhkZTlkMjRiZiwgMHg3MWQ5YjZmOCwgMHg4YmU0NDVhZiwgMHgyNGEwZDdlOCwgMHgwZTFjNjc2MCwKKyAgICAweGExNThmNTI3LCAweDIxMTY4NzhmLCAweDhlNTIxNWM4LCAweGE0ZWVhNTQwLCAweDBiYWEzNzA3LAorICAgIDB4ZjE5N2M0NTAsIDB4NWVkMzU2MTcsIDB4NzQ2ZmU2OWYsIDB4ZGIyYjc0ZDgsIDB4OWQzZDA0MzMsCisgICAgMHgzMjc5OTY3NCwgMHgxOGM1MjZmYywgMHhiNzgxYjRiYiwgMHg0ZGJjNDdlYywgMHhlMmY4ZDVhYiwKKyAgICAweGM4NDQ2NTIzLCAweDY3MDBmNzY0LCAweGU3NGU4NWNjLCAweDQ4MGExNzhiLCAweDYyYjZhNzAzLAorICAgIDB4Y2RmMjM1NDQsIDB4MzdjZmM2MTMsIDB4OTg4YjU0NTQsIDB4YjIzN2U0ZGMsIDB4MWQ3Mzc2OWIsCisgICAgMHg2OWRhMDdjZCwgMHhjNjllOTU4YSwgMHhlYzIyMjUwMiwgMHg0MzY2Yjc0NSwgMHhiOTViNDQxMiwKKyAgICAweDE2MWZkNjU1LCAweDNjYTM2NmRkLCAweDkzZTdmNDlhLCAweDEzYTk4NjMyLCAweGJjZWQxNDc1LAorICAgIDB4OTY1MWE0ZmQsIDB4MzkxNTM2YmEsIDB4YzMyOGM1ZWQsIDB4NmM2YzU3YWEsIDB4NDZkMGU3MjIsCisgICAgMHhlOTk0NzU2NX0sCisgICB7MHgwMDAwMDAwMCwgMHg0ZTg5MGJhOSwgMHg5ZDEyMTc1MiwgMHhkMzliMWNmYiwgMHhlMTU1MjhlNSwKKyAgICAweGFmZGMyMzRjLCAweDdjNDczZmI3LCAweDMyY2UzNDFlLCAweDE5ZGI1NzhiLCAweDU3NTI1YzIyLAorICAgIDB4ODRjOTQwZDksIDB4Y2E0MDRiNzAsIDB4Zjg4ZTdmNmUsIDB4YjYwNzc0YzcsIDB4NjU5YzY4M2MsCisgICAgMHgyYjE1NjM5NSwgMHgzM2I2YWYxNiwgMHg3ZDNmYTRiZiwgMHhhZWE0Yjg0NCwgMHhlMDJkYjNlZCwKKyAgICAweGQyZTM4N2YzLCAweDljNmE4YzVhLCAweDRmZjE5MGExLCAweDAxNzg5YjA4LCAweDJhNmRmODlkLAorICAgIDB4NjRlNGYzMzQsIDB4Yjc3ZmVmY2YsIDB4ZjlmNmU0NjYsIDB4Y2IzOGQwNzgsIDB4ODViMWRiZDEsCisgICAgMHg1NjJhYzcyYSwgMHgxOGEzY2M4MywgMHg2NzZkNWUyYywgMHgyOWU0NTU4NSwgMHhmYTdmNDk3ZSwKKyAgICAweGI0ZjY0MmQ3LCAweDg2Mzg3NmM5LCAweGM4YjE3ZDYwLCAweDFiMmE2MTliLCAweDU1YTM2YTMyLAorICAgIDB4N2ViNjA5YTcsIDB4MzAzZjAyMGUsIDB4ZTNhNDFlZjUsIDB4YWQyZDE1NWMsIDB4OWZlMzIxNDIsCisgICAgMHhkMTZhMmFlYiwgMHgwMmYxMzYxMCwgMHg0Yzc4M2RiOSwgMHg1NGRiZjEzYSwgMHgxYTUyZmE5MywKKyAgICAweGM5YzllNjY4LCAweDg3NDBlZGMxLCAweGI1OGVkOWRmLCAweGZiMDdkMjc2LCAweDI4OWNjZThkLAorICAgIDB4NjYxNWM1MjQsIDB4NGQwMGE2YjEsIDB4MDM4OWFkMTgsIDB4ZDAxMmIxZTMsIDB4OWU5YmJhNGEsCisgICAgMHhhYzU1OGU1NCwgMHhlMmRjODVmZCwgMHgzMTQ3OTkwNiwgMHg3ZmNlOTJhZiwgMHhjZWRhYmM1OCwKKyAgICAweDgwNTNiN2YxLCAweDUzYzhhYjBhLCAweDFkNDFhMGEzLCAweDJmOGY5NGJkLCAweDYxMDY5ZjE0LAorICAgIDB4YjI5ZDgzZWYsIDB4ZmMxNDg4NDYsIDB4ZDcwMWViZDMsIDB4OTk4OGUwN2EsIDB4NGExM2ZjODEsCisgICAgMHgwNDlhZjcyOCwgMHgzNjU0YzMzNiwgMHg3OGRkYzg5ZiwgMHhhYjQ2ZDQ2NCwgMHhlNWNmZGZjZCwKKyAgICAweGZkNmMxMzRlLCAweGIzZTUxOGU3LCAweDYwN2UwNDFjLCAweDJlZjcwZmI1LCAweDFjMzkzYmFiLAorICAgIDB4NTJiMDMwMDIsIDB4ODEyYjJjZjksIDB4Y2ZhMjI3NTAsIDB4ZTRiNzQ0YzUsIDB4YWEzZTRmNmMsCisgICAgMHg3OWE1NTM5NywgMHgzNzJjNTgzZSwgMHgwNWUyNmMyMCwgMHg0YjZiNjc4OSwgMHg5OGYwN2I3MiwKKyAgICAweGQ2Nzk3MGRiLCAweGE5YjdlMjc0LCAweGU3M2VlOWRkLCAweDM0YTVmNTI2LCAweDdhMmNmZThmLAorICAgIDB4NDhlMmNhOTEsIDB4MDY2YmMxMzgsIDB4ZDVmMGRkYzMsIDB4OWI3OWQ2NmEsIDB4YjA2Y2I1ZmYsCisgICAgMHhmZWU1YmU1NiwgMHgyZDdlYTJhZCwgMHg2M2Y3YTkwNCwgMHg1MTM5OWQxYSwgMHgxZmIwOTZiMywKKyAgICAweGNjMmI4YTQ4LCAweDgyYTI4MWUxLCAweDlhMDE0ZDYyLCAweGQ0ODg0NmNiLCAweDA3MTM1YTMwLAorICAgIDB4NDk5YTUxOTksIDB4N2I1NDY1ODcsIDB4MzVkZDZlMmUsIDB4ZTY0NjcyZDUsIDB4YThjZjc5N2MsCisgICAgMHg4M2RhMWFlOSwgMHhjZDUzMTE0MCwgMHgxZWM4MGRiYiwgMHg1MDQxMDYxMiwgMHg2MjhmMzIwYywKKyAgICAweDJjMDYzOWE1LCAweGZmOWQyNTVlLCAweGIxMTQyZWY3LCAweDQ2YzQ3ZWYxLCAweDA4NGQ3NTU4LAorICAgIDB4ZGJkNjY5YTMsIDB4OTU1ZjYyMGEsIDB4YTc5MTU2MTQsIDB4ZTkxODVkYmQsIDB4M2E4MzQxNDYsCisgICAgMHg3NDBhNGFlZiwgMHg1ZjFmMjk3YSwgMHgxMTk2MjJkMywgMHhjMjBkM2UyOCwgMHg4Yzg0MzU4MSwKKyAgICAweGJlNGEwMTlmLCAweGYwYzMwYTM2LCAweDIzNTgxNmNkLCAweDZkZDExZDY0LCAweDc1NzJkMWU3LAorICAgIDB4M2JmYmRhNGUsIDB4ZTg2MGM2YjUsIDB4YTZlOWNkMWMsIDB4OTQyN2Y5MDIsIDB4ZGFhZWYyYWIsCisgICAgMHgwOTM1ZWU1MCwgMHg0N2JjZTVmOSwgMHg2Y2E5ODY2YywgMHgyMjIwOGRjNSwgMHhmMWJiOTEzZSwKKyAgICAweGJmMzI5YTk3LCAweDhkZmNhZTg5LCAweGMzNzVhNTIwLCAweDEwZWViOWRiLCAweDVlNjdiMjcyLAorICAgIDB4MjFhOTIwZGQsIDB4NmYyMDJiNzQsIDB4YmNiYjM3OGYsIDB4ZjIzMjNjMjYsIDB4YzBmYzA4MzgsCisgICAgMHg4ZTc1MDM5MSwgMHg1ZGVlMWY2YSwgMHgxMzY3MTRjMywgMHgzODcyNzc1NiwgMHg3NmZiN2NmZiwKKyAgICAweGE1NjA2MDA0LCAweGViZTk2YmFkLCAweGQ5Mjc1ZmIzLCAweDk3YWU1NDFhLCAweDQ0MzU0OGUxLAorICAgIDB4MGFiYzQzNDgsIDB4MTIxZjhmY2IsIDB4NWM5Njg0NjIsIDB4OGYwZDk4OTksIDB4YzE4NDkzMzAsCisgICAgMHhmMzRhYTcyZSwgMHhiZGMzYWM4NywgMHg2ZTU4YjA3YywgMHgyMGQxYmJkNSwgMHgwYmM0ZDg0MCwKKyAgICAweDQ1NGRkM2U5LCAweDk2ZDZjZjEyLCAweGQ4NWZjNGJiLCAweGVhOTFmMGE1LCAweGE0MThmYjBjLAorICAgIDB4Nzc4M2U3ZjcsIDB4MzkwYWVjNWUsIDB4ODgxZWMyYTksIDB4YzY5N2M5MDAsIDB4MTUwY2Q1ZmIsCisgICAgMHg1Yjg1ZGU1MiwgMHg2OTRiZWE0YywgMHgyN2MyZTFlNSwgMHhmNDU5ZmQxZSwgMHhiYWQwZjZiNywKKyAgICAweDkxYzU5NTIyLCAweGRmNGM5ZThiLCAweDBjZDc4MjcwLCAweDQyNWU4OWQ5LCAweDcwOTBiZGM3LAorICAgIDB4M2UxOWI2NmUsIDB4ZWQ4MmFhOTUsIDB4YTMwYmExM2MsIDB4YmJhODZkYmYsIDB4ZjUyMTY2MTYsCisgICAgMHgyNmJhN2FlZCwgMHg2ODMzNzE0NCwgMHg1YWZkNDU1YSwgMHgxNDc0NGVmMywgMHhjN2VmNTIwOCwKKyAgICAweDg5NjY1OWExLCAweGEyNzMzYTM0LCAweGVjZmEzMTlkLCAweDNmNjEyZDY2LCAweDcxZTgyNmNmLAorICAgIDB4NDMyNjEyZDEsIDB4MGRhZjE5NzgsIDB4ZGUzNDA1ODMsIDB4OTBiZDBlMmEsIDB4ZWY3MzljODUsCisgICAgMHhhMWZhOTcyYywgMHg3MjYxOGJkNywgMHgzY2U4ODA3ZSwgMHgwZTI2YjQ2MCwgMHg0MGFmYmZjOSwKKyAgICAweDkzMzRhMzMyLCAweGRkYmRhODliLCAweGY2YThjYjBlLCAweGI4MjFjMGE3LCAweDZiYmFkYzVjLAorICAgIDB4MjUzM2Q3ZjUsIDB4MTdmZGUzZWIsIDB4NTk3NGU4NDIsIDB4OGFlZmY0YjksIDB4YzQ2NmZmMTAsCisgICAgMHhkY2M1MzM5MywgMHg5MjRjMzgzYSwgMHg0MWQ3MjRjMSwgMHgwZjVlMmY2OCwgMHgzZDkwMWI3NiwKKyAgICAweDczMTkxMGRmLCAweGEwODIwYzI0LCAweGVlMGIwNzhkLCAweGM1MWU2NDE4LCAweDhiOTc2ZmIxLAorICAgIDB4NTgwYzczNGEsIDB4MTY4NTc4ZTMsIDB4MjQ0YjRjZmQsIDB4NmFjMjQ3NTQsIDB4Yjk1OTViYWYsCisgICAgMHhmN2QwNTAwNn0sCisgICB7MHgwMDAwMDAwMCwgMHg4ZDg4ZmRlMiwgMHhjMDYwZmQ4NSwgMHg0ZGU4MDA2NywgMHg1YmIwZmQ0YiwKKyAgICAweGQ2MzgwMGE5LCAweDliZDAwMGNlLCAweDE2NThmZDJjLCAweGI3NjFmYTk2LCAweDNhZTkwNzc0LAorICAgIDB4NzcwMTA3MTMsIDB4ZmE4OWZhZjEsIDB4ZWNkMTA3ZGQsIDB4NjE1OWZhM2YsIDB4MmNiMWZhNTgsCisgICAgMHhhMTM5MDdiYSwgMHhiNWIyZjM2ZCwgMHgzODNhMGU4ZiwgMHg3NWQyMGVlOCwgMHhmODVhZjMwYSwKKyAgICAweGVlMDIwZTI2LCAweDYzOGFmM2M0LCAweDJlNjJmM2EzLCAweGEzZWEwZTQxLCAweDAyZDMwOWZiLAorICAgIDB4OGY1YmY0MTksIDB4YzJiM2Y0N2UsIDB4NGYzYjA5OWMsIDB4NTk2M2Y0YjAsIDB4ZDRlYjA5NTIsCisgICAgMHg5OTAzMDkzNSwgMHgxNDhiZjRkNywgMHhiMDE0ZTA5YiwgMHgzZDljMWQ3OSwgMHg3MDc0MWQxZSwKKyAgICAweGZkZmNlMGZjLCAweGViYTQxZGQwLCAweDY2MmNlMDMyLCAweDJiYzRlMDU1LCAweGE2NGMxZGI3LAorICAgIDB4MDc3NTFhMGQsIDB4OGFmZGU3ZWYsIDB4YzcxNWU3ODgsIDB4NGE5ZDFhNmEsIDB4NWNjNWU3NDYsCisgICAgMHhkMTRkMWFhNCwgMHg5Y2E1MWFjMywgMHgxMTJkZTcyMSwgMHgwNWE2MTNmNiwgMHg4ODJlZWUxNCwKKyAgICAweGM1YzZlZTczLCAweDQ4NGUxMzkxLCAweDVlMTZlZWJkLCAweGQzOWUxMzVmLCAweDllNzYxMzM4LAorICAgIDB4MTNmZWVlZGEsIDB4YjJjN2U5NjAsIDB4M2Y0ZjE0ODIsIDB4NzJhNzE0ZTUsIDB4ZmYyZmU5MDcsCisgICAgMHhlOTc3MTQyYiwgMHg2NGZmZTljOSwgMHgyOTE3ZTlhZSwgMHhhNDlmMTQ0YywgMHhiYjU4Yzc3NywKKyAgICAweDM2ZDAzYTk1LCAweDdiMzgzYWYyLCAweGY2YjBjNzEwLCAweGUwZTgzYTNjLCAweDZkNjBjN2RlLAorICAgIDB4MjA4OGM3YjksIDB4YWQwMDNhNWIsIDB4MGMzOTNkZTEsIDB4ODFiMWMwMDMsIDB4Y2M1OWMwNjQsCisgICAgMHg0MWQxM2Q4NiwgMHg1Nzg5YzBhYSwgMHhkYTAxM2Q0OCwgMHg5N2U5M2QyZiwgMHgxYTYxYzBjZCwKKyAgICAweDBlZWEzNDFhLCAweDgzNjJjOWY4LCAweGNlOGFjOTlmLCAweDQzMDIzNDdkLCAweDU1NWFjOTUxLAorICAgIDB4ZDhkMjM0YjMsIDB4OTUzYTM0ZDQsIDB4MThiMmM5MzYsIDB4Yjk4YmNlOGMsIDB4MzQwMzMzNmUsCisgICAgMHg3OWViMzMwOSwgMHhmNDYzY2VlYiwgMHhlMjNiMzNjNywgMHg2ZmIzY2UyNSwgMHgyMjViY2U0MiwKKyAgICAweGFmZDMzM2EwLCAweDBiNGMyN2VjLCAweDg2YzRkYTBlLCAweGNiMmNkYTY5LCAweDQ2YTQyNzhiLAorICAgIDB4NTBmY2RhYTcsIDB4ZGQ3NDI3NDUsIDB4OTA5YzI3MjIsIDB4MWQxNGRhYzAsIDB4YmMyZGRkN2EsCisgICAgMHgzMWE1MjA5OCwgMHg3YzRkMjBmZiwgMHhmMWM1ZGQxZCwgMHhlNzlkMjAzMSwgMHg2YTE1ZGRkMywKKyAgICAweDI3ZmRkZGI0LCAweGFhNzUyMDU2LCAweGJlZmVkNDgxLCAweDMzNzYyOTYzLCAweDdlOWUyOTA0LAorICAgIDB4ZjMxNmQ0ZTYsIDB4ZTU0ZTI5Y2EsIDB4NjhjNmQ0MjgsIDB4MjUyZWQ0NGYsIDB4YThhNjI5YWQsCisgICAgMHgwOTlmMmUxNywgMHg4NDE3ZDNmNSwgMHhjOWZmZDM5MiwgMHg0NDc3MmU3MCwgMHg1MjJmZDM1YywKKyAgICAweGRmYTcyZWJlLCAweDkyNGYyZWQ5LCAweDFmYzdkMzNiLCAweGFkYzA4OGFmLCAweDIwNDg3NTRkLAorICAgIDB4NmRhMDc1MmEsIDB4ZTAyODg4YzgsIDB4ZjY3MDc1ZTQsIDB4N2JmODg4MDYsIDB4MzYxMDg4NjEsCisgICAgMHhiYjk4NzU4MywgMHgxYWExNzIzOSwgMHg5NzI5OGZkYiwgMHhkYWMxOGZiYywgMHg1NzQ5NzI1ZSwKKyAgICAweDQxMTE4ZjcyLCAweGNjOTk3MjkwLCAweDgxNzE3MmY3LCAweDBjZjk4ZjE1LCAweDE4NzI3YmMyLAorICAgIDB4OTVmYTg2MjAsIDB4ZDgxMjg2NDcsIDB4NTU5YTdiYTUsIDB4NDNjMjg2ODksIDB4Y2U0YTdiNmIsCisgICAgMHg4M2EyN2IwYywgMHgwZTJhODZlZSwgMHhhZjEzODE1NCwgMHgyMjliN2NiNiwgMHg2ZjczN2NkMSwKKyAgICAweGUyZmI4MTMzLCAweGY0YTM3YzFmLCAweDc5MmI4MWZkLCAweDM0YzM4MTlhLCAweGI5NGI3Yzc4LAorICAgIDB4MWRkNDY4MzQsIDB4OTA1Yzk1ZDYsIDB4ZGRiNDk1YjEsIDB4NTAzYzY4NTMsIDB4NDY2NDk1N2YsCisgICAgMHhjYmVjNjg5ZCwgMHg4NjA0NjhmYSwgMHgwYjhjOTUxOCwgMHhhYWI1OTJhMiwgMHgyNzNkNmY0MCwKKyAgICAweDZhZDU2ZjI3LCAweGU3NWQ5MmM1LCAweGYxMDU2ZmU5LCAweDdjOGQ5MjBiLCAweDMxNjU5MjZjLAorICAgIDB4YmNlZDZmOGUsIDB4YTg2NjliNTksIDB4MjVlZTY2YmIsIDB4NjgwNjY2ZGMsIDB4ZTU4ZTliM2UsCisgICAgMHhmM2Q2NjYxMiwgMHg3ZTVlOWJmMCwgMHgzM2I2OWI5NywgMHhiZTNlNjY3NSwgMHgxZjA3NjFjZiwKKyAgICAweDkyOGY5YzJkLCAweGRmNjc5YzRhLCAweDUyZWY2MWE4LCAweDQ0Yjc5Yzg0LCAweGM5M2Y2MTY2LAorICAgIDB4ODRkNzYxMDEsIDB4MDk1ZjljZTMsIDB4MTY5ODRmZDgsIDB4OWIxMGIyM2EsIDB4ZDZmOGIyNWQsCisgICAgMHg1YjcwNGZiZiwgMHg0ZDI4YjI5MywgMHhjMGEwNGY3MSwgMHg4ZDQ4NGYxNiwgMHgwMGMwYjJmNCwKKyAgICAweGExZjliNTRlLCAweDJjNzE0OGFjLCAweDYxOTk0OGNiLCAweGVjMTFiNTI5LCAweGZhNDk0ODA1LAorICAgIDB4NzdjMWI1ZTcsIDB4M2EyOWI1ODAsIDB4YjdhMTQ4NjIsIDB4YTMyYWJjYjUsIDB4MmVhMjQxNTcsCisgICAgMHg2MzRhNDEzMCwgMHhlZWMyYmNkMiwgMHhmODlhNDFmZSwgMHg3NTEyYmMxYywgMHgzOGZhYmM3YiwKKyAgICAweGI1NzI0MTk5LCAweDE0NGI0NjIzLCAweDk5YzNiYmMxLCAweGQ0MmJiYmE2LCAweDU5YTM0NjQ0LAorICAgIDB4NGZmYmJiNjgsIDB4YzI3MzQ2OGEsIDB4OGY5YjQ2ZWQsIDB4MDIxM2JiMGYsIDB4YTY4Y2FmNDMsCisgICAgMHgyYjA0NTJhMSwgMHg2NmVjNTJjNiwgMHhlYjY0YWYyNCwgMHhmZDNjNTIwOCwgMHg3MGI0YWZlYSwKKyAgICAweDNkNWNhZjhkLCAweGIwZDQ1MjZmLCAweDExZWQ1NWQ1LCAweDljNjVhODM3LCAweGQxOGRhODUwLAorICAgIDB4NWMwNTU1YjIsIDB4NGE1ZGE4OWUsIDB4YzdkNTU1N2MsIDB4OGEzZDU1MWIsIDB4MDdiNWE4ZjksCisgICAgMHgxMzNlNWMyZSwgMHg5ZWI2YTFjYywgMHhkMzVlYTFhYiwgMHg1ZWQ2NWM0OSwgMHg0ODhlYTE2NSwKKyAgICAweGM1MDY1Yzg3LCAweDg4ZWU1Y2UwLCAweDA1NjZhMTAyLCAweGE0NWZhNmI4LCAweDI5ZDc1YjVhLAorICAgIDB4NjQzZjViM2QsIDB4ZTliN2E2ZGYsIDB4ZmZlZjViZjMsIDB4NzI2N2E2MTEsIDB4M2Y4ZmE2NzYsCisgICAgMHhiMjA3NWI5NH0sCisgICB7MHgwMDAwMDAwMCwgMHg4MGYwMTcxZiwgMHhkYTkxMjg3ZiwgMHg1YTYxM2Y2MCwgMHg2ZTUzNTZiZiwKKyAgICAweGVlYTM0MWEwLCAweGI0YzI3ZWMwLCAweDM0MzI2OWRmLCAweGRjYTZhZDdlLCAweDVjNTZiYTYxLAorICAgIDB4MDYzNzg1MDEsIDB4ODZjNzkyMWUsIDB4YjJmNWZiYzEsIDB4MzIwNWVjZGUsIDB4Njg2NGQzYmUsCisgICAgMHhlODk0YzRhMSwgMHg2MjNjNWNiZCwgMHhlMmNjNGJhMiwgMHhiOGFkNzRjMiwgMHgzODVkNjNkZCwKKyAgICAweDBjNmYwYTAyLCAweDhjOWYxZDFkLCAweGQ2ZmUyMjdkLCAweDU2MGUzNTYyLCAweGJlOWFmMWMzLAorICAgIDB4M2U2YWU2ZGMsIDB4NjQwYmQ5YmMsIDB4ZTRmYmNlYTMsIDB4ZDBjOWE3N2MsIDB4NTAzOWIwNjMsCisgICAgMHgwYTU4OGYwMywgMHg4YWE4OTgxYywgMHhjNDc4Yjk3YSwgMHg0NDg4YWU2NSwgMHgxZWU5OTEwNSwKKyAgICAweDllMTk4NjFhLCAweGFhMmJlZmM1LCAweDJhZGJmOGRhLCAweDcwYmFjN2JhLCAweGYwNGFkMGE1LAorICAgIDB4MThkZTE0MDQsIDB4OTgyZTAzMWIsIDB4YzI0ZjNjN2IsIDB4NDJiZjJiNjQsIDB4NzY4ZDQyYmIsCisgICAgMHhmNjdkNTVhNCwgMHhhYzFjNmFjNCwgMHgyY2VjN2RkYiwgMHhhNjQ0ZTVjNywgMHgyNmI0ZjJkOCwKKyAgICAweDdjZDVjZGI4LCAweGZjMjVkYWE3LCAweGM4MTdiMzc4LCAweDQ4ZTdhNDY3LCAweDEyODY5YjA3LAorICAgIDB4OTI3NjhjMTgsIDB4N2FlMjQ4YjksIDB4ZmExMjVmYTYsIDB4YTA3MzYwYzYsIDB4MjA4Mzc3ZDksCisgICAgMHgxNGIxMWUwNiwgMHg5NDQxMDkxOSwgMHhjZTIwMzY3OSwgMHg0ZWQwMjE2NiwgMHg1MzgwNzRiNSwKKyAgICAweGQzNzA2M2FhLCAweDg5MTE1Y2NhLCAweDA5ZTE0YmQ1LCAweDNkZDMyMjBhLCAweGJkMjMzNTE1LAorICAgIDB4ZTc0MjBhNzUsIDB4NjdiMjFkNmEsIDB4OGYyNmQ5Y2IsIDB4MGZkNmNlZDQsIDB4NTViN2YxYjQsCisgICAgMHhkNTQ3ZTZhYiwgMHhlMTc1OGY3NCwgMHg2MTg1OTg2YiwgMHgzYmU0YTcwYiwgMHhiYjE0YjAxNCwKKyAgICAweDMxYmMyODA4LCAweGIxNGMzZjE3LCAweGViMmQwMDc3LCAweDZiZGQxNzY4LCAweDVmZWY3ZWI3LAorICAgIDB4ZGYxZjY5YTgsIDB4ODU3ZTU2YzgsIDB4MDU4ZTQxZDcsIDB4ZWQxYTg1NzYsIDB4NmRlYTkyNjksCisgICAgMHgzNzhiYWQwOSwgMHhiNzdiYmExNiwgMHg4MzQ5ZDNjOSwgMHgwM2I5YzRkNiwgMHg1OWQ4ZmJiNiwKKyAgICAweGQ5MjhlY2E5LCAweDk3ZjhjZGNmLCAweDE3MDhkYWQwLCAweDRkNjllNWIwLCAweGNkOTlmMmFmLAorICAgIDB4ZjlhYjliNzAsIDB4Nzk1YjhjNmYsIDB4MjMzYWIzMGYsIDB4YTNjYWE0MTAsIDB4NGI1ZTYwYjEsCisgICAgMHhjYmFlNzdhZSwgMHg5MWNmNDhjZSwgMHgxMTNmNWZkMSwgMHgyNTBkMzYwZSwgMHhhNWZkMjExMSwKKyAgICAweGZmOWMxZTcxLCAweDdmNmMwOTZlLCAweGY1YzQ5MTcyLCAweDc1MzQ4NjZkLCAweDJmNTViOTBkLAorICAgIDB4YWZhNWFlMTIsIDB4OWI5N2M3Y2QsIDB4MWI2N2QwZDIsIDB4NDEwNmVmYjIsIDB4YzFmNmY4YWQsCisgICAgMHgyOTYyM2MwYywgMHhhOTkyMmIxMywgMHhmM2YzMTQ3MywgMHg3MzAzMDM2YywgMHg0NzMxNmFiMywKKyAgICAweGM3YzE3ZGFjLCAweDlkYTA0MmNjLCAweDFkNTA1NWQzLCAweGE3MDBlOTZhLCAweDI3ZjBmZTc1LAorICAgIDB4N2Q5MWMxMTUsIDB4ZmQ2MWQ2MGEsIDB4Yzk1M2JmZDUsIDB4NDlhM2E4Y2EsIDB4MTNjMjk3YWEsCisgICAgMHg5MzMyODBiNSwgMHg3YmE2NDQxNCwgMHhmYjU2NTMwYiwgMHhhMTM3NmM2YiwgMHgyMWM3N2I3NCwKKyAgICAweDE1ZjUxMmFiLCAweDk1MDUwNWI0LCAweGNmNjQzYWQ0LCAweDRmOTQyZGNiLCAweGM1M2NiNWQ3LAorICAgIDB4NDVjY2EyYzgsIDB4MWZhZDlkYTgsIDB4OWY1ZDhhYjcsIDB4YWI2ZmUzNjgsIDB4MmI5ZmY0NzcsCisgICAgMHg3MWZlY2IxNywgMHhmMTBlZGMwOCwgMHgxOTlhMThhOSwgMHg5OTZhMGZiNiwgMHhjMzBiMzBkNiwKKyAgICAweDQzZmIyN2M5LCAweDc3Yzk0ZTE2LCAweGY3Mzk1OTA5LCAweGFkNTg2NjY5LCAweDJkYTg3MTc2LAorICAgIDB4NjM3ODUwMTAsIDB4ZTM4ODQ3MGYsIDB4YjllOTc4NmYsIDB4MzkxOTZmNzAsIDB4MGQyYjA2YWYsCisgICAgMHg4ZGRiMTFiMCwgMHhkN2JhMmVkMCwgMHg1NzRhMzljZiwgMHhiZmRlZmQ2ZSwgMHgzZjJlZWE3MSwKKyAgICAweDY1NGZkNTExLCAweGU1YmZjMjBlLCAweGQxOGRhYmQxLCAweDUxN2RiY2NlLCAweDBiMWM4M2FlLAorICAgIDB4OGJlYzk0YjEsIDB4MDE0NDBjYWQsIDB4ODFiNDFiYjIsIDB4ZGJkNTI0ZDIsIDB4NWIyNTMzY2QsCisgICAgMHg2ZjE3NWExMiwgMHhlZmU3NGQwZCwgMHhiNTg2NzI2ZCwgMHgzNTc2NjU3MiwgMHhkZGUyYTFkMywKKyAgICAweDVkMTJiNmNjLCAweDA3NzM4OWFjLCAweDg3ODM5ZWIzLCAweGIzYjFmNzZjLCAweDMzNDFlMDczLAorICAgIDB4NjkyMGRmMTMsIDB4ZTlkMGM4MGMsIDB4ZjQ4MDlkZGYsIDB4NzQ3MDhhYzAsIDB4MmUxMWI1YTAsCisgICAgMHhhZWUxYTJiZiwgMHg5YWQzY2I2MCwgMHgxYTIzZGM3ZiwgMHg0MDQyZTMxZiwgMHhjMGIyZjQwMCwKKyAgICAweDI4MjYzMGExLCAweGE4ZDYyN2JlLCAweGYyYjcxOGRlLCAweDcyNDcwZmMxLCAweDQ2NzU2NjFlLAorICAgIDB4YzY4NTcxMDEsIDB4OWNlNDRlNjEsIDB4MWMxNDU5N2UsIDB4OTZiY2MxNjIsIDB4MTY0Y2Q2N2QsCisgICAgMHg0YzJkZTkxZCwgMHhjY2RkZmUwMiwgMHhmOGVmOTdkZCwgMHg3ODFmODBjMiwgMHgyMjdlYmZhMiwKKyAgICAweGEyOGVhOGJkLCAweDRhMWE2YzFjLCAweGNhZWE3YjAzLCAweDkwOGI0NDYzLCAweDEwN2I1MzdjLAorICAgIDB4MjQ0OTNhYTMsIDB4YTRiOTJkYmMsIDB4ZmVkODEyZGMsIDB4N2UyODA1YzMsIDB4MzBmODI0YTUsCisgICAgMHhiMDA4MzNiYSwgMHhlYTY5MGNkYSwgMHg2YTk5MWJjNSwgMHg1ZWFiNzIxYSwgMHhkZTViNjUwNSwKKyAgICAweDg0M2E1YTY1LCAweDA0Y2E0ZDdhLCAweGVjNWU4OWRiLCAweDZjYWU5ZWM0LCAweDM2Y2ZhMWE0LAorICAgIDB4YjYzZmI2YmIsIDB4ODIwZGRmNjQsIDB4MDJmZGM4N2IsIDB4NTg5Y2Y3MWIsIDB4ZDg2Y2UwMDQsCisgICAgMHg1MmM0NzgxOCwgMHhkMjM0NmYwNywgMHg4ODU1NTA2NywgMHgwOGE1NDc3OCwgMHgzYzk3MmVhNywKKyAgICAweGJjNjczOWI4LCAweGU2MDYwNmQ4LCAweDY2ZjYxMWM3LCAweDhlNjJkNTY2LCAweDBlOTJjMjc5LAorICAgIDB4NTRmM2ZkMTksIDB4ZDQwM2VhMDYsIDB4ZTAzMTgzZDksIDB4NjBjMTk0YzYsIDB4M2FhMGFiYTYsCisgICAgMHhiYTUwYmNiOX0sCisgICB7MHgwMDAwMDAwMCwgMHg5NTcwZDQ5NSwgMHhmMTkwYWY2YiwgMHg2NGUwN2JmZSwgMHgzODUwNTg5NywKKyAgICAweGFkMjA4YzAyLCAweGM5YzBmN2ZjLCAweDVjYjAyMzY5LCAweDcwYTBiMTJlLCAweGU1ZDA2NWJiLAorICAgIDB4ODEzMDFlNDUsIDB4MTQ0MGNhZDAsIDB4NDhmMGU5YjksIDB4ZGQ4MDNkMmMsIDB4Yjk2MDQ2ZDIsCisgICAgMHgyYzEwOTI0NywgMHhlMTQxNjI1YywgMHg3NDMxYjZjOSwgMHgxMGQxY2QzNywgMHg4NWExMTlhMiwKKyAgICAweGQ5MTEzYWNiLCAweDRjNjFlZTVlLCAweDI4ODE5NWEwLCAweGJkZjE0MTM1LCAweDkxZTFkMzcyLAorICAgIDB4MDQ5MTA3ZTcsIDB4NjA3MTdjMTksIDB4ZjUwMWE4OGMsIDB4YTliMThiZTUsIDB4M2NjMTVmNzAsCisgICAgMHg1ODIxMjQ4ZSwgMHhjZDUxZjAxYiwgMHgxOWYzYzJmOSwgMHg4YzgzMTY2YywgMHhlODYzNmQ5MiwKKyAgICAweDdkMTNiOTA3LCAweDIxYTM5YTZlLCAweGI0ZDM0ZWZiLCAweGQwMzMzNTA1LCAweDQ1NDNlMTkwLAorICAgIDB4Njk1MzczZDcsIDB4ZmMyM2E3NDIsIDB4OThjM2RjYmMsIDB4MGRiMzA4MjksIDB4NTEwMzJiNDAsCisgICAgMHhjNDczZmZkNSwgMHhhMDkzODQyYiwgMHgzNWUzNTBiZSwgMHhmOGIyYTBhNSwgMHg2ZGMyNzQzMCwKKyAgICAweDA5MjIwZmNlLCAweDljNTJkYjViLCAweGMwZTJmODMyLCAweDU1OTIyY2E3LCAweDMxNzI1NzU5LAorICAgIDB4YTQwMjgzY2MsIDB4ODgxMjExOGIsIDB4MWQ2MmM1MWUsIDB4Nzk4MmJlZTAsIDB4ZWNmMjZhNzUsCisgICAgMHhiMDQyNDkxYywgMHgyNTMyOWQ4OSwgMHg0MWQyZTY3NywgMHhkNGEyMzJlMiwgMHgzM2U3ODVmMiwKKyAgICAweGE2OTc1MTY3LCAweGMyNzcyYTk5LCAweDU3MDdmZTBjLCAweDBiYjdkZDY1LCAweDllYzcwOWYwLAorICAgIDB4ZmEyNzcyMGUsIDB4NmY1N2E2OWIsIDB4NDM0NzM0ZGMsIDB4ZDYzN2UwNDksIDB4YjJkNzliYjcsCisgICAgMHgyN2E3NGYyMiwgMHg3YjE3NmM0YiwgMHhlZTY3YjhkZSwgMHg4YTg3YzMyMCwgMHgxZmY3MTdiNSwKKyAgICAweGQyYTZlN2FlLCAweDQ3ZDYzMzNiLCAweDIzMzY0OGM1LCAweGI2NDY5YzUwLCAweGVhZjZiZjM5LAorICAgIDB4N2Y4NjZiYWMsIDB4MWI2NjEwNTIsIDB4OGUxNmM0YzcsIDB4YTIwNjU2ODAsIDB4Mzc3NjgyMTUsCisgICAgMHg1Mzk2ZjllYiwgMHhjNmU2MmQ3ZSwgMHg5YTU2MGUxNywgMHgwZjI2ZGE4MiwgMHg2YmM2YTE3YywKKyAgICAweGZlYjY3NWU5LCAweDJhMTQ0NzBiLCAweGJmNjQ5MzllLCAweGRiODRlODYwLCAweDRlZjQzY2Y1LAorICAgIDB4MTI0NDFmOWMsIDB4ODczNGNiMDksIDB4ZTNkNGIwZjcsIDB4NzZhNDY0NjIsIDB4NWFiNGY2MjUsCisgICAgMHhjZmM0MjJiMCwgMHhhYjI0NTk0ZSwgMHgzZTU0OGRkYiwgMHg2MmU0YWViMiwgMHhmNzk0N2EyNywKKyAgICAweDkzNzQwMWQ5LCAweDA2MDRkNTRjLCAweGNiNTUyNTU3LCAweDVlMjVmMWMyLCAweDNhYzU4YTNjLAorICAgIDB4YWZiNTVlYTksIDB4ZjMwNTdkYzAsIDB4NjY3NWE5NTUsIDB4MDI5NWQyYWIsIDB4OTdlNTA2M2UsCisgICAgMHhiYmY1OTQ3OSwgMHgyZTg1NDBlYywgMHg0YTY1M2IxMiwgMHhkZjE1ZWY4NywgMHg4M2E1Y2NlZSwKKyAgICAweDE2ZDUxODdiLCAweDcyMzU2Mzg1LCAweGU3NDViNzEwLCAweDY3Y2YwYmU0LCAweGYyYmZkZjcxLAorICAgIDB4OTY1ZmE0OGYsIDB4MDMyZjcwMWEsIDB4NWY5ZjUzNzMsIDB4Y2FlZjg3ZTYsIDB4YWUwZmZjMTgsCisgICAgMHgzYjdmMjg4ZCwgMHgxNzZmYmFjYSwgMHg4MjFmNmU1ZiwgMHhlNmZmMTVhMSwgMHg3MzhmYzEzNCwKKyAgICAweDJmM2ZlMjVkLCAweGJhNGYzNmM4LCAweGRlYWY0ZDM2LCAweDRiZGY5OWEzLCAweDg2OGU2OWI4LAorICAgIDB4MTNmZWJkMmQsIDB4NzcxZWM2ZDMsIDB4ZTI2ZTEyNDYsIDB4YmVkZTMxMmYsIDB4MmJhZWU1YmEsCisgICAgMHg0ZjRlOWU0NCwgMHhkYTNlNGFkMSwgMHhmNjJlZDg5NiwgMHg2MzVlMGMwMywgMHgwN2JlNzdmZCwKKyAgICAweDkyY2VhMzY4LCAweGNlN2U4MDAxLCAweDViMGU1NDk0LCAweDNmZWUyZjZhLCAweGFhOWVmYmZmLAorICAgIDB4N2UzY2M5MWQsIDB4ZWI0YzFkODgsIDB4OGZhYzY2NzYsIDB4MWFkY2IyZTMsIDB4NDY2YzkxOGEsCisgICAgMHhkMzFjNDUxZiwgMHhiN2ZjM2VlMSwgMHgyMjhjZWE3NCwgMHgwZTljNzgzMywgMHg5YmVjYWNhNiwKKyAgICAweGZmMGNkNzU4LCAweDZhN2MwM2NkLCAweDM2Y2MyMGE0LCAweGEzYmNmNDMxLCAweGM3NWM4ZmNmLAorICAgIDB4NTIyYzViNWEsIDB4OWY3ZGFiNDEsIDB4MGEwZDdmZDQsIDB4NmVlZDA0MmEsIDB4ZmI5ZGQwYmYsCisgICAgMHhhNzJkZjNkNiwgMHgzMjVkMjc0MywgMHg1NmJkNWNiZCwgMHhjM2NkODgyOCwgMHhlZmRkMWE2ZiwKKyAgICAweDdhYWRjZWZhLCAweDFlNGRiNTA0LCAweDhiM2Q2MTkxLCAweGQ3OGQ0MmY4LCAweDQyZmQ5NjZkLAorICAgIDB4MjYxZGVkOTMsIDB4YjM2ZDM5MDYsIDB4NTQyODhlMTYsIDB4YzE1ODVhODMsIDB4YTViODIxN2QsCisgICAgMHgzMGM4ZjVlOCwgMHg2Yzc4ZDY4MSwgMHhmOTA4MDIxNCwgMHg5ZGU4NzllYSwgMHgwODk4YWQ3ZiwKKyAgICAweDI0ODgzZjM4LCAweGIxZjhlYmFkLCAweGQ1MTg5MDUzLCAweDQwNjg0NGM2LCAweDFjZDg2N2FmLAorICAgIDB4ODlhOGIzM2EsIDB4ZWQ0OGM4YzQsIDB4NzgzODFjNTEsIDB4YjU2OWVjNGEsIDB4MjAxOTM4ZGYsCisgICAgMHg0NGY5NDMyMSwgMHhkMTg5OTdiNCwgMHg4ZDM5YjRkZCwgMHgxODQ5NjA0OCwgMHg3Y2E5MWJiNiwKKyAgICAweGU5ZDljZjIzLCAweGM1Yzk1ZDY0LCAweDUwYjk4OWYxLCAweDM0NTlmMjBmLCAweGExMjkyNjlhLAorICAgIDB4ZmQ5OTA1ZjMsIDB4NjhlOWQxNjYsIDB4MGMwOWFhOTgsIDB4OTk3OTdlMGQsIDB4NGRkYjRjZWYsCisgICAgMHhkOGFiOTg3YSwgMHhiYzRiZTM4NCwgMHgyOTNiMzcxMSwgMHg3NThiMTQ3OCwgMHhlMGZiYzBlZCwKKyAgICAweDg0MWJiYjEzLCAweDExNmI2Zjg2LCAweDNkN2JmZGMxLCAweGE4MGIyOTU0LCAweGNjZWI1MmFhLAorICAgIDB4NTk5Yjg2M2YsIDB4MDUyYmE1NTYsIDB4OTA1YjcxYzMsIDB4ZjRiYjBhM2QsIDB4NjFjYmRlYTgsCisgICAgMHhhYzlhMmViMywgMHgzOWVhZmEyNiwgMHg1ZDBhODFkOCwgMHhjODdhNTU0ZCwgMHg5NGNhNzYyNCwKKyAgICAweDAxYmFhMmIxLCAweDY1NWFkOTRmLCAweGYwMmEwZGRhLCAweGRjM2E5ZjlkLCAweDQ5NGE0YjA4LAorICAgIDB4MmRhYTMwZjYsIDB4YjhkYWU0NjMsIDB4ZTQ2YWM3MGEsIDB4NzExYTEzOWYsIDB4MTVmYTY4NjEsCisgICAgMHg4MDhhYmNmNH0sCisgICB7MHgwMDAwMDAwMCwgMHhjZjllMTdjOCwgMHg0NDRkMjlkMSwgMHg4YmQzM2UxOSwgMHg4ODlhNTNhMiwKKyAgICAweDQ3MDQ0NDZhLCAweGNjZDc3YTczLCAweDAzNDk2ZGJiLCAweGNhNDVhMTA1LCAweDA1ZGJiNmNkLAorICAgIDB4OGUwODg4ZDQsIDB4NDE5NjlmMWMsIDB4NDJkZmYyYTcsIDB4OGQ0MWU1NmYsIDB4MDY5MmRiNzYsCisgICAgMHhjOTBjY2NiZSwgMHg0ZmZhNDQ0YiwgMHg4MDY0NTM4MywgMHgwYmI3NmQ5YSwgMHhjNDI5N2E1MiwKKyAgICAweGM3NjAxN2U5LCAweDA4ZmUwMDIxLCAweDgzMmQzZTM4LCAweDRjYjMyOWYwLCAweDg1YmZlNTRlLAorICAgIDB4NGEyMWYyODYsIDB4YzFmMmNjOWYsIDB4MGU2Y2RiNTcsIDB4MGQyNWI2ZWMsIDB4YzJiYmExMjQsCisgICAgMHg0OTY4OWYzZCwgMHg4NmY2ODhmNSwgMHg5ZmY0ODg5NiwgMHg1MDZhOWY1ZSwgMHhkYmI5YTE0NywKKyAgICAweDE0MjdiNjhmLCAweDE3NmVkYjM0LCAweGQ4ZjBjY2ZjLCAweDUzMjNmMmU1LCAweDljYmRlNTJkLAorICAgIDB4NTViMTI5OTMsIDB4OWEyZjNlNWIsIDB4MTFmYzAwNDIsIDB4ZGU2MjE3OGEsIDB4ZGQyYjdhMzEsCisgICAgMHgxMmI1NmRmOSwgMHg5OTY2NTNlMCwgMHg1NmY4NDQyOCwgMHhkMDBlY2NkZCwgMHgxZjkwZGIxNSwKKyAgICAweDk0NDNlNTBjLCAweDViZGRmMmM0LCAweDU4OTQ5ZjdmLCAweDk3MGE4OGI3LCAweDFjZDliNmFlLAorICAgIDB4ZDM0N2ExNjYsIDB4MWE0YjZkZDgsIDB4ZDVkNTdhMTAsIDB4NWUwNjQ0MDksIDB4OTE5ODUzYzEsCisgICAgMHg5MmQxM2U3YSwgMHg1ZDRmMjliMiwgMHhkNjljMTdhYiwgMHgxOTAyMDA2MywgMHhlNDk4MTc2ZCwKKyAgICAweDJiMDYwMGE1LCAweGEwZDUzZWJjLCAweDZmNGIyOTc0LCAweDZjMDI0NGNmLCAweGEzOWM1MzA3LAorICAgIDB4Mjg0ZjZkMWUsIDB4ZTdkMTdhZDYsIDB4MmVkZGI2NjgsIDB4ZTE0M2ExYTAsIDB4NmE5MDlmYjksCisgICAgMHhhNTBlODg3MSwgMHhhNjQ3ZTVjYSwgMHg2OWQ5ZjIwMiwgMHhlMjBhY2MxYiwgMHgyZDk0ZGJkMywKKyAgICAweGFiNjI1MzI2LCAweDY0ZmM0NGVlLCAweGVmMmY3YWY3LCAweDIwYjE2ZDNmLCAweDIzZjgwMDg0LAorICAgIDB4ZWM2NjE3NGMsIDB4NjdiNTI5NTUsIDB4YTgyYjNlOWQsIDB4NjEyN2YyMjMsIDB4YWViOWU1ZWIsCisgICAgMHgyNTZhZGJmMiwgMHhlYWY0Y2MzYSwgMHhlOWJkYTE4MSwgMHgyNjIzYjY0OSwgMHhhZGYwODg1MCwKKyAgICAweDYyNmU5Zjk4LCAweDdiNmM5ZmZiLCAweGI0ZjI4ODMzLCAweDNmMjFiNjJhLCAweGYwYmZhMWUyLAorICAgIDB4ZjNmNmNjNTksIDB4M2M2OGRiOTEsIDB4YjdiYmU1ODgsIDB4NzgyNWYyNDAsIDB4YjEyOTNlZmUsCisgICAgMHg3ZWI3MjkzNiwgMHhmNTY0MTcyZiwgMHgzYWZhMDBlNywgMHgzOWIzNmQ1YywgMHhmNjJkN2E5NCwKKyAgICAweDdkZmU0NDhkLCAweGIyNjA1MzQ1LCAweDM0OTZkYmIwLCAweGZiMDhjYzc4LCAweDcwZGJmMjYxLAorICAgIDB4YmY0NWU1YTksIDB4YmMwYzg4MTIsIDB4NzM5MjlmZGEsIDB4Zjg0MWExYzMsIDB4MzdkZmI2MGIsCisgICAgMHhmZWQzN2FiNSwgMHgzMTRkNmQ3ZCwgMHhiYTllNTM2NCwgMHg3NTAwNDRhYywgMHg3NjQ5MjkxNywKKyAgICAweGI5ZDczZWRmLCAweDMyMDQwMGM2LCAweGZkOWExNzBlLCAweDEyNDEyODliLCAweGRkZGYzZjUzLAorICAgIDB4NTYwYzAxNGEsIDB4OTk5MjE2ODIsIDB4OWFkYjdiMzksIDB4NTU0NTZjZjEsIDB4ZGU5NjUyZTgsCisgICAgMHgxMTA4NDUyMCwgMHhkODA0ODk5ZSwgMHgxNzlhOWU1NiwgMHg5YzQ5YTA0ZiwgMHg1M2Q3Yjc4NywKKyAgICAweDUwOWVkYTNjLCAweDlmMDBjZGY0LCAweDE0ZDNmM2VkLCAweGRiNGRlNDI1LCAweDVkYmI2Y2QwLAorICAgIDB4OTIyNTdiMTgsIDB4MTlmNjQ1MDEsIDB4ZDY2ODUyYzksIDB4ZDUyMTNmNzIsIDB4MWFiZjI4YmEsCisgICAgMHg5MTZjMTZhMywgMHg1ZWYyMDE2YiwgMHg5N2ZlY2RkNSwgMHg1ODYwZGExZCwgMHhkM2IzZTQwNCwKKyAgICAweDFjMmRmM2NjLCAweDFmNjQ5ZTc3LCAweGQwZmE4OWJmLCAweDViMjliN2E2LCAweDk0YjdhMDZlLAorICAgIDB4OGRiNWEwMGQsIDB4NDIyYmI3YzUsIDB4YzlmODg5ZGMsIDB4MDY2NjllMTQsIDB4MDUyZmYzYWYsCisgICAgMHhjYWIxZTQ2NywgMHg0MTYyZGE3ZSwgMHg4ZWZjY2RiNiwgMHg0N2YwMDEwOCwgMHg4ODZlMTZjMCwKKyAgICAweDAzYmQyOGQ5LCAweGNjMjMzZjExLCAweGNmNmE1MmFhLCAweDAwZjQ0NTYyLCAweDhiMjc3YjdiLAorICAgIDB4NDRiOTZjYjMsIDB4YzI0ZmU0NDYsIDB4MGRkMWYzOGUsIDB4ODYwMmNkOTcsIDB4NDk5Y2RhNWYsCisgICAgMHg0YWQ1YjdlNCwgMHg4NTRiYTAyYywgMHgwZTk4OWUzNSwgMHhjMTA2ODlmZCwgMHgwODBhNDU0MywKKyAgICAweGM3OTQ1MjhiLCAweDRjNDc2YzkyLCAweDgzZDk3YjVhLCAweDgwOTAxNmUxLCAweDRmMGUwMTI5LAorICAgIDB4YzRkZDNmMzAsIDB4MGI0MzI4ZjgsIDB4ZjZkOTNmZjYsIDB4Mzk0NzI4M2UsIDB4YjI5NDE2MjcsCisgICAgMHg3ZDBhMDFlZiwgMHg3ZTQzNmM1NCwgMHhiMWRkN2I5YywgMHgzYTBlNDU4NSwgMHhmNTkwNTI0ZCwKKyAgICAweDNjOWM5ZWYzLCAweGYzMDI4OTNiLCAweDc4ZDFiNzIyLCAweGI3NGZhMGVhLCAweGI0MDZjZDUxLAorICAgIDB4N2I5OGRhOTksIDB4ZjA0YmU0ODAsIDB4M2ZkNWYzNDgsIDB4YjkyMzdiYmQsIDB4NzZiZDZjNzUsCisgICAgMHhmZDZlNTI2YywgMHgzMmYwNDVhNCwgMHgzMWI5MjgxZiwgMHhmZTI3M2ZkNywgMHg3NWY0MDFjZSwKKyAgICAweGJhNmExNjA2LCAweDczNjZkYWI4LCAweGJjZjhjZDcwLCAweDM3MmJmMzY5LCAweGY4YjVlNGExLAorICAgIDB4ZmJmYzg5MWEsIDB4MzQ2MjllZDIsIDB4YmZiMWEwY2IsIDB4NzAyZmI3MDMsIDB4NjkyZGI3NjAsCisgICAgMHhhNmIzYTBhOCwgMHgyZDYwOWViMSwgMHhlMmZlODk3OSwgMHhlMWI3ZTRjMiwgMHgyZTI5ZjMwYSwKKyAgICAweGE1ZmFjZDEzLCAweDZhNjRkYWRiLCAweGEzNjgxNjY1LCAweDZjZjYwMWFkLCAweGU3MjUzZmI0LAorICAgIDB4MjhiYjI4N2MsIDB4MmJmMjQ1YzcsIDB4ZTQ2YzUyMGYsIDB4NmZiZjZjMTYsIDB4YTAyMTdiZGUsCisgICAgMHgyNmQ3ZjMyYiwgMHhlOTQ5ZTRlMywgMHg2MjlhZGFmYSwgMHhhZDA0Y2QzMiwgMHhhZTRkYTA4OSwKKyAgICAweDYxZDNiNzQxLCAweGVhMDA4OTU4LCAweDI1OWU5ZTkwLCAweGVjOTI1MjJlLCAweDIzMGM0NWU2LAorICAgIDB4YThkZjdiZmYsIDB4Njc0MTZjMzcsIDB4NjQwODAxOGMsIDB4YWI5NjE2NDQsIDB4MjA0NTI4NWQsCisgICAgMHhlZmRiM2Y5NX0sCisgICB7MHgwMDAwMDAwMCwgMHgyNDgyNTEzNiwgMHg0OTA0YTI2YywgMHg2ZDg2ZjM1YSwgMHg5MjA5NDRkOCwKKyAgICAweGI2OGIxNWVlLCAweGRiMGRlNmI0LCAweGZmOGZiNzgyLCAweGZmNjM4ZmYxLCAweGRiZTFkZWM3LAorICAgIDB4YjY2NzJkOWQsIDB4OTJlNTdjYWIsIDB4NmQ2YWNiMjksIDB4NDllODlhMWYsIDB4MjQ2ZTY5NDUsCisgICAgMHgwMGVjMzg3MywgMHgyNWI2MTlhMywgMHgwMTM0NDg5NSwgMHg2Y2IyYmJjZiwgMHg0ODMwZWFmOSwKKyAgICAweGI3YmY1ZDdiLCAweDkzM2QwYzRkLCAweGZlYmJmZjE3LCAweGRhMzlhZTIxLCAweGRhZDU5NjUyLAorICAgIDB4ZmU1N2M3NjQsIDB4OTNkMTM0M2UsIDB4Yjc1MzY1MDgsIDB4NDhkY2QyOGEsIDB4NmM1ZTgzYmMsCisgICAgMHgwMWQ4NzBlNiwgMHgyNTVhMjFkMCwgMHg0YjZjMzM0NiwgMHg2ZmVlNjI3MCwgMHgwMjY4OTEyYSwKKyAgICAweDI2ZWFjMDFjLCAweGQ5NjU3NzllLCAweGZkZTcyNmE4LCAweDkwNjFkNWYyLCAweGI0ZTM4NGM0LAorICAgIDB4YjQwZmJjYjcsIDB4OTA4ZGVkODEsIDB4ZmQwYjFlZGIsIDB4ZDk4OTRmZWQsIDB4MjYwNmY4NmYsCisgICAgMHgwMjg0YTk1OSwgMHg2ZjAyNWEwMywgMHg0YjgwMGIzNSwgMHg2ZWRhMmFlNSwgMHg0YTU4N2JkMywKKyAgICAweDI3ZGU4ODg5LCAweDAzNWNkOWJmLCAweGZjZDM2ZTNkLCAweGQ4NTEzZjBiLCAweGI1ZDdjYzUxLAorICAgIDB4OTE1NTlkNjcsIDB4OTFiOWE1MTQsIDB4YjUzYmY0MjIsIDB4ZDhiZDA3NzgsIDB4ZmMzZjU2NGUsCisgICAgMHgwM2IwZTFjYywgMHgyNzMyYjBmYSwgMHg0YWI0NDNhMCwgMHg2ZTM2MTI5NiwgMHg5NmQ4NjY4YywKKyAgICAweGIyNWEzN2JhLCAweGRmZGNjNGUwLCAweGZiNWU5NWQ2LCAweDA0ZDEyMjU0LCAweDIwNTM3MzYyLAorICAgIDB4NGRkNTgwMzgsIDB4Njk1N2QxMGUsIDB4NjliYmU5N2QsIDB4NGQzOWI4NGIsIDB4MjBiZjRiMTEsCisgICAgMHgwNDNkMWEyNywgMHhmYmIyYWRhNSwgMHhkZjMwZmM5MywgMHhiMmI2MGZjOSwgMHg5NjM0NWVmZiwKKyAgICAweGIzNmU3ZjJmLCAweDk3ZWMyZTE5LCAweGZhNmFkZDQzLCAweGRlZTg4Yzc1LCAweDIxNjczYmY3LAorICAgIDB4MDVlNTZhYzEsIDB4Njg2Mzk5OWIsIDB4NGNlMWM4YWQsIDB4NGMwZGYwZGUsIDB4Njg4ZmExZTgsCisgICAgMHgwNTA5NTJiMiwgMHgyMThiMDM4NCwgMHhkZTA0YjQwNiwgMHhmYTg2ZTUzMCwgMHg5NzAwMTY2YSwKKyAgICAweGIzODI0NzVjLCAweGRkYjQ1NWNhLCAweGY5MzYwNGZjLCAweDk0YjBmN2E2LCAweGIwMzJhNjkwLAorICAgIDB4NGZiZDExMTIsIDB4NmIzZjQwMjQsIDB4MDZiOWIzN2UsIDB4MjIzYmUyNDgsIDB4MjJkN2RhM2IsCisgICAgMHgwNjU1OGIwZCwgMHg2YmQzNzg1NywgMHg0ZjUxMjk2MSwgMHhiMGRlOWVlMywgMHg5NDVjY2ZkNSwKKyAgICAweGY5ZGEzYzhmLCAweGRkNTg2ZGI5LCAweGY4MDI0YzY5LCAweGRjODAxZDVmLCAweGIxMDZlZTA1LAorICAgIDB4OTU4NGJmMzMsIDB4NmEwYjA4YjEsIDB4NGU4OTU5ODcsIDB4MjMwZmFhZGQsIDB4MDc4ZGZiZWIsCisgICAgMHgwNzYxYzM5OCwgMHgyM2UzOTJhZSwgMHg0ZTY1NjFmNCwgMHg2YWU3MzBjMiwgMHg5NTY4ODc0MCwKKyAgICAweGIxZWFkNjc2LCAweGRjNmMyNTJjLCAweGY4ZWU3NDFhLCAweGY2YzFjYjU5LCAweGQyNDM5YTZmLAorICAgIDB4YmZjNTY5MzUsIDB4OWI0NzM4MDMsIDB4NjRjODhmODEsIDB4NDA0YWRlYjcsIDB4MmRjYzJkZWQsCisgICAgMHgwOTRlN2NkYiwgMHgwOWEyNDRhOCwgMHgyZDIwMTU5ZSwgMHg0MGE2ZTZjNCwgMHg2NDI0YjdmMiwKKyAgICAweDliYWIwMDcwLCAweGJmMjk1MTQ2LCAweGQyYWZhMjFjLCAweGY2MmRmMzJhLCAweGQzNzdkMmZhLAorICAgIDB4ZjdmNTgzY2MsIDB4OWE3MzcwOTYsIDB4YmVmMTIxYTAsIDB4NDE3ZTk2MjIsIDB4NjVmY2M3MTQsCisgICAgMHgwODdhMzQ0ZSwgMHgyY2Y4NjU3OCwgMHgyYzE0NWQwYiwgMHgwODk2MGMzZCwgMHg2NTEwZmY2NywKKyAgICAweDQxOTJhZTUxLCAweGJlMWQxOWQzLCAweDlhOWY0OGU1LCAweGY3MTliYmJmLCAweGQzOWJlYTg5LAorICAgIDB4YmRhZGY4MWYsIDB4OTkyZmE5MjksIDB4ZjRhOTVhNzMsIDB4ZDAyYjBiNDUsIDB4MmZhNGJjYzcsCisgICAgMHgwYjI2ZWRmMSwgMHg2NmEwMWVhYiwgMHg0MjIyNGY5ZCwgMHg0MmNlNzdlZSwgMHg2NjRjMjZkOCwKKyAgICAweDBiY2FkNTgyLCAweDJmNDg4NGI0LCAweGQwYzczMzM2LCAweGY0NDU2MjAwLCAweDk5YzM5MTVhLAorICAgIDB4YmQ0MWMwNmMsIDB4OTgxYmUxYmMsIDB4YmM5OWIwOGEsIDB4ZDExZjQzZDAsIDB4ZjU5ZDEyZTYsCisgICAgMHgwYTEyYTU2NCwgMHgyZTkwZjQ1MiwgMHg0MzE2MDcwOCwgMHg2Nzk0NTYzZSwgMHg2Nzc4NmU0ZCwKKyAgICAweDQzZmEzZjdiLCAweDJlN2NjYzIxLCAweDBhZmU5ZDE3LCAweGY1NzEyYTk1LCAweGQxZjM3YmEzLAorICAgIDB4YmM3NTg4ZjksIDB4OThmN2Q5Y2YsIDB4NjAxOWFkZDUsIDB4NDQ5YmZjZTMsIDB4MjkxZDBmYjksCisgICAgMHgwZDlmNWU4ZiwgMHhmMjEwZTkwZCwgMHhkNjkyYjgzYiwgMHhiYjE0NGI2MSwgMHg5Zjk2MWE1NywKKyAgICAweDlmN2EyMjI0LCAweGJiZjg3MzEyLCAweGQ2N2U4MDQ4LCAweGYyZmNkMTdlLCAweDBkNzM2NmZjLAorICAgIDB4MjlmMTM3Y2EsIDB4NDQ3N2M0OTAsIDB4NjBmNTk1YTYsIDB4NDVhZmI0NzYsIDB4NjEyZGU1NDAsCisgICAgMHgwY2FiMTYxYSwgMHgyODI5NDcyYywgMHhkN2E2ZjBhZSwgMHhmMzI0YTE5OCwgMHg5ZWEyNTJjMiwKKyAgICAweGJhMjAwM2Y0LCAweGJhY2MzYjg3LCAweDllNGU2YWIxLCAweGYzYzg5OWViLCAweGQ3NGFjOGRkLAorICAgIDB4MjhjNTdmNWYsIDB4MGM0NzJlNjksIDB4NjFjMWRkMzMsIDB4NDU0MzhjMDUsIDB4MmI3NTllOTMsCisgICAgMHgwZmY3Y2ZhNSwgMHg2MjcxM2NmZiwgMHg0NmYzNmRjOSwgMHhiOTdjZGE0YiwgMHg5ZGZlOGI3ZCwKKyAgICAweGYwNzg3ODI3LCAweGQ0ZmEyOTExLCAweGQ0MTYxMTYyLCAweGYwOTQ0MDU0LCAweDlkMTJiMzBlLAorICAgIDB4Yjk5MGUyMzgsIDB4NDYxZjU1YmEsIDB4NjI5ZDA0OGMsIDB4MGYxYmY3ZDYsIDB4MmI5OWE2ZTAsCisgICAgMHgwZWMzODczMCwgMHgyYTQxZDYwNiwgMHg0N2M3MjU1YywgMHg2MzQ1NzQ2YSwgMHg5Y2NhYzNlOCwKKyAgICAweGI4NDg5MmRlLCAweGQ1Y2U2MTg0LCAweGYxNGMzMGIyLCAweGYxYTAwOGMxLCAweGQ1MjI1OWY3LAorICAgIDB4YjhhNGFhYWQsIDB4OWMyNmZiOWIsIDB4NjNhOTRjMTksIDB4NDcyYjFkMmYsIDB4MmFhZGVlNzUsCisgICAgMHgwZTJmYmY0M30sCisgICB7MHgwMDAwMDAwMCwgMHgzNmYyOTBmMywgMHg2ZGU1MjFlNiwgMHg1YjE3YjExNSwgMHhkYmNhNDNjYywKKyAgICAweGVkMzhkMzNmLCAweGI2MmY2MjJhLCAweDgwZGRmMmQ5LCAweDZjZTU4MWQ5LCAweDVhMTcxMTJhLAorICAgIDB4MDEwMGEwM2YsIDB4MzdmMjMwY2MsIDB4YjcyZmMyMTUsIDB4ODFkZDUyZTYsIDB4ZGFjYWUzZjMsCisgICAgMHhlYzM4NzMwMCwgMHhkOWNiMDNiMiwgMHhlZjM5OTM0MSwgMHhiNDJlMjI1NCwgMHg4MmRjYjJhNywKKyAgICAweDAyMDE0MDdlLCAweDM0ZjNkMDhkLCAweDZmZTQ2MTk4LCAweDU5MTZmMTZiLCAweGI1MmU4MjZiLAorICAgIDB4ODNkYzEyOTgsIDB4ZDhjYmEzOGQsIDB4ZWUzOTMzN2UsIDB4NmVlNGMxYTcsIDB4NTgxNjUxNTQsCisgICAgMHgwMzAxZTA0MSwgMHgzNWYzNzBiMiwgMHg2OGU3MDEyNSwgMHg1ZTE1OTFkNiwgMHgwNTAyMjBjMywKKyAgICAweDMzZjBiMDMwLCAweGIzMmQ0MmU5LCAweDg1ZGZkMjFhLCAweGRlYzg2MzBmLCAweGU4M2FmM2ZjLAorICAgIDB4MDQwMjgwZmMsIDB4MzJmMDEwMGYsIDB4NjllN2ExMWEsIDB4NWYxNTMxZTksIDB4ZGZjOGMzMzAsCisgICAgMHhlOTNhNTNjMywgMHhiMjJkZTJkNiwgMHg4NGRmNzIyNSwgMHhiMTJjMDI5NywgMHg4N2RlOTI2NCwKKyAgICAweGRjYzkyMzcxLCAweGVhM2JiMzgyLCAweDZhZTY0MTViLCAweDVjMTRkMWE4LCAweDA3MDM2MGJkLAorICAgIDB4MzFmMWYwNGUsIDB4ZGRjOTgzNGUsIDB4ZWIzYjEzYmQsIDB4YjAyY2EyYTgsIDB4ODZkZTMyNWIsCisgICAgMHgwNjAzYzA4MiwgMHgzMGYxNTA3MSwgMHg2YmU2ZTE2NCwgMHg1ZDE0NzE5NywgMHhkMWNlMDI0YSwKKyAgICAweGU3M2M5MmI5LCAweGJjMmIyM2FjLCAweDhhZDliMzVmLCAweDBhMDQ0MTg2LCAweDNjZjZkMTc1LAorICAgIDB4NjdlMTYwNjAsIDB4NTExM2YwOTMsIDB4YmQyYjgzOTMsIDB4OGJkOTEzNjAsIDB4ZDBjZWEyNzUsCisgICAgMHhlNjNjMzI4NiwgMHg2NmUxYzA1ZiwgMHg1MDEzNTBhYywgMHgwYjA0ZTFiOSwgMHgzZGY2NzE0YSwKKyAgICAweDA4MDUwMWY4LCAweDNlZjc5MTBiLCAweDY1ZTAyMDFlLCAweDUzMTJiMGVkLCAweGQzY2Y0MjM0LAorICAgIDB4ZTUzZGQyYzcsIDB4YmUyYTYzZDIsIDB4ODhkOGYzMjEsIDB4NjRlMDgwMjEsIDB4NTIxMjEwZDIsCisgICAgMHgwOTA1YTFjNywgMHgzZmY3MzEzNCwgMHhiZjJhYzNlZCwgMHg4OWQ4NTMxZSwgMHhkMmNmZTIwYiwKKyAgICAweGU0M2Q3MmY4LCAweGI5MjkwMzZmLCAweDhmZGI5MzljLCAweGQ0Y2MyMjg5LCAweGUyM2ViMjdhLAorICAgIDB4NjJlMzQwYTMsIDB4NTQxMWQwNTAsIDB4MGYwNjYxNDUsIDB4MzlmNGYxYjYsIDB4ZDVjYzgyYjYsCisgICAgMHhlMzNlMTI0NSwgMHhiODI5YTM1MCwgMHg4ZWRiMzNhMywgMHgwZTA2YzE3YSwgMHgzOGY0NTE4OSwKKyAgICAweDYzZTNlMDljLCAweDU1MTE3MDZmLCAweDYwZTIwMGRkLCAweDU2MTA5MDJlLCAweDBkMDcyMTNiLAorICAgIDB4M2JmNWIxYzgsIDB4YmIyODQzMTEsIDB4OGRkYWQzZTIsIDB4ZDZjZDYyZjcsIDB4ZTAzZmYyMDQsCisgICAgMHgwYzA3ODEwNCwgMHgzYWY1MTFmNywgMHg2MWUyYTBlMiwgMHg1NzEwMzAxMSwgMHhkN2NkYzJjOCwKKyAgICAweGUxM2Y1MjNiLCAweGJhMjhlMzJlLCAweDhjZGE3M2RkLCAweDc4ZWQwMmQ1LCAweDRlMWY5MjI2LAorICAgIDB4MTUwODIzMzMsIDB4MjNmYWIzYzAsIDB4YTMyNzQxMTksIDB4OTVkNWQxZWEsIDB4Y2VjMjYwZmYsCisgICAgMHhmODMwZjAwYywgMHgxNDA4ODMwYywgMHgyMmZhMTNmZiwgMHg3OWVkYTJlYSwgMHg0ZjFmMzIxOSwKKyAgICAweGNmYzJjMGMwLCAweGY5MzA1MDMzLCAweGEyMjdlMTI2LCAweDk0ZDU3MWQ1LCAweGExMjYwMTY3LAorICAgIDB4OTdkNDkxOTQsIDB4Y2NjMzIwODEsIDB4ZmEzMWIwNzIsIDB4N2FlYzQyYWIsIDB4NGMxZWQyNTgsCisgICAgMHgxNzA5NjM0ZCwgMHgyMWZiZjNiZSwgMHhjZGMzODBiZSwgMHhmYjMxMTA0ZCwgMHhhMDI2YTE1OCwKKyAgICAweDk2ZDQzMWFiLCAweDE2MDljMzcyLCAweDIwZmI1MzgxLCAweDdiZWNlMjk0LCAweDRkMWU3MjY3LAorICAgIDB4MTAwYTAzZjAsIDB4MjZmODkzMDMsIDB4N2RlZjIyMTYsIDB4NGIxZGIyZTUsIDB4Y2JjMDQwM2MsCisgICAgMHhmZDMyZDBjZiwgMHhhNjI1NjFkYSwgMHg5MGQ3ZjEyOSwgMHg3Y2VmODIyOSwgMHg0YTFkMTJkYSwKKyAgICAweDExMGFhM2NmLCAweDI3ZjgzMzNjLCAweGE3MjVjMWU1LCAweDkxZDc1MTE2LCAweGNhYzBlMDAzLAorICAgIDB4ZmMzMjcwZjAsIDB4YzljMTAwNDIsIDB4ZmYzMzkwYjEsIDB4YTQyNDIxYTQsIDB4OTJkNmIxNTcsCisgICAgMHgxMjBiNDM4ZSwgMHgyNGY5ZDM3ZCwgMHg3ZmVlNjI2OCwgMHg0OTFjZjI5YiwgMHhhNTI0ODE5YiwKKyAgICAweDkzZDYxMTY4LCAweGM4YzFhMDdkLCAweGZlMzMzMDhlLCAweDdlZWVjMjU3LCAweDQ4MWM1MmE0LAorICAgIDB4MTMwYmUzYjEsIDB4MjVmOTczNDIsIDB4YTkyMzAwOWYsIDB4OWZkMTkwNmMsIDB4YzRjNjIxNzksCisgICAgMHhmMjM0YjE4YSwgMHg3MmU5NDM1MywgMHg0NDFiZDNhMCwgMHgxZjBjNjJiNSwgMHgyOWZlZjI0NiwKKyAgICAweGM1YzY4MTQ2LCAweGYzMzQxMWI1LCAweGE4MjNhMGEwLCAweDllZDEzMDUzLCAweDFlMGNjMjhhLAorICAgIDB4MjhmZTUyNzksIDB4NzNlOWUzNmMsIDB4NDUxYjczOWYsIDB4NzBlODAzMmQsIDB4NDYxYTkzZGUsCisgICAgMHgxZDBkMjJjYiwgMHgyYmZmYjIzOCwgMHhhYjIyNDBlMSwgMHg5ZGQwZDAxMiwgMHhjNmM3NjEwNywKKyAgICAweGYwMzVmMWY0LCAweDFjMGQ4MmY0LCAweDJhZmYxMjA3LCAweDcxZThhMzEyLCAweDQ3MWEzM2UxLAorICAgIDB4YzdjN2MxMzgsIDB4ZjEzNTUxY2IsIDB4YWEyMmUwZGUsIDB4OWNkMDcwMmQsIDB4YzFjNDAxYmEsCisgICAgMHhmNzM2OTE0OSwgMHhhYzIxMjA1YywgMHg5YWQzYjBhZiwgMHgxYTBlNDI3NiwgMHgyY2ZjZDI4NSwKKyAgICAweDc3ZWI2MzkwLCAweDQxMTlmMzYzLCAweGFkMjE4MDYzLCAweDliZDMxMDkwLCAweGMwYzRhMTg1LAorICAgIDB4ZjYzNjMxNzYsIDB4NzZlYmMzYWYsIDB4NDAxOTUzNWMsIDB4MWIwZWUyNDksIDB4MmRmYzcyYmEsCisgICAgMHgxODBmMDIwOCwgMHgyZWZkOTJmYiwgMHg3NWVhMjNlZSwgMHg0MzE4YjMxZCwgMHhjM2M1NDFjNCwKKyAgICAweGY1MzdkMTM3LCAweGFlMjA2MDIyLCAweDk4ZDJmMGQxLCAweDc0ZWE4M2QxLCAweDQyMTgxMzIyLAorICAgIDB4MTkwZmEyMzcsIDB4MmZmZDMyYzQsIDB4YWYyMGMwMWQsIDB4OTlkMjUwZWUsIDB4YzJjNWUxZmIsCisgICAgMHhmNDM3NzEwOH19OworCitsb2NhbCBjb25zdCB6X3dvcmRfdCBGQVIgY3JjX2JyYWlkX2JpZ190YWJsZVtdWzI1Nl0gPSB7CisgICB7MHgwMDAwMDAwMDAwMDAwMDAwLCAweGYzOTBmMjM2MDAwMDAwMDAsIDB4ZTYyMWU1NmQwMDAwMDAwMCwKKyAgICAweDE1YjExNzViMDAwMDAwMDAsIDB4Y2M0M2NhZGIwMDAwMDAwMCwgMHgzZmQzMzhlZDAwMDAwMDAwLAorICAgIDB4MmE2MjJmYjYwMDAwMDAwMCwgMHhkOWYyZGQ4MDAwMDAwMDAwLCAweGQ5ODFlNTZjMDAwMDAwMDAsCisgICAgMHgyYTExMTc1YTAwMDAwMDAwLCAweDNmYTAwMDAxMDAwMDAwMDAsIDB4Y2MzMGYyMzcwMDAwMDAwMCwKKyAgICAweDE1YzIyZmI3MDAwMDAwMDAsIDB4ZTY1MmRkODEwMDAwMDAwMCwgMHhmM2UzY2FkYTAwMDAwMDAwLAorICAgIDB4MDA3MzM4ZWMwMDAwMDAwMCwgMHhiMjAzY2JkOTAwMDAwMDAwLCAweDQxOTMzOWVmMDAwMDAwMDAsCisgICAgMHg1NDIyMmViNDAwMDAwMDAwLCAweGE3YjJkYzgyMDAwMDAwMDAsIDB4N2U0MDAxMDIwMDAwMDAwMCwKKyAgICAweDhkZDBmMzM0MDAwMDAwMDAsIDB4OTg2MWU0NmYwMDAwMDAwMCwgMHg2YmYxMTY1OTAwMDAwMDAwLAorICAgIDB4NmI4MjJlYjUwMDAwMDAwMCwgMHg5ODEyZGM4MzAwMDAwMDAwLCAweDhkYTNjYmQ4MDAwMDAwMDAsCisgICAgMHg3ZTMzMzllZTAwMDAwMDAwLCAweGE3YzFlNDZlMDAwMDAwMDAsIDB4NTQ1MTE2NTgwMDAwMDAwMCwKKyAgICAweDQxZTAwMTAzMDAwMDAwMDAsIDB4YjI3MGYzMzUwMDAwMDAwMCwgMHgyNTAxZTc2ODAwMDAwMDAwLAorICAgIDB4ZDY5MTE1NWUwMDAwMDAwMCwgMHhjMzIwMDIwNTAwMDAwMDAwLCAweDMwYjBmMDMzMDAwMDAwMDAsCisgICAgMHhlOTQyMmRiMzAwMDAwMDAwLCAweDFhZDJkZjg1MDAwMDAwMDAsIDB4MGY2M2M4ZGUwMDAwMDAwMCwKKyAgICAweGZjZjMzYWU4MDAwMDAwMDAsIDB4ZmM4MDAyMDQwMDAwMDAwMCwgMHgwZjEwZjAzMjAwMDAwMDAwLAorICAgIDB4MWFhMWU3NjkwMDAwMDAwMCwgMHhlOTMxMTU1ZjAwMDAwMDAwLCAweDMwYzNjOGRmMDAwMDAwMDAsCisgICAgMHhjMzUzM2FlOTAwMDAwMDAwLCAweGQ2ZTIyZGIyMDAwMDAwMDAsIDB4MjU3MmRmODQwMDAwMDAwMCwKKyAgICAweDk3MDIyY2IxMDAwMDAwMDAsIDB4NjQ5MmRlODcwMDAwMDAwMCwgMHg3MTIzYzlkYzAwMDAwMDAwLAorICAgIDB4ODJiMzNiZWEwMDAwMDAwMCwgMHg1YjQxZTY2YTAwMDAwMDAwLCAweGE4ZDExNDVjMDAwMDAwMDAsCisgICAgMHhiZDYwMDMwNzAwMDAwMDAwLCAweDRlZjBmMTMxMDAwMDAwMDAsIDB4NGU4M2M5ZGQwMDAwMDAwMCwKKyAgICAweGJkMTMzYmViMDAwMDAwMDAsIDB4YThhMjJjYjAwMDAwMDAwMCwgMHg1YjMyZGU4NjAwMDAwMDAwLAorICAgIDB4ODJjMDAzMDYwMDAwMDAwMCwgMHg3MTUwZjEzMDAwMDAwMDAwLCAweDY0ZTFlNjZiMDAwMDAwMDAsCisgICAgMHg5NzcxMTQ1ZDAwMDAwMDAwLCAweDRhMDJjZWQxMDAwMDAwMDAsIDB4Yjk5MjNjZTcwMDAwMDAwMCwKKyAgICAweGFjMjMyYmJjMDAwMDAwMDAsIDB4NWZiM2Q5OGEwMDAwMDAwMCwgMHg4NjQxMDQwYTAwMDAwMDAwLAorICAgIDB4NzVkMWY2M2MwMDAwMDAwMCwgMHg2MDYwZTE2NzAwMDAwMDAwLCAweDkzZjAxMzUxMDAwMDAwMDAsCisgICAgMHg5MzgzMmJiZDAwMDAwMDAwLCAweDYwMTNkOThiMDAwMDAwMDAsIDB4NzVhMmNlZDAwMDAwMDAwMCwKKyAgICAweDg2MzIzY2U2MDAwMDAwMDAsIDB4NWZjMGUxNjYwMDAwMDAwMCwgMHhhYzUwMTM1MDAwMDAwMDAwLAorICAgIDB4YjllMTA0MGIwMDAwMDAwMCwgMHg0YTcxZjYzZDAwMDAwMDAwLCAweGY4MDEwNTA4MDAwMDAwMDAsCisgICAgMHgwYjkxZjczZTAwMDAwMDAwLCAweDFlMjBlMDY1MDAwMDAwMDAsIDB4ZWRiMDEyNTMwMDAwMDAwMCwKKyAgICAweDM0NDJjZmQzMDAwMDAwMDAsIDB4YzdkMjNkZTUwMDAwMDAwMCwgMHhkMjYzMmFiZTAwMDAwMDAwLAorICAgIDB4MjFmM2Q4ODgwMDAwMDAwMCwgMHgyMTgwZTA2NDAwMDAwMDAwLCAweGQyMTAxMjUyMDAwMDAwMDAsCisgICAgMHhjN2ExMDUwOTAwMDAwMDAwLCAweDM0MzFmNzNmMDAwMDAwMDAsIDB4ZWRjMzJhYmYwMDAwMDAwMCwKKyAgICAweDFlNTNkODg5MDAwMDAwMDAsIDB4MGJlMmNmZDIwMDAwMDAwMCwgMHhmODcyM2RlNDAwMDAwMDAwLAorICAgIDB4NmYwMzI5YjkwMDAwMDAwMCwgMHg5YzkzZGI4ZjAwMDAwMDAwLCAweDg5MjJjY2Q0MDAwMDAwMDAsCisgICAgMHg3YWIyM2VlMjAwMDAwMDAwLCAweGEzNDBlMzYyMDAwMDAwMDAsIDB4NTBkMDExNTQwMDAwMDAwMCwKKyAgICAweDQ1NjEwNjBmMDAwMDAwMDAsIDB4YjZmMWY0MzkwMDAwMDAwMCwgMHhiNjgyY2NkNTAwMDAwMDAwLAorICAgIDB4NDUxMjNlZTMwMDAwMDAwMCwgMHg1MGEzMjliODAwMDAwMDAwLCAweGEzMzNkYjhlMDAwMDAwMDAsCisgICAgMHg3YWMxMDYwZTAwMDAwMDAwLCAweDg5NTFmNDM4MDAwMDAwMDAsIDB4OWNlMGUzNjMwMDAwMDAwMCwKKyAgICAweDZmNzAxMTU1MDAwMDAwMDAsIDB4ZGQwMGUyNjAwMDAwMDAwMCwgMHgyZTkwMTA1NjAwMDAwMDAwLAorICAgIDB4M2IyMTA3MGQwMDAwMDAwMCwgMHhjOGIxZjUzYjAwMDAwMDAwLCAweDExNDMyOGJiMDAwMDAwMDAsCisgICAgMHhlMmQzZGE4ZDAwMDAwMDAwLCAweGY3NjJjZGQ2MDAwMDAwMDAsIDB4MDRmMjNmZTAwMDAwMDAwMCwKKyAgICAweDA0ODEwNzBjMDAwMDAwMDAsIDB4ZjcxMWY1M2EwMDAwMDAwMCwgMHhlMmEwZTI2MTAwMDAwMDAwLAorICAgIDB4MTEzMDEwNTcwMDAwMDAwMCwgMHhjOGMyY2RkNzAwMDAwMDAwLCAweDNiNTIzZmUxMDAwMDAwMDAsCisgICAgMHgyZWUzMjhiYTAwMDAwMDAwLCAweGRkNzNkYThjMDAwMDAwMDAsIDB4ZDUwMmVkNzgwMDAwMDAwMCwKKyAgICAweDI2OTIxZjRlMDAwMDAwMDAsIDB4MzMyMzA4MTUwMDAwMDAwMCwgMHhjMGIzZmEyMzAwMDAwMDAwLAorICAgIDB4MTk0MTI3YTMwMDAwMDAwMCwgMHhlYWQxZDU5NTAwMDAwMDAwLCAweGZmNjBjMmNlMDAwMDAwMDAsCisgICAgMHgwY2YwMzBmODAwMDAwMDAwLCAweDBjODMwODE0MDAwMDAwMDAsIDB4ZmYxM2ZhMjIwMDAwMDAwMCwKKyAgICAweGVhYTJlZDc5MDAwMDAwMDAsIDB4MTkzMjFmNGYwMDAwMDAwMCwgMHhjMGMwYzJjZjAwMDAwMDAwLAorICAgIDB4MzM1MDMwZjkwMDAwMDAwMCwgMHgyNmUxMjdhMjAwMDAwMDAwLCAweGQ1NzFkNTk0MDAwMDAwMDAsCisgICAgMHg2NzAxMjZhMTAwMDAwMDAwLCAweDk0OTFkNDk3MDAwMDAwMDAsIDB4ODEyMGMzY2MwMDAwMDAwMCwKKyAgICAweDcyYjAzMWZhMDAwMDAwMDAsIDB4YWI0MmVjN2EwMDAwMDAwMCwgMHg1OGQyMWU0YzAwMDAwMDAwLAorICAgIDB4NGQ2MzA5MTcwMDAwMDAwMCwgMHhiZWYzZmIyMTAwMDAwMDAwLCAweGJlODBjM2NkMDAwMDAwMDAsCisgICAgMHg0ZDEwMzFmYjAwMDAwMDAwLCAweDU4YTEyNmEwMDAwMDAwMDAsIDB4YWIzMWQ0OTYwMDAwMDAwMCwKKyAgICAweDcyYzMwOTE2MDAwMDAwMDAsIDB4ODE1M2ZiMjAwMDAwMDAwMCwgMHg5NGUyZWM3YjAwMDAwMDAwLAorICAgIDB4Njc3MjFlNGQwMDAwMDAwMCwgMHhmMDAzMGExMDAwMDAwMDAwLCAweDAzOTNmODI2MDAwMDAwMDAsCisgICAgMHgxNjIyZWY3ZDAwMDAwMDAwLCAweGU1YjIxZDRiMDAwMDAwMDAsIDB4M2M0MGMwY2IwMDAwMDAwMCwKKyAgICAweGNmZDAzMmZkMDAwMDAwMDAsIDB4ZGE2MTI1YTYwMDAwMDAwMCwgMHgyOWYxZDc5MDAwMDAwMDAwLAorICAgIDB4Mjk4MmVmN2MwMDAwMDAwMCwgMHhkYTEyMWQ0YTAwMDAwMDAwLCAweGNmYTMwYTExMDAwMDAwMDAsCisgICAgMHgzYzMzZjgyNzAwMDAwMDAwLCAweGU1YzEyNWE3MDAwMDAwMDAsIDB4MTY1MWQ3OTEwMDAwMDAwMCwKKyAgICAweDAzZTBjMGNhMDAwMDAwMDAsIDB4ZjA3MDMyZmMwMDAwMDAwMCwgMHg0MjAwYzFjOTAwMDAwMDAwLAorICAgIDB4YjE5MDMzZmYwMDAwMDAwMCwgMHhhNDIxMjRhNDAwMDAwMDAwLCAweDU3YjFkNjkyMDAwMDAwMDAsCisgICAgMHg4ZTQzMGIxMjAwMDAwMDAwLCAweDdkZDNmOTI0MDAwMDAwMDAsIDB4Njg2MmVlN2YwMDAwMDAwMCwKKyAgICAweDliZjIxYzQ5MDAwMDAwMDAsIDB4OWI4MTI0YTUwMDAwMDAwMCwgMHg2ODExZDY5MzAwMDAwMDAwLAorICAgIDB4N2RhMGMxYzgwMDAwMDAwMCwgMHg4ZTMwMzNmZTAwMDAwMDAwLCAweDU3YzJlZTdlMDAwMDAwMDAsCisgICAgMHhhNDUyMWM0ODAwMDAwMDAwLCAweGIxZTMwYjEzMDAwMDAwMDAsIDB4NDI3M2Y5MjUwMDAwMDAwMCwKKyAgICAweDlmMDAyM2E5MDAwMDAwMDAsIDB4NmM5MGQxOWYwMDAwMDAwMCwgMHg3OTIxYzZjNDAwMDAwMDAwLAorICAgIDB4OGFiMTM0ZjIwMDAwMDAwMCwgMHg1MzQzZTk3MjAwMDAwMDAwLCAweGEwZDMxYjQ0MDAwMDAwMDAsCisgICAgMHhiNTYyMGMxZjAwMDAwMDAwLCAweDQ2ZjJmZTI5MDAwMDAwMDAsIDB4NDY4MWM2YzUwMDAwMDAwMCwKKyAgICAweGI1MTEzNGYzMDAwMDAwMDAsIDB4YTBhMDIzYTgwMDAwMDAwMCwgMHg1MzMwZDE5ZTAwMDAwMDAwLAorICAgIDB4OGFjMjBjMWUwMDAwMDAwMCwgMHg3OTUyZmUyODAwMDAwMDAwLCAweDZjZTNlOTczMDAwMDAwMDAsCisgICAgMHg5ZjczMWI0NTAwMDAwMDAwLCAweDJkMDNlODcwMDAwMDAwMDAsIDB4ZGU5MzFhNDYwMDAwMDAwMCwKKyAgICAweGNiMjIwZDFkMDAwMDAwMDAsIDB4MzhiMmZmMmIwMDAwMDAwMCwgMHhlMTQwMjJhYjAwMDAwMDAwLAorICAgIDB4MTJkMGQwOWQwMDAwMDAwMCwgMHgwNzYxYzdjNjAwMDAwMDAwLCAweGY0ZjEzNWYwMDAwMDAwMDAsCisgICAgMHhmNDgyMGQxYzAwMDAwMDAwLCAweDA3MTJmZjJhMDAwMDAwMDAsIDB4MTJhM2U4NzEwMDAwMDAwMCwKKyAgICAweGUxMzMxYTQ3MDAwMDAwMDAsIDB4MzhjMWM3YzcwMDAwMDAwMCwgMHhjYjUxMzVmMTAwMDAwMDAwLAorICAgIDB4ZGVlMDIyYWEwMDAwMDAwMCwgMHgyZDcwZDA5YzAwMDAwMDAwLCAweGJhMDFjNGMxMDAwMDAwMDAsCisgICAgMHg0OTkxMzZmNzAwMDAwMDAwLCAweDVjMjAyMWFjMDAwMDAwMDAsIDB4YWZiMGQzOWEwMDAwMDAwMCwKKyAgICAweDc2NDIwZTFhMDAwMDAwMDAsIDB4ODVkMmZjMmMwMDAwMDAwMCwgMHg5MDYzZWI3NzAwMDAwMDAwLAorICAgIDB4NjNmMzE5NDEwMDAwMDAwMCwgMHg2MzgwMjFhZDAwMDAwMDAwLCAweDkwMTBkMzliMDAwMDAwMDAsCisgICAgMHg4NWExYzRjMDAwMDAwMDAwLCAweDc2MzEzNmY2MDAwMDAwMDAsIDB4YWZjM2ViNzYwMDAwMDAwMCwKKyAgICAweDVjNTMxOTQwMDAwMDAwMDAsIDB4NDllMjBlMWIwMDAwMDAwMCwgMHhiYTcyZmMyZDAwMDAwMDAwLAorICAgIDB4MDgwMjBmMTgwMDAwMDAwMCwgMHhmYjkyZmQyZTAwMDAwMDAwLCAweGVlMjNlYTc1MDAwMDAwMDAsCisgICAgMHgxZGIzMTg0MzAwMDAwMDAwLCAweGM0NDFjNWMzMDAwMDAwMDAsIDB4MzdkMTM3ZjUwMDAwMDAwMCwKKyAgICAweDIyNjAyMGFlMDAwMDAwMDAsIDB4ZDFmMGQyOTgwMDAwMDAwMCwgMHhkMTgzZWE3NDAwMDAwMDAwLAorICAgIDB4MjIxMzE4NDIwMDAwMDAwMCwgMHgzN2EyMGYxOTAwMDAwMDAwLCAweGM0MzJmZDJmMDAwMDAwMDAsCisgICAgMHgxZGMwMjBhZjAwMDAwMDAwLCAweGVlNTBkMjk5MDAwMDAwMDAsIDB4ZmJlMWM1YzIwMDAwMDAwMCwKKyAgICAweDA4NzEzN2Y0MDAwMDAwMDB9LAorICAgezB4MDAwMDAwMDAwMDAwMDAwMCwgMHgzNjUxODIyNDAwMDAwMDAwLCAweDZjYTIwNDQ5MDAwMDAwMDAsCisgICAgMHg1YWYzODY2ZDAwMDAwMDAwLCAweGQ4NDQwOTkyMDAwMDAwMDAsIDB4ZWUxNThiYjYwMDAwMDAwMCwKKyAgICAweGI0ZTYwZGRiMDAwMDAwMDAsIDB4ODJiNzhmZmYwMDAwMDAwMCwgMHhmMThmNjNmZjAwMDAwMDAwLAorICAgIDB4YzdkZWUxZGIwMDAwMDAwMCwgMHg5ZDJkNjdiNjAwMDAwMDAwLCAweGFiN2NlNTkyMDAwMDAwMDAsCisgICAgMHgyOWNiNmE2ZDAwMDAwMDAwLCAweDFmOWFlODQ5MDAwMDAwMDAsIDB4NDU2OTZlMjQwMDAwMDAwMCwKKyAgICAweDczMzhlYzAwMDAwMDAwMDAsIDB4YTMxOWI2MjUwMDAwMDAwMCwgMHg5NTQ4MzQwMTAwMDAwMDAwLAorICAgIDB4Y2ZiYmIyNmMwMDAwMDAwMCwgMHhmOWVhMzA0ODAwMDAwMDAwLCAweDdiNWRiZmI3MDAwMDAwMDAsCisgICAgMHg0ZDBjM2Q5MzAwMDAwMDAwLCAweDE3ZmZiYmZlMDAwMDAwMDAsIDB4MjFhZTM5ZGEwMDAwMDAwMCwKKyAgICAweDUyOTZkNWRhMDAwMDAwMDAsIDB4NjRjNzU3ZmUwMDAwMDAwMCwgMHgzZTM0ZDE5MzAwMDAwMDAwLAorICAgIDB4MDg2NTUzYjcwMDAwMDAwMCwgMHg4YWQyZGM0ODAwMDAwMDAwLCAweGJjODM1ZTZjMDAwMDAwMDAsCisgICAgMHhlNjcwZDgwMTAwMDAwMDAwLCAweGQwMjE1YTI1MDAwMDAwMDAsIDB4NDYzMzZjNGIwMDAwMDAwMCwKKyAgICAweDcwNjJlZTZmMDAwMDAwMDAsIDB4MmE5MTY4MDIwMDAwMDAwMCwgMHgxY2MwZWEyNjAwMDAwMDAwLAorICAgIDB4OWU3NzY1ZDkwMDAwMDAwMCwgMHhhODI2ZTdmZDAwMDAwMDAwLCAweGYyZDU2MTkwMDAwMDAwMDAsCisgICAgMHhjNDg0ZTNiNDAwMDAwMDAwLCAweGI3YmMwZmI0MDAwMDAwMDAsIDB4ODFlZDhkOTAwMDAwMDAwMCwKKyAgICAweGRiMWUwYmZkMDAwMDAwMDAsIDB4ZWQ0Zjg5ZDkwMDAwMDAwMCwgMHg2ZmY4MDYyNjAwMDAwMDAwLAorICAgIDB4NTlhOTg0MDIwMDAwMDAwMCwgMHgwMzVhMDI2ZjAwMDAwMDAwLCAweDM1MGI4MDRiMDAwMDAwMDAsCisgICAgMHhlNTJhZGE2ZTAwMDAwMDAwLCAweGQzN2I1ODRhMDAwMDAwMDAsIDB4ODk4OGRlMjcwMDAwMDAwMCwKKyAgICAweGJmZDk1YzAzMDAwMDAwMDAsIDB4M2Q2ZWQzZmMwMDAwMDAwMCwgMHgwYjNmNTFkODAwMDAwMDAwLAorICAgIDB4NTFjY2Q3YjUwMDAwMDAwMCwgMHg2NzlkNTU5MTAwMDAwMDAwLCAweDE0YTViOTkxMDAwMDAwMDAsCisgICAgMHgyMmY0M2JiNTAwMDAwMDAwLCAweDc4MDdiZGQ4MDAwMDAwMDAsIDB4NGU1NjNmZmMwMDAwMDAwMCwKKyAgICAweGNjZTFiMDAzMDAwMDAwMDAsIDB4ZmFiMDMyMjcwMDAwMDAwMCwgMHhhMDQzYjQ0YTAwMDAwMDAwLAorICAgIDB4OTYxMjM2NmUwMDAwMDAwMCwgMHg4YzY2ZDg5NjAwMDAwMDAwLCAweGJhMzc1YWIyMDAwMDAwMDAsCisgICAgMHhlMGM0ZGNkZjAwMDAwMDAwLCAweGQ2OTU1ZWZiMDAwMDAwMDAsIDB4NTQyMmQxMDQwMDAwMDAwMCwKKyAgICAweDYyNzM1MzIwMDAwMDAwMDAsIDB4Mzg4MGQ1NGQwMDAwMDAwMCwgMHgwZWQxNTc2OTAwMDAwMDAwLAorICAgIDB4N2RlOWJiNjkwMDAwMDAwMCwgMHg0YmI4Mzk0ZDAwMDAwMDAwLCAweDExNGJiZjIwMDAwMDAwMDAsCisgICAgMHgyNzFhM2QwNDAwMDAwMDAwLCAweGE1YWRiMmZiMDAwMDAwMDAsIDB4OTNmYzMwZGYwMDAwMDAwMCwKKyAgICAweGM5MGZiNmIyMDAwMDAwMDAsIDB4ZmY1ZTM0OTYwMDAwMDAwMCwgMHgyZjdmNmViMzAwMDAwMDAwLAorICAgIDB4MTkyZWVjOTcwMDAwMDAwMCwgMHg0M2RkNmFmYTAwMDAwMDAwLCAweDc1OGNlOGRlMDAwMDAwMDAsCisgICAgMHhmNzNiNjcyMTAwMDAwMDAwLCAweGMxNmFlNTA1MDAwMDAwMDAsIDB4OWI5OTYzNjgwMDAwMDAwMCwKKyAgICAweGFkYzhlMTRjMDAwMDAwMDAsIDB4ZGVmMDBkNGMwMDAwMDAwMCwgMHhlOGExOGY2ODAwMDAwMDAwLAorICAgIDB4YjI1MjA5MDUwMDAwMDAwMCwgMHg4NDAzOGIyMTAwMDAwMDAwLCAweDA2YjQwNGRlMDAwMDAwMDAsCisgICAgMHgzMGU1ODZmYTAwMDAwMDAwLCAweDZhMTYwMDk3MDAwMDAwMDAsIDB4NWM0NzgyYjMwMDAwMDAwMCwKKyAgICAweGNhNTViNGRkMDAwMDAwMDAsIDB4ZmMwNDM2ZjkwMDAwMDAwMCwgMHhhNmY3YjA5NDAwMDAwMDAwLAorICAgIDB4OTBhNjMyYjAwMDAwMDAwMCwgMHgxMjExYmQ0ZjAwMDAwMDAwLCAweDI0NDAzZjZiMDAwMDAwMDAsCisgICAgMHg3ZWIzYjkwNjAwMDAwMDAwLCAweDQ4ZTIzYjIyMDAwMDAwMDAsIDB4M2JkYWQ3MjIwMDAwMDAwMCwKKyAgICAweDBkOGI1NTA2MDAwMDAwMDAsIDB4NTc3OGQzNmIwMDAwMDAwMCwgMHg2MTI5NTE0ZjAwMDAwMDAwLAorICAgIDB4ZTM5ZWRlYjAwMDAwMDAwMCwgMHhkNWNmNWM5NDAwMDAwMDAwLCAweDhmM2NkYWY5MDAwMDAwMDAsCisgICAgMHhiOTZkNThkZDAwMDAwMDAwLCAweDY5NGMwMmY4MDAwMDAwMDAsIDB4NWYxZDgwZGMwMDAwMDAwMCwKKyAgICAweDA1ZWUwNmIxMDAwMDAwMDAsIDB4MzNiZjg0OTUwMDAwMDAwMCwgMHhiMTA4MGI2YTAwMDAwMDAwLAorICAgIDB4ODc1OTg5NGUwMDAwMDAwMCwgMHhkZGFhMGYyMzAwMDAwMDAwLCAweGViZmI4ZDA3MDAwMDAwMDAsCisgICAgMHg5OGMzNjEwNzAwMDAwMDAwLCAweGFlOTJlMzIzMDAwMDAwMDAsIDB4ZjQ2MTY1NGUwMDAwMDAwMCwKKyAgICAweGMyMzBlNzZhMDAwMDAwMDAsIDB4NDA4NzY4OTUwMDAwMDAwMCwgMHg3NmQ2ZWFiMTAwMDAwMDAwLAorICAgIDB4MmMyNTZjZGMwMDAwMDAwMCwgMHgxYTc0ZWVmODAwMDAwMDAwLCAweDU5Y2JjMWY2MDAwMDAwMDAsCisgICAgMHg2ZjlhNDNkMjAwMDAwMDAwLCAweDM1NjljNWJmMDAwMDAwMDAsIDB4MDMzODQ3OWIwMDAwMDAwMCwKKyAgICAweDgxOGZjODY0MDAwMDAwMDAsIDB4YjdkZTRhNDAwMDAwMDAwMCwgMHhlZDJkY2MyZDAwMDAwMDAwLAorICAgIDB4ZGI3YzRlMDkwMDAwMDAwMCwgMHhhODQ0YTIwOTAwMDAwMDAwLCAweDllMTUyMDJkMDAwMDAwMDAsCisgICAgMHhjNGU2YTY0MDAwMDAwMDAwLCAweGYyYjcyNDY0MDAwMDAwMDAsIDB4NzAwMGFiOWIwMDAwMDAwMCwKKyAgICAweDQ2NTEyOWJmMDAwMDAwMDAsIDB4MWNhMmFmZDIwMDAwMDAwMCwgMHgyYWYzMmRmNjAwMDAwMDAwLAorICAgIDB4ZmFkMjc3ZDMwMDAwMDAwMCwgMHhjYzgzZjVmNzAwMDAwMDAwLCAweDk2NzA3MzlhMDAwMDAwMDAsCisgICAgMHhhMDIxZjFiZTAwMDAwMDAwLCAweDIyOTY3ZTQxMDAwMDAwMDAsIDB4MTRjN2ZjNjUwMDAwMDAwMCwKKyAgICAweDRlMzQ3YTA4MDAwMDAwMDAsIDB4Nzg2NWY4MmMwMDAwMDAwMCwgMHgwYjVkMTQyYzAwMDAwMDAwLAorICAgIDB4M2QwYzk2MDgwMDAwMDAwMCwgMHg2N2ZmMTA2NTAwMDAwMDAwLCAweDUxYWU5MjQxMDAwMDAwMDAsCisgICAgMHhkMzE5MWRiZTAwMDAwMDAwLCAweGU1NDg5ZjlhMDAwMDAwMDAsIDB4YmZiYjE5ZjcwMDAwMDAwMCwKKyAgICAweDg5ZWE5YmQzMDAwMDAwMDAsIDB4MWZmOGFkYmQwMDAwMDAwMCwgMHgyOWE5MmY5OTAwMDAwMDAwLAorICAgIDB4NzM1YWE5ZjQwMDAwMDAwMCwgMHg0NTBiMmJkMDAwMDAwMDAwLCAweGM3YmNhNDJmMDAwMDAwMDAsCisgICAgMHhmMWVkMjYwYjAwMDAwMDAwLCAweGFiMWVhMDY2MDAwMDAwMDAsIDB4OWQ0ZjIyNDIwMDAwMDAwMCwKKyAgICAweGVlNzdjZTQyMDAwMDAwMDAsIDB4ZDgyNjRjNjYwMDAwMDAwMCwgMHg4MmQ1Y2EwYjAwMDAwMDAwLAorICAgIDB4YjQ4NDQ4MmYwMDAwMDAwMCwgMHgzNjMzYzdkMDAwMDAwMDAwLCAweDAwNjI0NWY0MDAwMDAwMDAsCisgICAgMHg1YTkxYzM5OTAwMDAwMDAwLCAweDZjYzA0MWJkMDAwMDAwMDAsIDB4YmNlMTFiOTgwMDAwMDAwMCwKKyAgICAweDhhYjA5OWJjMDAwMDAwMDAsIDB4ZDA0MzFmZDEwMDAwMDAwMCwgMHhlNjEyOWRmNTAwMDAwMDAwLAorICAgIDB4NjRhNTEyMGEwMDAwMDAwMCwgMHg1MmY0OTAyZTAwMDAwMDAwLCAweDA4MDcxNjQzMDAwMDAwMDAsCisgICAgMHgzZTU2OTQ2NzAwMDAwMDAwLCAweDRkNmU3ODY3MDAwMDAwMDAsIDB4N2IzZmZhNDMwMDAwMDAwMCwKKyAgICAweDIxY2M3YzJlMDAwMDAwMDAsIDB4MTc5ZGZlMGEwMDAwMDAwMCwgMHg5NTJhNzFmNTAwMDAwMDAwLAorICAgIDB4YTM3YmYzZDEwMDAwMDAwMCwgMHhmOTg4NzViYzAwMDAwMDAwLCAweGNmZDlmNzk4MDAwMDAwMDAsCisgICAgMHhkNWFkMTk2MDAwMDAwMDAwLCAweGUzZmM5YjQ0MDAwMDAwMDAsIDB4YjkwZjFkMjkwMDAwMDAwMCwKKyAgICAweDhmNWU5ZjBkMDAwMDAwMDAsIDB4MGRlOTEwZjIwMDAwMDAwMCwgMHgzYmI4OTJkNjAwMDAwMDAwLAorICAgIDB4NjE0YjE0YmIwMDAwMDAwMCwgMHg1NzFhOTY5ZjAwMDAwMDAwLCAweDI0MjI3YTlmMDAwMDAwMDAsCisgICAgMHgxMjczZjhiYjAwMDAwMDAwLCAweDQ4ODA3ZWQ2MDAwMDAwMDAsIDB4N2VkMWZjZjIwMDAwMDAwMCwKKyAgICAweGZjNjY3MzBkMDAwMDAwMDAsIDB4Y2EzN2YxMjkwMDAwMDAwMCwgMHg5MGM0Nzc0NDAwMDAwMDAwLAorICAgIDB4YTY5NWY1NjAwMDAwMDAwMCwgMHg3NmI0YWY0NTAwMDAwMDAwLCAweDQwZTUyZDYxMDAwMDAwMDAsCisgICAgMHgxYTE2YWIwYzAwMDAwMDAwLCAweDJjNDcyOTI4MDAwMDAwMDAsIDB4YWVmMGE2ZDcwMDAwMDAwMCwKKyAgICAweDk4YTEyNGYzMDAwMDAwMDAsIDB4YzI1MmEyOWUwMDAwMDAwMCwgMHhmNDAzMjBiYTAwMDAwMDAwLAorICAgIDB4ODczYmNjYmEwMDAwMDAwMCwgMHhiMTZhNGU5ZTAwMDAwMDAwLCAweGViOTljOGYzMDAwMDAwMDAsCisgICAgMHhkZGM4NGFkNzAwMDAwMDAwLCAweDVmN2ZjNTI4MDAwMDAwMDAsIDB4NjkyZTQ3MGMwMDAwMDAwMCwKKyAgICAweDMzZGRjMTYxMDAwMDAwMDAsIDB4MDU4YzQzNDUwMDAwMDAwMCwgMHg5MzllNzUyYjAwMDAwMDAwLAorICAgIDB4YTVjZmY3MGYwMDAwMDAwMCwgMHhmZjNjNzE2MjAwMDAwMDAwLCAweGM5NmRmMzQ2MDAwMDAwMDAsCisgICAgMHg0YmRhN2NiOTAwMDAwMDAwLCAweDdkOGJmZTlkMDAwMDAwMDAsIDB4Mjc3ODc4ZjAwMDAwMDAwMCwKKyAgICAweDExMjlmYWQ0MDAwMDAwMDAsIDB4NjIxMTE2ZDQwMDAwMDAwMCwgMHg1NDQwOTRmMDAwMDAwMDAwLAorICAgIDB4MGViMzEyOWQwMDAwMDAwMCwgMHgzOGUyOTBiOTAwMDAwMDAwLCAweGJhNTUxZjQ2MDAwMDAwMDAsCisgICAgMHg4YzA0OWQ2MjAwMDAwMDAwLCAweGQ2ZjcxYjBmMDAwMDAwMDAsIDB4ZTBhNjk5MmIwMDAwMDAwMCwKKyAgICAweDMwODdjMzBlMDAwMDAwMDAsIDB4MDZkNjQxMmEwMDAwMDAwMCwgMHg1YzI1Yzc0NzAwMDAwMDAwLAorICAgIDB4NmE3NDQ1NjMwMDAwMDAwMCwgMHhlOGMzY2E5YzAwMDAwMDAwLCAweGRlOTI0OGI4MDAwMDAwMDAsCisgICAgMHg4NDYxY2VkNTAwMDAwMDAwLCAweGIyMzA0Y2YxMDAwMDAwMDAsIDB4YzEwOGEwZjEwMDAwMDAwMCwKKyAgICAweGY3NTkyMmQ1MDAwMDAwMDAsIDB4YWRhYWE0YjgwMDAwMDAwMCwgMHg5YmZiMjY5YzAwMDAwMDAwLAorICAgIDB4MTk0Y2E5NjMwMDAwMDAwMCwgMHgyZjFkMmI0NzAwMDAwMDAwLCAweDc1ZWVhZDJhMDAwMDAwMDAsCisgICAgMHg0M2JmMmYwZTAwMDAwMDAwfSwKKyAgIHsweDAwMDAwMDAwMDAwMDAwMDAsIDB4YzgxNzllY2YwMDAwMDAwMCwgMHhkMTI5NGQ0NDAwMDAwMDAwLAorICAgIDB4MTkzZWQzOGIwMDAwMDAwMCwgMHhhMjUzOWE4ODAwMDAwMDAwLCAweDZhNDQwNDQ3MDAwMDAwMDAsCisgICAgMHg3MzdhZDdjYzAwMDAwMDAwLCAweGJiNmQ0OTAzMDAwMDAwMDAsIDB4MDVhMTQ1Y2EwMDAwMDAwMCwKKyAgICAweGNkYjZkYjA1MDAwMDAwMDAsIDB4ZDQ4ODA4OGUwMDAwMDAwMCwgMHgxYzlmOTY0MTAwMDAwMDAwLAorICAgIDB4YTdmMmRmNDIwMDAwMDAwMCwgMHg2ZmU1NDE4ZDAwMDAwMDAwLCAweDc2ZGI5MjA2MDAwMDAwMDAsCisgICAgMHhiZWNjMGNjOTAwMDAwMDAwLCAweDRiNDRmYTRmMDAwMDAwMDAsIDB4ODM1MzY0ODAwMDAwMDAwMCwKKyAgICAweDlhNmRiNzBiMDAwMDAwMDAsIDB4NTI3YTI5YzQwMDAwMDAwMCwgMHhlOTE3NjBjNzAwMDAwMDAwLAorICAgIDB4MjEwMGZlMDgwMDAwMDAwMCwgMHgzODNlMmQ4MzAwMDAwMDAwLCAweGYwMjliMzRjMDAwMDAwMDAsCisgICAgMHg0ZWU1YmY4NTAwMDAwMDAwLCAweDg2ZjIyMTRhMDAwMDAwMDAsIDB4OWZjY2YyYzEwMDAwMDAwMCwKKyAgICAweDU3ZGI2YzBlMDAwMDAwMDAsIDB4ZWNiNjI1MGQwMDAwMDAwMCwgMHgyNGExYmJjMjAwMDAwMDAwLAorICAgIDB4M2Q5ZjY4NDkwMDAwMDAwMCwgMHhmNTg4ZjY4NjAwMDAwMDAwLCAweDk2ODhmNDlmMDAwMDAwMDAsCisgICAgMHg1ZTlmNmE1MDAwMDAwMDAwLCAweDQ3YTFiOWRiMDAwMDAwMDAsIDB4OGZiNjI3MTQwMDAwMDAwMCwKKyAgICAweDM0ZGI2ZTE3MDAwMDAwMDAsIDB4ZmNjY2YwZDgwMDAwMDAwMCwgMHhlNWYyMjM1MzAwMDAwMDAwLAorICAgIDB4MmRlNWJkOWMwMDAwMDAwMCwgMHg5MzI5YjE1NTAwMDAwMDAwLCAweDViM2UyZjlhMDAwMDAwMDAsCisgICAgMHg0MjAwZmMxMTAwMDAwMDAwLCAweDhhMTc2MmRlMDAwMDAwMDAsIDB4MzE3YTJiZGQwMDAwMDAwMCwKKyAgICAweGY5NmRiNTEyMDAwMDAwMDAsIDB4ZTA1MzY2OTkwMDAwMDAwMCwgMHgyODQ0Zjg1NjAwMDAwMDAwLAorICAgIDB4ZGRjYzBlZDAwMDAwMDAwMCwgMHgxNWRiOTAxZjAwMDAwMDAwLCAweDBjZTU0Mzk0MDAwMDAwMDAsCisgICAgMHhjNGYyZGQ1YjAwMDAwMDAwLCAweDdmOWY5NDU4MDAwMDAwMDAsIDB4Yjc4ODBhOTcwMDAwMDAwMCwKKyAgICAweGFlYjZkOTFjMDAwMDAwMDAsIDB4NjZhMTQ3ZDMwMDAwMDAwMCwgMHhkODZkNGIxYTAwMDAwMDAwLAorICAgIDB4MTA3YWQ1ZDUwMDAwMDAwMCwgMHgwOTQ0MDY1ZTAwMDAwMDAwLCAweGMxNTM5ODkxMDAwMDAwMDAsCisgICAgMHg3YTNlZDE5MjAwMDAwMDAwLCAweGIyMjk0ZjVkMDAwMDAwMDAsIDB4YWIxNzljZDYwMDAwMDAwMCwKKyAgICAweDYzMDAwMjE5MDAwMDAwMDAsIDB4NmQxNzk4ZTQwMDAwMDAwMCwgMHhhNTAwMDYyYjAwMDAwMDAwLAorICAgIDB4YmMzZWQ1YTAwMDAwMDAwMCwgMHg3NDI5NGI2ZjAwMDAwMDAwLCAweGNmNDQwMjZjMDAwMDAwMDAsCisgICAgMHgwNzUzOWNhMzAwMDAwMDAwLCAweDFlNmQ0ZjI4MDAwMDAwMDAsIDB4ZDY3YWQxZTcwMDAwMDAwMCwKKyAgICAweDY4YjZkZDJlMDAwMDAwMDAsIDB4YTBhMTQzZTEwMDAwMDAwMCwgMHhiOTlmOTA2YTAwMDAwMDAwLAorICAgIDB4NzE4ODBlYTUwMDAwMDAwMCwgMHhjYWU1NDdhNjAwMDAwMDAwLCAweDAyZjJkOTY5MDAwMDAwMDAsCisgICAgMHgxYmNjMGFlMjAwMDAwMDAwLCAweGQzZGI5NDJkMDAwMDAwMDAsIDB4MjY1MzYyYWIwMDAwMDAwMCwKKyAgICAweGVlNDRmYzY0MDAwMDAwMDAsIDB4Zjc3YTJmZWYwMDAwMDAwMCwgMHgzZjZkYjEyMDAwMDAwMDAwLAorICAgIDB4ODQwMGY4MjMwMDAwMDAwMCwgMHg0YzE3NjZlYzAwMDAwMDAwLCAweDU1MjliNTY3MDAwMDAwMDAsCisgICAgMHg5ZDNlMmJhODAwMDAwMDAwLCAweDIzZjIyNzYxMDAwMDAwMDAsIDB4ZWJlNWI5YWUwMDAwMDAwMCwKKyAgICAweGYyZGI2YTI1MDAwMDAwMDAsIDB4M2FjY2Y0ZWEwMDAwMDAwMCwgMHg4MWExYmRlOTAwMDAwMDAwLAorICAgIDB4NDliNjIzMjYwMDAwMDAwMCwgMHg1MDg4ZjBhZDAwMDAwMDAwLCAweDk4OWY2ZTYyMDAwMDAwMDAsCisgICAgMHhmYjlmNmM3YjAwMDAwMDAwLCAweDMzODhmMmI0MDAwMDAwMDAsIDB4MmFiNjIxM2YwMDAwMDAwMCwKKyAgICAweGUyYTFiZmYwMDAwMDAwMDAsIDB4NTljY2Y2ZjMwMDAwMDAwMCwgMHg5MWRiNjgzYzAwMDAwMDAwLAorICAgIDB4ODhlNWJiYjcwMDAwMDAwMCwgMHg0MGYyMjU3ODAwMDAwMDAwLCAweGZlM2UyOWIxMDAwMDAwMDAsCisgICAgMHgzNjI5Yjc3ZTAwMDAwMDAwLCAweDJmMTc2NGY1MDAwMDAwMDAsIDB4ZTcwMGZhM2EwMDAwMDAwMCwKKyAgICAweDVjNmRiMzM5MDAwMDAwMDAsIDB4OTQ3YTJkZjYwMDAwMDAwMCwgMHg4ZDQ0ZmU3ZDAwMDAwMDAwLAorICAgIDB4NDU1MzYwYjIwMDAwMDAwMCwgMHhiMGRiOTYzNDAwMDAwMDAwLCAweDc4Y2MwOGZiMDAwMDAwMDAsCisgICAgMHg2MWYyZGI3MDAwMDAwMDAwLCAweGE5ZTU0NWJmMDAwMDAwMDAsIDB4MTI4ODBjYmMwMDAwMDAwMCwKKyAgICAweGRhOWY5MjczMDAwMDAwMDAsIDB4YzNhMTQxZjgwMDAwMDAwMCwgMHgwYmI2ZGYzNzAwMDAwMDAwLAorICAgIDB4YjU3YWQzZmUwMDAwMDAwMCwgMHg3ZDZkNGQzMTAwMDAwMDAwLCAweDY0NTM5ZWJhMDAwMDAwMDAsCisgICAgMHhhYzQ0MDA3NTAwMDAwMDAwLCAweDE3Mjk0OTc2MDAwMDAwMDAsIDB4ZGYzZWQ3YjkwMDAwMDAwMCwKKyAgICAweGM2MDAwNDMyMDAwMDAwMDAsIDB4MGUxNzlhZmQwMDAwMDAwMCwgMHg5YjI4NDExMjAwMDAwMDAwLAorICAgIDB4NTMzZmRmZGQwMDAwMDAwMCwgMHg0YTAxMGM1NjAwMDAwMDAwLCAweDgyMTY5Mjk5MDAwMDAwMDAsCisgICAgMHgzOTdiZGI5YTAwMDAwMDAwLCAweGYxNmM0NTU1MDAwMDAwMDAsIDB4ZTg1Mjk2ZGUwMDAwMDAwMCwKKyAgICAweDIwNDUwODExMDAwMDAwMDAsIDB4OWU4OTA0ZDgwMDAwMDAwMCwgMHg1NjllOWExNzAwMDAwMDAwLAorICAgIDB4NGZhMDQ5OWMwMDAwMDAwMCwgMHg4N2I3ZDc1MzAwMDAwMDAwLCAweDNjZGE5ZTUwMDAwMDAwMDAsCisgICAgMHhmNGNkMDA5ZjAwMDAwMDAwLCAweGVkZjNkMzE0MDAwMDAwMDAsIDB4MjVlNDRkZGIwMDAwMDAwMCwKKyAgICAweGQwNmNiYjVkMDAwMDAwMDAsIDB4MTg3YjI1OTIwMDAwMDAwMCwgMHgwMTQ1ZjYxOTAwMDAwMDAwLAorICAgIDB4Yzk1MjY4ZDYwMDAwMDAwMCwgMHg3MjNmMjFkNTAwMDAwMDAwLCAweGJhMjhiZjFhMDAwMDAwMDAsCisgICAgMHhhMzE2NmM5MTAwMDAwMDAwLCAweDZiMDFmMjVlMDAwMDAwMDAsIDB4ZDVjZGZlOTcwMDAwMDAwMCwKKyAgICAweDFkZGE2MDU4MDAwMDAwMDAsIDB4MDRlNGIzZDMwMDAwMDAwMCwgMHhjY2YzMmQxYzAwMDAwMDAwLAorICAgIDB4Nzc5ZTY0MWYwMDAwMDAwMCwgMHhiZjg5ZmFkMDAwMDAwMDAwLCAweGE2YjcyOTViMDAwMDAwMDAsCisgICAgMHg2ZWEwYjc5NDAwMDAwMDAwLCAweDBkYTBiNThkMDAwMDAwMDAsIDB4YzViNzJiNDIwMDAwMDAwMCwKKyAgICAweGRjODlmOGM5MDAwMDAwMDAsIDB4MTQ5ZTY2MDYwMDAwMDAwMCwgMHhhZmYzMmYwNTAwMDAwMDAwLAorICAgIDB4NjdlNGIxY2EwMDAwMDAwMCwgMHg3ZWRhNjI0MTAwMDAwMDAwLCAweGI2Y2RmYzhlMDAwMDAwMDAsCisgICAgMHgwODAxZjA0NzAwMDAwMDAwLCAweGMwMTY2ZTg4MDAwMDAwMDAsIDB4ZDkyOGJkMDMwMDAwMDAwMCwKKyAgICAweDExM2YyM2NjMDAwMDAwMDAsIDB4YWE1MjZhY2YwMDAwMDAwMCwgMHg2MjQ1ZjQwMDAwMDAwMDAwLAorICAgIDB4N2I3YjI3OGIwMDAwMDAwMCwgMHhiMzZjYjk0NDAwMDAwMDAwLCAweDQ2ZTQ0ZmMyMDAwMDAwMDAsCisgICAgMHg4ZWYzZDEwZDAwMDAwMDAwLCAweDk3Y2QwMjg2MDAwMDAwMDAsIDB4NWZkYTljNDkwMDAwMDAwMCwKKyAgICAweGU0YjdkNTRhMDAwMDAwMDAsIDB4MmNhMDRiODUwMDAwMDAwMCwgMHgzNTllOTgwZTAwMDAwMDAwLAorICAgIDB4ZmQ4OTA2YzEwMDAwMDAwMCwgMHg0MzQ1MGEwODAwMDAwMDAwLCAweDhiNTI5NGM3MDAwMDAwMDAsCisgICAgMHg5MjZjNDc0YzAwMDAwMDAwLCAweDVhN2JkOTgzMDAwMDAwMDAsIDB4ZTExNjkwODAwMDAwMDAwMCwKKyAgICAweDI5MDEwZTRmMDAwMDAwMDAsIDB4MzAzZmRkYzQwMDAwMDAwMCwgMHhmODI4NDMwYjAwMDAwMDAwLAorICAgIDB4ZjYzZmQ5ZjYwMDAwMDAwMCwgMHgzZTI4NDczOTAwMDAwMDAwLCAweDI3MTY5NGIyMDAwMDAwMDAsCisgICAgMHhlZjAxMGE3ZDAwMDAwMDAwLCAweDU0NmM0MzdlMDAwMDAwMDAsIDB4OWM3YmRkYjEwMDAwMDAwMCwKKyAgICAweDg1NDUwZTNhMDAwMDAwMDAsIDB4NGQ1MjkwZjUwMDAwMDAwMCwgMHhmMzllOWMzYzAwMDAwMDAwLAorICAgIDB4M2I4OTAyZjMwMDAwMDAwMCwgMHgyMmI3ZDE3ODAwMDAwMDAwLCAweGVhYTA0ZmI3MDAwMDAwMDAsCisgICAgMHg1MWNkMDZiNDAwMDAwMDAwLCAweDk5ZGE5ODdiMDAwMDAwMDAsIDB4ODBlNDRiZjAwMDAwMDAwMCwKKyAgICAweDQ4ZjNkNTNmMDAwMDAwMDAsIDB4YmQ3YjIzYjkwMDAwMDAwMCwgMHg3NTZjYmQ3NjAwMDAwMDAwLAorICAgIDB4NmM1MjZlZmQwMDAwMDAwMCwgMHhhNDQ1ZjAzMjAwMDAwMDAwLCAweDFmMjhiOTMxMDAwMDAwMDAsCisgICAgMHhkNzNmMjdmZTAwMDAwMDAwLCAweGNlMDFmNDc1MDAwMDAwMDAsIDB4MDYxNjZhYmEwMDAwMDAwMCwKKyAgICAweGI4ZGE2NjczMDAwMDAwMDAsIDB4NzBjZGY4YmMwMDAwMDAwMCwgMHg2OWYzMmIzNzAwMDAwMDAwLAorICAgIDB4YTFlNGI1ZjgwMDAwMDAwMCwgMHgxYTg5ZmNmYjAwMDAwMDAwLCAweGQyOWU2MjM0MDAwMDAwMDAsCisgICAgMHhjYmEwYjFiZjAwMDAwMDAwLCAweDAzYjcyZjcwMDAwMDAwMDAsIDB4NjBiNzJkNjkwMDAwMDAwMCwKKyAgICAweGE4YTBiM2E2MDAwMDAwMDAsIDB4YjE5ZTYwMmQwMDAwMDAwMCwgMHg3OTg5ZmVlMjAwMDAwMDAwLAorICAgIDB4YzJlNGI3ZTEwMDAwMDAwMCwgMHgwYWYzMjkyZTAwMDAwMDAwLCAweDEzY2RmYWE1MDAwMDAwMDAsCisgICAgMHhkYmRhNjQ2YTAwMDAwMDAwLCAweDY1MTY2OGEzMDAwMDAwMDAsIDB4YWQwMWY2NmMwMDAwMDAwMCwKKyAgICAweGI0M2YyNWU3MDAwMDAwMDAsIDB4N2MyOGJiMjgwMDAwMDAwMCwgMHhjNzQ1ZjIyYjAwMDAwMDAwLAorICAgIDB4MGY1MjZjZTQwMDAwMDAwMCwgMHgxNjZjYmY2ZjAwMDAwMDAwLCAweGRlN2IyMWEwMDAwMDAwMDAsCisgICAgMHgyYmYzZDcyNjAwMDAwMDAwLCAweGUzZTQ0OWU5MDAwMDAwMDAsIDB4ZmFkYTlhNjIwMDAwMDAwMCwKKyAgICAweDMyY2QwNGFkMDAwMDAwMDAsIDB4ODlhMDRkYWUwMDAwMDAwMCwgMHg0MWI3ZDM2MTAwMDAwMDAwLAorICAgIDB4NTg4OTAwZWEwMDAwMDAwMCwgMHg5MDllOWUyNTAwMDAwMDAwLCAweDJlNTI5MmVjMDAwMDAwMDAsCisgICAgMHhlNjQ1MGMyMzAwMDAwMDAwLCAweGZmN2JkZmE4MDAwMDAwMDAsIDB4Mzc2YzQxNjcwMDAwMDAwMCwKKyAgICAweDhjMDEwODY0MDAwMDAwMDAsIDB4NDQxNjk2YWIwMDAwMDAwMCwgMHg1ZDI4NDUyMDAwMDAwMDAwLAorICAgIDB4OTUzZmRiZWYwMDAwMDAwMH0sCisgICB7MHgwMDAwMDAwMDAwMDAwMDAwLCAweDk1ZDQ3MDk1MDAwMDAwMDAsIDB4NmJhZjkwZjEwMDAwMDAwMCwKKyAgICAweGZlN2JlMDY0MDAwMDAwMDAsIDB4OTc1ODUwMzgwMDAwMDAwMCwgMHgwMjhjMjBhZDAwMDAwMDAwLAorICAgIDB4ZmNmN2MwYzkwMDAwMDAwMCwgMHg2OTIzYjA1YzAwMDAwMDAwLCAweDJlYjFhMDcwMDAwMDAwMDAsCisgICAgMHhiYjY1ZDBlNTAwMDAwMDAwLCAweDQ1MWUzMDgxMDAwMDAwMDAsIDB4ZDBjYTQwMTQwMDAwMDAwMCwKKyAgICAweGI5ZTlmMDQ4MDAwMDAwMDAsIDB4MmMzZDgwZGQwMDAwMDAwMCwgMHhkMjQ2NjBiOTAwMDAwMDAwLAorICAgIDB4NDc5MjEwMmMwMDAwMDAwMCwgMHg1YzYyNDFlMTAwMDAwMDAwLCAweGM5YjYzMTc0MDAwMDAwMDAsCisgICAgMHgzN2NkZDExMDAwMDAwMDAwLCAweGEyMTlhMTg1MDAwMDAwMDAsIDB4Y2IzYTExZDkwMDAwMDAwMCwKKyAgICAweDVlZWU2MTRjMDAwMDAwMDAsIDB4YTA5NTgxMjgwMDAwMDAwMCwgMHgzNTQxZjFiZDAwMDAwMDAwLAorICAgIDB4NzJkM2UxOTEwMDAwMDAwMCwgMHhlNzA3OTEwNDAwMDAwMDAwLCAweDE5N2M3MTYwMDAwMDAwMDAsCisgICAgMHg4Y2E4MDFmNTAwMDAwMDAwLCAweGU1OGJiMWE5MDAwMDAwMDAsIDB4NzA1ZmMxM2MwMDAwMDAwMCwKKyAgICAweDhlMjQyMTU4MDAwMDAwMDAsIDB4MWJmMDUxY2QwMDAwMDAwMCwgMHhmOWMyZjMxOTAwMDAwMDAwLAorICAgIDB4NmMxNjgzOGMwMDAwMDAwMCwgMHg5MjZkNjNlODAwMDAwMDAwLCAweDA3YjkxMzdkMDAwMDAwMDAsCisgICAgMHg2ZTlhYTMyMTAwMDAwMDAwLCAweGZiNGVkM2I0MDAwMDAwMDAsIDB4MDUzNTMzZDAwMDAwMDAwMCwKKyAgICAweDkwZTE0MzQ1MDAwMDAwMDAsIDB4ZDc3MzUzNjkwMDAwMDAwMCwgMHg0MmE3MjNmYzAwMDAwMDAwLAorICAgIDB4YmNkY2MzOTgwMDAwMDAwMCwgMHgyOTA4YjMwZDAwMDAwMDAwLCAweDQwMmIwMzUxMDAwMDAwMDAsCisgICAgMHhkNWZmNzNjNDAwMDAwMDAwLCAweDJiODQ5M2EwMDAwMDAwMDAsIDB4YmU1MGUzMzUwMDAwMDAwMCwKKyAgICAweGE1YTBiMmY4MDAwMDAwMDAsIDB4MzA3NGMyNmQwMDAwMDAwMCwgMHhjZTBmMjIwOTAwMDAwMDAwLAorICAgIDB4NWJkYjUyOWMwMDAwMDAwMCwgMHgzMmY4ZTJjMDAwMDAwMDAwLCAweGE3MmM5MjU1MDAwMDAwMDAsCisgICAgMHg1OTU3NzIzMTAwMDAwMDAwLCAweGNjODMwMmE0MDAwMDAwMDAsIDB4OGIxMTEyODgwMDAwMDAwMCwKKyAgICAweDFlYzU2MjFkMDAwMDAwMDAsIDB4ZTBiZTgyNzkwMDAwMDAwMCwgMHg3NTZhZjJlYzAwMDAwMDAwLAorICAgIDB4MWM0OTQyYjAwMDAwMDAwMCwgMHg4OTlkMzIyNTAwMDAwMDAwLCAweDc3ZTZkMjQxMDAwMDAwMDAsCisgICAgMHhlMjMyYTJkNDAwMDAwMDAwLCAweGYyODVlNzMzMDAwMDAwMDAsIDB4Njc1MTk3YTYwMDAwMDAwMCwKKyAgICAweDk5MmE3N2MyMDAwMDAwMDAsIDB4MGNmZTA3NTcwMDAwMDAwMCwgMHg2NWRkYjcwYjAwMDAwMDAwLAorICAgIDB4ZjAwOWM3OWUwMDAwMDAwMCwgMHgwZTcyMjdmYTAwMDAwMDAwLCAweDliYTY1NzZmMDAwMDAwMDAsCisgICAgMHhkYzM0NDc0MzAwMDAwMDAwLCAweDQ5ZTAzN2Q2MDAwMDAwMDAsIDB4Yjc5YmQ3YjIwMDAwMDAwMCwKKyAgICAweDIyNGZhNzI3MDAwMDAwMDAsIDB4NGI2YzE3N2IwMDAwMDAwMCwgMHhkZWI4NjdlZTAwMDAwMDAwLAorICAgIDB4MjBjMzg3OGEwMDAwMDAwMCwgMHhiNTE3ZjcxZjAwMDAwMDAwLCAweGFlZTdhNmQyMDAwMDAwMDAsCisgICAgMHgzYjMzZDY0NzAwMDAwMDAwLCAweGM1NDgzNjIzMDAwMDAwMDAsIDB4NTA5YzQ2YjYwMDAwMDAwMCwKKyAgICAweDM5YmZmNmVhMDAwMDAwMDAsIDB4YWM2Yjg2N2YwMDAwMDAwMCwgMHg1MjEwNjYxYjAwMDAwMDAwLAorICAgIDB4YzdjNDE2OGUwMDAwMDAwMCwgMHg4MDU2MDZhMjAwMDAwMDAwLCAweDE1ODI3NjM3MDAwMDAwMDAsCisgICAgMHhlYmY5OTY1MzAwMDAwMDAwLCAweDdlMmRlNmM2MDAwMDAwMDAsIDB4MTcwZTU2OWEwMDAwMDAwMCwKKyAgICAweDgyZGEyNjBmMDAwMDAwMDAsIDB4N2NhMWM2NmIwMDAwMDAwMCwgMHhlOTc1YjZmZTAwMDAwMDAwLAorICAgIDB4MGI0NzE0MmEwMDAwMDAwMCwgMHg5ZTkzNjRiZjAwMDAwMDAwLCAweDYwZTg4NGRiMDAwMDAwMDAsCisgICAgMHhmNTNjZjQ0ZTAwMDAwMDAwLCAweDljMWY0NDEyMDAwMDAwMDAsIDB4MDljYjM0ODcwMDAwMDAwMCwKKyAgICAweGY3YjBkNGUzMDAwMDAwMDAsIDB4NjI2NGE0NzYwMDAwMDAwMCwgMHgyNWY2YjQ1YTAwMDAwMDAwLAorICAgIDB4YjAyMmM0Y2YwMDAwMDAwMCwgMHg0ZTU5MjRhYjAwMDAwMDAwLCAweGRiOGQ1NDNlMDAwMDAwMDAsCisgICAgMHhiMmFlZTQ2MjAwMDAwMDAwLCAweDI3N2E5NGY3MDAwMDAwMDAsIDB4ZDkwMTc0OTMwMDAwMDAwMCwKKyAgICAweDRjZDUwNDA2MDAwMDAwMDAsIDB4NTcyNTU1Y2IwMDAwMDAwMCwgMHhjMmYxMjU1ZTAwMDAwMDAwLAorICAgIDB4M2M4YWM1M2EwMDAwMDAwMCwgMHhhOTVlYjVhZjAwMDAwMDAwLCAweGMwN2QwNWYzMDAwMDAwMDAsCisgICAgMHg1NWE5NzU2NjAwMDAwMDAwLCAweGFiZDI5NTAyMDAwMDAwMDAsIDB4M2UwNmU1OTcwMDAwMDAwMCwKKyAgICAweDc5OTRmNWJiMDAwMDAwMDAsIDB4ZWM0MDg1MmUwMDAwMDAwMCwgMHgxMjNiNjU0YTAwMDAwMDAwLAorICAgIDB4ODdlZjE1ZGYwMDAwMDAwMCwgMHhlZWNjYTU4MzAwMDAwMDAwLCAweDdiMThkNTE2MDAwMDAwMDAsCisgICAgMHg4NTYzMzU3MjAwMDAwMDAwLCAweDEwYjc0NWU3MDAwMDAwMDAsIDB4ZTQwYmNmNjcwMDAwMDAwMCwKKyAgICAweDcxZGZiZmYyMDAwMDAwMDAsIDB4OGZhNDVmOTYwMDAwMDAwMCwgMHgxYTcwMmYwMzAwMDAwMDAwLAorICAgIDB4NzM1MzlmNWYwMDAwMDAwMCwgMHhlNjg3ZWZjYTAwMDAwMDAwLCAweDE4ZmMwZmFlMDAwMDAwMDAsCisgICAgMHg4ZDI4N2YzYjAwMDAwMDAwLCAweGNhYmE2ZjE3MDAwMDAwMDAsIDB4NWY2ZTFmODIwMDAwMDAwMCwKKyAgICAweGExMTVmZmU2MDAwMDAwMDAsIDB4MzRjMThmNzMwMDAwMDAwMCwgMHg1ZGUyM2YyZjAwMDAwMDAwLAorICAgIDB4YzgzNjRmYmEwMDAwMDAwMCwgMHgzNjRkYWZkZTAwMDAwMDAwLCAweGEzOTlkZjRiMDAwMDAwMDAsCisgICAgMHhiODY5OGU4NjAwMDAwMDAwLCAweDJkYmRmZTEzMDAwMDAwMDAsIDB4ZDNjNjFlNzcwMDAwMDAwMCwKKyAgICAweDQ2MTI2ZWUyMDAwMDAwMDAsIDB4MmYzMWRlYmUwMDAwMDAwMCwgMHhiYWU1YWUyYjAwMDAwMDAwLAorICAgIDB4NDQ5ZTRlNGYwMDAwMDAwMCwgMHhkMTRhM2VkYTAwMDAwMDAwLCAweDk2ZDgyZWY2MDAwMDAwMDAsCisgICAgMHgwMzBjNWU2MzAwMDAwMDAwLCAweGZkNzdiZTA3MDAwMDAwMDAsIDB4NjhhM2NlOTIwMDAwMDAwMCwKKyAgICAweDAxODA3ZWNlMDAwMDAwMDAsIDB4OTQ1NDBlNWIwMDAwMDAwMCwgMHg2YTJmZWUzZjAwMDAwMDAwLAorICAgIDB4ZmZmYjllYWEwMDAwMDAwMCwgMHgxZGM5M2M3ZTAwMDAwMDAwLCAweDg4MWQ0Y2ViMDAwMDAwMDAsCisgICAgMHg3NjY2YWM4ZjAwMDAwMDAwLCAweGUzYjJkYzFhMDAwMDAwMDAsIDB4OGE5MTZjNDYwMDAwMDAwMCwKKyAgICAweDFmNDUxY2QzMDAwMDAwMDAsIDB4ZTEzZWZjYjcwMDAwMDAwMCwgMHg3NGVhOGMyMjAwMDAwMDAwLAorICAgIDB4MzM3ODljMGUwMDAwMDAwMCwgMHhhNmFjZWM5YjAwMDAwMDAwLCAweDU4ZDcwY2ZmMDAwMDAwMDAsCisgICAgMHhjZDAzN2M2YTAwMDAwMDAwLCAweGE0MjBjYzM2MDAwMDAwMDAsIDB4MzFmNGJjYTMwMDAwMDAwMCwKKyAgICAweGNmOGY1Y2M3MDAwMDAwMDAsIDB4NWE1YjJjNTIwMDAwMDAwMCwgMHg0MWFiN2Q5ZjAwMDAwMDAwLAorICAgIDB4ZDQ3ZjBkMGEwMDAwMDAwMCwgMHgyYTA0ZWQ2ZTAwMDAwMDAwLCAweGJmZDA5ZGZiMDAwMDAwMDAsCisgICAgMHhkNmYzMmRhNzAwMDAwMDAwLCAweDQzMjc1ZDMyMDAwMDAwMDAsIDB4YmQ1Y2JkNTYwMDAwMDAwMCwKKyAgICAweDI4ODhjZGMzMDAwMDAwMDAsIDB4NmYxYWRkZWYwMDAwMDAwMCwgMHhmYWNlYWQ3YTAwMDAwMDAwLAorICAgIDB4MDRiNTRkMWUwMDAwMDAwMCwgMHg5MTYxM2Q4YjAwMDAwMDAwLCAweGY4NDI4ZGQ3MDAwMDAwMDAsCisgICAgMHg2ZDk2ZmQ0MjAwMDAwMDAwLCAweDkzZWQxZDI2MDAwMDAwMDAsIDB4MDYzOTZkYjMwMDAwMDAwMCwKKyAgICAweDE2OGUyODU0MDAwMDAwMDAsIDB4ODM1YTU4YzEwMDAwMDAwMCwgMHg3ZDIxYjhhNTAwMDAwMDAwLAorICAgIDB4ZThmNWM4MzAwMDAwMDAwMCwgMHg4MWQ2Nzg2YzAwMDAwMDAwLCAweDE0MDIwOGY5MDAwMDAwMDAsCisgICAgMHhlYTc5ZTg5ZDAwMDAwMDAwLCAweDdmYWQ5ODA4MDAwMDAwMDAsIDB4MzgzZjg4MjQwMDAwMDAwMCwKKyAgICAweGFkZWJmOGIxMDAwMDAwMDAsIDB4NTM5MDE4ZDUwMDAwMDAwMCwgMHhjNjQ0Njg0MDAwMDAwMDAwLAorICAgIDB4YWY2N2Q4MWMwMDAwMDAwMCwgMHgzYWIzYTg4OTAwMDAwMDAwLCAweGM0Yzg0OGVkMDAwMDAwMDAsCisgICAgMHg1MTFjMzg3ODAwMDAwMDAwLCAweDRhZWM2OWI1MDAwMDAwMDAsIDB4ZGYzODE5MjAwMDAwMDAwMCwKKyAgICAweDIxNDNmOTQ0MDAwMDAwMDAsIDB4YjQ5Nzg5ZDEwMDAwMDAwMCwgMHhkZGI0Mzk4ZDAwMDAwMDAwLAorICAgIDB4NDg2MDQ5MTgwMDAwMDAwMCwgMHhiNjFiYTk3YzAwMDAwMDAwLCAweDIzY2ZkOWU5MDAwMDAwMDAsCisgICAgMHg2NDVkYzljNTAwMDAwMDAwLCAweGYxODliOTUwMDAwMDAwMDAsIDB4MGZmMjU5MzQwMDAwMDAwMCwKKyAgICAweDlhMjYyOWExMDAwMDAwMDAsIDB4ZjMwNTk5ZmQwMDAwMDAwMCwgMHg2NmQxZTk2ODAwMDAwMDAwLAorICAgIDB4OThhYTA5MGMwMDAwMDAwMCwgMHgwZDdlNzk5OTAwMDAwMDAwLCAweGVmNGNkYjRkMDAwMDAwMDAsCisgICAgMHg3YTk4YWJkODAwMDAwMDAwLCAweDg0ZTM0YmJjMDAwMDAwMDAsIDB4MTEzNzNiMjkwMDAwMDAwMCwKKyAgICAweDc4MTQ4Yjc1MDAwMDAwMDAsIDB4ZWRjMGZiZTAwMDAwMDAwMCwgMHgxM2JiMWI4NDAwMDAwMDAwLAorICAgIDB4ODY2ZjZiMTEwMDAwMDAwMCwgMHhjMWZkN2IzZDAwMDAwMDAwLCAweDU0MjkwYmE4MDAwMDAwMDAsCisgICAgMHhhYTUyZWJjYzAwMDAwMDAwLCAweDNmODY5YjU5MDAwMDAwMDAsIDB4NTZhNTJiMDUwMDAwMDAwMCwKKyAgICAweGMzNzE1YjkwMDAwMDAwMDAsIDB4M2QwYWJiZjQwMDAwMDAwMCwgMHhhOGRlY2I2MTAwMDAwMDAwLAorICAgIDB4YjMyZTlhYWMwMDAwMDAwMCwgMHgyNmZhZWEzOTAwMDAwMDAwLCAweGQ4ODEwYTVkMDAwMDAwMDAsCisgICAgMHg0ZDU1N2FjODAwMDAwMDAwLCAweDI0NzZjYTk0MDAwMDAwMDAsIDB4YjFhMmJhMDEwMDAwMDAwMCwKKyAgICAweDRmZDk1YTY1MDAwMDAwMDAsIDB4ZGEwZDJhZjAwMDAwMDAwMCwgMHg5ZDlmM2FkYzAwMDAwMDAwLAorICAgIDB4MDg0YjRhNDkwMDAwMDAwMCwgMHhmNjMwYWEyZDAwMDAwMDAwLCAweDYzZTRkYWI4MDAwMDAwMDAsCisgICAgMHgwYWM3NmFlNDAwMDAwMDAwLCAweDlmMTMxYTcxMDAwMDAwMDAsIDB4NjE2OGZhMTUwMDAwMDAwMCwKKyAgICAweGY0YmM4YTgwMDAwMDAwMDB9LAorICAgezB4MDAwMDAwMDAwMDAwMDAwMCwgMHgxZjE3ZjA4MDAwMDAwMDAwLCAweDdmMjg5MWRhMDAwMDAwMDAsCisgICAgMHg2MDNmNjE1YTAwMDAwMDAwLCAweGJmNTY1MzZlMDAwMDAwMDAsIDB4YTA0MWEzZWUwMDAwMDAwMCwKKyAgICAweGMwN2VjMmI0MDAwMDAwMDAsIDB4ZGY2OTMyMzQwMDAwMDAwMCwgMHg3ZWFkYTZkYzAwMDAwMDAwLAorICAgIDB4NjFiYTU2NWMwMDAwMDAwMCwgMHgwMTg1MzcwNjAwMDAwMDAwLCAweDFlOTJjNzg2MDAwMDAwMDAsCisgICAgMHhjMWZiZjViMjAwMDAwMDAwLCAweGRlZWMwNTMyMDAwMDAwMDAsIDB4YmVkMzY0NjgwMDAwMDAwMCwKKyAgICAweGExYzQ5NGU4MDAwMDAwMDAsIDB4YmQ1YzNjNjIwMDAwMDAwMCwgMHhhMjRiY2NlMjAwMDAwMDAwLAorICAgIDB4YzI3NGFkYjgwMDAwMDAwMCwgMHhkZDYzNWQzODAwMDAwMDAwLCAweDAyMGE2ZjBjMDAwMDAwMDAsCisgICAgMHgxZDFkOWY4YzAwMDAwMDAwLCAweDdkMjJmZWQ2MDAwMDAwMDAsIDB4NjIzNTBlNTYwMDAwMDAwMCwKKyAgICAweGMzZjE5YWJlMDAwMDAwMDAsIDB4ZGNlNjZhM2UwMDAwMDAwMCwgMHhiY2Q5MGI2NDAwMDAwMDAwLAorICAgIDB4YTNjZWZiZTQwMDAwMDAwMCwgMHg3Y2E3YzlkMDAwMDAwMDAwLCAweDYzYjAzOTUwMDAwMDAwMDAsCisgICAgMHgwMzhmNTgwYTAwMDAwMDAwLCAweDFjOThhODhhMDAwMDAwMDAsIDB4N2FiOTc4YzQwMDAwMDAwMCwKKyAgICAweDY1YWU4ODQ0MDAwMDAwMDAsIDB4MDU5MWU5MWUwMDAwMDAwMCwgMHgxYTg2MTk5ZTAwMDAwMDAwLAorICAgIDB4YzVlZjJiYWEwMDAwMDAwMCwgMHhkYWY4ZGIyYTAwMDAwMDAwLCAweGJhYzdiYTcwMDAwMDAwMDAsCisgICAgMHhhNWQwNGFmMDAwMDAwMDAwLCAweDA0MTRkZTE4MDAwMDAwMDAsIDB4MWIwMzJlOTgwMDAwMDAwMCwKKyAgICAweDdiM2M0ZmMyMDAwMDAwMDAsIDB4NjQyYmJmNDIwMDAwMDAwMCwgMHhiYjQyOGQ3NjAwMDAwMDAwLAorICAgIDB4YTQ1NTdkZjYwMDAwMDAwMCwgMHhjNDZhMWNhYzAwMDAwMDAwLCAweGRiN2RlYzJjMDAwMDAwMDAsCisgICAgMHhjN2U1NDRhNjAwMDAwMDAwLCAweGQ4ZjJiNDI2MDAwMDAwMDAsIDB4YjhjZGQ1N2MwMDAwMDAwMCwKKyAgICAweGE3ZGEyNWZjMDAwMDAwMDAsIDB4NzhiMzE3YzgwMDAwMDAwMCwgMHg2N2E0ZTc0ODAwMDAwMDAwLAorICAgIDB4MDc5Yjg2MTIwMDAwMDAwMCwgMHgxODhjNzY5MjAwMDAwMDAwLCAweGI5NDhlMjdhMDAwMDAwMDAsCisgICAgMHhhNjVmMTJmYTAwMDAwMDAwLCAweGM2NjA3M2EwMDAwMDAwMDAsIDB4ZDk3NzgzMjAwMDAwMDAwMCwKKyAgICAweDA2MWViMTE0MDAwMDAwMDAsIDB4MTkwOTQxOTQwMDAwMDAwMCwgMHg3OTM2MjBjZTAwMDAwMDAwLAorICAgIDB4NjYyMWQwNGUwMDAwMDAwMCwgMHhiNTc0ODA1MzAwMDAwMDAwLCAweGFhNjM3MGQzMDAwMDAwMDAsCisgICAgMHhjYTVjMTE4OTAwMDAwMDAwLCAweGQ1NGJlMTA5MDAwMDAwMDAsIDB4MGEyMmQzM2QwMDAwMDAwMCwKKyAgICAweDE1MzUyM2JkMDAwMDAwMDAsIDB4NzUwYTQyZTcwMDAwMDAwMCwgMHg2YTFkYjI2NzAwMDAwMDAwLAorICAgIDB4Y2JkOTI2OGYwMDAwMDAwMCwgMHhkNGNlZDYwZjAwMDAwMDAwLCAweGI0ZjFiNzU1MDAwMDAwMDAsCisgICAgMHhhYmU2NDdkNTAwMDAwMDAwLCAweDc0OGY3NWUxMDAwMDAwMDAsIDB4NmI5ODg1NjEwMDAwMDAwMCwKKyAgICAweDBiYTdlNDNiMDAwMDAwMDAsIDB4MTRiMDE0YmIwMDAwMDAwMCwgMHgwODI4YmMzMTAwMDAwMDAwLAorICAgIDB4MTczZjRjYjEwMDAwMDAwMCwgMHg3NzAwMmRlYjAwMDAwMDAwLCAweDY4MTdkZDZiMDAwMDAwMDAsCisgICAgMHhiNzdlZWY1ZjAwMDAwMDAwLCAweGE4NjkxZmRmMDAwMDAwMDAsIDB4Yzg1NjdlODUwMDAwMDAwMCwKKyAgICAweGQ3NDE4ZTA1MDAwMDAwMDAsIDB4NzY4NTFhZWQwMDAwMDAwMCwgMHg2OTkyZWE2ZDAwMDAwMDAwLAorICAgIDB4MDlhZDhiMzcwMDAwMDAwMCwgMHgxNmJhN2JiNzAwMDAwMDAwLCAweGM5ZDM0OTgzMDAwMDAwMDAsCisgICAgMHhkNmM0YjkwMzAwMDAwMDAwLCAweGI2ZmJkODU5MDAwMDAwMDAsIDB4YTllYzI4ZDkwMDAwMDAwMCwKKyAgICAweGNmY2RmODk3MDAwMDAwMDAsIDB4ZDBkYTA4MTcwMDAwMDAwMCwgMHhiMGU1Njk0ZDAwMDAwMDAwLAorICAgIDB4YWZmMjk5Y2QwMDAwMDAwMCwgMHg3MDliYWJmOTAwMDAwMDAwLCAweDZmOGM1Yjc5MDAwMDAwMDAsCisgICAgMHgwZmIzM2EyMzAwMDAwMDAwLCAweDEwYTRjYWEzMDAwMDAwMDAsIDB4YjE2MDVlNGIwMDAwMDAwMCwKKyAgICAweGFlNzdhZWNiMDAwMDAwMDAsIDB4Y2U0OGNmOTEwMDAwMDAwMCwgMHhkMTVmM2YxMTAwMDAwMDAwLAorICAgIDB4MGUzNjBkMjUwMDAwMDAwMCwgMHgxMTIxZmRhNTAwMDAwMDAwLCAweDcxMWU5Y2ZmMDAwMDAwMDAsCisgICAgMHg2ZTA5NmM3ZjAwMDAwMDAwLCAweDcyOTFjNGY1MDAwMDAwMDAsIDB4NmQ4NjM0NzUwMDAwMDAwMCwKKyAgICAweDBkYjk1NTJmMDAwMDAwMDAsIDB4MTJhZWE1YWYwMDAwMDAwMCwgMHhjZGM3OTc5YjAwMDAwMDAwLAorICAgIDB4ZDJkMDY3MWIwMDAwMDAwMCwgMHhiMmVmMDY0MTAwMDAwMDAwLCAweGFkZjhmNmMxMDAwMDAwMDAsCisgICAgMHgwYzNjNjIyOTAwMDAwMDAwLCAweDEzMmI5MmE5MDAwMDAwMDAsIDB4NzMxNGYzZjMwMDAwMDAwMCwKKyAgICAweDZjMDMwMzczMDAwMDAwMDAsIDB4YjM2YTMxNDcwMDAwMDAwMCwgMHhhYzdkYzFjNzAwMDAwMDAwLAorICAgIDB4Y2M0MmEwOWQwMDAwMDAwMCwgMHhkMzU1NTAxZDAwMDAwMDAwLCAweDZhZTkwMGE3MDAwMDAwMDAsCisgICAgMHg3NWZlZjAyNzAwMDAwMDAwLCAweDE1YzE5MTdkMDAwMDAwMDAsIDB4MGFkNjYxZmQwMDAwMDAwMCwKKyAgICAweGQ1YmY1M2M5MDAwMDAwMDAsIDB4Y2FhOGEzNDkwMDAwMDAwMCwgMHhhYTk3YzIxMzAwMDAwMDAwLAorICAgIDB4YjU4MDMyOTMwMDAwMDAwMCwgMHgxNDQ0YTY3YjAwMDAwMDAwLCAweDBiNTM1NmZiMDAwMDAwMDAsCisgICAgMHg2YjZjMzdhMTAwMDAwMDAwLCAweDc0N2JjNzIxMDAwMDAwMDAsIDB4YWIxMmY1MTUwMDAwMDAwMCwKKyAgICAweGI0MDUwNTk1MDAwMDAwMDAsIDB4ZDQzYTY0Y2YwMDAwMDAwMCwgMHhjYjJkOTQ0ZjAwMDAwMDAwLAorICAgIDB4ZDdiNTNjYzUwMDAwMDAwMCwgMHhjOGEyY2M0NTAwMDAwMDAwLCAweGE4OWRhZDFmMDAwMDAwMDAsCisgICAgMHhiNzhhNWQ5ZjAwMDAwMDAwLCAweDY4ZTM2ZmFiMDAwMDAwMDAsIDB4NzdmNDlmMmIwMDAwMDAwMCwKKyAgICAweDE3Y2JmZTcxMDAwMDAwMDAsIDB4MDhkYzBlZjEwMDAwMDAwMCwgMHhhOTE4OWExOTAwMDAwMDAwLAorICAgIDB4YjYwZjZhOTkwMDAwMDAwMCwgMHhkNjMwMGJjMzAwMDAwMDAwLCAweGM5MjdmYjQzMDAwMDAwMDAsCisgICAgMHgxNjRlYzk3NzAwMDAwMDAwLCAweDA5NTkzOWY3MDAwMDAwMDAsIDB4Njk2NjU4YWQwMDAwMDAwMCwKKyAgICAweDc2NzFhODJkMDAwMDAwMDAsIDB4MTA1MDc4NjMwMDAwMDAwMCwgMHgwZjQ3ODhlMzAwMDAwMDAwLAorICAgIDB4NmY3OGU5YjkwMDAwMDAwMCwgMHg3MDZmMTkzOTAwMDAwMDAwLCAweGFmMDYyYjBkMDAwMDAwMDAsCisgICAgMHhiMDExZGI4ZDAwMDAwMDAwLCAweGQwMmViYWQ3MDAwMDAwMDAsIDB4Y2YzOTRhNTcwMDAwMDAwMCwKKyAgICAweDZlZmRkZWJmMDAwMDAwMDAsIDB4NzFlYTJlM2YwMDAwMDAwMCwgMHgxMWQ1NGY2NTAwMDAwMDAwLAorICAgIDB4MGVjMmJmZTUwMDAwMDAwMCwgMHhkMWFiOGRkMTAwMDAwMDAwLCAweGNlYmM3ZDUxMDAwMDAwMDAsCisgICAgMHhhZTgzMWMwYjAwMDAwMDAwLCAweGIxOTRlYzhiMDAwMDAwMDAsIDB4YWQwYzQ0MDEwMDAwMDAwMCwKKyAgICAweGIyMWJiNDgxMDAwMDAwMDAsIDB4ZDIyNGQ1ZGIwMDAwMDAwMCwgMHhjZDMzMjU1YjAwMDAwMDAwLAorICAgIDB4MTI1YTE3NmYwMDAwMDAwMCwgMHgwZDRkZTdlZjAwMDAwMDAwLCAweDZkNzI4NmI1MDAwMDAwMDAsCisgICAgMHg3MjY1NzYzNTAwMDAwMDAwLCAweGQzYTFlMmRkMDAwMDAwMDAsIDB4Y2NiNjEyNWQwMDAwMDAwMCwKKyAgICAweGFjODk3MzA3MDAwMDAwMDAsIDB4YjM5ZTgzODcwMDAwMDAwMCwgMHg2Y2Y3YjFiMzAwMDAwMDAwLAorICAgIDB4NzNlMDQxMzMwMDAwMDAwMCwgMHgxM2RmMjA2OTAwMDAwMDAwLCAweDBjYzhkMGU5MDAwMDAwMDAsCisgICAgMHhkZjlkODBmNDAwMDAwMDAwLCAweGMwOGE3MDc0MDAwMDAwMDAsIDB4YTBiNTExMmUwMDAwMDAwMCwKKyAgICAweGJmYTJlMWFlMDAwMDAwMDAsIDB4NjBjYmQzOWEwMDAwMDAwMCwgMHg3ZmRjMjMxYTAwMDAwMDAwLAorICAgIDB4MWZlMzQyNDAwMDAwMDAwMCwgMHgwMGY0YjJjMDAwMDAwMDAwLCAweGExMzAyNjI4MDAwMDAwMDAsCisgICAgMHhiZTI3ZDZhODAwMDAwMDAwLCAweGRlMThiN2YyMDAwMDAwMDAsIDB4YzEwZjQ3NzIwMDAwMDAwMCwKKyAgICAweDFlNjY3NTQ2MDAwMDAwMDAsIDB4MDE3MTg1YzYwMDAwMDAwMCwgMHg2MTRlZTQ5YzAwMDAwMDAwLAorICAgIDB4N2U1OTE0MWMwMDAwMDAwMCwgMHg2MmMxYmM5NjAwMDAwMDAwLCAweDdkZDY0YzE2MDAwMDAwMDAsCisgICAgMHgxZGU5MmQ0YzAwMDAwMDAwLCAweDAyZmVkZGNjMDAwMDAwMDAsIDB4ZGQ5N2VmZjgwMDAwMDAwMCwKKyAgICAweGMyODAxZjc4MDAwMDAwMDAsIDB4YTJiZjdlMjIwMDAwMDAwMCwgMHhiZGE4OGVhMjAwMDAwMDAwLAorICAgIDB4MWM2YzFhNGEwMDAwMDAwMCwgMHgwMzdiZWFjYTAwMDAwMDAwLCAweDYzNDQ4YjkwMDAwMDAwMDAsCisgICAgMHg3YzUzN2IxMDAwMDAwMDAwLCAweGEzM2E0OTI0MDAwMDAwMDAsIDB4YmMyZGI5YTQwMDAwMDAwMCwKKyAgICAweGRjMTJkOGZlMDAwMDAwMDAsIDB4YzMwNTI4N2UwMDAwMDAwMCwgMHhhNTI0ZjgzMDAwMDAwMDAwLAorICAgIDB4YmEzMzA4YjAwMDAwMDAwMCwgMHhkYTBjNjllYTAwMDAwMDAwLCAweGM1MWI5OTZhMDAwMDAwMDAsCisgICAgMHgxYTcyYWI1ZTAwMDAwMDAwLCAweDA1NjU1YmRlMDAwMDAwMDAsIDB4NjU1YTNhODQwMDAwMDAwMCwKKyAgICAweDdhNGRjYTA0MDAwMDAwMDAsIDB4ZGI4OTVlZWMwMDAwMDAwMCwgMHhjNDllYWU2YzAwMDAwMDAwLAorICAgIDB4YTRhMWNmMzYwMDAwMDAwMCwgMHhiYmI2M2ZiNjAwMDAwMDAwLCAweDY0ZGYwZDgyMDAwMDAwMDAsCisgICAgMHg3YmM4ZmQwMjAwMDAwMDAwLCAweDFiZjc5YzU4MDAwMDAwMDAsIDB4MDRlMDZjZDgwMDAwMDAwMCwKKyAgICAweDE4NzhjNDUyMDAwMDAwMDAsIDB4MDc2ZjM0ZDIwMDAwMDAwMCwgMHg2NzUwNTU4ODAwMDAwMDAwLAorICAgIDB4Nzg0N2E1MDgwMDAwMDAwMCwgMHhhNzJlOTczYzAwMDAwMDAwLCAweGI4Mzk2N2JjMDAwMDAwMDAsCisgICAgMHhkODA2MDZlNjAwMDAwMDAwLCAweGM3MTFmNjY2MDAwMDAwMDAsIDB4NjZkNTYyOGUwMDAwMDAwMCwKKyAgICAweDc5YzI5MjBlMDAwMDAwMDAsIDB4MTlmZGYzNTQwMDAwMDAwMCwgMHgwNmVhMDNkNDAwMDAwMDAwLAorICAgIDB4ZDk4MzMxZTAwMDAwMDAwMCwgMHhjNjk0YzE2MDAwMDAwMDAwLCAweGE2YWJhMDNhMDAwMDAwMDAsCisgICAgMHhiOWJjNTBiYTAwMDAwMDAwfSwKKyAgIHsweDAwMDAwMDAwMDAwMDAwMDAsIDB4ZTJmZDg4OGQwMDAwMDAwMCwgMHg4NWZkNjBjMDAwMDAwMDAwLAorICAgIDB4NjcwMGU4NGQwMDAwMDAwMCwgMHg0YmZkYjA1YjAwMDAwMDAwLCAweGE5MDAzOGQ2MDAwMDAwMDAsCisgICAgMHhjZTAwZDA5YjAwMDAwMDAwLCAweDJjZmQ1ODE2MDAwMDAwMDAsIDB4OTZmYTYxYjcwMDAwMDAwMCwKKyAgICAweDc0MDdlOTNhMDAwMDAwMDAsIDB4MTMwNzAxNzcwMDAwMDAwMCwgMHhmMWZhODlmYTAwMDAwMDAwLAorICAgIDB4ZGQwN2QxZWMwMDAwMDAwMCwgMHgzZmZhNTk2MTAwMDAwMDAwLCAweDU4ZmFiMTJjMDAwMDAwMDAsCisgICAgMHhiYTA3MzlhMTAwMDAwMDAwLCAweDZkZjNiMmI1MDAwMDAwMDAsIDB4OGYwZTNhMzgwMDAwMDAwMCwKKyAgICAweGU4MGVkMjc1MDAwMDAwMDAsIDB4MGFmMzVhZjgwMDAwMDAwMCwgMHgyNjBlMDJlZTAwMDAwMDAwLAorICAgIDB4YzRmMzhhNjMwMDAwMDAwMCwgMHhhM2YzNjIyZTAwMDAwMDAwLCAweDQxMGVlYWEzMDAwMDAwMDAsCisgICAgMHhmYjA5ZDMwMjAwMDAwMDAwLCAweDE5ZjQ1YjhmMDAwMDAwMDAsIDB4N2VmNGIzYzIwMDAwMDAwMCwKKyAgICAweDljMDkzYjRmMDAwMDAwMDAsIDB4YjBmNDYzNTkwMDAwMDAwMCwgMHg1MjA5ZWJkNDAwMDAwMDAwLAorICAgIDB4MzUwOTAzOTkwMDAwMDAwMCwgMHhkN2Y0OGIxNDAwMDAwMDAwLCAweDliZTAxNGIwMDAwMDAwMDAsCisgICAgMHg3OTFkOWMzZDAwMDAwMDAwLCAweDFlMWQ3NDcwMDAwMDAwMDAsIDB4ZmNlMGZjZmQwMDAwMDAwMCwKKyAgICAweGQwMWRhNGViMDAwMDAwMDAsIDB4MzJlMDJjNjYwMDAwMDAwMCwgMHg1NWUwYzQyYjAwMDAwMDAwLAorICAgIDB4YjcxZDRjYTYwMDAwMDAwMCwgMHgwZDFhNzUwNzAwMDAwMDAwLCAweGVmZTdmZDhhMDAwMDAwMDAsCisgICAgMHg4OGU3MTVjNzAwMDAwMDAwLCAweDZhMWE5ZDRhMDAwMDAwMDAsIDB4NDZlN2M1NWMwMDAwMDAwMCwKKyAgICAweGE0MWE0ZGQxMDAwMDAwMDAsIDB4YzMxYWE1OWMwMDAwMDAwMCwgMHgyMWU3MmQxMTAwMDAwMDAwLAorICAgIDB4ZjYxM2E2MDUwMDAwMDAwMCwgMHgxNGVlMmU4ODAwMDAwMDAwLCAweDczZWVjNmM1MDAwMDAwMDAsCisgICAgMHg5MTEzNGU0ODAwMDAwMDAwLCAweGJkZWUxNjVlMDAwMDAwMDAsIDB4NWYxMzllZDMwMDAwMDAwMCwKKyAgICAweDM4MTM3NjllMDAwMDAwMDAsIDB4ZGFlZWZlMTMwMDAwMDAwMCwgMHg2MGU5YzdiMjAwMDAwMDAwLAorICAgIDB4ODIxNDRmM2YwMDAwMDAwMCwgMHhlNTE0YTc3MjAwMDAwMDAwLCAweDA3ZTkyZmZmMDAwMDAwMDAsCisgICAgMHgyYjE0NzdlOTAwMDAwMDAwLCAweGM5ZTlmZjY0MDAwMDAwMDAsIDB4YWVlOTE3MjkwMDAwMDAwMCwKKyAgICAweDRjMTQ5ZmE0MDAwMDAwMDAsIDB4NzdjNzU4YmIwMDAwMDAwMCwgMHg5NTNhZDAzNjAwMDAwMDAwLAorICAgIDB4ZjIzYTM4N2IwMDAwMDAwMCwgMHgxMGM3YjBmNjAwMDAwMDAwLCAweDNjM2FlOGUwMDAwMDAwMDAsCisgICAgMHhkZWM3NjA2ZDAwMDAwMDAwLCAweGI5Yzc4ODIwMDAwMDAwMDAsIDB4NWIzYTAwYWQwMDAwMDAwMCwKKyAgICAweGUxM2QzOTBjMDAwMDAwMDAsIDB4MDNjMGIxODEwMDAwMDAwMCwgMHg2NGMwNTljYzAwMDAwMDAwLAorICAgIDB4ODYzZGQxNDEwMDAwMDAwMCwgMHhhYWMwODk1NzAwMDAwMDAwLCAweDQ4M2QwMWRhMDAwMDAwMDAsCisgICAgMHgyZjNkZTk5NzAwMDAwMDAwLCAweGNkYzA2MTFhMDAwMDAwMDAsIDB4MWEzNGVhMGUwMDAwMDAwMCwKKyAgICAweGY4Yzk2MjgzMDAwMDAwMDAsIDB4OWZjOThhY2UwMDAwMDAwMCwgMHg3ZDM0MDI0MzAwMDAwMDAwLAorICAgIDB4NTFjOTVhNTUwMDAwMDAwMCwgMHhiMzM0ZDJkODAwMDAwMDAwLCAweGQ0MzQzYTk1MDAwMDAwMDAsCisgICAgMHgzNmM5YjIxODAwMDAwMDAwLCAweDhjY2U4YmI5MDAwMDAwMDAsIDB4NmUzMzAzMzQwMDAwMDAwMCwKKyAgICAweDA5MzNlYjc5MDAwMDAwMDAsIDB4ZWJjZTYzZjQwMDAwMDAwMCwgMHhjNzMzM2JlMjAwMDAwMDAwLAorICAgIDB4MjVjZWIzNmYwMDAwMDAwMCwgMHg0MmNlNWIyMjAwMDAwMDAwLCAweGEwMzNkM2FmMDAwMDAwMDAsCisgICAgMHhlYzI3NGMwYjAwMDAwMDAwLCAweDBlZGFjNDg2MDAwMDAwMDAsIDB4NjlkYTJjY2IwMDAwMDAwMCwKKyAgICAweDhiMjdhNDQ2MDAwMDAwMDAsIDB4YTdkYWZjNTAwMDAwMDAwMCwgMHg0NTI3NzRkZDAwMDAwMDAwLAorICAgIDB4MjIyNzljOTAwMDAwMDAwMCwgMHhjMGRhMTQxZDAwMDAwMDAwLCAweDdhZGQyZGJjMDAwMDAwMDAsCisgICAgMHg5ODIwYTUzMTAwMDAwMDAwLCAweGZmMjA0ZDdjMDAwMDAwMDAsIDB4MWRkZGM1ZjEwMDAwMDAwMCwKKyAgICAweDMxMjA5ZGU3MDAwMDAwMDAsIDB4ZDNkZDE1NmEwMDAwMDAwMCwgMHhiNGRkZmQyNzAwMDAwMDAwLAorICAgIDB4NTYyMDc1YWEwMDAwMDAwMCwgMHg4MWQ0ZmViZTAwMDAwMDAwLCAweDYzMjk3NjMzMDAwMDAwMDAsCisgICAgMHgwNDI5OWU3ZTAwMDAwMDAwLCAweGU2ZDQxNmYzMDAwMDAwMDAsIDB4Y2EyOTRlZTUwMDAwMDAwMCwKKyAgICAweDI4ZDRjNjY4MDAwMDAwMDAsIDB4NGZkNDJlMjUwMDAwMDAwMCwgMHhhZDI5YTZhODAwMDAwMDAwLAorICAgIDB4MTcyZTlmMDkwMDAwMDAwMCwgMHhmNWQzMTc4NDAwMDAwMDAwLCAweDkyZDNmZmM5MDAwMDAwMDAsCisgICAgMHg3MDJlNzc0NDAwMDAwMDAwLCAweDVjZDMyZjUyMDAwMDAwMDAsIDB4YmUyZWE3ZGYwMDAwMDAwMCwKKyAgICAweGQ5MmU0ZjkyMDAwMDAwMDAsIDB4M2JkM2M3MWYwMDAwMDAwMCwgMHhhZjg4YzBhZDAwMDAwMDAwLAorICAgIDB4NGQ3NTQ4MjAwMDAwMDAwMCwgMHgyYTc1YTA2ZDAwMDAwMDAwLCAweGM4ODgyOGUwMDAwMDAwMDAsCisgICAgMHhlNDc1NzBmNjAwMDAwMDAwLCAweDA2ODhmODdiMDAwMDAwMDAsIDB4NjE4ODEwMzYwMDAwMDAwMCwKKyAgICAweDgzNzU5OGJiMDAwMDAwMDAsIDB4Mzk3MmExMWEwMDAwMDAwMCwgMHhkYjhmMjk5NzAwMDAwMDAwLAorICAgIDB4YmM4ZmMxZGEwMDAwMDAwMCwgMHg1ZTcyNDk1NzAwMDAwMDAwLCAweDcyOGYxMTQxMDAwMDAwMDAsCisgICAgMHg5MDcyOTljYzAwMDAwMDAwLCAweGY3NzI3MTgxMDAwMDAwMDAsIDB4MTU4ZmY5MGMwMDAwMDAwMCwKKyAgICAweGMyN2I3MjE4MDAwMDAwMDAsIDB4MjA4NmZhOTUwMDAwMDAwMCwgMHg0Nzg2MTJkODAwMDAwMDAwLAorICAgIDB4YTU3YjlhNTUwMDAwMDAwMCwgMHg4OTg2YzI0MzAwMDAwMDAwLCAweDZiN2I0YWNlMDAwMDAwMDAsCisgICAgMHgwYzdiYTI4MzAwMDAwMDAwLCAweGVlODYyYTBlMDAwMDAwMDAsIDB4NTQ4MTEzYWYwMDAwMDAwMCwKKyAgICAweGI2N2M5YjIyMDAwMDAwMDAsIDB4ZDE3YzczNmYwMDAwMDAwMCwgMHgzMzgxZmJlMjAwMDAwMDAwLAorICAgIDB4MWY3Y2EzZjQwMDAwMDAwMCwgMHhmZDgxMmI3OTAwMDAwMDAwLCAweDlhODFjMzM0MDAwMDAwMDAsCisgICAgMHg3ODdjNGJiOTAwMDAwMDAwLCAweDM0NjhkNDFkMDAwMDAwMDAsIDB4ZDY5NTVjOTAwMDAwMDAwMCwKKyAgICAweGIxOTViNGRkMDAwMDAwMDAsIDB4NTM2ODNjNTAwMDAwMDAwMCwgMHg3Zjk1NjQ0NjAwMDAwMDAwLAorICAgIDB4OWQ2OGVjY2IwMDAwMDAwMCwgMHhmYTY4MDQ4NjAwMDAwMDAwLCAweDE4OTU4YzBiMDAwMDAwMDAsCisgICAgMHhhMjkyYjVhYTAwMDAwMDAwLCAweDQwNmYzZDI3MDAwMDAwMDAsIDB4Mjc2ZmQ1NmEwMDAwMDAwMCwKKyAgICAweGM1OTI1ZGU3MDAwMDAwMDAsIDB4ZTk2ZjA1ZjEwMDAwMDAwMCwgMHgwYjkyOGQ3YzAwMDAwMDAwLAorICAgIDB4NmM5MjY1MzEwMDAwMDAwMCwgMHg4ZTZmZWRiYzAwMDAwMDAwLCAweDU5OWI2NmE4MDAwMDAwMDAsCisgICAgMHhiYjY2ZWUyNTAwMDAwMDAwLCAweGRjNjYwNjY4MDAwMDAwMDAsIDB4M2U5YjhlZTUwMDAwMDAwMCwKKyAgICAweDEyNjZkNmYzMDAwMDAwMDAsIDB4ZjA5YjVlN2UwMDAwMDAwMCwgMHg5NzliYjYzMzAwMDAwMDAwLAorICAgIDB4NzU2NjNlYmUwMDAwMDAwMCwgMHhjZjYxMDcxZjAwMDAwMDAwLCAweDJkOWM4ZjkyMDAwMDAwMDAsCisgICAgMHg0YTljNjdkZjAwMDAwMDAwLCAweGE4NjFlZjUyMDAwMDAwMDAsIDB4ODQ5Y2I3NDQwMDAwMDAwMCwKKyAgICAweDY2NjEzZmM5MDAwMDAwMDAsIDB4MDE2MWQ3ODQwMDAwMDAwMCwgMHhlMzljNWYwOTAwMDAwMDAwLAorICAgIDB4ZDg0Zjk4MTYwMDAwMDAwMCwgMHgzYWIyMTA5YjAwMDAwMDAwLCAweDVkYjJmOGQ2MDAwMDAwMDAsCisgICAgMHhiZjRmNzA1YjAwMDAwMDAwLCAweDkzYjIyODRkMDAwMDAwMDAsIDB4NzE0ZmEwYzAwMDAwMDAwMCwKKyAgICAweDE2NGY0ODhkMDAwMDAwMDAsIDB4ZjRiMmMwMDAwMDAwMDAwMCwgMHg0ZWI1ZjlhMTAwMDAwMDAwLAorICAgIDB4YWM0ODcxMmMwMDAwMDAwMCwgMHhjYjQ4OTk2MTAwMDAwMDAwLCAweDI5YjUxMWVjMDAwMDAwMDAsCisgICAgMHgwNTQ4NDlmYTAwMDAwMDAwLCAweGU3YjVjMTc3MDAwMDAwMDAsIDB4ODBiNTI5M2EwMDAwMDAwMCwKKyAgICAweDYyNDhhMWI3MDAwMDAwMDAsIDB4YjViYzJhYTMwMDAwMDAwMCwgMHg1NzQxYTIyZTAwMDAwMDAwLAorICAgIDB4MzA0MTRhNjMwMDAwMDAwMCwgMHhkMmJjYzJlZTAwMDAwMDAwLCAweGZlNDE5YWY4MDAwMDAwMDAsCisgICAgMHgxY2JjMTI3NTAwMDAwMDAwLCAweDdiYmNmYTM4MDAwMDAwMDAsIDB4OTk0MTcyYjUwMDAwMDAwMCwKKyAgICAweDIzNDY0YjE0MDAwMDAwMDAsIDB4YzFiYmMzOTkwMDAwMDAwMCwgMHhhNmJiMmJkNDAwMDAwMDAwLAorICAgIDB4NDQ0NmEzNTkwMDAwMDAwMCwgMHg2OGJiZmI0ZjAwMDAwMDAwLCAweDhhNDY3M2MyMDAwMDAwMDAsCisgICAgMHhlZDQ2OWI4ZjAwMDAwMDAwLCAweDBmYmIxMzAyMDAwMDAwMDAsIDB4NDNhZjhjYTYwMDAwMDAwMCwKKyAgICAweGExNTIwNDJiMDAwMDAwMDAsIDB4YzY1MmVjNjYwMDAwMDAwMCwgMHgyNGFmNjRlYjAwMDAwMDAwLAorICAgIDB4MDg1MjNjZmQwMDAwMDAwMCwgMHhlYWFmYjQ3MDAwMDAwMDAwLCAweDhkYWY1YzNkMDAwMDAwMDAsCisgICAgMHg2ZjUyZDRiMDAwMDAwMDAwLCAweGQ1NTVlZDExMDAwMDAwMDAsIDB4MzdhODY1OWMwMDAwMDAwMCwKKyAgICAweDUwYTg4ZGQxMDAwMDAwMDAsIDB4YjI1NTA1NWMwMDAwMDAwMCwgMHg5ZWE4NWQ0YTAwMDAwMDAwLAorICAgIDB4N2M1NWQ1YzcwMDAwMDAwMCwgMHgxYjU1M2Q4YTAwMDAwMDAwLCAweGY5YThiNTA3MDAwMDAwMDAsCisgICAgMHgyZTVjM2UxMzAwMDAwMDAwLCAweGNjYTFiNjllMDAwMDAwMDAsIDB4YWJhMTVlZDMwMDAwMDAwMCwKKyAgICAweDQ5NWNkNjVlMDAwMDAwMDAsIDB4NjVhMThlNDgwMDAwMDAwMCwgMHg4NzVjMDZjNTAwMDAwMDAwLAorICAgIDB4ZTA1Y2VlODgwMDAwMDAwMCwgMHgwMmExNjYwNTAwMDAwMDAwLCAweGI4YTY1ZmE0MDAwMDAwMDAsCisgICAgMHg1YTViZDcyOTAwMDAwMDAwLCAweDNkNWIzZjY0MDAwMDAwMDAsIDB4ZGZhNmI3ZTkwMDAwMDAwMCwKKyAgICAweGYzNWJlZmZmMDAwMDAwMDAsIDB4MTFhNjY3NzIwMDAwMDAwMCwgMHg3NmE2OGYzZjAwMDAwMDAwLAorICAgIDB4OTQ1YjA3YjIwMDAwMDAwMH0sCisgICB7MHgwMDAwMDAwMDAwMDAwMDAwLCAweGE5MGI4OTRlMDAwMDAwMDAsIDB4NTIxNzEyOWQwMDAwMDAwMCwKKyAgICAweGZiMWM5YmQzMDAwMDAwMDAsIDB4ZTUyODU1ZTEwMDAwMDAwMCwgMHg0YzIzZGNhZjAwMDAwMDAwLAorICAgIDB4YjczZjQ3N2MwMDAwMDAwMCwgMHgxZTM0Y2UzMjAwMDAwMDAwLCAweDhiNTdkYjE5MDAwMDAwMDAsCisgICAgMHgyMjVjNTI1NzAwMDAwMDAwLCAweGQ5NDBjOTg0MDAwMDAwMDAsIDB4NzA0YjQwY2EwMDAwMDAwMCwKKyAgICAweDZlN2Y4ZWY4MDAwMDAwMDAsIDB4Yzc3NDA3YjYwMDAwMDAwMCwgMHgzYzY4OWM2NTAwMDAwMDAwLAorICAgIDB4OTU2MzE1MmIwMDAwMDAwMCwgMHgxNmFmYjYzMzAwMDAwMDAwLCAweGJmYTQzZjdkMDAwMDAwMDAsCisgICAgMHg0NGI4YTRhZTAwMDAwMDAwLCAweGVkYjMyZGUwMDAwMDAwMDAsIDB4ZjM4N2UzZDIwMDAwMDAwMCwKKyAgICAweDVhOGM2YTljMDAwMDAwMDAsIDB4YTE5MGYxNGYwMDAwMDAwMCwgMHgwODliNzgwMTAwMDAwMDAwLAorICAgIDB4OWRmODZkMmEwMDAwMDAwMCwgMHgzNGYzZTQ2NDAwMDAwMDAwLCAweGNmZWY3ZmI3MDAwMDAwMDAsCisgICAgMHg2NmU0ZjZmOTAwMDAwMDAwLCAweDc4ZDAzOGNiMDAwMDAwMDAsIDB4ZDFkYmIxODUwMDAwMDAwMCwKKyAgICAweDJhYzcyYTU2MDAwMDAwMDAsIDB4ODNjY2EzMTgwMDAwMDAwMCwgMHgyYzVlNmQ2NzAwMDAwMDAwLAorICAgIDB4ODU1NWU0MjkwMDAwMDAwMCwgMHg3ZTQ5N2ZmYTAwMDAwMDAwLCAweGQ3NDJmNmI0MDAwMDAwMDAsCisgICAgMHhjOTc2Mzg4NjAwMDAwMDAwLCAweDYwN2RiMWM4MDAwMDAwMDAsIDB4OWI2MTJhMWIwMDAwMDAwMCwKKyAgICAweDMyNmFhMzU1MDAwMDAwMDAsIDB4YTcwOWI2N2UwMDAwMDAwMCwgMHgwZTAyM2YzMDAwMDAwMDAwLAorICAgIDB4ZjUxZWE0ZTMwMDAwMDAwMCwgMHg1YzE1MmRhZDAwMDAwMDAwLCAweDQyMjFlMzlmMDAwMDAwMDAsCisgICAgMHhlYjJhNmFkMTAwMDAwMDAwLCAweDEwMzZmMTAyMDAwMDAwMDAsIDB4YjkzZDc4NGMwMDAwMDAwMCwKKyAgICAweDNhZjFkYjU0MDAwMDAwMDAsIDB4OTNmYTUyMWEwMDAwMDAwMCwgMHg2OGU2YzljOTAwMDAwMDAwLAorICAgIDB4YzFlZDQwODcwMDAwMDAwMCwgMHhkZmQ5OGViNTAwMDAwMDAwLCAweDc2ZDIwN2ZiMDAwMDAwMDAsCisgICAgMHg4ZGNlOWMyODAwMDAwMDAwLCAweDI0YzUxNTY2MDAwMDAwMDAsIDB4YjFhNjAwNGQwMDAwMDAwMCwKKyAgICAweDE4YWQ4OTAzMDAwMDAwMDAsIDB4ZTNiMTEyZDAwMDAwMDAwMCwgMHg0YWJhOWI5ZTAwMDAwMDAwLAorICAgIDB4NTQ4ZTU1YWMwMDAwMDAwMCwgMHhmZDg1ZGNlMjAwMDAwMDAwLCAweDA2OTk0NzMxMDAwMDAwMDAsCisgICAgMHhhZjkyY2U3ZjAwMDAwMDAwLCAweDU4YmNkYWNlMDAwMDAwMDAsIDB4ZjFiNzUzODAwMDAwMDAwMCwKKyAgICAweDBhYWJjODUzMDAwMDAwMDAsIDB4YTNhMDQxMWQwMDAwMDAwMCwgMHhiZDk0OGYyZjAwMDAwMDAwLAorICAgIDB4MTQ5ZjA2NjEwMDAwMDAwMCwgMHhlZjgzOWRiMjAwMDAwMDAwLCAweDQ2ODgxNGZjMDAwMDAwMDAsCisgICAgMHhkM2ViMDFkNzAwMDAwMDAwLCAweDdhZTA4ODk5MDAwMDAwMDAsIDB4ODFmYzEzNGEwMDAwMDAwMCwKKyAgICAweDI4Zjc5YTA0MDAwMDAwMDAsIDB4MzZjMzU0MzYwMDAwMDAwMCwgMHg5ZmM4ZGQ3ODAwMDAwMDAwLAorICAgIDB4NjRkNDQ2YWIwMDAwMDAwMCwgMHhjZGRmY2ZlNTAwMDAwMDAwLCAweDRlMTM2Y2ZkMDAwMDAwMDAsCisgICAgMHhlNzE4ZTViMzAwMDAwMDAwLCAweDFjMDQ3ZTYwMDAwMDAwMDAsIDB4YjUwZmY3MmUwMDAwMDAwMCwKKyAgICAweGFiM2IzOTFjMDAwMDAwMDAsIDB4MDIzMGIwNTIwMDAwMDAwMCwgMHhmOTJjMmI4MTAwMDAwMDAwLAorICAgIDB4NTAyN2EyY2YwMDAwMDAwMCwgMHhjNTQ0YjdlNDAwMDAwMDAwLCAweDZjNGYzZWFhMDAwMDAwMDAsCisgICAgMHg5NzUzYTU3OTAwMDAwMDAwLCAweDNlNTgyYzM3MDAwMDAwMDAsIDB4MjA2Y2UyMDUwMDAwMDAwMCwKKyAgICAweDg5Njc2YjRiMDAwMDAwMDAsIDB4NzI3YmYwOTgwMDAwMDAwMCwgMHhkYjcwNzlkNjAwMDAwMDAwLAorICAgIDB4NzRlMmI3YTkwMDAwMDAwMCwgMHhkZGU5M2VlNzAwMDAwMDAwLCAweDI2ZjVhNTM0MDAwMDAwMDAsCisgICAgMHg4ZmZlMmM3YTAwMDAwMDAwLCAweDkxY2FlMjQ4MDAwMDAwMDAsIDB4MzhjMTZiMDYwMDAwMDAwMCwKKyAgICAweGMzZGRmMGQ1MDAwMDAwMDAsIDB4NmFkNjc5OWIwMDAwMDAwMCwgMHhmZmI1NmNiMDAwMDAwMDAwLAorICAgIDB4NTZiZWU1ZmUwMDAwMDAwMCwgMHhhZGEyN2UyZDAwMDAwMDAwLCAweDA0YTlmNzYzMDAwMDAwMDAsCisgICAgMHgxYTlkMzk1MTAwMDAwMDAwLCAweGIzOTZiMDFmMDAwMDAwMDAsIDB4NDg4YTJiY2MwMDAwMDAwMCwKKyAgICAweGUxODFhMjgyMDAwMDAwMDAsIDB4NjI0ZDAxOWEwMDAwMDAwMCwgMHhjYjQ2ODhkNDAwMDAwMDAwLAorICAgIDB4MzA1YTEzMDcwMDAwMDAwMCwgMHg5OTUxOWE0OTAwMDAwMDAwLCAweDg3NjU1NDdiMDAwMDAwMDAsCisgICAgMHgyZTZlZGQzNTAwMDAwMDAwLCAweGQ1NzI0NmU2MDAwMDAwMDAsIDB4N2M3OWNmYTgwMDAwMDAwMCwKKyAgICAweGU5MWFkYTgzMDAwMDAwMDAsIDB4NDAxMTUzY2QwMDAwMDAwMCwgMHhiYjBkYzgxZTAwMDAwMDAwLAorICAgIDB4MTIwNjQxNTAwMDAwMDAwMCwgMHgwYzMyOGY2MjAwMDAwMDAwLCAweGE1MzkwNjJjMDAwMDAwMDAsCisgICAgMHg1ZTI1OWRmZjAwMDAwMDAwLCAweGY3MmUxNGIxMDAwMDAwMDAsIDB4ZjE3ZWM0NDYwMDAwMDAwMCwKKyAgICAweDU4NzU0ZDA4MDAwMDAwMDAsIDB4YTM2OWQ2ZGIwMDAwMDAwMCwgMHgwYTYyNWY5NTAwMDAwMDAwLAorICAgIDB4MTQ1NjkxYTcwMDAwMDAwMCwgMHhiZDVkMThlOTAwMDAwMDAwLCAweDQ2NDE4MzNhMDAwMDAwMDAsCisgICAgMHhlZjRhMGE3NDAwMDAwMDAwLCAweDdhMjkxZjVmMDAwMDAwMDAsIDB4ZDMyMjk2MTEwMDAwMDAwMCwKKyAgICAweDI4M2UwZGMyMDAwMDAwMDAsIDB4ODEzNTg0OGMwMDAwMDAwMCwgMHg5ZjAxNGFiZTAwMDAwMDAwLAorICAgIDB4MzYwYWMzZjAwMDAwMDAwMCwgMHhjZDE2NTgyMzAwMDAwMDAwLCAweDY0MWRkMTZkMDAwMDAwMDAsCisgICAgMHhlN2QxNzI3NTAwMDAwMDAwLCAweDRlZGFmYjNiMDAwMDAwMDAsIDB4YjVjNjYwZTgwMDAwMDAwMCwKKyAgICAweDFjY2RlOWE2MDAwMDAwMDAsIDB4MDJmOTI3OTQwMDAwMDAwMCwgMHhhYmYyYWVkYTAwMDAwMDAwLAorICAgIDB4NTBlZTM1MDkwMDAwMDAwMCwgMHhmOWU1YmM0NzAwMDAwMDAwLCAweDZjODZhOTZjMDAwMDAwMDAsCisgICAgMHhjNThkMjAyMjAwMDAwMDAwLCAweDNlOTFiYmYxMDAwMDAwMDAsIDB4OTc5YTMyYmYwMDAwMDAwMCwKKyAgICAweDg5YWVmYzhkMDAwMDAwMDAsIDB4MjBhNTc1YzMwMDAwMDAwMCwgMHhkYmI5ZWUxMDAwMDAwMDAwLAorICAgIDB4NzJiMjY3NWUwMDAwMDAwMCwgMHhkZDIwYTkyMTAwMDAwMDAwLCAweDc0MmIyMDZmMDAwMDAwMDAsCisgICAgMHg4ZjM3YmJiYzAwMDAwMDAwLCAweDI2M2MzMmYyMDAwMDAwMDAsIDB4MzgwOGZjYzAwMDAwMDAwMCwKKyAgICAweDkxMDM3NThlMDAwMDAwMDAsIDB4NmExZmVlNWQwMDAwMDAwMCwgMHhjMzE0NjcxMzAwMDAwMDAwLAorICAgIDB4NTY3NzcyMzgwMDAwMDAwMCwgMHhmZjdjZmI3NjAwMDAwMDAwLCAweDA0NjA2MGE1MDAwMDAwMDAsCisgICAgMHhhZDZiZTllYjAwMDAwMDAwLCAweGIzNWYyN2Q5MDAwMDAwMDAsIDB4MWE1NGFlOTcwMDAwMDAwMCwKKyAgICAweGUxNDgzNTQ0MDAwMDAwMDAsIDB4NDg0M2JjMGEwMDAwMDAwMCwgMHhjYjhmMWYxMjAwMDAwMDAwLAorICAgIDB4NjI4NDk2NWMwMDAwMDAwMCwgMHg5OTk4MGQ4ZjAwMDAwMDAwLCAweDMwOTM4NGMxMDAwMDAwMDAsCisgICAgMHgyZWE3NGFmMzAwMDAwMDAwLCAweDg3YWNjM2JkMDAwMDAwMDAsIDB4N2NiMDU4NmUwMDAwMDAwMCwKKyAgICAweGQ1YmJkMTIwMDAwMDAwMDAsIDB4NDBkOGM0MGIwMDAwMDAwMCwgMHhlOWQzNGQ0NTAwMDAwMDAwLAorICAgIDB4MTJjZmQ2OTYwMDAwMDAwMCwgMHhiYmM0NWZkODAwMDAwMDAwLCAweGE1ZjA5MWVhMDAwMDAwMDAsCisgICAgMHgwY2ZiMThhNDAwMDAwMDAwLCAweGY3ZTc4Mzc3MDAwMDAwMDAsIDB4NWVlYzBhMzkwMDAwMDAwMCwKKyAgICAweGE5YzIxZTg4MDAwMDAwMDAsIDB4MDBjOTk3YzYwMDAwMDAwMCwgMHhmYmQ1MGMxNTAwMDAwMDAwLAorICAgIDB4NTJkZTg1NWIwMDAwMDAwMCwgMHg0Y2VhNGI2OTAwMDAwMDAwLCAweGU1ZTFjMjI3MDAwMDAwMDAsCisgICAgMHgxZWZkNTlmNDAwMDAwMDAwLCAweGI3ZjZkMGJhMDAwMDAwMDAsIDB4MjI5NWM1OTEwMDAwMDAwMCwKKyAgICAweDhiOWU0Y2RmMDAwMDAwMDAsIDB4NzA4MmQ3MGMwMDAwMDAwMCwgMHhkOTg5NWU0MjAwMDAwMDAwLAorICAgIDB4YzdiZDkwNzAwMDAwMDAwMCwgMHg2ZWI2MTkzZTAwMDAwMDAwLCAweDk1YWE4MmVkMDAwMDAwMDAsCisgICAgMHgzY2ExMGJhMzAwMDAwMDAwLCAweGJmNmRhOGJiMDAwMDAwMDAsIDB4MTY2NjIxZjUwMDAwMDAwMCwKKyAgICAweGVkN2FiYTI2MDAwMDAwMDAsIDB4NDQ3MTMzNjgwMDAwMDAwMCwgMHg1YTQ1ZmQ1YTAwMDAwMDAwLAorICAgIDB4ZjM0ZTc0MTQwMDAwMDAwMCwgMHgwODUyZWZjNzAwMDAwMDAwLCAweGExNTk2Njg5MDAwMDAwMDAsCisgICAgMHgzNDNhNzNhMjAwMDAwMDAwLCAweDlkMzFmYWVjMDAwMDAwMDAsIDB4NjYyZDYxM2YwMDAwMDAwMCwKKyAgICAweGNmMjZlODcxMDAwMDAwMDAsIDB4ZDExMjI2NDMwMDAwMDAwMCwgMHg3ODE5YWYwZDAwMDAwMDAwLAorICAgIDB4ODMwNTM0ZGUwMDAwMDAwMCwgMHgyYTBlYmQ5MDAwMDAwMDAwLCAweDg1OWM3M2VmMDAwMDAwMDAsCisgICAgMHgyYzk3ZmFhMTAwMDAwMDAwLCAweGQ3OGI2MTcyMDAwMDAwMDAsIDB4N2U4MGU4M2MwMDAwMDAwMCwKKyAgICAweDYwYjQyNjBlMDAwMDAwMDAsIDB4YzliZmFmNDAwMDAwMDAwMCwgMHgzMmEzMzQ5MzAwMDAwMDAwLAorICAgIDB4OWJhOGJkZGQwMDAwMDAwMCwgMHgwZWNiYThmNjAwMDAwMDAwLCAweGE3YzAyMWI4MDAwMDAwMDAsCisgICAgMHg1Y2RjYmE2YjAwMDAwMDAwLCAweGY1ZDczMzI1MDAwMDAwMDAsIDB4ZWJlM2ZkMTcwMDAwMDAwMCwKKyAgICAweDQyZTg3NDU5MDAwMDAwMDAsIDB4YjlmNGVmOGEwMDAwMDAwMCwgMHgxMGZmNjZjNDAwMDAwMDAwLAorICAgIDB4OTMzM2M1ZGMwMDAwMDAwMCwgMHgzYTM4NGM5MjAwMDAwMDAwLCAweGMxMjRkNzQxMDAwMDAwMDAsCisgICAgMHg2ODJmNWUwZjAwMDAwMDAwLCAweDc2MWI5MDNkMDAwMDAwMDAsIDB4ZGYxMDE5NzMwMDAwMDAwMCwKKyAgICAweDI0MGM4MmEwMDAwMDAwMDAsIDB4OGQwNzBiZWUwMDAwMDAwMCwgMHgxODY0MWVjNTAwMDAwMDAwLAorICAgIDB4YjE2Zjk3OGIwMDAwMDAwMCwgMHg0YTczMGM1ODAwMDAwMDAwLCAweGUzNzg4NTE2MDAwMDAwMDAsCisgICAgMHhmZDRjNGIyNDAwMDAwMDAwLCAweDU0NDdjMjZhMDAwMDAwMDAsIDB4YWY1YjU5YjkwMDAwMDAwMCwKKyAgICAweDA2NTBkMGY3MDAwMDAwMDB9LAorICAgezB4MDAwMDAwMDAwMDAwMDAwMCwgMHg0NzkyNDRhZjAwMDAwMDAwLCAweGNmMjJmODg1MDAwMDAwMDAsCisgICAgMHg4OGIwYmMyYTAwMDAwMDAwLCAweGRmNDM4MWQwMDAwMDAwMDAsIDB4OThkMWM1N2YwMDAwMDAwMCwKKyAgICAweDEwNjE3OTU1MDAwMDAwMDAsIDB4NTdmMzNkZmEwMDAwMDAwMCwgMHhmZjgxNzM3YTAwMDAwMDAwLAorICAgIDB4YjgxMzM3ZDUwMDAwMDAwMCwgMHgzMGEzOGJmZjAwMDAwMDAwLCAweDc3MzFjZjUwMDAwMDAwMDAsCisgICAgMHgyMGMyZjJhYTAwMDAwMDAwLCAweDY3NTBiNjA1MDAwMDAwMDAsIDB4ZWZlMDBhMmYwMDAwMDAwMCwKKyAgICAweGE4NzI0ZTgwMDAwMDAwMDAsIDB4ZmUwM2U3ZjQwMDAwMDAwMCwgMHhiOTkxYTM1YjAwMDAwMDAwLAorICAgIDB4MzEyMTFmNzEwMDAwMDAwMCwgMHg3NmIzNWJkZTAwMDAwMDAwLCAweDIxNDA2NjI0MDAwMDAwMDAsCisgICAgMHg2NmQyMjI4YjAwMDAwMDAwLCAweGVlNjI5ZWExMDAwMDAwMDAsIDB4YTlmMGRhMGUwMDAwMDAwMCwKKyAgICAweDAxODI5NDhlMDAwMDAwMDAsIDB4NDYxMGQwMjEwMDAwMDAwMCwgMHhjZWEwNmMwYjAwMDAwMDAwLAorICAgIDB4ODkzMjI4YTQwMDAwMDAwMCwgMHhkZWMxMTU1ZTAwMDAwMDAwLCAweDk5NTM1MWYxMDAwMDAwMDAsCisgICAgMHgxMWUzZWRkYjAwMDAwMDAwLCAweDU2NzFhOTc0MDAwMDAwMDAsIDB4YmQwMWJmMzIwMDAwMDAwMCwKKyAgICAweGZhOTNmYjlkMDAwMDAwMDAsIDB4NzIyMzQ3YjcwMDAwMDAwMCwgMHgzNWIxMDMxODAwMDAwMDAwLAorICAgIDB4NjI0MjNlZTIwMDAwMDAwMCwgMHgyNWQwN2E0ZDAwMDAwMDAwLCAweGFkNjBjNjY3MDAwMDAwMDAsCisgICAgMHhlYWYyODJjODAwMDAwMDAwLCAweDQyODBjYzQ4MDAwMDAwMDAsIDB4MDUxMjg4ZTcwMDAwMDAwMCwKKyAgICAweDhkYTIzNGNkMDAwMDAwMDAsIDB4Y2EzMDcwNjIwMDAwMDAwMCwgMHg5ZGMzNGQ5ODAwMDAwMDAwLAorICAgIDB4ZGE1MTA5MzcwMDAwMDAwMCwgMHg1MmUxYjUxZDAwMDAwMDAwLCAweDE1NzNmMWIyMDAwMDAwMDAsCisgICAgMHg0MzAyNThjNjAwMDAwMDAwLCAweDA0OTAxYzY5MDAwMDAwMDAsIDB4OGMyMGEwNDMwMDAwMDAwMCwKKyAgICAweGNiYjJlNGVjMDAwMDAwMDAsIDB4OWM0MWQ5MTYwMDAwMDAwMCwgMHhkYmQzOWRiOTAwMDAwMDAwLAorICAgIDB4NTM2MzIxOTMwMDAwMDAwMCwgMHgxNGYxNjUzYzAwMDAwMDAwLCAweGJjODMyYmJjMDAwMDAwMDAsCisgICAgMHhmYjExNmYxMzAwMDAwMDAwLCAweDczYTFkMzM5MDAwMDAwMDAsIDB4MzQzMzk3OTYwMDAwMDAwMCwKKyAgICAweDYzYzBhYTZjMDAwMDAwMDAsIDB4MjQ1MmVlYzMwMDAwMDAwMCwgMHhhY2UyNTJlOTAwMDAwMDAwLAorICAgIDB4ZWI3MDE2NDYwMDAwMDAwMCwgMHg3YTAzN2U2NTAwMDAwMDAwLCAweDNkOTEzYWNhMDAwMDAwMDAsCisgICAgMHhiNTIxODZlMDAwMDAwMDAwLCAweGYyYjNjMjRmMDAwMDAwMDAsIDB4YTU0MGZmYjUwMDAwMDAwMCwKKyAgICAweGUyZDJiYjFhMDAwMDAwMDAsIDB4NmE2MjA3MzAwMDAwMDAwMCwgMHgyZGYwNDM5ZjAwMDAwMDAwLAorICAgIDB4ODU4MjBkMWYwMDAwMDAwMCwgMHhjMjEwNDliMDAwMDAwMDAwLCAweDRhYTBmNTlhMDAwMDAwMDAsCisgICAgMHgwZDMyYjEzNTAwMDAwMDAwLCAweDVhYzE4Y2NmMDAwMDAwMDAsIDB4MWQ1M2M4NjAwMDAwMDAwMCwKKyAgICAweDk1ZTM3NDRhMDAwMDAwMDAsIDB4ZDI3MTMwZTUwMDAwMDAwMCwgMHg4NDAwOTk5MTAwMDAwMDAwLAorICAgIDB4YzM5MmRkM2UwMDAwMDAwMCwgMHg0YjIyNjExNDAwMDAwMDAwLCAweDBjYjAyNWJiMDAwMDAwMDAsCisgICAgMHg1YjQzMTg0MTAwMDAwMDAwLCAweDFjZDE1Y2VlMDAwMDAwMDAsIDB4OTQ2MWUwYzQwMDAwMDAwMCwKKyAgICAweGQzZjNhNDZiMDAwMDAwMDAsIDB4N2I4MWVhZWIwMDAwMDAwMCwgMHgzYzEzYWU0NDAwMDAwMDAwLAorICAgIDB4YjRhMzEyNmUwMDAwMDAwMCwgMHhmMzMxNTZjMTAwMDAwMDAwLCAweGE0YzI2YjNiMDAwMDAwMDAsCisgICAgMHhlMzUwMmY5NDAwMDAwMDAwLCAweDZiZTA5M2JlMDAwMDAwMDAsIDB4MmM3MmQ3MTEwMDAwMDAwMCwKKyAgICAweGM3MDJjMTU3MDAwMDAwMDAsIDB4ODA5MDg1ZjgwMDAwMDAwMCwgMHgwODIwMzlkMjAwMDAwMDAwLAorICAgIDB4NGZiMjdkN2QwMDAwMDAwMCwgMHgxODQxNDA4NzAwMDAwMDAwLCAweDVmZDMwNDI4MDAwMDAwMDAsCisgICAgMHhkNzYzYjgwMjAwMDAwMDAwLCAweDkwZjFmY2FkMDAwMDAwMDAsIDB4Mzg4M2IyMmQwMDAwMDAwMCwKKyAgICAweDdmMTFmNjgyMDAwMDAwMDAsIDB4ZjdhMTRhYTgwMDAwMDAwMCwgMHhiMDMzMGUwNzAwMDAwMDAwLAorICAgIDB4ZTdjMDMzZmQwMDAwMDAwMCwgMHhhMDUyNzc1MjAwMDAwMDAwLCAweDI4ZTJjYjc4MDAwMDAwMDAsCisgICAgMHg2ZjcwOGZkNzAwMDAwMDAwLCAweDM5MDEyNmEzMDAwMDAwMDAsIDB4N2U5MzYyMGMwMDAwMDAwMCwKKyAgICAweGY2MjNkZTI2MDAwMDAwMDAsIDB4YjFiMTlhODkwMDAwMDAwMCwgMHhlNjQyYTc3MzAwMDAwMDAwLAorICAgIDB4YTFkMGUzZGMwMDAwMDAwMCwgMHgyOTYwNWZmNjAwMDAwMDAwLCAweDZlZjIxYjU5MDAwMDAwMDAsCisgICAgMHhjNjgwNTVkOTAwMDAwMDAwLCAweDgxMTIxMTc2MDAwMDAwMDAsIDB4MDlhMmFkNWMwMDAwMDAwMCwKKyAgICAweDRlMzBlOWYzMDAwMDAwMDAsIDB4MTljM2Q0MDkwMDAwMDAwMCwgMHg1ZTUxOTBhNjAwMDAwMDAwLAorICAgIDB4ZDZlMTJjOGMwMDAwMDAwMCwgMHg5MTczNjgyMzAwMDAwMDAwLCAweGY0MDZmY2NhMDAwMDAwMDAsCisgICAgMHhiMzk0Yjg2NTAwMDAwMDAwLCAweDNiMjQwNDRmMDAwMDAwMDAsIDB4N2NiNjQwZTAwMDAwMDAwMCwKKyAgICAweDJiNDU3ZDFhMDAwMDAwMDAsIDB4NmNkNzM5YjUwMDAwMDAwMCwgMHhlNDY3ODU5ZjAwMDAwMDAwLAorICAgIDB4YTNmNWMxMzAwMDAwMDAwMCwgMHgwYjg3OGZiMDAwMDAwMDAwLCAweDRjMTVjYjFmMDAwMDAwMDAsCisgICAgMHhjNGE1NzczNTAwMDAwMDAwLCAweDgzMzczMzlhMDAwMDAwMDAsIDB4ZDRjNDBlNjAwMDAwMDAwMCwKKyAgICAweDkzNTY0YWNmMDAwMDAwMDAsIDB4MWJlNmY2ZTUwMDAwMDAwMCwgMHg1Yzc0YjI0YTAwMDAwMDAwLAorICAgIDB4MGEwNTFiM2UwMDAwMDAwMCwgMHg0ZDk3NWY5MTAwMDAwMDAwLCAweGM1MjdlM2JiMDAwMDAwMDAsCisgICAgMHg4MmI1YTcxNDAwMDAwMDAwLCAweGQ1NDY5YWVlMDAwMDAwMDAsIDB4OTJkNGRlNDEwMDAwMDAwMCwKKyAgICAweDFhNjQ2MjZiMDAwMDAwMDAsIDB4NWRmNjI2YzQwMDAwMDAwMCwgMHhmNTg0Njg0NDAwMDAwMDAwLAorICAgIDB4YjIxNjJjZWIwMDAwMDAwMCwgMHgzYWE2OTBjMTAwMDAwMDAwLCAweDdkMzRkNDZlMDAwMDAwMDAsCisgICAgMHgyYWM3ZTk5NDAwMDAwMDAwLCAweDZkNTVhZDNiMDAwMDAwMDAsIDB4ZTVlNTExMTEwMDAwMDAwMCwKKyAgICAweGEyNzc1NWJlMDAwMDAwMDAsIDB4NDkwNzQzZjgwMDAwMDAwMCwgMHgwZTk1MDc1NzAwMDAwMDAwLAorICAgIDB4ODYyNWJiN2QwMDAwMDAwMCwgMHhjMWI3ZmZkMjAwMDAwMDAwLCAweDk2NDRjMjI4MDAwMDAwMDAsCisgICAgMHhkMWQ2ODY4NzAwMDAwMDAwLCAweDU5NjYzYWFkMDAwMDAwMDAsIDB4MWVmNDdlMDIwMDAwMDAwMCwKKyAgICAweGI2ODYzMDgyMDAwMDAwMDAsIDB4ZjExNDc0MmQwMDAwMDAwMCwgMHg3OWE0YzgwNzAwMDAwMDAwLAorICAgIDB4M2UzNjhjYTgwMDAwMDAwMCwgMHg2OWM1YjE1MjAwMDAwMDAwLCAweDJlNTdmNWZkMDAwMDAwMDAsCisgICAgMHhhNmU3NDlkNzAwMDAwMDAwLCAweGUxNzUwZDc4MDAwMDAwMDAsIDB4YjcwNGE0MGMwMDAwMDAwMCwKKyAgICAweGYwOTZlMGEzMDAwMDAwMDAsIDB4NzgyNjVjODkwMDAwMDAwMCwgMHgzZmI0MTgyNjAwMDAwMDAwLAorICAgIDB4Njg0NzI1ZGMwMDAwMDAwMCwgMHgyZmQ1NjE3MzAwMDAwMDAwLCAweGE3NjVkZDU5MDAwMDAwMDAsCisgICAgMHhlMGY3OTlmNjAwMDAwMDAwLCAweDQ4ODVkNzc2MDAwMDAwMDAsIDB4MGYxNzkzZDkwMDAwMDAwMCwKKyAgICAweDg3YTcyZmYzMDAwMDAwMDAsIDB4YzAzNTZiNWMwMDAwMDAwMCwgMHg5N2M2NTZhNjAwMDAwMDAwLAorICAgIDB4ZDA1NDEyMDkwMDAwMDAwMCwgMHg1OGU0YWUyMzAwMDAwMDAwLCAweDFmNzZlYThjMDAwMDAwMDAsCisgICAgMHg4ZTA1ODJhZjAwMDAwMDAwLCAweGM5OTdjNjAwMDAwMDAwMDAsIDB4NDEyNzdhMmEwMDAwMDAwMCwKKyAgICAweDA2YjUzZTg1MDAwMDAwMDAsIDB4NTE0NjAzN2YwMDAwMDAwMCwgMHgxNmQ0NDdkMDAwMDAwMDAwLAorICAgIDB4OWU2NGZiZmEwMDAwMDAwMCwgMHhkOWY2YmY1NTAwMDAwMDAwLCAweDcxODRmMWQ1MDAwMDAwMDAsCisgICAgMHgzNjE2YjU3YTAwMDAwMDAwLCAweGJlYTYwOTUwMDAwMDAwMDAsIDB4ZjkzNDRkZmYwMDAwMDAwMCwKKyAgICAweGFlYzc3MDA1MDAwMDAwMDAsIDB4ZTk1NTM0YWEwMDAwMDAwMCwgMHg2MWU1ODg4MDAwMDAwMDAwLAorICAgIDB4MjY3N2NjMmYwMDAwMDAwMCwgMHg3MDA2NjU1YjAwMDAwMDAwLCAweDM3OTQyMWY0MDAwMDAwMDAsCisgICAgMHhiZjI0OWRkZTAwMDAwMDAwLCAweGY4YjZkOTcxMDAwMDAwMDAsIDB4YWY0NWU0OGIwMDAwMDAwMCwKKyAgICAweGU4ZDdhMDI0MDAwMDAwMDAsIDB4NjA2NzFjMGUwMDAwMDAwMCwgMHgyN2Y1NThhMTAwMDAwMDAwLAorICAgIDB4OGY4NzE2MjEwMDAwMDAwMCwgMHhjODE1NTI4ZTAwMDAwMDAwLCAweDQwYTVlZWE0MDAwMDAwMDAsCisgICAgMHgwNzM3YWEwYjAwMDAwMDAwLCAweDUwYzQ5N2YxMDAwMDAwMDAsIDB4MTc1NmQzNWUwMDAwMDAwMCwKKyAgICAweDlmZTY2Zjc0MDAwMDAwMDAsIDB4ZDg3NDJiZGIwMDAwMDAwMCwgMHgzMzA0M2Q5ZDAwMDAwMDAwLAorICAgIDB4NzQ5Njc5MzIwMDAwMDAwMCwgMHhmYzI2YzUxODAwMDAwMDAwLCAweGJiYjQ4MWI3MDAwMDAwMDAsCisgICAgMHhlYzQ3YmM0ZDAwMDAwMDAwLCAweGFiZDVmOGUyMDAwMDAwMDAsIDB4MjM2NTQ0YzgwMDAwMDAwMCwKKyAgICAweDY0ZjcwMDY3MDAwMDAwMDAsIDB4Y2M4NTRlZTcwMDAwMDAwMCwgMHg4YjE3MGE0ODAwMDAwMDAwLAorICAgIDB4MDNhN2I2NjIwMDAwMDAwMCwgMHg0NDM1ZjJjZDAwMDAwMDAwLCAweDEzYzZjZjM3MDAwMDAwMDAsCisgICAgMHg1NDU0OGI5ODAwMDAwMDAwLCAweGRjZTQzN2IyMDAwMDAwMDAsIDB4OWI3NjczMWQwMDAwMDAwMCwKKyAgICAweGNkMDdkYTY5MDAwMDAwMDAsIDB4OGE5NTllYzYwMDAwMDAwMCwgMHgwMjI1MjJlYzAwMDAwMDAwLAorICAgIDB4NDViNzY2NDMwMDAwMDAwMCwgMHgxMjQ0NWJiOTAwMDAwMDAwLCAweDU1ZDYxZjE2MDAwMDAwMDAsCisgICAgMHhkZDY2YTMzYzAwMDAwMDAwLCAweDlhZjRlNzkzMDAwMDAwMDAsIDB4MzI4NmE5MTMwMDAwMDAwMCwKKyAgICAweDc1MTRlZGJjMDAwMDAwMDAsIDB4ZmRhNDUxOTYwMDAwMDAwMCwgMHhiYTM2MTUzOTAwMDAwMDAwLAorICAgIDB4ZWRjNTI4YzMwMDAwMDAwMCwgMHhhYTU3NmM2YzAwMDAwMDAwLCAweDIyZTdkMDQ2MDAwMDAwMDAsCisgICAgMHg2NTc1OTRlOTAwMDAwMDAwfX07CisKKyNlbHNlIC8qIFcgPT0gNCAqLworCitsb2NhbCBjb25zdCB6X2NyY190IEZBUiBjcmNfYnJhaWRfdGFibGVbXVsyNTZdID0geworICAgezB4MDAwMDAwMDAsIDB4NjU2NzNiNDYsIDB4Y2FjZTc2OGMsIDB4YWZhOTRkY2EsIDB4NGVlZGViNTksCisgICAgMHgyYjhhZDAxZiwgMHg4NDIzOWRkNSwgMHhlMTQ0YTY5MywgMHg5ZGRiZDZiMiwgMHhmOGJjZWRmNCwKKyAgICAweDU3MTVhMDNlLCAweDMyNzI5Yjc4LCAweGQzMzYzZGViLCAweGI2NTEwNmFkLCAweDE5Zjg0YjY3LAorICAgIDB4N2M5ZjcwMjEsIDB4ZTBjNmFiMjUsIDB4ODVhMTkwNjMsIDB4MmEwOGRkYTksIDB4NGY2ZmU2ZWYsCisgICAgMHhhZTJiNDA3YywgMHhjYjRjN2IzYSwgMHg2NGU1MzZmMCwgMHgwMTgyMGRiNiwgMHg3ZDFkN2Q5NywKKyAgICAweDE4N2E0NmQxLCAweGI3ZDMwYjFiLCAweGQyYjQzMDVkLCAweDMzZjA5NmNlLCAweDU2OTdhZDg4LAorICAgIDB4ZjkzZWUwNDIsIDB4OWM1OWRiMDQsIDB4MWFmYzUwMGIsIDB4N2Y5YjZiNGQsIDB4ZDAzMjI2ODcsCisgICAgMHhiNTU1MWRjMSwgMHg1NDExYmI1MiwgMHgzMTc2ODAxNCwgMHg5ZWRmY2RkZSwgMHhmYmI4ZjY5OCwKKyAgICAweDg3Mjc4NmI5LCAweGUyNDBiZGZmLCAweDRkZTlmMDM1LCAweDI4OGVjYjczLCAweGM5Y2E2ZGUwLAorICAgIDB4YWNhZDU2YTYsIDB4MDMwNDFiNmMsIDB4NjY2MzIwMmEsIDB4ZmEzYWZiMmUsIDB4OWY1ZGMwNjgsCisgICAgMHgzMGY0OGRhMiwgMHg1NTkzYjZlNCwgMHhiNGQ3MTA3NywgMHhkMWIwMmIzMSwgMHg3ZTE5NjZmYiwKKyAgICAweDFiN2U1ZGJkLCAweDY3ZTEyZDljLCAweDAyODYxNmRhLCAweGFkMmY1YjEwLCAweGM4NDg2MDU2LAorICAgIDB4MjkwY2M2YzUsIDB4NGM2YmZkODMsIDB4ZTNjMmIwNDksIDB4ODZhNThiMGYsIDB4MzVmOGEwMTYsCisgICAgMHg1MDlmOWI1MCwgMHhmZjM2ZDY5YSwgMHg5YTUxZWRkYywgMHg3YjE1NGI0ZiwgMHgxZTcyNzAwOSwKKyAgICAweGIxZGIzZGMzLCAweGQ0YmMwNjg1LCAweGE4MjM3NmE0LCAweGNkNDQ0ZGUyLCAweDYyZWQwMDI4LAorICAgIDB4MDc4YTNiNmUsIDB4ZTZjZTlkZmQsIDB4ODNhOWE2YmIsIDB4MmMwMGViNzEsIDB4NDk2N2QwMzcsCisgICAgMHhkNTNlMGIzMywgMHhiMDU5MzA3NSwgMHgxZmYwN2RiZiwgMHg3YTk3NDZmOSwgMHg5YmQzZTA2YSwKKyAgICAweGZlYjRkYjJjLCAweDUxMWQ5NmU2LCAweDM0N2FhZGEwLCAweDQ4ZTVkZDgxLCAweDJkODJlNmM3LAorICAgIDB4ODIyYmFiMGQsIDB4ZTc0YzkwNGIsIDB4MDYwODM2ZDgsIDB4NjM2ZjBkOWUsIDB4Y2NjNjQwNTQsCisgICAgMHhhOWExN2IxMiwgMHgyZjA0ZjAxZCwgMHg0YTYzY2I1YiwgMHhlNWNhODY5MSwgMHg4MGFkYmRkNywKKyAgICAweDYxZTkxYjQ0LCAweDA0OGUyMDAyLCAweGFiMjc2ZGM4LCAweGNlNDA1NjhlLCAweGIyZGYyNmFmLAorICAgIDB4ZDdiODFkZTksIDB4NzgxMTUwMjMsIDB4MWQ3NjZiNjUsIDB4ZmMzMmNkZjYsIDB4OTk1NWY2YjAsCisgICAgMHgzNmZjYmI3YSwgMHg1MzliODAzYywgMHhjZmMyNWIzOCwgMHhhYWE1NjA3ZSwgMHgwNTBjMmRiNCwKKyAgICAweDYwNmIxNmYyLCAweDgxMmZiMDYxLCAweGU0NDg4YjI3LCAweDRiZTFjNmVkLCAweDJlODZmZGFiLAorICAgIDB4NTIxOThkOGEsIDB4Mzc3ZWI2Y2MsIDB4OThkN2ZiMDYsIDB4ZmRiMGMwNDAsIDB4MWNmNDY2ZDMsCisgICAgMHg3OTkzNWQ5NSwgMHhkNjNhMTA1ZiwgMHhiMzVkMmIxOSwgMHg2YmYxNDAyYywgMHgwZTk2N2I2YSwKKyAgICAweGExM2YzNmEwLCAweGM0NTgwZGU2LCAweDI1MWNhYjc1LCAweDQwN2I5MDMzLCAweGVmZDJkZGY5LAorICAgIDB4OGFiNWU2YmYsIDB4ZjYyYTk2OWUsIDB4OTM0ZGFkZDgsIDB4M2NlNGUwMTIsIDB4NTk4M2RiNTQsCisgICAgMHhiOGM3N2RjNywgMHhkZGEwNDY4MSwgMHg3MjA5MGI0YiwgMHgxNzZlMzAwZCwgMHg4YjM3ZWIwOSwKKyAgICAweGVlNTBkMDRmLCAweDQxZjk5ZDg1LCAweDI0OWVhNmMzLCAweGM1ZGEwMDUwLCAweGEwYmQzYjE2LAorICAgIDB4MGYxNDc2ZGMsIDB4NmE3MzRkOWEsIDB4MTZlYzNkYmIsIDB4NzM4YjA2ZmQsIDB4ZGMyMjRiMzcsCisgICAgMHhiOTQ1NzA3MSwgMHg1ODAxZDZlMiwgMHgzZDY2ZWRhNCwgMHg5MmNmYTA2ZSwgMHhmN2E4OWIyOCwKKyAgICAweDcxMGQxMDI3LCAweDE0NmEyYjYxLCAweGJiYzM2NmFiLCAweGRlYTQ1ZGVkLCAweDNmZTBmYjdlLAorICAgIDB4NWE4N2MwMzgsIDB4ZjUyZThkZjIsIDB4OTA0OWI2YjQsIDB4ZWNkNmM2OTUsIDB4ODliMWZkZDMsCisgICAgMHgyNjE4YjAxOSwgMHg0MzdmOGI1ZiwgMHhhMjNiMmRjYywgMHhjNzVjMTY4YSwgMHg2OGY1NWI0MCwKKyAgICAweDBkOTI2MDA2LCAweDkxY2JiYjAyLCAweGY0YWM4MDQ0LCAweDViMDVjZDhlLCAweDNlNjJmNmM4LAorICAgIDB4ZGYyNjUwNWIsIDB4YmE0MTZiMWQsIDB4MTVlODI2ZDcsIDB4NzA4ZjFkOTEsIDB4MGMxMDZkYjAsCisgICAgMHg2OTc3NTZmNiwgMHhjNmRlMWIzYywgMHhhM2I5MjA3YSwgMHg0MmZkODZlOSwgMHgyNzlhYmRhZiwKKyAgICAweDg4MzNmMDY1LCAweGVkNTRjYjIzLCAweDVlMDllMDNhLCAweDNiNmVkYjdjLCAweDk0Yzc5NmI2LAorICAgIDB4ZjFhMGFkZjAsIDB4MTBlNDBiNjMsIDB4NzU4MzMwMjUsIDB4ZGEyYTdkZWYsIDB4YmY0ZDQ2YTksCisgICAgMHhjM2QyMzY4OCwgMHhhNmI1MGRjZSwgMHgwOTFjNDAwNCwgMHg2YzdiN2I0MiwgMHg4ZDNmZGRkMSwKKyAgICAweGU4NThlNjk3LCAweDQ3ZjFhYjVkLCAweDIyOTY5MDFiLCAweGJlY2Y0YjFmLCAweGRiYTg3MDU5LAorICAgIDB4NzQwMTNkOTMsIDB4MTE2NjA2ZDUsIDB4ZjAyMmEwNDYsIDB4OTU0NTliMDAsIDB4M2FlY2Q2Y2EsCisgICAgMHg1ZjhiZWQ4YywgMHgyMzE0OWRhZCwgMHg0NjczYTZlYiwgMHhlOWRhZWIyMSwgMHg4Y2JkZDA2NywKKyAgICAweDZkZjk3NmY0LCAweDA4OWU0ZGIyLCAweGE3MzcwMDc4LCAweGMyNTAzYjNlLCAweDQ0ZjViMDMxLAorICAgIDB4MjE5MjhiNzcsIDB4OGUzYmM2YmQsIDB4ZWI1Y2ZkZmIsIDB4MGExODViNjgsIDB4NmY3ZjYwMmUsCisgICAgMHhjMGQ2MmRlNCwgMHhhNWIxMTZhMiwgMHhkOTJlNjY4MywgMHhiYzQ5NWRjNSwgMHgxM2UwMTAwZiwKKyAgICAweDc2ODcyYjQ5LCAweDk3YzM4ZGRhLCAweGYyYTRiNjljLCAweDVkMGRmYjU2LCAweDM4NmFjMDEwLAorICAgIDB4YTQzMzFiMTQsIDB4YzE1NDIwNTIsIDB4NmVmZDZkOTgsIDB4MGI5YTU2ZGUsIDB4ZWFkZWYwNGQsCisgICAgMHg4ZmI5Y2IwYiwgMHgyMDEwODZjMSwgMHg0NTc3YmQ4NywgMHgzOWU4Y2RhNiwgMHg1YzhmZjZlMCwKKyAgICAweGYzMjZiYjJhLCAweDk2NDE4MDZjLCAweDc3MDUyNmZmLCAweDEyNjIxZGI5LCAweGJkY2I1MDczLAorICAgIDB4ZDhhYzZiMzV9LAorICAgezB4MDAwMDAwMDAsIDB4ZDdlMjgwNTgsIDB4NzRiNDA2ZjEsIDB4YTM1Njg2YTksIDB4ZTk2ODBkZTIsCisgICAgMHgzZThhOGRiYSwgMHg5ZGRjMGIxMywgMHg0YTNlOGI0YiwgMHgwOWExMWQ4NSwgMHhkZTQzOWRkZCwKKyAgICAweDdkMTUxYjc0LCAweGFhZjc5YjJjLCAweGUwYzkxMDY3LCAweDM3MmI5MDNmLCAweDk0N2QxNjk2LAorICAgIDB4NDM5Zjk2Y2UsIDB4MTM0MjNiMGEsIDB4YzRhMGJiNTIsIDB4NjdmNjNkZmIsIDB4YjAxNGJkYTMsCisgICAgMHhmYTJhMzZlOCwgMHgyZGM4YjZiMCwgMHg4ZTllMzAxOSwgMHg1OTdjYjA0MSwgMHgxYWUzMjY4ZiwKKyAgICAweGNkMDFhNmQ3LCAweDZlNTcyMDdlLCAweGI5YjVhMDI2LCAweGYzOGIyYjZkLCAweDI0NjlhYjM1LAorICAgIDB4ODczZjJkOWMsIDB4NTBkZGFkYzQsIDB4MjY4NDc2MTQsIDB4ZjE2NmY2NGMsIDB4NTIzMDcwZTUsCisgICAgMHg4NWQyZjBiZCwgMHhjZmVjN2JmNiwgMHgxODBlZmJhZSwgMHhiYjU4N2QwNywgMHg2Y2JhZmQ1ZiwKKyAgICAweDJmMjU2YjkxLCAweGY4YzdlYmM5LCAweDViOTE2ZDYwLCAweDhjNzNlZDM4LCAweGM2NGQ2NjczLAorICAgIDB4MTFhZmU2MmIsIDB4YjJmOTYwODIsIDB4NjUxYmUwZGEsIDB4MzVjNjRkMWUsIDB4ZTIyNGNkNDYsCisgICAgMHg0MTcyNGJlZiwgMHg5NjkwY2JiNywgMHhkY2FlNDBmYywgMHgwYjRjYzBhNCwgMHhhODFhNDYwZCwKKyAgICAweDdmZjhjNjU1LCAweDNjNjc1MDliLCAweGViODVkMGMzLCAweDQ4ZDM1NjZhLCAweDlmMzFkNjMyLAorICAgIDB4ZDUwZjVkNzksIDB4MDJlZGRkMjEsIDB4YTFiYjViODgsIDB4NzY1OWRiZDAsIDB4NGQwOGVjMjgsCisgICAgMHg5YWVhNmM3MCwgMHgzOWJjZWFkOSwgMHhlZTVlNmE4MSwgMHhhNDYwZTFjYSwgMHg3MzgyNjE5MiwKKyAgICAweGQwZDRlNzNiLCAweDA3MzY2NzYzLCAweDQ0YTlmMWFkLCAweDkzNGI3MWY1LCAweDMwMWRmNzVjLAorICAgIDB4ZTdmZjc3MDQsIDB4YWRjMWZjNGYsIDB4N2EyMzdjMTcsIDB4ZDk3NWZhYmUsIDB4MGU5NzdhZTYsCisgICAgMHg1ZTRhZDcyMiwgMHg4OWE4NTc3YSwgMHgyYWZlZDFkMywgMHhmZDFjNTE4YiwgMHhiNzIyZGFjMCwKKyAgICAweDYwYzA1YTk4LCAweGMzOTZkYzMxLCAweDE0NzQ1YzY5LCAweDU3ZWJjYWE3LCAweDgwMDk0YWZmLAorICAgIDB4MjM1ZmNjNTYsIDB4ZjRiZDRjMGUsIDB4YmU4M2M3NDUsIDB4Njk2MTQ3MWQsIDB4Y2EzN2MxYjQsCisgICAgMHgxZGQ1NDFlYywgMHg2YjhjOWEzYywgMHhiYzZlMWE2NCwgMHgxZjM4OWNjZCwgMHhjOGRhMWM5NSwKKyAgICAweDgyZTQ5N2RlLCAweDU1MDYxNzg2LCAweGY2NTA5MTJmLCAweDIxYjIxMTc3LCAweDYyMmQ4N2I5LAorICAgIDB4YjVjZjA3ZTEsIDB4MTY5OTgxNDgsIDB4YzE3YjAxMTAsIDB4OGI0NThhNWIsIDB4NWNhNzBhMDMsCisgICAgMHhmZmYxOGNhYSwgMHgyODEzMGNmMiwgMHg3OGNlYTEzNiwgMHhhZjJjMjE2ZSwgMHgwYzdhYTdjNywKKyAgICAweGRiOTgyNzlmLCAweDkxYTZhY2Q0LCAweDQ2NDQyYzhjLCAweGU1MTJhYTI1LCAweDMyZjAyYTdkLAorICAgIDB4NzE2ZmJjYjMsIDB4YTY4ZDNjZWIsIDB4MDVkYmJhNDIsIDB4ZDIzOTNhMWEsIDB4OTgwN2IxNTEsCisgICAgMHg0ZmU1MzEwOSwgMHhlY2IzYjdhMCwgMHgzYjUxMzdmOCwgMHg5YTExZDg1MCwgMHg0ZGYzNTgwOCwKKyAgICAweGVlYTVkZWExLCAweDM5NDc1ZWY5LCAweDczNzlkNWIyLCAweGE0OWI1NWVhLCAweDA3Y2RkMzQzLAorICAgIDB4ZDAyZjUzMWIsIDB4OTNiMGM1ZDUsIDB4NDQ1MjQ1OGQsIDB4ZTcwNGMzMjQsIDB4MzBlNjQzN2MsCisgICAgMHg3YWQ4YzgzNywgMHhhZDNhNDg2ZiwgMHgwZTZjY2VjNiwgMHhkOThlNGU5ZSwgMHg4OTUzZTM1YSwKKyAgICAweDVlYjE2MzAyLCAweGZkZTdlNWFiLCAweDJhMDU2NWYzLCAweDYwM2JlZWI4LCAweGI3ZDk2ZWUwLAorICAgIDB4MTQ4ZmU4NDksIDB4YzM2ZDY4MTEsIDB4ODBmMmZlZGYsIDB4NTcxMDdlODcsIDB4ZjQ0NmY4MmUsCisgICAgMHgyM2E0Nzg3NiwgMHg2OTlhZjMzZCwgMHhiZTc4NzM2NSwgMHgxZDJlZjVjYywgMHhjYWNjNzU5NCwKKyAgICAweGJjOTVhZTQ0LCAweDZiNzcyZTFjLCAweGM4MjFhOGI1LCAweDFmYzMyOGVkLCAweDU1ZmRhM2E2LAorICAgIDB4ODIxZjIzZmUsIDB4MjE0OWE1NTcsIDB4ZjZhYjI1MGYsIDB4YjUzNGIzYzEsIDB4NjJkNjMzOTksCisgICAgMHhjMTgwYjUzMCwgMHgxNjYyMzU2OCwgMHg1YzVjYmUyMywgMHg4YmJlM2U3YiwgMHgyOGU4YjhkMiwKKyAgICAweGZmMGEzODhhLCAweGFmZDc5NTRlLCAweDc4MzUxNTE2LCAweGRiNjM5M2JmLCAweDBjODExM2U3LAorICAgIDB4NDZiZjk4YWMsIDB4OTE1ZDE4ZjQsIDB4MzIwYjllNWQsIDB4ZTVlOTFlMDUsIDB4YTY3Njg4Y2IsCisgICAgMHg3MTk0MDg5MywgMHhkMmMyOGUzYSwgMHgwNTIwMGU2MiwgMHg0ZjFlODUyOSwgMHg5OGZjMDU3MSwKKyAgICAweDNiYWE4M2Q4LCAweGVjNDgwMzgwLCAweGQ3MTkzNDc4LCAweDAwZmJiNDIwLCAweGEzYWQzMjg5LAorICAgIDB4NzQ0ZmIyZDEsIDB4M2U3MTM5OWEsIDB4ZTk5M2I5YzIsIDB4NGFjNTNmNmIsIDB4OWQyN2JmMzMsCisgICAgMHhkZWI4MjlmZCwgMHgwOTVhYTlhNSwgMHhhYTBjMmYwYywgMHg3ZGVlYWY1NCwgMHgzN2QwMjQxZiwKKyAgICAweGUwMzJhNDQ3LCAweDQzNjQyMmVlLCAweDk0ODZhMmI2LCAweGM0NWIwZjcyLCAweDEzYjk4ZjJhLAorICAgIDB4YjBlZjA5ODMsIDB4NjcwZDg5ZGIsIDB4MmQzMzAyOTAsIDB4ZmFkMTgyYzgsIDB4NTk4NzA0NjEsCisgICAgMHg4ZTY1ODQzOSwgMHhjZGZhMTJmNywgMHgxYTE4OTJhZiwgMHhiOTRlMTQwNiwgMHg2ZWFjOTQ1ZSwKKyAgICAweDI0OTIxZjE1LCAweGYzNzA5ZjRkLCAweDUwMjYxOWU0LCAweDg3YzQ5OWJjLCAweGYxOWQ0MjZjLAorICAgIDB4MjY3ZmMyMzQsIDB4ODUyOTQ0OWQsIDB4NTJjYmM0YzUsIDB4MThmNTRmOGUsIDB4Y2YxN2NmZDYsCisgICAgMHg2YzQxNDk3ZiwgMHhiYmEzYzkyNywgMHhmODNjNWZlOSwgMHgyZmRlZGZiMSwgMHg4Yzg4NTkxOCwKKyAgICAweDViNmFkOTQwLCAweDExNTQ1MjBiLCAweGM2YjZkMjUzLCAweDY1ZTA1NGZhLCAweGIyMDJkNGEyLAorICAgIDB4ZTJkZjc5NjYsIDB4MzUzZGY5M2UsIDB4OTY2YjdmOTcsIDB4NDE4OWZmY2YsIDB4MGJiNzc0ODQsCisgICAgMHhkYzU1ZjRkYywgMHg3ZjAzNzI3NSwgMHhhOGUxZjIyZCwgMHhlYjdlNjRlMywgMHgzYzljZTRiYiwKKyAgICAweDlmY2E2MjEyLCAweDQ4MjhlMjRhLCAweDAyMTY2OTAxLCAweGQ1ZjRlOTU5LCAweDc2YTI2ZmYwLAorICAgIDB4YTE0MGVmYTh9LAorICAgezB4MDAwMDAwMDAsIDB4ZWY1MmI2ZTEsIDB4MDVkNDZiODMsIDB4ZWE4NmRkNjIsIDB4MGJhOGQ3MDYsCisgICAgMHhlNGZhNjFlNywgMHgwZTdjYmM4NSwgMHhlMTJlMGE2NCwgMHgxNzUxYWUwYywgMHhmODAzMThlZCwKKyAgICAweDEyODVjNThmLCAweGZkZDc3MzZlLCAweDFjZjk3OTBhLCAweGYzYWJjZmViLCAweDE5MmQxMjg5LAorICAgIDB4ZjY3ZmE0NjgsIDB4MmVhMzVjMTgsIDB4YzFmMWVhZjksIDB4MmI3NzM3OWIsIDB4YzQyNTgxN2EsCisgICAgMHgyNTBiOGIxZSwgMHhjYTU5M2RmZiwgMHgyMGRmZTA5ZCwgMHhjZjhkNTY3YywgMHgzOWYyZjIxNCwKKyAgICAweGQ2YTA0NGY1LCAweDNjMjY5OTk3LCAweGQzNzQyZjc2LCAweDMyNWEyNTEyLCAweGRkMDg5M2YzLAorICAgIDB4Mzc4ZTRlOTEsIDB4ZDhkY2Y4NzAsIDB4NWQ0NmI4MzAsIDB4YjIxNDBlZDEsIDB4NTg5MmQzYjMsCisgICAgMHhiN2MwNjU1MiwgMHg1NmVlNmYzNiwgMHhiOWJjZDlkNywgMHg1MzNhMDRiNSwgMHhiYzY4YjI1NCwKKyAgICAweDRhMTcxNjNjLCAweGE1NDVhMGRkLCAweDRmYzM3ZGJmLCAweGEwOTFjYjVlLCAweDQxYmZjMTNhLAorICAgIDB4YWVlZDc3ZGIsIDB4NDQ2YmFhYjksIDB4YWIzOTFjNTgsIDB4NzNlNWU0MjgsIDB4OWNiNzUyYzksCisgICAgMHg3NjMxOGZhYiwgMHg5OTYzMzk0YSwgMHg3ODRkMzMyZSwgMHg5NzFmODVjZiwgMHg3ZDk5NThhZCwKKyAgICAweDkyY2JlZTRjLCAweDY0YjQ0YTI0LCAweDhiZTZmY2M1LCAweDYxNjAyMWE3LCAweDhlMzI5NzQ2LAorICAgIDB4NmYxYzlkMjIsIDB4ODA0ZTJiYzMsIDB4NmFjOGY2YTEsIDB4ODU5YTQwNDAsIDB4YmE4ZDcwNjAsCisgICAgMHg1NWRmYzY4MSwgMHhiZjU5MWJlMywgMHg1MDBiYWQwMiwgMHhiMTI1YTc2NiwgMHg1ZTc3MTE4NywKKyAgICAweGI0ZjFjY2U1LCAweDViYTM3YTA0LCAweGFkZGNkZTZjLCAweDQyOGU2ODhkLCAweGE4MDhiNWVmLAorICAgIDB4NDc1YTAzMGUsIDB4YTY3NDA5NmEsIDB4NDkyNmJmOGIsIDB4YTNhMDYyZTksIDB4NGNmMmQ0MDgsCisgICAgMHg5NDJlMmM3OCwgMHg3YjdjOWE5OSwgMHg5MWZhNDdmYiwgMHg3ZWE4ZjExYSwgMHg5Zjg2ZmI3ZSwKKyAgICAweDcwZDQ0ZDlmLCAweDlhNTI5MGZkLCAweDc1MDAyNjFjLCAweDgzN2Y4Mjc0LCAweDZjMmQzNDk1LAorICAgIDB4ODZhYmU5ZjcsIDB4NjlmOTVmMTYsIDB4ODhkNzU1NzIsIDB4Njc4NWUzOTMsIDB4OGQwMzNlZjEsCisgICAgMHg2MjUxODgxMCwgMHhlN2NiYzg1MCwgMHgwODk5N2ViMSwgMHhlMjFmYTNkMywgMHgwZDRkMTUzMiwKKyAgICAweGVjNjMxZjU2LCAweDAzMzFhOWI3LCAweGU5Yjc3NGQ1LCAweDA2ZTVjMjM0LCAweGYwOWE2NjVjLAorICAgIDB4MWZjOGQwYmQsIDB4ZjU0ZTBkZGYsIDB4MWExY2JiM2UsIDB4ZmIzMmIxNWEsIDB4MTQ2MDA3YmIsCisgICAgMHhmZWU2ZGFkOSwgMHgxMWI0NmMzOCwgMHhjOTY4OTQ0OCwgMHgyNjNhMjJhOSwgMHhjY2JjZmZjYiwKKyAgICAweDIzZWU0OTJhLCAweGMyYzA0MzRlLCAweDJkOTJmNWFmLCAweGM3MTQyOGNkLCAweDI4NDY5ZTJjLAorICAgIDB4ZGUzOTNhNDQsIDB4MzE2YjhjYTUsIDB4ZGJlZDUxYzcsIDB4MzRiZmU3MjYsIDB4ZDU5MWVkNDIsCisgICAgMHgzYWMzNWJhMywgMHhkMDQ1ODZjMSwgMHgzZjE3MzAyMCwgMHhhZTZiZTY4MSwgMHg0MTM5NTA2MCwKKyAgICAweGFiYmY4ZDAyLCAweDQ0ZWQzYmUzLCAweGE1YzMzMTg3LCAweDRhOTE4NzY2LCAweGEwMTc1YTA0LAorICAgIDB4NGY0NWVjZTUsIDB4YjkzYTQ4OGQsIDB4NTY2OGZlNmMsIDB4YmNlZTIzMGUsIDB4NTNiYzk1ZWYsCisgICAgMHhiMjkyOWY4YiwgMHg1ZGMwMjk2YSwgMHhiNzQ2ZjQwOCwgMHg1ODE0NDJlOSwgMHg4MGM4YmE5OSwKKyAgICAweDZmOWEwYzc4LCAweDg1MWNkMTFhLCAweDZhNGU2N2ZiLCAweDhiNjA2ZDlmLCAweDY0MzJkYjdlLAorICAgIDB4OGViNDA2MWMsIDB4NjFlNmIwZmQsIDB4OTc5OTE0OTUsIDB4NzhjYmEyNzQsIDB4OTI0ZDdmMTYsCisgICAgMHg3ZDFmYzlmNywgMHg5YzMxYzM5MywgMHg3MzYzNzU3MiwgMHg5OWU1YTgxMCwgMHg3NmI3MWVmMSwKKyAgICAweGYzMmQ1ZWIxLCAweDFjN2ZlODUwLCAweGY2ZjkzNTMyLCAweDE5YWI4M2QzLCAweGY4ODU4OWI3LAorICAgIDB4MTdkNzNmNTYsIDB4ZmQ1MWUyMzQsIDB4MTIwMzU0ZDUsIDB4ZTQ3Y2YwYmQsIDB4MGIyZTQ2NWMsCisgICAgMHhlMWE4OWIzZSwgMHgwZWZhMmRkZiwgMHhlZmQ0MjdiYiwgMHgwMDg2OTE1YSwgMHhlYTAwNGMzOCwKKyAgICAweDA1NTJmYWQ5LCAweGRkOGUwMmE5LCAweDMyZGNiNDQ4LCAweGQ4NWE2OTJhLCAweDM3MDhkZmNiLAorICAgIDB4ZDYyNmQ1YWYsIDB4Mzk3NDYzNGUsIDB4ZDNmMmJlMmMsIDB4M2NhMDA4Y2QsIDB4Y2FkZmFjYTUsCisgICAgMHgyNThkMWE0NCwgMHhjZjBiYzcyNiwgMHgyMDU5NzFjNywgMHhjMTc3N2JhMywgMHgyZTI1Y2Q0MiwKKyAgICAweGM0YTMxMDIwLCAweDJiZjFhNmMxLCAweDE0ZTY5NmUxLCAweGZiYjQyMDAwLCAweDExMzJmZDYyLAorICAgIDB4ZmU2MDRiODMsIDB4MWY0ZTQxZTcsIDB4ZjAxY2Y3MDYsIDB4MWE5YTJhNjQsIDB4ZjVjODljODUsCisgICAgMHgwM2I3MzhlZCwgMHhlY2U1OGUwYywgMHgwNjYzNTM2ZSwgMHhlOTMxZTU4ZiwgMHgwODFmZWZlYiwKKyAgICAweGU3NGQ1OTBhLCAweDBkY2I4NDY4LCAweGUyOTkzMjg5LCAweDNhNDVjYWY5LCAweGQ1MTc3YzE4LAorICAgIDB4M2Y5MWExN2EsIDB4ZDBjMzE3OWIsIDB4MzFlZDFkZmYsIDB4ZGViZmFiMWUsIDB4MzQzOTc2N2MsCisgICAgMHhkYjZiYzA5ZCwgMHgyZDE0NjRmNSwgMHhjMjQ2ZDIxNCwgMHgyOGMwMGY3NiwgMHhjNzkyYjk5NywKKyAgICAweDI2YmNiM2YzLCAweGM5ZWUwNTEyLCAweDIzNjhkODcwLCAweGNjM2E2ZTkxLCAweDQ5YTAyZWQxLAorICAgIDB4YTZmMjk4MzAsIDB4NGM3NDQ1NTIsIDB4YTMyNmYzYjMsIDB4NDIwOGY5ZDcsIDB4YWQ1YTRmMzYsCisgICAgMHg0N2RjOTI1NCwgMHhhODhlMjRiNSwgMHg1ZWYxODBkZCwgMHhiMWEzMzYzYywgMHg1YjI1ZWI1ZSwKKyAgICAweGI0Nzc1ZGJmLCAweDU1NTk1N2RiLCAweGJhMGJlMTNhLCAweDUwOGQzYzU4LCAweGJmZGY4YWI5LAorICAgIDB4NjcwMzcyYzksIDB4ODg1MWM0MjgsIDB4NjJkNzE5NGEsIDB4OGQ4NWFmYWIsIDB4NmNhYmE1Y2YsCisgICAgMHg4M2Y5MTMyZSwgMHg2OTdmY2U0YywgMHg4NjJkNzhhZCwgMHg3MDUyZGNjNSwgMHg5ZjAwNmEyNCwKKyAgICAweDc1ODZiNzQ2LCAweDlhZDQwMWE3LCAweDdiZmEwYmMzLCAweDk0YThiZDIyLCAweDdlMmU2MDQwLAorICAgIDB4OTE3Y2Q2YTF9LAorICAgezB4MDAwMDAwMDAsIDB4ODdhNmNiNDMsIDB4ZDQzYzkwYzcsIDB4NTM5YTViODQsIDB4NzMwODI3Y2YsCisgICAgMHhmNGFlZWM4YywgMHhhNzM0YjcwOCwgMHgyMDkyN2M0YiwgMHhlNjEwNGY5ZSwgMHg2MWI2ODRkZCwKKyAgICAweDMyMmNkZjU5LCAweGI1OGExNDFhLCAweDk1MTg2ODUxLCAweDEyYmVhMzEyLCAweDQxMjRmODk2LAorICAgIDB4YzY4MjMzZDUsIDB4MTc1MTk5N2QsIDB4OTBmNzUyM2UsIDB4YzM2ZDA5YmEsIDB4NDRjYmMyZjksCisgICAgMHg2NDU5YmViMiwgMHhlM2ZmNzVmMSwgMHhiMDY1MmU3NSwgMHgzN2MzZTUzNiwgMHhmMTQxZDZlMywKKyAgICAweDc2ZTcxZGEwLCAweDI1N2Q0NjI0LCAweGEyZGI4ZDY3LCAweDgyNDlmMTJjLCAweDA1ZWYzYTZmLAorICAgIDB4NTY3NTYxZWIsIDB4ZDFkM2FhYTgsIDB4MmVhMzMyZmEsIDB4YTkwNWY5YjksIDB4ZmE5ZmEyM2QsCisgICAgMHg3ZDM5Njk3ZSwgMHg1ZGFiMTUzNSwgMHhkYTBkZGU3NiwgMHg4OTk3ODVmMiwgMHgwZTMxNGViMSwKKyAgICAweGM4YjM3ZDY0LCAweDRmMTViNjI3LCAweDFjOGZlZGEzLCAweDliMjkyNmUwLCAweGJiYmI1YWFiLAorICAgIDB4M2MxZDkxZTgsIDB4NmY4N2NhNmMsIDB4ZTgyMTAxMmYsIDB4MzlmMmFiODcsIDB4YmU1NDYwYzQsCisgICAgMHhlZGNlM2I0MCwgMHg2YTY4ZjAwMywgMHg0YWZhOGM0OCwgMHhjZDVjNDcwYiwgMHg5ZWM2MWM4ZiwKKyAgICAweDE5NjBkN2NjLCAweGRmZTJlNDE5LCAweDU4NDQyZjVhLCAweDBiZGU3NGRlLCAweDhjNzhiZjlkLAorICAgIDB4YWNlYWMzZDYsIDB4MmI0YzA4OTUsIDB4NzhkNjUzMTEsIDB4ZmY3MDk4NTIsIDB4NWQ0NjY1ZjQsCisgICAgMHhkYWUwYWViNywgMHg4OTdhZjUzMywgMHgwZWRjM2U3MCwgMHgyZTRlNDIzYiwgMHhhOWU4ODk3OCwKKyAgICAweGZhNzJkMmZjLCAweDdkZDQxOWJmLCAweGJiNTYyYTZhLCAweDNjZjBlMTI5LCAweDZmNmFiYWFkLAorICAgIDB4ZThjYzcxZWUsIDB4Yzg1ZTBkYTUsIDB4NGZmOGM2ZTYsIDB4MWM2MjlkNjIsIDB4OWJjNDU2MjEsCisgICAgMHg0YTE3ZmM4OSwgMHhjZGIxMzdjYSwgMHg5ZTJiNmM0ZSwgMHgxOThkYTcwZCwgMHgzOTFmZGI0NiwKKyAgICAweGJlYjkxMDA1LCAweGVkMjM0YjgxLCAweDZhODU4MGMyLCAweGFjMDdiMzE3LCAweDJiYTE3ODU0LAorICAgIDB4NzgzYjIzZDAsIDB4ZmY5ZGU4OTMsIDB4ZGYwZjk0ZDgsIDB4NThhOTVmOWIsIDB4MGIzMzA0MWYsCisgICAgMHg4Yzk1Y2Y1YywgMHg3M2U1NTcwZSwgMHhmNDQzOWM0ZCwgMHhhN2Q5YzdjOSwgMHgyMDdmMGM4YSwKKyAgICAweDAwZWQ3MGMxLCAweDg3NGJiYjgyLCAweGQ0ZDFlMDA2LCAweDUzNzcyYjQ1LCAweDk1ZjUxODkwLAorICAgIDB4MTI1M2QzZDMsIDB4NDFjOTg4NTcsIDB4YzY2ZjQzMTQsIDB4ZTZmZDNmNWYsIDB4NjE1YmY0MWMsCisgICAgMHgzMmMxYWY5OCwgMHhiNTY3NjRkYiwgMHg2NGI0Y2U3MywgMHhlMzEyMDUzMCwgMHhiMDg4NWViNCwKKyAgICAweDM3MmU5NWY3LCAweDE3YmNlOWJjLCAweDkwMWEyMmZmLCAweGMzODA3OTdiLCAweDQ0MjZiMjM4LAorICAgIDB4ODJhNDgxZWQsIDB4MDUwMjRhYWUsIDB4NTY5ODExMmEsIDB4ZDEzZWRhNjksIDB4ZjFhY2E2MjIsCisgICAgMHg3NjBhNmQ2MSwgMHgyNTkwMzZlNSwgMHhhMjM2ZmRhNiwgMHhiYThjY2JlOCwgMHgzZDJhMDBhYiwKKyAgICAweDZlYjA1YjJmLCAweGU5MTY5MDZjLCAweGM5ODRlYzI3LCAweDRlMjIyNzY0LCAweDFkYjg3Y2UwLAorICAgIDB4OWExZWI3YTMsIDB4NWM5Yzg0NzYsIDB4ZGIzYTRmMzUsIDB4ODhhMDE0YjEsIDB4MGYwNmRmZjIsCisgICAgMHgyZjk0YTNiOSwgMHhhODMyNjhmYSwgMHhmYmE4MzM3ZSwgMHg3YzBlZjgzZCwgMHhhZGRkNTI5NSwKKyAgICAweDJhN2I5OWQ2LCAweDc5ZTFjMjUyLCAweGZlNDcwOTExLCAweGRlZDU3NTVhLCAweDU5NzNiZTE5LAorICAgIDB4MGFlOWU1OWQsIDB4OGQ0ZjJlZGUsIDB4NGJjZDFkMGIsIDB4Y2M2YmQ2NDgsIDB4OWZmMThkY2MsCisgICAgMHgxODU3NDY4ZiwgMHgzOGM1M2FjNCwgMHhiZjYzZjE4NywgMHhlY2Y5YWEwMywgMHg2YjVmNjE0MCwKKyAgICAweDk0MmZmOTEyLCAweDEzODkzMjUxLCAweDQwMTM2OWQ1LCAweGM3YjVhMjk2LCAweGU3MjdkZWRkLAorICAgIDB4NjA4MTE1OWUsIDB4MzMxYjRlMWEsIDB4YjRiZDg1NTksIDB4NzIzZmI2OGMsIDB4ZjU5OTdkY2YsCisgICAgMHhhNjAzMjY0YiwgMHgyMWE1ZWQwOCwgMHgwMTM3OTE0MywgMHg4NjkxNWEwMCwgMHhkNTBiMDE4NCwKKyAgICAweDUyYWRjYWM3LCAweDgzN2U2MDZmLCAweDA0ZDhhYjJjLCAweDU3NDJmMGE4LCAweGQwZTQzYmViLAorICAgIDB4ZjA3NjQ3YTAsIDB4NzdkMDhjZTMsIDB4MjQ0YWQ3NjcsIDB4YTNlYzFjMjQsIDB4NjU2ZTJmZjEsCisgICAgMHhlMmM4ZTRiMiwgMHhiMTUyYmYzNiwgMHgzNmY0NzQ3NSwgMHgxNjY2MDgzZSwgMHg5MWMwYzM3ZCwKKyAgICAweGMyNWE5OGY5LCAweDQ1ZmM1M2JhLCAweGU3Y2FhZTFjLCAweDYwNmM2NTVmLCAweDMzZjYzZWRiLAorICAgIDB4YjQ1MGY1OTgsIDB4OTRjMjg5ZDMsIDB4MTM2NDQyOTAsIDB4NDBmZTE5MTQsIDB4Yzc1OGQyNTcsCisgICAgMHgwMWRhZTE4MiwgMHg4NjdjMmFjMSwgMHhkNWU2NzE0NSwgMHg1MjQwYmEwNiwgMHg3MmQyYzY0ZCwKKyAgICAweGY1NzQwZDBlLCAweGE2ZWU1NjhhLCAweDIxNDg5ZGM5LCAweGYwOWIzNzYxLCAweDc3M2RmYzIyLAorICAgIDB4MjRhN2E3YTYsIDB4YTMwMTZjZTUsIDB4ODM5MzEwYWUsIDB4MDQzNWRiZWQsIDB4NTdhZjgwNjksCisgICAgMHhkMDA5NGIyYSwgMHgxNjhiNzhmZiwgMHg5MTJkYjNiYywgMHhjMmI3ZTgzOCwgMHg0NTExMjM3YiwKKyAgICAweDY1ODM1ZjMwLCAweGUyMjU5NDczLCAweGIxYmZjZmY3LCAweDM2MTkwNGI0LCAweGM5Njk5Y2U2LAorICAgIDB4NGVjZjU3YTUsIDB4MWQ1NTBjMjEsIDB4OWFmM2M3NjIsIDB4YmE2MWJiMjksIDB4M2RjNzcwNmEsCisgICAgMHg2ZTVkMmJlZSwgMHhlOWZiZTBhZCwgMHgyZjc5ZDM3OCwgMHhhOGRmMTgzYiwgMHhmYjQ1NDNiZiwKKyAgICAweDdjZTM4OGZjLCAweDVjNzFmNGI3LCAweGRiZDczZmY0LCAweDg4NGQ2NDcwLCAweDBmZWJhZjMzLAorICAgIDB4ZGUzODA1OWIsIDB4NTk5ZWNlZDgsIDB4MGEwNDk1NWMsIDB4OGRhMjVlMWYsIDB4YWQzMDIyNTQsCisgICAgMHgyYTk2ZTkxNywgMHg3OTBjYjI5MywgMHhmZWFhNzlkMCwgMHgzODI4NGEwNSwgMHhiZjhlODE0NiwKKyAgICAweGVjMTRkYWMyLCAweDZiYjIxMTgxLCAweDRiMjA2ZGNhLCAweGNjODZhNjg5LCAweDlmMWNmZDBkLAorICAgIDB4MThiYTM2NGV9fTsKKworbG9jYWwgY29uc3Qgel93b3JkX3QgRkFSIGNyY19icmFpZF9iaWdfdGFibGVbXVsyNTZdID0geworICAgezB4MDAwMDAwMDAsIDB4NDNjYmE2ODcsIDB4Yzc5MDNjZDQsIDB4ODQ1YjlhNTMsIDB4Y2YyNzA4NzMsCisgICAgMHg4Y2VjYWVmNCwgMHgwOGI3MzRhNywgMHg0YjdjOTIyMCwgMHg5ZTRmMTBlNiwgMHhkZDg0YjY2MSwKKyAgICAweDU5ZGYyYzMyLCAweDFhMTQ4YWI1LCAweDUxNjgxODk1LCAweDEyYTNiZTEyLCAweDk2ZjgyNDQxLAorICAgIDB4ZDUzMzgyYzYsIDB4N2Q5OTUxMTcsIDB4M2U1MmY3OTAsIDB4YmEwOTZkYzMsIDB4ZjljMmNiNDQsCisgICAgMHhiMmJlNTk2NCwgMHhmMTc1ZmZlMywgMHg3NTJlNjViMCwgMHgzNmU1YzMzNywgMHhlM2Q2NDFmMSwKKyAgICAweGEwMWRlNzc2LCAweDI0NDY3ZDI1LCAweDY3OGRkYmEyLCAweDJjZjE0OTgyLCAweDZmM2FlZjA1LAorICAgIDB4ZWI2MTc1NTYsIDB4YThhYWQzZDEsIDB4ZmEzMmEzMmUsIDB4YjlmOTA1YTksIDB4M2RhMjlmZmEsCisgICAgMHg3ZTY5Mzk3ZCwgMHgzNTE1YWI1ZCwgMHg3NmRlMGRkYSwgMHhmMjg1OTc4OSwgMHhiMTRlMzEwZSwKKyAgICAweDY0N2RiM2M4LCAweDI3YjYxNTRmLCAweGEzZWQ4ZjFjLCAweGUwMjYyOTliLCAweGFiNWFiYmJiLAorICAgIDB4ZTg5MTFkM2MsIDB4NmNjYTg3NmYsIDB4MmYwMTIxZTgsIDB4ODdhYmYyMzksIDB4YzQ2MDU0YmUsCisgICAgMHg0MDNiY2VlZCwgMHgwM2YwNjg2YSwgMHg0ODhjZmE0YSwgMHgwYjQ3NWNjZCwgMHg4ZjFjYzY5ZSwKKyAgICAweGNjZDc2MDE5LCAweDE5ZTRlMmRmLCAweDVhMmY0NDU4LCAweGRlNzRkZTBiLCAweDlkYmY3ODhjLAorICAgIDB4ZDZjM2VhYWMsIDB4OTUwODRjMmIsIDB4MTE1M2Q2NzgsIDB4NTI5ODcwZmYsIDB4ZjQ2NTQ2NWQsCisgICAgMHhiN2FlZTBkYSwgMHgzM2Y1N2E4OSwgMHg3MDNlZGMwZSwgMHgzYjQyNGUyZSwgMHg3ODg5ZThhOSwKKyAgICAweGZjZDI3MmZhLCAweGJmMTlkNDdkLCAweDZhMmE1NmJiLCAweDI5ZTFmMDNjLCAweGFkYmE2YTZmLAorICAgIDB4ZWU3MWNjZTgsIDB4YTUwZDVlYzgsIDB4ZTZjNmY4NGYsIDB4NjI5ZDYyMWMsIDB4MjE1NmM0OWIsCisgICAgMHg4OWZjMTc0YSwgMHhjYTM3YjFjZCwgMHg0ZTZjMmI5ZSwgMHgwZGE3OGQxOSwgMHg0NmRiMWYzOSwKKyAgICAweDA1MTBiOWJlLCAweDgxNGIyM2VkLCAweGMyODA4NTZhLCAweDE3YjMwN2FjLCAweDU0NzhhMTJiLAorICAgIDB4ZDAyMzNiNzgsIDB4OTNlODlkZmYsIDB4ZDg5NDBmZGYsIDB4OWI1ZmE5NTgsIDB4MWYwNDMzMGIsCisgICAgMHg1Y2NmOTU4YywgMHgwZTU3ZTU3MywgMHg0ZDljNDNmNCwgMHhjOWM3ZDlhNywgMHg4YTBjN2YyMCwKKyAgICAweGMxNzBlZDAwLCAweDgyYmI0Yjg3LCAweDA2ZTBkMWQ0LCAweDQ1MmI3NzUzLCAweDkwMThmNTk1LAorICAgIDB4ZDNkMzUzMTIsIDB4NTc4OGM5NDEsIDB4MTQ0MzZmYzYsIDB4NWYzZmZkZTYsIDB4MWNmNDViNjEsCisgICAgMHg5OGFmYzEzMiwgMHhkYjY0NjdiNSwgMHg3M2NlYjQ2NCwgMHgzMDA1MTJlMywgMHhiNDVlODhiMCwKKyAgICAweGY3OTUyZTM3LCAweGJjZTliYzE3LCAweGZmMjIxYTkwLCAweDdiNzk4MGMzLCAweDM4YjIyNjQ0LAorICAgIDB4ZWQ4MWE0ODIsIDB4YWU0YTAyMDUsIDB4MmExMTk4NTYsIDB4NjlkYTNlZDEsIDB4MjJhNmFjZjEsCisgICAgMHg2MTZkMGE3NiwgMHhlNTM2OTAyNSwgMHhhNmZkMzZhMiwgMHhlOGNiOGNiYSwgMHhhYjAwMmEzZCwKKyAgICAweDJmNWJiMDZlLCAweDZjOTAxNmU5LCAweDI3ZWM4NGM5LCAweDY0MjcyMjRlLCAweGUwN2NiODFkLAorICAgIDB4YTNiNzFlOWEsIDB4NzY4NDljNWMsIDB4MzU0ZjNhZGIsIDB4YjExNGEwODgsIDB4ZjJkZjA2MGYsCisgICAgMHhiOWEzOTQyZiwgMHhmYTY4MzJhOCwgMHg3ZTMzYThmYiwgMHgzZGY4MGU3YywgMHg5NTUyZGRhZCwKKyAgICAweGQ2OTk3YjJhLCAweDUyYzJlMTc5LCAweDExMDk0N2ZlLCAweDVhNzVkNWRlLCAweDE5YmU3MzU5LAorICAgIDB4OWRlNWU5MGEsIDB4ZGUyZTRmOGQsIDB4MGIxZGNkNGIsIDB4NDhkNjZiY2MsIDB4Y2M4ZGYxOWYsCisgICAgMHg4ZjQ2NTcxOCwgMHhjNDNhYzUzOCwgMHg4N2YxNjNiZiwgMHgwM2FhZjllYywgMHg0MDYxNWY2YiwKKyAgICAweDEyZjkyZjk0LCAweDUxMzI4OTEzLCAweGQ1NjkxMzQwLCAweDk2YTJiNWM3LCAweGRkZGUyN2U3LAorICAgIDB4OWUxNTgxNjAsIDB4MWE0ZTFiMzMsIDB4NTk4NWJkYjQsIDB4OGNiNjNmNzIsIDB4Y2Y3ZDk5ZjUsCisgICAgMHg0YjI2MDNhNiwgMHgwOGVkYTUyMSwgMHg0MzkxMzcwMSwgMHgwMDVhOTE4NiwgMHg4NDAxMGJkNSwKKyAgICAweGM3Y2FhZDUyLCAweDZmNjA3ZTgzLCAweDJjYWJkODA0LCAweGE4ZjA0MjU3LCAweGViM2JlNGQwLAorICAgIDB4YTA0Nzc2ZjAsIDB4ZTM4Y2QwNzcsIDB4NjdkNzRhMjQsIDB4MjQxY2VjYTMsIDB4ZjEyZjZlNjUsCisgICAgMHhiMmU0YzhlMiwgMHgzNmJmNTJiMSwgMHg3NTc0ZjQzNiwgMHgzZTA4NjYxNiwgMHg3ZGMzYzA5MSwKKyAgICAweGY5OTg1YWMyLCAweGJhNTNmYzQ1LCAweDFjYWVjYWU3LCAweDVmNjU2YzYwLCAweGRiM2VmNjMzLAorICAgIDB4OThmNTUwYjQsIDB4ZDM4OWMyOTQsIDB4OTA0MjY0MTMsIDB4MTQxOWZlNDAsIDB4NTdkMjU4YzcsCisgICAgMHg4MmUxZGEwMSwgMHhjMTJhN2M4NiwgMHg0NTcxZTZkNSwgMHgwNmJhNDA1MiwgMHg0ZGM2ZDI3MiwKKyAgICAweDBlMGQ3NGY1LCAweDhhNTZlZWE2LCAweGM5OWQ0ODIxLCAweDYxMzc5YmYwLCAweDIyZmMzZDc3LAorICAgIDB4YTZhN2E3MjQsIDB4ZTU2YzAxYTMsIDB4YWUxMDkzODMsIDB4ZWRkYjM1MDQsIDB4Njk4MGFmNTcsCisgICAgMHgyYTRiMDlkMCwgMHhmZjc4OGIxNiwgMHhiY2IzMmQ5MSwgMHgzOGU4YjdjMiwgMHg3YjIzMTE0NSwKKyAgICAweDMwNWY4MzY1LCAweDczOTQyNWUyLCAweGY3Y2ZiZmIxLCAweGI0MDQxOTM2LCAweGU2OWM2OWM5LAorICAgIDB4YTU1N2NmNGUsIDB4MjEwYzU1MWQsIDB4NjJjN2YzOWEsIDB4MjliYjYxYmEsIDB4NmE3MGM3M2QsCisgICAgMHhlZTJiNWQ2ZSwgMHhhZGUwZmJlOSwgMHg3OGQzNzkyZiwgMHgzYjE4ZGZhOCwgMHhiZjQzNDVmYiwKKyAgICAweGZjODhlMzdjLCAweGI3ZjQ3MTVjLCAweGY0M2ZkN2RiLCAweDcwNjQ0ZDg4LCAweDMzYWZlYjBmLAorICAgIDB4OWIwNTM4ZGUsIDB4ZDhjZTllNTksIDB4NWM5NTA0MGEsIDB4MWY1ZWEyOGQsIDB4NTQyMjMwYWQsCisgICAgMHgxN2U5OTYyYSwgMHg5M2IyMGM3OSwgMHhkMDc5YWFmZSwgMHgwNTRhMjgzOCwgMHg0NjgxOGViZiwKKyAgICAweGMyZGExNGVjLCAweDgxMTFiMjZiLCAweGNhNmQyMDRiLCAweDg5YTY4NmNjLCAweDBkZmQxYzlmLAorICAgIDB4NGUzNmJhMTh9LAorICAgezB4MDAwMDAwMDAsIDB4ZTFiNjUyZWYsIDB4ODM2YmQ0MDUsIDB4NjJkZDg2ZWEsIDB4MDZkN2E4MGIsCisgICAgMHhlNzYxZmFlNCwgMHg4NWJjN2MwZSwgMHg2NDBhMmVlMSwgMHgwY2FlNTExNywgMHhlZDE4MDNmOCwKKyAgICAweDhmYzU4NTEyLCAweDZlNzNkN2ZkLCAweDBhNzlmOTFjLCAweGViY2ZhYmYzLCAweDg5MTIyZDE5LAorICAgIDB4NjhhNDdmZjYsIDB4MTg1Y2EzMmUsIDB4ZjllYWYxYzEsIDB4OWIzNzc3MmIsIDB4N2E4MTI1YzQsCisgICAgMHgxZThiMGIyNSwgMHhmZjNkNTljYSwgMHg5ZGUwZGYyMCwgMHg3YzU2OGRjZiwgMHgxNGYyZjIzOSwKKyAgICAweGY1NDRhMGQ2LCAweDk3OTkyNjNjLCAweDc2MmY3NGQzLCAweDEyMjU1YTMyLCAweGYzOTMwOGRkLAorICAgIDB4OTE0ZThlMzcsIDB4NzBmOGRjZDgsIDB4MzBiODQ2NWQsIDB4ZDEwZTE0YjIsIDB4YjNkMzkyNTgsCisgICAgMHg1MjY1YzBiNywgMHgzNjZmZWU1NiwgMHhkN2Q5YmNiOSwgMHhiNTA0M2E1MywgMHg1NGIyNjhiYywKKyAgICAweDNjMTYxNzRhLCAweGRkYTA0NWE1LCAweGJmN2RjMzRmLCAweDVlY2I5MWEwLCAweDNhYzFiZjQxLAorICAgIDB4ZGI3N2VkYWUsIDB4YjlhYTZiNDQsIDB4NTgxYzM5YWIsIDB4MjhlNGU1NzMsIDB4Yzk1MmI3OWMsCisgICAgMHhhYjhmMzE3NiwgMHg0YTM5NjM5OSwgMHgyZTMzNGQ3OCwgMHhjZjg1MWY5NywgMHhhZDU4OTk3ZCwKKyAgICAweDRjZWVjYjkyLCAweDI0NGFiNDY0LCAweGM1ZmNlNjhiLCAweGE3MjE2MDYxLCAweDQ2OTczMjhlLAorICAgIDB4MjI5ZDFjNmYsIDB4YzMyYjRlODAsIDB4YTFmNmM4NmEsIDB4NDA0MDlhODUsIDB4NjA3MDhkYmEsCisgICAgMHg4MWM2ZGY1NSwgMHhlMzFiNTliZiwgMHgwMmFkMGI1MCwgMHg2NmE3MjViMSwgMHg4NzExNzc1ZSwKKyAgICAweGU1Y2NmMWI0LCAweDA0N2FhMzViLCAweDZjZGVkY2FkLCAweDhkNjg4ZTQyLCAweGVmYjUwOGE4LAorICAgIDB4MGUwMzVhNDcsIDB4NmEwOTc0YTYsIDB4OGJiZjI2NDksIDB4ZTk2MmEwYTMsIDB4MDhkNGYyNGMsCisgICAgMHg3ODJjMmU5NCwgMHg5OTlhN2M3YiwgMHhmYjQ3ZmE5MSwgMHgxYWYxYTg3ZSwgMHg3ZWZiODY5ZiwKKyAgICAweDlmNGRkNDcwLCAweGZkOTA1MjlhLCAweDFjMjYwMDc1LCAweDc0ODI3ZjgzLCAweDk1MzQyZDZjLAorICAgIDB4ZjdlOWFiODYsIDB4MTY1ZmY5NjksIDB4NzI1NWQ3ODgsIDB4OTNlMzg1NjcsIDB4ZjEzZTAzOGQsCisgICAgMHgxMDg4NTE2MiwgMHg1MGM4Y2JlNywgMHhiMTdlOTkwOCwgMHhkM2EzMWZlMiwgMHgzMjE1NGQwZCwKKyAgICAweDU2MWY2M2VjLCAweGI3YTkzMTAzLCAweGQ1NzRiN2U5LCAweDM0YzJlNTA2LCAweDVjNjY5YWYwLAorICAgIDB4YmRkMGM4MWYsIDB4ZGYwZDRlZjUsIDB4M2ViYjFjMWEsIDB4NWFiMTMyZmIsIDB4YmIwNzYwMTQsCisgICAgMHhkOWRhZTZmZSwgMHgzODZjYjQxMSwgMHg0ODk0NjhjOSwgMHhhOTIyM2EyNiwgMHhjYmZmYmNjYywKKyAgICAweDJhNDllZTIzLCAweDRlNDNjMGMyLCAweGFmZjU5MjJkLCAweGNkMjgxNGM3LCAweDJjOWU0NjI4LAorICAgIDB4NDQzYTM5ZGUsIDB4YTU4YzZiMzEsIDB4Yzc1MWVkZGIsIDB4MjZlN2JmMzQsIDB4NDJlZDkxZDUsCisgICAgMHhhMzViYzMzYSwgMHhjMTg2NDVkMCwgMHgyMDMwMTczZiwgMHg4MWU2NmJhZSwgMHg2MDUwMzk0MSwKKyAgICAweDAyOGRiZmFiLCAweGUzM2JlZDQ0LCAweDg3MzFjM2E1LCAweDY2ODc5MTRhLCAweDA0NWExN2EwLAorICAgIDB4ZTVlYzQ1NGYsIDB4OGQ0ODNhYjksIDB4NmNmZTY4NTYsIDB4MGUyM2VlYmMsIDB4ZWY5NWJjNTMsCisgICAgMHg4YjlmOTJiMiwgMHg2YTI5YzA1ZCwgMHgwOGY0NDZiNywgMHhlOTQyMTQ1OCwgMHg5OWJhYzg4MCwKKyAgICAweDc4MGM5YTZmLCAweDFhZDExYzg1LCAweGZiNjc0ZTZhLCAweDlmNmQ2MDhiLCAweDdlZGIzMjY0LAorICAgIDB4MWMwNmI0OGUsIDB4ZmRiMGU2NjEsIDB4OTUxNDk5OTcsIDB4NzRhMmNiNzgsIDB4MTY3ZjRkOTIsCisgICAgMHhmN2M5MWY3ZCwgMHg5M2MzMzE5YywgMHg3Mjc1NjM3MywgMHgxMGE4ZTU5OSwgMHhmMTFlYjc3NiwKKyAgICAweGIxNWUyZGYzLCAweDUwZTg3ZjFjLCAweDMyMzVmOWY2LCAweGQzODNhYjE5LCAweGI3ODk4NWY4LAorICAgIDB4NTYzZmQ3MTcsIDB4MzRlMjUxZmQsIDB4ZDU1NDAzMTIsIDB4YmRmMDdjZTQsIDB4NWM0NjJlMGIsCisgICAgMHgzZTliYThlMSwgMHhkZjJkZmEwZSwgMHhiYjI3ZDRlZiwgMHg1YTkxODYwMCwgMHgzODRjMDBlYSwKKyAgICAweGQ5ZmE1MjA1LCAweGE5MDI4ZWRkLCAweDQ4YjRkYzMyLCAweDJhNjk1YWQ4LCAweGNiZGYwODM3LAorICAgIDB4YWZkNTI2ZDYsIDB4NGU2Mzc0MzksIDB4MmNiZWYyZDMsIDB4Y2QwOGEwM2MsIDB4YTVhY2RmY2EsCisgICAgMHg0NDFhOGQyNSwgMHgyNmM3MGJjZiwgMHhjNzcxNTkyMCwgMHhhMzdiNzdjMSwgMHg0MmNkMjUyZSwKKyAgICAweDIwMTBhM2M0LCAweGMxYTZmMTJiLCAweGUxOTZlNjE0LCAweDAwMjBiNGZiLCAweDYyZmQzMjExLAorICAgIDB4ODM0YjYwZmUsIDB4ZTc0MTRlMWYsIDB4MDZmNzFjZjAsIDB4NjQyYTlhMWEsIDB4ODU5Y2M4ZjUsCisgICAgMHhlZDM4YjcwMywgMHgwYzhlZTVlYywgMHg2ZTUzNjMwNiwgMHg4ZmU1MzFlOSwgMHhlYmVmMWYwOCwKKyAgICAweDBhNTk0ZGU3LCAweDY4ODRjYjBkLCAweDg5MzI5OWUyLCAweGY5Y2E0NTNhLCAweDE4N2MxN2Q1LAorICAgIDB4N2FhMTkxM2YsIDB4OWIxN2MzZDAsIDB4ZmYxZGVkMzEsIDB4MWVhYmJmZGUsIDB4N2M3NjM5MzQsCisgICAgMHg5ZGMwNmJkYiwgMHhmNTY0MTQyZCwgMHgxNGQyNDZjMiwgMHg3NjBmYzAyOCwgMHg5N2I5OTJjNywKKyAgICAweGYzYjNiYzI2LCAweDEyMDVlZWM5LCAweDcwZDg2ODIzLCAweDkxNmUzYWNjLCAweGQxMmVhMDQ5LAorICAgIDB4MzA5OGYyYTYsIDB4NTI0NTc0NGMsIDB4YjNmMzI2YTMsIDB4ZDdmOTA4NDIsIDB4MzY0ZjVhYWQsCisgICAgMHg1NDkyZGM0NywgMHhiNTI0OGVhOCwgMHhkZDgwZjE1ZSwgMHgzYzM2YTNiMSwgMHg1ZWViMjU1YiwKKyAgICAweGJmNWQ3N2I0LCAweGRiNTc1OTU1LCAweDNhZTEwYmJhLCAweDU4M2M4ZDUwLCAweGI5OGFkZmJmLAorICAgIDB4Yzk3MjAzNjcsIDB4MjhjNDUxODgsIDB4NGExOWQ3NjIsIDB4YWJhZjg1OGQsIDB4Y2ZhNWFiNmMsCisgICAgMHgyZTEzZjk4MywgMHg0Y2NlN2Y2OSwgMHhhZDc4MmQ4NiwgMHhjNWRjNTI3MCwgMHgyNDZhMDA5ZiwKKyAgICAweDQ2Yjc4Njc1LCAweGE3MDFkNDlhLCAweGMzMGJmYTdiLCAweDIyYmRhODk0LCAweDQwNjAyZTdlLAorICAgIDB4YTFkNjdjOTF9LAorICAgezB4MDAwMDAwMDAsIDB4NTg4MGUyZDcsIDB4ZjEwNmI0NzQsIDB4YTk4NjU2YTMsIDB4ZTIwZDY4ZTksCisgICAgMHhiYThkOGEzZSwgMHgxMzBiZGM5ZCwgMHg0YjhiM2U0YSwgMHg4NTFkYTEwOSwgMHhkZDlkNDNkZSwKKyAgICAweDc0MWIxNTdkLCAweDJjOWJmN2FhLCAweDY3MTBjOWUwLCAweDNmOTAyYjM3LCAweDk2MTY3ZDk0LAorICAgIDB4Y2U5NjlmNDMsIDB4MGEzYjQyMTMsIDB4NTJiYmEwYzQsIDB4ZmIzZGY2NjcsIDB4YTNiZDE0YjAsCisgICAgMHhlODM2MmFmYSwgMHhiMGI2YzgyZCwgMHgxOTMwOWU4ZSwgMHg0MWIwN2M1OSwgMHg4ZjI2ZTMxYSwKKyAgICAweGQ3YTYwMWNkLCAweDdlMjA1NzZlLCAweDI2YTBiNWI5LCAweDZkMmI4YmYzLCAweDM1YWI2OTI0LAorICAgIDB4OWMyZDNmODcsIDB4YzRhZGRkNTAsIDB4MTQ3Njg0MjYsIDB4NGNmNjY2ZjEsIDB4ZTU3MDMwNTIsCisgICAgMHhiZGYwZDI4NSwgMHhmNjdiZWNjZiwgMHhhZWZiMGUxOCwgMHgwNzdkNThiYiwgMHg1ZmZkYmE2YywKKyAgICAweDkxNmIyNTJmLCAweGM5ZWJjN2Y4LCAweDYwNmQ5MTViLCAweDM4ZWQ3MzhjLCAweDczNjY0ZGM2LAorICAgIDB4MmJlNmFmMTEsIDB4ODI2MGY5YjIsIDB4ZGFlMDFiNjUsIDB4MWU0ZGM2MzUsIDB4NDZjZDI0ZTIsCisgICAgMHhlZjRiNzI0MSwgMHhiN2NiOTA5NiwgMHhmYzQwYWVkYywgMHhhNGMwNGMwYiwgMHgwZDQ2MWFhOCwKKyAgICAweDU1YzZmODdmLCAweDliNTA2NzNjLCAweGMzZDA4NWViLCAweDZhNTZkMzQ4LCAweDMyZDYzMTlmLAorICAgIDB4Nzk1ZDBmZDUsIDB4MjFkZGVkMDIsIDB4ODg1YmJiYTEsIDB4ZDBkYjU5NzYsIDB4MjhlYzA4NGQsCisgICAgMHg3MDZjZWE5YSwgMHhkOWVhYmMzOSwgMHg4MTZhNWVlZSwgMHhjYWUxNjBhNCwgMHg5MjYxODI3MywKKyAgICAweDNiZTdkNGQwLCAweDYzNjczNjA3LCAweGFkZjFhOTQ0LCAweGY1NzE0YjkzLCAweDVjZjcxZDMwLAorICAgIDB4MDQ3N2ZmZTcsIDB4NGZmY2MxYWQsIDB4MTc3YzIzN2EsIDB4YmVmYTc1ZDksIDB4ZTY3YTk3MGUsCisgICAgMHgyMmQ3NGE1ZSwgMHg3YTU3YTg4OSwgMHhkM2QxZmUyYSwgMHg4YjUxMWNmZCwgMHhjMGRhMjJiNywKKyAgICAweDk4NWFjMDYwLCAweDMxZGM5NmMzLCAweDY5NWM3NDE0LCAweGE3Y2FlYjU3LCAweGZmNGEwOTgwLAorICAgIDB4NTZjYzVmMjMsIDB4MGU0Y2JkZjQsIDB4NDVjNzgzYmUsIDB4MWQ0NzYxNjksIDB4YjRjMTM3Y2EsCisgICAgMHhlYzQxZDUxZCwgMHgzYzlhOGM2YiwgMHg2NDFhNmViYywgMHhjZDljMzgxZiwgMHg5NTFjZGFjOCwKKyAgICAweGRlOTdlNDgyLCAweDg2MTcwNjU1LCAweDJmOTE1MGY2LCAweDc3MTFiMjIxLCAweGI5ODcyZDYyLAorICAgIDB4ZTEwN2NmYjUsIDB4NDg4MTk5MTYsIDB4MTAwMTdiYzEsIDB4NWI4YTQ1OGIsIDB4MDMwYWE3NWMsCisgICAgMHhhYThjZjFmZiwgMHhmMjBjMTMyOCwgMHgzNmExY2U3OCwgMHg2ZTIxMmNhZiwgMHhjN2E3N2EwYywKKyAgICAweDlmMjc5OGRiLCAweGQ0YWNhNjkxLCAweDhjMmM0NDQ2LCAweDI1YWExMmU1LCAweDdkMmFmMDMyLAorICAgIDB4YjNiYzZmNzEsIDB4ZWIzYzhkYTYsIDB4NDJiYWRiMDUsIDB4MWEzYTM5ZDIsIDB4NTFiMTA3OTgsCisgICAgMHgwOTMxZTU0ZiwgMHhhMGI3YjNlYywgMHhmODM3NTEzYiwgMHg1MGQ4MTE5YSwgMHgwODU4ZjM0ZCwKKyAgICAweGExZGVhNWVlLCAweGY5NWU0NzM5LCAweGIyZDU3OTczLCAweGVhNTU5YmE0LCAweDQzZDNjZDA3LAorICAgIDB4MWI1MzJmZDAsIDB4ZDVjNWIwOTMsIDB4OGQ0NTUyNDQsIDB4MjRjMzA0ZTcsIDB4N2M0M2U2MzAsCisgICAgMHgzN2M4ZDg3YSwgMHg2ZjQ4M2FhZCwgMHhjNmNlNmMwZSwgMHg5ZTRlOGVkOSwgMHg1YWUzNTM4OSwKKyAgICAweDAyNjNiMTVlLCAweGFiZTVlN2ZkLCAweGYzNjUwNTJhLCAweGI4ZWUzYjYwLCAweGUwNmVkOWI3LAorICAgIDB4NDllODhmMTQsIDB4MTE2ODZkYzMsIDB4ZGZmZWYyODAsIDB4ODc3ZTEwNTcsIDB4MmVmODQ2ZjQsCisgICAgMHg3Njc4YTQyMywgMHgzZGYzOWE2OSwgMHg2NTczNzhiZSwgMHhjY2Y1MmUxZCwgMHg5NDc1Y2NjYSwKKyAgICAweDQ0YWU5NWJjLCAweDFjMmU3NzZiLCAweGI1YTgyMWM4LCAweGVkMjhjMzFmLCAweGE2YTNmZDU1LAorICAgIDB4ZmUyMzFmODIsIDB4NTdhNTQ5MjEsIDB4MGYyNWFiZjYsIDB4YzFiMzM0YjUsIDB4OTkzM2Q2NjIsCisgICAgMHgzMGI1ODBjMSwgMHg2ODM1NjIxNiwgMHgyM2JlNWM1YywgMHg3YjNlYmU4YiwgMHhkMmI4ZTgyOCwKKyAgICAweDhhMzgwYWZmLCAweDRlOTVkN2FmLCAweDE2MTUzNTc4LCAweGJmOTM2M2RiLCAweGU3MTM4MTBjLAorICAgIDB4YWM5OGJmNDYsIDB4ZjQxODVkOTEsIDB4NWQ5ZTBiMzIsIDB4MDUxZWU5ZTUsIDB4Y2I4ODc2YTYsCisgICAgMHg5MzA4OTQ3MSwgMHgzYThlYzJkMiwgMHg2MjBlMjAwNSwgMHgyOTg1MWU0ZiwgMHg3MTA1ZmM5OCwKKyAgICAweGQ4ODNhYTNiLCAweDgwMDM0OGVjLCAweDc4MzQxOWQ3LCAweDIwYjRmYjAwLCAweDg5MzJhZGEzLAorICAgIDB4ZDFiMjRmNzQsIDB4OWEzOTcxM2UsIDB4YzJiOTkzZTksIDB4NmIzZmM1NGEsIDB4MzNiZjI3OWQsCisgICAgMHhmZDI5YjhkZSwgMHhhNWE5NWEwOSwgMHgwYzJmMGNhYSwgMHg1NGFmZWU3ZCwgMHgxZjI0ZDAzNywKKyAgICAweDQ3YTQzMmUwLCAweGVlMjI2NDQzLCAweGI2YTI4Njk0LCAweDcyMGY1YmM0LCAweDJhOGZiOTEzLAorICAgIDB4ODMwOWVmYjAsIDB4ZGI4OTBkNjcsIDB4OTAwMjMzMmQsIDB4Yzg4MmQxZmEsIDB4NjEwNDg3NTksCisgICAgMHgzOTg0NjU4ZSwgMHhmNzEyZmFjZCwgMHhhZjkyMTgxYSwgMHgwNjE0NGViOSwgMHg1ZTk0YWM2ZSwKKyAgICAweDE1MWY5MjI0LCAweDRkOWY3MGYzLCAweGU0MTkyNjUwLCAweGJjOTljNDg3LCAweDZjNDI5ZGYxLAorICAgIDB4MzRjMjdmMjYsIDB4OWQ0NDI5ODUsIDB4YzVjNGNiNTIsIDB4OGU0ZmY1MTgsIDB4ZDZjZjE3Y2YsCisgICAgMHg3ZjQ5NDE2YywgMHgyN2M5YTNiYiwgMHhlOTVmM2NmOCwgMHhiMWRmZGUyZiwgMHgxODU5ODg4YywKKyAgICAweDQwZDk2YTViLCAweDBiNTI1NDExLCAweDUzZDJiNmM2LCAweGZhNTRlMDY1LCAweGEyZDQwMmIyLAorICAgIDB4NjY3OWRmZTIsIDB4M2VmOTNkMzUsIDB4OTc3ZjZiOTYsIDB4Y2ZmZjg5NDEsIDB4ODQ3NGI3MGIsCisgICAgMHhkY2Y0NTVkYywgMHg3NTcyMDM3ZiwgMHgyZGYyZTFhOCwgMHhlMzY0N2VlYiwgMHhiYmU0OWMzYywKKyAgICAweDEyNjJjYTlmLCAweDRhZTIyODQ4LCAweDAxNjkxNjAyLCAweDU5ZTlmNGQ1LCAweGYwNmZhMjc2LAorICAgIDB4YThlZjQwYTF9LAorICAgezB4MDAwMDAwMDAsIDB4NDYzYjY3NjUsIDB4OGM3NmNlY2EsIDB4Y2E0ZGE5YWYsIDB4NTllYmVkNGUsCisgICAgMHgxZmQwOGEyYiwgMHhkNTlkMjM4NCwgMHg5M2E2NDRlMSwgMHhiMmQ2ZGI5ZCwgMHhmNGVkYmNmOCwKKyAgICAweDNlYTAxNTU3LCAweDc4OWI3MjMyLCAweGViM2QzNmQzLCAweGFkMDY1MWI2LCAweDY3NGJmODE5LAorICAgIDB4MjE3MDlmN2MsIDB4MjVhYmM2ZTAsIDB4NjM5MGExODUsIDB4YTlkZDA4MmEsIDB4ZWZlNjZmNGYsCisgICAgMHg3YzQwMmJhZSwgMHgzYTdiNGNjYiwgMHhmMDM2ZTU2NCwgMHhiNjBkODIwMSwgMHg5NzdkMWQ3ZCwKKyAgICAweGQxNDY3YTE4LCAweDFiMGJkM2I3LCAweDVkMzBiNGQyLCAweGNlOTZmMDMzLCAweDg4YWQ5NzU2LAorICAgIDB4NDJlMDNlZjksIDB4MDRkYjU5OWMsIDB4MGI1MGZjMWEsIDB4NGQ2YjliN2YsIDB4ODcyNjMyZDAsCisgICAgMHhjMTFkNTViNSwgMHg1MmJiMTE1NCwgMHgxNDgwNzYzMSwgMHhkZWNkZGY5ZSwgMHg5OGY2YjhmYiwKKyAgICAweGI5ODYyNzg3LCAweGZmYmQ0MGUyLCAweDM1ZjBlOTRkLCAweDczY2I4ZTI4LCAweGUwNmRjYWM5LAorICAgIDB4YTY1NmFkYWMsIDB4NmMxYjA0MDMsIDB4MmEyMDYzNjYsIDB4MmVmYjNhZmEsIDB4NjhjMDVkOWYsCisgICAgMHhhMjhkZjQzMCwgMHhlNGI2OTM1NSwgMHg3NzEwZDdiNCwgMHgzMTJiYjBkMSwgMHhmYjY2MTk3ZSwKKyAgICAweGJkNWQ3ZTFiLCAweDljMmRlMTY3LCAweGRhMTY4NjAyLCAweDEwNWIyZmFkLCAweDU2NjA0OGM4LAorICAgIDB4YzVjNjBjMjksIDB4ODNmZDZiNGMsIDB4NDliMGMyZTMsIDB4MGY4YmE1ODYsIDB4MTZhMGY4MzUsCisgICAgMHg1MDliOWY1MCwgMHg5YWQ2MzZmZiwgMHhkY2VkNTE5YSwgMHg0ZjRiMTU3YiwgMHgwOTcwNzIxZSwKKyAgICAweGMzM2RkYmIxLCAweDg1MDZiY2Q0LCAweGE0NzYyM2E4LCAweGUyNGQ0NGNkLCAweDI4MDBlZDYyLAorICAgIDB4NmUzYjhhMDcsIDB4ZmQ5ZGNlZTYsIDB4YmJhNmE5ODMsIDB4NzFlYjAwMmMsIDB4MzdkMDY3NDksCisgICAgMHgzMzBiM2VkNSwgMHg3NTMwNTliMCwgMHhiZjdkZjAxZiwgMHhmOTQ2OTc3YSwgMHg2YWUwZDM5YiwKKyAgICAweDJjZGJiNGZlLCAweGU2OTYxZDUxLCAweGEwYWQ3YTM0LCAweDgxZGRlNTQ4LCAweGM3ZTY4MjJkLAorICAgIDB4MGRhYjJiODIsIDB4NGI5MDRjZTcsIDB4ZDgzNjA4MDYsIDB4OWUwZDZmNjMsIDB4NTQ0MGM2Y2MsCisgICAgMHgxMjdiYTFhOSwgMHgxZGYwMDQyZiwgMHg1YmNiNjM0YSwgMHg5MTg2Y2FlNSwgMHhkN2JkYWQ4MCwKKyAgICAweDQ0MWJlOTYxLCAweDAyMjA4ZTA0LCAweGM4NmQyN2FiLCAweDhlNTY0MGNlLCAweGFmMjZkZmIyLAorICAgIDB4ZTkxZGI4ZDcsIDB4MjM1MDExNzgsIDB4NjU2Yjc2MWQsIDB4ZjZjZDMyZmMsIDB4YjBmNjU1OTksCisgICAgMHg3YWJiZmMzNiwgMHgzYzgwOWI1MywgMHgzODViYzJjZiwgMHg3ZTYwYTVhYSwgMHhiNDJkMGMwNSwKKyAgICAweGYyMTY2YjYwLCAweDYxYjAyZjgxLCAweDI3OGI0OGU0LCAweGVkYzZlMTRiLCAweGFiZmQ4NjJlLAorICAgIDB4OGE4ZDE5NTIsIDB4Y2NiNjdlMzcsIDB4MDZmYmQ3OTgsIDB4NDBjMGIwZmQsIDB4ZDM2NmY0MWMsCisgICAgMHg5NTVkOTM3OSwgMHg1ZjEwM2FkNiwgMHgxOTJiNWRiMywgMHgyYzQwZjE2YiwgMHg2YTdiOTYwZSwKKyAgICAweGEwMzYzZmExLCAweGU2MGQ1OGM0LCAweDc1YWIxYzI1LCAweDMzOTA3YjQwLCAweGY5ZGRkMmVmLAorICAgIDB4YmZlNmI1OGEsIDB4OWU5NjJhZjYsIDB4ZDhhZDRkOTMsIDB4MTJlMGU0M2MsIDB4NTRkYjgzNTksCisgICAgMHhjNzdkYzdiOCwgMHg4MTQ2YTBkZCwgMHg0YjBiMDk3MiwgMHgwZDMwNmUxNywgMHgwOWViMzc4YiwKKyAgICAweDRmZDA1MGVlLCAweDg1OWRmOTQxLCAweGMzYTY5ZTI0LCAweDUwMDBkYWM1LCAweDE2M2JiZGEwLAorICAgIDB4ZGM3NjE0MGYsIDB4OWE0ZDczNmEsIDB4YmIzZGVjMTYsIDB4ZmQwNjhiNzMsIDB4Mzc0YjIyZGMsCisgICAgMHg3MTcwNDViOSwgMHhlMmQ2MDE1OCwgMHhhNGVkNjYzZCwgMHg2ZWEwY2Y5MiwgMHgyODliYThmNywKKyAgICAweDI3MTAwZDcxLCAweDYxMmI2YTE0LCAweGFiNjZjM2JiLCAweGVkNWRhNGRlLCAweDdlZmJlMDNmLAorICAgIDB4MzhjMDg3NWEsIDB4ZjI4ZDJlZjUsIDB4YjRiNjQ5OTAsIDB4OTVjNmQ2ZWMsIDB4ZDNmZGIxODksCisgICAgMHgxOWIwMTgyNiwgMHg1ZjhiN2Y0MywgMHhjYzJkM2JhMiwgMHg4YTE2NWNjNywgMHg0MDViZjU2OCwKKyAgICAweDA2NjA5MjBkLCAweDAyYmJjYjkxLCAweDQ0ODBhY2Y0LCAweDhlY2QwNTViLCAweGM4ZjY2MjNlLAorICAgIDB4NWI1MDI2ZGYsIDB4MWQ2YjQxYmEsIDB4ZDcyNmU4MTUsIDB4OTExZDhmNzAsIDB4YjA2ZDEwMGMsCisgICAgMHhmNjU2Nzc2OSwgMHgzYzFiZGVjNiwgMHg3YTIwYjlhMywgMHhlOTg2ZmQ0MiwgMHhhZmJkOWEyNywKKyAgICAweDY1ZjAzMzg4LCAweDIzY2I1NGVkLCAweDNhZTAwOTVlLCAweDdjZGI2ZTNiLCAweGI2OTZjNzk0LAorICAgIDB4ZjBhZGEwZjEsIDB4NjMwYmU0MTAsIDB4MjUzMDgzNzUsIDB4ZWY3ZDJhZGEsIDB4YTk0NjRkYmYsCisgICAgMHg4ODM2ZDJjMywgMHhjZTBkYjVhNiwgMHgwNDQwMWMwOSwgMHg0MjdiN2I2YywgMHhkMWRkM2Y4ZCwKKyAgICAweDk3ZTY1OGU4LCAweDVkYWJmMTQ3LCAweDFiOTA5NjIyLCAweDFmNGJjZmJlLCAweDU5NzBhOGRiLAorICAgIDB4OTMzZDAxNzQsIDB4ZDUwNjY2MTEsIDB4NDZhMDIyZjAsIDB4MDA5YjQ1OTUsIDB4Y2FkNmVjM2EsCisgICAgMHg4Y2VkOGI1ZiwgMHhhZDlkMTQyMywgMHhlYmE2NzM0NiwgMHgyMWViZGFlOSwgMHg2N2QwYmQ4YywKKyAgICAweGY0NzZmOTZkLCAweGIyNGQ5ZTA4LCAweDc4MDAzN2E3LCAweDNlM2I1MGMyLCAweDMxYjBmNTQ0LAorICAgIDB4Nzc4YjkyMjEsIDB4YmRjNjNiOGUsIDB4ZmJmZDVjZWIsIDB4Njg1YjE4MGEsIDB4MmU2MDdmNmYsCisgICAgMHhlNDJkZDZjMCwgMHhhMjE2YjFhNSwgMHg4MzY2MmVkOSwgMHhjNTVkNDliYywgMHgwZjEwZTAxMywKKyAgICAweDQ5MmI4Nzc2LCAweGRhOGRjMzk3LCAweDljYjZhNGYyLCAweDU2ZmIwZDVkLCAweDEwYzA2YTM4LAorICAgIDB4MTQxYjMzYTQsIDB4NTIyMDU0YzEsIDB4OTg2ZGZkNmUsIDB4ZGU1NjlhMGIsIDB4NGRmMGRlZWEsCisgICAgMHgwYmNiYjk4ZiwgMHhjMTg2MTAyMCwgMHg4N2JkNzc0NSwgMHhhNmNkZTgzOSwgMHhlMGY2OGY1YywKKyAgICAweDJhYmIyNmYzLCAweDZjODA0MTk2LCAweGZmMjYwNTc3LCAweGI5MWQ2MjEyLCAweDczNTBjYmJkLAorICAgIDB4MzU2YmFjZDh9fTsKKworI2VuZGlmCisKKyNlbmRpZgorCisjaWYgTiA9PSA2CisKKyNpZiBXID09IDgKKworbG9jYWwgY29uc3Qgel9jcmNfdCBGQVIgY3JjX2JyYWlkX3RhYmxlW11bMjU2XSA9IHsKKyAgIHsweDAwMDAwMDAwLCAweDNkYjFlY2RjLCAweDdiNjNkOWI4LCAweDQ2ZDIzNTY0LCAweGY2YzdiMzcwLAorICAgIDB4Y2I3NjVmYWMsIDB4OGRhNDZhYzgsIDB4YjAxNTg2MTQsIDB4MzZmZTYwYTEsIDB4MGI0ZjhjN2QsCisgICAgMHg0ZDlkYjkxOSwgMHg3MDJjNTVjNSwgMHhjMDM5ZDNkMSwgMHhmZDg4M2YwZCwgMHhiYjVhMGE2OSwKKyAgICAweDg2ZWJlNmI1LCAweDZkZmNjMTQyLCAweDUwNGQyZDllLCAweDE2OWYxOGZhLCAweDJiMmVmNDI2LAorICAgIDB4OWIzYjcyMzIsIDB4YTY4YTllZWUsIDB4ZTA1OGFiOGEsIDB4ZGRlOTQ3NTYsIDB4NWIwMmExZTMsCisgICAgMHg2NmIzNGQzZiwgMHgyMDYxNzg1YiwgMHgxZGQwOTQ4NywgMHhhZGM1MTI5MywgMHg5MDc0ZmU0ZiwKKyAgICAweGQ2YTZjYjJiLCAweGViMTcyN2Y3LCAweGRiZjk4Mjg0LCAweGU2NDg2ZTU4LCAweGEwOWE1YjNjLAorICAgIDB4OWQyYmI3ZTAsIDB4MmQzZTMxZjQsIDB4MTA4ZmRkMjgsIDB4NTY1ZGU4NGMsIDB4NmJlYzA0OTAsCisgICAgMHhlZDA3ZTIyNSwgMHhkMGI2MGVmOSwgMHg5NjY0M2I5ZCwgMHhhYmQ1ZDc0MSwgMHgxYmMwNTE1NSwKKyAgICAweDI2NzFiZDg5LCAweDYwYTM4OGVkLCAweDVkMTI2NDMxLCAweGI2MDU0M2M2LCAweDhiYjRhZjFhLAorICAgIDB4Y2Q2NjlhN2UsIDB4ZjBkNzc2YTIsIDB4NDBjMmYwYjYsIDB4N2Q3MzFjNmEsIDB4M2JhMTI5MGUsCisgICAgMHgwNjEwYzVkMiwgMHg4MGZiMjM2NywgMHhiZDRhY2ZiYiwgMHhmYjk4ZmFkZiwgMHhjNjI5MTYwMywKKyAgICAweDc2M2M5MDE3LCAweDRiOGQ3Y2NiLCAweDBkNWY0OWFmLCAweDMwZWVhNTczLCAweDZjODIwMzQ5LAorICAgIDB4NTEzM2VmOTUsIDB4MTdlMWRhZjEsIDB4MmE1MDM2MmQsIDB4OWE0NWIwMzksIDB4YTdmNDVjZTUsCisgICAgMHhlMTI2Njk4MSwgMHhkYzk3ODU1ZCwgMHg1YTdjNjNlOCwgMHg2N2NkOGYzNCwgMHgyMTFmYmE1MCwKKyAgICAweDFjYWU1NjhjLCAweGFjYmJkMDk4LCAweDkxMGEzYzQ0LCAweGQ3ZDgwOTIwLCAweGVhNjllNWZjLAorICAgIDB4MDE3ZWMyMGIsIDB4M2NjZjJlZDcsIDB4N2ExZDFiYjMsIDB4NDdhY2Y3NmYsIDB4ZjdiOTcxN2IsCisgICAgMHhjYTA4OWRhNywgMHg4Y2RhYThjMywgMHhiMTZiNDQxZiwgMHgzNzgwYTJhYSwgMHgwYTMxNGU3NiwKKyAgICAweDRjZTM3YjEyLCAweDcxNTI5N2NlLCAweGMxNDcxMWRhLCAweGZjZjZmZDA2LCAweGJhMjRjODYyLAorICAgIDB4ODc5NTI0YmUsIDB4Yjc3YjgxY2QsIDB4OGFjYTZkMTEsIDB4Y2MxODU4NzUsIDB4ZjFhOWI0YTksCisgICAgMHg0MWJjMzJiZCwgMHg3YzBkZGU2MSwgMHgzYWRmZWIwNSwgMHgwNzZlMDdkOSwgMHg4MTg1ZTE2YywKKyAgICAweGJjMzQwZGIwLCAweGZhZTYzOGQ0LCAweGM3NTdkNDA4LCAweDc3NDI1MjFjLCAweDRhZjNiZWMwLAorICAgIDB4MGMyMThiYTQsIDB4MzE5MDY3NzgsIDB4ZGE4NzQwOGYsIDB4ZTczNmFjNTMsIDB4YTFlNDk5MzcsCisgICAgMHg5YzU1NzVlYiwgMHgyYzQwZjNmZiwgMHgxMWYxMWYyMywgMHg1NzIzMmE0NywgMHg2YTkyYzY5YiwKKyAgICAweGVjNzkyMDJlLCAweGQxYzhjY2YyLCAweDk3MWFmOTk2LCAweGFhYWIxNTRhLCAweDFhYmU5MzVlLAorICAgIDB4MjcwZjdmODIsIDB4NjFkZDRhZTYsIDB4NWM2Y2E2M2EsIDB4ZDkwNDA2OTIsIDB4ZTRiNWVhNGUsCisgICAgMHhhMjY3ZGYyYSwgMHg5ZmQ2MzNmNiwgMHgyZmMzYjVlMiwgMHgxMjcyNTkzZSwgMHg1NGEwNmM1YSwKKyAgICAweDY5MTE4MDg2LCAweGVmZmE2NjMzLCAweGQyNGI4YWVmLCAweDk0OTliZjhiLCAweGE5Mjg1MzU3LAorICAgIDB4MTkzZGQ1NDMsIDB4MjQ4YzM5OWYsIDB4NjI1ZTBjZmIsIDB4NWZlZmUwMjcsIDB4YjRmOGM3ZDAsCisgICAgMHg4OTQ5MmIwYywgMHhjZjliMWU2OCwgMHhmMjJhZjJiNCwgMHg0MjNmNzRhMCwgMHg3ZjhlOTg3YywKKyAgICAweDM5NWNhZDE4LCAweDA0ZWQ0MWM0LCAweDgyMDZhNzcxLCAweGJmYjc0YmFkLCAweGY5NjU3ZWM5LAorICAgIDB4YzRkNDkyMTUsIDB4NzRjMTE0MDEsIDB4NDk3MGY4ZGQsIDB4MGZhMmNkYjksIDB4MzIxMzIxNjUsCisgICAgMHgwMmZkODQxNiwgMHgzZjRjNjhjYSwgMHg3OTllNWRhZSwgMHg0NDJmYjE3MiwgMHhmNDNhMzc2NiwKKyAgICAweGM5OGJkYmJhLCAweDhmNTllZWRlLCAweGIyZTgwMjAyLCAweDM0MDNlNGI3LCAweDA5YjIwODZiLAorICAgIDB4NGY2MDNkMGYsIDB4NzJkMWQxZDMsIDB4YzJjNDU3YzcsIDB4ZmY3NWJiMWIsIDB4YjlhNzhlN2YsCisgICAgMHg4NDE2NjJhMywgMHg2ZjAxNDU1NCwgMHg1MmIwYTk4OCwgMHgxNDYyOWNlYywgMHgyOWQzNzAzMCwKKyAgICAweDk5YzZmNjI0LCAweGE0NzcxYWY4LCAweGUyYTUyZjljLCAweGRmMTRjMzQwLCAweDU5ZmYyNWY1LAorICAgIDB4NjQ0ZWM5MjksIDB4MjI5Y2ZjNGQsIDB4MWYyZDEwOTEsIDB4YWYzODk2ODUsIDB4OTI4OTdhNTksCisgICAgMHhkNDViNGYzZCwgMHhlOWVhYTNlMSwgMHhiNTg2MDVkYiwgMHg4ODM3ZTkwNywgMHhjZWU1ZGM2MywKKyAgICAweGYzNTQzMGJmLCAweDQzNDFiNmFiLCAweDdlZjA1YTc3LCAweDM4MjI2ZjEzLCAweDA1OTM4M2NmLAorICAgIDB4ODM3ODY1N2EsIDB4YmVjOTg5YTYsIDB4ZjgxYmJjYzIsIDB4YzVhYTUwMWUsIDB4NzViZmQ2MGEsCisgICAgMHg0ODBlM2FkNiwgMHgwZWRjMGZiMiwgMHgzMzZkZTM2ZSwgMHhkODdhYzQ5OSwgMHhlNWNiMjg0NSwKKyAgICAweGEzMTkxZDIxLCAweDllYThmMWZkLCAweDJlYmQ3N2U5LCAweDEzMGM5YjM1LCAweDU1ZGVhZTUxLAorICAgIDB4Njg2ZjQyOGQsIDB4ZWU4NGE0MzgsIDB4ZDMzNTQ4ZTQsIDB4OTVlNzdkODAsIDB4YTg1NjkxNWMsCisgICAgMHgxODQzMTc0OCwgMHgyNWYyZmI5NCwgMHg2MzIwY2VmMCwgMHg1ZTkxMjIyYywgMHg2ZTdmODc1ZiwKKyAgICAweDUzY2U2YjgzLCAweDE1MWM1ZWU3LCAweDI4YWRiMjNiLCAweDk4YjgzNDJmLCAweGE1MDlkOGYzLAorICAgIDB4ZTNkYmVkOTcsIDB4ZGU2YTAxNGIsIDB4NTg4MWU3ZmUsIDB4NjUzMDBiMjIsIDB4MjNlMjNlNDYsCisgICAgMHgxZTUzZDI5YSwgMHhhZTQ2NTQ4ZSwgMHg5M2Y3Yjg1MiwgMHhkNTI1OGQzNiwgMHhlODk0NjFlYSwKKyAgICAweDAzODM0NjFkLCAweDNlMzJhYWMxLCAweDc4ZTA5ZmE1LCAweDQ1NTE3Mzc5LCAweGY1NDRmNTZkLAorICAgIDB4YzhmNTE5YjEsIDB4OGUyNzJjZDUsIDB4YjM5NmMwMDksIDB4MzU3ZDI2YmMsIDB4MDhjY2NhNjAsCisgICAgMHg0ZTFlZmYwNCwgMHg3M2FmMTNkOCwgMHhjM2JhOTVjYywgMHhmZTBiNzkxMCwgMHhiOGQ5NGM3NCwKKyAgICAweDg1NjhhMGE4fSwKKyAgIHsweDAwMDAwMDAwLCAweDY5NzkwYjY1LCAweGQyZjIxNmNhLCAweGJiOGIxZGFmLCAweDdlOTUyYmQ1LAorICAgIDB4MTdlYzIwYjAsIDB4YWM2NzNkMWYsIDB4YzUxZTM2N2EsIDB4ZmQyYTU3YWEsIDB4OTQ1MzVjY2YsCisgICAgMHgyZmQ4NDE2MCwgMHg0NmExNGEwNSwgMHg4M2JmN2M3ZiwgMHhlYWM2NzcxYSwgMHg1MTRkNmFiNSwKKyAgICAweDM4MzQ2MWQwLCAweDIxMjVhOTE1LCAweDQ4NWNhMjcwLCAweGYzZDdiZmRmLCAweDlhYWViNGJhLAorICAgIDB4NWZiMDgyYzAsIDB4MzZjOTg5YTUsIDB4OGQ0Mjk0MGEsIDB4ZTQzYjlmNmYsIDB4ZGMwZmZlYmYsCisgICAgMHhiNTc2ZjVkYSwgMHgwZWZkZTg3NSwgMHg2Nzg0ZTMxMCwgMHhhMjlhZDU2YSwgMHhjYmUzZGUwZiwKKyAgICAweDcwNjhjM2EwLCAweDE5MTFjOGM1LCAweDQyNGI1MjJhLCAweDJiMzI1OTRmLCAweDkwYjk0NGUwLAorICAgIDB4ZjljMDRmODUsIDB4M2NkZTc5ZmYsIDB4NTVhNzcyOWEsIDB4ZWUyYzZmMzUsIDB4ODc1NTY0NTAsCisgICAgMHhiZjYxMDU4MCwgMHhkNjE4MGVlNSwgMHg2ZDkzMTM0YSwgMHgwNGVhMTgyZiwgMHhjMWY0MmU1NSwKKyAgICAweGE4OGQyNTMwLCAweDEzMDYzODlmLCAweDdhN2YzM2ZhLCAweDYzNmVmYjNmLCAweDBhMTdmMDVhLAorICAgIDB4YjE5Y2VkZjUsIDB4ZDhlNWU2OTAsIDB4MWRmYmQwZWEsIDB4NzQ4MmRiOGYsIDB4Y2YwOWM2MjAsCisgICAgMHhhNjcwY2Q0NSwgMHg5ZTQ0YWM5NSwgMHhmNzNkYTdmMCwgMHg0Y2I2YmE1ZiwgMHgyNWNmYjEzYSwKKyAgICAweGUwZDE4NzQwLCAweDg5YTg4YzI1LCAweDMyMjM5MThhLCAweDViNWE5YWVmLCAweDg0OTZhNDU0LAorICAgIDB4ZWRlZmFmMzEsIDB4NTY2NGIyOWUsIDB4M2YxZGI5ZmIsIDB4ZmEwMzhmODEsIDB4OTM3YTg0ZTQsCisgICAgMHgyOGYxOTk0YiwgMHg0MTg4OTIyZSwgMHg3OWJjZjNmZSwgMHgxMGM1Zjg5YiwgMHhhYjRlZTUzNCwKKyAgICAweGMyMzdlZTUxLCAweDA3MjlkODJiLCAweDZlNTBkMzRlLCAweGQ1ZGJjZWUxLCAweGJjYTJjNTg0LAorICAgIDB4YTViMzBkNDEsIDB4Y2NjYTA2MjQsIDB4Nzc0MTFiOGIsIDB4MWUzODEwZWUsIDB4ZGIyNjI2OTQsCisgICAgMHhiMjVmMmRmMSwgMHgwOWQ0MzA1ZSwgMHg2MGFkM2IzYiwgMHg1ODk5NWFlYiwgMHgzMWUwNTE4ZSwKKyAgICAweDhhNmI0YzIxLCAweGUzMTI0NzQ0LCAweDI2MGM3MTNlLCAweDRmNzU3YTViLCAweGY0ZmU2N2Y0LAorICAgIDB4OWQ4NzZjOTEsIDB4YzZkZGY2N2UsIDB4YWZhNGZkMWIsIDB4MTQyZmUwYjQsIDB4N2Q1NmViZDEsCisgICAgMHhiODQ4ZGRhYiwgMHhkMTMxZDZjZSwgMHg2YWJhY2I2MSwgMHgwM2MzYzAwNCwgMHgzYmY3YTFkNCwKKyAgICAweDUyOGVhYWIxLCAweGU5MDViNzFlLCAweDgwN2NiYzdiLCAweDQ1NjI4YTAxLCAweDJjMWI4MTY0LAorICAgIDB4OTc5MDljY2IsIDB4ZmVlOTk3YWUsIDB4ZTdmODVmNmIsIDB4OGU4MTU0MGUsIDB4MzUwYTQ5YTEsCisgICAgMHg1YzczNDJjNCwgMHg5OTZkNzRiZSwgMHhmMDE0N2ZkYiwgMHg0YjlmNjI3NCwgMHgyMmU2NjkxMSwKKyAgICAweDFhZDIwOGMxLCAweDczYWIwM2E0LCAweGM4MjAxZTBiLCAweGExNTkxNTZlLCAweDY0NDcyMzE0LAorICAgIDB4MGQzZTI4NzEsIDB4YjZiNTM1ZGUsIDB4ZGZjYzNlYmIsIDB4ZDI1YzRlZTksIDB4YmIyNTQ1OGMsCisgICAgMHgwMGFlNTgyMywgMHg2OWQ3NTM0NiwgMHhhY2M5NjUzYywgMHhjNWIwNmU1OSwgMHg3ZTNiNzNmNiwKKyAgICAweDE3NDI3ODkzLCAweDJmNzYxOTQzLCAweDQ2MGYxMjI2LCAweGZkODQwZjg5LCAweDk0ZmQwNGVjLAorICAgIDB4NTFlMzMyOTYsIDB4Mzg5YTM5ZjMsIDB4ODMxMTI0NWMsIDB4ZWE2ODJmMzksIDB4ZjM3OWU3ZmMsCisgICAgMHg5YTAwZWM5OSwgMHgyMThiZjEzNiwgMHg0OGYyZmE1MywgMHg4ZGVjY2MyOSwgMHhlNDk1Yzc0YywKKyAgICAweDVmMWVkYWUzLCAweDM2NjdkMTg2LCAweDBlNTNiMDU2LCAweDY3MmFiYjMzLCAweGRjYTFhNjljLAorICAgIDB4YjVkOGFkZjksIDB4NzBjNjliODMsIDB4MTliZjkwZTYsIDB4YTIzNDhkNDksIDB4Y2I0ZDg2MmMsCisgICAgMHg5MDE3MWNjMywgMHhmOTZlMTdhNiwgMHg0MmU1MGEwOSwgMHgyYjljMDE2YywgMHhlZTgyMzcxNiwKKyAgICAweDg3ZmIzYzczLCAweDNjNzAyMWRjLCAweDU1MDkyYWI5LCAweDZkM2Q0YjY5LCAweDA0NDQ0MDBjLAorICAgIDB4YmZjZjVkYTMsIDB4ZDZiNjU2YzYsIDB4MTNhODYwYmMsIDB4N2FkMTZiZDksIDB4YzE1YTc2NzYsCisgICAgMHhhODIzN2QxMywgMHhiMTMyYjVkNiwgMHhkODRiYmViMywgMHg2M2MwYTMxYywgMHgwYWI5YTg3OSwKKyAgICAweGNmYTc5ZTAzLCAweGE2ZGU5NTY2LCAweDFkNTU4OGM5LCAweDc0MmM4M2FjLCAweDRjMThlMjdjLAorICAgIDB4MjU2MWU5MTksIDB4OWVlYWY0YjYsIDB4Zjc5M2ZmZDMsIDB4MzI4ZGM5YTksIDB4NWJmNGMyY2MsCisgICAgMHhlMDdmZGY2MywgMHg4OTA2ZDQwNiwgMHg1NmNhZWFiZCwgMHgzZmIzZTFkOCwgMHg4NDM4ZmM3NywKKyAgICAweGVkNDFmNzEyLCAweDI4NWZjMTY4LCAweDQxMjZjYTBkLCAweGZhYWRkN2EyLCAweDkzZDRkY2M3LAorICAgIDB4YWJlMGJkMTcsIDB4YzI5OWI2NzIsIDB4NzkxMmFiZGQsIDB4MTA2YmEwYjgsIDB4ZDU3NTk2YzIsCisgICAgMHhiYzBjOWRhNywgMHgwNzg3ODAwOCwgMHg2ZWZlOGI2ZCwgMHg3N2VmNDNhOCwgMHgxZTk2NDhjZCwKKyAgICAweGE1MWQ1NTYyLCAweGNjNjQ1ZTA3LCAweDA5N2E2ODdkLCAweDYwMDM2MzE4LCAweGRiODg3ZWI3LAorICAgIDB4YjJmMTc1ZDIsIDB4OGFjNTE0MDIsIDB4ZTNiYzFmNjcsIDB4NTgzNzAyYzgsIDB4MzE0ZTA5YWQsCisgICAgMHhmNDUwM2ZkNywgMHg5ZDI5MzRiMiwgMHgyNmEyMjkxZCwgMHg0ZmRiMjI3OCwgMHgxNDgxYjg5NywKKyAgICAweDdkZjhiM2YyLCAweGM2NzNhZTVkLCAweGFmMGFhNTM4LCAweDZhMTQ5MzQyLCAweDAzNmQ5ODI3LAorICAgIDB4YjhlNjg1ODgsIDB4ZDE5ZjhlZWQsIDB4ZTlhYmVmM2QsIDB4ODBkMmU0NTgsIDB4M2I1OWY5ZjcsCisgICAgMHg1MjIwZjI5MiwgMHg5NzNlYzRlOCwgMHhmZTQ3Y2Y4ZCwgMHg0NWNjZDIyMiwgMHgyY2I1ZDk0NywKKyAgICAweDM1YTQxMTgyLCAweDVjZGQxYWU3LCAweGU3NTYwNzQ4LCAweDhlMmYwYzJkLCAweDRiMzEzYTU3LAorICAgIDB4MjI0ODMxMzIsIDB4OTljMzJjOWQsIDB4ZjBiYTI3ZjgsIDB4Yzg4ZTQ2MjgsIDB4YTFmNzRkNGQsCisgICAgMHgxYTdjNTBlMiwgMHg3MzA1NWI4NywgMHhiNjFiNmRmZCwgMHhkZjYyNjY5OCwgMHg2NGU5N2IzNywKKyAgICAweDBkOTA3MDUyfSwKKyAgIHsweDAwMDAwMDAwLCAweDdmYzk5YjkzLCAweGZmOTMzNzI2LCAweDgwNWFhY2I1LCAweDI0NTc2ODBkLAorICAgIDB4NWI5ZWYzOWUsIDB4ZGJjNDVmMmIsIDB4YTQwZGM0YjgsIDB4NDhhZWQwMWEsIDB4Mzc2NzRiODksCisgICAgMHhiNzNkZTczYywgMHhjOGY0N2NhZiwgMHg2Y2Y5YjgxNywgMHgxMzMwMjM4NCwgMHg5MzZhOGYzMSwKKyAgICAweGVjYTMxNGEyLCAweDkxNWRhMDM0LCAweGVlOTQzYmE3LCAweDZlY2U5NzEyLCAweDExMDcwYzgxLAorICAgIDB4YjUwYWM4MzksIDB4Y2FjMzUzYWEsIDB4NGE5OWZmMWYsIDB4MzU1MDY0OGMsIDB4ZDlmMzcwMmUsCisgICAgMHhhNjNhZWJiZCwgMHgyNjYwNDcwOCwgMHg1OWE5ZGM5YiwgMHhmZGE0MTgyMywgMHg4MjZkODNiMCwKKyAgICAweDAyMzcyZjA1LCAweDdkZmViNDk2LCAweGY5Y2E0NjI5LCAweDg2MDNkZGJhLCAweDA2NTk3MTBmLAorICAgIDB4Nzk5MGVhOWMsIDB4ZGQ5ZDJlMjQsIDB4YTI1NGI1YjcsIDB4MjIwZTE5MDIsIDB4NWRjNzgyOTEsCisgICAgMHhiMTY0OTYzMywgMHhjZWFkMGRhMCwgMHg0ZWY3YTExNSwgMHgzMTNlM2E4NiwgMHg5NTMzZmUzZSwKKyAgICAweGVhZmE2NWFkLCAweDZhYTBjOTE4LCAweDE1Njk1MjhiLCAweDY4OTdlNjFkLCAweDE3NWU3ZDhlLAorICAgIDB4OTcwNGQxM2IsIDB4ZThjZDRhYTgsIDB4NGNjMDhlMTAsIDB4MzMwOTE1ODMsIDB4YjM1M2I5MzYsCisgICAgMHhjYzlhMjJhNSwgMHgyMDM5MzYwNywgMHg1ZmYwYWQ5NCwgMHhkZmFhMDEyMSwgMHhhMDYzOWFiMiwKKyAgICAweDA0NmU1ZTBhLCAweDdiYTdjNTk5LCAweGZiZmQ2OTJjLCAweDg0MzRmMmJmLCAweDI4ZTU4YTEzLAorICAgIDB4NTcyYzExODAsIDB4ZDc3NmJkMzUsIDB4YThiZjI2YTYsIDB4MGNiMmUyMWUsIDB4NzM3Yjc5OGQsCisgICAgMHhmMzIxZDUzOCwgMHg4Y2U4NGVhYiwgMHg2MDRiNWEwOSwgMHgxZjgyYzE5YSwgMHg5ZmQ4NmQyZiwKKyAgICAweGUwMTFmNmJjLCAweDQ0MWMzMjA0LCAweDNiZDVhOTk3LCAweGJiOGYwNTIyLCAweGM0NDY5ZWIxLAorICAgIDB4YjliODJhMjcsIDB4YzY3MWIxYjQsIDB4NDYyYjFkMDEsIDB4MzllMjg2OTIsIDB4OWRlZjQyMmEsCisgICAgMHhlMjI2ZDliOSwgMHg2MjdjNzUwYywgMHgxZGI1ZWU5ZiwgMHhmMTE2ZmEzZCwgMHg4ZWRmNjFhZSwKKyAgICAweDBlODVjZDFiLCAweDcxNGM1Njg4LCAweGQ1NDE5MjMwLCAweGFhODgwOWEzLCAweDJhZDJhNTE2LAorICAgIDB4NTUxYjNlODUsIDB4ZDEyZmNjM2EsIDB4YWVlNjU3YTksIDB4MmViY2ZiMWMsIDB4NTE3NTYwOGYsCisgICAgMHhmNTc4YTQzNywgMHg4YWIxM2ZhNCwgMHgwYWViOTMxMSwgMHg3NTIyMDg4MiwgMHg5OTgxMWMyMCwKKyAgICAweGU2NDg4N2IzLCAweDY2MTIyYjA2LCAweDE5ZGJiMDk1LCAweGJkZDY3NDJkLCAweGMyMWZlZmJlLAorICAgIDB4NDI0NTQzMGIsIDB4M2Q4Y2Q4OTgsIDB4NDA3MjZjMGUsIDB4M2ZiYmY3OWQsIDB4YmZlMTViMjgsCisgICAgMHhjMDI4YzBiYiwgMHg2NDI1MDQwMywgMHgxYmVjOWY5MCwgMHg5YmI2MzMyNSwgMHhlNDdmYThiNiwKKyAgICAweDA4ZGNiYzE0LCAweDc3MTUyNzg3LCAweGY3NGY4YjMyLCAweDg4ODYxMGExLCAweDJjOGJkNDE5LAorICAgIDB4NTM0MjRmOGEsIDB4ZDMxOGUzM2YsIDB4YWNkMTc4YWMsIDB4NTFjYjE0MjYsIDB4MmUwMjhmYjUsCisgICAgMHhhZTU4MjMwMCwgMHhkMTkxYjg5MywgMHg3NTljN2MyYiwgMHgwYTU1ZTdiOCwgMHg4YTBmNGIwZCwKKyAgICAweGY1YzZkMDllLCAweDE5NjVjNDNjLCAweDY2YWM1ZmFmLCAweGU2ZjZmMzFhLCAweDk5M2Y2ODg5LAorICAgIDB4M2QzMmFjMzEsIDB4NDJmYjM3YTIsIDB4YzJhMTliMTcsIDB4YmQ2ODAwODQsIDB4YzA5NmI0MTIsCisgICAgMHhiZjVmMmY4MSwgMHgzZjA1ODMzNCwgMHg0MGNjMThhNywgMHhlNGMxZGMxZiwgMHg5YjA4NDc4YywKKyAgICAweDFiNTJlYjM5LCAweDY0OWI3MGFhLCAweDg4Mzg2NDA4LCAweGY3ZjFmZjliLCAweDc3YWI1MzJlLAorICAgIDB4MDg2MmM4YmQsIDB4YWM2ZjBjMDUsIDB4ZDNhNjk3OTYsIDB4NTNmYzNiMjMsIDB4MmMzNWEwYjAsCisgICAgMHhhODAxNTIwZiwgMHhkN2M4Yzk5YywgMHg1NzkyNjUyOSwgMHgyODViZmViYSwgMHg4YzU2M2EwMiwKKyAgICAweGYzOWZhMTkxLCAweDczYzUwZDI0LCAweDBjMGM5NmI3LCAweGUwYWY4MjE1LCAweDlmNjYxOTg2LAorICAgIDB4MWYzY2I1MzMsIDB4NjBmNTJlYTAsIDB4YzRmOGVhMTgsIDB4YmIzMTcxOGIsIDB4M2I2YmRkM2UsCisgICAgMHg0NGEyNDZhZCwgMHgzOTVjZjIzYiwgMHg0Njk1NjlhOCwgMHhjNmNmYzUxZCwgMHhiOTA2NWU4ZSwKKyAgICAweDFkMGI5YTM2LCAweDYyYzIwMWE1LCAweGUyOThhZDEwLCAweDlkNTEzNjgzLCAweDcxZjIyMjIxLAorICAgIDB4MGUzYmI5YjIsIDB4OGU2MTE1MDcsIDB4ZjFhODhlOTQsIDB4NTVhNTRhMmMsIDB4MmE2Y2QxYmYsCisgICAgMHhhYTM2N2QwYSwgMHhkNWZmZTY5OSwgMHg3OTJlOWUzNSwgMHgwNmU3MDVhNiwgMHg4NmJkYTkxMywKKyAgICAweGY5NzQzMjgwLCAweDVkNzlmNjM4LCAweDIyYjA2ZGFiLCAweGEyZWFjMTFlLCAweGRkMjM1YThkLAorICAgIDB4MzE4MDRlMmYsIDB4NGU0OWQ1YmMsIDB4Y2UxMzc5MDksIDB4YjFkYWUyOWEsIDB4MTVkNzI2MjIsCisgICAgMHg2YTFlYmRiMSwgMHhlYTQ0MTEwNCwgMHg5NThkOGE5NywgMHhlODczM2UwMSwgMHg5N2JhYTU5MiwKKyAgICAweDE3ZTAwOTI3LCAweDY4Mjk5MmI0LCAweGNjMjQ1NjBjLCAweGIzZWRjZDlmLCAweDMzYjc2MTJhLAorICAgIDB4NGM3ZWZhYjksIDB4YTBkZGVlMWIsIDB4ZGYxNDc1ODgsIDB4NWY0ZWQ5M2QsIDB4MjA4NzQyYWUsCisgICAgMHg4NDhhODYxNiwgMHhmYjQzMWQ4NSwgMHg3YjE5YjEzMCwgMHgwNGQwMmFhMywgMHg4MGU0ZDgxYywKKyAgICAweGZmMmQ0MzhmLCAweDdmNzdlZjNhLCAweDAwYmU3NGE5LCAweGE0YjNiMDExLCAweGRiN2EyYjgyLAorICAgIDB4NWIyMDg3MzcsIDB4MjRlOTFjYTQsIDB4Yzg0YTA4MDYsIDB4Yjc4MzkzOTUsIDB4MzdkOTNmMjAsCisgICAgMHg0ODEwYTRiMywgMHhlYzFkNjAwYiwgMHg5M2Q0ZmI5OCwgMHgxMzhlNTcyZCwgMHg2YzQ3Y2NiZSwKKyAgICAweDExYjk3ODI4LCAweDZlNzBlM2JiLCAweGVlMmE0ZjBlLCAweDkxZTNkNDlkLCAweDM1ZWUxMDI1LAorICAgIDB4NGEyNzhiYjYsIDB4Y2E3ZDI3MDMsIDB4YjViNGJjOTAsIDB4NTkxN2E4MzIsIDB4MjZkZTMzYTEsCisgICAgMHhhNjg0OWYxNCwgMHhkOTRkMDQ4NywgMHg3ZDQwYzAzZiwgMHgwMjg5NWJhYywgMHg4MmQzZjcxOSwKKyAgICAweGZkMWE2YzhhfSwKKyAgIHsweDAwMDAwMDAwLCAweGEzOTYyODRjLCAweDljNWQ1NmQ5LCAweDNmY2I3ZTk1LCAweGUzY2JhYmYzLAorICAgIDB4NDA1ZDgzYmYsIDB4N2Y5NmZkMmEsIDB4ZGMwMGQ1NjYsIDB4MWNlNjUxYTcsIDB4YmY3MDc5ZWIsCisgICAgMHg4MGJiMDc3ZSwgMHgyMzJkMmYzMiwgMHhmZjJkZmE1NCwgMHg1Y2JiZDIxOCwgMHg2MzcwYWM4ZCwKKyAgICAweGMwZTY4NGMxLCAweDM5Y2NhMzRlLCAweDlhNWE4YjAyLCAweGE1OTFmNTk3LCAweDA2MDdkZGRiLAorICAgIDB4ZGEwNzA4YmQsIDB4Nzk5MTIwZjEsIDB4NDY1YTVlNjQsIDB4ZTVjYzc2MjgsIDB4MjUyYWYyZTksCisgICAgMHg4NmJjZGFhNSwgMHhiOTc3YTQzMCwgMHgxYWUxOGM3YywgMHhjNmUxNTkxYSwgMHg2NTc3NzE1NiwKKyAgICAweDVhYmMwZmMzLCAweGY5MmEyNzhmLCAweDczOTk0NjljLCAweGQwMGY2ZWQwLCAweGVmYzQxMDQ1LAorICAgIDB4NGM1MjM4MDksIDB4OTA1MmVkNmYsIDB4MzNjNGM1MjMsIDB4MGMwZmJiYjYsIDB4YWY5OTkzZmEsCisgICAgMHg2ZjdmMTczYiwgMHhjY2U5M2Y3NywgMHhmMzIyNDFlMiwgMHg1MGI0NjlhZSwgMHg4Y2I0YmNjOCwKKyAgICAweDJmMjI5NDg0LCAweDEwZTllYTExLCAweGIzN2ZjMjVkLCAweDRhNTVlNWQyLCAweGU5YzNjZDllLAorICAgIDB4ZDYwOGIzMGIsIDB4NzU5ZTliNDcsIDB4YTk5ZTRlMjEsIDB4MGEwODY2NmQsIDB4MzVjMzE4ZjgsCisgICAgMHg5NjU1MzBiNCwgMHg1NmIzYjQ3NSwgMHhmNTI1OWMzOSwgMHhjYWVlZTJhYywgMHg2OTc4Y2FlMCwKKyAgICAweGI1NzgxZjg2LCAweDE2ZWUzN2NhLCAweDI5MjU0OTVmLCAweDhhYjM2MTEzLCAweGU3MzI4ZDM4LAorICAgIDB4NDRhNGE1NzQsIDB4N2I2ZmRiZTEsIDB4ZDhmOWYzYWQsIDB4MDRmOTI2Y2IsIDB4YTc2ZjBlODcsCisgICAgMHg5OGE0NzAxMiwgMHgzYjMyNTg1ZSwgMHhmYmQ0ZGM5ZiwgMHg1ODQyZjRkMywgMHg2Nzg5OGE0NiwKKyAgICAweGM0MWZhMjBhLCAweDE4MWY3NzZjLCAweGJiODk1ZjIwLCAweDg0NDIyMWI1LCAweDI3ZDQwOWY5LAorICAgIDB4ZGVmZTJlNzYsIDB4N2Q2ODA2M2EsIDB4NDJhMzc4YWYsIDB4ZTEzNTUwZTMsIDB4M2QzNTg1ODUsCisgICAgMHg5ZWEzYWRjOSwgMHhhMTY4ZDM1YywgMHgwMmZlZmIxMCwgMHhjMjE4N2ZkMSwgMHg2MThlNTc5ZCwKKyAgICAweDVlNDUyOTA4LCAweGZkZDMwMTQ0LCAweDIxZDNkNDIyLCAweDgyNDVmYzZlLCAweGJkOGU4MmZiLAorICAgIDB4MWUxOGFhYjcsIDB4OTRhYmNiYTQsIDB4MzczZGUzZTgsIDB4MDhmNjlkN2QsIDB4YWI2MGI1MzEsCisgICAgMHg3NzYwNjA1NywgMHhkNGY2NDgxYiwgMHhlYjNkMzY4ZSwgMHg0OGFiMWVjMiwgMHg4ODRkOWEwMywKKyAgICAweDJiZGJiMjRmLCAweDE0MTBjY2RhLCAweGI3ODZlNDk2LCAweDZiODYzMWYwLCAweGM4MTAxOWJjLAorICAgIDB4ZjdkYjY3MjksIDB4NTQ0ZDRmNjUsIDB4YWQ2NzY4ZWEsIDB4MGVmMTQwYTYsIDB4MzEzYTNlMzMsCisgICAgMHg5MmFjMTY3ZiwgMHg0ZWFjYzMxOSwgMHhlZDNhZWI1NSwgMHhkMmYxOTVjMCwgMHg3MTY3YmQ4YywKKyAgICAweGIxODEzOTRkLCAweDEyMTcxMTAxLCAweDJkZGM2Zjk0LCAweDhlNGE0N2Q4LCAweDUyNGE5MmJlLAorICAgIDB4ZjFkY2JhZjIsIDB4Y2UxN2M0NjcsIDB4NmQ4MWVjMmIsIDB4MTUxNDFjMzEsIDB4YjY4MjM0N2QsCisgICAgMHg4OTQ5NGFlOCwgMHgyYWRmNjJhNCwgMHhmNmRmYjdjMiwgMHg1NTQ5OWY4ZSwgMHg2YTgyZTExYiwKKyAgICAweGM5MTRjOTU3LCAweDA5ZjI0ZDk2LCAweGFhNjQ2NWRhLCAweDk1YWYxYjRmLCAweDM2MzkzMzAzLAorICAgIDB4ZWEzOWU2NjUsIDB4NDlhZmNlMjksIDB4NzY2NGIwYmMsIDB4ZDVmMjk4ZjAsIDB4MmNkOGJmN2YsCisgICAgMHg4ZjRlOTczMywgMHhiMDg1ZTlhNiwgMHgxMzEzYzFlYSwgMHhjZjEzMTQ4YywgMHg2Yzg1M2NjMCwKKyAgICAweDUzNGU0MjU1LCAweGYwZDg2YTE5LCAweDMwM2VlZWQ4LCAweDkzYThjNjk0LCAweGFjNjNiODAxLAorICAgIDB4MGZmNTkwNGQsIDB4ZDNmNTQ1MmIsIDB4NzA2MzZkNjcsIDB4NGZhODEzZjIsIDB4ZWMzZTNiYmUsCisgICAgMHg2NjhkNWFhZCwgMHhjNTFiNzJlMSwgMHhmYWQwMGM3NCwgMHg1OTQ2MjQzOCwgMHg4NTQ2ZjE1ZSwKKyAgICAweDI2ZDBkOTEyLCAweDE5MWJhNzg3LCAweGJhOGQ4ZmNiLCAweDdhNmIwYjBhLCAweGQ5ZmQyMzQ2LAorICAgIDB4ZTYzNjVkZDMsIDB4NDVhMDc1OWYsIDB4OTlhMGEwZjksIDB4M2EzNjg4YjUsIDB4MDVmZGY2MjAsCisgICAgMHhhNjZiZGU2YywgMHg1ZjQxZjllMywgMHhmY2Q3ZDFhZiwgMHhjMzFjYWYzYSwgMHg2MDhhODc3NiwKKyAgICAweGJjOGE1MjEwLCAweDFmMWM3YTVjLCAweDIwZDcwNGM5LCAweDgzNDEyYzg1LCAweDQzYTdhODQ0LAorICAgIDB4ZTAzMTgwMDgsIDB4ZGZmYWZlOWQsIDB4N2M2Y2Q2ZDEsIDB4YTA2YzAzYjcsIDB4MDNmYTJiZmIsCisgICAgMHgzYzMxNTU2ZSwgMHg5ZmE3N2QyMiwgMHhmMjI2OTEwOSwgMHg1MWIwYjk0NSwgMHg2ZTdiYzdkMCwKKyAgICAweGNkZWRlZjljLCAweDExZWQzYWZhLCAweGIyN2IxMmI2LCAweDhkYjA2YzIzLCAweDJlMjY0NDZmLAorICAgIDB4ZWVjMGMwYWUsIDB4NGQ1NmU4ZTIsIDB4NzI5ZDk2NzcsIDB4ZDEwYmJlM2IsIDB4MGQwYjZiNWQsCisgICAgMHhhZTlkNDMxMSwgMHg5MTU2M2Q4NCwgMHgzMmMwMTVjOCwgMHhjYmVhMzI0NywgMHg2ODdjMWEwYiwKKyAgICAweDU3Yjc2NDllLCAweGY0MjE0Y2QyLCAweDI4MjE5OWI0LCAweDhiYjdiMWY4LCAweGI0N2NjZjZkLAorICAgIDB4MTdlYWU3MjEsIDB4ZDcwYzYzZTAsIDB4NzQ5YTRiYWMsIDB4NGI1MTM1MzksIDB4ZThjNzFkNzUsCisgICAgMHgzNGM3YzgxMywgMHg5NzUxZTA1ZiwgMHhhODlhOWVjYSwgMHgwYjBjYjY4NiwgMHg4MWJmZDc5NSwKKyAgICAweDIyMjlmZmQ5LCAweDFkZTI4MTRjLCAweGJlNzRhOTAwLCAweDYyNzQ3YzY2LCAweGMxZTI1NDJhLAorICAgIDB4ZmUyOTJhYmYsIDB4NWRiZjAyZjMsIDB4OWQ1OTg2MzIsIDB4M2VjZmFlN2UsIDB4MDEwNGQwZWIsCisgICAgMHhhMjkyZjhhNywgMHg3ZTkyMmRjMSwgMHhkZDA0MDU4ZCwgMHhlMmNmN2IxOCwgMHg0MTU5NTM1NCwKKyAgICAweGI4NzM3NGRiLCAweDFiZTU1Yzk3LCAweDI0MmUyMjAyLCAweDg3YjgwYTRlLCAweDViYjhkZjI4LAorICAgIDB4ZjgyZWY3NjQsIDB4YzdlNTg5ZjEsIDB4NjQ3M2ExYmQsIDB4YTQ5NTI1N2MsIDB4MDcwMzBkMzAsCisgICAgMHgzOGM4NzNhNSwgMHg5YjVlNWJlOSwgMHg0NzVlOGU4ZiwgMHhlNGM4YTZjMywgMHhkYjAzZDg1NiwKKyAgICAweDc4OTVmMDFhfSwKKyAgIHsweDAwMDAwMDAwLCAweDJhMjgzODYyLCAweDU0NTA3MGM0LCAweDdlNzg0OGE2LCAweGE4YTBlMTg4LAorICAgIDB4ODI4OGQ5ZWEsIDB4ZmNmMDkxNGMsIDB4ZDZkOGE5MmUsIDB4OGEzMGM1NTEsIDB4YTAxOGZkMzMsCisgICAgMHhkZTYwYjU5NSwgMHhmNDQ4OGRmNywgMHgyMjkwMjRkOSwgMHgwOGI4MWNiYiwgMHg3NmMwNTQxZCwKKyAgICAweDVjZTg2YzdmLCAweGNmMTA4Y2UzLCAweGU1MzhiNDgxLCAweDliNDBmYzI3LCAweGIxNjhjNDQ1LAorICAgIDB4NjdiMDZkNmIsIDB4NGQ5ODU1MDksIDB4MzNlMDFkYWYsIDB4MTljODI1Y2QsIDB4NDUyMDQ5YjIsCisgICAgMHg2ZjA4NzFkMCwgMHgxMTcwMzk3NiwgMHgzYjU4MDExNCwgMHhlZDgwYTgzYSwgMHhjN2E4OTA1OCwKKyAgICAweGI5ZDBkOGZlLCAweDkzZjhlMDljLCAweDQ1NTAxZjg3LCAweDZmNzgyN2U1LCAweDExMDA2ZjQzLAorICAgIDB4M2IyODU3MjEsIDB4ZWRmMGZlMGYsIDB4YzdkOGM2NmQsIDB4YjlhMDhlY2IsIDB4OTM4OGI2YTksCisgICAgMHhjZjYwZGFkNiwgMHhlNTQ4ZTJiNCwgMHg5YjMwYWExMiwgMHhiMTE4OTI3MCwgMHg2N2MwM2I1ZSwKKyAgICAweDRkZTgwMzNjLCAweDMzOTA0YjlhLCAweDE5Yjg3M2Y4LCAweDhhNDA5MzY0LCAweGEwNjhhYjA2LAorICAgIDB4ZGUxMGUzYTAsIDB4ZjQzOGRiYzIsIDB4MjJlMDcyZWMsIDB4MDhjODRhOGUsIDB4NzZiMDAyMjgsCisgICAgMHg1Yzk4M2E0YSwgMHgwMDcwNTYzNSwgMHgyYTU4NmU1NywgMHg1NDIwMjZmMSwgMHg3ZTA4MWU5MywKKyAgICAweGE4ZDBiN2JkLCAweDgyZjg4ZmRmLCAweGZjODBjNzc5LCAweGQ2YThmZjFiLCAweDhhYTAzZjBlLAorICAgIDB4YTA4ODA3NmMsIDB4ZGVmMDRmY2EsIDB4ZjRkODc3YTgsIDB4MjIwMGRlODYsIDB4MDgyOGU2ZTQsCisgICAgMHg3NjUwYWU0MiwgMHg1Yzc4OTYyMCwgMHgwMDkwZmE1ZiwgMHgyYWI4YzIzZCwgMHg1NGMwOGE5YiwKKyAgICAweDdlZThiMmY5LCAweGE4MzAxYmQ3LCAweDgyMTgyM2I1LCAweGZjNjA2YjEzLCAweGQ2NDg1MzcxLAorICAgIDB4NDViMGIzZWQsIDB4NmY5ODhiOGYsIDB4MTFlMGMzMjksIDB4M2JjOGZiNGIsIDB4ZWQxMDUyNjUsCisgICAgMHhjNzM4NmEwNywgMHhiOTQwMjJhMSwgMHg5MzY4MWFjMywgMHhjZjgwNzZiYywgMHhlNWE4NGVkZSwKKyAgICAweDliZDAwNjc4LCAweGIxZjgzZTFhLCAweDY3MjA5NzM0LCAweDRkMDhhZjU2LCAweDMzNzBlN2YwLAorICAgIDB4MTk1OGRmOTIsIDB4Y2ZmMDIwODksIDB4ZTVkODE4ZWIsIDB4OWJhMDUwNGQsIDB4YjE4ODY4MmYsCisgICAgMHg2NzUwYzEwMSwgMHg0ZDc4Zjk2MywgMHgzMzAwYjFjNSwgMHgxOTI4ODlhNywgMHg0NWMwZTVkOCwKKyAgICAweDZmZThkZGJhLCAweDExOTA5NTFjLCAweDNiYjhhZDdlLCAweGVkNjAwNDUwLCAweGM3NDgzYzMyLAorICAgIDB4YjkzMDc0OTQsIDB4OTMxODRjZjYsIDB4MDBlMGFjNmEsIDB4MmFjODk0MDgsIDB4NTRiMGRjYWUsCisgICAgMHg3ZTk4ZTRjYywgMHhhODQwNGRlMiwgMHg4MjY4NzU4MCwgMHhmYzEwM2QyNiwgMHhkNjM4MDU0NCwKKyAgICAweDhhZDA2OTNiLCAweGEwZjg1MTU5LCAweGRlODAxOWZmLCAweGY0YTgyMTlkLCAweDIyNzA4OGIzLAorICAgIDB4MDg1OGIwZDEsIDB4NzYyMGY4NzcsIDB4NWMwOGMwMTUsIDB4Y2UzMTc4NWQsIDB4ZTQxOTQwM2YsCisgICAgMHg5YTYxMDg5OSwgMHhiMDQ5MzBmYiwgMHg2NjkxOTlkNSwgMHg0Y2I5YTFiNywgMHgzMmMxZTkxMSwKKyAgICAweDE4ZTlkMTczLCAweDQ0MDFiZDBjLCAweDZlMjk4NTZlLCAweDEwNTFjZGM4LCAweDNhNzlmNWFhLAorICAgIDB4ZWNhMTVjODQsIDB4YzY4OTY0ZTYsIDB4YjhmMTJjNDAsIDB4OTJkOTE0MjIsIDB4MDEyMWY0YmUsCisgICAgMHgyYjA5Y2NkYywgMHg1NTcxODQ3YSwgMHg3ZjU5YmMxOCwgMHhhOTgxMTUzNiwgMHg4M2E5MmQ1NCwKKyAgICAweGZkZDE2NWYyLCAweGQ3Zjk1ZDkwLCAweDhiMTEzMWVmLCAweGExMzkwOThkLCAweGRmNDE0MTJiLAorICAgIDB4ZjU2OTc5NDksIDB4MjNiMWQwNjcsIDB4MDk5OWU4MDUsIDB4NzdlMWEwYTMsIDB4NWRjOTk4YzEsCisgICAgMHg4YjYxNjdkYSwgMHhhMTQ5NWZiOCwgMHhkZjMxMTcxZSwgMHhmNTE5MmY3YywgMHgyM2MxODY1MiwKKyAgICAweDA5ZTliZTMwLCAweDc3OTFmNjk2LCAweDVkYjljZWY0LCAweDAxNTFhMjhiLCAweDJiNzk5YWU5LAorICAgIDB4NTUwMWQyNGYsIDB4N2YyOWVhMmQsIDB4YTlmMTQzMDMsIDB4ODNkOTdiNjEsIDB4ZmRhMTMzYzcsCisgICAgMHhkNzg5MGJhNSwgMHg0NDcxZWIzOSwgMHg2ZTU5ZDM1YiwgMHgxMDIxOWJmZCwgMHgzYTA5YTM5ZiwKKyAgICAweGVjZDEwYWIxLCAweGM2ZjkzMmQzLCAweGI4ODE3YTc1LCAweDkyYTk0MjE3LCAweGNlNDEyZTY4LAorICAgIDB4ZTQ2OTE2MGEsIDB4OWExMTVlYWMsIDB4YjAzOTY2Y2UsIDB4NjZlMWNmZTAsIDB4NGNjOWY3ODIsCisgICAgMHgzMmIxYmYyNCwgMHgxODk5ODc0NiwgMHg0NDkxNDc1MywgMHg2ZWI5N2YzMSwgMHgxMGMxMzc5NywKKyAgICAweDNhZTkwZmY1LCAweGVjMzFhNmRiLCAweGM2MTk5ZWI5LCAweGI4NjFkNjFmLCAweDkyNDllZTdkLAorICAgIDB4Y2VhMTgyMDIsIDB4ZTQ4OWJhNjAsIDB4OWFmMWYyYzYsIDB4YjBkOWNhYTQsIDB4NjYwMTYzOGEsCisgICAgMHg0YzI5NWJlOCwgMHgzMjUxMTM0ZSwgMHgxODc5MmIyYywgMHg4YjgxY2JiMCwgMHhhMWE5ZjNkMiwKKyAgICAweGRmZDFiYjc0LCAweGY1Zjk4MzE2LCAweDIzMjEyYTM4LCAweDA5MDkxMjVhLCAweDc3NzE1YWZjLAorICAgIDB4NWQ1OTYyOWUsIDB4MDFiMTBlZTEsIDB4MmI5OTM2ODMsIDB4NTVlMTdlMjUsIDB4N2ZjOTQ2NDcsCisgICAgMHhhOTExZWY2OSwgMHg4MzM5ZDcwYiwgMHhmZDQxOWZhZCwgMHhkNzY5YTdjZiwgMHgwMWMxNThkNCwKKyAgICAweDJiZTk2MGI2LCAweDU1OTEyODEwLCAweDdmYjkxMDcyLCAweGE5NjFiOTVjLCAweDgzNDk4MTNlLAorICAgIDB4ZmQzMWM5OTgsIDB4ZDcxOWYxZmEsIDB4OGJmMTlkODUsIDB4YTFkOWE1ZTcsIDB4ZGZhMWVkNDEsCisgICAgMHhmNTg5ZDUyMywgMHgyMzUxN2MwZCwgMHgwOTc5NDQ2ZiwgMHg3NzAxMGNjOSwgMHg1ZDI5MzRhYiwKKyAgICAweGNlZDFkNDM3LCAweGU0ZjllYzU1LCAweDlhODFhNGYzLCAweGIwYTk5YzkxLCAweDY2NzEzNWJmLAorICAgIDB4NGM1OTBkZGQsIDB4MzIyMTQ1N2IsIDB4MTgwOTdkMTksIDB4NDRlMTExNjYsIDB4NmVjOTI5MDQsCisgICAgMHgxMGIxNjFhMiwgMHgzYTk5NTljMCwgMHhlYzQxZjBlZSwgMHhjNjY5Yzg4YywgMHhiODExODAyYSwKKyAgICAweDkyMzliODQ4fSwKKyAgIHsweDAwMDAwMDAwLCAweDQ3MTNmNmZiLCAweDhlMjdlZGY2LCAweGM5MzQxYjBkLCAweGM3M2VkZGFkLAorICAgIDB4ODAyZDJiNTYsIDB4NDkxOTMwNWIsIDB4MGUwYWM2YTAsIDB4NTUwY2JkMWIsIDB4MTIxZjRiZTAsCisgICAgMHhkYjJiNTBlZCwgMHg5YzM4YTYxNiwgMHg5MjMyNjBiNiwgMHhkNTIxOTY0ZCwgMHgxYzE1OGQ0MCwKKyAgICAweDViMDY3YmJiLCAweGFhMTk3YTM2LCAweGVkMGE4Y2NkLCAweDI0M2U5N2MwLCAweDYzMmQ2MTNiLAorICAgIDB4NmQyN2E3OWIsIDB4MmEzNDUxNjAsIDB4ZTMwMDRhNmQsIDB4YTQxM2JjOTYsIDB4ZmYxNWM3MmQsCisgICAgMHhiODA2MzFkNiwgMHg3MTMyMmFkYiwgMHgzNjIxZGMyMCwgMHgzODJiMWE4MCwgMHg3ZjM4ZWM3YiwKKyAgICAweGI2MGNmNzc2LCAweGYxMWYwMThkLCAweDhmNDNmMjJkLCAweGM4NTAwNGQ2LCAweDAxNjQxZmRiLAorICAgIDB4NDY3N2U5MjAsIDB4NDg3ZDJmODAsIDB4MGY2ZWQ5N2IsIDB4YzY1YWMyNzYsIDB4ODE0OTM0OGQsCisgICAgMHhkYTRmNGYzNiwgMHg5ZDVjYjljZCwgMHg1NDY4YTJjMCwgMHgxMzdiNTQzYiwgMHgxZDcxOTI5YiwKKyAgICAweDVhNjI2NDYwLCAweDkzNTY3ZjZkLCAweGQ0NDU4OTk2LCAweDI1NWE4ODFiLCAweDYyNDk3ZWUwLAorICAgIDB4YWI3ZDY1ZWQsIDB4ZWM2ZTkzMTYsIDB4ZTI2NDU1YjYsIDB4YTU3N2EzNGQsIDB4NmM0M2I4NDAsCisgICAgMHgyYjUwNGViYiwgMHg3MDU2MzUwMCwgMHgzNzQ1YzNmYiwgMHhmZTcxZDhmNiwgMHhiOTYyMmUwZCwKKyAgICAweGI3NjhlOGFkLCAweGYwN2IxZTU2LCAweDM5NGYwNTViLCAweDdlNWNmM2EwLCAweGM1ZjZlMjFiLAorICAgIDB4ODJlNTE0ZTAsIDB4NGJkMTBmZWQsIDB4MGNjMmY5MTYsIDB4MDJjODNmYjYsIDB4NDVkYmM5NGQsCisgICAgMHg4Y2VmZDI0MCwgMHhjYmZjMjRiYiwgMHg5MGZhNWYwMCwgMHhkN2U5YTlmYiwgMHgxZWRkYjJmNiwKKyAgICAweDU5Y2U0NDBkLCAweDU3YzQ4MmFkLCAweDEwZDc3NDU2LCAweGQ5ZTM2ZjViLCAweDllZjA5OWEwLAorICAgIDB4NmZlZjk4MmQsIDB4MjhmYzZlZDYsIDB4ZTFjODc1ZGIsIDB4YTZkYjgzMjAsIDB4YThkMTQ1ODAsCisgICAgMHhlZmMyYjM3YiwgMHgyNmY2YTg3NiwgMHg2MWU1NWU4ZCwgMHgzYWUzMjUzNiwgMHg3ZGYwZDNjZCwKKyAgICAweGI0YzRjOGMwLCAweGYzZDczZTNiLCAweGZkZGRmODliLCAweGJhY2UwZTYwLCAweDczZmExNTZkLAorICAgIDB4MzRlOWUzOTYsIDB4NGFiNTEwMzYsIDB4MGRhNmU2Y2QsIDB4YzQ5MmZkYzAsIDB4ODM4MTBiM2IsCisgICAgMHg4ZDhiY2Q5YiwgMHhjYTk4M2I2MCwgMHgwM2FjMjA2ZCwgMHg0NGJmZDY5NiwgMHgxZmI5YWQyZCwKKyAgICAweDU4YWE1YmQ2LCAweDkxOWU0MGRiLCAweGQ2OGRiNjIwLCAweGQ4ODc3MDgwLCAweDlmOTQ4NjdiLAorICAgIDB4NTZhMDlkNzYsIDB4MTFiMzZiOGQsIDB4ZTBhYzZhMDAsIDB4YTdiZjljZmIsIDB4NmU4Yjg3ZjYsCisgICAgMHgyOTk4NzEwZCwgMHgyNzkyYjdhZCwgMHg2MDgxNDE1NiwgMHhhOWI1NWE1YiwgMHhlZWE2YWNhMCwKKyAgICAweGI1YTBkNzFiLCAweGYyYjMyMWUwLCAweDNiODczYWVkLCAweDdjOTRjYzE2LCAweDcyOWUwYWI2LAorICAgIDB4MzU4ZGZjNGQsIDB4ZmNiOWU3NDAsIDB4YmJhYTExYmIsIDB4NTA5Y2MyNzcsIDB4MTc4ZjM0OGMsCisgICAgMHhkZWJiMmY4MSwgMHg5OWE4ZDk3YSwgMHg5N2EyMWZkYSwgMHhkMGIxZTkyMSwgMHgxOTg1ZjIyYywKKyAgICAweDVlOTYwNGQ3LCAweDA1OTA3ZjZjLCAweDQyODM4OTk3LCAweDhiYjc5MjlhLCAweGNjYTQ2NDYxLAorICAgIDB4YzJhZWEyYzEsIDB4ODViZDU0M2EsIDB4NGM4OTRmMzcsIDB4MGI5YWI5Y2MsIDB4ZmE4NWI4NDEsCisgICAgMHhiZDk2NGViYSwgMHg3NGEyNTViNywgMHgzM2IxYTM0YywgMHgzZGJiNjVlYywgMHg3YWE4OTMxNywKKyAgICAweGIzOWM4ODFhLCAweGY0OGY3ZWUxLCAweGFmODkwNTVhLCAweGU4OWFmM2ExLCAweDIxYWVlOGFjLAorICAgIDB4NjZiZDFlNTcsIDB4NjhiN2Q4ZjcsIDB4MmZhNDJlMGMsIDB4ZTY5MDM1MDEsIDB4YTE4M2MzZmEsCisgICAgMHhkZmRmMzA1YSwgMHg5OGNjYzZhMSwgMHg1MWY4ZGRhYywgMHgxNmViMmI1NywgMHgxOGUxZWRmNywKKyAgICAweDVmZjIxYjBjLCAweDk2YzYwMDAxLCAweGQxZDVmNmZhLCAweDhhZDM4ZDQxLCAweGNkYzA3YmJhLAorICAgIDB4MDRmNDYwYjcsIDB4NDNlNzk2NGMsIDB4NGRlZDUwZWMsIDB4MGFmZWE2MTcsIDB4YzNjYWJkMWEsCisgICAgMHg4NGQ5NGJlMSwgMHg3NWM2NGE2YywgMHgzMmQ1YmM5NywgMHhmYmUxYTc5YSwgMHhiY2YyNTE2MSwKKyAgICAweGIyZjg5N2MxLCAweGY1ZWI2MTNhLCAweDNjZGY3YTM3LCAweDdiY2M4Y2NjLCAweDIwY2FmNzc3LAorICAgIDB4NjdkOTAxOGMsIDB4YWVlZDFhODEsIDB4ZTlmZWVjN2EsIDB4ZTdmNDJhZGEsIDB4YTBlN2RjMjEsCisgICAgMHg2OWQzYzcyYywgMHgyZWMwMzFkNywgMHg5NTZhMjA2YywgMHhkMjc5ZDY5NywgMHgxYjRkY2Q5YSwKKyAgICAweDVjNWUzYjYxLCAweDUyNTRmZGMxLCAweDE1NDcwYjNhLCAweGRjNzMxMDM3LCAweDliNjBlNmNjLAorICAgIDB4YzA2NjlkNzcsIDB4ODc3NTZiOGMsIDB4NGU0MTcwODEsIDB4MDk1Mjg2N2EsIDB4MDc1ODQwZGEsCisgICAgMHg0MDRiYjYyMSwgMHg4OTdmYWQyYywgMHhjZTZjNWJkNywgMHgzZjczNWE1YSwgMHg3ODYwYWNhMSwKKyAgICAweGIxNTRiN2FjLCAweGY2NDc0MTU3LCAweGY4NGQ4N2Y3LCAweGJmNWU3MTBjLCAweDc2NmE2YTAxLAorICAgIDB4MzE3OTljZmEsIDB4NmE3ZmU3NDEsIDB4MmQ2YzExYmEsIDB4ZTQ1ODBhYjcsIDB4YTM0YmZjNGMsCisgICAgMHhhZDQxM2FlYywgMHhlYTUyY2MxNywgMHgyMzY2ZDcxYSwgMHg2NDc1MjFlMSwgMHgxYTI5ZDI0MSwKKyAgICAweDVkM2EyNGJhLCAweDk0MGUzZmI3LCAweGQzMWRjOTRjLCAweGRkMTcwZmVjLCAweDlhMDRmOTE3LAorICAgIDB4NTMzMGUyMWEsIDB4MTQyMzE0ZTEsIDB4NGYyNTZmNWEsIDB4MDgzNjk5YTEsIDB4YzEwMjgyYWMsCisgICAgMHg4NjExNzQ1NywgMHg4ODFiYjJmNywgMHhjZjA4NDQwYywgMHgwNjNjNWYwMSwgMHg0MTJmYTlmYSwKKyAgICAweGIwMzBhODc3LCAweGY3MjM1ZThjLCAweDNlMTc0NTgxLCAweDc5MDRiMzdhLCAweDc3MGU3NWRhLAorICAgIDB4MzAxZDgzMjEsIDB4ZjkyOTk4MmMsIDB4YmUzYTZlZDcsIDB4ZTUzYzE1NmMsIDB4YTIyZmUzOTcsCisgICAgMHg2YjFiZjg5YSwgMHgyYzA4MGU2MSwgMHgyMjAyYzhjMSwgMHg2NTExM2UzYSwgMHhhYzI1MjUzNywKKyAgICAweGViMzZkM2NjfSwKKyAgIHsweDAwMDAwMDAwLCAweGExMzk4NGVlLCAweDk5MDIwZjlkLCAweDM4M2I4YjczLCAweGU5NzUxOTdiLAorICAgIDB4NDg0YzlkOTUsIDB4NzA3NzE2ZTYsIDB4ZDE0ZTkyMDgsIDB4MDk5YjM0YjcsIDB4YThhMmIwNTksCisgICAgMHg5MDk5M2IyYSwgMHgzMWEwYmZjNCwgMHhlMGVlMmRjYywgMHg0MWQ3YTkyMiwgMHg3OWVjMjI1MSwKKyAgICAweGQ4ZDVhNmJmLCAweDEzMzY2OTZlLCAweGIyMGZlZDgwLCAweDhhMzQ2NmYzLCAweDJiMGRlMjFkLAorICAgIDB4ZmE0MzcwMTUsIDB4NWI3YWY0ZmIsIDB4NjM0MTdmODgsIDB4YzI3OGZiNjYsIDB4MWFhZDVkZDksCisgICAgMHhiYjk0ZDkzNywgMHg4M2FmNTI0NCwgMHgyMjk2ZDZhYSwgMHhmM2Q4NDRhMiwgMHg1MmUxYzA0YywKKyAgICAweDZhZGE0YjNmLCAweGNiZTNjZmQxLCAweDI2NmNkMmRjLCAweDg3NTU1NjMyLCAweGJmNmVkZDQxLAorICAgIDB4MWU1NzU5YWYsIDB4Y2YxOWNiYTcsIDB4NmUyMDRmNDksIDB4NTYxYmM0M2EsIDB4ZjcyMjQwZDQsCisgICAgMHgyZmY3ZTY2YiwgMHg4ZWNlNjI4NSwgMHhiNmY1ZTlmNiwgMHgxN2NjNmQxOCwgMHhjNjgyZmYxMCwKKyAgICAweDY3YmI3YmZlLCAweDVmODBmMDhkLCAweGZlYjk3NDYzLCAweDM1NWFiYmIyLCAweDk0NjMzZjVjLAorICAgIDB4YWM1OGI0MmYsIDB4MGQ2MTMwYzEsIDB4ZGMyZmEyYzksIDB4N2QxNjI2MjcsIDB4NDUyZGFkNTQsCisgICAgMHhlNDE0MjliYSwgMHgzY2MxOGYwNSwgMHg5ZGY4MGJlYiwgMHhhNWMzODA5OCwgMHgwNGZhMDQ3NiwKKyAgICAweGQ1YjQ5NjdlLCAweDc0OGQxMjkwLCAweDRjYjY5OWUzLCAweGVkOGYxZDBkLCAweDRjZDlhNWI4LAorICAgIDB4ZWRlMDIxNTYsIDB4ZDVkYmFhMjUsIDB4NzRlMjJlY2IsIDB4YTVhY2JjYzMsIDB4MDQ5NTM4MmQsCisgICAgMHgzY2FlYjM1ZSwgMHg5ZDk3MzdiMCwgMHg0NTQyOTEwZiwgMHhlNDdiMTVlMSwgMHhkYzQwOWU5MiwKKyAgICAweDdkNzkxYTdjLCAweGFjMzc4ODc0LCAweDBkMGUwYzlhLCAweDM1MzU4N2U5LCAweDk0MGMwMzA3LAorICAgIDB4NWZlZmNjZDYsIDB4ZmVkNjQ4MzgsIDB4YzZlZGMzNGIsIDB4NjdkNDQ3YTUsIDB4YjY5YWQ1YWQsCisgICAgMHgxN2EzNTE0MywgMHgyZjk4ZGEzMCwgMHg4ZWExNWVkZSwgMHg1Njc0Zjg2MSwgMHhmNzRkN2M4ZiwKKyAgICAweGNmNzZmN2ZjLCAweDZlNGY3MzEyLCAweGJmMDFlMTFhLCAweDFlMzg2NWY0LCAweDI2MDNlZTg3LAorICAgIDB4ODczYTZhNjksIDB4NmFiNTc3NjQsIDB4Y2I4Y2YzOGEsIDB4ZjNiNzc4ZjksIDB4NTI4ZWZjMTcsCisgICAgMHg4M2MwNmUxZiwgMHgyMmY5ZWFmMSwgMHgxYWMyNjE4MiwgMHhiYmZiZTU2YywgMHg2MzJlNDNkMywKKyAgICAweGMyMTdjNzNkLCAweGZhMmM0YzRlLCAweDViMTVjOGEwLCAweDhhNWI1YWE4LCAweDJiNjJkZTQ2LAorICAgIDB4MTM1OTU1MzUsIDB4YjI2MGQxZGIsIDB4Nzk4MzFlMGEsIDB4ZDhiYTlhZTQsIDB4ZTA4MTExOTcsCisgICAgMHg0MWI4OTU3OSwgMHg5MGY2MDc3MSwgMHgzMWNmODM5ZiwgMHgwOWY0MDhlYywgMHhhOGNkOGMwMiwKKyAgICAweDcwMTgyYWJkLCAweGQxMjFhZTUzLCAweGU5MWEyNTIwLCAweDQ4MjNhMWNlLCAweDk5NmQzM2M2LAorICAgIDB4Mzg1NGI3MjgsIDB4MDA2ZjNjNWIsIDB4YTE1NmI4YjUsIDB4OTliMzRiNzAsIDB4Mzg4YWNmOWUsCisgICAgMHgwMGIxNDRlZCwgMHhhMTg4YzAwMywgMHg3MGM2NTIwYiwgMHhkMWZmZDZlNSwgMHhlOWM0NWQ5NiwKKyAgICAweDQ4ZmRkOTc4LCAweDkwMjg3ZmM3LCAweDMxMTFmYjI5LCAweDA5MmE3MDVhLCAweGE4MTNmNGI0LAorICAgIDB4Nzk1ZDY2YmMsIDB4ZDg2NGUyNTIsIDB4ZTA1ZjY5MjEsIDB4NDE2NmVkY2YsIDB4OGE4NTIyMWUsCisgICAgMHgyYmJjYTZmMCwgMHgxMzg3MmQ4MywgMHhiMmJlYTk2ZCwgMHg2M2YwM2I2NSwgMHhjMmM5YmY4YiwKKyAgICAweGZhZjIzNGY4LCAweDViY2JiMDE2LCAweDgzMWUxNmE5LCAweDIyMjc5MjQ3LCAweDFhMWMxOTM0LAorICAgIDB4YmIyNTlkZGEsIDB4NmE2YjBmZDIsIDB4Y2I1MjhiM2MsIDB4ZjM2OTAwNGYsIDB4NTI1MDg0YTEsCisgICAgMHhiZmRmOTlhYywgMHgxZWU2MWQ0MiwgMHgyNmRkOTYzMSwgMHg4N2U0MTJkZiwgMHg1NmFhODBkNywKKyAgICAweGY3OTMwNDM5LCAweGNmYTg4ZjRhLCAweDZlOTEwYmE0LCAweGI2NDRhZDFiLCAweDE3N2QyOWY1LAorICAgIDB4MmY0NmEyODYsIDB4OGU3ZjI2NjgsIDB4NWYzMWI0NjAsIDB4ZmUwODMwOGUsIDB4YzYzM2JiZmQsCisgICAgMHg2NzBhM2YxMywgMHhhY2U5ZjBjMiwgMHgwZGQwNzQyYywgMHgzNWViZmY1ZiwgMHg5NGQyN2JiMSwKKyAgICAweDQ1OWNlOWI5LCAweGU0YTU2ZDU3LCAweGRjOWVlNjI0LCAweDdkYTc2MmNhLCAweGE1NzJjNDc1LAorICAgIDB4MDQ0YjQwOWIsIDB4M2M3MGNiZTgsIDB4OWQ0OTRmMDYsIDB4NGMwN2RkMGUsIDB4ZWQzZTU5ZTAsCisgICAgMHhkNTA1ZDI5MywgMHg3NDNjNTY3ZCwgMHhkNTZhZWVjOCwgMHg3NDUzNmEyNiwgMHg0YzY4ZTE1NSwKKyAgICAweGVkNTE2NWJiLCAweDNjMWZmN2IzLCAweDlkMjY3MzVkLCAweGE1MWRmODJlLCAweDA0MjQ3Y2MwLAorICAgIDB4ZGNmMWRhN2YsIDB4N2RjODVlOTEsIDB4NDVmM2Q1ZTIsIDB4ZTRjYTUxMGMsIDB4MzU4NGMzMDQsCisgICAgMHg5NGJkNDdlYSwgMHhhYzg2Y2M5OSwgMHgwZGJmNDg3NywgMHhjNjVjODdhNiwgMHg2NzY1MDM0OCwKKyAgICAweDVmNWU4ODNiLCAweGZlNjcwY2Q1LCAweDJmMjk5ZWRkLCAweDhlMTAxYTMzLCAweGI2MmI5MTQwLAorICAgIDB4MTcxMjE1YWUsIDB4Y2ZjN2IzMTEsIDB4NmVmZTM3ZmYsIDB4NTZjNWJjOGMsIDB4ZjdmYzM4NjIsCisgICAgMHgyNmIyYWE2YSwgMHg4NzhiMmU4NCwgMHhiZmIwYTVmNywgMHgxZTg5MjExOSwgMHhmMzA2M2MxNCwKKyAgICAweDUyM2ZiOGZhLCAweDZhMDQzMzg5LCAweGNiM2RiNzY3LCAweDFhNzMyNTZmLCAweGJiNGFhMTgxLAorICAgIDB4ODM3MTJhZjIsIDB4MjI0OGFlMWMsIDB4ZmE5ZDA4YTMsIDB4NWJhNDhjNGQsIDB4NjM5ZjA3M2UsCisgICAgMHhjMmE2ODNkMCwgMHgxM2U4MTFkOCwgMHhiMmQxOTUzNiwgMHg4YWVhMWU0NSwgMHgyYmQzOWFhYiwKKyAgICAweGUwMzA1NTdhLCAweDQxMDlkMTk0LCAweDc5MzI1YWU3LCAweGQ4MGJkZTA5LCAweDA5NDU0YzAxLAorICAgIDB4YTg3Y2M4ZWYsIDB4OTA0NzQzOWMsIDB4MzE3ZWM3NzIsIDB4ZTlhYjYxY2QsIDB4NDg5MmU1MjMsCisgICAgMHg3MGE5NmU1MCwgMHhkMTkwZWFiZSwgMHgwMGRlNzhiNiwgMHhhMWU3ZmM1OCwgMHg5OWRjNzcyYiwKKyAgICAweDM4ZTVmM2M1fSwKKyAgIHsweDAwMDAwMDAwLCAweGU4MTc5MGExLCAweDBiNWUyNzAzLCAweGUzNDliN2EyLCAweDE2YmM0ZTA2LAorICAgIDB4ZmVhYmRlYTcsIDB4MWRlMjY5MDUsIDB4ZjVmNWY5YTQsIDB4MmQ3ODljMGMsIDB4YzU2ZjBjYWQsCisgICAgMHgyNjI2YmIwZiwgMHhjZTMxMmJhZSwgMHgzYmM0ZDIwYSwgMHhkM2QzNDJhYiwgMHgzMDlhZjUwOSwKKyAgICAweGQ4OGQ2NWE4LCAweDVhZjEzODE4LCAweGIyZTZhOGI5LCAweDUxYWYxZjFiLCAweGI5Yjg4ZmJhLAorICAgIDB4NGM0ZDc2MWUsIDB4YTQ1YWU2YmYsIDB4NDcxMzUxMWQsIDB4YWYwNGMxYmMsIDB4Nzc4OWE0MTQsCisgICAgMHg5ZjllMzRiNSwgMHg3Y2Q3ODMxNywgMHg5NGMwMTNiNiwgMHg2MTM1ZWExMiwgMHg4OTIyN2FiMywKKyAgICAweDZhNmJjZDExLCAweDgyN2M1ZGIwLCAweGI1ZTI3MDMwLCAweDVkZjVlMDkxLCAweGJlYmM1NzMzLAorICAgIDB4NTZhYmM3OTIsIDB4YTM1ZTNlMzYsIDB4NGI0OWFlOTcsIDB4YTgwMDE5MzUsIDB4NDAxNzg5OTQsCisgICAgMHg5ODlhZWMzYywgMHg3MDhkN2M5ZCwgMHg5M2M0Y2IzZiwgMHg3YmQzNWI5ZSwgMHg4ZTI2YTIzYSwKKyAgICAweDY2MzEzMjliLCAweDg1Nzg4NTM5LCAweDZkNmYxNTk4LCAweGVmMTM0ODI4LCAweDA3MDRkODg5LAorICAgIDB4ZTQ0ZDZmMmIsIDB4MGM1YWZmOGEsIDB4ZjlhZjA2MmUsIDB4MTFiODk2OGYsIDB4ZjJmMTIxMmQsCisgICAgMHgxYWU2YjE4YywgMHhjMjZiZDQyNCwgMHgyYTdjNDQ4NSwgMHhjOTM1ZjMyNywgMHgyMTIyNjM4NiwKKyAgICAweGQ0ZDc5YTIyLCAweDNjYzAwYTgzLCAweGRmODliZDIxLCAweDM3OWUyZDgwLCAweGIwYjVlNjIxLAorICAgIDB4NThhMjc2ODAsIDB4YmJlYmMxMjIsIDB4NTNmYzUxODMsIDB4YTYwOWE4MjcsIDB4NGUxZTM4ODYsCisgICAgMHhhZDU3OGYyNCwgMHg0NTQwMWY4NSwgMHg5ZGNkN2EyZCwgMHg3NWRhZWE4YywgMHg5NjkzNWQyZSwKKyAgICAweDdlODRjZDhmLCAweDhiNzEzNDJiLCAweDYzNjZhNDhhLCAweDgwMmYxMzI4LCAweDY4Mzg4Mzg5LAorICAgIDB4ZWE0NGRlMzksIDB4MDI1MzRlOTgsIDB4ZTExYWY5M2EsIDB4MDkwZDY5OWIsIDB4ZmNmODkwM2YsCisgICAgMHgxNGVmMDA5ZSwgMHhmN2E2YjczYywgMHgxZmIxMjc5ZCwgMHhjNzNjNDIzNSwgMHgyZjJiZDI5NCwKKyAgICAweGNjNjI2NTM2LCAweDI0NzVmNTk3LCAweGQxODAwYzMzLCAweDM5OTc5YzkyLCAweGRhZGUyYjMwLAorICAgIDB4MzJjOWJiOTEsIDB4MDU1Nzk2MTEsIDB4ZWQ0MDA2YjAsIDB4MGUwOWIxMTIsIDB4ZTYxZTIxYjMsCisgICAgMHgxM2ViZDgxNywgMHhmYmZjNDhiNiwgMHgxOGI1ZmYxNCwgMHhmMGEyNmZiNSwgMHgyODJmMGExZCwKKyAgICAweGMwMzg5YWJjLCAweDIzNzEyZDFlLCAweGNiNjZiZGJmLCAweDNlOTM0NDFiLCAweGQ2ODRkNGJhLAorICAgIDB4MzVjZDYzMTgsIDB4ZGRkYWYzYjksIDB4NWZhNmFlMDksIDB4YjdiMTNlYTgsIDB4NTRmODg5MGEsCisgICAgMHhiY2VmMTlhYiwgMHg0OTFhZTAwZiwgMHhhMTBkNzBhZSwgMHg0MjQ0YzcwYywgMHhhYTUzNTdhZCwKKyAgICAweDcyZGUzMjA1LCAweDlhYzlhMmE0LCAweDc5ODAxNTA2LCAweDkxOTc4NWE3LCAweDY0NjI3YzAzLAorICAgIDB4OGM3NWVjYTIsIDB4NmYzYzViMDAsIDB4ODcyYmNiYTEsIDB4YmExYWNhMDMsIDB4NTIwZDVhYTIsCisgICAgMHhiMTQ0ZWQwMCwgMHg1OTUzN2RhMSwgMHhhY2E2ODQwNSwgMHg0NGIxMTRhNCwgMHhhN2Y4YTMwNiwKKyAgICAweDRmZWYzM2E3LCAweDk3NjI1NjBmLCAweDdmNzVjNmFlLCAweDljM2M3MTBjLCAweDc0MmJlMWFkLAorICAgIDB4ODFkZTE4MDksIDB4NjljOTg4YTgsIDB4OGE4MDNmMGEsIDB4NjI5N2FmYWIsIDB4ZTBlYmYyMWIsCisgICAgMHgwOGZjNjJiYSwgMHhlYmI1ZDUxOCwgMHgwM2EyNDViOSwgMHhmNjU3YmMxZCwgMHgxZTQwMmNiYywKKyAgICAweGZkMDk5YjFlLCAweDE1MWUwYmJmLCAweGNkOTM2ZTE3LCAweDI1ODRmZWI2LCAweGM2Y2Q0OTE0LAorICAgIDB4MmVkYWQ5YjUsIDB4ZGIyZjIwMTEsIDB4MzMzOGIwYjAsIDB4ZDA3MTA3MTIsIDB4Mzg2Njk3YjMsCisgICAgMHgwZmY4YmEzMywgMHhlN2VmMmE5MiwgMHgwNGE2OWQzMCwgMHhlY2IxMGQ5MSwgMHgxOTQ0ZjQzNSwKKyAgICAweGYxNTM2NDk0LCAweDEyMWFkMzM2LCAweGZhMGQ0Mzk3LCAweDIyODAyNjNmLCAweGNhOTdiNjllLAorICAgIDB4MjlkZTAxM2MsIDB4YzFjOTkxOWQsIDB4MzQzYzY4MzksIDB4ZGMyYmY4OTgsIDB4M2Y2MjRmM2EsCisgICAgMHhkNzc1ZGY5YiwgMHg1NTA5ODIyYiwgMHhiZDFlMTI4YSwgMHg1ZTU3YTUyOCwgMHhiNjQwMzU4OSwKKyAgICAweDQzYjVjYzJkLCAweGFiYTI1YzhjLCAweDQ4ZWJlYjJlLCAweGEwZmM3YjhmLCAweDc4NzExZTI3LAorICAgIDB4OTA2NjhlODYsIDB4NzMyZjM5MjQsIDB4OWIzOGE5ODUsIDB4NmVjZDUwMjEsIDB4ODZkYWMwODAsCisgICAgMHg2NTkzNzcyMiwgMHg4ZDg0ZTc4MywgMHgwYWFmMmMyMiwgMHhlMmI4YmM4MywgMHgwMWYxMGIyMSwKKyAgICAweGU5ZTY5YjgwLCAweDFjMTM2MjI0LCAweGY0MDRmMjg1LCAweDE3NGQ0NTI3LCAweGZmNWFkNTg2LAorICAgIDB4MjdkN2IwMmUsIDB4Y2ZjMDIwOGYsIDB4MmM4OTk3MmQsIDB4YzQ5ZTA3OGMsIDB4MzE2YmZlMjgsCisgICAgMHhkOTdjNmU4OSwgMHgzYTM1ZDkyYiwgMHhkMjIyNDk4YSwgMHg1MDVlMTQzYSwgMHhiODQ5ODQ5YiwKKyAgICAweDViMDAzMzM5LCAweGIzMTdhMzk4LCAweDQ2ZTI1YTNjLCAweGFlZjVjYTlkLCAweDRkYmM3ZDNmLAorICAgIDB4YTVhYmVkOWUsIDB4N2QyNjg4MzYsIDB4OTUzMTE4OTcsIDB4NzY3OGFmMzUsIDB4OWU2ZjNmOTQsCisgICAgMHg2YjlhYzYzMCwgMHg4MzhkNTY5MSwgMHg2MGM0ZTEzMywgMHg4OGQzNzE5MiwgMHhiZjRkNWMxMiwKKyAgICAweDU3NWFjY2IzLCAweGI0MTM3YjExLCAweDVjMDRlYmIwLCAweGE5ZjExMjE0LCAweDQxZTY4MmI1LAorICAgIDB4YTJhZjM1MTcsIDB4NGFiOGE1YjYsIDB4OTIzNWMwMWUsIDB4N2EyMjUwYmYsIDB4OTk2YmU3MWQsCisgICAgMHg3MTdjNzdiYywgMHg4NDg5OGUxOCwgMHg2YzllMWViOSwgMHg4ZmQ3YTkxYiwgMHg2N2MwMzliYSwKKyAgICAweGU1YmM2NDBhLCAweDBkYWJmNGFiLCAweGVlZTI0MzA5LCAweDA2ZjVkM2E4LCAweGYzMDAyYTBjLAorICAgIDB4MWIxN2JhYWQsIDB4Zjg1ZTBkMGYsIDB4MTA0OTlkYWUsIDB4YzhjNGY4MDYsIDB4MjBkMzY4YTcsCisgICAgMHhjMzlhZGYwNSwgMHgyYjhkNGZhNCwgMHhkZTc4YjYwMCwgMHgzNjZmMjZhMSwgMHhkNTI2OTEwMywKKyAgICAweDNkMzEwMWEyfX07CisKK2xvY2FsIGNvbnN0IHpfd29yZF90IEZBUiBjcmNfYnJhaWRfYmlnX3RhYmxlW11bMjU2XSA9IHsKKyAgIHsweDAwMDAwMDAwMDAwMDAwMDAsIDB4YTE5MDE3ZTgwMDAwMDAwMCwgMHgwMzI3NWUwYjAwMDAwMDAwLAorICAgIDB4YTJiNzQ5ZTMwMDAwMDAwMCwgMHgwNjRlYmMxNjAwMDAwMDAwLCAweGE3ZGVhYmZlMDAwMDAwMDAsCisgICAgMHgwNTY5ZTIxZDAwMDAwMDAwLCAweGE0ZjlmNWY1MDAwMDAwMDAsIDB4MGM5Yzc4MmQwMDAwMDAwMCwKKyAgICAweGFkMGM2ZmM1MDAwMDAwMDAsIDB4MGZiYjI2MjYwMDAwMDAwMCwgMHhhZTJiMzFjZTAwMDAwMDAwLAorICAgIDB4MGFkMmM0M2IwMDAwMDAwMCwgMHhhYjQyZDNkMzAwMDAwMDAwLCAweDA5ZjU5YTMwMDAwMDAwMDAsCisgICAgMHhhODY1OGRkODAwMDAwMDAwLCAweDE4MzhmMTVhMDAwMDAwMDAsIDB4YjlhOGU2YjIwMDAwMDAwMCwKKyAgICAweDFiMWZhZjUxMDAwMDAwMDAsIDB4YmE4ZmI4YjkwMDAwMDAwMCwgMHgxZTc2NGQ0YzAwMDAwMDAwLAorICAgIDB4YmZlNjVhYTQwMDAwMDAwMCwgMHgxZDUxMTM0NzAwMDAwMDAwLCAweGJjYzEwNGFmMDAwMDAwMDAsCisgICAgMHgxNGE0ODk3NzAwMDAwMDAwLCAweGI1MzQ5ZTlmMDAwMDAwMDAsIDB4MTc4M2Q3N2MwMDAwMDAwMCwKKyAgICAweGI2MTNjMDk0MDAwMDAwMDAsIDB4MTJlYTM1NjEwMDAwMDAwMCwgMHhiMzdhMjI4OTAwMDAwMDAwLAorICAgIDB4MTFjZDZiNmEwMDAwMDAwMCwgMHhiMDVkN2M4MjAwMDAwMDAwLCAweDMwNzBlMmI1MDAwMDAwMDAsCisgICAgMHg5MWUwZjU1ZDAwMDAwMDAwLCAweDMzNTdiY2JlMDAwMDAwMDAsIDB4OTJjN2FiNTYwMDAwMDAwMCwKKyAgICAweDM2M2U1ZWEzMDAwMDAwMDAsIDB4OTdhZTQ5NGIwMDAwMDAwMCwgMHgzNTE5MDBhODAwMDAwMDAwLAorICAgIDB4OTQ4OTE3NDAwMDAwMDAwMCwgMHgzY2VjOWE5ODAwMDAwMDAwLCAweDlkN2M4ZDcwMDAwMDAwMDAsCisgICAgMHgzZmNiYzQ5MzAwMDAwMDAwLCAweDllNWJkMzdiMDAwMDAwMDAsIDB4M2FhMjI2OGUwMDAwMDAwMCwKKyAgICAweDliMzIzMTY2MDAwMDAwMDAsIDB4Mzk4NTc4ODUwMDAwMDAwMCwgMHg5ODE1NmY2ZDAwMDAwMDAwLAorICAgIDB4Mjg0ODEzZWYwMDAwMDAwMCwgMHg4OWQ4MDQwNzAwMDAwMDAwLCAweDJiNmY0ZGU0MDAwMDAwMDAsCisgICAgMHg4YWZmNWEwYzAwMDAwMDAwLCAweDJlMDZhZmY5MDAwMDAwMDAsIDB4OGY5NmI4MTEwMDAwMDAwMCwKKyAgICAweDJkMjFmMWYyMDAwMDAwMDAsIDB4OGNiMWU2MWEwMDAwMDAwMCwgMHgyNGQ0NmJjMjAwMDAwMDAwLAorICAgIDB4ODU0NDdjMmEwMDAwMDAwMCwgMHgyN2YzMzVjOTAwMDAwMDAwLCAweDg2NjMyMjIxMDAwMDAwMDAsCisgICAgMHgyMjlhZDdkNDAwMDAwMDAwLCAweDgzMGFjMDNjMDAwMDAwMDAsIDB4MjFiZDg5ZGYwMDAwMDAwMCwKKyAgICAweDgwMmQ5ZTM3MDAwMDAwMDAsIDB4MjFlNmI1YjAwMDAwMDAwMCwgMHg4MDc2YTI1ODAwMDAwMDAwLAorICAgIDB4MjJjMWViYmIwMDAwMDAwMCwgMHg4MzUxZmM1MzAwMDAwMDAwLCAweDI3YTgwOWE2MDAwMDAwMDAsCisgICAgMHg4NjM4MWU0ZTAwMDAwMDAwLCAweDI0OGY1N2FkMDAwMDAwMDAsIDB4ODUxZjQwNDUwMDAwMDAwMCwKKyAgICAweDJkN2FjZDlkMDAwMDAwMDAsIDB4OGNlYWRhNzUwMDAwMDAwMCwgMHgyZTVkOTM5NjAwMDAwMDAwLAorICAgIDB4OGZjZDg0N2UwMDAwMDAwMCwgMHgyYjM0NzE4YjAwMDAwMDAwLCAweDhhYTQ2NjYzMDAwMDAwMDAsCisgICAgMHgyODEzMmY4MDAwMDAwMDAwLCAweDg5ODMzODY4MDAwMDAwMDAsIDB4MzlkZTQ0ZWEwMDAwMDAwMCwKKyAgICAweDk4NGU1MzAyMDAwMDAwMDAsIDB4M2FmOTFhZTEwMDAwMDAwMCwgMHg5YjY5MGQwOTAwMDAwMDAwLAorICAgIDB4M2Y5MGY4ZmMwMDAwMDAwMCwgMHg5ZTAwZWYxNDAwMDAwMDAwLCAweDNjYjdhNmY3MDAwMDAwMDAsCisgICAgMHg5ZDI3YjExZjAwMDAwMDAwLCAweDM1NDIzY2M3MDAwMDAwMDAsIDB4OTRkMjJiMmYwMDAwMDAwMCwKKyAgICAweDM2NjU2MmNjMDAwMDAwMDAsIDB4OTdmNTc1MjQwMDAwMDAwMCwgMHgzMzBjODBkMTAwMDAwMDAwLAorICAgIDB4OTI5Yzk3MzkwMDAwMDAwMCwgMHgzMDJiZGVkYTAwMDAwMDAwLCAweDkxYmJjOTMyMDAwMDAwMDAsCisgICAgMHgxMTk2NTcwNTAwMDAwMDAwLCAweGIwMDY0MGVkMDAwMDAwMDAsIDB4MTJiMTA5MGUwMDAwMDAwMCwKKyAgICAweGIzMjExZWU2MDAwMDAwMDAsIDB4MTdkOGViMTMwMDAwMDAwMCwgMHhiNjQ4ZmNmYjAwMDAwMDAwLAorICAgIDB4MTRmZmI1MTgwMDAwMDAwMCwgMHhiNTZmYTJmMDAwMDAwMDAwLCAweDFkMGEyZjI4MDAwMDAwMDAsCisgICAgMHhiYzlhMzhjMDAwMDAwMDAwLCAweDFlMmQ3MTIzMDAwMDAwMDAsIDB4YmZiZDY2Y2IwMDAwMDAwMCwKKyAgICAweDFiNDQ5MzNlMDAwMDAwMDAsIDB4YmFkNDg0ZDYwMDAwMDAwMCwgMHgxODYzY2QzNTAwMDAwMDAwLAorICAgIDB4YjlmM2RhZGQwMDAwMDAwMCwgMHgwOWFlYTY1ZjAwMDAwMDAwLCAweGE4M2ViMWI3MDAwMDAwMDAsCisgICAgMHgwYTg5Zjg1NDAwMDAwMDAwLCAweGFiMTllZmJjMDAwMDAwMDAsIDB4MGZlMDFhNDkwMDAwMDAwMCwKKyAgICAweGFlNzAwZGExMDAwMDAwMDAsIDB4MGNjNzQ0NDIwMDAwMDAwMCwgMHhhZDU3NTNhYTAwMDAwMDAwLAorICAgIDB4MDUzMmRlNzIwMDAwMDAwMCwgMHhhNGEyYzk5YTAwMDAwMDAwLCAweDA2MTU4MDc5MDAwMDAwMDAsCisgICAgMHhhNzg1OTc5MTAwMDAwMDAwLCAweDAzN2M2MjY0MDAwMDAwMDAsIDB4YTJlYzc1OGMwMDAwMDAwMCwKKyAgICAweDAwNWIzYzZmMDAwMDAwMDAsIDB4YTFjYjJiODcwMDAwMDAwMCwgMHgwM2NhMWFiYTAwMDAwMDAwLAorICAgIDB4YTI1YTBkNTIwMDAwMDAwMCwgMHgwMGVkNDRiMTAwMDAwMDAwLCAweGExN2Q1MzU5MDAwMDAwMDAsCisgICAgMHgwNTg0YTZhYzAwMDAwMDAwLCAweGE0MTRiMTQ0MDAwMDAwMDAsIDB4MDZhM2Y4YTcwMDAwMDAwMCwKKyAgICAweGE3MzNlZjRmMDAwMDAwMDAsIDB4MGY1NjYyOTcwMDAwMDAwMCwgMHhhZWM2NzU3ZjAwMDAwMDAwLAorICAgIDB4MGM3MTNjOWMwMDAwMDAwMCwgMHhhZGUxMmI3NDAwMDAwMDAwLCAweDA5MThkZTgxMDAwMDAwMDAsCisgICAgMHhhODg4Yzk2OTAwMDAwMDAwLCAweDBhM2Y4MDhhMDAwMDAwMDAsIDB4YWJhZjk3NjIwMDAwMDAwMCwKKyAgICAweDFiZjJlYmUwMDAwMDAwMDAsIDB4YmE2MmZjMDgwMDAwMDAwMCwgMHgxOGQ1YjVlYjAwMDAwMDAwLAorICAgIDB4Yjk0NWEyMDMwMDAwMDAwMCwgMHgxZGJjNTdmNjAwMDAwMDAwLCAweGJjMmM0MDFlMDAwMDAwMDAsCisgICAgMHgxZTliMDlmZDAwMDAwMDAwLCAweGJmMGIxZTE1MDAwMDAwMDAsIDB4MTc2ZTkzY2QwMDAwMDAwMCwKKyAgICAweGI2ZmU4NDI1MDAwMDAwMDAsIDB4MTQ0OWNkYzYwMDAwMDAwMCwgMHhiNWQ5ZGEyZTAwMDAwMDAwLAorICAgIDB4MTEyMDJmZGIwMDAwMDAwMCwgMHhiMGIwMzgzMzAwMDAwMDAwLCAweDEyMDc3MWQwMDAwMDAwMDAsCisgICAgMHhiMzk3NjYzODAwMDAwMDAwLCAweDMzYmFmODBmMDAwMDAwMDAsIDB4OTIyYWVmZTcwMDAwMDAwMCwKKyAgICAweDMwOWRhNjA0MDAwMDAwMDAsIDB4OTEwZGIxZWMwMDAwMDAwMCwgMHgzNWY0NDQxOTAwMDAwMDAwLAorICAgIDB4OTQ2NDUzZjEwMDAwMDAwMCwgMHgzNmQzMWExMjAwMDAwMDAwLCAweDk3NDMwZGZhMDAwMDAwMDAsCisgICAgMHgzZjI2ODAyMjAwMDAwMDAwLCAweDllYjY5N2NhMDAwMDAwMDAsIDB4M2MwMWRlMjkwMDAwMDAwMCwKKyAgICAweDlkOTFjOWMxMDAwMDAwMDAsIDB4Mzk2ODNjMzQwMDAwMDAwMCwgMHg5OGY4MmJkYzAwMDAwMDAwLAorICAgIDB4M2E0ZjYyM2YwMDAwMDAwMCwgMHg5YmRmNzVkNzAwMDAwMDAwLCAweDJiODIwOTU1MDAwMDAwMDAsCisgICAgMHg4YTEyMWViZDAwMDAwMDAwLCAweDI4YTU1NzVlMDAwMDAwMDAsIDB4ODkzNTQwYjYwMDAwMDAwMCwKKyAgICAweDJkY2NiNTQzMDAwMDAwMDAsIDB4OGM1Y2EyYWIwMDAwMDAwMCwgMHgyZWViZWI0ODAwMDAwMDAwLAorICAgIDB4OGY3YmZjYTAwMDAwMDAwMCwgMHgyNzFlNzE3ODAwMDAwMDAwLCAweDg2OGU2NjkwMDAwMDAwMDAsCisgICAgMHgyNDM5MmY3MzAwMDAwMDAwLCAweDg1YTkzODliMDAwMDAwMDAsIDB4MjE1MGNkNmUwMDAwMDAwMCwKKyAgICAweDgwYzBkYTg2MDAwMDAwMDAsIDB4MjI3NzkzNjUwMDAwMDAwMCwgMHg4M2U3ODQ4ZDAwMDAwMDAwLAorICAgIDB4MjIyY2FmMGEwMDAwMDAwMCwgMHg4M2JjYjhlMjAwMDAwMDAwLCAweDIxMGJmMTAxMDAwMDAwMDAsCisgICAgMHg4MDliZTZlOTAwMDAwMDAwLCAweDI0NjIxMzFjMDAwMDAwMDAsIDB4ODVmMjA0ZjQwMDAwMDAwMCwKKyAgICAweDI3NDU0ZDE3MDAwMDAwMDAsIDB4ODZkNTVhZmYwMDAwMDAwMCwgMHgyZWIwZDcyNzAwMDAwMDAwLAorICAgIDB4OGYyMGMwY2YwMDAwMDAwMCwgMHgyZDk3ODkyYzAwMDAwMDAwLCAweDhjMDc5ZWM0MDAwMDAwMDAsCisgICAgMHgyOGZlNmIzMTAwMDAwMDAwLCAweDg5NmU3Y2Q5MDAwMDAwMDAsIDB4MmJkOTM1M2EwMDAwMDAwMCwKKyAgICAweDhhNDkyMmQyMDAwMDAwMDAsIDB4M2ExNDVlNTAwMDAwMDAwMCwgMHg5Yjg0NDliODAwMDAwMDAwLAorICAgIDB4MzkzMzAwNWIwMDAwMDAwMCwgMHg5OGEzMTdiMzAwMDAwMDAwLCAweDNjNWFlMjQ2MDAwMDAwMDAsCisgICAgMHg5ZGNhZjVhZTAwMDAwMDAwLCAweDNmN2RiYzRkMDAwMDAwMDAsIDB4OWVlZGFiYTUwMDAwMDAwMCwKKyAgICAweDM2ODgyNjdkMDAwMDAwMDAsIDB4OTcxODMxOTUwMDAwMDAwMCwgMHgzNWFmNzg3NjAwMDAwMDAwLAorICAgIDB4OTQzZjZmOWUwMDAwMDAwMCwgMHgzMGM2OWE2YjAwMDAwMDAwLCAweDkxNTY4ZDgzMDAwMDAwMDAsCisgICAgMHgzM2UxYzQ2MDAwMDAwMDAwLCAweDkyNzFkMzg4MDAwMDAwMDAsIDB4MTI1YzRkYmYwMDAwMDAwMCwKKyAgICAweGIzY2M1YTU3MDAwMDAwMDAsIDB4MTE3YjEzYjQwMDAwMDAwMCwgMHhiMGViMDQ1YzAwMDAwMDAwLAorICAgIDB4MTQxMmYxYTkwMDAwMDAwMCwgMHhiNTgyZTY0MTAwMDAwMDAwLCAweDE3MzVhZmEyMDAwMDAwMDAsCisgICAgMHhiNmE1Yjg0YTAwMDAwMDAwLCAweDFlYzAzNTkyMDAwMDAwMDAsIDB4YmY1MDIyN2EwMDAwMDAwMCwKKyAgICAweDFkZTc2Yjk5MDAwMDAwMDAsIDB4YmM3NzdjNzEwMDAwMDAwMCwgMHgxODhlODk4NDAwMDAwMDAwLAorICAgIDB4YjkxZTllNmMwMDAwMDAwMCwgMHgxYmE5ZDc4ZjAwMDAwMDAwLCAweGJhMzljMDY3MDAwMDAwMDAsCisgICAgMHgwYTY0YmNlNTAwMDAwMDAwLCAweGFiZjRhYjBkMDAwMDAwMDAsIDB4MDk0M2UyZWUwMDAwMDAwMCwKKyAgICAweGE4ZDNmNTA2MDAwMDAwMDAsIDB4MGMyYTAwZjMwMDAwMDAwMCwgMHhhZGJhMTcxYjAwMDAwMDAwLAorICAgIDB4MGYwZDVlZjgwMDAwMDAwMCwgMHhhZTlkNDkxMDAwMDAwMDAwLCAweDA2ZjhjNGM4MDAwMDAwMDAsCisgICAgMHhhNzY4ZDMyMDAwMDAwMDAwLCAweDA1ZGY5YWMzMDAwMDAwMDAsIDB4YTQ0ZjhkMmIwMDAwMDAwMCwKKyAgICAweDAwYjY3OGRlMDAwMDAwMDAsIDB4YTEyNjZmMzYwMDAwMDAwMCwgMHgwMzkxMjZkNTAwMDAwMDAwLAorICAgIDB4YTIwMTMxM2QwMDAwMDAwMH0sCisgICB7MHgwMDAwMDAwMDAwMDAwMDAwLCAweGVlODQzOWExMDAwMDAwMDAsIDB4OWQwZjAyOTkwMDAwMDAwMCwKKyAgICAweDczOGIzYjM4MDAwMDAwMDAsIDB4N2IxOTc1ZTkwMDAwMDAwMCwgMHg5NTlkNGM0ODAwMDAwMDAwLAorICAgIDB4ZTYxNjc3NzAwMDAwMDAwMCwgMHgwODkyNGVkMTAwMDAwMDAwLCAweGI3MzQ5YjA5MDAwMDAwMDAsCisgICAgMHg1OWIwYTJhODAwMDAwMDAwLCAweDJhM2I5OTkwMDAwMDAwMDAsIDB4YzRiZmEwMzEwMDAwMDAwMCwKKyAgICAweGNjMmRlZWUwMDAwMDAwMDAsIDB4MjJhOWQ3NDEwMDAwMDAwMCwgMHg1MTIyZWM3OTAwMDAwMDAwLAorICAgIDB4YmZhNmQ1ZDgwMDAwMDAwMCwgMHg2ZTY5MzYxMzAwMDAwMDAwLCAweDgwZWQwZmIyMDAwMDAwMDAsCisgICAgMHhmMzY2MzQ4YTAwMDAwMDAwLCAweDFkZTIwZDJiMDAwMDAwMDAsIDB4MTU3MDQzZmEwMDAwMDAwMCwKKyAgICAweGZiZjQ3YTViMDAwMDAwMDAsIDB4ODg3ZjQxNjMwMDAwMDAwMCwgMHg2NmZiNzhjMjAwMDAwMDAwLAorICAgIDB4ZDk1ZGFkMWEwMDAwMDAwMCwgMHgzN2Q5OTRiYjAwMDAwMDAwLCAweDQ0NTJhZjgzMDAwMDAwMDAsCisgICAgMHhhYWQ2OTYyMjAwMDAwMDAwLCAweGEyNDRkOGYzMDAwMDAwMDAsIDB4NGNjMGUxNTIwMDAwMDAwMCwKKyAgICAweDNmNGJkYTZhMDAwMDAwMDAsIDB4ZDFjZmUzY2IwMDAwMDAwMCwgMHhkY2QyNmMyNjAwMDAwMDAwLAorICAgIDB4MzI1NjU1ODcwMDAwMDAwMCwgMHg0MWRkNmViZjAwMDAwMDAwLCAweGFmNTk1NzFlMDAwMDAwMDAsCisgICAgMHhhN2NiMTljZjAwMDAwMDAwLCAweDQ5NGYyMDZlMDAwMDAwMDAsIDB4M2FjNDFiNTYwMDAwMDAwMCwKKyAgICAweGQ0NDAyMmY3MDAwMDAwMDAsIDB4NmJlNmY3MmYwMDAwMDAwMCwgMHg4NTYyY2U4ZTAwMDAwMDAwLAorICAgIDB4ZjZlOWY1YjYwMDAwMDAwMCwgMHgxODZkY2MxNzAwMDAwMDAwLCAweDEwZmY4MmM2MDAwMDAwMDAsCisgICAgMHhmZTdiYmI2NzAwMDAwMDAwLCAweDhkZjA4MDVmMDAwMDAwMDAsIDB4NjM3NGI5ZmUwMDAwMDAwMCwKKyAgICAweGIyYmI1YTM1MDAwMDAwMDAsIDB4NWMzZjYzOTQwMDAwMDAwMCwgMHgyZmI0NThhYzAwMDAwMDAwLAorICAgIDB4YzEzMDYxMGQwMDAwMDAwMCwgMHhjOWEyMmZkYzAwMDAwMDAwLCAweDI3MjYxNjdkMDAwMDAwMDAsCisgICAgMHg1NGFkMmQ0NTAwMDAwMDAwLCAweGJhMjkxNGU0MDAwMDAwMDAsIDB4MDU4ZmMxM2MwMDAwMDAwMCwKKyAgICAweGViMGJmODlkMDAwMDAwMDAsIDB4OTg4MGMzYTUwMDAwMDAwMCwgMHg3NjA0ZmEwNDAwMDAwMDAwLAorICAgIDB4N2U5NmI0ZDUwMDAwMDAwMCwgMHg5MDEyOGQ3NDAwMDAwMDAwLCAweGUzOTliNjRjMDAwMDAwMDAsCisgICAgMHgwZDFkOGZlZDAwMDAwMDAwLCAweGI4YTVkOTRjMDAwMDAwMDAsIDB4NTYyMWUwZWQwMDAwMDAwMCwKKyAgICAweDI1YWFkYmQ1MDAwMDAwMDAsIDB4Y2IyZWUyNzQwMDAwMDAwMCwgMHhjM2JjYWNhNTAwMDAwMDAwLAorICAgIDB4MmQzODk1MDQwMDAwMDAwMCwgMHg1ZWIzYWUzYzAwMDAwMDAwLCAweGIwMzc5NzlkMDAwMDAwMDAsCisgICAgMHgwZjkxNDI0NTAwMDAwMDAwLCAweGUxMTU3YmU0MDAwMDAwMDAsIDB4OTI5ZTQwZGMwMDAwMDAwMCwKKyAgICAweDdjMWE3OTdkMDAwMDAwMDAsIDB4NzQ4ODM3YWMwMDAwMDAwMCwgMHg5YTBjMGUwZDAwMDAwMDAwLAorICAgIDB4ZTk4NzM1MzUwMDAwMDAwMCwgMHgwNzAzMGM5NDAwMDAwMDAwLCAweGQ2Y2NlZjVmMDAwMDAwMDAsCisgICAgMHgzODQ4ZDZmZTAwMDAwMDAwLCAweDRiYzNlZGM2MDAwMDAwMDAsIDB4YTU0N2Q0NjcwMDAwMDAwMCwKKyAgICAweGFkZDU5YWI2MDAwMDAwMDAsIDB4NDM1MWEzMTcwMDAwMDAwMCwgMHgzMGRhOTgyZjAwMDAwMDAwLAorICAgIDB4ZGU1ZWExOGUwMDAwMDAwMCwgMHg2MWY4NzQ1NjAwMDAwMDAwLCAweDhmN2M0ZGY3MDAwMDAwMDAsCisgICAgMHhmY2Y3NzZjZjAwMDAwMDAwLCAweDEyNzM0ZjZlMDAwMDAwMDAsIDB4MWFlMTAxYmYwMDAwMDAwMCwKKyAgICAweGY0NjUzODFlMDAwMDAwMDAsIDB4ODdlZTAzMjYwMDAwMDAwMCwgMHg2OTZhM2E4NzAwMDAwMDAwLAorICAgIDB4NjQ3N2I1NmEwMDAwMDAwMCwgMHg4YWYzOGNjYjAwMDAwMDAwLCAweGY5NzhiN2YzMDAwMDAwMDAsCisgICAgMHgxN2ZjOGU1MjAwMDAwMDAwLCAweDFmNmVjMDgzMDAwMDAwMDAsIDB4ZjFlYWY5MjIwMDAwMDAwMCwKKyAgICAweDgyNjFjMjFhMDAwMDAwMDAsIDB4NmNlNWZiYmIwMDAwMDAwMCwgMHhkMzQzMmU2MzAwMDAwMDAwLAorICAgIDB4M2RjNzE3YzIwMDAwMDAwMCwgMHg0ZTRjMmNmYTAwMDAwMDAwLCAweGEwYzgxNTViMDAwMDAwMDAsCisgICAgMHhhODVhNWI4YTAwMDAwMDAwLCAweDQ2ZGU2MjJiMDAwMDAwMDAsIDB4MzU1NTU5MTMwMDAwMDAwMCwKKyAgICAweGRiZDE2MGIyMDAwMDAwMDAsIDB4MGExZTgzNzkwMDAwMDAwMCwgMHhlNDlhYmFkODAwMDAwMDAwLAorICAgIDB4OTcxMTgxZTAwMDAwMDAwMCwgMHg3OTk1Yjg0MTAwMDAwMDAwLCAweDcxMDdmNjkwMDAwMDAwMDAsCisgICAgMHg5ZjgzY2YzMTAwMDAwMDAwLCAweGVjMDhmNDA5MDAwMDAwMDAsIDB4MDI4Y2NkYTgwMDAwMDAwMCwKKyAgICAweGJkMmExODcwMDAwMDAwMDAsIDB4NTNhZTIxZDEwMDAwMDAwMCwgMHgyMDI1MWFlOTAwMDAwMDAwLAorICAgIDB4Y2VhMTIzNDgwMDAwMDAwMCwgMHhjNjMzNmQ5OTAwMDAwMDAwLCAweDI4Yjc1NDM4MDAwMDAwMDAsCisgICAgMHg1YjNjNmYwMDAwMDAwMDAwLCAweGI1Yjg1NmExMDAwMDAwMDAsIDB4NzA0YmIzOTkwMDAwMDAwMCwKKyAgICAweDllY2Y4YTM4MDAwMDAwMDAsIDB4ZWQ0NGIxMDAwMDAwMDAwMCwgMHgwM2MwODhhMTAwMDAwMDAwLAorICAgIDB4MGI1MmM2NzAwMDAwMDAwMCwgMHhlNWQ2ZmZkMTAwMDAwMDAwLCAweDk2NWRjNGU5MDAwMDAwMDAsCisgICAgMHg3OGQ5ZmQ0ODAwMDAwMDAwLCAweGM3N2YyODkwMDAwMDAwMDAsIDB4MjlmYjExMzEwMDAwMDAwMCwKKyAgICAweDVhNzAyYTA5MDAwMDAwMDAsIDB4YjRmNDEzYTgwMDAwMDAwMCwgMHhiYzY2NWQ3OTAwMDAwMDAwLAorICAgIDB4NTJlMjY0ZDgwMDAwMDAwMCwgMHgyMTY5NWZlMDAwMDAwMDAwLCAweGNmZWQ2NjQxMDAwMDAwMDAsCisgICAgMHgxZTIyODU4YTAwMDAwMDAwLCAweGYwYTZiYzJiMDAwMDAwMDAsIDB4ODMyZDg3MTMwMDAwMDAwMCwKKyAgICAweDZkYTliZWIyMDAwMDAwMDAsIDB4NjUzYmYwNjMwMDAwMDAwMCwgMHg4YmJmYzljMjAwMDAwMDAwLAorICAgIDB4ZjgzNGYyZmEwMDAwMDAwMCwgMHgxNmIwY2I1YjAwMDAwMDAwLCAweGE5MTYxZTgzMDAwMDAwMDAsCisgICAgMHg0NzkyMjcyMjAwMDAwMDAwLCAweDM0MTkxYzFhMDAwMDAwMDAsIDB4ZGE5ZDI1YmIwMDAwMDAwMCwKKyAgICAweGQyMGY2YjZhMDAwMDAwMDAsIDB4M2M4YjUyY2IwMDAwMDAwMCwgMHg0ZjAwNjlmMzAwMDAwMDAwLAorICAgIDB4YTE4NDUwNTIwMDAwMDAwMCwgMHhhYzk5ZGZiZjAwMDAwMDAwLCAweDQyMWRlNjFlMDAwMDAwMDAsCisgICAgMHgzMTk2ZGQyNjAwMDAwMDAwLCAweGRmMTJlNDg3MDAwMDAwMDAsIDB4ZDc4MGFhNTYwMDAwMDAwMCwKKyAgICAweDM5MDQ5M2Y3MDAwMDAwMDAsIDB4NGE4ZmE4Y2YwMDAwMDAwMCwgMHhhNDBiOTE2ZTAwMDAwMDAwLAorICAgIDB4MWJhZDQ0YjYwMDAwMDAwMCwgMHhmNTI5N2QxNzAwMDAwMDAwLCAweDg2YTI0NjJmMDAwMDAwMDAsCisgICAgMHg2ODI2N2Y4ZTAwMDAwMDAwLCAweDYwYjQzMTVmMDAwMDAwMDAsIDB4OGUzMDA4ZmUwMDAwMDAwMCwKKyAgICAweGZkYmIzM2M2MDAwMDAwMDAsIDB4MTMzZjBhNjcwMDAwMDAwMCwgMHhjMmYwZTlhYzAwMDAwMDAwLAorICAgIDB4MmM3NGQwMGQwMDAwMDAwMCwgMHg1ZmZmZWIzNTAwMDAwMDAwLCAweGIxN2JkMjk0MDAwMDAwMDAsCisgICAgMHhiOWU5OWM0NTAwMDAwMDAwLCAweDU3NmRhNWU0MDAwMDAwMDAsIDB4MjRlNjllZGMwMDAwMDAwMCwKKyAgICAweGNhNjJhNzdkMDAwMDAwMDAsIDB4NzVjNDcyYTUwMDAwMDAwMCwgMHg5YjQwNGIwNDAwMDAwMDAwLAorICAgIDB4ZThjYjcwM2MwMDAwMDAwMCwgMHgwNjRmNDk5ZDAwMDAwMDAwLCAweDBlZGQwNzRjMDAwMDAwMDAsCisgICAgMHhlMDU5M2VlZDAwMDAwMDAwLCAweDkzZDIwNWQ1MDAwMDAwMDAsIDB4N2Q1NjNjNzQwMDAwMDAwMCwKKyAgICAweGM4ZWU2YWQ1MDAwMDAwMDAsIDB4MjY2YTUzNzQwMDAwMDAwMCwgMHg1NWUxNjg0YzAwMDAwMDAwLAorICAgIDB4YmI2NTUxZWQwMDAwMDAwMCwgMHhiM2Y3MWYzYzAwMDAwMDAwLCAweDVkNzMyNjlkMDAwMDAwMDAsCisgICAgMHgyZWY4MWRhNTAwMDAwMDAwLCAweGMwN2MyNDA0MDAwMDAwMDAsIDB4N2ZkYWYxZGMwMDAwMDAwMCwKKyAgICAweDkxNWVjODdkMDAwMDAwMDAsIDB4ZTJkNWYzNDUwMDAwMDAwMCwgMHgwYzUxY2FlNDAwMDAwMDAwLAorICAgIDB4MDRjMzg0MzUwMDAwMDAwMCwgMHhlYTQ3YmQ5NDAwMDAwMDAwLCAweDk5Y2M4NmFjMDAwMDAwMDAsCisgICAgMHg3NzQ4YmYwZDAwMDAwMDAwLCAweGE2ODc1Y2M2MDAwMDAwMDAsIDB4NDgwMzY1NjcwMDAwMDAwMCwKKyAgICAweDNiODg1ZTVmMDAwMDAwMDAsIDB4ZDUwYzY3ZmUwMDAwMDAwMCwgMHhkZDllMjkyZjAwMDAwMDAwLAorICAgIDB4MzMxYTEwOGUwMDAwMDAwMCwgMHg0MDkxMmJiNjAwMDAwMDAwLCAweGFlMTUxMjE3MDAwMDAwMDAsCisgICAgMHgxMWIzYzdjZjAwMDAwMDAwLCAweGZmMzdmZTZlMDAwMDAwMDAsIDB4OGNiY2M1NTYwMDAwMDAwMCwKKyAgICAweDYyMzhmY2Y3MDAwMDAwMDAsIDB4NmFhYWIyMjYwMDAwMDAwMCwgMHg4NDJlOGI4NzAwMDAwMDAwLAorICAgIDB4ZjdhNWIwYmYwMDAwMDAwMCwgMHgxOTIxODkxZTAwMDAwMDAwLCAweDE0M2MwNmYzMDAwMDAwMDAsCisgICAgMHhmYWI4M2Y1MjAwMDAwMDAwLCAweDg5MzMwNDZhMDAwMDAwMDAsIDB4NjdiNzNkY2IwMDAwMDAwMCwKKyAgICAweDZmMjU3MzFhMDAwMDAwMDAsIDB4ODFhMTRhYmIwMDAwMDAwMCwgMHhmMjJhNzE4MzAwMDAwMDAwLAorICAgIDB4MWNhZTQ4MjIwMDAwMDAwMCwgMHhhMzA4OWRmYTAwMDAwMDAwLCAweDRkOGNhNDViMDAwMDAwMDAsCisgICAgMHgzZTA3OWY2MzAwMDAwMDAwLCAweGQwODNhNmMyMDAwMDAwMDAsIDB4ZDgxMWU4MTMwMDAwMDAwMCwKKyAgICAweDM2OTVkMWIyMDAwMDAwMDAsIDB4NDUxZWVhOGEwMDAwMDAwMCwgMHhhYjlhZDMyYjAwMDAwMDAwLAorICAgIDB4N2E1NTMwZTAwMDAwMDAwMCwgMHg5NGQxMDk0MTAwMDAwMDAwLCAweGU3NWEzMjc5MDAwMDAwMDAsCisgICAgMHgwOWRlMGJkODAwMDAwMDAwLCAweDAxNGM0NTA5MDAwMDAwMDAsIDB4ZWZjODdjYTgwMDAwMDAwMCwKKyAgICAweDljNDM0NzkwMDAwMDAwMDAsIDB4NzJjNzdlMzEwMDAwMDAwMCwgMHhjZDYxYWJlOTAwMDAwMDAwLAorICAgIDB4MjNlNTkyNDgwMDAwMDAwMCwgMHg1MDZlYTk3MDAwMDAwMDAwLCAweGJlZWE5MGQxMDAwMDAwMDAsCisgICAgMHhiNjc4ZGUwMDAwMDAwMDAwLCAweDU4ZmNlN2ExMDAwMDAwMDAsIDB4MmI3N2RjOTkwMDAwMDAwMCwKKyAgICAweGM1ZjNlNTM4MDAwMDAwMDB9LAorICAgezB4MDAwMDAwMDAwMDAwMDAwMCwgMHhmYmY2MTM0NzAwMDAwMDAwLCAweGY2ZWQyNzhlMDAwMDAwMDAsCisgICAgMHgwZDFiMzRjOTAwMDAwMDAwLCAweGFkZGQzZWM3MDAwMDAwMDAsIDB4NTYyYjJkODAwMDAwMDAwMCwKKyAgICAweDViMzAxOTQ5MDAwMDAwMDAsIDB4YTBjNjBhMGUwMDAwMDAwMCwgMHgxYmJkMGM1NTAwMDAwMDAwLAorICAgIDB4ZTA0YjFmMTIwMDAwMDAwMCwgMHhlZDUwMmJkYjAwMDAwMDAwLCAweDE2YTYzODljMDAwMDAwMDAsCisgICAgMHhiNjYwMzI5MjAwMDAwMDAwLCAweDRkOTYyMWQ1MDAwMDAwMDAsIDB4NDA4ZDE1MWMwMDAwMDAwMCwKKyAgICAweGJiN2IwNjViMDAwMDAwMDAsIDB4MzY3YTE5YWEwMDAwMDAwMCwgMHhjZDhjMGFlZDAwMDAwMDAwLAorICAgIDB4YzA5NzNlMjQwMDAwMDAwMCwgMHgzYjYxMmQ2MzAwMDAwMDAwLCAweDliYTcyNzZkMDAwMDAwMDAsCisgICAgMHg2MDUxMzQyYTAwMDAwMDAwLCAweDZkNGEwMGUzMDAwMDAwMDAsIDB4OTZiYzEzYTQwMDAwMDAwMCwKKyAgICAweDJkYzcxNWZmMDAwMDAwMDAsIDB4ZDYzMTA2YjgwMDAwMDAwMCwgMHhkYjJhMzI3MTAwMDAwMDAwLAorICAgIDB4MjBkYzIxMzYwMDAwMDAwMCwgMHg4MDFhMmIzODAwMDAwMDAwLCAweDdiZWMzODdmMDAwMDAwMDAsCisgICAgMHg3NmY3MGNiNjAwMDAwMDAwLCAweDhkMDExZmYxMDAwMDAwMDAsIDB4MmRmMjQzOGYwMDAwMDAwMCwKKyAgICAweGQ2MDQ1MGM4MDAwMDAwMDAsIDB4ZGIxZjY0MDEwMDAwMDAwMCwgMHgyMGU5Nzc0NjAwMDAwMDAwLAorICAgIDB4ODAyZjdkNDgwMDAwMDAwMCwgMHg3YmQ5NmUwZjAwMDAwMDAwLCAweDc2YzI1YWM2MDAwMDAwMDAsCisgICAgMHg4ZDM0NDk4MTAwMDAwMDAwLCAweDM2NGY0ZmRhMDAwMDAwMDAsIDB4Y2RiOTVjOWQwMDAwMDAwMCwKKyAgICAweGMwYTI2ODU0MDAwMDAwMDAsIDB4M2I1NDdiMTMwMDAwMDAwMCwgMHg5YjkyNzExZDAwMDAwMDAwLAorICAgIDB4NjA2NDYyNWEwMDAwMDAwMCwgMHg2ZDdmNTY5MzAwMDAwMDAwLCAweDk2ODk0NWQ0MDAwMDAwMDAsCisgICAgMHgxYjg4NWEyNTAwMDAwMDAwLCAweGUwN2U0OTYyMDAwMDAwMDAsIDB4ZWQ2NTdkYWIwMDAwMDAwMCwKKyAgICAweDE2OTM2ZWVjMDAwMDAwMDAsIDB4YjY1NTY0ZTIwMDAwMDAwMCwgMHg0ZGEzNzdhNTAwMDAwMDAwLAorICAgIDB4NDBiODQzNmMwMDAwMDAwMCwgMHhiYjRlNTAyYjAwMDAwMDAwLCAweDAwMzU1NjcwMDAwMDAwMDAsCisgICAgMHhmYmMzNDUzNzAwMDAwMDAwLCAweGY2ZDg3MWZlMDAwMDAwMDAsIDB4MGQyZTYyYjkwMDAwMDAwMCwKKyAgICAweGFkZTg2OGI3MDAwMDAwMDAsIDB4NTYxZTdiZjAwMDAwMDAwMCwgMHg1YjA1NGYzOTAwMDAwMDAwLAorICAgIDB4YTBmMzVjN2UwMDAwMDAwMCwgMHgxYmUyZjZjNTAwMDAwMDAwLCAweGUwMTRlNTgyMDAwMDAwMDAsCisgICAgMHhlZDBmZDE0YjAwMDAwMDAwLCAweDE2ZjljMjBjMDAwMDAwMDAsIDB4YjYzZmM4MDIwMDAwMDAwMCwKKyAgICAweDRkYzlkYjQ1MDAwMDAwMDAsIDB4NDBkMmVmOGMwMDAwMDAwMCwgMHhiYjI0ZmNjYjAwMDAwMDAwLAorICAgIDB4MDA1ZmZhOTAwMDAwMDAwMCwgMHhmYmE5ZTlkNzAwMDAwMDAwLCAweGY2YjJkZDFlMDAwMDAwMDAsCisgICAgMHgwZDQ0Y2U1OTAwMDAwMDAwLCAweGFkODJjNDU3MDAwMDAwMDAsIDB4NTY3NGQ3MTAwMDAwMDAwMCwKKyAgICAweDViNmZlM2Q5MDAwMDAwMDAsIDB4YTA5OWYwOWUwMDAwMDAwMCwgMHgyZDk4ZWY2ZjAwMDAwMDAwLAorICAgIDB4ZDY2ZWZjMjgwMDAwMDAwMCwgMHhkYjc1YzhlMTAwMDAwMDAwLCAweDIwODNkYmE2MDAwMDAwMDAsCisgICAgMHg4MDQ1ZDFhODAwMDAwMDAwLCAweDdiYjNjMmVmMDAwMDAwMDAsIDB4NzZhOGY2MjYwMDAwMDAwMCwKKyAgICAweDhkNWVlNTYxMDAwMDAwMDAsIDB4MzYyNWUzM2EwMDAwMDAwMCwgMHhjZGQzZjA3ZDAwMDAwMDAwLAorICAgIDB4YzBjOGM0YjQwMDAwMDAwMCwgMHgzYjNlZDdmMzAwMDAwMDAwLCAweDliZjhkZGZkMDAwMDAwMDAsCisgICAgMHg2MDBlY2ViYTAwMDAwMDAwLCAweDZkMTVmYTczMDAwMDAwMDAsIDB4OTZlM2U5MzQwMDAwMDAwMCwKKyAgICAweDM2MTBiNTRhMDAwMDAwMDAsIDB4Y2RlNmE2MGQwMDAwMDAwMCwgMHhjMGZkOTJjNDAwMDAwMDAwLAorICAgIDB4M2IwYjgxODMwMDAwMDAwMCwgMHg5YmNkOGI4ZDAwMDAwMDAwLCAweDYwM2I5OGNhMDAwMDAwMDAsCisgICAgMHg2ZDIwYWMwMzAwMDAwMDAwLCAweDk2ZDZiZjQ0MDAwMDAwMDAsIDB4MmRhZGI5MWYwMDAwMDAwMCwKKyAgICAweGQ2NWJhYTU4MDAwMDAwMDAsIDB4ZGI0MDllOTEwMDAwMDAwMCwgMHgyMGI2OGRkNjAwMDAwMDAwLAorICAgIDB4ODA3MDg3ZDgwMDAwMDAwMCwgMHg3Yjg2OTQ5ZjAwMDAwMDAwLCAweDc2OWRhMDU2MDAwMDAwMDAsCisgICAgMHg4ZDZiYjMxMTAwMDAwMDAwLCAweDAwNmFhY2UwMDAwMDAwMDAsIDB4ZmI5Y2JmYTcwMDAwMDAwMCwKKyAgICAweGY2ODc4YjZlMDAwMDAwMDAsIDB4MGQ3MTk4MjkwMDAwMDAwMCwgMHhhZGI3OTIyNzAwMDAwMDAwLAorICAgIDB4NTY0MTgxNjAwMDAwMDAwMCwgMHg1YjVhYjVhOTAwMDAwMDAwLCAweGEwYWNhNmVlMDAwMDAwMDAsCisgICAgMHgxYmQ3YTBiNTAwMDAwMDAwLCAweGUwMjFiM2YyMDAwMDAwMDAsIDB4ZWQzYTg3M2IwMDAwMDAwMCwKKyAgICAweDE2Y2M5NDdjMDAwMDAwMDAsIDB4YjYwYTllNzIwMDAwMDAwMCwgMHg0ZGZjOGQzNTAwMDAwMDAwLAorICAgIDB4NDBlN2I5ZmMwMDAwMDAwMCwgMHhiYjExYWFiYjAwMDAwMDAwLCAweDc3YzI5YzUwMDAwMDAwMDAsCisgICAgMHg4YzM0OGYxNzAwMDAwMDAwLCAweDgxMmZiYmRlMDAwMDAwMDAsIDB4N2FkOWE4OTkwMDAwMDAwMCwKKyAgICAweGRhMWZhMjk3MDAwMDAwMDAsIDB4MjFlOWIxZDAwMDAwMDAwMCwgMHgyY2YyODUxOTAwMDAwMDAwLAorICAgIDB4ZDcwNDk2NWUwMDAwMDAwMCwgMHg2YzdmOTAwNTAwMDAwMDAwLCAweDk3ODk4MzQyMDAwMDAwMDAsCisgICAgMHg5YTkyYjc4YjAwMDAwMDAwLCAweDYxNjRhNGNjMDAwMDAwMDAsIDB4YzFhMmFlYzIwMDAwMDAwMCwKKyAgICAweDNhNTRiZDg1MDAwMDAwMDAsIDB4Mzc0Zjg5NGMwMDAwMDAwMCwgMHhjY2I5OWEwYjAwMDAwMDAwLAorICAgIDB4NDFiODg1ZmEwMDAwMDAwMCwgMHhiYTRlOTZiZDAwMDAwMDAwLCAweGI3NTVhMjc0MDAwMDAwMDAsCisgICAgMHg0Y2EzYjEzMzAwMDAwMDAwLCAweGVjNjViYjNkMDAwMDAwMDAsIDB4MTc5M2E4N2EwMDAwMDAwMCwKKyAgICAweDFhODg5Y2IzMDAwMDAwMDAsIDB4ZTE3ZThmZjQwMDAwMDAwMCwgMHg1YTA1ODlhZjAwMDAwMDAwLAorICAgIDB4YTFmMzlhZTgwMDAwMDAwMCwgMHhhY2U4YWUyMTAwMDAwMDAwLCAweDU3MWViZDY2MDAwMDAwMDAsCisgICAgMHhmN2Q4Yjc2ODAwMDAwMDAwLCAweDBjMmVhNDJmMDAwMDAwMDAsIDB4MDEzNTkwZTYwMDAwMDAwMCwKKyAgICAweGZhYzM4M2ExMDAwMDAwMDAsIDB4NWEzMGRmZGYwMDAwMDAwMCwgMHhhMWM2Y2M5ODAwMDAwMDAwLAorICAgIDB4YWNkZGY4NTEwMDAwMDAwMCwgMHg1NzJiZWIxNjAwMDAwMDAwLCAweGY3ZWRlMTE4MDAwMDAwMDAsCisgICAgMHgwYzFiZjI1ZjAwMDAwMDAwLCAweDAxMDBjNjk2MDAwMDAwMDAsIDB4ZmFmNmQ1ZDEwMDAwMDAwMCwKKyAgICAweDQxOGRkMzhhMDAwMDAwMDAsIDB4YmE3YmMwY2QwMDAwMDAwMCwgMHhiNzYwZjQwNDAwMDAwMDAwLAorICAgIDB4NGM5NmU3NDMwMDAwMDAwMCwgMHhlYzUwZWQ0ZDAwMDAwMDAwLCAweDE3YTZmZTBhMDAwMDAwMDAsCisgICAgMHgxYWJkY2FjMzAwMDAwMDAwLCAweGUxNGJkOTg0MDAwMDAwMDAsIDB4NmM0YWM2NzUwMDAwMDAwMCwKKyAgICAweDk3YmNkNTMyMDAwMDAwMDAsIDB4OWFhN2UxZmIwMDAwMDAwMCwgMHg2MTUxZjJiYzAwMDAwMDAwLAorICAgIDB4YzE5N2Y4YjIwMDAwMDAwMCwgMHgzYTYxZWJmNTAwMDAwMDAwLCAweDM3N2FkZjNjMDAwMDAwMDAsCisgICAgMHhjYzhjY2M3YjAwMDAwMDAwLCAweDc3ZjdjYTIwMDAwMDAwMDAsIDB4OGMwMWQ5NjcwMDAwMDAwMCwKKyAgICAweDgxMWFlZGFlMDAwMDAwMDAsIDB4N2FlY2ZlZTkwMDAwMDAwMCwgMHhkYTJhZjRlNzAwMDAwMDAwLAorICAgIDB4MjFkY2U3YTAwMDAwMDAwMCwgMHgyY2M3ZDM2OTAwMDAwMDAwLCAweGQ3MzFjMDJlMDAwMDAwMDAsCisgICAgMHg2YzIwNmE5NTAwMDAwMDAwLCAweDk3ZDY3OWQyMDAwMDAwMDAsIDB4OWFjZDRkMWIwMDAwMDAwMCwKKyAgICAweDYxM2I1ZTVjMDAwMDAwMDAsIDB4YzFmZDU0NTIwMDAwMDAwMCwgMHgzYTBiNDcxNTAwMDAwMDAwLAorICAgIDB4MzcxMDczZGMwMDAwMDAwMCwgMHhjY2U2NjA5YjAwMDAwMDAwLCAweDc3OWQ2NmMwMDAwMDAwMDAsCisgICAgMHg4YzZiNzU4NzAwMDAwMDAwLCAweDgxNzA0MTRlMDAwMDAwMDAsIDB4N2E4NjUyMDkwMDAwMDAwMCwKKyAgICAweGRhNDA1ODA3MDAwMDAwMDAsIDB4MjFiNjRiNDAwMDAwMDAwMCwgMHgyY2FkN2Y4OTAwMDAwMDAwLAorICAgIDB4ZDc1YjZjY2UwMDAwMDAwMCwgMHg1YTVhNzMzZjAwMDAwMDAwLCAweGExYWM2MDc4MDAwMDAwMDAsCisgICAgMHhhY2I3NTRiMTAwMDAwMDAwLCAweDU3NDE0N2Y2MDAwMDAwMDAsIDB4Zjc4NzRkZjgwMDAwMDAwMCwKKyAgICAweDBjNzE1ZWJmMDAwMDAwMDAsIDB4MDE2YTZhNzYwMDAwMDAwMCwgMHhmYTljNzkzMTAwMDAwMDAwLAorICAgIDB4NDFlNzdmNmEwMDAwMDAwMCwgMHhiYTExNmMyZDAwMDAwMDAwLCAweGI3MGE1OGU0MDAwMDAwMDAsCisgICAgMHg0Y2ZjNGJhMzAwMDAwMDAwLCAweGVjM2E0MWFkMDAwMDAwMDAsIDB4MTdjYzUyZWEwMDAwMDAwMCwKKyAgICAweDFhZDc2NjIzMDAwMDAwMDAsIDB4ZTEyMTc1NjQwMDAwMDAwMCwgMHg0MWQyMjkxYTAwMDAwMDAwLAorICAgIDB4YmEyNDNhNWQwMDAwMDAwMCwgMHhiNzNmMGU5NDAwMDAwMDAwLCAweDRjYzkxZGQzMDAwMDAwMDAsCisgICAgMHhlYzBmMTdkZDAwMDAwMDAwLCAweDE3ZjkwNDlhMDAwMDAwMDAsIDB4MWFlMjMwNTMwMDAwMDAwMCwKKyAgICAweGUxMTQyMzE0MDAwMDAwMDAsIDB4NWE2ZjI1NGYwMDAwMDAwMCwgMHhhMTk5MzYwODAwMDAwMDAwLAorICAgIDB4YWM4MjAyYzEwMDAwMDAwMCwgMHg1Nzc0MTE4NjAwMDAwMDAwLCAweGY3YjIxYjg4MDAwMDAwMDAsCisgICAgMHgwYzQ0MDhjZjAwMDAwMDAwLCAweDAxNWYzYzA2MDAwMDAwMDAsIDB4ZmFhOTJmNDEwMDAwMDAwMCwKKyAgICAweDc3YTgzMGIwMDAwMDAwMDAsIDB4OGM1ZTIzZjcwMDAwMDAwMCwgMHg4MTQ1MTczZTAwMDAwMDAwLAorICAgIDB4N2FiMzA0NzkwMDAwMDAwMCwgMHhkYTc1MGU3NzAwMDAwMDAwLCAweDIxODMxZDMwMDAwMDAwMDAsCisgICAgMHgyYzk4MjlmOTAwMDAwMDAwLCAweGQ3NmUzYWJlMDAwMDAwMDAsIDB4NmMxNTNjZTUwMDAwMDAwMCwKKyAgICAweDk3ZTMyZmEyMDAwMDAwMDAsIDB4OWFmODFiNmIwMDAwMDAwMCwgMHg2MTBlMDgyYzAwMDAwMDAwLAorICAgIDB4YzFjODAyMjIwMDAwMDAwMCwgMHgzYTNlMTE2NTAwMDAwMDAwLCAweDM3MjUyNWFjMDAwMDAwMDAsCisgICAgMHhjY2QzMzZlYjAwMDAwMDAwfSwKKyAgIHsweDAwMDAwMDAwMDAwMDAwMDAsIDB4NjIzODI4MmEwMDAwMDAwMCwgMHhjNDcwNTA1NDAwMDAwMDAwLAorICAgIDB4YTY0ODc4N2UwMDAwMDAwMCwgMHg4OGUxYTBhODAwMDAwMDAwLCAweGVhZDk4ODgyMDAwMDAwMDAsCisgICAgMHg0YzkxZjBmYzAwMDAwMDAwLCAweDJlYTlkOGQ2MDAwMDAwMDAsIDB4NTFjNTMwOGEwMDAwMDAwMCwKKyAgICAweDMzZmQxOGEwMDAwMDAwMDAsIDB4OTViNTYwZGUwMDAwMDAwMCwgMHhmNzhkNDhmNDAwMDAwMDAwLAorICAgIDB4ZDkyNDkwMjIwMDAwMDAwMCwgMHhiYjFjYjgwODAwMDAwMDAwLCAweDFkNTRjMDc2MDAwMDAwMDAsCisgICAgMHg3ZjZjZTg1YzAwMDAwMDAwLCAweGUzOGMxMGNmMDAwMDAwMDAsIDB4ODFiNDM4ZTUwMDAwMDAwMCwKKyAgICAweDI3ZmM0MDliMDAwMDAwMDAsIDB4NDVjNDY4YjEwMDAwMDAwMCwgMHg2YjZkYjA2NzAwMDAwMDAwLAorICAgIDB4MDk1NTk4NGQwMDAwMDAwMCwgMHhhZjFkZTAzMzAwMDAwMDAwLCAweGNkMjVjODE5MDAwMDAwMDAsCisgICAgMHhiMjQ5MjA0NTAwMDAwMDAwLCAweGQwNzEwODZmMDAwMDAwMDAsIDB4NzYzOTcwMTEwMDAwMDAwMCwKKyAgICAweDE0MDE1ODNiMDAwMDAwMDAsIDB4M2FhODgwZWQwMDAwMDAwMCwgMHg1ODkwYThjNzAwMDAwMDAwLAorICAgIDB4ZmVkOGQwYjkwMDAwMDAwMCwgMHg5Y2UwZjg5MzAwMDAwMDAwLCAweDg3MWY1MDQ1MDAwMDAwMDAsCisgICAgMHhlNTI3Nzg2ZjAwMDAwMDAwLCAweDQzNmYwMDExMDAwMDAwMDAsIDB4MjE1NzI4M2IwMDAwMDAwMCwKKyAgICAweDBmZmVmMGVkMDAwMDAwMDAsIDB4NmRjNmQ4YzcwMDAwMDAwMCwgMHhjYjhlYTBiOTAwMDAwMDAwLAorICAgIDB4YTliNjg4OTMwMDAwMDAwMCwgMHhkNmRhNjBjZjAwMDAwMDAwLCAweGI0ZTI0OGU1MDAwMDAwMDAsCisgICAgMHgxMmFhMzA5YjAwMDAwMDAwLCAweDcwOTIxOGIxMDAwMDAwMDAsIDB4NWUzYmMwNjcwMDAwMDAwMCwKKyAgICAweDNjMDNlODRkMDAwMDAwMDAsIDB4OWE0YjkwMzMwMDAwMDAwMCwgMHhmODczYjgxOTAwMDAwMDAwLAorICAgIDB4NjQ5MzQwOGEwMDAwMDAwMCwgMHgwNmFiNjhhMDAwMDAwMDAwLCAweGEwZTMxMGRlMDAwMDAwMDAsCisgICAgMHhjMmRiMzhmNDAwMDAwMDAwLCAweGVjNzJlMDIyMDAwMDAwMDAsIDB4OGU0YWM4MDgwMDAwMDAwMCwKKyAgICAweDI4MDJiMDc2MDAwMDAwMDAsIDB4NGEzYTk4NWMwMDAwMDAwMCwgMHgzNTU2NzAwMDAwMDAwMDAwLAorICAgIDB4NTc2ZTU4MmEwMDAwMDAwMCwgMHhmMTI2MjA1NDAwMDAwMDAwLCAweDkzMWUwODdlMDAwMDAwMDAsCisgICAgMHhiZGI3ZDBhODAwMDAwMDAwLCAweGRmOGZmODgyMDAwMDAwMDAsIDB4NzljNzgwZmMwMDAwMDAwMCwKKyAgICAweDFiZmZhOGQ2MDAwMDAwMDAsIDB4MGUzZmEwOGEwMDAwMDAwMCwgMHg2YzA3ODhhMDAwMDAwMDAwLAorICAgIDB4Y2E0ZmYwZGUwMDAwMDAwMCwgMHhhODc3ZDhmNDAwMDAwMDAwLCAweDg2ZGUwMDIyMDAwMDAwMDAsCisgICAgMHhlNGU2MjgwODAwMDAwMDAwLCAweDQyYWU1MDc2MDAwMDAwMDAsIDB4MjA5Njc4NWMwMDAwMDAwMCwKKyAgICAweDVmZmE5MDAwMDAwMDAwMDAsIDB4M2RjMmI4MmEwMDAwMDAwMCwgMHg5YjhhYzA1NDAwMDAwMDAwLAorICAgIDB4ZjliMmU4N2UwMDAwMDAwMCwgMHhkNzFiMzBhODAwMDAwMDAwLCAweGI1MjMxODgyMDAwMDAwMDAsCisgICAgMHgxMzZiNjBmYzAwMDAwMDAwLCAweDcxNTM0OGQ2MDAwMDAwMDAsIDB4ZWRiM2IwNDUwMDAwMDAwMCwKKyAgICAweDhmOGI5ODZmMDAwMDAwMDAsIDB4MjljM2UwMTEwMDAwMDAwMCwgMHg0YmZiYzgzYjAwMDAwMDAwLAorICAgIDB4NjU1MjEwZWQwMDAwMDAwMCwgMHgwNzZhMzhjNzAwMDAwMDAwLCAweGExMjI0MGI5MDAwMDAwMDAsCisgICAgMHhjMzFhNjg5MzAwMDAwMDAwLCAweGJjNzY4MGNmMDAwMDAwMDAsIDB4ZGU0ZWE4ZTUwMDAwMDAwMCwKKyAgICAweDc4MDZkMDliMDAwMDAwMDAsIDB4MWEzZWY4YjEwMDAwMDAwMCwgMHgzNDk3MjA2NzAwMDAwMDAwLAorICAgIDB4NTZhZjA4NGQwMDAwMDAwMCwgMHhmMGU3NzAzMzAwMDAwMDAwLCAweDkyZGY1ODE5MDAwMDAwMDAsCisgICAgMHg4OTIwZjBjZjAwMDAwMDAwLCAweGViMThkOGU1MDAwMDAwMDAsIDB4NGQ1MGEwOWIwMDAwMDAwMCwKKyAgICAweDJmNjg4OGIxMDAwMDAwMDAsIDB4MDFjMTUwNjcwMDAwMDAwMCwgMHg2M2Y5Nzg0ZDAwMDAwMDAwLAorICAgIDB4YzViMTAwMzMwMDAwMDAwMCwgMHhhNzg5MjgxOTAwMDAwMDAwLCAweGQ4ZTVjMDQ1MDAwMDAwMDAsCisgICAgMHhiYWRkZTg2ZjAwMDAwMDAwLCAweDFjOTU5MDExMDAwMDAwMDAsIDB4N2VhZGI4M2IwMDAwMDAwMCwKKyAgICAweDUwMDQ2MGVkMDAwMDAwMDAsIDB4MzIzYzQ4YzcwMDAwMDAwMCwgMHg5NDc0MzBiOTAwMDAwMDAwLAorICAgIDB4ZjY0YzE4OTMwMDAwMDAwMCwgMHg2YWFjZTAwMDAwMDAwMDAwLCAweDA4OTRjODJhMDAwMDAwMDAsCisgICAgMHhhZWRjYjA1NDAwMDAwMDAwLCAweGNjZTQ5ODdlMDAwMDAwMDAsIDB4ZTI0ZDQwYTgwMDAwMDAwMCwKKyAgICAweDgwNzU2ODgyMDAwMDAwMDAsIDB4MjYzZDEwZmMwMDAwMDAwMCwgMHg0NDA1MzhkNjAwMDAwMDAwLAorICAgIDB4M2I2OWQwOGEwMDAwMDAwMCwgMHg1OTUxZjhhMDAwMDAwMDAwLCAweGZmMTk4MGRlMDAwMDAwMDAsCisgICAgMHg5ZDIxYThmNDAwMDAwMDAwLCAweGIzODg3MDIyMDAwMDAwMDAsIDB4ZDFiMDU4MDgwMDAwMDAwMCwKKyAgICAweDc3ZjgyMDc2MDAwMDAwMDAsIDB4MTVjMDA4NWMwMDAwMDAwMCwgMHg1ZDc4MzFjZTAwMDAwMDAwLAorICAgIDB4M2Y0MDE5ZTQwMDAwMDAwMCwgMHg5OTA4NjE5YTAwMDAwMDAwLCAweGZiMzA0OWIwMDAwMDAwMDAsCisgICAgMHhkNTk5OTE2NjAwMDAwMDAwLCAweGI3YTFiOTRjMDAwMDAwMDAsIDB4MTFlOWMxMzIwMDAwMDAwMCwKKyAgICAweDczZDFlOTE4MDAwMDAwMDAsIDB4MGNiZDAxNDQwMDAwMDAwMCwgMHg2ZTg1Mjk2ZTAwMDAwMDAwLAorICAgIDB4YzhjZDUxMTAwMDAwMDAwMCwgMHhhYWY1NzkzYTAwMDAwMDAwLCAweDg0NWNhMWVjMDAwMDAwMDAsCisgICAgMHhlNjY0ODljNjAwMDAwMDAwLCAweDQwMmNmMWI4MDAwMDAwMDAsIDB4MjIxNGQ5OTIwMDAwMDAwMCwKKyAgICAweGJlZjQyMTAxMDAwMDAwMDAsIDB4ZGNjYzA5MmIwMDAwMDAwMCwgMHg3YTg0NzE1NTAwMDAwMDAwLAorICAgIDB4MThiYzU5N2YwMDAwMDAwMCwgMHgzNjE1ODFhOTAwMDAwMDAwLCAweDU0MmRhOTgzMDAwMDAwMDAsCisgICAgMHhmMjY1ZDFmZDAwMDAwMDAwLCAweDkwNWRmOWQ3MDAwMDAwMDAsIDB4ZWYzMTExOGIwMDAwMDAwMCwKKyAgICAweDhkMDkzOWExMDAwMDAwMDAsIDB4MmI0MTQxZGYwMDAwMDAwMCwgMHg0OTc5NjlmNTAwMDAwMDAwLAorICAgIDB4NjdkMGIxMjMwMDAwMDAwMCwgMHgwNWU4OTkwOTAwMDAwMDAwLCAweGEzYTBlMTc3MDAwMDAwMDAsCisgICAgMHhjMTk4Yzk1ZDAwMDAwMDAwLCAweGRhNjc2MThiMDAwMDAwMDAsIDB4Yjg1ZjQ5YTEwMDAwMDAwMCwKKyAgICAweDFlMTczMWRmMDAwMDAwMDAsIDB4N2MyZjE5ZjUwMDAwMDAwMCwgMHg1Mjg2YzEyMzAwMDAwMDAwLAorICAgIDB4MzBiZWU5MDkwMDAwMDAwMCwgMHg5NmY2OTE3NzAwMDAwMDAwLCAweGY0Y2ViOTVkMDAwMDAwMDAsCisgICAgMHg4YmEyNTEwMTAwMDAwMDAwLCAweGU5OWE3OTJiMDAwMDAwMDAsIDB4NGZkMjAxNTUwMDAwMDAwMCwKKyAgICAweDJkZWEyOTdmMDAwMDAwMDAsIDB4MDM0M2YxYTkwMDAwMDAwMCwgMHg2MTdiZDk4MzAwMDAwMDAwLAorICAgIDB4YzczM2ExZmQwMDAwMDAwMCwgMHhhNTBiODlkNzAwMDAwMDAwLCAweDM5ZWI3MTQ0MDAwMDAwMDAsCisgICAgMHg1YmQzNTk2ZTAwMDAwMDAwLCAweGZkOWIyMTEwMDAwMDAwMDAsIDB4OWZhMzA5M2EwMDAwMDAwMCwKKyAgICAweGIxMGFkMWVjMDAwMDAwMDAsIDB4ZDMzMmY5YzYwMDAwMDAwMCwgMHg3NTdhODFiODAwMDAwMDAwLAorICAgIDB4MTc0MmE5OTIwMDAwMDAwMCwgMHg2ODJlNDFjZTAwMDAwMDAwLCAweDBhMTY2OWU0MDAwMDAwMDAsCisgICAgMHhhYzVlMTE5YTAwMDAwMDAwLCAweGNlNjYzOWIwMDAwMDAwMDAsIDB4ZTBjZmUxNjYwMDAwMDAwMCwKKyAgICAweDgyZjdjOTRjMDAwMDAwMDAsIDB4MjRiZmIxMzIwMDAwMDAwMCwgMHg0Njg3OTkxODAwMDAwMDAwLAorICAgIDB4NTM0NzkxNDQwMDAwMDAwMCwgMHgzMTdmYjk2ZTAwMDAwMDAwLCAweDk3MzdjMTEwMDAwMDAwMDAsCisgICAgMHhmNTBmZTkzYTAwMDAwMDAwLCAweGRiYTYzMWVjMDAwMDAwMDAsIDB4Yjk5ZTE5YzYwMDAwMDAwMCwKKyAgICAweDFmZDY2MWI4MDAwMDAwMDAsIDB4N2RlZTQ5OTIwMDAwMDAwMCwgMHgwMjgyYTFjZTAwMDAwMDAwLAorICAgIDB4NjBiYTg5ZTQwMDAwMDAwMCwgMHhjNmYyZjE5YTAwMDAwMDAwLCAweGE0Y2FkOWIwMDAwMDAwMDAsCisgICAgMHg4YTYzMDE2NjAwMDAwMDAwLCAweGU4NWIyOTRjMDAwMDAwMDAsIDB4NGUxMzUxMzIwMDAwMDAwMCwKKyAgICAweDJjMmI3OTE4MDAwMDAwMDAsIDB4YjBjYjgxOGIwMDAwMDAwMCwgMHhkMmYzYTlhMTAwMDAwMDAwLAorICAgIDB4NzRiYmQxZGYwMDAwMDAwMCwgMHgxNjgzZjlmNTAwMDAwMDAwLCAweDM4MmEyMTIzMDAwMDAwMDAsCisgICAgMHg1YTEyMDkwOTAwMDAwMDAwLCAweGZjNWE3MTc3MDAwMDAwMDAsIDB4OWU2MjU5NWQwMDAwMDAwMCwKKyAgICAweGUxMGViMTAxMDAwMDAwMDAsIDB4ODMzNjk5MmIwMDAwMDAwMCwgMHgyNTdlZTE1NTAwMDAwMDAwLAorICAgIDB4NDc0NmM5N2YwMDAwMDAwMCwgMHg2OWVmMTFhOTAwMDAwMDAwLCAweDBiZDczOTgzMDAwMDAwMDAsCisgICAgMHhhZDlmNDFmZDAwMDAwMDAwLCAweGNmYTc2OWQ3MDAwMDAwMDAsIDB4ZDQ1OGMxMDEwMDAwMDAwMCwKKyAgICAweGI2NjBlOTJiMDAwMDAwMDAsIDB4MTAyODkxNTUwMDAwMDAwMCwgMHg3MjEwYjk3ZjAwMDAwMDAwLAorICAgIDB4NWNiOTYxYTkwMDAwMDAwMCwgMHgzZTgxNDk4MzAwMDAwMDAwLCAweDk4YzkzMWZkMDAwMDAwMDAsCisgICAgMHhmYWYxMTlkNzAwMDAwMDAwLCAweDg1OWRmMThiMDAwMDAwMDAsIDB4ZTdhNWQ5YTEwMDAwMDAwMCwKKyAgICAweDQxZWRhMWRmMDAwMDAwMDAsIDB4MjNkNTg5ZjUwMDAwMDAwMCwgMHgwZDdjNTEyMzAwMDAwMDAwLAorICAgIDB4NmY0NDc5MDkwMDAwMDAwMCwgMHhjOTBjMDE3NzAwMDAwMDAwLCAweGFiMzQyOTVkMDAwMDAwMDAsCisgICAgMHgzN2Q0ZDFjZTAwMDAwMDAwLCAweDU1ZWNmOWU0MDAwMDAwMDAsIDB4ZjNhNDgxOWEwMDAwMDAwMCwKKyAgICAweDkxOWNhOWIwMDAwMDAwMDAsIDB4YmYzNTcxNjYwMDAwMDAwMCwgMHhkZDBkNTk0YzAwMDAwMDAwLAorICAgIDB4N2I0NTIxMzIwMDAwMDAwMCwgMHgxOTdkMDkxODAwMDAwMDAwLCAweDY2MTFlMTQ0MDAwMDAwMDAsCisgICAgMHgwNDI5Yzk2ZTAwMDAwMDAwLCAweGEyNjFiMTEwMDAwMDAwMDAsIDB4YzA1OTk5M2EwMDAwMDAwMCwKKyAgICAweGVlZjA0MWVjMDAwMDAwMDAsIDB4OGNjODY5YzYwMDAwMDAwMCwgMHgyYTgwMTFiODAwMDAwMDAwLAorICAgIDB4NDhiODM5OTIwMDAwMDAwMH0sCisgICB7MHgwMDAwMDAwMDAwMDAwMDAwLCAweDRjMjg5NmEzMDAwMDAwMDAsIDB4ZDk1NjVkOWMwMDAwMDAwMCwKKyAgICAweDk1N2VjYjNmMDAwMDAwMDAsIDB4ZjNhYmNiZTMwMDAwMDAwMCwgMHhiZjgzNWQ0MDAwMDAwMDAwLAorICAgIDB4MmFmZDk2N2YwMDAwMDAwMCwgMHg2NmQ1MDBkYzAwMDAwMDAwLCAweGE3NTFlNjFjMDAwMDAwMDAsCisgICAgMHhlYjc5NzBiZjAwMDAwMDAwLCAweDdlMDdiYjgwMDAwMDAwMDAsIDB4MzIyZjJkMjMwMDAwMDAwMCwKKyAgICAweDU0ZmEyZGZmMDAwMDAwMDAsIDB4MThkMmJiNWMwMDAwMDAwMCwgMHg4ZGFjNzA2MzAwMDAwMDAwLAorICAgIDB4YzE4NGU2YzAwMDAwMDAwMCwgMHg0ZWEzY2MzOTAwMDAwMDAwLCAweDAyOGI1YTlhMDAwMDAwMDAsCisgICAgMHg5N2Y1OTFhNTAwMDAwMDAwLCAweGRiZGQwNzA2MDAwMDAwMDAsIDB4YmQwODA3ZGEwMDAwMDAwMCwKKyAgICAweGYxMjA5MTc5MDAwMDAwMDAsIDB4NjQ1ZTVhNDYwMDAwMDAwMCwgMHgyODc2Y2NlNTAwMDAwMDAwLAorICAgIDB4ZTlmMjJhMjUwMDAwMDAwMCwgMHhhNWRhYmM4NjAwMDAwMDAwLCAweDMwYTQ3N2I5MDAwMDAwMDAsCisgICAgMHg3YzhjZTExYTAwMDAwMDAwLCAweDFhNTllMWM2MDAwMDAwMDAsIDB4NTY3MTc3NjUwMDAwMDAwMCwKKyAgICAweGMzMGZiYzVhMDAwMDAwMDAsIDB4OGYyNzJhZjkwMDAwMDAwMCwgMHg5YzQ2OTk3MzAwMDAwMDAwLAorICAgIDB4ZDA2ZTBmZDAwMDAwMDAwMCwgMHg0NTEwYzRlZjAwMDAwMDAwLCAweDA5Mzg1MjRjMDAwMDAwMDAsCisgICAgMHg2ZmVkNTI5MDAwMDAwMDAwLCAweDIzYzVjNDMzMDAwMDAwMDAsIDB4YjZiYjBmMGMwMDAwMDAwMCwKKyAgICAweGZhOTM5OWFmMDAwMDAwMDAsIDB4M2IxNzdmNmYwMDAwMDAwMCwgMHg3NzNmZTljYzAwMDAwMDAwLAorICAgIDB4ZTI0MTIyZjMwMDAwMDAwMCwgMHhhZTY5YjQ1MDAwMDAwMDAwLCAweGM4YmNiNDhjMDAwMDAwMDAsCisgICAgMHg4NDk0MjIyZjAwMDAwMDAwLCAweDExZWFlOTEwMDAwMDAwMDAsIDB4NWRjMjdmYjMwMDAwMDAwMCwKKyAgICAweGQyZTU1NTRhMDAwMDAwMDAsIDB4OWVjZGMzZTkwMDAwMDAwMCwgMHgwYmIzMDhkNjAwMDAwMDAwLAorICAgIDB4NDc5YjllNzUwMDAwMDAwMCwgMHgyMTRlOWVhOTAwMDAwMDAwLCAweDZkNjYwODBhMDAwMDAwMDAsCisgICAgMHhmODE4YzMzNTAwMDAwMDAwLCAweGI0MzA1NTk2MDAwMDAwMDAsIDB4NzViNGIzNTYwMDAwMDAwMCwKKyAgICAweDM5OWMyNWY1MDAwMDAwMDAsIDB4YWNlMmVlY2EwMDAwMDAwMCwgMHhlMGNhNzg2OTAwMDAwMDAwLAorICAgIDB4ODYxZjc4YjUwMDAwMDAwMCwgMHhjYTM3ZWUxNjAwMDAwMDAwLCAweDVmNDkyNTI5MDAwMDAwMDAsCisgICAgMHgxMzYxYjM4YTAwMDAwMDAwLCAweDM4OGQzMmU3MDAwMDAwMDAsIDB4NzRhNWE0NDQwMDAwMDAwMCwKKyAgICAweGUxZGI2ZjdiMDAwMDAwMDAsIDB4YWRmM2Y5ZDgwMDAwMDAwMCwgMHhjYjI2ZjkwNDAwMDAwMDAwLAorICAgIDB4ODcwZTZmYTcwMDAwMDAwMCwgMHgxMjcwYTQ5ODAwMDAwMDAwLCAweDVlNTgzMjNiMDAwMDAwMDAsCisgICAgMHg5ZmRjZDRmYjAwMDAwMDAwLCAweGQzZjQ0MjU4MDAwMDAwMDAsIDB4NDY4YTg5NjcwMDAwMDAwMCwKKyAgICAweDBhYTIxZmM0MDAwMDAwMDAsIDB4NmM3NzFmMTgwMDAwMDAwMCwgMHgyMDVmODliYjAwMDAwMDAwLAorICAgIDB4YjUyMTQyODQwMDAwMDAwMCwgMHhmOTA5ZDQyNzAwMDAwMDAwLCAweDc2MmVmZWRlMDAwMDAwMDAsCisgICAgMHgzYTA2Njg3ZDAwMDAwMDAwLCAweGFmNzhhMzQyMDAwMDAwMDAsIDB4ZTM1MDM1ZTEwMDAwMDAwMCwKKyAgICAweDg1ODUzNTNkMDAwMDAwMDAsIDB4YzlhZGEzOWUwMDAwMDAwMCwgMHg1Y2QzNjhhMTAwMDAwMDAwLAorICAgIDB4MTBmYmZlMDIwMDAwMDAwMCwgMHhkMTdmMThjMjAwMDAwMDAwLCAweDlkNTc4ZTYxMDAwMDAwMDAsCisgICAgMHgwODI5NDU1ZTAwMDAwMDAwLCAweDQ0MDFkM2ZkMDAwMDAwMDAsIDB4MjJkNGQzMjEwMDAwMDAwMCwKKyAgICAweDZlZmM0NTgyMDAwMDAwMDAsIDB4ZmI4MjhlYmQwMDAwMDAwMCwgMHhiN2FhMTgxZTAwMDAwMDAwLAorICAgIDB4YTRjYmFiOTQwMDAwMDAwMCwgMHhlOGUzM2QzNzAwMDAwMDAwLCAweDdkOWRmNjA4MDAwMDAwMDAsCisgICAgMHgzMWI1NjBhYjAwMDAwMDAwLCAweDU3NjA2MDc3MDAwMDAwMDAsIDB4MWI0OGY2ZDQwMDAwMDAwMCwKKyAgICAweDhlMzYzZGViMDAwMDAwMDAsIDB4YzIxZWFiNDgwMDAwMDAwMCwgMHgwMzlhNGQ4ODAwMDAwMDAwLAorICAgIDB4NGZiMmRiMmIwMDAwMDAwMCwgMHhkYWNjMTAxNDAwMDAwMDAwLCAweDk2ZTQ4NmI3MDAwMDAwMDAsCisgICAgMHhmMDMxODY2YjAwMDAwMDAwLCAweGJjMTkxMGM4MDAwMDAwMDAsIDB4Mjk2N2RiZjcwMDAwMDAwMCwKKyAgICAweDY1NGY0ZDU0MDAwMDAwMDAsIDB4ZWE2ODY3YWQwMDAwMDAwMCwgMHhhNjQwZjEwZTAwMDAwMDAwLAorICAgIDB4MzMzZTNhMzEwMDAwMDAwMCwgMHg3ZjE2YWM5MjAwMDAwMDAwLCAweDE5YzNhYzRlMDAwMDAwMDAsCisgICAgMHg1NWViM2FlZDAwMDAwMDAwLCAweGMwOTVmMWQyMDAwMDAwMDAsIDB4OGNiZDY3NzEwMDAwMDAwMCwKKyAgICAweDRkMzk4MWIxMDAwMDAwMDAsIDB4MDExMTE3MTIwMDAwMDAwMCwgMHg5NDZmZGMyZDAwMDAwMDAwLAorICAgIDB4ZDg0NzRhOGUwMDAwMDAwMCwgMHhiZTkyNGE1MjAwMDAwMDAwLCAweGYyYmFkY2YxMDAwMDAwMDAsCisgICAgMHg2N2M0MTdjZTAwMDAwMDAwLCAweDJiZWM4MTZkMDAwMDAwMDAsIDB4MzExYzE0MTUwMDAwMDAwMCwKKyAgICAweDdkMzQ4MmI2MDAwMDAwMDAsIDB4ZTg0YTQ5ODkwMDAwMDAwMCwgMHhhNDYyZGYyYTAwMDAwMDAwLAorICAgIDB4YzJiN2RmZjYwMDAwMDAwMCwgMHg4ZTlmNDk1NTAwMDAwMDAwLCAweDFiZTE4MjZhMDAwMDAwMDAsCisgICAgMHg1N2M5MTRjOTAwMDAwMDAwLCAweDk2NGRmMjA5MDAwMDAwMDAsIDB4ZGE2NTY0YWEwMDAwMDAwMCwKKyAgICAweDRmMWJhZjk1MDAwMDAwMDAsIDB4MDMzMzM5MzYwMDAwMDAwMCwgMHg2NWU2MzllYTAwMDAwMDAwLAorICAgIDB4MjljZWFmNDkwMDAwMDAwMCwgMHhiY2IwNjQ3NjAwMDAwMDAwLCAweGYwOThmMmQ1MDAwMDAwMDAsCisgICAgMHg3ZmJmZDgyYzAwMDAwMDAwLCAweDMzOTc0ZThmMDAwMDAwMDAsIDB4YTZlOTg1YjAwMDAwMDAwMCwKKyAgICAweGVhYzExMzEzMDAwMDAwMDAsIDB4OGMxNDEzY2YwMDAwMDAwMCwgMHhjMDNjODU2YzAwMDAwMDAwLAorICAgIDB4NTU0MjRlNTMwMDAwMDAwMCwgMHgxOTZhZDhmMDAwMDAwMDAwLCAweGQ4ZWUzZTMwMDAwMDAwMDAsCisgICAgMHg5NGM2YTg5MzAwMDAwMDAwLCAweDAxYjg2M2FjMDAwMDAwMDAsIDB4NGQ5MGY1MGYwMDAwMDAwMCwKKyAgICAweDJiNDVmNWQzMDAwMDAwMDAsIDB4Njc2ZDYzNzAwMDAwMDAwMCwgMHhmMjEzYTg0ZjAwMDAwMDAwLAorICAgIDB4YmUzYjNlZWMwMDAwMDAwMCwgMHhhZDVhOGQ2NjAwMDAwMDAwLCAweGUxNzIxYmM1MDAwMDAwMDAsCisgICAgMHg3NDBjZDBmYTAwMDAwMDAwLCAweDM4MjQ0NjU5MDAwMDAwMDAsIDB4NWVmMTQ2ODUwMDAwMDAwMCwKKyAgICAweDEyZDlkMDI2MDAwMDAwMDAsIDB4ODdhNzFiMTkwMDAwMDAwMCwgMHhjYjhmOGRiYTAwMDAwMDAwLAorICAgIDB4MGEwYjZiN2EwMDAwMDAwMCwgMHg0NjIzZmRkOTAwMDAwMDAwLCAweGQzNWQzNmU2MDAwMDAwMDAsCisgICAgMHg5Zjc1YTA0NTAwMDAwMDAwLCAweGY5YTBhMDk5MDAwMDAwMDAsIDB4YjU4ODM2M2EwMDAwMDAwMCwKKyAgICAweDIwZjZmZDA1MDAwMDAwMDAsIDB4NmNkZTZiYTYwMDAwMDAwMCwgMHhlM2Y5NDE1ZjAwMDAwMDAwLAorICAgIDB4YWZkMWQ3ZmMwMDAwMDAwMCwgMHgzYWFmMWNjMzAwMDAwMDAwLCAweDc2ODc4YTYwMDAwMDAwMDAsCisgICAgMHgxMDUyOGFiYzAwMDAwMDAwLCAweDVjN2ExYzFmMDAwMDAwMDAsIDB4YzkwNGQ3MjAwMDAwMDAwMCwKKyAgICAweDg1MmM0MTgzMDAwMDAwMDAsIDB4NDRhOGE3NDMwMDAwMDAwMCwgMHgwODgwMzFlMDAwMDAwMDAwLAorICAgIDB4OWRmZWZhZGYwMDAwMDAwMCwgMHhkMWQ2NmM3YzAwMDAwMDAwLCAweGI3MDM2Y2EwMDAwMDAwMDAsCisgICAgMHhmYjJiZmEwMzAwMDAwMDAwLCAweDZlNTUzMTNjMDAwMDAwMDAsIDB4MjI3ZGE3OWYwMDAwMDAwMCwKKyAgICAweDA5OTEyNmYyMDAwMDAwMDAsIDB4NDViOWIwNTEwMDAwMDAwMCwgMHhkMGM3N2I2ZTAwMDAwMDAwLAorICAgIDB4OWNlZmVkY2QwMDAwMDAwMCwgMHhmYTNhZWQxMTAwMDAwMDAwLCAweGI2MTI3YmIyMDAwMDAwMDAsCisgICAgMHgyMzZjYjA4ZDAwMDAwMDAwLCAweDZmNDQyNjJlMDAwMDAwMDAsIDB4YWVjMGMwZWUwMDAwMDAwMCwKKyAgICAweGUyZTg1NjRkMDAwMDAwMDAsIDB4Nzc5NjlkNzIwMDAwMDAwMCwgMHgzYmJlMGJkMTAwMDAwMDAwLAorICAgIDB4NWQ2YjBiMGQwMDAwMDAwMCwgMHgxMTQzOWRhZTAwMDAwMDAwLCAweDg0M2Q1NjkxMDAwMDAwMDAsCisgICAgMHhjODE1YzAzMjAwMDAwMDAwLCAweDQ3MzJlYWNiMDAwMDAwMDAsIDB4MGIxYTdjNjgwMDAwMDAwMCwKKyAgICAweDllNjRiNzU3MDAwMDAwMDAsIDB4ZDI0YzIxZjQwMDAwMDAwMCwgMHhiNDk5MjEyODAwMDAwMDAwLAorICAgIDB4ZjhiMWI3OGIwMDAwMDAwMCwgMHg2ZGNmN2NiNDAwMDAwMDAwLCAweDIxZTdlYTE3MDAwMDAwMDAsCisgICAgMHhlMDYzMGNkNzAwMDAwMDAwLCAweGFjNGI5YTc0MDAwMDAwMDAsIDB4MzkzNTUxNGIwMDAwMDAwMCwKKyAgICAweDc1MWRjN2U4MDAwMDAwMDAsIDB4MTNjOGM3MzQwMDAwMDAwMCwgMHg1ZmUwNTE5NzAwMDAwMDAwLAorICAgIDB4Y2E5ZTlhYTgwMDAwMDAwMCwgMHg4NmI2MGMwYjAwMDAwMDAwLCAweDk1ZDdiZjgxMDAwMDAwMDAsCisgICAgMHhkOWZmMjkyMjAwMDAwMDAwLCAweDRjODFlMjFkMDAwMDAwMDAsIDB4MDBhOTc0YmUwMDAwMDAwMCwKKyAgICAweDY2N2M3NDYyMDAwMDAwMDAsIDB4MmE1NGUyYzEwMDAwMDAwMCwgMHhiZjJhMjlmZTAwMDAwMDAwLAorICAgIDB4ZjMwMmJmNWQwMDAwMDAwMCwgMHgzMjg2NTk5ZDAwMDAwMDAwLCAweDdlYWVjZjNlMDAwMDAwMDAsCisgICAgMHhlYmQwMDQwMTAwMDAwMDAwLCAweGE3Zjg5MmEyMDAwMDAwMDAsIDB4YzEyZDkyN2UwMDAwMDAwMCwKKyAgICAweDhkMDUwNGRkMDAwMDAwMDAsIDB4MTg3YmNmZTIwMDAwMDAwMCwgMHg1NDUzNTk0MTAwMDAwMDAwLAorICAgIDB4ZGI3NDczYjgwMDAwMDAwMCwgMHg5NzVjZTUxYjAwMDAwMDAwLCAweDAyMjIyZTI0MDAwMDAwMDAsCisgICAgMHg0ZTBhYjg4NzAwMDAwMDAwLCAweDI4ZGZiODViMDAwMDAwMDAsIDB4NjRmNzJlZjgwMDAwMDAwMCwKKyAgICAweGYxODllNWM3MDAwMDAwMDAsIDB4YmRhMTczNjQwMDAwMDAwMCwgMHg3YzI1OTVhNDAwMDAwMDAwLAorICAgIDB4MzAwZDAzMDcwMDAwMDAwMCwgMHhhNTczYzgzODAwMDAwMDAwLCAweGU5NWI1ZTliMDAwMDAwMDAsCisgICAgMHg4ZjhlNWU0NzAwMDAwMDAwLCAweGMzYTZjOGU0MDAwMDAwMDAsIDB4NTZkODAzZGIwMDAwMDAwMCwKKyAgICAweDFhZjA5NTc4MDAwMDAwMDB9LAorICAgezB4MDAwMDAwMDAwMDAwMDAwMCwgMHg5MzliYzk3ZjAwMDAwMDAwLCAweDI2Mzc5M2ZmMDAwMDAwMDAsCisgICAgMHhiNWFjNWE4MDAwMDAwMDAwLCAweDBkNjg1NzI0MDAwMDAwMDAsIDB4OWVmMzllNWIwMDAwMDAwMCwKKyAgICAweDJiNWZjNGRiMDAwMDAwMDAsIDB4YjhjNDBkYTQwMDAwMDAwMCwgMHgxYWQwYWU0ODAwMDAwMDAwLAorICAgIDB4ODk0YjY3MzcwMDAwMDAwMCwgMHgzY2U3M2RiNzAwMDAwMDAwLCAweGFmN2NmNGM4MDAwMDAwMDAsCisgICAgMHgxN2I4Zjk2YzAwMDAwMDAwLCAweDg0MjMzMDEzMDAwMDAwMDAsIDB4MzE4ZjZhOTMwMDAwMDAwMCwKKyAgICAweGEyMTRhM2VjMDAwMDAwMDAsIDB4MzRhMDVkOTEwMDAwMDAwMCwgMHhhNzNiOTRlZTAwMDAwMDAwLAorICAgIDB4MTI5N2NlNmUwMDAwMDAwMCwgMHg4MTBjMDcxMTAwMDAwMDAwLCAweDM5YzgwYWI1MDAwMDAwMDAsCisgICAgMHhhYTUzYzNjYTAwMDAwMDAwLCAweDFmZmY5OTRhMDAwMDAwMDAsIDB4OGM2NDUwMzUwMDAwMDAwMCwKKyAgICAweDJlNzBmM2Q5MDAwMDAwMDAsIDB4YmRlYjNhYTYwMDAwMDAwMCwgMHgwODQ3NjAyNjAwMDAwMDAwLAorICAgIDB4OWJkY2E5NTkwMDAwMDAwMCwgMHgyMzE4YTRmZDAwMDAwMDAwLCAweGIwODM2ZDgyMDAwMDAwMDAsCisgICAgMHgwNTJmMzcwMjAwMDAwMDAwLCAweDk2YjRmZTdkMDAwMDAwMDAsIDB4Mjk0NmNhZjkwMDAwMDAwMCwKKyAgICAweGJhZGQwMzg2MDAwMDAwMDAsIDB4MGY3MTU5MDYwMDAwMDAwMCwgMHg5Y2VhOTA3OTAwMDAwMDAwLAorICAgIDB4MjQyZTlkZGQwMDAwMDAwMCwgMHhiN2I1NTRhMjAwMDAwMDAwLCAweDAyMTkwZTIyMDAwMDAwMDAsCisgICAgMHg5MTgyYzc1ZDAwMDAwMDAwLCAweDMzOTY2NGIxMDAwMDAwMDAsIDB4YTAwZGFkY2UwMDAwMDAwMCwKKyAgICAweDE1YTFmNzRlMDAwMDAwMDAsIDB4ODYzYTNlMzEwMDAwMDAwMCwgMHgzZWZlMzM5NTAwMDAwMDAwLAorICAgIDB4YWQ2NWZhZWEwMDAwMDAwMCwgMHgxOGM5YTA2YTAwMDAwMDAwLCAweDhiNTI2OTE1MDAwMDAwMDAsCisgICAgMHgxZGU2OTc2ODAwMDAwMDAwLCAweDhlN2Q1ZTE3MDAwMDAwMDAsIDB4M2JkMTA0OTcwMDAwMDAwMCwKKyAgICAweGE4NGFjZGU4MDAwMDAwMDAsIDB4MTA4ZWMwNGMwMDAwMDAwMCwgMHg4MzE1MDkzMzAwMDAwMDAwLAorICAgIDB4MzZiOTUzYjMwMDAwMDAwMCwgMHhhNTIyOWFjYzAwMDAwMDAwLCAweDA3MzYzOTIwMDAwMDAwMDAsCisgICAgMHg5NGFkZjA1ZjAwMDAwMDAwLCAweDIxMDFhYWRmMDAwMDAwMDAsIDB4YjI5YTYzYTAwMDAwMDAwMCwKKyAgICAweDBhNWU2ZTA0MDAwMDAwMDAsIDB4OTljNWE3N2IwMDAwMDAwMCwgMHgyYzY5ZmRmYjAwMDAwMDAwLAorICAgIDB4YmZmMjM0ODQwMDAwMDAwMCwgMHgxMzhhZTUyODAwMDAwMDAwLCAweDgwMTEyYzU3MDAwMDAwMDAsCisgICAgMHgzNWJkNzZkNzAwMDAwMDAwLCAweGE2MjZiZmE4MDAwMDAwMDAsIDB4MWVlMmIyMGMwMDAwMDAwMCwKKyAgICAweDhkNzk3YjczMDAwMDAwMDAsIDB4MzhkNTIxZjMwMDAwMDAwMCwgMHhhYjRlZTg4YzAwMDAwMDAwLAorICAgIDB4MDk1YTRiNjAwMDAwMDAwMCwgMHg5YWMxODIxZjAwMDAwMDAwLCAweDJmNmRkODlmMDAwMDAwMDAsCisgICAgMHhiY2Y2MTFlMDAwMDAwMDAwLCAweDA0MzIxYzQ0MDAwMDAwMDAsIDB4OTdhOWQ1M2IwMDAwMDAwMCwKKyAgICAweDIyMDU4ZmJiMDAwMDAwMDAsIDB4YjE5ZTQ2YzQwMDAwMDAwMCwgMHgyNzJhYjhiOTAwMDAwMDAwLAorICAgIDB4YjRiMTcxYzYwMDAwMDAwMCwgMHgwMTFkMmI0NjAwMDAwMDAwLCAweDkyODZlMjM5MDAwMDAwMDAsCisgICAgMHgyYTQyZWY5ZDAwMDAwMDAwLCAweGI5ZDkyNmUyMDAwMDAwMDAsIDB4MGM3NTdjNjIwMDAwMDAwMCwKKyAgICAweDlmZWViNTFkMDAwMDAwMDAsIDB4M2RmYTE2ZjEwMDAwMDAwMCwgMHhhZTYxZGY4ZTAwMDAwMDAwLAorICAgIDB4MWJjZDg1MGUwMDAwMDAwMCwgMHg4ODU2NGM3MTAwMDAwMDAwLCAweDMwOTI0MWQ1MDAwMDAwMDAsCisgICAgMHhhMzA5ODhhYTAwMDAwMDAwLCAweDE2YTVkMjJhMDAwMDAwMDAsIDB4ODUzZTFiNTUwMDAwMDAwMCwKKyAgICAweDNhY2MyZmQxMDAwMDAwMDAsIDB4YTk1N2U2YWUwMDAwMDAwMCwgMHgxY2ZiYmMyZTAwMDAwMDAwLAorICAgIDB4OGY2MDc1NTEwMDAwMDAwMCwgMHgzN2E0NzhmNTAwMDAwMDAwLCAweGE0M2ZiMThhMDAwMDAwMDAsCisgICAgMHgxMTkzZWIwYTAwMDAwMDAwLCAweDgyMDgyMjc1MDAwMDAwMDAsIDB4MjAxYzgxOTkwMDAwMDAwMCwKKyAgICAweGIzODc0OGU2MDAwMDAwMDAsIDB4MDYyYjEyNjYwMDAwMDAwMCwgMHg5NWIwZGIxOTAwMDAwMDAwLAorICAgIDB4MmQ3NGQ2YmQwMDAwMDAwMCwgMHhiZWVmMWZjMjAwMDAwMDAwLCAweDBiNDM0NTQyMDAwMDAwMDAsCisgICAgMHg5OGQ4OGMzZDAwMDAwMDAwLCAweDBlNmM3MjQwMDAwMDAwMDAsIDB4OWRmN2JiM2YwMDAwMDAwMCwKKyAgICAweDI4NWJlMWJmMDAwMDAwMDAsIDB4YmJjMDI4YzAwMDAwMDAwMCwgMHgwMzA0MjU2NDAwMDAwMDAwLAorICAgIDB4OTA5ZmVjMWIwMDAwMDAwMCwgMHgyNTMzYjY5YjAwMDAwMDAwLCAweGI2YTg3ZmU0MDAwMDAwMDAsCisgICAgMHgxNGJjZGMwODAwMDAwMDAwLCAweDg3MjcxNTc3MDAwMDAwMDAsIDB4MzI4YjRmZjcwMDAwMDAwMCwKKyAgICAweGExMTA4Njg4MDAwMDAwMDAsIDB4MTlkNDhiMmMwMDAwMDAwMCwgMHg4YTRmNDI1MzAwMDAwMDAwLAorICAgIDB4M2ZlMzE4ZDMwMDAwMDAwMCwgMHhhYzc4ZDFhYzAwMDAwMDAwLCAweDI2MTRjYjUxMDAwMDAwMDAsCisgICAgMHhiNThmMDIyZTAwMDAwMDAwLCAweDAwMjM1OGFlMDAwMDAwMDAsIDB4OTNiODkxZDEwMDAwMDAwMCwKKyAgICAweDJiN2M5Yzc1MDAwMDAwMDAsIDB4YjhlNzU1MGEwMDAwMDAwMCwgMHgwZDRiMGY4YTAwMDAwMDAwLAorICAgIDB4OWVkMGM2ZjUwMDAwMDAwMCwgMHgzY2M0NjUxOTAwMDAwMDAwLCAweGFmNWZhYzY2MDAwMDAwMDAsCisgICAgMHgxYWYzZjZlNjAwMDAwMDAwLCAweDg5NjgzZjk5MDAwMDAwMDAsIDB4MzFhYzMyM2QwMDAwMDAwMCwKKyAgICAweGEyMzdmYjQyMDAwMDAwMDAsIDB4MTc5YmExYzIwMDAwMDAwMCwgMHg4NDAwNjhiZDAwMDAwMDAwLAorICAgIDB4MTJiNDk2YzAwMDAwMDAwMCwgMHg4MTJmNWZiZjAwMDAwMDAwLCAweDM0ODMwNTNmMDAwMDAwMDAsCisgICAgMHhhNzE4Y2M0MDAwMDAwMDAwLCAweDFmZGNjMWU0MDAwMDAwMDAsIDB4OGM0NzA4OWIwMDAwMDAwMCwKKyAgICAweDM5ZWI1MjFiMDAwMDAwMDAsIDB4YWE3MDliNjQwMDAwMDAwMCwgMHgwODY0Mzg4ODAwMDAwMDAwLAorICAgIDB4OWJmZmYxZjcwMDAwMDAwMCwgMHgyZTUzYWI3NzAwMDAwMDAwLCAweGJkYzg2MjA4MDAwMDAwMDAsCisgICAgMHgwNTBjNmZhYzAwMDAwMDAwLCAweDk2OTdhNmQzMDAwMDAwMDAsIDB4MjMzYmZjNTMwMDAwMDAwMCwKKyAgICAweGIwYTAzNTJjMDAwMDAwMDAsIDB4MGY1MjAxYTgwMDAwMDAwMCwgMHg5Y2M5YzhkNzAwMDAwMDAwLAorICAgIDB4Mjk2NTkyNTcwMDAwMDAwMCwgMHhiYWZlNWIyODAwMDAwMDAwLCAweDAyM2E1NjhjMDAwMDAwMDAsCisgICAgMHg5MWExOWZmMzAwMDAwMDAwLCAweDI0MGRjNTczMDAwMDAwMDAsIDB4Yjc5NjBjMGMwMDAwMDAwMCwKKyAgICAweDE1ODJhZmUwMDAwMDAwMDAsIDB4ODYxOTY2OWYwMDAwMDAwMCwgMHgzM2I1M2MxZjAwMDAwMDAwLAorICAgIDB4YTAyZWY1NjAwMDAwMDAwMCwgMHgxOGVhZjhjNDAwMDAwMDAwLCAweDhiNzEzMWJiMDAwMDAwMDAsCisgICAgMHgzZWRkNmIzYjAwMDAwMDAwLCAweGFkNDZhMjQ0MDAwMDAwMDAsIDB4M2JmMjVjMzkwMDAwMDAwMCwKKyAgICAweGE4Njk5NTQ2MDAwMDAwMDAsIDB4MWRjNWNmYzYwMDAwMDAwMCwgMHg4ZTVlMDZiOTAwMDAwMDAwLAorICAgIDB4MzY5YTBiMWQwMDAwMDAwMCwgMHhhNTAxYzI2MjAwMDAwMDAwLCAweDEwYWQ5OGUyMDAwMDAwMDAsCisgICAgMHg4MzM2NTE5ZDAwMDAwMDAwLCAweDIxMjJmMjcxMDAwMDAwMDAsIDB4YjJiOTNiMGUwMDAwMDAwMCwKKyAgICAweDA3MTU2MThlMDAwMDAwMDAsIDB4OTQ4ZWE4ZjEwMDAwMDAwMCwgMHgyYzRhYTU1NTAwMDAwMDAwLAorICAgIDB4YmZkMTZjMmEwMDAwMDAwMCwgMHgwYTdkMzZhYTAwMDAwMDAwLCAweDk5ZTZmZmQ1MDAwMDAwMDAsCisgICAgMHgzNTllMmU3OTAwMDAwMDAwLCAweGE2MDVlNzA2MDAwMDAwMDAsIDB4MTNhOWJkODYwMDAwMDAwMCwKKyAgICAweDgwMzI3NGY5MDAwMDAwMDAsIDB4MzhmNjc5NWQwMDAwMDAwMCwgMHhhYjZkYjAyMjAwMDAwMDAwLAorICAgIDB4MWVjMWVhYTIwMDAwMDAwMCwgMHg4ZDVhMjNkZDAwMDAwMDAwLCAweDJmNGU4MDMxMDAwMDAwMDAsCisgICAgMHhiY2Q1NDk0ZTAwMDAwMDAwLCAweDA5NzkxM2NlMDAwMDAwMDAsIDB4OWFlMmRhYjEwMDAwMDAwMCwKKyAgICAweDIyMjZkNzE1MDAwMDAwMDAsIDB4YjFiZDFlNmEwMDAwMDAwMCwgMHgwNDExNDRlYTAwMDAwMDAwLAorICAgIDB4OTc4YThkOTUwMDAwMDAwMCwgMHgwMTNlNzNlODAwMDAwMDAwLCAweDkyYTViYTk3MDAwMDAwMDAsCisgICAgMHgyNzA5ZTAxNzAwMDAwMDAwLCAweGI0OTIyOTY4MDAwMDAwMDAsIDB4MGM1NjI0Y2MwMDAwMDAwMCwKKyAgICAweDlmY2RlZGIzMDAwMDAwMDAsIDB4MmE2MWI3MzMwMDAwMDAwMCwgMHhiOWZhN2U0YzAwMDAwMDAwLAorICAgIDB4MWJlZWRkYTAwMDAwMDAwMCwgMHg4ODc1MTRkZjAwMDAwMDAwLCAweDNkZDk0ZTVmMDAwMDAwMDAsCisgICAgMHhhZTQyODcyMDAwMDAwMDAwLCAweDE2ODY4YTg0MDAwMDAwMDAsIDB4ODUxZDQzZmIwMDAwMDAwMCwKKyAgICAweDMwYjExOTdiMDAwMDAwMDAsIDB4YTMyYWQwMDQwMDAwMDAwMCwgMHgxY2Q4ZTQ4MDAwMDAwMDAwLAorICAgIDB4OGY0MzJkZmYwMDAwMDAwMCwgMHgzYWVmNzc3ZjAwMDAwMDAwLCAweGE5NzRiZTAwMDAwMDAwMDAsCisgICAgMHgxMWIwYjNhNDAwMDAwMDAwLCAweDgyMmI3YWRiMDAwMDAwMDAsIDB4Mzc4NzIwNWIwMDAwMDAwMCwKKyAgICAweGE0MWNlOTI0MDAwMDAwMDAsIDB4MDYwODRhYzgwMDAwMDAwMCwgMHg5NTkzODNiNzAwMDAwMDAwLAorICAgIDB4MjAzZmQ5MzcwMDAwMDAwMCwgMHhiM2E0MTA0ODAwMDAwMDAwLCAweDBiNjAxZGVjMDAwMDAwMDAsCisgICAgMHg5OGZiZDQ5MzAwMDAwMDAwLCAweDJkNTc4ZTEzMDAwMDAwMDAsIDB4YmVjYzQ3NmMwMDAwMDAwMCwKKyAgICAweDI4NzhiOTExMDAwMDAwMDAsIDB4YmJlMzcwNmUwMDAwMDAwMCwgMHgwZTRmMmFlZTAwMDAwMDAwLAorICAgIDB4OWRkNGUzOTEwMDAwMDAwMCwgMHgyNTEwZWUzNTAwMDAwMDAwLCAweGI2OGIyNzRhMDAwMDAwMDAsCisgICAgMHgwMzI3N2RjYTAwMDAwMDAwLCAweDkwYmNiNGI1MDAwMDAwMDAsIDB4MzJhODE3NTkwMDAwMDAwMCwKKyAgICAweGExMzNkZTI2MDAwMDAwMDAsIDB4MTQ5Zjg0YTYwMDAwMDAwMCwgMHg4NzA0NGRkOTAwMDAwMDAwLAorICAgIDB4M2ZjMDQwN2QwMDAwMDAwMCwgMHhhYzViODkwMjAwMDAwMDAwLCAweDE5ZjdkMzgyMDAwMDAwMDAsCisgICAgMHg4YTZjMWFmZDAwMDAwMDAwfSwKKyAgIHsweDAwMDAwMDAwMDAwMDAwMDAsIDB4NjUwYjc5NjkwMDAwMDAwMCwgMHhjYTE2ZjJkMjAwMDAwMDAwLAorICAgIDB4YWYxZDhiYmIwMDAwMDAwMCwgMHhkNTJiOTU3ZTAwMDAwMDAwLCAweGIwMjBlYzE3MDAwMDAwMDAsCisgICAgMHgxZjNkNjdhYzAwMDAwMDAwLCAweDdhMzYxZWM1MDAwMDAwMDAsIDB4YWE1NzJhZmQwMDAwMDAwMCwKKyAgICAweGNmNWM1Mzk0MDAwMDAwMDAsIDB4NjA0MWQ4MmYwMDAwMDAwMCwgMHgwNTRhYTE0NjAwMDAwMDAwLAorICAgIDB4N2Y3Y2JmODMwMDAwMDAwMCwgMHgxYTc3YzZlYTAwMDAwMDAwLCAweGI1NmE0ZDUxMDAwMDAwMDAsCisgICAgMHhkMDYxMzQzODAwMDAwMDAwLCAweDE1YTkyNTIxMDAwMDAwMDAsIDB4NzBhMjVjNDgwMDAwMDAwMCwKKyAgICAweGRmYmZkN2YzMDAwMDAwMDAsIDB4YmFiNGFlOWEwMDAwMDAwMCwgMHhjMDgyYjA1ZjAwMDAwMDAwLAorICAgIDB4YTU4OWM5MzYwMDAwMDAwMCwgMHgwYTk0NDI4ZDAwMDAwMDAwLCAweDZmOWYzYmU0MDAwMDAwMDAsCisgICAgMHhiZmZlMGZkYzAwMDAwMDAwLCAweGRhZjU3NmI1MDAwMDAwMDAsIDB4NzVlOGZkMGUwMDAwMDAwMCwKKyAgICAweDEwZTM4NDY3MDAwMDAwMDAsIDB4NmFkNTlhYTIwMDAwMDAwMCwgMHgwZmRlZTNjYjAwMDAwMDAwLAorICAgIDB4YTBjMzY4NzAwMDAwMDAwMCwgMHhjNWM4MTExOTAwMDAwMDAwLCAweDJhNTI0YjQyMDAwMDAwMDAsCisgICAgMHg0ZjU5MzIyYjAwMDAwMDAwLCAweGUwNDRiOTkwMDAwMDAwMDAsIDB4ODU0ZmMwZjkwMDAwMDAwMCwKKyAgICAweGZmNzlkZTNjMDAwMDAwMDAsIDB4OWE3MmE3NTUwMDAwMDAwMCwgMHgzNTZmMmNlZTAwMDAwMDAwLAorICAgIDB4NTA2NDU1ODcwMDAwMDAwMCwgMHg4MDA1NjFiZjAwMDAwMDAwLCAweGU1MGUxOGQ2MDAwMDAwMDAsCisgICAgMHg0YTEzOTM2ZDAwMDAwMDAwLCAweDJmMThlYTA0MDAwMDAwMDAsIDB4NTUyZWY0YzEwMDAwMDAwMCwKKyAgICAweDMwMjU4ZGE4MDAwMDAwMDAsIDB4OWYzODA2MTMwMDAwMDAwMCwgMHhmYTMzN2Y3YTAwMDAwMDAwLAorICAgIDB4M2ZmYjZlNjMwMDAwMDAwMCwgMHg1YWYwMTcwYTAwMDAwMDAwLCAweGY1ZWQ5Y2IxMDAwMDAwMDAsCisgICAgMHg5MGU2ZTVkODAwMDAwMDAwLCAweGVhZDBmYjFkMDAwMDAwMDAsIDB4OGZkYjgyNzQwMDAwMDAwMCwKKyAgICAweDIwYzYwOWNmMDAwMDAwMDAsIDB4NDVjZDcwYTYwMDAwMDAwMCwgMHg5NWFjNDQ5ZTAwMDAwMDAwLAorICAgIDB4ZjBhNzNkZjcwMDAwMDAwMCwgMHg1ZmJhYjY0YzAwMDAwMDAwLCAweDNhYjFjZjI1MDAwMDAwMDAsCisgICAgMHg0MDg3ZDFlMDAwMDAwMDAwLCAweDI1OGNhODg5MDAwMDAwMDAsIDB4OGE5MTIzMzIwMDAwMDAwMCwKKyAgICAweGVmOWE1YTViMDAwMDAwMDAsIDB4NTRhNDk2ODQwMDAwMDAwMCwgMHgzMWFmZWZlZDAwMDAwMDAwLAorICAgIDB4OWViMjY0NTYwMDAwMDAwMCwgMHhmYmI5MWQzZjAwMDAwMDAwLCAweDgxOGYwM2ZhMDAwMDAwMDAsCisgICAgMHhlNDg0N2E5MzAwMDAwMDAwLCAweDRiOTlmMTI4MDAwMDAwMDAsIDB4MmU5Mjg4NDEwMDAwMDAwMCwKKyAgICAweGZlZjNiYzc5MDAwMDAwMDAsIDB4OWJmOGM1MTAwMDAwMDAwMCwgMHgzNGU1NGVhYjAwMDAwMDAwLAorICAgIDB4NTFlZTM3YzIwMDAwMDAwMCwgMHgyYmQ4MjkwNzAwMDAwMDAwLCAweDRlZDM1MDZlMDAwMDAwMDAsCisgICAgMHhlMWNlZGJkNTAwMDAwMDAwLCAweDg0YzVhMmJjMDAwMDAwMDAsIDB4NDEwZGIzYTUwMDAwMDAwMCwKKyAgICAweDI0MDZjYWNjMDAwMDAwMDAsIDB4OGIxYjQxNzcwMDAwMDAwMCwgMHhlZTEwMzgxZTAwMDAwMDAwLAorICAgIDB4OTQyNjI2ZGIwMDAwMDAwMCwgMHhmMTJkNWZiMjAwMDAwMDAwLCAweDVlMzBkNDA5MDAwMDAwMDAsCisgICAgMHgzYjNiYWQ2MDAwMDAwMDAwLCAweGViNWE5OTU4MDAwMDAwMDAsIDB4OGU1MWUwMzEwMDAwMDAwMCwKKyAgICAweDIxNGM2YjhhMDAwMDAwMDAsIDB4NDQ0NzEyZTMwMDAwMDAwMCwgMHgzZTcxMGMyNjAwMDAwMDAwLAorICAgIDB4NWI3YTc1NGYwMDAwMDAwMCwgMHhmNDY3ZmVmNDAwMDAwMDAwLCAweDkxNmM4NzlkMDAwMDAwMDAsCisgICAgMHg3ZWY2ZGRjNjAwMDAwMDAwLCAweDFiZmRhNGFmMDAwMDAwMDAsIDB4YjRlMDJmMTQwMDAwMDAwMCwKKyAgICAweGQxZWI1NjdkMDAwMDAwMDAsIDB4YWJkZDQ4YjgwMDAwMDAwMCwgMHhjZWQ2MzFkMTAwMDAwMDAwLAorICAgIDB4NjFjYmJhNmEwMDAwMDAwMCwgMHgwNGMwYzMwMzAwMDAwMDAwLCAweGQ0YTFmNzNiMDAwMDAwMDAsCisgICAgMHhiMWFhOGU1MjAwMDAwMDAwLCAweDFlYjcwNWU5MDAwMDAwMDAsIDB4N2JiYzdjODAwMDAwMDAwMCwKKyAgICAweDAxOGE2MjQ1MDAwMDAwMDAsIDB4NjQ4MTFiMmMwMDAwMDAwMCwgMHhjYjljOTA5NzAwMDAwMDAwLAorICAgIDB4YWU5N2U5ZmUwMDAwMDAwMCwgMHg2YjVmZjhlNzAwMDAwMDAwLCAweDBlNTQ4MThlMDAwMDAwMDAsCisgICAgMHhhMTQ5MGEzNTAwMDAwMDAwLCAweGM0NDI3MzVjMDAwMDAwMDAsIDB4YmU3NDZkOTkwMDAwMDAwMCwKKyAgICAweGRiN2YxNGYwMDAwMDAwMDAsIDB4NzQ2MjlmNGIwMDAwMDAwMCwgMHgxMTY5ZTYyMjAwMDAwMDAwLAorICAgIDB4YzEwOGQyMWEwMDAwMDAwMCwgMHhhNDAzYWI3MzAwMDAwMDAwLCAweDBiMWUyMGM4MDAwMDAwMDAsCisgICAgMHg2ZTE1NTlhMTAwMDAwMDAwLCAweDE0MjM0NzY0MDAwMDAwMDAsIDB4NzEyODNlMGQwMDAwMDAwMCwKKyAgICAweGRlMzViNWI2MDAwMDAwMDAsIDB4YmIzZWNjZGYwMDAwMDAwMCwgMHhlOTRlNWNkMjAwMDAwMDAwLAorICAgIDB4OGM0NTI1YmIwMDAwMDAwMCwgMHgyMzU4YWUwMDAwMDAwMDAwLCAweDQ2NTNkNzY5MDAwMDAwMDAsCisgICAgMHgzYzY1YzlhYzAwMDAwMDAwLCAweDU5NmViMGM1MDAwMDAwMDAsIDB4ZjY3MzNiN2UwMDAwMDAwMCwKKyAgICAweDkzNzg0MjE3MDAwMDAwMDAsIDB4NDMxOTc2MmYwMDAwMDAwMCwgMHgyNjEyMGY0NjAwMDAwMDAwLAorICAgIDB4ODkwZjg0ZmQwMDAwMDAwMCwgMHhlYzA0ZmQ5NDAwMDAwMDAwLCAweDk2MzJlMzUxMDAwMDAwMDAsCisgICAgMHhmMzM5OWEzODAwMDAwMDAwLCAweDVjMjQxMTgzMDAwMDAwMDAsIDB4MzkyZjY4ZWEwMDAwMDAwMCwKKyAgICAweGZjZTc3OWYzMDAwMDAwMDAsIDB4OTllYzAwOWEwMDAwMDAwMCwgMHgzNmYxOGIyMTAwMDAwMDAwLAorICAgIDB4NTNmYWYyNDgwMDAwMDAwMCwgMHgyOWNjZWM4ZDAwMDAwMDAwLCAweDRjYzc5NWU0MDAwMDAwMDAsCisgICAgMHhlM2RhMWU1ZjAwMDAwMDAwLCAweDg2ZDE2NzM2MDAwMDAwMDAsIDB4NTZiMDUzMGUwMDAwMDAwMCwKKyAgICAweDMzYmIyYTY3MDAwMDAwMDAsIDB4OWNhNmExZGMwMDAwMDAwMCwgMHhmOWFkZDhiNTAwMDAwMDAwLAorICAgIDB4ODM5YmM2NzAwMDAwMDAwMCwgMHhlNjkwYmYxOTAwMDAwMDAwLCAweDQ5OGQzNGEyMDAwMDAwMDAsCisgICAgMHgyYzg2NGRjYjAwMDAwMDAwLCAweGMzMWMxNzkwMDAwMDAwMDAsIDB4YTYxNzZlZjkwMDAwMDAwMCwKKyAgICAweDA5MGFlNTQyMDAwMDAwMDAsIDB4NmMwMTljMmIwMDAwMDAwMCwgMHgxNjM3ODJlZTAwMDAwMDAwLAorICAgIDB4NzMzY2ZiODcwMDAwMDAwMCwgMHhkYzIxNzAzYzAwMDAwMDAwLCAweGI5MmEwOTU1MDAwMDAwMDAsCisgICAgMHg2OTRiM2Q2ZDAwMDAwMDAwLCAweDBjNDA0NDA0MDAwMDAwMDAsIDB4YTM1ZGNmYmYwMDAwMDAwMCwKKyAgICAweGM2NTZiNmQ2MDAwMDAwMDAsIDB4YmM2MGE4MTMwMDAwMDAwMCwgMHhkOTZiZDE3YTAwMDAwMDAwLAorICAgIDB4NzY3NjVhYzEwMDAwMDAwMCwgMHgxMzdkMjNhODAwMDAwMDAwLCAweGQ2YjUzMmIxMDAwMDAwMDAsCisgICAgMHhiM2JlNGJkODAwMDAwMDAwLCAweDFjYTNjMDYzMDAwMDAwMDAsIDB4NzlhOGI5MGEwMDAwMDAwMCwKKyAgICAweDAzOWVhN2NmMDAwMDAwMDAsIDB4NjY5NWRlYTYwMDAwMDAwMCwgMHhjOTg4NTUxZDAwMDAwMDAwLAorICAgIDB4YWM4MzJjNzQwMDAwMDAwMCwgMHg3Y2UyMTg0YzAwMDAwMDAwLCAweDE5ZTk2MTI1MDAwMDAwMDAsCisgICAgMHhiNmY0ZWE5ZTAwMDAwMDAwLCAweGQzZmY5M2Y3MDAwMDAwMDAsIDB4YTljOThkMzIwMDAwMDAwMCwKKyAgICAweGNjYzJmNDViMDAwMDAwMDAsIDB4NjNkZjdmZTAwMDAwMDAwMCwgMHgwNmQ0MDY4OTAwMDAwMDAwLAorICAgIDB4YmRlYWNhNTYwMDAwMDAwMCwgMHhkOGUxYjMzZjAwMDAwMDAwLCAweDc3ZmMzODg0MDAwMDAwMDAsCisgICAgMHgxMmY3NDFlZDAwMDAwMDAwLCAweDY4YzE1ZjI4MDAwMDAwMDAsIDB4MGRjYTI2NDEwMDAwMDAwMCwKKyAgICAweGEyZDdhZGZhMDAwMDAwMDAsIDB4YzdkY2Q0OTMwMDAwMDAwMCwgMHgxN2JkZTBhYjAwMDAwMDAwLAorICAgIDB4NzJiNjk5YzIwMDAwMDAwMCwgMHhkZGFiMTI3OTAwMDAwMDAwLCAweGI4YTA2YjEwMDAwMDAwMDAsCisgICAgMHhjMjk2NzVkNTAwMDAwMDAwLCAweGE3OWQwY2JjMDAwMDAwMDAsIDB4MDg4MDg3MDcwMDAwMDAwMCwKKyAgICAweDZkOGJmZTZlMDAwMDAwMDAsIDB4YTg0M2VmNzcwMDAwMDAwMCwgMHhjZDQ4OTYxZTAwMDAwMDAwLAorICAgIDB4NjI1NTFkYTUwMDAwMDAwMCwgMHgwNzVlNjRjYzAwMDAwMDAwLCAweDdkNjg3YTA5MDAwMDAwMDAsCisgICAgMHgxODYzMDM2MDAwMDAwMDAwLCAweGI3N2U4OGRiMDAwMDAwMDAsIDB4ZDI3NWYxYjIwMDAwMDAwMCwKKyAgICAweDAyMTRjNThhMDAwMDAwMDAsIDB4NjcxZmJjZTMwMDAwMDAwMCwgMHhjODAyMzc1ODAwMDAwMDAwLAorICAgIDB4YWQwOTRlMzEwMDAwMDAwMCwgMHhkNzNmNTBmNDAwMDAwMDAwLCAweGIyMzQyOTlkMDAwMDAwMDAsCisgICAgMHgxZDI5YTIyNjAwMDAwMDAwLCAweDc4MjJkYjRmMDAwMDAwMDAsIDB4OTdiODgxMTQwMDAwMDAwMCwKKyAgICAweGYyYjNmODdkMDAwMDAwMDAsIDB4NWRhZTczYzYwMDAwMDAwMCwgMHgzOGE1MGFhZjAwMDAwMDAwLAorICAgIDB4NDI5MzE0NmEwMDAwMDAwMCwgMHgyNzk4NmQwMzAwMDAwMDAwLCAweDg4ODVlNmI4MDAwMDAwMDAsCisgICAgMHhlZDhlOWZkMTAwMDAwMDAwLCAweDNkZWZhYmU5MDAwMDAwMDAsIDB4NThlNGQyODAwMDAwMDAwMCwKKyAgICAweGY3Zjk1OTNiMDAwMDAwMDAsIDB4OTJmMjIwNTIwMDAwMDAwMCwgMHhlOGM0M2U5NzAwMDAwMDAwLAorICAgIDB4OGRjZjQ3ZmUwMDAwMDAwMCwgMHgyMmQyY2M0NTAwMDAwMDAwLCAweDQ3ZDliNTJjMDAwMDAwMDAsCisgICAgMHg4MjExYTQzNTAwMDAwMDAwLCAweGU3MWFkZDVjMDAwMDAwMDAsIDB4NDgwNzU2ZTcwMDAwMDAwMCwKKyAgICAweDJkMGMyZjhlMDAwMDAwMDAsIDB4NTczYTMxNGIwMDAwMDAwMCwgMHgzMjMxNDgyMjAwMDAwMDAwLAorICAgIDB4OWQyY2MzOTkwMDAwMDAwMCwgMHhmODI3YmFmMDAwMDAwMDAwLCAweDI4NDY4ZWM4MDAwMDAwMDAsCisgICAgMHg0ZDRkZjdhMTAwMDAwMDAwLCAweGUyNTA3YzFhMDAwMDAwMDAsIDB4ODc1YjA1NzMwMDAwMDAwMCwKKyAgICAweGZkNmQxYmI2MDAwMDAwMDAsIDB4OTg2NjYyZGYwMDAwMDAwMCwgMHgzNzdiZTk2NDAwMDAwMDAwLAorICAgIDB4NTI3MDkwMGQwMDAwMDAwMH0sCisgICB7MHgwMDAwMDAwMDAwMDAwMDAwLCAweGRjZWNiMTNkMDAwMDAwMDAsIDB4YjhkOTYzN2IwMDAwMDAwMCwKKyAgICAweDY0MzVkMjQ2MDAwMDAwMDAsIDB4NzBiM2M3ZjYwMDAwMDAwMCwgMHhhYzVmNzZjYjAwMDAwMDAwLAorICAgIDB4Yzg2YWE0OGQwMDAwMDAwMCwgMHgxNDg2MTViMDAwMDAwMDAwLCAweGExNjBmZTM2MDAwMDAwMDAsCisgICAgMHg3ZDhjNGYwYjAwMDAwMDAwLCAweDE5Yjk5ZDRkMDAwMDAwMDAsIDB4YzU1NTJjNzAwMDAwMDAwMCwKKyAgICAweGQxZDMzOWMwMDAwMDAwMDAsIDB4MGQzZjg4ZmQwMDAwMDAwMCwgMHg2OTBhNWFiYjAwMDAwMDAwLAorICAgIDB4YjVlNmViODYwMDAwMDAwMCwgMHg0MmMxZmM2ZDAwMDAwMDAwLCAweDllMmQ0ZDUwMDAwMDAwMDAsCisgICAgMHhmYTE4OWYxNjAwMDAwMDAwLCAweDI2ZjQyZTJiMDAwMDAwMDAsIDB4MzI3MjNiOWIwMDAwMDAwMCwKKyAgICAweGVlOWU4YWE2MDAwMDAwMDAsIDB4OGFhYjU4ZTAwMDAwMDAwMCwgMHg1NjQ3ZTlkZDAwMDAwMDAwLAorICAgIDB4ZTNhMTAyNWIwMDAwMDAwMCwgMHgzZjRkYjM2NjAwMDAwMDAwLCAweDViNzg2MTIwMDAwMDAwMDAsCisgICAgMHg4Nzk0ZDAxZDAwMDAwMDAwLCAweDkzMTJjNWFkMDAwMDAwMDAsIDB4NGZmZTc0OTAwMDAwMDAwMCwKKyAgICAweDJiY2JhNmQ2MDAwMDAwMDAsIDB4ZjcyNzE3ZWIwMDAwMDAwMCwgMHg4NDgyZjlkYjAwMDAwMDAwLAorICAgIDB4NTg2ZTQ4ZTYwMDAwMDAwMCwgMHgzYzViOWFhMDAwMDAwMDAwLCAweGUwYjcyYjlkMDAwMDAwMDAsCisgICAgMHhmNDMxM2UyZDAwMDAwMDAwLCAweDI4ZGQ4ZjEwMDAwMDAwMDAsIDB4NGNlODVkNTYwMDAwMDAwMCwKKyAgICAweDkwMDRlYzZiMDAwMDAwMDAsIDB4MjVlMjA3ZWQwMDAwMDAwMCwgMHhmOTBlYjZkMDAwMDAwMDAwLAorICAgIDB4OWQzYjY0OTYwMDAwMDAwMCwgMHg0MWQ3ZDVhYjAwMDAwMDAwLCAweDU1NTFjMDFiMDAwMDAwMDAsCisgICAgMHg4OWJkNzEyNjAwMDAwMDAwLCAweGVkODhhMzYwMDAwMDAwMDAsIDB4MzE2NDEyNWQwMDAwMDAwMCwKKyAgICAweGM2NDMwNWI2MDAwMDAwMDAsIDB4MWFhZmI0OGIwMDAwMDAwMCwgMHg3ZTlhNjZjZDAwMDAwMDAwLAorICAgIDB4YTI3NmQ3ZjAwMDAwMDAwMCwgMHhiNmYwYzI0MDAwMDAwMDAwLCAweDZhMWM3MzdkMDAwMDAwMDAsCisgICAgMHgwZTI5YTEzYjAwMDAwMDAwLCAweGQyYzUxMDA2MDAwMDAwMDAsIDB4NjcyM2ZiODAwMDAwMDAwMCwKKyAgICAweGJiY2Y0YWJkMDAwMDAwMDAsIDB4ZGZmYTk4ZmIwMDAwMDAwMCwgMHgwMzE2MjljNjAwMDAwMDAwLAorICAgIDB4MTc5MDNjNzYwMDAwMDAwMCwgMHhjYjdjOGQ0YjAwMDAwMDAwLCAweGFmNDk1ZjBkMDAwMDAwMDAsCisgICAgMHg3M2E1ZWUzMDAwMDAwMDAwLCAweDQ5MDM4MjZjMDAwMDAwMDAsIDB4OTVlZjMzNTEwMDAwMDAwMCwKKyAgICAweGYxZGFlMTE3MDAwMDAwMDAsIDB4MmQzNjUwMmEwMDAwMDAwMCwgMHgzOWIwNDU5YTAwMDAwMDAwLAorICAgIDB4ZTU1Y2Y0YTcwMDAwMDAwMCwgMHg4MTY5MjZlMTAwMDAwMDAwLCAweDVkODU5N2RjMDAwMDAwMDAsCisgICAgMHhlODYzN2M1YTAwMDAwMDAwLCAweDM0OGZjZDY3MDAwMDAwMDAsIDB4NTBiYTFmMjEwMDAwMDAwMCwKKyAgICAweDhjNTZhZTFjMDAwMDAwMDAsIDB4OThkMGJiYWMwMDAwMDAwMCwgMHg0NDNjMGE5MTAwMDAwMDAwLAorICAgIDB4MjAwOWQ4ZDcwMDAwMDAwMCwgMHhmY2U1NjllYTAwMDAwMDAwLCAweDBiYzI3ZTAxMDAwMDAwMDAsCisgICAgMHhkNzJlY2YzYzAwMDAwMDAwLCAweGIzMWIxZDdhMDAwMDAwMDAsIDB4NmZmN2FjNDcwMDAwMDAwMCwKKyAgICAweDdiNzFiOWY3MDAwMDAwMDAsIDB4YTc5ZDA4Y2EwMDAwMDAwMCwgMHhjM2E4ZGE4YzAwMDAwMDAwLAorICAgIDB4MWY0NDZiYjEwMDAwMDAwMCwgMHhhYWEyODAzNzAwMDAwMDAwLCAweDc2NGUzMTBhMDAwMDAwMDAsCisgICAgMHgxMjdiZTM0YzAwMDAwMDAwLCAweGNlOTc1MjcxMDAwMDAwMDAsIDB4ZGExMTQ3YzEwMDAwMDAwMCwKKyAgICAweDA2ZmRmNmZjMDAwMDAwMDAsIDB4NjJjODI0YmEwMDAwMDAwMCwgMHhiZTI0OTU4NzAwMDAwMDAwLAorICAgIDB4Y2Q4MTdiYjcwMDAwMDAwMCwgMHgxMTZkY2E4YTAwMDAwMDAwLCAweDc1NTgxOGNjMDAwMDAwMDAsCisgICAgMHhhOWI0YTlmMTAwMDAwMDAwLCAweGJkMzJiYzQxMDAwMDAwMDAsIDB4NjFkZTBkN2MwMDAwMDAwMCwKKyAgICAweDA1ZWJkZjNhMDAwMDAwMDAsIDB4ZDkwNzZlMDcwMDAwMDAwMCwgMHg2Y2UxODU4MTAwMDAwMDAwLAorICAgIDB4YjAwZDM0YmMwMDAwMDAwMCwgMHhkNDM4ZTZmYTAwMDAwMDAwLCAweDA4ZDQ1N2M3MDAwMDAwMDAsCisgICAgMHgxYzUyNDI3NzAwMDAwMDAwLCAweGMwYmVmMzRhMDAwMDAwMDAsIDB4YTQ4YjIxMGMwMDAwMDAwMCwKKyAgICAweDc4Njc5MDMxMDAwMDAwMDAsIDB4OGY0MDg3ZGEwMDAwMDAwMCwgMHg1M2FjMzZlNzAwMDAwMDAwLAorICAgIDB4Mzc5OWU0YTEwMDAwMDAwMCwgMHhlYjc1NTU5YzAwMDAwMDAwLCAweGZmZjM0MDJjMDAwMDAwMDAsCisgICAgMHgyMzFmZjExMTAwMDAwMDAwLCAweDQ3MmEyMzU3MDAwMDAwMDAsIDB4OWJjNjkyNmEwMDAwMDAwMCwKKyAgICAweDJlMjA3OWVjMDAwMDAwMDAsIDB4ZjJjY2M4ZDEwMDAwMDAwMCwgMHg5NmY5MWE5NzAwMDAwMDAwLAorICAgIDB4NGExNWFiYWEwMDAwMDAwMCwgMHg1ZTkzYmUxYTAwMDAwMDAwLCAweDgyN2YwZjI3MDAwMDAwMDAsCisgICAgMHhlNjRhZGQ2MTAwMDAwMDAwLCAweDNhYTY2YzVjMDAwMDAwMDAsIDB4OTIwNjA0ZDkwMDAwMDAwMCwKKyAgICAweDRlZWFiNWU0MDAwMDAwMDAsIDB4MmFkZjY3YTIwMDAwMDAwMCwgMHhmNjMzZDY5ZjAwMDAwMDAwLAorICAgIDB4ZTJiNWMzMmYwMDAwMDAwMCwgMHgzZTU5NzIxMjAwMDAwMDAwLCAweDVhNmNhMDU0MDAwMDAwMDAsCisgICAgMHg4NjgwMTE2OTAwMDAwMDAwLCAweDMzNjZmYWVmMDAwMDAwMDAsIDB4ZWY4YTRiZDIwMDAwMDAwMCwKKyAgICAweDhiYmY5OTk0MDAwMDAwMDAsIDB4NTc1MzI4YTkwMDAwMDAwMCwgMHg0M2Q1M2QxOTAwMDAwMDAwLAorICAgIDB4OWYzOThjMjQwMDAwMDAwMCwgMHhmYjBjNWU2MjAwMDAwMDAwLCAweDI3ZTBlZjVmMDAwMDAwMDAsCisgICAgMHhkMGM3ZjhiNDAwMDAwMDAwLCAweDBjMmI0OTg5MDAwMDAwMDAsIDB4NjgxZTliY2YwMDAwMDAwMCwKKyAgICAweGI0ZjIyYWYyMDAwMDAwMDAsIDB4YTA3NDNmNDIwMDAwMDAwMCwgMHg3Yzk4OGU3ZjAwMDAwMDAwLAorICAgIDB4MThhZDVjMzkwMDAwMDAwMCwgMHhjNDQxZWQwNDAwMDAwMDAwLCAweDcxYTcwNjgyMDAwMDAwMDAsCisgICAgMHhhZDRiYjdiZjAwMDAwMDAwLCAweGM5N2U2NWY5MDAwMDAwMDAsIDB4MTU5MmQ0YzQwMDAwMDAwMCwKKyAgICAweDAxMTRjMTc0MDAwMDAwMDAsIDB4ZGRmODcwNDkwMDAwMDAwMCwgMHhiOWNkYTIwZjAwMDAwMDAwLAorICAgIDB4NjUyMTEzMzIwMDAwMDAwMCwgMHgxNjg0ZmQwMjAwMDAwMDAwLCAweGNhNjg0YzNmMDAwMDAwMDAsCisgICAgMHhhZTVkOWU3OTAwMDAwMDAwLCAweDcyYjEyZjQ0MDAwMDAwMDAsIDB4NjYzNzNhZjQwMDAwMDAwMCwKKyAgICAweGJhZGI4YmM5MDAwMDAwMDAsIDB4ZGVlZTU5OGYwMDAwMDAwMCwgMHgwMjAyZThiMjAwMDAwMDAwLAorICAgIDB4YjdlNDAzMzQwMDAwMDAwMCwgMHg2YjA4YjIwOTAwMDAwMDAwLCAweDBmM2Q2MDRmMDAwMDAwMDAsCisgICAgMHhkM2QxZDE3MjAwMDAwMDAwLCAweGM3NTdjNGMyMDAwMDAwMDAsIDB4MWJiYjc1ZmYwMDAwMDAwMCwKKyAgICAweDdmOGVhN2I5MDAwMDAwMDAsIDB4YTM2MjE2ODQwMDAwMDAwMCwgMHg1NDQ1MDE2ZjAwMDAwMDAwLAorICAgIDB4ODhhOWIwNTIwMDAwMDAwMCwgMHhlYzljNjIxNDAwMDAwMDAwLCAweDMwNzBkMzI5MDAwMDAwMDAsCisgICAgMHgyNGY2YzY5OTAwMDAwMDAwLCAweGY4MWE3N2E0MDAwMDAwMDAsIDB4OWMyZmE1ZTIwMDAwMDAwMCwKKyAgICAweDQwYzMxNGRmMDAwMDAwMDAsIDB4ZjUyNWZmNTkwMDAwMDAwMCwgMHgyOWM5NGU2NDAwMDAwMDAwLAorICAgIDB4NGRmYzljMjIwMDAwMDAwMCwgMHg5MTEwMmQxZjAwMDAwMDAwLCAweDg1OTYzOGFmMDAwMDAwMDAsCisgICAgMHg1OTdhODk5MjAwMDAwMDAwLCAweDNkNGY1YmQ0MDAwMDAwMDAsIDB4ZTFhM2VhZTkwMDAwMDAwMCwKKyAgICAweGRiMDU4NmI1MDAwMDAwMDAsIDB4MDdlOTM3ODgwMDAwMDAwMCwgMHg2M2RjZTVjZTAwMDAwMDAwLAorICAgIDB4YmYzMDU0ZjMwMDAwMDAwMCwgMHhhYmI2NDE0MzAwMDAwMDAwLCAweDc3NWFmMDdlMDAwMDAwMDAsCisgICAgMHgxMzZmMjIzODAwMDAwMDAwLCAweGNmODM5MzA1MDAwMDAwMDAsIDB4N2E2NTc4ODMwMDAwMDAwMCwKKyAgICAweGE2ODljOWJlMDAwMDAwMDAsIDB4YzJiYzFiZjgwMDAwMDAwMCwgMHgxZTUwYWFjNTAwMDAwMDAwLAorICAgIDB4MGFkNmJmNzUwMDAwMDAwMCwgMHhkNjNhMGU0ODAwMDAwMDAwLCAweGIyMGZkYzBlMDAwMDAwMDAsCisgICAgMHg2ZWUzNmQzMzAwMDAwMDAwLCAweDk5YzQ3YWQ4MDAwMDAwMDAsIDB4NDUyOGNiZTUwMDAwMDAwMCwKKyAgICAweDIxMWQxOWEzMDAwMDAwMDAsIDB4ZmRmMWE4OWUwMDAwMDAwMCwgMHhlOTc3YmQyZTAwMDAwMDAwLAorICAgIDB4MzU5YjBjMTMwMDAwMDAwMCwgMHg1MWFlZGU1NTAwMDAwMDAwLCAweDhkNDI2ZjY4MDAwMDAwMDAsCisgICAgMHgzOGE0ODRlZTAwMDAwMDAwLCAweGU0NDgzNWQzMDAwMDAwMDAsIDB4ODA3ZGU3OTUwMDAwMDAwMCwKKyAgICAweDVjOTE1NmE4MDAwMDAwMDAsIDB4NDgxNzQzMTgwMDAwMDAwMCwgMHg5NGZiZjIyNTAwMDAwMDAwLAorICAgIDB4ZjBjZTIwNjMwMDAwMDAwMCwgMHgyYzIyOTE1ZTAwMDAwMDAwLCAweDVmODc3ZjZlMDAwMDAwMDAsCisgICAgMHg4MzZiY2U1MzAwMDAwMDAwLCAweGU3NWUxYzE1MDAwMDAwMDAsIDB4M2JiMmFkMjgwMDAwMDAwMCwKKyAgICAweDJmMzRiODk4MDAwMDAwMDAsIDB4ZjNkODA5YTUwMDAwMDAwMCwgMHg5N2VkZGJlMzAwMDAwMDAwLAorICAgIDB4NGIwMTZhZGUwMDAwMDAwMCwgMHhmZWU3ODE1ODAwMDAwMDAwLCAweDIyMGIzMDY1MDAwMDAwMDAsCisgICAgMHg0NjNlZTIyMzAwMDAwMDAwLCAweDlhZDI1MzFlMDAwMDAwMDAsIDB4OGU1NDQ2YWUwMDAwMDAwMCwKKyAgICAweDUyYjhmNzkzMDAwMDAwMDAsIDB4MzY4ZDI1ZDUwMDAwMDAwMCwgMHhlYTYxOTRlODAwMDAwMDAwLAorICAgIDB4MWQ0NjgzMDMwMDAwMDAwMCwgMHhjMWFhMzIzZTAwMDAwMDAwLCAweGE1OWZlMDc4MDAwMDAwMDAsCisgICAgMHg3OTczNTE0NTAwMDAwMDAwLCAweDZkZjU0NGY1MDAwMDAwMDAsIDB4YjExOWY1YzgwMDAwMDAwMCwKKyAgICAweGQ1MmMyNzhlMDAwMDAwMDAsIDB4MDljMDk2YjMwMDAwMDAwMCwgMHhiYzI2N2QzNTAwMDAwMDAwLAorICAgIDB4NjBjYWNjMDgwMDAwMDAwMCwgMHgwNGZmMWU0ZTAwMDAwMDAwLCAweGQ4MTNhZjczMDAwMDAwMDAsCisgICAgMHhjYzk1YmFjMzAwMDAwMDAwLCAweDEwNzkwYmZlMDAwMDAwMDAsIDB4NzQ0Y2Q5YjgwMDAwMDAwMCwKKyAgICAweGE4YTA2ODg1MDAwMDAwMDB9fTsKKworI2Vsc2UgLyogVyA9PSA0ICovCisKK2xvY2FsIGNvbnN0IHpfY3JjX3QgRkFSIGNyY19icmFpZF90YWJsZVtdWzI1Nl0gPSB7CisgICB7MHgwMDAwMDAwMCwgMHg4MTI1NjUyNywgMHhkOTNiY2MwZiwgMHg1ODFlYTkyOCwgMHg2OTA2OWU1ZiwKKyAgICAweGU4MjNmYjc4LCAweGIwM2Q1MjUwLCAweDMxMTgzNzc3LCAweGQyMGQzY2JlLCAweDUzMjg1OTk5LAorICAgIDB4MGIzNmYwYjEsIDB4OGExMzk1OTYsIDB4YmIwYmEyZTEsIDB4M2EyZWM3YzYsIDB4NjIzMDZlZWUsCisgICAgMHhlMzE1MGJjOSwgMHg3ZjZiN2YzZCwgMHhmZTRlMWExYSwgMHhhNjUwYjMzMiwgMHgyNzc1ZDYxNSwKKyAgICAweDE2NmRlMTYyLCAweDk3NDg4NDQ1LCAweGNmNTYyZDZkLCAweDRlNzM0ODRhLCAweGFkNjY0MzgzLAorICAgIDB4MmM0MzI2YTQsIDB4NzQ1ZDhmOGMsIDB4ZjU3OGVhYWIsIDB4YzQ2MGRkZGMsIDB4NDU0NWI4ZmIsCisgICAgMHgxZDViMTFkMywgMHg5YzdlNzRmNCwgMHhmZWQ2ZmU3YSwgMHg3ZmYzOWI1ZCwgMHgyN2VkMzI3NSwKKyAgICAweGE2Yzg1NzUyLCAweDk3ZDA2MDI1LCAweDE2ZjUwNTAyLCAweDRlZWJhYzJhLCAweGNmY2VjOTBkLAorICAgIDB4MmNkYmMyYzQsIDB4YWRmZWE3ZTMsIDB4ZjVlMDBlY2IsIDB4NzRjNTZiZWMsIDB4NDVkZDVjOWIsCisgICAgMHhjNGY4MzliYywgMHg5Y2U2OTA5NCwgMHgxZGMzZjViMywgMHg4MWJkODE0NywgMHgwMDk4ZTQ2MCwKKyAgICAweDU4ODY0ZDQ4LCAweGQ5YTMyODZmLCAweGU4YmIxZjE4LCAweDY5OWU3YTNmLCAweDMxODBkMzE3LAorICAgIDB4YjBhNWI2MzAsIDB4NTNiMGJkZjksIDB4ZDI5NWQ4ZGUsIDB4OGE4YjcxZjYsIDB4MGJhZTE0ZDEsCisgICAgMHgzYWI2MjNhNiwgMHhiYjkzNDY4MSwgMHhlMzhkZWZhOSwgMHg2MmE4OGE4ZSwgMHgyNmRjZmFiNSwKKyAgICAweGE3Zjk5ZjkyLCAweGZmZTczNmJhLCAweDdlYzI1MzlkLCAweDRmZGE2NGVhLCAweGNlZmYwMWNkLAorICAgIDB4OTZlMWE4ZTUsIDB4MTdjNGNkYzIsIDB4ZjRkMWM2MGIsIDB4NzVmNGEzMmMsIDB4MmRlYTBhMDQsCisgICAgMHhhY2NmNmYyMywgMHg5ZGQ3NTg1NCwgMHgxY2YyM2Q3MywgMHg0NGVjOTQ1YiwgMHhjNWM5ZjE3YywKKyAgICAweDU5Yjc4NTg4LCAweGQ4OTJlMGFmLCAweDgwOGM0OTg3LCAweDAxYTkyY2EwLCAweDMwYjExYmQ3LAorICAgIDB4YjE5NDdlZjAsIDB4ZTk4YWQ3ZDgsIDB4NjhhZmIyZmYsIDB4OGJiYWI5MzYsIDB4MGE5ZmRjMTEsCisgICAgMHg1MjgxNzUzOSwgMHhkM2E0MTAxZSwgMHhlMmJjMjc2OSwgMHg2Mzk5NDI0ZSwgMHgzYjg3ZWI2NiwKKyAgICAweGJhYTI4ZTQxLCAweGQ4MGEwNGNmLCAweDU5MmY2MWU4LCAweDAxMzFjOGMwLCAweDgwMTRhZGU3LAorICAgIDB4YjEwYzlhOTAsIDB4MzAyOWZmYjcsIDB4NjgzNzU2OWYsIDB4ZTkxMjMzYjgsIDB4MGEwNzM4NzEsCisgICAgMHg4YjIyNWQ1NiwgMHhkMzNjZjQ3ZSwgMHg1MjE5OTE1OSwgMHg2MzAxYTYyZSwgMHhlMjI0YzMwOSwKKyAgICAweGJhM2E2YTIxLCAweDNiMWYwZjA2LCAweGE3NjE3YmYyLCAweDI2NDQxZWQ1LCAweDdlNWFiN2ZkLAorICAgIDB4ZmY3ZmQyZGEsIDB4Y2U2N2U1YWQsIDB4NGY0MjgwOGEsIDB4MTc1YzI5YTIsIDB4OTY3OTRjODUsCisgICAgMHg3NTZjNDc0YywgMHhmNDQ5MjI2YiwgMHhhYzU3OGI0MywgMHgyZDcyZWU2NCwgMHgxYzZhZDkxMywKKyAgICAweDlkNGZiYzM0LCAweGM1NTExNTFjLCAweDQ0NzQ3MDNiLCAweDRkYjlmNTZhLCAweGNjOWM5MDRkLAorICAgIDB4OTQ4MjM5NjUsIDB4MTVhNzVjNDIsIDB4MjRiZjZiMzUsIDB4YTU5YTBlMTIsIDB4ZmQ4NGE3M2EsCisgICAgMHg3Y2ExYzIxZCwgMHg5ZmI0YzlkNCwgMHgxZTkxYWNmMywgMHg0NjhmMDVkYiwgMHhjN2FhNjBmYywKKyAgICAweGY2YjI1NzhiLCAweDc3OTczMmFjLCAweDJmODk5Yjg0LCAweGFlYWNmZWEzLCAweDMyZDI4YTU3LAorICAgIDB4YjNmN2VmNzAsIDB4ZWJlOTQ2NTgsIDB4NmFjYzIzN2YsIDB4NWJkNDE0MDgsIDB4ZGFmMTcxMmYsCisgICAgMHg4MmVmZDgwNywgMHgwM2NhYmQyMCwgMHhlMGRmYjZlOSwgMHg2MWZhZDNjZSwgMHgzOWU0N2FlNiwKKyAgICAweGI4YzExZmMxLCAweDg5ZDkyOGI2LCAweDA4ZmM0ZDkxLCAweDUwZTJlNGI5LCAweGQxYzc4MTllLAorICAgIDB4YjM2ZjBiMTAsIDB4MzI0YTZlMzcsIDB4NmE1NGM3MWYsIDB4ZWI3MWEyMzgsIDB4ZGE2OTk1NGYsCisgICAgMHg1YjRjZjA2OCwgMHgwMzUyNTk0MCwgMHg4Mjc3M2M2NywgMHg2MTYyMzdhZSwgMHhlMDQ3NTI4OSwKKyAgICAweGI4NTlmYmExLCAweDM5N2M5ZTg2LCAweDA4NjRhOWYxLCAweDg5NDFjY2Q2LCAweGQxNWY2NWZlLAorICAgIDB4NTA3YTAwZDksIDB4Y2MwNDc0MmQsIDB4NGQyMTExMGEsIDB4MTUzZmI4MjIsIDB4OTQxYWRkMDUsCisgICAgMHhhNTAyZWE3MiwgMHgyNDI3OGY1NSwgMHg3YzM5MjY3ZCwgMHhmZDFjNDM1YSwgMHgxZTA5NDg5MywKKyAgICAweDlmMmMyZGI0LCAweGM3MzI4NDljLCAweDQ2MTdlMWJiLCAweDc3MGZkNmNjLCAweGY2MmFiM2ViLAorICAgIDB4YWUzNDFhYzMsIDB4MmYxMTdmZTQsIDB4NmI2NTBmZGYsIDB4ZWE0MDZhZjgsIDB4YjI1ZWMzZDAsCisgICAgMHgzMzdiYTZmNywgMHgwMjYzOTE4MCwgMHg4MzQ2ZjRhNywgMHhkYjU4NWQ4ZiwgMHg1YTdkMzhhOCwKKyAgICAweGI5NjgzMzYxLCAweDM4NGQ1NjQ2LCAweDYwNTNmZjZlLCAweGUxNzY5YTQ5LCAweGQwNmVhZDNlLAorICAgIDB4NTE0YmM4MTksIDB4MDk1NTYxMzEsIDB4ODg3MDA0MTYsIDB4MTQwZTcwZTIsIDB4OTUyYjE1YzUsCisgICAgMHhjZDM1YmNlZCwgMHg0YzEwZDljYSwgMHg3ZDA4ZWViZCwgMHhmYzJkOGI5YSwgMHhhNDMzMjJiMiwKKyAgICAweDI1MTY0Nzk1LCAweGM2MDM0YzVjLCAweDQ3MjYyOTdiLCAweDFmMzg4MDUzLCAweDllMWRlNTc0LAorICAgIDB4YWYwNWQyMDMsIDB4MmUyMGI3MjQsIDB4NzYzZTFlMGMsIDB4ZjcxYjdiMmIsIDB4OTViM2YxYTUsCisgICAgMHgxNDk2OTQ4MiwgMHg0Yzg4M2RhYSwgMHhjZGFkNTg4ZCwgMHhmY2I1NmZmYSwgMHg3ZDkwMGFkZCwKKyAgICAweDI1OGVhM2Y1LCAweGE0YWJjNmQyLCAweDQ3YmVjZDFiLCAweGM2OWJhODNjLCAweDllODUwMTE0LAorICAgIDB4MWZhMDY0MzMsIDB4MmViODUzNDQsIDB4YWY5ZDM2NjMsIDB4Zjc4MzlmNGIsIDB4NzZhNmZhNmMsCisgICAgMHhlYWQ4OGU5OCwgMHg2YmZkZWJiZiwgMHgzM2UzNDI5NywgMHhiMmM2MjdiMCwgMHg4M2RlMTBjNywKKyAgICAweDAyZmI3NWUwLCAweDVhZTVkY2M4LCAweGRiYzBiOWVmLCAweDM4ZDViMjI2LCAweGI5ZjBkNzAxLAorICAgIDB4ZTFlZTdlMjksIDB4NjBjYjFiMGUsIDB4NTFkMzJjNzksIDB4ZDBmNjQ5NWUsIDB4ODhlOGUwNzYsCisgICAgMHgwOWNkODU1MX0sCisgICB7MHgwMDAwMDAwMCwgMHg5YjczZWFkNCwgMHhlZDk2ZDNlOSwgMHg3NmU1MzkzZCwgMHgwMDVjYTE5MywKKyAgICAweDliMmY0YjQ3LCAweGVkY2E3MjdhLCAweDc2Yjk5OGFlLCAweDAwYjk0MzI2LCAweDliY2FhOWYyLAorICAgIDB4ZWQyZjkwY2YsIDB4NzY1YzdhMWIsIDB4MDBlNWUyYjUsIDB4OWI5NjA4NjEsIDB4ZWQ3MzMxNWMsCisgICAgMHg3NjAwZGI4OCwgMHgwMTcyODY0YywgMHg5YTAxNmM5OCwgMHhlY2U0NTVhNSwgMHg3Nzk3YmY3MSwKKyAgICAweDAxMmUyN2RmLCAweDlhNWRjZDBiLCAweGVjYjhmNDM2LCAweDc3Y2IxZWUyLCAweDAxY2JjNTZhLAorICAgIDB4OWFiODJmYmUsIDB4ZWM1ZDE2ODMsIDB4NzcyZWZjNTcsIDB4MDE5NzY0ZjksIDB4OWFlNDhlMmQsCisgICAgMHhlYzAxYjcxMCwgMHg3NzcyNWRjNCwgMHgwMmU1MGM5OCwgMHg5OTk2ZTY0YywgMHhlZjczZGY3MSwKKyAgICAweDc0MDAzNWE1LCAweDAyYjlhZDBiLCAweDk5Y2E0N2RmLCAweGVmMmY3ZWUyLCAweDc0NWM5NDM2LAorICAgIDB4MDI1YzRmYmUsIDB4OTkyZmE1NmEsIDB4ZWZjYTljNTcsIDB4NzRiOTc2ODMsIDB4MDIwMGVlMmQsCisgICAgMHg5OTczMDRmOSwgMHhlZjk2M2RjNCwgMHg3NGU1ZDcxMCwgMHgwMzk3OGFkNCwgMHg5OGU0NjAwMCwKKyAgICAweGVlMDE1OTNkLCAweDc1NzJiM2U5LCAweDAzY2IyYjQ3LCAweDk4YjhjMTkzLCAweGVlNWRmOGFlLAorICAgIDB4NzUyZTEyN2EsIDB4MDMyZWM5ZjIsIDB4OTg1ZDIzMjYsIDB4ZWViODFhMWIsIDB4NzVjYmYwY2YsCisgICAgMHgwMzcyNjg2MSwgMHg5ODAxODJiNSwgMHhlZWU0YmI4OCwgMHg3NTk3NTE1YywgMHgwNWNhMTkzMCwKKyAgICAweDllYjlmM2U0LCAweGU4NWNjYWQ5LCAweDczMmYyMDBkLCAweDA1OTZiOGEzLCAweDllZTU1Mjc3LAorICAgIDB4ZTgwMDZiNGEsIDB4NzM3MzgxOWUsIDB4MDU3MzVhMTYsIDB4OWUwMGIwYzIsIDB4ZThlNTg5ZmYsCisgICAgMHg3Mzk2NjMyYiwgMHgwNTJmZmI4NSwgMHg5ZTVjMTE1MSwgMHhlOGI5Mjg2YywgMHg3M2NhYzJiOCwKKyAgICAweDA0Yjg5ZjdjLCAweDlmY2I3NWE4LCAweGU5MmU0Yzk1LCAweDcyNWRhNjQxLCAweDA0ZTQzZWVmLAorICAgIDB4OWY5N2Q0M2IsIDB4ZTk3MmVkMDYsIDB4NzIwMTA3ZDIsIDB4MDQwMWRjNWEsIDB4OWY3MjM2OGUsCisgICAgMHhlOTk3MGZiMywgMHg3MmU0ZTU2NywgMHgwNDVkN2RjOSwgMHg5ZjJlOTcxZCwgMHhlOWNiYWUyMCwKKyAgICAweDcyYjg0NGY0LCAweDA3MmYxNWE4LCAweDljNWNmZjdjLCAweGVhYjljNjQxLCAweDcxY2EyYzk1LAorICAgIDB4MDc3M2I0M2IsIDB4OWMwMDVlZWYsIDB4ZWFlNTY3ZDIsIDB4NzE5NjhkMDYsIDB4MDc5NjU2OGUsCisgICAgMHg5Y2U1YmM1YSwgMHhlYTAwODU2NywgMHg3MTczNmZiMywgMHgwN2NhZjcxZCwgMHg5Y2I5MWRjOSwKKyAgICAweGVhNWMyNGY0LCAweDcxMmZjZTIwLCAweDA2NWQ5M2U0LCAweDlkMmU3OTMwLCAweGViY2I0MDBkLAorICAgIDB4NzBiOGFhZDksIDB4MDYwMTMyNzcsIDB4OWQ3MmQ4YTMsIDB4ZWI5N2UxOWUsIDB4NzBlNDBiNGEsCisgICAgMHgwNmU0ZDBjMiwgMHg5ZDk3M2ExNiwgMHhlYjcyMDMyYiwgMHg3MDAxZTlmZiwgMHgwNmI4NzE1MSwKKyAgICAweDlkY2I5Yjg1LCAweGViMmVhMmI4LCAweDcwNWQ0ODZjLCAweDBiOTQzMjYwLCAweDkwZTdkOGI0LAorICAgIDB4ZTYwMmUxODksIDB4N2Q3MTBiNWQsIDB4MGJjODkzZjMsIDB4OTBiYjc5MjcsIDB4ZTY1ZTQwMWEsCisgICAgMHg3ZDJkYWFjZSwgMHgwYjJkNzE0NiwgMHg5MDVlOWI5MiwgMHhlNmJiYTJhZiwgMHg3ZGM4NDg3YiwKKyAgICAweDBiNzFkMGQ1LCAweDkwMDIzYTAxLCAweGU2ZTcwMzNjLCAweDdkOTRlOWU4LCAweDBhZTZiNDJjLAorICAgIDB4OTE5NTVlZjgsIDB4ZTc3MDY3YzUsIDB4N2MwMzhkMTEsIDB4MGFiYTE1YmYsIDB4OTFjOWZmNmIsCisgICAgMHhlNzJjYzY1NiwgMHg3YzVmMmM4MiwgMHgwYTVmZjcwYSwgMHg5MTJjMWRkZSwgMHhlN2M5MjRlMywKKyAgICAweDdjYmFjZTM3LCAweDBhMDM1Njk5LCAweDkxNzBiYzRkLCAweGU3OTU4NTcwLCAweDdjZTY2ZmE0LAorICAgIDB4MDk3MTNlZjgsIDB4OTIwMmQ0MmMsIDB4ZTRlN2VkMTEsIDB4N2Y5NDA3YzUsIDB4MDkyZDlmNmIsCisgICAgMHg5MjVlNzViZiwgMHhlNGJiNGM4MiwgMHg3ZmM4YTY1NiwgMHgwOWM4N2RkZSwgMHg5MmJiOTcwYSwKKyAgICAweGU0NWVhZTM3LCAweDdmMmQ0NGUzLCAweDA5OTRkYzRkLCAweDkyZTczNjk5LCAweGU0MDIwZmE0LAorICAgIDB4N2Y3MWU1NzAsIDB4MDgwM2I4YjQsIDB4OTM3MDUyNjAsIDB4ZTU5NTZiNWQsIDB4N2VlNjgxODksCisgICAgMHgwODVmMTkyNywgMHg5MzJjZjNmMywgMHhlNWM5Y2FjZSwgMHg3ZWJhMjAxYSwgMHgwOGJhZmI5MiwKKyAgICAweDkzYzkxMTQ2LCAweGU1MmMyODdiLCAweDdlNWZjMmFmLCAweDA4ZTY1YTAxLCAweDkzOTViMGQ1LAorICAgIDB4ZTU3MDg5ZTgsIDB4N2UwMzYzM2MsIDB4MGU1ZTJiNTAsIDB4OTUyZGMxODQsIDB4ZTNjOGY4YjksCisgICAgMHg3OGJiMTI2ZCwgMHgwZTAyOGFjMywgMHg5NTcxNjAxNywgMHhlMzk0NTkyYSwgMHg3OGU3YjNmZSwKKyAgICAweDBlZTc2ODc2LCAweDk1OTQ4MmEyLCAweGUzNzFiYjlmLCAweDc4MDI1MTRiLCAweDBlYmJjOWU1LAorICAgIDB4OTVjODIzMzEsIDB4ZTMyZDFhMGMsIDB4Nzg1ZWYwZDgsIDB4MGYyY2FkMWMsIDB4OTQ1ZjQ3YzgsCisgICAgMHhlMmJhN2VmNSwgMHg3OWM5OTQyMSwgMHgwZjcwMGM4ZiwgMHg5NDAzZTY1YiwgMHhlMmU2ZGY2NiwKKyAgICAweDc5OTUzNWIyLCAweDBmOTVlZTNhLCAweDk0ZTYwNGVlLCAweGUyMDMzZGQzLCAweDc5NzBkNzA3LAorICAgIDB4MGZjOTRmYTksIDB4OTRiYWE1N2QsIDB4ZTI1ZjljNDAsIDB4NzkyYzc2OTQsIDB4MGNiYjI3YzgsCisgICAgMHg5N2M4Y2QxYywgMHhlMTJkZjQyMSwgMHg3YTVlMWVmNSwgMHgwY2U3ODY1YiwgMHg5Nzk0NmM4ZiwKKyAgICAweGUxNzE1NWIyLCAweDdhMDJiZjY2LCAweDBjMDI2NGVlLCAweDk3NzE4ZTNhLCAweGUxOTRiNzA3LAorICAgIDB4N2FlNzVkZDMsIDB4MGM1ZWM1N2QsIDB4OTcyZDJmYTksIDB4ZTFjODE2OTQsIDB4N2FiYmZjNDAsCisgICAgMHgwZGM5YTE4NCwgMHg5NmJhNGI1MCwgMHhlMDVmNzI2ZCwgMHg3YjJjOThiOSwgMHgwZDk1MDAxNywKKyAgICAweDk2ZTZlYWMzLCAweGUwMDNkM2ZlLCAweDdiNzAzOTJhLCAweDBkNzBlMmEyLCAweDk2MDMwODc2LAorICAgIDB4ZTBlNjMxNGIsIDB4N2I5NWRiOWYsIDB4MGQyYzQzMzEsIDB4OTY1ZmE5ZTUsIDB4ZTBiYTkwZDgsCisgICAgMHg3YmM5N2EwY30sCisgICB7MHgwMDAwMDAwMCwgMHgxNzI4NjRjMCwgMHgyZTUwYzk4MCwgMHgzOTc4YWQ0MCwgMHg1Y2ExOTMwMCwKKyAgICAweDRiODlmN2MwLCAweDcyZjE1YTgwLCAweDY1ZDkzZTQwLCAweGI5NDMyNjAwLCAweGFlNmI0MmMwLAorICAgIDB4OTcxM2VmODAsIDB4ODAzYjhiNDAsIDB4ZTVlMmI1MDAsIDB4ZjJjYWQxYzAsIDB4Y2JiMjdjODAsCisgICAgMHhkYzlhMTg0MCwgMHhhOWY3NGE0MSwgMHhiZWRmMmU4MSwgMHg4N2E3ODNjMSwgMHg5MDhmZTcwMSwKKyAgICAweGY1NTZkOTQxLCAweGUyN2ViZDgxLCAweGRiMDYxMGMxLCAweGNjMmU3NDAxLCAweDEwYjQ2YzQxLAorICAgIDB4MDc5YzA4ODEsIDB4M2VlNGE1YzEsIDB4MjljY2MxMDEsIDB4NGMxNWZmNDEsIDB4NWIzZDliODEsCisgICAgMHg2MjQ1MzZjMSwgMHg3NTZkNTIwMSwgMHg4ODlmOTJjMywgMHg5ZmI3ZjYwMywgMHhhNmNmNWI0MywKKyAgICAweGIxZTczZjgzLCAweGQ0M2UwMWMzLCAweGMzMTY2NTAzLCAweGZhNmVjODQzLCAweGVkNDZhYzgzLAorICAgIDB4MzFkY2I0YzMsIDB4MjZmNGQwMDMsIDB4MWY4YzdkNDMsIDB4MDhhNDE5ODMsIDB4NmQ3ZDI3YzMsCisgICAgMHg3YTU1NDMwMywgMHg0MzJkZWU0MywgMHg1NDA1OGE4MywgMHgyMTY4ZDg4MiwgMHgzNjQwYmM0MiwKKyAgICAweDBmMzgxMTAyLCAweDE4MTA3NWMyLCAweDdkYzk0YjgyLCAweDZhZTEyZjQyLCAweDUzOTk4MjAyLAorICAgIDB4NDRiMWU2YzIsIDB4OTgyYmZlODIsIDB4OGYwMzlhNDIsIDB4YjY3YjM3MDIsIDB4YTE1MzUzYzIsCisgICAgMHhjNDhhNmQ4MiwgMHhkM2EyMDk0MiwgMHhlYWRhYTQwMiwgMHhmZGYyYzBjMiwgMHhjYTRlMjNjNywKKyAgICAweGRkNjY0NzA3LCAweGU0MWVlYTQ3LCAweGYzMzY4ZTg3LCAweDk2ZWZiMGM3LCAweDgxYzdkNDA3LAorICAgIDB4YjhiZjc5NDcsIDB4YWY5NzFkODcsIDB4NzMwZDA1YzcsIDB4NjQyNTYxMDcsIDB4NWQ1ZGNjNDcsCisgICAgMHg0YTc1YTg4NywgMHgyZmFjOTZjNywgMHgzODg0ZjIwNywgMHgwMWZjNWY0NywgMHgxNmQ0M2I4NywKKyAgICAweDYzYjk2OTg2LCAweDc0OTEwZDQ2LCAweDRkZTlhMDA2LCAweDVhYzFjNGM2LCAweDNmMThmYTg2LAorICAgIDB4MjgzMDllNDYsIDB4MTE0ODMzMDYsIDB4MDY2MDU3YzYsIDB4ZGFmYTRmODYsIDB4Y2RkMjJiNDYsCisgICAgMHhmNGFhODYwNiwgMHhlMzgyZTJjNiwgMHg4NjViZGM4NiwgMHg5MTczYjg0NiwgMHhhODBiMTUwNiwKKyAgICAweGJmMjM3MWM2LCAweDQyZDFiMTA0LCAweDU1ZjlkNWM0LCAweDZjODE3ODg0LCAweDdiYTkxYzQ0LAorICAgIDB4MWU3MDIyMDQsIDB4MDk1ODQ2YzQsIDB4MzAyMGViODQsIDB4MjcwODhmNDQsIDB4ZmI5Mjk3MDQsCisgICAgMHhlY2JhZjNjNCwgMHhkNWMyNWU4NCwgMHhjMmVhM2E0NCwgMHhhNzMzMDQwNCwgMHhiMDFiNjBjNCwKKyAgICAweDg5NjNjZDg0LCAweDllNGJhOTQ0LCAweGViMjZmYjQ1LCAweGZjMGU5Zjg1LCAweGM1NzYzMmM1LAorICAgIDB4ZDI1ZTU2MDUsIDB4Yjc4NzY4NDUsIDB4YTBhZjBjODUsIDB4OTlkN2ExYzUsIDB4OGVmZmM1MDUsCisgICAgMHg1MjY1ZGQ0NSwgMHg0NTRkYjk4NSwgMHg3YzM1MTRjNSwgMHg2YjFkNzAwNSwgMHgwZWM0NGU0NSwKKyAgICAweDE5ZWMyYTg1LCAweDIwOTQ4N2M1LCAweDM3YmNlMzA1LCAweDRmZWQ0MWNmLCAweDU4YzUyNTBmLAorICAgIDB4NjFiZDg4NGYsIDB4NzY5NWVjOGYsIDB4MTM0Y2QyY2YsIDB4MDQ2NGI2MGYsIDB4M2QxYzFiNGYsCisgICAgMHgyYTM0N2Y4ZiwgMHhmNmFlNjdjZiwgMHhlMTg2MDMwZiwgMHhkOGZlYWU0ZiwgMHhjZmQ2Y2E4ZiwKKyAgICAweGFhMGZmNGNmLCAweGJkMjc5MDBmLCAweDg0NWYzZDRmLCAweDkzNzc1OThmLCAweGU2MWEwYjhlLAorICAgIDB4ZjEzMjZmNGUsIDB4Yzg0YWMyMGUsIDB4ZGY2MmE2Y2UsIDB4YmFiYjk4OGUsIDB4YWQ5M2ZjNGUsCisgICAgMHg5NGViNTEwZSwgMHg4M2MzMzVjZSwgMHg1ZjU5MmQ4ZSwgMHg0ODcxNDk0ZSwgMHg3MTA5ZTQwZSwKKyAgICAweDY2MjE4MGNlLCAweDAzZjhiZThlLCAweDE0ZDBkYTRlLCAweDJkYTg3NzBlLCAweDNhODAxM2NlLAorICAgIDB4Yzc3MmQzMGMsIDB4ZDA1YWI3Y2MsIDB4ZTkyMjFhOGMsIDB4ZmUwYTdlNGMsIDB4OWJkMzQwMGMsCisgICAgMHg4Y2ZiMjRjYywgMHhiNTgzODk4YywgMHhhMmFiZWQ0YywgMHg3ZTMxZjUwYywgMHg2OTE5OTFjYywKKyAgICAweDUwNjEzYzhjLCAweDQ3NDk1ODRjLCAweDIyOTA2NjBjLCAweDM1YjgwMmNjLCAweDBjYzBhZjhjLAorICAgIDB4MWJlOGNiNGMsIDB4NmU4NTk5NGQsIDB4NzlhZGZkOGQsIDB4NDBkNTUwY2QsIDB4NTdmZDM0MGQsCisgICAgMHgzMjI0MGE0ZCwgMHgyNTBjNmU4ZCwgMHgxYzc0YzNjZCwgMHgwYjVjYTcwZCwgMHhkN2M2YmY0ZCwKKyAgICAweGMwZWVkYjhkLCAweGY5OTY3NmNkLCAweGVlYmUxMjBkLCAweDhiNjcyYzRkLCAweDljNGY0ODhkLAorICAgIDB4YTUzN2U1Y2QsIDB4YjIxZjgxMGQsIDB4ODVhMzYyMDgsIDB4OTI4YjA2YzgsIDB4YWJmM2FiODgsCisgICAgMHhiY2RiY2Y0OCwgMHhkOTAyZjEwOCwgMHhjZTJhOTVjOCwgMHhmNzUyMzg4OCwgMHhlMDdhNWM0OCwKKyAgICAweDNjZTA0NDA4LCAweDJiYzgyMGM4LCAweDEyYjA4ZDg4LCAweDA1OThlOTQ4LCAweDYwNDFkNzA4LAorICAgIDB4Nzc2OWIzYzgsIDB4NGUxMTFlODgsIDB4NTkzOTdhNDgsIDB4MmM1NDI4NDksIDB4M2I3YzRjODksCisgICAgMHgwMjA0ZTFjOSwgMHgxNTJjODUwOSwgMHg3MGY1YmI0OSwgMHg2N2RkZGY4OSwgMHg1ZWE1NzJjOSwKKyAgICAweDQ5OGQxNjA5LCAweDk1MTcwZTQ5LCAweDgyM2Y2YTg5LCAweGJiNDdjN2M5LCAweGFjNmZhMzA5LAorICAgIDB4YzliNjlkNDksIDB4ZGU5ZWY5ODksIDB4ZTdlNjU0YzksIDB4ZjBjZTMwMDksIDB4MGQzY2YwY2IsCisgICAgMHgxYTE0OTQwYiwgMHgyMzZjMzk0YiwgMHgzNDQ0NWQ4YiwgMHg1MTlkNjNjYiwgMHg0NmI1MDcwYiwKKyAgICAweDdmY2RhYTRiLCAweDY4ZTVjZThiLCAweGI0N2ZkNmNiLCAweGEzNTdiMjBiLCAweDlhMmYxZjRiLAorICAgIDB4OGQwNzdiOGIsIDB4ZThkZTQ1Y2IsIDB4ZmZmNjIxMGIsIDB4YzY4ZThjNGIsIDB4ZDFhNmU4OGIsCisgICAgMHhhNGNiYmE4YSwgMHhiM2UzZGU0YSwgMHg4YTliNzMwYSwgMHg5ZGIzMTdjYSwgMHhmODZhMjk4YSwKKyAgICAweGVmNDI0ZDRhLCAweGQ2M2FlMDBhLCAweGMxMTI4NGNhLCAweDFkODg5YzhhLCAweDBhYTBmODRhLAorICAgIDB4MzNkODU1MGEsIDB4MjRmMDMxY2EsIDB4NDEyOTBmOGEsIDB4NTYwMTZiNGEsIDB4NmY3OWM2MGEsCisgICAgMHg3ODUxYTJjYX0sCisgICB7MHgwMDAwMDAwMCwgMHg5ZmRhODM5ZSwgMHhlNGM0MDE3ZCwgMHg3YjFlODJlMywgMHgxMmY5MDRiYiwKKyAgICAweDhkMjM4NzI1LCAweGY2M2QwNWM2LCAweDY5ZTc4NjU4LCAweDI1ZjIwOTc2LCAweGJhMjg4YWU4LAorICAgIDB4YzEzNjA4MGIsIDB4NWVlYzhiOTUsIDB4MzcwYjBkY2QsIDB4YThkMThlNTMsIDB4ZDNjZjBjYjAsCisgICAgMHg0YzE1OGYyZSwgMHg0YmU0MTJlYywgMHhkNDNlOTE3MiwgMHhhZjIwMTM5MSwgMHgzMGZhOTAwZiwKKyAgICAweDU5MWQxNjU3LCAweGM2Yzc5NWM5LCAweGJkZDkxNzJhLCAweDIyMDM5NGI0LCAweDZlMTYxYjlhLAorICAgIDB4ZjFjYzk4MDQsIDB4OGFkMjFhZTcsIDB4MTUwODk5NzksIDB4N2NlZjFmMjEsIDB4ZTMzNTljYmYsCisgICAgMHg5ODJiMWU1YywgMHgwN2YxOWRjMiwgMHg5N2M4MjVkOCwgMHgwODEyYTY0NiwgMHg3MzBjMjRhNSwKKyAgICAweGVjZDZhNzNiLCAweDg1MzEyMTYzLCAweDFhZWJhMmZkLCAweDYxZjUyMDFlLCAweGZlMmZhMzgwLAorICAgIDB4YjIzYTJjYWUsIDB4MmRlMGFmMzAsIDB4NTZmZTJkZDMsIDB4YzkyNGFlNGQsIDB4YTBjMzI4MTUsCisgICAgMHgzZjE5YWI4YiwgMHg0NDA3Mjk2OCwgMHhkYmRkYWFmNiwgMHhkYzJjMzczNCwgMHg0M2Y2YjRhYSwKKyAgICAweDM4ZTgzNjQ5LCAweGE3MzJiNWQ3LCAweGNlZDUzMzhmLCAweDUxMGZiMDExLCAweDJhMTEzMmYyLAorICAgIDB4YjVjYmIxNmMsIDB4ZjlkZTNlNDIsIDB4NjYwNGJkZGMsIDB4MWQxYTNmM2YsIDB4ODJjMGJjYTEsCisgICAgMHhlYjI3M2FmOSwgMHg3NGZkYjk2NywgMHgwZmUzM2I4NCwgMHg5MDM5YjgxYSwgMHhmNGUxNGRmMSwKKyAgICAweDZiM2JjZTZmLCAweDEwMjU0YzhjLCAweDhmZmZjZjEyLCAweGU2MTg0OTRhLCAweDc5YzJjYWQ0LAorICAgIDB4MDJkYzQ4MzcsIDB4OWQwNmNiYTksIDB4ZDExMzQ0ODcsIDB4NGVjOWM3MTksIDB4MzVkNzQ1ZmEsCisgICAgMHhhYTBkYzY2NCwgMHhjM2VhNDAzYywgMHg1YzMwYzNhMiwgMHgyNzJlNDE0MSwgMHhiOGY0YzJkZiwKKyAgICAweGJmMDU1ZjFkLCAweDIwZGZkYzgzLCAweDViYzE1ZTYwLCAweGM0MWJkZGZlLCAweGFkZmM1YmE2LAorICAgIDB4MzIyNmQ4MzgsIDB4NDkzODVhZGIsIDB4ZDZlMmQ5NDUsIDB4OWFmNzU2NmIsIDB4MDUyZGQ1ZjUsCisgICAgMHg3ZTMzNTcxNiwgMHhlMWU5ZDQ4OCwgMHg4ODBlNTJkMCwgMHgxN2Q0ZDE0ZSwgMHg2Y2NhNTNhZCwKKyAgICAweGYzMTBkMDMzLCAweDYzMjk2ODI5LCAweGZjZjNlYmI3LCAweDg3ZWQ2OTU0LCAweDE4MzdlYWNhLAorICAgIDB4NzFkMDZjOTIsIDB4ZWUwYWVmMGMsIDB4OTUxNDZkZWYsIDB4MGFjZWVlNzEsIDB4NDZkYjYxNWYsCisgICAgMHhkOTAxZTJjMSwgMHhhMjFmNjAyMiwgMHgzZGM1ZTNiYywgMHg1NDIyNjVlNCwgMHhjYmY4ZTY3YSwKKyAgICAweGIwZTY2NDk5LCAweDJmM2NlNzA3LCAweDI4Y2Q3YWM1LCAweGI3MTdmOTViLCAweGNjMDk3YmI4LAorICAgIDB4NTNkM2Y4MjYsIDB4M2EzNDdlN2UsIDB4YTVlZWZkZTAsIDB4ZGVmMDdmMDMsIDB4NDEyYWZjOWQsCisgICAgMHgwZDNmNzNiMywgMHg5MmU1ZjAyZCwgMHhlOWZiNzJjZSwgMHg3NjIxZjE1MCwgMHgxZmM2NzcwOCwKKyAgICAweDgwMWNmNDk2LCAweGZiMDI3Njc1LCAweDY0ZDhmNWViLCAweDMyYjM5ZGEzLCAweGFkNjkxZTNkLAorICAgIDB4ZDY3NzljZGUsIDB4NDlhZDFmNDAsIDB4MjA0YTk5MTgsIDB4YmY5MDFhODYsIDB4YzQ4ZTk4NjUsCisgICAgMHg1YjU0MWJmYiwgMHgxNzQxOTRkNSwgMHg4ODliMTc0YiwgMHhmMzg1OTVhOCwgMHg2YzVmMTYzNiwKKyAgICAweDA1Yjg5MDZlLCAweDlhNjIxM2YwLCAweGUxN2M5MTEzLCAweDdlYTYxMjhkLCAweDc5NTc4ZjRmLAorICAgIDB4ZTY4ZDBjZDEsIDB4OWQ5MzhlMzIsIDB4MDI0OTBkYWMsIDB4NmJhZThiZjQsIDB4ZjQ3NDA4NmEsCisgICAgMHg4ZjZhOGE4OSwgMHgxMGIwMDkxNywgMHg1Y2E1ODYzOSwgMHhjMzdmMDVhNywgMHhiODYxODc0NCwKKyAgICAweDI3YmIwNGRhLCAweDRlNWM4MjgyLCAweGQxODYwMTFjLCAweGFhOTg4M2ZmLCAweDM1NDIwMDYxLAorICAgIDB4YTU3YmI4N2IsIDB4M2FhMTNiZTUsIDB4NDFiZmI5MDYsIDB4ZGU2NTNhOTgsIDB4Yjc4MmJjYzAsCisgICAgMHgyODU4M2Y1ZSwgMHg1MzQ2YmRiZCwgMHhjYzljM2UyMywgMHg4MDg5YjEwZCwgMHgxZjUzMzI5MywKKyAgICAweDY0NGRiMDcwLCAweGZiOTczM2VlLCAweDkyNzBiNWI2LCAweDBkYWEzNjI4LCAweDc2YjRiNGNiLAorICAgIDB4ZTk2ZTM3NTUsIDB4ZWU5ZmFhOTcsIDB4NzE0NTI5MDksIDB4MGE1YmFiZWEsIDB4OTU4MTI4NzQsCisgICAgMHhmYzY2YWUyYywgMHg2M2JjMmRiMiwgMHgxOGEyYWY1MSwgMHg4Nzc4MmNjZiwgMHhjYjZkYTNlMSwKKyAgICAweDU0YjcyMDdmLCAweDJmYTlhMjljLCAweGIwNzMyMTAyLCAweGQ5OTRhNzVhLCAweDQ2NGUyNGM0LAorICAgIDB4M2Q1MGE2MjcsIDB4YTI4YTI1YjksIDB4YzY1MmQwNTIsIDB4NTk4ODUzY2MsIDB4MjI5NmQxMmYsCisgICAgMHhiZDRjNTJiMSwgMHhkNGFiZDRlOSwgMHg0YjcxNTc3NywgMHgzMDZmZDU5NCwgMHhhZmI1NTYwYSwKKyAgICAweGUzYTBkOTI0LCAweDdjN2E1YWJhLCAweDA3NjRkODU5LCAweDk4YmU1YmM3LCAweGYxNTlkZDlmLAorICAgIDB4NmU4MzVlMDEsIDB4MTU5ZGRjZTIsIDB4OGE0NzVmN2MsIDB4OGRiNmMyYmUsIDB4MTI2YzQxMjAsCisgICAgMHg2OTcyYzNjMywgMHhmNmE4NDA1ZCwgMHg5ZjRmYzYwNSwgMHgwMDk1NDU5YiwgMHg3YjhiYzc3OCwKKyAgICAweGU0NTE0NGU2LCAweGE4NDRjYmM4LCAweDM3OWU0ODU2LCAweDRjODBjYWI1LCAweGQzNWE0OTJiLAorICAgIDB4YmFiZGNmNzMsIDB4MjU2NzRjZWQsIDB4NWU3OWNlMGUsIDB4YzFhMzRkOTAsIDB4NTE5YWY1OGEsCisgICAgMHhjZTQwNzYxNCwgMHhiNTVlZjRmNywgMHgyYTg0Nzc2OSwgMHg0MzYzZjEzMSwgMHhkY2I5NzJhZiwKKyAgICAweGE3YTdmMDRjLCAweDM4N2Q3M2QyLCAweDc0NjhmY2ZjLCAweGViYjI3ZjYyLCAweDkwYWNmZDgxLAorICAgIDB4MGY3NjdlMWYsIDB4NjY5MWY4NDcsIDB4Zjk0YjdiZDksIDB4ODI1NWY5M2EsIDB4MWQ4ZjdhYTQsCisgICAgMHgxYTdlZTc2NiwgMHg4NWE0NjRmOCwgMHhmZWJhZTYxYiwgMHg2MTYwNjU4NSwgMHgwODg3ZTNkZCwKKyAgICAweDk3NWQ2MDQzLCAweGVjNDNlMmEwLCAweDczOTk2MTNlLCAweDNmOGNlZTEwLCAweGEwNTY2ZDhlLAorICAgIDB4ZGI0OGVmNmQsIDB4NDQ5MjZjZjMsIDB4MmQ3NWVhYWIsIDB4YjJhZjY5MzUsIDB4YzliMWViZDYsCisgICAgMHg1NjZiNjg0OH19OworCitsb2NhbCBjb25zdCB6X3dvcmRfdCBGQVIgY3JjX2JyYWlkX2JpZ190YWJsZVtdWzI1Nl0gPSB7CisgICB7MHgwMDAwMDAwMCwgMHg5ZTgzZGE5ZiwgMHg3ZDAxYzRlNCwgMHhlMzgyMWU3YiwgMHhiYjA0ZjkxMiwKKyAgICAweDI1ODcyMzhkLCAweGM2MDUzZGY2LCAweDU4ODZlNzY5LCAweDc2MDlmMjI1LCAweGU4OGEyOGJhLAorICAgIDB4MGIwODM2YzEsIDB4OTU4YmVjNWUsIDB4Y2QwZDBiMzcsIDB4NTM4ZWQxYTgsIDB4YjAwY2NmZDMsCisgICAgMHgyZThmMTU0YywgMHhlYzEyZTQ0YiwgMHg3MjkxM2VkNCwgMHg5MTEzMjBhZiwgMHgwZjkwZmEzMCwKKyAgICAweDU3MTYxZDU5LCAweGM5OTVjN2M2LCAweDJhMTdkOWJkLCAweGI0OTQwMzIyLCAweDlhMWIxNjZlLAorICAgIDB4MDQ5OGNjZjEsIDB4ZTcxYWQyOGEsIDB4Nzk5OTA4MTUsIDB4MjExZmVmN2MsIDB4YmY5YzM1ZTMsCisgICAgMHg1YzFlMmI5OCwgMHhjMjlkZjEwNywgMHhkODI1Yzg5NywgMHg0NmE2MTIwOCwgMHhhNTI0MGM3MywKKyAgICAweDNiYTdkNmVjLCAweDYzMjEzMTg1LCAweGZkYTJlYjFhLCAweDFlMjBmNTYxLCAweDgwYTMyZmZlLAorICAgIDB4YWUyYzNhYjIsIDB4MzBhZmUwMmQsIDB4ZDMyZGZlNTYsIDB4NGRhZTI0YzksIDB4MTUyOGMzYTAsCisgICAgMHg4YmFiMTkzZiwgMHg2ODI5MDc0NCwgMHhmNmFhZGRkYiwgMHgzNDM3MmNkYywgMHhhYWI0ZjY0MywKKyAgICAweDQ5MzZlODM4LCAweGQ3YjUzMmE3LCAweDhmMzNkNWNlLCAweDExYjAwZjUxLCAweGYyMzIxMTJhLAorICAgIDB4NmNiMWNiYjUsIDB4NDIzZWRlZjksIDB4ZGNiZDA0NjYsIDB4M2YzZjFhMWQsIDB4YTFiY2MwODIsCisgICAgMHhmOTNhMjdlYiwgMHg2N2I5ZmQ3NCwgMHg4NDNiZTMwZiwgMHgxYWI4Mzk5MCwgMHhmMTRkZTFmNCwKKyAgICAweDZmY2UzYjZiLCAweDhjNGMyNTEwLCAweDEyY2ZmZjhmLCAweDRhNDkxOGU2LCAweGQ0Y2FjMjc5LAorICAgIDB4Mzc0OGRjMDIsIDB4YTljYjA2OWQsIDB4ODc0NDEzZDEsIDB4MTljN2M5NGUsIDB4ZmE0NWQ3MzUsCisgICAgMHg2NGM2MGRhYSwgMHgzYzQwZWFjMywgMHhhMmMzMzA1YywgMHg0MTQxMmUyNywgMHhkZmMyZjRiOCwKKyAgICAweDFkNWYwNWJmLCAweDgzZGNkZjIwLCAweDYwNWVjMTViLCAweGZlZGQxYmM0LCAweGE2NWJmY2FkLAorICAgIDB4MzhkODI2MzIsIDB4ZGI1YTM4NDksIDB4NDVkOWUyZDYsIDB4NmI1NmY3OWEsIDB4ZjVkNTJkMDUsCisgICAgMHgxNjU3MzM3ZSwgMHg4OGQ0ZTllMSwgMHhkMDUyMGU4OCwgMHg0ZWQxZDQxNywgMHhhZDUzY2E2YywKKyAgICAweDMzZDAxMGYzLCAweDI5NjgyOTYzLCAweGI3ZWJmM2ZjLCAweDU0NjllZDg3LCAweGNhZWEzNzE4LAorICAgIDB4OTI2Y2QwNzEsIDB4MGNlZjBhZWUsIDB4ZWY2ZDE0OTUsIDB4NzFlZWNlMGEsIDB4NWY2MWRiNDYsCisgICAgMHhjMWUyMDFkOSwgMHgyMjYwMWZhMiwgMHhiY2UzYzUzZCwgMHhlNDY1MjI1NCwgMHg3YWU2ZjhjYiwKKyAgICAweDk5NjRlNmIwLCAweDA3ZTczYzJmLCAweGM1N2FjZDI4LCAweDViZjkxN2I3LCAweGI4N2IwOWNjLAorICAgIDB4MjZmOGQzNTMsIDB4N2U3ZTM0M2EsIDB4ZTBmZGVlYTUsIDB4MDM3ZmYwZGUsIDB4OWRmYzJhNDEsCisgICAgMHhiMzczM2YwZCwgMHgyZGYwZTU5MiwgMHhjZTcyZmJlOSwgMHg1MGYxMjE3NiwgMHgwODc3YzYxZiwKKyAgICAweDk2ZjQxYzgwLCAweDc1NzYwMmZiLCAweGViZjVkODY0LCAweGEzOWRiMzMyLCAweDNkMWU2OWFkLAorICAgIDB4ZGU5Yzc3ZDYsIDB4NDAxZmFkNDksIDB4MTg5OTRhMjAsIDB4ODYxYTkwYmYsIDB4NjU5ODhlYzQsCisgICAgMHhmYjFiNTQ1YiwgMHhkNTk0NDExNywgMHg0YjE3OWI4OCwgMHhhODk1ODVmMywgMHgzNjE2NWY2YywKKyAgICAweDZlOTBiODA1LCAweGYwMTM2MjlhLCAweDEzOTE3Y2UxLCAweDhkMTJhNjdlLCAweDRmOGY1Nzc5LAorICAgIDB4ZDEwYzhkZTYsIDB4MzI4ZTkzOWQsIDB4YWMwZDQ5MDIsIDB4ZjQ4YmFlNmIsIDB4NmEwODc0ZjQsCisgICAgMHg4OThhNmE4ZiwgMHgxNzA5YjAxMCwgMHgzOTg2YTU1YywgMHhhNzA1N2ZjMywgMHg0NDg3NjFiOCwKKyAgICAweGRhMDRiYjI3LCAweDgyODI1YzRlLCAweDFjMDE4NmQxLCAweGZmODM5OGFhLCAweDYxMDA0MjM1LAorICAgIDB4N2JiODdiYTUsIDB4ZTUzYmExM2EsIDB4MDZiOWJmNDEsIDB4OTgzYTY1ZGUsIDB4YzBiYzgyYjcsCisgICAgMHg1ZTNmNTgyOCwgMHhiZGJkNDY1MywgMHgyMzNlOWNjYywgMHgwZGIxODk4MCwgMHg5MzMyNTMxZiwKKyAgICAweDcwYjA0ZDY0LCAweGVlMzM5N2ZiLCAweGI2YjU3MDkyLCAweDI4MzZhYTBkLCAweGNiYjRiNDc2LAorICAgIDB4NTUzNzZlZTksIDB4OTdhYTlmZWUsIDB4MDkyOTQ1NzEsIDB4ZWFhYjViMGEsIDB4NzQyODgxOTUsCisgICAgMHgyY2FlNjZmYywgMHhiMjJkYmM2MywgMHg1MWFmYTIxOCwgMHhjZjJjNzg4NywgMHhlMWEzNmRjYiwKKyAgICAweDdmMjBiNzU0LCAweDljYTJhOTJmLCAweDAyMjE3M2IwLCAweDVhYTc5NGQ5LCAweGM0MjQ0ZTQ2LAorICAgIDB4MjdhNjUwM2QsIDB4YjkyNThhYTIsIDB4NTJkMDUyYzYsIDB4Y2M1Mzg4NTksIDB4MmZkMTk2MjIsCisgICAgMHhiMTUyNGNiZCwgMHhlOWQ0YWJkNCwgMHg3NzU3NzE0YiwgMHg5NGQ1NmYzMCwgMHgwYTU2YjVhZiwKKyAgICAweDI0ZDlhMGUzLCAweGJhNWE3YTdjLCAweDU5ZDg2NDA3LCAweGM3NWJiZTk4LCAweDlmZGQ1OWYxLAorICAgIDB4MDE1ZTgzNmUsIDB4ZTJkYzlkMTUsIDB4N2M1ZjQ3OGEsIDB4YmVjMmI2OGQsIDB4MjA0MTZjMTIsCisgICAgMHhjM2MzNzI2OSwgMHg1ZDQwYThmNiwgMHgwNWM2NGY5ZiwgMHg5YjQ1OTUwMCwgMHg3OGM3OGI3YiwKKyAgICAweGU2NDQ1MWU0LCAweGM4Y2I0NGE4LCAweDU2NDg5ZTM3LCAweGI1Y2E4MDRjLCAweDJiNDk1YWQzLAorICAgIDB4NzNjZmJkYmEsIDB4ZWQ0YzY3MjUsIDB4MGVjZTc5NWUsIDB4OTA0ZGEzYzEsIDB4OGFmNTlhNTEsCisgICAgMHgxNDc2NDBjZSwgMHhmN2Y0NWViNSwgMHg2OTc3ODQyYSwgMHgzMWYxNjM0MywgMHhhZjcyYjlkYywKKyAgICAweDRjZjBhN2E3LCAweGQyNzM3ZDM4LCAweGZjZmM2ODc0LCAweDYyN2ZiMmViLCAweDgxZmRhYzkwLAorICAgIDB4MWY3ZTc2MGYsIDB4NDdmODkxNjYsIDB4ZDk3YjRiZjksIDB4M2FmOTU1ODIsIDB4YTQ3YThmMWQsCisgICAgMHg2NmU3N2UxYSwgMHhmODY0YTQ4NSwgMHgxYmU2YmFmZSwgMHg4NTY1NjA2MSwgMHhkZGUzODcwOCwKKyAgICAweDQzNjA1ZDk3LCAweGEwZTI0M2VjLCAweDNlNjE5OTczLCAweDEwZWU4YzNmLCAweDhlNmQ1NmEwLAorICAgIDB4NmRlZjQ4ZGIsIDB4ZjM2YzkyNDQsIDB4YWJlYTc1MmQsIDB4MzU2OWFmYjIsIDB4ZDZlYmIxYzksCisgICAgMHg0ODY4NmI1Nn0sCisgICB7MHgwMDAwMDAwMCwgMHhjMDY0MjgxNywgMHg4MGM5NTAyZSwgMHg0MGFkNzgzOSwgMHgwMDkzYTE1YywKKyAgICAweGMwZjc4OTRiLCAweDgwNWFmMTcyLCAweDQwM2VkOTY1LCAweDAwMjY0M2I5LCAweGMwNDI2YmFlLAorICAgIDB4ODBlZjEzOTcsIDB4NDA4YjNiODAsIDB4MDBiNWUyZTUsIDB4YzBkMWNhZjIsIDB4ODA3Y2IyY2IsCisgICAgMHg0MDE4OWFkYywgMHg0MTRhZjdhOSwgMHg4MTJlZGZiZSwgMHhjMTgzYTc4NywgMHgwMWU3OGY5MCwKKyAgICAweDQxZDk1NmY1LCAweDgxYmQ3ZWUyLCAweGMxMTAwNmRiLCAweDAxNzQyZWNjLCAweDQxNmNiNDEwLAorICAgIDB4ODEwODljMDcsIDB4YzFhNWU0M2UsIDB4MDFjMWNjMjksIDB4NDFmZjE1NGMsIDB4ODE5YjNkNWIsCisgICAgMHhjMTM2NDU2MiwgMHgwMTUyNmQ3NSwgMHhjMzkyOWY4OCwgMHgwM2Y2Yjc5ZiwgMHg0MzViY2ZhNiwKKyAgICAweDgzM2ZlN2IxLCAweGMzMDEzZWQ0LCAweDAzNjUxNmMzLCAweDQzYzg2ZWZhLCAweDgzYWM0NmVkLAorICAgIDB4YzNiNGRjMzEsIDB4MDNkMGY0MjYsIDB4NDM3ZDhjMWYsIDB4ODMxOWE0MDgsIDB4YzMyNzdkNmQsCisgICAgMHgwMzQzNTU3YSwgMHg0M2VlMmQ0MywgMHg4MzhhMDU1NCwgMHg4MmQ4NjgyMSwgMHg0MmJjNDAzNiwKKyAgICAweDAyMTEzODBmLCAweGMyNzUxMDE4LCAweDgyNGJjOTdkLCAweDQyMmZlMTZhLCAweDAyODI5OTUzLAorICAgIDB4YzJlNmIxNDQsIDB4ODJmZTJiOTgsIDB4NDI5YTAzOGYsIDB4MDIzNzdiYjYsIDB4YzI1MzUzYTEsCisgICAgMHg4MjZkOGFjNCwgMHg0MjA5YTJkMywgMHgwMmE0ZGFlYSwgMHhjMmMwZjJmZCwgMHhjNzIzNGVjYSwKKyAgICAweDA3NDc2NmRkLCAweDQ3ZWExZWU0LCAweDg3OGUzNmYzLCAweGM3YjBlZjk2LCAweDA3ZDRjNzgxLAorICAgIDB4NDc3OWJmYjgsIDB4ODcxZDk3YWYsIDB4YzcwNTBkNzMsIDB4MDc2MTI1NjQsIDB4NDdjYzVkNWQsCisgICAgMHg4N2E4NzU0YSwgMHhjNzk2YWMyZiwgMHgwN2YyODQzOCwgMHg0NzVmZmMwMSwgMHg4NzNiZDQxNiwKKyAgICAweDg2NjliOTYzLCAweDQ2MGQ5MTc0LCAweDA2YTBlOTRkLCAweGM2YzRjMTVhLCAweDg2ZmExODNmLAorICAgIDB4NDY5ZTMwMjgsIDB4MDYzMzQ4MTEsIDB4YzY1NzYwMDYsIDB4ODY0ZmZhZGEsIDB4NDYyYmQyY2QsCisgICAgMHgwNjg2YWFmNCwgMHhjNmUyODJlMywgMHg4NmRjNWI4NiwgMHg0NmI4NzM5MSwgMHgwNjE1MGJhOCwKKyAgICAweGM2NzEyM2JmLCAweDA0YjFkMTQyLCAweGM0ZDVmOTU1LCAweDg0Nzg4MTZjLCAweDQ0MWNhOTdiLAorICAgIDB4MDQyMjcwMWUsIDB4YzQ0NjU4MDksIDB4ODRlYjIwMzAsIDB4NDQ4ZjA4MjcsIDB4MDQ5NzkyZmIsCisgICAgMHhjNGYzYmFlYywgMHg4NDVlYzJkNSwgMHg0NDNhZWFjMiwgMHgwNDA0MzNhNywgMHhjNDYwMWJiMCwKKyAgICAweDg0Y2Q2Mzg5LCAweDQ0YTk0YjllLCAweDQ1ZmIyNmViLCAweDg1OWYwZWZjLCAweGM1MzI3NmM1LAorICAgIDB4MDU1NjVlZDIsIDB4NDU2ODg3YjcsIDB4ODUwY2FmYTAsIDB4YzVhMWQ3OTksIDB4MDVjNWZmOGUsCisgICAgMHg0NWRkNjU1MiwgMHg4NWI5NGQ0NSwgMHhjNTE0MzU3YywgMHgwNTcwMWQ2YiwgMHg0NTRlYzQwZSwKKyAgICAweDg1MmFlYzE5LCAweGM1ODc5NDIwLCAweDA1ZTNiYzM3LCAweGNmNDFlZDRmLCAweDBmMjVjNTU4LAorICAgIDB4NGY4OGJkNjEsIDB4OGZlYzk1NzYsIDB4Y2ZkMjRjMTMsIDB4MGZiNjY0MDQsIDB4NGYxYjFjM2QsCisgICAgMHg4ZjdmMzQyYSwgMHhjZjY3YWVmNiwgMHgwZjAzODZlMSwgMHg0ZmFlZmVkOCwgMHg4ZmNhZDZjZiwKKyAgICAweGNmZjQwZmFhLCAweDBmOTAyN2JkLCAweDRmM2Q1Zjg0LCAweDhmNTk3NzkzLCAweDhlMGIxYWU2LAorICAgIDB4NGU2ZjMyZjEsIDB4MGVjMjRhYzgsIDB4Y2VhNjYyZGYsIDB4OGU5OGJiYmEsIDB4NGVmYzkzYWQsCisgICAgMHgwZTUxZWI5NCwgMHhjZTM1YzM4MywgMHg4ZTJkNTk1ZiwgMHg0ZTQ5NzE0OCwgMHgwZWU0MDk3MSwKKyAgICAweGNlODAyMTY2LCAweDhlYmVmODAzLCAweDRlZGFkMDE0LCAweDBlNzdhODJkLCAweGNlMTM4MDNhLAorICAgIDB4MGNkMzcyYzcsIDB4Y2NiNzVhZDAsIDB4OGMxYTIyZTksIDB4NGM3ZTBhZmUsIDB4MGM0MGQzOWIsCisgICAgMHhjYzI0ZmI4YywgMHg4Yzg5ODNiNSwgMHg0Y2VkYWJhMiwgMHgwY2Y1MzE3ZSwgMHhjYzkxMTk2OSwKKyAgICAweDhjM2M2MTUwLCAweDRjNTg0OTQ3LCAweDBjNjY5MDIyLCAweGNjMDJiODM1LCAweDhjYWZjMDBjLAorICAgIDB4NGNjYmU4MWIsIDB4NGQ5OTg1NmUsIDB4OGRmZGFkNzksIDB4Y2Q1MGQ1NDAsIDB4MGQzNGZkNTcsCisgICAgMHg0ZDBhMjQzMiwgMHg4ZDZlMGMyNSwgMHhjZGMzNzQxYywgMHgwZGE3NWMwYiwgMHg0ZGJmYzZkNywKKyAgICAweDhkZGJlZWMwLCAweGNkNzY5NmY5LCAweDBkMTJiZWVlLCAweDRkMmM2NzhiLCAweDhkNDg0ZjljLAorICAgIDB4Y2RlNTM3YTUsIDB4MGQ4MTFmYjIsIDB4MDg2MmEzODUsIDB4YzgwNjhiOTIsIDB4ODhhYmYzYWIsCisgICAgMHg0OGNmZGJiYywgMHgwOGYxMDJkOSwgMHhjODk1MmFjZSwgMHg4ODM4NTJmNywgMHg0ODVjN2FlMCwKKyAgICAweDA4NDRlMDNjLCAweGM4MjBjODJiLCAweDg4OGRiMDEyLCAweDQ4ZTk5ODA1LCAweDA4ZDc0MTYwLAorICAgIDB4YzhiMzY5NzcsIDB4ODgxZTExNGUsIDB4NDg3YTM5NTksIDB4NDkyODU0MmMsIDB4ODk0YzdjM2IsCisgICAgMHhjOWUxMDQwMiwgMHgwOTg1MmMxNSwgMHg0OWJiZjU3MCwgMHg4OWRmZGQ2NywgMHhjOTcyYTU1ZSwKKyAgICAweDA5MTY4ZDQ5LCAweDQ5MGUxNzk1LCAweDg5NmEzZjgyLCAweGM5Yzc0N2JiLCAweDA5YTM2ZmFjLAorICAgIDB4NDk5ZGI2YzksIDB4ODlmOTllZGUsIDB4Yzk1NGU2ZTcsIDB4MDkzMGNlZjAsIDB4Y2JmMDNjMGQsCisgICAgMHgwYjk0MTQxYSwgMHg0YjM5NmMyMywgMHg4YjVkNDQzNCwgMHhjYjYzOWQ1MSwgMHgwYjA3YjU0NiwKKyAgICAweDRiYWFjZDdmLCAweDhiY2VlNTY4LCAweGNiZDY3ZmI0LCAweDBiYjI1N2EzLCAweDRiMWYyZjlhLAorICAgIDB4OGI3YjA3OGQsIDB4Y2I0NWRlZTgsIDB4MGIyMWY2ZmYsIDB4NGI4YzhlYzYsIDB4OGJlOGE2ZDEsCisgICAgMHg4YWJhY2JhNCwgMHg0YWRlZTNiMywgMHgwYTczOWI4YSwgMHhjYTE3YjM5ZCwgMHg4YTI5NmFmOCwKKyAgICAweDRhNGQ0MmVmLCAweDBhZTAzYWQ2LCAweGNhODQxMmMxLCAweDhhOWM4ODFkLCAweDRhZjhhMDBhLAorICAgIDB4MGE1NWQ4MzMsIDB4Y2EzMWYwMjQsIDB4OGEwZjI5NDEsIDB4NGE2YjAxNTYsIDB4MGFjNjc5NmYsCisgICAgMHhjYWEyNTE3OH0sCisgICB7MHgwMDAwMDAwMCwgMHhkNGVhNzM5YiwgMHhlOWQzOTZlZCwgMHgzZDM5ZTU3NiwgMHg5M2ExNWMwMCwKKyAgICAweDQ3NGIyZjliLCAweDdhNzJjYWVkLCAweGFlOThiOTc2LCAweDI2NDNiOTAwLCAweGYyYTljYTliLAorICAgIDB4Y2Y5MDJmZWQsIDB4MWI3YTVjNzYsIDB4YjVlMmU1MDAsIDB4NjEwODk2OWIsIDB4NWMzMTczZWQsCisgICAgMHg4OGRiMDA3NiwgMHg0Yzg2NzIwMSwgMHg5ODZjMDE5YSwgMHhhNTU1ZTRlYywgMHg3MWJmOTc3NywKKyAgICAweGRmMjcyZTAxLCAweDBiY2Q1ZDlhLCAweDM2ZjRiOGVjLCAweGUyMWVjYjc3LCAweDZhYzVjYjAxLAorICAgIDB4YmUyZmI4OWEsIDB4ODMxNjVkZWMsIDB4NTdmYzJlNzcsIDB4Zjk2NDk3MDEsIDB4MmQ4ZWU0OWEsCisgICAgMHgxMGI3MDFlYywgMHhjNDVkNzI3NywgMHg5ODBjZTUwMiwgMHg0Y2U2OTY5OSwgMHg3MWRmNzNlZiwKKyAgICAweGE1MzUwMDc0LCAweDBiYWRiOTAyLCAweGRmNDdjYTk5LCAweGUyN2UyZmVmLCAweDM2OTQ1Yzc0LAorICAgIDB4YmU0ZjVjMDIsIDB4NmFhNTJmOTksIDB4NTc5Y2NhZWYsIDB4ODM3NmI5NzQsIDB4MmRlZTAwMDIsCisgICAgMHhmOTA0NzM5OSwgMHhjNDNkOTZlZiwgMHgxMGQ3ZTU3NCwgMHhkNDhhOTcwMywgMHgwMDYwZTQ5OCwKKyAgICAweDNkNTkwMWVlLCAweGU5YjM3Mjc1LCAweDQ3MmJjYjAzLCAweDkzYzFiODk4LCAweGFlZjg1ZGVlLAorICAgIDB4N2ExMjJlNzUsIDB4ZjJjOTJlMDMsIDB4MjYyMzVkOTgsIDB4MWIxYWI4ZWUsIDB4Y2ZmMGNiNzUsCisgICAgMHg2MTY4NzIwMywgMHhiNTgyMDE5OCwgMHg4OGJiZTRlZSwgMHg1YzUxOTc3NSwgMHgzMDE5Y2EwNSwKKyAgICAweGU0ZjNiOTllLCAweGQ5Y2E1Y2U4LCAweDBkMjAyZjczLCAweGEzYjg5NjA1LCAweDc3NTJlNTllLAorICAgIDB4NGE2YjAwZTgsIDB4OWU4MTczNzMsIDB4MTY1YTczMDUsIDB4YzJiMDAwOWUsIDB4ZmY4OWU1ZTgsCisgICAgMHgyYjYzOTY3MywgMHg4NWZiMmYwNSwgMHg1MTExNWM5ZSwgMHg2YzI4YjllOCwgMHhiOGMyY2E3MywKKyAgICAweDdjOWZiODA0LCAweGE4NzVjYjlmLCAweDk1NGMyZWU5LCAweDQxYTY1ZDcyLCAweGVmM2VlNDA0LAorICAgIDB4M2JkNDk3OWYsIDB4MDZlZDcyZTksIDB4ZDIwNzAxNzIsIDB4NWFkYzAxMDQsIDB4OGUzNjcyOWYsCisgICAgMHhiMzBmOTdlOSwgMHg2N2U1ZTQ3MiwgMHhjOTdkNWQwNCwgMHgxZDk3MmU5ZiwgMHgyMGFlY2JlOSwKKyAgICAweGY0NDRiODcyLCAweGE4MTUyZjA3LCAweDdjZmY1YzljLCAweDQxYzZiOWVhLCAweDk1MmNjYTcxLAorICAgIDB4M2JiNDczMDcsIDB4ZWY1ZTAwOWMsIDB4ZDI2N2U1ZWEsIDB4MDY4ZDk2NzEsIDB4OGU1Njk2MDcsCisgICAgMHg1YWJjZTU5YywgMHg2Nzg1MDBlYSwgMHhiMzZmNzM3MSwgMHgxZGY3Y2EwNywgMHhjOTFkYjk5YywKKyAgICAweGY0MjQ1Y2VhLCAweDIwY2UyZjcxLCAweGU0OTM1ZDA2LCAweDMwNzkyZTlkLCAweDBkNDBjYmViLAorICAgIDB4ZDlhYWI4NzAsIDB4NzczMjAxMDYsIDB4YTNkODcyOWQsIDB4OWVlMTk3ZWIsIDB4NGEwYmU0NzAsCisgICAgMHhjMmQwZTQwNiwgMHgxNjNhOTc5ZCwgMHgyYjAzNzJlYiwgMHhmZmU5MDE3MCwgMHg1MTcxYjgwNiwKKyAgICAweDg1OWJjYjlkLCAweGI4YTIyZWViLCAweDZjNDg1ZDcwLCAweDYwMzI5NDBiLCAweGI0ZDhlNzkwLAorICAgIDB4ODllMTAyZTYsIDB4NWQwYjcxN2QsIDB4ZjM5M2M4MGIsIDB4Mjc3OWJiOTAsIDB4MWE0MDVlZTYsCisgICAgMHhjZWFhMmQ3ZCwgMHg0NjcxMmQwYiwgMHg5MjliNWU5MCwgMHhhZmEyYmJlNiwgMHg3YjQ4Yzg3ZCwKKyAgICAweGQ1ZDA3MTBiLCAweDAxM2EwMjkwLCAweDNjMDNlN2U2LCAweGU4ZTk5NDdkLCAweDJjYjRlNjBhLAorICAgIDB4Zjg1ZTk1OTEsIDB4YzU2NzcwZTcsIDB4MTE4ZDAzN2MsIDB4YmYxNWJhMGEsIDB4NmJmZmM5OTEsCisgICAgMHg1NmM2MmNlNywgMHg4MjJjNWY3YywgMHgwYWY3NWYwYSwgMHhkZTFkMmM5MSwgMHhlMzI0YzllNywKKyAgICAweDM3Y2ViYTdjLCAweDk5NTYwMzBhLCAweDRkYmM3MDkxLCAweDcwODU5NWU3LCAweGE0NmZlNjdjLAorICAgIDB4ZjgzZTcxMDksIDB4MmNkNDAyOTIsIDB4MTFlZGU3ZTQsIDB4YzUwNzk0N2YsIDB4NmI5ZjJkMDksCisgICAgMHhiZjc1NWU5MiwgMHg4MjRjYmJlNCwgMHg1NmE2Yzg3ZiwgMHhkZTdkYzgwOSwgMHgwYTk3YmI5MiwKKyAgICAweDM3YWU1ZWU0LCAweGUzNDQyZDdmLCAweDRkZGM5NDA5LCAweDk5MzZlNzkyLCAweGE0MGYwMmU0LAorICAgIDB4NzBlNTcxN2YsIDB4YjRiODAzMDgsIDB4NjA1MjcwOTMsIDB4NWQ2Yjk1ZTUsIDB4ODk4MWU2N2UsCisgICAgMHgyNzE5NWYwOCwgMHhmM2YzMmM5MywgMHhjZWNhYzllNSwgMHgxYTIwYmE3ZSwgMHg5MmZiYmEwOCwKKyAgICAweDQ2MTFjOTkzLCAweDdiMjgyY2U1LCAweGFmYzI1ZjdlLCAweDAxNWFlNjA4LCAweGQ1YjA5NTkzLAorICAgIDB4ZTg4OTcwZTUsIDB4M2M2MzAzN2UsIDB4NTAyYjVlMGUsIDB4ODRjMTJkOTUsIDB4YjlmOGM4ZTMsCisgICAgMHg2ZDEyYmI3OCwgMHhjMzhhMDIwZSwgMHgxNzYwNzE5NSwgMHgyYTU5OTRlMywgMHhmZWIzZTc3OCwKKyAgICAweDc2NjhlNzBlLCAweGEyODI5NDk1LCAweDlmYmI3MWUzLCAweDRiNTEwMjc4LCAweGU1YzliYjBlLAorICAgIDB4MzEyM2M4OTUsIDB4MGMxYTJkZTMsIDB4ZDhmMDVlNzgsIDB4MWNhZDJjMGYsIDB4Yzg0NzVmOTQsCisgICAgMHhmNTdlYmFlMiwgMHgyMTk0Yzk3OSwgMHg4ZjBjNzAwZiwgMHg1YmU2MDM5NCwgMHg2NmRmZTZlMiwKKyAgICAweGIyMzU5NTc5LCAweDNhZWU5NTBmLCAweGVlMDRlNjk0LCAweGQzM2QwM2UyLCAweDA3ZDc3MDc5LAorICAgIDB4YTk0ZmM5MGYsIDB4N2RhNWJhOTQsIDB4NDA5YzVmZTIsIDB4OTQ3NjJjNzksIDB4YzgyN2JiMGMsCisgICAgMHgxY2NkYzg5NywgMHgyMWY0MmRlMSwgMHhmNTFlNWU3YSwgMHg1Yjg2ZTcwYywgMHg4ZjZjOTQ5NywKKyAgICAweGIyNTU3MWUxLCAweDY2YmYwMjdhLCAweGVlNjQwMjBjLCAweDNhOGU3MTk3LCAweDA3Yjc5NGUxLAorICAgIDB4ZDM1ZGU3N2EsIDB4N2RjNTVlMGMsIDB4YTkyZjJkOTcsIDB4OTQxNmM4ZTEsIDB4NDBmY2JiN2EsCisgICAgMHg4NGExYzkwZCwgMHg1MDRiYmE5NiwgMHg2ZDcyNWZlMCwgMHhiOTk4MmM3YiwgMHgxNzAwOTUwZCwKKyAgICAweGMzZWFlNjk2LCAweGZlZDMwM2UwLCAweDJhMzk3MDdiLCAweGEyZTI3MDBkLCAweDc2MDgwMzk2LAorICAgIDB4NGIzMWU2ZTAsIDB4OWZkYjk1N2IsIDB4MzE0MzJjMGQsIDB4ZTVhOTVmOTYsIDB4ZDg5MGJhZTAsCisgICAgMHgwYzdhYzk3Yn0sCisgICB7MHgwMDAwMDAwMCwgMHgyNzY1MjU4MSwgMHgwZmNjM2JkOSwgMHgyOGE5MWU1OCwgMHg1ZjllMDY2OSwKKyAgICAweDc4ZmIyM2U4LCAweDUwNTIzZGIwLCAweDc3MzcxODMxLCAweGJlM2MwZGQyLCAweDk5NTkyODUzLAorICAgIDB4YjFmMDM2MGIsIDB4OTY5NTEzOGEsIDB4ZTFhMjBiYmIsIDB4YzZjNzJlM2EsIDB4ZWU2ZTMwNjIsCisgICAgMHhjOTBiMTVlMywgMHgzZDdmNmI3ZiwgMHgxYTFhNGVmZSwgMHgzMmIzNTBhNiwgMHgxNWQ2NzUyNywKKyAgICAweDYyZTE2ZDE2LCAweDQ1ODQ0ODk3LCAweDZkMmQ1NmNmLCAweDRhNDg3MzRlLCAweDgzNDM2NmFkLAorICAgIDB4YTQyNjQzMmMsIDB4OGM4ZjVkNzQsIDB4YWJlYTc4ZjUsIDB4ZGNkZDYwYzQsIDB4ZmJiODQ1NDUsCisgICAgMHhkMzExNWIxZCwgMHhmNDc0N2U5YywgMHg3YWZlZDZmZSwgMHg1ZDliZjM3ZiwgMHg3NTMyZWQyNywKKyAgICAweDUyNTdjOGE2LCAweDI1NjBkMDk3LCAweDAyMDVmNTE2LCAweDJhYWNlYjRlLCAweDBkYzljZWNmLAorICAgIDB4YzRjMmRiMmMsIDB4ZTNhN2ZlYWQsIDB4Y2IwZWUwZjUsIDB4ZWM2YmM1NzQsIDB4OWI1Y2RkNDUsCisgICAgMHhiYzM5ZjhjNCwgMHg5NDkwZTY5YywgMHhiM2Y1YzMxZCwgMHg0NzgxYmQ4MSwgMHg2MGU0OTgwMCwKKyAgICAweDQ4NGQ4NjU4LCAweDZmMjhhM2Q5LCAweDE4MWZiYmU4LCAweDNmN2E5ZTY5LCAweDE3ZDM4MDMxLAorICAgIDB4MzBiNmE1YjAsIDB4ZjliZGIwNTMsIDB4ZGVkODk1ZDIsIDB4ZjY3MThiOGEsIDB4ZDExNGFlMGIsCisgICAgMHhhNjIzYjYzYSwgMHg4MTQ2OTNiYiwgMHhhOWVmOGRlMywgMHg4ZThhYTg2MiwgMHhiNWZhZGMyNiwKKyAgICAweDkyOWZmOWE3LCAweGJhMzZlN2ZmLCAweDlkNTNjMjdlLCAweGVhNjRkYTRmLCAweGNkMDFmZmNlLAorICAgIDB4ZTVhOGUxOTYsIDB4YzJjZGM0MTcsIDB4MGJjNmQxZjQsIDB4MmNhM2Y0NzUsIDB4MDQwYWVhMmQsCisgICAgMHgyMzZmY2ZhYywgMHg1NDU4ZDc5ZCwgMHg3MzNkZjIxYywgMHg1Yjk0ZWM0NCwgMHg3Y2YxYzljNSwKKyAgICAweDg4ODViNzU5LCAweGFmZTA5MmQ4LCAweDg3NDk4YzgwLCAweGEwMmNhOTAxLCAweGQ3MWJiMTMwLAorICAgIDB4ZjA3ZTk0YjEsIDB4ZDhkNzhhZTksIDB4ZmZiMmFmNjgsIDB4MzZiOWJhOGIsIDB4MTFkYzlmMGEsCisgICAgMHgzOTc1ODE1MiwgMHgxZTEwYTRkMywgMHg2OTI3YmNlMiwgMHg0ZTQyOTk2MywgMHg2NmViODczYiwKKyAgICAweDQxOGVhMmJhLCAweGNmMDQwYWQ4LCAweGU4NjEyZjU5LCAweGMwYzgzMTAxLCAweGU3YWQxNDgwLAorICAgIDB4OTA5YTBjYjEsIDB4YjdmZjI5MzAsIDB4OWY1NjM3NjgsIDB4YjgzMzEyZTksIDB4NzEzODA3MGEsCisgICAgMHg1NjVkMjI4YiwgMHg3ZWY0M2NkMywgMHg1OTkxMTk1MiwgMHgyZWE2MDE2MywgMHgwOWMzMjRlMiwKKyAgICAweDIxNmEzYWJhLCAweDA2MGYxZjNiLCAweGYyN2I2MWE3LCAweGQ1MWU0NDI2LCAweGZkYjc1YTdlLAorICAgIDB4ZGFkMjdmZmYsIDB4YWRlNTY3Y2UsIDB4OGE4MDQyNGYsIDB4YTIyOTVjMTcsIDB4ODU0Yzc5OTYsCisgICAgMHg0YzQ3NmM3NSwgMHg2YjIyNDlmNCwgMHg0MzhiNTdhYywgMHg2NGVlNzIyZCwgMHgxM2Q5NmExYywKKyAgICAweDM0YmM0ZjlkLCAweDFjMTU1MWM1LCAweDNiNzA3NDQ0LCAweDZhZjViOTRkLCAweDRkOTA5Y2NjLAorICAgIDB4NjUzOTgyOTQsIDB4NDI1Y2E3MTUsIDB4MzU2YmJmMjQsIDB4MTIwZTlhYTUsIDB4M2FhNzg0ZmQsCisgICAgMHgxZGMyYTE3YywgMHhkNGM5YjQ5ZiwgMHhmM2FjOTExZSwgMHhkYjA1OGY0NiwgMHhmYzYwYWFjNywKKyAgICAweDhiNTdiMmY2LCAweGFjMzI5Nzc3LCAweDg0OWI4OTJmLCAweGEzZmVhY2FlLCAweDU3OGFkMjMyLAorICAgIDB4NzBlZmY3YjMsIDB4NTg0NmU5ZWIsIDB4N2YyM2NjNmEsIDB4MDgxNGQ0NWIsIDB4MmY3MWYxZGEsCisgICAgMHgwN2Q4ZWY4MiwgMHgyMGJkY2EwMywgMHhlOWI2ZGZlMCwgMHhjZWQzZmE2MSwgMHhlNjdhZTQzOSwKKyAgICAweGMxMWZjMWI4LCAweGI2MjhkOTg5LCAweDkxNGRmYzA4LCAweGI5ZTRlMjUwLCAweDllODFjN2QxLAorICAgIDB4MTAwYjZmYjMsIDB4Mzc2ZTRhMzIsIDB4MWZjNzU0NmEsIDB4MzhhMjcxZWIsIDB4NGY5NTY5ZGEsCisgICAgMHg2OGYwNGM1YiwgMHg0MDU5NTIwMywgMHg2NzNjNzc4MiwgMHhhZTM3NjI2MSwgMHg4OTUyNDdlMCwKKyAgICAweGExZmI1OWI4LCAweDg2OWU3YzM5LCAweGYxYTk2NDA4LCAweGQ2Y2M0MTg5LCAweGZlNjU1ZmQxLAorICAgIDB4ZDkwMDdhNTAsIDB4MmQ3NDA0Y2MsIDB4MGExMTIxNGQsIDB4MjJiODNmMTUsIDB4MDVkZDFhOTQsCisgICAgMHg3MmVhMDJhNSwgMHg1NThmMjcyNCwgMHg3ZDI2Mzk3YywgMHg1YTQzMWNmZCwgMHg5MzQ4MDkxZSwKKyAgICAweGI0MmQyYzlmLCAweDljODQzMmM3LCAweGJiZTExNzQ2LCAweGNjZDYwZjc3LCAweGViYjMyYWY2LAorICAgIDB4YzMxYTM0YWUsIDB4ZTQ3ZjExMmYsIDB4ZGYwZjY1NmIsIDB4Zjg2YTQwZWEsIDB4ZDBjMzVlYjIsCisgICAgMHhmN2E2N2IzMywgMHg4MDkxNjMwMiwgMHhhN2Y0NDY4MywgMHg4ZjVkNThkYiwgMHhhODM4N2Q1YSwKKyAgICAweDYxMzM2OGI5LCAweDQ2NTY0ZDM4LCAweDZlZmY1MzYwLCAweDQ5OWE3NmUxLCAweDNlYWQ2ZWQwLAorICAgIDB4MTljODRiNTEsIDB4MzE2MTU1MDksIDB4MTYwNDcwODgsIDB4ZTI3MDBlMTQsIDB4YzUxNTJiOTUsCisgICAgMHhlZGJjMzVjZCwgMHhjYWQ5MTA0YywgMHhiZGVlMDg3ZCwgMHg5YThiMmRmYywgMHhiMjIyMzNhNCwKKyAgICAweDk1NDcxNjI1LCAweDVjNGMwM2M2LCAweDdiMjkyNjQ3LCAweDUzODAzODFmLCAweDc0ZTUxZDllLAorICAgIDB4MDNkMjA1YWYsIDB4MjRiNzIwMmUsIDB4MGMxZTNlNzYsIDB4MmI3YjFiZjcsIDB4YTVmMWIzOTUsCisgICAgMHg4Mjk0OTYxNCwgMHhhYTNkODg0YywgMHg4ZDU4YWRjZCwgMHhmYTZmYjVmYywgMHhkZDBhOTA3ZCwKKyAgICAweGY1YTM4ZTI1LCAweGQyYzZhYmE0LCAweDFiY2RiZTQ3LCAweDNjYTg5YmM2LCAweDE0MDE4NTllLAorICAgIDB4MzM2NGEwMWYsIDB4NDQ1M2I4MmUsIDB4NjMzNjlkYWYsIDB4NGI5ZjgzZjcsIDB4NmNmYWE2NzYsCisgICAgMHg5ODhlZDhlYSwgMHhiZmViZmQ2YiwgMHg5NzQyZTMzMywgMHhiMDI3YzZiMiwgMHhjNzEwZGU4MywKKyAgICAweGUwNzVmYjAyLCAweGM4ZGNlNTVhLCAweGVmYjljMGRiLCAweDI2YjJkNTM4LCAweDAxZDdmMGI5LAorICAgIDB4Mjk3ZWVlZTEsIDB4MGUxYmNiNjAsIDB4NzkyY2QzNTEsIDB4NWU0OWY2ZDAsIDB4NzZlMGU4ODgsCisgICAgMHg1MTg1Y2QwOX19OworCisjZW5kaWYKKworI2VuZGlmCisKKyNlbmRpZgorCitsb2NhbCBjb25zdCB6X2NyY190IEZBUiB4Mm5fdGFibGVbXSA9IHsKKyAgICAweDQwMDAwMDAwLCAweDIwMDAwMDAwLCAweDA4MDAwMDAwLCAweDAwODAwMDAwLCAweDAwMDA4MDAwLAorICAgIDB4ZWRiODgzMjAsIDB4YjFlNmIwOTIsIDB4YTA2YTI1MTcsIDB4ZWQ2MjdkYWUsIDB4ODhkMTQ0NjcsCisgICAgMHhkN2JiZmU2YSwgMHhlYzQ0N2YxMSwgMHg4ZTdlYTE3MCwgMHg2NDI3ODAwZSwgMHg0ZDQ3YmFlMCwKKyAgICAweDA5ZmU1NDhmLCAweDgzODUyZDBmLCAweDMwMzYyZjFhLCAweDdiNWE5Y2MzLCAweDMxZmVjMTY5LAorICAgIDB4OWZlYzAyMmEsIDB4NmM4ZGVkYzQsIDB4MTVkNjg3NGQsIDB4NWZkZTdhNGUsIDB4YmFkOTBlMzcsCisgICAgMHgyZTRlNWVlZiwgMHg0ZWFiYTIxNCwgMHhhOGE0NzJjMCwgMHg0MjlhOTY5ZSwgMHgxNDhkMzAyYSwKKyAgICAweGM0MGJhNmQwLCAweGM0ZTIyYzNjfTsKZGlmZiAtLWdpdCBhL3NyYy9kZWZsYXRlLmMgYi9zcmMvZGVmbGF0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5OWZiOTMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvZGVmbGF0ZS5jCkBAIC0wLDAgKzEsMjIxMSBAQAorLyogZGVmbGF0ZS5jIC0tIGNvbXByZXNzIGRhdGEgdXNpbmcgdGhlIGRlZmxhdGlvbiBhbGdvcml0aG0KKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIyIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIKKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKKyAqLworCisvKgorICogIEFMR09SSVRITQorICoKKyAqICAgICAgVGhlICJkZWZsYXRpb24iIHByb2Nlc3MgZGVwZW5kcyBvbiBiZWluZyBhYmxlIHRvIGlkZW50aWZ5IHBvcnRpb25zCisgKiAgICAgIG9mIHRoZSBpbnB1dCB0ZXh0IHdoaWNoIGFyZSBpZGVudGljYWwgdG8gZWFybGllciBpbnB1dCAod2l0aGluIGEKKyAqICAgICAgc2xpZGluZyB3aW5kb3cgdHJhaWxpbmcgYmVoaW5kIHRoZSBpbnB1dCBjdXJyZW50bHkgYmVpbmcgcHJvY2Vzc2VkKS4KKyAqCisgKiAgICAgIFRoZSBtb3N0IHN0cmFpZ2h0Zm9yd2FyZCB0ZWNobmlxdWUgdHVybnMgb3V0IHRvIGJlIHRoZSBmYXN0ZXN0IGZvcgorICogICAgICBtb3N0IGlucHV0IGZpbGVzOiB0cnkgYWxsIHBvc3NpYmxlIG1hdGNoZXMgYW5kIHNlbGVjdCB0aGUgbG9uZ2VzdC4KKyAqICAgICAgVGhlIGtleSBmZWF0dXJlIG9mIHRoaXMgYWxnb3JpdGhtIGlzIHRoYXQgaW5zZXJ0aW9ucyBpbnRvIHRoZSBzdHJpbmcKKyAqICAgICAgZGljdGlvbmFyeSBhcmUgdmVyeSBzaW1wbGUgYW5kIHRodXMgZmFzdCwgYW5kIGRlbGV0aW9ucyBhcmUgYXZvaWRlZAorICogICAgICBjb21wbGV0ZWx5LiBJbnNlcnRpb25zIGFyZSBwZXJmb3JtZWQgYXQgZWFjaCBpbnB1dCBjaGFyYWN0ZXIsIHdoZXJlYXMKKyAqICAgICAgc3RyaW5nIG1hdGNoZXMgYXJlIHBlcmZvcm1lZCBvbmx5IHdoZW4gdGhlIHByZXZpb3VzIG1hdGNoIGVuZHMuIFNvIGl0CisgKiAgICAgIGlzIHByZWZlcmFibGUgdG8gc3BlbmQgbW9yZSB0aW1lIGluIG1hdGNoZXMgdG8gYWxsb3cgdmVyeSBmYXN0IHN0cmluZworICogICAgICBpbnNlcnRpb25zIGFuZCBhdm9pZCBkZWxldGlvbnMuIFRoZSBtYXRjaGluZyBhbGdvcml0aG0gZm9yIHNtYWxsCisgKiAgICAgIHN0cmluZ3MgaXMgaW5zcGlyZWQgZnJvbSB0aGF0IG9mIFJhYmluICYgS2FycC4gQSBicnV0ZSBmb3JjZSBhcHByb2FjaAorICogICAgICBpcyB1c2VkIHRvIGZpbmQgbG9uZ2VyIHN0cmluZ3Mgd2hlbiBhIHNtYWxsIG1hdGNoIGhhcyBiZWVuIGZvdW5kLgorICogICAgICBBIHNpbWlsYXIgYWxnb3JpdGhtIGlzIHVzZWQgaW4gY29taWMgKGJ5IEphbi1NYXJrIFdhbXMpIGFuZCBmcmVlemUKKyAqICAgICAgKGJ5IExlb25pZCBCcm91a2hpcykuCisgKiAgICAgICAgIEEgcHJldmlvdXMgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdXNlZCBhIG1vcmUgc29waGlzdGljYXRlZCBhbGdvcml0aG0KKyAqICAgICAgKGJ5IEZpYWxhIGFuZCBHcmVlbmUpIHdoaWNoIGlzIGd1YXJhbnRlZWQgdG8gcnVuIGluIGxpbmVhciBhbW9ydGl6ZWQKKyAqICAgICAgdGltZSwgYnV0IGhhcyBhIGxhcmdlciBhdmVyYWdlIGNvc3QsIHVzZXMgbW9yZSBtZW1vcnkgYW5kIGlzIHBhdGVudGVkLgorICogICAgICBIb3dldmVyIHRoZSBGJkcgYWxnb3JpdGhtIG1heSBiZSBmYXN0ZXIgZm9yIHNvbWUgaGlnaGx5IHJlZHVuZGFudAorICogICAgICBmaWxlcyBpZiB0aGUgcGFyYW1ldGVyIG1heF9jaGFpbl9sZW5ndGggKGRlc2NyaWJlZCBiZWxvdykgaXMgdG9vIGxhcmdlLgorICoKKyAqICBBQ0tOT1dMRURHRU1FTlRTCisgKgorICogICAgICBUaGUgaWRlYSBvZiBsYXp5IGV2YWx1YXRpb24gb2YgbWF0Y2hlcyBpcyBkdWUgdG8gSmFuLU1hcmsgV2FtcywgYW5kCisgKiAgICAgIEkgZm91bmQgaXQgaW4gJ2ZyZWV6ZScgd3JpdHRlbiBieSBMZW9uaWQgQnJvdWtoaXMuCisgKiAgICAgIFRoYW5rcyB0byBtYW55IHBlb3BsZSBmb3IgYnVnIHJlcG9ydHMgYW5kIHRlc3RpbmcuCisgKgorICogIFJFRkVSRU5DRVMKKyAqCisgKiAgICAgIERldXRzY2gsIEwuUC4sIkRFRkxBVEUgQ29tcHJlc3NlZCBEYXRhIEZvcm1hdCBTcGVjaWZpY2F0aW9uIi4KKyAqICAgICAgQXZhaWxhYmxlIGluIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzE5NTEKKyAqCisgKiAgICAgIEEgZGVzY3JpcHRpb24gb2YgdGhlIFJhYmluIGFuZCBLYXJwIGFsZ29yaXRobSBpcyBnaXZlbiBpbiB0aGUgYm9vaworICogICAgICAgICAiQWxnb3JpdGhtcyIgYnkgUi4gU2VkZ2V3aWNrLCBBZGRpc29uLVdlc2xleSwgcDI1Mi4KKyAqCisgKiAgICAgIEZpYWxhLEUuUi4sIGFuZCBHcmVlbmUsRC5ILgorICogICAgICAgICBEYXRhIENvbXByZXNzaW9uIHdpdGggRmluaXRlIFdpbmRvd3MsIENvbW0uQUNNLCAzMiw0ICgxOTg5KSA0OTAtNTk1CisgKgorICovCisKKy8qIEAoIykgJElkJCAqLworCisjaW5jbHVkZSAiZGVmbGF0ZS5oIgorCitjb25zdCBjaGFyIGRlZmxhdGVfY29weXJpZ2h0W10gPQorICAgIiBkZWZsYXRlIDEuMi4xMiBDb3B5cmlnaHQgMTk5NS0yMDIyIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIgIjsKKy8qCisgIElmIHlvdSB1c2UgdGhlIHpsaWIgbGlicmFyeSBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGlzIHdlbGNvbWUKKyAgaW4gdGhlIGRvY3VtZW50YXRpb24gb2YgeW91ciBwcm9kdWN0LiBJZiBmb3Igc29tZSByZWFzb24geW91IGNhbm5vdAorICBpbmNsdWRlIHN1Y2ggYW4gYWNrbm93bGVkZ21lbnQsIEkgd291bGQgYXBwcmVjaWF0ZSB0aGF0IHlvdSBrZWVwIHRoaXMKKyAgY29weXJpZ2h0IHN0cmluZyBpbiB0aGUgZXhlY3V0YWJsZSBvZiB5b3VyIHByb2R1Y3QuCisgKi8KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgRnVuY3Rpb24gcHJvdG90eXBlcy4KKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICBuZWVkX21vcmUsICAgICAgLyogYmxvY2sgbm90IGNvbXBsZXRlZCwgbmVlZCBtb3JlIGlucHV0IG9yIG1vcmUgb3V0cHV0ICovCisgICAgYmxvY2tfZG9uZSwgICAgIC8qIGJsb2NrIGZsdXNoIHBlcmZvcm1lZCAqLworICAgIGZpbmlzaF9zdGFydGVkLCAvKiBmaW5pc2ggc3RhcnRlZCwgbmVlZCBvbmx5IG1vcmUgb3V0cHV0IGF0IG5leHQgZGVmbGF0ZSAqLworICAgIGZpbmlzaF9kb25lICAgICAvKiBmaW5pc2ggZG9uZSwgYWNjZXB0IG5vIG1vcmUgaW5wdXQgb3Igb3V0cHV0ICovCit9IGJsb2NrX3N0YXRlOworCit0eXBlZGVmIGJsb2NrX3N0YXRlICgqY29tcHJlc3NfZnVuYykgT0YoKGRlZmxhdGVfc3RhdGUgKnMsIGludCBmbHVzaCkpOworLyogQ29tcHJlc3Npb24gZnVuY3Rpb24uIFJldHVybnMgdGhlIGJsb2NrIHN0YXRlIGFmdGVyIHRoZSBjYWxsLiAqLworCitsb2NhbCBpbnQgZGVmbGF0ZVN0YXRlQ2hlY2sgICAgICBPRigoel9zdHJlYW1wIHN0cm0pKTsKK2xvY2FsIHZvaWQgc2xpZGVfaGFzaCAgICAgT0YoKGRlZmxhdGVfc3RhdGUgKnMpKTsKK2xvY2FsIHZvaWQgZmlsbF93aW5kb3cgICAgT0YoKGRlZmxhdGVfc3RhdGUgKnMpKTsKK2xvY2FsIGJsb2NrX3N0YXRlIGRlZmxhdGVfc3RvcmVkIE9GKChkZWZsYXRlX3N0YXRlICpzLCBpbnQgZmx1c2gpKTsKK2xvY2FsIGJsb2NrX3N0YXRlIGRlZmxhdGVfZmFzdCAgIE9GKChkZWZsYXRlX3N0YXRlICpzLCBpbnQgZmx1c2gpKTsKKyNpZm5kZWYgRkFTVEVTVAorbG9jYWwgYmxvY2tfc3RhdGUgZGVmbGF0ZV9zbG93ICAgT0YoKGRlZmxhdGVfc3RhdGUgKnMsIGludCBmbHVzaCkpOworI2VuZGlmCitsb2NhbCBibG9ja19zdGF0ZSBkZWZsYXRlX3JsZSAgICBPRigoZGVmbGF0ZV9zdGF0ZSAqcywgaW50IGZsdXNoKSk7Citsb2NhbCBibG9ja19zdGF0ZSBkZWZsYXRlX2h1ZmYgICBPRigoZGVmbGF0ZV9zdGF0ZSAqcywgaW50IGZsdXNoKSk7Citsb2NhbCB2b2lkIGxtX2luaXQgICAgICAgIE9GKChkZWZsYXRlX3N0YXRlICpzKSk7Citsb2NhbCB2b2lkIHB1dFNob3J0TVNCICAgIE9GKChkZWZsYXRlX3N0YXRlICpzLCB1SW50IGIpKTsKK2xvY2FsIHZvaWQgZmx1c2hfcGVuZGluZyAgT0YoKHpfc3RyZWFtcCBzdHJtKSk7Citsb2NhbCB1bnNpZ25lZCByZWFkX2J1ZiAgIE9GKCh6X3N0cmVhbXAgc3RybSwgQnl0ZWYgKmJ1ZiwgdW5zaWduZWQgc2l6ZSkpOworI2lmZGVmIEFTTVYKKyMgIHByYWdtYSBtZXNzYWdlKCJBc3NlbWJsZXIgY29kZSBtYXkgaGF2ZSBidWdzIC0tIHVzZSBhdCB5b3VyIG93biByaXNrIikKKyAgICAgIHZvaWQgbWF0Y2hfaW5pdCBPRigodm9pZCkpOyAvKiBhc20gY29kZSBpbml0aWFsaXphdGlvbiAqLworICAgICAgdUludCBsb25nZXN0X21hdGNoICBPRigoZGVmbGF0ZV9zdGF0ZSAqcywgSVBvcyBjdXJfbWF0Y2gpKTsKKyNlbHNlCitsb2NhbCB1SW50IGxvbmdlc3RfbWF0Y2ggIE9GKChkZWZsYXRlX3N0YXRlICpzLCBJUG9zIGN1cl9tYXRjaCkpOworI2VuZGlmCisKKyNpZmRlZiBaTElCX0RFQlVHCitsb2NhbCAgdm9pZCBjaGVja19tYXRjaCBPRigoZGVmbGF0ZV9zdGF0ZSAqcywgSVBvcyBzdGFydCwgSVBvcyBtYXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuZ3RoKSk7CisjZW5kaWYKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBMb2NhbCBkYXRhCisgKi8KKworI2RlZmluZSBOSUwgMAorLyogVGFpbCBvZiBoYXNoIGNoYWlucyAqLworCisjaWZuZGVmIFRPT19GQVIKKyMgIGRlZmluZSBUT09fRkFSIDQwOTYKKyNlbmRpZgorLyogTWF0Y2hlcyBvZiBsZW5ndGggMyBhcmUgZGlzY2FyZGVkIGlmIHRoZWlyIGRpc3RhbmNlIGV4Y2VlZHMgVE9PX0ZBUiAqLworCisvKiBWYWx1ZXMgZm9yIG1heF9sYXp5X21hdGNoLCBnb29kX21hdGNoIGFuZCBtYXhfY2hhaW5fbGVuZ3RoLCBkZXBlbmRpbmcgb24KKyAqIHRoZSBkZXNpcmVkIHBhY2sgbGV2ZWwgKDAuLjkpLiBUaGUgdmFsdWVzIGdpdmVuIGJlbG93IGhhdmUgYmVlbiB0dW5lZCB0bworICogZXhjbHVkZSB3b3JzdCBjYXNlIHBlcmZvcm1hbmNlIGZvciBwYXRob2xvZ2ljYWwgZmlsZXMuIEJldHRlciB2YWx1ZXMgbWF5IGJlCisgKiBmb3VuZCBmb3Igc3BlY2lmaWMgZmlsZXMuCisgKi8KK3R5cGVkZWYgc3RydWN0IGNvbmZpZ19zIHsKKyAgIHVzaCBnb29kX2xlbmd0aDsgLyogcmVkdWNlIGxhenkgc2VhcmNoIGFib3ZlIHRoaXMgbWF0Y2ggbGVuZ3RoICovCisgICB1c2ggbWF4X2xhenk7ICAgIC8qIGRvIG5vdCBwZXJmb3JtIGxhenkgc2VhcmNoIGFib3ZlIHRoaXMgbWF0Y2ggbGVuZ3RoICovCisgICB1c2ggbmljZV9sZW5ndGg7IC8qIHF1aXQgc2VhcmNoIGFib3ZlIHRoaXMgbWF0Y2ggbGVuZ3RoICovCisgICB1c2ggbWF4X2NoYWluOworICAgY29tcHJlc3NfZnVuYyBmdW5jOworfSBjb25maWc7CisKKyNpZmRlZiBGQVNURVNUCitsb2NhbCBjb25zdCBjb25maWcgY29uZmlndXJhdGlvbl90YWJsZVsyXSA9IHsKKy8qICAgICAgZ29vZCBsYXp5IG5pY2UgY2hhaW4gKi8KKy8qIDAgKi8gezAsICAgIDAsICAwLCAgICAwLCBkZWZsYXRlX3N0b3JlZH0sICAvKiBzdG9yZSBvbmx5ICovCisvKiAxICovIHs0LCAgICA0LCAgOCwgICAgNCwgZGVmbGF0ZV9mYXN0fX07IC8qIG1heCBzcGVlZCwgbm8gbGF6eSBtYXRjaGVzICovCisjZWxzZQorbG9jYWwgY29uc3QgY29uZmlnIGNvbmZpZ3VyYXRpb25fdGFibGVbMTBdID0geworLyogICAgICBnb29kIGxhenkgbmljZSBjaGFpbiAqLworLyogMCAqLyB7MCwgICAgMCwgIDAsICAgIDAsIGRlZmxhdGVfc3RvcmVkfSwgIC8qIHN0b3JlIG9ubHkgKi8KKy8qIDEgKi8gezQsICAgIDQsICA4LCAgICA0LCBkZWZsYXRlX2Zhc3R9LCAvKiBtYXggc3BlZWQsIG5vIGxhenkgbWF0Y2hlcyAqLworLyogMiAqLyB7NCwgICAgNSwgMTYsICAgIDgsIGRlZmxhdGVfZmFzdH0sCisvKiAzICovIHs0LCAgICA2LCAzMiwgICAzMiwgZGVmbGF0ZV9mYXN0fSwKKworLyogNCAqLyB7NCwgICAgNCwgMTYsICAgMTYsIGRlZmxhdGVfc2xvd30sICAvKiBsYXp5IG1hdGNoZXMgKi8KKy8qIDUgKi8gezgsICAgMTYsIDMyLCAgIDMyLCBkZWZsYXRlX3Nsb3d9LAorLyogNiAqLyB7OCwgICAxNiwgMTI4LCAxMjgsIGRlZmxhdGVfc2xvd30sCisvKiA3ICovIHs4LCAgIDMyLCAxMjgsIDI1NiwgZGVmbGF0ZV9zbG93fSwKKy8qIDggKi8gezMyLCAxMjgsIDI1OCwgMTAyNCwgZGVmbGF0ZV9zbG93fSwKKy8qIDkgKi8gezMyLCAyNTgsIDI1OCwgNDA5NiwgZGVmbGF0ZV9zbG93fX07IC8qIG1heCBjb21wcmVzc2lvbiAqLworI2VuZGlmCisKKy8qIE5vdGU6IHRoZSBkZWZsYXRlKCkgY29kZSByZXF1aXJlcyBtYXhfbGF6eSA+PSBNSU5fTUFUQ0ggYW5kIG1heF9jaGFpbiA+PSA0CisgKiBGb3IgZGVmbGF0ZV9mYXN0KCkgKGxldmVscyA8PSAzKSBnb29kIGlzIGlnbm9yZWQgYW5kIGxhenkgaGFzIGEgZGlmZmVyZW50CisgKiBtZWFuaW5nLgorICovCisKKy8qIHJhbmsgWl9CTE9DSyBiZXR3ZWVuIFpfTk9fRkxVU0ggYW5kIFpfUEFSVElBTF9GTFVTSCAqLworI2RlZmluZSBSQU5LKGYpICgoKGYpICogMikgLSAoKGYpID4gNCA/IDkgOiAwKSkKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBVcGRhdGUgYSBoYXNoIHZhbHVlIHdpdGggdGhlIGdpdmVuIGlucHV0IGJ5dGUKKyAqIElOICBhc3NlcnRpb246IGFsbCBjYWxscyB0byBVUERBVEVfSEFTSCBhcmUgbWFkZSB3aXRoIGNvbnNlY3V0aXZlIGlucHV0CisgKiAgICBjaGFyYWN0ZXJzLCBzbyB0aGF0IGEgcnVubmluZyBoYXNoIGtleSBjYW4gYmUgY29tcHV0ZWQgZnJvbSB0aGUgcHJldmlvdXMKKyAqICAgIGtleSBpbnN0ZWFkIG9mIGNvbXBsZXRlIHJlY2FsY3VsYXRpb24gZWFjaCB0aW1lLgorICovCisjZGVmaW5lIFVQREFURV9IQVNIKHMsaCxjKSAoaCA9ICgoKGgpPDxzLT5oYXNoX3NoaWZ0KSBeIChjKSkgJiBzLT5oYXNoX21hc2spCisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBJbnNlcnQgc3RyaW5nIHN0ciBpbiB0aGUgZGljdGlvbmFyeSBhbmQgc2V0IG1hdGNoX2hlYWQgdG8gdGhlIHByZXZpb3VzIGhlYWQKKyAqIG9mIHRoZSBoYXNoIGNoYWluICh0aGUgbW9zdCByZWNlbnQgc3RyaW5nIHdpdGggc2FtZSBoYXNoIGtleSkuIFJldHVybgorICogdGhlIHByZXZpb3VzIGxlbmd0aCBvZiB0aGUgaGFzaCBjaGFpbi4KKyAqIElmIHRoaXMgZmlsZSBpcyBjb21waWxlZCB3aXRoIC1ERkFTVEVTVCwgdGhlIGNvbXByZXNzaW9uIGxldmVsIGlzIGZvcmNlZAorICogdG8gMSwgYW5kIG5vIGhhc2ggY2hhaW5zIGFyZSBtYWludGFpbmVkLgorICogSU4gIGFzc2VydGlvbjogYWxsIGNhbGxzIHRvIElOU0VSVF9TVFJJTkcgYXJlIG1hZGUgd2l0aCBjb25zZWN1dGl2ZSBpbnB1dAorICogICAgY2hhcmFjdGVycyBhbmQgdGhlIGZpcnN0IE1JTl9NQVRDSCBieXRlcyBvZiBzdHIgYXJlIHZhbGlkIChleGNlcHQgZm9yCisgKiAgICB0aGUgbGFzdCBNSU5fTUFUQ0gtMSBieXRlcyBvZiB0aGUgaW5wdXQgZmlsZSkuCisgKi8KKyNpZmRlZiBGQVNURVNUCisjZGVmaW5lIElOU0VSVF9TVFJJTkcocywgc3RyLCBtYXRjaF9oZWFkKSBcCisgICAoVVBEQVRFX0hBU0gocywgcy0+aW5zX2gsIHMtPndpbmRvd1soc3RyKSArIChNSU5fTUFUQ0gtMSldKSwgXAorICAgIG1hdGNoX2hlYWQgPSBzLT5oZWFkW3MtPmluc19oXSwgXAorICAgIHMtPmhlYWRbcy0+aW5zX2hdID0gKFBvcykoc3RyKSkKKyNlbHNlCisjZGVmaW5lIElOU0VSVF9TVFJJTkcocywgc3RyLCBtYXRjaF9oZWFkKSBcCisgICAoVVBEQVRFX0hBU0gocywgcy0+aW5zX2gsIHMtPndpbmRvd1soc3RyKSArIChNSU5fTUFUQ0gtMSldKSwgXAorICAgIG1hdGNoX2hlYWQgPSBzLT5wcmV2WyhzdHIpICYgcy0+d19tYXNrXSA9IHMtPmhlYWRbcy0+aW5zX2hdLCBcCisgICAgcy0+aGVhZFtzLT5pbnNfaF0gPSAoUG9zKShzdHIpKQorI2VuZGlmCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogSW5pdGlhbGl6ZSB0aGUgaGFzaCB0YWJsZSAoYXZvaWRpbmcgNjRLIG92ZXJmbG93IGZvciAxNiBiaXQgc3lzdGVtcykuCisgKiBwcmV2W10gd2lsbCBiZSBpbml0aWFsaXplZCBvbiB0aGUgZmx5LgorICovCisjZGVmaW5lIENMRUFSX0hBU0gocykgXAorICAgIGRvIHsgXAorICAgICAgICBzLT5oZWFkW3MtPmhhc2hfc2l6ZS0xXSA9IE5JTDsgXAorICAgICAgICB6bWVtemVybygoQnl0ZWYgKilzLT5oZWFkLCBcCisgICAgICAgICAgICAgICAgICh1bnNpZ25lZCkocy0+aGFzaF9zaXplLTEpKnNpemVvZigqcy0+aGVhZCkpOyBcCisgICAgfSB3aGlsZSAoMCkKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBTbGlkZSB0aGUgaGFzaCB0YWJsZSB3aGVuIHNsaWRpbmcgdGhlIHdpbmRvdyBkb3duIChjb3VsZCBiZSBhdm9pZGVkIHdpdGggMzIKKyAqIGJpdCB2YWx1ZXMgYXQgdGhlIGV4cGVuc2Ugb2YgbWVtb3J5IHVzYWdlKS4gV2Ugc2xpZGUgZXZlbiB3aGVuIGxldmVsID09IDAgdG8KKyAqIGtlZXAgdGhlIGhhc2ggdGFibGUgY29uc2lzdGVudCBpZiB3ZSBzd2l0Y2ggYmFjayB0byBsZXZlbCA+IDAgbGF0ZXIuCisgKi8KK2xvY2FsIHZvaWQgc2xpZGVfaGFzaChzKQorICAgIGRlZmxhdGVfc3RhdGUgKnM7Cit7CisgICAgdW5zaWduZWQgbiwgbTsKKyAgICBQb3NmICpwOworICAgIHVJbnQgd3NpemUgPSBzLT53X3NpemU7CisKKyAgICBuID0gcy0+aGFzaF9zaXplOworICAgIHAgPSAmcy0+aGVhZFtuXTsKKyAgICBkbyB7CisgICAgICAgIG0gPSAqLS1wOworICAgICAgICAqcCA9IChQb3MpKG0gPj0gd3NpemUgPyBtIC0gd3NpemUgOiBOSUwpOworICAgIH0gd2hpbGUgKC0tbik7CisgICAgbiA9IHdzaXplOworI2lmbmRlZiBGQVNURVNUCisgICAgcCA9ICZzLT5wcmV2W25dOworICAgIGRvIHsKKyAgICAgICAgbSA9ICotLXA7CisgICAgICAgICpwID0gKFBvcykobSA+PSB3c2l6ZSA/IG0gLSB3c2l6ZSA6IE5JTCk7CisgICAgICAgIC8qIElmIG4gaXMgbm90IG9uIGFueSBoYXNoIGNoYWluLCBwcmV2W25dIGlzIGdhcmJhZ2UgYnV0CisgICAgICAgICAqIGl0cyB2YWx1ZSB3aWxsIG5ldmVyIGJlIHVzZWQuCisgICAgICAgICAqLworICAgIH0gd2hpbGUgKC0tbik7CisjZW5kaWYKK30KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworaW50IFpFWFBPUlQgZGVmbGF0ZUluaXRfKHN0cm0sIGxldmVsLCB2ZXJzaW9uLCBzdHJlYW1fc2l6ZSkKKyAgICB6X3N0cmVhbXAgc3RybTsKKyAgICBpbnQgbGV2ZWw7CisgICAgY29uc3QgY2hhciAqdmVyc2lvbjsKKyAgICBpbnQgc3RyZWFtX3NpemU7Cit7CisgICAgcmV0dXJuIGRlZmxhdGVJbml0Ml8oc3RybSwgbGV2ZWwsIFpfREVGTEFURUQsIE1BWF9XQklUUywgREVGX01FTV9MRVZFTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBaX0RFRkFVTFRfU1RSQVRFR1ksIHZlcnNpb24sIHN0cmVhbV9zaXplKTsKKyAgICAvKiBUbyBkbzogaWdub3JlIHN0cm0tPm5leHRfaW4gaWYgd2UgdXNlIGl0IGFzIHdpbmRvdyAqLworfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCitpbnQgWkVYUE9SVCBkZWZsYXRlSW5pdDJfKHN0cm0sIGxldmVsLCBtZXRob2QsIHdpbmRvd0JpdHMsIG1lbUxldmVsLCBzdHJhdGVneSwKKyAgICAgICAgICAgICAgICAgIHZlcnNpb24sIHN0cmVhbV9zaXplKQorICAgIHpfc3RyZWFtcCBzdHJtOworICAgIGludCAgbGV2ZWw7CisgICAgaW50ICBtZXRob2Q7CisgICAgaW50ICB3aW5kb3dCaXRzOworICAgIGludCAgbWVtTGV2ZWw7CisgICAgaW50ICBzdHJhdGVneTsKKyAgICBjb25zdCBjaGFyICp2ZXJzaW9uOworICAgIGludCBzdHJlYW1fc2l6ZTsKK3sKKyAgICBkZWZsYXRlX3N0YXRlICpzOworICAgIGludCB3cmFwID0gMTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciBteV92ZXJzaW9uW10gPSBaTElCX1ZFUlNJT047CisKKyAgICBpZiAodmVyc2lvbiA9PSBaX05VTEwgfHwgdmVyc2lvblswXSAhPSBteV92ZXJzaW9uWzBdIHx8CisgICAgICAgIHN0cmVhbV9zaXplICE9IHNpemVvZih6X3N0cmVhbSkpIHsKKyAgICAgICAgcmV0dXJuIFpfVkVSU0lPTl9FUlJPUjsKKyAgICB9CisgICAgaWYgKHN0cm0gPT0gWl9OVUxMKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisKKyAgICBzdHJtLT5tc2cgPSBaX05VTEw7CisgICAgaWYgKHN0cm0tPnphbGxvYyA9PSAoYWxsb2NfZnVuYykwKSB7CisjaWZkZWYgWl9TT0xPCisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyNlbHNlCisgICAgICAgIHN0cm0tPnphbGxvYyA9IHpjYWxsb2M7CisgICAgICAgIHN0cm0tPm9wYXF1ZSA9ICh2b2lkcGYpMDsKKyNlbmRpZgorICAgIH0KKyAgICBpZiAoc3RybS0+emZyZWUgPT0gKGZyZWVfZnVuYykwKQorI2lmZGVmIFpfU09MTworICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisjZWxzZQorICAgICAgICBzdHJtLT56ZnJlZSA9IHpjZnJlZTsKKyNlbmRpZgorCisjaWZkZWYgRkFTVEVTVAorICAgIGlmIChsZXZlbCAhPSAwKSBsZXZlbCA9IDE7CisjZWxzZQorICAgIGlmIChsZXZlbCA9PSBaX0RFRkFVTFRfQ09NUFJFU1NJT04pIGxldmVsID0gNjsKKyNlbmRpZgorCisgICAgaWYgKHdpbmRvd0JpdHMgPCAwKSB7IC8qIHN1cHByZXNzIHpsaWIgd3JhcHBlciAqLworICAgICAgICB3cmFwID0gMDsKKyAgICAgICAgd2luZG93Qml0cyA9IC13aW5kb3dCaXRzOworICAgIH0KKyNpZmRlZiBHWklQCisgICAgZWxzZSBpZiAod2luZG93Qml0cyA+IDE1KSB7CisgICAgICAgIHdyYXAgPSAyOyAgICAgICAvKiB3cml0ZSBnemlwIHdyYXBwZXIgaW5zdGVhZCAqLworICAgICAgICB3aW5kb3dCaXRzIC09IDE2OworICAgIH0KKyNlbmRpZgorICAgIGlmIChtZW1MZXZlbCA8IDEgfHwgbWVtTGV2ZWwgPiBNQVhfTUVNX0xFVkVMIHx8IG1ldGhvZCAhPSBaX0RFRkxBVEVEIHx8CisgICAgICAgIHdpbmRvd0JpdHMgPCA4IHx8IHdpbmRvd0JpdHMgPiAxNSB8fCBsZXZlbCA8IDAgfHwgbGV2ZWwgPiA5IHx8CisgICAgICAgIHN0cmF0ZWd5IDwgMCB8fCBzdHJhdGVneSA+IFpfRklYRUQgfHwgKHdpbmRvd0JpdHMgPT0gOCAmJiB3cmFwICE9IDEpKSB7CisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyAgICB9CisgICAgaWYgKHdpbmRvd0JpdHMgPT0gOCkgd2luZG93Qml0cyA9IDk7ICAvKiB1bnRpbCAyNTYtYnl0ZSB3aW5kb3cgYnVnIGZpeGVkICovCisgICAgcyA9IChkZWZsYXRlX3N0YXRlICopIFpBTExPQyhzdHJtLCAxLCBzaXplb2YoZGVmbGF0ZV9zdGF0ZSkpOworICAgIGlmIChzID09IFpfTlVMTCkgcmV0dXJuIFpfTUVNX0VSUk9SOworICAgIHN0cm0tPnN0YXRlID0gKHN0cnVjdCBpbnRlcm5hbF9zdGF0ZSBGQVIgKilzOworICAgIHMtPnN0cm0gPSBzdHJtOworICAgIHMtPnN0YXR1cyA9IElOSVRfU1RBVEU7ICAgICAvKiB0byBwYXNzIHN0YXRlIHRlc3QgaW4gZGVmbGF0ZVJlc2V0KCkgKi8KKworICAgIHMtPndyYXAgPSB3cmFwOworICAgIHMtPmd6aGVhZCA9IFpfTlVMTDsKKyAgICBzLT53X2JpdHMgPSAodUludCl3aW5kb3dCaXRzOworICAgIHMtPndfc2l6ZSA9IDEgPDwgcy0+d19iaXRzOworICAgIHMtPndfbWFzayA9IHMtPndfc2l6ZSAtIDE7CisKKyAgICBzLT5oYXNoX2JpdHMgPSAodUludCltZW1MZXZlbCArIDc7CisgICAgcy0+aGFzaF9zaXplID0gMSA8PCBzLT5oYXNoX2JpdHM7CisgICAgcy0+aGFzaF9tYXNrID0gcy0+aGFzaF9zaXplIC0gMTsKKyAgICBzLT5oYXNoX3NoaWZ0ID0gICgocy0+aGFzaF9iaXRzK01JTl9NQVRDSC0xKS9NSU5fTUFUQ0gpOworCisgICAgcy0+d2luZG93ID0gKEJ5dGVmICopIFpBTExPQyhzdHJtLCBzLT53X3NpemUsIDIqc2l6ZW9mKEJ5dGUpKTsKKyAgICBzLT5wcmV2ICAgPSAoUG9zZiAqKSAgWkFMTE9DKHN0cm0sIHMtPndfc2l6ZSwgc2l6ZW9mKFBvcykpOworICAgIHMtPmhlYWQgICA9IChQb3NmICopICBaQUxMT0Moc3RybSwgcy0+aGFzaF9zaXplLCBzaXplb2YoUG9zKSk7CisKKyAgICBzLT5oaWdoX3dhdGVyID0gMDsgICAgICAvKiBub3RoaW5nIHdyaXR0ZW4gdG8gcy0+d2luZG93IHlldCAqLworCisgICAgcy0+bGl0X2J1ZnNpemUgPSAxIDw8IChtZW1MZXZlbCArIDYpOyAvKiAxNksgZWxlbWVudHMgYnkgZGVmYXVsdCAqLworCisgICAgLyogV2Ugb3ZlcmxheSBwZW5kaW5nX2J1ZiBhbmQgc3ltX2J1Zi4gVGhpcyB3b3JrcyBzaW5jZSB0aGUgYXZlcmFnZSBzaXplCisgICAgICogZm9yIGxlbmd0aC9kaXN0YW5jZSBwYWlycyBvdmVyIGFueSBjb21wcmVzc2VkIGJsb2NrIGlzIGFzc3VyZWQgdG8gYmUgMzEKKyAgICAgKiBiaXRzIG9yIGxlc3MuCisgICAgICoKKyAgICAgKiBBbmFseXNpczogVGhlIGxvbmdlc3QgZml4ZWQgY29kZXMgYXJlIGEgbGVuZ3RoIGNvZGUgb2YgOCBiaXRzIHBsdXMgNQorICAgICAqIGV4dHJhIGJpdHMsIGZvciBsZW5ndGhzIDEzMSB0byAyNTcuIFRoZSBsb25nZXN0IGZpeGVkIGRpc3RhbmNlIGNvZGVzIGFyZQorICAgICAqIDUgYml0cyBwbHVzIDEzIGV4dHJhIGJpdHMsIGZvciBkaXN0YW5jZXMgMTYzODUgdG8gMzI3NjguIFRoZSBsb25nZXN0CisgICAgICogcG9zc2libGUgZml4ZWQtY29kZXMgbGVuZ3RoL2Rpc3RhbmNlIHBhaXIgaXMgdGhlbiAzMSBiaXRzIHRvdGFsLgorICAgICAqCisgICAgICogc3ltX2J1ZiBzdGFydHMgb25lLWZvdXJ0aCBvZiB0aGUgd2F5IGludG8gcGVuZGluZ19idWYuIFNvIHRoZXJlIGFyZQorICAgICAqIHRocmVlIGJ5dGVzIGluIHN5bV9idWYgZm9yIGV2ZXJ5IGZvdXIgYnl0ZXMgaW4gcGVuZGluZ19idWYuIEVhY2ggc3ltYm9sCisgICAgICogaW4gc3ltX2J1ZiBpcyB0aHJlZSBieXRlcyAtLSB0d28gZm9yIHRoZSBkaXN0YW5jZSBhbmQgb25lIGZvciB0aGUKKyAgICAgKiBsaXRlcmFsL2xlbmd0aC4gQXMgZWFjaCBzeW1ib2wgaXMgY29uc3VtZWQsIHRoZSBwb2ludGVyIHRvIHRoZSBuZXh0CisgICAgICogc3ltX2J1ZiB2YWx1ZSB0byByZWFkIG1vdmVzIGZvcndhcmQgdGhyZWUgYnl0ZXMuIEZyb20gdGhhdCBzeW1ib2wsIHVwIHRvCisgICAgICogMzEgYml0cyBhcmUgd3JpdHRlbiB0byBwZW5kaW5nX2J1Zi4gVGhlIGNsb3Nlc3QgdGhlIHdyaXR0ZW4gcGVuZGluZ19idWYKKyAgICAgKiBiaXRzIGdldHMgdG8gdGhlIG5leHQgc3ltX2J1ZiBzeW1ib2wgdG8gcmVhZCBpcyBqdXN0IGJlZm9yZSB0aGUgbGFzdAorICAgICAqIGNvZGUgaXMgd3JpdHRlbi4gQXQgdGhhdCB0aW1lLCAzMSoobi0yKSBiaXRzIGhhdmUgYmVlbiB3cml0dGVuLCBqdXN0CisgICAgICogYWZ0ZXIgMjQqKG4tMikgYml0cyBoYXZlIGJlZW4gY29uc3VtZWQgZnJvbSBzeW1fYnVmLiBzeW1fYnVmIHN0YXJ0cyBhdAorICAgICAqIDgqbiBiaXRzIGludG8gcGVuZGluZ19idWYuIChOb3RlIHRoYXQgdGhlIHN5bWJvbCBidWZmZXIgZmlsbHMgd2hlbiBuLTEKKyAgICAgKiBzeW1ib2xzIGFyZSB3cml0dGVuLikgVGhlIGNsb3Nlc3QgdGhlIHdyaXRpbmcgZ2V0cyB0byB3aGF0IGlzIHVucmVhZCBpcworICAgICAqIHRoZW4gbisxNCBiaXRzLiBIZXJlIG4gaXMgbGl0X2J1ZnNpemUsIHdoaWNoIGlzIDE2Mzg0IGJ5IGRlZmF1bHQsIGFuZAorICAgICAqIGNhbiByYW5nZSBmcm9tIDEyOCB0byAzMjc2OC4KKyAgICAgKgorICAgICAqIFRoZXJlZm9yZSwgYXQgYSBtaW5pbXVtLCB0aGVyZSBhcmUgMTQyIGJpdHMgb2Ygc3BhY2UgYmV0d2VlbiB3aGF0IGlzCisgICAgICogd3JpdHRlbiBhbmQgd2hhdCBpcyByZWFkIGluIHRoZSBvdmVybGFpbiBidWZmZXJzLCBzbyB0aGUgc3ltYm9scyBjYW5ub3QKKyAgICAgKiBiZSBvdmVyd3JpdHRlbiBieSB0aGUgY29tcHJlc3NlZCBkYXRhLiBUaGF0IHNwYWNlIGlzIGFjdHVhbGx5IDEzOSBiaXRzLAorICAgICAqIGR1ZSB0byB0aGUgdGhyZWUtYml0IGZpeGVkLWNvZGUgYmxvY2sgaGVhZGVyLgorICAgICAqCisgICAgICogVGhhdCBjb3ZlcnMgdGhlIGNhc2Ugd2hlcmUgZWl0aGVyIFpfRklYRUQgaXMgc3BlY2lmaWVkLCBmb3JjaW5nIGZpeGVkCisgICAgICogY29kZXMsIG9yIHdoZW4gdGhlIHVzZSBvZiBmaXhlZCBjb2RlcyBpcyBjaG9zZW4sIGJlY2F1c2UgdGhhdCBjaG9pY2UKKyAgICAgKiByZXN1bHRzIGluIGEgc21hbGxlciBjb21wcmVzc2VkIGJsb2NrIHRoYW4gZHluYW1pYyBjb2Rlcy4gVGhhdCBsYXR0ZXIKKyAgICAgKiBjb25kaXRpb24gdGhlbiBhc3N1cmVzIHRoYXQgdGhlIGFib3ZlIGFuYWx5c2lzIGFsc28gY292ZXJzIGFsbCBkeW5hbWljCisgICAgICogYmxvY2tzLiBBIGR5bmFtaWMtY29kZSBibG9jayB3aWxsIG9ubHkgYmUgY2hvc2VuIHRvIGJlIGVtaXR0ZWQgaWYgaXQgaGFzCisgICAgICogZmV3ZXIgYml0cyB0aGFuIGEgZml4ZWQtY29kZSBibG9jayB3b3VsZCBmb3IgdGhlIHNhbWUgc2V0IG9mIHN5bWJvbHMuCisgICAgICogVGhlcmVmb3JlIGl0cyBhdmVyYWdlIHN5bWJvbCBsZW5ndGggaXMgYXNzdXJlZCB0byBiZSBsZXNzIHRoYW4gMzEuIFNvCisgICAgICogdGhlIGNvbXByZXNzZWQgZGF0YSBmb3IgYSBkeW5hbWljIGJsb2NrIGFsc28gY2Fubm90IG92ZXJ3cml0ZSB0aGUKKyAgICAgKiBzeW1ib2xzIGZyb20gd2hpY2ggaXQgaXMgYmVpbmcgY29uc3RydWN0ZWQuCisgICAgICovCisKKyAgICBzLT5wZW5kaW5nX2J1ZiA9ICh1Y2hmICopIFpBTExPQyhzdHJtLCBzLT5saXRfYnVmc2l6ZSwgNCk7CisgICAgcy0+cGVuZGluZ19idWZfc2l6ZSA9ICh1bGcpcy0+bGl0X2J1ZnNpemUgKiA0OworCisgICAgaWYgKHMtPndpbmRvdyA9PSBaX05VTEwgfHwgcy0+cHJldiA9PSBaX05VTEwgfHwgcy0+aGVhZCA9PSBaX05VTEwgfHwKKyAgICAgICAgcy0+cGVuZGluZ19idWYgPT0gWl9OVUxMKSB7CisgICAgICAgIHMtPnN0YXR1cyA9IEZJTklTSF9TVEFURTsKKyAgICAgICAgc3RybS0+bXNnID0gRVJSX01TRyhaX01FTV9FUlJPUik7CisgICAgICAgIGRlZmxhdGVFbmQgKHN0cm0pOworICAgICAgICByZXR1cm4gWl9NRU1fRVJST1I7CisgICAgfQorICAgIHMtPnN5bV9idWYgPSBzLT5wZW5kaW5nX2J1ZiArIHMtPmxpdF9idWZzaXplOworICAgIHMtPnN5bV9lbmQgPSAocy0+bGl0X2J1ZnNpemUgLSAxKSAqIDM7CisgICAgLyogV2UgYXZvaWQgZXF1YWxpdHkgd2l0aCBsaXRfYnVmc2l6ZSozIGJlY2F1c2Ugb2Ygd3JhcGFyb3VuZCBhdCA2NEsKKyAgICAgKiBvbiAxNiBiaXQgbWFjaGluZXMgYW5kIGJlY2F1c2Ugc3RvcmVkIGJsb2NrcyBhcmUgcmVzdHJpY3RlZCB0bworICAgICAqIDY0Sy0xIGJ5dGVzLgorICAgICAqLworCisgICAgcy0+bGV2ZWwgPSBsZXZlbDsKKyAgICBzLT5zdHJhdGVneSA9IHN0cmF0ZWd5OworICAgIHMtPm1ldGhvZCA9IChCeXRlKW1ldGhvZDsKKworICAgIHJldHVybiBkZWZsYXRlUmVzZXQoc3RybSk7Cit9CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENoZWNrIGZvciBhIHZhbGlkIGRlZmxhdGUgc3RyZWFtIHN0YXRlLiBSZXR1cm4gMCBpZiBvaywgMSBpZiBub3QuCisgKi8KK2xvY2FsIGludCBkZWZsYXRlU3RhdGVDaGVjayAoc3RybSkKKyAgICB6X3N0cmVhbXAgc3RybTsKK3sKKyAgICBkZWZsYXRlX3N0YXRlICpzOworICAgIGlmIChzdHJtID09IFpfTlVMTCB8fAorICAgICAgICBzdHJtLT56YWxsb2MgPT0gKGFsbG9jX2Z1bmMpMCB8fCBzdHJtLT56ZnJlZSA9PSAoZnJlZV9mdW5jKTApCisgICAgICAgIHJldHVybiAxOworICAgIHMgPSBzdHJtLT5zdGF0ZTsKKyAgICBpZiAocyA9PSBaX05VTEwgfHwgcy0+c3RybSAhPSBzdHJtIHx8IChzLT5zdGF0dXMgIT0gSU5JVF9TVEFURSAmJgorI2lmZGVmIEdaSVAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5zdGF0dXMgIT0gR1pJUF9TVEFURSAmJgorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+c3RhdHVzICE9IEVYVFJBX1NUQVRFICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+c3RhdHVzICE9IE5BTUVfU1RBVEUgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5zdGF0dXMgIT0gQ09NTUVOVF9TVEFURSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPnN0YXR1cyAhPSBIQ1JDX1NUQVRFICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+c3RhdHVzICE9IEJVU1lfU1RBVEUgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5zdGF0dXMgIT0gRklOSVNIX1NUQVRFKSkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KK2ludCBaRVhQT1JUIGRlZmxhdGVTZXREaWN0aW9uYXJ5IChzdHJtLCBkaWN0aW9uYXJ5LCBkaWN0TGVuZ3RoKQorICAgIHpfc3RyZWFtcCBzdHJtOworICAgIGNvbnN0IEJ5dGVmICpkaWN0aW9uYXJ5OworICAgIHVJbnQgIGRpY3RMZW5ndGg7Cit7CisgICAgZGVmbGF0ZV9zdGF0ZSAqczsKKyAgICB1SW50IHN0ciwgbjsKKyAgICBpbnQgd3JhcDsKKyAgICB1bnNpZ25lZCBhdmFpbDsKKyAgICB6X2NvbnN0IHVuc2lnbmVkIGNoYXIgKm5leHQ7CisKKyAgICBpZiAoZGVmbGF0ZVN0YXRlQ2hlY2soc3RybSkgfHwgZGljdGlvbmFyeSA9PSBaX05VTEwpCisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyAgICBzID0gc3RybS0+c3RhdGU7CisgICAgd3JhcCA9IHMtPndyYXA7CisgICAgaWYgKHdyYXAgPT0gMiB8fCAod3JhcCA9PSAxICYmIHMtPnN0YXR1cyAhPSBJTklUX1NUQVRFKSB8fCBzLT5sb29rYWhlYWQpCisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKworICAgIC8qIHdoZW4gdXNpbmcgemxpYiB3cmFwcGVycywgY29tcHV0ZSBBZGxlci0zMiBmb3IgcHJvdmlkZWQgZGljdGlvbmFyeSAqLworICAgIGlmICh3cmFwID09IDEpCisgICAgICAgIHN0cm0tPmFkbGVyID0gYWRsZXIzMihzdHJtLT5hZGxlciwgZGljdGlvbmFyeSwgZGljdExlbmd0aCk7CisgICAgcy0+d3JhcCA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiBhdm9pZCBjb21wdXRpbmcgQWRsZXItMzIgaW4gcmVhZF9idWYgKi8KKworICAgIC8qIGlmIGRpY3Rpb25hcnkgd291bGQgZmlsbCB3aW5kb3csIGp1c3QgcmVwbGFjZSB0aGUgaGlzdG9yeSAqLworICAgIGlmIChkaWN0TGVuZ3RoID49IHMtPndfc2l6ZSkgeworICAgICAgICBpZiAod3JhcCA9PSAwKSB7ICAgICAgICAgICAgLyogYWxyZWFkeSBlbXB0eSBvdGhlcndpc2UgKi8KKyAgICAgICAgICAgIENMRUFSX0hBU0gocyk7CisgICAgICAgICAgICBzLT5zdHJzdGFydCA9IDA7CisgICAgICAgICAgICBzLT5ibG9ja19zdGFydCA9IDBMOworICAgICAgICAgICAgcy0+aW5zZXJ0ID0gMDsKKyAgICAgICAgfQorICAgICAgICBkaWN0aW9uYXJ5ICs9IGRpY3RMZW5ndGggLSBzLT53X3NpemU7ICAvKiB1c2UgdGhlIHRhaWwgKi8KKyAgICAgICAgZGljdExlbmd0aCA9IHMtPndfc2l6ZTsKKyAgICB9CisKKyAgICAvKiBpbnNlcnQgZGljdGlvbmFyeSBpbnRvIHdpbmRvdyBhbmQgaGFzaCAqLworICAgIGF2YWlsID0gc3RybS0+YXZhaWxfaW47CisgICAgbmV4dCA9IHN0cm0tPm5leHRfaW47CisgICAgc3RybS0+YXZhaWxfaW4gPSBkaWN0TGVuZ3RoOworICAgIHN0cm0tPm5leHRfaW4gPSAoel9jb25zdCBCeXRlZiAqKWRpY3Rpb25hcnk7CisgICAgZmlsbF93aW5kb3cocyk7CisgICAgd2hpbGUgKHMtPmxvb2thaGVhZCA+PSBNSU5fTUFUQ0gpIHsKKyAgICAgICAgc3RyID0gcy0+c3Ryc3RhcnQ7CisgICAgICAgIG4gPSBzLT5sb29rYWhlYWQgLSAoTUlOX01BVENILTEpOworICAgICAgICBkbyB7CisgICAgICAgICAgICBVUERBVEVfSEFTSChzLCBzLT5pbnNfaCwgcy0+d2luZG93W3N0ciArIE1JTl9NQVRDSC0xXSk7CisjaWZuZGVmIEZBU1RFU1QKKyAgICAgICAgICAgIHMtPnByZXZbc3RyICYgcy0+d19tYXNrXSA9IHMtPmhlYWRbcy0+aW5zX2hdOworI2VuZGlmCisgICAgICAgICAgICBzLT5oZWFkW3MtPmluc19oXSA9IChQb3Mpc3RyOworICAgICAgICAgICAgc3RyKys7CisgICAgICAgIH0gd2hpbGUgKC0tbik7CisgICAgICAgIHMtPnN0cnN0YXJ0ID0gc3RyOworICAgICAgICBzLT5sb29rYWhlYWQgPSBNSU5fTUFUQ0gtMTsKKyAgICAgICAgZmlsbF93aW5kb3cocyk7CisgICAgfQorICAgIHMtPnN0cnN0YXJ0ICs9IHMtPmxvb2thaGVhZDsKKyAgICBzLT5ibG9ja19zdGFydCA9IChsb25nKXMtPnN0cnN0YXJ0OworICAgIHMtPmluc2VydCA9IHMtPmxvb2thaGVhZDsKKyAgICBzLT5sb29rYWhlYWQgPSAwOworICAgIHMtPm1hdGNoX2xlbmd0aCA9IHMtPnByZXZfbGVuZ3RoID0gTUlOX01BVENILTE7CisgICAgcy0+bWF0Y2hfYXZhaWxhYmxlID0gMDsKKyAgICBzdHJtLT5uZXh0X2luID0gbmV4dDsKKyAgICBzdHJtLT5hdmFpbF9pbiA9IGF2YWlsOworICAgIHMtPndyYXAgPSB3cmFwOworICAgIHJldHVybiBaX09LOworfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCitpbnQgWkVYUE9SVCBkZWZsYXRlR2V0RGljdGlvbmFyeSAoc3RybSwgZGljdGlvbmFyeSwgZGljdExlbmd0aCkKKyAgICB6X3N0cmVhbXAgc3RybTsKKyAgICBCeXRlZiAqZGljdGlvbmFyeTsKKyAgICB1SW50ICAqZGljdExlbmd0aDsKK3sKKyAgICBkZWZsYXRlX3N0YXRlICpzOworICAgIHVJbnQgbGVuOworCisgICAgaWYgKGRlZmxhdGVTdGF0ZUNoZWNrKHN0cm0pKQorICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgICAgcyA9IHN0cm0tPnN0YXRlOworICAgIGxlbiA9IHMtPnN0cnN0YXJ0ICsgcy0+bG9va2FoZWFkOworICAgIGlmIChsZW4gPiBzLT53X3NpemUpCisgICAgICAgIGxlbiA9IHMtPndfc2l6ZTsKKyAgICBpZiAoZGljdGlvbmFyeSAhPSBaX05VTEwgJiYgbGVuKQorICAgICAgICB6bWVtY3B5KGRpY3Rpb25hcnksIHMtPndpbmRvdyArIHMtPnN0cnN0YXJ0ICsgcy0+bG9va2FoZWFkIC0gbGVuLCBsZW4pOworICAgIGlmIChkaWN0TGVuZ3RoICE9IFpfTlVMTCkKKyAgICAgICAgKmRpY3RMZW5ndGggPSBsZW47CisgICAgcmV0dXJuIFpfT0s7Cit9CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KK2ludCBaRVhQT1JUIGRlZmxhdGVSZXNldEtlZXAgKHN0cm0pCisgICAgel9zdHJlYW1wIHN0cm07Cit7CisgICAgZGVmbGF0ZV9zdGF0ZSAqczsKKworICAgIGlmIChkZWZsYXRlU3RhdGVDaGVjayhzdHJtKSkgeworICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgICAgfQorCisgICAgc3RybS0+dG90YWxfaW4gPSBzdHJtLT50b3RhbF9vdXQgPSAwOworICAgIHN0cm0tPm1zZyA9IFpfTlVMTDsgLyogdXNlIHpmcmVlIGlmIHdlIGV2ZXIgYWxsb2NhdGUgbXNnIGR5bmFtaWNhbGx5ICovCisgICAgc3RybS0+ZGF0YV90eXBlID0gWl9VTktOT1dOOworCisgICAgcyA9IChkZWZsYXRlX3N0YXRlICopc3RybS0+c3RhdGU7CisgICAgcy0+cGVuZGluZyA9IDA7CisgICAgcy0+cGVuZGluZ19vdXQgPSBzLT5wZW5kaW5nX2J1ZjsKKworICAgIGlmIChzLT53cmFwIDwgMCkgeworICAgICAgICBzLT53cmFwID0gLXMtPndyYXA7IC8qIHdhcyBtYWRlIG5lZ2F0aXZlIGJ5IGRlZmxhdGUoLi4uLCBaX0ZJTklTSCk7ICovCisgICAgfQorICAgIHMtPnN0YXR1cyA9CisjaWZkZWYgR1pJUAorICAgICAgICBzLT53cmFwID09IDIgPyBHWklQX1NUQVRFIDoKKyNlbmRpZgorICAgICAgICBJTklUX1NUQVRFOworICAgIHN0cm0tPmFkbGVyID0KKyNpZmRlZiBHWklQCisgICAgICAgIHMtPndyYXAgPT0gMiA/IGNyYzMyKDBMLCBaX05VTEwsIDApIDoKKyNlbmRpZgorICAgICAgICBhZGxlcjMyKDBMLCBaX05VTEwsIDApOworICAgIHMtPmxhc3RfZmx1c2ggPSAtMjsKKworICAgIF90cl9pbml0KHMpOworCisgICAgcmV0dXJuIFpfT0s7Cit9CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KK2ludCBaRVhQT1JUIGRlZmxhdGVSZXNldCAoc3RybSkKKyAgICB6X3N0cmVhbXAgc3RybTsKK3sKKyAgICBpbnQgcmV0OworCisgICAgcmV0ID0gZGVmbGF0ZVJlc2V0S2VlcChzdHJtKTsKKyAgICBpZiAocmV0ID09IFpfT0spCisgICAgICAgIGxtX2luaXQoc3RybS0+c3RhdGUpOworICAgIHJldHVybiByZXQ7Cit9CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KK2ludCBaRVhQT1JUIGRlZmxhdGVTZXRIZWFkZXIgKHN0cm0sIGhlYWQpCisgICAgel9zdHJlYW1wIHN0cm07CisgICAgZ3pfaGVhZGVycCBoZWFkOworeworICAgIGlmIChkZWZsYXRlU3RhdGVDaGVjayhzdHJtKSB8fCBzdHJtLT5zdGF0ZS0+d3JhcCAhPSAyKQorICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgICAgc3RybS0+c3RhdGUtPmd6aGVhZCA9IGhlYWQ7CisgICAgcmV0dXJuIFpfT0s7Cit9CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KK2ludCBaRVhQT1JUIGRlZmxhdGVQZW5kaW5nIChzdHJtLCBwZW5kaW5nLCBiaXRzKQorICAgIHVuc2lnbmVkICpwZW5kaW5nOworICAgIGludCAqYml0czsKKyAgICB6X3N0cmVhbXAgc3RybTsKK3sKKyAgICBpZiAoZGVmbGF0ZVN0YXRlQ2hlY2soc3RybSkpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyAgICBpZiAocGVuZGluZyAhPSBaX05VTEwpCisgICAgICAgICpwZW5kaW5nID0gc3RybS0+c3RhdGUtPnBlbmRpbmc7CisgICAgaWYgKGJpdHMgIT0gWl9OVUxMKQorICAgICAgICAqYml0cyA9IHN0cm0tPnN0YXRlLT5iaV92YWxpZDsKKyAgICByZXR1cm4gWl9PSzsKK30KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworaW50IFpFWFBPUlQgZGVmbGF0ZVByaW1lIChzdHJtLCBiaXRzLCB2YWx1ZSkKKyAgICB6X3N0cmVhbXAgc3RybTsKKyAgICBpbnQgYml0czsKKyAgICBpbnQgdmFsdWU7Cit7CisgICAgZGVmbGF0ZV9zdGF0ZSAqczsKKyAgICBpbnQgcHV0OworCisgICAgaWYgKGRlZmxhdGVTdGF0ZUNoZWNrKHN0cm0pKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgICAgcyA9IHN0cm0tPnN0YXRlOworICAgIGlmIChiaXRzIDwgMCB8fCBiaXRzID4gMTYgfHwKKyAgICAgICAgcy0+c3ltX2J1ZiA8IHMtPnBlbmRpbmdfb3V0ICsgKChCdWZfc2l6ZSArIDcpID4+IDMpKQorICAgICAgICByZXR1cm4gWl9CVUZfRVJST1I7CisgICAgZG8geworICAgICAgICBwdXQgPSBCdWZfc2l6ZSAtIHMtPmJpX3ZhbGlkOworICAgICAgICBpZiAocHV0ID4gYml0cykKKyAgICAgICAgICAgIHB1dCA9IGJpdHM7CisgICAgICAgIHMtPmJpX2J1ZiB8PSAodXNoKSgodmFsdWUgJiAoKDEgPDwgcHV0KSAtIDEpKSA8PCBzLT5iaV92YWxpZCk7CisgICAgICAgIHMtPmJpX3ZhbGlkICs9IHB1dDsKKyAgICAgICAgX3RyX2ZsdXNoX2JpdHMocyk7CisgICAgICAgIHZhbHVlID4+PSBwdXQ7CisgICAgICAgIGJpdHMgLT0gcHV0OworICAgIH0gd2hpbGUgKGJpdHMpOworICAgIHJldHVybiBaX09LOworfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCitpbnQgWkVYUE9SVCBkZWZsYXRlUGFyYW1zKHN0cm0sIGxldmVsLCBzdHJhdGVneSkKKyAgICB6X3N0cmVhbXAgc3RybTsKKyAgICBpbnQgbGV2ZWw7CisgICAgaW50IHN0cmF0ZWd5OworeworICAgIGRlZmxhdGVfc3RhdGUgKnM7CisgICAgY29tcHJlc3NfZnVuYyBmdW5jOworCisgICAgaWYgKGRlZmxhdGVTdGF0ZUNoZWNrKHN0cm0pKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgICAgcyA9IHN0cm0tPnN0YXRlOworCisjaWZkZWYgRkFTVEVTVAorICAgIGlmIChsZXZlbCAhPSAwKSBsZXZlbCA9IDE7CisjZWxzZQorICAgIGlmIChsZXZlbCA9PSBaX0RFRkFVTFRfQ09NUFJFU1NJT04pIGxldmVsID0gNjsKKyNlbmRpZgorICAgIGlmIChsZXZlbCA8IDAgfHwgbGV2ZWwgPiA5IHx8IHN0cmF0ZWd5IDwgMCB8fCBzdHJhdGVneSA+IFpfRklYRUQpIHsKKyAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworICAgIH0KKyAgICBmdW5jID0gY29uZmlndXJhdGlvbl90YWJsZVtzLT5sZXZlbF0uZnVuYzsKKworICAgIGlmICgoc3RyYXRlZ3kgIT0gcy0+c3RyYXRlZ3kgfHwgZnVuYyAhPSBjb25maWd1cmF0aW9uX3RhYmxlW2xldmVsXS5mdW5jKSAmJgorICAgICAgICBzLT5sYXN0X2ZsdXNoICE9IC0yKSB7CisgICAgICAgIC8qIEZsdXNoIHRoZSBsYXN0IGJ1ZmZlcjogKi8KKyAgICAgICAgaW50IGVyciA9IGRlZmxhdGUoc3RybSwgWl9CTE9DSyk7CisgICAgICAgIGlmIChlcnIgPT0gWl9TVFJFQU1fRVJST1IpCisgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICBpZiAoc3RybS0+YXZhaWxfaW4gfHwgKHMtPnN0cnN0YXJ0IC0gcy0+YmxvY2tfc3RhcnQpICsgcy0+bG9va2FoZWFkKQorICAgICAgICAgICAgcmV0dXJuIFpfQlVGX0VSUk9SOworICAgIH0KKyAgICBpZiAocy0+bGV2ZWwgIT0gbGV2ZWwpIHsKKyAgICAgICAgaWYgKHMtPmxldmVsID09IDAgJiYgcy0+bWF0Y2hlcyAhPSAwKSB7CisgICAgICAgICAgICBpZiAocy0+bWF0Y2hlcyA9PSAxKQorICAgICAgICAgICAgICAgIHNsaWRlX2hhc2gocyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgQ0xFQVJfSEFTSChzKTsKKyAgICAgICAgICAgIHMtPm1hdGNoZXMgPSAwOworICAgICAgICB9CisgICAgICAgIHMtPmxldmVsID0gbGV2ZWw7CisgICAgICAgIHMtPm1heF9sYXp5X21hdGNoICAgPSBjb25maWd1cmF0aW9uX3RhYmxlW2xldmVsXS5tYXhfbGF6eTsKKyAgICAgICAgcy0+Z29vZF9tYXRjaCAgICAgICA9IGNvbmZpZ3VyYXRpb25fdGFibGVbbGV2ZWxdLmdvb2RfbGVuZ3RoOworICAgICAgICBzLT5uaWNlX21hdGNoICAgICAgID0gY29uZmlndXJhdGlvbl90YWJsZVtsZXZlbF0ubmljZV9sZW5ndGg7CisgICAgICAgIHMtPm1heF9jaGFpbl9sZW5ndGggPSBjb25maWd1cmF0aW9uX3RhYmxlW2xldmVsXS5tYXhfY2hhaW47CisgICAgfQorICAgIHMtPnN0cmF0ZWd5ID0gc3RyYXRlZ3k7CisgICAgcmV0dXJuIFpfT0s7Cit9CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KK2ludCBaRVhQT1JUIGRlZmxhdGVUdW5lKHN0cm0sIGdvb2RfbGVuZ3RoLCBtYXhfbGF6eSwgbmljZV9sZW5ndGgsIG1heF9jaGFpbikKKyAgICB6X3N0cmVhbXAgc3RybTsKKyAgICBpbnQgZ29vZF9sZW5ndGg7CisgICAgaW50IG1heF9sYXp5OworICAgIGludCBuaWNlX2xlbmd0aDsKKyAgICBpbnQgbWF4X2NoYWluOworeworICAgIGRlZmxhdGVfc3RhdGUgKnM7CisKKyAgICBpZiAoZGVmbGF0ZVN0YXRlQ2hlY2soc3RybSkpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyAgICBzID0gc3RybS0+c3RhdGU7CisgICAgcy0+Z29vZF9tYXRjaCA9ICh1SW50KWdvb2RfbGVuZ3RoOworICAgIHMtPm1heF9sYXp5X21hdGNoID0gKHVJbnQpbWF4X2xhenk7CisgICAgcy0+bmljZV9tYXRjaCA9IG5pY2VfbGVuZ3RoOworICAgIHMtPm1heF9jaGFpbl9sZW5ndGggPSAodUludCltYXhfY2hhaW47CisgICAgcmV0dXJuIFpfT0s7Cit9CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIEZvciB0aGUgZGVmYXVsdCB3aW5kb3dCaXRzIG9mIDE1IGFuZCBtZW1MZXZlbCBvZiA4LCB0aGlzIGZ1bmN0aW9uIHJldHVybnMKKyAqIGEgY2xvc2UgdG8gZXhhY3QsIGFzIHdlbGwgYXMgc21hbGwsIHVwcGVyIGJvdW5kIG9uIHRoZSBjb21wcmVzc2VkIHNpemUuCisgKiBUaGV5IGFyZSBjb2RlZCBhcyBjb25zdGFudHMgaGVyZSBmb3IgYSByZWFzb24tLWlmIHRoZSAjZGVmaW5lJ3MgYXJlCisgKiBjaGFuZ2VkLCB0aGVuIHRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUgY2hhbmdlZCBhcyB3ZWxsLiAgVGhlIHJldHVybgorICogdmFsdWUgZm9yIDE1IGFuZCA4IG9ubHkgd29ya3MgZm9yIHRob3NlIGV4YWN0IHNldHRpbmdzLgorICoKKyAqIEZvciBhbnkgc2V0dGluZyBvdGhlciB0aGFuIHRob3NlIGRlZmF1bHRzIGZvciB3aW5kb3dCaXRzIGFuZCBtZW1MZXZlbCwKKyAqIHRoZSB2YWx1ZSByZXR1cm5lZCBpcyBhIGNvbnNlcnZhdGl2ZSB3b3JzdCBjYXNlIGZvciB0aGUgbWF4aW11bSBleHBhbnNpb24KKyAqIHJlc3VsdGluZyBmcm9tIHVzaW5nIGZpeGVkIGJsb2NrcyBpbnN0ZWFkIG9mIHN0b3JlZCBibG9ja3MsIHdoaWNoIGRlZmxhdGUKKyAqIGNhbiBlbWl0IG9uIGNvbXByZXNzZWQgZGF0YSBmb3Igc29tZSBjb21iaW5hdGlvbnMgb2YgdGhlIHBhcmFtZXRlcnMuCisgKgorICogVGhpcyBmdW5jdGlvbiBjb3VsZCBiZSBtb3JlIHNvcGhpc3RpY2F0ZWQgdG8gcHJvdmlkZSBjbG9zZXIgdXBwZXIgYm91bmRzIGZvcgorICogZXZlcnkgY29tYmluYXRpb24gb2Ygd2luZG93Qml0cyBhbmQgbWVtTGV2ZWwuICBCdXQgZXZlbiB0aGUgY29uc2VydmF0aXZlCisgKiB1cHBlciBib3VuZCBvZiBhYm91dCAxNCUgZXhwYW5zaW9uIGRvZXMgbm90IHNlZW0gb25lcm91cyBmb3Igb3V0cHV0IGJ1ZmZlcgorICogYWxsb2NhdGlvbi4KKyAqLwordUxvbmcgWkVYUE9SVCBkZWZsYXRlQm91bmQoc3RybSwgc291cmNlTGVuKQorICAgIHpfc3RyZWFtcCBzdHJtOworICAgIHVMb25nIHNvdXJjZUxlbjsKK3sKKyAgICBkZWZsYXRlX3N0YXRlICpzOworICAgIHVMb25nIGNvbXBsZW4sIHdyYXBsZW47CisKKyAgICAvKiBjb25zZXJ2YXRpdmUgdXBwZXIgYm91bmQgZm9yIGNvbXByZXNzZWQgZGF0YSAqLworICAgIGNvbXBsZW4gPSBzb3VyY2VMZW4gKworICAgICAgICAgICAgICAoKHNvdXJjZUxlbiArIDcpID4+IDMpICsgKChzb3VyY2VMZW4gKyA2MykgPj4gNikgKyA1OworCisgICAgLyogaWYgY2FuJ3QgZ2V0IHBhcmFtZXRlcnMsIHJldHVybiBjb25zZXJ2YXRpdmUgYm91bmQgcGx1cyB6bGliIHdyYXBwZXIgKi8KKyAgICBpZiAoZGVmbGF0ZVN0YXRlQ2hlY2soc3RybSkpCisgICAgICAgIHJldHVybiBjb21wbGVuICsgNjsKKworICAgIC8qIGNvbXB1dGUgd3JhcHBlciBsZW5ndGggKi8KKyAgICBzID0gc3RybS0+c3RhdGU7CisgICAgc3dpdGNoIChzLT53cmFwKSB7CisgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJhdyBkZWZsYXRlICovCisgICAgICAgIHdyYXBsZW4gPSAwOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogemxpYiB3cmFwcGVyICovCisgICAgICAgIHdyYXBsZW4gPSA2ICsgKHMtPnN0cnN0YXJ0ID8gNCA6IDApOworICAgICAgICBicmVhazsKKyNpZmRlZiBHWklQCisgICAgY2FzZSAyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGd6aXAgd3JhcHBlciAqLworICAgICAgICB3cmFwbGVuID0gMTg7CisgICAgICAgIGlmIChzLT5nemhlYWQgIT0gWl9OVUxMKSB7ICAgICAgICAgIC8qIHVzZXItc3VwcGxpZWQgZ3ppcCBoZWFkZXIgKi8KKyAgICAgICAgICAgIEJ5dGVmICpzdHI7CisgICAgICAgICAgICBpZiAocy0+Z3poZWFkLT5leHRyYSAhPSBaX05VTEwpCisgICAgICAgICAgICAgICAgd3JhcGxlbiArPSAyICsgcy0+Z3poZWFkLT5leHRyYV9sZW47CisgICAgICAgICAgICBzdHIgPSBzLT5nemhlYWQtPm5hbWU7CisgICAgICAgICAgICBpZiAoc3RyICE9IFpfTlVMTCkKKyAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgIHdyYXBsZW4rKzsKKyAgICAgICAgICAgICAgICB9IHdoaWxlICgqc3RyKyspOworICAgICAgICAgICAgc3RyID0gcy0+Z3poZWFkLT5jb21tZW50OworICAgICAgICAgICAgaWYgKHN0ciAhPSBaX05VTEwpCisgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICAgICB3cmFwbGVuKys7CisgICAgICAgICAgICAgICAgfSB3aGlsZSAoKnN0cisrKTsKKyAgICAgICAgICAgIGlmIChzLT5nemhlYWQtPmhjcmMpCisgICAgICAgICAgICAgICAgd3JhcGxlbiArPSAyOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZvciBjb21waWxlciBoYXBwaW5lc3MgKi8KKyAgICAgICAgd3JhcGxlbiA9IDY7CisgICAgfQorCisgICAgLyogaWYgbm90IGRlZmF1bHQgcGFyYW1ldGVycywgcmV0dXJuIGNvbnNlcnZhdGl2ZSBib3VuZCAqLworICAgIGlmIChzLT53X2JpdHMgIT0gMTUgfHwgcy0+aGFzaF9iaXRzICE9IDggKyA3KQorICAgICAgICByZXR1cm4gY29tcGxlbiArIHdyYXBsZW47CisKKyAgICAvKiBkZWZhdWx0IHNldHRpbmdzOiByZXR1cm4gdGlnaHQgYm91bmQgZm9yIHRoYXQgY2FzZSAqLworICAgIHJldHVybiBzb3VyY2VMZW4gKyAoc291cmNlTGVuID4+IDEyKSArIChzb3VyY2VMZW4gPj4gMTQpICsKKyAgICAgICAgICAgKHNvdXJjZUxlbiA+PiAyNSkgKyAxMyAtIDYgKyB3cmFwbGVuOworfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBQdXQgYSBzaG9ydCBpbiB0aGUgcGVuZGluZyBidWZmZXIuIFRoZSAxNi1iaXQgdmFsdWUgaXMgcHV0IGluIE1TQiBvcmRlci4KKyAqIElOIGFzc2VydGlvbjogdGhlIHN0cmVhbSBzdGF0ZSBpcyBjb3JyZWN0IGFuZCB0aGVyZSBpcyBlbm91Z2ggcm9vbSBpbgorICogcGVuZGluZ19idWYuCisgKi8KK2xvY2FsIHZvaWQgcHV0U2hvcnRNU0IgKHMsIGIpCisgICAgZGVmbGF0ZV9zdGF0ZSAqczsKKyAgICB1SW50IGI7Cit7CisgICAgcHV0X2J5dGUocywgKEJ5dGUpKGIgPj4gOCkpOworICAgIHB1dF9ieXRlKHMsIChCeXRlKShiICYgMHhmZikpOworfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBGbHVzaCBhcyBtdWNoIHBlbmRpbmcgb3V0cHV0IGFzIHBvc3NpYmxlLiBBbGwgZGVmbGF0ZSgpIG91dHB1dCwgZXhjZXB0IGZvcgorICogc29tZSBkZWZsYXRlX3N0b3JlZCgpIG91dHB1dCwgZ29lcyB0aHJvdWdoIHRoaXMgZnVuY3Rpb24gc28gc29tZQorICogYXBwbGljYXRpb25zIG1heSB3aXNoIHRvIG1vZGlmeSBpdCB0byBhdm9pZCBhbGxvY2F0aW5nIGEgbGFyZ2UKKyAqIHN0cm0tPm5leHRfb3V0IGJ1ZmZlciBhbmQgY29weWluZyBpbnRvIGl0LiAoU2VlIGFsc28gcmVhZF9idWYoKSkuCisgKi8KK2xvY2FsIHZvaWQgZmx1c2hfcGVuZGluZyhzdHJtKQorICAgIHpfc3RyZWFtcCBzdHJtOworeworICAgIHVuc2lnbmVkIGxlbjsKKyAgICBkZWZsYXRlX3N0YXRlICpzID0gc3RybS0+c3RhdGU7CisKKyAgICBfdHJfZmx1c2hfYml0cyhzKTsKKyAgICBsZW4gPSBzLT5wZW5kaW5nOworICAgIGlmIChsZW4gPiBzdHJtLT5hdmFpbF9vdXQpIGxlbiA9IHN0cm0tPmF2YWlsX291dDsKKyAgICBpZiAobGVuID09IDApIHJldHVybjsKKworICAgIHptZW1jcHkoc3RybS0+bmV4dF9vdXQsIHMtPnBlbmRpbmdfb3V0LCBsZW4pOworICAgIHN0cm0tPm5leHRfb3V0ICArPSBsZW47CisgICAgcy0+cGVuZGluZ19vdXQgICs9IGxlbjsKKyAgICBzdHJtLT50b3RhbF9vdXQgKz0gbGVuOworICAgIHN0cm0tPmF2YWlsX291dCAtPSBsZW47CisgICAgcy0+cGVuZGluZyAgICAgIC09IGxlbjsKKyAgICBpZiAocy0+cGVuZGluZyA9PSAwKSB7CisgICAgICAgIHMtPnBlbmRpbmdfb3V0ID0gcy0+cGVuZGluZ19idWY7CisgICAgfQorfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIFVwZGF0ZSB0aGUgaGVhZGVyIENSQyB3aXRoIHRoZSBieXRlcyBzLT5wZW5kaW5nX2J1ZltiZWcuLnMtPnBlbmRpbmcgLSAxXS4KKyAqLworI2RlZmluZSBIQ1JDX1VQREFURShiZWcpIFwKKyAgICBkbyB7IFwKKyAgICAgICAgaWYgKHMtPmd6aGVhZC0+aGNyYyAmJiBzLT5wZW5kaW5nID4gKGJlZykpIFwKKyAgICAgICAgICAgIHN0cm0tPmFkbGVyID0gY3JjMzIoc3RybS0+YWRsZXIsIHMtPnBlbmRpbmdfYnVmICsgKGJlZyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+cGVuZGluZyAtIChiZWcpKTsgXAorICAgIH0gd2hpbGUgKDApCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KK2ludCBaRVhQT1JUIGRlZmxhdGUgKHN0cm0sIGZsdXNoKQorICAgIHpfc3RyZWFtcCBzdHJtOworICAgIGludCBmbHVzaDsKK3sKKyAgICBpbnQgb2xkX2ZsdXNoOyAvKiB2YWx1ZSBvZiBmbHVzaCBwYXJhbSBmb3IgcHJldmlvdXMgZGVmbGF0ZSBjYWxsICovCisgICAgZGVmbGF0ZV9zdGF0ZSAqczsKKworICAgIGlmIChkZWZsYXRlU3RhdGVDaGVjayhzdHJtKSB8fCBmbHVzaCA+IFpfQkxPQ0sgfHwgZmx1c2ggPCAwKSB7CisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyAgICB9CisgICAgcyA9IHN0cm0tPnN0YXRlOworCisgICAgaWYgKHN0cm0tPm5leHRfb3V0ID09IFpfTlVMTCB8fAorICAgICAgICAoc3RybS0+YXZhaWxfaW4gIT0gMCAmJiBzdHJtLT5uZXh0X2luID09IFpfTlVMTCkgfHwKKyAgICAgICAgKHMtPnN0YXR1cyA9PSBGSU5JU0hfU1RBVEUgJiYgZmx1c2ggIT0gWl9GSU5JU0gpKSB7CisgICAgICAgIEVSUl9SRVRVUk4oc3RybSwgWl9TVFJFQU1fRVJST1IpOworICAgIH0KKyAgICBpZiAoc3RybS0+YXZhaWxfb3V0ID09IDApIEVSUl9SRVRVUk4oc3RybSwgWl9CVUZfRVJST1IpOworCisgICAgb2xkX2ZsdXNoID0gcy0+bGFzdF9mbHVzaDsKKyAgICBzLT5sYXN0X2ZsdXNoID0gZmx1c2g7CisKKyAgICAvKiBGbHVzaCBhcyBtdWNoIHBlbmRpbmcgb3V0cHV0IGFzIHBvc3NpYmxlICovCisgICAgaWYgKHMtPnBlbmRpbmcgIT0gMCkgeworICAgICAgICBmbHVzaF9wZW5kaW5nKHN0cm0pOworICAgICAgICBpZiAoc3RybS0+YXZhaWxfb3V0ID09IDApIHsKKyAgICAgICAgICAgIC8qIFNpbmNlIGF2YWlsX291dCBpcyAwLCBkZWZsYXRlIHdpbGwgYmUgY2FsbGVkIGFnYWluIHdpdGgKKyAgICAgICAgICAgICAqIG1vcmUgb3V0cHV0IHNwYWNlLCBidXQgcG9zc2libHkgd2l0aCBib3RoIHBlbmRpbmcgYW5kCisgICAgICAgICAgICAgKiBhdmFpbF9pbiBlcXVhbCB0byB6ZXJvLiBUaGVyZSB3b24ndCBiZSBhbnl0aGluZyB0byBkbywKKyAgICAgICAgICAgICAqIGJ1dCB0aGlzIGlzIG5vdCBhbiBlcnJvciBzaXR1YXRpb24gc28gbWFrZSBzdXJlIHdlCisgICAgICAgICAgICAgKiByZXR1cm4gT0sgaW5zdGVhZCBvZiBCVUZfRVJST1IgYXQgbmV4dCBjYWxsIG9mIGRlZmxhdGU6CisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHMtPmxhc3RfZmx1c2ggPSAtMTsKKyAgICAgICAgICAgIHJldHVybiBaX09LOworICAgICAgICB9CisKKyAgICAvKiBNYWtlIHN1cmUgdGhlcmUgaXMgc29tZXRoaW5nIHRvIGRvIGFuZCBhdm9pZCBkdXBsaWNhdGUgY29uc2VjdXRpdmUKKyAgICAgKiBmbHVzaGVzLiBGb3IgcmVwZWF0ZWQgYW5kIHVzZWxlc3MgY2FsbHMgd2l0aCBaX0ZJTklTSCwgd2Uga2VlcAorICAgICAqIHJldHVybmluZyBaX1NUUkVBTV9FTkQgaW5zdGVhZCBvZiBaX0JVRl9FUlJPUi4KKyAgICAgKi8KKyAgICB9IGVsc2UgaWYgKHN0cm0tPmF2YWlsX2luID09IDAgJiYgUkFOSyhmbHVzaCkgPD0gUkFOSyhvbGRfZmx1c2gpICYmCisgICAgICAgICAgICAgICBmbHVzaCAhPSBaX0ZJTklTSCkgeworICAgICAgICBFUlJfUkVUVVJOKHN0cm0sIFpfQlVGX0VSUk9SKTsKKyAgICB9CisKKyAgICAvKiBVc2VyIG11c3Qgbm90IHByb3ZpZGUgbW9yZSBpbnB1dCBhZnRlciB0aGUgZmlyc3QgRklOSVNIOiAqLworICAgIGlmIChzLT5zdGF0dXMgPT0gRklOSVNIX1NUQVRFICYmIHN0cm0tPmF2YWlsX2luICE9IDApIHsKKyAgICAgICAgRVJSX1JFVFVSTihzdHJtLCBaX0JVRl9FUlJPUik7CisgICAgfQorCisgICAgLyogV3JpdGUgdGhlIGhlYWRlciAqLworICAgIGlmIChzLT5zdGF0dXMgPT0gSU5JVF9TVEFURSAmJiBzLT53cmFwID09IDApCisgICAgICAgIHMtPnN0YXR1cyA9IEJVU1lfU1RBVEU7CisgICAgaWYgKHMtPnN0YXR1cyA9PSBJTklUX1NUQVRFKSB7CisgICAgICAgIC8qIHpsaWIgaGVhZGVyICovCisgICAgICAgIHVJbnQgaGVhZGVyID0gKFpfREVGTEFURUQgKyAoKHMtPndfYml0cy04KTw8NCkpIDw8IDg7CisgICAgICAgIHVJbnQgbGV2ZWxfZmxhZ3M7CisKKyAgICAgICAgaWYgKHMtPnN0cmF0ZWd5ID49IFpfSFVGRk1BTl9PTkxZIHx8IHMtPmxldmVsIDwgMikKKyAgICAgICAgICAgIGxldmVsX2ZsYWdzID0gMDsKKyAgICAgICAgZWxzZSBpZiAocy0+bGV2ZWwgPCA2KQorICAgICAgICAgICAgbGV2ZWxfZmxhZ3MgPSAxOworICAgICAgICBlbHNlIGlmIChzLT5sZXZlbCA9PSA2KQorICAgICAgICAgICAgbGV2ZWxfZmxhZ3MgPSAyOworICAgICAgICBlbHNlCisgICAgICAgICAgICBsZXZlbF9mbGFncyA9IDM7CisgICAgICAgIGhlYWRlciB8PSAobGV2ZWxfZmxhZ3MgPDwgNik7CisgICAgICAgIGlmIChzLT5zdHJzdGFydCAhPSAwKSBoZWFkZXIgfD0gUFJFU0VUX0RJQ1Q7CisgICAgICAgIGhlYWRlciArPSAzMSAtIChoZWFkZXIgJSAzMSk7CisKKyAgICAgICAgcHV0U2hvcnRNU0IocywgaGVhZGVyKTsKKworICAgICAgICAvKiBTYXZlIHRoZSBhZGxlcjMyIG9mIHRoZSBwcmVzZXQgZGljdGlvbmFyeTogKi8KKyAgICAgICAgaWYgKHMtPnN0cnN0YXJ0ICE9IDApIHsKKyAgICAgICAgICAgIHB1dFNob3J0TVNCKHMsICh1SW50KShzdHJtLT5hZGxlciA+PiAxNikpOworICAgICAgICAgICAgcHV0U2hvcnRNU0IocywgKHVJbnQpKHN0cm0tPmFkbGVyICYgMHhmZmZmKSk7CisgICAgICAgIH0KKyAgICAgICAgc3RybS0+YWRsZXIgPSBhZGxlcjMyKDBMLCBaX05VTEwsIDApOworICAgICAgICBzLT5zdGF0dXMgPSBCVVNZX1NUQVRFOworCisgICAgICAgIC8qIENvbXByZXNzaW9uIG11c3Qgc3RhcnQgd2l0aCBhbiBlbXB0eSBwZW5kaW5nIGJ1ZmZlciAqLworICAgICAgICBmbHVzaF9wZW5kaW5nKHN0cm0pOworICAgICAgICBpZiAocy0+cGVuZGluZyAhPSAwKSB7CisgICAgICAgICAgICBzLT5sYXN0X2ZsdXNoID0gLTE7CisgICAgICAgICAgICByZXR1cm4gWl9PSzsKKyAgICAgICAgfQorICAgIH0KKyNpZmRlZiBHWklQCisgICAgaWYgKHMtPnN0YXR1cyA9PSBHWklQX1NUQVRFKSB7CisgICAgICAgIC8qIGd6aXAgaGVhZGVyICovCisgICAgICAgIHN0cm0tPmFkbGVyID0gY3JjMzIoMEwsIFpfTlVMTCwgMCk7CisgICAgICAgIHB1dF9ieXRlKHMsIDMxKTsKKyAgICAgICAgcHV0X2J5dGUocywgMTM5KTsKKyAgICAgICAgcHV0X2J5dGUocywgOCk7CisgICAgICAgIGlmIChzLT5nemhlYWQgPT0gWl9OVUxMKSB7CisgICAgICAgICAgICBwdXRfYnl0ZShzLCAwKTsKKyAgICAgICAgICAgIHB1dF9ieXRlKHMsIDApOworICAgICAgICAgICAgcHV0X2J5dGUocywgMCk7CisgICAgICAgICAgICBwdXRfYnl0ZShzLCAwKTsKKyAgICAgICAgICAgIHB1dF9ieXRlKHMsIDApOworICAgICAgICAgICAgcHV0X2J5dGUocywgcy0+bGV2ZWwgPT0gOSA/IDIgOgorICAgICAgICAgICAgICAgICAgICAgKHMtPnN0cmF0ZWd5ID49IFpfSFVGRk1BTl9PTkxZIHx8IHMtPmxldmVsIDwgMiA/CisgICAgICAgICAgICAgICAgICAgICAgNCA6IDApKTsKKyAgICAgICAgICAgIHB1dF9ieXRlKHMsIE9TX0NPREUpOworICAgICAgICAgICAgcy0+c3RhdHVzID0gQlVTWV9TVEFURTsKKworICAgICAgICAgICAgLyogQ29tcHJlc3Npb24gbXVzdCBzdGFydCB3aXRoIGFuIGVtcHR5IHBlbmRpbmcgYnVmZmVyICovCisgICAgICAgICAgICBmbHVzaF9wZW5kaW5nKHN0cm0pOworICAgICAgICAgICAgaWYgKHMtPnBlbmRpbmcgIT0gMCkgeworICAgICAgICAgICAgICAgIHMtPmxhc3RfZmx1c2ggPSAtMTsKKyAgICAgICAgICAgICAgICByZXR1cm4gWl9PSzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHB1dF9ieXRlKHMsIChzLT5nemhlYWQtPnRleHQgPyAxIDogMCkgKworICAgICAgICAgICAgICAgICAgICAgKHMtPmd6aGVhZC0+aGNyYyA/IDIgOiAwKSArCisgICAgICAgICAgICAgICAgICAgICAocy0+Z3poZWFkLT5leHRyYSA9PSBaX05VTEwgPyAwIDogNCkgKworICAgICAgICAgICAgICAgICAgICAgKHMtPmd6aGVhZC0+bmFtZSA9PSBaX05VTEwgPyAwIDogOCkgKworICAgICAgICAgICAgICAgICAgICAgKHMtPmd6aGVhZC0+Y29tbWVudCA9PSBaX05VTEwgPyAwIDogMTYpCisgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgcHV0X2J5dGUocywgKEJ5dGUpKHMtPmd6aGVhZC0+dGltZSAmIDB4ZmYpKTsKKyAgICAgICAgICAgIHB1dF9ieXRlKHMsIChCeXRlKSgocy0+Z3poZWFkLT50aW1lID4+IDgpICYgMHhmZikpOworICAgICAgICAgICAgcHV0X2J5dGUocywgKEJ5dGUpKChzLT5nemhlYWQtPnRpbWUgPj4gMTYpICYgMHhmZikpOworICAgICAgICAgICAgcHV0X2J5dGUocywgKEJ5dGUpKChzLT5nemhlYWQtPnRpbWUgPj4gMjQpICYgMHhmZikpOworICAgICAgICAgICAgcHV0X2J5dGUocywgcy0+bGV2ZWwgPT0gOSA/IDIgOgorICAgICAgICAgICAgICAgICAgICAgKHMtPnN0cmF0ZWd5ID49IFpfSFVGRk1BTl9PTkxZIHx8IHMtPmxldmVsIDwgMiA/CisgICAgICAgICAgICAgICAgICAgICAgNCA6IDApKTsKKyAgICAgICAgICAgIHB1dF9ieXRlKHMsIHMtPmd6aGVhZC0+b3MgJiAweGZmKTsKKyAgICAgICAgICAgIGlmIChzLT5nemhlYWQtPmV4dHJhICE9IFpfTlVMTCkgeworICAgICAgICAgICAgICAgIHB1dF9ieXRlKHMsIHMtPmd6aGVhZC0+ZXh0cmFfbGVuICYgMHhmZik7CisgICAgICAgICAgICAgICAgcHV0X2J5dGUocywgKHMtPmd6aGVhZC0+ZXh0cmFfbGVuID4+IDgpICYgMHhmZik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocy0+Z3poZWFkLT5oY3JjKQorICAgICAgICAgICAgICAgIHN0cm0tPmFkbGVyID0gY3JjMzIoc3RybS0+YWRsZXIsIHMtPnBlbmRpbmdfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+cGVuZGluZyk7CisgICAgICAgICAgICBzLT5nemluZGV4ID0gMDsKKyAgICAgICAgICAgIHMtPnN0YXR1cyA9IEVYVFJBX1NUQVRFOworICAgICAgICB9CisgICAgfQorICAgIGlmIChzLT5zdGF0dXMgPT0gRVhUUkFfU1RBVEUpIHsKKyAgICAgICAgaWYgKHMtPmd6aGVhZC0+ZXh0cmEgIT0gWl9OVUxMKSB7CisgICAgICAgICAgICB1bGcgYmVnID0gcy0+cGVuZGluZzsgICAvKiBzdGFydCBvZiBieXRlcyB0byB1cGRhdGUgY3JjICovCisgICAgICAgICAgICB1SW50IGxlZnQgPSAocy0+Z3poZWFkLT5leHRyYV9sZW4gJiAweGZmZmYpIC0gcy0+Z3ppbmRleDsKKyAgICAgICAgICAgIHdoaWxlIChzLT5wZW5kaW5nICsgbGVmdCA+IHMtPnBlbmRpbmdfYnVmX3NpemUpIHsKKyAgICAgICAgICAgICAgICB1SW50IGNvcHkgPSBzLT5wZW5kaW5nX2J1Zl9zaXplIC0gcy0+cGVuZGluZzsKKyAgICAgICAgICAgICAgICB6bWVtY3B5KHMtPnBlbmRpbmdfYnVmICsgcy0+cGVuZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgIHMtPmd6aGVhZC0+ZXh0cmEgKyBzLT5nemluZGV4LCBjb3B5KTsKKyAgICAgICAgICAgICAgICBzLT5wZW5kaW5nID0gcy0+cGVuZGluZ19idWZfc2l6ZTsKKyAgICAgICAgICAgICAgICBIQ1JDX1VQREFURShiZWcpOworICAgICAgICAgICAgICAgIHMtPmd6aW5kZXggKz0gY29weTsKKyAgICAgICAgICAgICAgICBmbHVzaF9wZW5kaW5nKHN0cm0pOworICAgICAgICAgICAgICAgIGlmIChzLT5wZW5kaW5nICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcy0+bGFzdF9mbHVzaCA9IC0xOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gWl9PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYmVnID0gMDsKKyAgICAgICAgICAgICAgICBsZWZ0IC09IGNvcHk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB6bWVtY3B5KHMtPnBlbmRpbmdfYnVmICsgcy0+cGVuZGluZywKKyAgICAgICAgICAgICAgICAgICAgcy0+Z3poZWFkLT5leHRyYSArIHMtPmd6aW5kZXgsIGxlZnQpOworICAgICAgICAgICAgcy0+cGVuZGluZyArPSBsZWZ0OworICAgICAgICAgICAgSENSQ19VUERBVEUoYmVnKTsKKyAgICAgICAgICAgIHMtPmd6aW5kZXggPSAwOworICAgICAgICB9CisgICAgICAgIHMtPnN0YXR1cyA9IE5BTUVfU1RBVEU7CisgICAgfQorICAgIGlmIChzLT5zdGF0dXMgPT0gTkFNRV9TVEFURSkgeworICAgICAgICBpZiAocy0+Z3poZWFkLT5uYW1lICE9IFpfTlVMTCkgeworICAgICAgICAgICAgdWxnIGJlZyA9IHMtPnBlbmRpbmc7ICAgLyogc3RhcnQgb2YgYnl0ZXMgdG8gdXBkYXRlIGNyYyAqLworICAgICAgICAgICAgaW50IHZhbDsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBpZiAocy0+cGVuZGluZyA9PSBzLT5wZW5kaW5nX2J1Zl9zaXplKSB7CisgICAgICAgICAgICAgICAgICAgIEhDUkNfVVBEQVRFKGJlZyk7CisgICAgICAgICAgICAgICAgICAgIGZsdXNoX3BlbmRpbmcoc3RybSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzLT5wZW5kaW5nICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHMtPmxhc3RfZmx1c2ggPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBaX09LOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJlZyA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZhbCA9IHMtPmd6aGVhZC0+bmFtZVtzLT5nemluZGV4KytdOworICAgICAgICAgICAgICAgIHB1dF9ieXRlKHMsIHZhbCk7CisgICAgICAgICAgICB9IHdoaWxlICh2YWwgIT0gMCk7CisgICAgICAgICAgICBIQ1JDX1VQREFURShiZWcpOworICAgICAgICAgICAgcy0+Z3ppbmRleCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgcy0+c3RhdHVzID0gQ09NTUVOVF9TVEFURTsKKyAgICB9CisgICAgaWYgKHMtPnN0YXR1cyA9PSBDT01NRU5UX1NUQVRFKSB7CisgICAgICAgIGlmIChzLT5nemhlYWQtPmNvbW1lbnQgIT0gWl9OVUxMKSB7CisgICAgICAgICAgICB1bGcgYmVnID0gcy0+cGVuZGluZzsgICAvKiBzdGFydCBvZiBieXRlcyB0byB1cGRhdGUgY3JjICovCisgICAgICAgICAgICBpbnQgdmFsOworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIGlmIChzLT5wZW5kaW5nID09IHMtPnBlbmRpbmdfYnVmX3NpemUpIHsKKyAgICAgICAgICAgICAgICAgICAgSENSQ19VUERBVEUoYmVnKTsKKyAgICAgICAgICAgICAgICAgICAgZmx1c2hfcGVuZGluZyhzdHJtKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHMtPnBlbmRpbmcgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcy0+bGFzdF9mbHVzaCA9IC0xOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFpfT0s7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYmVnID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFsID0gcy0+Z3poZWFkLT5jb21tZW50W3MtPmd6aW5kZXgrK107CisgICAgICAgICAgICAgICAgcHV0X2J5dGUocywgdmFsKTsKKyAgICAgICAgICAgIH0gd2hpbGUgKHZhbCAhPSAwKTsKKyAgICAgICAgICAgIEhDUkNfVVBEQVRFKGJlZyk7CisgICAgICAgIH0KKyAgICAgICAgcy0+c3RhdHVzID0gSENSQ19TVEFURTsKKyAgICB9CisgICAgaWYgKHMtPnN0YXR1cyA9PSBIQ1JDX1NUQVRFKSB7CisgICAgICAgIGlmIChzLT5nemhlYWQtPmhjcmMpIHsKKyAgICAgICAgICAgIGlmIChzLT5wZW5kaW5nICsgMiA+IHMtPnBlbmRpbmdfYnVmX3NpemUpIHsKKyAgICAgICAgICAgICAgICBmbHVzaF9wZW5kaW5nKHN0cm0pOworICAgICAgICAgICAgICAgIGlmIChzLT5wZW5kaW5nICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcy0+bGFzdF9mbHVzaCA9IC0xOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gWl9PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwdXRfYnl0ZShzLCAoQnl0ZSkoc3RybS0+YWRsZXIgJiAweGZmKSk7CisgICAgICAgICAgICBwdXRfYnl0ZShzLCAoQnl0ZSkoKHN0cm0tPmFkbGVyID4+IDgpICYgMHhmZikpOworICAgICAgICAgICAgc3RybS0+YWRsZXIgPSBjcmMzMigwTCwgWl9OVUxMLCAwKTsKKyAgICAgICAgfQorICAgICAgICBzLT5zdGF0dXMgPSBCVVNZX1NUQVRFOworCisgICAgICAgIC8qIENvbXByZXNzaW9uIG11c3Qgc3RhcnQgd2l0aCBhbiBlbXB0eSBwZW5kaW5nIGJ1ZmZlciAqLworICAgICAgICBmbHVzaF9wZW5kaW5nKHN0cm0pOworICAgICAgICBpZiAocy0+cGVuZGluZyAhPSAwKSB7CisgICAgICAgICAgICBzLT5sYXN0X2ZsdXNoID0gLTE7CisgICAgICAgICAgICByZXR1cm4gWl9PSzsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisgICAgLyogU3RhcnQgYSBuZXcgYmxvY2sgb3IgY29udGludWUgdGhlIGN1cnJlbnQgb25lLgorICAgICAqLworICAgIGlmIChzdHJtLT5hdmFpbF9pbiAhPSAwIHx8IHMtPmxvb2thaGVhZCAhPSAwIHx8CisgICAgICAgIChmbHVzaCAhPSBaX05PX0ZMVVNIICYmIHMtPnN0YXR1cyAhPSBGSU5JU0hfU1RBVEUpKSB7CisgICAgICAgIGJsb2NrX3N0YXRlIGJzdGF0ZTsKKworICAgICAgICBic3RhdGUgPSBzLT5sZXZlbCA9PSAwID8gZGVmbGF0ZV9zdG9yZWQocywgZmx1c2gpIDoKKyAgICAgICAgICAgICAgICAgcy0+c3RyYXRlZ3kgPT0gWl9IVUZGTUFOX09OTFkgPyBkZWZsYXRlX2h1ZmYocywgZmx1c2gpIDoKKyAgICAgICAgICAgICAgICAgcy0+c3RyYXRlZ3kgPT0gWl9STEUgPyBkZWZsYXRlX3JsZShzLCBmbHVzaCkgOgorICAgICAgICAgICAgICAgICAoKihjb25maWd1cmF0aW9uX3RhYmxlW3MtPmxldmVsXS5mdW5jKSkocywgZmx1c2gpOworCisgICAgICAgIGlmIChic3RhdGUgPT0gZmluaXNoX3N0YXJ0ZWQgfHwgYnN0YXRlID09IGZpbmlzaF9kb25lKSB7CisgICAgICAgICAgICBzLT5zdGF0dXMgPSBGSU5JU0hfU1RBVEU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJzdGF0ZSA9PSBuZWVkX21vcmUgfHwgYnN0YXRlID09IGZpbmlzaF9zdGFydGVkKSB7CisgICAgICAgICAgICBpZiAoc3RybS0+YXZhaWxfb3V0ID09IDApIHsKKyAgICAgICAgICAgICAgICBzLT5sYXN0X2ZsdXNoID0gLTE7IC8qIGF2b2lkIEJVRl9FUlJPUiBuZXh0IGNhbGwsIHNlZSBhYm92ZSAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIFpfT0s7CisgICAgICAgICAgICAvKiBJZiBmbHVzaCAhPSBaX05PX0ZMVVNIICYmIGF2YWlsX291dCA9PSAwLCB0aGUgbmV4dCBjYWxsCisgICAgICAgICAgICAgKiBvZiBkZWZsYXRlIHNob3VsZCB1c2UgdGhlIHNhbWUgZmx1c2ggcGFyYW1ldGVyIHRvIG1ha2Ugc3VyZQorICAgICAgICAgICAgICogdGhhdCB0aGUgZmx1c2ggaXMgY29tcGxldGUuIFNvIHdlIGRvbid0IGhhdmUgdG8gb3V0cHV0IGFuCisgICAgICAgICAgICAgKiBlbXB0eSBibG9jayBoZXJlLCB0aGlzIHdpbGwgYmUgZG9uZSBhdCBuZXh0IGNhbGwuIFRoaXMgYWxzbworICAgICAgICAgICAgICogZW5zdXJlcyB0aGF0IGZvciBhIHZlcnkgc21hbGwgb3V0cHV0IGJ1ZmZlciwgd2UgZW1pdCBhdCBtb3N0CisgICAgICAgICAgICAgKiBvbmUgZW1wdHkgYmxvY2suCisgICAgICAgICAgICAgKi8KKyAgICAgICAgfQorICAgICAgICBpZiAoYnN0YXRlID09IGJsb2NrX2RvbmUpIHsKKyAgICAgICAgICAgIGlmIChmbHVzaCA9PSBaX1BBUlRJQUxfRkxVU0gpIHsKKyAgICAgICAgICAgICAgICBfdHJfYWxpZ24ocyk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGZsdXNoICE9IFpfQkxPQ0spIHsgLyogRlVMTF9GTFVTSCBvciBTWU5DX0ZMVVNIICovCisgICAgICAgICAgICAgICAgX3RyX3N0b3JlZF9ibG9jayhzLCAoY2hhciopMCwgMEwsIDApOworICAgICAgICAgICAgICAgIC8qIEZvciBhIGZ1bGwgZmx1c2gsIHRoaXMgZW1wdHkgYmxvY2sgd2lsbCBiZSByZWNvZ25pemVkCisgICAgICAgICAgICAgICAgICogYXMgYSBzcGVjaWFsIG1hcmtlciBieSBpbmZsYXRlX3N5bmMoKS4KKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBpZiAoZmx1c2ggPT0gWl9GVUxMX0ZMVVNIKSB7CisgICAgICAgICAgICAgICAgICAgIENMRUFSX0hBU0gocyk7ICAgICAgICAgICAgIC8qIGZvcmdldCBoaXN0b3J5ICovCisgICAgICAgICAgICAgICAgICAgIGlmIChzLT5sb29rYWhlYWQgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcy0+c3Ryc3RhcnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgcy0+YmxvY2tfc3RhcnQgPSAwTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHMtPmluc2VydCA9IDA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmbHVzaF9wZW5kaW5nKHN0cm0pOworICAgICAgICAgICAgaWYgKHN0cm0tPmF2YWlsX291dCA9PSAwKSB7CisgICAgICAgICAgICAgIHMtPmxhc3RfZmx1c2ggPSAtMTsgLyogYXZvaWQgQlVGX0VSUk9SIGF0IG5leHQgY2FsbCwgc2VlIGFib3ZlICovCisgICAgICAgICAgICAgIHJldHVybiBaX09LOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGZsdXNoICE9IFpfRklOSVNIKSByZXR1cm4gWl9PSzsKKyAgICBpZiAocy0+d3JhcCA8PSAwKSByZXR1cm4gWl9TVFJFQU1fRU5EOworCisgICAgLyogV3JpdGUgdGhlIHRyYWlsZXIgKi8KKyNpZmRlZiBHWklQCisgICAgaWYgKHMtPndyYXAgPT0gMikgeworICAgICAgICBwdXRfYnl0ZShzLCAoQnl0ZSkoc3RybS0+YWRsZXIgJiAweGZmKSk7CisgICAgICAgIHB1dF9ieXRlKHMsIChCeXRlKSgoc3RybS0+YWRsZXIgPj4gOCkgJiAweGZmKSk7CisgICAgICAgIHB1dF9ieXRlKHMsIChCeXRlKSgoc3RybS0+YWRsZXIgPj4gMTYpICYgMHhmZikpOworICAgICAgICBwdXRfYnl0ZShzLCAoQnl0ZSkoKHN0cm0tPmFkbGVyID4+IDI0KSAmIDB4ZmYpKTsKKyAgICAgICAgcHV0X2J5dGUocywgKEJ5dGUpKHN0cm0tPnRvdGFsX2luICYgMHhmZikpOworICAgICAgICBwdXRfYnl0ZShzLCAoQnl0ZSkoKHN0cm0tPnRvdGFsX2luID4+IDgpICYgMHhmZikpOworICAgICAgICBwdXRfYnl0ZShzLCAoQnl0ZSkoKHN0cm0tPnRvdGFsX2luID4+IDE2KSAmIDB4ZmYpKTsKKyAgICAgICAgcHV0X2J5dGUocywgKEJ5dGUpKChzdHJtLT50b3RhbF9pbiA+PiAyNCkgJiAweGZmKSk7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAgIHsKKyAgICAgICAgcHV0U2hvcnRNU0IocywgKHVJbnQpKHN0cm0tPmFkbGVyID4+IDE2KSk7CisgICAgICAgIHB1dFNob3J0TVNCKHMsICh1SW50KShzdHJtLT5hZGxlciAmIDB4ZmZmZikpOworICAgIH0KKyAgICBmbHVzaF9wZW5kaW5nKHN0cm0pOworICAgIC8qIElmIGF2YWlsX291dCBpcyB6ZXJvLCB0aGUgYXBwbGljYXRpb24gd2lsbCBjYWxsIGRlZmxhdGUgYWdhaW4KKyAgICAgKiB0byBmbHVzaCB0aGUgcmVzdC4KKyAgICAgKi8KKyAgICBpZiAocy0+d3JhcCA+IDApIHMtPndyYXAgPSAtcy0+d3JhcDsgLyogd3JpdGUgdGhlIHRyYWlsZXIgb25seSBvbmNlISAqLworICAgIHJldHVybiBzLT5wZW5kaW5nICE9IDAgPyBaX09LIDogWl9TVFJFQU1fRU5EOworfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCitpbnQgWkVYUE9SVCBkZWZsYXRlRW5kIChzdHJtKQorICAgIHpfc3RyZWFtcCBzdHJtOworeworICAgIGludCBzdGF0dXM7CisKKyAgICBpZiAoZGVmbGF0ZVN0YXRlQ2hlY2soc3RybSkpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKworICAgIHN0YXR1cyA9IHN0cm0tPnN0YXRlLT5zdGF0dXM7CisKKyAgICAvKiBEZWFsbG9jYXRlIGluIHJldmVyc2Ugb3JkZXIgb2YgYWxsb2NhdGlvbnM6ICovCisgICAgVFJZX0ZSRUUoc3RybSwgc3RybS0+c3RhdGUtPnBlbmRpbmdfYnVmKTsKKyAgICBUUllfRlJFRShzdHJtLCBzdHJtLT5zdGF0ZS0+aGVhZCk7CisgICAgVFJZX0ZSRUUoc3RybSwgc3RybS0+c3RhdGUtPnByZXYpOworICAgIFRSWV9GUkVFKHN0cm0sIHN0cm0tPnN0YXRlLT53aW5kb3cpOworCisgICAgWkZSRUUoc3RybSwgc3RybS0+c3RhdGUpOworICAgIHN0cm0tPnN0YXRlID0gWl9OVUxMOworCisgICAgcmV0dXJuIHN0YXR1cyA9PSBCVVNZX1NUQVRFID8gWl9EQVRBX0VSUk9SIDogWl9PSzsKK30KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weSB0aGUgc291cmNlIHN0YXRlIHRvIHRoZSBkZXN0aW5hdGlvbiBzdGF0ZS4KKyAqIFRvIHNpbXBsaWZ5IHRoZSBzb3VyY2UsIHRoaXMgaXMgbm90IHN1cHBvcnRlZCBmb3IgMTYtYml0IE1TRE9TICh3aGljaAorICogZG9lc24ndCBoYXZlIGVub3VnaCBtZW1vcnkgYW55d2F5IHRvIGR1cGxpY2F0ZSBjb21wcmVzc2lvbiBzdGF0ZXMpLgorICovCitpbnQgWkVYUE9SVCBkZWZsYXRlQ29weSAoZGVzdCwgc291cmNlKQorICAgIHpfc3RyZWFtcCBkZXN0OworICAgIHpfc3RyZWFtcCBzb3VyY2U7Cit7CisjaWZkZWYgTUFYU0VHXzY0SworICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyNlbHNlCisgICAgZGVmbGF0ZV9zdGF0ZSAqZHM7CisgICAgZGVmbGF0ZV9zdGF0ZSAqc3M7CisKKworICAgIGlmIChkZWZsYXRlU3RhdGVDaGVjayhzb3VyY2UpIHx8IGRlc3QgPT0gWl9OVUxMKSB7CisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyAgICB9CisKKyAgICBzcyA9IHNvdXJjZS0+c3RhdGU7CisKKyAgICB6bWVtY3B5KCh2b2lkcGYpZGVzdCwgKHZvaWRwZilzb3VyY2UsIHNpemVvZih6X3N0cmVhbSkpOworCisgICAgZHMgPSAoZGVmbGF0ZV9zdGF0ZSAqKSBaQUxMT0MoZGVzdCwgMSwgc2l6ZW9mKGRlZmxhdGVfc3RhdGUpKTsKKyAgICBpZiAoZHMgPT0gWl9OVUxMKSByZXR1cm4gWl9NRU1fRVJST1I7CisgICAgZGVzdC0+c3RhdGUgPSAoc3RydWN0IGludGVybmFsX3N0YXRlIEZBUiAqKSBkczsKKyAgICB6bWVtY3B5KCh2b2lkcGYpZHMsICh2b2lkcGYpc3MsIHNpemVvZihkZWZsYXRlX3N0YXRlKSk7CisgICAgZHMtPnN0cm0gPSBkZXN0OworCisgICAgZHMtPndpbmRvdyA9IChCeXRlZiAqKSBaQUxMT0MoZGVzdCwgZHMtPndfc2l6ZSwgMipzaXplb2YoQnl0ZSkpOworICAgIGRzLT5wcmV2ICAgPSAoUG9zZiAqKSAgWkFMTE9DKGRlc3QsIGRzLT53X3NpemUsIHNpemVvZihQb3MpKTsKKyAgICBkcy0+aGVhZCAgID0gKFBvc2YgKikgIFpBTExPQyhkZXN0LCBkcy0+aGFzaF9zaXplLCBzaXplb2YoUG9zKSk7CisgICAgZHMtPnBlbmRpbmdfYnVmID0gKHVjaGYgKikgWkFMTE9DKGRlc3QsIGRzLT5saXRfYnVmc2l6ZSwgNCk7CisKKyAgICBpZiAoZHMtPndpbmRvdyA9PSBaX05VTEwgfHwgZHMtPnByZXYgPT0gWl9OVUxMIHx8IGRzLT5oZWFkID09IFpfTlVMTCB8fAorICAgICAgICBkcy0+cGVuZGluZ19idWYgPT0gWl9OVUxMKSB7CisgICAgICAgIGRlZmxhdGVFbmQgKGRlc3QpOworICAgICAgICByZXR1cm4gWl9NRU1fRVJST1I7CisgICAgfQorICAgIC8qIGZvbGxvd2luZyB6bWVtY3B5IGRvIG5vdCB3b3JrIGZvciAxNi1iaXQgTVNET1MgKi8KKyAgICB6bWVtY3B5KGRzLT53aW5kb3csIHNzLT53aW5kb3csIGRzLT53X3NpemUgKiAyICogc2l6ZW9mKEJ5dGUpKTsKKyAgICB6bWVtY3B5KCh2b2lkcGYpZHMtPnByZXYsICh2b2lkcGYpc3MtPnByZXYsIGRzLT53X3NpemUgKiBzaXplb2YoUG9zKSk7CisgICAgem1lbWNweSgodm9pZHBmKWRzLT5oZWFkLCAodm9pZHBmKXNzLT5oZWFkLCBkcy0+aGFzaF9zaXplICogc2l6ZW9mKFBvcykpOworICAgIHptZW1jcHkoZHMtPnBlbmRpbmdfYnVmLCBzcy0+cGVuZGluZ19idWYsICh1SW50KWRzLT5wZW5kaW5nX2J1Zl9zaXplKTsKKworICAgIGRzLT5wZW5kaW5nX291dCA9IGRzLT5wZW5kaW5nX2J1ZiArIChzcy0+cGVuZGluZ19vdXQgLSBzcy0+cGVuZGluZ19idWYpOworICAgIGRzLT5zeW1fYnVmID0gZHMtPnBlbmRpbmdfYnVmICsgZHMtPmxpdF9idWZzaXplOworCisgICAgZHMtPmxfZGVzYy5keW5fdHJlZSA9IGRzLT5keW5fbHRyZWU7CisgICAgZHMtPmRfZGVzYy5keW5fdHJlZSA9IGRzLT5keW5fZHRyZWU7CisgICAgZHMtPmJsX2Rlc2MuZHluX3RyZWUgPSBkcy0+YmxfdHJlZTsKKworICAgIHJldHVybiBaX09LOworI2VuZGlmIC8qIE1BWFNFR182NEsgKi8KK30KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBSZWFkIGEgbmV3IGJ1ZmZlciBmcm9tIHRoZSBjdXJyZW50IGlucHV0IHN0cmVhbSwgdXBkYXRlIHRoZSBhZGxlcjMyCisgKiBhbmQgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIHJlYWQuICBBbGwgZGVmbGF0ZSgpIGlucHV0IGdvZXMgdGhyb3VnaAorICogdGhpcyBmdW5jdGlvbiBzbyBzb21lIGFwcGxpY2F0aW9ucyBtYXkgd2lzaCB0byBtb2RpZnkgaXQgdG8gYXZvaWQKKyAqIGFsbG9jYXRpbmcgYSBsYXJnZSBzdHJtLT5uZXh0X2luIGJ1ZmZlciBhbmQgY29weWluZyBmcm9tIGl0LgorICogKFNlZSBhbHNvIGZsdXNoX3BlbmRpbmcoKSkuCisgKi8KK2xvY2FsIHVuc2lnbmVkIHJlYWRfYnVmKHN0cm0sIGJ1Ziwgc2l6ZSkKKyAgICB6X3N0cmVhbXAgc3RybTsKKyAgICBCeXRlZiAqYnVmOworICAgIHVuc2lnbmVkIHNpemU7Cit7CisgICAgdW5zaWduZWQgbGVuID0gc3RybS0+YXZhaWxfaW47CisKKyAgICBpZiAobGVuID4gc2l6ZSkgbGVuID0gc2l6ZTsKKyAgICBpZiAobGVuID09IDApIHJldHVybiAwOworCisgICAgc3RybS0+YXZhaWxfaW4gIC09IGxlbjsKKworICAgIHptZW1jcHkoYnVmLCBzdHJtLT5uZXh0X2luLCBsZW4pOworICAgIGlmIChzdHJtLT5zdGF0ZS0+d3JhcCA9PSAxKSB7CisgICAgICAgIHN0cm0tPmFkbGVyID0gYWRsZXIzMihzdHJtLT5hZGxlciwgYnVmLCBsZW4pOworICAgIH0KKyNpZmRlZiBHWklQCisgICAgZWxzZSBpZiAoc3RybS0+c3RhdGUtPndyYXAgPT0gMikgeworICAgICAgICBzdHJtLT5hZGxlciA9IGNyYzMyKHN0cm0tPmFkbGVyLCBidWYsIGxlbik7CisgICAgfQorI2VuZGlmCisgICAgc3RybS0+bmV4dF9pbiAgKz0gbGVuOworICAgIHN0cm0tPnRvdGFsX2luICs9IGxlbjsKKworICAgIHJldHVybiBsZW47Cit9CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogSW5pdGlhbGl6ZSB0aGUgImxvbmdlc3QgbWF0Y2giIHJvdXRpbmVzIGZvciBhIG5ldyB6bGliIHN0cmVhbQorICovCitsb2NhbCB2b2lkIGxtX2luaXQgKHMpCisgICAgZGVmbGF0ZV9zdGF0ZSAqczsKK3sKKyAgICBzLT53aW5kb3dfc2l6ZSA9ICh1bGcpMkwqcy0+d19zaXplOworCisgICAgQ0xFQVJfSEFTSChzKTsKKworICAgIC8qIFNldCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnM6CisgICAgICovCisgICAgcy0+bWF4X2xhenlfbWF0Y2ggICA9IGNvbmZpZ3VyYXRpb25fdGFibGVbcy0+bGV2ZWxdLm1heF9sYXp5OworICAgIHMtPmdvb2RfbWF0Y2ggICAgICAgPSBjb25maWd1cmF0aW9uX3RhYmxlW3MtPmxldmVsXS5nb29kX2xlbmd0aDsKKyAgICBzLT5uaWNlX21hdGNoICAgICAgID0gY29uZmlndXJhdGlvbl90YWJsZVtzLT5sZXZlbF0ubmljZV9sZW5ndGg7CisgICAgcy0+bWF4X2NoYWluX2xlbmd0aCA9IGNvbmZpZ3VyYXRpb25fdGFibGVbcy0+bGV2ZWxdLm1heF9jaGFpbjsKKworICAgIHMtPnN0cnN0YXJ0ID0gMDsKKyAgICBzLT5ibG9ja19zdGFydCA9IDBMOworICAgIHMtPmxvb2thaGVhZCA9IDA7CisgICAgcy0+aW5zZXJ0ID0gMDsKKyAgICBzLT5tYXRjaF9sZW5ndGggPSBzLT5wcmV2X2xlbmd0aCA9IE1JTl9NQVRDSC0xOworICAgIHMtPm1hdGNoX2F2YWlsYWJsZSA9IDA7CisgICAgcy0+aW5zX2ggPSAwOworI2lmbmRlZiBGQVNURVNUCisjaWZkZWYgQVNNVgorICAgIG1hdGNoX2luaXQoKTsgLyogaW5pdGlhbGl6ZSB0aGUgYXNtIGNvZGUgKi8KKyNlbmRpZgorI2VuZGlmCit9CisKKyNpZm5kZWYgRkFTVEVTVAorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBTZXQgbWF0Y2hfc3RhcnQgdG8gdGhlIGxvbmdlc3QgbWF0Y2ggc3RhcnRpbmcgYXQgdGhlIGdpdmVuIHN0cmluZyBhbmQKKyAqIHJldHVybiBpdHMgbGVuZ3RoLiBNYXRjaGVzIHNob3J0ZXIgb3IgZXF1YWwgdG8gcHJldl9sZW5ndGggYXJlIGRpc2NhcmRlZCwKKyAqIGluIHdoaWNoIGNhc2UgdGhlIHJlc3VsdCBpcyBlcXVhbCB0byBwcmV2X2xlbmd0aCBhbmQgbWF0Y2hfc3RhcnQgaXMKKyAqIGdhcmJhZ2UuCisgKiBJTiBhc3NlcnRpb25zOiBjdXJfbWF0Y2ggaXMgdGhlIGhlYWQgb2YgdGhlIGhhc2ggY2hhaW4gZm9yIHRoZSBjdXJyZW50CisgKiAgIHN0cmluZyAoc3Ryc3RhcnQpIGFuZCBpdHMgZGlzdGFuY2UgaXMgPD0gTUFYX0RJU1QsIGFuZCBwcmV2X2xlbmd0aCA+PSAxCisgKiBPVVQgYXNzZXJ0aW9uOiB0aGUgbWF0Y2ggbGVuZ3RoIGlzIG5vdCBncmVhdGVyIHRoYW4gcy0+bG9va2FoZWFkLgorICovCisjaWZuZGVmIEFTTVYKKy8qIEZvciA4MHg4NiBhbmQgNjgweDAsIGFuIG9wdGltaXplZCB2ZXJzaW9uIHdpbGwgYmUgcHJvdmlkZWQgaW4gbWF0Y2guYXNtIG9yCisgKiBtYXRjaC5TLiBUaGUgY29kZSB3aWxsIGJlIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50LgorICovCitsb2NhbCB1SW50IGxvbmdlc3RfbWF0Y2gocywgY3VyX21hdGNoKQorICAgIGRlZmxhdGVfc3RhdGUgKnM7CisgICAgSVBvcyBjdXJfbWF0Y2g7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjdXJyZW50IG1hdGNoICovCit7CisgICAgdW5zaWduZWQgY2hhaW5fbGVuZ3RoID0gcy0+bWF4X2NoYWluX2xlbmd0aDsvKiBtYXggaGFzaCBjaGFpbiBsZW5ndGggKi8KKyAgICByZWdpc3RlciBCeXRlZiAqc2NhbiA9IHMtPndpbmRvdyArIHMtPnN0cnN0YXJ0OyAvKiBjdXJyZW50IHN0cmluZyAqLworICAgIHJlZ2lzdGVyIEJ5dGVmICptYXRjaDsgICAgICAgICAgICAgICAgICAgICAgLyogbWF0Y2hlZCBzdHJpbmcgKi8KKyAgICByZWdpc3RlciBpbnQgbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxlbmd0aCBvZiBjdXJyZW50IG1hdGNoICovCisgICAgaW50IGJlc3RfbGVuID0gKGludClzLT5wcmV2X2xlbmd0aDsgICAgICAgICAvKiBiZXN0IG1hdGNoIGxlbmd0aCBzbyBmYXIgKi8KKyAgICBpbnQgbmljZV9tYXRjaCA9IHMtPm5pY2VfbWF0Y2g7ICAgICAgICAgICAgIC8qIHN0b3AgaWYgbWF0Y2ggbG9uZyBlbm91Z2ggKi8KKyAgICBJUG9zIGxpbWl0ID0gcy0+c3Ryc3RhcnQgPiAoSVBvcylNQVhfRElTVChzKSA/CisgICAgICAgIHMtPnN0cnN0YXJ0IC0gKElQb3MpTUFYX0RJU1QocykgOiBOSUw7CisgICAgLyogU3RvcCB3aGVuIGN1cl9tYXRjaCBiZWNvbWVzIDw9IGxpbWl0LiBUbyBzaW1wbGlmeSB0aGUgY29kZSwKKyAgICAgKiB3ZSBwcmV2ZW50IG1hdGNoZXMgd2l0aCB0aGUgc3RyaW5nIG9mIHdpbmRvdyBpbmRleCAwLgorICAgICAqLworICAgIFBvc2YgKnByZXYgPSBzLT5wcmV2OworICAgIHVJbnQgd21hc2sgPSBzLT53X21hc2s7CisKKyNpZmRlZiBVTkFMSUdORURfT0sKKyAgICAvKiBDb21wYXJlIHR3byBieXRlcyBhdCBhIHRpbWUuIE5vdGU6IHRoaXMgaXMgbm90IGFsd2F5cyBiZW5lZmljaWFsLgorICAgICAqIFRyeSB3aXRoIGFuZCB3aXRob3V0IC1EVU5BTElHTkVEX09LIHRvIGNoZWNrLgorICAgICAqLworICAgIHJlZ2lzdGVyIEJ5dGVmICpzdHJlbmQgPSBzLT53aW5kb3cgKyBzLT5zdHJzdGFydCArIE1BWF9NQVRDSCAtIDE7CisgICAgcmVnaXN0ZXIgdXNoIHNjYW5fc3RhcnQgPSAqKHVzaGYqKXNjYW47CisgICAgcmVnaXN0ZXIgdXNoIHNjYW5fZW5kICAgPSAqKHVzaGYqKShzY2FuK2Jlc3RfbGVuLTEpOworI2Vsc2UKKyAgICByZWdpc3RlciBCeXRlZiAqc3RyZW5kID0gcy0+d2luZG93ICsgcy0+c3Ryc3RhcnQgKyBNQVhfTUFUQ0g7CisgICAgcmVnaXN0ZXIgQnl0ZSBzY2FuX2VuZDEgID0gc2NhbltiZXN0X2xlbi0xXTsKKyAgICByZWdpc3RlciBCeXRlIHNjYW5fZW5kICAgPSBzY2FuW2Jlc3RfbGVuXTsKKyNlbmRpZgorCisgICAgLyogVGhlIGNvZGUgaXMgb3B0aW1pemVkIGZvciBIQVNIX0JJVFMgPj0gOCBhbmQgTUFYX01BVENILTIgbXVsdGlwbGUgb2YgMTYuCisgICAgICogSXQgaXMgZWFzeSB0byBnZXQgcmlkIG9mIHRoaXMgb3B0aW1pemF0aW9uIGlmIG5lY2Vzc2FyeS4KKyAgICAgKi8KKyAgICBBc3NlcnQocy0+aGFzaF9iaXRzID49IDggJiYgTUFYX01BVENIID09IDI1OCwgIkNvZGUgdG9vIGNsZXZlciIpOworCisgICAgLyogRG8gbm90IHdhc3RlIHRvbyBtdWNoIHRpbWUgaWYgd2UgYWxyZWFkeSBoYXZlIGEgZ29vZCBtYXRjaDogKi8KKyAgICBpZiAocy0+cHJldl9sZW5ndGggPj0gcy0+Z29vZF9tYXRjaCkgeworICAgICAgICBjaGFpbl9sZW5ndGggPj49IDI7CisgICAgfQorICAgIC8qIERvIG5vdCBsb29rIGZvciBtYXRjaGVzIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBpbnB1dC4gVGhpcyBpcyBuZWNlc3NhcnkKKyAgICAgKiB0byBtYWtlIGRlZmxhdGUgZGV0ZXJtaW5pc3RpYy4KKyAgICAgKi8KKyAgICBpZiAoKHVJbnQpbmljZV9tYXRjaCA+IHMtPmxvb2thaGVhZCkgbmljZV9tYXRjaCA9IChpbnQpcy0+bG9va2FoZWFkOworCisgICAgQXNzZXJ0KCh1bGcpcy0+c3Ryc3RhcnQgPD0gcy0+d2luZG93X3NpemUtTUlOX0xPT0tBSEVBRCwgIm5lZWQgbG9va2FoZWFkIik7CisKKyAgICBkbyB7CisgICAgICAgIEFzc2VydChjdXJfbWF0Y2ggPCBzLT5zdHJzdGFydCwgIm5vIGZ1dHVyZSIpOworICAgICAgICBtYXRjaCA9IHMtPndpbmRvdyArIGN1cl9tYXRjaDsKKworICAgICAgICAvKiBTa2lwIHRvIG5leHQgbWF0Y2ggaWYgdGhlIG1hdGNoIGxlbmd0aCBjYW5ub3QgaW5jcmVhc2UKKyAgICAgICAgICogb3IgaWYgdGhlIG1hdGNoIGxlbmd0aCBpcyBsZXNzIHRoYW4gMi4gIE5vdGUgdGhhdCB0aGUgY2hlY2tzIGJlbG93CisgICAgICAgICAqIGZvciBpbnN1ZmZpY2llbnQgbG9va2FoZWFkIG9ubHkgb2NjdXIgb2NjYXNpb25hbGx5IGZvciBwZXJmb3JtYW5jZQorICAgICAgICAgKiByZWFzb25zLiAgVGhlcmVmb3JlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdpbGwgYmUgYWNjZXNzZWQsIGFuZAorICAgICAgICAgKiBjb25kaXRpb25hbCBqdW1wcyB3aWxsIGJlIG1hZGUgdGhhdCBkZXBlbmQgb24gdGhvc2UgdmFsdWVzLgorICAgICAgICAgKiBIb3dldmVyIHRoZSBsZW5ndGggb2YgdGhlIG1hdGNoIGlzIGxpbWl0ZWQgdG8gdGhlIGxvb2thaGVhZCwgc28KKyAgICAgICAgICogdGhlIG91dHB1dCBvZiBkZWZsYXRlIGlzIG5vdCBhZmZlY3RlZCBieSB0aGUgdW5pbml0aWFsaXplZCB2YWx1ZXMuCisgICAgICAgICAqLworI2lmIChkZWZpbmVkKFVOQUxJR05FRF9PSykgJiYgTUFYX01BVENIID09IDI1OCkKKyAgICAgICAgLyogVGhpcyBjb2RlIGFzc3VtZXMgc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSA9PSAyLiBEbyBub3QgdXNlCisgICAgICAgICAqIFVOQUxJR05FRF9PSyBpZiB5b3VyIGNvbXBpbGVyIHVzZXMgYSBkaWZmZXJlbnQgc2l6ZS4KKyAgICAgICAgICovCisgICAgICAgIGlmICgqKHVzaGYqKShtYXRjaCtiZXN0X2xlbi0xKSAhPSBzY2FuX2VuZCB8fAorICAgICAgICAgICAgKih1c2hmKiltYXRjaCAhPSBzY2FuX3N0YXJ0KSBjb250aW51ZTsKKworICAgICAgICAvKiBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGNvbXBhcmUgc2NhblsyXSBhbmQgbWF0Y2hbMl0gc2luY2UgdGhleSBhcmUKKyAgICAgICAgICogYWx3YXlzIGVxdWFsIHdoZW4gdGhlIG90aGVyIGJ5dGVzIG1hdGNoLCBnaXZlbiB0aGF0IHRoZSBoYXNoIGtleXMKKyAgICAgICAgICogYXJlIGVxdWFsIGFuZCB0aGF0IEhBU0hfQklUUyA+PSA4LiBDb21wYXJlIDIgYnl0ZXMgYXQgYSB0aW1lIGF0CisgICAgICAgICAqIHN0cnN0YXJ0KzMsICs1LCAuLi4gdXAgdG8gc3Ryc3RhcnQrMjU3LiBXZSBjaGVjayBmb3IgaW5zdWZmaWNpZW50CisgICAgICAgICAqIGxvb2thaGVhZCBvbmx5IGV2ZXJ5IDR0aCBjb21wYXJpc29uOyB0aGUgMTI4dGggY2hlY2sgd2lsbCBiZSBtYWRlCisgICAgICAgICAqIGF0IHN0cnN0YXJ0KzI1Ny4gSWYgTUFYX01BVENILTIgaXMgbm90IGEgbXVsdGlwbGUgb2YgOCwgaXQgaXMKKyAgICAgICAgICogbmVjZXNzYXJ5IHRvIHB1dCBtb3JlIGd1YXJkIGJ5dGVzIGF0IHRoZSBlbmQgb2YgdGhlIHdpbmRvdywgb3IKKyAgICAgICAgICogdG8gY2hlY2sgbW9yZSBvZnRlbiBmb3IgaW5zdWZmaWNpZW50IGxvb2thaGVhZC4KKyAgICAgICAgICovCisgICAgICAgIEFzc2VydChzY2FuWzJdID09IG1hdGNoWzJdLCAic2NhblsyXT8iKTsKKyAgICAgICAgc2NhbisrLCBtYXRjaCsrOworICAgICAgICBkbyB7CisgICAgICAgIH0gd2hpbGUgKCoodXNoZiopKHNjYW4rPTIpID09ICoodXNoZiopKG1hdGNoKz0yKSAmJgorICAgICAgICAgICAgICAgICAqKHVzaGYqKShzY2FuKz0yKSA9PSAqKHVzaGYqKShtYXRjaCs9MikgJiYKKyAgICAgICAgICAgICAgICAgKih1c2hmKikoc2Nhbis9MikgPT0gKih1c2hmKikobWF0Y2grPTIpICYmCisgICAgICAgICAgICAgICAgICoodXNoZiopKHNjYW4rPTIpID09ICoodXNoZiopKG1hdGNoKz0yKSAmJgorICAgICAgICAgICAgICAgICBzY2FuIDwgc3RyZW5kKTsKKyAgICAgICAgLyogVGhlIGZ1bm55ICJkbyB7fSIgZ2VuZXJhdGVzIGJldHRlciBjb2RlIG9uIG1vc3QgY29tcGlsZXJzICovCisKKyAgICAgICAgLyogSGVyZSwgc2NhbiA8PSB3aW5kb3crc3Ryc3RhcnQrMjU3ICovCisgICAgICAgIEFzc2VydChzY2FuIDw9IHMtPndpbmRvdysodW5zaWduZWQpKHMtPndpbmRvd19zaXplLTEpLCAid2lsZCBzY2FuIik7CisgICAgICAgIGlmICgqc2NhbiA9PSAqbWF0Y2gpIHNjYW4rKzsKKworICAgICAgICBsZW4gPSAoTUFYX01BVENIIC0gMSkgLSAoaW50KShzdHJlbmQtc2Nhbik7CisgICAgICAgIHNjYW4gPSBzdHJlbmQgLSAoTUFYX01BVENILTEpOworCisjZWxzZSAvKiBVTkFMSUdORURfT0sgKi8KKworICAgICAgICBpZiAobWF0Y2hbYmVzdF9sZW5dICAgIT0gc2Nhbl9lbmQgIHx8CisgICAgICAgICAgICBtYXRjaFtiZXN0X2xlbi0xXSAhPSBzY2FuX2VuZDEgfHwKKyAgICAgICAgICAgICptYXRjaCAgICAgICAgICAgICE9ICpzY2FuICAgICB8fAorICAgICAgICAgICAgKisrbWF0Y2ggICAgICAgICAgIT0gc2NhblsxXSkgICAgICBjb250aW51ZTsKKworICAgICAgICAvKiBUaGUgY2hlY2sgYXQgYmVzdF9sZW4tMSBjYW4gYmUgcmVtb3ZlZCBiZWNhdXNlIGl0IHdpbGwgYmUgbWFkZQorICAgICAgICAgKiBhZ2FpbiBsYXRlci4gKFRoaXMgaGV1cmlzdGljIGlzIG5vdCBhbHdheXMgYSB3aW4uKQorICAgICAgICAgKiBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGNvbXBhcmUgc2NhblsyXSBhbmQgbWF0Y2hbMl0gc2luY2UgdGhleQorICAgICAgICAgKiBhcmUgYWx3YXlzIGVxdWFsIHdoZW4gdGhlIG90aGVyIGJ5dGVzIG1hdGNoLCBnaXZlbiB0aGF0CisgICAgICAgICAqIHRoZSBoYXNoIGtleXMgYXJlIGVxdWFsIGFuZCB0aGF0IEhBU0hfQklUUyA+PSA4LgorICAgICAgICAgKi8KKyAgICAgICAgc2NhbiArPSAyLCBtYXRjaCsrOworICAgICAgICBBc3NlcnQoKnNjYW4gPT0gKm1hdGNoLCAibWF0Y2hbMl0/Iik7CisKKyAgICAgICAgLyogV2UgY2hlY2sgZm9yIGluc3VmZmljaWVudCBsb29rYWhlYWQgb25seSBldmVyeSA4dGggY29tcGFyaXNvbjsKKyAgICAgICAgICogdGhlIDI1NnRoIGNoZWNrIHdpbGwgYmUgbWFkZSBhdCBzdHJzdGFydCsyNTguCisgICAgICAgICAqLworICAgICAgICBkbyB7CisgICAgICAgIH0gd2hpbGUgKCorK3NjYW4gPT0gKisrbWF0Y2ggJiYgKisrc2NhbiA9PSAqKyttYXRjaCAmJgorICAgICAgICAgICAgICAgICAqKytzY2FuID09ICorK21hdGNoICYmICorK3NjYW4gPT0gKisrbWF0Y2ggJiYKKyAgICAgICAgICAgICAgICAgKisrc2NhbiA9PSAqKyttYXRjaCAmJiAqKytzY2FuID09ICorK21hdGNoICYmCisgICAgICAgICAgICAgICAgICorK3NjYW4gPT0gKisrbWF0Y2ggJiYgKisrc2NhbiA9PSAqKyttYXRjaCAmJgorICAgICAgICAgICAgICAgICBzY2FuIDwgc3RyZW5kKTsKKworICAgICAgICBBc3NlcnQoc2NhbiA8PSBzLT53aW5kb3crKHVuc2lnbmVkKShzLT53aW5kb3dfc2l6ZS0xKSwgIndpbGQgc2NhbiIpOworCisgICAgICAgIGxlbiA9IE1BWF9NQVRDSCAtIChpbnQpKHN0cmVuZCAtIHNjYW4pOworICAgICAgICBzY2FuID0gc3RyZW5kIC0gTUFYX01BVENIOworCisjZW5kaWYgLyogVU5BTElHTkVEX09LICovCisKKyAgICAgICAgaWYgKGxlbiA+IGJlc3RfbGVuKSB7CisgICAgICAgICAgICBzLT5tYXRjaF9zdGFydCA9IGN1cl9tYXRjaDsKKyAgICAgICAgICAgIGJlc3RfbGVuID0gbGVuOworICAgICAgICAgICAgaWYgKGxlbiA+PSBuaWNlX21hdGNoKSBicmVhazsKKyNpZmRlZiBVTkFMSUdORURfT0sKKyAgICAgICAgICAgIHNjYW5fZW5kID0gKih1c2hmKikoc2NhbitiZXN0X2xlbi0xKTsKKyNlbHNlCisgICAgICAgICAgICBzY2FuX2VuZDEgID0gc2NhbltiZXN0X2xlbi0xXTsKKyAgICAgICAgICAgIHNjYW5fZW5kICAgPSBzY2FuW2Jlc3RfbGVuXTsKKyNlbmRpZgorICAgICAgICB9CisgICAgfSB3aGlsZSAoKGN1cl9tYXRjaCA9IHByZXZbY3VyX21hdGNoICYgd21hc2tdKSA+IGxpbWl0CisgICAgICAgICAgICAgJiYgLS1jaGFpbl9sZW5ndGggIT0gMCk7CisKKyAgICBpZiAoKHVJbnQpYmVzdF9sZW4gPD0gcy0+bG9va2FoZWFkKSByZXR1cm4gKHVJbnQpYmVzdF9sZW47CisgICAgcmV0dXJuIHMtPmxvb2thaGVhZDsKK30KKyNlbmRpZiAvKiBBU01WICovCisKKyNlbHNlIC8qIEZBU1RFU1QgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBPcHRpbWl6ZWQgdmVyc2lvbiBmb3IgRkFTVEVTVCBvbmx5CisgKi8KK2xvY2FsIHVJbnQgbG9uZ2VzdF9tYXRjaChzLCBjdXJfbWF0Y2gpCisgICAgZGVmbGF0ZV9zdGF0ZSAqczsKKyAgICBJUG9zIGN1cl9tYXRjaDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGN1cnJlbnQgbWF0Y2ggKi8KK3sKKyAgICByZWdpc3RlciBCeXRlZiAqc2NhbiA9IHMtPndpbmRvdyArIHMtPnN0cnN0YXJ0OyAvKiBjdXJyZW50IHN0cmluZyAqLworICAgIHJlZ2lzdGVyIEJ5dGVmICptYXRjaDsgICAgICAgICAgICAgICAgICAgICAgIC8qIG1hdGNoZWQgc3RyaW5nICovCisgICAgcmVnaXN0ZXIgaW50IGxlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsZW5ndGggb2YgY3VycmVudCBtYXRjaCAqLworICAgIHJlZ2lzdGVyIEJ5dGVmICpzdHJlbmQgPSBzLT53aW5kb3cgKyBzLT5zdHJzdGFydCArIE1BWF9NQVRDSDsKKworICAgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXplZCBmb3IgSEFTSF9CSVRTID49IDggYW5kIE1BWF9NQVRDSC0yIG11bHRpcGxlIG9mIDE2LgorICAgICAqIEl0IGlzIGVhc3kgdG8gZ2V0IHJpZCBvZiB0aGlzIG9wdGltaXphdGlvbiBpZiBuZWNlc3NhcnkuCisgICAgICovCisgICAgQXNzZXJ0KHMtPmhhc2hfYml0cyA+PSA4ICYmIE1BWF9NQVRDSCA9PSAyNTgsICJDb2RlIHRvbyBjbGV2ZXIiKTsKKworICAgIEFzc2VydCgodWxnKXMtPnN0cnN0YXJ0IDw9IHMtPndpbmRvd19zaXplLU1JTl9MT09LQUhFQUQsICJuZWVkIGxvb2thaGVhZCIpOworCisgICAgQXNzZXJ0KGN1cl9tYXRjaCA8IHMtPnN0cnN0YXJ0LCAibm8gZnV0dXJlIik7CisKKyAgICBtYXRjaCA9IHMtPndpbmRvdyArIGN1cl9tYXRjaDsKKworICAgIC8qIFJldHVybiBmYWlsdXJlIGlmIHRoZSBtYXRjaCBsZW5ndGggaXMgbGVzcyB0aGFuIDI6CisgICAgICovCisgICAgaWYgKG1hdGNoWzBdICE9IHNjYW5bMF0gfHwgbWF0Y2hbMV0gIT0gc2NhblsxXSkgcmV0dXJuIE1JTl9NQVRDSC0xOworCisgICAgLyogVGhlIGNoZWNrIGF0IGJlc3RfbGVuLTEgY2FuIGJlIHJlbW92ZWQgYmVjYXVzZSBpdCB3aWxsIGJlIG1hZGUKKyAgICAgKiBhZ2FpbiBsYXRlci4gKFRoaXMgaGV1cmlzdGljIGlzIG5vdCBhbHdheXMgYSB3aW4uKQorICAgICAqIEl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gY29tcGFyZSBzY2FuWzJdIGFuZCBtYXRjaFsyXSBzaW5jZSB0aGV5CisgICAgICogYXJlIGFsd2F5cyBlcXVhbCB3aGVuIHRoZSBvdGhlciBieXRlcyBtYXRjaCwgZ2l2ZW4gdGhhdAorICAgICAqIHRoZSBoYXNoIGtleXMgYXJlIGVxdWFsIGFuZCB0aGF0IEhBU0hfQklUUyA+PSA4LgorICAgICAqLworICAgIHNjYW4gKz0gMiwgbWF0Y2ggKz0gMjsKKyAgICBBc3NlcnQoKnNjYW4gPT0gKm1hdGNoLCAibWF0Y2hbMl0/Iik7CisKKyAgICAvKiBXZSBjaGVjayBmb3IgaW5zdWZmaWNpZW50IGxvb2thaGVhZCBvbmx5IGV2ZXJ5IDh0aCBjb21wYXJpc29uOworICAgICAqIHRoZSAyNTZ0aCBjaGVjayB3aWxsIGJlIG1hZGUgYXQgc3Ryc3RhcnQrMjU4LgorICAgICAqLworICAgIGRvIHsKKyAgICB9IHdoaWxlICgqKytzY2FuID09ICorK21hdGNoICYmICorK3NjYW4gPT0gKisrbWF0Y2ggJiYKKyAgICAgICAgICAgICAqKytzY2FuID09ICorK21hdGNoICYmICorK3NjYW4gPT0gKisrbWF0Y2ggJiYKKyAgICAgICAgICAgICAqKytzY2FuID09ICorK21hdGNoICYmICorK3NjYW4gPT0gKisrbWF0Y2ggJiYKKyAgICAgICAgICAgICAqKytzY2FuID09ICorK21hdGNoICYmICorK3NjYW4gPT0gKisrbWF0Y2ggJiYKKyAgICAgICAgICAgICBzY2FuIDwgc3RyZW5kKTsKKworICAgIEFzc2VydChzY2FuIDw9IHMtPndpbmRvdysodW5zaWduZWQpKHMtPndpbmRvd19zaXplLTEpLCAid2lsZCBzY2FuIik7CisKKyAgICBsZW4gPSBNQVhfTUFUQ0ggLSAoaW50KShzdHJlbmQgLSBzY2FuKTsKKworICAgIGlmIChsZW4gPCBNSU5fTUFUQ0gpIHJldHVybiBNSU5fTUFUQ0ggLSAxOworCisgICAgcy0+bWF0Y2hfc3RhcnQgPSBjdXJfbWF0Y2g7CisgICAgcmV0dXJuICh1SW50KWxlbiA8PSBzLT5sb29rYWhlYWQgPyAodUludClsZW4gOiBzLT5sb29rYWhlYWQ7Cit9CisKKyNlbmRpZiAvKiBGQVNURVNUICovCisKKyNpZmRlZiBaTElCX0RFQlVHCisKKyNkZWZpbmUgRVFVQUwgMAorLyogcmVzdWx0IG9mIG1lbWNtcCBmb3IgZXF1YWwgc3RyaW5ncyAqLworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENoZWNrIHRoYXQgdGhlIG1hdGNoIGF0IG1hdGNoX3N0YXJ0IGlzIGluZGVlZCBhIG1hdGNoLgorICovCitsb2NhbCB2b2lkIGNoZWNrX21hdGNoKHMsIHN0YXJ0LCBtYXRjaCwgbGVuZ3RoKQorICAgIGRlZmxhdGVfc3RhdGUgKnM7CisgICAgSVBvcyBzdGFydCwgbWF0Y2g7CisgICAgaW50IGxlbmd0aDsKK3sKKyAgICAvKiBjaGVjayB0aGF0IHRoZSBtYXRjaCBpcyBpbmRlZWQgYSBtYXRjaCAqLworICAgIGlmICh6bWVtY21wKHMtPndpbmRvdyArIG1hdGNoLAorICAgICAgICAgICAgICAgIHMtPndpbmRvdyArIHN0YXJ0LCBsZW5ndGgpICE9IEVRVUFMKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiIHN0YXJ0ICV1LCBtYXRjaCAldSwgbGVuZ3RoICVkXG4iLAorICAgICAgICAgICAgICAgIHN0YXJ0LCBtYXRjaCwgbGVuZ3RoKTsKKyAgICAgICAgZG8geworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlYyVjIiwgcy0+d2luZG93W21hdGNoKytdLCBzLT53aW5kb3dbc3RhcnQrK10pOworICAgICAgICB9IHdoaWxlICgtLWxlbmd0aCAhPSAwKTsKKyAgICAgICAgel9lcnJvcigiaW52YWxpZCBtYXRjaCIpOworICAgIH0KKyAgICBpZiAoel92ZXJib3NlID4gMSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwiXFxbJWQsJWRdIiwgc3RhcnQtbWF0Y2gsIGxlbmd0aCk7CisgICAgICAgIGRvIHsgcHV0YyhzLT53aW5kb3dbc3RhcnQrK10sIHN0ZGVycik7IH0gd2hpbGUgKC0tbGVuZ3RoICE9IDApOworICAgIH0KK30KKyNlbHNlCisjICBkZWZpbmUgY2hlY2tfbWF0Y2gocywgc3RhcnQsIG1hdGNoLCBsZW5ndGgpCisjZW5kaWYgLyogWkxJQl9ERUJVRyAqLworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIEZpbGwgdGhlIHdpbmRvdyB3aGVuIHRoZSBsb29rYWhlYWQgYmVjb21lcyBpbnN1ZmZpY2llbnQuCisgKiBVcGRhdGVzIHN0cnN0YXJ0IGFuZCBsb29rYWhlYWQuCisgKgorICogSU4gYXNzZXJ0aW9uOiBsb29rYWhlYWQgPCBNSU5fTE9PS0FIRUFECisgKiBPVVQgYXNzZXJ0aW9uczogc3Ryc3RhcnQgPD0gd2luZG93X3NpemUtTUlOX0xPT0tBSEVBRAorICogICAgQXQgbGVhc3Qgb25lIGJ5dGUgaGFzIGJlZW4gcmVhZCwgb3IgYXZhaWxfaW4gPT0gMDsgcmVhZHMgYXJlCisgKiAgICBwZXJmb3JtZWQgZm9yIGF0IGxlYXN0IHR3byBieXRlcyAocmVxdWlyZWQgZm9yIHRoZSB6aXAgdHJhbnNsYXRlX2VvbAorICogICAgb3B0aW9uIC0tIG5vdCBzdXBwb3J0ZWQgaGVyZSkuCisgKi8KK2xvY2FsIHZvaWQgZmlsbF93aW5kb3cocykKKyAgICBkZWZsYXRlX3N0YXRlICpzOworeworICAgIHVuc2lnbmVkIG47CisgICAgdW5zaWduZWQgbW9yZTsgICAgLyogQW1vdW50IG9mIGZyZWUgc3BhY2UgYXQgdGhlIGVuZCBvZiB0aGUgd2luZG93LiAqLworICAgIHVJbnQgd3NpemUgPSBzLT53X3NpemU7CisKKyAgICBBc3NlcnQocy0+bG9va2FoZWFkIDwgTUlOX0xPT0tBSEVBRCwgImFscmVhZHkgZW5vdWdoIGxvb2thaGVhZCIpOworCisgICAgZG8geworICAgICAgICBtb3JlID0gKHVuc2lnbmVkKShzLT53aW5kb3dfc2l6ZSAtKHVsZylzLT5sb29rYWhlYWQgLSh1bGcpcy0+c3Ryc3RhcnQpOworCisgICAgICAgIC8qIERlYWwgd2l0aCAhQCMkJSA2NEsgbGltaXQ6ICovCisgICAgICAgIGlmIChzaXplb2YoaW50KSA8PSAyKSB7CisgICAgICAgICAgICBpZiAobW9yZSA9PSAwICYmIHMtPnN0cnN0YXJ0ID09IDAgJiYgcy0+bG9va2FoZWFkID09IDApIHsKKyAgICAgICAgICAgICAgICBtb3JlID0gd3NpemU7CisKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobW9yZSA9PSAodW5zaWduZWQpKC0xKSkgeworICAgICAgICAgICAgICAgIC8qIFZlcnkgdW5saWtlbHksIGJ1dCBwb3NzaWJsZSBvbiAxNiBiaXQgbWFjaGluZSBpZgorICAgICAgICAgICAgICAgICAqIHN0cnN0YXJ0ID09IDAgJiYgbG9va2FoZWFkID09IDEgKGlucHV0IGRvbmUgYSBieXRlIGF0IHRpbWUpCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgbW9yZS0tOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyogSWYgdGhlIHdpbmRvdyBpcyBhbG1vc3QgZnVsbCBhbmQgdGhlcmUgaXMgaW5zdWZmaWNpZW50IGxvb2thaGVhZCwKKyAgICAgICAgICogbW92ZSB0aGUgdXBwZXIgaGFsZiB0byB0aGUgbG93ZXIgb25lIHRvIG1ha2Ugcm9vbSBpbiB0aGUgdXBwZXIgaGFsZi4KKyAgICAgICAgICovCisgICAgICAgIGlmIChzLT5zdHJzdGFydCA+PSB3c2l6ZStNQVhfRElTVChzKSkgeworCisgICAgICAgICAgICB6bWVtY3B5KHMtPndpbmRvdywgcy0+d2luZG93K3dzaXplLCAodW5zaWduZWQpd3NpemUgLSBtb3JlKTsKKyAgICAgICAgICAgIHMtPm1hdGNoX3N0YXJ0IC09IHdzaXplOworICAgICAgICAgICAgcy0+c3Ryc3RhcnQgICAgLT0gd3NpemU7IC8qIHdlIG5vdyBoYXZlIHN0cnN0YXJ0ID49IE1BWF9ESVNUICovCisgICAgICAgICAgICBzLT5ibG9ja19zdGFydCAtPSAobG9uZykgd3NpemU7CisgICAgICAgICAgICBpZiAocy0+aW5zZXJ0ID4gcy0+c3Ryc3RhcnQpCisgICAgICAgICAgICAgICAgcy0+aW5zZXJ0ID0gcy0+c3Ryc3RhcnQ7CisgICAgICAgICAgICBzbGlkZV9oYXNoKHMpOworICAgICAgICAgICAgbW9yZSArPSB3c2l6ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocy0+c3RybS0+YXZhaWxfaW4gPT0gMCkgYnJlYWs7CisKKyAgICAgICAgLyogSWYgdGhlcmUgd2FzIG5vIHNsaWRpbmc6CisgICAgICAgICAqICAgIHN0cnN0YXJ0IDw9IFdTSVpFK01BWF9ESVNULTEgJiYgbG9va2FoZWFkIDw9IE1JTl9MT09LQUhFQUQgLSAxICYmCisgICAgICAgICAqICAgIG1vcmUgPT0gd2luZG93X3NpemUgLSBsb29rYWhlYWQgLSBzdHJzdGFydAorICAgICAgICAgKiA9PiBtb3JlID49IHdpbmRvd19zaXplIC0gKE1JTl9MT09LQUhFQUQtMSArIFdTSVpFICsgTUFYX0RJU1QtMSkKKyAgICAgICAgICogPT4gbW9yZSA+PSB3aW5kb3dfc2l6ZSAtIDIqV1NJWkUgKyAyCisgICAgICAgICAqIEluIHRoZSBCSUdfTUVNIG9yIE1NQVAgY2FzZSAobm90IHlldCBzdXBwb3J0ZWQpLAorICAgICAgICAgKiAgIHdpbmRvd19zaXplID09IGlucHV0X3NpemUgKyBNSU5fTE9PS0FIRUFEICAmJgorICAgICAgICAgKiAgIHN0cnN0YXJ0ICsgcy0+bG9va2FoZWFkIDw9IGlucHV0X3NpemUgPT4gbW9yZSA+PSBNSU5fTE9PS0FIRUFELgorICAgICAgICAgKiBPdGhlcndpc2UsIHdpbmRvd19zaXplID09IDIqV1NJWkUgc28gbW9yZSA+PSAyLgorICAgICAgICAgKiBJZiB0aGVyZSB3YXMgc2xpZGluZywgbW9yZSA+PSBXU0laRS4gU28gaW4gYWxsIGNhc2VzLCBtb3JlID49IDIuCisgICAgICAgICAqLworICAgICAgICBBc3NlcnQobW9yZSA+PSAyLCAibW9yZSA8IDIiKTsKKworICAgICAgICBuID0gcmVhZF9idWYocy0+c3RybSwgcy0+d2luZG93ICsgcy0+c3Ryc3RhcnQgKyBzLT5sb29rYWhlYWQsIG1vcmUpOworICAgICAgICBzLT5sb29rYWhlYWQgKz0gbjsKKworICAgICAgICAvKiBJbml0aWFsaXplIHRoZSBoYXNoIHZhbHVlIG5vdyB0aGF0IHdlIGhhdmUgc29tZSBpbnB1dDogKi8KKyAgICAgICAgaWYgKHMtPmxvb2thaGVhZCArIHMtPmluc2VydCA+PSBNSU5fTUFUQ0gpIHsKKyAgICAgICAgICAgIHVJbnQgc3RyID0gcy0+c3Ryc3RhcnQgLSBzLT5pbnNlcnQ7CisgICAgICAgICAgICBzLT5pbnNfaCA9IHMtPndpbmRvd1tzdHJdOworICAgICAgICAgICAgVVBEQVRFX0hBU0gocywgcy0+aW5zX2gsIHMtPndpbmRvd1tzdHIgKyAxXSk7CisjaWYgTUlOX01BVENIICE9IDMKKyAgICAgICAgICAgIENhbGwgVVBEQVRFX0hBU0goKSBNSU5fTUFUQ0gtMyBtb3JlIHRpbWVzCisjZW5kaWYKKyAgICAgICAgICAgIHdoaWxlIChzLT5pbnNlcnQpIHsKKyAgICAgICAgICAgICAgICBVUERBVEVfSEFTSChzLCBzLT5pbnNfaCwgcy0+d2luZG93W3N0ciArIE1JTl9NQVRDSC0xXSk7CisjaWZuZGVmIEZBU1RFU1QKKyAgICAgICAgICAgICAgICBzLT5wcmV2W3N0ciAmIHMtPndfbWFza10gPSBzLT5oZWFkW3MtPmluc19oXTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIHMtPmhlYWRbcy0+aW5zX2hdID0gKFBvcylzdHI7CisgICAgICAgICAgICAgICAgc3RyKys7CisgICAgICAgICAgICAgICAgcy0+aW5zZXJ0LS07CisgICAgICAgICAgICAgICAgaWYgKHMtPmxvb2thaGVhZCArIHMtPmluc2VydCA8IE1JTl9NQVRDSCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLyogSWYgdGhlIHdob2xlIGlucHV0IGhhcyBsZXNzIHRoYW4gTUlOX01BVENIIGJ5dGVzLCBpbnNfaCBpcyBnYXJiYWdlLAorICAgICAgICAgKiBidXQgdGhpcyBpcyBub3QgaW1wb3J0YW50IHNpbmNlIG9ubHkgbGl0ZXJhbCBieXRlcyB3aWxsIGJlIGVtaXR0ZWQuCisgICAgICAgICAqLworCisgICAgfSB3aGlsZSAocy0+bG9va2FoZWFkIDwgTUlOX0xPT0tBSEVBRCAmJiBzLT5zdHJtLT5hdmFpbF9pbiAhPSAwKTsKKworICAgIC8qIElmIHRoZSBXSU5fSU5JVCBieXRlcyBhZnRlciB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGRhdGEgaGF2ZSBuZXZlciBiZWVuCisgICAgICogd3JpdHRlbiwgdGhlbiB6ZXJvIHRob3NlIGJ5dGVzIGluIG9yZGVyIHRvIGF2b2lkIG1lbW9yeSBjaGVjayByZXBvcnRzIG9mCisgICAgICogdGhlIHVzZSBvZiB1bmluaXRpYWxpemVkIChvciB1bmluaXRpYWxpc2VkIGFzIEp1bGlhbiB3cml0ZXMpIGJ5dGVzIGJ5CisgICAgICogdGhlIGxvbmdlc3QgbWF0Y2ggcm91dGluZXMuICBVcGRhdGUgdGhlIGhpZ2ggd2F0ZXIgbWFyayBmb3IgdGhlIG5leHQKKyAgICAgKiB0aW1lIHRocm91Z2ggaGVyZS4gIFdJTl9JTklUIGlzIHNldCB0byBNQVhfTUFUQ0ggc2luY2UgdGhlIGxvbmdlc3QgbWF0Y2gKKyAgICAgKiByb3V0aW5lcyBhbGxvdyBzY2FubmluZyB0byBzdHJzdGFydCArIE1BWF9NQVRDSCwgaWdub3JpbmcgbG9va2FoZWFkLgorICAgICAqLworICAgIGlmIChzLT5oaWdoX3dhdGVyIDwgcy0+d2luZG93X3NpemUpIHsKKyAgICAgICAgdWxnIGN1cnIgPSBzLT5zdHJzdGFydCArICh1bGcpKHMtPmxvb2thaGVhZCk7CisgICAgICAgIHVsZyBpbml0OworCisgICAgICAgIGlmIChzLT5oaWdoX3dhdGVyIDwgY3VycikgeworICAgICAgICAgICAgLyogUHJldmlvdXMgaGlnaCB3YXRlciBtYXJrIGJlbG93IGN1cnJlbnQgZGF0YSAtLSB6ZXJvIFdJTl9JTklUCisgICAgICAgICAgICAgKiBieXRlcyBvciB1cCB0byBlbmQgb2Ygd2luZG93LCB3aGljaGV2ZXIgaXMgbGVzcy4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaW5pdCA9IHMtPndpbmRvd19zaXplIC0gY3VycjsKKyAgICAgICAgICAgIGlmIChpbml0ID4gV0lOX0lOSVQpCisgICAgICAgICAgICAgICAgaW5pdCA9IFdJTl9JTklUOworICAgICAgICAgICAgem1lbXplcm8ocy0+d2luZG93ICsgY3VyciwgKHVuc2lnbmVkKWluaXQpOworICAgICAgICAgICAgcy0+aGlnaF93YXRlciA9IGN1cnIgKyBpbml0OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHMtPmhpZ2hfd2F0ZXIgPCAodWxnKWN1cnIgKyBXSU5fSU5JVCkgeworICAgICAgICAgICAgLyogSGlnaCB3YXRlciBtYXJrIGF0IG9yIGFib3ZlIGN1cnJlbnQgZGF0YSwgYnV0IGJlbG93IGN1cnJlbnQgZGF0YQorICAgICAgICAgICAgICogcGx1cyBXSU5fSU5JVCAtLSB6ZXJvIG91dCB0byBjdXJyZW50IGRhdGEgcGx1cyBXSU5fSU5JVCwgb3IgdXAKKyAgICAgICAgICAgICAqIHRvIGVuZCBvZiB3aW5kb3csIHdoaWNoZXZlciBpcyBsZXNzLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBpbml0ID0gKHVsZyljdXJyICsgV0lOX0lOSVQgLSBzLT5oaWdoX3dhdGVyOworICAgICAgICAgICAgaWYgKGluaXQgPiBzLT53aW5kb3dfc2l6ZSAtIHMtPmhpZ2hfd2F0ZXIpCisgICAgICAgICAgICAgICAgaW5pdCA9IHMtPndpbmRvd19zaXplIC0gcy0+aGlnaF93YXRlcjsKKyAgICAgICAgICAgIHptZW16ZXJvKHMtPndpbmRvdyArIHMtPmhpZ2hfd2F0ZXIsICh1bnNpZ25lZClpbml0KTsKKyAgICAgICAgICAgIHMtPmhpZ2hfd2F0ZXIgKz0gaW5pdDsKKyAgICAgICAgfQorICAgIH0KKworICAgIEFzc2VydCgodWxnKXMtPnN0cnN0YXJ0IDw9IHMtPndpbmRvd19zaXplIC0gTUlOX0xPT0tBSEVBRCwKKyAgICAgICAgICAgIm5vdCBlbm91Z2ggcm9vbSBmb3Igc2VhcmNoIik7Cit9CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogRmx1c2ggdGhlIGN1cnJlbnQgYmxvY2ssIHdpdGggZ2l2ZW4gZW5kLW9mLWZpbGUgZmxhZy4KKyAqIElOIGFzc2VydGlvbjogc3Ryc3RhcnQgaXMgc2V0IHRvIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgbWF0Y2guCisgKi8KKyNkZWZpbmUgRkxVU0hfQkxPQ0tfT05MWShzLCBsYXN0KSB7IFwKKyAgIF90cl9mbHVzaF9ibG9jayhzLCAocy0+YmxvY2tfc3RhcnQgPj0gMEwgPyBcCisgICAgICAgICAgICAgICAgICAgKGNoYXJmICopJnMtPndpbmRvd1sodW5zaWduZWQpcy0+YmxvY2tfc3RhcnRdIDogXAorICAgICAgICAgICAgICAgICAgIChjaGFyZiAqKVpfTlVMTCksIFwKKyAgICAgICAgICAgICAgICAodWxnKSgobG9uZylzLT5zdHJzdGFydCAtIHMtPmJsb2NrX3N0YXJ0KSwgXAorICAgICAgICAgICAgICAgIChsYXN0KSk7IFwKKyAgIHMtPmJsb2NrX3N0YXJ0ID0gcy0+c3Ryc3RhcnQ7IFwKKyAgIGZsdXNoX3BlbmRpbmcocy0+c3RybSk7IFwKKyAgIFRyYWNldigoc3RkZXJyLCJbRkxVU0hdIikpOyBcCit9CisKKy8qIFNhbWUgYnV0IGZvcmNlIHByZW1hdHVyZSBleGl0IGlmIG5lY2Vzc2FyeS4gKi8KKyNkZWZpbmUgRkxVU0hfQkxPQ0socywgbGFzdCkgeyBcCisgICBGTFVTSF9CTE9DS19PTkxZKHMsIGxhc3QpOyBcCisgICBpZiAocy0+c3RybS0+YXZhaWxfb3V0ID09IDApIHJldHVybiAobGFzdCkgPyBmaW5pc2hfc3RhcnRlZCA6IG5lZWRfbW9yZTsgXAorfQorCisvKiBNYXhpbXVtIHN0b3JlZCBibG9jayBsZW5ndGggaW4gZGVmbGF0ZSBmb3JtYXQgKG5vdCBpbmNsdWRpbmcgaGVhZGVyKS4gKi8KKyNkZWZpbmUgTUFYX1NUT1JFRCA2NTUzNQorCisvKiBNaW5pbXVtIG9mIGEgYW5kIGIuICovCisjZGVmaW5lIE1JTihhLCBiKSAoKGEpID4gKGIpID8gKGIpIDogKGEpKQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHkgd2l0aG91dCBjb21wcmVzc2lvbiBhcyBtdWNoIGFzIHBvc3NpYmxlIGZyb20gdGhlIGlucHV0IHN0cmVhbSwgcmV0dXJuCisgKiB0aGUgY3VycmVudCBibG9jayBzdGF0ZS4KKyAqCisgKiBJbiBjYXNlIGRlZmxhdGVQYXJhbXMoKSBpcyB1c2VkIHRvIGxhdGVyIHN3aXRjaCB0byBhIG5vbi16ZXJvIGNvbXByZXNzaW9uCisgKiBsZXZlbCwgcy0+bWF0Y2hlcyAob3RoZXJ3aXNlIHVudXNlZCB3aGVuIHN0b3JpbmcpIGtlZXBzIHRyYWNrIG9mIHRoZSBudW1iZXIKKyAqIG9mIGhhc2ggdGFibGUgc2xpZGVzIHRvIHBlcmZvcm0uIElmIHMtPm1hdGNoZXMgaXMgMSwgdGhlbiBvbmUgaGFzaCB0YWJsZQorICogc2xpZGUgd2lsbCBiZSBkb25lIHdoZW4gc3dpdGNoaW5nLiBJZiBzLT5tYXRjaGVzIGlzIDIsIHRoZSBtYXhpbXVtIHZhbHVlCisgKiBhbGxvd2VkIGhlcmUsIHRoZW4gdGhlIGhhc2ggdGFibGUgd2lsbCBiZSBjbGVhcmVkLCBzaW5jZSB0d28gb3IgbW9yZSBzbGlkZXMKKyAqIGlzIHRoZSBzYW1lIGFzIGEgY2xlYXIuCisgKgorICogZGVmbGF0ZV9zdG9yZWQoKSBpcyB3cml0dGVuIHRvIG1pbmltaXplIHRoZSBudW1iZXIgb2YgdGltZXMgYW4gaW5wdXQgYnl0ZSBpcworICogY29waWVkLiBJdCBpcyBtb3N0IGVmZmljaWVudCB3aXRoIGxhcmdlIGlucHV0IGFuZCBvdXRwdXQgYnVmZmVycywgd2hpY2gKKyAqIG1heGltaXplcyB0aGUgb3Bwb3J0dW5pdGVzIHRvIGhhdmUgYSBzaW5nbGUgY29weSBmcm9tIG5leHRfaW4gdG8gbmV4dF9vdXQuCisgKi8KK2xvY2FsIGJsb2NrX3N0YXRlIGRlZmxhdGVfc3RvcmVkKHMsIGZsdXNoKQorICAgIGRlZmxhdGVfc3RhdGUgKnM7CisgICAgaW50IGZsdXNoOworeworICAgIC8qIFNtYWxsZXN0IHdvcnRoeSBibG9jayBzaXplIHdoZW4gbm90IGZsdXNoaW5nIG9yIGZpbmlzaGluZy4gQnkgZGVmYXVsdAorICAgICAqIHRoaXMgaXMgMzJLLiBUaGlzIGNhbiBiZSBhcyBzbWFsbCBhcyA1MDcgYnl0ZXMgZm9yIG1lbUxldmVsID09IDEuIEZvcgorICAgICAqIGxhcmdlIGlucHV0IGFuZCBvdXRwdXQgYnVmZmVycywgdGhlIHN0b3JlZCBibG9jayBzaXplIHdpbGwgYmUgbGFyZ2VyLgorICAgICAqLworICAgIHVuc2lnbmVkIG1pbl9ibG9jayA9IE1JTihzLT5wZW5kaW5nX2J1Zl9zaXplIC0gNSwgcy0+d19zaXplKTsKKworICAgIC8qIENvcHkgYXMgbWFueSBtaW5fYmxvY2sgb3IgbGFyZ2VyIHN0b3JlZCBibG9ja3MgZGlyZWN0bHkgdG8gbmV4dF9vdXQgYXMKKyAgICAgKiBwb3NzaWJsZS4gSWYgZmx1c2hpbmcsIGNvcHkgdGhlIHJlbWFpbmluZyBhdmFpbGFibGUgaW5wdXQgdG8gbmV4dF9vdXQgYXMKKyAgICAgKiBzdG9yZWQgYmxvY2tzLCBpZiB0aGVyZSBpcyBlbm91Z2ggc3BhY2UuCisgICAgICovCisgICAgdW5zaWduZWQgbGVuLCBsZWZ0LCBoYXZlLCBsYXN0ID0gMDsKKyAgICB1bnNpZ25lZCB1c2VkID0gcy0+c3RybS0+YXZhaWxfaW47CisgICAgZG8geworICAgICAgICAvKiBTZXQgbGVuIHRvIHRoZSBtYXhpbXVtIHNpemUgYmxvY2sgdGhhdCB3ZSBjYW4gY29weSBkaXJlY3RseSB3aXRoIHRoZQorICAgICAgICAgKiBhdmFpbGFibGUgaW5wdXQgZGF0YSBhbmQgb3V0cHV0IHNwYWNlLiBTZXQgbGVmdCB0byBob3cgbXVjaCBvZiB0aGF0CisgICAgICAgICAqIHdvdWxkIGJlIGNvcGllZCBmcm9tIHdoYXQncyBsZWZ0IGluIHRoZSB3aW5kb3cuCisgICAgICAgICAqLworICAgICAgICBsZW4gPSBNQVhfU1RPUkVEOyAgICAgICAvKiBtYXhpbXVtIGRlZmxhdGUgc3RvcmVkIGJsb2NrIGxlbmd0aCAqLworICAgICAgICBoYXZlID0gKHMtPmJpX3ZhbGlkICsgNDIpID4+IDM7ICAgICAgICAgLyogbnVtYmVyIG9mIGhlYWRlciBieXRlcyAqLworICAgICAgICBpZiAocy0+c3RybS0+YXZhaWxfb3V0IDwgaGF2ZSkgICAgICAgICAgLyogbmVlZCByb29tIGZvciBoZWFkZXIgKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgLyogbWF4aW11bSBzdG9yZWQgYmxvY2sgbGVuZ3RoIHRoYXQgd2lsbCBmaXQgaW4gYXZhaWxfb3V0OiAqLworICAgICAgICBoYXZlID0gcy0+c3RybS0+YXZhaWxfb3V0IC0gaGF2ZTsKKyAgICAgICAgbGVmdCA9IHMtPnN0cnN0YXJ0IC0gcy0+YmxvY2tfc3RhcnQ7ICAgIC8qIGJ5dGVzIGxlZnQgaW4gd2luZG93ICovCisgICAgICAgIGlmIChsZW4gPiAodWxnKWxlZnQgKyBzLT5zdHJtLT5hdmFpbF9pbikKKyAgICAgICAgICAgIGxlbiA9IGxlZnQgKyBzLT5zdHJtLT5hdmFpbF9pbjsgICAgIC8qIGxpbWl0IGxlbiB0byB0aGUgaW5wdXQgKi8KKyAgICAgICAgaWYgKGxlbiA+IGhhdmUpCisgICAgICAgICAgICBsZW4gPSBoYXZlOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsaW1pdCBsZW4gdG8gdGhlIG91dHB1dCAqLworCisgICAgICAgIC8qIElmIHRoZSBzdG9yZWQgYmxvY2sgd291bGQgYmUgbGVzcyB0aGFuIG1pbl9ibG9jayBpbiBsZW5ndGgsIG9yIGlmCisgICAgICAgICAqIHVuYWJsZSB0byBjb3B5IGFsbCBvZiB0aGUgYXZhaWxhYmxlIGlucHV0IHdoZW4gZmx1c2hpbmcsIHRoZW4gdHJ5CisgICAgICAgICAqIGNvcHlpbmcgdG8gdGhlIHdpbmRvdyBhbmQgdGhlIHBlbmRpbmcgYnVmZmVyIGluc3RlYWQuIEFsc28gZG9uJ3QKKyAgICAgICAgICogd3JpdGUgYW4gZW1wdHkgYmxvY2sgd2hlbiBmbHVzaGluZyAtLSBkZWZsYXRlKCkgZG9lcyB0aGF0LgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKGxlbiA8IG1pbl9ibG9jayAmJiAoKGxlbiA9PSAwICYmIGZsdXNoICE9IFpfRklOSVNIKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbHVzaCA9PSBaX05PX0ZMVVNIIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiAhPSBsZWZ0ICsgcy0+c3RybS0+YXZhaWxfaW4pKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyogTWFrZSBhIGR1bW15IHN0b3JlZCBibG9jayBpbiBwZW5kaW5nIHRvIGdldCB0aGUgaGVhZGVyIGJ5dGVzLAorICAgICAgICAgKiBpbmNsdWRpbmcgYW55IHBlbmRpbmcgYml0cy4gVGhpcyBhbHNvIHVwZGF0ZXMgdGhlIGRlYnVnZ2luZyBjb3VudHMuCisgICAgICAgICAqLworICAgICAgICBsYXN0ID0gZmx1c2ggPT0gWl9GSU5JU0ggJiYgbGVuID09IGxlZnQgKyBzLT5zdHJtLT5hdmFpbF9pbiA/IDEgOiAwOworICAgICAgICBfdHJfc3RvcmVkX2Jsb2NrKHMsIChjaGFyICopMCwgMEwsIGxhc3QpOworCisgICAgICAgIC8qIFJlcGxhY2UgdGhlIGxlbmd0aHMgaW4gdGhlIGR1bW15IHN0b3JlZCBibG9jayB3aXRoIGxlbi4gKi8KKyAgICAgICAgcy0+cGVuZGluZ19idWZbcy0+cGVuZGluZyAtIDRdID0gbGVuOworICAgICAgICBzLT5wZW5kaW5nX2J1ZltzLT5wZW5kaW5nIC0gM10gPSBsZW4gPj4gODsKKyAgICAgICAgcy0+cGVuZGluZ19idWZbcy0+cGVuZGluZyAtIDJdID0gfmxlbjsKKyAgICAgICAgcy0+cGVuZGluZ19idWZbcy0+cGVuZGluZyAtIDFdID0gfmxlbiA+PiA4OworCisgICAgICAgIC8qIFdyaXRlIHRoZSBzdG9yZWQgYmxvY2sgaGVhZGVyIGJ5dGVzLiAqLworICAgICAgICBmbHVzaF9wZW5kaW5nKHMtPnN0cm0pOworCisjaWZkZWYgWkxJQl9ERUJVRworICAgICAgICAvKiBVcGRhdGUgZGVidWdnaW5nIGNvdW50cyBmb3IgdGhlIGRhdGEgYWJvdXQgdG8gYmUgY29waWVkLiAqLworICAgICAgICBzLT5jb21wcmVzc2VkX2xlbiArPSBsZW4gPDwgMzsKKyAgICAgICAgcy0+Yml0c19zZW50ICs9IGxlbiA8PCAzOworI2VuZGlmCisKKyAgICAgICAgLyogQ29weSB1bmNvbXByZXNzZWQgYnl0ZXMgZnJvbSB0aGUgd2luZG93IHRvIG5leHRfb3V0LiAqLworICAgICAgICBpZiAobGVmdCkgeworICAgICAgICAgICAgaWYgKGxlZnQgPiBsZW4pCisgICAgICAgICAgICAgICAgbGVmdCA9IGxlbjsKKyAgICAgICAgICAgIHptZW1jcHkocy0+c3RybS0+bmV4dF9vdXQsIHMtPndpbmRvdyArIHMtPmJsb2NrX3N0YXJ0LCBsZWZ0KTsKKyAgICAgICAgICAgIHMtPnN0cm0tPm5leHRfb3V0ICs9IGxlZnQ7CisgICAgICAgICAgICBzLT5zdHJtLT5hdmFpbF9vdXQgLT0gbGVmdDsKKyAgICAgICAgICAgIHMtPnN0cm0tPnRvdGFsX291dCArPSBsZWZ0OworICAgICAgICAgICAgcy0+YmxvY2tfc3RhcnQgKz0gbGVmdDsKKyAgICAgICAgICAgIGxlbiAtPSBsZWZ0OworICAgICAgICB9CisKKyAgICAgICAgLyogQ29weSB1bmNvbXByZXNzZWQgYnl0ZXMgZGlyZWN0bHkgZnJvbSBuZXh0X2luIHRvIG5leHRfb3V0LCB1cGRhdGluZworICAgICAgICAgKiB0aGUgY2hlY2sgdmFsdWUuCisgICAgICAgICAqLworICAgICAgICBpZiAobGVuKSB7CisgICAgICAgICAgICByZWFkX2J1ZihzLT5zdHJtLCBzLT5zdHJtLT5uZXh0X291dCwgbGVuKTsKKyAgICAgICAgICAgIHMtPnN0cm0tPm5leHRfb3V0ICs9IGxlbjsKKyAgICAgICAgICAgIHMtPnN0cm0tPmF2YWlsX291dCAtPSBsZW47CisgICAgICAgICAgICBzLT5zdHJtLT50b3RhbF9vdXQgKz0gbGVuOworICAgICAgICB9CisgICAgfSB3aGlsZSAobGFzdCA9PSAwKTsKKworICAgIC8qIFVwZGF0ZSB0aGUgc2xpZGluZyB3aW5kb3cgd2l0aCB0aGUgbGFzdCBzLT53X3NpemUgYnl0ZXMgb2YgdGhlIGNvcGllZAorICAgICAqIGRhdGEsIG9yIGFwcGVuZCBhbGwgb2YgdGhlIGNvcGllZCBkYXRhIHRvIHRoZSBleGlzdGluZyB3aW5kb3cgaWYgbGVzcworICAgICAqIHRoYW4gcy0+d19zaXplIGJ5dGVzIHdlcmUgY29waWVkLiBBbHNvIHVwZGF0ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvCisgICAgICogaW5zZXJ0IGluIHRoZSBoYXNoIHRhYmxlcywgaW4gdGhlIGV2ZW50IHRoYXQgZGVmbGF0ZVBhcmFtcygpIHN3aXRjaGVzIHRvCisgICAgICogYSBub24temVybyBjb21wcmVzc2lvbiBsZXZlbC4KKyAgICAgKi8KKyAgICB1c2VkIC09IHMtPnN0cm0tPmF2YWlsX2luOyAgICAgIC8qIG51bWJlciBvZiBpbnB1dCBieXRlcyBkaXJlY3RseSBjb3BpZWQgKi8KKyAgICBpZiAodXNlZCkgeworICAgICAgICAvKiBJZiBhbnkgaW5wdXQgd2FzIHVzZWQsIHRoZW4gbm8gdW51c2VkIGlucHV0IHJlbWFpbnMgaW4gdGhlIHdpbmRvdywKKyAgICAgICAgICogdGhlcmVmb3JlIHMtPmJsb2NrX3N0YXJ0ID09IHMtPnN0cnN0YXJ0LgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKHVzZWQgPj0gcy0+d19zaXplKSB7ICAgIC8qIHN1cHBsYW50IHRoZSBwcmV2aW91cyBoaXN0b3J5ICovCisgICAgICAgICAgICBzLT5tYXRjaGVzID0gMjsgICAgICAgICAvKiBjbGVhciBoYXNoICovCisgICAgICAgICAgICB6bWVtY3B5KHMtPndpbmRvdywgcy0+c3RybS0+bmV4dF9pbiAtIHMtPndfc2l6ZSwgcy0+d19zaXplKTsKKyAgICAgICAgICAgIHMtPnN0cnN0YXJ0ID0gcy0+d19zaXplOworICAgICAgICAgICAgcy0+aW5zZXJ0ID0gcy0+c3Ryc3RhcnQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAocy0+d2luZG93X3NpemUgLSBzLT5zdHJzdGFydCA8PSB1c2VkKSB7CisgICAgICAgICAgICAgICAgLyogU2xpZGUgdGhlIHdpbmRvdyBkb3duLiAqLworICAgICAgICAgICAgICAgIHMtPnN0cnN0YXJ0IC09IHMtPndfc2l6ZTsKKyAgICAgICAgICAgICAgICB6bWVtY3B5KHMtPndpbmRvdywgcy0+d2luZG93ICsgcy0+d19zaXplLCBzLT5zdHJzdGFydCk7CisgICAgICAgICAgICAgICAgaWYgKHMtPm1hdGNoZXMgPCAyKQorICAgICAgICAgICAgICAgICAgICBzLT5tYXRjaGVzKys7ICAgLyogYWRkIGEgcGVuZGluZyBzbGlkZV9oYXNoKCkgKi8KKyAgICAgICAgICAgICAgICBpZiAocy0+aW5zZXJ0ID4gcy0+c3Ryc3RhcnQpCisgICAgICAgICAgICAgICAgICAgIHMtPmluc2VydCA9IHMtPnN0cnN0YXJ0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgem1lbWNweShzLT53aW5kb3cgKyBzLT5zdHJzdGFydCwgcy0+c3RybS0+bmV4dF9pbiAtIHVzZWQsIHVzZWQpOworICAgICAgICAgICAgcy0+c3Ryc3RhcnQgKz0gdXNlZDsKKyAgICAgICAgICAgIHMtPmluc2VydCArPSBNSU4odXNlZCwgcy0+d19zaXplIC0gcy0+aW5zZXJ0KTsKKyAgICAgICAgfQorICAgICAgICBzLT5ibG9ja19zdGFydCA9IHMtPnN0cnN0YXJ0OworICAgIH0KKyAgICBpZiAocy0+aGlnaF93YXRlciA8IHMtPnN0cnN0YXJ0KQorICAgICAgICBzLT5oaWdoX3dhdGVyID0gcy0+c3Ryc3RhcnQ7CisKKyAgICAvKiBJZiB0aGUgbGFzdCBibG9jayB3YXMgd3JpdHRlbiB0byBuZXh0X291dCwgdGhlbiBkb25lLiAqLworICAgIGlmIChsYXN0KQorICAgICAgICByZXR1cm4gZmluaXNoX2RvbmU7CisKKyAgICAvKiBJZiBmbHVzaGluZyBhbmQgYWxsIGlucHV0IGhhcyBiZWVuIGNvbnN1bWVkLCB0aGVuIGRvbmUuICovCisgICAgaWYgKGZsdXNoICE9IFpfTk9fRkxVU0ggJiYgZmx1c2ggIT0gWl9GSU5JU0ggJiYKKyAgICAgICAgcy0+c3RybS0+YXZhaWxfaW4gPT0gMCAmJiAobG9uZylzLT5zdHJzdGFydCA9PSBzLT5ibG9ja19zdGFydCkKKyAgICAgICAgcmV0dXJuIGJsb2NrX2RvbmU7CisKKyAgICAvKiBGaWxsIHRoZSB3aW5kb3cgd2l0aCBhbnkgcmVtYWluaW5nIGlucHV0LiAqLworICAgIGhhdmUgPSBzLT53aW5kb3dfc2l6ZSAtIHMtPnN0cnN0YXJ0OworICAgIGlmIChzLT5zdHJtLT5hdmFpbF9pbiA+IGhhdmUgJiYgcy0+YmxvY2tfc3RhcnQgPj0gKGxvbmcpcy0+d19zaXplKSB7CisgICAgICAgIC8qIFNsaWRlIHRoZSB3aW5kb3cgZG93bi4gKi8KKyAgICAgICAgcy0+YmxvY2tfc3RhcnQgLT0gcy0+d19zaXplOworICAgICAgICBzLT5zdHJzdGFydCAtPSBzLT53X3NpemU7CisgICAgICAgIHptZW1jcHkocy0+d2luZG93LCBzLT53aW5kb3cgKyBzLT53X3NpemUsIHMtPnN0cnN0YXJ0KTsKKyAgICAgICAgaWYgKHMtPm1hdGNoZXMgPCAyKQorICAgICAgICAgICAgcy0+bWF0Y2hlcysrOyAgICAgICAgICAgLyogYWRkIGEgcGVuZGluZyBzbGlkZV9oYXNoKCkgKi8KKyAgICAgICAgaGF2ZSArPSBzLT53X3NpemU7ICAgICAgICAgIC8qIG1vcmUgc3BhY2Ugbm93ICovCisgICAgICAgIGlmIChzLT5pbnNlcnQgPiBzLT5zdHJzdGFydCkKKyAgICAgICAgICAgIHMtPmluc2VydCA9IHMtPnN0cnN0YXJ0OworICAgIH0KKyAgICBpZiAoaGF2ZSA+IHMtPnN0cm0tPmF2YWlsX2luKQorICAgICAgICBoYXZlID0gcy0+c3RybS0+YXZhaWxfaW47CisgICAgaWYgKGhhdmUpIHsKKyAgICAgICAgcmVhZF9idWYocy0+c3RybSwgcy0+d2luZG93ICsgcy0+c3Ryc3RhcnQsIGhhdmUpOworICAgICAgICBzLT5zdHJzdGFydCArPSBoYXZlOworICAgICAgICBzLT5pbnNlcnQgKz0gTUlOKGhhdmUsIHMtPndfc2l6ZSAtIHMtPmluc2VydCk7CisgICAgfQorICAgIGlmIChzLT5oaWdoX3dhdGVyIDwgcy0+c3Ryc3RhcnQpCisgICAgICAgIHMtPmhpZ2hfd2F0ZXIgPSBzLT5zdHJzdGFydDsKKworICAgIC8qIFRoZXJlIHdhcyBub3QgZW5vdWdoIGF2YWlsX291dCB0byB3cml0ZSBhIGNvbXBsZXRlIHdvcnRoeSBvciBmbHVzaGVkCisgICAgICogc3RvcmVkIGJsb2NrIHRvIG5leHRfb3V0LiBXcml0ZSBhIHN0b3JlZCBibG9jayB0byBwZW5kaW5nIGluc3RlYWQsIGlmIHdlCisgICAgICogaGF2ZSBlbm91Z2ggaW5wdXQgZm9yIGEgd29ydGh5IGJsb2NrLCBvciBpZiBmbHVzaGluZyBhbmQgdGhlcmUgaXMgZW5vdWdoCisgICAgICogcm9vbSBmb3IgdGhlIHJlbWFpbmluZyBpbnB1dCBhcyBhIHN0b3JlZCBibG9jayBpbiB0aGUgcGVuZGluZyBidWZmZXIuCisgICAgICovCisgICAgaGF2ZSA9IChzLT5iaV92YWxpZCArIDQyKSA+PiAzOyAgICAgICAgIC8qIG51bWJlciBvZiBoZWFkZXIgYnl0ZXMgKi8KKyAgICAgICAgLyogbWF4aW11bSBzdG9yZWQgYmxvY2sgbGVuZ3RoIHRoYXQgd2lsbCBmaXQgaW4gcGVuZGluZzogKi8KKyAgICBoYXZlID0gTUlOKHMtPnBlbmRpbmdfYnVmX3NpemUgLSBoYXZlLCBNQVhfU1RPUkVEKTsKKyAgICBtaW5fYmxvY2sgPSBNSU4oaGF2ZSwgcy0+d19zaXplKTsKKyAgICBsZWZ0ID0gcy0+c3Ryc3RhcnQgLSBzLT5ibG9ja19zdGFydDsKKyAgICBpZiAobGVmdCA+PSBtaW5fYmxvY2sgfHwKKyAgICAgICAgKChsZWZ0IHx8IGZsdXNoID09IFpfRklOSVNIKSAmJiBmbHVzaCAhPSBaX05PX0ZMVVNIICYmCisgICAgICAgICBzLT5zdHJtLT5hdmFpbF9pbiA9PSAwICYmIGxlZnQgPD0gaGF2ZSkpIHsKKyAgICAgICAgbGVuID0gTUlOKGxlZnQsIGhhdmUpOworICAgICAgICBsYXN0ID0gZmx1c2ggPT0gWl9GSU5JU0ggJiYgcy0+c3RybS0+YXZhaWxfaW4gPT0gMCAmJgorICAgICAgICAgICAgICAgbGVuID09IGxlZnQgPyAxIDogMDsKKyAgICAgICAgX3RyX3N0b3JlZF9ibG9jayhzLCAoY2hhcmYgKilzLT53aW5kb3cgKyBzLT5ibG9ja19zdGFydCwgbGVuLCBsYXN0KTsKKyAgICAgICAgcy0+YmxvY2tfc3RhcnQgKz0gbGVuOworICAgICAgICBmbHVzaF9wZW5kaW5nKHMtPnN0cm0pOworICAgIH0KKworICAgIC8qIFdlJ3ZlIGRvbmUgYWxsIHdlIGNhbiB3aXRoIHRoZSBhdmFpbGFibGUgaW5wdXQgYW5kIG91dHB1dC4gKi8KKyAgICByZXR1cm4gbGFzdCA/IGZpbmlzaF9zdGFydGVkIDogbmVlZF9tb3JlOworfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvbXByZXNzIGFzIG11Y2ggYXMgcG9zc2libGUgZnJvbSB0aGUgaW5wdXQgc3RyZWFtLCByZXR1cm4gdGhlIGN1cnJlbnQKKyAqIGJsb2NrIHN0YXRlLgorICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBwZXJmb3JtIGxhenkgZXZhbHVhdGlvbiBvZiBtYXRjaGVzIGFuZCBpbnNlcnRzCisgKiBuZXcgc3RyaW5ncyBpbiB0aGUgZGljdGlvbmFyeSBvbmx5IGZvciB1bm1hdGNoZWQgc3RyaW5ncyBvciBmb3Igc2hvcnQKKyAqIG1hdGNoZXMuIEl0IGlzIHVzZWQgb25seSBmb3IgdGhlIGZhc3QgY29tcHJlc3Npb24gb3B0aW9ucy4KKyAqLworbG9jYWwgYmxvY2tfc3RhdGUgZGVmbGF0ZV9mYXN0KHMsIGZsdXNoKQorICAgIGRlZmxhdGVfc3RhdGUgKnM7CisgICAgaW50IGZsdXNoOworeworICAgIElQb3MgaGFzaF9oZWFkOyAgICAgICAvKiBoZWFkIG9mIHRoZSBoYXNoIGNoYWluICovCisgICAgaW50IGJmbHVzaDsgICAgICAgICAgIC8qIHNldCBpZiBjdXJyZW50IGJsb2NrIG11c3QgYmUgZmx1c2hlZCAqLworCisgICAgZm9yICg7OykgeworICAgICAgICAvKiBNYWtlIHN1cmUgdGhhdCB3ZSBhbHdheXMgaGF2ZSBlbm91Z2ggbG9va2FoZWFkLCBleGNlcHQKKyAgICAgICAgICogYXQgdGhlIGVuZCBvZiB0aGUgaW5wdXQgZmlsZS4gV2UgbmVlZCBNQVhfTUFUQ0ggYnl0ZXMKKyAgICAgICAgICogZm9yIHRoZSBuZXh0IG1hdGNoLCBwbHVzIE1JTl9NQVRDSCBieXRlcyB0byBpbnNlcnQgdGhlCisgICAgICAgICAqIHN0cmluZyBmb2xsb3dpbmcgdGhlIG5leHQgbWF0Y2guCisgICAgICAgICAqLworICAgICAgICBpZiAocy0+bG9va2FoZWFkIDwgTUlOX0xPT0tBSEVBRCkgeworICAgICAgICAgICAgZmlsbF93aW5kb3cocyk7CisgICAgICAgICAgICBpZiAocy0+bG9va2FoZWFkIDwgTUlOX0xPT0tBSEVBRCAmJiBmbHVzaCA9PSBaX05PX0ZMVVNIKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5lZWRfbW9yZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzLT5sb29rYWhlYWQgPT0gMCkgYnJlYWs7IC8qIGZsdXNoIHRoZSBjdXJyZW50IGJsb2NrICovCisgICAgICAgIH0KKworICAgICAgICAvKiBJbnNlcnQgdGhlIHN0cmluZyB3aW5kb3dbc3Ryc3RhcnQgLi4gc3Ryc3RhcnQrMl0gaW4gdGhlCisgICAgICAgICAqIGRpY3Rpb25hcnksIGFuZCBzZXQgaGFzaF9oZWFkIHRvIHRoZSBoZWFkIG9mIHRoZSBoYXNoIGNoYWluOgorICAgICAgICAgKi8KKyAgICAgICAgaGFzaF9oZWFkID0gTklMOworICAgICAgICBpZiAocy0+bG9va2FoZWFkID49IE1JTl9NQVRDSCkgeworICAgICAgICAgICAgSU5TRVJUX1NUUklORyhzLCBzLT5zdHJzdGFydCwgaGFzaF9oZWFkKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIEZpbmQgdGhlIGxvbmdlc3QgbWF0Y2gsIGRpc2NhcmRpbmcgdGhvc2UgPD0gcHJldl9sZW5ndGguCisgICAgICAgICAqIEF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBhbHdheXMgbWF0Y2hfbGVuZ3RoIDwgTUlOX01BVENICisgICAgICAgICAqLworICAgICAgICBpZiAoaGFzaF9oZWFkICE9IE5JTCAmJiBzLT5zdHJzdGFydCAtIGhhc2hfaGVhZCA8PSBNQVhfRElTVChzKSkgeworICAgICAgICAgICAgLyogVG8gc2ltcGxpZnkgdGhlIGNvZGUsIHdlIHByZXZlbnQgbWF0Y2hlcyB3aXRoIHRoZSBzdHJpbmcKKyAgICAgICAgICAgICAqIG9mIHdpbmRvdyBpbmRleCAwIChpbiBwYXJ0aWN1bGFyIHdlIGhhdmUgdG8gYXZvaWQgYSBtYXRjaAorICAgICAgICAgICAgICogb2YgdGhlIHN0cmluZyB3aXRoIGl0c2VsZiBhdCB0aGUgc3RhcnQgb2YgdGhlIGlucHV0IGZpbGUpLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBzLT5tYXRjaF9sZW5ndGggPSBsb25nZXN0X21hdGNoIChzLCBoYXNoX2hlYWQpOworICAgICAgICAgICAgLyogbG9uZ2VzdF9tYXRjaCgpIHNldHMgbWF0Y2hfc3RhcnQgKi8KKyAgICAgICAgfQorICAgICAgICBpZiAocy0+bWF0Y2hfbGVuZ3RoID49IE1JTl9NQVRDSCkgeworICAgICAgICAgICAgY2hlY2tfbWF0Y2gocywgcy0+c3Ryc3RhcnQsIHMtPm1hdGNoX3N0YXJ0LCBzLT5tYXRjaF9sZW5ndGgpOworCisgICAgICAgICAgICBfdHJfdGFsbHlfZGlzdChzLCBzLT5zdHJzdGFydCAtIHMtPm1hdGNoX3N0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+bWF0Y2hfbGVuZ3RoIC0gTUlOX01BVENILCBiZmx1c2gpOworCisgICAgICAgICAgICBzLT5sb29rYWhlYWQgLT0gcy0+bWF0Y2hfbGVuZ3RoOworCisgICAgICAgICAgICAvKiBJbnNlcnQgbmV3IHN0cmluZ3MgaW4gdGhlIGhhc2ggdGFibGUgb25seSBpZiB0aGUgbWF0Y2ggbGVuZ3RoCisgICAgICAgICAgICAgKiBpcyBub3QgdG9vIGxhcmdlLiBUaGlzIHNhdmVzIHRpbWUgYnV0IGRlZ3JhZGVzIGNvbXByZXNzaW9uLgorICAgICAgICAgICAgICovCisjaWZuZGVmIEZBU1RFU1QKKyAgICAgICAgICAgIGlmIChzLT5tYXRjaF9sZW5ndGggPD0gcy0+bWF4X2luc2VydF9sZW5ndGggJiYKKyAgICAgICAgICAgICAgICBzLT5sb29rYWhlYWQgPj0gTUlOX01BVENIKSB7CisgICAgICAgICAgICAgICAgcy0+bWF0Y2hfbGVuZ3RoLS07IC8qIHN0cmluZyBhdCBzdHJzdGFydCBhbHJlYWR5IGluIHRhYmxlICovCisgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICAgICBzLT5zdHJzdGFydCsrOworICAgICAgICAgICAgICAgICAgICBJTlNFUlRfU1RSSU5HKHMsIHMtPnN0cnN0YXJ0LCBoYXNoX2hlYWQpOworICAgICAgICAgICAgICAgICAgICAvKiBzdHJzdGFydCBuZXZlciBleGNlZWRzIFdTSVpFLU1BWF9NQVRDSCwgc28gdGhlcmUgYXJlCisgICAgICAgICAgICAgICAgICAgICAqIGFsd2F5cyBNSU5fTUFUQ0ggYnl0ZXMgYWhlYWQuCisgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIH0gd2hpbGUgKC0tcy0+bWF0Y2hfbGVuZ3RoICE9IDApOworICAgICAgICAgICAgICAgIHMtPnN0cnN0YXJ0Kys7CisgICAgICAgICAgICB9IGVsc2UKKyNlbmRpZgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHMtPnN0cnN0YXJ0ICs9IHMtPm1hdGNoX2xlbmd0aDsKKyAgICAgICAgICAgICAgICBzLT5tYXRjaF9sZW5ndGggPSAwOworICAgICAgICAgICAgICAgIHMtPmluc19oID0gcy0+d2luZG93W3MtPnN0cnN0YXJ0XTsKKyAgICAgICAgICAgICAgICBVUERBVEVfSEFTSChzLCBzLT5pbnNfaCwgcy0+d2luZG93W3MtPnN0cnN0YXJ0KzFdKTsKKyNpZiBNSU5fTUFUQ0ggIT0gMworICAgICAgICAgICAgICAgIENhbGwgVVBEQVRFX0hBU0goKSBNSU5fTUFUQ0gtMyBtb3JlIHRpbWVzCisjZW5kaWYKKyAgICAgICAgICAgICAgICAvKiBJZiBsb29rYWhlYWQgPCBNSU5fTUFUQ0gsIGluc19oIGlzIGdhcmJhZ2UsIGJ1dCBpdCBkb2VzIG5vdAorICAgICAgICAgICAgICAgICAqIG1hdHRlciBzaW5jZSBpdCB3aWxsIGJlIHJlY29tcHV0ZWQgYXQgbmV4dCBkZWZsYXRlIGNhbGwuCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKiBObyBtYXRjaCwgb3V0cHV0IGEgbGl0ZXJhbCBieXRlICovCisgICAgICAgICAgICBUcmFjZXZ2KChzdGRlcnIsIiVjIiwgcy0+d2luZG93W3MtPnN0cnN0YXJ0XSkpOworICAgICAgICAgICAgX3RyX3RhbGx5X2xpdCAocywgcy0+d2luZG93W3MtPnN0cnN0YXJ0XSwgYmZsdXNoKTsKKyAgICAgICAgICAgIHMtPmxvb2thaGVhZC0tOworICAgICAgICAgICAgcy0+c3Ryc3RhcnQrKzsKKyAgICAgICAgfQorICAgICAgICBpZiAoYmZsdXNoKSBGTFVTSF9CTE9DSyhzLCAwKTsKKyAgICB9CisgICAgcy0+aW5zZXJ0ID0gcy0+c3Ryc3RhcnQgPCBNSU5fTUFUQ0gtMSA/IHMtPnN0cnN0YXJ0IDogTUlOX01BVENILTE7CisgICAgaWYgKGZsdXNoID09IFpfRklOSVNIKSB7CisgICAgICAgIEZMVVNIX0JMT0NLKHMsIDEpOworICAgICAgICByZXR1cm4gZmluaXNoX2RvbmU7CisgICAgfQorICAgIGlmIChzLT5zeW1fbmV4dCkKKyAgICAgICAgRkxVU0hfQkxPQ0socywgMCk7CisgICAgcmV0dXJuIGJsb2NrX2RvbmU7Cit9CisKKyNpZm5kZWYgRkFTVEVTVAorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBTYW1lIGFzIGFib3ZlLCBidXQgYWNoaWV2ZXMgYmV0dGVyIGNvbXByZXNzaW9uLiBXZSB1c2UgYSBsYXp5CisgKiBldmFsdWF0aW9uIGZvciBtYXRjaGVzOiBhIG1hdGNoIGlzIGZpbmFsbHkgYWRvcHRlZCBvbmx5IGlmIHRoZXJlIGlzCisgKiBubyBiZXR0ZXIgbWF0Y2ggYXQgdGhlIG5leHQgd2luZG93IHBvc2l0aW9uLgorICovCitsb2NhbCBibG9ja19zdGF0ZSBkZWZsYXRlX3Nsb3cocywgZmx1c2gpCisgICAgZGVmbGF0ZV9zdGF0ZSAqczsKKyAgICBpbnQgZmx1c2g7Cit7CisgICAgSVBvcyBoYXNoX2hlYWQ7ICAgICAgICAgIC8qIGhlYWQgb2YgaGFzaCBjaGFpbiAqLworICAgIGludCBiZmx1c2g7ICAgICAgICAgICAgICAvKiBzZXQgaWYgY3VycmVudCBibG9jayBtdXN0IGJlIGZsdXNoZWQgKi8KKworICAgIC8qIFByb2Nlc3MgdGhlIGlucHV0IGJsb2NrLiAqLworICAgIGZvciAoOzspIHsKKyAgICAgICAgLyogTWFrZSBzdXJlIHRoYXQgd2UgYWx3YXlzIGhhdmUgZW5vdWdoIGxvb2thaGVhZCwgZXhjZXB0CisgICAgICAgICAqIGF0IHRoZSBlbmQgb2YgdGhlIGlucHV0IGZpbGUuIFdlIG5lZWQgTUFYX01BVENIIGJ5dGVzCisgICAgICAgICAqIGZvciB0aGUgbmV4dCBtYXRjaCwgcGx1cyBNSU5fTUFUQ0ggYnl0ZXMgdG8gaW5zZXJ0IHRoZQorICAgICAgICAgKiBzdHJpbmcgZm9sbG93aW5nIHRoZSBuZXh0IG1hdGNoLgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKHMtPmxvb2thaGVhZCA8IE1JTl9MT09LQUhFQUQpIHsKKyAgICAgICAgICAgIGZpbGxfd2luZG93KHMpOworICAgICAgICAgICAgaWYgKHMtPmxvb2thaGVhZCA8IE1JTl9MT09LQUhFQUQgJiYgZmx1c2ggPT0gWl9OT19GTFVTSCkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZWVkX21vcmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocy0+bG9va2FoZWFkID09IDApIGJyZWFrOyAvKiBmbHVzaCB0aGUgY3VycmVudCBibG9jayAqLworICAgICAgICB9CisKKyAgICAgICAgLyogSW5zZXJ0IHRoZSBzdHJpbmcgd2luZG93W3N0cnN0YXJ0IC4uIHN0cnN0YXJ0KzJdIGluIHRoZQorICAgICAgICAgKiBkaWN0aW9uYXJ5LCBhbmQgc2V0IGhhc2hfaGVhZCB0byB0aGUgaGVhZCBvZiB0aGUgaGFzaCBjaGFpbjoKKyAgICAgICAgICovCisgICAgICAgIGhhc2hfaGVhZCA9IE5JTDsKKyAgICAgICAgaWYgKHMtPmxvb2thaGVhZCA+PSBNSU5fTUFUQ0gpIHsKKyAgICAgICAgICAgIElOU0VSVF9TVFJJTkcocywgcy0+c3Ryc3RhcnQsIGhhc2hfaGVhZCk7CisgICAgICAgIH0KKworICAgICAgICAvKiBGaW5kIHRoZSBsb25nZXN0IG1hdGNoLCBkaXNjYXJkaW5nIHRob3NlIDw9IHByZXZfbGVuZ3RoLgorICAgICAgICAgKi8KKyAgICAgICAgcy0+cHJldl9sZW5ndGggPSBzLT5tYXRjaF9sZW5ndGgsIHMtPnByZXZfbWF0Y2ggPSBzLT5tYXRjaF9zdGFydDsKKyAgICAgICAgcy0+bWF0Y2hfbGVuZ3RoID0gTUlOX01BVENILTE7CisKKyAgICAgICAgaWYgKGhhc2hfaGVhZCAhPSBOSUwgJiYgcy0+cHJldl9sZW5ndGggPCBzLT5tYXhfbGF6eV9tYXRjaCAmJgorICAgICAgICAgICAgcy0+c3Ryc3RhcnQgLSBoYXNoX2hlYWQgPD0gTUFYX0RJU1QocykpIHsKKyAgICAgICAgICAgIC8qIFRvIHNpbXBsaWZ5IHRoZSBjb2RlLCB3ZSBwcmV2ZW50IG1hdGNoZXMgd2l0aCB0aGUgc3RyaW5nCisgICAgICAgICAgICAgKiBvZiB3aW5kb3cgaW5kZXggMCAoaW4gcGFydGljdWxhciB3ZSBoYXZlIHRvIGF2b2lkIGEgbWF0Y2gKKyAgICAgICAgICAgICAqIG9mIHRoZSBzdHJpbmcgd2l0aCBpdHNlbGYgYXQgdGhlIHN0YXJ0IG9mIHRoZSBpbnB1dCBmaWxlKS4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgcy0+bWF0Y2hfbGVuZ3RoID0gbG9uZ2VzdF9tYXRjaCAocywgaGFzaF9oZWFkKTsKKyAgICAgICAgICAgIC8qIGxvbmdlc3RfbWF0Y2goKSBzZXRzIG1hdGNoX3N0YXJ0ICovCisKKyAgICAgICAgICAgIGlmIChzLT5tYXRjaF9sZW5ndGggPD0gNSAmJiAocy0+c3RyYXRlZ3kgPT0gWl9GSUxURVJFRAorI2lmIFRPT19GQVIgPD0gMzI3NjcKKyAgICAgICAgICAgICAgICB8fCAocy0+bWF0Y2hfbGVuZ3RoID09IE1JTl9NQVRDSCAmJgorICAgICAgICAgICAgICAgICAgICBzLT5zdHJzdGFydCAtIHMtPm1hdGNoX3N0YXJ0ID4gVE9PX0ZBUikKKyNlbmRpZgorICAgICAgICAgICAgICAgICkpIHsKKworICAgICAgICAgICAgICAgIC8qIElmIHByZXZfbWF0Y2ggaXMgYWxzbyBNSU5fTUFUQ0gsIG1hdGNoX3N0YXJ0IGlzIGdhcmJhZ2UKKyAgICAgICAgICAgICAgICAgKiBidXQgd2Ugd2lsbCBpZ25vcmUgdGhlIGN1cnJlbnQgbWF0Y2ggYW55d2F5LgorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIHMtPm1hdGNoX2xlbmd0aCA9IE1JTl9NQVRDSC0xOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8qIElmIHRoZXJlIHdhcyBhIG1hdGNoIGF0IHRoZSBwcmV2aW91cyBzdGVwIGFuZCB0aGUgY3VycmVudAorICAgICAgICAgKiBtYXRjaCBpcyBub3QgYmV0dGVyLCBvdXRwdXQgdGhlIHByZXZpb3VzIG1hdGNoOgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKHMtPnByZXZfbGVuZ3RoID49IE1JTl9NQVRDSCAmJiBzLT5tYXRjaF9sZW5ndGggPD0gcy0+cHJldl9sZW5ndGgpIHsKKyAgICAgICAgICAgIHVJbnQgbWF4X2luc2VydCA9IHMtPnN0cnN0YXJ0ICsgcy0+bG9va2FoZWFkIC0gTUlOX01BVENIOworICAgICAgICAgICAgLyogRG8gbm90IGluc2VydCBzdHJpbmdzIGluIGhhc2ggdGFibGUgYmV5b25kIHRoaXMuICovCisKKyAgICAgICAgICAgIGNoZWNrX21hdGNoKHMsIHMtPnN0cnN0YXJ0LTEsIHMtPnByZXZfbWF0Y2gsIHMtPnByZXZfbGVuZ3RoKTsKKworICAgICAgICAgICAgX3RyX3RhbGx5X2Rpc3Qocywgcy0+c3Ryc3RhcnQgLTEgLSBzLT5wcmV2X21hdGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+cHJldl9sZW5ndGggLSBNSU5fTUFUQ0gsIGJmbHVzaCk7CisKKyAgICAgICAgICAgIC8qIEluc2VydCBpbiBoYXNoIHRhYmxlIGFsbCBzdHJpbmdzIHVwIHRvIHRoZSBlbmQgb2YgdGhlIG1hdGNoLgorICAgICAgICAgICAgICogc3Ryc3RhcnQtMSBhbmQgc3Ryc3RhcnQgYXJlIGFscmVhZHkgaW5zZXJ0ZWQuIElmIHRoZXJlIGlzIG5vdAorICAgICAgICAgICAgICogZW5vdWdoIGxvb2thaGVhZCwgdGhlIGxhc3QgdHdvIHN0cmluZ3MgYXJlIG5vdCBpbnNlcnRlZCBpbgorICAgICAgICAgICAgICogdGhlIGhhc2ggdGFibGUuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHMtPmxvb2thaGVhZCAtPSBzLT5wcmV2X2xlbmd0aC0xOworICAgICAgICAgICAgcy0+cHJldl9sZW5ndGggLT0gMjsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBpZiAoKytzLT5zdHJzdGFydCA8PSBtYXhfaW5zZXJ0KSB7CisgICAgICAgICAgICAgICAgICAgIElOU0VSVF9TVFJJTkcocywgcy0+c3Ryc3RhcnQsIGhhc2hfaGVhZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSB3aGlsZSAoLS1zLT5wcmV2X2xlbmd0aCAhPSAwKTsKKyAgICAgICAgICAgIHMtPm1hdGNoX2F2YWlsYWJsZSA9IDA7CisgICAgICAgICAgICBzLT5tYXRjaF9sZW5ndGggPSBNSU5fTUFUQ0gtMTsKKyAgICAgICAgICAgIHMtPnN0cnN0YXJ0Kys7CisKKyAgICAgICAgICAgIGlmIChiZmx1c2gpIEZMVVNIX0JMT0NLKHMsIDApOworCisgICAgICAgIH0gZWxzZSBpZiAocy0+bWF0Y2hfYXZhaWxhYmxlKSB7CisgICAgICAgICAgICAvKiBJZiB0aGVyZSB3YXMgbm8gbWF0Y2ggYXQgdGhlIHByZXZpb3VzIHBvc2l0aW9uLCBvdXRwdXQgYQorICAgICAgICAgICAgICogc2luZ2xlIGxpdGVyYWwuIElmIHRoZXJlIHdhcyBhIG1hdGNoIGJ1dCB0aGUgY3VycmVudCBtYXRjaAorICAgICAgICAgICAgICogaXMgbG9uZ2VyLCB0cnVuY2F0ZSB0aGUgcHJldmlvdXMgbWF0Y2ggdG8gYSBzaW5nbGUgbGl0ZXJhbC4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgVHJhY2V2digoc3RkZXJyLCIlYyIsIHMtPndpbmRvd1tzLT5zdHJzdGFydC0xXSkpOworICAgICAgICAgICAgX3RyX3RhbGx5X2xpdChzLCBzLT53aW5kb3dbcy0+c3Ryc3RhcnQtMV0sIGJmbHVzaCk7CisgICAgICAgICAgICBpZiAoYmZsdXNoKSB7CisgICAgICAgICAgICAgICAgRkxVU0hfQkxPQ0tfT05MWShzLCAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHMtPnN0cnN0YXJ0Kys7CisgICAgICAgICAgICBzLT5sb29rYWhlYWQtLTsKKyAgICAgICAgICAgIGlmIChzLT5zdHJtLT5hdmFpbF9vdXQgPT0gMCkgcmV0dXJuIG5lZWRfbW9yZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qIFRoZXJlIGlzIG5vIHByZXZpb3VzIG1hdGNoIHRvIGNvbXBhcmUgd2l0aCwgd2FpdCBmb3IKKyAgICAgICAgICAgICAqIHRoZSBuZXh0IHN0ZXAgdG8gZGVjaWRlLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBzLT5tYXRjaF9hdmFpbGFibGUgPSAxOworICAgICAgICAgICAgcy0+c3Ryc3RhcnQrKzsKKyAgICAgICAgICAgIHMtPmxvb2thaGVhZC0tOworICAgICAgICB9CisgICAgfQorICAgIEFzc2VydCAoZmx1c2ggIT0gWl9OT19GTFVTSCwgIm5vIGZsdXNoPyIpOworICAgIGlmIChzLT5tYXRjaF9hdmFpbGFibGUpIHsKKyAgICAgICAgVHJhY2V2digoc3RkZXJyLCIlYyIsIHMtPndpbmRvd1tzLT5zdHJzdGFydC0xXSkpOworICAgICAgICBfdHJfdGFsbHlfbGl0KHMsIHMtPndpbmRvd1tzLT5zdHJzdGFydC0xXSwgYmZsdXNoKTsKKyAgICAgICAgcy0+bWF0Y2hfYXZhaWxhYmxlID0gMDsKKyAgICB9CisgICAgcy0+aW5zZXJ0ID0gcy0+c3Ryc3RhcnQgPCBNSU5fTUFUQ0gtMSA/IHMtPnN0cnN0YXJ0IDogTUlOX01BVENILTE7CisgICAgaWYgKGZsdXNoID09IFpfRklOSVNIKSB7CisgICAgICAgIEZMVVNIX0JMT0NLKHMsIDEpOworICAgICAgICByZXR1cm4gZmluaXNoX2RvbmU7CisgICAgfQorICAgIGlmIChzLT5zeW1fbmV4dCkKKyAgICAgICAgRkxVU0hfQkxPQ0socywgMCk7CisgICAgcmV0dXJuIGJsb2NrX2RvbmU7Cit9CisjZW5kaWYgLyogRkFTVEVTVCAqLworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIEZvciBaX1JMRSwgc2ltcGx5IGxvb2sgZm9yIHJ1bnMgb2YgYnl0ZXMsIGdlbmVyYXRlIG1hdGNoZXMgb25seSBvZiBkaXN0YW5jZQorICogb25lLiAgRG8gbm90IG1haW50YWluIGEgaGFzaCB0YWJsZS4gIChJdCB3aWxsIGJlIHJlZ2VuZXJhdGVkIGlmIHRoaXMgcnVuIG9mCisgKiBkZWZsYXRlIHN3aXRjaGVzIGF3YXkgZnJvbSBaX1JMRS4pCisgKi8KK2xvY2FsIGJsb2NrX3N0YXRlIGRlZmxhdGVfcmxlKHMsIGZsdXNoKQorICAgIGRlZmxhdGVfc3RhdGUgKnM7CisgICAgaW50IGZsdXNoOworeworICAgIGludCBiZmx1c2g7ICAgICAgICAgICAgIC8qIHNldCBpZiBjdXJyZW50IGJsb2NrIG11c3QgYmUgZmx1c2hlZCAqLworICAgIHVJbnQgcHJldjsgICAgICAgICAgICAgIC8qIGJ5dGUgYXQgZGlzdGFuY2Ugb25lIHRvIG1hdGNoICovCisgICAgQnl0ZWYgKnNjYW4sICpzdHJlbmQ7ICAgLyogc2NhbiBnb2VzIHVwIHRvIHN0cmVuZCBmb3IgbGVuZ3RoIG9mIHJ1biAqLworCisgICAgZm9yICg7OykgeworICAgICAgICAvKiBNYWtlIHN1cmUgdGhhdCB3ZSBhbHdheXMgaGF2ZSBlbm91Z2ggbG9va2FoZWFkLCBleGNlcHQKKyAgICAgICAgICogYXQgdGhlIGVuZCBvZiB0aGUgaW5wdXQgZmlsZS4gV2UgbmVlZCBNQVhfTUFUQ0ggYnl0ZXMKKyAgICAgICAgICogZm9yIHRoZSBsb25nZXN0IHJ1biwgcGx1cyBvbmUgZm9yIHRoZSB1bnJvbGxlZCBsb29wLgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKHMtPmxvb2thaGVhZCA8PSBNQVhfTUFUQ0gpIHsKKyAgICAgICAgICAgIGZpbGxfd2luZG93KHMpOworICAgICAgICAgICAgaWYgKHMtPmxvb2thaGVhZCA8PSBNQVhfTUFUQ0ggJiYgZmx1c2ggPT0gWl9OT19GTFVTSCkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZWVkX21vcmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocy0+bG9va2FoZWFkID09IDApIGJyZWFrOyAvKiBmbHVzaCB0aGUgY3VycmVudCBibG9jayAqLworICAgICAgICB9CisKKyAgICAgICAgLyogU2VlIGhvdyBtYW55IHRpbWVzIHRoZSBwcmV2aW91cyBieXRlIHJlcGVhdHMgKi8KKyAgICAgICAgcy0+bWF0Y2hfbGVuZ3RoID0gMDsKKyAgICAgICAgaWYgKHMtPmxvb2thaGVhZCA+PSBNSU5fTUFUQ0ggJiYgcy0+c3Ryc3RhcnQgPiAwKSB7CisgICAgICAgICAgICBzY2FuID0gcy0+d2luZG93ICsgcy0+c3Ryc3RhcnQgLSAxOworICAgICAgICAgICAgcHJldiA9ICpzY2FuOworICAgICAgICAgICAgaWYgKHByZXYgPT0gKisrc2NhbiAmJiBwcmV2ID09ICorK3NjYW4gJiYgcHJldiA9PSAqKytzY2FuKSB7CisgICAgICAgICAgICAgICAgc3RyZW5kID0gcy0+d2luZG93ICsgcy0+c3Ryc3RhcnQgKyBNQVhfTUFUQ0g7CisgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIH0gd2hpbGUgKHByZXYgPT0gKisrc2NhbiAmJiBwcmV2ID09ICorK3NjYW4gJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2ID09ICorK3NjYW4gJiYgcHJldiA9PSAqKytzY2FuICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgcHJldiA9PSAqKytzY2FuICYmIHByZXYgPT0gKisrc2NhbiAmJgorICAgICAgICAgICAgICAgICAgICAgICAgIHByZXYgPT0gKisrc2NhbiAmJiBwcmV2ID09ICorK3NjYW4gJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICBzY2FuIDwgc3RyZW5kKTsKKyAgICAgICAgICAgICAgICBzLT5tYXRjaF9sZW5ndGggPSBNQVhfTUFUQ0ggLSAodUludCkoc3RyZW5kIC0gc2Nhbik7CisgICAgICAgICAgICAgICAgaWYgKHMtPm1hdGNoX2xlbmd0aCA+IHMtPmxvb2thaGVhZCkKKyAgICAgICAgICAgICAgICAgICAgcy0+bWF0Y2hfbGVuZ3RoID0gcy0+bG9va2FoZWFkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQXNzZXJ0KHNjYW4gPD0gcy0+d2luZG93Kyh1SW50KShzLT53aW5kb3dfc2l6ZS0xKSwgIndpbGQgc2NhbiIpOworICAgICAgICB9CisKKyAgICAgICAgLyogRW1pdCBtYXRjaCBpZiBoYXZlIHJ1biBvZiBNSU5fTUFUQ0ggb3IgbG9uZ2VyLCBlbHNlIGVtaXQgbGl0ZXJhbCAqLworICAgICAgICBpZiAocy0+bWF0Y2hfbGVuZ3RoID49IE1JTl9NQVRDSCkgeworICAgICAgICAgICAgY2hlY2tfbWF0Y2gocywgcy0+c3Ryc3RhcnQsIHMtPnN0cnN0YXJ0IC0gMSwgcy0+bWF0Y2hfbGVuZ3RoKTsKKworICAgICAgICAgICAgX3RyX3RhbGx5X2Rpc3QocywgMSwgcy0+bWF0Y2hfbGVuZ3RoIC0gTUlOX01BVENILCBiZmx1c2gpOworCisgICAgICAgICAgICBzLT5sb29rYWhlYWQgLT0gcy0+bWF0Y2hfbGVuZ3RoOworICAgICAgICAgICAgcy0+c3Ryc3RhcnQgKz0gcy0+bWF0Y2hfbGVuZ3RoOworICAgICAgICAgICAgcy0+bWF0Y2hfbGVuZ3RoID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qIE5vIG1hdGNoLCBvdXRwdXQgYSBsaXRlcmFsIGJ5dGUgKi8KKyAgICAgICAgICAgIFRyYWNldnYoKHN0ZGVyciwiJWMiLCBzLT53aW5kb3dbcy0+c3Ryc3RhcnRdKSk7CisgICAgICAgICAgICBfdHJfdGFsbHlfbGl0IChzLCBzLT53aW5kb3dbcy0+c3Ryc3RhcnRdLCBiZmx1c2gpOworICAgICAgICAgICAgcy0+bG9va2FoZWFkLS07CisgICAgICAgICAgICBzLT5zdHJzdGFydCsrOworICAgICAgICB9CisgICAgICAgIGlmIChiZmx1c2gpIEZMVVNIX0JMT0NLKHMsIDApOworICAgIH0KKyAgICBzLT5pbnNlcnQgPSAwOworICAgIGlmIChmbHVzaCA9PSBaX0ZJTklTSCkgeworICAgICAgICBGTFVTSF9CTE9DSyhzLCAxKTsKKyAgICAgICAgcmV0dXJuIGZpbmlzaF9kb25lOworICAgIH0KKyAgICBpZiAocy0+c3ltX25leHQpCisgICAgICAgIEZMVVNIX0JMT0NLKHMsIDApOworICAgIHJldHVybiBibG9ja19kb25lOworfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIEZvciBaX0hVRkZNQU5fT05MWSwgZG8gbm90IGxvb2sgZm9yIG1hdGNoZXMuICBEbyBub3QgbWFpbnRhaW4gYSBoYXNoIHRhYmxlLgorICogKEl0IHdpbGwgYmUgcmVnZW5lcmF0ZWQgaWYgdGhpcyBydW4gb2YgZGVmbGF0ZSBzd2l0Y2hlcyBhd2F5IGZyb20gSHVmZm1hbi4pCisgKi8KK2xvY2FsIGJsb2NrX3N0YXRlIGRlZmxhdGVfaHVmZihzLCBmbHVzaCkKKyAgICBkZWZsYXRlX3N0YXRlICpzOworICAgIGludCBmbHVzaDsKK3sKKyAgICBpbnQgYmZsdXNoOyAgICAgICAgICAgICAvKiBzZXQgaWYgY3VycmVudCBibG9jayBtdXN0IGJlIGZsdXNoZWQgKi8KKworICAgIGZvciAoOzspIHsKKyAgICAgICAgLyogTWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBhIGxpdGVyYWwgdG8gd3JpdGUuICovCisgICAgICAgIGlmIChzLT5sb29rYWhlYWQgPT0gMCkgeworICAgICAgICAgICAgZmlsbF93aW5kb3cocyk7CisgICAgICAgICAgICBpZiAocy0+bG9va2FoZWFkID09IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoZmx1c2ggPT0gWl9OT19GTFVTSCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5lZWRfbW9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAvKiBmbHVzaCB0aGUgY3VycmVudCBibG9jayAqLworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyogT3V0cHV0IGEgbGl0ZXJhbCBieXRlICovCisgICAgICAgIHMtPm1hdGNoX2xlbmd0aCA9IDA7CisgICAgICAgIFRyYWNldnYoKHN0ZGVyciwiJWMiLCBzLT53aW5kb3dbcy0+c3Ryc3RhcnRdKSk7CisgICAgICAgIF90cl90YWxseV9saXQgKHMsIHMtPndpbmRvd1tzLT5zdHJzdGFydF0sIGJmbHVzaCk7CisgICAgICAgIHMtPmxvb2thaGVhZC0tOworICAgICAgICBzLT5zdHJzdGFydCsrOworICAgICAgICBpZiAoYmZsdXNoKSBGTFVTSF9CTE9DSyhzLCAwKTsKKyAgICB9CisgICAgcy0+aW5zZXJ0ID0gMDsKKyAgICBpZiAoZmx1c2ggPT0gWl9GSU5JU0gpIHsKKyAgICAgICAgRkxVU0hfQkxPQ0socywgMSk7CisgICAgICAgIHJldHVybiBmaW5pc2hfZG9uZTsKKyAgICB9CisgICAgaWYgKHMtPnN5bV9uZXh0KQorICAgICAgICBGTFVTSF9CTE9DSyhzLCAwKTsKKyAgICByZXR1cm4gYmxvY2tfZG9uZTsKK30KZGlmZiAtLWdpdCBhL3NyYy9kZWZsYXRlLmggYi9zcmMvZGVmbGF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3YzIyNjEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvZGVmbGF0ZS5oCkBAIC0wLDAgKzEsMzQ2IEBACisvKiBkZWZsYXRlLmggLS0gaW50ZXJuYWwgY29tcHJlc3Npb24gc3RhdGUKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDE4IEplYW4tbG91cCBHYWlsbHkKKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKKyAqLworCisvKiBXQVJOSU5HOiB0aGlzIGZpbGUgc2hvdWxkICpub3QqIGJlIHVzZWQgYnkgYXBwbGljYXRpb25zLiBJdCBpcworICAgcGFydCBvZiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGNvbXByZXNzaW9uIGxpYnJhcnkgYW5kIGlzCisgICBzdWJqZWN0IHRvIGNoYW5nZS4gQXBwbGljYXRpb25zIHNob3VsZCBvbmx5IHVzZSB6bGliLmguCisgKi8KKworLyogQCgjKSAkSWQkICovCisKKyNpZm5kZWYgREVGTEFURV9ICisjZGVmaW5lIERFRkxBVEVfSAorCisjaW5jbHVkZSAienV0aWwuaCIKKworLyogZGVmaW5lIE5PX0daSVAgd2hlbiBjb21waWxpbmcgaWYgeW91IHdhbnQgdG8gZGlzYWJsZSBnemlwIGhlYWRlciBhbmQKKyAgIHRyYWlsZXIgY3JlYXRpb24gYnkgZGVmbGF0ZSgpLiAgTk9fR1pJUCB3b3VsZCBiZSB1c2VkIHRvIGF2b2lkIGxpbmtpbmcgaW4KKyAgIHRoZSBjcmMgY29kZSB3aGVuIGl0IGlzIG5vdCBuZWVkZWQuICBGb3Igc2hhcmVkIGxpYnJhcmllcywgZ3ppcCBlbmNvZGluZworICAgc2hvdWxkIGJlIGxlZnQgZW5hYmxlZC4gKi8KKyNpZm5kZWYgTk9fR1pJUAorIyAgZGVmaW5lIEdaSVAKKyNlbmRpZgorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIEludGVybmFsIGNvbXByZXNzaW9uIHN0YXRlLgorICovCisKKyNkZWZpbmUgTEVOR1RIX0NPREVTIDI5CisvKiBudW1iZXIgb2YgbGVuZ3RoIGNvZGVzLCBub3QgY291bnRpbmcgdGhlIHNwZWNpYWwgRU5EX0JMT0NLIGNvZGUgKi8KKworI2RlZmluZSBMSVRFUkFMUyAgMjU2CisvKiBudW1iZXIgb2YgbGl0ZXJhbCBieXRlcyAwLi4yNTUgKi8KKworI2RlZmluZSBMX0NPREVTIChMSVRFUkFMUysxK0xFTkdUSF9DT0RFUykKKy8qIG51bWJlciBvZiBMaXRlcmFsIG9yIExlbmd0aCBjb2RlcywgaW5jbHVkaW5nIHRoZSBFTkRfQkxPQ0sgY29kZSAqLworCisjZGVmaW5lIERfQ09ERVMgICAzMAorLyogbnVtYmVyIG9mIGRpc3RhbmNlIGNvZGVzICovCisKKyNkZWZpbmUgQkxfQ09ERVMgIDE5CisvKiBudW1iZXIgb2YgY29kZXMgdXNlZCB0byB0cmFuc2ZlciB0aGUgYml0IGxlbmd0aHMgKi8KKworI2RlZmluZSBIRUFQX1NJWkUgKDIqTF9DT0RFUysxKQorLyogbWF4aW11bSBoZWFwIHNpemUgKi8KKworI2RlZmluZSBNQVhfQklUUyAxNQorLyogQWxsIGNvZGVzIG11c3Qgbm90IGV4Y2VlZCBNQVhfQklUUyBiaXRzICovCisKKyNkZWZpbmUgQnVmX3NpemUgMTYKKy8qIHNpemUgb2YgYml0IGJ1ZmZlciBpbiBiaV9idWYgKi8KKworI2RlZmluZSBJTklUX1NUQVRFICAgIDQyICAgIC8qIHpsaWIgaGVhZGVyIC0+IEJVU1lfU1RBVEUgKi8KKyNpZmRlZiBHWklQCisjICBkZWZpbmUgR1pJUF9TVEFURSAgNTcgICAgLyogZ3ppcCBoZWFkZXIgLT4gQlVTWV9TVEFURSB8IEVYVFJBX1NUQVRFICovCisjZW5kaWYKKyNkZWZpbmUgRVhUUkFfU1RBVEUgICA2OSAgICAvKiBnemlwIGV4dHJhIGJsb2NrIC0+IE5BTUVfU1RBVEUgKi8KKyNkZWZpbmUgTkFNRV9TVEFURSAgICA3MyAgICAvKiBnemlwIGZpbGUgbmFtZSAtPiBDT01NRU5UX1NUQVRFICovCisjZGVmaW5lIENPTU1FTlRfU1RBVEUgOTEgICAgLyogZ3ppcCBjb21tZW50IC0+IEhDUkNfU1RBVEUgKi8KKyNkZWZpbmUgSENSQ19TVEFURSAgIDEwMyAgICAvKiBnemlwIGhlYWRlciBDUkMgLT4gQlVTWV9TVEFURSAqLworI2RlZmluZSBCVVNZX1NUQVRFICAgMTEzICAgIC8qIGRlZmxhdGUgLT4gRklOSVNIX1NUQVRFICovCisjZGVmaW5lIEZJTklTSF9TVEFURSA2NjYgICAgLyogc3RyZWFtIGNvbXBsZXRlICovCisvKiBTdHJlYW0gc3RhdHVzICovCisKKworLyogRGF0YSBzdHJ1Y3R1cmUgZGVzY3JpYmluZyBhIHNpbmdsZSB2YWx1ZSBhbmQgaXRzIGNvZGUgc3RyaW5nLiAqLwordHlwZWRlZiBzdHJ1Y3QgY3RfZGF0YV9zIHsKKyAgICB1bmlvbiB7CisgICAgICAgIHVzaCAgZnJlcTsgICAgICAgLyogZnJlcXVlbmN5IGNvdW50ICovCisgICAgICAgIHVzaCAgY29kZTsgICAgICAgLyogYml0IHN0cmluZyAqLworICAgIH0gZmM7CisgICAgdW5pb24geworICAgICAgICB1c2ggIGRhZDsgICAgICAgIC8qIGZhdGhlciBub2RlIGluIEh1ZmZtYW4gdHJlZSAqLworICAgICAgICB1c2ggIGxlbjsgICAgICAgIC8qIGxlbmd0aCBvZiBiaXQgc3RyaW5nICovCisgICAgfSBkbDsKK30gRkFSIGN0X2RhdGE7CisKKyNkZWZpbmUgRnJlcSBmYy5mcmVxCisjZGVmaW5lIENvZGUgZmMuY29kZQorI2RlZmluZSBEYWQgIGRsLmRhZAorI2RlZmluZSBMZW4gIGRsLmxlbgorCit0eXBlZGVmIHN0cnVjdCBzdGF0aWNfdHJlZV9kZXNjX3MgIHN0YXRpY190cmVlX2Rlc2M7CisKK3R5cGVkZWYgc3RydWN0IHRyZWVfZGVzY19zIHsKKyAgICBjdF9kYXRhICpkeW5fdHJlZTsgICAgICAgICAgIC8qIHRoZSBkeW5hbWljIHRyZWUgKi8KKyAgICBpbnQgICAgIG1heF9jb2RlOyAgICAgICAgICAgIC8qIGxhcmdlc3QgY29kZSB3aXRoIG5vbiB6ZXJvIGZyZXF1ZW5jeSAqLworICAgIGNvbnN0IHN0YXRpY190cmVlX2Rlc2MgKnN0YXRfZGVzYzsgIC8qIHRoZSBjb3JyZXNwb25kaW5nIHN0YXRpYyB0cmVlICovCit9IEZBUiB0cmVlX2Rlc2M7CisKK3R5cGVkZWYgdXNoIFBvczsKK3R5cGVkZWYgUG9zIEZBUiBQb3NmOwordHlwZWRlZiB1bnNpZ25lZCBJUG9zOworCisvKiBBIFBvcyBpcyBhbiBpbmRleCBpbiB0aGUgY2hhcmFjdGVyIHdpbmRvdy4gV2UgdXNlIHNob3J0IGluc3RlYWQgb2YgaW50IHRvCisgKiBzYXZlIHNwYWNlIGluIHRoZSB2YXJpb3VzIHRhYmxlcy4gSVBvcyBpcyB1c2VkIG9ubHkgZm9yIHBhcmFtZXRlciBwYXNzaW5nLgorICovCisKK3R5cGVkZWYgc3RydWN0IGludGVybmFsX3N0YXRlIHsKKyAgICB6X3N0cmVhbXAgc3RybTsgICAgICAvKiBwb2ludGVyIGJhY2sgdG8gdGhpcyB6bGliIHN0cmVhbSAqLworICAgIGludCAgIHN0YXR1czsgICAgICAgIC8qIGFzIHRoZSBuYW1lIGltcGxpZXMgKi8KKyAgICBCeXRlZiAqcGVuZGluZ19idWY7ICAvKiBvdXRwdXQgc3RpbGwgcGVuZGluZyAqLworICAgIHVsZyAgIHBlbmRpbmdfYnVmX3NpemU7IC8qIHNpemUgb2YgcGVuZGluZ19idWYgKi8KKyAgICBCeXRlZiAqcGVuZGluZ19vdXQ7ICAvKiBuZXh0IHBlbmRpbmcgYnl0ZSB0byBvdXRwdXQgdG8gdGhlIHN0cmVhbSAqLworICAgIHVsZyAgIHBlbmRpbmc7ICAgICAgIC8qIG5iIG9mIGJ5dGVzIGluIHRoZSBwZW5kaW5nIGJ1ZmZlciAqLworICAgIGludCAgIHdyYXA7ICAgICAgICAgIC8qIGJpdCAwIHRydWUgZm9yIHpsaWIsIGJpdCAxIHRydWUgZm9yIGd6aXAgKi8KKyAgICBnel9oZWFkZXJwICBnemhlYWQ7ICAvKiBnemlwIGhlYWRlciBpbmZvcm1hdGlvbiB0byB3cml0ZSAqLworICAgIHVsZyAgIGd6aW5kZXg7ICAgICAgIC8qIHdoZXJlIGluIGV4dHJhLCBuYW1lLCBvciBjb21tZW50ICovCisgICAgQnl0ZSAgbWV0aG9kOyAgICAgICAgLyogY2FuIG9ubHkgYmUgREVGTEFURUQgKi8KKyAgICBpbnQgICBsYXN0X2ZsdXNoOyAgICAvKiB2YWx1ZSBvZiBmbHVzaCBwYXJhbSBmb3IgcHJldmlvdXMgZGVmbGF0ZSBjYWxsICovCisKKyAgICAgICAgICAgICAgICAvKiB1c2VkIGJ5IGRlZmxhdGUuYzogKi8KKworICAgIHVJbnQgIHdfc2l6ZTsgICAgICAgIC8qIExaNzcgd2luZG93IHNpemUgKDMySyBieSBkZWZhdWx0KSAqLworICAgIHVJbnQgIHdfYml0czsgICAgICAgIC8qIGxvZzIod19zaXplKSAgKDguLjE2KSAqLworICAgIHVJbnQgIHdfbWFzazsgICAgICAgIC8qIHdfc2l6ZSAtIDEgKi8KKworICAgIEJ5dGVmICp3aW5kb3c7CisgICAgLyogU2xpZGluZyB3aW5kb3cuIElucHV0IGJ5dGVzIGFyZSByZWFkIGludG8gdGhlIHNlY29uZCBoYWxmIG9mIHRoZSB3aW5kb3csCisgICAgICogYW5kIG1vdmUgdG8gdGhlIGZpcnN0IGhhbGYgbGF0ZXIgdG8ga2VlcCBhIGRpY3Rpb25hcnkgb2YgYXQgbGVhc3Qgd1NpemUKKyAgICAgKiBieXRlcy4gV2l0aCB0aGlzIG9yZ2FuaXphdGlvbiwgbWF0Y2hlcyBhcmUgbGltaXRlZCB0byBhIGRpc3RhbmNlIG9mCisgICAgICogd1NpemUtTUFYX01BVENIIGJ5dGVzLCBidXQgdGhpcyBlbnN1cmVzIHRoYXQgSU8gaXMgYWx3YXlzCisgICAgICogcGVyZm9ybWVkIHdpdGggYSBsZW5ndGggbXVsdGlwbGUgb2YgdGhlIGJsb2NrIHNpemUuIEFsc28sIGl0IGxpbWl0cworICAgICAqIHRoZSB3aW5kb3cgc2l6ZSB0byA2NEssIHdoaWNoIGlzIHF1aXRlIHVzZWZ1bCBvbiBNU0RPUy4KKyAgICAgKiBUbyBkbzogdXNlIHRoZSB1c2VyIGlucHV0IGJ1ZmZlciBhcyBzbGlkaW5nIHdpbmRvdy4KKyAgICAgKi8KKworICAgIHVsZyB3aW5kb3dfc2l6ZTsKKyAgICAvKiBBY3R1YWwgc2l6ZSBvZiB3aW5kb3c6IDIqd1NpemUsIGV4Y2VwdCB3aGVuIHRoZSB1c2VyIGlucHV0IGJ1ZmZlcgorICAgICAqIGlzIGRpcmVjdGx5IHVzZWQgYXMgc2xpZGluZyB3aW5kb3cuCisgICAgICovCisKKyAgICBQb3NmICpwcmV2OworICAgIC8qIExpbmsgdG8gb2xkZXIgc3RyaW5nIHdpdGggc2FtZSBoYXNoIGluZGV4LiBUbyBsaW1pdCB0aGUgc2l6ZSBvZiB0aGlzCisgICAgICogYXJyYXkgdG8gNjRLLCB0aGlzIGxpbmsgaXMgbWFpbnRhaW5lZCBvbmx5IGZvciB0aGUgbGFzdCAzMksgc3RyaW5ncy4KKyAgICAgKiBBbiBpbmRleCBpbiB0aGlzIGFycmF5IGlzIHRodXMgYSB3aW5kb3cgaW5kZXggbW9kdWxvIDMySy4KKyAgICAgKi8KKworICAgIFBvc2YgKmhlYWQ7IC8qIEhlYWRzIG9mIHRoZSBoYXNoIGNoYWlucyBvciBOSUwuICovCisKKyAgICB1SW50ICBpbnNfaDsgICAgICAgICAgLyogaGFzaCBpbmRleCBvZiBzdHJpbmcgdG8gYmUgaW5zZXJ0ZWQgKi8KKyAgICB1SW50ICBoYXNoX3NpemU7ICAgICAgLyogbnVtYmVyIG9mIGVsZW1lbnRzIGluIGhhc2ggdGFibGUgKi8KKyAgICB1SW50ICBoYXNoX2JpdHM7ICAgICAgLyogbG9nMihoYXNoX3NpemUpICovCisgICAgdUludCAgaGFzaF9tYXNrOyAgICAgIC8qIGhhc2hfc2l6ZS0xICovCisKKyAgICB1SW50ICBoYXNoX3NoaWZ0OworICAgIC8qIE51bWJlciBvZiBiaXRzIGJ5IHdoaWNoIGluc19oIG11c3QgYmUgc2hpZnRlZCBhdCBlYWNoIGlucHV0CisgICAgICogc3RlcC4gSXQgbXVzdCBiZSBzdWNoIHRoYXQgYWZ0ZXIgTUlOX01BVENIIHN0ZXBzLCB0aGUgb2xkZXN0CisgICAgICogYnl0ZSBubyBsb25nZXIgdGFrZXMgcGFydCBpbiB0aGUgaGFzaCBrZXksIHRoYXQgaXM6CisgICAgICogICBoYXNoX3NoaWZ0ICogTUlOX01BVENIID49IGhhc2hfYml0cworICAgICAqLworCisgICAgbG9uZyBibG9ja19zdGFydDsKKyAgICAvKiBXaW5kb3cgcG9zaXRpb24gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgY3VycmVudCBvdXRwdXQgYmxvY2suIEdldHMKKyAgICAgKiBuZWdhdGl2ZSB3aGVuIHRoZSB3aW5kb3cgaXMgbW92ZWQgYmFja3dhcmRzLgorICAgICAqLworCisgICAgdUludCBtYXRjaF9sZW5ndGg7ICAgICAgICAgICAvKiBsZW5ndGggb2YgYmVzdCBtYXRjaCAqLworICAgIElQb3MgcHJldl9tYXRjaDsgICAgICAgICAgICAgLyogcHJldmlvdXMgbWF0Y2ggKi8KKyAgICBpbnQgbWF0Y2hfYXZhaWxhYmxlOyAgICAgICAgIC8qIHNldCBpZiBwcmV2aW91cyBtYXRjaCBleGlzdHMgKi8KKyAgICB1SW50IHN0cnN0YXJ0OyAgICAgICAgICAgICAgIC8qIHN0YXJ0IG9mIHN0cmluZyB0byBpbnNlcnQgKi8KKyAgICB1SW50IG1hdGNoX3N0YXJ0OyAgICAgICAgICAgIC8qIHN0YXJ0IG9mIG1hdGNoaW5nIHN0cmluZyAqLworICAgIHVJbnQgbG9va2FoZWFkOyAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHZhbGlkIGJ5dGVzIGFoZWFkIGluIHdpbmRvdyAqLworCisgICAgdUludCBwcmV2X2xlbmd0aDsKKyAgICAvKiBMZW5ndGggb2YgdGhlIGJlc3QgbWF0Y2ggYXQgcHJldmlvdXMgc3RlcC4gTWF0Y2hlcyBub3QgZ3JlYXRlciB0aGFuIHRoaXMKKyAgICAgKiBhcmUgZGlzY2FyZGVkLiBUaGlzIGlzIHVzZWQgaW4gdGhlIGxhenkgbWF0Y2ggZXZhbHVhdGlvbi4KKyAgICAgKi8KKworICAgIHVJbnQgbWF4X2NoYWluX2xlbmd0aDsKKyAgICAvKiBUbyBzcGVlZCB1cCBkZWZsYXRpb24sIGhhc2ggY2hhaW5zIGFyZSBuZXZlciBzZWFyY2hlZCBiZXlvbmQgdGhpcworICAgICAqIGxlbmd0aC4gIEEgaGlnaGVyIGxpbWl0IGltcHJvdmVzIGNvbXByZXNzaW9uIHJhdGlvIGJ1dCBkZWdyYWRlcyB0aGUKKyAgICAgKiBzcGVlZC4KKyAgICAgKi8KKworICAgIHVJbnQgbWF4X2xhenlfbWF0Y2g7CisgICAgLyogQXR0ZW1wdCB0byBmaW5kIGEgYmV0dGVyIG1hdGNoIG9ubHkgd2hlbiB0aGUgY3VycmVudCBtYXRjaCBpcyBzdHJpY3RseQorICAgICAqIHNtYWxsZXIgdGhhbiB0aGlzIHZhbHVlLiBUaGlzIG1lY2hhbmlzbSBpcyB1c2VkIG9ubHkgZm9yIGNvbXByZXNzaW9uCisgICAgICogbGV2ZWxzID49IDQuCisgICAgICovCisjICAgZGVmaW5lIG1heF9pbnNlcnRfbGVuZ3RoICBtYXhfbGF6eV9tYXRjaAorICAgIC8qIEluc2VydCBuZXcgc3RyaW5ncyBpbiB0aGUgaGFzaCB0YWJsZSBvbmx5IGlmIHRoZSBtYXRjaCBsZW5ndGggaXMgbm90CisgICAgICogZ3JlYXRlciB0aGFuIHRoaXMgbGVuZ3RoLiBUaGlzIHNhdmVzIHRpbWUgYnV0IGRlZ3JhZGVzIGNvbXByZXNzaW9uLgorICAgICAqIG1heF9pbnNlcnRfbGVuZ3RoIGlzIHVzZWQgb25seSBmb3IgY29tcHJlc3Npb24gbGV2ZWxzIDw9IDMuCisgICAgICovCisKKyAgICBpbnQgbGV2ZWw7ICAgIC8qIGNvbXByZXNzaW9uIGxldmVsICgxLi45KSAqLworICAgIGludCBzdHJhdGVneTsgLyogZmF2b3Igb3IgZm9yY2UgSHVmZm1hbiBjb2RpbmcqLworCisgICAgdUludCBnb29kX21hdGNoOworICAgIC8qIFVzZSBhIGZhc3RlciBzZWFyY2ggd2hlbiB0aGUgcHJldmlvdXMgbWF0Y2ggaXMgbG9uZ2VyIHRoYW4gdGhpcyAqLworCisgICAgaW50IG5pY2VfbWF0Y2g7IC8qIFN0b3Agc2VhcmNoaW5nIHdoZW4gY3VycmVudCBtYXRjaCBleGNlZWRzIHRoaXMgKi8KKworICAgICAgICAgICAgICAgIC8qIHVzZWQgYnkgdHJlZXMuYzogKi8KKyAgICAvKiBEaWRuJ3QgdXNlIGN0X2RhdGEgdHlwZWRlZiBiZWxvdyB0byBzdXBwcmVzcyBjb21waWxlciB3YXJuaW5nICovCisgICAgc3RydWN0IGN0X2RhdGFfcyBkeW5fbHRyZWVbSEVBUF9TSVpFXTsgICAvKiBsaXRlcmFsIGFuZCBsZW5ndGggdHJlZSAqLworICAgIHN0cnVjdCBjdF9kYXRhX3MgZHluX2R0cmVlWzIqRF9DT0RFUysxXTsgLyogZGlzdGFuY2UgdHJlZSAqLworICAgIHN0cnVjdCBjdF9kYXRhX3MgYmxfdHJlZVsyKkJMX0NPREVTKzFdOyAgLyogSHVmZm1hbiB0cmVlIGZvciBiaXQgbGVuZ3RocyAqLworCisgICAgc3RydWN0IHRyZWVfZGVzY19zIGxfZGVzYzsgICAgICAgICAgICAgICAvKiBkZXNjLiBmb3IgbGl0ZXJhbCB0cmVlICovCisgICAgc3RydWN0IHRyZWVfZGVzY19zIGRfZGVzYzsgICAgICAgICAgICAgICAvKiBkZXNjLiBmb3IgZGlzdGFuY2UgdHJlZSAqLworICAgIHN0cnVjdCB0cmVlX2Rlc2NfcyBibF9kZXNjOyAgICAgICAgICAgICAgLyogZGVzYy4gZm9yIGJpdCBsZW5ndGggdHJlZSAqLworCisgICAgdXNoIGJsX2NvdW50W01BWF9CSVRTKzFdOworICAgIC8qIG51bWJlciBvZiBjb2RlcyBhdCBlYWNoIGJpdCBsZW5ndGggZm9yIGFuIG9wdGltYWwgdHJlZSAqLworCisgICAgaW50IGhlYXBbMipMX0NPREVTKzFdOyAgICAgIC8qIGhlYXAgdXNlZCB0byBidWlsZCB0aGUgSHVmZm1hbiB0cmVlcyAqLworICAgIGludCBoZWFwX2xlbjsgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGhlYXAgKi8KKyAgICBpbnQgaGVhcF9tYXg7ICAgICAgICAgICAgICAgLyogZWxlbWVudCBvZiBsYXJnZXN0IGZyZXF1ZW5jeSAqLworICAgIC8qIFRoZSBzb25zIG9mIGhlYXBbbl0gYXJlIGhlYXBbMipuXSBhbmQgaGVhcFsyKm4rMV0uIGhlYXBbMF0gaXMgbm90IHVzZWQuCisgICAgICogVGhlIHNhbWUgaGVhcCBhcnJheSBpcyB1c2VkIHRvIGJ1aWxkIGFsbCB0cmVlcy4KKyAgICAgKi8KKworICAgIHVjaCBkZXB0aFsyKkxfQ09ERVMrMV07CisgICAgLyogRGVwdGggb2YgZWFjaCBzdWJ0cmVlIHVzZWQgYXMgdGllIGJyZWFrZXIgZm9yIHRyZWVzIG9mIGVxdWFsIGZyZXF1ZW5jeQorICAgICAqLworCisgICAgdWNoZiAqc3ltX2J1ZjsgICAgICAgIC8qIGJ1ZmZlciBmb3IgZGlzdGFuY2VzIGFuZCBsaXRlcmFscy9sZW5ndGhzICovCisKKyAgICB1SW50ICBsaXRfYnVmc2l6ZTsKKyAgICAvKiBTaXplIG9mIG1hdGNoIGJ1ZmZlciBmb3IgbGl0ZXJhbHMvbGVuZ3Rocy4gIFRoZXJlIGFyZSA0IHJlYXNvbnMgZm9yCisgICAgICogbGltaXRpbmcgbGl0X2J1ZnNpemUgdG8gNjRLOgorICAgICAqICAgLSBmcmVxdWVuY2llcyBjYW4gYmUga2VwdCBpbiAxNiBiaXQgY291bnRlcnMKKyAgICAgKiAgIC0gaWYgY29tcHJlc3Npb24gaXMgbm90IHN1Y2Nlc3NmdWwgZm9yIHRoZSBmaXJzdCBibG9jaywgYWxsIGlucHV0CisgICAgICogICAgIGRhdGEgaXMgc3RpbGwgaW4gdGhlIHdpbmRvdyBzbyB3ZSBjYW4gc3RpbGwgZW1pdCBhIHN0b3JlZCBibG9jayBldmVuCisgICAgICogICAgIHdoZW4gaW5wdXQgY29tZXMgZnJvbSBzdGFuZGFyZCBpbnB1dC4gIChUaGlzIGNhbiBhbHNvIGJlIGRvbmUgZm9yCisgICAgICogICAgIGFsbCBibG9ja3MgaWYgbGl0X2J1ZnNpemUgaXMgbm90IGdyZWF0ZXIgdGhhbiAzMksuKQorICAgICAqICAgLSBpZiBjb21wcmVzc2lvbiBpcyBub3Qgc3VjY2Vzc2Z1bCBmb3IgYSBmaWxlIHNtYWxsZXIgdGhhbiA2NEssIHdlIGNhbgorICAgICAqICAgICBldmVuIGVtaXQgYSBzdG9yZWQgZmlsZSBpbnN0ZWFkIG9mIGEgc3RvcmVkIGJsb2NrIChzYXZpbmcgNSBieXRlcykuCisgICAgICogICAgIFRoaXMgaXMgYXBwbGljYWJsZSBvbmx5IGZvciB6aXAgKG5vdCBnemlwIG9yIHpsaWIpLgorICAgICAqICAgLSBjcmVhdGluZyBuZXcgSHVmZm1hbiB0cmVlcyBsZXNzIGZyZXF1ZW50bHkgbWF5IG5vdCBwcm92aWRlIGZhc3QKKyAgICAgKiAgICAgYWRhcHRhdGlvbiB0byBjaGFuZ2VzIGluIHRoZSBpbnB1dCBkYXRhIHN0YXRpc3RpY3MuIChUYWtlIGZvcgorICAgICAqICAgICBleGFtcGxlIGEgYmluYXJ5IGZpbGUgd2l0aCBwb29ybHkgY29tcHJlc3NpYmxlIGNvZGUgZm9sbG93ZWQgYnkKKyAgICAgKiAgICAgYSBoaWdobHkgY29tcHJlc3NpYmxlIHN0cmluZyB0YWJsZS4pIFNtYWxsZXIgYnVmZmVyIHNpemVzIGdpdmUKKyAgICAgKiAgICAgZmFzdCBhZGFwdGF0aW9uIGJ1dCBoYXZlIG9mIGNvdXJzZSB0aGUgb3ZlcmhlYWQgb2YgdHJhbnNtaXR0aW5nCisgICAgICogICAgIHRyZWVzIG1vcmUgZnJlcXVlbnRseS4KKyAgICAgKiAgIC0gSSBjYW4ndCBjb3VudCBhYm92ZSA0CisgICAgICovCisKKyAgICB1SW50IHN5bV9uZXh0OyAgICAgIC8qIHJ1bm5pbmcgaW5kZXggaW4gc3ltX2J1ZiAqLworICAgIHVJbnQgc3ltX2VuZDsgICAgICAgLyogc3ltYm9sIHRhYmxlIGZ1bGwgd2hlbiBzeW1fbmV4dCByZWFjaGVzIHRoaXMgKi8KKworICAgIHVsZyBvcHRfbGVuOyAgICAgICAgLyogYml0IGxlbmd0aCBvZiBjdXJyZW50IGJsb2NrIHdpdGggb3B0aW1hbCB0cmVlcyAqLworICAgIHVsZyBzdGF0aWNfbGVuOyAgICAgLyogYml0IGxlbmd0aCBvZiBjdXJyZW50IGJsb2NrIHdpdGggc3RhdGljIHRyZWVzICovCisgICAgdUludCBtYXRjaGVzOyAgICAgICAvKiBudW1iZXIgb2Ygc3RyaW5nIG1hdGNoZXMgaW4gY3VycmVudCBibG9jayAqLworICAgIHVJbnQgaW5zZXJ0OyAgICAgICAgLyogYnl0ZXMgYXQgZW5kIG9mIHdpbmRvdyBsZWZ0IHRvIGluc2VydCAqLworCisjaWZkZWYgWkxJQl9ERUJVRworICAgIHVsZyBjb21wcmVzc2VkX2xlbjsgLyogdG90YWwgYml0IGxlbmd0aCBvZiBjb21wcmVzc2VkIGZpbGUgbW9kIDJeMzIgKi8KKyAgICB1bGcgYml0c19zZW50OyAgICAgIC8qIGJpdCBsZW5ndGggb2YgY29tcHJlc3NlZCBkYXRhIHNlbnQgbW9kIDJeMzIgKi8KKyNlbmRpZgorCisgICAgdXNoIGJpX2J1ZjsKKyAgICAvKiBPdXRwdXQgYnVmZmVyLiBiaXRzIGFyZSBpbnNlcnRlZCBzdGFydGluZyBhdCB0aGUgYm90dG9tIChsZWFzdAorICAgICAqIHNpZ25pZmljYW50IGJpdHMpLgorICAgICAqLworICAgIGludCBiaV92YWxpZDsKKyAgICAvKiBOdW1iZXIgb2YgdmFsaWQgYml0cyBpbiBiaV9idWYuICBBbGwgYml0cyBhYm92ZSB0aGUgbGFzdCB2YWxpZCBiaXQKKyAgICAgKiBhcmUgYWx3YXlzIHplcm8uCisgICAgICovCisKKyAgICB1bGcgaGlnaF93YXRlcjsKKyAgICAvKiBIaWdoIHdhdGVyIG1hcmsgb2Zmc2V0IGluIHdpbmRvdyBmb3IgaW5pdGlhbGl6ZWQgYnl0ZXMgLS0gYnl0ZXMgYWJvdmUKKyAgICAgKiB0aGlzIGFyZSBzZXQgdG8gemVybyBpbiBvcmRlciB0byBhdm9pZCBtZW1vcnkgY2hlY2sgd2FybmluZ3Mgd2hlbgorICAgICAqIGxvbmdlc3QgbWF0Y2ggcm91dGluZXMgYWNjZXNzIGJ5dGVzIHBhc3QgdGhlIGlucHV0LiAgVGhpcyBpcyB0aGVuCisgICAgICogdXBkYXRlZCB0byB0aGUgbmV3IGhpZ2ggd2F0ZXIgbWFyay4KKyAgICAgKi8KKworfSBGQVIgZGVmbGF0ZV9zdGF0ZTsKKworLyogT3V0cHV0IGEgYnl0ZSBvbiB0aGUgc3RyZWFtLgorICogSU4gYXNzZXJ0aW9uOiB0aGVyZSBpcyBlbm91Z2ggcm9vbSBpbiBwZW5kaW5nX2J1Zi4KKyAqLworI2RlZmluZSBwdXRfYnl0ZShzLCBjKSB7cy0+cGVuZGluZ19idWZbcy0+cGVuZGluZysrXSA9IChCeXRlZikoYyk7fQorCisKKyNkZWZpbmUgTUlOX0xPT0tBSEVBRCAoTUFYX01BVENIK01JTl9NQVRDSCsxKQorLyogTWluaW11bSBhbW91bnQgb2YgbG9va2FoZWFkLCBleGNlcHQgYXQgdGhlIGVuZCBvZiB0aGUgaW5wdXQgZmlsZS4KKyAqIFNlZSBkZWZsYXRlLmMgZm9yIGNvbW1lbnRzIGFib3V0IHRoZSBNSU5fTUFUQ0grMS4KKyAqLworCisjZGVmaW5lIE1BWF9ESVNUKHMpICAoKHMpLT53X3NpemUtTUlOX0xPT0tBSEVBRCkKKy8qIEluIG9yZGVyIHRvIHNpbXBsaWZ5IHRoZSBjb2RlLCBwYXJ0aWN1bGFybHkgb24gMTYgYml0IG1hY2hpbmVzLCBtYXRjaAorICogZGlzdGFuY2VzIGFyZSBsaW1pdGVkIHRvIE1BWF9ESVNUIGluc3RlYWQgb2YgV1NJWkUuCisgKi8KKworI2RlZmluZSBXSU5fSU5JVCBNQVhfTUFUQ0gKKy8qIE51bWJlciBvZiBieXRlcyBhZnRlciBlbmQgb2YgZGF0YSBpbiB3aW5kb3cgdG8gaW5pdGlhbGl6ZSBpbiBvcmRlciB0byBhdm9pZAorICAgbWVtb3J5IGNoZWNrZXIgZXJyb3JzIGZyb20gbG9uZ2VzdCBtYXRjaCByb3V0aW5lcyAqLworCisgICAgICAgIC8qIGluIHRyZWVzLmMgKi8KK3ZvaWQgWkxJQl9JTlRFUk5BTCBfdHJfaW5pdCBPRigoZGVmbGF0ZV9zdGF0ZSAqcykpOworaW50IFpMSUJfSU5URVJOQUwgX3RyX3RhbGx5IE9GKChkZWZsYXRlX3N0YXRlICpzLCB1bnNpZ25lZCBkaXN0LCB1bnNpZ25lZCBsYykpOwordm9pZCBaTElCX0lOVEVSTkFMIF90cl9mbHVzaF9ibG9jayBPRigoZGVmbGF0ZV9zdGF0ZSAqcywgY2hhcmYgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVsZyBzdG9yZWRfbGVuLCBpbnQgbGFzdCkpOwordm9pZCBaTElCX0lOVEVSTkFMIF90cl9mbHVzaF9iaXRzIE9GKChkZWZsYXRlX3N0YXRlICpzKSk7Cit2b2lkIFpMSUJfSU5URVJOQUwgX3RyX2FsaWduIE9GKChkZWZsYXRlX3N0YXRlICpzKSk7Cit2b2lkIFpMSUJfSU5URVJOQUwgX3RyX3N0b3JlZF9ibG9jayBPRigoZGVmbGF0ZV9zdGF0ZSAqcywgY2hhcmYgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVsZyBzdG9yZWRfbGVuLCBpbnQgbGFzdCkpOworCisjZGVmaW5lIGRfY29kZShkaXN0KSBcCisgICAoKGRpc3QpIDwgMjU2ID8gX2Rpc3RfY29kZVtkaXN0XSA6IF9kaXN0X2NvZGVbMjU2KygoZGlzdCk+PjcpXSkKKy8qIE1hcHBpbmcgZnJvbSBhIGRpc3RhbmNlIHRvIGEgZGlzdGFuY2UgY29kZS4gZGlzdCBpcyB0aGUgZGlzdGFuY2UgLSAxIGFuZAorICogbXVzdCBub3QgaGF2ZSBzaWRlIGVmZmVjdHMuIF9kaXN0X2NvZGVbMjU2XSBhbmQgX2Rpc3RfY29kZVsyNTddIGFyZSBuZXZlcgorICogdXNlZC4KKyAqLworCisjaWZuZGVmIFpMSUJfREVCVUcKKy8qIElubGluZSB2ZXJzaW9ucyBvZiBfdHJfdGFsbHkgZm9yIHNwZWVkOiAqLworCisjaWYgZGVmaW5lZChHRU5fVFJFRVNfSCkgfHwgIWRlZmluZWQoU1REQykKKyAgZXh0ZXJuIHVjaCBaTElCX0lOVEVSTkFMIF9sZW5ndGhfY29kZVtdOworICBleHRlcm4gdWNoIFpMSUJfSU5URVJOQUwgX2Rpc3RfY29kZVtdOworI2Vsc2UKKyAgZXh0ZXJuIGNvbnN0IHVjaCBaTElCX0lOVEVSTkFMIF9sZW5ndGhfY29kZVtdOworICBleHRlcm4gY29uc3QgdWNoIFpMSUJfSU5URVJOQUwgX2Rpc3RfY29kZVtdOworI2VuZGlmCisKKyMgZGVmaW5lIF90cl90YWxseV9saXQocywgYywgZmx1c2gpIFwKKyAgeyB1Y2ggY2MgPSAoYyk7IFwKKyAgICBzLT5zeW1fYnVmW3MtPnN5bV9uZXh0KytdID0gMDsgXAorICAgIHMtPnN5bV9idWZbcy0+c3ltX25leHQrK10gPSAwOyBcCisgICAgcy0+c3ltX2J1ZltzLT5zeW1fbmV4dCsrXSA9IGNjOyBcCisgICAgcy0+ZHluX2x0cmVlW2NjXS5GcmVxKys7IFwKKyAgICBmbHVzaCA9IChzLT5zeW1fbmV4dCA9PSBzLT5zeW1fZW5kKTsgXAorICAgfQorIyBkZWZpbmUgX3RyX3RhbGx5X2Rpc3QocywgZGlzdGFuY2UsIGxlbmd0aCwgZmx1c2gpIFwKKyAgeyB1Y2ggbGVuID0gKHVjaCkobGVuZ3RoKTsgXAorICAgIHVzaCBkaXN0ID0gKHVzaCkoZGlzdGFuY2UpOyBcCisgICAgcy0+c3ltX2J1ZltzLT5zeW1fbmV4dCsrXSA9IGRpc3Q7IFwKKyAgICBzLT5zeW1fYnVmW3MtPnN5bV9uZXh0KytdID0gZGlzdCA+PiA4OyBcCisgICAgcy0+c3ltX2J1ZltzLT5zeW1fbmV4dCsrXSA9IGxlbjsgXAorICAgIGRpc3QtLTsgXAorICAgIHMtPmR5bl9sdHJlZVtfbGVuZ3RoX2NvZGVbbGVuXStMSVRFUkFMUysxXS5GcmVxKys7IFwKKyAgICBzLT5keW5fZHRyZWVbZF9jb2RlKGRpc3QpXS5GcmVxKys7IFwKKyAgICBmbHVzaCA9IChzLT5zeW1fbmV4dCA9PSBzLT5zeW1fZW5kKTsgXAorICB9CisjZWxzZQorIyBkZWZpbmUgX3RyX3RhbGx5X2xpdChzLCBjLCBmbHVzaCkgZmx1c2ggPSBfdHJfdGFsbHkocywgMCwgYykKKyMgZGVmaW5lIF90cl90YWxseV9kaXN0KHMsIGRpc3RhbmNlLCBsZW5ndGgsIGZsdXNoKSBcCisgICAgICAgICAgICAgIGZsdXNoID0gX3RyX3RhbGx5KHMsIGRpc3RhbmNlLCBsZW5ndGgpCisjZW5kaWYKKworI2VuZGlmIC8qIERFRkxBVEVfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2RvYy9hbGdvcml0aG0udHh0IGIvc3JjL2RvYy9hbGdvcml0aG0udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5N2Y0OTUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvZG9jL2FsZ29yaXRobS50eHQKQEAgLTAsMCArMSwyMDkgQEAKKzEuIENvbXByZXNzaW9uIGFsZ29yaXRobSAoZGVmbGF0ZSkKKworVGhlIGRlZmxhdGlvbiBhbGdvcml0aG0gdXNlZCBieSBnemlwIChhbHNvIHppcCBhbmQgemxpYikgaXMgYSB2YXJpYXRpb24gb2YKK0xaNzcgKExlbXBlbC1aaXYgMTk3Nywgc2VlIHJlZmVyZW5jZSBiZWxvdykuIEl0IGZpbmRzIGR1cGxpY2F0ZWQgc3RyaW5ncyBpbgordGhlIGlucHV0IGRhdGEuICBUaGUgc2Vjb25kIG9jY3VycmVuY2Ugb2YgYSBzdHJpbmcgaXMgcmVwbGFjZWQgYnkgYQorcG9pbnRlciB0byB0aGUgcHJldmlvdXMgc3RyaW5nLCBpbiB0aGUgZm9ybSBvZiBhIHBhaXIgKGRpc3RhbmNlLAorbGVuZ3RoKS4gIERpc3RhbmNlcyBhcmUgbGltaXRlZCB0byAzMksgYnl0ZXMsIGFuZCBsZW5ndGhzIGFyZSBsaW1pdGVkCit0byAyNTggYnl0ZXMuIFdoZW4gYSBzdHJpbmcgZG9lcyBub3Qgb2NjdXIgYW55d2hlcmUgaW4gdGhlIHByZXZpb3VzCiszMksgYnl0ZXMsIGl0IGlzIGVtaXR0ZWQgYXMgYSBzZXF1ZW5jZSBvZiBsaXRlcmFsIGJ5dGVzLiAgKEluIHRoaXMKK2Rlc2NyaXB0aW9uLCBgc3RyaW5nJyBtdXN0IGJlIHRha2VuIGFzIGFuIGFyYml0cmFyeSBzZXF1ZW5jZSBvZiBieXRlcywKK2FuZCBpcyBub3QgcmVzdHJpY3RlZCB0byBwcmludGFibGUgY2hhcmFjdGVycy4pCisKK0xpdGVyYWxzIG9yIG1hdGNoIGxlbmd0aHMgYXJlIGNvbXByZXNzZWQgd2l0aCBvbmUgSHVmZm1hbiB0cmVlLCBhbmQKK21hdGNoIGRpc3RhbmNlcyBhcmUgY29tcHJlc3NlZCB3aXRoIGFub3RoZXIgdHJlZS4gVGhlIHRyZWVzIGFyZSBzdG9yZWQKK2luIGEgY29tcGFjdCBmb3JtIGF0IHRoZSBzdGFydCBvZiBlYWNoIGJsb2NrLiBUaGUgYmxvY2tzIGNhbiBoYXZlIGFueQorc2l6ZSAoZXhjZXB0IHRoYXQgdGhlIGNvbXByZXNzZWQgZGF0YSBmb3Igb25lIGJsb2NrIG11c3QgZml0IGluCithdmFpbGFibGUgbWVtb3J5KS4gQSBibG9jayBpcyB0ZXJtaW5hdGVkIHdoZW4gZGVmbGF0ZSgpIGRldGVybWluZXMgdGhhdAoraXQgd291bGQgYmUgdXNlZnVsIHRvIHN0YXJ0IGFub3RoZXIgYmxvY2sgd2l0aCBmcmVzaCB0cmVlcy4gKFRoaXMgaXMKK3NvbWV3aGF0IHNpbWlsYXIgdG8gdGhlIGJlaGF2aW9yIG9mIExaVy1iYXNlZCBfY29tcHJlc3NfLikKKworRHVwbGljYXRlZCBzdHJpbmdzIGFyZSBmb3VuZCB1c2luZyBhIGhhc2ggdGFibGUuIEFsbCBpbnB1dCBzdHJpbmdzIG9mCitsZW5ndGggMyBhcmUgaW5zZXJ0ZWQgaW4gdGhlIGhhc2ggdGFibGUuIEEgaGFzaCBpbmRleCBpcyBjb21wdXRlZCBmb3IKK3RoZSBuZXh0IDMgYnl0ZXMuIElmIHRoZSBoYXNoIGNoYWluIGZvciB0aGlzIGluZGV4IGlzIG5vdCBlbXB0eSwgYWxsCitzdHJpbmdzIGluIHRoZSBjaGFpbiBhcmUgY29tcGFyZWQgd2l0aCB0aGUgY3VycmVudCBpbnB1dCBzdHJpbmcsIGFuZAordGhlIGxvbmdlc3QgbWF0Y2ggaXMgc2VsZWN0ZWQuCisKK1RoZSBoYXNoIGNoYWlucyBhcmUgc2VhcmNoZWQgc3RhcnRpbmcgd2l0aCB0aGUgbW9zdCByZWNlbnQgc3RyaW5ncywgdG8KK2Zhdm9yIHNtYWxsIGRpc3RhbmNlcyBhbmQgdGh1cyB0YWtlIGFkdmFudGFnZSBvZiB0aGUgSHVmZm1hbiBlbmNvZGluZy4KK1RoZSBoYXNoIGNoYWlucyBhcmUgc2luZ2x5IGxpbmtlZC4gVGhlcmUgYXJlIG5vIGRlbGV0aW9ucyBmcm9tIHRoZQoraGFzaCBjaGFpbnMsIHRoZSBhbGdvcml0aG0gc2ltcGx5IGRpc2NhcmRzIG1hdGNoZXMgdGhhdCBhcmUgdG9vIG9sZC4KKworVG8gYXZvaWQgYSB3b3JzdC1jYXNlIHNpdHVhdGlvbiwgdmVyeSBsb25nIGhhc2ggY2hhaW5zIGFyZSBhcmJpdHJhcmlseQordHJ1bmNhdGVkIGF0IGEgY2VydGFpbiBsZW5ndGgsIGRldGVybWluZWQgYnkgYSBydW50aW1lIG9wdGlvbiAobGV2ZWwKK3BhcmFtZXRlciBvZiBkZWZsYXRlSW5pdCkuIFNvIGRlZmxhdGUoKSBkb2VzIG5vdCBhbHdheXMgZmluZCB0aGUgbG9uZ2VzdAorcG9zc2libGUgbWF0Y2ggYnV0IGdlbmVyYWxseSBmaW5kcyBhIG1hdGNoIHdoaWNoIGlzIGxvbmcgZW5vdWdoLgorCitkZWZsYXRlKCkgYWxzbyBkZWZlcnMgdGhlIHNlbGVjdGlvbiBvZiBtYXRjaGVzIHdpdGggYSBsYXp5IGV2YWx1YXRpb24KK21lY2hhbmlzbS4gQWZ0ZXIgYSBtYXRjaCBvZiBsZW5ndGggTiBoYXMgYmVlbiBmb3VuZCwgZGVmbGF0ZSgpIHNlYXJjaGVzIGZvcgorYSBsb25nZXIgbWF0Y2ggYXQgdGhlIG5leHQgaW5wdXQgYnl0ZS4gSWYgYSBsb25nZXIgbWF0Y2ggaXMgZm91bmQsIHRoZQorcHJldmlvdXMgbWF0Y2ggaXMgdHJ1bmNhdGVkIHRvIGEgbGVuZ3RoIG9mIG9uZSAodGh1cyBwcm9kdWNpbmcgYSBzaW5nbGUKK2xpdGVyYWwgYnl0ZSkgYW5kIHRoZSBwcm9jZXNzIG9mIGxhenkgZXZhbHVhdGlvbiBiZWdpbnMgYWdhaW4uIE90aGVyd2lzZSwKK3RoZSBvcmlnaW5hbCBtYXRjaCBpcyBrZXB0LCBhbmQgdGhlIG5leHQgbWF0Y2ggc2VhcmNoIGlzIGF0dGVtcHRlZCBvbmx5IE4KK3N0ZXBzIGxhdGVyLgorCitUaGUgbGF6eSBtYXRjaCBldmFsdWF0aW9uIGlzIGFsc28gc3ViamVjdCB0byBhIHJ1bnRpbWUgcGFyYW1ldGVyLiBJZgordGhlIGN1cnJlbnQgbWF0Y2ggaXMgbG9uZyBlbm91Z2gsIGRlZmxhdGUoKSByZWR1Y2VzIHRoZSBzZWFyY2ggZm9yIGEgbG9uZ2VyCittYXRjaCwgdGh1cyBzcGVlZGluZyB1cCB0aGUgd2hvbGUgcHJvY2Vzcy4gSWYgY29tcHJlc3Npb24gcmF0aW8gaXMgbW9yZQoraW1wb3J0YW50IHRoYW4gc3BlZWQsIGRlZmxhdGUoKSBhdHRlbXB0cyBhIGNvbXBsZXRlIHNlY29uZCBzZWFyY2ggZXZlbiBpZgordGhlIGZpcnN0IG1hdGNoIGlzIGFscmVhZHkgbG9uZyBlbm91Z2guCisKK1RoZSBsYXp5IG1hdGNoIGV2YWx1YXRpb24gaXMgbm90IHBlcmZvcm1lZCBmb3IgdGhlIGZhc3Rlc3QgY29tcHJlc3Npb24KK21vZGVzIChsZXZlbCBwYXJhbWV0ZXIgMSB0byAzKS4gRm9yIHRoZXNlIGZhc3QgbW9kZXMsIG5ldyBzdHJpbmdzCithcmUgaW5zZXJ0ZWQgaW4gdGhlIGhhc2ggdGFibGUgb25seSB3aGVuIG5vIG1hdGNoIHdhcyBmb3VuZCwgb3IKK3doZW4gdGhlIG1hdGNoIGlzIG5vdCB0b28gbG9uZy4gVGhpcyBkZWdyYWRlcyB0aGUgY29tcHJlc3Npb24gcmF0aW8KK2J1dCBzYXZlcyB0aW1lIHNpbmNlIHRoZXJlIGFyZSBib3RoIGZld2VyIGluc2VydGlvbnMgYW5kIGZld2VyIHNlYXJjaGVzLgorCisKKzIuIERlY29tcHJlc3Npb24gYWxnb3JpdGhtIChpbmZsYXRlKQorCisyLjEgSW50cm9kdWN0aW9uCisKK1RoZSBrZXkgcXVlc3Rpb24gaXMgaG93IHRvIHJlcHJlc2VudCBhIEh1ZmZtYW4gY29kZSAob3IgYW55IHByZWZpeCBjb2RlKSBzbwordGhhdCB5b3UgY2FuIGRlY29kZSBmYXN0LiAgVGhlIG1vc3QgaW1wb3J0YW50IGNoYXJhY3RlcmlzdGljIGlzIHRoYXQgc2hvcnRlcgorY29kZXMgYXJlIG11Y2ggbW9yZSBjb21tb24gdGhhbiBsb25nZXIgY29kZXMsIHNvIHBheSBhdHRlbnRpb24gdG8gZGVjb2RpbmcgdGhlCitzaG9ydCBjb2RlcyBmYXN0LCBhbmQgbGV0IHRoZSBsb25nIGNvZGVzIHRha2UgbG9uZ2VyIHRvIGRlY29kZS4KKworaW5mbGF0ZSgpIHNldHMgdXAgYSBmaXJzdCBsZXZlbCB0YWJsZSB0aGF0IGNvdmVycyBzb21lIG51bWJlciBvZiBiaXRzIG9mCitpbnB1dCBsZXNzIHRoYW4gdGhlIGxlbmd0aCBvZiBsb25nZXN0IGNvZGUuICBJdCBnZXRzIHRoYXQgbWFueSBiaXRzIGZyb20gdGhlCitzdHJlYW0sIGFuZCBsb29rcyBpdCB1cCBpbiB0aGUgdGFibGUuICBUaGUgdGFibGUgd2lsbCB0ZWxsIGlmIHRoZSBuZXh0Citjb2RlIGlzIHRoYXQgbWFueSBiaXRzIG9yIGxlc3MgYW5kIGhvdyBtYW55LCBhbmQgaWYgaXQgaXMsIGl0IHdpbGwgdGVsbAordGhlIHZhbHVlLCBlbHNlIGl0IHdpbGwgcG9pbnQgdG8gdGhlIG5leHQgbGV2ZWwgdGFibGUgZm9yIHdoaWNoIGluZmxhdGUoKQorZ3JhYnMgbW9yZSBiaXRzIGFuZCB0cmllcyB0byBkZWNvZGUgYSBsb25nZXIgY29kZS4KKworSG93IG1hbnkgYml0cyB0byBtYWtlIHRoZSBmaXJzdCBsb29rdXAgaXMgYSB0cmFkZW9mZiBiZXR3ZWVuIHRoZSB0aW1lIGl0Cit0YWtlcyB0byBkZWNvZGUgYW5kIHRoZSB0aW1lIGl0IHRha2VzIHRvIGJ1aWxkIHRoZSB0YWJsZS4gIElmIGJ1aWxkaW5nIHRoZQordGFibGUgdG9vayBubyB0aW1lIChhbmQgaWYgeW91IGhhZCBpbmZpbml0ZSBtZW1vcnkpLCB0aGVuIHRoZXJlIHdvdWxkIG9ubHkKK2JlIGEgZmlyc3QgbGV2ZWwgdGFibGUgdG8gY292ZXIgYWxsIHRoZSB3YXkgdG8gdGhlIGxvbmdlc3QgY29kZS4gIEhvd2V2ZXIsCitidWlsZGluZyB0aGUgdGFibGUgZW5kcyB1cCB0YWtpbmcgYSBsb3QgbG9uZ2VyIGZvciBtb3JlIGJpdHMgc2luY2Ugc2hvcnQKK2NvZGVzIGFyZSByZXBsaWNhdGVkIG1hbnkgdGltZXMgaW4gc3VjaCBhIHRhYmxlLiAgV2hhdCBpbmZsYXRlKCkgZG9lcyBpcworc2ltcGx5IHRvIG1ha2UgdGhlIG51bWJlciBvZiBiaXRzIGluIHRoZSBmaXJzdCB0YWJsZSBhIHZhcmlhYmxlLCBhbmQgIHRoZW4KK3RvIHNldCB0aGF0IHZhcmlhYmxlIGZvciB0aGUgbWF4aW11bSBzcGVlZC4KKworRm9yIGluZmxhdGUsIHdoaWNoIGhhcyAyODYgcG9zc2libGUgY29kZXMgZm9yIHRoZSBsaXRlcmFsL2xlbmd0aCB0cmVlLCB0aGUgc2l6ZQorb2YgdGhlIGZpcnN0IHRhYmxlIGlzIG5pbmUgYml0cy4gIEFsc28gdGhlIGRpc3RhbmNlIHRyZWVzIGhhdmUgMzAgcG9zc2libGUKK3ZhbHVlcywgYW5kIHRoZSBzaXplIG9mIHRoZSBmaXJzdCB0YWJsZSBpcyBzaXggYml0cy4gIE5vdGUgdGhhdCBmb3IgZWFjaCBvZgordGhvc2UgY2FzZXMsIHRoZSB0YWJsZSBlbmRlZCB1cCBvbmUgYml0IGxvbmdlciB0aGFuIHRoZSBgYGF2ZXJhZ2UnJyBjb2RlCitsZW5ndGgsIGkuZS4gdGhlIGNvZGUgbGVuZ3RoIG9mIGFuIGFwcHJveGltYXRlbHkgZmxhdCBjb2RlIHdoaWNoIHdvdWxkIGJlIGEKK2xpdHRsZSBtb3JlIHRoYW4gZWlnaHQgYml0cyBmb3IgMjg2IHN5bWJvbHMgYW5kIGEgbGl0dGxlIGxlc3MgdGhhbiBmaXZlIGJpdHMKK2ZvciAzMCBzeW1ib2xzLgorCisKKzIuMiBNb3JlIGRldGFpbHMgb24gdGhlIGluZmxhdGUgdGFibGUgbG9va3VwCisKK09rLCB5b3Ugd2FudCB0byBrbm93IHdoYXQgdGhpcyBjbGV2ZXJseSBvYmZ1c2NhdGVkIGluZmxhdGUgdHJlZSBhY3R1YWxseQorbG9va3MgbGlrZS4gIFlvdSBhcmUgY29ycmVjdCB0aGF0IGl0J3Mgbm90IGEgSHVmZm1hbiB0cmVlLiAgSXQgaXMgc2ltcGx5IGEKK2xvb2t1cCB0YWJsZSBmb3IgdGhlIGZpcnN0LCBsZXQncyBzYXksIG5pbmUgYml0cyBvZiBhIEh1ZmZtYW4gc3ltYm9sLiAgVGhlCitzeW1ib2wgY291bGQgYmUgYXMgc2hvcnQgYXMgb25lIGJpdCBvciBhcyBsb25nIGFzIDE1IGJpdHMuICBJZiBhIHBhcnRpY3VsYXIKK3N5bWJvbCBpcyBzaG9ydGVyIHRoYW4gbmluZSBiaXRzLCB0aGVuIHRoYXQgc3ltYm9sJ3MgdHJhbnNsYXRpb24gaXMgZHVwbGljYXRlZAoraW4gYWxsIHRob3NlIGVudHJpZXMgdGhhdCBzdGFydCB3aXRoIHRoYXQgc3ltYm9sJ3MgYml0cy4gIEZvciBleGFtcGxlLCBpZiB0aGUKK3N5bWJvbCBpcyBmb3VyIGJpdHMsIHRoZW4gaXQncyBkdXBsaWNhdGVkIDMyIHRpbWVzIGluIGEgbmluZS1iaXQgdGFibGUuICBJZiBhCitzeW1ib2wgaXMgbmluZSBiaXRzIGxvbmcsIGl0IGFwcGVhcnMgaW4gdGhlIHRhYmxlIG9uY2UuCisKK0lmIHRoZSBzeW1ib2wgaXMgbG9uZ2VyIHRoYW4gbmluZSBiaXRzLCB0aGVuIHRoYXQgZW50cnkgaW4gdGhlIHRhYmxlIHBvaW50cwordG8gYW5vdGhlciBzaW1pbGFyIHRhYmxlIGZvciB0aGUgcmVtYWluaW5nIGJpdHMuICBBZ2FpbiwgdGhlcmUgYXJlIGR1cGxpY2F0ZWQKK2VudHJpZXMgYXMgbmVlZGVkLiAgVGhlIGlkZWEgaXMgdGhhdCBtb3N0IG9mIHRoZSB0aW1lIHRoZSBzeW1ib2wgd2lsbCBiZSBzaG9ydAorYW5kIHRoZXJlIHdpbGwgb25seSBiZSBvbmUgdGFibGUgbG9vayB1cC4gIChUaGF0J3Mgd2hvbGUgaWRlYSBiZWhpbmQgZGF0YQorY29tcHJlc3Npb24gaW4gdGhlIGZpcnN0IHBsYWNlLikgIEZvciB0aGUgbGVzcyBmcmVxdWVudCBsb25nIHN5bWJvbHMsIHRoZXJlCit3aWxsIGJlIHR3byBsb29rdXBzLiAgSWYgeW91IGhhZCBhIGNvbXByZXNzaW9uIG1ldGhvZCB3aXRoIHJlYWxseSBsb25nCitzeW1ib2xzLCB5b3UgY291bGQgaGF2ZSBhcyBtYW55IGxldmVscyBvZiBsb29rdXBzIGFzIGlzIGVmZmljaWVudC4gIEZvcgoraW5mbGF0ZSwgdHdvIGlzIGVub3VnaC4KKworU28gYSB0YWJsZSBlbnRyeSBlaXRoZXIgcG9pbnRzIHRvIGFub3RoZXIgdGFibGUgKGluIHdoaWNoIGNhc2UgbmluZSBiaXRzIGluCit0aGUgYWJvdmUgZXhhbXBsZSBhcmUgZ29iYmxlZCksIG9yIGl0IGNvbnRhaW5zIHRoZSB0cmFuc2xhdGlvbiBmb3IgdGhlIHN5bWJvbAorYW5kIHRoZSBudW1iZXIgb2YgYml0cyB0byBnb2JibGUuICBUaGVuIHlvdSBzdGFydCBhZ2FpbiB3aXRoIHRoZSBuZXh0Cit1bmdvYmJsZWQgYml0LgorCitZb3UgbWF5IHdvbmRlcjogd2h5IG5vdCBqdXN0IGhhdmUgb25lIGxvb2t1cCB0YWJsZSBmb3IgaG93IGV2ZXIgbWFueSBiaXRzIHRoZQorbG9uZ2VzdCBzeW1ib2wgaXM/ICBUaGUgcmVhc29uIGlzIHRoYXQgaWYgeW91IGRvIHRoYXQsIHlvdSBlbmQgdXAgc3BlbmRpbmcKK21vcmUgdGltZSBmaWxsaW5nIGluIGR1cGxpY2F0ZSBzeW1ib2wgZW50cmllcyB0aGFuIHlvdSBkbyBhY3R1YWxseSBkZWNvZGluZy4KK0F0IGxlYXN0IGZvciBkZWZsYXRlJ3Mgb3V0cHV0IHRoYXQgZ2VuZXJhdGVzIG5ldyB0cmVlcyBldmVyeSBzZXZlcmFsIDEwJ3Mgb2YKK2tieXRlcy4gIFlvdSBjYW4gaW1hZ2luZSB0aGF0IGZpbGxpbmcgaW4gYSAyXjE1IGVudHJ5IHRhYmxlIGZvciBhIDE1LWJpdCBjb2RlCit3b3VsZCB0YWtlIHRvbyBsb25nIGlmIHlvdSdyZSBvbmx5IGRlY29kaW5nIHNldmVyYWwgdGhvdXNhbmQgc3ltYm9scy4gIEF0IHRoZQorb3RoZXIgZXh0cmVtZSwgeW91IGNvdWxkIG1ha2UgYSBuZXcgdGFibGUgZm9yIGV2ZXJ5IGJpdCBpbiB0aGUgY29kZS4gIEluIGZhY3QsCit0aGF0J3MgZXNzZW50aWFsbHkgYSBIdWZmbWFuIHRyZWUuICBCdXQgdGhlbiB5b3Ugc3BlbmQgdG9vIG11Y2ggdGltZQordHJhdmVyc2luZyB0aGUgdHJlZSB3aGlsZSBkZWNvZGluZywgZXZlbiBmb3Igc2hvcnQgc3ltYm9scy4KKworU28gdGhlIG51bWJlciBvZiBiaXRzIGZvciB0aGUgZmlyc3QgbG9va3VwIHRhYmxlIGlzIGEgdHJhZGUgb2YgdGhlIHRpbWUgdG8KK2ZpbGwgb3V0IHRoZSB0YWJsZSB2cy4gdGhlIHRpbWUgc3BlbnQgbG9va2luZyBhdCB0aGUgc2Vjb25kIGxldmVsIGFuZCBhYm92ZSBvZgordGhlIHRhYmxlLgorCitIZXJlIGlzIGFuIGV4YW1wbGUsIHNjYWxlZCBkb3duOgorCitUaGUgY29kZSBiZWluZyBkZWNvZGVkLCB3aXRoIDEwIHN5bWJvbHMsIGZyb20gMSB0byA2IGJpdHMgbG9uZzoKKworQTogMAorQjogMTAKK0M6IDExMDAKK0Q6IDExMDEwCitFOiAxMTAxMQorRjogMTExMDAKK0c6IDExMTAxCitIOiAxMTExMAorSTogMTExMTEwCitKOiAxMTExMTEKKworTGV0J3MgbWFrZSB0aGUgZmlyc3QgdGFibGUgdGhyZWUgYml0cyBsb25nIChlaWdodCBlbnRyaWVzKToKKworMDAwOiBBLDEKKzAwMTogQSwxCiswMTA6IEEsMQorMDExOiBBLDEKKzEwMDogQiwyCisxMDE6IEIsMgorMTEwOiAtPiB0YWJsZSBYIChnb2JibGUgMyBiaXRzKQorMTExOiAtPiB0YWJsZSBZIChnb2JibGUgMyBiaXRzKQorCitFYWNoIGVudHJ5IGlzIHdoYXQgdGhlIGJpdHMgZGVjb2RlIGFzIGFuZCBob3cgbWFueSBiaXRzIHRoYXQgaXMsIGkuZS4gaG93CittYW55IGJpdHMgdG8gZ29iYmxlLiAgT3IgdGhlIGVudHJ5IHBvaW50cyB0byBhbm90aGVyIHRhYmxlLCB3aXRoIHRoZSBudW1iZXIgb2YKK2JpdHMgdG8gZ29iYmxlIGltcGxpY2l0IGluIHRoZSBzaXplIG9mIHRoZSB0YWJsZS4KKworVGFibGUgWCBpcyB0d28gYml0cyBsb25nIHNpbmNlIHRoZSBsb25nZXN0IGNvZGUgc3RhcnRpbmcgd2l0aCAxMTAgaXMgZml2ZSBiaXRzCitsb25nOgorCiswMDogQywxCiswMTogQywxCisxMDogRCwyCisxMTogRSwyCisKK1RhYmxlIFkgaXMgdGhyZWUgYml0cyBsb25nIHNpbmNlIHRoZSBsb25nZXN0IGNvZGUgc3RhcnRpbmcgd2l0aCAxMTEgaXMgc2l4CitiaXRzIGxvbmc6CisKKzAwMDogRiwyCiswMDE6IEYsMgorMDEwOiBHLDIKKzAxMTogRywyCisxMDA6IEgsMgorMTAxOiBILDIKKzExMDogSSwzCisxMTE6IEosMworCitTbyB3aGF0IHdlIGhhdmUgaGVyZSBhcmUgdGhyZWUgdGFibGVzIHdpdGggYSB0b3RhbCBvZiAyMCBlbnRyaWVzIHRoYXQgaGFkIHRvCitiZSBjb25zdHJ1Y3RlZC4gIFRoYXQncyBjb21wYXJlZCB0byA2NCBlbnRyaWVzIGZvciBhIHNpbmdsZSB0YWJsZS4gIE9yCitjb21wYXJlZCB0byAxNiBlbnRyaWVzIGZvciBhIEh1ZmZtYW4gdHJlZSAoc2l4IHR3byBlbnRyeSB0YWJsZXMgYW5kIG9uZSBmb3VyCitlbnRyeSB0YWJsZSkuICBBc3N1bWluZyB0aGF0IHRoZSBjb2RlIGlkZWFsbHkgcmVwcmVzZW50cyB0aGUgcHJvYmFiaWxpdHkgb2YKK3RoZSBzeW1ib2xzLCBpdCB0YWtlcyBvbiB0aGUgYXZlcmFnZSAxLjI1IGxvb2t1cHMgcGVyIHN5bWJvbC4gIFRoYXQncyBjb21wYXJlZAordG8gb25lIGxvb2t1cCBmb3IgdGhlIHNpbmdsZSB0YWJsZSwgb3IgMS42NiBsb29rdXBzIHBlciBzeW1ib2wgZm9yIHRoZQorSHVmZm1hbiB0cmVlLgorCitUaGVyZSwgSSB0aGluayB0aGF0IGdpdmVzIHlvdSBhIHBpY3R1cmUgb2Ygd2hhdCdzIGdvaW5nIG9uLiAgRm9yIGluZmxhdGUsIHRoZQorbWVhbmluZyBvZiBhIHBhcnRpY3VsYXIgc3ltYm9sIGlzIG9mdGVuIG1vcmUgdGhhbiBqdXN0IGEgbGV0dGVyLiAgSXQgY2FuIGJlIGEKK2J5dGUgKGEgImxpdGVyYWwiKSwgb3IgaXQgY2FuIGJlIGVpdGhlciBhIGxlbmd0aCBvciBhIGRpc3RhbmNlIHdoaWNoCitpbmRpY2F0ZXMgYSBiYXNlIHZhbHVlIGFuZCBhIG51bWJlciBvZiBiaXRzIHRvIGZldGNoIGFmdGVyIHRoZSBjb2RlIHRoYXQgaXMKK2FkZGVkIHRvIHRoZSBiYXNlIHZhbHVlLiAgT3IgaXQgbWlnaHQgYmUgdGhlIHNwZWNpYWwgZW5kLW9mLWJsb2NrIGNvZGUuICBUaGUKK2RhdGEgc3RydWN0dXJlcyBjcmVhdGVkIGluIGluZnRyZWVzLmMgdHJ5IHRvIGVuY29kZSBhbGwgdGhhdCBpbmZvcm1hdGlvbgorY29tcGFjdGx5IGluIHRoZSB0YWJsZXMuCisKKworSmVhbi1sb3VwIEdhaWxseSAgICAgICAgTWFyayBBZGxlcgoramxvdXBAZ3ppcC5vcmcgICAgICAgICAgbWFkbGVyQGFsdW1uaS5jYWx0ZWNoLmVkdQorCisKK1JlZmVyZW5jZXM6CisKK1tMWjc3XSBaaXYgSi4sIExlbXBlbCBBLiwgYGBBIFVuaXZlcnNhbCBBbGdvcml0aG0gZm9yIFNlcXVlbnRpYWwgRGF0YQorQ29tcHJlc3Npb24sJycgSUVFRSBUcmFuc2FjdGlvbnMgb24gSW5mb3JtYXRpb24gVGhlb3J5LCBWb2wuIDIzLCBOby4gMywKK3BwLiAzMzctMzQzLgorCitgYERFRkxBVEUgQ29tcHJlc3NlZCBEYXRhIEZvcm1hdCBTcGVjaWZpY2F0aW9uJycgYXZhaWxhYmxlIGluCitodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMxOTUxCmRpZmYgLS1naXQgYS9zcmMvZG9jL2NyYy1kb2MuMS4wLnBkZiBiL3NyYy9kb2MvY3JjLWRvYy4xLjAucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2OTQyZWMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvZG9jL2NyYy1kb2MuMS4wLnBkZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zcmMvZG9jL3JmYzE5NTAudHh0IGIvc3JjL2RvYy9yZmMxOTUwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTY0MjhhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2RvYy9yZmMxOTUwLnR4dApAQCAtMCwwICsxLDYxOSBAQAorCisKKworCisKKworTmV0d29yayBXb3JraW5nIEdyb3VwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQLiBEZXV0c2NoCitSZXF1ZXN0IGZvciBDb21tZW50czogMTk1MCAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsYWRkaW4gRW50ZXJwcmlzZXMKK0NhdGVnb3J5OiBJbmZvcm1hdGlvbmFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKLUwuIEdhaWxseQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZm8tWklQCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF5IDE5OTYKKworCisgICAgICAgICBaTElCIENvbXByZXNzZWQgRGF0YSBGb3JtYXQgU3BlY2lmaWNhdGlvbiB2ZXJzaW9uIDMuMworCitTdGF0dXMgb2YgVGhpcyBNZW1vCisKKyAgIFRoaXMgbWVtbyBwcm92aWRlcyBpbmZvcm1hdGlvbiBmb3IgdGhlIEludGVybmV0IGNvbW11bml0eS4gIFRoaXMgbWVtbworICAgZG9lcyBub3Qgc3BlY2lmeSBhbiBJbnRlcm5ldCBzdGFuZGFyZCBvZiBhbnkga2luZC4gIERpc3RyaWJ1dGlvbiBvZgorICAgdGhpcyBtZW1vIGlzIHVubGltaXRlZC4KKworSUVTRyBOb3RlOgorCisgICBUaGUgSUVTRyB0YWtlcyBubyBwb3NpdGlvbiBvbiB0aGUgdmFsaWRpdHkgb2YgYW55IEludGVsbGVjdHVhbAorICAgUHJvcGVydHkgUmlnaHRzIHN0YXRlbWVudHMgY29udGFpbmVkIGluIHRoaXMgZG9jdW1lbnQuCisKK05vdGljZXMKKworICAgQ29weXJpZ2h0IChjKSAxOTk2IEwuIFBldGVyIERldXRzY2ggYW5kIEplYW4tTG91cCBHYWlsbHkKKworICAgUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhpcyBkb2N1bWVudCBmb3IgYW55CisgICBwdXJwb3NlIGFuZCB3aXRob3V0IGNoYXJnZSwgaW5jbHVkaW5nIHRyYW5zbGF0aW9ucyBpbnRvIG90aGVyCisgICBsYW5ndWFnZXMgYW5kIGluY29ycG9yYXRpb24gaW50byBjb21waWxhdGlvbnMsIHByb3ZpZGVkIHRoYXQgdGhlCisgICBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIG5vdGljZSBhcmUgcHJlc2VydmVkLCBhbmQgdGhhdCBhbnkKKyAgIHN1YnN0YW50aXZlIGNoYW5nZXMgb3IgZGVsZXRpb25zIGZyb20gdGhlIG9yaWdpbmFsIGFyZSBjbGVhcmx5CisgICBtYXJrZWQuCisKKyAgIEEgcG9pbnRlciB0byB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBhbmQgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGluCisgICBIVE1MIGZvcm1hdCBjYW4gYmUgZm91bmQgYXQgdGhlIFVSTAorICAgPGZ0cDovL2Z0cC51dS5uZXQvZ3JhcGhpY3MvcG5nL2RvY3VtZW50cy96bGliL3pkb2MtaW5kZXguaHRtbD4uCisKK0Fic3RyYWN0CisKKyAgIFRoaXMgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIGEgbG9zc2xlc3MgY29tcHJlc3NlZCBkYXRhIGZvcm1hdC4gIFRoZQorICAgZGF0YSBjYW4gYmUgcHJvZHVjZWQgb3IgY29uc3VtZWQsIGV2ZW4gZm9yIGFuIGFyYml0cmFyaWx5IGxvbmcKKyAgIHNlcXVlbnRpYWxseSBwcmVzZW50ZWQgaW5wdXQgZGF0YSBzdHJlYW0sIHVzaW5nIG9ubHkgYW4gYSBwcmlvcmkKKyAgIGJvdW5kZWQgYW1vdW50IG9mIGludGVybWVkaWF0ZSBzdG9yYWdlLiAgVGhlIGZvcm1hdCBwcmVzZW50bHkgdXNlcworICAgdGhlIERFRkxBVEUgY29tcHJlc3Npb24gbWV0aG9kIGJ1dCBjYW4gYmUgZWFzaWx5IGV4dGVuZGVkIHRvIHVzZQorICAgb3RoZXIgY29tcHJlc3Npb24gbWV0aG9kcy4gIEl0IGNhbiBiZSBpbXBsZW1lbnRlZCByZWFkaWx5IGluIGEgbWFubmVyCisgICBub3QgY292ZXJlZCBieSBwYXRlbnRzLiAgVGhpcyBzcGVjaWZpY2F0aW9uIGFsc28gZGVmaW5lcyB0aGUgQURMRVItMzIKKyAgIGNoZWNrc3VtIChhbiBleHRlbnNpb24gYW5kIGltcHJvdmVtZW50IG9mIHRoZSBGbGV0Y2hlciBjaGVja3N1bSksCisgICB1c2VkIGZvciBkZXRlY3Rpb24gb2YgZGF0YSBjb3JydXB0aW9uLCBhbmQgcHJvdmlkZXMgYW4gYWxnb3JpdGhtIGZvcgorICAgY29tcHV0aW5nIGl0LgorCisKKworCitEZXV0c2NoICYgR2FpbGx5ICAgICAgICAgICAgIEluZm9ybWF0aW9uYWwgICAgICAgICAgICAgICAgICAgICAgW1BhZ2UgMV0KKwwKK1JGQyAxOTUwICAgICAgIFpMSUIgQ29tcHJlc3NlZCBEYXRhIEZvcm1hdCBTcGVjaWZpY2F0aW9uICAgICAgICBNYXkgMTk5NgorCisKK1RhYmxlIG9mIENvbnRlbnRzCisKKyAgIDEuIEludHJvZHVjdGlvbiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gMgorICAgICAgMS4xLiBQdXJwb3NlIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAyCisgICAgICAxLjIuIEludGVuZGVkIGF1ZGllbmNlIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDMKKyAgICAgIDEuMy4gU2NvcGUgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gMworICAgICAgMS40LiBDb21wbGlhbmNlIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAzCisgICAgICAxLjUuICBEZWZpbml0aW9ucyBvZiB0ZXJtcyBhbmQgY29udmVudGlvbnMgdXNlZCAuLi4uLi4uLi4uLi4uLi4uIDMKKyAgICAgIDEuNi4gQ2hhbmdlcyBmcm9tIHByZXZpb3VzIHZlcnNpb25zIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gMworICAgMi4gRGV0YWlsZWQgc3BlY2lmaWNhdGlvbiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAzCisgICAgICAyLjEuIE92ZXJhbGwgY29udmVudGlvbnMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDMKKyAgICAgIDIuMi4gRGF0YSBmb3JtYXQgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gNAorICAgICAgMi4zLiBDb21wbGlhbmNlIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiA3CisgICAzLiBSZWZlcmVuY2VzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDcKKyAgIDQuIFNvdXJjZSBjb2RlIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gOAorICAgNS4gU2VjdXJpdHkgQ29uc2lkZXJhdGlvbnMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiA4CisgICA2LiBBY2tub3dsZWRnZW1lbnRzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDgKKyAgIDcuIEF1dGhvcnMnIEFkZHJlc3NlcyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gOAorICAgOC4gQXBwZW5kaXg6IFJhdGlvbmFsZSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiA5CisgICA5LiBBcHBlbmRpeDogU2FtcGxlIGNvZGUgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uMTAKKworMS4gSW50cm9kdWN0aW9uCisKKyAgIDEuMS4gUHVycG9zZQorCisgICAgICBUaGUgcHVycG9zZSBvZiB0aGlzIHNwZWNpZmljYXRpb24gaXMgdG8gZGVmaW5lIGEgbG9zc2xlc3MKKyAgICAgIGNvbXByZXNzZWQgZGF0YSBmb3JtYXQgdGhhdDoKKworICAgICAgICAgICogSXMgaW5kZXBlbmRlbnQgb2YgQ1BVIHR5cGUsIG9wZXJhdGluZyBzeXN0ZW0sIGZpbGUgc3lzdGVtLAorICAgICAgICAgICAgYW5kIGNoYXJhY3RlciBzZXQsIGFuZCBoZW5jZSBjYW4gYmUgdXNlZCBmb3IgaW50ZXJjaGFuZ2U7CisKKyAgICAgICAgICAqIENhbiBiZSBwcm9kdWNlZCBvciBjb25zdW1lZCwgZXZlbiBmb3IgYW4gYXJiaXRyYXJpbHkgbG9uZworICAgICAgICAgICAgc2VxdWVudGlhbGx5IHByZXNlbnRlZCBpbnB1dCBkYXRhIHN0cmVhbSwgdXNpbmcgb25seSBhbiBhCisgICAgICAgICAgICBwcmlvcmkgYm91bmRlZCBhbW91bnQgb2YgaW50ZXJtZWRpYXRlIHN0b3JhZ2UsIGFuZCBoZW5jZSBjYW4KKyAgICAgICAgICAgIGJlIHVzZWQgaW4gZGF0YSBjb21tdW5pY2F0aW9ucyBvciBzaW1pbGFyIHN0cnVjdHVyZXMgc3VjaCBhcworICAgICAgICAgICAgVW5peCBmaWx0ZXJzOworCisgICAgICAgICAgKiBDYW4gdXNlIGEgbnVtYmVyIG9mIGRpZmZlcmVudCBjb21wcmVzc2lvbiBtZXRob2RzOworCisgICAgICAgICAgKiBDYW4gYmUgaW1wbGVtZW50ZWQgcmVhZGlseSBpbiBhIG1hbm5lciBub3QgY292ZXJlZCBieQorICAgICAgICAgICAgcGF0ZW50cywgYW5kIGhlbmNlIGNhbiBiZSBwcmFjdGljZWQgZnJlZWx5LgorCisgICAgICBUaGUgZGF0YSBmb3JtYXQgZGVmaW5lZCBieSB0aGlzIHNwZWNpZmljYXRpb24gZG9lcyBub3QgYXR0ZW1wdCB0bworICAgICAgYWxsb3cgcmFuZG9tIGFjY2VzcyB0byBjb21wcmVzc2VkIGRhdGEuCisKKworCisKKworCisKK0RldXRzY2ggJiBHYWlsbHkgICAgICAgICAgICAgSW5mb3JtYXRpb25hbCAgICAgICAgICAgICAgICAgICAgICBbUGFnZSAyXQorDAorUkZDIDE5NTAgICAgICAgWkxJQiBDb21wcmVzc2VkIERhdGEgRm9ybWF0IFNwZWNpZmljYXRpb24gICAgICAgIE1heSAxOTk2CisKKworICAgMS4yLiBJbnRlbmRlZCBhdWRpZW5jZQorCisgICAgICBUaGlzIHNwZWNpZmljYXRpb24gaXMgaW50ZW5kZWQgZm9yIHVzZSBieSBpbXBsZW1lbnRvcnMgb2Ygc29mdHdhcmUKKyAgICAgIHRvIGNvbXByZXNzIGRhdGEgaW50byB6bGliIGZvcm1hdCBhbmQvb3IgZGVjb21wcmVzcyBkYXRhIGZyb20gemxpYgorICAgICAgZm9ybWF0LgorCisgICAgICBUaGUgdGV4dCBvZiB0aGUgc3BlY2lmaWNhdGlvbiBhc3N1bWVzIGEgYmFzaWMgYmFja2dyb3VuZCBpbgorICAgICAgcHJvZ3JhbW1pbmcgYXQgdGhlIGxldmVsIG9mIGJpdHMgYW5kIG90aGVyIHByaW1pdGl2ZSBkYXRhCisgICAgICByZXByZXNlbnRhdGlvbnMuCisKKyAgIDEuMy4gU2NvcGUKKworICAgICAgVGhlIHNwZWNpZmljYXRpb24gc3BlY2lmaWVzIGEgY29tcHJlc3NlZCBkYXRhIGZvcm1hdCB0aGF0IGNhbiBiZQorICAgICAgdXNlZCBmb3IgaW4tbWVtb3J5IGNvbXByZXNzaW9uIG9mIGEgc2VxdWVuY2Ugb2YgYXJiaXRyYXJ5IGJ5dGVzLgorCisgICAxLjQuIENvbXBsaWFuY2UKKworICAgICAgVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIGEgY29tcGxpYW50IGRlY29tcHJlc3NvciBtdXN0IGJlCisgICAgICBhYmxlIHRvIGFjY2VwdCBhbmQgZGVjb21wcmVzcyBhbnkgZGF0YSBzZXQgdGhhdCBjb25mb3JtcyB0byBhbGwKKyAgICAgIHRoZSBzcGVjaWZpY2F0aW9ucyBwcmVzZW50ZWQgaGVyZTsgYSBjb21wbGlhbnQgY29tcHJlc3NvciBtdXN0CisgICAgICBwcm9kdWNlIGRhdGEgc2V0cyB0aGF0IGNvbmZvcm0gdG8gYWxsIHRoZSBzcGVjaWZpY2F0aW9ucyBwcmVzZW50ZWQKKyAgICAgIGhlcmUuCisKKyAgIDEuNS4gIERlZmluaXRpb25zIG9mIHRlcm1zIGFuZCBjb252ZW50aW9ucyB1c2VkCisKKyAgICAgIGJ5dGU6IDggYml0cyBzdG9yZWQgb3IgdHJhbnNtaXR0ZWQgYXMgYSB1bml0IChzYW1lIGFzIGFuIG9jdGV0KS4KKyAgICAgIChGb3IgdGhpcyBzcGVjaWZpY2F0aW9uLCBhIGJ5dGUgaXMgZXhhY3RseSA4IGJpdHMsIGV2ZW4gb24KKyAgICAgIG1hY2hpbmVzIHdoaWNoIHN0b3JlIGEgY2hhcmFjdGVyIG9uIGEgbnVtYmVyIG9mIGJpdHMgZGlmZmVyZW50CisgICAgICBmcm9tIDguKSBTZWUgYmVsb3csIGZvciB0aGUgbnVtYmVyaW5nIG9mIGJpdHMgd2l0aGluIGEgYnl0ZS4KKworICAgMS42LiBDaGFuZ2VzIGZyb20gcHJldmlvdXMgdmVyc2lvbnMKKworICAgICAgVmVyc2lvbiAzLjEgd2FzIHRoZSBmaXJzdCBwdWJsaWMgcmVsZWFzZSBvZiB0aGlzIHNwZWNpZmljYXRpb24uCisgICAgICBJbiB2ZXJzaW9uIDMuMiwgc29tZSB0ZXJtaW5vbG9neSB3YXMgY2hhbmdlZCBhbmQgdGhlIEFkbGVyLTMyCisgICAgICBzYW1wbGUgY29kZSB3YXMgcmV3cml0dGVuIGZvciBjbGFyaXR5LiAgSW4gdmVyc2lvbiAzLjMsIHRoZQorICAgICAgc3VwcG9ydCBmb3IgYSBwcmVzZXQgZGljdGlvbmFyeSB3YXMgaW50cm9kdWNlZCwgYW5kIHRoZQorICAgICAgc3BlY2lmaWNhdGlvbiB3YXMgY29udmVydGVkIHRvIFJGQyBzdHlsZS4KKworMi4gRGV0YWlsZWQgc3BlY2lmaWNhdGlvbgorCisgICAyLjEuIE92ZXJhbGwgY29udmVudGlvbnMKKworICAgICAgSW4gdGhlIGRpYWdyYW1zIGJlbG93LCBhIGJveCBsaWtlIHRoaXM6CisKKyAgICAgICAgICstLS0rCisgICAgICAgICB8ICAgfCA8LS0gdGhlIHZlcnRpY2FsIGJhcnMgbWlnaHQgYmUgbWlzc2luZworICAgICAgICAgKy0tLSsKKworCisKKworRGV1dHNjaCAmIEdhaWxseSAgICAgICAgICAgICBJbmZvcm1hdGlvbmFsICAgICAgICAgICAgICAgICAgICAgIFtQYWdlIDNdCisMCitSRkMgMTk1MCAgICAgICBaTElCIENvbXByZXNzZWQgRGF0YSBGb3JtYXQgU3BlY2lmaWNhdGlvbiAgICAgICAgTWF5IDE5OTYKKworCisgICAgICByZXByZXNlbnRzIG9uZSBieXRlOyBhIGJveCBsaWtlIHRoaXM6CisKKyAgICAgICAgICs9PT09PT09PT09PT09PSsKKyAgICAgICAgIHwgICAgICAgICAgICAgIHwKKyAgICAgICAgICs9PT09PT09PT09PT09PSsKKworICAgICAgcmVwcmVzZW50cyBhIHZhcmlhYmxlIG51bWJlciBvZiBieXRlcy4KKworICAgICAgQnl0ZXMgc3RvcmVkIHdpdGhpbiBhIGNvbXB1dGVyIGRvIG5vdCBoYXZlIGEgImJpdCBvcmRlciIsIHNpbmNlCisgICAgICB0aGV5IGFyZSBhbHdheXMgdHJlYXRlZCBhcyBhIHVuaXQuICBIb3dldmVyLCBhIGJ5dGUgY29uc2lkZXJlZCBhcworICAgICAgYW4gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDI1NSBkb2VzIGhhdmUgYSBtb3N0LSBhbmQgbGVhc3QtCisgICAgICBzaWduaWZpY2FudCBiaXQsIGFuZCBzaW5jZSB3ZSB3cml0ZSBudW1iZXJzIHdpdGggdGhlIG1vc3QtCisgICAgICBzaWduaWZpY2FudCBkaWdpdCBvbiB0aGUgbGVmdCwgd2UgYWxzbyB3cml0ZSBieXRlcyB3aXRoIHRoZSBtb3N0LQorICAgICAgc2lnbmlmaWNhbnQgYml0IG9uIHRoZSBsZWZ0LiAgSW4gdGhlIGRpYWdyYW1zIGJlbG93LCB3ZSBudW1iZXIgdGhlCisgICAgICBiaXRzIG9mIGEgYnl0ZSBzbyB0aGF0IGJpdCAwIGlzIHRoZSBsZWFzdC1zaWduaWZpY2FudCBiaXQsIGkuZS4sCisgICAgICB0aGUgYml0cyBhcmUgbnVtYmVyZWQ6CisKKyAgICAgICAgICstLS0tLS0tLSsKKyAgICAgICAgIHw3NjU0MzIxMHwKKyAgICAgICAgICstLS0tLS0tLSsKKworICAgICAgV2l0aGluIGEgY29tcHV0ZXIsIGEgbnVtYmVyIG1heSBvY2N1cHkgbXVsdGlwbGUgYnl0ZXMuICBBbGwKKyAgICAgIG11bHRpLWJ5dGUgbnVtYmVycyBpbiB0aGUgZm9ybWF0IGRlc2NyaWJlZCBoZXJlIGFyZSBzdG9yZWQgd2l0aAorICAgICAgdGhlIE1PU1Qtc2lnbmlmaWNhbnQgYnl0ZSBmaXJzdCAoYXQgdGhlIGxvd2VyIG1lbW9yeSBhZGRyZXNzKS4KKyAgICAgIEZvciBleGFtcGxlLCB0aGUgZGVjaW1hbCBudW1iZXIgNTIwIGlzIHN0b3JlZCBhczoKKworICAgICAgICAgICAgIDAgICAgIDEKKyAgICAgICAgICstLS0tLS0tLSstLS0tLS0tLSsKKyAgICAgICAgIHwwMDAwMDAxMHwwMDAwMTAwMHwKKyAgICAgICAgICstLS0tLS0tLSstLS0tLS0tLSsKKyAgICAgICAgICBeICAgICAgICBeCisgICAgICAgICAgfCAgICAgICAgfAorICAgICAgICAgIHwgICAgICAgICsgbGVzcyBzaWduaWZpY2FudCBieXRlID0gOAorICAgICAgICAgICsgbW9yZSBzaWduaWZpY2FudCBieXRlID0gMiB4IDI1NgorCisgICAyLjIuIERhdGEgZm9ybWF0CisKKyAgICAgIEEgemxpYiBzdHJlYW0gaGFzIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlOgorCisgICAgICAgICAgIDAgICAxCisgICAgICAgICArLS0tKy0tLSsKKyAgICAgICAgIHxDTUZ8RkxHfCAgIChtb3JlLS0+KQorICAgICAgICAgKy0tLSstLS0rCisKKworCisKKworCisKKworRGV1dHNjaCAmIEdhaWxseSAgICAgICAgICAgICBJbmZvcm1hdGlvbmFsICAgICAgICAgICAgICAgICAgICAgIFtQYWdlIDRdCisMCitSRkMgMTk1MCAgICAgICBaTElCIENvbXByZXNzZWQgRGF0YSBGb3JtYXQgU3BlY2lmaWNhdGlvbiAgICAgICAgTWF5IDE5OTYKKworCisgICAgICAoaWYgRkxHLkZESUNUIHNldCkKKworICAgICAgICAgICAwICAgMSAgIDIgICAzCisgICAgICAgICArLS0tKy0tLSstLS0rLS0tKworICAgICAgICAgfCAgICAgRElDVElEICAgIHwgICAobW9yZS0tPikKKyAgICAgICAgICstLS0rLS0tKy0tLSstLS0rCisKKyAgICAgICAgICs9PT09PT09PT09PT09PT09PT09PT0rLS0tKy0tLSstLS0rLS0tKworICAgICAgICAgfC4uLmNvbXByZXNzZWQgZGF0YS4uLnwgICAgQURMRVIzMiAgICB8CisgICAgICAgICArPT09PT09PT09PT09PT09PT09PT09Ky0tLSstLS0rLS0tKy0tLSsKKworICAgICAgQW55IGRhdGEgd2hpY2ggbWF5IGFwcGVhciBhZnRlciBBRExFUjMyIGFyZSBub3QgcGFydCBvZiB0aGUgemxpYgorICAgICAgc3RyZWFtLgorCisgICAgICBDTUYgKENvbXByZXNzaW9uIE1ldGhvZCBhbmQgZmxhZ3MpCisgICAgICAgICBUaGlzIGJ5dGUgaXMgZGl2aWRlZCBpbnRvIGEgNC1iaXQgY29tcHJlc3Npb24gbWV0aG9kIGFuZCBhIDQtCisgICAgICAgICBiaXQgaW5mb3JtYXRpb24gZmllbGQgZGVwZW5kaW5nIG9uIHRoZSBjb21wcmVzc2lvbiBtZXRob2QuCisKKyAgICAgICAgICAgIGJpdHMgMCB0byAzICBDTSAgICAgQ29tcHJlc3Npb24gbWV0aG9kCisgICAgICAgICAgICBiaXRzIDQgdG8gNyAgQ0lORk8gIENvbXByZXNzaW9uIGluZm8KKworICAgICAgQ00gKENvbXByZXNzaW9uIG1ldGhvZCkKKyAgICAgICAgIFRoaXMgaWRlbnRpZmllcyB0aGUgY29tcHJlc3Npb24gbWV0aG9kIHVzZWQgaW4gdGhlIGZpbGUuIENNID0gOAorICAgICAgICAgZGVub3RlcyB0aGUgImRlZmxhdGUiIGNvbXByZXNzaW9uIG1ldGhvZCB3aXRoIGEgd2luZG93IHNpemUgdXAKKyAgICAgICAgIHRvIDMySy4gIFRoaXMgaXMgdGhlIG1ldGhvZCB1c2VkIGJ5IGd6aXAgYW5kIFBORyAoc2VlCisgICAgICAgICByZWZlcmVuY2VzIFsxXSBhbmQgWzJdIGluIENoYXB0ZXIgMywgYmVsb3csIGZvciB0aGUgcmVmZXJlbmNlCisgICAgICAgICBkb2N1bWVudHMpLiAgQ00gPSAxNSBpcyByZXNlcnZlZC4gIEl0IG1pZ2h0IGJlIHVzZWQgaW4gYSBmdXR1cmUKKyAgICAgICAgIHZlcnNpb24gb2YgdGhpcyBzcGVjaWZpY2F0aW9uIHRvIGluZGljYXRlIHRoZSBwcmVzZW5jZSBvZiBhbgorICAgICAgICAgZXh0cmEgZmllbGQgYmVmb3JlIHRoZSBjb21wcmVzc2VkIGRhdGEuCisKKyAgICAgIENJTkZPIChDb21wcmVzc2lvbiBpbmZvKQorICAgICAgICAgRm9yIENNID0gOCwgQ0lORk8gaXMgdGhlIGJhc2UtMiBsb2dhcml0aG0gb2YgdGhlIExaNzcgd2luZG93CisgICAgICAgICBzaXplLCBtaW51cyBlaWdodCAoQ0lORk89NyBpbmRpY2F0ZXMgYSAzMksgd2luZG93IHNpemUpLiBWYWx1ZXMKKyAgICAgICAgIG9mIENJTkZPIGFib3ZlIDcgYXJlIG5vdCBhbGxvd2VkIGluIHRoaXMgdmVyc2lvbiBvZiB0aGUKKyAgICAgICAgIHNwZWNpZmljYXRpb24uICBDSU5GTyBpcyBub3QgZGVmaW5lZCBpbiB0aGlzIHNwZWNpZmljYXRpb24gZm9yCisgICAgICAgICBDTSBub3QgZXF1YWwgdG8gOC4KKworICAgICAgRkxHIChGTGFHcykKKyAgICAgICAgIFRoaXMgZmxhZyBieXRlIGlzIGRpdmlkZWQgYXMgZm9sbG93czoKKworICAgICAgICAgICAgYml0cyAwIHRvIDQgIEZDSEVDSyAgKGNoZWNrIGJpdHMgZm9yIENNRiBhbmQgRkxHKQorICAgICAgICAgICAgYml0ICA1ICAgICAgIEZESUNUICAgKHByZXNldCBkaWN0aW9uYXJ5KQorICAgICAgICAgICAgYml0cyA2IHRvIDcgIEZMRVZFTCAgKGNvbXByZXNzaW9uIGxldmVsKQorCisgICAgICAgICBUaGUgRkNIRUNLIHZhbHVlIG11c3QgYmUgc3VjaCB0aGF0IENNRiBhbmQgRkxHLCB3aGVuIHZpZXdlZCBhcworICAgICAgICAgYSAxNi1iaXQgdW5zaWduZWQgaW50ZWdlciBzdG9yZWQgaW4gTVNCIG9yZGVyIChDTUYqMjU2ICsgRkxHKSwKKyAgICAgICAgIGlzIGEgbXVsdGlwbGUgb2YgMzEuCisKKworCisKK0RldXRzY2ggJiBHYWlsbHkgICAgICAgICAgICAgSW5mb3JtYXRpb25hbCAgICAgICAgICAgICAgICAgICAgICBbUGFnZSA1XQorDAorUkZDIDE5NTAgICAgICAgWkxJQiBDb21wcmVzc2VkIERhdGEgRm9ybWF0IFNwZWNpZmljYXRpb24gICAgICAgIE1heSAxOTk2CisKKworICAgICAgRkRJQ1QgKFByZXNldCBkaWN0aW9uYXJ5KQorICAgICAgICAgSWYgRkRJQ1QgaXMgc2V0LCBhIERJQ1QgZGljdGlvbmFyeSBpZGVudGlmaWVyIGlzIHByZXNlbnQKKyAgICAgICAgIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBGTEcgYnl0ZS4gVGhlIGRpY3Rpb25hcnkgaXMgYSBzZXF1ZW5jZSBvZgorICAgICAgICAgYnl0ZXMgd2hpY2ggYXJlIGluaXRpYWxseSBmZWQgdG8gdGhlIGNvbXByZXNzb3Igd2l0aG91dAorICAgICAgICAgcHJvZHVjaW5nIGFueSBjb21wcmVzc2VkIG91dHB1dC4gRElDVCBpcyB0aGUgQWRsZXItMzIgY2hlY2tzdW0KKyAgICAgICAgIG9mIHRoaXMgc2VxdWVuY2Ugb2YgYnl0ZXMgKHNlZSB0aGUgZGVmaW5pdGlvbiBvZiBBRExFUjMyCisgICAgICAgICBiZWxvdykuICBUaGUgZGVjb21wcmVzc29yIGNhbiB1c2UgdGhpcyBpZGVudGlmaWVyIHRvIGRldGVybWluZQorICAgICAgICAgd2hpY2ggZGljdGlvbmFyeSBoYXMgYmVlbiB1c2VkIGJ5IHRoZSBjb21wcmVzc29yLgorCisgICAgICBGTEVWRUwgKENvbXByZXNzaW9uIGxldmVsKQorICAgICAgICAgVGhlc2UgZmxhZ3MgYXJlIGF2YWlsYWJsZSBmb3IgdXNlIGJ5IHNwZWNpZmljIGNvbXByZXNzaW9uCisgICAgICAgICBtZXRob2RzLiAgVGhlICJkZWZsYXRlIiBtZXRob2QgKENNID0gOCkgc2V0cyB0aGVzZSBmbGFncyBhcworICAgICAgICAgZm9sbG93czoKKworICAgICAgICAgICAgMCAtIGNvbXByZXNzb3IgdXNlZCBmYXN0ZXN0IGFsZ29yaXRobQorICAgICAgICAgICAgMSAtIGNvbXByZXNzb3IgdXNlZCBmYXN0IGFsZ29yaXRobQorICAgICAgICAgICAgMiAtIGNvbXByZXNzb3IgdXNlZCBkZWZhdWx0IGFsZ29yaXRobQorICAgICAgICAgICAgMyAtIGNvbXByZXNzb3IgdXNlZCBtYXhpbXVtIGNvbXByZXNzaW9uLCBzbG93ZXN0IGFsZ29yaXRobQorCisgICAgICAgICBUaGUgaW5mb3JtYXRpb24gaW4gRkxFVkVMIGlzIG5vdCBuZWVkZWQgZm9yIGRlY29tcHJlc3Npb247IGl0CisgICAgICAgICBpcyB0aGVyZSB0byBpbmRpY2F0ZSBpZiByZWNvbXByZXNzaW9uIG1pZ2h0IGJlIHdvcnRod2hpbGUuCisKKyAgICAgIGNvbXByZXNzZWQgZGF0YQorICAgICAgICAgRm9yIGNvbXByZXNzaW9uIG1ldGhvZCA4LCB0aGUgY29tcHJlc3NlZCBkYXRhIGlzIHN0b3JlZCBpbiB0aGUKKyAgICAgICAgIGRlZmxhdGUgY29tcHJlc3NlZCBkYXRhIGZvcm1hdCBhcyBkZXNjcmliZWQgaW4gdGhlIGRvY3VtZW50CisgICAgICAgICAiREVGTEFURSBDb21wcmVzc2VkIERhdGEgRm9ybWF0IFNwZWNpZmljYXRpb24iIGJ5IEwuIFBldGVyCisgICAgICAgICBEZXV0c2NoLiAoU2VlIHJlZmVyZW5jZSBbM10gaW4gQ2hhcHRlciAzLCBiZWxvdykKKworICAgICAgICAgT3RoZXIgY29tcHJlc3NlZCBkYXRhIGZvcm1hdHMgYXJlIG5vdCBzcGVjaWZpZWQgaW4gdGhpcyB2ZXJzaW9uCisgICAgICAgICBvZiB0aGUgemxpYiBzcGVjaWZpY2F0aW9uLgorCisgICAgICBBRExFUjMyIChBZGxlci0zMiBjaGVja3N1bSkKKyAgICAgICAgIFRoaXMgY29udGFpbnMgYSBjaGVja3N1bSB2YWx1ZSBvZiB0aGUgdW5jb21wcmVzc2VkIGRhdGEKKyAgICAgICAgIChleGNsdWRpbmcgYW55IGRpY3Rpb25hcnkgZGF0YSkgY29tcHV0ZWQgYWNjb3JkaW5nIHRvIEFkbGVyLTMyCisgICAgICAgICBhbGdvcml0aG0uIFRoaXMgYWxnb3JpdGhtIGlzIGEgMzItYml0IGV4dGVuc2lvbiBhbmQgaW1wcm92ZW1lbnQKKyAgICAgICAgIG9mIHRoZSBGbGV0Y2hlciBhbGdvcml0aG0sIHVzZWQgaW4gdGhlIElUVS1UIFguMjI0IC8gSVNPIDgwNzMKKyAgICAgICAgIHN0YW5kYXJkLiBTZWUgcmVmZXJlbmNlcyBbNF0gYW5kIFs1XSBpbiBDaGFwdGVyIDMsIGJlbG93KQorCisgICAgICAgICBBZGxlci0zMiBpcyBjb21wb3NlZCBvZiB0d28gc3VtcyBhY2N1bXVsYXRlZCBwZXIgYnl0ZTogczEgaXMKKyAgICAgICAgIHRoZSBzdW0gb2YgYWxsIGJ5dGVzLCBzMiBpcyB0aGUgc3VtIG9mIGFsbCBzMSB2YWx1ZXMuIEJvdGggc3VtcworICAgICAgICAgYXJlIGRvbmUgbW9kdWxvIDY1NTIxLiBzMSBpcyBpbml0aWFsaXplZCB0byAxLCBzMiB0byB6ZXJvLiAgVGhlCisgICAgICAgICBBZGxlci0zMiBjaGVja3N1bSBpcyBzdG9yZWQgYXMgczIqNjU1MzYgKyBzMSBpbiBtb3N0LQorICAgICAgICAgc2lnbmlmaWNhbnQtYnl0ZSBmaXJzdCAobmV0d29yaykgb3JkZXIuCisKKworCisKKworCisKKworRGV1dHNjaCAmIEdhaWxseSAgICAgICAgICAgICBJbmZvcm1hdGlvbmFsICAgICAgICAgICAgICAgICAgICAgIFtQYWdlIDZdCisMCitSRkMgMTk1MCAgICAgICBaTElCIENvbXByZXNzZWQgRGF0YSBGb3JtYXQgU3BlY2lmaWNhdGlvbiAgICAgICAgTWF5IDE5OTYKKworCisgICAyLjMuIENvbXBsaWFuY2UKKworICAgICAgQSBjb21wbGlhbnQgY29tcHJlc3NvciBtdXN0IHByb2R1Y2Ugc3RyZWFtcyB3aXRoIGNvcnJlY3QgQ01GLCBGTEcKKyAgICAgIGFuZCBBRExFUjMyLCBidXQgbmVlZCBub3Qgc3VwcG9ydCBwcmVzZXQgZGljdGlvbmFyaWVzLiAgV2hlbiB0aGUKKyAgICAgIHpsaWIgZGF0YSBmb3JtYXQgaXMgdXNlZCBhcyBwYXJ0IG9mIGFub3RoZXIgc3RhbmRhcmQgZGF0YSBmb3JtYXQsCisgICAgICB0aGUgY29tcHJlc3NvciBtYXkgdXNlIG9ubHkgcHJlc2V0IGRpY3Rpb25hcmllcyB0aGF0IGFyZSBzcGVjaWZpZWQKKyAgICAgIGJ5IHRoaXMgb3RoZXIgZGF0YSBmb3JtYXQuICBJZiB0aGlzIG90aGVyIGZvcm1hdCBkb2VzIG5vdCB1c2UgdGhlCisgICAgICBwcmVzZXQgZGljdGlvbmFyeSBmZWF0dXJlLCB0aGUgY29tcHJlc3NvciBtdXN0IG5vdCBzZXQgdGhlIEZESUNUCisgICAgICBmbGFnLgorCisgICAgICBBIGNvbXBsaWFudCBkZWNvbXByZXNzb3IgbXVzdCBjaGVjayBDTUYsIEZMRywgYW5kIEFETEVSMzIsIGFuZAorICAgICAgcHJvdmlkZSBhbiBlcnJvciBpbmRpY2F0aW9uIGlmIGFueSBvZiB0aGVzZSBoYXZlIGluY29ycmVjdCB2YWx1ZXMuCisgICAgICBBIGNvbXBsaWFudCBkZWNvbXByZXNzb3IgbXVzdCBnaXZlIGFuIGVycm9yIGluZGljYXRpb24gaWYgQ00gaXMKKyAgICAgIG5vdCBvbmUgb2YgdGhlIHZhbHVlcyBkZWZpbmVkIGluIHRoaXMgc3BlY2lmaWNhdGlvbiAob25seSB0aGUKKyAgICAgIHZhbHVlIDggaXMgcGVybWl0dGVkIGluIHRoaXMgdmVyc2lvbiksIHNpbmNlIGFub3RoZXIgdmFsdWUgY291bGQKKyAgICAgIGluZGljYXRlIHRoZSBwcmVzZW5jZSBvZiBuZXcgZmVhdHVyZXMgdGhhdCB3b3VsZCBjYXVzZSBzdWJzZXF1ZW50CisgICAgICBkYXRhIHRvIGJlIGludGVycHJldGVkIGluY29ycmVjdGx5LiAgQSBjb21wbGlhbnQgZGVjb21wcmVzc29yIG11c3QKKyAgICAgIGdpdmUgYW4gZXJyb3IgaW5kaWNhdGlvbiBpZiBGRElDVCBpcyBzZXQgYW5kIERJQ1RJRCBpcyBub3QgdGhlCisgICAgICBpZGVudGlmaWVyIG9mIGEga25vd24gcHJlc2V0IGRpY3Rpb25hcnkuICBBIGRlY29tcHJlc3NvciBtYXkKKyAgICAgIGlnbm9yZSBGTEVWRUwgYW5kIHN0aWxsIGJlIGNvbXBsaWFudC4gIFdoZW4gdGhlIHpsaWIgZGF0YSBmb3JtYXQKKyAgICAgIGlzIGJlaW5nIHVzZWQgYXMgYSBwYXJ0IG9mIGFub3RoZXIgc3RhbmRhcmQgZm9ybWF0LCBhIGNvbXBsaWFudAorICAgICAgZGVjb21wcmVzc29yIG11c3Qgc3VwcG9ydCBhbGwgdGhlIHByZXNldCBkaWN0aW9uYXJpZXMgc3BlY2lmaWVkIGJ5CisgICAgICB0aGUgb3RoZXIgZm9ybWF0LiBXaGVuIHRoZSBvdGhlciBmb3JtYXQgZG9lcyBub3QgdXNlIHRoZSBwcmVzZXQKKyAgICAgIGRpY3Rpb25hcnkgZmVhdHVyZSwgYSBjb21wbGlhbnQgZGVjb21wcmVzc29yIG11c3QgcmVqZWN0IGFueQorICAgICAgc3RyZWFtIGluIHdoaWNoIHRoZSBGRElDVCBmbGFnIGlzIHNldC4KKworMy4gUmVmZXJlbmNlcworCisgICBbMV0gRGV1dHNjaCwgTC5QLiwiR1pJUCBDb21wcmVzc2VkIERhdGEgRm9ybWF0IFNwZWNpZmljYXRpb24iLAorICAgICAgIGF2YWlsYWJsZSBpbiBmdHA6Ly9mdHAudXUubmV0L3B1Yi9hcmNoaXZpbmcvemlwL2RvYy8KKworICAgWzJdIFRob21hcyBCb3V0ZWxsLCAiUE5HIChQb3J0YWJsZSBOZXR3b3JrIEdyYXBoaWNzKSBzcGVjaWZpY2F0aW9uIiwKKyAgICAgICBhdmFpbGFibGUgaW4gZnRwOi8vZnRwLnV1Lm5ldC9ncmFwaGljcy9wbmcvZG9jdW1lbnRzLworCisgICBbM10gRGV1dHNjaCwgTC5QLiwiREVGTEFURSBDb21wcmVzc2VkIERhdGEgRm9ybWF0IFNwZWNpZmljYXRpb24iLAorICAgICAgIGF2YWlsYWJsZSBpbiBmdHA6Ly9mdHAudXUubmV0L3B1Yi9hcmNoaXZpbmcvemlwL2RvYy8KKworICAgWzRdIEZsZXRjaGVyLCBKLiBHLiwgIkFuIEFyaXRobWV0aWMgQ2hlY2tzdW0gZm9yIFNlcmlhbAorICAgICAgIFRyYW5zbWlzc2lvbnMsIiBJRUVFIFRyYW5zYWN0aW9ucyBvbiBDb21tdW5pY2F0aW9ucywgVm9sLiBDT00tMzAsCisgICAgICAgTm8uIDEsIEphbnVhcnkgMTk4MiwgcHAuIDI0Ny0yNTIuCisKKyAgIFs1XSBJVFUtVCBSZWNvbW1lbmRhdGlvbiBYLjIyNCwgQW5uZXggRCwgIkNoZWNrc3VtIEFsZ29yaXRobXMsIgorICAgICAgIE5vdmVtYmVyLCAxOTkzLCBwcC4gMTQ0LCAxNDUuIChBdmFpbGFibGUgZnJvbQorICAgICAgIGdvcGhlcjovL2luZm8uaXR1LmNoKS4gSVRVLVQgWC4yNDQgaXMgYWxzbyB0aGUgc2FtZSBhcyBJU08gODA3My4KKworCisKKworCisKKworRGV1dHNjaCAmIEdhaWxseSAgICAgICAgICAgICBJbmZvcm1hdGlvbmFsICAgICAgICAgICAgICAgICAgICAgIFtQYWdlIDddCisMCitSRkMgMTk1MCAgICAgICBaTElCIENvbXByZXNzZWQgRGF0YSBGb3JtYXQgU3BlY2lmaWNhdGlvbiAgICAgICAgTWF5IDE5OTYKKworCis0LiBTb3VyY2UgY29kZQorCisgICBTb3VyY2UgY29kZSBmb3IgYSBDIGxhbmd1YWdlIGltcGxlbWVudGF0aW9uIG9mIGEgInpsaWIiIGNvbXBsaWFudAorICAgbGlicmFyeSBpcyBhdmFpbGFibGUgYXQgZnRwOi8vZnRwLnV1Lm5ldC9wdWIvYXJjaGl2aW5nL3ppcC96bGliLy4KKworNS4gU2VjdXJpdHkgQ29uc2lkZXJhdGlvbnMKKworICAgQSBkZWNvZGVyIHRoYXQgZmFpbHMgdG8gY2hlY2sgdGhlIEFETEVSMzIgY2hlY2tzdW0gdmFsdWUgbWF5IGJlCisgICBzdWJqZWN0IHRvIHVuZGV0ZWN0ZWQgZGF0YSBjb3JydXB0aW9uLgorCis2LiBBY2tub3dsZWRnZW1lbnRzCisKKyAgIFRyYWRlbWFya3MgY2l0ZWQgaW4gdGhpcyBkb2N1bWVudCBhcmUgdGhlIHByb3BlcnR5IG9mIHRoZWlyCisgICByZXNwZWN0aXZlIG93bmVycy4KKworICAgSmVhbi1Mb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlciBkZXNpZ25lZCB0aGUgemxpYiBmb3JtYXQgYW5kIHdyb3RlCisgICB0aGUgcmVsYXRlZCBzb2Z0d2FyZSBkZXNjcmliZWQgaW4gdGhpcyBzcGVjaWZpY2F0aW9uLiAgR2xlbm4KKyAgIFJhbmRlcnMtUGVocnNvbiBjb252ZXJ0ZWQgdGhpcyBkb2N1bWVudCB0byBSRkMgYW5kIEhUTUwgZm9ybWF0LgorCis3LiBBdXRob3JzJyBBZGRyZXNzZXMKKworICAgTC4gUGV0ZXIgRGV1dHNjaAorICAgQWxhZGRpbiBFbnRlcnByaXNlcworICAgMjAzIFNhbnRhIE1hcmdhcml0YSBBdmUuCisgICBNZW5sbyBQYXJrLCBDQSA5NDAyNQorCisgICBQaG9uZTogKDQxNSkgMzIyLTAxMDMgKEFNIG9ubHkpCisgICBGQVg6ICAgKDQxNSkgMzIyLTE3MzQKKyAgIEVNYWlsOiA8Z2hvc3RAYWxhZGRpbi5jb20+CisKKworICAgSmVhbi1Mb3VwIEdhaWxseQorCisgICBFTWFpbDogPGd6aXBAcHJlcC5haS5taXQuZWR1PgorCisgICBRdWVzdGlvbnMgYWJvdXQgdGhlIHRlY2huaWNhbCBjb250ZW50IG9mIHRoaXMgc3BlY2lmaWNhdGlvbiBjYW4gYmUKKyAgIHNlbnQgYnkgZW1haWwgdG8KKworICAgSmVhbi1Mb3VwIEdhaWxseSA8Z3ppcEBwcmVwLmFpLm1pdC5lZHU+IGFuZAorICAgTWFyayBBZGxlciA8bWFkbGVyQGFsdW1uaS5jYWx0ZWNoLmVkdT4KKworICAgRWRpdG9yaWFsIGNvbW1lbnRzIG9uIHRoaXMgc3BlY2lmaWNhdGlvbiBjYW4gYmUgc2VudCBieSBlbWFpbCB0bworCisgICBMLiBQZXRlciBEZXV0c2NoIDxnaG9zdEBhbGFkZGluLmNvbT4gYW5kCisgICBHbGVubiBSYW5kZXJzLVBlaHJzb24gPHJhbmRlZ0BhbHVtbmkucnBpLmVkdT4KKworCisKKworCisKK0RldXRzY2ggJiBHYWlsbHkgICAgICAgICAgICAgSW5mb3JtYXRpb25hbCAgICAgICAgICAgICAgICAgICAgICBbUGFnZSA4XQorDAorUkZDIDE5NTAgICAgICAgWkxJQiBDb21wcmVzc2VkIERhdGEgRm9ybWF0IFNwZWNpZmljYXRpb24gICAgICAgIE1heSAxOTk2CisKKworOC4gQXBwZW5kaXg6IFJhdGlvbmFsZQorCisgICA4LjEuIFByZXNldCBkaWN0aW9uYXJpZXMKKworICAgICAgQSBwcmVzZXQgZGljdGlvbmFyeSBpcyBzcGVjaWFsbHkgdXNlZnVsIHRvIGNvbXByZXNzIHNob3J0IGlucHV0CisgICAgICBzZXF1ZW5jZXMuIFRoZSBjb21wcmVzc29yIGNhbiB0YWtlIGFkdmFudGFnZSBvZiB0aGUgZGljdGlvbmFyeQorICAgICAgY29udGV4dCB0byBlbmNvZGUgdGhlIGlucHV0IGluIGEgbW9yZSBjb21wYWN0IG1hbm5lci4gVGhlCisgICAgICBkZWNvbXByZXNzb3IgY2FuIGJlIGluaXRpYWxpemVkIHdpdGggdGhlIGFwcHJvcHJpYXRlIGNvbnRleHQgYnkKKyAgICAgIHZpcnR1YWxseSBkZWNvbXByZXNzaW5nIGEgY29tcHJlc3NlZCB2ZXJzaW9uIG9mIHRoZSBkaWN0aW9uYXJ5CisgICAgICB3aXRob3V0IHByb2R1Y2luZyBhbnkgb3V0cHV0LiBIb3dldmVyIGZvciBjZXJ0YWluIGNvbXByZXNzaW9uCisgICAgICBhbGdvcml0aG1zIHN1Y2ggYXMgdGhlIGRlZmxhdGUgYWxnb3JpdGhtIHRoaXMgb3BlcmF0aW9uIGNhbiBiZQorICAgICAgYWNoaWV2ZWQgd2l0aG91dCBhY3R1YWxseSBwZXJmb3JtaW5nIGFueSBkZWNvbXByZXNzaW9uLgorCisgICAgICBUaGUgY29tcHJlc3NvciBhbmQgdGhlIGRlY29tcHJlc3NvciBtdXN0IHVzZSBleGFjdGx5IHRoZSBzYW1lCisgICAgICBkaWN0aW9uYXJ5LiBUaGUgZGljdGlvbmFyeSBtYXkgYmUgZml4ZWQgb3IgbWF5IGJlIGNob3NlbiBhbW9uZyBhCisgICAgICBjZXJ0YWluIG51bWJlciBvZiBwcmVkZWZpbmVkIGRpY3Rpb25hcmllcywgYWNjb3JkaW5nIHRvIHRoZSBraW5kCisgICAgICBvZiBpbnB1dCBkYXRhLiBUaGUgZGVjb21wcmVzc29yIGNhbiBkZXRlcm1pbmUgd2hpY2ggZGljdGlvbmFyeSBoYXMKKyAgICAgIGJlZW4gY2hvc2VuIGJ5IHRoZSBjb21wcmVzc29yIGJ5IGNoZWNraW5nIHRoZSBkaWN0aW9uYXJ5CisgICAgICBpZGVudGlmaWVyLiBUaGlzIGRvY3VtZW50IGRvZXMgbm90IHNwZWNpZnkgdGhlIGNvbnRlbnRzIG9mCisgICAgICBwcmVkZWZpbmVkIGRpY3Rpb25hcmllcywgc2luY2UgdGhlIG9wdGltYWwgZGljdGlvbmFyaWVzIGFyZQorICAgICAgYXBwbGljYXRpb24gc3BlY2lmaWMuIFN0YW5kYXJkIGRhdGEgZm9ybWF0cyB1c2luZyB0aGlzIGZlYXR1cmUgb2YKKyAgICAgIHRoZSB6bGliIHNwZWNpZmljYXRpb24gbXVzdCBwcmVjaXNlbHkgZGVmaW5lIHRoZSBhbGxvd2VkCisgICAgICBkaWN0aW9uYXJpZXMuCisKKyAgIDguMi4gVGhlIEFkbGVyLTMyIGFsZ29yaXRobQorCisgICAgICBUaGUgQWRsZXItMzIgYWxnb3JpdGhtIGlzIG11Y2ggZmFzdGVyIHRoYW4gdGhlIENSQzMyIGFsZ29yaXRobSB5ZXQKKyAgICAgIHN0aWxsIHByb3ZpZGVzIGFuIGV4dHJlbWVseSBsb3cgcHJvYmFiaWxpdHkgb2YgdW5kZXRlY3RlZCBlcnJvcnMuCisKKyAgICAgIFRoZSBtb2R1bG8gb24gdW5zaWduZWQgbG9uZyBhY2N1bXVsYXRvcnMgY2FuIGJlIGRlbGF5ZWQgZm9yIDU1NTIKKyAgICAgIGJ5dGVzLCBzbyB0aGUgbW9kdWxvIG9wZXJhdGlvbiB0aW1lIGlzIG5lZ2xpZ2libGUuICBJZiB0aGUgYnl0ZXMKKyAgICAgIGFyZSBhLCBiLCBjLCB0aGUgc2Vjb25kIHN1bSBpcyAzYSArIDJiICsgYyArIDMsIGFuZCBzbyBpcyBwb3NpdGlvbgorICAgICAgYW5kIG9yZGVyIHNlbnNpdGl2ZSwgdW5saWtlIHRoZSBmaXJzdCBzdW0sIHdoaWNoIGlzIGp1c3QgYQorICAgICAgY2hlY2tzdW0uICBUaGF0IDY1NTIxIGlzIHByaW1lIGlzIGltcG9ydGFudCB0byBhdm9pZCBhIHBvc3NpYmxlCisgICAgICBsYXJnZSBjbGFzcyBvZiB0d28tYnl0ZSBlcnJvcnMgdGhhdCBsZWF2ZSB0aGUgY2hlY2sgdW5jaGFuZ2VkLgorICAgICAgKFRoZSBGbGV0Y2hlciBjaGVja3N1bSB1c2VzIDI1NSwgd2hpY2ggaXMgbm90IHByaW1lIGFuZCB3aGljaCBhbHNvCisgICAgICBtYWtlcyB0aGUgRmxldGNoZXIgY2hlY2sgaW5zZW5zaXRpdmUgdG8gc2luZ2xlIGJ5dGUgY2hhbmdlcyAwIDwtPgorICAgICAgMjU1LikKKworICAgICAgVGhlIHN1bSBzMSBpcyBpbml0aWFsaXplZCB0byAxIGluc3RlYWQgb2YgemVybyB0byBtYWtlIHRoZSBsZW5ndGgKKyAgICAgIG9mIHRoZSBzZXF1ZW5jZSBwYXJ0IG9mIHMyLCBzbyB0aGF0IHRoZSBsZW5ndGggZG9lcyBub3QgaGF2ZSB0byBiZQorICAgICAgY2hlY2tlZCBzZXBhcmF0ZWx5LiAoQW55IHNlcXVlbmNlIG9mIHplcm9lcyBoYXMgYSBGbGV0Y2hlcgorICAgICAgY2hlY2tzdW0gb2YgemVyby4pCisKKworCisKKworCisKKworRGV1dHNjaCAmIEdhaWxseSAgICAgICAgICAgICBJbmZvcm1hdGlvbmFsICAgICAgICAgICAgICAgICAgICAgIFtQYWdlIDldCisMCitSRkMgMTk1MCAgICAgICBaTElCIENvbXByZXNzZWQgRGF0YSBGb3JtYXQgU3BlY2lmaWNhdGlvbiAgICAgICAgTWF5IDE5OTYKKworCis5LiBBcHBlbmRpeDogU2FtcGxlIGNvZGUKKworICAgVGhlIGZvbGxvd2luZyBDIGNvZGUgY29tcHV0ZXMgdGhlIEFkbGVyLTMyIGNoZWNrc3VtIG9mIGEgZGF0YSBidWZmZXIuCisgICBJdCBpcyB3cml0dGVuIGZvciBjbGFyaXR5LCBub3QgZm9yIHNwZWVkLiAgVGhlIHNhbXBsZSBjb2RlIGlzIGluIHRoZQorICAgQU5TSSBDIHByb2dyYW1taW5nIGxhbmd1YWdlLiBOb24gQyB1c2VycyBtYXkgZmluZCBpdCBlYXNpZXIgdG8gcmVhZAorICAgd2l0aCB0aGVzZSBoaW50czoKKworICAgICAgJiAgICAgIEJpdHdpc2UgQU5EIG9wZXJhdG9yLgorICAgICAgPj4gICAgIEJpdHdpc2UgcmlnaHQgc2hpZnQgb3BlcmF0b3IuIFdoZW4gYXBwbGllZCB0byBhbgorICAgICAgICAgICAgIHVuc2lnbmVkIHF1YW50aXR5LCBhcyBoZXJlLCByaWdodCBzaGlmdCBpbnNlcnRzIHplcm8gYml0KHMpCisgICAgICAgICAgICAgYXQgdGhlIGxlZnQuCisgICAgICA8PCAgICAgQml0d2lzZSBsZWZ0IHNoaWZ0IG9wZXJhdG9yLiBMZWZ0IHNoaWZ0IGluc2VydHMgemVybworICAgICAgICAgICAgIGJpdChzKSBhdCB0aGUgcmlnaHQuCisgICAgICArKyAgICAgIm4rKyIgaW5jcmVtZW50cyB0aGUgdmFyaWFibGUgbi4KKyAgICAgICUgICAgICBtb2R1bG8gb3BlcmF0b3I6IGEgJSBiIGlzIHRoZSByZW1haW5kZXIgb2YgYSBkaXZpZGVkIGJ5IGIuCisKKyAgICAgICNkZWZpbmUgQkFTRSA2NTUyMSAvKiBsYXJnZXN0IHByaW1lIHNtYWxsZXIgdGhhbiA2NTUzNiAqLworCisgICAgICAvKgorICAgICAgICAgVXBkYXRlIGEgcnVubmluZyBBZGxlci0zMiBjaGVja3N1bSB3aXRoIHRoZSBieXRlcyBidWZbMC4ubGVuLTFdCisgICAgICAgYW5kIHJldHVybiB0aGUgdXBkYXRlZCBjaGVja3N1bS4gVGhlIEFkbGVyLTMyIGNoZWNrc3VtIHNob3VsZCBiZQorICAgICAgIGluaXRpYWxpemVkIHRvIDEuCisKKyAgICAgICBVc2FnZSBleGFtcGxlOgorCisgICAgICAgICB1bnNpZ25lZCBsb25nIGFkbGVyID0gMUw7CisKKyAgICAgICAgIHdoaWxlIChyZWFkX2J1ZmZlcihidWZmZXIsIGxlbmd0aCkgIT0gRU9GKSB7CisgICAgICAgICAgIGFkbGVyID0gdXBkYXRlX2FkbGVyMzIoYWRsZXIsIGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGlmIChhZGxlciAhPSBvcmlnaW5hbF9hZGxlcikgZXJyb3IoKTsKKyAgICAgICovCisgICAgICB1bnNpZ25lZCBsb25nIHVwZGF0ZV9hZGxlcjMyKHVuc2lnbmVkIGxvbmcgYWRsZXIsCisgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWYsIGludCBsZW4pCisgICAgICB7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgczEgPSBhZGxlciAmIDB4ZmZmZjsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBzMiA9IChhZGxlciA+PiAxNikgJiAweGZmZmY7CisgICAgICAgIGludCBuOworCisgICAgICAgIGZvciAobiA9IDA7IG4gPCBsZW47IG4rKykgeworICAgICAgICAgIHMxID0gKHMxICsgYnVmW25dKSAlIEJBU0U7CisgICAgICAgICAgczIgPSAoczIgKyBzMSkgICAgICUgQkFTRTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gKHMyIDw8IDE2KSArIHMxOworICAgICAgfQorCisgICAgICAvKiBSZXR1cm4gdGhlIGFkbGVyMzIgb2YgdGhlIGJ5dGVzIGJ1ZlswLi5sZW4tMV0gKi8KKworCisKKworRGV1dHNjaCAmIEdhaWxseSAgICAgICAgICAgICBJbmZvcm1hdGlvbmFsICAgICAgICAgICAgICAgICAgICAgW1BhZ2UgMTBdCisMCitSRkMgMTk1MCAgICAgICBaTElCIENvbXByZXNzZWQgRGF0YSBGb3JtYXQgU3BlY2lmaWNhdGlvbiAgICAgICAgTWF5IDE5OTYKKworCisgICAgICB1bnNpZ25lZCBsb25nIGFkbGVyMzIodW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbGVuKQorICAgICAgeworICAgICAgICByZXR1cm4gdXBkYXRlX2FkbGVyMzIoMUwsIGJ1ZiwgbGVuKTsKKyAgICAgIH0KKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCitEZXV0c2NoICYgR2FpbGx5ICAgICAgICAgICAgIEluZm9ybWF0aW9uYWwgICAgICAgICAgICAgICAgICAgICBbUGFnZSAxMV0KKwwKZGlmZiAtLWdpdCBhL3NyYy9kb2MvcmZjMTk1MS50eHQgYi9zcmMvZG9jL3JmYzE5NTEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwM2M4YzcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvZG9jL3JmYzE5NTEudHh0CkBAIC0wLDAgKzEsOTU1IEBACisKKworCisKKworCitOZXR3b3JrIFdvcmtpbmcgR3JvdXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFAuIERldXRzY2gKK1JlcXVlc3QgZm9yIENvbW1lbnRzOiAxOTUxICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxhZGRpbiBFbnRlcnByaXNlcworQ2F0ZWdvcnk6IEluZm9ybWF0aW9uYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1heSAxOTk2CisKKworICAgICAgICBERUZMQVRFIENvbXByZXNzZWQgRGF0YSBGb3JtYXQgU3BlY2lmaWNhdGlvbiB2ZXJzaW9uIDEuMworCitTdGF0dXMgb2YgVGhpcyBNZW1vCisKKyAgIFRoaXMgbWVtbyBwcm92aWRlcyBpbmZvcm1hdGlvbiBmb3IgdGhlIEludGVybmV0IGNvbW11bml0eS4gIFRoaXMgbWVtbworICAgZG9lcyBub3Qgc3BlY2lmeSBhbiBJbnRlcm5ldCBzdGFuZGFyZCBvZiBhbnkga2luZC4gIERpc3RyaWJ1dGlvbiBvZgorICAgdGhpcyBtZW1vIGlzIHVubGltaXRlZC4KKworSUVTRyBOb3RlOgorCisgICBUaGUgSUVTRyB0YWtlcyBubyBwb3NpdGlvbiBvbiB0aGUgdmFsaWRpdHkgb2YgYW55IEludGVsbGVjdHVhbAorICAgUHJvcGVydHkgUmlnaHRzIHN0YXRlbWVudHMgY29udGFpbmVkIGluIHRoaXMgZG9jdW1lbnQuCisKK05vdGljZXMKKworICAgQ29weXJpZ2h0IChjKSAxOTk2IEwuIFBldGVyIERldXRzY2gKKworICAgUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhpcyBkb2N1bWVudCBmb3IgYW55CisgICBwdXJwb3NlIGFuZCB3aXRob3V0IGNoYXJnZSwgaW5jbHVkaW5nIHRyYW5zbGF0aW9ucyBpbnRvIG90aGVyCisgICBsYW5ndWFnZXMgYW5kIGluY29ycG9yYXRpb24gaW50byBjb21waWxhdGlvbnMsIHByb3ZpZGVkIHRoYXQgdGhlCisgICBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIG5vdGljZSBhcmUgcHJlc2VydmVkLCBhbmQgdGhhdCBhbnkKKyAgIHN1YnN0YW50aXZlIGNoYW5nZXMgb3IgZGVsZXRpb25zIGZyb20gdGhlIG9yaWdpbmFsIGFyZSBjbGVhcmx5CisgICBtYXJrZWQuCisKKyAgIEEgcG9pbnRlciB0byB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBhbmQgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGluCisgICBIVE1MIGZvcm1hdCBjYW4gYmUgZm91bmQgYXQgdGhlIFVSTAorICAgPGZ0cDovL2Z0cC51dS5uZXQvZ3JhcGhpY3MvcG5nL2RvY3VtZW50cy96bGliL3pkb2MtaW5kZXguaHRtbD4uCisKK0Fic3RyYWN0CisKKyAgIFRoaXMgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIGEgbG9zc2xlc3MgY29tcHJlc3NlZCBkYXRhIGZvcm1hdCB0aGF0CisgICBjb21wcmVzc2VzIGRhdGEgdXNpbmcgYSBjb21iaW5hdGlvbiBvZiB0aGUgTFo3NyBhbGdvcml0aG0gYW5kIEh1ZmZtYW4KKyAgIGNvZGluZywgd2l0aCBlZmZpY2llbmN5IGNvbXBhcmFibGUgdG8gdGhlIGJlc3QgY3VycmVudGx5IGF2YWlsYWJsZQorICAgZ2VuZXJhbC1wdXJwb3NlIGNvbXByZXNzaW9uIG1ldGhvZHMuICBUaGUgZGF0YSBjYW4gYmUgcHJvZHVjZWQgb3IKKyAgIGNvbnN1bWVkLCBldmVuIGZvciBhbiBhcmJpdHJhcmlseSBsb25nIHNlcXVlbnRpYWxseSBwcmVzZW50ZWQgaW5wdXQKKyAgIGRhdGEgc3RyZWFtLCB1c2luZyBvbmx5IGFuIGEgcHJpb3JpIGJvdW5kZWQgYW1vdW50IG9mIGludGVybWVkaWF0ZQorICAgc3RvcmFnZS4gIFRoZSBmb3JtYXQgY2FuIGJlIGltcGxlbWVudGVkIHJlYWRpbHkgaW4gYSBtYW5uZXIgbm90CisgICBjb3ZlcmVkIGJ5IHBhdGVudHMuCisKKworCisKKworCisKKworRGV1dHNjaCAgICAgICAgICAgICAgICAgICAgICBJbmZvcm1hdGlvbmFsICAgICAgICAgICAgICAgICAgICAgIFtQYWdlIDFdCisMCitSRkMgMTk1MSAgICAgIERFRkxBVEUgQ29tcHJlc3NlZCBEYXRhIEZvcm1hdCBTcGVjaWZpY2F0aW9uICAgICAgTWF5IDE5OTYKKworCitUYWJsZSBvZiBDb250ZW50cworCisgICAxLiBJbnRyb2R1Y3Rpb24gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDIKKyAgICAgIDEuMS4gUHVycG9zZSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gMgorICAgICAgMS4yLiBJbnRlbmRlZCBhdWRpZW5jZSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAzCisgICAgICAxLjMuIFNjb3BlIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDMKKyAgICAgIDEuNC4gQ29tcGxpYW5jZSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gMworICAgICAgMS41LiAgRGVmaW5pdGlvbnMgb2YgdGVybXMgYW5kIGNvbnZlbnRpb25zIHVzZWQgLi4uLi4uLi4uLi4uLi4uLiAzCisgICAgICAxLjYuIENoYW5nZXMgZnJvbSBwcmV2aW91cyB2ZXJzaW9ucyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDQKKyAgIDIuIENvbXByZXNzZWQgcmVwcmVzZW50YXRpb24gb3ZlcnZpZXcgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gNAorICAgMy4gRGV0YWlsZWQgc3BlY2lmaWNhdGlvbiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiA1CisgICAgICAzLjEuIE92ZXJhbGwgY29udmVudGlvbnMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDUKKyAgICAgICAgICAzLjEuMS4gUGFja2luZyBpbnRvIGJ5dGVzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gNQorICAgICAgMy4yLiBDb21wcmVzc2VkIGJsb2NrIGZvcm1hdCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiA2CisgICAgICAgICAgMy4yLjEuIFN5bm9wc2lzIG9mIHByZWZpeCBhbmQgSHVmZm1hbiBjb2RpbmcgLi4uLi4uLi4uLi4uLi4uIDYKKyAgICAgICAgICAzLjIuMi4gVXNlIG9mIEh1ZmZtYW4gY29kaW5nIGluIHRoZSAiZGVmbGF0ZSIgZm9ybWF0IC4uLi4uLi4gNworICAgICAgICAgIDMuMi4zLiBEZXRhaWxzIG9mIGJsb2NrIGZvcm1hdCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiA5CisgICAgICAgICAgMy4yLjQuIE5vbi1jb21wcmVzc2VkIGJsb2NrcyAoQlRZUEU9MDApIC4uLi4uLi4uLi4uLi4uLi4uLi4gMTEKKyAgICAgICAgICAzLjIuNS4gQ29tcHJlc3NlZCBibG9ja3MgKGxlbmd0aCBhbmQgZGlzdGFuY2UgY29kZXMpIC4uLi4uLiAxMQorICAgICAgICAgIDMuMi42LiBDb21wcmVzc2lvbiB3aXRoIGZpeGVkIEh1ZmZtYW4gY29kZXMgKEJUWVBFPTAxKSAuLi4uIDEyCisgICAgICAgICAgMy4yLjcuIENvbXByZXNzaW9uIHdpdGggZHluYW1pYyBIdWZmbWFuIGNvZGVzIChCVFlQRT0xMCkgLi4gMTMKKyAgICAgIDMuMy4gQ29tcGxpYW5jZSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAxNAorICAgNC4gQ29tcHJlc3Npb24gYWxnb3JpdGhtIGRldGFpbHMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDE0CisgICA1LiBSZWZlcmVuY2VzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gMTYKKyAgIDYuIFNlY3VyaXR5IENvbnNpZGVyYXRpb25zIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAxNgorICAgNy4gU291cmNlIGNvZGUgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDE2CisgICA4LiBBY2tub3dsZWRnZW1lbnRzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gMTYKKyAgIDkuIEF1dGhvcidzIEFkZHJlc3MgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAxNworCisxLiBJbnRyb2R1Y3Rpb24KKworICAgMS4xLiBQdXJwb3NlCisKKyAgICAgIFRoZSBwdXJwb3NlIG9mIHRoaXMgc3BlY2lmaWNhdGlvbiBpcyB0byBkZWZpbmUgYSBsb3NzbGVzcworICAgICAgY29tcHJlc3NlZCBkYXRhIGZvcm1hdCB0aGF0OgorICAgICAgICAgICogSXMgaW5kZXBlbmRlbnQgb2YgQ1BVIHR5cGUsIG9wZXJhdGluZyBzeXN0ZW0sIGZpbGUgc3lzdGVtLAorICAgICAgICAgICAgYW5kIGNoYXJhY3RlciBzZXQsIGFuZCBoZW5jZSBjYW4gYmUgdXNlZCBmb3IgaW50ZXJjaGFuZ2U7CisgICAgICAgICAgKiBDYW4gYmUgcHJvZHVjZWQgb3IgY29uc3VtZWQsIGV2ZW4gZm9yIGFuIGFyYml0cmFyaWx5IGxvbmcKKyAgICAgICAgICAgIHNlcXVlbnRpYWxseSBwcmVzZW50ZWQgaW5wdXQgZGF0YSBzdHJlYW0sIHVzaW5nIG9ubHkgYW4gYQorICAgICAgICAgICAgcHJpb3JpIGJvdW5kZWQgYW1vdW50IG9mIGludGVybWVkaWF0ZSBzdG9yYWdlLCBhbmQgaGVuY2UKKyAgICAgICAgICAgIGNhbiBiZSB1c2VkIGluIGRhdGEgY29tbXVuaWNhdGlvbnMgb3Igc2ltaWxhciBzdHJ1Y3R1cmVzCisgICAgICAgICAgICBzdWNoIGFzIFVuaXggZmlsdGVyczsKKyAgICAgICAgICAqIENvbXByZXNzZXMgZGF0YSB3aXRoIGVmZmljaWVuY3kgY29tcGFyYWJsZSB0byB0aGUgYmVzdAorICAgICAgICAgICAgY3VycmVudGx5IGF2YWlsYWJsZSBnZW5lcmFsLXB1cnBvc2UgY29tcHJlc3Npb24gbWV0aG9kcywKKyAgICAgICAgICAgIGFuZCBpbiBwYXJ0aWN1bGFyIGNvbnNpZGVyYWJseSBiZXR0ZXIgdGhhbiB0aGUgImNvbXByZXNzIgorICAgICAgICAgICAgcHJvZ3JhbTsKKyAgICAgICAgICAqIENhbiBiZSBpbXBsZW1lbnRlZCByZWFkaWx5IGluIGEgbWFubmVyIG5vdCBjb3ZlcmVkIGJ5CisgICAgICAgICAgICBwYXRlbnRzLCBhbmQgaGVuY2UgY2FuIGJlIHByYWN0aWNlZCBmcmVlbHk7CisKKworCitEZXV0c2NoICAgICAgICAgICAgICAgICAgICAgIEluZm9ybWF0aW9uYWwgICAgICAgICAgICAgICAgICAgICAgW1BhZ2UgMl0KKwwKK1JGQyAxOTUxICAgICAgREVGTEFURSBDb21wcmVzc2VkIERhdGEgRm9ybWF0IFNwZWNpZmljYXRpb24gICAgICBNYXkgMTk5NgorCisKKyAgICAgICAgICAqIElzIGNvbXBhdGlibGUgd2l0aCB0aGUgZmlsZSBmb3JtYXQgcHJvZHVjZWQgYnkgdGhlIGN1cnJlbnQKKyAgICAgICAgICAgIHdpZGVseSB1c2VkIGd6aXAgdXRpbGl0eSwgaW4gdGhhdCBjb25mb3JtaW5nIGRlY29tcHJlc3NvcnMKKyAgICAgICAgICAgIHdpbGwgYmUgYWJsZSB0byByZWFkIGRhdGEgcHJvZHVjZWQgYnkgdGhlIGV4aXN0aW5nIGd6aXAKKyAgICAgICAgICAgIGNvbXByZXNzb3IuCisKKyAgICAgIFRoZSBkYXRhIGZvcm1hdCBkZWZpbmVkIGJ5IHRoaXMgc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCBhdHRlbXB0IHRvOgorCisgICAgICAgICAgKiBBbGxvdyByYW5kb20gYWNjZXNzIHRvIGNvbXByZXNzZWQgZGF0YTsKKyAgICAgICAgICAqIENvbXByZXNzIHNwZWNpYWxpemVkIGRhdGEgKGUuZy4sIHJhc3RlciBncmFwaGljcykgYXMgd2VsbAorICAgICAgICAgICAgYXMgdGhlIGJlc3QgY3VycmVudGx5IGF2YWlsYWJsZSBzcGVjaWFsaXplZCBhbGdvcml0aG1zLgorCisgICAgICBBIHNpbXBsZSBjb3VudGluZyBhcmd1bWVudCBzaG93cyB0aGF0IG5vIGxvc3NsZXNzIGNvbXByZXNzaW9uCisgICAgICBhbGdvcml0aG0gY2FuIGNvbXByZXNzIGV2ZXJ5IHBvc3NpYmxlIGlucHV0IGRhdGEgc2V0LiAgRm9yIHRoZQorICAgICAgZm9ybWF0IGRlZmluZWQgaGVyZSwgdGhlIHdvcnN0IGNhc2UgZXhwYW5zaW9uIGlzIDUgYnl0ZXMgcGVyIDMySy0KKyAgICAgIGJ5dGUgYmxvY2ssIGkuZS4sIGEgc2l6ZSBpbmNyZWFzZSBvZiAwLjAxNSUgZm9yIGxhcmdlIGRhdGEgc2V0cy4KKyAgICAgIEVuZ2xpc2ggdGV4dCB1c3VhbGx5IGNvbXByZXNzZXMgYnkgYSBmYWN0b3Igb2YgMi41IHRvIDM7CisgICAgICBleGVjdXRhYmxlIGZpbGVzIHVzdWFsbHkgY29tcHJlc3Mgc29tZXdoYXQgbGVzczsgZ3JhcGhpY2FsIGRhdGEKKyAgICAgIHN1Y2ggYXMgcmFzdGVyIGltYWdlcyBtYXkgY29tcHJlc3MgbXVjaCBtb3JlLgorCisgICAxLjIuIEludGVuZGVkIGF1ZGllbmNlCisKKyAgICAgIFRoaXMgc3BlY2lmaWNhdGlvbiBpcyBpbnRlbmRlZCBmb3IgdXNlIGJ5IGltcGxlbWVudG9ycyBvZiBzb2Z0d2FyZQorICAgICAgdG8gY29tcHJlc3MgZGF0YSBpbnRvICJkZWZsYXRlIiBmb3JtYXQgYW5kL29yIGRlY29tcHJlc3MgZGF0YSBmcm9tCisgICAgICAiZGVmbGF0ZSIgZm9ybWF0LgorCisgICAgICBUaGUgdGV4dCBvZiB0aGUgc3BlY2lmaWNhdGlvbiBhc3N1bWVzIGEgYmFzaWMgYmFja2dyb3VuZCBpbgorICAgICAgcHJvZ3JhbW1pbmcgYXQgdGhlIGxldmVsIG9mIGJpdHMgYW5kIG90aGVyIHByaW1pdGl2ZSBkYXRhCisgICAgICByZXByZXNlbnRhdGlvbnMuICBGYW1pbGlhcml0eSB3aXRoIHRoZSB0ZWNobmlxdWUgb2YgSHVmZm1hbiBjb2RpbmcKKyAgICAgIGlzIGhlbHBmdWwgYnV0IG5vdCByZXF1aXJlZC4KKworICAgMS4zLiBTY29wZQorCisgICAgICBUaGUgc3BlY2lmaWNhdGlvbiBzcGVjaWZpZXMgYSBtZXRob2QgZm9yIHJlcHJlc2VudGluZyBhIHNlcXVlbmNlCisgICAgICBvZiBieXRlcyBhcyBhICh1c3VhbGx5IHNob3J0ZXIpIHNlcXVlbmNlIG9mIGJpdHMsIGFuZCBhIG1ldGhvZCBmb3IKKyAgICAgIHBhY2tpbmcgdGhlIGxhdHRlciBiaXQgc2VxdWVuY2UgaW50byBieXRlcy4KKworICAgMS40LiBDb21wbGlhbmNlCisKKyAgICAgIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCBhIGNvbXBsaWFudCBkZWNvbXByZXNzb3IgbXVzdCBiZQorICAgICAgYWJsZSB0byBhY2NlcHQgYW5kIGRlY29tcHJlc3MgYW55IGRhdGEgc2V0IHRoYXQgY29uZm9ybXMgdG8gYWxsCisgICAgICB0aGUgc3BlY2lmaWNhdGlvbnMgcHJlc2VudGVkIGhlcmU7IGEgY29tcGxpYW50IGNvbXByZXNzb3IgbXVzdAorICAgICAgcHJvZHVjZSBkYXRhIHNldHMgdGhhdCBjb25mb3JtIHRvIGFsbCB0aGUgc3BlY2lmaWNhdGlvbnMgcHJlc2VudGVkCisgICAgICBoZXJlLgorCisgICAxLjUuICBEZWZpbml0aW9ucyBvZiB0ZXJtcyBhbmQgY29udmVudGlvbnMgdXNlZAorCisgICAgICBCeXRlOiA4IGJpdHMgc3RvcmVkIG9yIHRyYW5zbWl0dGVkIGFzIGEgdW5pdCAoc2FtZSBhcyBhbiBvY3RldCkuCisgICAgICBGb3IgdGhpcyBzcGVjaWZpY2F0aW9uLCBhIGJ5dGUgaXMgZXhhY3RseSA4IGJpdHMsIGV2ZW4gb24gbWFjaGluZXMKKworCisKK0RldXRzY2ggICAgICAgICAgICAgICAgICAgICAgSW5mb3JtYXRpb25hbCAgICAgICAgICAgICAgICAgICAgICBbUGFnZSAzXQorDAorUkZDIDE5NTEgICAgICBERUZMQVRFIENvbXByZXNzZWQgRGF0YSBGb3JtYXQgU3BlY2lmaWNhdGlvbiAgICAgIE1heSAxOTk2CisKKworICAgICAgd2hpY2ggc3RvcmUgYSBjaGFyYWN0ZXIgb24gYSBudW1iZXIgb2YgYml0cyBkaWZmZXJlbnQgZnJvbSBlaWdodC4KKyAgICAgIFNlZSBiZWxvdywgZm9yIHRoZSBudW1iZXJpbmcgb2YgYml0cyB3aXRoaW4gYSBieXRlLgorCisgICAgICBTdHJpbmc6IGEgc2VxdWVuY2Ugb2YgYXJiaXRyYXJ5IGJ5dGVzLgorCisgICAxLjYuIENoYW5nZXMgZnJvbSBwcmV2aW91cyB2ZXJzaW9ucworCisgICAgICBUaGVyZSBoYXZlIGJlZW4gbm8gdGVjaG5pY2FsIGNoYW5nZXMgdG8gdGhlIGRlZmxhdGUgZm9ybWF0IHNpbmNlCisgICAgICB2ZXJzaW9uIDEuMSBvZiB0aGlzIHNwZWNpZmljYXRpb24uICBJbiB2ZXJzaW9uIDEuMiwgc29tZQorICAgICAgdGVybWlub2xvZ3kgd2FzIGNoYW5nZWQuICBWZXJzaW9uIDEuMyBpcyBhIGNvbnZlcnNpb24gb2YgdGhlCisgICAgICBzcGVjaWZpY2F0aW9uIHRvIFJGQyBzdHlsZS4KKworMi4gQ29tcHJlc3NlZCByZXByZXNlbnRhdGlvbiBvdmVydmlldworCisgICBBIGNvbXByZXNzZWQgZGF0YSBzZXQgY29uc2lzdHMgb2YgYSBzZXJpZXMgb2YgYmxvY2tzLCBjb3JyZXNwb25kaW5nCisgICB0byBzdWNjZXNzaXZlIGJsb2NrcyBvZiBpbnB1dCBkYXRhLiAgVGhlIGJsb2NrIHNpemVzIGFyZSBhcmJpdHJhcnksCisgICBleGNlcHQgdGhhdCBub24tY29tcHJlc3NpYmxlIGJsb2NrcyBhcmUgbGltaXRlZCB0byA2NSw1MzUgYnl0ZXMuCisKKyAgIEVhY2ggYmxvY2sgaXMgY29tcHJlc3NlZCB1c2luZyBhIGNvbWJpbmF0aW9uIG9mIHRoZSBMWjc3IGFsZ29yaXRobQorICAgYW5kIEh1ZmZtYW4gY29kaW5nLiBUaGUgSHVmZm1hbiB0cmVlcyBmb3IgZWFjaCBibG9jayBhcmUgaW5kZXBlbmRlbnQKKyAgIG9mIHRob3NlIGZvciBwcmV2aW91cyBvciBzdWJzZXF1ZW50IGJsb2NrczsgdGhlIExaNzcgYWxnb3JpdGhtIG1heQorICAgdXNlIGEgcmVmZXJlbmNlIHRvIGEgZHVwbGljYXRlZCBzdHJpbmcgb2NjdXJyaW5nIGluIGEgcHJldmlvdXMgYmxvY2ssCisgICB1cCB0byAzMksgaW5wdXQgYnl0ZXMgYmVmb3JlLgorCisgICBFYWNoIGJsb2NrIGNvbnNpc3RzIG9mIHR3byBwYXJ0czogYSBwYWlyIG9mIEh1ZmZtYW4gY29kZSB0cmVlcyB0aGF0CisgICBkZXNjcmliZSB0aGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbXByZXNzZWQgZGF0YSBwYXJ0LCBhbmQgYQorICAgY29tcHJlc3NlZCBkYXRhIHBhcnQuICAoVGhlIEh1ZmZtYW4gdHJlZXMgdGhlbXNlbHZlcyBhcmUgY29tcHJlc3NlZAorICAgdXNpbmcgSHVmZm1hbiBlbmNvZGluZy4pICBUaGUgY29tcHJlc3NlZCBkYXRhIGNvbnNpc3RzIG9mIGEgc2VyaWVzIG9mCisgICBlbGVtZW50cyBvZiB0d28gdHlwZXM6IGxpdGVyYWwgYnl0ZXMgKG9mIHN0cmluZ3MgdGhhdCBoYXZlIG5vdCBiZWVuCisgICBkZXRlY3RlZCBhcyBkdXBsaWNhdGVkIHdpdGhpbiB0aGUgcHJldmlvdXMgMzJLIGlucHV0IGJ5dGVzKSwgYW5kCisgICBwb2ludGVycyB0byBkdXBsaWNhdGVkIHN0cmluZ3MsIHdoZXJlIGEgcG9pbnRlciBpcyByZXByZXNlbnRlZCBhcyBhCisgICBwYWlyIDxsZW5ndGgsIGJhY2t3YXJkIGRpc3RhbmNlPi4gIFRoZSByZXByZXNlbnRhdGlvbiB1c2VkIGluIHRoZQorICAgImRlZmxhdGUiIGZvcm1hdCBsaW1pdHMgZGlzdGFuY2VzIHRvIDMySyBieXRlcyBhbmQgbGVuZ3RocyB0byAyNTgKKyAgIGJ5dGVzLCBidXQgZG9lcyBub3QgbGltaXQgdGhlIHNpemUgb2YgYSBibG9jaywgZXhjZXB0IGZvcgorICAgdW5jb21wcmVzc2libGUgYmxvY2tzLCB3aGljaCBhcmUgbGltaXRlZCBhcyBub3RlZCBhYm92ZS4KKworICAgRWFjaCB0eXBlIG9mIHZhbHVlIChsaXRlcmFscywgZGlzdGFuY2VzLCBhbmQgbGVuZ3RocykgaW4gdGhlCisgICBjb21wcmVzc2VkIGRhdGEgaXMgcmVwcmVzZW50ZWQgdXNpbmcgYSBIdWZmbWFuIGNvZGUsIHVzaW5nIG9uZSBjb2RlCisgICB0cmVlIGZvciBsaXRlcmFscyBhbmQgbGVuZ3RocyBhbmQgYSBzZXBhcmF0ZSBjb2RlIHRyZWUgZm9yIGRpc3RhbmNlcy4KKyAgIFRoZSBjb2RlIHRyZWVzIGZvciBlYWNoIGJsb2NrIGFwcGVhciBpbiBhIGNvbXBhY3QgZm9ybSBqdXN0IGJlZm9yZQorICAgdGhlIGNvbXByZXNzZWQgZGF0YSBmb3IgdGhhdCBibG9jay4KKworCisKKworCisKKworCisKKworRGV1dHNjaCAgICAgICAgICAgICAgICAgICAgICBJbmZvcm1hdGlvbmFsICAgICAgICAgICAgICAgICAgICAgIFtQYWdlIDRdCisMCitSRkMgMTk1MSAgICAgIERFRkxBVEUgQ29tcHJlc3NlZCBEYXRhIEZvcm1hdCBTcGVjaWZpY2F0aW9uICAgICAgTWF5IDE5OTYKKworCiszLiBEZXRhaWxlZCBzcGVjaWZpY2F0aW9uCisKKyAgIDMuMS4gT3ZlcmFsbCBjb252ZW50aW9ucyBJbiB0aGUgZGlhZ3JhbXMgYmVsb3csIGEgYm94IGxpa2UgdGhpczoKKworICAgICAgICAgKy0tLSsKKyAgICAgICAgIHwgICB8IDwtLSB0aGUgdmVydGljYWwgYmFycyBtaWdodCBiZSBtaXNzaW5nCisgICAgICAgICArLS0tKworCisgICAgICByZXByZXNlbnRzIG9uZSBieXRlOyBhIGJveCBsaWtlIHRoaXM6CisKKyAgICAgICAgICs9PT09PT09PT09PT09PSsKKyAgICAgICAgIHwgICAgICAgICAgICAgIHwKKyAgICAgICAgICs9PT09PT09PT09PT09PSsKKworICAgICAgcmVwcmVzZW50cyBhIHZhcmlhYmxlIG51bWJlciBvZiBieXRlcy4KKworICAgICAgQnl0ZXMgc3RvcmVkIHdpdGhpbiBhIGNvbXB1dGVyIGRvIG5vdCBoYXZlIGEgImJpdCBvcmRlciIsIHNpbmNlCisgICAgICB0aGV5IGFyZSBhbHdheXMgdHJlYXRlZCBhcyBhIHVuaXQuICBIb3dldmVyLCBhIGJ5dGUgY29uc2lkZXJlZCBhcworICAgICAgYW4gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDI1NSBkb2VzIGhhdmUgYSBtb3N0LSBhbmQgbGVhc3QtCisgICAgICBzaWduaWZpY2FudCBiaXQsIGFuZCBzaW5jZSB3ZSB3cml0ZSBudW1iZXJzIHdpdGggdGhlIG1vc3QtCisgICAgICBzaWduaWZpY2FudCBkaWdpdCBvbiB0aGUgbGVmdCwgd2UgYWxzbyB3cml0ZSBieXRlcyB3aXRoIHRoZSBtb3N0LQorICAgICAgc2lnbmlmaWNhbnQgYml0IG9uIHRoZSBsZWZ0LiAgSW4gdGhlIGRpYWdyYW1zIGJlbG93LCB3ZSBudW1iZXIgdGhlCisgICAgICBiaXRzIG9mIGEgYnl0ZSBzbyB0aGF0IGJpdCAwIGlzIHRoZSBsZWFzdC1zaWduaWZpY2FudCBiaXQsIGkuZS4sCisgICAgICB0aGUgYml0cyBhcmUgbnVtYmVyZWQ6CisKKyAgICAgICAgICstLS0tLS0tLSsKKyAgICAgICAgIHw3NjU0MzIxMHwKKyAgICAgICAgICstLS0tLS0tLSsKKworICAgICAgV2l0aGluIGEgY29tcHV0ZXIsIGEgbnVtYmVyIG1heSBvY2N1cHkgbXVsdGlwbGUgYnl0ZXMuICBBbGwKKyAgICAgIG11bHRpLWJ5dGUgbnVtYmVycyBpbiB0aGUgZm9ybWF0IGRlc2NyaWJlZCBoZXJlIGFyZSBzdG9yZWQgd2l0aAorICAgICAgdGhlIGxlYXN0LXNpZ25pZmljYW50IGJ5dGUgZmlyc3QgKGF0IHRoZSBsb3dlciBtZW1vcnkgYWRkcmVzcykuCisgICAgICBGb3IgZXhhbXBsZSwgdGhlIGRlY2ltYWwgbnVtYmVyIDUyMCBpcyBzdG9yZWQgYXM6CisKKyAgICAgICAgICAgICAwICAgICAgICAxCisgICAgICAgICArLS0tLS0tLS0rLS0tLS0tLS0rCisgICAgICAgICB8MDAwMDEwMDB8MDAwMDAwMTB8CisgICAgICAgICArLS0tLS0tLS0rLS0tLS0tLS0rCisgICAgICAgICAgXiAgICAgICAgXgorICAgICAgICAgIHwgICAgICAgIHwKKyAgICAgICAgICB8ICAgICAgICArIG1vcmUgc2lnbmlmaWNhbnQgYnl0ZSA9IDIgeCAyNTYKKyAgICAgICAgICArIGxlc3Mgc2lnbmlmaWNhbnQgYnl0ZSA9IDgKKworICAgICAgMy4xLjEuIFBhY2tpbmcgaW50byBieXRlcworCisgICAgICAgICBUaGlzIGRvY3VtZW50IGRvZXMgbm90IGFkZHJlc3MgdGhlIGlzc3VlIG9mIHRoZSBvcmRlciBpbiB3aGljaAorICAgICAgICAgYml0cyBvZiBhIGJ5dGUgYXJlIHRyYW5zbWl0dGVkIG9uIGEgYml0LXNlcXVlbnRpYWwgbWVkaXVtLAorICAgICAgICAgc2luY2UgdGhlIGZpbmFsIGRhdGEgZm9ybWF0IGRlc2NyaWJlZCBoZXJlIGlzIGJ5dGUtIHJhdGhlciB0aGFuCisKKworCitEZXV0c2NoICAgICAgICAgICAgICAgICAgICAgIEluZm9ybWF0aW9uYWwgICAgICAgICAgICAgICAgICAgICAgW1BhZ2UgNV0KKwwKK1JGQyAxOTUxICAgICAgREVGTEFURSBDb21wcmVzc2VkIERhdGEgRm9ybWF0IFNwZWNpZmljYXRpb24gICAgICBNYXkgMTk5NgorCisKKyAgICAgICAgIGJpdC1vcmllbnRlZC4gIEhvd2V2ZXIsIHdlIGRlc2NyaWJlIHRoZSBjb21wcmVzc2VkIGJsb2NrIGZvcm1hdAorICAgICAgICAgaW4gYmVsb3csIGFzIGEgc2VxdWVuY2Ugb2YgZGF0YSBlbGVtZW50cyBvZiB2YXJpb3VzIGJpdAorICAgICAgICAgbGVuZ3Rocywgbm90IGEgc2VxdWVuY2Ugb2YgYnl0ZXMuICBXZSBtdXN0IHRoZXJlZm9yZSBzcGVjaWZ5CisgICAgICAgICBob3cgdG8gcGFjayB0aGVzZSBkYXRhIGVsZW1lbnRzIGludG8gYnl0ZXMgdG8gZm9ybSB0aGUgZmluYWwKKyAgICAgICAgIGNvbXByZXNzZWQgYnl0ZSBzZXF1ZW5jZToKKworICAgICAgICAgICAgICogRGF0YSBlbGVtZW50cyBhcmUgcGFja2VkIGludG8gYnl0ZXMgaW4gb3JkZXIgb2YKKyAgICAgICAgICAgICAgIGluY3JlYXNpbmcgYml0IG51bWJlciB3aXRoaW4gdGhlIGJ5dGUsIGkuZS4sIHN0YXJ0aW5nCisgICAgICAgICAgICAgICB3aXRoIHRoZSBsZWFzdC1zaWduaWZpY2FudCBiaXQgb2YgdGhlIGJ5dGUuCisgICAgICAgICAgICAgKiBEYXRhIGVsZW1lbnRzIG90aGVyIHRoYW4gSHVmZm1hbiBjb2RlcyBhcmUgcGFja2VkCisgICAgICAgICAgICAgICBzdGFydGluZyB3aXRoIHRoZSBsZWFzdC1zaWduaWZpY2FudCBiaXQgb2YgdGhlIGRhdGEKKyAgICAgICAgICAgICAgIGVsZW1lbnQuCisgICAgICAgICAgICAgKiBIdWZmbWFuIGNvZGVzIGFyZSBwYWNrZWQgc3RhcnRpbmcgd2l0aCB0aGUgbW9zdC0KKyAgICAgICAgICAgICAgIHNpZ25pZmljYW50IGJpdCBvZiB0aGUgY29kZS4KKworICAgICAgICAgSW4gb3RoZXIgd29yZHMsIGlmIG9uZSB3ZXJlIHRvIHByaW50IG91dCB0aGUgY29tcHJlc3NlZCBkYXRhIGFzCisgICAgICAgICBhIHNlcXVlbmNlIG9mIGJ5dGVzLCBzdGFydGluZyB3aXRoIHRoZSBmaXJzdCBieXRlIGF0IHRoZQorICAgICAgICAgKnJpZ2h0KiBtYXJnaW4gYW5kIHByb2NlZWRpbmcgdG8gdGhlICpsZWZ0Kiwgd2l0aCB0aGUgbW9zdC0KKyAgICAgICAgIHNpZ25pZmljYW50IGJpdCBvZiBlYWNoIGJ5dGUgb24gdGhlIGxlZnQgYXMgdXN1YWwsIG9uZSB3b3VsZCBiZQorICAgICAgICAgYWJsZSB0byBwYXJzZSB0aGUgcmVzdWx0IGZyb20gcmlnaHQgdG8gbGVmdCwgd2l0aCBmaXhlZC13aWR0aAorICAgICAgICAgZWxlbWVudHMgaW4gdGhlIGNvcnJlY3QgTVNCLXRvLUxTQiBvcmRlciBhbmQgSHVmZm1hbiBjb2RlcyBpbgorICAgICAgICAgYml0LXJldmVyc2VkIG9yZGVyIChpLmUuLCB3aXRoIHRoZSBmaXJzdCBiaXQgb2YgdGhlIGNvZGUgaW4gdGhlCisgICAgICAgICByZWxhdGl2ZSBMU0IgcG9zaXRpb24pLgorCisgICAzLjIuIENvbXByZXNzZWQgYmxvY2sgZm9ybWF0CisKKyAgICAgIDMuMi4xLiBTeW5vcHNpcyBvZiBwcmVmaXggYW5kIEh1ZmZtYW4gY29kaW5nCisKKyAgICAgICAgIFByZWZpeCBjb2RpbmcgcmVwcmVzZW50cyBzeW1ib2xzIGZyb20gYW4gYSBwcmlvcmkga25vd24KKyAgICAgICAgIGFscGhhYmV0IGJ5IGJpdCBzZXF1ZW5jZXMgKGNvZGVzKSwgb25lIGNvZGUgZm9yIGVhY2ggc3ltYm9sLCBpbgorICAgICAgICAgYSBtYW5uZXIgc3VjaCB0aGF0IGRpZmZlcmVudCBzeW1ib2xzIG1heSBiZSByZXByZXNlbnRlZCBieSBiaXQKKyAgICAgICAgIHNlcXVlbmNlcyBvZiBkaWZmZXJlbnQgbGVuZ3RocywgYnV0IGEgcGFyc2VyIGNhbiBhbHdheXMgcGFyc2UKKyAgICAgICAgIGFuIGVuY29kZWQgc3RyaW5nIHVuYW1iaWd1b3VzbHkgc3ltYm9sLWJ5LXN5bWJvbC4KKworICAgICAgICAgV2UgZGVmaW5lIGEgcHJlZml4IGNvZGUgaW4gdGVybXMgb2YgYSBiaW5hcnkgdHJlZSBpbiB3aGljaCB0aGUKKyAgICAgICAgIHR3byBlZGdlcyBkZXNjZW5kaW5nIGZyb20gZWFjaCBub24tbGVhZiBub2RlIGFyZSBsYWJlbGVkIDAgYW5kCisgICAgICAgICAxIGFuZCBpbiB3aGljaCB0aGUgbGVhZiBub2RlcyBjb3JyZXNwb25kIG9uZS1mb3Itb25lIHdpdGggKGFyZQorICAgICAgICAgbGFiZWxlZCB3aXRoKSB0aGUgc3ltYm9scyBvZiB0aGUgYWxwaGFiZXQ7IHRoZW4gdGhlIGNvZGUgZm9yIGEKKyAgICAgICAgIHN5bWJvbCBpcyB0aGUgc2VxdWVuY2Ugb2YgMCdzIGFuZCAxJ3Mgb24gdGhlIGVkZ2VzIGxlYWRpbmcgZnJvbQorICAgICAgICAgdGhlIHJvb3QgdG8gdGhlIGxlYWYgbGFiZWxlZCB3aXRoIHRoYXQgc3ltYm9sLiAgRm9yIGV4YW1wbGU6CisKKworCisKKworCisKKworCisKKworRGV1dHNjaCAgICAgICAgICAgICAgICAgICAgICBJbmZvcm1hdGlvbmFsICAgICAgICAgICAgICAgICAgICAgIFtQYWdlIDZdCisMCitSRkMgMTk1MSAgICAgIERFRkxBVEUgQ29tcHJlc3NlZCBEYXRhIEZvcm1hdCBTcGVjaWZpY2F0aW9uICAgICAgTWF5IDE5OTYKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgIC9cICAgICAgICAgICAgICBTeW1ib2wgICAgQ29kZQorICAgICAgICAgICAgICAgICAgICAgICAgIDAgIDEgICAgICAgICAgICAgLS0tLS0tICAgIC0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgIC8gICAgXCAgICAgICAgICAgICAgICBBICAgICAgMDAKKyAgICAgICAgICAgICAgICAgICAgICAgL1wgICAgIEIgICAgICAgICAgICAgICBCICAgICAgIDEKKyAgICAgICAgICAgICAgICAgICAgICAwICAxICAgICAgICAgICAgICAgICAgICBDICAgICAwMTEKKyAgICAgICAgICAgICAgICAgICAgIC8gICAgXCAgICAgICAgICAgICAgICAgICBEICAgICAwMTAKKyAgICAgICAgICAgICAgICAgICAgQSAgICAgL1wKKyAgICAgICAgICAgICAgICAgICAgICAgICAwICAxCisgICAgICAgICAgICAgICAgICAgICAgICAvICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgRCAgICAgIEMKKworICAgICAgICAgQSBwYXJzZXIgY2FuIGRlY29kZSB0aGUgbmV4dCBzeW1ib2wgZnJvbSBhbiBlbmNvZGVkIGlucHV0CisgICAgICAgICBzdHJlYW0gYnkgd2Fsa2luZyBkb3duIHRoZSB0cmVlIGZyb20gdGhlIHJvb3QsIGF0IGVhY2ggc3RlcAorICAgICAgICAgY2hvb3NpbmcgdGhlIGVkZ2UgY29ycmVzcG9uZGluZyB0byB0aGUgbmV4dCBpbnB1dCBiaXQuCisKKyAgICAgICAgIEdpdmVuIGFuIGFscGhhYmV0IHdpdGgga25vd24gc3ltYm9sIGZyZXF1ZW5jaWVzLCB0aGUgSHVmZm1hbgorICAgICAgICAgYWxnb3JpdGhtIGFsbG93cyB0aGUgY29uc3RydWN0aW9uIG9mIGFuIG9wdGltYWwgcHJlZml4IGNvZGUKKyAgICAgICAgIChvbmUgd2hpY2ggcmVwcmVzZW50cyBzdHJpbmdzIHdpdGggdGhvc2Ugc3ltYm9sIGZyZXF1ZW5jaWVzCisgICAgICAgICB1c2luZyB0aGUgZmV3ZXN0IGJpdHMgb2YgYW55IHBvc3NpYmxlIHByZWZpeCBjb2RlcyBmb3IgdGhhdAorICAgICAgICAgYWxwaGFiZXQpLiAgU3VjaCBhIGNvZGUgaXMgY2FsbGVkIGEgSHVmZm1hbiBjb2RlLiAgKFNlZQorICAgICAgICAgcmVmZXJlbmNlIFsxXSBpbiBDaGFwdGVyIDUsIHJlZmVyZW5jZXMgZm9yIGFkZGl0aW9uYWwKKyAgICAgICAgIGluZm9ybWF0aW9uIG9uIEh1ZmZtYW4gY29kZXMuKQorCisgICAgICAgICBOb3RlIHRoYXQgaW4gdGhlICJkZWZsYXRlIiBmb3JtYXQsIHRoZSBIdWZmbWFuIGNvZGVzIGZvciB0aGUKKyAgICAgICAgIHZhcmlvdXMgYWxwaGFiZXRzIG11c3Qgbm90IGV4Y2VlZCBjZXJ0YWluIG1heGltdW0gY29kZSBsZW5ndGhzLgorICAgICAgICAgVGhpcyBjb25zdHJhaW50IGNvbXBsaWNhdGVzIHRoZSBhbGdvcml0aG0gZm9yIGNvbXB1dGluZyBjb2RlCisgICAgICAgICBsZW5ndGhzIGZyb20gc3ltYm9sIGZyZXF1ZW5jaWVzLiAgQWdhaW4sIHNlZSBDaGFwdGVyIDUsCisgICAgICAgICByZWZlcmVuY2VzIGZvciBkZXRhaWxzLgorCisgICAgICAzLjIuMi4gVXNlIG9mIEh1ZmZtYW4gY29kaW5nIGluIHRoZSAiZGVmbGF0ZSIgZm9ybWF0CisKKyAgICAgICAgIFRoZSBIdWZmbWFuIGNvZGVzIHVzZWQgZm9yIGVhY2ggYWxwaGFiZXQgaW4gdGhlICJkZWZsYXRlIgorICAgICAgICAgZm9ybWF0IGhhdmUgdHdvIGFkZGl0aW9uYWwgcnVsZXM6CisKKyAgICAgICAgICAgICAqIEFsbCBjb2RlcyBvZiBhIGdpdmVuIGJpdCBsZW5ndGggaGF2ZSBsZXhpY29ncmFwaGljYWxseQorICAgICAgICAgICAgICAgY29uc2VjdXRpdmUgdmFsdWVzLCBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUgc3ltYm9scworICAgICAgICAgICAgICAgdGhleSByZXByZXNlbnQ7CisKKyAgICAgICAgICAgICAqIFNob3J0ZXIgY29kZXMgbGV4aWNvZ3JhcGhpY2FsbHkgcHJlY2VkZSBsb25nZXIgY29kZXMuCisKKworCisKKworCisKKworCisKKworCitEZXV0c2NoICAgICAgICAgICAgICAgICAgICAgIEluZm9ybWF0aW9uYWwgICAgICAgICAgICAgICAgICAgICAgW1BhZ2UgN10KKwwKK1JGQyAxOTUxICAgICAgREVGTEFURSBDb21wcmVzc2VkIERhdGEgRm9ybWF0IFNwZWNpZmljYXRpb24gICAgICBNYXkgMTk5NgorCisKKyAgICAgICAgIFdlIGNvdWxkIHJlY29kZSB0aGUgZXhhbXBsZSBhYm92ZSB0byBmb2xsb3cgdGhpcyBydWxlIGFzCisgICAgICAgICBmb2xsb3dzLCBhc3N1bWluZyB0aGF0IHRoZSBvcmRlciBvZiB0aGUgYWxwaGFiZXQgaXMgQUJDRDoKKworICAgICAgICAgICAgU3ltYm9sICBDb2RlCisgICAgICAgICAgICAtLS0tLS0gIC0tLS0KKyAgICAgICAgICAgIEEgICAgICAgMTAKKyAgICAgICAgICAgIEIgICAgICAgMAorICAgICAgICAgICAgQyAgICAgICAxMTAKKyAgICAgICAgICAgIEQgICAgICAgMTExCisKKyAgICAgICAgIEkuZS4sIDAgcHJlY2VkZXMgMTAgd2hpY2ggcHJlY2VkZXMgMTF4LCBhbmQgMTEwIGFuZCAxMTEgYXJlCisgICAgICAgICBsZXhpY29ncmFwaGljYWxseSBjb25zZWN1dGl2ZS4KKworICAgICAgICAgR2l2ZW4gdGhpcyBydWxlLCB3ZSBjYW4gZGVmaW5lIHRoZSBIdWZmbWFuIGNvZGUgZm9yIGFuIGFscGhhYmV0CisgICAgICAgICBqdXN0IGJ5IGdpdmluZyB0aGUgYml0IGxlbmd0aHMgb2YgdGhlIGNvZGVzIGZvciBlYWNoIHN5bWJvbCBvZgorICAgICAgICAgdGhlIGFscGhhYmV0IGluIG9yZGVyOyB0aGlzIGlzIHN1ZmZpY2llbnQgdG8gZGV0ZXJtaW5lIHRoZQorICAgICAgICAgYWN0dWFsIGNvZGVzLiAgSW4gb3VyIGV4YW1wbGUsIHRoZSBjb2RlIGlzIGNvbXBsZXRlbHkgZGVmaW5lZAorICAgICAgICAgYnkgdGhlIHNlcXVlbmNlIG9mIGJpdCBsZW5ndGhzICgyLCAxLCAzLCAzKS4gIFRoZSBmb2xsb3dpbmcKKyAgICAgICAgIGFsZ29yaXRobSBnZW5lcmF0ZXMgdGhlIGNvZGVzIGFzIGludGVnZXJzLCBpbnRlbmRlZCB0byBiZSByZWFkCisgICAgICAgICBmcm9tIG1vc3QtIHRvIGxlYXN0LXNpZ25pZmljYW50IGJpdC4gIFRoZSBjb2RlIGxlbmd0aHMgYXJlCisgICAgICAgICBpbml0aWFsbHkgaW4gdHJlZVtJXS5MZW47IHRoZSBjb2RlcyBhcmUgcHJvZHVjZWQgaW4KKyAgICAgICAgIHRyZWVbSV0uQ29kZS4KKworICAgICAgICAgMSkgIENvdW50IHRoZSBudW1iZXIgb2YgY29kZXMgZm9yIGVhY2ggY29kZSBsZW5ndGguICBMZXQKKyAgICAgICAgICAgICBibF9jb3VudFtOXSBiZSB0aGUgbnVtYmVyIG9mIGNvZGVzIG9mIGxlbmd0aCBOLCBOID49IDEuCisKKyAgICAgICAgIDIpICBGaW5kIHRoZSBudW1lcmljYWwgdmFsdWUgb2YgdGhlIHNtYWxsZXN0IGNvZGUgZm9yIGVhY2gKKyAgICAgICAgICAgICBjb2RlIGxlbmd0aDoKKworICAgICAgICAgICAgICAgIGNvZGUgPSAwOworICAgICAgICAgICAgICAgIGJsX2NvdW50WzBdID0gMDsKKyAgICAgICAgICAgICAgICBmb3IgKGJpdHMgPSAxOyBiaXRzIDw9IE1BWF9CSVRTOyBiaXRzKyspIHsKKyAgICAgICAgICAgICAgICAgICAgY29kZSA9IChjb2RlICsgYmxfY291bnRbYml0cy0xXSkgPDwgMTsKKyAgICAgICAgICAgICAgICAgICAgbmV4dF9jb2RlW2JpdHNdID0gY29kZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgIDMpICBBc3NpZ24gbnVtZXJpY2FsIHZhbHVlcyB0byBhbGwgY29kZXMsIHVzaW5nIGNvbnNlY3V0aXZlCisgICAgICAgICAgICAgdmFsdWVzIGZvciBhbGwgY29kZXMgb2YgdGhlIHNhbWUgbGVuZ3RoIHdpdGggdGhlIGJhc2UKKyAgICAgICAgICAgICB2YWx1ZXMgZGV0ZXJtaW5lZCBhdCBzdGVwIDIuIENvZGVzIHRoYXQgYXJlIG5ldmVyIHVzZWQKKyAgICAgICAgICAgICAod2hpY2ggaGF2ZSBhIGJpdCBsZW5ndGggb2YgemVybykgbXVzdCBub3QgYmUgYXNzaWduZWQgYQorICAgICAgICAgICAgIHZhbHVlLgorCisgICAgICAgICAgICAgICAgZm9yIChuID0gMDsgIG4gPD0gbWF4X2NvZGU7IG4rKykgeworICAgICAgICAgICAgICAgICAgICBsZW4gPSB0cmVlW25dLkxlbjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxlbiAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0cmVlW25dLkNvZGUgPSBuZXh0X2NvZGVbbGVuXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfY29kZVtsZW5dKys7CisgICAgICAgICAgICAgICAgICAgIH0KKworCisKK0RldXRzY2ggICAgICAgICAgICAgICAgICAgICAgSW5mb3JtYXRpb25hbCAgICAgICAgICAgICAgICAgICAgICBbUGFnZSA4XQorDAorUkZDIDE5NTEgICAgICBERUZMQVRFIENvbXByZXNzZWQgRGF0YSBGb3JtYXQgU3BlY2lmaWNhdGlvbiAgICAgIE1heSAxOTk2CisKKworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgRXhhbXBsZToKKworICAgICAgICAgQ29uc2lkZXIgdGhlIGFscGhhYmV0IEFCQ0RFRkdILCB3aXRoIGJpdCBsZW5ndGhzICgzLCAzLCAzLCAzLAorICAgICAgICAgMywgMiwgNCwgNCkuICBBZnRlciBzdGVwIDEsIHdlIGhhdmU6CisKKyAgICAgICAgICAgIE4gICAgICBibF9jb3VudFtOXQorICAgICAgICAgICAgLSAgICAgIC0tLS0tLS0tLS0tCisgICAgICAgICAgICAyICAgICAgMQorICAgICAgICAgICAgMyAgICAgIDUKKyAgICAgICAgICAgIDQgICAgICAyCisKKyAgICAgICAgIFN0ZXAgMiBjb21wdXRlcyB0aGUgZm9sbG93aW5nIG5leHRfY29kZSB2YWx1ZXM6CisKKyAgICAgICAgICAgIE4gICAgICBuZXh0X2NvZGVbTl0KKyAgICAgICAgICAgIC0gICAgICAtLS0tLS0tLS0tLS0KKyAgICAgICAgICAgIDEgICAgICAwCisgICAgICAgICAgICAyICAgICAgMAorICAgICAgICAgICAgMyAgICAgIDIKKyAgICAgICAgICAgIDQgICAgICAxNAorCisgICAgICAgICBTdGVwIDMgcHJvZHVjZXMgdGhlIGZvbGxvd2luZyBjb2RlIHZhbHVlczoKKworICAgICAgICAgICAgU3ltYm9sIExlbmd0aCAgIENvZGUKKyAgICAgICAgICAgIC0tLS0tLSAtLS0tLS0gICAtLS0tCisgICAgICAgICAgICBBICAgICAgIDMgICAgICAgIDAxMAorICAgICAgICAgICAgQiAgICAgICAzICAgICAgICAwMTEKKyAgICAgICAgICAgIEMgICAgICAgMyAgICAgICAgMTAwCisgICAgICAgICAgICBEICAgICAgIDMgICAgICAgIDEwMQorICAgICAgICAgICAgRSAgICAgICAzICAgICAgICAxMTAKKyAgICAgICAgICAgIEYgICAgICAgMiAgICAgICAgIDAwCisgICAgICAgICAgICBHICAgICAgIDQgICAgICAgMTExMAorICAgICAgICAgICAgSCAgICAgICA0ICAgICAgIDExMTEKKworICAgICAgMy4yLjMuIERldGFpbHMgb2YgYmxvY2sgZm9ybWF0CisKKyAgICAgICAgIEVhY2ggYmxvY2sgb2YgY29tcHJlc3NlZCBkYXRhIGJlZ2lucyB3aXRoIDMgaGVhZGVyIGJpdHMKKyAgICAgICAgIGNvbnRhaW5pbmcgdGhlIGZvbGxvd2luZyBkYXRhOgorCisgICAgICAgICAgICBmaXJzdCBiaXQgICAgICAgQkZJTkFMCisgICAgICAgICAgICBuZXh0IDIgYml0cyAgICAgQlRZUEUKKworICAgICAgICAgTm90ZSB0aGF0IHRoZSBoZWFkZXIgYml0cyBkbyBub3QgbmVjZXNzYXJpbHkgYmVnaW4gb24gYSBieXRlCisgICAgICAgICBib3VuZGFyeSwgc2luY2UgYSBibG9jayBkb2VzIG5vdCBuZWNlc3NhcmlseSBvY2N1cHkgYW4gaW50ZWdyYWwKKyAgICAgICAgIG51bWJlciBvZiBieXRlcy4KKworCisKKworCitEZXV0c2NoICAgICAgICAgICAgICAgICAgICAgIEluZm9ybWF0aW9uYWwgICAgICAgICAgICAgICAgICAgICAgW1BhZ2UgOV0KKwwKK1JGQyAxOTUxICAgICAgREVGTEFURSBDb21wcmVzc2VkIERhdGEgRm9ybWF0IFNwZWNpZmljYXRpb24gICAgICBNYXkgMTk5NgorCisKKyAgICAgICAgIEJGSU5BTCBpcyBzZXQgaWYgYW5kIG9ubHkgaWYgdGhpcyBpcyB0aGUgbGFzdCBibG9jayBvZiB0aGUgZGF0YQorICAgICAgICAgc2V0LgorCisgICAgICAgICBCVFlQRSBzcGVjaWZpZXMgaG93IHRoZSBkYXRhIGFyZSBjb21wcmVzc2VkLCBhcyBmb2xsb3dzOgorCisgICAgICAgICAgICAwMCAtIG5vIGNvbXByZXNzaW9uCisgICAgICAgICAgICAwMSAtIGNvbXByZXNzZWQgd2l0aCBmaXhlZCBIdWZmbWFuIGNvZGVzCisgICAgICAgICAgICAxMCAtIGNvbXByZXNzZWQgd2l0aCBkeW5hbWljIEh1ZmZtYW4gY29kZXMKKyAgICAgICAgICAgIDExIC0gcmVzZXJ2ZWQgKGVycm9yKQorCisgICAgICAgICBUaGUgb25seSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHR3byBjb21wcmVzc2VkIGNhc2VzIGlzIGhvdyB0aGUKKyAgICAgICAgIEh1ZmZtYW4gY29kZXMgZm9yIHRoZSBsaXRlcmFsL2xlbmd0aCBhbmQgZGlzdGFuY2UgYWxwaGFiZXRzIGFyZQorICAgICAgICAgZGVmaW5lZC4KKworICAgICAgICAgSW4gYWxsIGNhc2VzLCB0aGUgZGVjb2RpbmcgYWxnb3JpdGhtIGZvciB0aGUgYWN0dWFsIGRhdGEgaXMgYXMKKyAgICAgICAgIGZvbGxvd3M6CisKKyAgICAgICAgICAgIGRvCisgICAgICAgICAgICAgICByZWFkIGJsb2NrIGhlYWRlciBmcm9tIGlucHV0IHN0cmVhbS4KKyAgICAgICAgICAgICAgIGlmIHN0b3JlZCB3aXRoIG5vIGNvbXByZXNzaW9uCisgICAgICAgICAgICAgICAgICBza2lwIGFueSByZW1haW5pbmcgYml0cyBpbiBjdXJyZW50IHBhcnRpYWxseQorICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkIGJ5dGUKKyAgICAgICAgICAgICAgICAgIHJlYWQgTEVOIGFuZCBOTEVOIChzZWUgbmV4dCBzZWN0aW9uKQorICAgICAgICAgICAgICAgICAgY29weSBMRU4gYnl0ZXMgb2YgZGF0YSB0byBvdXRwdXQKKyAgICAgICAgICAgICAgIG90aGVyd2lzZQorICAgICAgICAgICAgICAgICAgaWYgY29tcHJlc3NlZCB3aXRoIGR5bmFtaWMgSHVmZm1hbiBjb2RlcworICAgICAgICAgICAgICAgICAgICAgcmVhZCByZXByZXNlbnRhdGlvbiBvZiBjb2RlIHRyZWVzIChzZWUKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNlY3Rpb24gYmVsb3cpCisgICAgICAgICAgICAgICAgICBsb29wICh1bnRpbCBlbmQgb2YgYmxvY2sgY29kZSByZWNvZ25pemVkKQorICAgICAgICAgICAgICAgICAgICAgZGVjb2RlIGxpdGVyYWwvbGVuZ3RoIHZhbHVlIGZyb20gaW5wdXQgc3RyZWFtCisgICAgICAgICAgICAgICAgICAgICBpZiB2YWx1ZSA8IDI1NgorICAgICAgICAgICAgICAgICAgICAgICAgY29weSB2YWx1ZSAobGl0ZXJhbCBieXRlKSB0byBvdXRwdXQgc3RyZWFtCisgICAgICAgICAgICAgICAgICAgICBvdGhlcndpc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHZhbHVlID0gZW5kIG9mIGJsb2NrICgyNTYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmcm9tIGxvb3AKKyAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyd2lzZSAodmFsdWUgPSAyNTcuLjI4NSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZSBkaXN0YW5jZSBmcm9tIGlucHV0IHN0cmVhbQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZlIGJhY2t3YXJkcyBkaXN0YW5jZSBieXRlcyBpbiB0aGUgb3V0cHV0CisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0sIGFuZCBjb3B5IGxlbmd0aCBieXRlcyBmcm9tIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uIHRvIHRoZSBvdXRwdXQgc3RyZWFtLgorICAgICAgICAgICAgICAgICAgZW5kIGxvb3AKKyAgICAgICAgICAgIHdoaWxlIG5vdCBsYXN0IGJsb2NrCisKKyAgICAgICAgIE5vdGUgdGhhdCBhIGR1cGxpY2F0ZWQgc3RyaW5nIHJlZmVyZW5jZSBtYXkgcmVmZXIgdG8gYSBzdHJpbmcKKyAgICAgICAgIGluIGEgcHJldmlvdXMgYmxvY2s7IGkuZS4sIHRoZSBiYWNrd2FyZCBkaXN0YW5jZSBtYXkgY3Jvc3Mgb25lCisgICAgICAgICBvciBtb3JlIGJsb2NrIGJvdW5kYXJpZXMuICBIb3dldmVyIGEgZGlzdGFuY2UgY2Fubm90IHJlZmVyIHBhc3QKKyAgICAgICAgIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG91dHB1dCBzdHJlYW0uICAoQW4gYXBwbGljYXRpb24gdXNpbmcgYQorCisKKworRGV1dHNjaCAgICAgICAgICAgICAgICAgICAgICBJbmZvcm1hdGlvbmFsICAgICAgICAgICAgICAgICAgICAgW1BhZ2UgMTBdCisMCitSRkMgMTk1MSAgICAgIERFRkxBVEUgQ29tcHJlc3NlZCBEYXRhIEZvcm1hdCBTcGVjaWZpY2F0aW9uICAgICAgTWF5IDE5OTYKKworCisgICAgICAgICBwcmVzZXQgZGljdGlvbmFyeSBtaWdodCBkaXNjYXJkIHBhcnQgb2YgdGhlIG91dHB1dCBzdHJlYW07IGEKKyAgICAgICAgIGRpc3RhbmNlIGNhbiByZWZlciB0byB0aGF0IHBhcnQgb2YgdGhlIG91dHB1dCBzdHJlYW0gYW55d2F5KQorICAgICAgICAgTm90ZSBhbHNvIHRoYXQgdGhlIHJlZmVyZW5jZWQgc3RyaW5nIG1heSBvdmVybGFwIHRoZSBjdXJyZW50CisgICAgICAgICBwb3NpdGlvbjsgZm9yIGV4YW1wbGUsIGlmIHRoZSBsYXN0IDIgYnl0ZXMgZGVjb2RlZCBoYXZlIHZhbHVlcworICAgICAgICAgWCBhbmQgWSwgYSBzdHJpbmcgcmVmZXJlbmNlIHdpdGggPGxlbmd0aCA9IDUsIGRpc3RhbmNlID0gMj4KKyAgICAgICAgIGFkZHMgWCxZLFgsWSxYIHRvIHRoZSBvdXRwdXQgc3RyZWFtLgorCisgICAgICAgICBXZSBub3cgc3BlY2lmeSBlYWNoIGNvbXByZXNzaW9uIG1ldGhvZCBpbiB0dXJuLgorCisgICAgICAzLjIuNC4gTm9uLWNvbXByZXNzZWQgYmxvY2tzIChCVFlQRT0wMCkKKworICAgICAgICAgQW55IGJpdHMgb2YgaW5wdXQgdXAgdG8gdGhlIG5leHQgYnl0ZSBib3VuZGFyeSBhcmUgaWdub3JlZC4KKyAgICAgICAgIFRoZSByZXN0IG9mIHRoZSBibG9jayBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOgorCisgICAgICAgICAgICAgIDAgICAxICAgMiAgIDMgICA0Li4uCisgICAgICAgICAgICArLS0tKy0tLSstLS0rLS0tKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KworICAgICAgICAgICAgfCAgTEVOICB8IE5MRU4gIHwuLi4gTEVOIGJ5dGVzIG9mIGxpdGVyYWwgZGF0YS4uLnwKKyAgICAgICAgICAgICstLS0rLS0tKy0tLSstLS0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCisKKyAgICAgICAgIExFTiBpcyB0aGUgbnVtYmVyIG9mIGRhdGEgYnl0ZXMgaW4gdGhlIGJsb2NrLiAgTkxFTiBpcyB0aGUKKyAgICAgICAgIG9uZSdzIGNvbXBsZW1lbnQgb2YgTEVOLgorCisgICAgICAzLjIuNS4gQ29tcHJlc3NlZCBibG9ja3MgKGxlbmd0aCBhbmQgZGlzdGFuY2UgY29kZXMpCisKKyAgICAgICAgIEFzIG5vdGVkIGFib3ZlLCBlbmNvZGVkIGRhdGEgYmxvY2tzIGluIHRoZSAiZGVmbGF0ZSIgZm9ybWF0CisgICAgICAgICBjb25zaXN0IG9mIHNlcXVlbmNlcyBvZiBzeW1ib2xzIGRyYXduIGZyb20gdGhyZWUgY29uY2VwdHVhbGx5CisgICAgICAgICBkaXN0aW5jdCBhbHBoYWJldHM6IGVpdGhlciBsaXRlcmFsIGJ5dGVzLCBmcm9tIHRoZSBhbHBoYWJldCBvZgorICAgICAgICAgYnl0ZSB2YWx1ZXMgKDAuLjI1NSksIG9yIDxsZW5ndGgsIGJhY2t3YXJkIGRpc3RhbmNlPiBwYWlycywKKyAgICAgICAgIHdoZXJlIHRoZSBsZW5ndGggaXMgZHJhd24gZnJvbSAoMy4uMjU4KSBhbmQgdGhlIGRpc3RhbmNlIGlzCisgICAgICAgICBkcmF3biBmcm9tICgxLi4zMiw3NjgpLiAgSW4gZmFjdCwgdGhlIGxpdGVyYWwgYW5kIGxlbmd0aAorICAgICAgICAgYWxwaGFiZXRzIGFyZSBtZXJnZWQgaW50byBhIHNpbmdsZSBhbHBoYWJldCAoMC4uMjg1KSwgd2hlcmUKKyAgICAgICAgIHZhbHVlcyAwLi4yNTUgcmVwcmVzZW50IGxpdGVyYWwgYnl0ZXMsIHRoZSB2YWx1ZSAyNTYgaW5kaWNhdGVzCisgICAgICAgICBlbmQtb2YtYmxvY2ssIGFuZCB2YWx1ZXMgMjU3Li4yODUgcmVwcmVzZW50IGxlbmd0aCBjb2RlcworICAgICAgICAgKHBvc3NpYmx5IGluIGNvbmp1bmN0aW9uIHdpdGggZXh0cmEgYml0cyBmb2xsb3dpbmcgdGhlIHN5bWJvbAorICAgICAgICAgY29kZSkgYXMgZm9sbG93czoKKworCisKKworCisKKworCisKKworCisKKworCisKKworRGV1dHNjaCAgICAgICAgICAgICAgICAgICAgICBJbmZvcm1hdGlvbmFsICAgICAgICAgICAgICAgICAgICAgW1BhZ2UgMTFdCisMCitSRkMgMTk1MSAgICAgIERFRkxBVEUgQ29tcHJlc3NlZCBEYXRhIEZvcm1hdCBTcGVjaWZpY2F0aW9uICAgICAgTWF5IDE5OTYKKworCisgICAgICAgICAgICAgICAgIEV4dHJhICAgICAgICAgICAgICAgRXh0cmEgICAgICAgICAgICAgICBFeHRyYQorICAgICAgICAgICAgQ29kZSBCaXRzIExlbmd0aChzKSBDb2RlIEJpdHMgTGVuZ3RocyAgIENvZGUgQml0cyBMZW5ndGgocykKKyAgICAgICAgICAgIC0tLS0gLS0tLSAtLS0tLS0gICAgIC0tLS0gLS0tLSAtLS0tLS0tICAgLS0tLSAtLS0tIC0tLS0tLS0KKyAgICAgICAgICAgICAyNTcgICAwICAgICAzICAgICAgIDI2NyAgIDEgICAxNSwxNiAgICAgMjc3ICAgNCAgIDY3LTgyCisgICAgICAgICAgICAgMjU4ICAgMCAgICAgNCAgICAgICAyNjggICAxICAgMTcsMTggICAgIDI3OCAgIDQgICA4My05OAorICAgICAgICAgICAgIDI1OSAgIDAgICAgIDUgICAgICAgMjY5ICAgMiAgIDE5LTIyICAgICAyNzkgICA0ICAgOTktMTE0CisgICAgICAgICAgICAgMjYwICAgMCAgICAgNiAgICAgICAyNzAgICAyICAgMjMtMjYgICAgIDI4MCAgIDQgIDExNS0xMzAKKyAgICAgICAgICAgICAyNjEgICAwICAgICA3ICAgICAgIDI3MSAgIDIgICAyNy0zMCAgICAgMjgxICAgNSAgMTMxLTE2MgorICAgICAgICAgICAgIDI2MiAgIDAgICAgIDggICAgICAgMjcyICAgMiAgIDMxLTM0ICAgICAyODIgICA1ICAxNjMtMTk0CisgICAgICAgICAgICAgMjYzICAgMCAgICAgOSAgICAgICAyNzMgICAzICAgMzUtNDIgICAgIDI4MyAgIDUgIDE5NS0yMjYKKyAgICAgICAgICAgICAyNjQgICAwICAgIDEwICAgICAgIDI3NCAgIDMgICA0My01MCAgICAgMjg0ICAgNSAgMjI3LTI1NworICAgICAgICAgICAgIDI2NSAgIDEgIDExLDEyICAgICAgMjc1ICAgMyAgIDUxLTU4ICAgICAyODUgICAwICAgIDI1OAorICAgICAgICAgICAgIDI2NiAgIDEgIDEzLDE0ICAgICAgMjc2ICAgMyAgIDU5LTY2CisKKyAgICAgICAgIFRoZSBleHRyYSBiaXRzIHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBhIG1hY2hpbmUgaW50ZWdlcgorICAgICAgICAgc3RvcmVkIHdpdGggdGhlIG1vc3Qtc2lnbmlmaWNhbnQgYml0IGZpcnN0LCBlLmcuLCBiaXRzIDExMTAKKyAgICAgICAgIHJlcHJlc2VudCB0aGUgdmFsdWUgMTQuCisKKyAgICAgICAgICAgICAgICAgIEV4dHJhICAgICAgICAgICBFeHRyYSAgICAgICAgICAgICAgIEV4dHJhCisgICAgICAgICAgICAgQ29kZSBCaXRzIERpc3QgIENvZGUgQml0cyAgIERpc3QgICAgIENvZGUgQml0cyBEaXN0YW5jZQorICAgICAgICAgICAgIC0tLS0gLS0tLSAtLS0tICAtLS0tIC0tLS0gIC0tLS0tLSAgICAtLS0tIC0tLS0gLS0tLS0tLS0KKyAgICAgICAgICAgICAgIDAgICAwICAgIDEgICAgIDEwICAgNCAgICAgMzMtNDggICAgMjAgICAgOSAgIDEwMjUtMTUzNgorICAgICAgICAgICAgICAgMSAgIDAgICAgMiAgICAgMTEgICA0ICAgICA0OS02NCAgICAyMSAgICA5ICAgMTUzNy0yMDQ4CisgICAgICAgICAgICAgICAyICAgMCAgICAzICAgICAxMiAgIDUgICAgIDY1LTk2ICAgIDIyICAgMTAgICAyMDQ5LTMwNzIKKyAgICAgICAgICAgICAgIDMgICAwICAgIDQgICAgIDEzICAgNSAgICAgOTctMTI4ICAgMjMgICAxMCAgIDMwNzMtNDA5NgorICAgICAgICAgICAgICAgNCAgIDEgICA1LDYgICAgMTQgICA2ICAgIDEyOS0xOTIgICAyNCAgIDExICAgNDA5Ny02MTQ0CisgICAgICAgICAgICAgICA1ICAgMSAgIDcsOCAgICAxNSAgIDYgICAgMTkzLTI1NiAgIDI1ICAgMTEgICA2MTQ1LTgxOTIKKyAgICAgICAgICAgICAgIDYgICAyICAgOS0xMiAgIDE2ICAgNyAgICAyNTctMzg0ICAgMjYgICAxMiAgODE5My0xMjI4OAorICAgICAgICAgICAgICAgNyAgIDIgIDEzLTE2ICAgMTcgICA3ICAgIDM4NS01MTIgICAyNyAgIDEyIDEyMjg5LTE2Mzg0CisgICAgICAgICAgICAgICA4ICAgMyAgMTctMjQgICAxOCAgIDggICAgNTEzLTc2OCAgIDI4ICAgMTMgMTYzODUtMjQ1NzYKKyAgICAgICAgICAgICAgIDkgICAzICAyNS0zMiAgIDE5ICAgOCAgIDc2OS0xMDI0ICAgMjkgICAxMyAyNDU3Ny0zMjc2OAorCisgICAgICAzLjIuNi4gQ29tcHJlc3Npb24gd2l0aCBmaXhlZCBIdWZmbWFuIGNvZGVzIChCVFlQRT0wMSkKKworICAgICAgICAgVGhlIEh1ZmZtYW4gY29kZXMgZm9yIHRoZSB0d28gYWxwaGFiZXRzIGFyZSBmaXhlZCwgYW5kIGFyZSBub3QKKyAgICAgICAgIHJlcHJlc2VudGVkIGV4cGxpY2l0bHkgaW4gdGhlIGRhdGEuICBUaGUgSHVmZm1hbiBjb2RlIGxlbmd0aHMKKyAgICAgICAgIGZvciB0aGUgbGl0ZXJhbC9sZW5ndGggYWxwaGFiZXQgYXJlOgorCisgICAgICAgICAgICAgICAgICAgTGl0IFZhbHVlICAgIEJpdHMgICAgICAgIENvZGVzCisgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tICAgIC0tLS0gICAgICAgIC0tLS0tCisgICAgICAgICAgICAgICAgICAgICAwIC0gMTQzICAgICA4ICAgICAgICAgIDAwMTEwMDAwIHRocm91Z2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAxMTExMTEKKyAgICAgICAgICAgICAgICAgICAxNDQgLSAyNTUgICAgIDkgICAgICAgICAgMTEwMDEwMDAwIHRocm91Z2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTExMTExMTExCisgICAgICAgICAgICAgICAgICAgMjU2IC0gMjc5ICAgICA3ICAgICAgICAgIDAwMDAwMDAgdGhyb3VnaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwMDEwMTExCisgICAgICAgICAgICAgICAgICAgMjgwIC0gMjg3ICAgICA4ICAgICAgICAgIDExMDAwMDAwIHRocm91Z2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEwMDAxMTEKKworCisKK0RldXRzY2ggICAgICAgICAgICAgICAgICAgICAgSW5mb3JtYXRpb25hbCAgICAgICAgICAgICAgICAgICAgIFtQYWdlIDEyXQorDAorUkZDIDE5NTEgICAgICBERUZMQVRFIENvbXByZXNzZWQgRGF0YSBGb3JtYXQgU3BlY2lmaWNhdGlvbiAgICAgIE1heSAxOTk2CisKKworICAgICAgICAgVGhlIGNvZGUgbGVuZ3RocyBhcmUgc3VmZmljaWVudCB0byBnZW5lcmF0ZSB0aGUgYWN0dWFsIGNvZGVzLAorICAgICAgICAgYXMgZGVzY3JpYmVkIGFib3ZlOyB3ZSBzaG93IHRoZSBjb2RlcyBpbiB0aGUgdGFibGUgZm9yIGFkZGVkCisgICAgICAgICBjbGFyaXR5LiAgTGl0ZXJhbC9sZW5ndGggdmFsdWVzIDI4Ni0yODcgd2lsbCBuZXZlciBhY3R1YWxseQorICAgICAgICAgb2NjdXIgaW4gdGhlIGNvbXByZXNzZWQgZGF0YSwgYnV0IHBhcnRpY2lwYXRlIGluIHRoZSBjb2RlCisgICAgICAgICBjb25zdHJ1Y3Rpb24uCisKKyAgICAgICAgIERpc3RhbmNlIGNvZGVzIDAtMzEgYXJlIHJlcHJlc2VudGVkIGJ5IChmaXhlZC1sZW5ndGgpIDUtYml0CisgICAgICAgICBjb2Rlcywgd2l0aCBwb3NzaWJsZSBhZGRpdGlvbmFsIGJpdHMgYXMgc2hvd24gaW4gdGhlIHRhYmxlCisgICAgICAgICBzaG93biBpbiBQYXJhZ3JhcGggMy4yLjUsIGFib3ZlLiAgTm90ZSB0aGF0IGRpc3RhbmNlIGNvZGVzIDMwLQorICAgICAgICAgMzEgd2lsbCBuZXZlciBhY3R1YWxseSBvY2N1ciBpbiB0aGUgY29tcHJlc3NlZCBkYXRhLgorCisgICAgICAzLjIuNy4gQ29tcHJlc3Npb24gd2l0aCBkeW5hbWljIEh1ZmZtYW4gY29kZXMgKEJUWVBFPTEwKQorCisgICAgICAgICBUaGUgSHVmZm1hbiBjb2RlcyBmb3IgdGhlIHR3byBhbHBoYWJldHMgYXBwZWFyIGluIHRoZSBibG9jaworICAgICAgICAgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGhlYWRlciBiaXRzIGFuZCBiZWZvcmUgdGhlIGFjdHVhbAorICAgICAgICAgY29tcHJlc3NlZCBkYXRhLCBmaXJzdCB0aGUgbGl0ZXJhbC9sZW5ndGggY29kZSBhbmQgdGhlbiB0aGUKKyAgICAgICAgIGRpc3RhbmNlIGNvZGUuICBFYWNoIGNvZGUgaXMgZGVmaW5lZCBieSBhIHNlcXVlbmNlIG9mIGNvZGUKKyAgICAgICAgIGxlbmd0aHMsIGFzIGRpc2N1c3NlZCBpbiBQYXJhZ3JhcGggMy4yLjIsIGFib3ZlLiAgRm9yIGV2ZW4KKyAgICAgICAgIGdyZWF0ZXIgY29tcGFjdG5lc3MsIHRoZSBjb2RlIGxlbmd0aCBzZXF1ZW5jZXMgdGhlbXNlbHZlcyBhcmUKKyAgICAgICAgIGNvbXByZXNzZWQgdXNpbmcgYSBIdWZmbWFuIGNvZGUuICBUaGUgYWxwaGFiZXQgZm9yIGNvZGUgbGVuZ3RocworICAgICAgICAgaXMgYXMgZm9sbG93czoKKworICAgICAgICAgICAgICAgMCAtIDE1OiBSZXByZXNlbnQgY29kZSBsZW5ndGhzIG9mIDAgLSAxNQorICAgICAgICAgICAgICAgICAgIDE2OiBDb3B5IHRoZSBwcmV2aW91cyBjb2RlIGxlbmd0aCAzIC0gNiB0aW1lcy4KKyAgICAgICAgICAgICAgICAgICAgICAgVGhlIG5leHQgMiBiaXRzIGluZGljYXRlIHJlcGVhdCBsZW5ndGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgPSAzLCAuLi4gLCAzID0gNikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRXhhbXBsZTogIENvZGVzIDgsIDE2ICgrMiBiaXRzIDExKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2ICgrMiBiaXRzIDEwKSB3aWxsIGV4cGFuZCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIgY29kZSBsZW5ndGhzIG9mIDggKDEgKyA2ICsgNSkKKyAgICAgICAgICAgICAgICAgICAxNzogUmVwZWF0IGEgY29kZSBsZW5ndGggb2YgMCBmb3IgMyAtIDEwIHRpbWVzLgorICAgICAgICAgICAgICAgICAgICAgICAoMyBiaXRzIG9mIGxlbmd0aCkKKyAgICAgICAgICAgICAgICAgICAxODogUmVwZWF0IGEgY29kZSBsZW5ndGggb2YgMCBmb3IgMTEgLSAxMzggdGltZXMKKyAgICAgICAgICAgICAgICAgICAgICAgKDcgYml0cyBvZiBsZW5ndGgpCisKKyAgICAgICAgIEEgY29kZSBsZW5ndGggb2YgMCBpbmRpY2F0ZXMgdGhhdCB0aGUgY29ycmVzcG9uZGluZyBzeW1ib2wgaW4KKyAgICAgICAgIHRoZSBsaXRlcmFsL2xlbmd0aCBvciBkaXN0YW5jZSBhbHBoYWJldCB3aWxsIG5vdCBvY2N1ciBpbiB0aGUKKyAgICAgICAgIGJsb2NrLCBhbmQgc2hvdWxkIG5vdCBwYXJ0aWNpcGF0ZSBpbiB0aGUgSHVmZm1hbiBjb2RlCisgICAgICAgICBjb25zdHJ1Y3Rpb24gYWxnb3JpdGhtIGdpdmVuIGVhcmxpZXIuICBJZiBvbmx5IG9uZSBkaXN0YW5jZQorICAgICAgICAgY29kZSBpcyB1c2VkLCBpdCBpcyBlbmNvZGVkIHVzaW5nIG9uZSBiaXQsIG5vdCB6ZXJvIGJpdHM7IGluCisgICAgICAgICB0aGlzIGNhc2UgdGhlcmUgaXMgYSBzaW5nbGUgY29kZSBsZW5ndGggb2Ygb25lLCB3aXRoIG9uZSB1bnVzZWQKKyAgICAgICAgIGNvZGUuICBPbmUgZGlzdGFuY2UgY29kZSBvZiB6ZXJvIGJpdHMgbWVhbnMgdGhhdCB0aGVyZSBhcmUgbm8KKyAgICAgICAgIGRpc3RhbmNlIGNvZGVzIHVzZWQgYXQgYWxsICh0aGUgZGF0YSBpcyBhbGwgbGl0ZXJhbHMpLgorCisgICAgICAgICBXZSBjYW4gbm93IGRlZmluZSB0aGUgZm9ybWF0IG9mIHRoZSBibG9jazoKKworICAgICAgICAgICAgICAgNSBCaXRzOiBITElULCAjIG9mIExpdGVyYWwvTGVuZ3RoIGNvZGVzIC0gMjU3ICgyNTcgLSAyODYpCisgICAgICAgICAgICAgICA1IEJpdHM6IEhESVNULCAjIG9mIERpc3RhbmNlIGNvZGVzIC0gMSAgICAgICAgKDEgLSAzMikKKyAgICAgICAgICAgICAgIDQgQml0czogSENMRU4sICMgb2YgQ29kZSBMZW5ndGggY29kZXMgLSA0ICAgICAoNCAtIDE5KQorCisKKworRGV1dHNjaCAgICAgICAgICAgICAgICAgICAgICBJbmZvcm1hdGlvbmFsICAgICAgICAgICAgICAgICAgICAgW1BhZ2UgMTNdCisMCitSRkMgMTk1MSAgICAgIERFRkxBVEUgQ29tcHJlc3NlZCBEYXRhIEZvcm1hdCBTcGVjaWZpY2F0aW9uICAgICAgTWF5IDE5OTYKKworCisgICAgICAgICAgICAgICAoSENMRU4gKyA0KSB4IDMgYml0czogY29kZSBsZW5ndGhzIGZvciB0aGUgY29kZSBsZW5ndGgKKyAgICAgICAgICAgICAgICAgIGFscGhhYmV0IGdpdmVuIGp1c3QgYWJvdmUsIGluIHRoZSBvcmRlcjogMTYsIDE3LCAxOCwKKyAgICAgICAgICAgICAgICAgIDAsIDgsIDcsIDksIDYsIDEwLCA1LCAxMSwgNCwgMTIsIDMsIDEzLCAyLCAxNCwgMSwgMTUKKworICAgICAgICAgICAgICAgICAgVGhlc2UgY29kZSBsZW5ndGhzIGFyZSBpbnRlcnByZXRlZCBhcyAzLWJpdCBpbnRlZ2VycworICAgICAgICAgICAgICAgICAgKDAtNyk7IGFzIGFib3ZlLCBhIGNvZGUgbGVuZ3RoIG9mIDAgbWVhbnMgdGhlCisgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIHN5bWJvbCAobGl0ZXJhbC9sZW5ndGggb3IgZGlzdGFuY2UgY29kZQorICAgICAgICAgICAgICAgICAgbGVuZ3RoKSBpcyBub3QgdXNlZC4KKworICAgICAgICAgICAgICAgSExJVCArIDI1NyBjb2RlIGxlbmd0aHMgZm9yIHRoZSBsaXRlcmFsL2xlbmd0aCBhbHBoYWJldCwKKyAgICAgICAgICAgICAgICAgIGVuY29kZWQgdXNpbmcgdGhlIGNvZGUgbGVuZ3RoIEh1ZmZtYW4gY29kZQorCisgICAgICAgICAgICAgICBIRElTVCArIDEgY29kZSBsZW5ndGhzIGZvciB0aGUgZGlzdGFuY2UgYWxwaGFiZXQsCisgICAgICAgICAgICAgICAgICBlbmNvZGVkIHVzaW5nIHRoZSBjb2RlIGxlbmd0aCBIdWZmbWFuIGNvZGUKKworICAgICAgICAgICAgICAgVGhlIGFjdHVhbCBjb21wcmVzc2VkIGRhdGEgb2YgdGhlIGJsb2NrLAorICAgICAgICAgICAgICAgICAgZW5jb2RlZCB1c2luZyB0aGUgbGl0ZXJhbC9sZW5ndGggYW5kIGRpc3RhbmNlIEh1ZmZtYW4KKyAgICAgICAgICAgICAgICAgIGNvZGVzCisKKyAgICAgICAgICAgICAgIFRoZSBsaXRlcmFsL2xlbmd0aCBzeW1ib2wgMjU2IChlbmQgb2YgZGF0YSksCisgICAgICAgICAgICAgICAgICBlbmNvZGVkIHVzaW5nIHRoZSBsaXRlcmFsL2xlbmd0aCBIdWZmbWFuIGNvZGUKKworICAgICAgICAgVGhlIGNvZGUgbGVuZ3RoIHJlcGVhdCBjb2RlcyBjYW4gY3Jvc3MgZnJvbSBITElUICsgMjU3IHRvIHRoZQorICAgICAgICAgSERJU1QgKyAxIGNvZGUgbGVuZ3Rocy4gIEluIG90aGVyIHdvcmRzLCBhbGwgY29kZSBsZW5ndGhzIGZvcm0KKyAgICAgICAgIGEgc2luZ2xlIHNlcXVlbmNlIG9mIEhMSVQgKyBIRElTVCArIDI1OCB2YWx1ZXMuCisKKyAgIDMuMy4gQ29tcGxpYW5jZQorCisgICAgICBBIGNvbXByZXNzb3IgbWF5IGxpbWl0IGZ1cnRoZXIgdGhlIHJhbmdlcyBvZiB2YWx1ZXMgc3BlY2lmaWVkIGluCisgICAgICB0aGUgcHJldmlvdXMgc2VjdGlvbiBhbmQgc3RpbGwgYmUgY29tcGxpYW50OyBmb3IgZXhhbXBsZSwgaXQgbWF5CisgICAgICBsaW1pdCB0aGUgcmFuZ2Ugb2YgYmFja3dhcmQgcG9pbnRlcnMgdG8gc29tZSB2YWx1ZSBzbWFsbGVyIHRoYW4KKyAgICAgIDMySy4gIFNpbWlsYXJseSwgYSBjb21wcmVzc29yIG1heSBsaW1pdCB0aGUgc2l6ZSBvZiBibG9ja3Mgc28gdGhhdAorICAgICAgYSBjb21wcmVzc2libGUgYmxvY2sgZml0cyBpbiBtZW1vcnkuCisKKyAgICAgIEEgY29tcGxpYW50IGRlY29tcHJlc3NvciBtdXN0IGFjY2VwdCB0aGUgZnVsbCByYW5nZSBvZiBwb3NzaWJsZQorICAgICAgdmFsdWVzIGRlZmluZWQgaW4gdGhlIHByZXZpb3VzIHNlY3Rpb24sIGFuZCBtdXN0IGFjY2VwdCBibG9ja3Mgb2YKKyAgICAgIGFyYml0cmFyeSBzaXplLgorCis0LiBDb21wcmVzc2lvbiBhbGdvcml0aG0gZGV0YWlscworCisgICBXaGlsZSBpdCBpcyB0aGUgaW50ZW50IG9mIHRoaXMgZG9jdW1lbnQgdG8gZGVmaW5lIHRoZSAiZGVmbGF0ZSIKKyAgIGNvbXByZXNzZWQgZGF0YSBmb3JtYXQgd2l0aG91dCByZWZlcmVuY2UgdG8gYW55IHBhcnRpY3VsYXIKKyAgIGNvbXByZXNzaW9uIGFsZ29yaXRobSwgdGhlIGZvcm1hdCBpcyByZWxhdGVkIHRvIHRoZSBjb21wcmVzc2VkCisgICBmb3JtYXRzIHByb2R1Y2VkIGJ5IExaNzcgKExlbXBlbC1aaXYgMTk3Nywgc2VlIHJlZmVyZW5jZSBbMl0gYmVsb3cpOworICAgc2luY2UgbWFueSB2YXJpYXRpb25zIG9mIExaNzcgYXJlIHBhdGVudGVkLCBpdCBpcyBzdHJvbmdseQorICAgcmVjb21tZW5kZWQgdGhhdCB0aGUgaW1wbGVtZW50b3Igb2YgYSBjb21wcmVzc29yIGZvbGxvdyB0aGUgZ2VuZXJhbAorICAgYWxnb3JpdGhtIHByZXNlbnRlZCBoZXJlLCB3aGljaCBpcyBrbm93biBub3QgdG8gYmUgcGF0ZW50ZWQgcGVyIHNlLgorICAgVGhlIG1hdGVyaWFsIGluIHRoaXMgc2VjdGlvbiBpcyBub3QgcGFydCBvZiB0aGUgZGVmaW5pdGlvbiBvZiB0aGUKKworCisKK0RldXRzY2ggICAgICAgICAgICAgICAgICAgICAgSW5mb3JtYXRpb25hbCAgICAgICAgICAgICAgICAgICAgIFtQYWdlIDE0XQorDAorUkZDIDE5NTEgICAgICBERUZMQVRFIENvbXByZXNzZWQgRGF0YSBGb3JtYXQgU3BlY2lmaWNhdGlvbiAgICAgIE1heSAxOTk2CisKKworICAgc3BlY2lmaWNhdGlvbiBwZXIgc2UsIGFuZCBhIGNvbXByZXNzb3IgbmVlZCBub3QgZm9sbG93IGl0IGluIG9yZGVyIHRvCisgICBiZSBjb21wbGlhbnQuCisKKyAgIFRoZSBjb21wcmVzc29yIHRlcm1pbmF0ZXMgYSBibG9jayB3aGVuIGl0IGRldGVybWluZXMgdGhhdCBzdGFydGluZyBhCisgICBuZXcgYmxvY2sgd2l0aCBmcmVzaCB0cmVlcyB3b3VsZCBiZSB1c2VmdWwsIG9yIHdoZW4gdGhlIGJsb2NrIHNpemUKKyAgIGZpbGxzIHVwIHRoZSBjb21wcmVzc29yJ3MgYmxvY2sgYnVmZmVyLgorCisgICBUaGUgY29tcHJlc3NvciB1c2VzIGEgY2hhaW5lZCBoYXNoIHRhYmxlIHRvIGZpbmQgZHVwbGljYXRlZCBzdHJpbmdzLAorICAgdXNpbmcgYSBoYXNoIGZ1bmN0aW9uIHRoYXQgb3BlcmF0ZXMgb24gMy1ieXRlIHNlcXVlbmNlcy4gIEF0IGFueQorICAgZ2l2ZW4gcG9pbnQgZHVyaW5nIGNvbXByZXNzaW9uLCBsZXQgWFlaIGJlIHRoZSBuZXh0IDMgaW5wdXQgYnl0ZXMgdG8KKyAgIGJlIGV4YW1pbmVkIChub3QgbmVjZXNzYXJpbHkgYWxsIGRpZmZlcmVudCwgb2YgY291cnNlKS4gIEZpcnN0LCB0aGUKKyAgIGNvbXByZXNzb3IgZXhhbWluZXMgdGhlIGhhc2ggY2hhaW4gZm9yIFhZWi4gIElmIHRoZSBjaGFpbiBpcyBlbXB0eSwKKyAgIHRoZSBjb21wcmVzc29yIHNpbXBseSB3cml0ZXMgb3V0IFggYXMgYSBsaXRlcmFsIGJ5dGUgYW5kIGFkdmFuY2VzIG9uZQorICAgYnl0ZSBpbiB0aGUgaW5wdXQuICBJZiB0aGUgaGFzaCBjaGFpbiBpcyBub3QgZW1wdHksIGluZGljYXRpbmcgdGhhdAorICAgdGhlIHNlcXVlbmNlIFhZWiAob3IsIGlmIHdlIGFyZSB1bmx1Y2t5LCBzb21lIG90aGVyIDMgYnl0ZXMgd2l0aCB0aGUKKyAgIHNhbWUgaGFzaCBmdW5jdGlvbiB2YWx1ZSkgaGFzIG9jY3VycmVkIHJlY2VudGx5LCB0aGUgY29tcHJlc3NvcgorICAgY29tcGFyZXMgYWxsIHN0cmluZ3Mgb24gdGhlIFhZWiBoYXNoIGNoYWluIHdpdGggdGhlIGFjdHVhbCBpbnB1dCBkYXRhCisgICBzZXF1ZW5jZSBzdGFydGluZyBhdCB0aGUgY3VycmVudCBwb2ludCwgYW5kIHNlbGVjdHMgdGhlIGxvbmdlc3QKKyAgIG1hdGNoLgorCisgICBUaGUgY29tcHJlc3NvciBzZWFyY2hlcyB0aGUgaGFzaCBjaGFpbnMgc3RhcnRpbmcgd2l0aCB0aGUgbW9zdCByZWNlbnQKKyAgIHN0cmluZ3MsIHRvIGZhdm9yIHNtYWxsIGRpc3RhbmNlcyBhbmQgdGh1cyB0YWtlIGFkdmFudGFnZSBvZiB0aGUKKyAgIEh1ZmZtYW4gZW5jb2RpbmcuICBUaGUgaGFzaCBjaGFpbnMgYXJlIHNpbmdseSBsaW5rZWQuIFRoZXJlIGFyZSBubworICAgZGVsZXRpb25zIGZyb20gdGhlIGhhc2ggY2hhaW5zOyB0aGUgYWxnb3JpdGhtIHNpbXBseSBkaXNjYXJkcyBtYXRjaGVzCisgICB0aGF0IGFyZSB0b28gb2xkLiAgVG8gYXZvaWQgYSB3b3JzdC1jYXNlIHNpdHVhdGlvbiwgdmVyeSBsb25nIGhhc2gKKyAgIGNoYWlucyBhcmUgYXJiaXRyYXJpbHkgdHJ1bmNhdGVkIGF0IGEgY2VydGFpbiBsZW5ndGgsIGRldGVybWluZWQgYnkgYQorICAgcnVuLXRpbWUgcGFyYW1ldGVyLgorCisgICBUbyBpbXByb3ZlIG92ZXJhbGwgY29tcHJlc3Npb24sIHRoZSBjb21wcmVzc29yIG9wdGlvbmFsbHkgZGVmZXJzIHRoZQorICAgc2VsZWN0aW9uIG9mIG1hdGNoZXMgKCJsYXp5IG1hdGNoaW5nIik6IGFmdGVyIGEgbWF0Y2ggb2YgbGVuZ3RoIE4gaGFzCisgICBiZWVuIGZvdW5kLCB0aGUgY29tcHJlc3NvciBzZWFyY2hlcyBmb3IgYSBsb25nZXIgbWF0Y2ggc3RhcnRpbmcgYXQKKyAgIHRoZSBuZXh0IGlucHV0IGJ5dGUuICBJZiBpdCBmaW5kcyBhIGxvbmdlciBtYXRjaCwgaXQgdHJ1bmNhdGVzIHRoZQorICAgcHJldmlvdXMgbWF0Y2ggdG8gYSBsZW5ndGggb2Ygb25lICh0aHVzIHByb2R1Y2luZyBhIHNpbmdsZSBsaXRlcmFsCisgICBieXRlKSBhbmQgdGhlbiBlbWl0cyB0aGUgbG9uZ2VyIG1hdGNoLiAgT3RoZXJ3aXNlLCBpdCBlbWl0cyB0aGUKKyAgIG9yaWdpbmFsIG1hdGNoLCBhbmQsIGFzIGRlc2NyaWJlZCBhYm92ZSwgYWR2YW5jZXMgTiBieXRlcyBiZWZvcmUKKyAgIGNvbnRpbnVpbmcuCisKKyAgIFJ1bi10aW1lIHBhcmFtZXRlcnMgYWxzbyBjb250cm9sIHRoaXMgImxhenkgbWF0Y2giIHByb2NlZHVyZS4gIElmCisgICBjb21wcmVzc2lvbiByYXRpbyBpcyBtb3N0IGltcG9ydGFudCwgdGhlIGNvbXByZXNzb3IgYXR0ZW1wdHMgYQorICAgY29tcGxldGUgc2Vjb25kIHNlYXJjaCByZWdhcmRsZXNzIG9mIHRoZSBsZW5ndGggb2YgdGhlIGZpcnN0IG1hdGNoLgorICAgSW4gdGhlIG5vcm1hbCBjYXNlLCBpZiB0aGUgY3VycmVudCBtYXRjaCBpcyAibG9uZyBlbm91Z2giLCB0aGUKKyAgIGNvbXByZXNzb3IgcmVkdWNlcyB0aGUgc2VhcmNoIGZvciBhIGxvbmdlciBtYXRjaCwgdGh1cyBzcGVlZGluZyB1cAorICAgdGhlIHByb2Nlc3MuICBJZiBzcGVlZCBpcyBtb3N0IGltcG9ydGFudCwgdGhlIGNvbXByZXNzb3IgaW5zZXJ0cyBuZXcKKyAgIHN0cmluZ3MgaW4gdGhlIGhhc2ggdGFibGUgb25seSB3aGVuIG5vIG1hdGNoIHdhcyBmb3VuZCwgb3Igd2hlbiB0aGUKKyAgIG1hdGNoIGlzIG5vdCAidG9vIGxvbmciLiAgVGhpcyBkZWdyYWRlcyB0aGUgY29tcHJlc3Npb24gcmF0aW8gYnV0CisgICBzYXZlcyB0aW1lIHNpbmNlIHRoZXJlIGFyZSBib3RoIGZld2VyIGluc2VydGlvbnMgYW5kIGZld2VyIHNlYXJjaGVzLgorCisKKworCisKK0RldXRzY2ggICAgICAgICAgICAgICAgICAgICAgSW5mb3JtYXRpb25hbCAgICAgICAgICAgICAgICAgICAgIFtQYWdlIDE1XQorDAorUkZDIDE5NTEgICAgICBERUZMQVRFIENvbXByZXNzZWQgRGF0YSBGb3JtYXQgU3BlY2lmaWNhdGlvbiAgICAgIE1heSAxOTk2CisKKworNS4gUmVmZXJlbmNlcworCisgICBbMV0gSHVmZm1hbiwgRC4gQS4sICJBIE1ldGhvZCBmb3IgdGhlIENvbnN0cnVjdGlvbiBvZiBNaW5pbXVtCisgICAgICAgUmVkdW5kYW5jeSBDb2RlcyIsIFByb2NlZWRpbmdzIG9mIHRoZSBJbnN0aXR1dGUgb2YgUmFkaW8KKyAgICAgICBFbmdpbmVlcnMsIFNlcHRlbWJlciAxOTUyLCBWb2x1bWUgNDAsIE51bWJlciA5LCBwcC4gMTA5OC0xMTAxLgorCisgICBbMl0gWml2IEouLCBMZW1wZWwgQS4sICJBIFVuaXZlcnNhbCBBbGdvcml0aG0gZm9yIFNlcXVlbnRpYWwgRGF0YQorICAgICAgIENvbXByZXNzaW9uIiwgSUVFRSBUcmFuc2FjdGlvbnMgb24gSW5mb3JtYXRpb24gVGhlb3J5LCBWb2wuIDIzLAorICAgICAgIE5vLiAzLCBwcC4gMzM3LTM0My4KKworICAgWzNdIEdhaWxseSwgSi4tTC4sIGFuZCBBZGxlciwgTS4sIFpMSUIgZG9jdW1lbnRhdGlvbiBhbmQgc291cmNlcywKKyAgICAgICBhdmFpbGFibGUgaW4gZnRwOi8vZnRwLnV1Lm5ldC9wdWIvYXJjaGl2aW5nL3ppcC9kb2MvCisKKyAgIFs0XSBHYWlsbHksIEouLUwuLCBhbmQgQWRsZXIsIE0uLCBHWklQIGRvY3VtZW50YXRpb24gYW5kIHNvdXJjZXMsCisgICAgICAgYXZhaWxhYmxlIGFzIGd6aXAtKi50YXIgaW4gZnRwOi8vcHJlcC5haS5taXQuZWR1L3B1Yi9nbnUvCisKKyAgIFs1XSBTY2h3YXJ0eiwgRS4gUy4sIGFuZCBLYWxsaWNrLCBCLiAiR2VuZXJhdGluZyBhIGNhbm9uaWNhbCBwcmVmaXgKKyAgICAgICBlbmNvZGluZy4iIENvbW0uIEFDTSwgNywzIChNYXIuIDE5NjQpLCBwcC4gMTY2LTE2OS4KKworICAgWzZdIEhpcnNjaGJlcmcgYW5kIExlbGV3ZXIsICJFZmZpY2llbnQgZGVjb2Rpbmcgb2YgcHJlZml4IGNvZGVzLCIKKyAgICAgICBDb21tLiBBQ00sIDMzLDQsIEFwcmlsIDE5OTAsIHBwLiA0NDktNDU5LgorCis2LiBTZWN1cml0eSBDb25zaWRlcmF0aW9ucworCisgICBBbnkgZGF0YSBjb21wcmVzc2lvbiBtZXRob2QgaW52b2x2ZXMgdGhlIHJlZHVjdGlvbiBvZiByZWR1bmRhbmN5IGluCisgICB0aGUgZGF0YS4gIENvbnNlcXVlbnRseSwgYW55IGNvcnJ1cHRpb24gb2YgdGhlIGRhdGEgaXMgbGlrZWx5IHRvIGhhdmUKKyAgIHNldmVyZSBlZmZlY3RzIGFuZCBiZSBkaWZmaWN1bHQgdG8gY29ycmVjdC4gIFVuY29tcHJlc3NlZCB0ZXh0LCBvbgorICAgdGhlIG90aGVyIGhhbmQsIHdpbGwgcHJvYmFibHkgc3RpbGwgYmUgcmVhZGFibGUgZGVzcGl0ZSB0aGUgcHJlc2VuY2UKKyAgIG9mIHNvbWUgY29ycnVwdGVkIGJ5dGVzLgorCisgICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHN5c3RlbXMgdXNpbmcgdGhpcyBkYXRhIGZvcm1hdCBwcm92aWRlIHNvbWUKKyAgIG1lYW5zIG9mIHZhbGlkYXRpbmcgdGhlIGludGVncml0eSBvZiB0aGUgY29tcHJlc3NlZCBkYXRhLiAgU2VlCisgICByZWZlcmVuY2UgWzNdLCBmb3IgZXhhbXBsZS4KKworNy4gU291cmNlIGNvZGUKKworICAgU291cmNlIGNvZGUgZm9yIGEgQyBsYW5ndWFnZSBpbXBsZW1lbnRhdGlvbiBvZiBhICJkZWZsYXRlIiBjb21wbGlhbnQKKyAgIGNvbXByZXNzb3IgYW5kIGRlY29tcHJlc3NvciBpcyBhdmFpbGFibGUgd2l0aGluIHRoZSB6bGliIHBhY2thZ2UgYXQKKyAgIGZ0cDovL2Z0cC51dS5uZXQvcHViL2FyY2hpdmluZy96aXAvemxpYi8uCisKKzguIEFja25vd2xlZGdlbWVudHMKKworICAgVHJhZGVtYXJrcyBjaXRlZCBpbiB0aGlzIGRvY3VtZW50IGFyZSB0aGUgcHJvcGVydHkgb2YgdGhlaXIKKyAgIHJlc3BlY3RpdmUgb3duZXJzLgorCisgICBQaGlsIEthdHogZGVzaWduZWQgdGhlIGRlZmxhdGUgZm9ybWF0LiAgSmVhbi1Mb3VwIEdhaWxseSBhbmQgTWFyaworICAgQWRsZXIgd3JvdGUgdGhlIHJlbGF0ZWQgc29mdHdhcmUgZGVzY3JpYmVkIGluIHRoaXMgc3BlY2lmaWNhdGlvbi4KKyAgIEdsZW5uIFJhbmRlcnMtUGVocnNvbiBjb252ZXJ0ZWQgdGhpcyBkb2N1bWVudCB0byBSRkMgYW5kIEhUTUwgZm9ybWF0LgorCisKKworRGV1dHNjaCAgICAgICAgICAgICAgICAgICAgICBJbmZvcm1hdGlvbmFsICAgICAgICAgICAgICAgICAgICAgW1BhZ2UgMTZdCisMCitSRkMgMTk1MSAgICAgIERFRkxBVEUgQ29tcHJlc3NlZCBEYXRhIEZvcm1hdCBTcGVjaWZpY2F0aW9uICAgICAgTWF5IDE5OTYKKworCis5LiBBdXRob3IncyBBZGRyZXNzCisKKyAgIEwuIFBldGVyIERldXRzY2gKKyAgIEFsYWRkaW4gRW50ZXJwcmlzZXMKKyAgIDIwMyBTYW50YSBNYXJnYXJpdGEgQXZlLgorICAgTWVubG8gUGFyaywgQ0EgOTQwMjUKKworICAgUGhvbmU6ICg0MTUpIDMyMi0wMTAzIChBTSBvbmx5KQorICAgRkFYOiAgICg0MTUpIDMyMi0xNzM0CisgICBFTWFpbDogPGdob3N0QGFsYWRkaW4uY29tPgorCisgICBRdWVzdGlvbnMgYWJvdXQgdGhlIHRlY2huaWNhbCBjb250ZW50IG9mIHRoaXMgc3BlY2lmaWNhdGlvbiBjYW4gYmUKKyAgIHNlbnQgYnkgZW1haWwgdG86CisKKyAgIEplYW4tTG91cCBHYWlsbHkgPGd6aXBAcHJlcC5haS5taXQuZWR1PiBhbmQKKyAgIE1hcmsgQWRsZXIgPG1hZGxlckBhbHVtbmkuY2FsdGVjaC5lZHU+CisKKyAgIEVkaXRvcmlhbCBjb21tZW50cyBvbiB0aGlzIHNwZWNpZmljYXRpb24gY2FuIGJlIHNlbnQgYnkgZW1haWwgdG86CisKKyAgIEwuIFBldGVyIERldXRzY2ggPGdob3N0QGFsYWRkaW4uY29tPiBhbmQKKyAgIEdsZW5uIFJhbmRlcnMtUGVocnNvbiA8cmFuZGVnQGFsdW1uaS5ycGkuZWR1PgorCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworRGV1dHNjaCAgICAgICAgICAgICAgICAgICAgICBJbmZvcm1hdGlvbmFsICAgICAgICAgICAgICAgICAgICAgW1BhZ2UgMTddCisMCmRpZmYgLS1naXQgYS9zcmMvZG9jL3JmYzE5NTIudHh0IGIvc3JjL2RvYy9yZmMxOTUyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGU1MWI0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2RvYy9yZmMxOTUyLnR4dApAQCAtMCwwICsxLDY3NSBAQAorCisKKworCisKKworTmV0d29yayBXb3JraW5nIEdyb3VwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQLiBEZXV0c2NoCitSZXF1ZXN0IGZvciBDb21tZW50czogMTk1MiAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsYWRkaW4gRW50ZXJwcmlzZXMKK0NhdGVnb3J5OiBJbmZvcm1hdGlvbmFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXkgMTk5NgorCisKKyAgICAgICAgICAgICAgIEdaSVAgZmlsZSBmb3JtYXQgc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIDQuMworCitTdGF0dXMgb2YgVGhpcyBNZW1vCisKKyAgIFRoaXMgbWVtbyBwcm92aWRlcyBpbmZvcm1hdGlvbiBmb3IgdGhlIEludGVybmV0IGNvbW11bml0eS4gIFRoaXMgbWVtbworICAgZG9lcyBub3Qgc3BlY2lmeSBhbiBJbnRlcm5ldCBzdGFuZGFyZCBvZiBhbnkga2luZC4gIERpc3RyaWJ1dGlvbiBvZgorICAgdGhpcyBtZW1vIGlzIHVubGltaXRlZC4KKworSUVTRyBOb3RlOgorCisgICBUaGUgSUVTRyB0YWtlcyBubyBwb3NpdGlvbiBvbiB0aGUgdmFsaWRpdHkgb2YgYW55IEludGVsbGVjdHVhbAorICAgUHJvcGVydHkgUmlnaHRzIHN0YXRlbWVudHMgY29udGFpbmVkIGluIHRoaXMgZG9jdW1lbnQuCisKK05vdGljZXMKKworICAgQ29weXJpZ2h0IChjKSAxOTk2IEwuIFBldGVyIERldXRzY2gKKworICAgUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhpcyBkb2N1bWVudCBmb3IgYW55CisgICBwdXJwb3NlIGFuZCB3aXRob3V0IGNoYXJnZSwgaW5jbHVkaW5nIHRyYW5zbGF0aW9ucyBpbnRvIG90aGVyCisgICBsYW5ndWFnZXMgYW5kIGluY29ycG9yYXRpb24gaW50byBjb21waWxhdGlvbnMsIHByb3ZpZGVkIHRoYXQgdGhlCisgICBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIG5vdGljZSBhcmUgcHJlc2VydmVkLCBhbmQgdGhhdCBhbnkKKyAgIHN1YnN0YW50aXZlIGNoYW5nZXMgb3IgZGVsZXRpb25zIGZyb20gdGhlIG9yaWdpbmFsIGFyZSBjbGVhcmx5CisgICBtYXJrZWQuCisKKyAgIEEgcG9pbnRlciB0byB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBhbmQgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGluCisgICBIVE1MIGZvcm1hdCBjYW4gYmUgZm91bmQgYXQgdGhlIFVSTAorICAgPGZ0cDovL2Z0cC51dS5uZXQvZ3JhcGhpY3MvcG5nL2RvY3VtZW50cy96bGliL3pkb2MtaW5kZXguaHRtbD4uCisKK0Fic3RyYWN0CisKKyAgIFRoaXMgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIGEgbG9zc2xlc3MgY29tcHJlc3NlZCBkYXRhIGZvcm1hdCB0aGF0IGlzCisgICBjb21wYXRpYmxlIHdpdGggdGhlIHdpZGVseSB1c2VkIEdaSVAgdXRpbGl0eS4gIFRoZSBmb3JtYXQgaW5jbHVkZXMgYQorICAgY3ljbGljIHJlZHVuZGFuY3kgY2hlY2sgdmFsdWUgZm9yIGRldGVjdGluZyBkYXRhIGNvcnJ1cHRpb24uICBUaGUKKyAgIGZvcm1hdCBwcmVzZW50bHkgdXNlcyB0aGUgREVGTEFURSBtZXRob2Qgb2YgY29tcHJlc3Npb24gYnV0IGNhbiBiZQorICAgZWFzaWx5IGV4dGVuZGVkIHRvIHVzZSBvdGhlciBjb21wcmVzc2lvbiBtZXRob2RzLiAgVGhlIGZvcm1hdCBjYW4gYmUKKyAgIGltcGxlbWVudGVkIHJlYWRpbHkgaW4gYSBtYW5uZXIgbm90IGNvdmVyZWQgYnkgcGF0ZW50cy4KKworCisKKworCisKKworCisKKworRGV1dHNjaCAgICAgICAgICAgICAgICAgICAgICBJbmZvcm1hdGlvbmFsICAgICAgICAgICAgICAgICAgICAgIFtQYWdlIDFdCisMCitSRkMgMTk1MiAgICAgICAgICAgICBHWklQIEZpbGUgRm9ybWF0IFNwZWNpZmljYXRpb24gICAgICAgICAgICAgTWF5IDE5OTYKKworCitUYWJsZSBvZiBDb250ZW50cworCisgICAxLiBJbnRyb2R1Y3Rpb24gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDIKKyAgICAgIDEuMS4gUHVycG9zZSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gMgorICAgICAgMS4yLiBJbnRlbmRlZCBhdWRpZW5jZSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAzCisgICAgICAxLjMuIFNjb3BlIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDMKKyAgICAgIDEuNC4gQ29tcGxpYW5jZSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gMworICAgICAgMS41LiBEZWZpbml0aW9ucyBvZiB0ZXJtcyBhbmQgY29udmVudGlvbnMgdXNlZCAuLi4uLi4uLi4uLi4uLi4uLiAzCisgICAgICAxLjYuIENoYW5nZXMgZnJvbSBwcmV2aW91cyB2ZXJzaW9ucyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDMKKyAgIDIuIERldGFpbGVkIHNwZWNpZmljYXRpb24gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gNAorICAgICAgMi4xLiBPdmVyYWxsIGNvbnZlbnRpb25zIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiA0CisgICAgICAyLjIuIEZpbGUgZm9ybWF0IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDUKKyAgICAgIDIuMy4gTWVtYmVyIGZvcm1hdCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gNQorICAgICAgICAgIDIuMy4xLiBNZW1iZXIgaGVhZGVyIGFuZCB0cmFpbGVyIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiA2CisgICAgICAgICAgICAgIDIuMy4xLjEuIEV4dHJhIGZpZWxkIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDgKKyAgICAgICAgICAgICAgMi4zLjEuMi4gQ29tcGxpYW5jZSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gOQorICAgICAgMy4gUmVmZXJlbmNlcyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiA5CisgICAgICA0LiBTZWN1cml0eSBDb25zaWRlcmF0aW9ucyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gMTAKKyAgICAgIDUuIEFja25vd2xlZGdlbWVudHMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAxMAorICAgICAgNi4gQXV0aG9yJ3MgQWRkcmVzcyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDEwCisgICAgICA3LiBBcHBlbmRpeDogSmVhbi1Mb3VwIEdhaWxseSdzIGd6aXAgdXRpbGl0eSAuLi4uLi4uLi4uLi4uLi4uLi4gMTEKKyAgICAgIDguIEFwcGVuZGl4OiBTYW1wbGUgQ1JDIENvZGUgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAxMQorCisxLiBJbnRyb2R1Y3Rpb24KKworICAgMS4xLiBQdXJwb3NlCisKKyAgICAgIFRoZSBwdXJwb3NlIG9mIHRoaXMgc3BlY2lmaWNhdGlvbiBpcyB0byBkZWZpbmUgYSBsb3NzbGVzcworICAgICAgY29tcHJlc3NlZCBkYXRhIGZvcm1hdCB0aGF0OgorCisgICAgICAgICAgKiBJcyBpbmRlcGVuZGVudCBvZiBDUFUgdHlwZSwgb3BlcmF0aW5nIHN5c3RlbSwgZmlsZSBzeXN0ZW0sCisgICAgICAgICAgICBhbmQgY2hhcmFjdGVyIHNldCwgYW5kIGhlbmNlIGNhbiBiZSB1c2VkIGZvciBpbnRlcmNoYW5nZTsKKyAgICAgICAgICAqIENhbiBjb21wcmVzcyBvciBkZWNvbXByZXNzIGEgZGF0YSBzdHJlYW0gKGFzIG9wcG9zZWQgdG8gYQorICAgICAgICAgICAgcmFuZG9tbHkgYWNjZXNzaWJsZSBmaWxlKSB0byBwcm9kdWNlIGFub3RoZXIgZGF0YSBzdHJlYW0sCisgICAgICAgICAgICB1c2luZyBvbmx5IGFuIGEgcHJpb3JpIGJvdW5kZWQgYW1vdW50IG9mIGludGVybWVkaWF0ZQorICAgICAgICAgICAgc3RvcmFnZSwgYW5kIGhlbmNlIGNhbiBiZSB1c2VkIGluIGRhdGEgY29tbXVuaWNhdGlvbnMgb3IKKyAgICAgICAgICAgIHNpbWlsYXIgc3RydWN0dXJlcyBzdWNoIGFzIFVuaXggZmlsdGVyczsKKyAgICAgICAgICAqIENvbXByZXNzZXMgZGF0YSB3aXRoIGVmZmljaWVuY3kgY29tcGFyYWJsZSB0byB0aGUgYmVzdAorICAgICAgICAgICAgY3VycmVudGx5IGF2YWlsYWJsZSBnZW5lcmFsLXB1cnBvc2UgY29tcHJlc3Npb24gbWV0aG9kcywKKyAgICAgICAgICAgIGFuZCBpbiBwYXJ0aWN1bGFyIGNvbnNpZGVyYWJseSBiZXR0ZXIgdGhhbiB0aGUgImNvbXByZXNzIgorICAgICAgICAgICAgcHJvZ3JhbTsKKyAgICAgICAgICAqIENhbiBiZSBpbXBsZW1lbnRlZCByZWFkaWx5IGluIGEgbWFubmVyIG5vdCBjb3ZlcmVkIGJ5CisgICAgICAgICAgICBwYXRlbnRzLCBhbmQgaGVuY2UgY2FuIGJlIHByYWN0aWNlZCBmcmVlbHk7CisgICAgICAgICAgKiBJcyBjb21wYXRpYmxlIHdpdGggdGhlIGZpbGUgZm9ybWF0IHByb2R1Y2VkIGJ5IHRoZSBjdXJyZW50CisgICAgICAgICAgICB3aWRlbHkgdXNlZCBnemlwIHV0aWxpdHksIGluIHRoYXQgY29uZm9ybWluZyBkZWNvbXByZXNzb3JzCisgICAgICAgICAgICB3aWxsIGJlIGFibGUgdG8gcmVhZCBkYXRhIHByb2R1Y2VkIGJ5IHRoZSBleGlzdGluZyBnemlwCisgICAgICAgICAgICBjb21wcmVzc29yLgorCisKKworCitEZXV0c2NoICAgICAgICAgICAgICAgICAgICAgIEluZm9ybWF0aW9uYWwgICAgICAgICAgICAgICAgICAgICAgW1BhZ2UgMl0KKwwKK1JGQyAxOTUyICAgICAgICAgICAgIEdaSVAgRmlsZSBGb3JtYXQgU3BlY2lmaWNhdGlvbiAgICAgICAgICAgICBNYXkgMTk5NgorCisKKyAgICAgIFRoZSBkYXRhIGZvcm1hdCBkZWZpbmVkIGJ5IHRoaXMgc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCBhdHRlbXB0IHRvOgorCisgICAgICAgICAgKiBQcm92aWRlIHJhbmRvbSBhY2Nlc3MgdG8gY29tcHJlc3NlZCBkYXRhOworICAgICAgICAgICogQ29tcHJlc3Mgc3BlY2lhbGl6ZWQgZGF0YSAoZS5nLiwgcmFzdGVyIGdyYXBoaWNzKSBhcyB3ZWxsIGFzCisgICAgICAgICAgICB0aGUgYmVzdCBjdXJyZW50bHkgYXZhaWxhYmxlIHNwZWNpYWxpemVkIGFsZ29yaXRobXMuCisKKyAgIDEuMi4gSW50ZW5kZWQgYXVkaWVuY2UKKworICAgICAgVGhpcyBzcGVjaWZpY2F0aW9uIGlzIGludGVuZGVkIGZvciB1c2UgYnkgaW1wbGVtZW50b3JzIG9mIHNvZnR3YXJlCisgICAgICB0byBjb21wcmVzcyBkYXRhIGludG8gZ3ppcCBmb3JtYXQgYW5kL29yIGRlY29tcHJlc3MgZGF0YSBmcm9tIGd6aXAKKyAgICAgIGZvcm1hdC4KKworICAgICAgVGhlIHRleHQgb2YgdGhlIHNwZWNpZmljYXRpb24gYXNzdW1lcyBhIGJhc2ljIGJhY2tncm91bmQgaW4KKyAgICAgIHByb2dyYW1taW5nIGF0IHRoZSBsZXZlbCBvZiBiaXRzIGFuZCBvdGhlciBwcmltaXRpdmUgZGF0YQorICAgICAgcmVwcmVzZW50YXRpb25zLgorCisgICAxLjMuIFNjb3BlCisKKyAgICAgIFRoZSBzcGVjaWZpY2F0aW9uIHNwZWNpZmllcyBhIGNvbXByZXNzaW9uIG1ldGhvZCBhbmQgYSBmaWxlIGZvcm1hdAorICAgICAgKHRoZSBsYXR0ZXIgYXNzdW1pbmcgb25seSB0aGF0IGEgZmlsZSBjYW4gc3RvcmUgYSBzZXF1ZW5jZSBvZgorICAgICAgYXJiaXRyYXJ5IGJ5dGVzKS4gIEl0IGRvZXMgbm90IHNwZWNpZnkgYW55IHBhcnRpY3VsYXIgaW50ZXJmYWNlIHRvCisgICAgICBhIGZpbGUgc3lzdGVtIG9yIGFueXRoaW5nIGFib3V0IGNoYXJhY3RlciBzZXRzIG9yIGVuY29kaW5ncworICAgICAgKGV4Y2VwdCBmb3IgZmlsZSBuYW1lcyBhbmQgY29tbWVudHMsIHdoaWNoIGFyZSBvcHRpb25hbCkuCisKKyAgIDEuNC4gQ29tcGxpYW5jZQorCisgICAgICBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgYSBjb21wbGlhbnQgZGVjb21wcmVzc29yIG11c3QgYmUKKyAgICAgIGFibGUgdG8gYWNjZXB0IGFuZCBkZWNvbXByZXNzIGFueSBmaWxlIHRoYXQgY29uZm9ybXMgdG8gYWxsIHRoZQorICAgICAgc3BlY2lmaWNhdGlvbnMgcHJlc2VudGVkIGhlcmU7IGEgY29tcGxpYW50IGNvbXByZXNzb3IgbXVzdCBwcm9kdWNlCisgICAgICBmaWxlcyB0aGF0IGNvbmZvcm0gdG8gYWxsIHRoZSBzcGVjaWZpY2F0aW9ucyBwcmVzZW50ZWQgaGVyZS4gIFRoZQorICAgICAgbWF0ZXJpYWwgaW4gdGhlIGFwcGVuZGljZXMgaXMgbm90IHBhcnQgb2YgdGhlIHNwZWNpZmljYXRpb24gcGVyIHNlCisgICAgICBhbmQgaXMgbm90IHJlbGV2YW50IHRvIGNvbXBsaWFuY2UuCisKKyAgIDEuNS4gRGVmaW5pdGlvbnMgb2YgdGVybXMgYW5kIGNvbnZlbnRpb25zIHVzZWQKKworICAgICAgYnl0ZTogOCBiaXRzIHN0b3JlZCBvciB0cmFuc21pdHRlZCBhcyBhIHVuaXQgKHNhbWUgYXMgYW4gb2N0ZXQpLgorICAgICAgKEZvciB0aGlzIHNwZWNpZmljYXRpb24sIGEgYnl0ZSBpcyBleGFjdGx5IDggYml0cywgZXZlbiBvbgorICAgICAgbWFjaGluZXMgd2hpY2ggc3RvcmUgYSBjaGFyYWN0ZXIgb24gYSBudW1iZXIgb2YgYml0cyBkaWZmZXJlbnQKKyAgICAgIGZyb20gOC4pICBTZWUgYmVsb3cgZm9yIHRoZSBudW1iZXJpbmcgb2YgYml0cyB3aXRoaW4gYSBieXRlLgorCisgICAxLjYuIENoYW5nZXMgZnJvbSBwcmV2aW91cyB2ZXJzaW9ucworCisgICAgICBUaGVyZSBoYXZlIGJlZW4gbm8gdGVjaG5pY2FsIGNoYW5nZXMgdG8gdGhlIGd6aXAgZm9ybWF0IHNpbmNlCisgICAgICB2ZXJzaW9uIDQuMSBvZiB0aGlzIHNwZWNpZmljYXRpb24uICBJbiB2ZXJzaW9uIDQuMiwgc29tZQorICAgICAgdGVybWlub2xvZ3kgd2FzIGNoYW5nZWQsIGFuZCB0aGUgc2FtcGxlIENSQyBjb2RlIHdhcyByZXdyaXR0ZW4gZm9yCisgICAgICBjbGFyaXR5IGFuZCB0byBlbGltaW5hdGUgdGhlIHJlcXVpcmVtZW50IGZvciB0aGUgY2FsbGVyIHRvIGRvIHByZS0KKyAgICAgIGFuZCBwb3N0LWNvbmRpdGlvbmluZy4gIFZlcnNpb24gNC4zIGlzIGEgY29udmVyc2lvbiBvZiB0aGUKKyAgICAgIHNwZWNpZmljYXRpb24gdG8gUkZDIHN0eWxlLgorCisKKworRGV1dHNjaCAgICAgICAgICAgICAgICAgICAgICBJbmZvcm1hdGlvbmFsICAgICAgICAgICAgICAgICAgICAgIFtQYWdlIDNdCisMCitSRkMgMTk1MiAgICAgICAgICAgICBHWklQIEZpbGUgRm9ybWF0IFNwZWNpZmljYXRpb24gICAgICAgICAgICAgTWF5IDE5OTYKKworCisyLiBEZXRhaWxlZCBzcGVjaWZpY2F0aW9uCisKKyAgIDIuMS4gT3ZlcmFsbCBjb252ZW50aW9ucworCisgICAgICBJbiB0aGUgZGlhZ3JhbXMgYmVsb3csIGEgYm94IGxpa2UgdGhpczoKKworICAgICAgICAgKy0tLSsKKyAgICAgICAgIHwgICB8IDwtLSB0aGUgdmVydGljYWwgYmFycyBtaWdodCBiZSBtaXNzaW5nCisgICAgICAgICArLS0tKworCisgICAgICByZXByZXNlbnRzIG9uZSBieXRlOyBhIGJveCBsaWtlIHRoaXM6CisKKyAgICAgICAgICs9PT09PT09PT09PT09PSsKKyAgICAgICAgIHwgICAgICAgICAgICAgIHwKKyAgICAgICAgICs9PT09PT09PT09PT09PSsKKworICAgICAgcmVwcmVzZW50cyBhIHZhcmlhYmxlIG51bWJlciBvZiBieXRlcy4KKworICAgICAgQnl0ZXMgc3RvcmVkIHdpdGhpbiBhIGNvbXB1dGVyIGRvIG5vdCBoYXZlIGEgImJpdCBvcmRlciIsIHNpbmNlCisgICAgICB0aGV5IGFyZSBhbHdheXMgdHJlYXRlZCBhcyBhIHVuaXQuICBIb3dldmVyLCBhIGJ5dGUgY29uc2lkZXJlZCBhcworICAgICAgYW4gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDI1NSBkb2VzIGhhdmUgYSBtb3N0LSBhbmQgbGVhc3QtCisgICAgICBzaWduaWZpY2FudCBiaXQsIGFuZCBzaW5jZSB3ZSB3cml0ZSBudW1iZXJzIHdpdGggdGhlIG1vc3QtCisgICAgICBzaWduaWZpY2FudCBkaWdpdCBvbiB0aGUgbGVmdCwgd2UgYWxzbyB3cml0ZSBieXRlcyB3aXRoIHRoZSBtb3N0LQorICAgICAgc2lnbmlmaWNhbnQgYml0IG9uIHRoZSBsZWZ0LiAgSW4gdGhlIGRpYWdyYW1zIGJlbG93LCB3ZSBudW1iZXIgdGhlCisgICAgICBiaXRzIG9mIGEgYnl0ZSBzbyB0aGF0IGJpdCAwIGlzIHRoZSBsZWFzdC1zaWduaWZpY2FudCBiaXQsIGkuZS4sCisgICAgICB0aGUgYml0cyBhcmUgbnVtYmVyZWQ6CisKKyAgICAgICAgICstLS0tLS0tLSsKKyAgICAgICAgIHw3NjU0MzIxMHwKKyAgICAgICAgICstLS0tLS0tLSsKKworICAgICAgVGhpcyBkb2N1bWVudCBkb2VzIG5vdCBhZGRyZXNzIHRoZSBpc3N1ZSBvZiB0aGUgb3JkZXIgaW4gd2hpY2gKKyAgICAgIGJpdHMgb2YgYSBieXRlIGFyZSB0cmFuc21pdHRlZCBvbiBhIGJpdC1zZXF1ZW50aWFsIG1lZGl1bSwgc2luY2UKKyAgICAgIHRoZSBkYXRhIGZvcm1hdCBkZXNjcmliZWQgaGVyZSBpcyBieXRlLSByYXRoZXIgdGhhbiBiaXQtb3JpZW50ZWQuCisKKyAgICAgIFdpdGhpbiBhIGNvbXB1dGVyLCBhIG51bWJlciBtYXkgb2NjdXB5IG11bHRpcGxlIGJ5dGVzLiAgQWxsCisgICAgICBtdWx0aS1ieXRlIG51bWJlcnMgaW4gdGhlIGZvcm1hdCBkZXNjcmliZWQgaGVyZSBhcmUgc3RvcmVkIHdpdGgKKyAgICAgIHRoZSBsZWFzdC1zaWduaWZpY2FudCBieXRlIGZpcnN0IChhdCB0aGUgbG93ZXIgbWVtb3J5IGFkZHJlc3MpLgorICAgICAgRm9yIGV4YW1wbGUsIHRoZSBkZWNpbWFsIG51bWJlciA1MjAgaXMgc3RvcmVkIGFzOgorCisgICAgICAgICAgICAgMCAgICAgICAgMQorICAgICAgICAgKy0tLS0tLS0tKy0tLS0tLS0tKworICAgICAgICAgfDAwMDAxMDAwfDAwMDAwMDEwfAorICAgICAgICAgKy0tLS0tLS0tKy0tLS0tLS0tKworICAgICAgICAgIF4gICAgICAgIF4KKyAgICAgICAgICB8ICAgICAgICB8CisgICAgICAgICAgfCAgICAgICAgKyBtb3JlIHNpZ25pZmljYW50IGJ5dGUgPSAyIHggMjU2CisgICAgICAgICAgKyBsZXNzIHNpZ25pZmljYW50IGJ5dGUgPSA4CisKKworCitEZXV0c2NoICAgICAgICAgICAgICAgICAgICAgIEluZm9ybWF0aW9uYWwgICAgICAgICAgICAgICAgICAgICAgW1BhZ2UgNF0KKwwKK1JGQyAxOTUyICAgICAgICAgICAgIEdaSVAgRmlsZSBGb3JtYXQgU3BlY2lmaWNhdGlvbiAgICAgICAgICAgICBNYXkgMTk5NgorCisKKyAgIDIuMi4gRmlsZSBmb3JtYXQKKworICAgICAgQSBnemlwIGZpbGUgY29uc2lzdHMgb2YgYSBzZXJpZXMgb2YgIm1lbWJlcnMiIChjb21wcmVzc2VkIGRhdGEKKyAgICAgIHNldHMpLiAgVGhlIGZvcm1hdCBvZiBlYWNoIG1lbWJlciBpcyBzcGVjaWZpZWQgaW4gdGhlIGZvbGxvd2luZworICAgICAgc2VjdGlvbi4gIFRoZSBtZW1iZXJzIHNpbXBseSBhcHBlYXIgb25lIGFmdGVyIGFub3RoZXIgaW4gdGhlIGZpbGUsCisgICAgICB3aXRoIG5vIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYmVmb3JlLCBiZXR3ZWVuLCBvciBhZnRlciB0aGVtLgorCisgICAyLjMuIE1lbWJlciBmb3JtYXQKKworICAgICAgRWFjaCBtZW1iZXIgaGFzIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlOgorCisgICAgICAgICArLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKworICAgICAgICAgfElEMXxJRDJ8Q00gfEZMR3wgICAgIE1USU1FICAgICB8WEZMfE9TIHwgKG1vcmUtLT4pCisgICAgICAgICArLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKworCisgICAgICAoaWYgRkxHLkZFWFRSQSBzZXQpCisKKyAgICAgICAgICstLS0rLS0tKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKKyAgICAgICAgIHwgWExFTiAgfC4uLlhMRU4gYnl0ZXMgb2YgImV4dHJhIGZpZWxkIi4uLnwgKG1vcmUtLT4pCisgICAgICAgICArLS0tKy0tLSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCisKKyAgICAgIChpZiBGTEcuRk5BTUUgc2V0KQorCisgICAgICAgICArPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCisgICAgICAgICB8Li4ub3JpZ2luYWwgZmlsZSBuYW1lLCB6ZXJvLXRlcm1pbmF0ZWQuLi58IChtb3JlLS0+KQorICAgICAgICAgKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KworCisgICAgICAoaWYgRkxHLkZDT01NRU5UIHNldCkKKworICAgICAgICAgKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KworICAgICAgICAgfC4uLmZpbGUgY29tbWVudCwgemVyby10ZXJtaW5hdGVkLi4ufCAobW9yZS0tPikKKyAgICAgICAgICs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKKworICAgICAgKGlmIEZMRy5GSENSQyBzZXQpCisKKyAgICAgICAgICstLS0rLS0tKworICAgICAgICAgfCBDUkMxNiB8CisgICAgICAgICArLS0tKy0tLSsKKworICAgICAgICAgKz09PT09PT09PT09PT09PT09PT09PT09KworICAgICAgICAgfC4uLmNvbXByZXNzZWQgYmxvY2tzLi4ufCAobW9yZS0tPikKKyAgICAgICAgICs9PT09PT09PT09PT09PT09PT09PT09PSsKKworICAgICAgICAgICAwICAgMSAgIDIgICAzICAgNCAgIDUgICA2ICAgNworICAgICAgICAgKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCisgICAgICAgICB8ICAgICBDUkMzMiAgICAgfCAgICAgSVNJWkUgICAgIHwKKyAgICAgICAgICstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKworCisKKworCitEZXV0c2NoICAgICAgICAgICAgICAgICAgICAgIEluZm9ybWF0aW9uYWwgICAgICAgICAgICAgICAgICAgICAgW1BhZ2UgNV0KKwwKK1JGQyAxOTUyICAgICAgICAgICAgIEdaSVAgRmlsZSBGb3JtYXQgU3BlY2lmaWNhdGlvbiAgICAgICAgICAgICBNYXkgMTk5NgorCisKKyAgICAgIDIuMy4xLiBNZW1iZXIgaGVhZGVyIGFuZCB0cmFpbGVyCisKKyAgICAgICAgIElEMSAoSURlbnRpZmljYXRpb24gMSkKKyAgICAgICAgIElEMiAoSURlbnRpZmljYXRpb24gMikKKyAgICAgICAgICAgIFRoZXNlIGhhdmUgdGhlIGZpeGVkIHZhbHVlcyBJRDEgPSAzMSAoMHgxZiwgXDAzNyksIElEMiA9IDEzOQorICAgICAgICAgICAgKDB4OGIsIFwyMTMpLCB0byBpZGVudGlmeSB0aGUgZmlsZSBhcyBiZWluZyBpbiBnemlwIGZvcm1hdC4KKworICAgICAgICAgQ00gKENvbXByZXNzaW9uIE1ldGhvZCkKKyAgICAgICAgICAgIFRoaXMgaWRlbnRpZmllcyB0aGUgY29tcHJlc3Npb24gbWV0aG9kIHVzZWQgaW4gdGhlIGZpbGUuICBDTQorICAgICAgICAgICAgPSAwLTcgYXJlIHJlc2VydmVkLiAgQ00gPSA4IGRlbm90ZXMgdGhlICJkZWZsYXRlIgorICAgICAgICAgICAgY29tcHJlc3Npb24gbWV0aG9kLCB3aGljaCBpcyB0aGUgb25lIGN1c3RvbWFyaWx5IHVzZWQgYnkKKyAgICAgICAgICAgIGd6aXAgYW5kIHdoaWNoIGlzIGRvY3VtZW50ZWQgZWxzZXdoZXJlLgorCisgICAgICAgICBGTEcgKEZMYUdzKQorICAgICAgICAgICAgVGhpcyBmbGFnIGJ5dGUgaXMgZGl2aWRlZCBpbnRvIGluZGl2aWR1YWwgYml0cyBhcyBmb2xsb3dzOgorCisgICAgICAgICAgICAgICBiaXQgMCAgIEZURVhUCisgICAgICAgICAgICAgICBiaXQgMSAgIEZIQ1JDCisgICAgICAgICAgICAgICBiaXQgMiAgIEZFWFRSQQorICAgICAgICAgICAgICAgYml0IDMgICBGTkFNRQorICAgICAgICAgICAgICAgYml0IDQgICBGQ09NTUVOVAorICAgICAgICAgICAgICAgYml0IDUgICByZXNlcnZlZAorICAgICAgICAgICAgICAgYml0IDYgICByZXNlcnZlZAorICAgICAgICAgICAgICAgYml0IDcgICByZXNlcnZlZAorCisgICAgICAgICAgICBJZiBGVEVYVCBpcyBzZXQsIHRoZSBmaWxlIGlzIHByb2JhYmx5IEFTQ0lJIHRleHQuICBUaGlzIGlzCisgICAgICAgICAgICBhbiBvcHRpb25hbCBpbmRpY2F0aW9uLCB3aGljaCB0aGUgY29tcHJlc3NvciBtYXkgc2V0IGJ5CisgICAgICAgICAgICBjaGVja2luZyBhIHNtYWxsIGFtb3VudCBvZiB0aGUgaW5wdXQgZGF0YSB0byBzZWUgd2hldGhlciBhbnkKKyAgICAgICAgICAgIG5vbi1BU0NJSSBjaGFyYWN0ZXJzIGFyZSBwcmVzZW50LiAgSW4gY2FzZSBvZiBkb3VidCwgRlRFWFQKKyAgICAgICAgICAgIGlzIGNsZWFyZWQsIGluZGljYXRpbmcgYmluYXJ5IGRhdGEuIEZvciBzeXN0ZW1zIHdoaWNoIGhhdmUKKyAgICAgICAgICAgIGRpZmZlcmVudCBmaWxlIGZvcm1hdHMgZm9yIGFzY2lpIHRleHQgYW5kIGJpbmFyeSBkYXRhLCB0aGUKKyAgICAgICAgICAgIGRlY29tcHJlc3NvciBjYW4gdXNlIEZURVhUIHRvIGNob29zZSB0aGUgYXBwcm9wcmlhdGUgZm9ybWF0LgorICAgICAgICAgICAgV2UgZGVsaWJlcmF0ZWx5IGRvIG5vdCBzcGVjaWZ5IHRoZSBhbGdvcml0aG0gdXNlZCB0byBzZXQKKyAgICAgICAgICAgIHRoaXMgYml0LCBzaW5jZSBhIGNvbXByZXNzb3IgYWx3YXlzIGhhcyB0aGUgb3B0aW9uIG9mCisgICAgICAgICAgICBsZWF2aW5nIGl0IGNsZWFyZWQgYW5kIGEgZGVjb21wcmVzc29yIGFsd2F5cyBoYXMgdGhlIG9wdGlvbgorICAgICAgICAgICAgb2YgaWdub3JpbmcgaXQgYW5kIGxldHRpbmcgc29tZSBvdGhlciBwcm9ncmFtIGhhbmRsZSBpc3N1ZXMKKyAgICAgICAgICAgIG9mIGRhdGEgY29udmVyc2lvbi4KKworICAgICAgICAgICAgSWYgRkhDUkMgaXMgc2V0LCBhIENSQzE2IGZvciB0aGUgZ3ppcCBoZWFkZXIgaXMgcHJlc2VudCwKKyAgICAgICAgICAgIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgY29tcHJlc3NlZCBkYXRhLiBUaGUgQ1JDMTYgY29uc2lzdHMKKyAgICAgICAgICAgIG9mIHRoZSB0d28gbGVhc3Qgc2lnbmlmaWNhbnQgYnl0ZXMgb2YgdGhlIENSQzMyIGZvciBhbGwKKyAgICAgICAgICAgIGJ5dGVzIG9mIHRoZSBnemlwIGhlYWRlciB1cCB0byBhbmQgbm90IGluY2x1ZGluZyB0aGUgQ1JDMTYuCisgICAgICAgICAgICBbVGhlIEZIQ1JDIGJpdCB3YXMgbmV2ZXIgc2V0IGJ5IHZlcnNpb25zIG9mIGd6aXAgdXAgdG8KKyAgICAgICAgICAgIDEuMi40LCBldmVuIHRob3VnaCBpdCB3YXMgZG9jdW1lbnRlZCB3aXRoIGEgZGlmZmVyZW50CisgICAgICAgICAgICBtZWFuaW5nIGluIGd6aXAgMS4yLjQuXQorCisgICAgICAgICAgICBJZiBGRVhUUkEgaXMgc2V0LCBvcHRpb25hbCBleHRyYSBmaWVsZHMgYXJlIHByZXNlbnQsIGFzCisgICAgICAgICAgICBkZXNjcmliZWQgaW4gYSBmb2xsb3dpbmcgc2VjdGlvbi4KKworCisKK0RldXRzY2ggICAgICAgICAgICAgICAgICAgICAgSW5mb3JtYXRpb25hbCAgICAgICAgICAgICAgICAgICAgICBbUGFnZSA2XQorDAorUkZDIDE5NTIgICAgICAgICAgICAgR1pJUCBGaWxlIEZvcm1hdCBTcGVjaWZpY2F0aW9uICAgICAgICAgICAgIE1heSAxOTk2CisKKworICAgICAgICAgICAgSWYgRk5BTUUgaXMgc2V0LCBhbiBvcmlnaW5hbCBmaWxlIG5hbWUgaXMgcHJlc2VudCwKKyAgICAgICAgICAgIHRlcm1pbmF0ZWQgYnkgYSB6ZXJvIGJ5dGUuICBUaGUgbmFtZSBtdXN0IGNvbnNpc3Qgb2YgSVNPCisgICAgICAgICAgICA4ODU5LTEgKExBVElOLTEpIGNoYXJhY3RlcnM7IG9uIG9wZXJhdGluZyBzeXN0ZW1zIHVzaW5nCisgICAgICAgICAgICBFQkNESUMgb3IgYW55IG90aGVyIGNoYXJhY3RlciBzZXQgZm9yIGZpbGUgbmFtZXMsIHRoZSBuYW1lCisgICAgICAgICAgICBtdXN0IGJlIHRyYW5zbGF0ZWQgdG8gdGhlIElTTyBMQVRJTi0xIGNoYXJhY3RlciBzZXQuICBUaGlzCisgICAgICAgICAgICBpcyB0aGUgb3JpZ2luYWwgbmFtZSBvZiB0aGUgZmlsZSBiZWluZyBjb21wcmVzc2VkLCB3aXRoIGFueQorICAgICAgICAgICAgZGlyZWN0b3J5IGNvbXBvbmVudHMgcmVtb3ZlZCwgYW5kLCBpZiB0aGUgZmlsZSBiZWluZworICAgICAgICAgICAgY29tcHJlc3NlZCBpcyBvbiBhIGZpbGUgc3lzdGVtIHdpdGggY2FzZSBpbnNlbnNpdGl2ZSBuYW1lcywKKyAgICAgICAgICAgIGZvcmNlZCB0byBsb3dlciBjYXNlLiBUaGVyZSBpcyBubyBvcmlnaW5hbCBmaWxlIG5hbWUgaWYgdGhlCisgICAgICAgICAgICBkYXRhIHdhcyBjb21wcmVzc2VkIGZyb20gYSBzb3VyY2Ugb3RoZXIgdGhhbiBhIG5hbWVkIGZpbGU7CisgICAgICAgICAgICBmb3IgZXhhbXBsZSwgaWYgdGhlIHNvdXJjZSB3YXMgc3RkaW4gb24gYSBVbml4IHN5c3RlbSwgdGhlcmUKKyAgICAgICAgICAgIGlzIG5vIGZpbGUgbmFtZS4KKworICAgICAgICAgICAgSWYgRkNPTU1FTlQgaXMgc2V0LCBhIHplcm8tdGVybWluYXRlZCBmaWxlIGNvbW1lbnQgaXMKKyAgICAgICAgICAgIHByZXNlbnQuICBUaGlzIGNvbW1lbnQgaXMgbm90IGludGVycHJldGVkOyBpdCBpcyBvbmx5CisgICAgICAgICAgICBpbnRlbmRlZCBmb3IgaHVtYW4gY29uc3VtcHRpb24uICBUaGUgY29tbWVudCBtdXN0IGNvbnNpc3Qgb2YKKyAgICAgICAgICAgIElTTyA4ODU5LTEgKExBVElOLTEpIGNoYXJhY3RlcnMuICBMaW5lIGJyZWFrcyBzaG91bGQgYmUKKyAgICAgICAgICAgIGRlbm90ZWQgYnkgYSBzaW5nbGUgbGluZSBmZWVkIGNoYXJhY3RlciAoMTAgZGVjaW1hbCkuCisKKyAgICAgICAgICAgIFJlc2VydmVkIEZMRyBiaXRzIG11c3QgYmUgemVyby4KKworICAgICAgICAgTVRJTUUgKE1vZGlmaWNhdGlvbiBUSU1FKQorICAgICAgICAgICAgVGhpcyBnaXZlcyB0aGUgbW9zdCByZWNlbnQgbW9kaWZpY2F0aW9uIHRpbWUgb2YgdGhlIG9yaWdpbmFsCisgICAgICAgICAgICBmaWxlIGJlaW5nIGNvbXByZXNzZWQuICBUaGUgdGltZSBpcyBpbiBVbml4IGZvcm1hdCwgaS5lLiwKKyAgICAgICAgICAgIHNlY29uZHMgc2luY2UgMDA6MDA6MDAgR01ULCBKYW4uICAxLCAxOTcwLiAgKE5vdGUgdGhhdCB0aGlzCisgICAgICAgICAgICBtYXkgY2F1c2UgcHJvYmxlbXMgZm9yIE1TLURPUyBhbmQgb3RoZXIgc3lzdGVtcyB0aGF0IHVzZQorICAgICAgICAgICAgbG9jYWwgcmF0aGVyIHRoYW4gVW5pdmVyc2FsIHRpbWUuKSAgSWYgdGhlIGNvbXByZXNzZWQgZGF0YQorICAgICAgICAgICAgZGlkIG5vdCBjb21lIGZyb20gYSBmaWxlLCBNVElNRSBpcyBzZXQgdG8gdGhlIHRpbWUgYXQgd2hpY2gKKyAgICAgICAgICAgIGNvbXByZXNzaW9uIHN0YXJ0ZWQuICBNVElNRSA9IDAgbWVhbnMgbm8gdGltZSBzdGFtcCBpcworICAgICAgICAgICAgYXZhaWxhYmxlLgorCisgICAgICAgICBYRkwgKGVYdHJhIEZMYWdzKQorICAgICAgICAgICAgVGhlc2UgZmxhZ3MgYXJlIGF2YWlsYWJsZSBmb3IgdXNlIGJ5IHNwZWNpZmljIGNvbXByZXNzaW9uCisgICAgICAgICAgICBtZXRob2RzLiAgVGhlICJkZWZsYXRlIiBtZXRob2QgKENNID0gOCkgc2V0cyB0aGVzZSBmbGFncyBhcworICAgICAgICAgICAgZm9sbG93czoKKworICAgICAgICAgICAgICAgWEZMID0gMiAtIGNvbXByZXNzb3IgdXNlZCBtYXhpbXVtIGNvbXByZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3dlc3QgYWxnb3JpdGhtCisgICAgICAgICAgICAgICBYRkwgPSA0IC0gY29tcHJlc3NvciB1c2VkIGZhc3Rlc3QgYWxnb3JpdGhtCisKKyAgICAgICAgIE9TIChPcGVyYXRpbmcgU3lzdGVtKQorICAgICAgICAgICAgVGhpcyBpZGVudGlmaWVzIHRoZSB0eXBlIG9mIGZpbGUgc3lzdGVtIG9uIHdoaWNoIGNvbXByZXNzaW9uCisgICAgICAgICAgICB0b29rIHBsYWNlLiAgVGhpcyBtYXkgYmUgdXNlZnVsIGluIGRldGVybWluaW5nIGVuZC1vZi1saW5lCisgICAgICAgICAgICBjb252ZW50aW9uIGZvciB0ZXh0IGZpbGVzLiAgVGhlIGN1cnJlbnRseSBkZWZpbmVkIHZhbHVlcyBhcmUKKyAgICAgICAgICAgIGFzIGZvbGxvd3M6CisKKworCisKKworCitEZXV0c2NoICAgICAgICAgICAgICAgICAgICAgIEluZm9ybWF0aW9uYWwgICAgICAgICAgICAgICAgICAgICAgW1BhZ2UgN10KKwwKK1JGQyAxOTUyICAgICAgICAgICAgIEdaSVAgRmlsZSBGb3JtYXQgU3BlY2lmaWNhdGlvbiAgICAgICAgICAgICBNYXkgMTk5NgorCisKKyAgICAgICAgICAgICAgICAgMCAtIEZBVCBmaWxlc3lzdGVtIChNUy1ET1MsIE9TLzIsIE5UL1dpbjMyKQorICAgICAgICAgICAgICAgICAxIC0gQW1pZ2EKKyAgICAgICAgICAgICAgICAgMiAtIFZNUyAob3IgT3BlblZNUykKKyAgICAgICAgICAgICAgICAgMyAtIFVuaXgKKyAgICAgICAgICAgICAgICAgNCAtIFZNL0NNUworICAgICAgICAgICAgICAgICA1IC0gQXRhcmkgVE9TCisgICAgICAgICAgICAgICAgIDYgLSBIUEZTIGZpbGVzeXN0ZW0gKE9TLzIsIE5UKQorICAgICAgICAgICAgICAgICA3IC0gTWFjaW50b3NoCisgICAgICAgICAgICAgICAgIDggLSBaLVN5c3RlbQorICAgICAgICAgICAgICAgICA5IC0gQ1AvTQorICAgICAgICAgICAgICAgIDEwIC0gVE9QUy0yMAorICAgICAgICAgICAgICAgIDExIC0gTlRGUyBmaWxlc3lzdGVtIChOVCkKKyAgICAgICAgICAgICAgICAxMiAtIFFET1MKKyAgICAgICAgICAgICAgICAxMyAtIEFjb3JuIFJJU0NPUworICAgICAgICAgICAgICAgMjU1IC0gdW5rbm93bgorCisgICAgICAgICBYTEVOIChlWHRyYSBMRU5ndGgpCisgICAgICAgICAgICBJZiBGTEcuRkVYVFJBIGlzIHNldCwgdGhpcyBnaXZlcyB0aGUgbGVuZ3RoIG9mIHRoZSBvcHRpb25hbAorICAgICAgICAgICAgZXh0cmEgZmllbGQuICBTZWUgYmVsb3cgZm9yIGRldGFpbHMuCisKKyAgICAgICAgIENSQzMyIChDUkMtMzIpCisgICAgICAgICAgICBUaGlzIGNvbnRhaW5zIGEgQ3ljbGljIFJlZHVuZGFuY3kgQ2hlY2sgdmFsdWUgb2YgdGhlCisgICAgICAgICAgICB1bmNvbXByZXNzZWQgZGF0YSBjb21wdXRlZCBhY2NvcmRpbmcgdG8gQ1JDLTMyIGFsZ29yaXRobQorICAgICAgICAgICAgdXNlZCBpbiB0aGUgSVNPIDMzMDkgc3RhbmRhcmQgYW5kIGluIHNlY3Rpb24gOC4xLjEuNi4yIG9mCisgICAgICAgICAgICBJVFUtVCByZWNvbW1lbmRhdGlvbiBWLjQyLiAgKFNlZSBodHRwOi8vd3d3Lmlzby5jaCBmb3IKKyAgICAgICAgICAgIG9yZGVyaW5nIElTTyBkb2N1bWVudHMuIFNlZSBnb3BoZXI6Ly9pbmZvLml0dS5jaCBmb3IgYW4KKyAgICAgICAgICAgIG9ubGluZSB2ZXJzaW9uIG9mIElUVS1UIFYuNDIuKQorCisgICAgICAgICBJU0laRSAoSW5wdXQgU0laRSkKKyAgICAgICAgICAgIFRoaXMgY29udGFpbnMgdGhlIHNpemUgb2YgdGhlIG9yaWdpbmFsICh1bmNvbXByZXNzZWQpIGlucHV0CisgICAgICAgICAgICBkYXRhIG1vZHVsbyAyXjMyLgorCisgICAgICAyLjMuMS4xLiBFeHRyYSBmaWVsZAorCisgICAgICAgICBJZiB0aGUgRkxHLkZFWFRSQSBiaXQgaXMgc2V0LCBhbiAiZXh0cmEgZmllbGQiIGlzIHByZXNlbnQgaW4KKyAgICAgICAgIHRoZSBoZWFkZXIsIHdpdGggdG90YWwgbGVuZ3RoIFhMRU4gYnl0ZXMuICBJdCBjb25zaXN0cyBvZiBhCisgICAgICAgICBzZXJpZXMgb2Ygc3ViZmllbGRzLCBlYWNoIG9mIHRoZSBmb3JtOgorCisgICAgICAgICAgICArLS0tKy0tLSstLS0rLS0tKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCisgICAgICAgICAgICB8U0kxfFNJMnwgIExFTiAgfC4uLiBMRU4gYnl0ZXMgb2Ygc3ViZmllbGQgZGF0YSAuLi58CisgICAgICAgICAgICArLS0tKy0tLSstLS0rLS0tKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCisKKyAgICAgICAgIFNJMSBhbmQgU0kyIHByb3ZpZGUgYSBzdWJmaWVsZCBJRCwgdHlwaWNhbGx5IHR3byBBU0NJSSBsZXR0ZXJzCisgICAgICAgICB3aXRoIHNvbWUgbW5lbW9uaWMgdmFsdWUuICBKZWFuLUxvdXAgR2FpbGx5CisgICAgICAgICA8Z3ppcEBwcmVwLmFpLm1pdC5lZHU+IGlzIG1haW50YWluaW5nIGEgcmVnaXN0cnkgb2Ygc3ViZmllbGQKKyAgICAgICAgIElEczsgcGxlYXNlIHNlbmQgaGltIGFueSBzdWJmaWVsZCBJRCB5b3Ugd2lzaCB0byB1c2UuICBTdWJmaWVsZAorICAgICAgICAgSURzIHdpdGggU0kyID0gMCBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuICBUaGUgZm9sbG93aW5nCisgICAgICAgICBJRHMgYXJlIGN1cnJlbnRseSBkZWZpbmVkOgorCisKKworRGV1dHNjaCAgICAgICAgICAgICAgICAgICAgICBJbmZvcm1hdGlvbmFsICAgICAgICAgICAgICAgICAgICAgIFtQYWdlIDhdCisMCitSRkMgMTk1MiAgICAgICAgICAgICBHWklQIEZpbGUgRm9ybWF0IFNwZWNpZmljYXRpb24gICAgICAgICAgICAgTWF5IDE5OTYKKworCisgICAgICAgICAgICBTSTEgICAgICAgICBTSTIgICAgICAgICBEYXRhCisgICAgICAgICAgICAtLS0tLS0tLS0tICAtLS0tLS0tLS0tICAtLS0tCisgICAgICAgICAgICAweDQxICgnQScpICAweDcwICgnUCcpICBBcG9sbG8gZmlsZSB0eXBlIGluZm9ybWF0aW9uCisKKyAgICAgICAgIExFTiBnaXZlcyB0aGUgbGVuZ3RoIG9mIHRoZSBzdWJmaWVsZCBkYXRhLCBleGNsdWRpbmcgdGhlIDQKKyAgICAgICAgIGluaXRpYWwgYnl0ZXMuCisKKyAgICAgIDIuMy4xLjIuIENvbXBsaWFuY2UKKworICAgICAgICAgQSBjb21wbGlhbnQgY29tcHJlc3NvciBtdXN0IHByb2R1Y2UgZmlsZXMgd2l0aCBjb3JyZWN0IElEMSwKKyAgICAgICAgIElEMiwgQ00sIENSQzMyLCBhbmQgSVNJWkUsIGJ1dCBtYXkgc2V0IGFsbCB0aGUgb3RoZXIgZmllbGRzIGluCisgICAgICAgICB0aGUgZml4ZWQtbGVuZ3RoIHBhcnQgb2YgdGhlIGhlYWRlciB0byBkZWZhdWx0IHZhbHVlcyAoMjU1IGZvcgorICAgICAgICAgT1MsIDAgZm9yIGFsbCBvdGhlcnMpLiAgVGhlIGNvbXByZXNzb3IgbXVzdCBzZXQgYWxsIHJlc2VydmVkCisgICAgICAgICBiaXRzIHRvIHplcm8uCisKKyAgICAgICAgIEEgY29tcGxpYW50IGRlY29tcHJlc3NvciBtdXN0IGNoZWNrIElEMSwgSUQyLCBhbmQgQ00sIGFuZAorICAgICAgICAgcHJvdmlkZSBhbiBlcnJvciBpbmRpY2F0aW9uIGlmIGFueSBvZiB0aGVzZSBoYXZlIGluY29ycmVjdAorICAgICAgICAgdmFsdWVzLiAgSXQgbXVzdCBleGFtaW5lIEZFWFRSQS9YTEVOLCBGTkFNRSwgRkNPTU1FTlQgYW5kIEZIQ1JDCisgICAgICAgICBhdCBsZWFzdCBzbyBpdCBjYW4gc2tpcCBvdmVyIHRoZSBvcHRpb25hbCBmaWVsZHMgaWYgdGhleSBhcmUKKyAgICAgICAgIHByZXNlbnQuICBJdCBuZWVkIG5vdCBleGFtaW5lIGFueSBvdGhlciBwYXJ0IG9mIHRoZSBoZWFkZXIgb3IKKyAgICAgICAgIHRyYWlsZXI7IGluIHBhcnRpY3VsYXIsIGEgZGVjb21wcmVzc29yIG1heSBpZ25vcmUgRlRFWFQgYW5kIE9TCisgICAgICAgICBhbmQgYWx3YXlzIHByb2R1Y2UgYmluYXJ5IG91dHB1dCwgYW5kIHN0aWxsIGJlIGNvbXBsaWFudC4gIEEKKyAgICAgICAgIGNvbXBsaWFudCBkZWNvbXByZXNzb3IgbXVzdCBnaXZlIGFuIGVycm9yIGluZGljYXRpb24gaWYgYW55CisgICAgICAgICByZXNlcnZlZCBiaXQgaXMgbm9uLXplcm8sIHNpbmNlIHN1Y2ggYSBiaXQgY291bGQgaW5kaWNhdGUgdGhlCisgICAgICAgICBwcmVzZW5jZSBvZiBhIG5ldyBmaWVsZCB0aGF0IHdvdWxkIGNhdXNlIHN1YnNlcXVlbnQgZGF0YSB0byBiZQorICAgICAgICAgaW50ZXJwcmV0ZWQgaW5jb3JyZWN0bHkuCisKKzMuIFJlZmVyZW5jZXMKKworICAgWzFdICJJbmZvcm1hdGlvbiBQcm9jZXNzaW5nIC0gOC1iaXQgc2luZ2xlLWJ5dGUgY29kZWQgZ3JhcGhpYworICAgICAgIGNoYXJhY3RlciBzZXRzIC0gUGFydCAxOiBMYXRpbiBhbHBoYWJldCBOby4xIiAoSVNPIDg4NTktMToxOTg3KS4KKyAgICAgICBUaGUgSVNPIDg4NTktMSAoTGF0aW4tMSkgY2hhcmFjdGVyIHNldCBpcyBhIHN1cGVyc2V0IG9mIDctYml0CisgICAgICAgQVNDSUkuIEZpbGVzIGRlZmluaW5nIHRoaXMgY2hhcmFjdGVyIHNldCBhcmUgYXZhaWxhYmxlIGFzCisgICAgICAgaXNvXzg4NTktMS4qIGluIGZ0cDovL2Z0cC51dS5uZXQvZ3JhcGhpY3MvcG5nL2RvY3VtZW50cy8KKworICAgWzJdIElTTyAzMzA5CisKKyAgIFszXSBJVFUtVCByZWNvbW1lbmRhdGlvbiBWLjQyCisKKyAgIFs0XSBEZXV0c2NoLCBMLlAuLCJERUZMQVRFIENvbXByZXNzZWQgRGF0YSBGb3JtYXQgU3BlY2lmaWNhdGlvbiIsCisgICAgICAgYXZhaWxhYmxlIGluIGZ0cDovL2Z0cC51dS5uZXQvcHViL2FyY2hpdmluZy96aXAvZG9jLworCisgICBbNV0gR2FpbGx5LCBKLi1MLiwgR1pJUCBkb2N1bWVudGF0aW9uLCBhdmFpbGFibGUgYXMgZ3ppcC0qLnRhciBpbgorICAgICAgIGZ0cDovL3ByZXAuYWkubWl0LmVkdS9wdWIvZ251LworCisgICBbNl0gU2Fyd2F0ZSwgRC5WLiwgIkNvbXB1dGF0aW9uIG9mIEN5Y2xpYyBSZWR1bmRhbmN5IENoZWNrcyB2aWEgVGFibGUKKyAgICAgICBMb29rLVVwIiwgQ29tbXVuaWNhdGlvbnMgb2YgdGhlIEFDTSwgMzEoOCksIHBwLjEwMDgtMTAxMy4KKworCisKKworRGV1dHNjaCAgICAgICAgICAgICAgICAgICAgICBJbmZvcm1hdGlvbmFsICAgICAgICAgICAgICAgICAgICAgIFtQYWdlIDldCisMCitSRkMgMTk1MiAgICAgICAgICAgICBHWklQIEZpbGUgRm9ybWF0IFNwZWNpZmljYXRpb24gICAgICAgICAgICAgTWF5IDE5OTYKKworCisgICBbN10gU2Nod2FkZXJlciwgVy5ELiwgIkNSQyBDYWxjdWxhdGlvbiIsIEFwcmlsIDg1IFBDIFRlY2ggSm91cm5hbCwKKyAgICAgICBwcC4xMTgtMTMzLgorCisgICBbOF0gZnRwOi8vZnRwLmFkZWxhaWRlLmVkdS5hdS9wdWIvcm9ja3NvZnQvcGFwZXJzL2NyY192My50eHQsCisgICAgICAgZGVzY3JpYmluZyB0aGUgQ1JDIGNvbmNlcHQuCisKKzQuIFNlY3VyaXR5IENvbnNpZGVyYXRpb25zCisKKyAgIEFueSBkYXRhIGNvbXByZXNzaW9uIG1ldGhvZCBpbnZvbHZlcyB0aGUgcmVkdWN0aW9uIG9mIHJlZHVuZGFuY3kgaW4KKyAgIHRoZSBkYXRhLiAgQ29uc2VxdWVudGx5LCBhbnkgY29ycnVwdGlvbiBvZiB0aGUgZGF0YSBpcyBsaWtlbHkgdG8gaGF2ZQorICAgc2V2ZXJlIGVmZmVjdHMgYW5kIGJlIGRpZmZpY3VsdCB0byBjb3JyZWN0LiAgVW5jb21wcmVzc2VkIHRleHQsIG9uCisgICB0aGUgb3RoZXIgaGFuZCwgd2lsbCBwcm9iYWJseSBzdGlsbCBiZSByZWFkYWJsZSBkZXNwaXRlIHRoZSBwcmVzZW5jZQorICAgb2Ygc29tZSBjb3JydXB0ZWQgYnl0ZXMuCisKKyAgIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgc3lzdGVtcyB1c2luZyB0aGlzIGRhdGEgZm9ybWF0IHByb3ZpZGUgc29tZQorICAgbWVhbnMgb2YgdmFsaWRhdGluZyB0aGUgaW50ZWdyaXR5IG9mIHRoZSBjb21wcmVzc2VkIGRhdGEsIHN1Y2ggYXMgYnkKKyAgIHNldHRpbmcgYW5kIGNoZWNraW5nIHRoZSBDUkMtMzIgY2hlY2sgdmFsdWUuCisKKzUuIEFja25vd2xlZGdlbWVudHMKKworICAgVHJhZGVtYXJrcyBjaXRlZCBpbiB0aGlzIGRvY3VtZW50IGFyZSB0aGUgcHJvcGVydHkgb2YgdGhlaXIKKyAgIHJlc3BlY3RpdmUgb3duZXJzLgorCisgICBKZWFuLUxvdXAgR2FpbGx5IGRlc2lnbmVkIHRoZSBnemlwIGZvcm1hdCBhbmQgd3JvdGUsIHdpdGggTWFyayBBZGxlciwKKyAgIHRoZSByZWxhdGVkIHNvZnR3YXJlIGRlc2NyaWJlZCBpbiB0aGlzIHNwZWNpZmljYXRpb24uICBHbGVubgorICAgUmFuZGVycy1QZWhyc29uIGNvbnZlcnRlZCB0aGlzIGRvY3VtZW50IHRvIFJGQyBhbmQgSFRNTCBmb3JtYXQuCisKKzYuIEF1dGhvcidzIEFkZHJlc3MKKworICAgTC4gUGV0ZXIgRGV1dHNjaAorICAgQWxhZGRpbiBFbnRlcnByaXNlcworICAgMjAzIFNhbnRhIE1hcmdhcml0YSBBdmUuCisgICBNZW5sbyBQYXJrLCBDQSA5NDAyNQorCisgICBQaG9uZTogKDQxNSkgMzIyLTAxMDMgKEFNIG9ubHkpCisgICBGQVg6ICAgKDQxNSkgMzIyLTE3MzQKKyAgIEVNYWlsOiA8Z2hvc3RAYWxhZGRpbi5jb20+CisKKyAgIFF1ZXN0aW9ucyBhYm91dCB0aGUgdGVjaG5pY2FsIGNvbnRlbnQgb2YgdGhpcyBzcGVjaWZpY2F0aW9uIGNhbiBiZQorICAgc2VudCBieSBlbWFpbCB0bzoKKworICAgSmVhbi1Mb3VwIEdhaWxseSA8Z3ppcEBwcmVwLmFpLm1pdC5lZHU+IGFuZAorICAgTWFyayBBZGxlciA8bWFkbGVyQGFsdW1uaS5jYWx0ZWNoLmVkdT4KKworICAgRWRpdG9yaWFsIGNvbW1lbnRzIG9uIHRoaXMgc3BlY2lmaWNhdGlvbiBjYW4gYmUgc2VudCBieSBlbWFpbCB0bzoKKworICAgTC4gUGV0ZXIgRGV1dHNjaCA8Z2hvc3RAYWxhZGRpbi5jb20+IGFuZAorICAgR2xlbm4gUmFuZGVycy1QZWhyc29uIDxyYW5kZWdAYWx1bW5pLnJwaS5lZHU+CisKKworCitEZXV0c2NoICAgICAgICAgICAgICAgICAgICAgIEluZm9ybWF0aW9uYWwgICAgICAgICAgICAgICAgICAgICBbUGFnZSAxMF0KKwwKK1JGQyAxOTUyICAgICAgICAgICAgIEdaSVAgRmlsZSBGb3JtYXQgU3BlY2lmaWNhdGlvbiAgICAgICAgICAgICBNYXkgMTk5NgorCisKKzcuIEFwcGVuZGl4OiBKZWFuLUxvdXAgR2FpbGx5J3MgZ3ppcCB1dGlsaXR5CisKKyAgIFRoZSBtb3N0IHdpZGVseSB1c2VkIGltcGxlbWVudGF0aW9uIG9mIGd6aXAgY29tcHJlc3Npb24sIGFuZCB0aGUKKyAgIG9yaWdpbmFsIGRvY3VtZW50YXRpb24gb24gd2hpY2ggdGhpcyBzcGVjaWZpY2F0aW9uIGlzIGJhc2VkLCB3ZXJlCisgICBjcmVhdGVkIGJ5IEplYW4tTG91cCBHYWlsbHkgPGd6aXBAcHJlcC5haS5taXQuZWR1Pi4gIFNpbmNlIHRoaXMKKyAgIGltcGxlbWVudGF0aW9uIGlzIGEgZGUgZmFjdG8gc3RhbmRhcmQsIHdlIG1lbnRpb24gc29tZSBtb3JlIG9mIGl0cworICAgZmVhdHVyZXMgaGVyZS4gIEFnYWluLCB0aGUgbWF0ZXJpYWwgaW4gdGhpcyBzZWN0aW9uIGlzIG5vdCBwYXJ0IG9mCisgICB0aGUgc3BlY2lmaWNhdGlvbiBwZXIgc2UsIGFuZCBpbXBsZW1lbnRhdGlvbnMgbmVlZCBub3QgZm9sbG93IGl0IHRvCisgICBiZSBjb21wbGlhbnQuCisKKyAgIFdoZW4gY29tcHJlc3Npbmcgb3IgZGVjb21wcmVzc2luZyBhIGZpbGUsIGd6aXAgcHJlc2VydmVzIHRoZQorICAgcHJvdGVjdGlvbiwgb3duZXJzaGlwLCBhbmQgbW9kaWZpY2F0aW9uIHRpbWUgYXR0cmlidXRlcyBvbiB0aGUgbG9jYWwKKyAgIGZpbGUgc3lzdGVtLCBzaW5jZSB0aGVyZSBpcyBubyBwcm92aXNpb24gZm9yIHJlcHJlc2VudGluZyBwcm90ZWN0aW9uCisgICBhdHRyaWJ1dGVzIGluIHRoZSBnemlwIGZpbGUgZm9ybWF0IGl0c2VsZi4gIFNpbmNlIHRoZSBmaWxlIGZvcm1hdAorICAgaW5jbHVkZXMgYSBtb2RpZmljYXRpb24gdGltZSwgdGhlIGd6aXAgZGVjb21wcmVzc29yIHByb3ZpZGVzIGEKKyAgIGNvbW1hbmQgbGluZSBzd2l0Y2ggdGhhdCBhc3NpZ25zIHRoZSBtb2RpZmljYXRpb24gdGltZSBmcm9tIHRoZSBmaWxlLAorICAgcmF0aGVyIHRoYW4gdGhlIGxvY2FsIG1vZGlmaWNhdGlvbiB0aW1lIG9mIHRoZSBjb21wcmVzc2VkIGlucHV0LCB0bworICAgdGhlIGRlY29tcHJlc3NlZCBvdXRwdXQuCisKKzguIEFwcGVuZGl4OiBTYW1wbGUgQ1JDIENvZGUKKworICAgVGhlIGZvbGxvd2luZyBzYW1wbGUgY29kZSByZXByZXNlbnRzIGEgcHJhY3RpY2FsIGltcGxlbWVudGF0aW9uIG9mCisgICB0aGUgQ1JDIChDeWNsaWMgUmVkdW5kYW5jeSBDaGVjaykuIChTZWUgYWxzbyBJU08gMzMwOSBhbmQgSVRVLVQgVi40MgorICAgZm9yIGEgZm9ybWFsIHNwZWNpZmljYXRpb24uKQorCisgICBUaGUgc2FtcGxlIGNvZGUgaXMgaW4gdGhlIEFOU0kgQyBwcm9ncmFtbWluZyBsYW5ndWFnZS4gTm9uIEMgdXNlcnMKKyAgIG1heSBmaW5kIGl0IGVhc2llciB0byByZWFkIHdpdGggdGhlc2UgaGludHM6CisKKyAgICAgICYgICAgICBCaXR3aXNlIEFORCBvcGVyYXRvci4KKyAgICAgIF4gICAgICBCaXR3aXNlIGV4Y2x1c2l2ZS1PUiBvcGVyYXRvci4KKyAgICAgID4+ICAgICBCaXR3aXNlIHJpZ2h0IHNoaWZ0IG9wZXJhdG9yLiBXaGVuIGFwcGxpZWQgdG8gYW4KKyAgICAgICAgICAgICB1bnNpZ25lZCBxdWFudGl0eSwgYXMgaGVyZSwgcmlnaHQgc2hpZnQgaW5zZXJ0cyB6ZXJvCisgICAgICAgICAgICAgYml0KHMpIGF0IHRoZSBsZWZ0LgorICAgICAgISAgICAgIExvZ2ljYWwgTk9UIG9wZXJhdG9yLgorICAgICAgKysgICAgICJuKysiIGluY3JlbWVudHMgdGhlIHZhcmlhYmxlIG4uCisgICAgICAweE5OTiAgMHggaW50cm9kdWNlcyBhIGhleGFkZWNpbWFsIChiYXNlIDE2KSBjb25zdGFudC4KKyAgICAgICAgICAgICBTdWZmaXggTCBpbmRpY2F0ZXMgYSBsb25nIHZhbHVlIChhdCBsZWFzdCAzMiBiaXRzKS4KKworICAgICAgLyogVGFibGUgb2YgQ1JDcyBvZiBhbGwgOC1iaXQgbWVzc2FnZXMuICovCisgICAgICB1bnNpZ25lZCBsb25nIGNyY190YWJsZVsyNTZdOworCisgICAgICAvKiBGbGFnOiBoYXMgdGhlIHRhYmxlIGJlZW4gY29tcHV0ZWQ/IEluaXRpYWxseSBmYWxzZS4gKi8KKyAgICAgIGludCBjcmNfdGFibGVfY29tcHV0ZWQgPSAwOworCisgICAgICAvKiBNYWtlIHRoZSB0YWJsZSBmb3IgYSBmYXN0IENSQy4gKi8KKyAgICAgIHZvaWQgbWFrZV9jcmNfdGFibGUodm9pZCkKKyAgICAgIHsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBjOworCisKKworRGV1dHNjaCAgICAgICAgICAgICAgICAgICAgICBJbmZvcm1hdGlvbmFsICAgICAgICAgICAgICAgICAgICAgW1BhZ2UgMTFdCisMCitSRkMgMTk1MiAgICAgICAgICAgICBHWklQIEZpbGUgRm9ybWF0IFNwZWNpZmljYXRpb24gICAgICAgICAgICAgTWF5IDE5OTYKKworCisgICAgICAgIGludCBuLCBrOworICAgICAgICBmb3IgKG4gPSAwOyBuIDwgMjU2OyBuKyspIHsKKyAgICAgICAgICBjID0gKHVuc2lnbmVkIGxvbmcpIG47CisgICAgICAgICAgZm9yIChrID0gMDsgayA8IDg7IGsrKykgeworICAgICAgICAgICAgaWYgKGMgJiAxKSB7CisgICAgICAgICAgICAgIGMgPSAweGVkYjg4MzIwTCBeIChjID4+IDEpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgYyA9IGMgPj4gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgY3JjX3RhYmxlW25dID0gYzsKKyAgICAgICAgfQorICAgICAgICBjcmNfdGFibGVfY29tcHV0ZWQgPSAxOworICAgICAgfQorCisgICAgICAvKgorICAgICAgICAgVXBkYXRlIGEgcnVubmluZyBjcmMgd2l0aCB0aGUgYnl0ZXMgYnVmWzAuLmxlbi0xXSBhbmQgcmV0dXJuCisgICAgICAgdGhlIHVwZGF0ZWQgY3JjLiBUaGUgY3JjIHNob3VsZCBiZSBpbml0aWFsaXplZCB0byB6ZXJvLiBQcmUtIGFuZAorICAgICAgIHBvc3QtY29uZGl0aW9uaW5nIChvbmUncyBjb21wbGVtZW50KSBpcyBwZXJmb3JtZWQgd2l0aGluIHRoaXMKKyAgICAgICBmdW5jdGlvbiBzbyBpdCBzaG91bGRuJ3QgYmUgZG9uZSBieSB0aGUgY2FsbGVyLiBVc2FnZSBleGFtcGxlOgorCisgICAgICAgICB1bnNpZ25lZCBsb25nIGNyYyA9IDBMOworCisgICAgICAgICB3aGlsZSAocmVhZF9idWZmZXIoYnVmZmVyLCBsZW5ndGgpICE9IEVPRikgeworICAgICAgICAgICBjcmMgPSB1cGRhdGVfY3JjKGNyYywgYnVmZmVyLCBsZW5ndGgpOworICAgICAgICAgfQorICAgICAgICAgaWYgKGNyYyAhPSBvcmlnaW5hbF9jcmMpIGVycm9yKCk7CisgICAgICAqLworICAgICAgdW5zaWduZWQgbG9uZyB1cGRhdGVfY3JjKHVuc2lnbmVkIGxvbmcgY3JjLAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGxlbikKKyAgICAgIHsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBjID0gY3JjIF4gMHhmZmZmZmZmZkw7CisgICAgICAgIGludCBuOworCisgICAgICAgIGlmICghY3JjX3RhYmxlX2NvbXB1dGVkKQorICAgICAgICAgIG1ha2VfY3JjX3RhYmxlKCk7CisgICAgICAgIGZvciAobiA9IDA7IG4gPCBsZW47IG4rKykgeworICAgICAgICAgIGMgPSBjcmNfdGFibGVbKGMgXiBidWZbbl0pICYgMHhmZl0gXiAoYyA+PiA4KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYyBeIDB4ZmZmZmZmZmZMOworICAgICAgfQorCisgICAgICAvKiBSZXR1cm4gdGhlIENSQyBvZiB0aGUgYnl0ZXMgYnVmWzAuLmxlbi0xXS4gKi8KKyAgICAgIHVuc2lnbmVkIGxvbmcgY3JjKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGxlbikKKyAgICAgIHsKKyAgICAgICAgcmV0dXJuIHVwZGF0ZV9jcmMoMEwsIGJ1ZiwgbGVuKTsKKyAgICAgIH0KKworCisKKworRGV1dHNjaCAgICAgICAgICAgICAgICAgICAgICBJbmZvcm1hdGlvbmFsICAgICAgICAgICAgICAgICAgICAgW1BhZ2UgMTJdCisMCmRpZmYgLS1naXQgYS9zcmMvZG9jL3R4dHZzYmluLnR4dCBiL3NyYy9kb2MvdHh0dnNiaW4udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhOTAxZWEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvZG9jL3R4dHZzYmluLnR4dApAQCAtMCwwICsxLDEwNyBAQAorQSBGYXN0IE1ldGhvZCBmb3IgSWRlbnRpZnlpbmcgUGxhaW4gVGV4dCBGaWxlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKK0ludHJvZHVjdGlvbgorLS0tLS0tLS0tLS0tCisKK0dpdmVuIGEgZmlsZSBjb21pbmcgZnJvbSBhbiB1bmtub3duIHNvdXJjZSwgaXQgaXMgc29tZXRpbWVzIGRlc2lyYWJsZQordG8gZmluZCBvdXQgd2hldGhlciB0aGUgZm9ybWF0IG9mIHRoYXQgZmlsZSBpcyBwbGFpbiB0ZXh0LiAgQWx0aG91Z2gKK3RoaXMgbWF5IGFwcGVhciBsaWtlIGEgc2ltcGxlIHRhc2ssIGEgZnVsbHkgYWNjdXJhdGUgZGV0ZWN0aW9uIG9mIHRoZQorZmlsZSB0eXBlIHJlcXVpcmVzIGhlYXZ5LWR1dHkgc2VtYW50aWMgYW5hbHlzaXMgb24gdGhlIGZpbGUgY29udGVudHMuCitJdCBpcywgaG93ZXZlciwgcG9zc2libGUgdG8gb2J0YWluIHNhdGlzZmFjdG9yeSByZXN1bHRzIGJ5IGVtcGxveWluZwordmFyaW91cyBoZXVyaXN0aWNzLgorCitQcmV2aW91cyB2ZXJzaW9ucyBvZiBQS1ppcCBhbmQgb3RoZXIgemlwLWNvbXBhdGlibGUgY29tcHJlc3Npb24gdG9vbHMKK3dlcmUgdXNpbmcgYSBjcnVkZSBkZXRlY3Rpb24gc2NoZW1lOiBpZiBtb3JlIHRoYW4gODAlICg0LzUpIG9mIHRoZSBieXRlcworZm91bmQgaW4gYSBjZXJ0YWluIGJ1ZmZlciBhcmUgd2l0aGluIHRoZSByYW5nZSBbNy4uMTI3XSwgdGhlIGZpbGUgaXMKK2xhYmVsZWQgYXMgcGxhaW4gdGV4dCwgb3RoZXJ3aXNlIGl0IGlzIGxhYmVsZWQgYXMgYmluYXJ5LiAgQSBwcm9taW5lbnQKK2xpbWl0YXRpb24gb2YgdGhpcyBzY2hlbWUgaXMgdGhlIHJlc3RyaWN0aW9uIHRvIExhdGluLWJhc2VkIGFscGhhYmV0cy4KK090aGVyIGFscGhhYmV0cywgbGlrZSBHcmVlaywgQ3lyaWxsaWMgb3IgQXNpYW4sIG1ha2UgZXh0ZW5zaXZlIHVzZSBvZgordGhlIGJ5dGVzIHdpdGhpbiB0aGUgcmFuZ2UgWzEyOC4uMjU1XSwgYW5kIHRleHRzIHVzaW5nIHRoZXNlIGFscGhhYmV0cworYXJlIG1vc3Qgb2Z0ZW4gbWlzaWRlbnRpZmllZCBieSB0aGlzIHNjaGVtZTsgaW4gb3RoZXIgd29yZHMsIHRoZSByYXRlCitvZiBmYWxzZSBuZWdhdGl2ZXMgaXMgc29tZXRpbWVzIHRvbyBoaWdoLCB3aGljaCBtZWFucyB0aGF0IHRoZSByZWNhbGwKK2lzIGxvdy4gIEFub3RoZXIgd2Vha25lc3Mgb2YgdGhpcyBzY2hlbWUgaXMgYSByZWR1Y2VkIHByZWNpc2lvbiwgZHVlIHRvCit0aGUgZmFsc2UgcG9zaXRpdmVzIHRoYXQgbWF5IG9jY3VyIHdoZW4gYmluYXJ5IGZpbGVzIGNvbnRhaW5pbmcgbGFyZ2UKK2Ftb3VudHMgb2YgdGV4dHVhbCBjaGFyYWN0ZXJzIGFyZSBtaXNpZGVudGlmaWVkIGFzIHBsYWluIHRleHQuCisKK0luIHRoaXMgYXJ0aWNsZSB3ZSBwcm9wb3NlIGEgbmV3LCBzaW1wbGUgZGV0ZWN0aW9uIHNjaGVtZSB0aGF0IGZlYXR1cmVzCithIG11Y2ggaW5jcmVhc2VkIHByZWNpc2lvbiBhbmQgYSBuZWFyLTEwMCUgcmVjYWxsLiAgVGhpcyBzY2hlbWUgaXMKK2Rlc2lnbmVkIHRvIHdvcmsgb24gQVNDSUksIFVuaWNvZGUgYW5kIG90aGVyIEFTQ0lJLWRlcml2ZWQgYWxwaGFiZXRzLAorYW5kIGl0IGhhbmRsZXMgc2luZ2xlLWJ5dGUgZW5jb2RpbmdzIChJU08tODg1OSwgTWFjUm9tYW4sIEtPSTgsIGV0Yy4pCithbmQgdmFyaWFibGUtc2l6ZWQgZW5jb2RpbmdzIChJU08tMjAyMiwgVVRGLTgsIGV0Yy4pLiAgV2lkZXIgZW5jb2RpbmdzCisoVUNTLTIvVVRGLTE2IGFuZCBVQ1MtNC9VVEYtMzIpIGFyZSBub3QgaGFuZGxlZCwgaG93ZXZlci4KKworCitUaGUgQWxnb3JpdGhtCistLS0tLS0tLS0tLS0tCisKK1RoZSBhbGdvcml0aG0gd29ya3MgYnkgZGl2aWRpbmcgdGhlIHNldCBvZiBieXRlY29kZXMgWzAuLjI1NV0gaW50byB0aHJlZQorY2F0ZWdvcmllczoKKy0gVGhlIGFsbG93IGxpc3Qgb2YgdGV4dHVhbCBieXRlY29kZXM6CisgIDkgKFRBQiksIDEwIChMRiksIDEzIChDUiksIDMyIChTUEFDRSkgdG8gMjU1LgorLSBUaGUgZ3JheSBsaXN0IG9mIHRvbGVyYXRlZCBieXRlY29kZXM6CisgIDcgKEJFTCksIDggKEJTKSwgMTEgKFZUKSwgMTIgKEZGKSwgMjYgKFNVQiksIDI3IChFU0MpLgorLSBUaGUgYmxvY2sgbGlzdCBvZiB1bmRlc2lyZWQsIG5vbi10ZXh0dWFsIGJ5dGVjb2RlczoKKyAgMCAoTlVMKSB0byA2LCAxNCB0byAzMS4KKworSWYgYSBmaWxlIGNvbnRhaW5zIGF0IGxlYXN0IG9uZSBieXRlIHRoYXQgYmVsb25ncyB0byB0aGUgYWxsb3cgbGlzdCBhbmQKK25vIGJ5dGUgdGhhdCBiZWxvbmdzIHRvIHRoZSBibG9jayBsaXN0LCB0aGVuIHRoZSBmaWxlIGlzIGNhdGVnb3JpemVkIGFzCitwbGFpbiB0ZXh0OyBvdGhlcndpc2UsIGl0IGlzIGNhdGVnb3JpemVkIGFzIGJpbmFyeS4gIChUaGUgYm91bmRhcnkgY2FzZSwKK3doZW4gdGhlIGZpbGUgaXMgZW1wdHksIGF1dG9tYXRpY2FsbHkgZmFsbHMgaW50byB0aGUgbGF0dGVyIGNhdGVnb3J5LikKKworCitSYXRpb25hbGUKKy0tLS0tLS0tLQorCitUaGUgaWRlYSBiZWhpbmQgdGhpcyBhbGdvcml0aG0gcmVsaWVzIG9uIHR3byBvYnNlcnZhdGlvbnMuCisKK1RoZSBmaXJzdCBvYnNlcnZhdGlvbiBpcyB0aGF0LCBhbHRob3VnaCB0aGUgZnVsbCByYW5nZSBvZiA3LWJpdCBjb2RlcworWzAuLjEyN10gaXMgcHJvcGVybHkgc3BlY2lmaWVkIGJ5IHRoZSBBU0NJSSBzdGFuZGFyZCwgbW9zdCBjb250cm9sCitjaGFyYWN0ZXJzIGluIHRoZSByYW5nZSBbMC4uMzFdIGFyZSBub3QgdXNlZCBpbiBwcmFjdGljZS4gIFRoZSBvbmx5Cit3aWRlbHktdXNlZCwgYWxtb3N0IHVuaXZlcnNhbGx5LXBvcnRhYmxlIGNvbnRyb2wgY29kZXMgYXJlIDkgKFRBQiksCisxMCAoTEYpIGFuZCAxMyAoQ1IpLiAgVGhlcmUgYXJlIGEgZmV3IG1vcmUgY29udHJvbCBjb2RlcyB0aGF0IGFyZQorcmVjb2duaXplZCBvbiBhIHJlZHVjZWQgcmFuZ2Ugb2YgcGxhdGZvcm1zIGFuZCB0ZXh0IHZpZXdlcnMvZWRpdG9yczoKKzcgKEJFTCksIDggKEJTKSwgMTEgKFZUKSwgMTIgKEZGKSwgMjYgKFNVQikgYW5kIDI3IChFU0MpOyBidXQgdGhlc2UKK2NvZGVzIGFyZSByYXJlbHkgKGlmIGV2ZXIpIHVzZWQgYWxvbmUsIHdpdGhvdXQgYmVpbmcgYWNjb21wYW5pZWQgYnkKK3NvbWUgcHJpbnRhYmxlIHRleHQuICBFdmVuIHRoZSBuZXdlciwgcG9ydGFibGUgdGV4dCBmb3JtYXRzIHN1Y2ggYXMKK1hNTCBhdm9pZCB1c2luZyBjb250cm9sIGNoYXJhY3RlcnMgb3V0c2lkZSB0aGUgbGlzdCBtZW50aW9uZWQgaGVyZS4KKworVGhlIHNlY29uZCBvYnNlcnZhdGlvbiBpcyB0aGF0IG1vc3Qgb2YgdGhlIGJpbmFyeSBmaWxlcyB0ZW5kIHRvIGNvbnRhaW4KK2NvbnRyb2wgY2hhcmFjdGVycywgZXNwZWNpYWxseSAwIChOVUwpLiAgRXZlbiB0aG91Z2ggdGhlIG9sZGVyIHRleHQKK2RldGVjdGlvbiBzY2hlbWVzIG9ic2VydmUgdGhlIHByZXNlbmNlIG9mIG5vbi1BU0NJSSBjb2RlcyBmcm9tIHRoZSByYW5nZQorWzEyOC4uMjU1XSwgdGhlIHByZWNpc2lvbiByYXJlbHkgaGFzIHRvIHN1ZmZlciBpZiB0aGlzIHVwcGVyIHJhbmdlIGlzCitsYWJlbGVkIGFzIHRleHR1YWwsIGJlY2F1c2UgdGhlIGZpbGVzIHRoYXQgYXJlIGdlbnVpbmVseSBiaW5hcnkgdGVuZCB0bworY29udGFpbiBib3RoIGNvbnRyb2wgY2hhcmFjdGVycyBhbmQgY29kZXMgZnJvbSB0aGUgdXBwZXIgcmFuZ2UuICBPbiB0aGUKK290aGVyIGhhbmQsIHRoZSB1cHBlciByYW5nZSBuZWVkcyB0byBiZSBsYWJlbGVkIGFzIHRleHR1YWwsIGJlY2F1c2UgaXQKK2lzIHVzZWQgYnkgdmlydHVhbGx5IGFsbCBBU0NJSSBleHRlbnNpb25zLiAgSW4gcGFydGljdWxhciwgdGhpcyByYW5nZSBpcwordXNlZCBmb3IgZW5jb2Rpbmcgbm9uLUxhdGluIHNjcmlwdHMuCisKK1NpbmNlIHRoZXJlIGlzIG5vIGNvdW50aW5nIGludm9sdmVkLCBvdGhlciB0aGFuIHNpbXBseSBvYnNlcnZpbmcgdGhlCitwcmVzZW5jZSBvciB0aGUgYWJzZW5jZSBvZiBzb21lIGJ5dGUgdmFsdWVzLCB0aGUgYWxnb3JpdGhtIHByb2R1Y2VzCitjb25zaXN0ZW50IHJlc3VsdHMsIHJlZ2FyZGxlc3Mgd2hhdCBhbHBoYWJldCBlbmNvZGluZyBpcyBiZWluZyB1c2VkLgorKElmIGNvdW50aW5nIHdlcmUgaW52b2x2ZWQsIGl0IGNvdWxkIGJlIHBvc3NpYmxlIHRvIG9idGFpbiBkaWZmZXJlbnQKK3Jlc3VsdHMgb24gYSB0ZXh0IGVuY29kZWQsIHNheSwgdXNpbmcgSVNPLTg4NTktMTYgdmVyc3VzIFVURi04LikKKworVGhlcmUgaXMgYW4gZXh0cmEgY2F0ZWdvcnkgb2YgcGxhaW4gdGV4dCBmaWxlcyB0aGF0IGFyZSAicG9sbHV0ZWQiIHdpdGgKK29uZSBvciBtb3JlIGJsb2NrLWxpc3RlZCBjb2RlcywgZWl0aGVyIGJ5IG1pc3Rha2Ugb3IgYnkgcGVjdWxpYXIgZGVzaWduCitjb25zaWRlcmF0aW9ucy4gIEluIHN1Y2ggY2FzZXMsIGEgc2NoZW1lIHRoYXQgdG9sZXJhdGVzIGEgc21hbGwgZnJhY3Rpb24KK29mIGJsb2NrLWxpc3RlZCBjb2RlcyB3b3VsZCBwcm92aWRlIGFuIGluY3JlYXNlZCByZWNhbGwgKGkuZS4gbW9yZSB0cnVlCitwb3NpdGl2ZXMpLiAgVGhpcywgaG93ZXZlciwgaW5jdXJzIGEgcmVkdWNlZCBwcmVjaXNpb24gb3ZlcmFsbCwgc2luY2UKK2ZhbHNlIHBvc2l0aXZlcyBhcmUgbW9yZSBsaWtlbHkgdG8gYXBwZWFyIGluIGJpbmFyeSBmaWxlcyB0aGF0IGNvbnRhaW4KK2xhcmdlIGNodW5rcyBvZiB0ZXh0dWFsIGRhdGEuICBGdXJ0aGVybW9yZSwgInBvbGx1dGVkIiBwbGFpbiB0ZXh0IHNob3VsZAorYmUgcmVnYXJkZWQgYXMgYmluYXJ5IGJ5IGdlbmVyYWwtcHVycG9zZSB0ZXh0IGRldGVjdGlvbiBzY2hlbWVzLCBiZWNhdXNlCitnZW5lcmFsLXB1cnBvc2UgdGV4dCBwcm9jZXNzaW5nIGFsZ29yaXRobXMgbWlnaHQgbm90IGJlIGFwcGxpY2FibGUuCitVbmRlciB0aGlzIHByZW1pc2UsIGl0IGlzIHNhZmUgdG8gc2F5IHRoYXQgb3VyIGRldGVjdGlvbiBtZXRob2QgcHJvdmlkZXMKK2EgbmVhci0xMDAlIHJlY2FsbC4KKworRXhwZXJpbWVudHMgaGF2ZSBiZWVuIHJ1biBvbiBtYW55IGZpbGVzIGNvbWluZyBmcm9tIHZhcmlvdXMgcGxhdGZvcm1zCithbmQgYXBwbGljYXRpb25zLiAgV2UgdHJpZWQgcGxhaW4gdGV4dCBmaWxlcywgc3lzdGVtIGxvZ3MsIHNvdXJjZSBjb2RlLAorZm9ybWF0dGVkIG9mZmljZSBkb2N1bWVudHMsIGNvbXBpbGVkIG9iamVjdCBjb2RlLCBldGMuICBUaGUgcmVzdWx0cworY29uZmlybSB0aGUgb3B0aW1pc3RpYyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoaXMKK2FsZ29yaXRobS4KKworCistLQorQ29zbWluIFRydXRhCitMYXN0IHVwZGF0ZWQ6IDIwMDYtTWF5LTI4CmRpZmYgLS1naXQgYS9zcmMvZXhhbXBsZXMvUkVBRE1FLmV4YW1wbGVzIGIvc3JjL2V4YW1wbGVzL1JFQURNRS5leGFtcGxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2E0Yjg4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2V4YW1wbGVzL1JFQURNRS5leGFtcGxlcwpAQCAtMCwwICsxLDU0IEBACitUaGlzIGRpcmVjdG9yeSBjb250YWlucyBleGFtcGxlcyBvZiB0aGUgdXNlIG9mIHpsaWIgYW5kIG90aGVyIHJlbGV2YW50Citwcm9ncmFtcyBhbmQgZG9jdW1lbnRhdGlvbi4KKworZW5vdWdoLmMKKyAgICBjYWxjdWxhdGlvbiBhbmQganVzdGlmaWNhdGlvbiBvZiBFTk9VR0ggcGFyYW1ldGVyIGluIGluZnRyZWVzLmgKKyAgICAtIGNhbGN1bGF0ZXMgdGhlIG1heGltdW0gdGFibGUgc3BhY2UgdXNlZCBpbiBpbmZsYXRlIHRyZWUKKyAgICAgIGNvbnN0cnVjdGlvbiBvdmVyIGFsbCBwb3NzaWJsZSBIdWZmbWFuIGNvZGVzCisKK2ZpdGJsay5jCisgICAgY29tcHJlc3MganVzdCBlbm91Z2ggaW5wdXQgdG8gbmVhcmx5IGZpbGwgYSByZXF1ZXN0ZWQgb3V0cHV0IHNpemUKKyAgICAtIHpsaWIgaXNuJ3QgZGVzaWduZWQgdG8gZG8gdGhpcywgYnV0IGZpdGJsayBkb2VzIGl0IGFueXdheQorCitndW4uYworICAgIHVuY29tcHJlc3MgYSBnemlwIGZpbGUKKyAgICAtIGlsbHVzdHJhdGVzIHRoZSB1c2Ugb2YgaW5mbGF0ZUJhY2soKSBmb3IgaGlnaCBzcGVlZCBmaWxlLXRvLWZpbGUKKyAgICAgIGRlY29tcHJlc3Npb24gdXNpbmcgY2FsbC1iYWNrIGZ1bmN0aW9ucworICAgIC0gaXMgYXBwcm94aW1hdGVseSB0d2ljZSBhcyBmYXN0IGFzIGd6aXAgLWQKKyAgICAtIGFsc28gcHJvdmlkZXMgVW5peCB1bmNvbXByZXNzIGZ1bmN0aW9uYWxpdHksIGFnYWluIHR3aWNlIGFzIGZhc3QKKworZ3phcHBlbmQuYworICAgIGFwcGVuZCB0byBhIGd6aXAgZmlsZQorICAgIC0gaWxsdXN0cmF0ZXMgdGhlIHVzZSBvZiB0aGUgWl9CTE9DSyBmbHVzaCBwYXJhbWV0ZXIgZm9yIGluZmxhdGUoKQorICAgIC0gaWxsdXN0cmF0ZXMgdGhlIHVzZSBvZiBkZWZsYXRlUHJpbWUoKSB0byBzdGFydCBhdCBhbnkgYml0CisKK2d6am9pbi5jCisgICAgam9pbiBnemlwIGZpbGVzIHdpdGhvdXQgcmVjYWxjdWxhdGluZyB0aGUgY3JjIG9yIHJlY29tcHJlc3NpbmcKKyAgICAtIGlsbHVzdHJhdGVzIHRoZSB1c2Ugb2YgdGhlIFpfQkxPQ0sgZmx1c2ggcGFyYW1ldGVyIGZvciBpbmZsYXRlKCkKKyAgICAtIGlsbHVzdHJhdGVzIHRoZSB1c2Ugb2YgY3JjMzJfY29tYmluZSgpCisKK2d6bG9nLmMKK2d6bG9nLmgKKyAgICBlZmZpY2llbnRseSBhbmQgcm9idXN0bHkgbWFpbnRhaW4gYSBtZXNzYWdlIGxvZyBmaWxlIGluIGd6aXAgZm9ybWF0CisgICAgLSBpbGx1c3RyYXRlcyB1c2Ugb2YgcmF3IGRlZmxhdGUsIFpfUEFSVElBTF9GTFVTSCwgZGVmbGF0ZVByaW1lKCksCisgICAgICBhbmQgZGVmbGF0ZVNldERpY3Rpb25hcnkoKQorICAgIC0gaWxsdXN0cmF0ZXMgdXNlIG9mIGEgZ3ppcCBoZWFkZXIgZXh0cmEgZmllbGQKKworZ3pub3JtLmMKKyAgICBub3JtYWxpemUgYSBnemlwIGZpbGUgYnkgY29tYmluaW5nIG1lbWJlcnMgaW50byBhIHNpbmdsZSBtZW1iZXIKKyAgICAtIGRlbW9uc3RyYXRlcyBob3cgdG8gY29uY2F0ZW5hdGUgZGVmbGF0ZSBzdHJlYW1zIHVzaW5nIFpfQkxPQ0sKKworemxpYl9ob3cuaHRtbAorICAgIHBhaW5mdWxseSBjb21wcmVoZW5zaXZlIGRlc2NyaXB0aW9uIG9mIHpwaXBlLmMgKHNlZSBiZWxvdykKKyAgICAtIGRlc2NyaWJlcyBpbiBleGNydWNpYXRpbmcgZGV0YWlsIHRoZSB1c2Ugb2YgZGVmbGF0ZSgpIGFuZCBpbmZsYXRlKCkKKworenBpcGUuYworICAgIHJlYWRzIGFuZCB3cml0ZXMgemxpYiBzdHJlYW1zIGZyb20gc3RkaW4gdG8gc3Rkb3V0CisgICAgLSBpbGx1c3RyYXRlcyB0aGUgcHJvcGVyIHVzZSBvZiBkZWZsYXRlKCkgYW5kIGluZmxhdGUoKQorICAgIC0gZGVlcGx5IGNvbW1lbnRlZCBpbiB6bGliX2hvdy5odG1sIChzZWUgYWJvdmUpCisKK3pyYW4uYworenJhbi5oCisgICAgaW5kZXggYSB6bGliIG9yIGd6aXAgc3RyZWFtIGFuZCByYW5kb21seSBhY2Nlc3MgaXQKKyAgICAtIGlsbHVzdHJhdGVzIHRoZSB1c2Ugb2YgWl9CTE9DSywgaW5mbGF0ZVByaW1lKCksIGFuZAorICAgICAgaW5mbGF0ZVNldERpY3Rpb25hcnkoKSB0byBwcm92aWRlIHJhbmRvbSBhY2Nlc3MKZGlmZiAtLWdpdCBhL3NyYy9leGFtcGxlcy9lbm91Z2guYyBiL3NyYy9leGFtcGxlcy9lbm91Z2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWNmMDhjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2V4YW1wbGVzL2Vub3VnaC5jCkBAIC0wLDAgKzEsNTk3IEBACisvKiBlbm91Z2guYyAtLSBkZXRlcm1pbmUgdGhlIG1heGltdW0gc2l6ZSBvZiBpbmZsYXRlJ3MgSHVmZm1hbiBjb2RlIHRhYmxlcyBvdmVyCisgKiBhbGwgcG9zc2libGUgdmFsaWQgYW5kIGNvbXBsZXRlIHByZWZpeCBjb2Rlcywgc3ViamVjdCB0byBhIGxlbmd0aCBsaW1pdC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMiwgMjAxOCBNYXJrIEFkbGVyCisgKiBWZXJzaW9uIDEuNSAgNSBBdWd1c3QgMjAxOCAgTWFyayBBZGxlcgorICovCisKKy8qIFZlcnNpb24gaGlzdG9yeToKKyAgIDEuMCAgIDMgSmFuIDIwMDcgIEZpcnN0IHZlcnNpb24gKGRlcml2ZWQgZnJvbSBjb2RlY291bnQuYyB2ZXJzaW9uIDEuNCkKKyAgIDEuMSAgIDQgSmFuIDIwMDcgIFVzZSBmYXN0ZXIgaW5jcmVtZW50YWwgdGFibGUgdXNhZ2UgY29tcHV0YXRpb24KKyAgICAgICAgICAgICAgICAgICAgIFBydW5lIGV4YW1pbmUoKSBzZWFyY2ggb24gcHJldmlvdXNseSB2aXNpdGVkIHN0YXRlcworICAgMS4yICAgNSBKYW4gMjAwNyAgQ29tbWVudHMgY2xlYW4gdXAKKyAgICAgICAgICAgICAgICAgICAgIEFzIGluZmxhdGUgZG9lcywgZGVjcmVhc2Ugcm9vdCBmb3Igc2hvcnQgY29kZXMKKyAgICAgICAgICAgICAgICAgICAgIFJlZnVzZSBjYXNlcyB3aGVyZSBpbmZsYXRlIHdvdWxkIGluY3JlYXNlIHJvb3QKKyAgIDEuMyAgMTcgRmViIDIwMDggIEFkZCBhcmd1bWVudCBmb3IgaW5pdGlhbCByb290IHRhYmxlIHNpemUKKyAgICAgICAgICAgICAgICAgICAgIEZpeCBidWcgZm9yIGluaXRpYWwgcm9vdCB0YWJsZSBzaXplID09IG1heCAtIDEKKyAgICAgICAgICAgICAgICAgICAgIFVzZSBhIG1hY3JvIHRvIGNvbXB1dGUgdGhlIGhpc3RvcnkgaW5kZXgKKyAgIDEuNCAgMTggQXVnIDIwMTIgIEF2b2lkIHNoaWZ0cyBtb3JlIHRoYW4gYml0cyBpbiB0eXBlIChjYXVzZWQgZW5kbGVzcyBsb29wISkKKyAgICAgICAgICAgICAgICAgICAgIENsZWFuIHVwIGNvbXBhcmlzb25zIG9mIGRpZmZlcmVudCB0eXBlcworICAgICAgICAgICAgICAgICAgICAgQ2xlYW4gdXAgY29kZSBpbmRlbnRhdGlvbgorICAgMS41ICAgNSBBdWcgMjAxOCAgQ2xlYW4gdXAgY29kZSBzdHlsZSwgZm9ybWF0dGluZywgYW5kIGNvbW1lbnRzCisgICAgICAgICAgICAgICAgICAgICBTaG93IGFsbCB0aGUgY29kZXMgZm9yIHRoZSBtYXhpbXVtLCBhbmQgb25seSB0aGUgbWF4aW11bQorICovCisKKy8qCisgICBFeGFtaW5lIGFsbCBwb3NzaWJsZSBwcmVmaXggY29kZXMgZm9yIGEgZ2l2ZW4gbnVtYmVyIG9mIHN5bWJvbHMgYW5kIGEKKyAgIG1heGltdW0gY29kZSBsZW5ndGggaW4gYml0cyB0byBkZXRlcm1pbmUgdGhlIG1heGltdW0gdGFibGUgc2l6ZSBmb3IgemxpYidzCisgICBpbmZsYXRlLiBPbmx5IGNvbXBsZXRlIHByZWZpeCBjb2RlcyBhcmUgY291bnRlZC4KKworICAgVHdvIGNvZGVzIGFyZSBjb25zaWRlcmVkIGRpc3RpbmN0IGlmIHRoZSB2ZWN0b3JzIG9mIHRoZSBudW1iZXIgb2YgY29kZXMgcGVyCisgICBsZW5ndGggYXJlIG5vdCBpZGVudGljYWwuIFNvIHBlcm11dGF0aW9ucyBvZiB0aGUgc3ltYm9sIGFzc2lnbm1lbnRzIHJlc3VsdAorICAgaW4gdGhlIHNhbWUgY29kZSBmb3IgdGhlIGNvdW50aW5nLCBhcyBkbyBwZXJtdXRhdGlvbnMgb2YgdGhlIGFzc2lnbm1lbnRzIG9mCisgICB0aGUgYml0IHZhbHVlcyB0byB0aGUgY29kZXMgKGkuZS4gb25seSBjYW5vbmljYWwgY29kZXMgYXJlIGNvdW50ZWQpLgorCisgICBXZSBidWlsZCBhIGNvZGUgZnJvbSBzaG9ydGVyIHRvIGxvbmdlciBsZW5ndGhzLCBkZXRlcm1pbmluZyBob3cgbWFueSBzeW1ib2xzCisgICBhcmUgY29kZWQgYXQgZWFjaCBsZW5ndGguIEF0IGVhY2ggc3RlcCwgd2UgaGF2ZSBob3cgbWFueSBzeW1ib2xzIHJlbWFpbiB0bworICAgYmUgY29kZWQsIHdoYXQgdGhlIGxhc3QgY29kZSBsZW5ndGggdXNlZCB3YXMsIGFuZCBob3cgbWFueSBiaXQgcGF0dGVybnMgb2YKKyAgIHRoYXQgbGVuZ3RoIHJlbWFpbiB1bnVzZWQuIFRoZW4gd2UgYWRkIG9uZSB0byB0aGUgY29kZSBsZW5ndGggYW5kIGRvdWJsZSB0aGUKKyAgIG51bWJlciBvZiB1bnVzZWQgcGF0dGVybnMgdG8gZ3JhZHVhdGUgdG8gdGhlIG5leHQgY29kZSBsZW5ndGguIFdlIHRoZW4KKyAgIGFzc2lnbiBhbGwgcG9ydGlvbnMgb2YgdGhlIHJlbWFpbmluZyBzeW1ib2xzIHRvIHRoYXQgY29kZSBsZW5ndGggdGhhdAorICAgcHJlc2VydmUgdGhlIHByb3BlcnRpZXMgb2YgYSBjb3JyZWN0IGFuZCBldmVudHVhbGx5IGNvbXBsZXRlIGNvZGUuIFRob3NlCisgICBwcm9wZXJ0aWVzIGFyZTogd2UgY2Fubm90IHVzZSBtb3JlIGJpdCBwYXR0ZXJucyB0aGFuIGFyZSBhdmFpbGFibGU7IGFuZCB3aGVuCisgICBhbGwgdGhlIHN5bWJvbHMgYXJlIHVzZWQsIHRoZXJlIGFyZSBleGFjdGx5IHplcm8gcG9zc2libGUgYml0IHBhdHRlcm5zIGxlZnQKKyAgIHVudXNlZC4KKworICAgVGhlIGluZmxhdGUgSHVmZm1hbiBkZWNvZGluZyBhbGdvcml0aG0gdXNlcyB0d28tbGV2ZWwgbG9va3VwIHRhYmxlcyBmb3IKKyAgIHNwZWVkLiBUaGVyZSBpcyBhIHNpbmdsZSBmaXJzdC1sZXZlbCB0YWJsZSB0byBkZWNvZGUgY29kZXMgdXAgdG8gcm9vdCBiaXRzCisgICBpbiBsZW5ndGggKHJvb3QgPT0gOSBmb3IgbGl0ZXJhbC9sZW5ndGggY29kZXMgYW5kIHJvb3QgPT0gNiBmb3IgZGlzdGFuY2UKKyAgIGNvZGVzLCBpbiB0aGUgY3VycmVudCBpbmZsYXRlIGltcGxlbWVudGF0aW9uKS4gVGhlIGJhc2UgdGFibGUgaGFzIDEgPDwgcm9vdAorICAgZW50cmllcyBhbmQgaXMgaW5kZXhlZCBieSB0aGUgbmV4dCByb290IGJpdHMgb2YgaW5wdXQuIENvZGVzIHNob3J0ZXIgdGhhbgorICAgcm9vdCBiaXRzIGhhdmUgcmVwbGljYXRlZCB0YWJsZSBlbnRyaWVzLCBzbyB0aGF0IHRoZSBjb3JyZWN0IGVudHJ5IGlzCisgICBwb2ludGVkIHRvIHJlZ2FyZGxlc3Mgb2YgdGhlIGJpdHMgdGhhdCBmb2xsb3cgdGhlIHNob3J0IGNvZGUuIElmIHRoZSBjb2RlIGlzCisgICBsb25nZXIgdGhhbiByb290IGJpdHMsIHRoZW4gdGhlIHRhYmxlIGVudHJ5IHBvaW50cyB0byBhIHNlY29uZC1sZXZlbCB0YWJsZS4KKyAgIFRoZSBzaXplIG9mIHRoYXQgdGFibGUgaXMgZGV0ZXJtaW5lZCBieSB0aGUgbG9uZ2VzdCBjb2RlIHdpdGggdGhhdCByb290LWJpdAorICAgcHJlZml4LiBJZiB0aGF0IGxvbmdlc3QgY29kZSBoYXMgbGVuZ3RoIGxlbiwgdGhlbiB0aGUgdGFibGUgaGFzIHNpemUgMSA8PAorICAgKGxlbiAtIHJvb3QpLCB0byBpbmRleCB0aGUgcmVtYWluaW5nIGJpdHMgaW4gdGhhdCBzZXQgb2YgY29kZXMuIEVhY2gKKyAgIHN1YnNlcXVlbnQgcm9vdC1iaXQgcHJlZml4IHRoZW4gaGFzIGl0cyBvd24gc3ViLXRhYmxlLiBUaGUgdG90YWwgbnVtYmVyIG9mCisgICB0YWJsZSBlbnRyaWVzIHJlcXVpcmVkIGJ5IHRoZSBjb2RlIGlzIGNhbGN1bGF0ZWQgaW5jcmVtZW50YWxseSBhcyB0aGUgbnVtYmVyCisgICBvZiBjb2RlcyBhdCBlYWNoIGJpdCBsZW5ndGggaXMgcG9wdWxhdGVkLiBXaGVuIGFsbCBvZiB0aGUgY29kZXMgYXJlIHNob3J0ZXIKKyAgIHRoYW4gcm9vdCBiaXRzLCB0aGVuIHJvb3QgaXMgcmVkdWNlZCB0byB0aGUgbG9uZ2VzdCBjb2RlIGxlbmd0aCwgcmVzdWx0aW5nCisgICBpbiBhIHNpbmdsZSwgc21hbGxlciwgb25lLWxldmVsIHRhYmxlLgorCisgICBUaGUgaW5mbGF0ZSBhbGdvcml0aG0gYWxzbyBwcm92aWRlcyBmb3Igc21hbGwgdmFsdWVzIG9mIHJvb3QgKHJlbGF0aXZlIHRvCisgICB0aGUgbG9nMiBvZiB0aGUgbnVtYmVyIG9mIHN5bWJvbHMpLCB3aGVyZSB0aGUgc2hvcnRlc3QgY29kZSBoYXMgbW9yZSBiaXRzCisgICB0aGFuIHJvb3QuIEluIHRoYXQgY2FzZSwgcm9vdCBpcyBpbmNyZWFzZWQgdG8gdGhlIGxlbmd0aCBvZiB0aGUgc2hvcnRlc3QKKyAgIGNvZGUuIFRoaXMgcHJvZ3JhbSwgYnkgZGVzaWduLCBkb2VzIG5vdCBoYW5kbGUgdGhhdCBjYXNlLCBzbyBpdCBpcyB2ZXJpZmllZAorICAgdGhhdCB0aGUgbnVtYmVyIG9mIHN5bWJvbHMgaXMgbGVzcyB0aGFuIDEgPDwgKHJvb3QgKyAxKS4KKworICAgSW4gb3JkZXIgdG8gc3BlZWQgdXAgdGhlIGV4YW1pbmF0aW9uIChieSBhYm91dCB0ZW4gb3JkZXJzIG9mIG1hZ25pdHVkZSBmb3IKKyAgIHRoZSBkZWZhdWx0IGFyZ3VtZW50cyksIHRoZSBpbnRlcm1lZGlhdGUgc3RhdGVzIGluIHRoZSBidWlsZC11cCBvZiBhIGNvZGUKKyAgIGFyZSByZW1lbWJlcmVkIGFuZCBwcmV2aW91c2x5IHZpc2l0ZWQgYnJhbmNoZXMgYXJlIHBydW5lZC4gVGhlIG1lbW9yeQorICAgcmVxdWlyZWQgZm9yIHRoaXMgd2lsbCBpbmNyZWFzZSByYXBpZGx5IHdpdGggdGhlIHRvdGFsIG51bWJlciBvZiBzeW1ib2xzIGFuZAorICAgdGhlIG1heGltdW0gY29kZSBsZW5ndGggaW4gYml0cy4gSG93ZXZlciB0aGlzIGlzIGEgdmVyeSBzbWFsbCBwcmljZSB0byBwYXkKKyAgIGZvciB0aGUgdmFzdCBzcGVlZHVwLgorCisgICBGaXJzdCwgYWxsIG9mIHRoZSBwb3NzaWJsZSBwcmVmaXggY29kZXMgYXJlIGNvdW50ZWQsIGFuZCByZWFjaGFibGUKKyAgIGludGVybWVkaWF0ZSBzdGF0ZXMgYXJlIG5vdGVkIGJ5IGEgbm9uLXplcm8gY291bnQgaW4gYSBzYXZlZC1yZXN1bHRzIGFycmF5LgorICAgU2Vjb25kLCB0aGUgaW50ZXJtZWRpYXRlIHN0YXRlcyB0aGF0IGxlYWQgdG8gKHJvb3QgKyAxKSBiaXQgb3IgbG9uZ2VyIGNvZGVzCisgICBhcmUgdXNlZCB0byBsb29rIGF0IGFsbCBzdWItY29kZXMgZnJvbSB0aG9zZSBqdW5jdHVyZXMgZm9yIHRoZWlyIGluZmxhdGUKKyAgIG1lbW9yeSB1c2FnZS4gKFRoZSBhbW91bnQgb2YgbWVtb3J5IHVzZWQgaXMgbm90IGFmZmVjdGVkIGJ5IHRoZSBudW1iZXIgb2YKKyAgIGNvZGVzIG9mIHJvb3QgYml0cyBvciBsZXNzIGluIGxlbmd0aC4pICBUaGlyZCwgdGhlIHZpc2l0ZWQgc3RhdGVzIGluIHRoZQorICAgY29uc3RydWN0aW9uIG9mIHRob3NlIHN1Yi1jb2RlcyBhbmQgdGhlIGFzc29jaWF0ZWQgY2FsY3VsYXRpb24gb2YgdGhlIHRhYmxlCisgICBzaXplIGlzIHJlY2FsbGVkIGluIG9yZGVyIHRvIGF2b2lkIHJlY2FsY3VsYXRpbmcgZnJvbSB0aGUgc2FtZSBqdW5jdHVyZS4KKyAgIEJlZ2lubmluZyB0aGUgY29kZSBleGFtaW5hdGlvbiBhdCAocm9vdCArIDEpIGJpdCBjb2Rlcywgd2hpY2ggaXMgZW5hYmxlZCBieQorICAgaWRlbnRpZnlpbmcgdGhlIHJlYWNoYWJsZSBub2RlcywgYWNjb3VudHMgZm9yIGFib3V0IHNpeCBvZiB0aGUgb3JkZXJzIG9mCisgICBtYWduaXR1ZGUgb2YgaW1wcm92ZW1lbnQgZm9yIHRoZSBkZWZhdWx0IGFyZ3VtZW50cy4gQWJvdXQgYW5vdGhlciBmb3VyCisgICBvcmRlcnMgb2YgbWFnbml0dWRlIGNvbWUgZnJvbSBub3QgcmV2aXNpdGluZyBwcmV2aW91cyBzdGF0ZXMuIE91dCBvZgorICAgYXBwcm94aW1hdGVseSAyeDEwXjE2IHBvc3NpYmxlIHByZWZpeCBjb2Rlcywgb25seSBhYm91dCAyeDEwXjYgc3ViLWNvZGVzCisgICBuZWVkIHRvIGJlIGV4YW1pbmVkIHRvIGNvdmVyIGFsbCBvZiB0aGUgcG9zc2libGUgdGFibGUgbWVtb3J5IHVzYWdlIGNhc2VzCisgICBmb3IgdGhlIGRlZmF1bHQgYXJndW1lbnRzIG9mIDI4NiBzeW1ib2xzIGxpbWl0ZWQgdG8gMTUtYml0IGNvZGVzLgorCisgICBOb3RlIHRoYXQgdGhlIHVpbnRtYXhfdCB0eXBlIGlzIHVzZWQgZm9yIGNvdW50aW5nLiBJdCBpcyBxdWl0ZSBlYXN5IHRvCisgICBleGNlZWQgdGhlIGNhcGFjaXR5IG9mIGFuIGVpZ2h0LWJ5dGUgaW50ZWdlciB3aXRoIGEgbGFyZ2UgbnVtYmVyIG9mIHN5bWJvbHMKKyAgIGFuZCBhIGxhcmdlIG1heGltdW0gY29kZSBsZW5ndGgsIHNvIG11bHRpcGxlLXByZWNpc2lvbiBhcml0aG1ldGljIHdvdWxkIG5lZWQKKyAgIHRvIHJlcGxhY2UgdGhlIGludGVnZXIgYXJpdGhtZXRpYyBpbiB0aGF0IGNhc2UuIFRoaXMgcHJvZ3JhbSB3aWxsIGFib3J0IGlmCisgICBhbiBvdmVyZmxvdyBvY2N1cnMuIFRoZSBiaWdfdCB0eXBlIGlkZW50aWZpZXMgd2hlcmUgdGhlIGNvdW50aW5nIHRha2VzCisgICBwbGFjZS4KKworICAgVGhlIHVpbnRtYXhfdCB0eXBlIGlzIGFsc28gdXNlZCBmb3IgY2FsY3VsYXRpbmcgdGhlIG51bWJlciBvZiBwb3NzaWJsZSBjb2RlcworICAgcmVtYWluaW5nIGF0IHRoZSBtYXhpbXVtIGxlbmd0aC4gVGhpcyBsaW1pdHMgdGhlIG1heGltdW0gY29kZSBsZW5ndGggdG8gdGhlCisgICBudW1iZXIgb2YgYml0cyBpbiBhIGxvbmcgbG9uZyBtaW51cyB0aGUgbnVtYmVyIG9mIGJpdHMgbmVlZGVkIHRvIHJlcHJlc2VudAorICAgdGhlIHN5bWJvbHMgaW4gYSBmbGF0IGNvZGUuIFRoZSBjb2RlX3QgdHlwZSBpZGVudGlmaWVzIHdoZXJlIHRoZSBiaXQtcGF0dGVybgorICAgY291bnRpbmcgdGFrZXMgcGxhY2UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKyNkZWZpbmUgbG9jYWwgc3RhdGljCisKKy8vIFNwZWNpYWwgZGF0YSB0eXBlcy4KK3R5cGVkZWYgdWludG1heF90IGJpZ190OyAgICAvLyB0eXBlIGZvciBjb2RlIGNvdW50aW5nCisjZGVmaW5lIFBSSWJpZyAianUiICAgICAgICAgLy8gcHJpbnRmIGZvcm1hdCBmb3IgYmlnX3QKK3R5cGVkZWYgdWludG1heF90IGNvZGVfdDsgICAvLyB0eXBlIGZvciBiaXQgcGF0dGVybiBjb3VudGluZworc3RydWN0IHRhYiB7ICAgICAgICAgICAgICAgIC8vIHR5cGUgZm9yIGJlZW4taGVyZSBjaGVjaworICAgIHNpemVfdCBsZW47ICAgICAgICAgICAgIC8vIGFsbG9jYXRlZCBsZW5ndGggb2YgYml0IHZlY3RvciBpbiBvY3RldHMKKyAgICBjaGFyICp2ZWM7ICAgICAgICAgICAgICAvLyBhbGxvY2F0ZWQgYml0IHZlY3RvcgorfTsKKworLyogVGhlIGFycmF5IGZvciBzYXZpbmcgcmVzdWx0cywgbnVtW10sIGlzIGluZGV4ZWQgd2l0aCB0aGlzIHRyaXBsZXQ6CisKKyAgICAgIHN5bXM6IG51bWJlciBvZiBzeW1ib2xzIHJlbWFpbmluZyB0byBjb2RlCisgICAgICBsZWZ0OiBudW1iZXIgb2YgYXZhaWxhYmxlIGJpdCBwYXR0ZXJucyBhdCBsZW5ndGggbGVuCisgICAgICBsZW46IG51bWJlciBvZiBiaXRzIGluIHRoZSBjb2RlcyBjdXJyZW50bHkgYmVpbmcgYXNzaWduZWQKKworICAgVGhvc2UgaW5kaWNlcyBhcmUgY29uc3RyYWluZWQgdGh1c2x5IHdoZW4gc2F2aW5nIHJlc3VsdHM6CisKKyAgICAgIHN5bXM6IDMuLnRvdHN5bSAodG90c3ltID09IHRvdGFsIHN5bWJvbHMgdG8gY29kZSkKKyAgICAgIGxlZnQ6IDIuLnN5bXMgLSAxLCBidXQgb25seSB0aGUgZXZlbnMgKHNvIHN5bXMgPT0gOCAtPiAyLCA0LCA2KQorICAgICAgbGVuOiAxLi5tYXggLSAxIChtYXggPT0gbWF4aW11bSBjb2RlIGxlbmd0aCBpbiBiaXRzKQorCisgICBzeW1zID09IDIgaXMgbm90IHNhdmVkIHNpbmNlIHRoYXQgaW1tZWRpYXRlbHkgbGVhZHMgdG8gYSBzaW5nbGUgY29kZS4gbGVmdAorICAgbXVzdCBiZSBldmVuLCBzaW5jZSBpdCByZXByZXNlbnRzIHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIGJpdCBwYXR0ZXJucyBhdAorICAgdGhlIGN1cnJlbnQgbGVuZ3RoLCB3aGljaCBpcyBkb3VibGUgdGhlIG51bWJlciBhdCB0aGUgcHJldmlvdXMgbGVuZ3RoLiBsZWZ0CisgICBlbmRzIGF0IHN5bXMtMSBzaW5jZSBsZWZ0ID09IHN5bXMgaW1tZWRpYXRlbHkgcmVzdWx0cyBpbiBhIHNpbmdsZSBjb2RlLgorICAgKGxlZnQgPiBzeW0gaXMgbm90IGFsbG93ZWQgc2luY2UgdGhhdCB3b3VsZCByZXN1bHQgaW4gYW4gaW5jb21wbGV0ZSBjb2RlLikKKyAgIGxlbiBpcyBsZXNzIHRoYW4gbWF4LCBzaW5jZSB0aGUgY29kZSBjb21wbGV0ZXMgaW1tZWRpYXRlbHkgd2hlbiBsZW4gPT0gbWF4LgorCisgICBUaGUgb2Zmc2V0IGludG8gdGhlIGFycmF5IGlzIGNhbGN1bGF0ZWQgZm9yIHRoZSB0aHJlZSBpbmRpY2VzIHdpdGggdGhlIGZpcnN0CisgICBvbmUgKHN5bXMpIGJlaW5nIG91dGVybW9zdCwgYW5kIHRoZSBsYXN0IG9uZSAobGVuKSBiZWluZyBpbm5lcm1vc3QuIFdlIGJ1aWxkCisgICB0aGUgYXJyYXkgd2l0aCBsZW5ndGggbWF4LTEgbGlzdHMgZm9yIHRoZSBsZW4gaW5kZXgsIHdpdGggc3ltcy0zIG9mIHRob3NlCisgICBmb3IgZWFjaCBzeW1ib2wuIFRoZXJlIGFyZSB0b3RzeW0tMiBvZiB0aG9zZSwgd2l0aCBlYWNoIG9uZSB2YXJ5aW5nIGluCisgICBsZW5ndGggYXMgYSBmdW5jdGlvbiBvZiBzeW0uIFNlZSB0aGUgY2FsY3VsYXRpb24gb2YgaW5kZXggaW4gbWFwKCkgZm9yIHRoZQorICAgaW5kZXgsIGFuZCB0aGUgY2FsY3VsYXRpb24gb2Ygc2l6ZSBpbiBtYWluKCkgZm9yIHRoZSBzaXplIG9mIHRoZSBhcnJheS4KKworICAgRm9yIHRoZSBkZWZsYXRlIGV4YW1wbGUgb2YgMjg2IHN5bWJvbHMgbGltaXRlZCB0byAxNS1iaXQgY29kZXMsIHRoZSBhcnJheQorICAgaGFzIDI4NCwyODQgZW50cmllcywgdGFraW5nIHVwIDIuMTcgTUIgZm9yIGFuIDgtYnl0ZSBiaWdfdC4gTW9yZSB0aGFuIGhhbGYKKyAgIG9mIHRoZSBzcGFjZSBhbGxvY2F0ZWQgZm9yIHNhdmVkIHJlc3VsdHMgaXMgYWN0dWFsbHkgdXNlZCAtLSBub3QgYWxsCisgICBwb3NzaWJsZSB0cmlwbGV0cyBhcmUgcmVhY2hlZCBpbiB0aGUgZ2VuZXJhdGlvbiBvZiB2YWxpZCBwcmVmaXggY29kZXMuCisgKi8KKworLyogVGhlIGFycmF5IGZvciB0cmFja2luZyB2aXNpdGVkIHN0YXRlcywgZG9uZVtdLCBpcyBpdHNlbGYgaW5kZXhlZCBpZGVudGljYWxseQorICAgdG8gdGhlIG51bVtdIGFycmF5IGFzIGRlc2NyaWJlZCBhYm92ZSBmb3IgdGhlIChzeW1zLCBsZWZ0LCBsZW4pIHRyaXBsZXQuCisgICBFYWNoIGVsZW1lbnQgaW4gdGhlIGFycmF5IGlzIGZ1cnRoZXIgaW5kZXhlZCBieSB0aGUgKG1lbSwgcmVtKSBkb3VibGV0LAorICAgd2hlcmUgbWVtIGlzIHRoZSBhbW91bnQgb2YgaW5mbGF0ZSB0YWJsZSBzcGFjZSB1c2VkIHNvIGZhciwgYW5kIHJlbSBpcyB0aGUKKyAgIHJlbWFpbmluZyB1bnVzZWQgZW50cmllcyBpbiB0aGUgY3VycmVudCBpbmZsYXRlIHN1Yi10YWJsZS4gRWFjaCBpbmRleGVkCisgICBlbGVtZW50IGlzIHNpbXBseSBvbmUgYml0IGluZGljYXRpbmcgd2hldGhlciB0aGUgc3RhdGUgaGFzIGJlZW4gdmlzaXRlZCBvcgorICAgbm90LiBTaW5jZSB0aGUgcmFuZ2VzIGZvciBtZW0gYW5kIHJlbSBhcmUgbm90IGtub3duIGEgcHJpb3JpLCBlYWNoIGJpdAorICAgdmVjdG9yIGlzIG9mIGEgdmFyaWFibGUgc2l6ZSwgYW5kIGdyb3dzIGFzIG5lZWRlZCB0byBhY2NvbW1vZGF0ZSB0aGUgdmlzaXRlZAorICAgc3RhdGVzLiBtZW0gYW5kIHJlbSBhcmUgdXNlZCB0byBjYWxjdWxhdGUgYSBzaW5nbGUgaW5kZXggaW4gYSB0cmlhbmd1bGFyCisgICBhcnJheS4gU2luY2UgdGhlIHJhbmdlIG9mIG1lbSBpcyBleHBlY3RlZCBpbiB0aGUgZGVmYXVsdCBjYXNlIHRvIGJlIGFib3V0CisgICB0ZW4gdGltZXMgbGFyZ2VyIHRoYW4gdGhlIHJhbmdlIG9mIHJlbSwgdGhlIGFycmF5IGlzIHNrZXdlZCB0byByZWR1Y2UgdGhlCisgICBtZW1vcnkgdXNhZ2UsIHdpdGggZWlnaHQgdGltZXMgdGhlIHJhbmdlIGZvciBtZW0gdGhhbiBmb3IgcmVtLiBTZWUgdGhlCisgICBjYWxjdWxhdGlvbnMgZm9yIG9mZnNldCBhbmQgYml0IGluIGJlZW5faGVyZSgpIGZvciB0aGUgZGV0YWlscy4KKworICAgRm9yIHRoZSBkZWZsYXRlIGV4YW1wbGUgb2YgMjg2IHN5bWJvbHMgbGltaXRlZCB0byAxNS1iaXQgY29kZXMsIHRoZSBiaXQKKyAgIHZlY3RvcnMgZ3JvdyB0byB0b3RhbCA1LjUgTUIsIGluIGFkZGl0aW9uIHRvIHRoZSA0LjMgTUIgZG9uZSBhcnJheSBpdHNlbGYuCisgKi8KKworLy8gVHlwZSBmb3IgYSB2YXJpYWJsZS1sZW5ndGgsIGFsbG9jYXRlZCBzdHJpbmcuCit0eXBlZGVmIHN0cnVjdCB7CisgICAgY2hhciAqc3RyOyAgICAgICAgICAvLyBwb2ludGVyIHRvIGFsbG9jYXRlZCBzdHJpbmcKKyAgICBzaXplX3Qgc2l6ZTsgICAgICAgIC8vIHNpemUgb2YgYWxsb2NhdGlvbgorICAgIHNpemVfdCBsZW47ICAgICAgICAgLy8gbGVuZ3RoIG9mIHN0cmluZywgbm90IGluY2x1ZGluZyB0ZXJtaW5hdGluZyB6ZXJvCit9IHN0cmluZ190OworCisvLyBDbGVhciBhIHN0cmluZ190LgorbG9jYWwgdm9pZCBzdHJpbmdfY2xlYXIoc3RyaW5nX3QgKnMpIHsKKyAgICBzLT5zdHJbMF0gPSAwOworICAgIHMtPmxlbiA9IDA7Cit9CisKKy8vIEluaXRpYWxpemUgYSBzdHJpbmdfdC4KK2xvY2FsIHZvaWQgc3RyaW5nX2luaXQoc3RyaW5nX3QgKnMpIHsKKyAgICBzLT5zaXplID0gMTY7CisgICAgcy0+c3RyID0gbWFsbG9jKHMtPnNpemUpOworICAgIGFzc2VydChzLT5zdHIgIT0gTlVMTCAmJiAib3V0IG9mIG1lbW9yeSIpOworICAgIHN0cmluZ19jbGVhcihzKTsKK30KKworLy8gUmVsZWFzZSB0aGUgYWxsb2NhdGlvbiBvZiBhIHN0cmluZ190LgorbG9jYWwgdm9pZCBzdHJpbmdfZnJlZShzdHJpbmdfdCAqcykgeworICAgIGZyZWUocy0+c3RyKTsKKyAgICBzLT5zdHIgPSBOVUxMOworICAgIHMtPnNpemUgPSAwOworICAgIHMtPmxlbiA9IDA7Cit9CisKKy8vIFNhdmUgdGhlIHJlc3VsdHMgb2YgcHJpbnRmIHdpdGggZm10IGFuZCB0aGUgc3Vic2VxdWVudCBhcmd1bWVudCBsaXN0IHRvIHMuCisvLyBFYWNoIGNhbGwgYXBwZW5kcyB0byBzLiBUaGUgYWxsb2NhdGVkIHNwYWNlIGZvciBzIGlzIGluY3JlYXNlZCBhcyBuZWVkZWQuCitsb2NhbCB2b2lkIHN0cmluZ19wcmludGYoc3RyaW5nX3QgKnMsIGNoYXIgKmZtdCwgLi4uKSB7CisgICAgdmFfbGlzdCBhcDsKKyAgICB2YV9zdGFydChhcCwgZm10KTsKKyAgICBzaXplX3QgbGVuID0gcy0+bGVuOworICAgIGludCByZXQgPSB2c25wcmludGYocy0+c3RyICsgbGVuLCBzLT5zaXplIC0gbGVuLCBmbXQsIGFwKTsKKyAgICBhc3NlcnQocmV0ID49IDAgJiYgIm91dCBvZiBtZW1vcnkiKTsKKyAgICBzLT5sZW4gKz0gcmV0OworICAgIGlmIChzLT5zaXplIDwgcy0+bGVuICsgMSkgeworICAgICAgICBkbyB7CisgICAgICAgICAgICBzLT5zaXplIDw8PSAxOworICAgICAgICAgICAgYXNzZXJ0KHMtPnNpemUgIT0gMCAmJiAib3ZlcmZsb3ciKTsKKyAgICAgICAgfSB3aGlsZSAocy0+c2l6ZSA8IHMtPmxlbiArIDEpOworICAgICAgICBzLT5zdHIgPSByZWFsbG9jKHMtPnN0ciwgcy0+c2l6ZSk7CisgICAgICAgIGFzc2VydChzLT5zdHIgIT0gTlVMTCAmJiAib3V0IG9mIG1lbW9yeSIpOworICAgICAgICB2c25wcmludGYocy0+c3RyICsgbGVuLCBzLT5zaXplIC0gbGVuLCBmbXQsIGFwKTsKKyAgICB9CisgICAgdmFfZW5kKGFwKTsKK30KKworLy8gR2xvYmFscyB0byBhdm9pZCBwcm9wYWdhdGluZyBjb25zdGFudHMgb3IgY29uc3RhbnQgcG9pbnRlcnMgcmVjdXJzaXZlbHkuCitzdHJ1Y3QgeworICAgIGludCBtYXg7ICAgICAgICAgICAgLy8gbWF4aW11bSBhbGxvd2VkIGJpdCBsZW5ndGggZm9yIHRoZSBjb2RlcworICAgIGludCByb290OyAgICAgICAgICAgLy8gc2l6ZSBvZiBiYXNlIGNvZGUgdGFibGUgaW4gYml0cworICAgIGludCBsYXJnZTsgICAgICAgICAgLy8gbGFyZ2VzdCBjb2RlIHRhYmxlIHNvIGZhcgorICAgIHNpemVfdCBzaXplOyAgICAgICAgLy8gbnVtYmVyIG9mIGVsZW1lbnRzIGluIG51bSBhbmQgZG9uZQorICAgIGJpZ190IHRvdDsgICAgICAgICAgLy8gdG90YWwgbnVtYmVyIG9mIGNvZGVzIHdpdGggbWF4aW11bSB0YWJsZXMgc2l6ZQorICAgIHN0cmluZ190IG91dDsgICAgICAgLy8gZGlzcGxheSBvZiBzdWJjb2RlcyBmb3IgbWF4aW11bSB0YWJsZXMgc2l6ZQorICAgIGludCAqY29kZTsgICAgICAgICAgLy8gbnVtYmVyIG9mIHN5bWJvbHMgYXNzaWduZWQgdG8gZWFjaCBiaXQgbGVuZ3RoCisgICAgYmlnX3QgKm51bTsgICAgICAgICAvLyBzYXZlZCByZXN1bHRzIGFycmF5IGZvciBjb2RlIGNvdW50aW5nCisgICAgc3RydWN0IHRhYiAqZG9uZTsgICAvLyBzdGF0ZXMgYWxyZWFkeSBldmFsdWF0ZWQgYXJyYXkKK30gZzsKKworLy8gSW5kZXggZnVuY3Rpb24gZm9yIG51bVtdIGFuZCBkb25lW10uCitsb2NhbCBpbmxpbmUgc2l6ZV90IG1hcChpbnQgc3ltcywgaW50IGxlZnQsIGludCBsZW4pIHsKKyAgICByZXR1cm4gKChzaXplX3QpKChzeW1zIC0gMSkgPj4gMSkgKiAoKHN5bXMgLSAyKSA+PiAxKSArCisgICAgICAgICAgICAobGVmdCA+PiAxKSAtIDEpICogKGcubWF4IC0gMSkgKworICAgICAgICAgICBsZW4gLSAxOworfQorCisvLyBGcmVlIGFsbG9jYXRlZCBzcGFjZSBpbiBnbG9iYWxzLgorbG9jYWwgdm9pZCBjbGVhbnVwKHZvaWQpIHsKKyAgICBpZiAoZy5kb25lICE9IE5VTEwpIHsKKyAgICAgICAgZm9yIChzaXplX3QgbiA9IDA7IG4gPCBnLnNpemU7IG4rKykKKyAgICAgICAgICAgIGlmIChnLmRvbmVbbl0ubGVuKQorICAgICAgICAgICAgICAgIGZyZWUoZy5kb25lW25dLnZlYyk7CisgICAgICAgIGcuc2l6ZSA9IDA7CisgICAgICAgIGZyZWUoZy5kb25lKTsgICBnLmRvbmUgPSBOVUxMOworICAgIH0KKyAgICBmcmVlKGcubnVtKTsgICAgZy5udW0gPSBOVUxMOworICAgIGZyZWUoZy5jb2RlKTsgICBnLmNvZGUgPSBOVUxMOworICAgIHN0cmluZ19mcmVlKCZnLm91dCk7Cit9CisKKy8vIFJldHVybiB0aGUgbnVtYmVyIG9mIHBvc3NpYmxlIHByZWZpeCBjb2RlcyB1c2luZyBiaXQgcGF0dGVybnMgb2YgbGVuZ3RocyBsZW4KKy8vIHRocm91Z2ggbWF4IGluY2x1c2l2ZSwgY29kaW5nIHN5bXMgc3ltYm9scywgd2l0aCBsZWZ0IGJpdCBwYXR0ZXJucyBvZiBsZW5ndGgKKy8vIGxlbiB1bnVzZWQgLS0gcmV0dXJuIC0xIGlmIHRoZXJlIGlzIGFuIG92ZXJmbG93IGluIHRoZSBjb3VudGluZy4gS2VlcCBhCisvLyByZWNvcmQgb2YgcHJldmlvdXMgcmVzdWx0cyBpbiBudW0gdG8gcHJldmVudCByZXBlYXRpbmcgdGhlIHNhbWUgY2FsY3VsYXRpb24uCitsb2NhbCBiaWdfdCBjb3VudChpbnQgc3ltcywgaW50IGxlZnQsIGludCBsZW4pIHsKKyAgICAvLyBzZWUgaWYgb25seSBvbmUgcG9zc2libGUgY29kZQorICAgIGlmIChzeW1zID09IGxlZnQpCisgICAgICAgIHJldHVybiAxOworCisgICAgLy8gbm90ZSBhbmQgdmVyaWZ5IHRoZSBleHBlY3RlZCBzdGF0ZQorICAgIGFzc2VydChzeW1zID4gbGVmdCAmJiBsZWZ0ID4gMCAmJiBsZW4gPCBnLm1heCk7CisKKyAgICAvLyBzZWUgaWYgd2UndmUgZG9uZSB0aGlzIG9uZSBhbHJlYWR5CisgICAgc2l6ZV90IGluZGV4ID0gbWFwKHN5bXMsIGxlZnQsIGxlbik7CisgICAgYmlnX3QgZ290ID0gZy5udW1baW5kZXhdOworICAgIGlmIChnb3QpCisgICAgICAgIHJldHVybiBnb3Q7ICAgICAgICAgLy8gd2UgaGF2ZSAtLSByZXR1cm4gdGhlIHNhdmVkIHJlc3VsdAorCisgICAgLy8gd2UgbmVlZCB0byB1c2UgYXQgbGVhc3QgdGhpcyBtYW55IGJpdCBwYXR0ZXJucyBzbyB0aGF0IHRoZSBjb2RlIHdvbid0IGJlCisgICAgLy8gaW5jb21wbGV0ZSBhdCB0aGUgbmV4dCBsZW5ndGggKG1vcmUgYml0IHBhdHRlcm5zIHRoYW4gc3ltYm9scykKKyAgICBpbnQgbGVhc3QgPSAobGVmdCA8PCAxKSAtIHN5bXM7CisgICAgaWYgKGxlYXN0IDwgMCkKKyAgICAgICAgbGVhc3QgPSAwOworCisgICAgLy8gd2UgY2FuIHVzZSBhdCBtb3N0IHRoaXMgbWFueSBiaXQgcGF0dGVybnMsIGxlc3QgdGhlcmUgbm90IGJlIGVub3VnaAorICAgIC8vIGF2YWlsYWJsZSBmb3IgdGhlIHJlbWFpbmluZyBzeW1ib2xzIGF0IHRoZSBtYXhpbXVtIGxlbmd0aCAoaWYgdGhlcmUgd2VyZQorICAgIC8vIG5vIGxpbWl0IHRvIHRoZSBjb2RlIGxlbmd0aCwgdGhpcyB3b3VsZCBiZWNvbWU6IG1vc3QgPSBsZWZ0IC0gMSkKKyAgICBpbnQgbW9zdCA9ICgoKGNvZGVfdClsZWZ0IDw8IChnLm1heCAtIGxlbikpIC0gc3ltcykgLworICAgICAgICAgICAgICAgKCgoY29kZV90KTEgPDwgKGcubWF4IC0gbGVuKSkgLSAxKTsKKworICAgIC8vIGNvdW50IGFsbCBwb3NzaWJsZSBjb2RlcyBmcm9tIHRoaXMganVuY3R1cmUgYW5kIGFkZCB0aGVtIHVwCisgICAgYmlnX3Qgc3VtID0gMDsKKyAgICBmb3IgKGludCB1c2UgPSBsZWFzdDsgdXNlIDw9IG1vc3Q7IHVzZSsrKSB7CisgICAgICAgIGdvdCA9IGNvdW50KHN5bXMgLSB1c2UsIChsZWZ0IC0gdXNlKSA8PCAxLCBsZW4gKyAxKTsKKyAgICAgICAgc3VtICs9IGdvdDsKKyAgICAgICAgaWYgKGdvdCA9PSAoYmlnX3QpLTEgfHwgc3VtIDwgZ290KSAgICAgIC8vIG92ZXJmbG93CisgICAgICAgICAgICByZXR1cm4gKGJpZ190KS0xOworICAgIH0KKworICAgIC8vIHZlcmlmeSB0aGF0IGFsbCByZWN1cnNpdmUgY2FsbHMgYXJlIHByb2R1Y3RpdmUKKyAgICBhc3NlcnQoc3VtICE9IDApOworCisgICAgLy8gc2F2ZSB0aGUgcmVzdWx0IGFuZCByZXR1cm4gaXQKKyAgICBnLm51bVtpbmRleF0gPSBzdW07CisgICAgcmV0dXJuIHN1bTsKK30KKworLy8gUmV0dXJuIHRydWUgaWYgd2UndmUgYmVlbiBoZXJlIGJlZm9yZSwgc2V0IHRvIHRydWUgaWYgbm90LiBTZXQgYSBiaXQgaW4gYQorLy8gYml0IHZlY3RvciB0byBpbmRpY2F0ZSB2aXNpdGluZyB0aGlzIHN0YXRlLiBFYWNoIChzeW1zLGxlbixsZWZ0KSBzdGF0ZSBoYXMgYQorLy8gdmFyaWFibGUgc2l6ZSBiaXQgdmVjdG9yIGluZGV4ZWQgYnkgKG1lbSxyZW0pLiBUaGUgYml0IHZlY3RvciBpcyBsZW5ndGhlbmVkCisvLyBhcyBuZWVkZWQgdG8gYWxsb3cgc2V0dGluZyB0aGUgKG1lbSxyZW0pIGJpdC4KK2xvY2FsIGludCBiZWVuX2hlcmUoaW50IHN5bXMsIGludCBsZWZ0LCBpbnQgbGVuLCBpbnQgbWVtLCBpbnQgcmVtKSB7CisgICAgLy8gcG9pbnQgdG8gdmVjdG9yIGZvciAoc3ltcyxsZWZ0LGxlbiksIGJpdCBpbiB2ZWN0b3IgZm9yIChtZW0scmVtKQorICAgIHNpemVfdCBpbmRleCA9IG1hcChzeW1zLCBsZWZ0LCBsZW4pOworICAgIG1lbSAtPSAxIDw8IGcucm9vdDsgICAgICAgICAgICAgLy8gbWVtIGFsd2F5cyBpbmNsdWRlcyB0aGUgcm9vdCB0YWJsZQorICAgIG1lbSA+Pj0gMTsgICAgICAgICAgICAgICAgICAgICAgLy8gbWVtIGFuZCByZW0gYXJlIGFsd2F5cyBldmVuCisgICAgcmVtID4+PSAxOworICAgIHNpemVfdCBvZmZzZXQgPSAobWVtID4+IDMpICsgcmVtOworICAgIG9mZnNldCA9ICgob2Zmc2V0ICogKG9mZnNldCArIDEpKSA+PiAxKSArIHJlbTsKKyAgICBpbnQgYml0ID0gMSA8PCAobWVtICYgNyk7CisKKyAgICAvLyBzZWUgaWYgd2UndmUgYmVlbiBoZXJlCisgICAgc2l6ZV90IGxlbmd0aCA9IGcuZG9uZVtpbmRleF0ubGVuOworICAgIGlmIChvZmZzZXQgPCBsZW5ndGggJiYgKGcuZG9uZVtpbmRleF0udmVjW29mZnNldF0gJiBiaXQpICE9IDApCisgICAgICAgIHJldHVybiAxOyAgICAgICAvLyBkb25lIHRoaXMhCisKKyAgICAvLyB3ZSBoYXZlbid0IGJlZW4gaGVyZSBiZWZvcmUgLS0gc2V0IHRoZSBiaXQgdG8gc2hvdyB3ZSBoYXZlIG5vdworCisgICAgLy8gc2VlIGlmIHdlIG5lZWQgdG8gbGVuZ3RoZW4gdGhlIHZlY3RvciBpbiBvcmRlciB0byBzZXQgdGhlIGJpdAorICAgIGlmIChsZW5ndGggPD0gb2Zmc2V0KSB7CisgICAgICAgIC8vIGlmIHdlIGhhdmUgb25lIGFscmVhZHksIGVubGFyZ2UgaXQsIHplcm8gb3V0IHRoZSBhcHBlbmRlZCBzcGFjZQorICAgICAgICBjaGFyICp2ZWN0b3I7CisgICAgICAgIGlmIChsZW5ndGgpIHsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBsZW5ndGggPDw9IDE7CisgICAgICAgICAgICB9IHdoaWxlIChsZW5ndGggPD0gb2Zmc2V0KTsKKyAgICAgICAgICAgIHZlY3RvciA9IHJlYWxsb2MoZy5kb25lW2luZGV4XS52ZWMsIGxlbmd0aCk7CisgICAgICAgICAgICBhc3NlcnQodmVjdG9yICE9IE5VTEwgJiYgIm91dCBvZiBtZW1vcnkiKTsKKyAgICAgICAgICAgIG1lbXNldCh2ZWN0b3IgKyBnLmRvbmVbaW5kZXhdLmxlbiwgMCwgbGVuZ3RoIC0gZy5kb25lW2luZGV4XS5sZW4pOworICAgICAgICB9CisKKyAgICAgICAgLy8gb3RoZXJ3aXNlIHdlIG5lZWQgdG8gbWFrZSBhIG5ldyB2ZWN0b3IgYW5kIHplcm8gaXQgb3V0CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbGVuZ3RoID0gMTY7CisgICAgICAgICAgICB3aGlsZSAobGVuZ3RoIDw9IG9mZnNldCkKKyAgICAgICAgICAgICAgICBsZW5ndGggPDw9IDE7CisgICAgICAgICAgICB2ZWN0b3IgPSBjYWxsb2MobGVuZ3RoLCAxKTsKKyAgICAgICAgICAgIGFzc2VydCh2ZWN0b3IgIT0gTlVMTCAmJiAib3V0IG9mIG1lbW9yeSIpOworICAgICAgICB9CisKKyAgICAgICAgLy8gaW5zdGFsbCB0aGUgbmV3IHZlY3RvcgorICAgICAgICBnLmRvbmVbaW5kZXhdLmxlbiA9IGxlbmd0aDsKKyAgICAgICAgZy5kb25lW2luZGV4XS52ZWMgPSB2ZWN0b3I7CisgICAgfQorCisgICAgLy8gc2V0IHRoZSBiaXQKKyAgICBnLmRvbmVbaW5kZXhdLnZlY1tvZmZzZXRdIHw9IGJpdDsKKyAgICByZXR1cm4gMDsKK30KKworLy8gRXhhbWluZSBhbGwgcG9zc2libGUgY29kZXMgZnJvbSB0aGUgZ2l2ZW4gbm9kZSAoc3ltcywgbGVuLCBsZWZ0KS4gQ29tcHV0ZQorLy8gdGhlIGFtb3VudCBvZiBtZW1vcnkgcmVxdWlyZWQgdG8gYnVpbGQgaW5mbGF0ZSdzIGRlY29kaW5nIHRhYmxlcywgd2hlcmUgdGhlCisvLyBudW1iZXIgb2YgY29kZSBzdHJ1Y3R1cmVzIHVzZWQgc28gZmFyIGlzIG1lbSwgYW5kIHRoZSBudW1iZXIgcmVtYWluaW5nIGluCisvLyB0aGUgY3VycmVudCBzdWItdGFibGUgaXMgcmVtLgorbG9jYWwgdm9pZCBleGFtaW5lKGludCBzeW1zLCBpbnQgbGVmdCwgaW50IGxlbiwgaW50IG1lbSwgaW50IHJlbSkgeworICAgIC8vIHNlZSBpZiB3ZSBoYXZlIGEgY29tcGxldGUgY29kZQorICAgIGlmIChzeW1zID09IGxlZnQpIHsKKyAgICAgICAgLy8gc2V0IHRoZSBsYXN0IGNvZGUgZW50cnkKKyAgICAgICAgZy5jb2RlW2xlbl0gPSBsZWZ0OworCisgICAgICAgIC8vIGNvbXBsZXRlIGNvbXB1dGF0aW9uIG9mIG1lbW9yeSB1c2VkIGJ5IHRoaXMgY29kZQorICAgICAgICB3aGlsZSAocmVtIDwgbGVmdCkgeworICAgICAgICAgICAgbGVmdCAtPSByZW07CisgICAgICAgICAgICByZW0gPSAxIDw8IChsZW4gLSBnLnJvb3QpOworICAgICAgICAgICAgbWVtICs9IHJlbTsKKyAgICAgICAgfQorICAgICAgICBhc3NlcnQocmVtID09IGxlZnQpOworCisgICAgICAgIC8vIGlmIHRoaXMgaXMgYXQgdGhlIG1heGltdW0sIHNob3cgdGhlIHN1Yi1jb2RlCisgICAgICAgIGlmIChtZW0gPj0gZy5sYXJnZSkgeworICAgICAgICAgICAgLy8gaWYgdGhpcyBpcyBhIG5ldyBtYXhpbXVtLCB1cGRhdGUgdGhlIG1heGltdW0gYW5kIGNsZWFyIG91dCB0aGUKKyAgICAgICAgICAgIC8vIHByaW50ZWQgc3ViLWNvZGVzIGZyb20gdGhlIHByZXZpb3VzIG1heGltdW0KKyAgICAgICAgICAgIGlmIChtZW0gPiBnLmxhcmdlKSB7CisgICAgICAgICAgICAgICAgZy5sYXJnZSA9IG1lbTsKKyAgICAgICAgICAgICAgICBzdHJpbmdfY2xlYXIoJmcub3V0KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gY29tcHV0ZSB0aGUgc3RhcnRpbmcgc3RhdGUgZm9yIHRoaXMgc3ViLWNvZGUKKyAgICAgICAgICAgIHN5bXMgPSAwOworICAgICAgICAgICAgbGVmdCA9IDEgPDwgZy5tYXg7CisgICAgICAgICAgICBmb3IgKGludCBiaXRzID0gZy5tYXg7IGJpdHMgPiBnLnJvb3Q7IGJpdHMtLSkgeworICAgICAgICAgICAgICAgIHN5bXMgKz0gZy5jb2RlW2JpdHNdOworICAgICAgICAgICAgICAgIGxlZnQgLT0gZy5jb2RlW2JpdHNdOworICAgICAgICAgICAgICAgIGFzc2VydCgobGVmdCAmIDEpID09IDApOworICAgICAgICAgICAgICAgIGxlZnQgPj49IDE7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIHByaW50IHRoZSBzdGFydGluZyBzdGF0ZSBhbmQgdGhlIHJlc3VsdGluZyBzdWItY29kZSB0byBnLm91dAorICAgICAgICAgICAgc3RyaW5nX3ByaW50ZigmZy5vdXQsICI8JXUsICV1LCAldT46IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltcywgZy5yb290ICsgMSwgKCgxIDw8IGcucm9vdCkgLSBsZWZ0KSA8PCAxKTsKKyAgICAgICAgICAgIGZvciAoaW50IGJpdHMgPSBnLnJvb3QgKyAxOyBiaXRzIDw9IGcubWF4OyBiaXRzKyspCisgICAgICAgICAgICAgICAgaWYgKGcuY29kZVtiaXRzXSkKKyAgICAgICAgICAgICAgICAgICAgc3RyaW5nX3ByaW50ZigmZy5vdXQsICIgJWRbJWRdIiwgZy5jb2RlW2JpdHNdLCBiaXRzKTsKKyAgICAgICAgICAgIHN0cmluZ19wcmludGYoJmcub3V0LCAiXG4iKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHJlbW92ZSBlbnRyaWVzIGFzIHdlIGRyb3AgYmFjayBkb3duIGluIHRoZSByZWN1cnNpb24KKyAgICAgICAgZy5jb2RlW2xlbl0gPSAwOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gcHJ1bmUgdGhlIHRyZWUgaWYgd2UgY2FuCisgICAgaWYgKGJlZW5faGVyZShzeW1zLCBsZWZ0LCBsZW4sIG1lbSwgcmVtKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gd2UgbmVlZCB0byB1c2UgYXQgbGVhc3QgdGhpcyBtYW55IGJpdCBwYXR0ZXJucyBzbyB0aGF0IHRoZSBjb2RlIHdvbid0IGJlCisgICAgLy8gaW5jb21wbGV0ZSBhdCB0aGUgbmV4dCBsZW5ndGggKG1vcmUgYml0IHBhdHRlcm5zIHRoYW4gc3ltYm9scykKKyAgICBpbnQgbGVhc3QgPSAobGVmdCA8PCAxKSAtIHN5bXM7CisgICAgaWYgKGxlYXN0IDwgMCkKKyAgICAgICAgbGVhc3QgPSAwOworCisgICAgLy8gd2UgY2FuIHVzZSBhdCBtb3N0IHRoaXMgbWFueSBiaXQgcGF0dGVybnMsIGxlc3QgdGhlcmUgbm90IGJlIGVub3VnaAorICAgIC8vIGF2YWlsYWJsZSBmb3IgdGhlIHJlbWFpbmluZyBzeW1ib2xzIGF0IHRoZSBtYXhpbXVtIGxlbmd0aCAoaWYgdGhlcmUgd2VyZQorICAgIC8vIG5vIGxpbWl0IHRvIHRoZSBjb2RlIGxlbmd0aCwgdGhpcyB3b3VsZCBiZWNvbWU6IG1vc3QgPSBsZWZ0IC0gMSkKKyAgICBpbnQgbW9zdCA9ICgoKGNvZGVfdClsZWZ0IDw8IChnLm1heCAtIGxlbikpIC0gc3ltcykgLworICAgICAgICAgICAgICAgKCgoY29kZV90KTEgPDwgKGcubWF4IC0gbGVuKSkgLSAxKTsKKworICAgIC8vIG9jY3VweSBsZWFzdCB0YWJsZSBzcGFjZXMsIGNyZWF0aW5nIG5ldyBzdWItdGFibGVzIGFzIG5lZWRlZAorICAgIGludCB1c2UgPSBsZWFzdDsKKyAgICB3aGlsZSAocmVtIDwgdXNlKSB7CisgICAgICAgIHVzZSAtPSByZW07CisgICAgICAgIHJlbSA9IDEgPDwgKGxlbiAtIGcucm9vdCk7CisgICAgICAgIG1lbSArPSByZW07CisgICAgfQorICAgIHJlbSAtPSB1c2U7CisKKyAgICAvLyBleGFtaW5lIGNvZGVzIGZyb20gaGVyZSwgdXBkYXRpbmcgdGFibGUgc3BhY2UgYXMgd2UgZ28KKyAgICBmb3IgKHVzZSA9IGxlYXN0OyB1c2UgPD0gbW9zdDsgdXNlKyspIHsKKyAgICAgICAgZy5jb2RlW2xlbl0gPSB1c2U7CisgICAgICAgIGV4YW1pbmUoc3ltcyAtIHVzZSwgKGxlZnQgLSB1c2UpIDw8IDEsIGxlbiArIDEsCisgICAgICAgICAgICAgICAgbWVtICsgKHJlbSA/IDEgPDwgKGxlbiAtIGcucm9vdCkgOiAwKSwgcmVtIDw8IDEpOworICAgICAgICBpZiAocmVtID09IDApIHsKKyAgICAgICAgICAgIHJlbSA9IDEgPDwgKGxlbiAtIGcucm9vdCk7CisgICAgICAgICAgICBtZW0gKz0gcmVtOworICAgICAgICB9CisgICAgICAgIHJlbS0tOworICAgIH0KKworICAgIC8vIHJlbW92ZSBlbnRyaWVzIGFzIHdlIGRyb3AgYmFjayBkb3duIGluIHRoZSByZWN1cnNpb24KKyAgICBnLmNvZGVbbGVuXSA9IDA7Cit9CisKKy8vIExvb2sgYXQgYWxsIHN1Yi1jb2RlcyBzdGFydGluZyB3aXRoIHJvb3QgKyAxIGJpdHMuIExvb2sgYXQgb25seSB0aGUgdmFsaWQKKy8vIGludGVybWVkaWF0ZSBjb2RlIHN0YXRlcyAoc3ltcywgbGVmdCwgbGVuKS4gRm9yIGVhY2ggY29tcGxldGVkIGNvZGUsCisvLyBjYWxjdWxhdGUgdGhlIGFtb3VudCBvZiBtZW1vcnkgcmVxdWlyZWQgYnkgaW5mbGF0ZSB0byBidWlsZCB0aGUgZGVjb2RpbmcKKy8vIHRhYmxlcy4gRmluZCB0aGUgbWF4aW11bSBhbW91bnQgb2YgbWVtb3J5IHJlcXVpcmVkIGFuZCBzaG93IHRoZSBjb2RlcyB0aGF0CisvLyByZXF1aXJlIHRoYXQgbWF4aW11bS4KK2xvY2FsIHZvaWQgZW5vdWdoKGludCBzeW1zKSB7CisgICAgLy8gY2xlYXIgY29kZQorICAgIGZvciAoaW50IG4gPSAwOyBuIDw9IGcubWF4OyBuKyspCisgICAgICAgIGcuY29kZVtuXSA9IDA7CisKKyAgICAvLyBsb29rIGF0IGFsbCAocm9vdCArIDEpIGJpdCBhbmQgbG9uZ2VyIGNvZGVzCisgICAgc3RyaW5nX2NsZWFyKCZnLm91dCk7ICAgICAgICAgICAvLyBlbXB0eSBzYXZlZCByZXN1bHRzCisgICAgZy5sYXJnZSA9IDEgPDwgZy5yb290OyAgICAgICAgICAvLyBiYXNlIHRhYmxlCisgICAgaWYgKGcucm9vdCA8IGcubWF4KSAgICAgICAgICAgICAvLyBvdGhlcndpc2UsIHRoZXJlJ3Mgb25seSBhIGJhc2UgdGFibGUKKyAgICAgICAgZm9yIChpbnQgbiA9IDM7IG4gPD0gc3ltczsgbisrKQorICAgICAgICAgICAgZm9yIChpbnQgbGVmdCA9IDI7IGxlZnQgPCBuOyBsZWZ0ICs9IDIpIHsKKyAgICAgICAgICAgICAgICAvLyBsb29rIGF0IGFsbCByZWFjaGFibGUgKHJvb3QgKyAxKSBiaXQgbm9kZXMsIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAvLyByZXN1bHRpbmcgY29kZXMgKGNvbXBsZXRlIGF0IHJvb3QgKyAyIG9yIG1vcmUpCisgICAgICAgICAgICAgICAgc2l6ZV90IGluZGV4ID0gbWFwKG4sIGxlZnQsIGcucm9vdCArIDEpOworICAgICAgICAgICAgICAgIGlmIChnLnJvb3QgKyAxIDwgZy5tYXggJiYgZy5udW1baW5kZXhdKSAvLyByZWFjaGFibGUgbm9kZQorICAgICAgICAgICAgICAgICAgICBleGFtaW5lKG4sIGxlZnQsIGcucm9vdCArIDEsIDEgPDwgZy5yb290LCAwKTsKKworICAgICAgICAgICAgICAgIC8vIGFsc28gbG9vayBhdCByb290IGJpdCBjb2RlcyB3aXRoIGNvbXBsZXRpb25zIGF0IHJvb3QgKyAxCisgICAgICAgICAgICAgICAgLy8gYml0cyAobm90IHNhdmVkIGluIG51bSwgc2luY2UgY29tcGxldGUpLCBqdXN0IGluIGNhc2UKKyAgICAgICAgICAgICAgICBpZiAoZy5udW1baW5kZXggLSAxXSAmJiBuIDw9IGxlZnQgPDwgMSkKKyAgICAgICAgICAgICAgICAgICAgZXhhbWluZSgobiAtIGxlZnQpIDw8IDEsIChuIC0gbGVmdCkgPDwgMSwgZy5yb290ICsgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDw8IGcucm9vdCwgMCk7CisgICAgICAgICAgICB9CisKKyAgICAvLyBkb25lCisgICAgcHJpbnRmKCJtYXhpbXVtIG9mICVkIHRhYmxlIGVudHJpZXMgZm9yIHJvb3QgPSAlZFxuIiwgZy5sYXJnZSwgZy5yb290KTsKKyAgICBmcHV0cyhnLm91dC5zdHIsIHN0ZG91dCk7Cit9CisKKy8vIEV4YW1pbmUgYW5kIHNob3cgdGhlIHRvdGFsIG51bWJlciBvZiBwb3NzaWJsZSBwcmVmaXggY29kZXMgZm9yIGEgZ2l2ZW4KKy8vIG1heGltdW0gbnVtYmVyIG9mIHN5bWJvbHMsIGluaXRpYWwgcm9vdCB0YWJsZSBzaXplLCBhbmQgbWF4aW11bSBjb2RlIGxlbmd0aAorLy8gaW4gYml0cyAtLSB0aG9zZSBhcmUgdGhlIGNvbW1hbmQgYXJndW1lbnRzIGluIHRoYXQgb3JkZXIuIFRoZSBkZWZhdWx0IHZhbHVlcworLy8gYXJlIDI4NiwgOSwgYW5kIDE1IHJlc3BlY3RpdmVseSwgZm9yIHRoZSBkZWZsYXRlIGxpdGVyYWwvbGVuZ3RoIGNvZGUuIFRoZQorLy8gcG9zc2libGUgY29kZXMgYXJlIGNvdW50ZWQgZm9yIGVhY2ggbnVtYmVyIG9mIGNvZGVkIHN5bWJvbHMgZnJvbSB0d28gdG8gdGhlCisvLyBtYXhpbXVtLiBUaGUgY291bnRzIGZvciBlYWNoIG9mIHRob3NlIGFuZCB0aGUgdG90YWwgbnVtYmVyIG9mIGNvZGVzIGFyZQorLy8gc2hvd24uIFRoZSBtYXhpbXVtIG51bWJlciBvZiBpbmZsYXRlIHRhYmxlIGVudGlyZXMgaXMgdGhlbiBjYWxjdWxhdGVkIGFjcm9zcworLy8gYWxsIHBvc3NpYmxlIGNvZGVzLiBFYWNoIG5ldyBtYXhpbXVtIG51bWJlciBvZiB0YWJsZSBlbnRyaWVzIGFuZCB0aGUKKy8vIGFzc29jaWF0ZWQgc3ViLWNvZGUgKHN0YXJ0aW5nIGF0IHJvb3QgKyAxID09IDEwIGJpdHMpIGlzIHNob3duLgorLy8KKy8vIFRvIGNvdW50IGFuZCBleGFtaW5lIHByZWZpeCBjb2RlcyB0aGF0IGFyZSBub3QgbGVuZ3RoLWxpbWl0ZWQsIHByb3ZpZGUgYQorLy8gbWF4aW11bSBsZW5ndGggZXF1YWwgdG8gdGhlIG51bWJlciBvZiBzeW1ib2xzIG1pbnVzIG9uZS4KKy8vCisvLyBGb3IgdGhlIGRlZmxhdGUgbGl0ZXJhbC9sZW5ndGggY29kZSwgdXNlICJlbm91Z2giLiBGb3IgdGhlIGRlZmxhdGUgZGlzdGFuY2UKKy8vIGNvZGUsIHVzZSAiZW5vdWdoIDMwIDYiLgoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KSB7CisgICAgLy8gc2V0IHVwIGdsb2JhbHMgZm9yIGNsZWFudXAoKQorICAgIGcuY29kZSA9IE5VTEw7CisgICAgZy5udW0gPSBOVUxMOworICAgIGcuZG9uZSA9IE5VTEw7CisgICAgc3RyaW5nX2luaXQoJmcub3V0KTsKKworICAgIC8vIGdldCBhcmd1bWVudHMgLS0gZGVmYXVsdCB0byB0aGUgZGVmbGF0ZSBsaXRlcmFsL2xlbmd0aCBjb2RlCisgICAgaW50IHN5bXMgPSAyODY7CisgICAgZy5yb290ID0gOTsKKyAgICBnLm1heCA9IDE1OworICAgIGlmIChhcmdjID4gMSkgeworICAgICAgICBzeW1zID0gYXRvaShhcmd2WzFdKTsKKyAgICAgICAgaWYgKGFyZ2MgPiAyKSB7CisgICAgICAgICAgICBnLnJvb3QgPSBhdG9pKGFyZ3ZbMl0pOworICAgICAgICAgICAgaWYgKGFyZ2MgPiAzKQorICAgICAgICAgICAgICAgIGcubWF4ID0gYXRvaShhcmd2WzNdKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoYXJnYyA+IDQgfHwgc3ltcyA8IDIgfHwgZy5yb290IDwgMSB8fCBnLm1heCA8IDEpIHsKKyAgICAgICAgZnB1dHMoImludmFsaWQgYXJndW1lbnRzLCBuZWVkOiBbc3ltID49IDIgW3Jvb3QgPj0gMSBbbWF4ID49IDFdXV1cbiIsCisgICAgICAgICAgICAgIHN0ZGVycik7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIC8vIGlmIG5vdCByZXN0cmljdGluZyB0aGUgY29kZSBsZW5ndGgsIHRoZSBsb25nZXN0IGlzIHN5bXMgLSAxCisgICAgaWYgKGcubWF4ID4gc3ltcyAtIDEpCisgICAgICAgIGcubWF4ID0gc3ltcyAtIDE7CisKKyAgICAvLyBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBiaXRzIGluIGEgY29kZV90CisgICAgaW50IGJpdHMgPSAwOworICAgIGZvciAoY29kZV90IHdvcmQgPSAxOyB3b3JkOyB3b3JkIDw8PSAxKQorICAgICAgICBiaXRzKys7CisKKyAgICAvLyBtYWtlIHN1cmUgdGhhdCB0aGUgY2FsY3VsYXRpb24gb2YgbW9zdCB3aWxsIG5vdCBvdmVyZmxvdworICAgIGlmIChnLm1heCA+IGJpdHMgfHwgKGNvZGVfdCkoc3ltcyAtIDIpID49ICgoY29kZV90KS0xID4+IChnLm1heCAtIDEpKSkgeworICAgICAgICBmcHV0cygiYWJvcnQ6IGNvZGUgbGVuZ3RoIHRvbyBsb25nIGZvciBpbnRlcm5hbCB0eXBlc1xuIiwgc3RkZXJyKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgLy8gcmVqZWN0IGltcG9zc2libGUgY29kZSByZXF1ZXN0cworICAgIGlmICgoY29kZV90KShzeW1zIC0gMSkgPiAoKGNvZGVfdCkxIDw8IGcubWF4KSAtIDEpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlZCBzeW1ib2xzIGNhbm5vdCBiZSBjb2RlZCBpbiAlZCBiaXRzXG4iLAorICAgICAgICAgICAgICAgIHN5bXMsIGcubWF4KTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgLy8gYWxsb2NhdGUgY29kZSB2ZWN0b3IKKyAgICBnLmNvZGUgPSBjYWxsb2MoZy5tYXggKyAxLCBzaXplb2YoaW50KSk7CisgICAgYXNzZXJ0KGcuY29kZSAhPSBOVUxMICYmICJvdXQgb2YgbWVtb3J5Iik7CisKKyAgICAvLyBkZXRlcm1pbmUgc2l6ZSBvZiBzYXZlZCByZXN1bHRzIGFycmF5LCBjaGVja2luZyBmb3Igb3ZlcmZsb3dzLAorICAgIC8vIGFsbG9jYXRlIGFuZCBjbGVhciB0aGUgYXJyYXkgKHNldCBhbGwgdG8gemVybyB3aXRoIGNhbGxvYygpKQorICAgIGlmIChzeW1zID09IDIpICAgICAgICAgICAgICAvLyBpZmYgbWF4ID09IDEKKyAgICAgICAgZy5udW0gPSBOVUxMOyAgICAgICAgICAgLy8gd29uJ3QgYmUgc2F2aW5nIGFueSByZXN1bHRzCisgICAgZWxzZSB7CisgICAgICAgIGcuc2l6ZSA9IHN5bXMgPj4gMTsKKyAgICAgICAgaW50IG4gPSAoc3ltcyAtIDEpID4+IDE7CisgICAgICAgIGFzc2VydChnLnNpemUgPD0gKHNpemVfdCktMSAvIG4gJiYgIm92ZXJmbG93Iik7CisgICAgICAgIGcuc2l6ZSAqPSBuOworICAgICAgICBuID0gZy5tYXggLSAxOworICAgICAgICBhc3NlcnQoZy5zaXplIDw9IChzaXplX3QpLTEgLyBuICYmICJvdmVyZmxvdyIpOworICAgICAgICBnLnNpemUgKj0gbjsKKyAgICAgICAgZy5udW0gPSBjYWxsb2MoZy5zaXplLCBzaXplb2YoYmlnX3QpKTsKKyAgICAgICAgYXNzZXJ0KGcubnVtICE9IE5VTEwgJiYgIm91dCBvZiBtZW1vcnkiKTsKKyAgICB9CisKKyAgICAvLyBjb3VudCBwb3NzaWJsZSBjb2RlcyBmb3IgYWxsIG51bWJlcnMgb2Ygc3ltYm9scywgYWRkIHVwIGNvdW50cworICAgIGJpZ190IHN1bSA9IDA7CisgICAgZm9yIChpbnQgbiA9IDI7IG4gPD0gc3ltczsgbisrKSB7CisgICAgICAgIGJpZ190IGdvdCA9IGNvdW50KG4sIDIsIDEpOworICAgICAgICBzdW0gKz0gZ290OworICAgICAgICBhc3NlcnQoZ290ICE9IChiaWdfdCktMSAmJiBzdW0gPj0gZ290ICYmICJvdmVyZmxvdyIpOworICAgIH0KKyAgICBwcmludGYoIiUiUFJJYmlnIiB0b3RhbCBjb2RlcyBmb3IgMiB0byAlZCBzeW1ib2xzIiwgc3VtLCBzeW1zKTsKKyAgICBpZiAoZy5tYXggPCBzeW1zIC0gMSkKKyAgICAgICAgcHJpbnRmKCIgKCVkLWJpdCBsZW5ndGggbGltaXQpXG4iLCBnLm1heCk7CisgICAgZWxzZQorICAgICAgICBwdXRzKCIgKG5vIGxlbmd0aCBsaW1pdCkiKTsKKworICAgIC8vIGFsbG9jYXRlIGFuZCBjbGVhciBkb25lIGFycmF5IGZvciBiZWVuX2hlcmUoKQorICAgIGlmIChzeW1zID09IDIpCisgICAgICAgIGcuZG9uZSA9IE5VTEw7CisgICAgZWxzZSB7CisgICAgICAgIGcuZG9uZSA9IGNhbGxvYyhnLnNpemUsIHNpemVvZihzdHJ1Y3QgdGFiKSk7CisgICAgICAgIGFzc2VydChnLmRvbmUgIT0gTlVMTCAmJiAib3V0IG9mIG1lbW9yeSIpOworICAgIH0KKworICAgIC8vIGZpbmQgYW5kIHNob3cgbWF4aW11bSBpbmZsYXRlIHRhYmxlIHVzYWdlCisgICAgaWYgKGcucm9vdCA+IGcubWF4KSAgICAgICAgICAgICAvLyByZWR1Y2Ugcm9vdCB0byBtYXggbGVuZ3RoCisgICAgICAgIGcucm9vdCA9IGcubWF4OworICAgIGlmICgoY29kZV90KXN5bXMgPCAoKGNvZGVfdCkxIDw8IChnLnJvb3QgKyAxKSkpCisgICAgICAgIGVub3VnaChzeW1zKTsKKyAgICBlbHNlCisgICAgICAgIGZwdXRzKCJjYW5ub3QgaGFuZGxlIG1pbmltdW0gY29kZSBsZW5ndGhzID4gcm9vdCIsIHN0ZGVycik7CisKKyAgICAvLyBkb25lCisgICAgY2xlYW51cCgpOworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvc3JjL2V4YW1wbGVzL2ZpdGJsay5jIGIvc3JjL2V4YW1wbGVzL2ZpdGJsay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MWRlNWMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvZXhhbXBsZXMvZml0YmxrLmMKQEAgLTAsMCArMSwyMzMgQEAKKy8qIGZpdGJsay5jOiBleGFtcGxlIG9mIGZpdHRpbmcgY29tcHJlc3NlZCBvdXRwdXQgdG8gYSBzcGVjaWZpZWQgc2l6ZQorICAgTm90IGNvcHlyaWdodGVkIC0tIHByb3ZpZGVkIHRvIHRoZSBwdWJsaWMgZG9tYWluCisgICBWZXJzaW9uIDEuMSAgMjUgTm92ZW1iZXIgMjAwNCAgTWFyayBBZGxlciAqLworCisvKiBWZXJzaW9uIGhpc3Rvcnk6CisgICAxLjAgIDI0IE5vdiAyMDA0ICBGaXJzdCB2ZXJzaW9uCisgICAxLjEgIDI1IE5vdiAyMDA0ICBDaGFuZ2UgZGVmbGF0ZUluaXQyKCkgdG8gZGVmbGF0ZUluaXQoKQorICAgICAgICAgICAgICAgICAgICAgVXNlIGZpeGVkLXNpemUsIHN0YWNrLWFsbG9jYXRlZCByYXcgYnVmZmVycworICAgICAgICAgICAgICAgICAgICAgU2ltcGxpZnkgY29kZSBtb3ZpbmcgY29tcHJlc3Npb24gdG8gc3Vicm91dGluZXMKKyAgICAgICAgICAgICAgICAgICAgIFVzZSBhc3NlcnQoKSBmb3IgaW50ZXJuYWwgZXJyb3JzCisgICAgICAgICAgICAgICAgICAgICBBZGQgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgYXBwcm9hY2gKKyAqLworCisvKiBBcHByb2FjaCB0byBqdXN0IGZpdHRpbmcgYSByZXF1ZXN0ZWQgY29tcHJlc3NlZCBzaXplOgorCisgICBmaXRibGsgcGVyZm9ybXMgdGhyZWUgY29tcHJlc3Npb24gcGFzc2VzIG9uIGEgcG9ydGlvbiBvZiB0aGUgaW5wdXQKKyAgIGRhdGEgaW4gb3JkZXIgdG8gZGV0ZXJtaW5lIGhvdyBtdWNoIG9mIHRoYXQgaW5wdXQgd2lsbCBjb21wcmVzcyB0bworICAgbmVhcmx5IHRoZSByZXF1ZXN0ZWQgb3V0cHV0IGJsb2NrIHNpemUuICBUaGUgZmlyc3QgcGFzcyBnZW5lcmF0ZXMKKyAgIGVub3VnaCBkZWZsYXRlIGJsb2NrcyB0byBwcm9kdWNlIG91dHB1dCB0byBmaWxsIHRoZSByZXF1ZXN0ZWQKKyAgIG91dHB1dCBzaXplIHBsdXMgYSBzcGVjZmllZCBleGNlc3MgYW1vdW50IChzZWUgdGhlIEVYQ0VTUyBkZWZpbmUKKyAgIGJlbG93KS4gIFRoZSBsYXN0IGRlZmxhdGUgYmxvY2sgbWF5IGdvIHF1aXRlIGEgYml0IHBhc3QgdGhhdCwgYnV0CisgICBpcyBkaXNjYXJkZWQuICBUaGUgc2Vjb25kIHBhc3MgZGVjb21wcmVzc2VzIGFuZCByZWNvbXByZXNzZXMganVzdAorICAgdGhlIGNvbXByZXNzZWQgZGF0YSB0aGF0IGZpdCBpbiB0aGUgcmVxdWVzdGVkIHBsdXMgZXhjZXNzIHNpemVkCisgICBidWZmZXIuICBUaGUgZGVmbGF0ZSBwcm9jZXNzIGlzIHRlcm1pbmF0ZWQgYWZ0ZXIgdGhhdCBhbW91bnQgb2YKKyAgIGlucHV0LCB3aGljaCBpcyBsZXNzIHRoYW4gdGhlIGFtb3VudCBjb25zdW1lZCBvbiB0aGUgZmlyc3QgcGFzcy4KKyAgIFRoZSBsYXN0IGRlZmxhdGUgYmxvY2sgb2YgdGhlIHJlc3VsdCB3aWxsIGJlIG9mIGEgY29tcGFyYWJsZSBzaXplCisgICB0byB0aGUgZmluYWwgcHJvZHVjdCwgc28gdGhhdCB0aGUgaGVhZGVyIGZvciB0aGF0IGRlZmxhdGUgYmxvY2sgYW5kCisgICB0aGUgY29tcHJlc3Npb24gcmF0aW8gZm9yIHRoYXQgYmxvY2sgd2lsbCBiZSBhYm91dCB0aGUgc2FtZSBhcyBpbgorICAgdGhlIGZpbmFsIHByb2R1Y3QuICBUaGUgdGhpcmQgY29tcHJlc3Npb24gcGFzcyBkZWNvbXByZXNzZXMgdGhlCisgICByZXN1bHQgb2YgdGhlIHNlY29uZCBzdGVwLCBidXQgb25seSB0aGUgY29tcHJlc3NlZCBkYXRhIHVwIHRvIHRoZQorICAgcmVxdWVzdGVkIHNpemUgbWludXMgYW4gYW1vdW50IHRvIGFsbG93IHRoZSBjb21wcmVzc2VkIHN0cmVhbSB0bworICAgY29tcGxldGUgKHNlZSB0aGUgTUFSR0lOIGRlZmluZSBiZWxvdykuICBUaGF0IHdpbGwgcmVzdWx0IGluIGEKKyAgIGZpbmFsIGNvbXByZXNzZWQgc3RyZWFtIHdob3NlIGxlbmd0aCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlCisgICByZXF1ZXN0ZWQgc2l6ZS4gIEFzc3VtaW5nIHN1ZmZpY2llbnQgaW5wdXQgYW5kIGEgcmVxdWVzdGVkIHNpemUKKyAgIGdyZWF0ZXIgdGhhbiBhIGZldyBodW5kcmVkIGJ5dGVzLCB0aGUgc2hvcnRmYWxsIHdpbGwgdHlwaWNhbGx5IGJlCisgICBsZXNzIHRoYW4gdGVuIGJ5dGVzLgorCisgICBJZiB0aGUgaW5wdXQgaXMgc2hvcnQgZW5vdWdoIHRoYXQgdGhlIGZpcnN0IGNvbXByZXNzaW9uIGNvbXBsZXRlcworICAgYmVmb3JlIGZpbGxpbmcgdGhlIHJlcXVlc3RlZCBvdXRwdXQgc2l6ZSwgdGhlbiB0aGF0IGNvbXByZXNzZWQKKyAgIHN0cmVhbSBpcyByZXR1cm4gd2l0aCBubyByZWNvbXByZXNzaW9uLgorCisgICBFWENFU1MgaXMgY2hvc2VuIHRvIGJlIGp1c3QgZ3JlYXRlciB0aGFuIHRoZSBzaG9ydGZhbGwgc2VlbiBpbiBhCisgICB0d28gcGFzcyBhcHByb2FjaCBzaW1pbGFyIHRvIHRoZSBhYm92ZS4gIFRoYXQgc2hvcnRmYWxsIGlzIGR1ZSB0bworICAgdGhlIGxhc3QgZGVmbGF0ZSBibG9jayBjb21wcmVzc2luZyBtb3JlIGVmZmljaWVudGx5IHdpdGggYSBzbWFsbGVyCisgICBoZWFkZXIgb24gdGhlIHNlY29uZCBwYXNzLiAgRVhDRVNTIGlzIHNldCB0byBiZSBsYXJnZSBlbm91Z2ggc28KKyAgIHRoYXQgdGhlcmUgaXMgZW5vdWdoIHVuY29tcHJlc3NlZCBkYXRhIGZvciB0aGUgc2Vjb25kIHBhc3MgdG8gZmlsbAorICAgb3V0IHRoZSByZXF1ZXN0ZWQgc2l6ZSwgYW5kIHNtYWxsIGVub3VnaCBzbyB0aGF0IHRoZSBmaW5hbCBkZWZsYXRlCisgICBibG9jayBvZiB0aGUgc2Vjb25kIHBhc3Mgd2lsbCBiZSBjbG9zZSBpbiBzaXplIHRvIHRoZSBmaW5hbCBkZWZsYXRlCisgICBibG9jayBvZiB0aGUgdGhpcmQgYW5kIGZpbmFsIHBhc3MuICBNQVJHSU4gaXMgY2hvc2VuIHRvIGJlIGp1c3QKKyAgIGxhcmdlIGVub3VnaCB0byBhc3N1cmUgdGhhdCB0aGUgZmluYWwgY29tcHJlc3Npb24gaGFzIGVub3VnaCByb29tCisgICB0byBjb21wbGV0ZSBpbiBhbGwgY2FzZXMuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSAiemxpYi5oIgorCisjZGVmaW5lIGxvY2FsIHN0YXRpYworCisvKiBwcmludCBuYXN0eWdyYW0gYW5kIGxlYXZlICovCitsb2NhbCB2b2lkIHF1aXQoY2hhciAqd2h5KQoreworICAgIGZwcmludGYoc3RkZXJyLCAiZml0YmxrIGFib3J0OiAlc1xuIiwgd2h5KTsKKyAgICBleGl0KDEpOworfQorCisjZGVmaW5lIFJBV0xFTiA0MDk2ICAgIC8qIGludGVybWVkaWF0ZSB1bmNvbXByZXNzZWQgYnVmZmVyIHNpemUgKi8KKworLyogY29tcHJlc3MgZnJvbSBmaWxlIHRvIGRlZiB1bnRpbCBwcm92aWRlZCBidWZmZXIgaXMgZnVsbCBvciBlbmQgb2YKKyAgIGlucHV0IHJlYWNoZWQ7IHJldHVybiBsYXN0IGRlZmxhdGUoKSByZXR1cm4gdmFsdWUsIG9yIFpfRVJSTk8gaWYKKyAgIHRoZXJlIHdhcyByZWFkIGVycm9yIG9uIHRoZSBmaWxlICovCitsb2NhbCBpbnQgcGFydGNvbXByZXNzKEZJTEUgKmluLCB6X3N0cmVhbXAgZGVmKQoreworICAgIGludCByZXQsIGZsdXNoOworICAgIHVuc2lnbmVkIGNoYXIgcmF3W1JBV0xFTl07CisKKyAgICBmbHVzaCA9IFpfTk9fRkxVU0g7CisgICAgZG8geworICAgICAgICBkZWYtPmF2YWlsX2luID0gZnJlYWQocmF3LCAxLCBSQVdMRU4sIGluKTsKKyAgICAgICAgaWYgKGZlcnJvcihpbikpCisgICAgICAgICAgICByZXR1cm4gWl9FUlJOTzsKKyAgICAgICAgZGVmLT5uZXh0X2luID0gcmF3OworICAgICAgICBpZiAoZmVvZihpbikpCisgICAgICAgICAgICBmbHVzaCA9IFpfRklOSVNIOworICAgICAgICByZXQgPSBkZWZsYXRlKGRlZiwgZmx1c2gpOworICAgICAgICBhc3NlcnQocmV0ICE9IFpfU1RSRUFNX0VSUk9SKTsKKyAgICB9IHdoaWxlIChkZWYtPmF2YWlsX291dCAhPSAwICYmIGZsdXNoID09IFpfTk9fRkxVU0gpOworICAgIHJldHVybiByZXQ7Cit9CisKKy8qIHJlY29tcHJlc3MgZnJvbSBpbmYncyBpbnB1dCB0byBkZWYncyBvdXRwdXQ7IHRoZSBpbnB1dCBmb3IgaW5mIGFuZAorICAgdGhlIG91dHB1dCBmb3IgZGVmIGFyZSBzZXQgaW4gdGhvc2Ugc3RydWN0dXJlcyBiZWZvcmUgY2FsbGluZzsKKyAgIHJldHVybiBsYXN0IGRlZmxhdGUoKSByZXR1cm4gdmFsdWUsIG9yIFpfTUVNX0VSUk9SIGlmIGluZmxhdGUoKQorICAgd2FzIG5vdCBhYmxlIHRvIGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgd2hlbiBpdCBuZWVkZWQgdG8gKi8KK2xvY2FsIGludCByZWNvbXByZXNzKHpfc3RyZWFtcCBpbmYsIHpfc3RyZWFtcCBkZWYpCit7CisgICAgaW50IHJldCwgZmx1c2g7CisgICAgdW5zaWduZWQgY2hhciByYXdbUkFXTEVOXTsKKworICAgIGZsdXNoID0gWl9OT19GTFVTSDsKKyAgICBkbyB7CisgICAgICAgIC8qIGRlY29tcHJlc3MgKi8KKyAgICAgICAgaW5mLT5hdmFpbF9vdXQgPSBSQVdMRU47CisgICAgICAgIGluZi0+bmV4dF9vdXQgPSByYXc7CisgICAgICAgIHJldCA9IGluZmxhdGUoaW5mLCBaX05PX0ZMVVNIKTsKKyAgICAgICAgYXNzZXJ0KHJldCAhPSBaX1NUUkVBTV9FUlJPUiAmJiByZXQgIT0gWl9EQVRBX0VSUk9SICYmCisgICAgICAgICAgICAgICByZXQgIT0gWl9ORUVEX0RJQ1QpOworICAgICAgICBpZiAocmV0ID09IFpfTUVNX0VSUk9SKQorICAgICAgICAgICAgcmV0dXJuIHJldDsKKworICAgICAgICAvKiBjb21wcmVzcyB3aGF0IHdhcyBkZWNvbXByZXNlZCB1bnRpbCBkb25lIG9yIG5vIHJvb20gKi8KKyAgICAgICAgZGVmLT5hdmFpbF9pbiA9IFJBV0xFTiAtIGluZi0+YXZhaWxfb3V0OworICAgICAgICBkZWYtPm5leHRfaW4gPSByYXc7CisgICAgICAgIGlmIChpbmYtPmF2YWlsX291dCAhPSAwKQorICAgICAgICAgICAgZmx1c2ggPSBaX0ZJTklTSDsKKyAgICAgICAgcmV0ID0gZGVmbGF0ZShkZWYsIGZsdXNoKTsKKyAgICAgICAgYXNzZXJ0KHJldCAhPSBaX1NUUkVBTV9FUlJPUik7CisgICAgfSB3aGlsZSAocmV0ICE9IFpfU1RSRUFNX0VORCAmJiBkZWYtPmF2YWlsX291dCAhPSAwKTsKKyAgICByZXR1cm4gcmV0OworfQorCisjZGVmaW5lIEVYQ0VTUyAyNTYgICAgICAvKiBlbXBpcmljYWxseSBkZXRlcm1pbmVkIHN0cmVhbSBvdmVyYWdlICovCisjZGVmaW5lIE1BUkdJTiA4ICAgICAgICAvKiBhbW91bnQgdG8gYmFjayBvZmYgZm9yIGNvbXBsZXRpb24gKi8KKworLyogY29tcHJlc3MgZnJvbSBzdGRpbiB0byBmaXhlZC1zaXplIGJsb2NrIG9uIHN0ZG91dCAqLworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIGludCByZXQ7ICAgICAgICAgICAgICAgIC8qIHJldHVybiBjb2RlICovCisgICAgdW5zaWduZWQgc2l6ZTsgICAgICAgICAgLyogcmVxdWVzdGVkIGZpeGVkIG91dHB1dCBibG9jayBzaXplICovCisgICAgdW5zaWduZWQgaGF2ZTsgICAgICAgICAgLyogYnl0ZXMgd3JpdHRlbiBieSBkZWZsYXRlKCkgY2FsbCAqLworICAgIHVuc2lnbmVkIGNoYXIgKmJsazsgICAgIC8qIGludGVybWVkaWF0ZSBhbmQgZmluYWwgc3RyZWFtICovCisgICAgdW5zaWduZWQgY2hhciAqdG1wOyAgICAgLyogY2xvc2UgdG8gZGVzaXJlZCBzaXplIHN0cmVhbSAqLworICAgIHpfc3RyZWFtIGRlZiwgaW5mOyAgICAgIC8qIHpsaWIgZGVmbGF0ZSBhbmQgaW5mbGF0ZSBzdGF0ZXMgKi8KKworICAgIC8qIGdldCByZXF1ZXN0ZWQgb3V0cHV0IHNpemUgKi8KKyAgICBpZiAoYXJnYyAhPSAyKQorICAgICAgICBxdWl0KCJuZWVkIG9uZSBhcmd1bWVudDogc2l6ZSBvZiBvdXRwdXQgYmxvY2siKTsKKyAgICByZXQgPSBzdHJ0b2woYXJndlsxXSwgYXJndiArIDEsIDEwKTsKKyAgICBpZiAoYXJndlsxXVswXSAhPSAwKQorICAgICAgICBxdWl0KCJhcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7CisgICAgaWYgKHJldCA8IDgpICAgICAgICAgICAgLyogOCBpcyBtaW5pbXVtIHpsaWIgc3RyZWFtIHNpemUgKi8KKyAgICAgICAgcXVpdCgibmVlZCBwb3NpdGl2ZSBzaXplIG9mIDggb3IgZ3JlYXRlciIpOworICAgIHNpemUgPSAodW5zaWduZWQpcmV0OworCisgICAgLyogYWxsb2NhdGUgbWVtb3J5IGZvciBidWZmZXJzIGFuZCBjb21wcmVzc2lvbiBlbmdpbmUgKi8KKyAgICBibGsgPSBtYWxsb2Moc2l6ZSArIEVYQ0VTUyk7CisgICAgZGVmLnphbGxvYyA9IFpfTlVMTDsKKyAgICBkZWYuemZyZWUgPSBaX05VTEw7CisgICAgZGVmLm9wYXF1ZSA9IFpfTlVMTDsKKyAgICByZXQgPSBkZWZsYXRlSW5pdCgmZGVmLCBaX0RFRkFVTFRfQ09NUFJFU1NJT04pOworICAgIGlmIChyZXQgIT0gWl9PSyB8fCBibGsgPT0gTlVMTCkKKyAgICAgICAgcXVpdCgib3V0IG9mIG1lbW9yeSIpOworCisgICAgLyogY29tcHJlc3MgZnJvbSBzdGRpbiB1bnRpbCBvdXRwdXQgZnVsbCwgb3Igbm8gbW9yZSBpbnB1dCAqLworICAgIGRlZi5hdmFpbF9vdXQgPSBzaXplICsgRVhDRVNTOworICAgIGRlZi5uZXh0X291dCA9IGJsazsKKyAgICByZXQgPSBwYXJ0Y29tcHJlc3Moc3RkaW4sICZkZWYpOworICAgIGlmIChyZXQgPT0gWl9FUlJOTykKKyAgICAgICAgcXVpdCgiZXJyb3IgcmVhZGluZyBpbnB1dCIpOworCisgICAgLyogaWYgaXQgYWxsIGZpdCwgdGhlbiBzaXplIHdhcyB1bmRlcnN1YnNjcmliZWQgLS0gZG9uZSEgKi8KKyAgICBpZiAocmV0ID09IFpfU1RSRUFNX0VORCAmJiBkZWYuYXZhaWxfb3V0ID49IEVYQ0VTUykgeworICAgICAgICAvKiB3cml0ZSBibG9jayB0byBzdGRvdXQgKi8KKyAgICAgICAgaGF2ZSA9IHNpemUgKyBFWENFU1MgLSBkZWYuYXZhaWxfb3V0OworICAgICAgICBpZiAoZndyaXRlKGJsaywgMSwgaGF2ZSwgc3Rkb3V0KSAhPSBoYXZlIHx8IGZlcnJvcihzdGRvdXQpKQorICAgICAgICAgICAgcXVpdCgiZXJyb3Igd3JpdGluZyBvdXRwdXQiKTsKKworICAgICAgICAvKiBjbGVhbiB1cCBhbmQgcHJpbnQgcmVzdWx0cyB0byBzdGRlcnIgKi8KKyAgICAgICAgcmV0ID0gZGVmbGF0ZUVuZCgmZGVmKTsKKyAgICAgICAgYXNzZXJ0KHJldCAhPSBaX1NUUkVBTV9FUlJPUik7CisgICAgICAgIGZyZWUoYmxrKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgIiV1IGJ5dGVzIHVudXNlZCBvdXQgb2YgJXUgcmVxdWVzdGVkIChhbGwgaW5wdXQpXG4iLAorICAgICAgICAgICAgICAgIHNpemUgLSBoYXZlLCBzaXplKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLyogaXQgZGlkbid0IGFsbCBmaXQgLS0gc2V0IHVwIGZvciByZWNvbXByZXNzaW9uICovCisgICAgaW5mLnphbGxvYyA9IFpfTlVMTDsKKyAgICBpbmYuemZyZWUgPSBaX05VTEw7CisgICAgaW5mLm9wYXF1ZSA9IFpfTlVMTDsKKyAgICBpbmYuYXZhaWxfaW4gPSAwOworICAgIGluZi5uZXh0X2luID0gWl9OVUxMOworICAgIHJldCA9IGluZmxhdGVJbml0KCZpbmYpOworICAgIHRtcCA9IG1hbGxvYyhzaXplICsgRVhDRVNTKTsKKyAgICBpZiAocmV0ICE9IFpfT0sgfHwgdG1wID09IE5VTEwpCisgICAgICAgIHF1aXQoIm91dCBvZiBtZW1vcnkiKTsKKyAgICByZXQgPSBkZWZsYXRlUmVzZXQoJmRlZik7CisgICAgYXNzZXJ0KHJldCAhPSBaX1NUUkVBTV9FUlJPUik7CisKKyAgICAvKiBkbyBmaXJzdCByZWNvbXByZXNzaW9uIGNsb3NlIHRvIHRoZSByaWdodCBhbW91bnQgKi8KKyAgICBpbmYuYXZhaWxfaW4gPSBzaXplICsgRVhDRVNTOworICAgIGluZi5uZXh0X2luID0gYmxrOworICAgIGRlZi5hdmFpbF9vdXQgPSBzaXplICsgRVhDRVNTOworICAgIGRlZi5uZXh0X291dCA9IHRtcDsKKyAgICByZXQgPSByZWNvbXByZXNzKCZpbmYsICZkZWYpOworICAgIGlmIChyZXQgPT0gWl9NRU1fRVJST1IpCisgICAgICAgIHF1aXQoIm91dCBvZiBtZW1vcnkiKTsKKworICAgIC8qIHNldCB1cCBmb3IgbmV4dCByZW9jbXByZXNzaW9uICovCisgICAgcmV0ID0gaW5mbGF0ZVJlc2V0KCZpbmYpOworICAgIGFzc2VydChyZXQgIT0gWl9TVFJFQU1fRVJST1IpOworICAgIHJldCA9IGRlZmxhdGVSZXNldCgmZGVmKTsKKyAgICBhc3NlcnQocmV0ICE9IFpfU1RSRUFNX0VSUk9SKTsKKworICAgIC8qIGRvIHNlY29uZCBhbmQgZmluYWwgcmVjb21wcmVzc2lvbiAodGhpcmQgY29tcHJlc3Npb24pICovCisgICAgaW5mLmF2YWlsX2luID0gc2l6ZSAtIE1BUkdJTjsgICAvKiBhc3N1cmUgc3RyZWFtIHdpbGwgY29tcGxldGUgKi8KKyAgICBpbmYubmV4dF9pbiA9IHRtcDsKKyAgICBkZWYuYXZhaWxfb3V0ID0gc2l6ZTsKKyAgICBkZWYubmV4dF9vdXQgPSBibGs7CisgICAgcmV0ID0gcmVjb21wcmVzcygmaW5mLCAmZGVmKTsKKyAgICBpZiAocmV0ID09IFpfTUVNX0VSUk9SKQorICAgICAgICBxdWl0KCJvdXQgb2YgbWVtb3J5Iik7CisgICAgYXNzZXJ0KHJldCA9PSBaX1NUUkVBTV9FTkQpOyAgICAvKiBvdGhlcndpc2UgTUFSR0lOIHRvbyBzbWFsbCAqLworCisgICAgLyogZG9uZSAtLSB3cml0ZSBibG9jayB0byBzdGRvdXQgKi8KKyAgICBoYXZlID0gc2l6ZSAtIGRlZi5hdmFpbF9vdXQ7CisgICAgaWYgKGZ3cml0ZShibGssIDEsIGhhdmUsIHN0ZG91dCkgIT0gaGF2ZSB8fCBmZXJyb3Ioc3Rkb3V0KSkKKyAgICAgICAgcXVpdCgiZXJyb3Igd3JpdGluZyBvdXRwdXQiKTsKKworICAgIC8qIGNsZWFuIHVwIGFuZCBwcmludCByZXN1bHRzIHRvIHN0ZGVyciAqLworICAgIGZyZWUodG1wKTsKKyAgICByZXQgPSBpbmZsYXRlRW5kKCZpbmYpOworICAgIGFzc2VydChyZXQgIT0gWl9TVFJFQU1fRVJST1IpOworICAgIHJldCA9IGRlZmxhdGVFbmQoJmRlZik7CisgICAgYXNzZXJ0KHJldCAhPSBaX1NUUkVBTV9FUlJPUik7CisgICAgZnJlZShibGspOworICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgIiV1IGJ5dGVzIHVudXNlZCBvdXQgb2YgJXUgcmVxdWVzdGVkICglbHUgaW5wdXQpXG4iLAorICAgICAgICAgICAgc2l6ZSAtIGhhdmUsIHNpemUsIGRlZi50b3RhbF9pbik7CisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9zcmMvZXhhbXBsZXMvZ3VuLmMgYi9zcmMvZXhhbXBsZXMvZ3VuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU0NGZhNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9leGFtcGxlcy9ndW4uYwpAQCAtMCwwICsxLDcwMiBAQAorLyogZ3VuLmMgLS0gc2ltcGxlIGd1bnppcCB0byBnaXZlIGFuIGV4YW1wbGUgb2YgdGhlIHVzZSBvZiBpbmZsYXRlQmFjaygpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUsIDIwMDgsIDIwMTAsIDIwMTIgTWFyayBBZGxlcgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAorICAgVmVyc2lvbiAxLjcgIDEyIEF1Z3VzdCAyMDEyICBNYXJrIEFkbGVyICovCisKKy8qIFZlcnNpb24gaGlzdG9yeToKKyAgIDEuMCAgMTYgRmViIDIwMDMgIEZpcnN0IHZlcnNpb24gZm9yIHRlc3Rpbmcgb2YgaW5mbGF0ZUJhY2soKQorICAgMS4xICAyMSBGZWIgMjAwNSAgRGVjb21wcmVzcyBjb25jYXRlbmF0ZWQgZ3ppcCBzdHJlYW1zCisgICAgICAgICAgICAgICAgICAgICBSZW1vdmUgdXNlIG9mICJ0aGlzIiB2YXJpYWJsZSAoQysrIGtleXdvcmQpCisgICAgICAgICAgICAgICAgICAgICBGaXggcmV0dXJuIHZhbHVlIGZvciBpbigpCisgICAgICAgICAgICAgICAgICAgICBJbXByb3ZlIGFsbG9jYXRpb24gZmFpbHVyZSBjaGVja2luZworICAgICAgICAgICAgICAgICAgICAgQWRkIHR5cGVjYXN0aW5nIGZvciB2b2lkICogc3RydWN0dXJlcworICAgICAgICAgICAgICAgICAgICAgQWRkIC1oIG9wdGlvbiBmb3IgY29tbWFuZCB2ZXJzaW9uIGFuZCB1c2FnZQorICAgICAgICAgICAgICAgICAgICAgQWRkIGEgYnVuY2ggb2YgY29tbWVudHMKKyAgIDEuMiAgMjAgTWFyIDIwMDUgIEFkZCBVbml4IGNvbXByZXNzIChMWlcpIGRlY29tcHJlc3Npb24KKyAgICAgICAgICAgICAgICAgICAgIENvcHkgZmlsZSBhdHRyaWJ1dGVzIGZyb20gaW5wdXQgZmlsZSB0byBvdXRwdXQgZmlsZQorICAgMS4zICAxMiBKdW4gMjAwNSAgQWRkIGNhc3RzIGZvciBlcnJvciBtZXNzYWdlcyBbT2Jlcmh1bWVyXQorICAgMS40ICAgOCBEZWMgMjAwNiAgTFpXIGRlY29tcHJlc3Npb24gc3BlZWQgaW1wcm92ZW1lbnRzCisgICAxLjUgICA5IEZlYiAyMDA4ICBBdm9pZCB3YXJuaW5nIGluIGxhdGVzdCB2ZXJzaW9uIG9mIGdjYworICAgMS42ICAxNyBKYW4gMjAxMCAgQXZvaWQgc2lnbmVkL3Vuc2lnbmVkIGNvbXBhcmlzb24gd2FybmluZ3MKKyAgIDEuNyAgMTIgQXVnIDIwMTIgIFVwZGF0ZSBmb3Igel9jb25zdCB1c2FnZSBpbiB6bGliIDEuMi44CisgKi8KKworLyoKKyAgIGd1biBbIC10IF0gWyBuYW1lIC4uLiBdCisKKyAgIGRlY29tcHJlc3NlcyB0aGUgZGF0YSBpbiB0aGUgbmFtZWQgZ3ppcCBmaWxlcy4gIElmIG5vIGFyZ3VtZW50cyBhcmUgZ2l2ZW4sCisgICBndW4gd2lsbCBkZWNvbXByZXNzIGZyb20gc3RkaW4gdG8gc3Rkb3V0LiAgVGhlIG5hbWVzIG11c3QgZW5kIGluIC5neiwgLWd6LAorICAgLnosIC16LCBfeiwgb3IgLlouICBUaGUgdW5jb21wcmVzc2VkIGRhdGEgd2lsbCBiZSB3cml0dGVuIHRvIGEgZmlsZSBuYW1lCisgICB3aXRoIHRoZSBzdWZmaXggc3RyaXBwZWQuICBPbiBzdWNjZXNzLCB0aGUgb3JpZ2luYWwgZmlsZSBpcyBkZWxldGVkLiAgT24KKyAgIGZhaWx1cmUsIHRoZSBvdXRwdXQgZmlsZSBpcyBkZWxldGVkLiAgRm9yIG1vc3QgZmFpbHVyZXMsIHRoZSBjb21tYW5kIHdpbGwKKyAgIGNvbnRpbnVlIHRvIHByb2Nlc3MgdGhlIHJlbWFpbmluZyBuYW1lcyBvbiB0aGUgY29tbWFuZCBsaW5lLiAgQSBtZW1vcnkKKyAgIGFsbG9jYXRpb24gZmFpbHVyZSB3aWxsIGFib3J0IHRoZSBjb21tYW5kLiAgSWYgLXQgaXMgc3BlY2lmaWVkLCB0aGVuIHRoZQorICAgbGlzdGVkIGZpbGVzIG9yIHN0ZGluIHdpbGwgYmUgdGVzdGVkIGFzIGd6aXAgZmlsZXMgZm9yIGludGVncml0eSAod2l0aG91dAorICAgY2hlY2tpbmcgZm9yIGEgcHJvcGVyIHN1ZmZpeCksIG5vIG91dHB1dCB3aWxsIGJlIHdyaXR0ZW4sIGFuZCBubyBmaWxlcworICAgd2lsbCBiZSBkZWxldGVkLgorCisgICBMaWtlIGd6aXAsIGd1biBhbGxvd3MgY29uY2F0ZW5hdGVkIGd6aXAgc3RyZWFtcyBhbmQgd2lsbCBkZWNvbXByZXNzIHRoZW0sCisgICB3cml0aW5nIGFsbCBvZiB0aGUgdW5jb21wcmVzc2VkIGRhdGEgdG8gdGhlIG91dHB1dC4gIFVubGlrZSBnemlwLCBndW4gYWxsb3dzCisgICBhbiBlbXB0eSBmaWxlIG9uIGlucHV0LCBhbmQgd2lsbCBwcm9kdWNlIG5vIGVycm9yIHdyaXRpbmcgYW4gZW1wdHkgb3V0cHV0CisgICBmaWxlLgorCisgICBndW4gd2lsbCBhbHNvIGRlY29tcHJlc3MgZmlsZXMgbWFkZSBieSBVbml4IGNvbXByZXNzLCB3aGljaCB1c2VzIExaVworICAgY29tcHJlc3Npb24uICBUaGVzZSBmaWxlcyBhcmUgYXV0b21hdGljYWxseSBkZXRlY3RlZCBieSB2aXJ0dWUgb2YgdGhlaXIKKyAgIG1hZ2ljIGhlYWRlciBieXRlcy4gIFNpbmNlIHRoZSBlbmQgb2YgVW5peCBjb21wcmVzcyBzdHJlYW0gaXMgbWFya2VkIGJ5IHRoZQorICAgZW5kLW9mLWZpbGUsIHRoZXkgY2Fubm90IGJlIGNvbmNhbnRlbmF0ZWQuICBJZiBhIFVuaXggY29tcHJlc3Mgc3RyZWFtIGlzCisgICBlbmNvdW50ZXJlZCBpbiBhbiBpbnB1dCBmaWxlLCBpdCBpcyB0aGUgbGFzdCBzdHJlYW0gaW4gdGhhdCBmaWxlLgorCisgICBMaWtlIGd1bnppcCBhbmQgdW5jb21wcmVzcywgdGhlIGZpbGUgYXR0cmlidXRlcyBvZiB0aGUgb3JpZ2luYWwgY29tcHJlc3NlZAorICAgZmlsZSBhcmUgbWFpbnRhaW5lZCBpbiB0aGUgZmluYWwgdW5jb21wcmVzc2VkIGZpbGUsIHRvIHRoZSBleHRlbnQgdGhhdCB0aGUKKyAgIHVzZXIgcGVybWlzc2lvbnMgYWxsb3cgaXQuCisKKyAgIE9uIG15IE1hYyBPUyBYIFBvd2VyUEMgRzQsIGd1biBpcyBhbG1vc3QgdHdpY2UgYXMgZmFzdCBhcyBndW56aXAgKHZlcnNpb24KKyAgIDEuMi40KSBpcyBvbiB0aGUgc2FtZSBmaWxlLCB3aGVuIGd1biBpcyBsaW5rZWQgd2l0aCB6bGliIDEuMi4yLiAgQWxzbyB0aGUKKyAgIExaVyBkZWNvbXByZXNzaW9uIHByb3ZpZGVkIGJ5IGd1biBpcyBhYm91dCB0d2ljZSBhcyBmYXN0IGFzIHRoZSBzdGFuZGFyZAorICAgVW5peCB1bmNvbXByZXNzIGNvbW1hbmQuCisgKi8KKworLyogZXh0ZXJuYWwgZnVuY3Rpb25zIGFuZCByZWxhdGVkIHR5cGVzIGFuZCBjb25zdGFudHMgKi8KKyNpbmNsdWRlIDxzdGRpby5oPiAgICAgICAgICAvKiBmcHJpbnRmKCkgKi8KKyNpbmNsdWRlIDxzdGRsaWIuaD4gICAgICAgICAvKiBtYWxsb2MoKSwgZnJlZSgpICovCisjaW5jbHVkZSA8c3RyaW5nLmg+ICAgICAgICAgLyogc3RyZXJyb3IoKSwgc3RyY21wKCksIHN0cmxlbigpLCBtZW1jcHkoKSAqLworI2luY2x1ZGUgPGVycm5vLmg+ICAgICAgICAgIC8qIGVycm5vICovCisjaW5jbHVkZSA8ZmNudGwuaD4gICAgICAgICAgLyogb3BlbigpICovCisjaW5jbHVkZSA8dW5pc3RkLmg+ICAgICAgICAgLyogcmVhZCgpLCB3cml0ZSgpLCBjbG9zZSgpLCBjaG93bigpLCB1bmxpbmsoKSAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+ICAgICAgIC8qIHN0YXQoKSwgY2htb2QoKSAqLworI2luY2x1ZGUgPHV0aW1lLmg+ICAgICAgICAgIC8qIHV0aW1lKCkgKi8KKyNpbmNsdWRlICJ6bGliLmgiICAgICAgICAgICAvKiBpbmZsYXRlQmFja0luaXQoKSwgaW5mbGF0ZUJhY2soKSwgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbmZsYXRlQmFja0VuZCgpLCBjcmMzMigpICovCisKKy8qIGZ1bmN0aW9uIGRlY2xhcmF0aW9uICovCisjZGVmaW5lIGxvY2FsIHN0YXRpYworCisvKiBidWZmZXIgY29uc3RhbnRzICovCisjZGVmaW5lIFNJWkUgMzI3NjhVICAgICAgICAgLyogaW5wdXQgYW5kIG91dHB1dCBidWZmZXIgc2l6ZXMgKi8KKyNkZWZpbmUgUElFQ0UgMTYzODQgICAgICAgICAvKiBsaW1pdHMgaS9vIGNodW5rcyBmb3IgMTYtYml0IGludCBjYXNlICovCisKKy8qIHN0cnVjdHVyZSBmb3IgaW5mYmFjaygpIHRvIHBhc3MgdG8gaW5wdXQgZnVuY3Rpb24gaW4oKSAtLSBpdCBtYWludGFpbnMgdGhlCisgICBpbnB1dCBmaWxlIGFuZCBhIGJ1ZmZlciBvZiBzaXplIFNJWkUgKi8KK3N0cnVjdCBpbmQgeworICAgIGludCBpbmZpbGU7CisgICAgdW5zaWduZWQgY2hhciAqaW5idWY7Cit9OworCisvKiBMb2FkIGlucHV0IGJ1ZmZlciwgYXNzdW1lZCB0byBiZSBlbXB0eSwgYW5kIHJldHVybiBieXRlcyBsb2FkZWQgYW5kIGEKKyAgIHBvaW50ZXIgdG8gdGhlbS4gIHJlYWQoKSBpcyBjYWxsZWQgdW50aWwgdGhlIGJ1ZmZlciBpcyBmdWxsLCBvciB1bnRpbCBpdAorICAgcmV0dXJucyBlbmQtb2YtZmlsZSBvciBlcnJvci4gIFJldHVybiAwIG9uIGVycm9yLiAqLworbG9jYWwgdW5zaWduZWQgaW4odm9pZCAqaW5fZGVzYywgel9jb25zdCB1bnNpZ25lZCBjaGFyICoqYnVmKQoreworICAgIGludCByZXQ7CisgICAgdW5zaWduZWQgbGVuOworICAgIHVuc2lnbmVkIGNoYXIgKm5leHQ7CisgICAgc3RydWN0IGluZCAqbWUgPSAoc3RydWN0IGluZCAqKWluX2Rlc2M7CisKKyAgICBuZXh0ID0gbWUtPmluYnVmOworICAgICpidWYgPSBuZXh0OworICAgIGxlbiA9IDA7CisgICAgZG8geworICAgICAgICByZXQgPSBQSUVDRTsKKyAgICAgICAgaWYgKCh1bnNpZ25lZClyZXQgPiBTSVpFIC0gbGVuKQorICAgICAgICAgICAgcmV0ID0gKGludCkoU0laRSAtIGxlbik7CisgICAgICAgIHJldCA9IChpbnQpcmVhZChtZS0+aW5maWxlLCBuZXh0LCByZXQpOworICAgICAgICBpZiAocmV0ID09IC0xKSB7CisgICAgICAgICAgICBsZW4gPSAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgbmV4dCArPSByZXQ7CisgICAgICAgIGxlbiArPSByZXQ7CisgICAgfSB3aGlsZSAocmV0ICE9IDAgJiYgbGVuIDwgU0laRSk7CisgICAgcmV0dXJuIGxlbjsKK30KKworLyogc3RydWN0dXJlIGZvciBpbmZiYWNrKCkgdG8gcGFzcyB0byBvdXRwdXQgZnVuY3Rpb24gb3V0KCkgLS0gaXQgbWFpbnRhaW5zIHRoZQorICAgb3V0cHV0IGZpbGUsIGEgcnVubmluZyBDUkMtMzIgY2hlY2sgb24gdGhlIG91dHB1dCBhbmQgdGhlIHRvdGFsIG51bWJlciBvZgorICAgYnl0ZXMgb3V0cHV0LCBib3RoIGZvciBjaGVja2luZyBhZ2FpbnN0IHRoZSBnemlwIHRyYWlsZXIuICAoVGhlIGxlbmd0aCBpbgorICAgdGhlIGd6aXAgdHJhaWxlciBpcyBzdG9yZWQgbW9kdWxvIDJeMzIsIHNvIGl0J3Mgb2sgaWYgYSBsb25nIGlzIDMyIGJpdHMgYW5kCisgICB0aGUgb3V0cHV0IGlzIGdyZWF0ZXIgdGhhbiA0IEdCLikgKi8KK3N0cnVjdCBvdXRkIHsKKyAgICBpbnQgb3V0ZmlsZTsKKyAgICBpbnQgY2hlY2s7ICAgICAgICAgICAgICAgICAgLyogdHJ1ZSBpZiBjaGVja2luZyBjcmMgYW5kIHRvdGFsICovCisgICAgdW5zaWduZWQgbG9uZyBjcmM7CisgICAgdW5zaWduZWQgbG9uZyB0b3RhbDsKK307CisKKy8qIFdyaXRlIG91dHB1dCBidWZmZXIgYW5kIHVwZGF0ZSB0aGUgQ1JDLTMyIGFuZCB0b3RhbCBieXRlcyB3cml0dGVuLiAgd3JpdGUoKQorICAgaXMgY2FsbGVkIHVudGlsIGFsbCBvZiB0aGUgb3V0cHV0IGlzIHdyaXR0ZW4gb3IgYW4gZXJyb3IgaXMgZW5jb3VudGVyZWQuCisgICBPbiBzdWNjZXNzIG91dCgpIHJldHVybnMgMC4gIEZvciBhIHdyaXRlIGZhaWx1cmUsIG91dCgpIHJldHVybnMgMS4gIElmIHRoZQorICAgb3V0cHV0IGZpbGUgZGVzY3JpcHRvciBpcyAtMSwgdGhlbiBub3RoaW5nIGlzIHdyaXR0ZW4uCisgKi8KK2xvY2FsIGludCBvdXQodm9pZCAqb3V0X2Rlc2MsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVuKQoreworICAgIGludCByZXQ7CisgICAgc3RydWN0IG91dGQgKm1lID0gKHN0cnVjdCBvdXRkICopb3V0X2Rlc2M7CisKKyAgICBpZiAobWUtPmNoZWNrKSB7CisgICAgICAgIG1lLT5jcmMgPSBjcmMzMihtZS0+Y3JjLCBidWYsIGxlbik7CisgICAgICAgIG1lLT50b3RhbCArPSBsZW47CisgICAgfQorICAgIGlmIChtZS0+b3V0ZmlsZSAhPSAtMSkKKyAgICAgICAgZG8geworICAgICAgICAgICAgcmV0ID0gUElFQ0U7CisgICAgICAgICAgICBpZiAoKHVuc2lnbmVkKXJldCA+IGxlbikKKyAgICAgICAgICAgICAgICByZXQgPSAoaW50KWxlbjsKKyAgICAgICAgICAgIHJldCA9IChpbnQpd3JpdGUobWUtPm91dGZpbGUsIGJ1ZiwgcmV0KTsKKyAgICAgICAgICAgIGlmIChyZXQgPT0gLTEpCisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICBidWYgKz0gcmV0OworICAgICAgICAgICAgbGVuIC09IHJldDsKKyAgICAgICAgfSB3aGlsZSAobGVuICE9IDApOworICAgIHJldHVybiAwOworfQorCisvKiBuZXh0IGlucHV0IGJ5dGUgbWFjcm8gZm9yIHVzZSBpbnNpZGUgbHVucGlwZSgpIGFuZCBndW5waXBlKCkgKi8KKyNkZWZpbmUgTkVYVCgpIChoYXZlID8gMCA6IChoYXZlID0gaW4oaW5kcCwgJm5leHQpKSwgXAorICAgICAgICAgICAgICAgIGxhc3QgPSBoYXZlID8gKGhhdmUtLSwgKGludCkoKm5leHQrKykpIDogLTEpCisKKy8qIG1lbW9yeSBmb3IgZ3VucGlwZSgpIGFuZCBsdW5waXBlKCkgLS0KKyAgIHRoZSBmaXJzdCAyNTYgZW50cmllcyBvZiBwcmVmaXhbXSBhbmQgc3VmZml4W10gYXJlIG5ldmVyIHVzZWQsIGNvdWxkCisgICBoYXZlIG9mZnNldCB0aGUgaW5kZXgsIGJ1dCBpdCdzIGZhc3RlciB0byB3YXN0ZSB0aGUgbWVtb3J5ICovCit1bnNpZ25lZCBjaGFyIGluYnVmW1NJWkVdOyAgICAgICAgICAgICAgLyogaW5wdXQgYnVmZmVyICovCit1bnNpZ25lZCBjaGFyIG91dGJ1ZltTSVpFXTsgICAgICAgICAgICAgLyogb3V0cHV0IGJ1ZmZlciAqLwordW5zaWduZWQgc2hvcnQgcHJlZml4WzY1NTM2XTsgICAgICAgICAgIC8qIGluZGV4IHRvIExaVyBwcmVmaXggc3RyaW5nICovCit1bnNpZ25lZCBjaGFyIHN1ZmZpeFs2NTUzNl07ICAgICAgICAgICAgLyogb25lLWNoYXJhY3RlciBMWlcgc3VmZml4ICovCit1bnNpZ25lZCBjaGFyIG1hdGNoWzY1MjgwICsgMl07ICAgICAgICAgLyogYnVmZmVyIGZvciByZXZlcnNlZCBtYXRjaCBvciBnemlwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzJLIHNsaWRpbmcgd2luZG93ICovCisKKy8qIHRocm93IG91dCB3aGF0J3MgbGVmdCBpbiB0aGUgY3VycmVudCBiaXRzIGJ5dGUgYnVmZmVyICh0aGlzIGlzIGEgdmVzdGlnaWFsCisgICBhc3BlY3Qgb2YgdGhlIGNvbXByZXNzZWQgZGF0YSBmb3JtYXQgZGVyaXZlZCBmcm9tIGFuIGltcGxlbWVudGF0aW9uIHRoYXQKKyAgIG1hZGUgdXNlIG9mIGEgc3BlY2lhbCBWQVggbWFjaGluZSBpbnN0cnVjdGlvbiEpICovCisjZGVmaW5lIEZMVVNIQ09ERSgpIFwKKyAgICBkbyB7IFwKKyAgICAgICAgbGVmdCA9IDA7IFwKKyAgICAgICAgcmVtID0gMDsgXAorICAgICAgICBpZiAoY2h1bmsgPiBoYXZlKSB7IFwKKyAgICAgICAgICAgIGNodW5rIC09IGhhdmU7IFwKKyAgICAgICAgICAgIGhhdmUgPSAwOyBcCisgICAgICAgICAgICBpZiAoTkVYVCgpID09IC0xKSBcCisgICAgICAgICAgICAgICAgYnJlYWs7IFwKKyAgICAgICAgICAgIGNodW5rLS07IFwKKyAgICAgICAgICAgIGlmIChjaHVuayA+IGhhdmUpIHsgXAorICAgICAgICAgICAgICAgIGNodW5rID0gaGF2ZSA9IDA7IFwKKyAgICAgICAgICAgICAgICBicmVhazsgXAorICAgICAgICAgICAgfSBcCisgICAgICAgIH0gXAorICAgICAgICBoYXZlIC09IGNodW5rOyBcCisgICAgICAgIG5leHQgKz0gY2h1bms7IFwKKyAgICAgICAgY2h1bmsgPSAwOyBcCisgICAgfSB3aGlsZSAoMCkKKworLyogRGVjb21wcmVzcyBhIGNvbXByZXNzIChMWlcpIGZpbGUgZnJvbSBpbmRwIHRvIG91dGZpbGUuICBUaGUgY29tcHJlc3MgbWFnaWMKKyAgIGhlYWRlciAodHdvIGJ5dGVzKSBoYXMgYWxyZWFkeSBiZWVuIHJlYWQgYW5kIHZlcmlmaWVkLiAgVGhlcmUgYXJlIGhhdmUgYnl0ZXMKKyAgIG9mIGJ1ZmZlcmVkIGlucHV0IGF0IG5leHQuICBzdHJtIGlzIHVzZWQgZm9yIHBhc3NpbmcgZXJyb3IgaW5mb3JtYXRpb24gYmFjaworICAgdG8gZ3VucGlwZSgpLgorCisgICBsdW5waXBlKCkgd2lsbCByZXR1cm4gWl9PSyBvbiBzdWNjZXNzLCBaX0JVRl9FUlJPUiBmb3IgYW4gdW5leHBlY3RlZCBlbmQgb2YKKyAgIGZpbGUsIHJlYWQgZXJyb3IsIG9yIHdyaXRlIGVycm9yIChhIHdyaXRlIGVycm9yIGluZGljYXRlZCBieSBzdHJtLT5uZXh0X2luCisgICBub3QgZXF1YWwgdG8gWl9OVUxMKSwgb3IgWl9EQVRBX0VSUk9SIGZvciBpbnZhbGlkIGlucHV0LgorICovCitsb2NhbCBpbnQgbHVucGlwZSh1bnNpZ25lZCBoYXZlLCB6X2NvbnN0IHVuc2lnbmVkIGNoYXIgKm5leHQsIHN0cnVjdCBpbmQgKmluZHAsCisgICAgICAgICAgICAgICAgICBpbnQgb3V0ZmlsZSwgel9zdHJlYW0gKnN0cm0pCit7CisgICAgaW50IGxhc3Q7ICAgICAgICAgICAgICAgICAgIC8qIGxhc3QgYnl0ZSByZWFkIGJ5IE5FWFQoKSwgb3IgLTEgaWYgRU9GICovCisgICAgdW5zaWduZWQgY2h1bms7ICAgICAgICAgICAgIC8qIGJ5dGVzIGxlZnQgaW4gY3VycmVudCBjaHVuayAqLworICAgIGludCBsZWZ0OyAgICAgICAgICAgICAgICAgICAvKiBiaXRzIGxlZnQgaW4gcmVtICovCisgICAgdW5zaWduZWQgcmVtOyAgICAgICAgICAgICAgIC8qIHVudXNlZCBiaXRzIGZyb20gaW5wdXQgKi8KKyAgICBpbnQgYml0czsgICAgICAgICAgICAgICAgICAgLyogY3VycmVudCBiaXRzIHBlciBjb2RlICovCisgICAgdW5zaWduZWQgY29kZTsgICAgICAgICAgICAgIC8qIGNvZGUsIHRhYmxlIHRyYXZlcnNhbCBpbmRleCAqLworICAgIHVuc2lnbmVkIG1hc2s7ICAgICAgICAgICAgICAvKiBtYXNrIGZvciBjdXJyZW50IGJpdHMgY29kZXMgKi8KKyAgICBpbnQgbWF4OyAgICAgICAgICAgICAgICAgICAgLyogbWF4aW11bSBiaXRzIHBlciBjb2RlIGZvciB0aGlzIHN0cmVhbSAqLworICAgIHVuc2lnbmVkIGZsYWdzOyAgICAgICAgICAgICAvKiBjb21wcmVzcyBmbGFncywgdGhlbiBibG9jayBjb21wcmVzcyBmbGFnICovCisgICAgdW5zaWduZWQgZW5kOyAgICAgICAgICAgICAgIC8qIGxhc3QgdmFsaWQgZW50cnkgaW4gcHJlZml4L3N1ZmZpeCB0YWJsZXMgKi8KKyAgICB1bnNpZ25lZCB0ZW1wOyAgICAgICAgICAgICAgLyogY3VycmVudCBjb2RlICovCisgICAgdW5zaWduZWQgcHJldjsgICAgICAgICAgICAgIC8qIHByZXZpb3VzIGNvZGUgKi8KKyAgICB1bnNpZ25lZCBmaW5hbDsgICAgICAgICAgICAgLyogbGFzdCBjaGFyYWN0ZXIgd3JpdHRlbiBmb3IgcHJldmlvdXMgY29kZSAqLworICAgIHVuc2lnbmVkIHN0YWNrOyAgICAgICAgICAgICAvKiBuZXh0IHBvc2l0aW9uIGZvciByZXZlcnNlZCBzdHJpbmcgKi8KKyAgICB1bnNpZ25lZCBvdXRjbnQ7ICAgICAgICAgICAgLyogYnl0ZXMgaW4gb3V0cHV0IGJ1ZmZlciAqLworICAgIHN0cnVjdCBvdXRkIG91dGQ7ICAgICAgICAgICAvKiBvdXRwdXQgc3RydWN0dXJlICovCisgICAgdW5zaWduZWQgY2hhciAqcDsKKworICAgIC8qIHNldCB1cCBvdXRwdXQgKi8KKyAgICBvdXRkLm91dGZpbGUgPSBvdXRmaWxlOworICAgIG91dGQuY2hlY2sgPSAwOworCisgICAgLyogcHJvY2VzcyByZW1haW5kZXIgb2YgY29tcHJlc3MgaGVhZGVyIC0tIGEgZmxhZ3MgYnl0ZSAqLworICAgIGZsYWdzID0gTkVYVCgpOworICAgIGlmIChsYXN0ID09IC0xKQorICAgICAgICByZXR1cm4gWl9CVUZfRVJST1I7CisgICAgaWYgKGZsYWdzICYgMHg2MCkgeworICAgICAgICBzdHJtLT5tc2cgPSAoY2hhciAqKSJ1bmtub3duIGx6dyBmbGFncyBzZXQiOworICAgICAgICByZXR1cm4gWl9EQVRBX0VSUk9SOworICAgIH0KKyAgICBtYXggPSBmbGFncyAmIDB4MWY7CisgICAgaWYgKG1heCA8IDkgfHwgbWF4ID4gMTYpIHsKKyAgICAgICAgc3RybS0+bXNnID0gKGNoYXIgKikibHp3IGJpdHMgb3V0IG9mIHJhbmdlIjsKKyAgICAgICAgcmV0dXJuIFpfREFUQV9FUlJPUjsKKyAgICB9CisgICAgaWYgKG1heCA9PSA5KSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDkgZG9lc24ndCByZWFsbHkgbWVhbiA5ICovCisgICAgICAgIG1heCA9IDEwOworICAgIGZsYWdzICY9IDB4ODA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cnVlIGlmIGJsb2NrIGNvbXByZXNzICovCisKKyAgICAvKiBjbGVhciB0YWJsZSAqLworICAgIGJpdHMgPSA5OworICAgIG1hc2sgPSAweDFmZjsKKyAgICBlbmQgPSBmbGFncyA/IDI1NiA6IDI1NTsKKworICAgIC8qIHNldCB1cDogZ2V0IGZpcnN0IDktYml0IGNvZGUsIHdoaWNoIGlzIHRoZSBmaXJzdCBkZWNvbXByZXNzZWQgYnl0ZSwgYnV0CisgICAgICAgZG9uJ3QgY3JlYXRlIGEgdGFibGUgZW50cnkgdW50aWwgdGhlIG5leHQgY29kZSAqLworICAgIGlmIChORVhUKCkgPT0gLTEpICAgICAgICAgICAgICAgICAgICAgICAvKiBubyBjb21wcmVzc2VkIGRhdGEgaXMgb2sgKi8KKyAgICAgICAgcmV0dXJuIFpfT0s7CisgICAgZmluYWwgPSBwcmV2ID0gKHVuc2lnbmVkKWxhc3Q7ICAgICAgICAgIC8qIGxvdyA4IGJpdHMgb2YgY29kZSAqLworICAgIGlmIChORVhUKCkgPT0gLTEpICAgICAgICAgICAgICAgICAgICAgICAvKiBtaXNzaW5nIGEgYml0ICovCisgICAgICAgIHJldHVybiBaX0JVRl9FUlJPUjsKKyAgICBpZiAobGFzdCAmIDEpIHsgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29kZSBtdXN0IGJlIDwgMjU2ICovCisgICAgICAgIHN0cm0tPm1zZyA9IChjaGFyICopImludmFsaWQgbHp3IGNvZGUiOworICAgICAgICByZXR1cm4gWl9EQVRBX0VSUk9SOworICAgIH0KKyAgICByZW0gPSAodW5zaWduZWQpbGFzdCA+PiAxOyAgICAgICAgICAgICAgLyogcmVtYWluaW5nIDcgYml0cyAqLworICAgIGxlZnQgPSA3OworICAgIGNodW5rID0gYml0cyAtIDI7ICAgICAgICAgICAgICAgICAgICAgICAvKiA3IGJ5dGVzIGxlZnQgaW4gdGhpcyBjaHVuayAqLworICAgIG91dGJ1ZlswXSA9ICh1bnNpZ25lZCBjaGFyKWZpbmFsOyAgICAgICAvKiB3cml0ZSBmaXJzdCBkZWNvbXByZXNzZWQgYnl0ZSAqLworICAgIG91dGNudCA9IDE7CisKKyAgICAvKiBkZWNvZGUgY29kZXMgKi8KKyAgICBzdGFjayA9IDA7CisgICAgZm9yICg7OykgeworICAgICAgICAvKiBpZiB0aGUgdGFibGUgd2lsbCBiZSBmdWxsIGFmdGVyIHRoaXMsIGluY3JlbWVudCB0aGUgY29kZSBzaXplICovCisgICAgICAgIGlmIChlbmQgPj0gbWFzayAmJiBiaXRzIDwgbWF4KSB7CisgICAgICAgICAgICBGTFVTSENPREUoKTsKKyAgICAgICAgICAgIGJpdHMrKzsKKyAgICAgICAgICAgIG1hc2sgPDw9IDE7CisgICAgICAgICAgICBtYXNrKys7CisgICAgICAgIH0KKworICAgICAgICAvKiBnZXQgYSBjb2RlIG9mIGxlbmd0aCBiaXRzICovCisgICAgICAgIGlmIChjaHVuayA9PSAwKSAgICAgICAgICAgICAgICAgICAgIC8qIGRlY3JlbWVudCBjaHVuayBtb2R1bG8gYml0cyAqLworICAgICAgICAgICAgY2h1bmsgPSBiaXRzOworICAgICAgICBjb2RlID0gcmVtOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsb3cgYml0cyBvZiBjb2RlICovCisgICAgICAgIGlmIChORVhUKCkgPT0gLTEpIHsgICAgICAgICAgICAgICAgIC8qIEVPRiBpcyBlbmQgb2YgY29tcHJlc3NlZCBkYXRhICovCisgICAgICAgICAgICAvKiB3cml0ZSByZW1haW5pbmcgYnVmZmVyZWQgb3V0cHV0ICovCisgICAgICAgICAgICBpZiAob3V0Y250ICYmIG91dCgmb3V0ZCwgb3V0YnVmLCBvdXRjbnQpKSB7CisgICAgICAgICAgICAgICAgc3RybS0+bmV4dF9pbiA9IG91dGJ1ZjsgICAgIC8qIHNpZ25hbCB3cml0ZSBlcnJvciAqLworICAgICAgICAgICAgICAgIHJldHVybiBaX0JVRl9FUlJPUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBaX09LOworICAgICAgICB9CisgICAgICAgIGNvZGUgKz0gKHVuc2lnbmVkKWxhc3QgPDwgbGVmdDsgICAgIC8qIG1pZGRsZSAob3IgaGlnaCkgYml0cyBvZiBjb2RlICovCisgICAgICAgIGxlZnQgKz0gODsKKyAgICAgICAgY2h1bmstLTsKKyAgICAgICAgaWYgKGJpdHMgPiBsZWZ0KSB7ICAgICAgICAgICAgICAgICAgLyogbmVlZCBtb3JlIGJpdHMgKi8KKyAgICAgICAgICAgIGlmIChORVhUKCkgPT0gLTEpICAgICAgICAgICAgICAgLyogY2FuJ3QgZW5kIGluIG1pZGRsZSBvZiBjb2RlICovCisgICAgICAgICAgICAgICAgcmV0dXJuIFpfQlVGX0VSUk9SOworICAgICAgICAgICAgY29kZSArPSAodW5zaWduZWQpbGFzdCA8PCBsZWZ0OyAvKiBoaWdoIGJpdHMgb2YgY29kZSAqLworICAgICAgICAgICAgbGVmdCArPSA4OworICAgICAgICAgICAgY2h1bmstLTsKKyAgICAgICAgfQorICAgICAgICBjb2RlICY9IG1hc2s7ICAgICAgICAgICAgICAgICAgICAgICAvKiBtYXNrIHRvIGN1cnJlbnQgY29kZSBsZW5ndGggKi8KKyAgICAgICAgbGVmdCAtPSBiaXRzOyAgICAgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHVudXNlZCBiaXRzICovCisgICAgICAgIHJlbSA9ICh1bnNpZ25lZClsYXN0ID4+ICg4IC0gbGVmdCk7IC8qIHVudXNlZCBiaXRzIGZyb20gbGFzdCBieXRlICovCisKKyAgICAgICAgLyogcHJvY2VzcyBjbGVhciBjb2RlICgyNTYpICovCisgICAgICAgIGlmIChjb2RlID09IDI1NiAmJiBmbGFncykgeworICAgICAgICAgICAgRkxVU0hDT0RFKCk7CisgICAgICAgICAgICBiaXRzID0gOTsgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXRpYWxpemUgYml0cyBhbmQgbWFzayAqLworICAgICAgICAgICAgbWFzayA9IDB4MWZmOworICAgICAgICAgICAgZW5kID0gMjU1OyAgICAgICAgICAgICAgICAgICAgICAvKiBlbXB0eSB0YWJsZSAqLworICAgICAgICAgICAgY29udGludWU7ICAgICAgICAgICAgICAgICAgICAgICAvKiBnZXQgbmV4dCBjb2RlICovCisgICAgICAgIH0KKworICAgICAgICAvKiBzcGVjaWFsIGNvZGUgdG8gcmV1c2UgbGFzdCBtYXRjaCAqLworICAgICAgICB0ZW1wID0gY29kZTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBzYXZlIHRoZSBjdXJyZW50IGNvZGUgKi8KKyAgICAgICAgaWYgKGNvZGUgPiBlbmQpIHsKKyAgICAgICAgICAgIC8qIEJlIHBpY2t5IG9uIHRoZSBhbGxvd2VkIGNvZGUgaGVyZSwgYW5kIG1ha2Ugc3VyZSB0aGF0IHRoZSBjb2RlCisgICAgICAgICAgICAgICB3ZSBkcm9wIHRocm91Z2ggKHByZXYpIHdpbGwgYmUgYSB2YWxpZCBpbmRleCBzbyB0aGF0IHJhbmRvbQorICAgICAgICAgICAgICAgaW5wdXQgZG9lcyBub3QgY2F1c2UgYW4gZXhjZXB0aW9uLiAgVGhlIGNvZGUgIT0gZW5kICsgMSBjaGVjayBpcworICAgICAgICAgICAgICAgZW1waXJpY2FsbHkgZGVyaXZlZCwgYW5kIG5vdCBjaGVja2VkIGluIHRoZSBvcmlnaW5hbCB1bmNvbXByZXNzCisgICAgICAgICAgICAgICBjb2RlLiAgSWYgdGhpcyBldmVyIGNhdXNlcyBhIHByb2JsZW0sIHRoYXQgY2hlY2sgY291bGQgYmUgc2FmZWx5CisgICAgICAgICAgICAgICByZW1vdmVkLiAgTGVhdmluZyB0aGlzIGNoZWNrIGluIGdyZWF0bHkgaW1wcm92ZXMgZ3VuJ3MgYWJpbGl0eQorICAgICAgICAgICAgICAgdG8gZGV0ZWN0IHJhbmRvbSBvciBjb3JydXB0ZWQgaW5wdXQgYWZ0ZXIgYSBjb21wcmVzcyBoZWFkZXIuCisgICAgICAgICAgICAgICBJbiBhbnkgY2FzZSwgdGhlIHByZXYgPiBlbmQgY2hlY2sgbXVzdCBiZSByZXRhaW5lZC4gKi8KKyAgICAgICAgICAgIGlmIChjb2RlICE9IGVuZCArIDEgfHwgcHJldiA+IGVuZCkgeworICAgICAgICAgICAgICAgIHN0cm0tPm1zZyA9IChjaGFyICopImludmFsaWQgbHp3IGNvZGUiOworICAgICAgICAgICAgICAgIHJldHVybiBaX0RBVEFfRVJST1I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtYXRjaFtzdGFjaysrXSA9ICh1bnNpZ25lZCBjaGFyKWZpbmFsOworICAgICAgICAgICAgY29kZSA9IHByZXY7CisgICAgICAgIH0KKworICAgICAgICAvKiB3YWxrIHRocm91Z2ggbGlua2VkIGxpc3QgdG8gZ2VuZXJhdGUgb3V0cHV0IGluIHJldmVyc2Ugb3JkZXIgKi8KKyAgICAgICAgcCA9IG1hdGNoICsgc3RhY2s7CisgICAgICAgIHdoaWxlIChjb2RlID49IDI1NikgeworICAgICAgICAgICAgKnArKyA9IHN1ZmZpeFtjb2RlXTsKKyAgICAgICAgICAgIGNvZGUgPSBwcmVmaXhbY29kZV07CisgICAgICAgIH0KKyAgICAgICAgc3RhY2sgPSBwIC0gbWF0Y2g7CisgICAgICAgIG1hdGNoW3N0YWNrKytdID0gKHVuc2lnbmVkIGNoYXIpY29kZTsKKyAgICAgICAgZmluYWwgPSBjb2RlOworCisgICAgICAgIC8qIGxpbmsgbmV3IHRhYmxlIGVudHJ5ICovCisgICAgICAgIGlmIChlbmQgPCBtYXNrKSB7CisgICAgICAgICAgICBlbmQrKzsKKyAgICAgICAgICAgIHByZWZpeFtlbmRdID0gKHVuc2lnbmVkIHNob3J0KXByZXY7CisgICAgICAgICAgICBzdWZmaXhbZW5kXSA9ICh1bnNpZ25lZCBjaGFyKWZpbmFsOworICAgICAgICB9CisKKyAgICAgICAgLyogc2V0IHByZXZpb3VzIGNvZGUgZm9yIG5leHQgaXRlcmF0aW9uICovCisgICAgICAgIHByZXYgPSB0ZW1wOworCisgICAgICAgIC8qIHdyaXRlIG91dHB1dCBpbiBmb3J3YXJkIG9yZGVyICovCisgICAgICAgIHdoaWxlIChzdGFjayA+IFNJWkUgLSBvdXRjbnQpIHsKKyAgICAgICAgICAgIHdoaWxlIChvdXRjbnQgPCBTSVpFKQorICAgICAgICAgICAgICAgIG91dGJ1ZltvdXRjbnQrK10gPSBtYXRjaFstLXN0YWNrXTsKKyAgICAgICAgICAgIGlmIChvdXQoJm91dGQsIG91dGJ1Ziwgb3V0Y250KSkgeworICAgICAgICAgICAgICAgIHN0cm0tPm5leHRfaW4gPSBvdXRidWY7IC8qIHNpZ25hbCB3cml0ZSBlcnJvciAqLworICAgICAgICAgICAgICAgIHJldHVybiBaX0JVRl9FUlJPUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dGNudCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgcCA9IG1hdGNoICsgc3RhY2s7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIG91dGJ1ZltvdXRjbnQrK10gPSAqLS1wOworICAgICAgICB9IHdoaWxlIChwID4gbWF0Y2gpOworICAgICAgICBzdGFjayA9IDA7CisKKyAgICAgICAgLyogbG9vcCBmb3IgbmV4dCBjb2RlIHdpdGggZmluYWwgYW5kIHByZXYgYXMgdGhlIGxhc3QgbWF0Y2gsIHJlbSBhbmQKKyAgICAgICAgICAgbGVmdCBwcm92aWRlIHRoZSBmaXJzdCAwLi43IGJpdHMgb2YgdGhlIG5leHQgY29kZSwgZW5kIGlzIHRoZSBsYXN0CisgICAgICAgICAgIHZhbGlkIHRhYmxlIGVudHJ5ICovCisgICAgfQorfQorCisvKiBEZWNvbXByZXNzIGEgZ3ppcCBmaWxlIGZyb20gaW5maWxlIHRvIG91dGZpbGUuICBzdHJtIGlzIGFzc3VtZWQgdG8gaGF2ZSBiZWVuCisgICBzdWNjZXNzZnVsbHkgaW5pdGlhbGl6ZWQgd2l0aCBpbmZsYXRlQmFja0luaXQoKS4gIFRoZSBpbnB1dCBmaWxlIG1heSBjb25zaXN0CisgICBvZiBhIHNlcmllcyBvZiBnemlwIHN0cmVhbXMsIGluIHdoaWNoIGNhc2UgYWxsIG9mIHRoZW0gd2lsbCBiZSBkZWNvbXByZXNzZWQKKyAgIHRvIHRoZSBvdXRwdXQgZmlsZS4gIElmIG91dGZpbGUgaXMgLTEsIHRoZW4gdGhlIGd6aXAgc3RyZWFtKHMpIGludGVncml0eSBpcworICAgY2hlY2tlZCBhbmQgbm90aGluZyBpcyB3cml0dGVuLgorCisgICBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgemxpYiBlcnJvciBjb2RlOiBaX01FTV9FUlJPUiBpZiBvdXQgb2YgbWVtb3J5LAorICAgWl9EQVRBX0VSUk9SIGlmIHRoZSBoZWFkZXIgb3IgdGhlIGNvbXByZXNzZWQgZGF0YSBpcyBpbnZhbGlkLCBvciBpZiB0aGUKKyAgIHRyYWlsZXIgQ1JDLTMyIGNoZWNrIG9yIGxlbmd0aCBkb2Vzbid0IG1hdGNoLCBaX0JVRl9FUlJPUiBpZiB0aGUgaW5wdXQgZW5kcworICAgcHJlbWF0dXJlbHkgb3IgYSB3cml0ZSBlcnJvciBvY2N1cnMsIG9yIFpfRVJSTk8gaWYganVuayAobm90IGEgYW5vdGhlciBnemlwCisgICBzdHJlYW0pIGZvbGxvd3MgYSB2YWxpZCBnemlwIHN0cmVhbS4KKyAqLworbG9jYWwgaW50IGd1bnBpcGUoel9zdHJlYW0gKnN0cm0sIGludCBpbmZpbGUsIGludCBvdXRmaWxlKQoreworICAgIGludCByZXQsIGZpcnN0LCBsYXN0OworICAgIHVuc2lnbmVkIGhhdmUsIGZsYWdzLCBsZW47CisgICAgel9jb25zdCB1bnNpZ25lZCBjaGFyICpuZXh0ID0gTlVMTDsKKyAgICBzdHJ1Y3QgaW5kIGluZCwgKmluZHA7CisgICAgc3RydWN0IG91dGQgb3V0ZDsKKworICAgIC8qIHNldHVwIGlucHV0IGJ1ZmZlciAqLworICAgIGluZC5pbmZpbGUgPSBpbmZpbGU7CisgICAgaW5kLmluYnVmID0gaW5idWY7CisgICAgaW5kcCA9ICZpbmQ7CisKKyAgICAvKiBkZWNvbXByZXNzIGNvbmNhdGVuYXRlZCBnemlwIHN0cmVhbXMgKi8KKyAgICBoYXZlID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbm8gaW5wdXQgZGF0YSByZWFkIGluIHlldCAqLworICAgIGZpcnN0ID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsb29raW5nIGZvciBmaXJzdCBnemlwIGhlYWRlciAqLworICAgIHN0cm0tPm5leHRfaW4gPSBaX05VTEw7ICAgICAgICAgICAgICAgICAvKiBzbyBaX0JVRl9FUlJPUiBtZWFucyBFT0YgKi8KKyAgICBmb3IgKDs7KSB7CisgICAgICAgIC8qIGxvb2sgZm9yIHRoZSB0d28gbWFnaWMgaGVhZGVyIGJ5dGVzIGZvciBhIGd6aXAgc3RyZWFtICovCisgICAgICAgIGlmIChORVhUKCkgPT0gLTEpIHsKKyAgICAgICAgICAgIHJldCA9IFpfT0s7CisgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVtcHR5IGd6aXAgc3RyZWFtIGlzIG9rICovCisgICAgICAgIH0KKyAgICAgICAgaWYgKGxhc3QgIT0gMzEgfHwgKE5FWFQoKSAhPSAxMzkgJiYgbGFzdCAhPSAxNTcpKSB7CisgICAgICAgICAgICBzdHJtLT5tc2cgPSAoY2hhciAqKSJpbmNvcnJlY3QgaGVhZGVyIGNoZWNrIjsKKyAgICAgICAgICAgIHJldCA9IGZpcnN0ID8gWl9EQVRBX0VSUk9SIDogWl9FUlJOTzsKKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbm90IGEgZ3ppcCBvciBjb21wcmVzcyBoZWFkZXIgKi8KKyAgICAgICAgfQorICAgICAgICBmaXJzdCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuZXh0IG5vbi1oZWFkZXIgaXMganVuayAqLworCisgICAgICAgIC8qIHByb2Nlc3MgYSBjb21wcmVzcyAoTFpXKSBmaWxlIC0tIGNhbid0IGJlIGNvbmNhdGVuYXRlZCBhZnRlciB0aGlzICovCisgICAgICAgIGlmIChsYXN0ID09IDE1NykgeworICAgICAgICAgICAgcmV0ID0gbHVucGlwZShoYXZlLCBuZXh0LCBpbmRwLCBvdXRmaWxlLCBzdHJtKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLyogcHJvY2VzcyByZW1haW5kZXIgb2YgZ3ppcCBoZWFkZXIgKi8KKyAgICAgICAgcmV0ID0gWl9CVUZfRVJST1I7CisgICAgICAgIGlmIChORVhUKCkgIT0gOCkgeyAgICAgICAgICAgICAgICAgIC8qIG9ubHkgZGVmbGF0ZSBtZXRob2QgYWxsb3dlZCAqLworICAgICAgICAgICAgaWYgKGxhc3QgPT0gLTEpIGJyZWFrOworICAgICAgICAgICAgc3RybS0+bXNnID0gKGNoYXIgKikidW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QiOworICAgICAgICAgICAgcmV0ID0gWl9EQVRBX0VSUk9SOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZmxhZ3MgPSBORVhUKCk7ICAgICAgICAgICAgICAgICAgICAgLyogaGVhZGVyIGZsYWdzICovCisgICAgICAgIE5FWFQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRpc2NhcmQgbW9kIHRpbWUsIHhmbGdzLCBvcyAqLworICAgICAgICBORVhUKCk7CisgICAgICAgIE5FWFQoKTsKKyAgICAgICAgTkVYVCgpOworICAgICAgICBORVhUKCk7CisgICAgICAgIE5FWFQoKTsKKyAgICAgICAgaWYgKGxhc3QgPT0gLTEpIGJyZWFrOworICAgICAgICBpZiAoZmxhZ3MgJiAweGUwKSB7CisgICAgICAgICAgICBzdHJtLT5tc2cgPSAoY2hhciAqKSJ1bmtub3duIGhlYWRlciBmbGFncyBzZXQiOworICAgICAgICAgICAgcmV0ID0gWl9EQVRBX0VSUk9SOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZsYWdzICYgNCkgeyAgICAgICAgICAgICAgICAgICAgLyogZXh0cmEgZmllbGQgKi8KKyAgICAgICAgICAgIGxlbiA9IE5FWFQoKTsKKyAgICAgICAgICAgIGxlbiArPSAodW5zaWduZWQpKE5FWFQoKSkgPDwgODsKKyAgICAgICAgICAgIGlmIChsYXN0ID09IC0xKSBicmVhazsKKyAgICAgICAgICAgIHdoaWxlIChsZW4gPiBoYXZlKSB7CisgICAgICAgICAgICAgICAgbGVuIC09IGhhdmU7CisgICAgICAgICAgICAgICAgaGF2ZSA9IDA7CisgICAgICAgICAgICAgICAgaWYgKE5FWFQoKSA9PSAtMSkgYnJlYWs7CisgICAgICAgICAgICAgICAgbGVuLS07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobGFzdCA9PSAtMSkgYnJlYWs7CisgICAgICAgICAgICBoYXZlIC09IGxlbjsKKyAgICAgICAgICAgIG5leHQgKz0gbGVuOworICAgICAgICB9CisgICAgICAgIGlmIChmbGFncyAmIDgpICAgICAgICAgICAgICAgICAgICAgIC8qIGZpbGUgbmFtZSAqLworICAgICAgICAgICAgd2hpbGUgKE5FWFQoKSAhPSAwICYmIGxhc3QgIT0gLTEpCisgICAgICAgICAgICAgICAgOworICAgICAgICBpZiAoZmxhZ3MgJiAxNikgICAgICAgICAgICAgICAgICAgICAvKiBjb21tZW50ICovCisgICAgICAgICAgICB3aGlsZSAoTkVYVCgpICE9IDAgJiYgbGFzdCAhPSAtMSkKKyAgICAgICAgICAgICAgICA7CisgICAgICAgIGlmIChmbGFncyAmIDIpIHsgICAgICAgICAgICAgICAgICAgIC8qIGhlYWRlciBjcmMgKi8KKyAgICAgICAgICAgIE5FWFQoKTsKKyAgICAgICAgICAgIE5FWFQoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobGFzdCA9PSAtMSkgYnJlYWs7CisKKyAgICAgICAgLyogc2V0IHVwIG91dHB1dCAqLworICAgICAgICBvdXRkLm91dGZpbGUgPSBvdXRmaWxlOworICAgICAgICBvdXRkLmNoZWNrID0gMTsKKyAgICAgICAgb3V0ZC5jcmMgPSBjcmMzMigwTCwgWl9OVUxMLCAwKTsKKyAgICAgICAgb3V0ZC50b3RhbCA9IDA7CisKKyAgICAgICAgLyogZGVjb21wcmVzcyBkYXRhIHRvIG91dHB1dCAqLworICAgICAgICBzdHJtLT5uZXh0X2luID0gbmV4dDsKKyAgICAgICAgc3RybS0+YXZhaWxfaW4gPSBoYXZlOworICAgICAgICByZXQgPSBpbmZsYXRlQmFjayhzdHJtLCBpbiwgaW5kcCwgb3V0LCAmb3V0ZCk7CisgICAgICAgIGlmIChyZXQgIT0gWl9TVFJFQU1fRU5EKSBicmVhazsKKyAgICAgICAgbmV4dCA9IHN0cm0tPm5leHRfaW47CisgICAgICAgIGhhdmUgPSBzdHJtLT5hdmFpbF9pbjsKKyAgICAgICAgc3RybS0+bmV4dF9pbiA9IFpfTlVMTDsgICAgICAgICAgICAgLyogc28gWl9CVUZfRVJST1IgbWVhbnMgRU9GICovCisKKyAgICAgICAgLyogY2hlY2sgdHJhaWxlciAqLworICAgICAgICByZXQgPSBaX0JVRl9FUlJPUjsKKyAgICAgICAgaWYgKE5FWFQoKSAhPSAoaW50KShvdXRkLmNyYyAmIDB4ZmYpIHx8CisgICAgICAgICAgICBORVhUKCkgIT0gKGludCkoKG91dGQuY3JjID4+IDgpICYgMHhmZikgfHwKKyAgICAgICAgICAgIE5FWFQoKSAhPSAoaW50KSgob3V0ZC5jcmMgPj4gMTYpICYgMHhmZikgfHwKKyAgICAgICAgICAgIE5FWFQoKSAhPSAoaW50KSgob3V0ZC5jcmMgPj4gMjQpICYgMHhmZikpIHsKKyAgICAgICAgICAgIC8qIGNyYyBlcnJvciAqLworICAgICAgICAgICAgaWYgKGxhc3QgIT0gLTEpIHsKKyAgICAgICAgICAgICAgICBzdHJtLT5tc2cgPSAoY2hhciAqKSJpbmNvcnJlY3QgZGF0YSBjaGVjayI7CisgICAgICAgICAgICAgICAgcmV0ID0gWl9EQVRBX0VSUk9SOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKE5FWFQoKSAhPSAoaW50KShvdXRkLnRvdGFsICYgMHhmZikgfHwKKyAgICAgICAgICAgIE5FWFQoKSAhPSAoaW50KSgob3V0ZC50b3RhbCA+PiA4KSAmIDB4ZmYpIHx8CisgICAgICAgICAgICBORVhUKCkgIT0gKGludCkoKG91dGQudG90YWwgPj4gMTYpICYgMHhmZikgfHwKKyAgICAgICAgICAgIE5FWFQoKSAhPSAoaW50KSgob3V0ZC50b3RhbCA+PiAyNCkgJiAweGZmKSkgeworICAgICAgICAgICAgLyogbGVuZ3RoIGVycm9yICovCisgICAgICAgICAgICBpZiAobGFzdCAhPSAtMSkgeworICAgICAgICAgICAgICAgIHN0cm0tPm1zZyA9IChjaGFyICopImluY29ycmVjdCBsZW5ndGggY2hlY2siOworICAgICAgICAgICAgICAgIHJldCA9IFpfREFUQV9FUlJPUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLyogZ28gYmFjayBhbmQgbG9vayBmb3IgYW5vdGhlciBnemlwIHN0cmVhbSAqLworICAgIH0KKworICAgIC8qIGNsZWFuIHVwIGFuZCByZXR1cm4gKi8KKyAgICByZXR1cm4gcmV0OworfQorCisvKiBDb3B5IGZpbGUgYXR0cmlidXRlcywgZnJvbSAtPiB0bywgYXMgYmVzdCB3ZSBjYW4uICBUaGlzIGlzIGJlc3QgZWZmb3J0LCBzbworICAgbm8gZXJyb3JzIGFyZSByZXBvcnRlZC4gIFRoZSBtb2RlIGJpdHMsIGluY2x1ZGluZyBzdWlkLCBzZ2lkLCBhbmQgdGhlIHN0aWNreQorICAgYml0IGFyZSBjb3BpZWQgKGlmIGFsbG93ZWQpLCB0aGUgb3duZXIncyB1c2VyIGlkIGFuZCBncm91cCBpZCBhcmUgY29waWVkCisgICAoYWdhaW4gaWYgYWxsb3dlZCksIGFuZCB0aGUgYWNjZXNzIGFuZCBtb2RpZnkgdGltZXMgYXJlIGNvcGllZC4gKi8KK2xvY2FsIHZvaWQgY29weW1ldGEoY2hhciAqZnJvbSwgY2hhciAqdG8pCit7CisgICAgc3RydWN0IHN0YXQgd2FzOworICAgIHN0cnVjdCB1dGltYnVmIHdoZW47CisKKyAgICAvKiBnZXQgYWxsIG9mIGZyb20ncyBVbml4IG1ldGEgZGF0YSwgcmV0dXJuIGlmIG5vdCBhIHJlZ3VsYXIgZmlsZSAqLworICAgIGlmIChzdGF0KGZyb20sICZ3YXMpICE9IDAgfHwgKHdhcy5zdF9tb2RlICYgU19JRk1UKSAhPSBTX0lGUkVHKQorICAgICAgICByZXR1cm47CisKKyAgICAvKiBzZXQgdG8ncyBtb2RlIGJpdHMsIGlnbm9yZSBlcnJvcnMgKi8KKyAgICAodm9pZCljaG1vZCh0bywgd2FzLnN0X21vZGUgJiAwNzc3Nyk7CisKKyAgICAvKiBjb3B5IG93bmVyJ3MgdXNlciBhbmQgZ3JvdXAsIGlnbm9yZSBlcnJvcnMgKi8KKyAgICAodm9pZCljaG93bih0bywgd2FzLnN0X3VpZCwgd2FzLnN0X2dpZCk7CisKKyAgICAvKiBjb3B5IGFjY2VzcyBhbmQgbW9kaWZ5IHRpbWVzLCBpZ25vcmUgZXJyb3JzICovCisgICAgd2hlbi5hY3RpbWUgPSB3YXMuc3RfYXRpbWU7CisgICAgd2hlbi5tb2R0aW1lID0gd2FzLnN0X210aW1lOworICAgICh2b2lkKXV0aW1lKHRvLCAmd2hlbik7Cit9CisKKy8qIERlY29tcHJlc3MgdGhlIGZpbGUgaW5uYW1lIHRvIHRoZSBmaWxlIG91dG5uYW1lLCBvZiBpZiB0ZXN0IGlzIHRydWUsIGp1c3QKKyAgIGRlY29tcHJlc3Mgd2l0aG91dCB3cml0aW5nIGFuZCBjaGVjayB0aGUgZ3ppcCB0cmFpbGVyIGZvciBpbnRlZ3JpdHkuICBJZgorICAgaW5uYW1lIGlzIE5VTEwgb3IgYW4gZW1wdHkgc3RyaW5nLCByZWFkIGZyb20gc3RkaW4uICBJZiBvdXRuYW1lIGlzIE5VTEwgb3IKKyAgIGFuIGVtcHR5IHN0cmluZywgd3JpdGUgdG8gc3Rkb3V0LiAgc3RybSBpcyBhIHByZS1pbml0aWFsaXplZCBpbmZsYXRlQmFjaworICAgc3RydWN0dXJlLiAgV2hlbiBhcHByb3ByaWF0ZSwgY29weSB0aGUgZmlsZSBhdHRyaWJ1dGVzIGZyb20gaW5uYW1lIHRvCisgICBvdXRuYW1lLgorCisgICBndW56aXAoKSByZXR1cm5zIDEgaWYgdGhlcmUgaXMgYW4gb3V0LW9mLW1lbW9yeSBlcnJvciBvciBhbiB1bmV4cGVjdGVkCisgICByZXR1cm4gY29kZSBmcm9tIGd1bnBpcGUoKS4gIE90aGVyd2lzZSBpdCByZXR1cm5zIDAuCisgKi8KK2xvY2FsIGludCBndW56aXAoel9zdHJlYW0gKnN0cm0sIGNoYXIgKmlubmFtZSwgY2hhciAqb3V0bmFtZSwgaW50IHRlc3QpCit7CisgICAgaW50IHJldDsKKyAgICBpbnQgaW5maWxlLCBvdXRmaWxlOworCisgICAgLyogb3BlbiBmaWxlcyAqLworICAgIGlmIChpbm5hbWUgPT0gTlVMTCB8fCAqaW5uYW1lID09IDApIHsKKyAgICAgICAgaW5uYW1lID0gIi0iOworICAgICAgICBpbmZpbGUgPSAwOyAgICAgLyogc3RkaW4gKi8KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGluZmlsZSA9IG9wZW4oaW5uYW1lLCBPX1JET05MWSwgMCk7CisgICAgICAgIGlmIChpbmZpbGUgPT0gLTEpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZ3VuIGNhbm5vdCBvcGVuICVzXG4iLCBpbm5hbWUpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHRlc3QpCisgICAgICAgIG91dGZpbGUgPSAtMTsKKyAgICBlbHNlIGlmIChvdXRuYW1lID09IE5VTEwgfHwgKm91dG5hbWUgPT0gMCkgeworICAgICAgICBvdXRuYW1lID0gIi0iOworICAgICAgICBvdXRmaWxlID0gMTsgICAgLyogc3Rkb3V0ICovCisgICAgfQorICAgIGVsc2UgeworICAgICAgICBvdXRmaWxlID0gb3BlbihvdXRuYW1lLCBPX0NSRUFUIHwgT19UUlVOQyB8IE9fV1JPTkxZLCAwNjY2KTsKKyAgICAgICAgaWYgKG91dGZpbGUgPT0gLTEpIHsKKyAgICAgICAgICAgIGNsb3NlKGluZmlsZSk7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImd1biBjYW5ub3QgY3JlYXRlICVzXG4iLCBvdXRuYW1lKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorICAgIGVycm5vID0gMDsKKworICAgIC8qIGRlY29tcHJlc3MgKi8KKyAgICByZXQgPSBndW5waXBlKHN0cm0sIGluZmlsZSwgb3V0ZmlsZSk7CisgICAgaWYgKG91dGZpbGUgPiAyKSBjbG9zZShvdXRmaWxlKTsKKyAgICBpZiAoaW5maWxlID4gMikgY2xvc2UoaW5maWxlKTsKKworICAgIC8qIGludGVycHJldCByZXN1bHQgKi8KKyAgICBzd2l0Y2ggKHJldCkgeworICAgIGNhc2UgWl9PSzoKKyAgICBjYXNlIFpfRVJSTk86CisgICAgICAgIGlmIChpbmZpbGUgPiAyICYmIG91dGZpbGUgPiAyKSB7CisgICAgICAgICAgICBjb3B5bWV0YShpbm5hbWUsIG91dG5hbWUpOyAgICAgICAgICAvKiBjb3B5IGF0dHJpYnV0ZXMgKi8KKyAgICAgICAgICAgIHVubGluayhpbm5hbWUpOworICAgICAgICB9CisgICAgICAgIGlmIChyZXQgPT0gWl9FUlJOTykKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZ3VuIHdhcm5pbmc6IHRyYWlsaW5nIGdhcmJhZ2UgaWdub3JlZCBpbiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgaW5uYW1lKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBaX0RBVEFfRVJST1I6CisgICAgICAgIGlmIChvdXRmaWxlID4gMikgdW5saW5rKG91dG5hbWUpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImd1biBkYXRhIGVycm9yIG9uICVzOiAlc1xuIiwgaW5uYW1lLCBzdHJtLT5tc2cpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFpfTUVNX0VSUk9SOgorICAgICAgICBpZiAob3V0ZmlsZSA+IDIpIHVubGluayhvdXRuYW1lKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJndW4gb3V0IG9mIG1lbW9yeSBlcnJvci0tYWJvcnRpbmdcbiIpOworICAgICAgICByZXR1cm4gMTsKKyAgICBjYXNlIFpfQlVGX0VSUk9SOgorICAgICAgICBpZiAob3V0ZmlsZSA+IDIpIHVubGluayhvdXRuYW1lKTsKKyAgICAgICAgaWYgKHN0cm0tPm5leHRfaW4gIT0gWl9OVUxMKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImd1biB3cml0ZSBlcnJvciBvbiAlczogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIG91dG5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZXJybm8pIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZ3VuIHJlYWQgZXJyb3Igb24gJXM6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICBpbm5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImd1biB1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIG9uICVzXG4iLAorICAgICAgICAgICAgICAgICAgICBpbm5hbWUpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGlmIChvdXRmaWxlID4gMikgdW5saW5rKG91dG5hbWUpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImd1biBpbnRlcm5hbCBlcnJvci0tYWJvcnRpbmdcbiIpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKy8qIFByb2Nlc3MgdGhlIGd1biBjb21tYW5kIGxpbmUgYXJndW1lbnRzLiAgU2VlIHRoZSBjb21tYW5kIHN5bnRheCBuZWFyIHRoZQorICAgYmVnaW5uaW5nIG9mIHRoaXMgc291cmNlIGZpbGUuICovCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgaW50IHJldCwgbGVuLCB0ZXN0OworICAgIGNoYXIgKm91dG5hbWU7CisgICAgdW5zaWduZWQgY2hhciAqd2luZG93OworICAgIHpfc3RyZWFtIHN0cm07CisKKyAgICAvKiBpbml0aWFsaXplIGluZmxhdGVCYWNrIHN0YXRlIGZvciByZXBlYXRlZCB1c2UgKi8KKyAgICB3aW5kb3cgPSBtYXRjaDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmV1c2UgTFpXIG1hdGNoIGJ1ZmZlciAqLworICAgIHN0cm0uemFsbG9jID0gWl9OVUxMOworICAgIHN0cm0uemZyZWUgPSBaX05VTEw7CisgICAgc3RybS5vcGFxdWUgPSBaX05VTEw7CisgICAgcmV0ID0gaW5mbGF0ZUJhY2tJbml0KCZzdHJtLCAxNSwgd2luZG93KTsKKyAgICBpZiAocmV0ICE9IFpfT0spIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJndW4gb3V0IG9mIG1lbW9yeSBlcnJvci0tYWJvcnRpbmdcbiIpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICAvKiBkZWNvbXByZXNzIGVhY2ggZmlsZSB0byB0aGUgc2FtZSBuYW1lIHdpdGggdGhlIHN1ZmZpeCByZW1vdmVkICovCisgICAgYXJnYy0tOworICAgIGFyZ3YrKzsKKyAgICB0ZXN0ID0gMDsKKyAgICBpZiAoYXJnYyAmJiBzdHJjbXAoKmFyZ3YsICItaCIpID09IDApIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJndW4gMS42ICgxNyBKYW4gMjAxMClcbiIpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvcHlyaWdodCAoQykgMjAwMy0yMDEwIE1hcmsgQWRsZXJcbiIpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInVzYWdlOiBndW4gWy10XSBbZmlsZTEuZ3ogW2ZpbGUyLlogLi4uXV1cbiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKGFyZ2MgJiYgc3RyY21wKCphcmd2LCAiLXQiKSA9PSAwKSB7CisgICAgICAgIHRlc3QgPSAxOworICAgICAgICBhcmdjLS07CisgICAgICAgIGFyZ3YrKzsKKyAgICB9CisgICAgaWYgKGFyZ2MpCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGlmICh0ZXN0KQorICAgICAgICAgICAgICAgIG91dG5hbWUgPSBOVUxMOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbGVuID0gKGludClzdHJsZW4oKmFyZ3YpOworICAgICAgICAgICAgICAgIGlmIChzdHJjbXAoKmFyZ3YgKyBsZW4gLSAzLCAiLmd6IikgPT0gMCB8fAorICAgICAgICAgICAgICAgICAgICBzdHJjbXAoKmFyZ3YgKyBsZW4gLSAzLCAiLWd6IikgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgbGVuIC09IDM7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3RyY21wKCphcmd2ICsgbGVuIC0gMiwgIi56IikgPT0gMCB8fAorICAgICAgICAgICAgICAgICAgICBzdHJjbXAoKmFyZ3YgKyBsZW4gLSAyLCAiLXoiKSA9PSAwIHx8CisgICAgICAgICAgICAgICAgICAgIHN0cmNtcCgqYXJndiArIGxlbiAtIDIsICJfeiIpID09IDAgfHwKKyAgICAgICAgICAgICAgICAgICAgc3RyY21wKCphcmd2ICsgbGVuIC0gMiwgIi5aIikgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgbGVuIC09IDI7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZ3VuIGVycm9yOiBubyBneiB0eXBlIG9uICVzLS1za2lwcGluZ1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYXJndik7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBvdXRuYW1lID0gbWFsbG9jKGxlbiArIDEpOworICAgICAgICAgICAgICAgIGlmIChvdXRuYW1lID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJndW4gb3V0IG9mIG1lbW9yeSBlcnJvci0tYWJvcnRpbmdcbiIpOworICAgICAgICAgICAgICAgICAgICByZXQgPSAxOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbWVtY3B5KG91dG5hbWUsICphcmd2LCBsZW4pOworICAgICAgICAgICAgICAgIG91dG5hbWVbbGVuXSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXQgPSBndW56aXAoJnN0cm0sICphcmd2LCBvdXRuYW1lLCB0ZXN0KTsKKyAgICAgICAgICAgIGlmIChvdXRuYW1lICE9IE5VTEwpIGZyZWUob3V0bmFtZSk7CisgICAgICAgICAgICBpZiAocmV0KSBicmVhazsKKyAgICAgICAgfSB3aGlsZSAoYXJndisrLCAtLWFyZ2MpOworICAgIGVsc2UKKyAgICAgICAgcmV0ID0gZ3VuemlwKCZzdHJtLCBOVUxMLCBOVUxMLCB0ZXN0KTsKKworICAgIC8qIGNsZWFuIHVwICovCisgICAgaW5mbGF0ZUJhY2tFbmQoJnN0cm0pOworICAgIHJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9zcmMvZXhhbXBsZXMvZ3phcHBlbmQuYyBiL3NyYy9leGFtcGxlcy9nemFwcGVuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZWVhM2UKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvZXhhbXBsZXMvZ3phcHBlbmQuYwpAQCAtMCwwICsxLDUwNCBAQAorLyogZ3phcHBlbmQgLS0gY29tbWFuZCB0byBhcHBlbmQgdG8gYSBnemlwIGZpbGUKKworICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMTIgTWFyayBBZGxlciwgYWxsIHJpZ2h0cyByZXNlcnZlZAorICB2ZXJzaW9uIDEuMiwgMTEgT2N0IDIwMTIKKworICBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZAorICB3YXJyYW50eS4gIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvciBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMKKyAgYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS4KKworICBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSwKKyAgaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdAorICBmcmVlbHksIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKKyAgMS4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCBub3QKKyAgICAgY2xhaW0gdGhhdCB5b3Ugd3JvdGUgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLiBJZiB5b3UgdXNlIHRoaXMgc29mdHdhcmUKKyAgICAgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVjdCBkb2N1bWVudGF0aW9uIHdvdWxkIGJlCisgICAgIGFwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuCisgIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlCisgICAgIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4KKyAgMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi4KKworICBNYXJrIEFkbGVyICAgIG1hZGxlckBhbHVtbmkuY2FsdGVjaC5lZHUKKyAqLworCisvKgorICogQ2hhbmdlIGhpc3Rvcnk6CisgKgorICogMS4wICAxOSBPY3QgMjAwMyAgICAgLSBGaXJzdCB2ZXJzaW9uCisgKiAxLjEgICA0IE5vdiAyMDAzICAgICAtIEV4cGFuZCBhbmQgY2xhcmlmeSBzb21lIGNvbW1lbnRzIGFuZCBub3RlcworICogICAgICAgICAgICAgICAgICAgICAgLSBBZGQgdmVyc2lvbiBhbmQgY29weXJpZ2h0IHRvIGhlbHAKKyAqICAgICAgICAgICAgICAgICAgICAgIC0gU2VuZCBoZWxwIHRvIHN0ZG91dCBpbnN0ZWFkIG9mIHN0ZGVycgorICogICAgICAgICAgICAgICAgICAgICAgLSBBZGQgc29tZSBwcmVlbXB0aXZlIHR5cGVjYXN0cworICogICAgICAgICAgICAgICAgICAgICAgLSBBZGQgTCB0byBjb25zdGFudHMgaW4gbHNlZWsoKSBjYWxscworICogICAgICAgICAgICAgICAgICAgICAgLSBSZW1vdmUgc29tZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaW4gZXJyb3IgbWVzc2FnZXMKKyAqICAgICAgICAgICAgICAgICAgICAgIC0gVXNlIG5ldyBkYXRhX3R5cGUgZGVmaW5pdGlvbiBmb3IgemxpYiAxLjIuMQorICogICAgICAgICAgICAgICAgICAgICAgLSBTaW1wbGZ5IGFuZCB1bmlmeSBmaWxlIG9wZXJhdGlvbnMKKyAqICAgICAgICAgICAgICAgICAgICAgIC0gRmluaXNoIG9mZiBnemlwIGZpbGUgaW4gZ3p0YWNrKCkKKyAqICAgICAgICAgICAgICAgICAgICAgIC0gVXNlIGRlZmxhdGVQcmltZSgpIGluc3RlYWQgb2YgYWRkaW5nIGVtcHR5IGJsb2NrcworICogICAgICAgICAgICAgICAgICAgICAgLSBLZWVwIGd6aXAgZmlsZSBjbGVhbiBvbiBhcHBlbmRlZCBmaWxlIHJlYWQgZXJyb3JzCisgKiAgICAgICAgICAgICAgICAgICAgICAtIFVzZSBpbi1wbGFjZSByb3RhdGUgaW5zdGVhZCBvZiBhdXhpbGlhcnkgYnVmZmVyCisgKiAgICAgICAgICAgICAgICAgICAgICAgIChXaHkgeW91IGFzaz8gIEJlY2F1c2UgaXQgd2FzIGZ1biB0byB3cml0ZSEpCisgKiAxLjIgIDExIE9jdCAyMDEyICAgICAtIEZpeCBmb3IgcHJvcGVyIHpfY29uc3QgdXNhZ2UKKyAqICAgICAgICAgICAgICAgICAgICAgIC0gQ2hlY2sgZm9yIGlucHV0IGJ1ZmZlciBtYWxsb2MgZmFpbHVyZQorICovCisKKy8qCisgICBnemFwcGVuZCB0YWtlcyBhIGd6aXAgZmlsZSBhbmQgYXBwZW5kcyB0byBpdCwgY29tcHJlc3NpbmcgZmlsZXMgZnJvbSB0aGUKKyAgIGNvbW1hbmQgbGluZSBvciBkYXRhIGZyb20gc3RkaW4uICBUaGUgZ3ppcCBmaWxlIGlzIHdyaXR0ZW4gdG8gZGlyZWN0bHksIHRvCisgICBhdm9pZCBjb3B5aW5nIHRoYXQgZmlsZSwgaW4gY2FzZSBpdCdzIGxhcmdlLiAgTm90ZSB0aGF0IHRoaXMgcmVzdWx0cyBpbiB0aGUKKyAgIHVuZnJpZW5kbHkgYmVoYXZpb3IgdGhhdCBpZiBnemFwcGVuZCBmYWlscywgdGhlIGd6aXAgZmlsZSBpcyBjb3JydXB0ZWQuCisKKyAgIFRoaXMgcHJvZ3JhbSB3YXMgd3JpdHRlbiB0byBpbGx1c3RyYXRlIHRoZSB1c2Ugb2YgdGhlIG5ldyBaX0JMT0NLIG9wdGlvbiBvZgorICAgemxpYiAxLjIueCdzIGluZmxhdGUoKSBmdW5jdGlvbi4gIFRoaXMgb3B0aW9uIHJldHVybnMgZnJvbSBpbmZsYXRlKCkgYXQgZWFjaAorICAgYmxvY2sgYm91bmRhcnkgdG8gZmFjaWxpdGF0ZSBsb2NhdGluZyBhbmQgbW9kaWZ5aW5nIHRoZSBsYXN0IGJsb2NrIGJpdCBhdAorICAgdGhlIHN0YXJ0IG9mIHRoZSBmaW5hbCBkZWZsYXRlIGJsb2NrLiAgQWxzbyB3aGV0aGVyIHVzaW5nIFpfQkxPQ0sgb3Igbm90LAorICAgYW5vdGhlciByZXF1aXJlZCBmZWF0dXJlIG9mIHpsaWIgMS4yLnggaXMgdGhhdCBpbmZsYXRlKCkgbm93IHByb3ZpZGVzIHRoZQorICAgbnVtYmVyIG9mIHVudXN1ZWQgYml0cyBpbiB0aGUgbGFzdCBpbnB1dCBieXRlIHVzZWQuICBnemFwcGVuZCB3aWxsIG5vdCB3b3JrCisgICB3aXRoIHZlcnNpb25zIG9mIHpsaWIgZWFybGllciB0aGFuIDEuMi4xLgorCisgICBnemFwcGVuZCBmaXJzdCBkZWNvbXByZXNzZXMgdGhlIGd6aXAgZmlsZSBpbnRlcm5hbGx5LCBkaXNjYXJkaW5nIGFsbCBidXQKKyAgIHRoZSBsYXN0IDMySyBvZiB1bmNvbXByZXNzZWQgZGF0YSwgYW5kIG5vdGluZyB0aGUgbG9jYXRpb24gb2YgdGhlIGxhc3QgYmxvY2sKKyAgIGJpdCBhbmQgdGhlIG51bWJlciBvZiB1bnVzZWQgYml0cyBpbiB0aGUgbGFzdCBieXRlIG9mIHRoZSBjb21wcmVzc2VkIGRhdGEuCisgICBUaGUgZ3ppcCB0cmFpbGVyIGNvbnRhaW5pbmcgdGhlIENSQy0zMiBhbmQgbGVuZ3RoIG9mIHRoZSB1bmNvbXByZXNzZWQgZGF0YQorICAgaXMgdmVyaWZpZWQuICBUaGlzIHRyYWlsZXIgd2lsbCBiZSBsYXRlciBvdmVyd3JpdHRlbi4KKworICAgVGhlbiB0aGUgbGFzdCBibG9jayBiaXQgaXMgY2xlYXJlZCBieSBzZWVraW5nIGJhY2sgaW4gdGhlIGZpbGUgYW5kIHJld3JpdGluZworICAgdGhlIGJ5dGUgdGhhdCBjb250YWlucyBpdC4gIFNlZWtpbmcgZm9yd2FyZCwgdGhlIGxhc3QgYnl0ZSBvZiB0aGUgY29tcHJlc3NlZAorICAgZGF0YSBpcyBzYXZlZCBhbG9uZyB3aXRoIHRoZSBudW1iZXIgb2YgdW51c2VkIGJpdHMgdG8gaW5pdGlhbGl6ZSBkZWZsYXRlLgorCisgICBBIGRlZmxhdGUgcHJvY2VzcyBpcyBpbml0aWFsaXplZCwgdXNpbmcgdGhlIGxhc3QgMzJLIG9mIHRoZSB1bmNvbXByZXNzZWQKKyAgIGRhdGEgZnJvbSB0aGUgZ3ppcCBmaWxlIHRvIGluaXRpYWxpemUgdGhlIGRpY3Rpb25hcnkuICBJZiB0aGUgdG90YWwKKyAgIHVuY29tcHJlc3NlZCBkYXRhIHdhcyBsZXNzIHRoYW4gMzJLLCB0aGVuIGFsbCBvZiBpdCBpcyB1c2VkIHRvIGluaXRpYWxpemUKKyAgIHRoZSBkaWN0aW9uYXJ5LiAgVGhlIGRlZmxhdGUgb3V0cHV0IGJpdCBidWZmZXIgaXMgYWxzbyBpbml0aWFsaXplZCB3aXRoIHRoZQorICAgbGFzdCBiaXRzIGZyb20gdGhlIG9yaWdpbmFsIGRlZmxhdGUgc3RyZWFtLiAgRnJvbSBoZXJlIG9uLCB0aGUgZGF0YSB0bworICAgYXBwZW5kIGlzIHNpbXBseSBjb21wcmVzc2VkIHVzaW5nIGRlZmxhdGUsIGFuZCB3cml0dGVuIHRvIHRoZSBnemlwIGZpbGUuCisgICBXaGVuIHRoYXQgaXMgY29tcGxldGUsIHRoZSBuZXcgQ1JDLTMyIGFuZCB1bmNvbXByZXNzZWQgbGVuZ3RoIGFyZSB3cml0dGVuCisgICBhcyB0aGUgdHJhaWxlciBvZiB0aGUgZ3ppcCBmaWxlLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSAiemxpYi5oIgorCisjZGVmaW5lIGxvY2FsIHN0YXRpYworI2RlZmluZSBMR0NIVU5LIDE0CisjZGVmaW5lIENIVU5LICgxVSA8PCBMR0NIVU5LKQorI2RlZmluZSBEU0laRSAzMjc2OFUKKworLyogcHJpbnQgYW4gZXJyb3IgbWVzc2FnZSBhbmQgdGVybWluYXRlIHdpdGggZXh0cmVtZSBwcmVqdWRpY2UgKi8KK2xvY2FsIHZvaWQgYnllKGNoYXIgKm1zZzEsIGNoYXIgKm1zZzIpCit7CisgICAgZnByaW50ZihzdGRlcnIsICJnemFwcGVuZCBlcnJvcjogJXMlc1xuIiwgbXNnMSwgbXNnMik7CisgICAgZXhpdCgxKTsKK30KKworLyogcmV0dXJuIHRoZSBncmVhdGVzdCBjb21tb24gZGl2aXNvciBvZiBhIGFuZCBiIHVzaW5nIEV1Y2xpZCdzIGFsZ29yaXRobSwKKyAgIG1vZGlmaWVkIHRvIGJlIGZhc3Qgd2hlbiBvbmUgYXJndW1lbnQgbXVjaCBncmVhdGVyIHRoYW4gdGhlIG90aGVyLCBhbmQKKyAgIGNvZGVkIHRvIGF2b2lkIHVubmVjZXNzYXJ5IHN3YXBwaW5nICovCitsb2NhbCB1bnNpZ25lZCBnY2QodW5zaWduZWQgYSwgdW5zaWduZWQgYikKK3sKKyAgICB1bnNpZ25lZCBjOworCisgICAgd2hpbGUgKGEgJiYgYikKKyAgICAgICAgaWYgKGEgPiBiKSB7CisgICAgICAgICAgICBjID0gYjsKKyAgICAgICAgICAgIHdoaWxlIChhIC0gYyA+PSBjKQorICAgICAgICAgICAgICAgIGMgPDw9IDE7CisgICAgICAgICAgICBhIC09IGM7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBjID0gYTsKKyAgICAgICAgICAgIHdoaWxlIChiIC0gYyA+PSBjKQorICAgICAgICAgICAgICAgIGMgPDw9IDE7CisgICAgICAgICAgICBiIC09IGM7CisgICAgICAgIH0KKyAgICByZXR1cm4gYSArIGI7Cit9CisKKy8qIHJvdGF0ZSBsaXN0WzAuLmxlbi0xXSBsZWZ0IGJ5IHJvdCBwb3NpdGlvbnMsIGluIHBsYWNlICovCitsb2NhbCB2b2lkIHJvdGF0ZSh1bnNpZ25lZCBjaGFyICpsaXN0LCB1bnNpZ25lZCBsZW4sIHVuc2lnbmVkIHJvdCkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIHRtcDsKKyAgICB1bnNpZ25lZCBjeWNsZXM7CisgICAgdW5zaWduZWQgY2hhciAqc3RhcnQsICpsYXN0LCAqdG8sICpmcm9tOworCisgICAgLyogbm9ybWFsaXplIHJvdCBhbmQgaGFuZGxlIGRlZ2VuZXJhdGUgY2FzZXMgKi8KKyAgICBpZiAobGVuIDwgMikgcmV0dXJuOworICAgIGlmIChyb3QgPj0gbGVuKSByb3QgJT0gbGVuOworICAgIGlmIChyb3QgPT0gMCkgcmV0dXJuOworCisgICAgLyogcG9pbnRlciB0byBsYXN0IGVudHJ5IGluIGxpc3QgKi8KKyAgICBsYXN0ID0gbGlzdCArIChsZW4gLSAxKTsKKworICAgIC8qIGRvIHNpbXBsZSBsZWZ0IHNoaWZ0IGJ5IG9uZSAqLworICAgIGlmIChyb3QgPT0gMSkgeworICAgICAgICB0bXAgPSAqbGlzdDsKKyAgICAgICAgbWVtbW92ZShsaXN0LCBsaXN0ICsgMSwgbGVuIC0gMSk7CisgICAgICAgICpsYXN0ID0gdG1wOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyogZG8gc2ltcGxlIHJpZ2h0IHNoaWZ0IGJ5IG9uZSAqLworICAgIGlmIChyb3QgPT0gbGVuIC0gMSkgeworICAgICAgICB0bXAgPSAqbGFzdDsKKyAgICAgICAgbWVtbW92ZShsaXN0ICsgMSwgbGlzdCwgbGVuIC0gMSk7CisgICAgICAgICpsaXN0ID0gdG1wOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyogb3RoZXJ3aXNlIGRvIHJvdGF0ZSBhcyBhIHNldCBvZiBjeWNsZXMgaW4gcGxhY2UgKi8KKyAgICBjeWNsZXMgPSBnY2QobGVuLCByb3QpOyAgICAgICAgICAgICAvKiBudW1iZXIgb2YgY3ljbGVzICovCisgICAgZG8geworICAgICAgICBzdGFydCA9IGZyb20gPSBsaXN0ICsgY3ljbGVzOyAgIC8qIHN0YXJ0IGluZGV4IGlzIGFyYml0cmFyeSAqLworICAgICAgICB0bXAgPSAqZnJvbTsgICAgICAgICAgICAgICAgICAgIC8qIHNhdmUgZW50cnkgdG8gYmUgb3ZlcndyaXR0ZW4gKi8KKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgdG8gPSBmcm9tOyAgICAgICAgICAgICAgICAgIC8qIG5leHQgc3RlcCBpbiBjeWNsZSAqLworICAgICAgICAgICAgZnJvbSArPSByb3Q7ICAgICAgICAgICAgICAgIC8qIGdvIHJpZ2h0IHJvdCBwb3NpdGlvbnMgKi8KKyAgICAgICAgICAgIGlmIChmcm9tID4gbGFzdCkgZnJvbSAtPSBsZW47ICAgLyogKHBvaW50ZXIgYmV0dGVyIG5vdCB3cmFwKSAqLworICAgICAgICAgICAgaWYgKGZyb20gPT0gc3RhcnQpIGJyZWFrOyAgIC8qIGFsbCBidXQgb25lIHNoaWZ0ZWQgKi8KKyAgICAgICAgICAgICp0byA9ICpmcm9tOyAgICAgICAgICAgICAgICAvKiBzaGlmdCBsZWZ0ICovCisgICAgICAgIH0KKyAgICAgICAgKnRvID0gdG1wOyAgICAgICAgICAgICAgICAgICAgICAvKiBjb21wbGV0ZSB0aGUgY2lyY2xlICovCisgICAgfSB3aGlsZSAoLS1jeWNsZXMpOworfQorCisvKiBzdHJ1Y3R1cmUgZm9yIGd6aXAgZmlsZSByZWFkIG9wZXJhdGlvbnMgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBpbnQgZmQ7ICAgICAgICAgICAgICAgICAgICAgLyogZmlsZSBkZXNjcmlwdG9yICovCisgICAgaW50IHNpemU7ICAgICAgICAgICAgICAgICAgIC8qIDEgPDwgc2l6ZSBpcyBieXRlcyBpbiBidWYgKi8KKyAgICB1bnNpZ25lZCBsZWZ0OyAgICAgICAgICAgICAgLyogYnl0ZXMgYXZhaWxhYmxlIGF0IG5leHQgKi8KKyAgICB1bnNpZ25lZCBjaGFyICpidWY7ICAgICAgICAgLyogYnVmZmVyICovCisgICAgel9jb25zdCB1bnNpZ25lZCBjaGFyICpuZXh0OyAgICAvKiBuZXh0IGJ5dGUgaW4gYnVmZmVyICovCisgICAgY2hhciAqbmFtZTsgICAgICAgICAgICAgICAgIC8qIGZpbGUgbmFtZSBmb3IgZXJyb3IgbWVzc2FnZXMgKi8KK30gZmlsZTsKKworLyogcmVsb2FkIGJ1ZmZlciAqLworbG9jYWwgaW50IHJlYWRpbihmaWxlICppbikKK3sKKyAgICBpbnQgbGVuOworCisgICAgbGVuID0gcmVhZChpbi0+ZmQsIGluLT5idWYsIDEgPDwgaW4tPnNpemUpOworICAgIGlmIChsZW4gPT0gLTEpIGJ5ZSgiZXJyb3IgcmVhZGluZyAiLCBpbi0+bmFtZSk7CisgICAgaW4tPmxlZnQgPSAodW5zaWduZWQpbGVuOworICAgIGluLT5uZXh0ID0gaW4tPmJ1ZjsKKyAgICByZXR1cm4gbGVuOworfQorCisvKiByZWFkIGZyb20gZmlsZSBpbiwgZXhpdCBpZiBlbmQtb2YtZmlsZSAqLworbG9jYWwgaW50IHJlYWRtb3JlKGZpbGUgKmluKQoreworICAgIGlmIChyZWFkaW4oaW4pID09IDApIGJ5ZSgidW5leHBlY3RlZCBlbmQgb2YgIiwgaW4tPm5hbWUpOworICAgIHJldHVybiAwOworfQorCisjZGVmaW5lIHJlYWQxKGluKSAoaW4tPmxlZnQgPT0gMCA/IHJlYWRtb3JlKGluKSA6IDAsIFwKKyAgICAgICAgICAgICAgICAgICBpbi0+bGVmdC0tLCAqKGluLT5uZXh0KSsrKQorCisvKiBza2lwIG92ZXIgbiBieXRlcyBvZiBpbiAqLworbG9jYWwgdm9pZCBza2lwKGZpbGUgKmluLCB1bnNpZ25lZCBuKQoreworICAgIHVuc2lnbmVkIGJ5cGFzczsKKworICAgIGlmIChuID4gaW4tPmxlZnQpIHsKKyAgICAgICAgbiAtPSBpbi0+bGVmdDsKKyAgICAgICAgYnlwYXNzID0gbiAmIH4oKDFVIDw8IGluLT5zaXplKSAtIDEpOworICAgICAgICBpZiAoYnlwYXNzKSB7CisgICAgICAgICAgICBpZiAobHNlZWsoaW4tPmZkLCAob2ZmX3QpYnlwYXNzLCBTRUVLX0NVUikgPT0gLTEpCisgICAgICAgICAgICAgICAgYnllKCJzZWVraW5nICIsIGluLT5uYW1lKTsKKyAgICAgICAgICAgIG4gLT0gYnlwYXNzOworICAgICAgICB9CisgICAgICAgIHJlYWRtb3JlKGluKTsKKyAgICAgICAgaWYgKG4gPiBpbi0+bGVmdCkKKyAgICAgICAgICAgIGJ5ZSgidW5leHBlY3RlZCBlbmQgb2YgIiwgaW4tPm5hbWUpOworICAgIH0KKyAgICBpbi0+bGVmdCAtPSBuOworICAgIGluLT5uZXh0ICs9IG47Cit9CisKKy8qIHJlYWQgYSBmb3VyLWJ5dGUgdW5zaWduZWQgaW50ZWdlciwgbGl0dGxlLWVuZGlhbiwgZnJvbSBpbiAqLwordW5zaWduZWQgbG9uZyByZWFkNChmaWxlICppbikKK3sKKyAgICB1bnNpZ25lZCBsb25nIHZhbDsKKworICAgIHZhbCA9IHJlYWQxKGluKTsKKyAgICB2YWwgKz0gKHVuc2lnbmVkKXJlYWQxKGluKSA8PCA4OworICAgIHZhbCArPSAodW5zaWduZWQgbG9uZylyZWFkMShpbikgPDwgMTY7CisgICAgdmFsICs9ICh1bnNpZ25lZCBsb25nKXJlYWQxKGluKSA8PCAyNDsKKyAgICByZXR1cm4gdmFsOworfQorCisvKiBza2lwIG92ZXIgZ3ppcCBoZWFkZXIgKi8KK2xvY2FsIHZvaWQgZ3poZWFkZXIoZmlsZSAqaW4pCit7CisgICAgaW50IGZsYWdzOworICAgIHVuc2lnbmVkIG47CisKKyAgICBpZiAocmVhZDEoaW4pICE9IDMxIHx8IHJlYWQxKGluKSAhPSAxMzkpIGJ5ZShpbi0+bmFtZSwgIiBub3QgYSBnemlwIGZpbGUiKTsKKyAgICBpZiAocmVhZDEoaW4pICE9IDgpIGJ5ZSgidW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QgaW4iLCBpbi0+bmFtZSk7CisgICAgZmxhZ3MgPSByZWFkMShpbik7CisgICAgaWYgKGZsYWdzICYgMHhlMCkgYnllKCJ1bmtub3duIGhlYWRlciBmbGFncyBzZXQgaW4iLCBpbi0+bmFtZSk7CisgICAgc2tpcChpbiwgNik7CisgICAgaWYgKGZsYWdzICYgNCkgeworICAgICAgICBuID0gcmVhZDEoaW4pOworICAgICAgICBuICs9ICh1bnNpZ25lZCkocmVhZDEoaW4pKSA8PCA4OworICAgICAgICBza2lwKGluLCBuKTsKKyAgICB9CisgICAgaWYgKGZsYWdzICYgOCkgd2hpbGUgKHJlYWQxKGluKSAhPSAwKSA7CisgICAgaWYgKGZsYWdzICYgMTYpIHdoaWxlIChyZWFkMShpbikgIT0gMCkgOworICAgIGlmIChmbGFncyAmIDIpIHNraXAoaW4sIDIpOworfQorCisvKiBkZWNvbXByZXNzIGd6aXAgZmlsZSAibmFtZSIsIHJldHVybiBzdHJtIHdpdGggYSBkZWZsYXRlIHN0cmVhbSByZWFkeSB0bworICAgY29udGludWUgY29tcHJlc3Npb24gb2YgdGhlIGRhdGEgaW4gdGhlIGd6aXAgZmlsZSwgYW5kIHJldHVybiBhIGZpbGUKKyAgIGRlc2NyaXB0b3IgcG9pbnRpbmcgdG8gd2hlcmUgdG8gd3JpdGUgdGhlIGNvbXByZXNzZWQgZGF0YSAtLSB0aGUgZGVmbGF0ZQorICAgc3RyZWFtIGlzIGluaXRpYWxpemVkIHRvIGNvbXByZXNzIHVzaW5nIGxldmVsICJsZXZlbCIgKi8KK2xvY2FsIGludCBnenNjYW4oY2hhciAqbmFtZSwgel9zdHJlYW0gKnN0cm0sIGludCBsZXZlbCkKK3sKKyAgICBpbnQgcmV0LCBsYXN0Yml0LCBsZWZ0LCBmdWxsOworICAgIHVuc2lnbmVkIGhhdmU7CisgICAgdW5zaWduZWQgbG9uZyBjcmMsIHRvdDsKKyAgICB1bnNpZ25lZCBjaGFyICp3aW5kb3c7CisgICAgb2ZmX3QgbGFzdG9mZiwgZW5kOworICAgIGZpbGUgZ3o7CisKKyAgICAvKiBvcGVuIGd6aXAgZmlsZSAqLworICAgIGd6Lm5hbWUgPSBuYW1lOworICAgIGd6LmZkID0gb3BlbihuYW1lLCBPX1JEV1IsIDApOworICAgIGlmIChnei5mZCA9PSAtMSkgYnllKCJjYW5ub3Qgb3BlbiAiLCBuYW1lKTsKKyAgICBnei5idWYgPSBtYWxsb2MoQ0hVTkspOworICAgIGlmIChnei5idWYgPT0gTlVMTCkgYnllKCJvdXQgb2YgbWVtb3J5IiwgIiIpOworICAgIGd6LnNpemUgPSBMR0NIVU5LOworICAgIGd6LmxlZnQgPSAwOworCisgICAgLyogc2tpcCBnemlwIGhlYWRlciAqLworICAgIGd6aGVhZGVyKCZneik7CisKKyAgICAvKiBwcmVwYXJlIHRvIGRlY29tcHJlc3MgKi8KKyAgICB3aW5kb3cgPSBtYWxsb2MoRFNJWkUpOworICAgIGlmICh3aW5kb3cgPT0gTlVMTCkgYnllKCJvdXQgb2YgbWVtb3J5IiwgIiIpOworICAgIHN0cm0tPnphbGxvYyA9IFpfTlVMTDsKKyAgICBzdHJtLT56ZnJlZSA9IFpfTlVMTDsKKyAgICBzdHJtLT5vcGFxdWUgPSBaX05VTEw7CisgICAgcmV0ID0gaW5mbGF0ZUluaXQyKHN0cm0sIC0xNSk7CisgICAgaWYgKHJldCAhPSBaX09LKSBieWUoIm91dCBvZiBtZW1vcnkiLCAiIG9yIGxpYnJhcnkgbWlzbWF0Y2giKTsKKworICAgIC8qIGRlY29tcHJlc3MgdGhlIGRlZmxhdGUgc3RyZWFtLCBzYXZpbmcgYXBwZW5kIGluZm9ybWF0aW9uICovCisgICAgbGFzdGJpdCA9IDA7CisgICAgbGFzdG9mZiA9IGxzZWVrKGd6LmZkLCAwTCwgU0VFS19DVVIpIC0gZ3oubGVmdDsKKyAgICBsZWZ0ID0gMDsKKyAgICBzdHJtLT5hdmFpbF9pbiA9IGd6LmxlZnQ7CisgICAgc3RybS0+bmV4dF9pbiA9IGd6Lm5leHQ7CisgICAgY3JjID0gY3JjMzIoMEwsIFpfTlVMTCwgMCk7CisgICAgaGF2ZSA9IGZ1bGwgPSAwOworICAgIGRvIHsKKyAgICAgICAgLyogaWYgbmVlZGVkLCBnZXQgbW9yZSBpbnB1dCAqLworICAgICAgICBpZiAoc3RybS0+YXZhaWxfaW4gPT0gMCkgeworICAgICAgICAgICAgcmVhZG1vcmUoJmd6KTsKKyAgICAgICAgICAgIHN0cm0tPmF2YWlsX2luID0gZ3oubGVmdDsKKyAgICAgICAgICAgIHN0cm0tPm5leHRfaW4gPSBnei5uZXh0OworICAgICAgICB9CisKKyAgICAgICAgLyogc2V0IHVwIG91dHB1dCB0byBuZXh0IGF2YWlsYWJsZSBzZWN0aW9uIG9mIHNsaWRpbmcgd2luZG93ICovCisgICAgICAgIHN0cm0tPmF2YWlsX291dCA9IERTSVpFIC0gaGF2ZTsKKyAgICAgICAgc3RybS0+bmV4dF9vdXQgPSB3aW5kb3cgKyBoYXZlOworCisgICAgICAgIC8qIGluZmxhdGUgYW5kIGNoZWNrIGZvciBlcnJvcnMgKi8KKyAgICAgICAgcmV0ID0gaW5mbGF0ZShzdHJtLCBaX0JMT0NLKTsKKyAgICAgICAgaWYgKHJldCA9PSBaX1NUUkVBTV9FUlJPUikgYnllKCJpbnRlcm5hbCBzdHJlYW0gZXJyb3IhIiwgIiIpOworICAgICAgICBpZiAocmV0ID09IFpfTUVNX0VSUk9SKSBieWUoIm91dCBvZiBtZW1vcnkiLCAiIik7CisgICAgICAgIGlmIChyZXQgPT0gWl9EQVRBX0VSUk9SKQorICAgICAgICAgICAgYnllKCJpbnZhbGlkIGNvbXByZXNzZWQgZGF0YS0tZm9ybWF0IHZpb2xhdGVkIGluIiwgbmFtZSk7CisKKyAgICAgICAgLyogdXBkYXRlIGNyYyBhbmQgc2xpZGluZyB3aW5kb3cgcG9pbnRlciAqLworICAgICAgICBjcmMgPSBjcmMzMihjcmMsIHdpbmRvdyArIGhhdmUsIERTSVpFIC0gaGF2ZSAtIHN0cm0tPmF2YWlsX291dCk7CisgICAgICAgIGlmIChzdHJtLT5hdmFpbF9vdXQpCisgICAgICAgICAgICBoYXZlID0gRFNJWkUgLSBzdHJtLT5hdmFpbF9vdXQ7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaGF2ZSA9IDA7CisgICAgICAgICAgICBmdWxsID0gMTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHByb2Nlc3MgZW5kIG9mIGJsb2NrICovCisgICAgICAgIGlmIChzdHJtLT5kYXRhX3R5cGUgJiAxMjgpIHsKKyAgICAgICAgICAgIGlmIChzdHJtLT5kYXRhX3R5cGUgJiA2NCkKKyAgICAgICAgICAgICAgICBsZWZ0ID0gc3RybS0+ZGF0YV90eXBlICYgMHgxZjsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGxhc3RiaXQgPSBzdHJtLT5kYXRhX3R5cGUgJiAweDFmOworICAgICAgICAgICAgICAgIGxhc3RvZmYgPSBsc2Vlayhnei5mZCwgMEwsIFNFRUtfQ1VSKSAtIHN0cm0tPmF2YWlsX2luOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSB3aGlsZSAocmV0ICE9IFpfU1RSRUFNX0VORCk7CisgICAgaW5mbGF0ZUVuZChzdHJtKTsKKyAgICBnei5sZWZ0ID0gc3RybS0+YXZhaWxfaW47CisgICAgZ3oubmV4dCA9IHN0cm0tPm5leHRfaW47CisKKyAgICAvKiBzYXZlIHRoZSBsb2NhdGlvbiBvZiB0aGUgZW5kIG9mIHRoZSBjb21wcmVzc2VkIGRhdGEgKi8KKyAgICBlbmQgPSBsc2Vlayhnei5mZCwgMEwsIFNFRUtfQ1VSKSAtIGd6LmxlZnQ7CisKKyAgICAvKiBjaGVjayBnemlwIHRyYWlsZXIgYW5kIHNhdmUgdG90YWwgZm9yIGRlZmxhdGUgKi8KKyAgICBpZiAoY3JjICE9IHJlYWQ0KCZneikpCisgICAgICAgIGJ5ZSgiaW52YWxpZCBjb21wcmVzc2VkIGRhdGEtLWNyYyBtaXNtYXRjaCBpbiAiLCBuYW1lKTsKKyAgICB0b3QgPSBzdHJtLT50b3RhbF9vdXQ7CisgICAgaWYgKCh0b3QgJiAweGZmZmZmZmZmVUwpICE9IHJlYWQ0KCZneikpCisgICAgICAgIGJ5ZSgiaW52YWxpZCBjb21wcmVzc2VkIGRhdGEtLWxlbmd0aCBtaXNtYXRjaCBpbiIsIG5hbWUpOworCisgICAgLyogaWYgbm90IGF0IGVuZCBvZiBmaWxlLCB3YXJuICovCisgICAgaWYgKGd6LmxlZnQgfHwgcmVhZGluKCZneikpCisgICAgICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgImd6YXBwZW5kIHdhcm5pbmc6IGp1bmsgYXQgZW5kIG9mIGd6aXAgZmlsZSBvdmVyd3JpdHRlblxuIik7CisKKyAgICAvKiBjbGVhciBsYXN0IGJsb2NrIGJpdCAqLworICAgIGxzZWVrKGd6LmZkLCBsYXN0b2ZmIC0gKGxhc3RiaXQgIT0gMCksIFNFRUtfU0VUKTsKKyAgICBpZiAocmVhZChnei5mZCwgZ3ouYnVmLCAxKSAhPSAxKSBieWUoInJlYWRpbmcgYWZ0ZXIgc2VlayBvbiAiLCBuYW1lKTsKKyAgICAqZ3ouYnVmID0gKHVuc2lnbmVkIGNoYXIpKCpnei5idWYgXiAoMSA8PCAoKDggLSBsYXN0Yml0KSAmIDcpKSk7CisgICAgbHNlZWsoZ3ouZmQsIC0xTCwgU0VFS19DVVIpOworICAgIGlmICh3cml0ZShnei5mZCwgZ3ouYnVmLCAxKSAhPSAxKSBieWUoIndyaXRpbmcgYWZ0ZXIgc2VlayB0byAiLCBuYW1lKTsKKworICAgIC8qIGlmIHdpbmRvdyB3cmFwcGVkLCBidWlsZCBkaWN0aW9uYXJ5IGZyb20gd2luZG93IGJ5IHJvdGF0aW5nICovCisgICAgaWYgKGZ1bGwpIHsKKyAgICAgICAgcm90YXRlKHdpbmRvdywgRFNJWkUsIGhhdmUpOworICAgICAgICBoYXZlID0gRFNJWkU7CisgICAgfQorCisgICAgLyogc2V0IHVwIGRlZmxhdGUgc3RyZWFtIHdpdGggd2luZG93LCBjcmMsIHRvdGFsX2luLCBhbmQgbGVmdG92ZXIgYml0cyAqLworICAgIHJldCA9IGRlZmxhdGVJbml0MihzdHJtLCBsZXZlbCwgWl9ERUZMQVRFRCwgLTE1LCA4LCBaX0RFRkFVTFRfU1RSQVRFR1kpOworICAgIGlmIChyZXQgIT0gWl9PSykgYnllKCJvdXQgb2YgbWVtb3J5IiwgIiIpOworICAgIGRlZmxhdGVTZXREaWN0aW9uYXJ5KHN0cm0sIHdpbmRvdywgaGF2ZSk7CisgICAgc3RybS0+YWRsZXIgPSBjcmM7CisgICAgc3RybS0+dG90YWxfaW4gPSB0b3Q7CisgICAgaWYgKGxlZnQpIHsKKyAgICAgICAgbHNlZWsoZ3ouZmQsIC0tZW5kLCBTRUVLX1NFVCk7CisgICAgICAgIGlmIChyZWFkKGd6LmZkLCBnei5idWYsIDEpICE9IDEpIGJ5ZSgicmVhZGluZyBhZnRlciBzZWVrIG9uICIsIG5hbWUpOworICAgICAgICBkZWZsYXRlUHJpbWUoc3RybSwgOCAtIGxlZnQsICpnei5idWYpOworICAgIH0KKyAgICBsc2Vlayhnei5mZCwgZW5kLCBTRUVLX1NFVCk7CisKKyAgICAvKiBjbGVhbiB1cCBhbmQgcmV0dXJuICovCisgICAgZnJlZSh3aW5kb3cpOworICAgIGZyZWUoZ3ouYnVmKTsKKyAgICByZXR1cm4gZ3ouZmQ7Cit9CisKKy8qIGFwcGVuZCBmaWxlICJuYW1lIiB0byBnemlwIGZpbGUgZ2QgdXNpbmcgZGVmbGF0ZSBzdHJlYW0gc3RybSAtLSBpZiBsYXN0CisgICBpcyB0cnVlLCB0aGVuIGZpbmlzaCBvZmYgdGhlIGRlZmxhdGUgc3RyZWFtIGF0IHRoZSBlbmQgKi8KK2xvY2FsIHZvaWQgZ3p0YWNrKGNoYXIgKm5hbWUsIGludCBnZCwgel9zdHJlYW0gKnN0cm0sIGludCBsYXN0KQoreworICAgIGludCBmZCwgbGVuLCByZXQ7CisgICAgdW5zaWduZWQgbGVmdDsKKyAgICB1bnNpZ25lZCBjaGFyICppbiwgKm91dDsKKworICAgIC8qIG9wZW4gZmlsZSB0byBjb21wcmVzcyBhbmQgYXBwZW5kICovCisgICAgZmQgPSAwOworICAgIGlmIChuYW1lICE9IE5VTEwpIHsKKyAgICAgICAgZmQgPSBvcGVuKG5hbWUsIE9fUkRPTkxZLCAwKTsKKyAgICAgICAgaWYgKGZkID09IC0xKQorICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJnemFwcGVuZCB3YXJuaW5nOiAlcyBub3QgZm91bmQsIHNraXBwaW5nIC4uLlxuIiwKKyAgICAgICAgICAgICAgICAgICAgbmFtZSk7CisgICAgfQorCisgICAgLyogYWxsb2NhdGUgYnVmZmVycyAqLworICAgIGluID0gbWFsbG9jKENIVU5LKTsKKyAgICBvdXQgPSBtYWxsb2MoQ0hVTkspOworICAgIGlmIChpbiA9PSBOVUxMIHx8IG91dCA9PSBOVUxMKSBieWUoIm91dCBvZiBtZW1vcnkiLCAiIik7CisKKyAgICAvKiBjb21wcmVzcyBpbnB1dCBmaWxlIGFuZCBhcHBlbmQgdG8gZ3ppcCBmaWxlICovCisgICAgZG8geworICAgICAgICAvKiBnZXQgbW9yZSBpbnB1dCAqLworICAgICAgICBsZW4gPSByZWFkKGZkLCBpbiwgQ0hVTkspOworICAgICAgICBpZiAobGVuID09IC0xKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAgImd6YXBwZW5kIHdhcm5pbmc6IGVycm9yIHJlYWRpbmcgJXMsIHNraXBwaW5nIHJlc3QgLi4uXG4iLAorICAgICAgICAgICAgICAgICAgICBuYW1lKTsKKyAgICAgICAgICAgIGxlbiA9IDA7CisgICAgICAgIH0KKyAgICAgICAgc3RybS0+YXZhaWxfaW4gPSAodW5zaWduZWQpbGVuOworICAgICAgICBzdHJtLT5uZXh0X2luID0gaW47CisgICAgICAgIGlmIChsZW4pIHN0cm0tPmFkbGVyID0gY3JjMzIoc3RybS0+YWRsZXIsIGluLCAodW5zaWduZWQpbGVuKTsKKworICAgICAgICAvKiBjb21wcmVzcyBhbmQgd3JpdGUgYWxsIGF2YWlsYWJsZSBvdXRwdXQgKi8KKyAgICAgICAgZG8geworICAgICAgICAgICAgc3RybS0+YXZhaWxfb3V0ID0gQ0hVTks7CisgICAgICAgICAgICBzdHJtLT5uZXh0X291dCA9IG91dDsKKyAgICAgICAgICAgIHJldCA9IGRlZmxhdGUoc3RybSwgbGFzdCAmJiBsZW4gPT0gMCA/IFpfRklOSVNIIDogWl9OT19GTFVTSCk7CisgICAgICAgICAgICBsZWZ0ID0gQ0hVTksgLSBzdHJtLT5hdmFpbF9vdXQ7CisgICAgICAgICAgICB3aGlsZSAobGVmdCkgeworICAgICAgICAgICAgICAgIGxlbiA9IHdyaXRlKGdkLCBvdXQgKyBDSFVOSyAtIHN0cm0tPmF2YWlsX291dCAtIGxlZnQsIGxlZnQpOworICAgICAgICAgICAgICAgIGlmIChsZW4gPT0gLTEpIGJ5ZSgid3JpdGluZyBnemlwIGZpbGUiLCAiIik7CisgICAgICAgICAgICAgICAgbGVmdCAtPSAodW5zaWduZWQpbGVuOworICAgICAgICAgICAgfQorICAgICAgICB9IHdoaWxlIChzdHJtLT5hdmFpbF9vdXQgPT0gMCAmJiByZXQgIT0gWl9TVFJFQU1fRU5EKTsKKyAgICB9IHdoaWxlIChsZW4gIT0gMCk7CisKKyAgICAvKiB3cml0ZSB0cmFpbGVyIGFmdGVyIGxhc3QgZW50cnkgKi8KKyAgICBpZiAobGFzdCkgeworICAgICAgICBkZWZsYXRlRW5kKHN0cm0pOworICAgICAgICBvdXRbMF0gPSAodW5zaWduZWQgY2hhcikoc3RybS0+YWRsZXIpOworICAgICAgICBvdXRbMV0gPSAodW5zaWduZWQgY2hhcikoc3RybS0+YWRsZXIgPj4gOCk7CisgICAgICAgIG91dFsyXSA9ICh1bnNpZ25lZCBjaGFyKShzdHJtLT5hZGxlciA+PiAxNik7CisgICAgICAgIG91dFszXSA9ICh1bnNpZ25lZCBjaGFyKShzdHJtLT5hZGxlciA+PiAyNCk7CisgICAgICAgIG91dFs0XSA9ICh1bnNpZ25lZCBjaGFyKShzdHJtLT50b3RhbF9pbik7CisgICAgICAgIG91dFs1XSA9ICh1bnNpZ25lZCBjaGFyKShzdHJtLT50b3RhbF9pbiA+PiA4KTsKKyAgICAgICAgb3V0WzZdID0gKHVuc2lnbmVkIGNoYXIpKHN0cm0tPnRvdGFsX2luID4+IDE2KTsKKyAgICAgICAgb3V0WzddID0gKHVuc2lnbmVkIGNoYXIpKHN0cm0tPnRvdGFsX2luID4+IDI0KTsKKyAgICAgICAgbGVuID0gODsKKyAgICAgICAgZG8geworICAgICAgICAgICAgcmV0ID0gd3JpdGUoZ2QsIG91dCArIDggLSBsZW4sIGxlbik7CisgICAgICAgICAgICBpZiAocmV0ID09IC0xKSBieWUoIndyaXRpbmcgZ3ppcCBmaWxlIiwgIiIpOworICAgICAgICAgICAgbGVuIC09IHJldDsKKyAgICAgICAgfSB3aGlsZSAobGVuKTsKKyAgICAgICAgY2xvc2UoZ2QpOworICAgIH0KKworICAgIC8qIGNsZWFuIHVwIGFuZCByZXR1cm4gKi8KKyAgICBmcmVlKG91dCk7CisgICAgZnJlZShpbik7CisgICAgaWYgKGZkID4gMCkgY2xvc2UoZmQpOworfQorCisvKiBwcm9jZXNzIHRoZSBjb21wcmVzc2lvbiBsZXZlbCBvcHRpb24gaWYgcHJlc2VudCwgc2NhbiB0aGUgZ3ppcCBmaWxlLCBhbmQKKyAgIGFwcGVuZCB0aGUgc3BlY2lmaWVkIGZpbGVzLCBvciBhcHBlbmQgdGhlIGRhdGEgZnJvbSBzdGRpbiBpZiBubyBvdGhlciBmaWxlCisgICBuYW1lcyBhcmUgcHJvdmlkZWQgb24gdGhlIGNvbW1hbmQgbGluZSAtLSB0aGUgZ3ppcCBmaWxlIG11c3QgYmUgd3JpdGFibGUKKyAgIGFuZCBzZWVrYWJsZSAqLworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIGludCBnZCwgbGV2ZWw7CisgICAgel9zdHJlYW0gc3RybTsKKworICAgIC8qIGlnbm9yZSBjb21tYW5kIG5hbWUgKi8KKyAgICBhcmdjLS07IGFyZ3YrKzsKKworICAgIC8qIHByb3ZpZGUgdXNhZ2UgaWYgbm8gYXJndW1lbnRzICovCisgICAgaWYgKCphcmd2ID09IE5VTEwpIHsKKyAgICAgICAgcHJpbnRmKAorICAgICAgICAgICAgImd6YXBwZW5kIDEuMiAoMTEgT2N0IDIwMTIpIENvcHlyaWdodCAoQykgMjAwMywgMjAxMiBNYXJrIEFkbGVyXG4iCisgICAgICAgICAgICAgICApOworICAgICAgICBwcmludGYoCisgICAgICAgICAgICAidXNhZ2U6IGd6YXBwZW5kIFstbGV2ZWxdIGZpbGUuZ3ogWyBhZGR0aGlzIFsgYW5kdGhpcyAuLi4gXV1cbiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvKiBzZXQgY29tcHJlc3Npb24gbGV2ZWwgKi8KKyAgICBsZXZlbCA9IFpfREVGQVVMVF9DT01QUkVTU0lPTjsKKyAgICBpZiAoYXJndlswXVswXSA9PSAnLScpIHsKKyAgICAgICAgaWYgKGFyZ3ZbMF1bMV0gPCAnMCcgfHwgYXJndlswXVsxXSA+ICc5JyB8fCBhcmd2WzBdWzJdICE9IDApCisgICAgICAgICAgICBieWUoImludmFsaWQgY29tcHJlc3Npb24gbGV2ZWwiLCAiIik7CisgICAgICAgIGxldmVsID0gYXJndlswXVsxXSAtICcwJzsKKyAgICAgICAgaWYgKCorK2FyZ3YgPT0gTlVMTCkgYnllKCJubyBnemlwIGZpbGUgbmFtZSBhZnRlciBvcHRpb25zIiwgIiIpOworICAgIH0KKworICAgIC8qIHByZXBhcmUgdG8gYXBwZW5kIHRvIGd6aXAgZmlsZSAqLworICAgIGdkID0gZ3pzY2FuKCphcmd2KyssICZzdHJtLCBsZXZlbCk7CisKKyAgICAvKiBhcHBlbmQgZmlsZXMgb24gY29tbWFuZCBsaW5lLCBvciBmcm9tIHN0ZGluIGlmIG5vbmUgKi8KKyAgICBpZiAoKmFyZ3YgPT0gTlVMTCkKKyAgICAgICAgZ3p0YWNrKE5VTEwsIGdkLCAmc3RybSwgMSk7CisgICAgZWxzZQorICAgICAgICBkbyB7CisgICAgICAgICAgICBnenRhY2soKmFyZ3YsIGdkLCAmc3RybSwgYXJndlsxXSA9PSBOVUxMKTsKKyAgICAgICAgfSB3aGlsZSAoKisrYXJndiAhPSBOVUxMKTsKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3NyYy9leGFtcGxlcy9nempvaW4uYyBiL3NyYy9leGFtcGxlcy9nempvaW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWU4MDk4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2V4YW1wbGVzL2d6am9pbi5jCkBAIC0wLDAgKzEsNDQ5IEBACisvKiBnempvaW4gLS0gY29tbWFuZCB0byBqb2luIGd6aXAgZmlsZXMgaW50byBvbmUgZ3ppcCBmaWxlCisKKyAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDEyIE1hcmsgQWRsZXIsIGFsbCByaWdodHMgcmVzZXJ2ZWQKKyAgdmVyc2lvbiAxLjIsIDE0IEF1ZyAyMDEyCisKKyAgVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWQKKyAgd2FycmFudHkuICBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3IgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzCisgIGFyaXNpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuCisKKyAgUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UsCisgIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXQKKyAgZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCisgIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90CisgICAgIGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlCisgICAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZQorICAgICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLgorICAyLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZQorICAgICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuCisgIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uCisKKyAgTWFyayBBZGxlciAgICBtYWRsZXJAYWx1bW5pLmNhbHRlY2guZWR1CisgKi8KKworLyoKKyAqIENoYW5nZSBoaXN0b3J5OgorICoKKyAqIDEuMCAgMTEgRGVjIDIwMDQgICAgIC0gRmlyc3QgdmVyc2lvbgorICogMS4xICAxMiBKdW4gMjAwNSAgICAgLSBDaGFuZ2VkIHNzaXplX3QgdG8gbG9uZyBmb3IgcG9ydGFiaWxpdHkKKyAqIDEuMiAgMTQgQXVnIDIwMTIgICAgIC0gQ2xlYW4gdXAgZm9yIHpfY29uc3QgdXNhZ2UKKyAqLworCisvKgorICAgZ3pqb2luIHRha2VzIG9uZSBvciBtb3JlIGd6aXAgZmlsZXMgb24gdGhlIGNvbW1hbmQgbGluZSBhbmQgd3JpdGVzIG91dCBhCisgICBzaW5nbGUgZ3ppcCBmaWxlIHRoYXQgd2lsbCB1bmNvbXByZXNzIHRvIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZQorICAgdW5jb21wcmVzc2VkIGRhdGEgZnJvbSB0aGUgaW5kaXZpZHVhbCBnemlwIGZpbGVzLiAgZ3pqb2luIGRvZXMgdGhpcyB3aXRob3V0CisgICBoYXZpbmcgdG8gcmVjb21wcmVzcyBhbnkgb2YgdGhlIGRhdGEgYW5kIHdpdGhvdXQgaGF2aW5nIHRvIGNhbGN1bGF0ZSBhIG5ldworICAgY3JjMzIgZm9yIHRoZSBjb25jYXRlbmF0ZWQgdW5jb21wcmVzc2VkIGRhdGEuICBnempvaW4gZG9lcyBob3dldmVyIGhhdmUgdG8KKyAgIGRlY29tcHJlc3MgYWxsIG9mIHRoZSBpbnB1dCBkYXRhIGluIG9yZGVyIHRvIGZpbmQgdGhlIGJpdHMgaW4gdGhlIGNvbXByZXNzZWQKKyAgIGRhdGEgdGhhdCBuZWVkIHRvIGJlIG1vZGlmaWVkIHRvIGNvbmNhdGVuYXRlIHRoZSBzdHJlYW1zLgorCisgICBnempvaW4gZG9lcyBub3QgZG8gYW4gaW50ZWdyaXR5IGNoZWNrIG9uIHRoZSBpbnB1dCBnemlwIGZpbGVzIG90aGVyIHRoYW4KKyAgIGNoZWNraW5nIHRoZSBnemlwIGhlYWRlciBhbmQgZGVjb21wcmVzc2luZyB0aGUgY29tcHJlc3NlZCBkYXRhLiAgVGhleSBhcmUKKyAgIG90aGVyd2lzZSBhc3N1bWVkIHRvIGJlIGNvbXBsZXRlIGFuZCBjb3JyZWN0LgorCisgICBFYWNoIGpvaW50IGJldHdlZW4gZ3ppcCBmaWxlcyByZW1vdmVzIGF0IGxlYXN0IDE4IGJ5dGVzIG9mIHByZXZpb3VzIHRyYWlsZXIKKyAgIGFuZCBzdWJzZXF1ZW50IGhlYWRlciwgYW5kIGluc2VydHMgYW4gYXZlcmFnZSBvZiBhYm91dCB0aHJlZSBieXRlcyB0byB0aGUKKyAgIGNvbXByZXNzZWQgZGF0YSBpbiBvcmRlciB0byBjb25uZWN0IHRoZSBzdHJlYW1zLiAgVGhlIG91dHB1dCBnemlwIGZpbGUKKyAgIGhhcyBhIG1pbmltYWwgdGVuLWJ5dGUgZ3ppcCBoZWFkZXIgd2l0aCBubyBmaWxlIG5hbWUgb3IgbW9kaWZpY2F0aW9uIHRpbWUuCisKKyAgIFRoaXMgcHJvZ3JhbSB3YXMgd3JpdHRlbiB0byBpbGx1c3RyYXRlIHRoZSB1c2Ugb2YgdGhlIFpfQkxPQ0sgb3B0aW9uIG9mCisgICBpbmZsYXRlKCkgYW5kIHRoZSBjcmMzMl9jb21iaW5lKCkgZnVuY3Rpb24uICBnempvaW4gd2lsbCBub3QgY29tcGlsZSB3aXRoCisgICB2ZXJzaW9ucyBvZiB6bGliIGVhcmxpZXIgdGhhbiAxLjIuMy4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4gICAgICAvKiBmcHV0cygpLCBmcHJpbnRmKCksIGZ3cml0ZSgpLCBwdXRjKCkgKi8KKyNpbmNsdWRlIDxzdGRsaWIuaD4gICAgIC8qIGV4aXQoKSwgbWFsbG9jKCksIGZyZWUoKSAqLworI2luY2x1ZGUgPGZjbnRsLmg+ICAgICAgLyogb3BlbigpICovCisjaW5jbHVkZSA8dW5pc3RkLmg+ICAgICAvKiBjbG9zZSgpLCByZWFkKCksIGxzZWVrKCkgKi8KKyNpbmNsdWRlICJ6bGliLmgiCisgICAgLyogY3JjMzIoKSwgY3JjMzJfY29tYmluZSgpLCBpbmZsYXRlSW5pdDIoKSwgaW5mbGF0ZSgpLCBpbmZsYXRlRW5kKCkgKi8KKworI2RlZmluZSBsb2NhbCBzdGF0aWMKKworLyogZXhpdCB3aXRoIGFuIGVycm9yIChyZXR1cm4gYSB2YWx1ZSB0byBhbGxvdyB1c2UgaW4gYW4gZXhwcmVzc2lvbikgKi8KK2xvY2FsIGludCBiYWlsKGNoYXIgKndoeTEsIGNoYXIgKndoeTIpCit7CisgICAgZnByaW50ZihzdGRlcnIsICJnempvaW4gZXJyb3I6ICVzJXMsIG91dHB1dCBpbmNvbXBsZXRlXG4iLCB3aHkxLCB3aHkyKTsKKyAgICBleGl0KDEpOworICAgIHJldHVybiAwOworfQorCisvKiAtLSBzaW1wbGUgYnVmZmVyZWQgZmlsZSBpbnB1dCB3aXRoIGFjY2VzcyB0byB0aGUgYnVmZmVyIC0tICovCisKKyNkZWZpbmUgQ0hVTksgMzI3NjggICAgICAgICAvKiBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvIGFuZCBmaXQgaW4gdW5zaWduZWQgKi8KKworLyogYmluIGJ1ZmZlcmVkIGlucHV0IGZpbGUgdHlwZSAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGNoYXIgKm5hbWU7ICAgICAgICAgICAgIC8qIG5hbWUgb2YgZmlsZSBmb3IgZXJyb3IgbWVzc2FnZXMgKi8KKyAgICBpbnQgZmQ7ICAgICAgICAgICAgICAgICAvKiBmaWxlIGRlc2NyaXB0b3IgKi8KKyAgICB1bnNpZ25lZCBsZWZ0OyAgICAgICAgICAvKiBieXRlcyByZW1haW5pbmcgYXQgbmV4dCAqLworICAgIHVuc2lnbmVkIGNoYXIgKm5leHQ7ICAgIC8qIG5leHQgYnl0ZSB0byByZWFkICovCisgICAgdW5zaWduZWQgY2hhciAqYnVmOyAgICAgLyogYWxsb2NhdGVkIGJ1ZmZlciBvZiBsZW5ndGggQ0hVTksgKi8KK30gYmluOworCisvKiBjbG9zZSBhIGJ1ZmZlcmVkIGZpbGUgYW5kIGZyZWUgYWxsb2NhdGVkIG1lbW9yeSAqLworbG9jYWwgdm9pZCBiY2xvc2UoYmluICppbikKK3sKKyAgICBpZiAoaW4gIT0gTlVMTCkgeworICAgICAgICBpZiAoaW4tPmZkICE9IC0xKQorICAgICAgICAgICAgY2xvc2UoaW4tPmZkKTsKKyAgICAgICAgaWYgKGluLT5idWYgIT0gTlVMTCkKKyAgICAgICAgICAgIGZyZWUoaW4tPmJ1Zik7CisgICAgICAgIGZyZWUoaW4pOworICAgIH0KK30KKworLyogb3BlbiBhIGJ1ZmZlcmVkIGZpbGUgZm9yIGlucHV0LCByZXR1cm4gYSBwb2ludGVyIHRvIHR5cGUgYmluLCBvciBOVUxMIG9uCisgICBmYWlsdXJlICovCitsb2NhbCBiaW4gKmJvcGVuKGNoYXIgKm5hbWUpCit7CisgICAgYmluICppbjsKKworICAgIGluID0gbWFsbG9jKHNpemVvZihiaW4pKTsKKyAgICBpZiAoaW4gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaW4tPmJ1ZiA9IG1hbGxvYyhDSFVOSyk7CisgICAgaW4tPmZkID0gb3BlbihuYW1lLCBPX1JET05MWSwgMCk7CisgICAgaWYgKGluLT5idWYgPT0gTlVMTCB8fCBpbi0+ZmQgPT0gLTEpIHsKKyAgICAgICAgYmNsb3NlKGluKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGluLT5sZWZ0ID0gMDsKKyAgICBpbi0+bmV4dCA9IGluLT5idWY7CisgICAgaW4tPm5hbWUgPSBuYW1lOworICAgIHJldHVybiBpbjsKK30KKworLyogbG9hZCBidWZmZXIgZnJvbSBmaWxlLCByZXR1cm4gLTEgb24gcmVhZCBlcnJvciwgMCBvciAxIG9uIHN1Y2Nlc3MsIHdpdGgKKyAgIDEgaW5kaWNhdGluZyB0aGF0IGVuZC1vZi1maWxlIHdhcyByZWFjaGVkICovCitsb2NhbCBpbnQgYmxvYWQoYmluICppbikKK3sKKyAgICBsb25nIGxlbjsKKworICAgIGlmIChpbiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKGluLT5sZWZ0ICE9IDApCisgICAgICAgIHJldHVybiAwOworICAgIGluLT5uZXh0ID0gaW4tPmJ1ZjsKKyAgICBkbyB7CisgICAgICAgIGxlbiA9IChsb25nKXJlYWQoaW4tPmZkLCBpbi0+YnVmICsgaW4tPmxlZnQsIENIVU5LIC0gaW4tPmxlZnQpOworICAgICAgICBpZiAobGVuIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaW4tPmxlZnQgKz0gKHVuc2lnbmVkKWxlbjsKKyAgICB9IHdoaWxlIChsZW4gIT0gMCAmJiBpbi0+bGVmdCA8IENIVU5LKTsKKyAgICByZXR1cm4gbGVuID09IDAgPyAxIDogMDsKK30KKworLyogZ2V0IGEgYnl0ZSBmcm9tIHRoZSBmaWxlLCBiYWlsIGlmIGVuZCBvZiBmaWxlICovCisjZGVmaW5lIGJnZXQoaW4pIChpbi0+bGVmdCA/IDAgOiBibG9hZChpbiksIFwKKyAgICAgICAgICAgICAgICAgIGluLT5sZWZ0ID8gKGluLT5sZWZ0LS0sICooaW4tPm5leHQpKyspIDogXAorICAgICAgICAgICAgICAgICAgICBiYWlsKCJ1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIG9uICIsIGluLT5uYW1lKSkKKworLyogZ2V0IGEgZm91ci1ieXRlIGxpdHRsZS1lbmRpYW4gdW5zaWduZWQgaW50ZWdlciBmcm9tIGZpbGUgKi8KK2xvY2FsIHVuc2lnbmVkIGxvbmcgYmdldDQoYmluICppbikKK3sKKyAgICB1bnNpZ25lZCBsb25nIHZhbDsKKworICAgIHZhbCA9IGJnZXQoaW4pOworICAgIHZhbCArPSAodW5zaWduZWQgbG9uZykoYmdldChpbikpIDw8IDg7CisgICAgdmFsICs9ICh1bnNpZ25lZCBsb25nKShiZ2V0KGluKSkgPDwgMTY7CisgICAgdmFsICs9ICh1bnNpZ25lZCBsb25nKShiZ2V0KGluKSkgPDwgMjQ7CisgICAgcmV0dXJuIHZhbDsKK30KKworLyogc2tpcCBieXRlcyBpbiBmaWxlICovCitsb2NhbCB2b2lkIGJza2lwKGJpbiAqaW4sIHVuc2lnbmVkIHNraXApCit7CisgICAgLyogY2hlY2sgcG9pbnRlciAqLworICAgIGlmIChpbiA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisKKyAgICAvKiBlYXN5IGNhc2UgLS0gc2tpcCBieXRlcyBpbiBidWZmZXIgKi8KKyAgICBpZiAoc2tpcCA8PSBpbi0+bGVmdCkgeworICAgICAgICBpbi0+bGVmdCAtPSBza2lwOworICAgICAgICBpbi0+bmV4dCArPSBza2lwOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyogc2tpcCB3aGF0J3MgaW4gYnVmZmVyLCBkaXNjYXJkIGJ1ZmZlciBjb250ZW50cyAqLworICAgIHNraXAgLT0gaW4tPmxlZnQ7CisgICAgaW4tPmxlZnQgPSAwOworCisgICAgLyogc2VlayBwYXN0IG11bHRpcGxlcyBvZiBDSFVOSyBieXRlcyAqLworICAgIGlmIChza2lwID4gQ0hVTkspIHsKKyAgICAgICAgdW5zaWduZWQgbGVmdDsKKworICAgICAgICBsZWZ0ID0gc2tpcCAmIChDSFVOSyAtIDEpOworICAgICAgICBpZiAobGVmdCA9PSAwKSB7CisgICAgICAgICAgICAvKiBleGFjdCBudW1iZXIgb2YgY2h1bmtzOiBzZWVrIGFsbCB0aGUgd2F5IG1pbnVzIG9uZSBieXRlIHRvIGNoZWNrCisgICAgICAgICAgICAgICBmb3IgZW5kLW9mLWZpbGUgd2l0aCBhIHJlYWQgKi8KKyAgICAgICAgICAgIGxzZWVrKGluLT5mZCwgc2tpcCAtIDEsIFNFRUtfQ1VSKTsKKyAgICAgICAgICAgIGlmIChyZWFkKGluLT5mZCwgaW4tPmJ1ZiwgMSkgIT0gMSkKKyAgICAgICAgICAgICAgICBiYWlsKCJ1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIG9uICIsIGluLT5uYW1lKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHNraXAgdGhlIGludGVncmFsIGNodW5rcywgdXBkYXRlIHNraXAgd2l0aCByZW1haW5kZXIgKi8KKyAgICAgICAgbHNlZWsoaW4tPmZkLCBza2lwIC0gbGVmdCwgU0VFS19DVVIpOworICAgICAgICBza2lwID0gbGVmdDsKKyAgICB9CisKKyAgICAvKiByZWFkIG1vcmUgaW5wdXQgYW5kIHNraXAgcmVtYWluZGVyICovCisgICAgYmxvYWQoaW4pOworICAgIGlmIChza2lwID4gaW4tPmxlZnQpCisgICAgICAgIGJhaWwoInVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUgb24gIiwgaW4tPm5hbWUpOworICAgIGluLT5sZWZ0IC09IHNraXA7CisgICAgaW4tPm5leHQgKz0gc2tpcDsKK30KKworLyogLS0gZW5kIG9mIGJ1ZmZlcmVkIGlucHV0IGZ1bmN0aW9ucyAtLSAqLworCisvKiBza2lwIHRoZSBnemlwIGhlYWRlciBmcm9tIGZpbGUgaW4gKi8KK2xvY2FsIHZvaWQgZ3poZWFkKGJpbiAqaW4pCit7CisgICAgaW50IGZsYWdzOworCisgICAgLyogdmVyaWZ5IGd6aXAgbWFnaWMgaGVhZGVyIGFuZCBjb21wcmVzc2lvbiBtZXRob2QgKi8KKyAgICBpZiAoYmdldChpbikgIT0gMHgxZiB8fCBiZ2V0KGluKSAhPSAweDhiIHx8IGJnZXQoaW4pICE9IDgpCisgICAgICAgIGJhaWwoaW4tPm5hbWUsICIgaXMgbm90IGEgdmFsaWQgZ3ppcCBmaWxlIik7CisKKyAgICAvKiBnZXQgYW5kIHZlcmlmeSBmbGFncyAqLworICAgIGZsYWdzID0gYmdldChpbik7CisgICAgaWYgKChmbGFncyAmIDB4ZTApICE9IDApCisgICAgICAgIGJhaWwoInVua25vd24gcmVzZXJ2ZWQgYml0cyBzZXQgaW4gIiwgaW4tPm5hbWUpOworCisgICAgLyogc2tpcCBtb2RpZmljYXRpb24gdGltZSwgZXh0cmEgZmxhZ3MsIGFuZCBvcyAqLworICAgIGJza2lwKGluLCA2KTsKKworICAgIC8qIHNraXAgZXh0cmEgZmllbGQgaWYgcHJlc2VudCAqLworICAgIGlmIChmbGFncyAmIDQpIHsKKyAgICAgICAgdW5zaWduZWQgbGVuOworCisgICAgICAgIGxlbiA9IGJnZXQoaW4pOworICAgICAgICBsZW4gKz0gKHVuc2lnbmVkKShiZ2V0KGluKSkgPDwgODsKKyAgICAgICAgYnNraXAoaW4sIGxlbik7CisgICAgfQorCisgICAgLyogc2tpcCBmaWxlIG5hbWUgaWYgcHJlc2VudCAqLworICAgIGlmIChmbGFncyAmIDgpCisgICAgICAgIHdoaWxlIChiZ2V0KGluKSAhPSAwKQorICAgICAgICAgICAgOworCisgICAgLyogc2tpcCBjb21tZW50IGlmIHByZXNlbnQgKi8KKyAgICBpZiAoZmxhZ3MgJiAxNikKKyAgICAgICAgd2hpbGUgKGJnZXQoaW4pICE9IDApCisgICAgICAgICAgICA7CisKKyAgICAvKiBza2lwIGhlYWRlciBjcmMgaWYgcHJlc2VudCAqLworICAgIGlmIChmbGFncyAmIDIpCisgICAgICAgIGJza2lwKGluLCAyKTsKK30KKworLyogd3JpdGUgYSBmb3VyLWJ5dGUgbGl0dGxlLWVuZGlhbiB1bnNpZ25lZCBpbnRlZ2VyIHRvIG91dCAqLworbG9jYWwgdm9pZCBwdXQ0KHVuc2lnbmVkIGxvbmcgdmFsLCBGSUxFICpvdXQpCit7CisgICAgcHV0Yyh2YWwgJiAweGZmLCBvdXQpOworICAgIHB1dGMoKHZhbCA+PiA4KSAmIDB4ZmYsIG91dCk7CisgICAgcHV0YygodmFsID4+IDE2KSAmIDB4ZmYsIG91dCk7CisgICAgcHV0YygodmFsID4+IDI0KSAmIDB4ZmYsIG91dCk7Cit9CisKKy8qIExvYWQgdXAgemxpYiBzdHJlYW0gZnJvbSBidWZmZXJlZCBpbnB1dCwgYmFpbCBpZiBlbmQgb2YgZmlsZSAqLworbG9jYWwgdm9pZCB6cHVsbCh6X3N0cmVhbXAgc3RybSwgYmluICppbikKK3sKKyAgICBpZiAoaW4tPmxlZnQgPT0gMCkKKyAgICAgICAgYmxvYWQoaW4pOworICAgIGlmIChpbi0+bGVmdCA9PSAwKQorICAgICAgICBiYWlsKCJ1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIG9uICIsIGluLT5uYW1lKTsKKyAgICBzdHJtLT5hdmFpbF9pbiA9IGluLT5sZWZ0OworICAgIHN0cm0tPm5leHRfaW4gPSBpbi0+bmV4dDsKK30KKworLyogV3JpdGUgaGVhZGVyIGZvciBnemlwIGZpbGUgdG8gb3V0IGFuZCBpbml0aWFsaXplIHRyYWlsZXIuICovCitsb2NhbCB2b2lkIGd6aW5pdCh1bnNpZ25lZCBsb25nICpjcmMsIHVuc2lnbmVkIGxvbmcgKnRvdCwgRklMRSAqb3V0KQoreworICAgIGZ3cml0ZSgiXHgxZlx4OGJceDA4XDBcMFwwXDBcMFwwXHhmZiIsIDEsIDEwLCBvdXQpOworICAgICpjcmMgPSBjcmMzMigwTCwgWl9OVUxMLCAwKTsKKyAgICAqdG90ID0gMDsKK30KKworLyogQ29weSB0aGUgY29tcHJlc3NlZCBkYXRhIGZyb20gbmFtZSwgemVyb2luZyB0aGUgbGFzdCBibG9jayBiaXQgb2YgdGhlIGxhc3QKKyAgIGJsb2NrIGlmIGNsciBpcyB0cnVlLCBhbmQgYWRkaW5nIGVtcHR5IGJsb2NrcyBhcyBuZWVkZWQgdG8gZ2V0IHRvIGEgYnl0ZQorICAgYm91bmRhcnkuICBJZiBjbHIgaXMgZmFsc2UsIHRoZW4gdGhlIGxhc3QgYmxvY2sgYmVjb21lcyB0aGUgbGFzdCBibG9jayBvZgorICAgdGhlIG91dHB1dCwgYW5kIHRoZSBnemlwIHRyYWlsZXIgaXMgd3JpdHRlbi4gIGNyYyBhbmQgdG90IG1haW50YWlucyB0aGUKKyAgIGNyYyBhbmQgbGVuZ3RoIChtb2R1bG8gMl4zMikgb2YgdGhlIG91dHB1dCBmb3IgdGhlIHRyYWlsZXIuICBUaGUgcmVzdWx0aW5nCisgICBnemlwIGZpbGUgaXMgd3JpdHRlbiB0byBvdXQuICBnemluaXQoKSBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgdGhlIGZpcnN0IGNhbGwKKyAgIG9mIGd6Y29weSgpIHRvIHdyaXRlIHRoZSBnemlwIGhlYWRlciBhbmQgdG8gaW5pdGlhbGl6ZSBjcmMgYW5kIHRvdC4gKi8KK2xvY2FsIHZvaWQgZ3pjb3B5KGNoYXIgKm5hbWUsIGludCBjbHIsIHVuc2lnbmVkIGxvbmcgKmNyYywgdW5zaWduZWQgbG9uZyAqdG90LAorICAgICAgICAgICAgICAgICAgRklMRSAqb3V0KQoreworICAgIGludCByZXQ7ICAgICAgICAgICAgICAgIC8qIHJldHVybiB2YWx1ZSBmcm9tIHpsaWIgZnVuY3Rpb25zICovCisgICAgaW50IHBvczsgICAgICAgICAgICAgICAgLyogd2hlcmUgdGhlICJsYXN0IGJsb2NrIiBiaXQgaXMgaW4gYnl0ZSAqLworICAgIGludCBsYXN0OyAgICAgICAgICAgICAgIC8qIHRydWUgaWYgcHJvY2Vzc2luZyB0aGUgbGFzdCBibG9jayAqLworICAgIGJpbiAqaW47ICAgICAgICAgICAgICAgIC8qIGJ1ZmZlcmVkIGlucHV0IGZpbGUgKi8KKyAgICB1bnNpZ25lZCBjaGFyICpzdGFydDsgICAvKiBzdGFydCBvZiBjb21wcmVzc2VkIGRhdGEgaW4gYnVmZmVyICovCisgICAgdW5zaWduZWQgY2hhciAqanVuazsgICAgLyogYnVmZmVyIGZvciB1bmNvbXByZXNzZWQgZGF0YSAtLSBkaXNjYXJkZWQgKi8KKyAgICB6X29mZl90IGxlbjsgICAgICAgICAgICAvKiBsZW5ndGggb2YgdW5jb21wcmVzc2VkIGRhdGEgKHN1cHBvcnQgPiA0IEdCKSAqLworICAgIHpfc3RyZWFtIHN0cm07ICAgICAgICAgIC8qIHpsaWIgaW5mbGF0ZSBzdHJlYW0gKi8KKworICAgIC8qIG9wZW4gZ3ppcCBmaWxlIGFuZCBza2lwIGhlYWRlciAqLworICAgIGluID0gYm9wZW4obmFtZSk7CisgICAgaWYgKGluID09IE5VTEwpCisgICAgICAgIGJhaWwoImNvdWxkIG5vdCBvcGVuICIsIG5hbWUpOworICAgIGd6aGVhZChpbik7CisKKyAgICAvKiBhbGxvY2F0ZSBidWZmZXIgZm9yIHVuY29tcHJlc3NlZCBkYXRhIGFuZCBpbml0aWFsaXplIHJhdyBpbmZsYXRlCisgICAgICAgc3RyZWFtICovCisgICAganVuayA9IG1hbGxvYyhDSFVOSyk7CisgICAgc3RybS56YWxsb2MgPSBaX05VTEw7CisgICAgc3RybS56ZnJlZSA9IFpfTlVMTDsKKyAgICBzdHJtLm9wYXF1ZSA9IFpfTlVMTDsKKyAgICBzdHJtLmF2YWlsX2luID0gMDsKKyAgICBzdHJtLm5leHRfaW4gPSBaX05VTEw7CisgICAgcmV0ID0gaW5mbGF0ZUluaXQyKCZzdHJtLCAtMTUpOworICAgIGlmIChqdW5rID09IE5VTEwgfHwgcmV0ICE9IFpfT0spCisgICAgICAgIGJhaWwoIm91dCBvZiBtZW1vcnkiLCAiIik7CisKKyAgICAvKiBpbmZsYXRlIGFuZCBjb3B5IGNvbXByZXNzZWQgZGF0YSwgY2xlYXIgbGFzdC1ibG9jayBiaXQgaWYgcmVxdWVzdGVkICovCisgICAgbGVuID0gMDsKKyAgICB6cHVsbCgmc3RybSwgaW4pOworICAgIHN0YXJ0ID0gaW4tPm5leHQ7CisgICAgbGFzdCA9IHN0YXJ0WzBdICYgMTsKKyAgICBpZiAobGFzdCAmJiBjbHIpCisgICAgICAgIHN0YXJ0WzBdICY9IH4xOworICAgIHN0cm0uYXZhaWxfb3V0ID0gMDsKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIC8qIGlmIGlucHV0IHVzZWQgYW5kIG91dHB1dCBkb25lLCB3cml0ZSB1c2VkIGlucHV0IGFuZCBnZXQgbW9yZSAqLworICAgICAgICBpZiAoc3RybS5hdmFpbF9pbiA9PSAwICYmIHN0cm0uYXZhaWxfb3V0ICE9IDApIHsKKyAgICAgICAgICAgIGZ3cml0ZShzdGFydCwgMSwgc3RybS5uZXh0X2luIC0gc3RhcnQsIG91dCk7CisgICAgICAgICAgICBzdGFydCA9IGluLT5idWY7CisgICAgICAgICAgICBpbi0+bGVmdCA9IDA7CisgICAgICAgICAgICB6cHVsbCgmc3RybSwgaW4pOworICAgICAgICB9CisKKyAgICAgICAgLyogZGVjb21wcmVzcyAtLSByZXR1cm4gZWFybHkgd2hlbiBlbmQtb2YtYmxvY2sgcmVhY2hlZCAqLworICAgICAgICBzdHJtLmF2YWlsX291dCA9IENIVU5LOworICAgICAgICBzdHJtLm5leHRfb3V0ID0ganVuazsKKyAgICAgICAgcmV0ID0gaW5mbGF0ZSgmc3RybSwgWl9CTE9DSyk7CisgICAgICAgIHN3aXRjaCAocmV0KSB7CisgICAgICAgIGNhc2UgWl9NRU1fRVJST1I6CisgICAgICAgICAgICBiYWlsKCJvdXQgb2YgbWVtb3J5IiwgIiIpOworICAgICAgICBjYXNlIFpfREFUQV9FUlJPUjoKKyAgICAgICAgICAgIGJhaWwoImludmFsaWQgY29tcHJlc3NlZCBkYXRhIGluICIsIGluLT5uYW1lKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHVwZGF0ZSBsZW5ndGggb2YgdW5jb21wcmVzc2VkIGRhdGEgKi8KKyAgICAgICAgbGVuICs9IENIVU5LIC0gc3RybS5hdmFpbF9vdXQ7CisKKyAgICAgICAgLyogY2hlY2sgZm9yIGJsb2NrIGJvdW5kYXJ5IChvbmx5IGdldCB0aGlzIHdoZW4gYmxvY2sgY29waWVkIG91dCkgKi8KKyAgICAgICAgaWYgKHN0cm0uZGF0YV90eXBlICYgMTI4KSB7CisgICAgICAgICAgICAvKiBpZiB0aGF0IHdhcyB0aGUgbGFzdCBibG9jaywgdGhlbiBkb25lICovCisgICAgICAgICAgICBpZiAobGFzdCkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgLyogbnVtYmVyIG9mIHVudXNlZCBiaXRzIGluIGxhc3QgYnl0ZSAqLworICAgICAgICAgICAgcG9zID0gc3RybS5kYXRhX3R5cGUgJiA3OworCisgICAgICAgICAgICAvKiBmaW5kIHRoZSBuZXh0IGxhc3QtYmxvY2sgYml0ICovCisgICAgICAgICAgICBpZiAocG9zICE9IDApIHsKKyAgICAgICAgICAgICAgICAvKiBuZXh0IGxhc3QtYmxvY2sgYml0IGlzIGluIGxhc3QgdXNlZCBieXRlICovCisgICAgICAgICAgICAgICAgcG9zID0gMHgxMDAgPj4gcG9zOworICAgICAgICAgICAgICAgIGxhc3QgPSBzdHJtLm5leHRfaW5bLTFdICYgcG9zOworICAgICAgICAgICAgICAgIGlmIChsYXN0ICYmIGNscikKKyAgICAgICAgICAgICAgICAgICAgaW4tPmJ1ZltzdHJtLm5leHRfaW4gLSBpbi0+YnVmIC0gMV0gJj0gfnBvczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIC8qIG5leHQgbGFzdC1ibG9jayBiaXQgaXMgaW4gbmV4dCB1bnVzZWQgYnl0ZSAqLworICAgICAgICAgICAgICAgIGlmIChzdHJtLmF2YWlsX2luID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgLyogZG9uJ3QgaGF2ZSB0aGF0IGJ5dGUgeWV0IC0tIGdldCBpdCAqLworICAgICAgICAgICAgICAgICAgICBmd3JpdGUoc3RhcnQsIDEsIHN0cm0ubmV4dF9pbiAtIHN0YXJ0LCBvdXQpOworICAgICAgICAgICAgICAgICAgICBzdGFydCA9IGluLT5idWY7CisgICAgICAgICAgICAgICAgICAgIGluLT5sZWZ0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgenB1bGwoJnN0cm0sIGluKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbGFzdCA9IHN0cm0ubmV4dF9pblswXSAmIDE7CisgICAgICAgICAgICAgICAgaWYgKGxhc3QgJiYgY2xyKQorICAgICAgICAgICAgICAgICAgICBpbi0+YnVmW3N0cm0ubmV4dF9pbiAtIGluLT5idWZdICY9IH4xOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyogdXBkYXRlIGJ1ZmZlciB3aXRoIHVudXNlZCBpbnB1dCAqLworICAgIGluLT5sZWZ0ID0gc3RybS5hdmFpbF9pbjsKKyAgICBpbi0+bmV4dCA9IGluLT5idWYgKyAoc3RybS5uZXh0X2luIC0gaW4tPmJ1Zik7CisKKyAgICAvKiBjb3B5IHVzZWQgaW5wdXQsIHdyaXRlIGVtcHR5IGJsb2NrcyB0byBnZXQgdG8gYnl0ZSBib3VuZGFyeSAqLworICAgIHBvcyA9IHN0cm0uZGF0YV90eXBlICYgNzsKKyAgICBmd3JpdGUoc3RhcnQsIDEsIGluLT5uZXh0IC0gc3RhcnQgLSAxLCBvdXQpOworICAgIGxhc3QgPSBpbi0+bmV4dFstMV07CisgICAgaWYgKHBvcyA9PSAwIHx8ICFjbHIpCisgICAgICAgIC8qIGFscmVhZHkgYXQgYnl0ZSBib3VuZGFyeSwgb3IgbGFzdCBmaWxlOiB3cml0ZSBsYXN0IGJ5dGUgKi8KKyAgICAgICAgcHV0YyhsYXN0LCBvdXQpOworICAgIGVsc2UgeworICAgICAgICAvKiBhcHBlbmQgZW1wdHkgYmxvY2tzIHRvIGxhc3QgYnl0ZSAqLworICAgICAgICBsYXN0ICY9ICgoMHgxMDAgPj4gcG9zKSAtIDEpOyAgICAgICAvKiBhc3N1cmUgdW51c2VkIGJpdHMgYXJlIHplcm8gKi8KKyAgICAgICAgaWYgKHBvcyAmIDEpIHsKKyAgICAgICAgICAgIC8qIG9kZCAtLSBhcHBlbmQgYW4gZW1wdHkgc3RvcmVkIGJsb2NrICovCisgICAgICAgICAgICBwdXRjKGxhc3QsIG91dCk7CisgICAgICAgICAgICBpZiAocG9zID09IDEpCisgICAgICAgICAgICAgICAgcHV0YygwLCBvdXQpOyAgICAgICAgICAgICAgIC8qIHR3byBtb3JlIGJpdHMgaW4gYmxvY2sgaGVhZGVyICovCisgICAgICAgICAgICBmd3JpdGUoIlwwXDBceGZmXHhmZiIsIDEsIDQsIG91dCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKiBldmVuIC0tIGFwcGVuZCAxLCAyLCBvciAzIGVtcHR5IGZpeGVkIGJsb2NrcyAqLworICAgICAgICAgICAgc3dpdGNoIChwb3MpIHsKKyAgICAgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAgICAgICBwdXRjKGxhc3QgfCA4LCBvdXQpOworICAgICAgICAgICAgICAgIGxhc3QgPSAwOworICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgIHB1dGMobGFzdCB8IDB4MjAsIG91dCk7CisgICAgICAgICAgICAgICAgbGFzdCA9IDA7CisgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgcHV0YyhsYXN0IHwgMHg4MCwgb3V0KTsKKyAgICAgICAgICAgICAgICBwdXRjKDAsIG91dCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiB1cGRhdGUgY3JjIGFuZCB0b3QgKi8KKyAgICAqY3JjID0gY3JjMzJfY29tYmluZSgqY3JjLCBiZ2V0NChpbiksIGxlbik7CisgICAgKnRvdCArPSAodW5zaWduZWQgbG9uZylsZW47CisKKyAgICAvKiBjbGVhbiB1cCAqLworICAgIGluZmxhdGVFbmQoJnN0cm0pOworICAgIGZyZWUoanVuayk7CisgICAgYmNsb3NlKGluKTsKKworICAgIC8qIHdyaXRlIHRyYWlsZXIgaWYgdGhpcyBpcyB0aGUgbGFzdCBnemlwIGZpbGUgKi8KKyAgICBpZiAoIWNscikgeworICAgICAgICBwdXQ0KCpjcmMsIG91dCk7CisgICAgICAgIHB1dDQoKnRvdCwgb3V0KTsKKyAgICB9Cit9CisKKy8qIGpvaW4gdGhlIGd6aXAgZmlsZXMgb24gdGhlIGNvbW1hbmQgbGluZSwgd3JpdGUgcmVzdWx0IHRvIHN0ZG91dCAqLworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIHVuc2lnbmVkIGxvbmcgY3JjLCB0b3Q7ICAgICAvKiBydW5uaW5nIGNyYyBhbmQgdG90YWwgdW5jb21wcmVzc2VkIGxlbmd0aCAqLworCisgICAgLyogc2tpcCBjb21tYW5kIG5hbWUgKi8KKyAgICBhcmdjLS07CisgICAgYXJndisrOworCisgICAgLyogc2hvdyB1c2FnZSBpZiBubyBhcmd1bWVudHMgKi8KKyAgICBpZiAoYXJnYyA9PSAwKSB7CisgICAgICAgIGZwdXRzKCJnempvaW4gdXNhZ2U6IGd6am9pbiBmMS5neiBbZjIuZ3ogW2YzLmd6IC4uLl1dID4gZmpvaW4uZ3pcbiIsCisgICAgICAgICAgICAgIHN0ZGVycik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8qIGpvaW4gZ3ppcCBmaWxlcyBvbiBjb21tYW5kIGxpbmUgYW5kIHdyaXRlIHRvIHN0ZG91dCAqLworICAgIGd6aW5pdCgmY3JjLCAmdG90LCBzdGRvdXQpOworICAgIHdoaWxlIChhcmdjLS0pCisgICAgICAgIGd6Y29weSgqYXJndisrLCBhcmdjLCAmY3JjLCAmdG90LCBzdGRvdXQpOworCisgICAgLyogZG9uZSAqLworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvc3JjL2V4YW1wbGVzL2d6bG9nLmMgYi9zcmMvZXhhbXBsZXMvZ3psb2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTc3ODAyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2V4YW1wbGVzL2d6bG9nLmMKQEAgLTAsMCArMSwxMDYxIEBACisvKgorICogZ3psb2cuYworICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA4LCAyMDEyLCAyMDE2LCAyMDE5IE1hcmsgQWRsZXIsIGFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBnemxvZy5oCisgKiB2ZXJzaW9uIDIuMywgMjUgTWF5IDIwMTkKKyAqLworCisvKgorICAgZ3psb2cgcHJvdmlkZXMgYSBtZWNoYW5pc20gZm9yIGZyZXF1ZW50bHkgYXBwZW5kaW5nIHNob3J0IHN0cmluZ3MgdG8gYSBnemlwCisgICBmaWxlIHRoYXQgaXMgZWZmaWNpZW50IGJvdGggaW4gZXhlY3V0aW9uIHRpbWUgYW5kIGNvbXByZXNzaW9uIHJhdGlvLiAgVGhlCisgICBzdHJhdGVneSBpcyB0byB3cml0ZSB0aGUgc2hvcnQgc3RyaW5ncyBpbiBhbiB1bmNvbXByZXNzZWQgZm9ybSB0byB0aGUgZW5kIG9mCisgICB0aGUgZ3ppcCBmaWxlLCBvbmx5IGNvbXByZXNzaW5nIHdoZW4gdGhlIGFtb3VudCBvZiB1bmNvbXByZXNzZWQgZGF0YSBoYXMKKyAgIHJlYWNoZWQgYSBnaXZlbiB0aHJlc2hvbGQuCisKKyAgIGd6bG9nIGFsc28gcHJvdmlkZXMgcHJvdGVjdGlvbiBhZ2FpbnN0IGludGVycnVwdGlvbnMgaW4gdGhlIHByb2Nlc3MgZHVlIHRvCisgICBzeXN0ZW0gY3Jhc2hlcy4gIFRoZSBzdGF0dXMgb2YgdGhlIG9wZXJhdGlvbiBpcyByZWNvcmRlZCBpbiBhbiBleHRyYSBmaWVsZAorICAgaW4gdGhlIGd6aXAgZmlsZSwgYW5kIGlzIG9ubHkgdXBkYXRlZCBvbmNlIHRoZSBnemlwIGZpbGUgaXMgYnJvdWdodCB0byBhCisgICB2YWxpZCBzdGF0ZS4gIFRoZSBsYXN0IGRhdGEgdG8gYmUgYXBwZW5kZWQgb3IgY29tcHJlc3NlZCBpcyBzYXZlZCBpbiBhbgorICAgYXV4aWxpYXJ5IGZpbGUsIHNvIHRoYXQgaWYgdGhlIG9wZXJhdGlvbiBpcyBpbnRlcnJ1cHRlZCwgaXQgY2FuIGJlIGNvbXBsZXRlZAorICAgdGhlIG5leHQgdGltZSBhbiBhcHBlbmQgb3BlcmF0aW9uIGlzIGF0dGVtcHRlZC4KKworICAgZ3psb2cgbWFpbnRhaW5zIGFub3RoZXIgYXV4aWxpYXJ5IGZpbGUgd2l0aCB0aGUgbGFzdCAzMksgb2YgZGF0YSBmcm9tIHRoZQorICAgY29tcHJlc3NlZCBwb3J0aW9uLCB3aGljaCBpcyBwcmVsb2FkZWQgZm9yIHRoZSBjb21wcmVzc2lvbiBvZiB0aGUgc3Vic2VxdWVudAorICAgZGF0YS4gIFRoaXMgbWluaW1pemVzIHRoZSBpbXBhY3QgdG8gdGhlIGNvbXByZXNzaW9uIHJhdGlvIG9mIGFwcGVuZGluZy4KKyAqLworCisvKgorICAgT3BlcmF0aW9ucyBDb25jZXB0OgorCisgICBGaWxlcyAobG9nIG5hbWUgImZvbyIpOgorICAgZm9vLmd6IC0tIGd6aXAgZmlsZSB3aXRoIHRoZSBjb21wbGV0ZSBsb2cKKyAgIGZvby5hZGQgLS0gbGFzdCBtZXNzYWdlIHRvIGFwcGVuZCBvciBsYXN0IGRhdGEgdG8gY29tcHJlc3MKKyAgIGZvby5kaWN0IC0tIGRpY3Rpb25hcnkgb2YgdGhlIGxhc3QgMzJLIG9mIGRhdGEgZm9yIG5leHQgY29tcHJlc3Npb24KKyAgIGZvby50ZW1wIC0tIHRlbXBvcmFyeSBkaWN0aW9uYXJ5IGZpbGUgZm9yIGNvbXByZXNzaW9uIGFmdGVyIHRoaXMgb25lCisgICBmb28ubG9jayAtLSBsb2NrIGZpbGUgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcgdGhlIG90aGVyIGZpbGVzCisgICBmb28ucmVwYWlycyAtLSBsb2cgZmlsZSBmb3IgbG9nIGZpbGUgcmVjb3Zlcnkgb3BlcmF0aW9ucyAobm90IGNvbXByZXNzZWQpCisKKyAgIGd6aXAgZmlsZSBzdHJ1Y3R1cmU6CisgICAtIGZpeGVkLWxlbmd0aCAobm8gZmlsZSBuYW1lKSBoZWFkZXIgd2l0aCBleHRyYSBmaWVsZCAoc2VlIGJlbG93KQorICAgLSBjb21wcmVzc2VkIGRhdGEgZW5kaW5nIGluaXRpYWxseSB3aXRoIGVtcHR5IHN0b3JlZCBibG9jaworICAgLSB1bmNvbXByZXNzZWQgZGF0YSBmaWxsaW5nIG91dCBvcmlnaW5hbGx5IGVtcHR5IHN0b3JlZCBibG9jayBhbmQKKyAgICAgc3Vic2VxdWVudCBzdG9yZWQgYmxvY2tzIGFzIG5lZWRlZCAoMTZLIG1heCBlYWNoKQorICAgLSBnemlwIHRyYWlsZXIKKyAgIC0gbm8ganVuayBhdCBlbmQgKG5vIG90aGVyIGd6aXAgc3RyZWFtcykKKworICAgV2hlbiBhcHBlbmRpbmcgZGF0YSwgdGhlIGluZm9ybWF0aW9uIGluIHRoZSBmaXJzdCB0aHJlZSBpdGVtcyBhYm92ZSBwbHVzIHRoZQorICAgZm9vLmFkZCBmaWxlIGFyZSBzdWZmaWNpZW50IHRvIHJlY292ZXIgYW4gaW50ZXJydXB0ZWQgYXBwZW5kIG9wZXJhdGlvbi4gIFRoZQorICAgZXh0cmEgZmllbGQgaGFzIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gdG8gcmVzdG9yZSB0aGUgc3RhcnQgb2YgdGhlIGxhc3QKKyAgIHN0b3JlZCBibG9jayBhbmQgZGV0ZXJtaW5lIHdoZXJlIHRvIGFwcGVuZCB0aGUgZGF0YSBpbiB0aGUgZm9vLmFkZCBmaWxlLCBhcworICAgd2VsbCBhcyB0aGUgY3JjIGFuZCBsZW5ndGggb2YgdGhlIGd6aXAgZGF0YSBiZWZvcmUgdGhlIGFwcGVuZCBvcGVyYXRpb24uCisKKyAgIFRoZSBmb28uYWRkIGZpbGUgaXMgY3JlYXRlZCBiZWZvcmUgdGhlIGd6aXAgZmlsZSBpcyBtYXJrZWQgZm9yIGFwcGVuZCwgYW5kCisgICBkZWxldGVkIGFmdGVyIHRoZSBnemlwIGZpbGUgaXMgbWFya2VkIGFzIGNvbXBsZXRlLiAgU28gaWYgdGhlIGFwcGVuZAorICAgb3BlcmF0aW9uIGlzIGludGVycnVwdGVkLCB0aGUgZGF0YSB0byBhZGQgd2lsbCBzdGlsbCBiZSB0aGVyZS4gIElmIGR1ZSB0bworICAgc29tZSBleHRlcm5hbCBmb3JjZSwgdGhlIGZvby5hZGQgZmlsZSBnZXRzIGRlbGV0ZWQgYmV0d2VlbiB3aGVuIHRoZSBhcHBlbmQKKyAgIG9wZXJhdGlvbiB3YXMgaW50ZXJydXB0ZWQgYW5kIHdoZW4gcmVjb3ZlcnkgaXMgYXR0ZW1wdGVkLCB0aGUgZ3ppcCBmaWxlIHdpbGwKKyAgIHN0aWxsIGJlIHJlc3RvcmVkLCBidXQgd2l0aG91dCB0aGUgYXBwZW5kZWQgZGF0YS4KKworICAgV2hlbiBjb21wcmVzc2luZyBkYXRhLCB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIGZpcnN0IHR3byBpdGVtcyBhYm92ZSBwbHVzIHRoZQorICAgZm9vLmFkZCBmaWxlIGFyZSBzdWZmaWNpZW50IHRvIHJlY292ZXIgYW4gaW50ZXJydXB0ZWQgY29tcHJlc3Mgb3BlcmF0aW9uLgorICAgVGhlIGV4dHJhIGZpZWxkIGhhcyB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIHRvIGZpbmQgdGhlIGVuZCBvZiB0aGUKKyAgIGNvbXByZXNzZWQgZGF0YSwgYW5kIGNvbnRhaW5zIGJvdGggdGhlIGNyYyBhbmQgbGVuZ3RoIG9mIGp1c3QgdGhlIGNvbXByZXNzZWQKKyAgIGRhdGEgYW5kIG9mIHRoZSBjb21wbGV0ZSBzZXQgb2YgZGF0YSBpbmNsdWRpbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSBmb28uYWRkCisgICBmaWxlLgorCisgICBBZ2FpbiwgdGhlIGZvby5hZGQgZmlsZSBpcyBtYWludGFpbmVkIGR1cmluZyB0aGUgY29tcHJlc3Mgb3BlcmF0aW9uIGluIGNhc2UKKyAgIG9mIGFuIGludGVycnVwdGlvbi4gIElmIGluIHRoZSB1bmxpa2VseSBldmVudCB0aGUgZm9vLmFkZCBmaWxlIHdpdGggdGhlIGRhdGEKKyAgIHRvIGJlIGNvbXByZXNzZWQgaXMgbWlzc2luZyBkdWUgdG8gc29tZSBleHRlcm5hbCBmb3JjZSwgYSBnemlwIGZpbGUgd2l0aAorICAganVzdCB0aGUgcHJldmlvdXMgY29tcHJlc3NlZCBkYXRhIHdpbGwgYmUgcmVjb25zdHJ1Y3RlZC4gIEluIHRoaXMgY2FzZSwgYWxsCisgICBvZiB0aGUgZGF0YSB0aGF0IHdhcyB0byBiZSBjb21wcmVzc2VkIGlzIGxvc3QgKGFwcHJveGltYXRlbHkgb25lIG1lZ2FieXRlKS4KKyAgIFRoaXMgd2lsbCBub3Qgb2NjdXIgaWYgYWxsIHRoYXQgaGFwcGVuZWQgd2FzIGFuIGludGVycnVwdGlvbiBvZiB0aGUgY29tcHJlc3MKKyAgIG9wZXJhdGlvbi4KKworICAgVGhlIHRoaXJkIHN0YXRlIHRoYXQgaXMgbWFya2VkIGlzIHRoZSByZXBsYWNlbWVudCBvZiB0aGUgb2xkIGRpY3Rpb25hcnkgd2l0aAorICAgdGhlIG5ldyBkaWN0aW9uYXJ5IGFmdGVyIGEgY29tcHJlc3Mgb3BlcmF0aW9uLiAgT25jZSBjb21wcmVzc2lvbiBpcworICAgY29tcGxldGUsIHRoZSBnemlwIGZpbGUgaXMgbWFya2VkIGFzIGJlaW5nIGluIHRoZSByZXBsYWNlIHN0YXRlLiAgVGhpcworICAgY29tcGxldGVzIHRoZSBnemlwIGZpbGUsIHNvIGFuIGludGVycnVwdCBhZnRlciBiZWluZyBzbyBtYXJrZWQgZG9lcyBub3QKKyAgIHJlc3VsdCBpbiByZWNvbXByZXNzaW9uLiAgVGhlbiB0aGUgZGljdGlvbmFyeSBmaWxlIGlzIHJlcGxhY2VkLCBhbmQgdGhlIGd6aXAKKyAgIGZpbGUgaXMgbWFya2VkIGFzIGNvbXBsZXRlZC4gIFRoaXMgc3RhdGUgcHJldmVudHMgdGhlIHBvc3NpYmlsaXR5IG9mCisgICByZXN0YXJ0aW5nIGNvbXByZXNzaW9uIHdpdGggdGhlIHdyb25nIGRpY3Rpb25hcnkgZmlsZS4KKworICAgQWxsIHRocmVlIG9wZXJhdGlvbnMgYXJlIHdyYXBwZWQgYnkgYSBsb2NrL3VubG9jayBwcm9jZWR1cmUuICBJbiBvcmRlciB0bworICAgZ2FpbiBleGNsdXNpdmUgYWNjZXNzIHRvIHRoZSBsb2cgZmlsZXMsIGZpcnN0IGEgZm9vLmxvY2sgZmlsZSBtdXN0IGJlCisgICBleGNsdXNpdmVseSBjcmVhdGVkLiAgV2hlbiBhbGwgb3BlcmF0aW9ucyBhcmUgY29tcGxldGUsIHRoZSBsb2NrIGlzCisgICByZWxlYXNlZCBieSBkZWxldGluZyB0aGUgZm9vLmxvY2sgZmlsZS4gIElmIHdoZW4gYXR0ZW1wdGluZyB0byBjcmVhdGUgdGhlCisgICBsb2NrIGZpbGUsIGl0IGFscmVhZHkgZXhpc3RzIGFuZCB0aGUgbW9kaWZ5IHRpbWUgb2YgdGhlIGxvY2sgZmlsZSBpcyBtb3JlCisgICB0aGFuIGZpdmUgbWludXRlcyBvbGQgKHNldCBieSB0aGUgUEFUSUVOQ0UgZGVmaW5lIGJlbG93KSwgdGhlbiB0aGUgb2xkCisgICBsb2NrIGZpbGUgaXMgY29uc2lkZXJlZCBzdGFsZSBhbmQgZGVsZXRlZCwgYW5kIHRoZSBleGNsdXNpdmUgY3JlYXRpb24gb2YKKyAgIHRoZSBsb2NrIGZpbGUgaXMgcmV0cmllZC4gIFRvIGFzc3VyZSB0aGF0IHRoZXJlIGFyZSBubyBmYWxzZSBhc3Nlc3NtZW50cworICAgb2YgdGhlIHN0YWxlbmVzcyBvZiB0aGUgbG9jayBmaWxlLCB0aGUgb3BlcmF0aW9ucyBwZXJpb2RpY2FsbHkgdG91Y2ggdGhlCisgICBsb2NrIGZpbGUgdG8gdXBkYXRlIHRoZSBtb2RpZmllZCBkYXRlLgorCisgICBGb2xsb3dpbmcgaXMgdGhlIGRlZmluaXRpb24gb2YgdGhlIGV4dHJhIGZpZWxkIHdpdGggYWxsIG9mIHRoZSBpbmZvcm1hdGlvbgorICAgcmVxdWlyZWQgdG8gZW5hYmxlIHRoZSBhYm92ZSBhcHBlbmQgYW5kIGNvbXByZXNzIG9wZXJhdGlvbnMgYW5kIHRoZWlyCisgICByZWNvdmVyeSBpZiBpbnRlcnJ1cHRlZC4gIE11bHRpLWJ5dGUgdmFsdWVzIGFyZSBzdG9yZWQgbGl0dGxlIGVuZGlhbgorICAgKGNvbnNpc3RlbnQgd2l0aCB0aGUgZ3ppcCBmb3JtYXQpLiAgRmlsZSBwb2ludGVycyBhcmUgZWlnaHQgYnl0ZXMgbG9uZy4KKyAgIFRoZSBjcmMncyBhbmQgbGVuZ3RocyBmb3IgdGhlIGd6aXAgdHJhaWxlciBhcmUgZm91ciBieXRlcyBsb25nLiAgKE5vdGUgdGhhdAorICAgdGhlIGxlbmd0aCBhdCB0aGUgZW5kIG9mIGEgZ3ppcCBmaWxlIGlzIHVzZWQgZm9yIGVycm9yIGNoZWNraW5nIG9ubHksIGFuZAorICAgZm9yIGxhcmdlIGZpbGVzIGlzIGFjdHVhbGx5IHRoZSBsZW5ndGggbW9kdWxvIDJeMzIuKSAgVGhlIHN0b3JlZCBibG9jaworICAgbGVuZ3RoIGlzIHR3byBieXRlcyBsb25nLiAgVGhlIGd6aXAgZXh0cmEgZmllbGQgdHdvLWJ5dGUgaWRlbnRpZmljYXRpb24gaXMKKyAgICJhcCIgZm9yIGFwcGVuZC4gIEl0IGlzIGFzc3VtZWQgdGhhdCB3cml0aW5nIHRoZSBleHRyYSBmaWVsZCB0byB0aGUgZmlsZSBpcworICAgYW4gImF0b21pYyIgb3BlcmF0aW9uLiAgVGhhdCBpcywgZWl0aGVyIGFsbCBvZiB0aGUgZXh0cmEgZmllbGQgaXMgd3JpdHRlbgorICAgdG8gdGhlIGZpbGUsIG9yIG5vbmUgb2YgaXQgaXMsIGlmIHRoZSBvcGVyYXRpb24gaXMgaW50ZXJydXB0ZWQgcmlnaHQgYXQgdGhlCisgICBwb2ludCBvZiB1cGRhdGluZyB0aGUgZXh0cmEgZmllbGQuICBUaGlzIGlzIGEgcmVhc29uYWJsZSBhc3N1bXB0aW9uLCBzaW5jZQorICAgdGhlIGV4dHJhIGZpZWxkIGlzIHdpdGhpbiB0aGUgZmlyc3QgNTIgYnl0ZXMgb2YgdGhlIGZpbGUsIHdoaWNoIGlzIHNtYWxsZXIKKyAgIHRoYW4gYW55IGV4cGVjdGVkIGJsb2NrIHNpemUgZm9yIGEgbWFzcyBzdG9yYWdlIGRldmljZSAodXN1YWxseSA1MTIgYnl0ZXMgb3IKKyAgIGxhcmdlcikuCisKKyAgIEV4dHJhIGZpZWxkICgzNSBieXRlcyk6CisgICAtIFBvaW50ZXIgdG8gZmlyc3Qgc3RvcmVkIGJsb2NrIGxlbmd0aCAtLSB0aGlzIHBvaW50cyB0byB0aGUgdHdvLWJ5dGUgbGVuZ3RoCisgICAgIG9mIHRoZSBmaXJzdCBzdG9yZWQgYmxvY2ssIHdoaWNoIGlzIGZvbGxvd2VkIGJ5IHRoZSB0d28tYnl0ZSwgb25lJ3MKKyAgICAgY29tcGxlbWVudCBvZiB0aGF0IGxlbmd0aC4gIFRoZSBzdG9yZWQgYmxvY2sgbGVuZ3RoIGlzIHByZWNlZGVkIGJ5IHRoZQorICAgICB0aHJlZS1iaXQgaGVhZGVyIG9mIHRoZSBzdG9yZWQgYmxvY2ssIHdoaWNoIGlzIHRoZSBhY3R1YWwgc3RhcnQgb2YgdGhlCisgICAgIHN0b3JlZCBibG9jayBpbiB0aGUgZGVmbGF0ZSBmb3JtYXQuICBTZWUgdGhlIGJpdCBvZmZzZXQgZmllbGQgYmVsb3cuCisgICAtIFBvaW50ZXIgdG8gdGhlIGxhc3Qgc3RvcmVkIGJsb2NrIGxlbmd0aC4gIFRoaXMgaXMgdGhlIHNhbWUgYXMgYWJvdmUsIGJ1dAorICAgICBmb3IgdGhlIGxhc3Qgc3RvcmVkIGJsb2NrIG9mIHRoZSB1bmNvbXByZXNzZWQgZGF0YSBpbiB0aGUgZ3ppcCBmaWxlLgorICAgICBJbml0aWFsbHkgdGhpcyBpcyB0aGUgc2FtZSBhcyB0aGUgZmlyc3Qgc3RvcmVkIGJsb2NrIGxlbmd0aCBwb2ludGVyLgorICAgICBXaGVuIHRoZSBzdG9yZWQgYmxvY2sgZ2V0cyB0byAxNksgKHNlZSB0aGUgTUFYX1NUT1JFIGRlZmluZSksIHRoZW4gYSBuZXcKKyAgICAgc3RvcmVkIGJsb2NrIGFzIGFkZGVkLCBhdCB3aGljaCBwb2ludCB0aGUgbGFzdCBzdG9yZWQgYmxvY2sgbGVuZ3RoIHBvaW50ZXIKKyAgICAgaXMgZGlmZmVyZW50IGZyb20gdGhlIGZpcnN0IHN0b3JlZCBibG9jayBsZW5ndGggcG9pbnRlci4gIFdoZW4gdGhleSBhcmUKKyAgICAgZGlmZmVyZW50LCB0aGUgZmlyc3QgYml0IG9mIHRoZSBsYXN0IHN0b3JlZCBibG9jayBoZWFkZXIgaXMgZWlnaHQgYml0cywgb3IKKyAgICAgb25lIGJ5dGUgYmFjayBmcm9tIHRoZSBibG9jayBsZW5ndGguCisgICAtIENvbXByZXNzZWQgZGF0YSBjcmMgYW5kIGxlbmd0aC4gIFRoaXMgaXMgdGhlIGNyYyBhbmQgbGVuZ3RoIG9mIHRoZSBkYXRhCisgICAgIHRoYXQgaXMgaW4gdGhlIGNvbXByZXNzZWQgcG9ydGlvbiBvZiB0aGUgZGVmbGF0ZSBzdHJlYW0uICBUaGVzZSBhcmUgdXNlZAorICAgICBvbmx5IGluIHRoZSBldmVudCB0aGF0IHRoZSBmb28uYWRkIGZpbGUgY29udGFpbmluZyB0aGUgZGF0YSB0byBjb21wcmVzcyBpcworICAgICBsb3N0IGFmdGVyIGEgY29tcHJlc3Mgb3BlcmF0aW9uIGlzIGludGVycnVwdGVkLgorICAgLSBUb3RhbCBkYXRhIGNyYyBhbmQgbGVuZ3RoLiAgVGhpcyBpcyB0aGUgY3JjIGFuZCBsZW5ndGggb2YgYWxsIG9mIHRoZSBkYXRhCisgICAgIHN0b3JlZCBpbiB0aGUgZ3ppcCBmaWxlLCBjb21wcmVzc2VkIGFuZCB1bmNvbXByZXNzZWQuICBJdCBpcyB1c2VkIHRvCisgICAgIHJlY29uc3RydWN0IHRoZSBnemlwIHRyYWlsZXIgd2hlbiBjb21wcmVzc2luZywgYXMgd2VsbCBhcyB3aGVuIHJlY292ZXJpbmcKKyAgICAgaW50ZXJydXB0ZWQgb3BlcmF0aW9ucy4KKyAgIC0gRmluYWwgc3RvcmVkIGJsb2NrIGxlbmd0aC4gIFRoaXMgaXMgdXNlZCB0byBxdWlja2x5IGZpbmQgd2hlcmUgdG8gYXBwZW5kLAorICAgICBhbmQgYWxsb3dzIHRoZSByZXN0b3JhdGlvbiBvZiB0aGUgb3JpZ2luYWwgZmluYWwgc3RvcmVkIGJsb2NrIHN0YXRlIHdoZW4KKyAgICAgYW4gYXBwZW5kIG9wZXJhdGlvbiBpcyBpbnRlcnJ1cHRlZC4KKyAgIC0gRmlyc3Qgc3RvcmVkIGJsb2NrIHN0YXJ0IGFzIHRoZSBudW1iZXIgb2YgYml0cyBiYWNrIGZyb20gdGhlIGZpbmFsIHN0b3JlZAorICAgICBibG9jayBmaXJzdCBsZW5ndGggYnl0ZS4gIFRoaXMgdmFsdWUgaXMgaW4gdGhlIHJhbmdlIG9mIDMuLjEwLCBhbmQgaXMKKyAgICAgc3RvcmVkIGFzIHRoZSBsb3cgdGhyZWUgYml0cyBvZiB0aGUgZmluYWwgYnl0ZSBvZiB0aGUgZXh0cmEgZmllbGQgYWZ0ZXIKKyAgICAgc3VidHJhY3RpbmcgdGhyZWUgKDAuLjcpLiAgVGhpcyBhbGxvd3MgdGhlIGxhc3QtYmxvY2sgYml0IG9mIHRoZSBzdG9yZWQKKyAgICAgYmxvY2sgaGVhZGVyIHRvIGJlIHVwZGF0ZWQgd2hlbiBhIG5ldyBzdG9yZWQgYmxvY2sgaXMgYWRkZWQsIGZvciB0aGUgY2FzZQorICAgICB3aGVuIHRoZSBmaXJzdCBzdG9yZWQgYmxvY2sgYW5kIHRoZSBsYXN0IHN0b3JlZCBibG9jayBhcmUgdGhlIHNhbWUuICAoV2hlbgorICAgICB0aGV5IGFyZSBkaWZmZXJlbnQsIHRoZSBudW1iZXJzIG9mIGJpdHMgYmFjayBpcyBrbm93biB0byBiZSBlaWdodC4pICBUaGlzCisgICAgIGFsc28gYWxsb3dzIGZvciBuZXcgY29tcHJlc3NlZCBkYXRhIHRvIGJlIGFwcGVuZGVkIHRvIHRoZSBvbGQgY29tcHJlc3NlZAorICAgICBkYXRhIGluIHRoZSBjb21wcmVzcyBvcGVyYXRpb24sIG92ZXJ3cml0aW5nIHRoZSBwcmV2aW91cyBmaXJzdCBzdG9yZWQKKyAgICAgYmxvY2ssIG9yIGZvciB0aGUgY29tcHJlc3NlZCBkYXRhIHRvIGJlIHRlcm1pbmF0ZWQgYW5kIGEgdmFsaWQgZ3ppcCBmaWxlCisgICAgIHJlY29uc3RydWN0ZWQgb24gdGhlIG9mZiBjaGFuY2UgdGhhdCBhIGNvbXByZXNzaW9uIG9wZXJhdGlvbiB3YXMKKyAgICAgaW50ZXJydXB0ZWQgYW5kIHRoZSBkYXRhIHRvIGNvbXByZXNzIGluIHRoZSBmb28uYWRkIGZpbGUgd2FzIGRlbGV0ZWQuCisgICAtIFRoZSBvcGVyYXRpb24gaW4gcHJvY2Vzcy4gIFRoaXMgaXMgdGhlIG5leHQgdHdvIGJpdHMgaW4gdGhlIGxhc3QgYnl0ZSAodGhlCisgICAgIGJpdHMgdW5kZXIgdGhlIG1hc2sgMHgxOCkuICBUaGUgYXJlIGludGVycHJldGVkIGFzIDA6IG5vdGhpbmcgaW4gcHJvY2VzcywKKyAgICAgMTogYXBwZW5kIGluIHByb2Nlc3MsIDI6IGNvbXByZXNzIGluIHByb2Nlc3MsIDM6IHJlcGxhY2UgaW4gcHJvY2Vzcy4KKyAgIC0gVGhlIHRvcCB0aHJlZSBiaXRzIG9mIHRoZSBsYXN0IGJ5dGUgaW4gdGhlIGV4dHJhIGZpZWxkIGFyZSByZXNlcnZlZCBhbmQKKyAgICAgYXJlIGN1cnJlbnRseSBzZXQgdG8gemVyby4KKworICAgTWFpbiBwcm9jZWR1cmU6CisgICAtIEV4Y2x1c2l2ZWx5IGNyZWF0ZSB0aGUgZm9vLmxvY2sgZmlsZSB1c2luZyB0aGUgT19DUkVBVCBhbmQgT19FWENMIG1vZGVzIG9mCisgICAgIHRoZSBzeXN0ZW0gb3BlbigpIGNhbGwuICBJZiB0aGUgbW9kaWZ5IHRpbWUgb2YgYW4gZXhpc3RpbmcgbG9jayBmaWxlIGlzCisgICAgIG1vcmUgdGhhbiBQQVRJRU5DRSBzZWNvbmRzIG9sZCwgdGhlbiB0aGUgbG9jayBmaWxlIGlzIGRlbGV0ZWQgYW5kIHRoZQorICAgICBleGNsdXNpdmUgY3JlYXRlIGlzIHJldHJpZWQuCisgICAtIExvYWQgdGhlIGV4dHJhIGZpZWxkIGZyb20gdGhlIGZvby5neiBmaWxlLCBhbmQgc2VlIGlmIGFuIG9wZXJhdGlvbiB3YXMgaW4KKyAgICAgcHJvZ3Jlc3MgYnV0IG5vdCBjb21wbGV0ZWQuICBJZiBzbywgYXBwbHkgdGhlIHJlY292ZXJ5IHByb2NlZHVyZSBiZWxvdy4KKyAgIC0gUGVyZm9ybSB0aGUgYXBwZW5kIHByb2NlZHVyZSB3aXRoIHRoZSBwcm92aWRlZCBkYXRhLgorICAgLSBJZiB0aGUgdW5jb21wcmVzc2VkIGRhdGEgaW4gdGhlIGZvby5neiBmaWxlIGlzIDFNQiBvciBtb3JlLCBhcHBseSB0aGUKKyAgICAgY29tcHJlc3MgcHJvY2VkdXJlLgorICAgLSBEZWxldGUgdGhlIGZvby5sb2NrIGZpbGUuCisKKyAgIEFwcGVuZCBwcm9jZWR1cmU6CisgICAtIFB1dCB3aGF0IHRvIGFwcGVuZCBpbiB0aGUgZm9vLmFkZCBmaWxlIHNvIHRoYXQgdGhlIG9wZXJhdGlvbiBjYW4gYmUKKyAgICAgcmVzdGFydGVkIGlmIHRoaXMgcHJvY2VkdXJlIGlzIGludGVycnVwdGVkLgorICAgLSBNYXJrIHRoZSBmb28uZ3ogZXh0cmEgZmllbGQgd2l0aCB0aGUgYXBwZW5kIG9wZXJhdGlvbiBpbiBwcm9ncmVzcy4KKyAgICsgUmVzdG9yZSB0aGUgb3JpZ2luYWwgbGFzdC1ibG9jayBiaXQgYW5kIHN0b3JlZCBibG9jayBsZW5ndGggb2YgdGhlIGxhc3QKKyAgICAgc3RvcmVkIGJsb2NrIGZyb20gdGhlIGluZm9ybWF0aW9uIGluIHRoZSBleHRyYSBmaWVsZCwgaW4gY2FzZSBhIHByZXZpb3VzCisgICAgIGFwcGVuZCBvcGVyYXRpb24gd2FzIGludGVycnVwdGVkLgorICAgLSBBcHBlbmQgdGhlIHByb3ZpZGVkIGRhdGEgdG8gdGhlIGxhc3Qgc3RvcmVkIGJsb2NrLCBjcmVhdGluZyBuZXcgc3RvcmVkCisgICAgIGJsb2NrcyBhcyBuZWVkZWQgYW5kIHVwZGF0aW5nIHRoZSBzdG9yZWQgYmxvY2tzIGxhc3QtYmxvY2sgYml0cyBhbmQKKyAgICAgbGVuZ3Rocy4KKyAgIC0gVXBkYXRlIHRoZSBjcmMgYW5kIGxlbmd0aCB3aXRoIHRoZSBuZXcgZGF0YSwgYW5kIHdyaXRlIHRoZSBnemlwIHRyYWlsZXIuCisgICAtIFdyaXRlIG92ZXIgdGhlIGV4dHJhIGZpZWxkICh3aXRoIGEgc2luZ2xlIHdyaXRlIG9wZXJhdGlvbikgd2l0aCB0aGUgbmV3CisgICAgIHBvaW50ZXJzLCBsZW5ndGhzLCBhbmQgY3JjJ3MsIGFuZCBtYXJrIHRoZSBnemlwIGZpbGUgYXMgbm90IGluIHByb2Nlc3MuCisgICAgIFRob3VnaCB0aGVyZSBpcyBzdGlsbCBhIGZvby5hZGQgZmlsZSwgaXQgd2lsbCBiZSBpZ25vcmVkIHNpbmNlIG5vdGhpbmcKKyAgICAgaXMgaW4gcHJvY2Vzcy4gIElmIGEgZm9vLmFkZCBmaWxlIGlzIGxlZnRvdmVyIGZyb20gYSBwcmV2aW91c2x5CisgICAgIGNvbXBsZXRlZCBvcGVyYXRpb24sIGl0IGlzIHRydW5jYXRlZCB3aGVuIHdyaXRpbmcgbmV3IGRhdGEgdG8gaXQuCisgICAtIERlbGV0ZSB0aGUgZm9vLmFkZCBmaWxlLgorCisgICBDb21wcmVzcyBhbmQgcmVwbGFjZSBwcm9jZWR1cmVzOgorICAgLSBSZWFkIGFsbCBvZiB0aGUgdW5jb21wcmVzc2VkIGRhdGEgaW4gdGhlIHN0b3JlZCBibG9ja3MgaW4gZm9vLmd6IGFuZCB3cml0ZQorICAgICBpdCB0byBmb28uYWRkLiAgQWxzbyB3cml0ZSBmb28udGVtcCB3aXRoIHRoZSBsYXN0IDMySyBvZiB0aGF0IGRhdGEgdG8KKyAgICAgcHJvdmlkZSBhIGRpY3Rpb25hcnkgZm9yIHRoZSBuZXh0IGludm9jYXRpb24gb2YgdGhpcyBwcm9jZWR1cmUuCisgICAtIFJld3JpdGUgdGhlIGV4dHJhIGZpZWxkIG1hcmtpbmcgZm9vLmd6IHdpdGggYSBjb21wcmVzc2lvbiBpbiBwcm9jZXNzLgorICAgKiBJZiB0aGVyZSBpcyBubyBkYXRhIHByb3ZpZGVkIHRvIGNvbXByZXNzIChkdWUgdG8gYSBtaXNzaW5nIGZvby5hZGQgZmlsZQorICAgICB3aGVuIHJlY292ZXJpbmcpLCByZWNvbnN0cnVjdCBhbmQgdHJ1bmNhdGUgdGhlIGZvby5neiBmaWxlIHRvIGNvbnRhaW4KKyAgICAgb25seSB0aGUgcHJldmlvdXMgY29tcHJlc3NlZCBkYXRhIGFuZCBwcm9jZWVkIHRvIHRoZSBzdGVwIGFmdGVyIHRoZSBuZXh0CisgICAgIG9uZS4gIE90aGVyd2lzZSAuLi4KKyAgIC0gQ29tcHJlc3MgdGhlIGRhdGEgd2l0aCB0aGUgZGljdGlvbmFyeSBpbiBmb28uZGljdCwgYW5kIHdyaXRlIHRvIHRoZQorICAgICBmb28uZ3ogZmlsZSBzdGFydGluZyBhdCB0aGUgYml0IGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgbGFzdCBwcmV2aW91c2x5CisgICAgIGNvbXByZXNzZWQgYmxvY2suICBJZiB0aGVyZSBpcyBubyBmb28uZGljdCwgcHJvY2VlZCBhbnl3YXkgd2l0aCB0aGUKKyAgICAgY29tcHJlc3Npb24gYXQgc2xpZ2h0bHkgcmVkdWNlZCBlZmZpY2llbmN5LiAgKEZvciB0aGUgZm9vLmRpY3QgZmlsZSB0byBiZQorICAgICBtaXNzaW5nIHJlcXVpcmVzIHNvbWUgZXh0ZXJuYWwgZmFpbHVyZSBiZXlvbmQgc2ltcGx5IHRoZSBpbnRlcnJ1cHRpb24gb2YKKyAgICAgYSBjb21wcmVzcyBvcGVyYXRpb24uKSAgRHVyaW5nIHRoaXMgcHJvY2VzcywgdGhlIGZvby5sb2NrIGZpbGUgaXMKKyAgICAgcGVyaW9kaWNhbGx5IHRvdWNoZWQgdG8gYXNzdXJlIHRoYXQgdGhhdCBmaWxlIGlzIG5vdCBjb25zaWRlcmVkIHN0YWxlIGJ5CisgICAgIGFub3RoZXIgcHJvY2VzcyBiZWZvcmUgd2UncmUgZG9uZS4gIFRoZSBkZWZsYXRpb24gaXMgdGVybWluYXRlZCB3aXRoIGEKKyAgICAgbm9uLWxhc3QgZW1wdHkgc3RhdGljIGJsb2NrICgxMCBiaXRzIGxvbmcpLCB0aGF0IGlzIHRoZW4gbG9jYXRlZCBhbmQKKyAgICAgd3JpdHRlbiBvdmVyIGJ5IGEgbGFzdC1iaXQtc2V0IGVtcHR5IHN0b3JlZCBibG9jay4KKyAgIC0gQXBwZW5kIHRoZSBjcmMgYW5kIGxlbmd0aCBvZiB0aGUgZGF0YSBpbiB0aGUgZ3ppcCBmaWxlIChwcmV2aW91c2x5CisgICAgIGNhbGN1bGF0ZWQgZHVyaW5nIHRoZSBhcHBlbmQgb3BlcmF0aW9ucykuCisgICAtIFdyaXRlIG92ZXIgdGhlIGV4dHJhIGZpZWxkIHdpdGggdGhlIHVwZGF0ZWQgc3RvcmVkIGJsb2NrIG9mZnNldHMsIGJpdHMKKyAgICAgYmFjaywgY3JjJ3MsIGFuZCBsZW5ndGhzLCBhbmQgbWFyayBmb28uZ3ogYXMgaW4gcHJvY2VzcyBmb3IgYSByZXBsYWNlbWVudAorICAgICBvZiB0aGUgZGljdGlvbmFyeS4KKyAgIEAgRGVsZXRlIHRoZSBmb28uYWRkIGZpbGUuCisgICAtIFJlcGxhY2UgZm9vLmRpY3Qgd2l0aCBmb28udGVtcC4KKyAgIC0gV3JpdGUgb3ZlciB0aGUgZXh0cmEgZmllbGQsIG1hcmtpbmcgZm9vLmd6IGFzIGNvbXBsZXRlLgorCisgICBSZWNvdmVyeSBwcm9jZWR1cmU6CisgICAtIElmIG5vdCBhIHJlcGxhY2UgcmVjb3ZlcnksIHJlYWQgaW4gdGhlIGZvby5hZGQgZmlsZSwgYW5kIHByb3ZpZGUgdGhhdCBkYXRhCisgICAgIHRvIHRoZSBhcHByb3ByaWF0ZSByZWNvdmVyeSBiZWxvdy4gIElmIHRoZXJlIGlzIG5vIGZvby5hZGQgZmlsZSwgcHJvdmlkZQorICAgICBhIHplcm8gZGF0YSBsZW5ndGggdG8gdGhlIHJlY292ZXJ5LiAgSW4gdGhhdCBjYXNlLCB0aGUgYXBwZW5kIHJlY292ZXJ5CisgICAgIHJlc3RvcmVzIHRoZSBmb28uZ3ogdG8gdGhlIHByZXZpb3VzIGNvbXByZXNzZWQgKyB1bmNvbXByZXNzZWQgZGF0YSBzdGF0ZS4KKyAgICAgRm9yIHRoZSB0aGUgY29tcHJlc3MgcmVjb3ZlcnksIGEgbWlzc2luZyBmb28uYWRkIGZpbGUgcmVzdWx0cyBpbiBmb28uZ3oKKyAgICAgYmVpbmcgcmVzdG9yZWQgdG8gdGhlIHByZXZpb3VzIGNvbXByZXNzZWQtb25seSBkYXRhIHN0YXRlLgorICAgLSBBcHBlbmQgcmVjb3Zlcnk6CisgICAgIC0gUGljayB1cCBhcHBlbmQgYXQgKyBzdGVwIGFib3ZlCisgICAtIENvbXByZXNzIHJlY292ZXJ5OgorICAgICAtIFBpY2sgdXAgY29tcHJlc3MgYXQgKiBzdGVwIGFib3ZlCisgICAtIFJlcGxhY2UgcmVjb3Zlcnk6CisgICAgIC0gUGljayB1cCBjb21wcmVzcyBhdCBAIHN0ZXAgYWJvdmUKKyAgIC0gTG9nIHRoZSByZXBhaXIgd2l0aCBhIGRhdGUgc3RhbXAgaW4gZm9vLnJlcGFpcnMKKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4gICAgICAvKiByZW5hbWUsIGZvcGVuLCBmcHJpbnRmLCBmY2xvc2UgKi8KKyNpbmNsdWRlIDxzdGRsaWIuaD4gICAgIC8qIG1hbGxvYywgZnJlZSAqLworI2luY2x1ZGUgPHN0cmluZy5oPiAgICAgLyogc3RybGVuLCBzdHJyY2hyLCBzdHJjcHksIHN0cm5jcHksIHN0cmNtcCAqLworI2luY2x1ZGUgPGZjbnRsLmg+ICAgICAgLyogb3BlbiAqLworI2luY2x1ZGUgPHVuaXN0ZC5oPiAgICAgLyogbHNlZWssIHJlYWQsIHdyaXRlLCBjbG9zZSwgdW5saW5rLCBzbGVlcCwgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZ0cnVuY2F0ZSwgZnN5bmMgKi8KKyNpbmNsdWRlIDxlcnJuby5oPiAgICAgIC8qIGVycm5vICovCisjaW5jbHVkZSA8dGltZS5oPiAgICAgICAvKiB0aW1lLCBjdGltZSAqLworI2luY2x1ZGUgPHN5cy9zdGF0Lmg+ICAgLyogc3RhdCAqLworI2luY2x1ZGUgPHN5cy90aW1lLmg+ICAgLyogdXRpbWVzICovCisjaW5jbHVkZSAiemxpYi5oIiAgICAgICAvKiBjcmMzMiAqLworCisjaW5jbHVkZSAiZ3psb2cuaCIgICAgICAvKiBoZWFkZXIgZm9yIGV4dGVybmFsIGFjY2VzcyAqLworCisjZGVmaW5lIGxvY2FsIHN0YXRpYwordHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyB1bG9uZzsKKworLyogTWFjcm8gZm9yIGRlYnVnZ2luZyB0byBkZXRlcm1pbmlzdGljYWxseSBmb3JjZSByZWNvdmVyeSBvcGVyYXRpb25zICovCisjaWZkZWYgR1pMT0dfREVCVUcKKyAgICAjaW5jbHVkZSA8c2V0am1wLmg+ICAgICAgICAgLyogbG9uZ2ptcCAqLworICAgIGptcF9idWYgZ3psb2dfanVtcDsgICAgICAgICAvKiB3aGVyZSB0byBnbyBiYWNrIHRvICovCisgICAgaW50IGd6bG9nX2JhaWwgPSAwOyAgICAgICAgIC8qIHdoaWNoIHBvaW50IHRvIGJhaWwgYXQgKDEuLjgpICovCisgICAgaW50IGd6bG9nX2NvdW50ID0gLTE7ICAgICAgIC8qIG51bWJlciBvZiB0aW1lcyB0aHJvdWdoIHRvIHdhaXQgKi8KKyMgICBkZWZpbmUgQkFJTChuKSBkbyB7IGlmIChuID09IGd6bG9nX2JhaWwgJiYgZ3psb2dfY291bnQtLSA9PSAwKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZ2ptcChnemxvZ19qdW1wLCBnemxvZ19iYWlsKTsgfSB3aGlsZSAoMCkKKyNlbHNlCisjICAgZGVmaW5lIEJBSUwobikKKyNlbmRpZgorCisvKiBob3cgb2xkIHRoZSBsb2NrIGZpbGUgY2FuIGJlIGluIHNlY29uZHMgYmVmb3JlIGNvbnNpZGVyaW5nIGl0IHN0YWxlICovCisjZGVmaW5lIFBBVElFTkNFIDMwMAorCisvKiBtYXhpbXVtIHN0b3JlZCBibG9jayBzaXplIGluIEtieXRlcyAtLSBtdXN0IGJlIGluIDEuLjYzICovCisjZGVmaW5lIE1BWF9TVE9SRSAxNgorCisvKiBudW1iZXIgb2Ygc3RvcmVkIEtieXRlcyB0byB0cmlnZ2VyIGNvbXByZXNzaW9uIChtdXN0IGJlID49IDMyIHRvIGFsbG93CisgICBkaWN0aW9uYXJ5IGNvbnN0cnVjdGlvbiwgYW5kIDw9IDIwNCAqIE1BWF9TVE9SRSwgaW4gb3JkZXIgZm9yID4+IDEwIHRvCisgICBkaXNjYXJkIHRoZSBzdG9yZWQgYmxvY2sgaGVhZGVycyBjb250cmlidXRpb24gb2YgZml2ZSBieXRlcyBlYWNoKSAqLworI2RlZmluZSBUUklHR0VSIDEwMjQKKworLyogc2l6ZSBvZiBhIGRlZmxhdGUgZGljdGlvbmFyeSAodGhpcyBjYW5ub3QgYmUgY2hhbmdlZCkgKi8KKyNkZWZpbmUgRElDVCAzMjc2OFUKKworLyogdmFsdWVzIGZvciB0aGUgb3BlcmF0aW9uICgyIGJpdHMpICovCisjZGVmaW5lIE5PX09QIDAKKyNkZWZpbmUgQVBQRU5EX09QIDEKKyNkZWZpbmUgQ09NUFJFU1NfT1AgMgorI2RlZmluZSBSRVBMQUNFX09QIDMKKworLyogbWFjcm9zIHRvIGV4dHJhY3QgbGl0dGxlLWVuZGlhbiBpbnRlZ2VycyBmcm9tIGFuIHVuc2lnbmVkIGJ5dGUgYnVmZmVyICovCisjZGVmaW5lIFBVTEwyKHApICgocClbMF0rKCh1aW50KSgocClbMV0pPDw4KSkKKyNkZWZpbmUgUFVMTDQocCkgKFBVTEwyKHApKygodWxvbmcpUFVMTDIocCsyKTw8MTYpKQorI2RlZmluZSBQVUxMOChwKSAoUFVMTDQocCkrKChvZmZfdClQVUxMNChwKzQpPDwzMikpCisKKy8qIG1hY3JvcyB0byBzdG9yZSBpbnRlZ2VycyBpbnRvIGEgYnl0ZSBidWZmZXIgaW4gbGl0dGxlLWVuZGlhbiBvcmRlciAqLworI2RlZmluZSBQVVQyKHAsYSkgZG8geyhwKVswXT1hOyhwKVsxXT0oYSk+Pjg7fSB3aGlsZSgwKQorI2RlZmluZSBQVVQ0KHAsYSkgZG8ge1BVVDIocCxhKTtQVVQyKHArMixhPj4xNik7fSB3aGlsZSgwKQorI2RlZmluZSBQVVQ4KHAsYSkgZG8ge1BVVDQocCxhKTtQVVQ0KHArNCxhPj4zMik7fSB3aGlsZSgwKQorCisvKiBpbnRlcm5hbCBzdHJ1Y3R1cmUgZm9yIGxvZyBpbmZvcm1hdGlvbiAqLworI2RlZmluZSBMT0dJRCAiXDEwNlwwMzVcMTcyIiAgICAvKiBzaG91bGQgYmUgdGhyZWUgbm9uLXplcm8gY2hhcmFjdGVycyAqLworc3RydWN0IGxvZyB7CisgICAgY2hhciBpZFs0XTsgICAgIC8qIGNvbnRhaW5zIExPR0lEIHRvIGRldGVjdCBpbmFkdmVydGVudCBvdmVyd3JpdGVzICovCisgICAgaW50IGZkOyAgICAgICAgIC8qIGZpbGUgZGVzY3JpcHRvciBmb3IgLmd6IGZpbGUsIG9wZW5lZCByZWFkL3dyaXRlICovCisgICAgY2hhciAqcGF0aDsgICAgIC8qIGFsbG9jYXRlZCBwYXRoLCBlLmcuICIvdmFyL2xvZy9mb28iIG9yICJmb28iICovCisgICAgY2hhciAqZW5kOyAgICAgIC8qIGVuZCBvZiBwYXRoLCBmb3IgYXBwZW5kaW5nIHN1ZmZpY2VzIHN1Y2ggYXMgIi5neiIgKi8KKyAgICBvZmZfdCBmaXJzdDsgICAgLyogb2Zmc2V0IG9mIGZpcnN0IHN0b3JlZCBibG9jayBmaXJzdCBsZW5ndGggYnl0ZSAqLworICAgIGludCBiYWNrOyAgICAgICAvKiBsb2NhdGlvbiBvZiBmaXJzdCBibG9jayBpZCBpbiBiaXRzIGJhY2sgZnJvbSBmaXJzdCAqLworICAgIHVpbnQgc3RvcmVkOyAgICAvKiBieXRlcyBjdXJyZW50bHkgaW4gbGFzdCBzdG9yZWQgYmxvY2sgKi8KKyAgICBvZmZfdCBsYXN0OyAgICAgLyogb2Zmc2V0IG9mIGxhc3Qgc3RvcmVkIGJsb2NrIGZpcnN0IGxlbmd0aCBieXRlICovCisgICAgdWxvbmcgY2NyYzsgICAgIC8qIGNyYyBvZiBjb21wcmVzc2VkIGRhdGEgKi8KKyAgICB1bG9uZyBjbGVuOyAgICAgLyogbGVuZ3RoIChtb2R1bG8gMl4zMikgb2YgY29tcHJlc3NlZCBkYXRhICovCisgICAgdWxvbmcgdGNyYzsgICAgIC8qIGNyYyBvZiB0b3RhbCBkYXRhICovCisgICAgdWxvbmcgdGxlbjsgICAgIC8qIGxlbmd0aCAobW9kdWxvIDJeMzIpIG9mIHRvdGFsIGRhdGEgKi8KKyAgICB0aW1lX3QgbG9jazsgICAgLyogbGFzdCBtb2RpZnkgdGltZSBvZiBvdXIgbG9jayBmaWxlICovCit9OworCisvKiBnemlwIGhlYWRlciBmb3IgZ3psb2cgKi8KK2xvY2FsIHVuc2lnbmVkIGNoYXIgbG9nX2d6aGVhZFtdID0geworICAgIDB4MWYsIDB4OGIsICAgICAgICAgICAgICAgICAvKiBtYWdpYyBnemlwIGlkICovCisgICAgOCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbXByZXNzaW9uIG1ldGhvZCBpcyBkZWZsYXRlICovCisgICAgNCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRoZXJlIGlzIGFuIGV4dHJhIGZpZWxkIChubyBmaWxlIG5hbWUpICovCisgICAgMCwgMCwgMCwgMCwgICAgICAgICAgICAgICAgIC8qIG5vIG1vZGlmaWNhdGlvbiB0aW1lIHByb3ZpZGVkICovCisgICAgMCwgMHhmZiwgICAgICAgICAgICAgICAgICAgIC8qIG5vIGV4dHJhIGZsYWdzLCBubyBPUyBzcGVjaWZpZWQgKi8KKyAgICAzOSwgMCwgJ2EnLCAncCcsIDM1LCAwICAgICAgLyogZXh0cmEgZmllbGQgd2l0aCAiYXAiIHN1YmZpZWxkICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDM1IGlzIEVYVFJBLCAzOSBpcyBFWFRSQSArIDQgKi8KK307CisKKyNkZWZpbmUgSEVBRCBzaXplb2YobG9nX2d6aGVhZCkgICAgIC8qIHNob3VsZCBiZSAxNiAqLworCisvKiBpbml0aWFsIGd6aXAgZXh0cmEgZmllbGQgY29udGVudCAoNTIgPT0gSEVBRCArIEVYVFJBICsgMSkgKi8KK2xvY2FsIHVuc2lnbmVkIGNoYXIgbG9nX2d6ZXh0W10gPSB7CisgICAgNTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsICAgIC8qIG9mZnNldCBvZiBmaXJzdCBzdG9yZWQgYmxvY2sgbGVuZ3RoICovCisgICAgNTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsICAgIC8qIG9mZnNldCBvZiBsYXN0IHN0b3JlZCBibG9jayBsZW5ndGggKi8KKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAgICAgLyogY29tcHJlc3NlZCBkYXRhIGNyYyBhbmQgbGVuZ3RoICovCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgICAgIC8qIHRvdGFsIGRhdGEgY3JjIGFuZCBsZW5ndGggKi8KKyAgICAwLCAwLCAgICAgICAgICAgICAgICAgICAgICAgLyogZmluYWwgc3RvcmVkIGJsb2NrIGRhdGEgbGVuZ3RoICovCisgICAgNSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9wIGlzIE5PX09QLCBsYXN0IGJpdCA4IGJpdHMgYmFjayAqLworfTsKKworI2RlZmluZSBFWFRSQSBzaXplb2YobG9nX2d6ZXh0KSAgICAgLyogc2hvdWxkIGJlIDM1ICovCisKKy8qIGluaXRpYWwgZ3ppcCBkYXRhIGFuZCB0cmFpbGVyICovCitsb2NhbCB1bnNpZ25lZCBjaGFyIGxvZ19nemJvZHlbXSA9IHsKKyAgICAxLCAwLCAwLCAweGZmLCAweGZmLCAgICAgICAgLyogZW1wdHkgc3RvcmVkIGJsb2NrIChsYXN0KSAqLworICAgIDAsIDAsIDAsIDAsICAgICAgICAgICAgICAgICAvKiBjcmMgKi8KKyAgICAwLCAwLCAwLCAwICAgICAgICAgICAgICAgICAgLyogdW5jb21wcmVzc2VkIGxlbmd0aCAqLworfTsKKworI2RlZmluZSBCT0RZIHNpemVvZihsb2dfZ3pib2R5KQorCisvKiBFeGNsdXNpdmVseSBjcmVhdGUgZm9vLmxvY2sgaW4gb3JkZXIgdG8gbmVnb3RpYXRlIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gdGhlCisgICBmb28uKiBmaWxlcy4gIElmIHRoZSBtb2RpZnkgdGltZSBvZiBhbiBleGlzdGluZyBsb2NrIGZpbGUgaXMgZ3JlYXRlciB0aGFuCisgICBQQVRJRU5DRSBzZWNvbmRzIGluIHRoZSBwYXN0LCB0aGVuIGNvbnNpZGVyIHRoZSBsb2NrIGZpbGUgdG8gaGF2ZSBiZWVuCisgICBhYmFuZG9uZWQsIGRlbGV0ZSBpdCwgYW5kIHRyeSB0aGUgZXhjbHVzaXZlIGNyZWF0ZSBhZ2Fpbi4gIFNhdmUgdGhlIGxvY2sKKyAgIGZpbGUgbW9kaWZ5IHRpbWUgZm9yIHZlcmlmaWNhdGlvbiBvZiBvd25lcnNoaXAuICBSZXR1cm4gMCBvbiBzdWNjZXNzLCBvciAtMQorICAgb24gZmFpbHVyZSwgdXN1YWxseSBkdWUgdG8gYW4gYWNjZXNzIHJlc3RyaWN0aW9uIG9yIGludmFsaWQgcGF0aC4gIE5vdGUgdGhhdAorICAgaWYgc3RhdCgpIG9yIHVubGluaygpIGZhaWxzLCBpdCBtYXkgYmUgZHVlIHRvIGFub3RoZXIgcHJvY2VzcyBub3RpY2luZyB0aGUKKyAgIGFiYW5kb25lZCBsb2NrIGZpbGUgYSBzbWlkZ2Ugc29vbmVyIGFuZCBkZWxldGluZyBpdCwgc28gdGhvc2UgYXJlIG5vdAorICAgZmxhZ2dlZCBhcyBhbiBlcnJvci4gKi8KK2xvY2FsIGludCBsb2dfbG9jayhzdHJ1Y3QgbG9nICpsb2cpCit7CisgICAgaW50IGZkOworICAgIHN0cnVjdCBzdGF0IHN0OworCisgICAgc3RyY3B5KGxvZy0+ZW5kLCAiLmxvY2siKTsKKyAgICB3aGlsZSAoKGZkID0gb3Blbihsb2ctPnBhdGgsIE9fQ1JFQVQgfCBPX0VYQ0wsIDA2NDQpKSA8IDApIHsKKyAgICAgICAgaWYgKGVycm5vICE9IEVFWElTVCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKHN0YXQobG9nLT5wYXRoLCAmc3QpID09IDAgJiYgdGltZShOVUxMKSAtIHN0LnN0X210aW1lID4gUEFUSUVOQ0UpIHsKKyAgICAgICAgICAgIHVubGluayhsb2ctPnBhdGgpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgc2xlZXAoMik7ICAgICAgIC8qIHJlbGlucXVpc2ggdGhlIENQVSBmb3IgdHdvIHNlY29uZHMgd2hpbGUgd2FpdGluZyAqLworICAgIH0KKyAgICBjbG9zZShmZCk7CisgICAgaWYgKHN0YXQobG9nLT5wYXRoLCAmc3QpID09IDApCisgICAgICAgIGxvZy0+bG9jayA9IHN0LnN0X210aW1lOworICAgIHJldHVybiAwOworfQorCisvKiBVcGRhdGUgdGhlIG1vZGlmeSB0aW1lIG9mIHRoZSBsb2NrIGZpbGUgdG8gbm93LCBpbiBvcmRlciB0byBwcmV2ZW50IGFub3RoZXIKKyAgIHRhc2sgZnJvbSB0aGlua2luZyB0aGF0IHRoZSBsb2NrIGlzIHN0YWxlLiAgU2F2ZSB0aGUgbG9jayBmaWxlIG1vZGlmeSB0aW1lCisgICBmb3IgdmVyaWZpY2F0aW9uIG9mIG93bmVyc2hpcC4gKi8KK2xvY2FsIHZvaWQgbG9nX3RvdWNoKHN0cnVjdCBsb2cgKmxvZykKK3sKKyAgICBzdHJ1Y3Qgc3RhdCBzdDsKKworICAgIHN0cmNweShsb2ctPmVuZCwgIi5sb2NrIik7CisgICAgdXRpbWVzKGxvZy0+cGF0aCwgTlVMTCk7CisgICAgaWYgKHN0YXQobG9nLT5wYXRoLCAmc3QpID09IDApCisgICAgICAgIGxvZy0+bG9jayA9IHN0LnN0X210aW1lOworfQorCisvKiBDaGVjayB0aGUgbG9nIGZpbGUgbW9kaWZ5IHRpbWUgYWdhaW5zdCB3aGF0IGlzIGV4cGVjdGVkLiAgUmV0dXJuIHRydWUgaWYKKyAgIHRoaXMgaXMgbm90IG91ciBsb2NrLiAgSWYgaXQgaXMgb3VyIGxvY2ssIHRvdWNoIGl0IHRvIGtlZXAgaXQuICovCitsb2NhbCBpbnQgbG9nX2NoZWNrKHN0cnVjdCBsb2cgKmxvZykKK3sKKyAgICBzdHJ1Y3Qgc3RhdCBzdDsKKworICAgIHN0cmNweShsb2ctPmVuZCwgIi5sb2NrIik7CisgICAgaWYgKHN0YXQobG9nLT5wYXRoLCAmc3QpIHx8IHN0LnN0X210aW1lICE9IGxvZy0+bG9jaykKKyAgICAgICAgcmV0dXJuIDE7CisgICAgbG9nX3RvdWNoKGxvZyk7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qIFVubG9jayBhIHByZXZpb3VzbHkgYWNxdWlyZWQgbG9jaywgYnV0IG9ubHkgaWYgaXQncyBvdXJzLiAqLworbG9jYWwgdm9pZCBsb2dfdW5sb2NrKHN0cnVjdCBsb2cgKmxvZykKK3sKKyAgICBpZiAobG9nX2NoZWNrKGxvZykpCisgICAgICAgIHJldHVybjsKKyAgICBzdHJjcHkobG9nLT5lbmQsICIubG9jayIpOworICAgIHVubGluayhsb2ctPnBhdGgpOworICAgIGxvZy0+bG9jayA9IDA7Cit9CisKKy8qIENoZWNrIHRoZSBnemlwIGhlYWRlciBhbmQgcmVhZCBpbiB0aGUgZXh0cmEgZmllbGQsIGZpbGxpbmcgaW4gdGhlIHZhbHVlcyBpbgorICAgdGhlIGxvZyBzdHJ1Y3R1cmUuICBSZXR1cm4gb3Agb24gc3VjY2VzcyBvciAtMSBpZiB0aGUgZ3ppcCBoZWFkZXIgd2FzIG5vdCBhcworICAgZXhwZWN0ZWQuICBvcCBpcyB0aGUgY3VycmVudCBvcGVyYXRpb24gaW4gcHJvZ3Jlc3MgbGFzdCB3cml0dGVuIHRvIHRoZSBleHRyYQorICAgZmllbGQuICBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgZ3ppcCBmaWxlIGhhcyBhbHJlYWR5IGJlZW4gb3BlbmVkLCB3aXRoIHRoZQorICAgZmlsZSBkZXNjcmlwdG9yIGxvZy0+ZmQuICovCitsb2NhbCBpbnQgbG9nX2hlYWQoc3RydWN0IGxvZyAqbG9nKQoreworICAgIGludCBvcDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZltIRUFEICsgRVhUUkFdOworCisgICAgaWYgKGxzZWVrKGxvZy0+ZmQsIDAsIFNFRUtfU0VUKSA8IDAgfHwKKyAgICAgICAgcmVhZChsb2ctPmZkLCBidWYsIEhFQUQgKyBFWFRSQSkgIT0gSEVBRCArIEVYVFJBIHx8CisgICAgICAgIG1lbWNtcChidWYsIGxvZ19nemhlYWQsIEhFQUQpKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgbG9nLT5maXJzdCA9IFBVTEw4KGJ1ZiArIEhFQUQpOworICAgIGxvZy0+bGFzdCA9IFBVTEw4KGJ1ZiArIEhFQUQgKyA4KTsKKyAgICBsb2ctPmNjcmMgPSBQVUxMNChidWYgKyBIRUFEICsgMTYpOworICAgIGxvZy0+Y2xlbiA9IFBVTEw0KGJ1ZiArIEhFQUQgKyAyMCk7CisgICAgbG9nLT50Y3JjID0gUFVMTDQoYnVmICsgSEVBRCArIDI0KTsKKyAgICBsb2ctPnRsZW4gPSBQVUxMNChidWYgKyBIRUFEICsgMjgpOworICAgIGxvZy0+c3RvcmVkID0gUFVMTDIoYnVmICsgSEVBRCArIDMyKTsKKyAgICBsb2ctPmJhY2sgPSAzICsgKGJ1ZltIRUFEICsgMzRdICYgNyk7CisgICAgb3AgPSAoYnVmW0hFQUQgKyAzNF0gPj4gMykgJiAzOworICAgIHJldHVybiBvcDsKK30KKworLyogV3JpdGUgb3ZlciB0aGUgZXh0cmEgZmllbGQgY29udGVudHMsIG1hcmtpbmcgdGhlIG9wZXJhdGlvbiBhcyBvcC4gIFVzZSBmc3luYworICAgdG8gYXNzdXJlIHRoYXQgdGhlIGRldmljZSBpcyB3cml0dGVuIHRvLCBhbmQgaW4gdGhlIHJlcXVlc3RlZCBvcmRlci4gIFRoaXMKKyAgIG9wZXJhdGlvbiwgYW5kIG9ubHkgdGhpcyBvcGVyYXRpb24sIGlzIGFzc3VtZWQgdG8gYmUgYXRvbWljIGluIG9yZGVyIHRvCisgICBhc3N1cmUgdGhhdCB0aGUgbG9nIGlzIHJlY292ZXJhYmxlIGluIHRoZSBldmVudCBvZiBhbiBpbnRlcnJ1cHRpb24gYXQgYW55CisgICBwb2ludCBpbiB0aGUgcHJvY2Vzcy4gIFJldHVybiAtMSBpZiB0aGUgd3JpdGUgdG8gZm9vLmd6IGZhaWxlZC4gKi8KK2xvY2FsIGludCBsb2dfbWFyayhzdHJ1Y3QgbG9nICpsb2csIGludCBvcCkKK3sKKyAgICBpbnQgcmV0OworICAgIHVuc2lnbmVkIGNoYXIgZXh0W0VYVFJBXTsKKworICAgIFBVVDgoZXh0LCBsb2ctPmZpcnN0KTsKKyAgICBQVVQ4KGV4dCArIDgsIGxvZy0+bGFzdCk7CisgICAgUFVUNChleHQgKyAxNiwgbG9nLT5jY3JjKTsKKyAgICBQVVQ0KGV4dCArIDIwLCBsb2ctPmNsZW4pOworICAgIFBVVDQoZXh0ICsgMjQsIGxvZy0+dGNyYyk7CisgICAgUFVUNChleHQgKyAyOCwgbG9nLT50bGVuKTsKKyAgICBQVVQyKGV4dCArIDMyLCBsb2ctPnN0b3JlZCk7CisgICAgZXh0WzM0XSA9IGxvZy0+YmFjayAtIDMgKyAob3AgPDwgMyk7CisgICAgZnN5bmMobG9nLT5mZCk7CisgICAgcmV0ID0gbHNlZWsobG9nLT5mZCwgSEVBRCwgU0VFS19TRVQpIDwgMCB8fAorICAgICAgICAgIHdyaXRlKGxvZy0+ZmQsIGV4dCwgRVhUUkEpICE9IEVYVFJBID8gLTEgOiAwOworICAgIGZzeW5jKGxvZy0+ZmQpOworICAgIHJldHVybiByZXQ7Cit9CisKKy8qIFJld3JpdGUgdGhlIGxhc3QgYmxvY2sgaGVhZGVyIGJpdHMgYW5kIHN1YnNlcXVlbnQgemVybyBiaXRzIHRvIGdldCB0byBhIGJ5dGUKKyAgIGJvdW5kYXJ5LCBzZXR0aW5nIHRoZSBsYXN0IGJsb2NrIGJpdCBpZiBsYXN0IGlzIHRydWUsIGFuZCB0aGVuIHdyaXRlIHRoZQorICAgcmVtYWluZGVyIG9mIHRoZSBzdG9yZWQgYmxvY2sgaGVhZGVyIChsZW5ndGggYW5kIG9uZSdzIGNvbXBsZW1lbnQpLiAgTGVhdmUKKyAgIHRoZSBmaWxlIHBvaW50ZXIgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgbGFzdCBzdG9yZWQgYmxvY2sgZGF0YS4gIFJldHVybiAtMSBpZgorICAgdGhlcmUgaXMgYSByZWFkIG9yIHdyaXRlIGZhaWx1cmUgb24gdGhlIGZvby5neiBmaWxlICovCitsb2NhbCBpbnQgbG9nX2xhc3Qoc3RydWN0IGxvZyAqbG9nLCBpbnQgbGFzdCkKK3sKKyAgICBpbnQgYmFjaywgbGVuLCBtYXNrOworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzZdOworCisgICAgLyogZGV0ZXJtaW5lIHRoZSBsb2NhdGlvbnMgb2YgdGhlIGJ5dGVzIGFuZCBiaXRzIHRvIG1vZGlmeSAqLworICAgIGJhY2sgPSBsb2ctPmxhc3QgPT0gbG9nLT5maXJzdCA/IGxvZy0+YmFjayA6IDg7CisgICAgbGVuID0gYmFjayA+IDggPyAyIDogMTsgICAgICAgICAgICAgICAgIC8qIGJ5dGVzIGJhY2sgZnJvbSBsb2ctPmxhc3QgKi8KKyAgICBtYXNrID0gMHg4MCA+PiAoKGJhY2sgLSAxKSAmIDcpOyAgICAgICAgLyogbWFzayBmb3IgYmxvY2sgbGFzdC1iaXQgKi8KKworICAgIC8qIGdldCB0aGUgYnl0ZSB0byBtb2RpZnkgKG9uZSBvciB0d28gYmFjaykgaW50byBidWZbMF0gLS0gZG9uJ3QgbmVlZCB0bworICAgICAgIHJlYWQgdGhlIGJ5dGUgaWYgdGhlIGxhc3QtYml0IGlzIGVpZ2h0IGJpdHMgYmFjaywgc2luY2UgaW4gdGhhdCBjYXNlCisgICAgICAgdGhlIGVudGlyZSBieXRlIHdpbGwgYmUgbW9kaWZpZWQgKi8KKyAgICBidWZbMF0gPSAwOworICAgIGlmIChiYWNrICE9IDggJiYgKGxzZWVrKGxvZy0+ZmQsIGxvZy0+bGFzdCAtIGxlbiwgU0VFS19TRVQpIDwgMCB8fAorICAgICAgICAgICAgICAgICAgICAgIHJlYWQobG9nLT5mZCwgYnVmLCAxKSAhPSAxKSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgLyogY2hhbmdlIHRoZSBsYXN0LWJpdCBvZiB0aGUgbGFzdCBzdG9yZWQgYmxvY2sgYXMgcmVxdWVzdGVkIC0tIG5vdGUKKyAgICAgICB0aGF0IGFsbCBiaXRzIGFib3ZlIHRoZSBsYXN0LWJpdCBhcmUgc2V0IHRvIHplcm8sIHBlciB0aGUgdHlwZSBiaXRzCisgICAgICAgb2YgYSBzdG9yZWQgYmxvY2sgYmVpbmcgMDAgYW5kIHBlciB0aGUgY29udmVudGlvbiB0aGF0IHRoZSBiaXRzIHRvCisgICAgICAgYnJpbmcgdGhlIHN0cmVhbSB0byBhIGJ5dGUgYm91bmRhcnkgYXJlIGFsc28gemVyb3MgKi8KKyAgICBidWZbMV0gPSAwOworICAgIGJ1ZlsyIC0gbGVuXSA9ICgqYnVmICYgKG1hc2sgLSAxKSkgKyAobGFzdCA/IG1hc2sgOiAwKTsKKworICAgIC8qIHdyaXRlIHRoZSBtb2RpZmllZCBzdG9yZWQgYmxvY2sgaGVhZGVyIGFuZCBsZW5ndGhzLCBtb3ZlIHRoZSBmaWxlCisgICAgICAgcG9pbnRlciB0byBhZnRlciB0aGUgbGFzdCBzdG9yZWQgYmxvY2sgZGF0YSAqLworICAgIFBVVDIoYnVmICsgMiwgbG9nLT5zdG9yZWQpOworICAgIFBVVDIoYnVmICsgNCwgbG9nLT5zdG9yZWQgXiAweGZmZmYpOworICAgIHJldHVybiBsc2Vlayhsb2ctPmZkLCBsb2ctPmxhc3QgLSBsZW4sIFNFRUtfU0VUKSA8IDAgfHwKKyAgICAgICAgICAgd3JpdGUobG9nLT5mZCwgYnVmICsgMiAtIGxlbiwgbGVuICsgNCkgIT0gbGVuICsgNCB8fAorICAgICAgICAgICBsc2Vlayhsb2ctPmZkLCBsb2ctPnN0b3JlZCwgU0VFS19DVVIpIDwgMCA/IC0xIDogMDsKK30KKworLyogQXBwZW5kIGxlbiBieXRlcyBmcm9tIGRhdGEgdG8gdGhlIGxvY2tlZCBhbmQgb3BlbiBsb2cgZmlsZS4gIGxlbiBtYXkgYmUgemVybworICAgaWYgcmVjb3ZlcmluZyBhbmQgbm8gLmFkZCBmaWxlIHdhcyBmb3VuZC4gIEluIHRoYXQgY2FzZSwgdGhlIHByZXZpb3VzIHN0YXRlCisgICBvZiB0aGUgZm9vLmd6IGZpbGUgaXMgcmVzdG9yZWQuICBUaGUgZGF0YSBpcyBhcHBlbmRlZCB1bmNvbXByZXNzZWQgaW4KKyAgIGRlZmxhdGUgc3RvcmVkIGJsb2Nrcy4gIFJldHVybiAtMSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgcmVhZGluZyBvciB3cml0aW5nCisgICB0aGUgZm9vLmd6IGZpbGUuICovCitsb2NhbCBpbnQgbG9nX2FwcGVuZChzdHJ1Y3QgbG9nICpsb2csIHVuc2lnbmVkIGNoYXIgKmRhdGEsIHNpemVfdCBsZW4pCit7CisgICAgdWludCBwdXQ7CisgICAgb2ZmX3QgZW5kOworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzhdOworCisgICAgLyogc2V0IHRoZSBsYXN0IGJsb2NrIGxhc3QtYml0IGFuZCBsZW5ndGgsIGluIGNhc2UgcmVjb3ZlcmluZyBhbgorICAgICAgIGludGVycnVwdGVkIGFwcGVuZCwgdGhlbiBwb3NpdGlvbiB0aGUgZmlsZSBwb2ludGVyIHRvIGFwcGVuZCB0byB0aGUKKyAgICAgICBibG9jayAqLworICAgIGlmIChsb2dfbGFzdChsb2csIDEpKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICAvKiBhcHBlbmQsIGFkZGluZyBzdG9yZWQgYmxvY2tzIGFuZCB1cGRhdGluZyB0aGUgb2Zmc2V0IG9mIHRoZSBsYXN0IHN0b3JlZAorICAgICAgIGJsb2NrIGFzIG5lZWRlZCwgYW5kIHVwZGF0ZSB0aGUgdG90YWwgY3JjIGFuZCBsZW5ndGggKi8KKyAgICB3aGlsZSAobGVuKSB7CisgICAgICAgIC8qIGFwcGVuZCBhcyBtdWNoIGFzIHdlIGNhbiB0byB0aGUgbGFzdCBibG9jayAqLworICAgICAgICBwdXQgPSAoTUFYX1NUT1JFIDw8IDEwKSAtIGxvZy0+c3RvcmVkOworICAgICAgICBpZiAocHV0ID4gbGVuKQorICAgICAgICAgICAgcHV0ID0gKHVpbnQpbGVuOworICAgICAgICBpZiAocHV0KSB7CisgICAgICAgICAgICBpZiAod3JpdGUobG9nLT5mZCwgZGF0YSwgcHV0KSAhPSBwdXQpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgQkFJTCgxKTsKKyAgICAgICAgICAgIGxvZy0+dGNyYyA9IGNyYzMyKGxvZy0+dGNyYywgZGF0YSwgcHV0KTsKKyAgICAgICAgICAgIGxvZy0+dGxlbiArPSBwdXQ7CisgICAgICAgICAgICBsb2ctPnN0b3JlZCArPSBwdXQ7CisgICAgICAgICAgICBkYXRhICs9IHB1dDsKKyAgICAgICAgICAgIGxlbiAtPSBwdXQ7CisgICAgICAgIH0KKworICAgICAgICAvKiBpZiB3ZSBuZWVkIHRvLCBhZGQgYSBuZXcgZW1wdHkgc3RvcmVkIGJsb2NrICovCisgICAgICAgIGlmIChsZW4pIHsKKyAgICAgICAgICAgIC8qIG1hcmsgY3VycmVudCBibG9jayBhcyBub3QgbGFzdCAqLworICAgICAgICAgICAgaWYgKGxvZ19sYXN0KGxvZywgMCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAgICAgICAvKiBwb2ludCB0byBuZXcsIGVtcHR5IHN0b3JlZCBibG9jayAqLworICAgICAgICAgICAgbG9nLT5sYXN0ICs9IDQgKyBsb2ctPnN0b3JlZCArIDE7CisgICAgICAgICAgICBsb2ctPnN0b3JlZCA9IDA7CisgICAgICAgIH0KKworICAgICAgICAvKiBtYXJrIGxhc3QgYmxvY2sgYXMgbGFzdCwgdXBkYXRlIGl0cyBsZW5ndGggKi8KKyAgICAgICAgaWYgKGxvZ19sYXN0KGxvZywgMSkpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIEJBSUwoMik7CisgICAgfQorCisgICAgLyogd3JpdGUgdGhlIG5ldyBjcmMgYW5kIGxlbmd0aCB0cmFpbGVyLCBhbmQgdHJ1bmNhdGUganVzdCBpbiBjYXNlIChjb3VsZAorICAgICAgIGJlIHJlY292ZXJpbmcgZnJvbSBwYXJ0aWFsIGFwcGVuZCB3aXRoIGEgbWlzc2luZyBmb28uYWRkIGZpbGUpICovCisgICAgUFVUNChidWYsIGxvZy0+dGNyYyk7CisgICAgUFVUNChidWYgKyA0LCBsb2ctPnRsZW4pOworICAgIGlmICh3cml0ZShsb2ctPmZkLCBidWYsIDgpICE9IDggfHwKKyAgICAgICAgKGVuZCA9IGxzZWVrKGxvZy0+ZmQsIDAsIFNFRUtfQ1VSKSkgPCAwIHx8IGZ0cnVuY2F0ZShsb2ctPmZkLCBlbmQpKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICAvKiB3cml0ZSB0aGUgZXh0cmEgZmllbGQsIG1hcmtpbmcgdGhlIGxvZyBmaWxlIGFzIGRvbmUsIGRlbGV0ZSAuYWRkIGZpbGUgKi8KKyAgICBpZiAobG9nX21hcmsobG9nLCBOT19PUCkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBzdHJjcHkobG9nLT5lbmQsICIuYWRkIik7CisgICAgdW5saW5rKGxvZy0+cGF0aCk7ICAgICAgICAgIC8qIGlnbm9yZSBlcnJvciwgc2luY2UgbWF5IG5vdCBleGlzdCAqLworICAgIHJldHVybiAwOworfQorCisvKiBSZXBsYWNlIHRoZSBmb28uZGljdCBmaWxlIHdpdGggdGhlIGZvby50ZW1wIGZpbGUuICBBbHNvIGRlbGV0ZSB0aGUgZm9vLmFkZAorICAgZmlsZSwgc2luY2UgdGhlIGNvbXByZXNzIG9wZXJhdGlvbiBtYXkgaGF2ZSBiZWVuIGludGVycnVwdGVkIGJlZm9yZSB0aGF0IHdhcworICAgZG9uZS4gIFJldHVybnMgMSBpZiBtZW1vcnkgY291bGQgbm90IGJlIGFsbG9jYXRlZCwgb3IgLTEgaWYgcmVhZGluZyBvcgorICAgd3JpdGluZyBmb28uZ3ogZmFpbHMsIG9yIGlmIHRoZSByZW5hbWUgZmFpbHMgZm9yIHNvbWUgcmVhc29uIG90aGVyIHRoYW4KKyAgIGZvby50ZW1wIG5vdCBleGlzdGluZy4gIGZvby50ZW1wIG5vdCBleGlzdGluZyBpcyBhIHBlcm1pdHRlZCBlcnJvciwgc2luY2UKKyAgIHRoZSByZXBsYWNlIG9wZXJhdGlvbiBtYXkgaGF2ZSBiZWVuIGludGVycnVwdGVkIGFmdGVyIHRoZSByZW5hbWUgaXMgZG9uZSwKKyAgIGJ1dCBiZWZvcmUgZm9vLmd6IGlzIG1hcmtlZCBhcyBjb21wbGV0ZS4gKi8KK2xvY2FsIGludCBsb2dfcmVwbGFjZShzdHJ1Y3QgbG9nICpsb2cpCit7CisgICAgaW50IHJldDsKKyAgICBjaGFyICpkZXN0OworCisgICAgLyogZGVsZXRlIGZvby5hZGQgZmlsZSAqLworICAgIHN0cmNweShsb2ctPmVuZCwgIi5hZGQiKTsKKyAgICB1bmxpbmsobG9nLT5wYXRoKTsgICAgICAgICAvKiBpZ25vcmUgZXJyb3IsIHNpbmNlIG1heSBub3QgZXhpc3QgKi8KKyAgICBCQUlMKDMpOworCisgICAgLyogcmVuYW1lIGZvby5uYW1lIHRvIGZvby5kaWN0LCByZXBsYWNpbmcgZm9vLmRpY3QgaWYgaXQgZXhpc3RzICovCisgICAgc3RyY3B5KGxvZy0+ZW5kLCAiLmRpY3QiKTsKKyAgICBkZXN0ID0gbWFsbG9jKHN0cmxlbihsb2ctPnBhdGgpICsgMSk7CisgICAgaWYgKGRlc3QgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0yOworICAgIHN0cmNweShkZXN0LCBsb2ctPnBhdGgpOworICAgIHN0cmNweShsb2ctPmVuZCwgIi50ZW1wIik7CisgICAgcmV0ID0gcmVuYW1lKGxvZy0+cGF0aCwgZGVzdCk7CisgICAgZnJlZShkZXN0KTsKKyAgICBpZiAocmV0ICYmIGVycm5vICE9IEVOT0VOVCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIEJBSUwoNCk7CisKKyAgICAvKiBtYXJrIHRoZSBmb28uZ3ogZmlsZSBhcyBkb25lICovCisgICAgcmV0dXJuIGxvZ19tYXJrKGxvZywgTk9fT1ApOworfQorCisvKiBDb21wcmVzcyB0aGUgbGVuIGJ5dGVzIGF0IGRhdGEgYW5kIGFwcGVuZCB0aGUgY29tcHJlc3NlZCBkYXRhIHRvIHRoZQorICAgZm9vLmd6IGRlZmxhdGUgZGF0YSBpbW1lZGlhdGVseSBhZnRlciB0aGUgcHJldmlvdXMgY29tcHJlc3NlZCBkYXRhLiAgVGhpcworICAgb3ZlcndyaXRlcyB0aGUgcHJldmlvdXMgdW5jb21wcmVzc2VkIGRhdGEsIHdoaWNoIHdhcyBzdG9yZWQgaW4gZm9vLmFkZAorICAgYW5kIGlzIHRoZSBkYXRhIHByb3ZpZGVkIGluIGRhdGFbMC4ubGVuLTFdLiAgSWYgdGhpcyBvcGVyYXRpb24gaXMKKyAgIGludGVycnVwdGVkLCBpdCBwaWNrcyB1cCBhdCB0aGUgc3RhcnQgb2YgdGhpcyByb3V0aW5lLCB3aXRoIHRoZSBmb28uYWRkCisgICBmaWxlIHJlYWQgaW4gYWdhaW4uICBJZiB0aGVyZSBpcyBubyBkYXRhIHRvIGNvbXByZXNzIChsZW4gPT0gMCksIHRoZW4gd2UKKyAgIHNpbXBseSB0ZXJtaW5hdGUgdGhlIGZvby5neiBmaWxlIGFmdGVyIHRoZSBwcmV2aW91c2x5IGNvbXByZXNzZWQgZGF0YSwKKyAgIGFwcGVuZGluZyBhIGZpbmFsIGVtcHR5IHN0b3JlZCBibG9jayBhbmQgdGhlIGd6aXAgdHJhaWxlci4gIFJldHVybiAtMSBpZgorICAgcmVhZGluZyBvciB3cml0aW5nIHRoZSBsb2cuZ3ogZmlsZSBmYWlsZWQsIG9yIC0yIGlmIHRoZXJlIHdhcyBhIG1lbW9yeQorICAgYWxsb2NhdGlvbiBmYWlsdXJlLiAqLworbG9jYWwgaW50IGxvZ19jb21wcmVzcyhzdHJ1Y3QgbG9nICpsb2csIHVuc2lnbmVkIGNoYXIgKmRhdGEsIHNpemVfdCBsZW4pCit7CisgICAgaW50IGZkOworICAgIHVpbnQgZ290LCBtYXg7CisgICAgc3NpemVfdCBkaWN0OworICAgIG9mZl90IGVuZDsKKyAgICB6X3N0cmVhbSBzdHJtOworICAgIHVuc2lnbmVkIGNoYXIgYnVmW0RJQ1RdOworCisgICAgLyogY29tcHJlc3MgYW5kIGFwcGVuZCBjb21wcmVzc2VkIGRhdGEgKi8KKyAgICBpZiAobGVuKSB7CisgICAgICAgIC8qIHNldCB1cCBmb3IgZGVmbGF0ZSwgYWxsb2NhdGluZyBtZW1vcnkgKi8KKyAgICAgICAgc3RybS56YWxsb2MgPSBaX05VTEw7CisgICAgICAgIHN0cm0uemZyZWUgPSBaX05VTEw7CisgICAgICAgIHN0cm0ub3BhcXVlID0gWl9OVUxMOworICAgICAgICBpZiAoZGVmbGF0ZUluaXQyKCZzdHJtLCBaX0RFRkFVTFRfQ09NUFJFU1NJT04sIFpfREVGTEFURUQsIC0xNSwgOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBaX0RFRkFVTFRfU1RSQVRFR1kpICE9IFpfT0spCisgICAgICAgICAgICByZXR1cm4gLTI7CisKKyAgICAgICAgLyogcmVhZCBpbiBkaWN0aW9uYXJ5IChsYXN0IDMySyBvZiBkYXRhIHRoYXQgd2FzIGNvbXByZXNzZWQpICovCisgICAgICAgIHN0cmNweShsb2ctPmVuZCwgIi5kaWN0Iik7CisgICAgICAgIGZkID0gb3Blbihsb2ctPnBhdGgsIE9fUkRPTkxZLCAwKTsKKyAgICAgICAgaWYgKGZkID49IDApIHsKKyAgICAgICAgICAgIGRpY3QgPSByZWFkKGZkLCBidWYsIERJQ1QpOworICAgICAgICAgICAgY2xvc2UoZmQpOworICAgICAgICAgICAgaWYgKGRpY3QgPCAwKSB7CisgICAgICAgICAgICAgICAgZGVmbGF0ZUVuZCgmc3RybSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRpY3QpCisgICAgICAgICAgICAgICAgZGVmbGF0ZVNldERpY3Rpb25hcnkoJnN0cm0sIGJ1ZiwgKHVpbnQpZGljdCk7CisgICAgICAgIH0KKyAgICAgICAgbG9nX3RvdWNoKGxvZyk7CisKKyAgICAgICAgLyogcHJpbWUgZGVmbGF0ZSB3aXRoIGxhc3QgYml0cyBvZiBwcmV2aW91cyBibG9jaywgcG9zaXRpb24gd3JpdGUKKyAgICAgICAgICAgcG9pbnRlciB0byB3cml0ZSB0aG9zZSBiaXRzIGFuZCBvdmVyd3JpdGUgd2hhdCBmb2xsb3dzICovCisgICAgICAgIGlmIChsc2Vlayhsb2ctPmZkLCBsb2ctPmZpcnN0IC0gKGxvZy0+YmFjayA+IDggPyAyIDogMSksCisgICAgICAgICAgICAgICAgU0VFS19TRVQpIDwgMCB8fAorICAgICAgICAgICAgcmVhZChsb2ctPmZkLCBidWYsIDEpICE9IDEgfHwgbHNlZWsobG9nLT5mZCwgLTEsIFNFRUtfQ1VSKSA8IDApIHsKKyAgICAgICAgICAgIGRlZmxhdGVFbmQoJnN0cm0pOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGRlZmxhdGVQcmltZSgmc3RybSwgKDggLSBsb2ctPmJhY2spICYgNywgKmJ1Zik7CisKKyAgICAgICAgLyogY29tcHJlc3MsIGZpbmlzaGluZyB3aXRoIGEgcGFydGlhbCBub24tbGFzdCBlbXB0eSBzdGF0aWMgYmxvY2sgKi8KKyAgICAgICAgc3RybS5uZXh0X2luID0gZGF0YTsKKyAgICAgICAgbWF4ID0gKCgodWludCkwIC0gMSkgPj4gMSkgKyAxOyAvKiBpbiBjYXNlIGludCBzbWFsbGVyIHRoYW4gc2l6ZV90ICovCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIHN0cm0uYXZhaWxfaW4gPSBsZW4gPiBtYXggPyBtYXggOiAodWludClsZW47CisgICAgICAgICAgICBsZW4gLT0gc3RybS5hdmFpbF9pbjsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBzdHJtLmF2YWlsX291dCA9IERJQ1Q7CisgICAgICAgICAgICAgICAgc3RybS5uZXh0X291dCA9IGJ1ZjsKKyAgICAgICAgICAgICAgICBkZWZsYXRlKCZzdHJtLCBsZW4gPyBaX05PX0ZMVVNIIDogWl9QQVJUSUFMX0ZMVVNIKTsKKyAgICAgICAgICAgICAgICBnb3QgPSBESUNUIC0gc3RybS5hdmFpbF9vdXQ7CisgICAgICAgICAgICAgICAgaWYgKGdvdCAmJiB3cml0ZShsb2ctPmZkLCBidWYsIGdvdCkgIT0gZ290KSB7CisgICAgICAgICAgICAgICAgICAgIGRlZmxhdGVFbmQoJnN0cm0pOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxvZ190b3VjaChsb2cpOworICAgICAgICAgICAgfSB3aGlsZSAoc3RybS5hdmFpbF9vdXQgPT0gMCk7CisgICAgICAgIH0gd2hpbGUgKGxlbik7CisgICAgICAgIGRlZmxhdGVFbmQoJnN0cm0pOworICAgICAgICBCQUlMKDUpOworCisgICAgICAgIC8qIGZpbmQgc3RhcnQgb2YgZW1wdHkgc3RhdGljIGJsb2NrIC0tIHNjYW5uaW5nIGJhY2t3YXJkcyB0aGUgZmlyc3Qgb25lCisgICAgICAgICAgIGJpdCBpcyB0aGUgc2Vjb25kIGJpdCBvZiB0aGUgYmxvY2ssIGlmIHRoZSBsYXN0IGJ5dGUgaXMgemVybywgdGhlbgorICAgICAgICAgICB3ZSBrbm93IHRoZSBieXRlIGJlZm9yZSB0aGF0IGhhcyBhIG9uZSBpbiB0aGUgdG9wIGJpdCwgc2luY2UgYW4KKyAgICAgICAgICAgZW1wdHkgc3RhdGljIGJsb2NrIGlzIHRlbiBiaXRzIGxvbmcgKi8KKyAgICAgICAgaWYgKChsb2ctPmZpcnN0ID0gbHNlZWsobG9nLT5mZCwgLTEsIFNFRUtfQ1VSKSkgPCAwIHx8CisgICAgICAgICAgICByZWFkKGxvZy0+ZmQsIGJ1ZiwgMSkgIT0gMSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgbG9nLT5maXJzdCsrOworICAgICAgICBpZiAoKmJ1ZikgeworICAgICAgICAgICAgbG9nLT5iYWNrID0gMTsKKyAgICAgICAgICAgIHdoaWxlICgoKmJ1ZiAmICgodWludCkxIDw8ICg4IC0gbG9nLT5iYWNrKyspKSkgPT0gMCkKKyAgICAgICAgICAgICAgICA7ICAgICAgIC8qIGd1YXJhbnRlZWQgdG8gdGVybWluYXRlLCBzaW5jZSAqYnVmICE9IDAgKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBsb2ctPmJhY2sgPSAxMDsKKworICAgICAgICAvKiB1cGRhdGUgY29tcHJlc3NlZCBjcmMgYW5kIGxlbmd0aCAqLworICAgICAgICBsb2ctPmNjcmMgPSBsb2ctPnRjcmM7CisgICAgICAgIGxvZy0+Y2xlbiA9IGxvZy0+dGxlbjsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIC8qIG5vIGRhdGEgdG8gY29tcHJlc3MgLS0gZml4IHVwIGV4aXN0aW5nIGd6aXAgc3RyZWFtICovCisgICAgICAgIGxvZy0+dGNyYyA9IGxvZy0+Y2NyYzsKKyAgICAgICAgbG9nLT50bGVuID0gbG9nLT5jbGVuOworICAgIH0KKworICAgIC8qIGNvbXBsZXRlIGFuZCB0cnVuY2F0ZSBnemlwIHN0cmVhbSAqLworICAgIGxvZy0+bGFzdCA9IGxvZy0+Zmlyc3Q7CisgICAgbG9nLT5zdG9yZWQgPSAwOworICAgIFBVVDQoYnVmLCBsb2ctPnRjcmMpOworICAgIFBVVDQoYnVmICsgNCwgbG9nLT50bGVuKTsKKyAgICBpZiAobG9nX2xhc3QobG9nLCAxKSB8fCB3cml0ZShsb2ctPmZkLCBidWYsIDgpICE9IDggfHwKKyAgICAgICAgKGVuZCA9IGxzZWVrKGxvZy0+ZmQsIDAsIFNFRUtfQ1VSKSkgPCAwIHx8IGZ0cnVuY2F0ZShsb2ctPmZkLCBlbmQpKQorICAgICAgICByZXR1cm4gLTE7CisgICAgQkFJTCg2KTsKKworICAgIC8qIG1hcmsgYXMgYmVpbmcgaW4gdGhlIHJlcGxhY2Ugb3BlcmF0aW9uICovCisgICAgaWYgKGxvZ19tYXJrKGxvZywgUkVQTEFDRV9PUCkpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIC8qIGV4ZWN1dGUgdGhlIHJlcGxhY2Ugb3BlcmF0aW9uIGFuZCBtYXJrIHRoZSBmaWxlIGFzIGRvbmUgKi8KKyAgICByZXR1cm4gbG9nX3JlcGxhY2UobG9nKTsKK30KKworLyogbG9nIGEgcmVwYWlyIHJlY29yZCB0byB0aGUgLnJlcGFpcnMgZmlsZSAqLworbG9jYWwgdm9pZCBsb2dfbG9nKHN0cnVjdCBsb2cgKmxvZywgaW50IG9wLCBjaGFyICpyZWNvcmQpCit7CisgICAgdGltZV90IG5vdzsKKyAgICBGSUxFICpyZWM7CisKKyAgICBub3cgPSB0aW1lKE5VTEwpOworICAgIHN0cmNweShsb2ctPmVuZCwgIi5yZXBhaXJzIik7CisgICAgcmVjID0gZm9wZW4obG9nLT5wYXRoLCAiYSIpOworICAgIGlmIChyZWMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOworICAgIGZwcmludGYocmVjLCAiJS4yNHMgJXMgcmVjb3Zlcnk6ICVzXG4iLCBjdGltZSgmbm93KSwgb3AgPT0gQVBQRU5EX09QID8KKyAgICAgICAgICAgICJhcHBlbmQiIDogKG9wID09IENPTVBSRVNTX09QID8gImNvbXByZXNzIiA6ICJyZXBsYWNlIiksIHJlY29yZCk7CisgICAgZmNsb3NlKHJlYyk7CisgICAgcmV0dXJuOworfQorCisvKiBSZWNvdmVyIHRoZSBpbnRlcnJ1cHRlZCBvcGVyYXRpb24gb3AuICBGaXJzdCByZWFkIGZvby5hZGQgZm9yIHJlY292ZXJpbmcgYW4KKyAgIGFwcGVuZCBvciBjb21wcmVzcyBvcGVyYXRpb24uICBSZXR1cm4gLTEgaWYgdGhlcmUgd2FzIGFuIGVycm9yIHJlYWRpbmcgb3IKKyAgIHdyaXRpbmcgZm9vLmd6IG9yIHJlYWRpbmcgYW4gZXhpc3RpbmcgZm9vLmFkZCwgb3IgLTIgaWYgdGhlcmUgd2FzIGEgbWVtb3J5CisgICBhbGxvY2F0aW9uIGZhaWx1cmUuICovCitsb2NhbCBpbnQgbG9nX3JlY292ZXIoc3RydWN0IGxvZyAqbG9nLCBpbnQgb3ApCit7CisgICAgaW50IGZkLCByZXQgPSAwOworICAgIHVuc2lnbmVkIGNoYXIgKmRhdGEgPSBOVUxMOworICAgIHNpemVfdCBsZW4gPSAwOworICAgIHN0cnVjdCBzdGF0IHN0OworCisgICAgLyogbG9nIHJlY292ZXJ5ICovCisgICAgbG9nX2xvZyhsb2csIG9wLCAic3RhcnQiKTsKKworICAgIC8qIGxvYWQgZm9vLmFkZCBmaWxlIGlmIGV4cGVjdGVkIGFuZCBwcmVzZW50ICovCisgICAgaWYgKG9wID09IEFQUEVORF9PUCB8fCBvcCA9PSBDT01QUkVTU19PUCkgeworICAgICAgICBzdHJjcHkobG9nLT5lbmQsICIuYWRkIik7CisgICAgICAgIGlmIChzdGF0KGxvZy0+cGF0aCwgJnN0KSA9PSAwICYmIHN0LnN0X3NpemUpIHsKKyAgICAgICAgICAgIGxlbiA9IChzaXplX3QpKHN0LnN0X3NpemUpOworICAgICAgICAgICAgaWYgKChvZmZfdClsZW4gIT0gc3Quc3Rfc2l6ZSB8fAorICAgICAgICAgICAgICAgICAgICAoZGF0YSA9IG1hbGxvYyhzdC5zdF9zaXplKSkgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGxvZ19sb2cobG9nLCBvcCwgImFsbG9jYXRpb24gZmFpbHVyZSIpOworICAgICAgICAgICAgICAgIHJldHVybiAtMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgoZmQgPSBvcGVuKGxvZy0+cGF0aCwgT19SRE9OTFksIDApKSA8IDApIHsKKyAgICAgICAgICAgICAgICBmcmVlKGRhdGEpOworICAgICAgICAgICAgICAgIGxvZ19sb2cobG9nLCBvcCwgIi5hZGQgZmlsZSByZWFkIGZhaWx1cmUiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXQgPSAoc2l6ZV90KXJlYWQoZmQsIGRhdGEsIGxlbikgIT0gbGVuOworICAgICAgICAgICAgY2xvc2UoZmQpOworICAgICAgICAgICAgaWYgKHJldCkgeworICAgICAgICAgICAgICAgIGZyZWUoZGF0YSk7CisgICAgICAgICAgICAgICAgbG9nX2xvZyhsb2csIG9wLCAiLmFkZCBmaWxlIHJlYWQgZmFpbHVyZSIpOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxvZ19sb2cobG9nLCBvcCwgImxvYWRlZCAuYWRkIGZpbGUiKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBsb2dfbG9nKGxvZywgb3AsICJtaXNzaW5nIC5hZGQgZmlsZSEiKTsKKyAgICB9CisKKyAgICAvKiByZWNvdmVyIHRoZSBpbnRlcnJ1cHRlZCBvcGVyYXRpb24gKi8KKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBBUFBFTkRfT1A6CisgICAgICAgIHJldCA9IGxvZ19hcHBlbmQobG9nLCBkYXRhLCBsZW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENPTVBSRVNTX09QOgorICAgICAgICByZXQgPSBsb2dfY29tcHJlc3MobG9nLCBkYXRhLCBsZW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJFUExBQ0VfT1A6CisgICAgICAgIHJldCA9IGxvZ19yZXBsYWNlKGxvZyk7CisgICAgfQorCisgICAgLyogbG9nIHN0YXR1cyAqLworICAgIGxvZ19sb2cobG9nLCBvcCwgcmV0ID8gImZhaWx1cmUiIDogImNvbXBsZXRlIik7CisKKyAgICAvKiBjbGVhbiB1cCAqLworICAgIGlmIChkYXRhICE9IE5VTEwpCisgICAgICAgIGZyZWUoZGF0YSk7CisgICAgcmV0dXJuIHJldDsKK30KKworLyogQ2xvc2UgdGhlIGZvby5neiBmaWxlIChpZiBvcGVuKSBhbmQgcmVsZWFzZSB0aGUgbG9jay4gKi8KK2xvY2FsIHZvaWQgbG9nX2Nsb3NlKHN0cnVjdCBsb2cgKmxvZykKK3sKKyAgICBpZiAobG9nLT5mZCA+PSAwKQorICAgICAgICBjbG9zZShsb2ctPmZkKTsKKyAgICBsb2ctPmZkID0gLTE7CisgICAgbG9nX3VubG9jayhsb2cpOworfQorCisvKiBPcGVuIGZvby5neiwgdmVyaWZ5IHRoZSBoZWFkZXIsIGFuZCBsb2FkIHRoZSBleHRyYSBmaWVsZCBjb250ZW50cywgYWZ0ZXIKKyAgIGZpcnN0IGNyZWF0aW5nIHRoZSBmb28ubG9jayBmaWxlIHRvIGdhaW4gZXhjbHVzaXZlIGFjY2VzcyB0byB0aGUgZm9vLioKKyAgIGZpbGVzLiAgSWYgZm9vLmd6IGRvZXMgbm90IGV4aXN0IG9yIGlzIGVtcHR5LCB0aGVuIHdyaXRlIHRoZSBpbml0aWFsIGhlYWRlciwKKyAgIGV4dHJhLCBhbmQgYm9keSBjb250ZW50IG9mIGFuIGVtcHR5IGZvby5neiBsb2cgZmlsZS4gIElmIHRoZXJlIGlzIGFuIGVycm9yCisgICBjcmVhdGluZyB0aGUgbG9jayBmaWxlIGR1ZSB0byBhY2Nlc3MgcmVzdHJpY3Rpb25zLCBvciBhbiBlcnJvciByZWFkaW5nIG9yCisgICB3cml0aW5nIHRoZSBmb28uZ3ogZmlsZSwgb3IgaWYgdGhlIGZvby5neiBmaWxlIGlzIG5vdCBhIHByb3BlciBsb2cgZmlsZSBmb3IKKyAgIHRoaXMgb2JqZWN0IChlLmcuIG5vdCBhIGd6aXAgZmlsZSBvciBkb2VzIG5vdCBjb250YWluIHRoZSBleHBlY3RlZCBleHRyYQorICAgZmllbGQpLCB0aGVuIHJldHVybiB0cnVlLiAgSWYgdGhlcmUgaXMgYW4gZXJyb3IsIHRoZSBsb2NrIGlzIHJlbGVhc2VkLgorICAgT3RoZXJ3aXNlLCB0aGUgbG9jayBpcyBsZWZ0IGluIHBsYWNlLiAqLworbG9jYWwgaW50IGxvZ19vcGVuKHN0cnVjdCBsb2cgKmxvZykKK3sKKyAgICBpbnQgb3A7CisKKyAgICAvKiByZWxlYXNlIG9wZW4gZmlsZSByZXNvdXJjZSBpZiBsZWZ0IG92ZXIgLS0gY2FuIG9jY3VyIGlmIGxvY2sgbG9zdAorICAgICAgIGJldHdlZW4gZ3psb2dfb3BlbigpIGFuZCBnemxvZ193cml0ZSgpICovCisgICAgaWYgKGxvZy0+ZmQgPj0gMCkKKyAgICAgICAgY2xvc2UobG9nLT5mZCk7CisgICAgbG9nLT5mZCA9IC0xOworCisgICAgLyogbmVnb3RpYXRlIGV4Y2x1c2l2ZSBhY2Nlc3MgKi8KKyAgICBpZiAobG9nX2xvY2sobG9nKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIC8qIG9wZW4gdGhlIGxvZyBmaWxlLCBmb28uZ3ogKi8KKyAgICBzdHJjcHkobG9nLT5lbmQsICIuZ3oiKTsKKyAgICBsb2ctPmZkID0gb3Blbihsb2ctPnBhdGgsIE9fUkRXUiB8IE9fQ1JFQVQsIDA2NDQpOworICAgIGlmIChsb2ctPmZkIDwgMCkgeworICAgICAgICBsb2dfY2xvc2UobG9nKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qIGlmIG5ldywgaW5pdGlhbGl6ZSBmb28uZ3ogd2l0aCBhbiBlbXB0eSBsb2csIGRlbGV0ZSBvbGQgZGljdGlvbmFyeSAqLworICAgIGlmIChsc2Vlayhsb2ctPmZkLCAwLCBTRUVLX0VORCkgPT0gMCkgeworICAgICAgICBpZiAod3JpdGUobG9nLT5mZCwgbG9nX2d6aGVhZCwgSEVBRCkgIT0gSEVBRCB8fAorICAgICAgICAgICAgd3JpdGUobG9nLT5mZCwgbG9nX2d6ZXh0LCBFWFRSQSkgIT0gRVhUUkEgfHwKKyAgICAgICAgICAgIHdyaXRlKGxvZy0+ZmQsIGxvZ19nemJvZHksIEJPRFkpICE9IEJPRFkpIHsKKyAgICAgICAgICAgIGxvZ19jbG9zZShsb2cpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIHN0cmNweShsb2ctPmVuZCwgIi5kaWN0Iik7CisgICAgICAgIHVubGluayhsb2ctPnBhdGgpOworICAgIH0KKworICAgIC8qIHZlcmlmeSBsb2cgZmlsZSBhbmQgbG9hZCBleHRyYSBmaWVsZCBpbmZvcm1hdGlvbiAqLworICAgIGlmICgob3AgPSBsb2dfaGVhZChsb2cpKSA8IDApIHsKKyAgICAgICAgbG9nX2Nsb3NlKGxvZyk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiBjaGVjayBmb3IgaW50ZXJydXB0ZWQgcHJvY2VzcyBhbmQgaWYgc28sIHJlY292ZXIgKi8KKyAgICBpZiAob3AgIT0gTk9fT1AgJiYgbG9nX3JlY292ZXIobG9nLCBvcCkpIHsKKyAgICAgICAgbG9nX2Nsb3NlKGxvZyk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiB0b3VjaCB0aGUgbG9jayBmaWxlIHRvIHByZXZlbnQgYW5vdGhlciBwcm9jZXNzIGZyb20gZ3JhYmJpbmcgaXQgKi8KKyAgICBsb2dfdG91Y2gobG9nKTsKKyAgICByZXR1cm4gMDsKK30KKworLyogU2VlIGd6bG9nLmggZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgZXh0ZXJuYWwgbWV0aG9kcyBiZWxvdyAqLworZ3psb2cgKmd6bG9nX29wZW4oY2hhciAqcGF0aCkKK3sKKyAgICBzaXplX3QgbjsKKyAgICBzdHJ1Y3QgbG9nICpsb2c7CisKKyAgICAvKiBjaGVjayBhcmd1bWVudHMgKi8KKyAgICBpZiAocGF0aCA9PSBOVUxMIHx8ICpwYXRoID09IDApCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgLyogYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgbG9nIHN0cnVjdHVyZSAqLworICAgIGxvZyA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGxvZykpOworICAgIGlmIChsb2cgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgc3RyY3B5KGxvZy0+aWQsIExPR0lEKTsKKyAgICBsb2ctPmZkID0gLTE7CisKKyAgICAvKiBzYXZlIHBhdGggYW5kIGVuZCBvZiBwYXRoIGZvciBuYW1lIGNvbnN0cnVjdGlvbiAqLworICAgIG4gPSBzdHJsZW4ocGF0aCk7CisgICAgbG9nLT5wYXRoID0gbWFsbG9jKG4gKyA5KTsgICAgICAgICAgICAgIC8qIGFsbG93IGZvciAiLnJlcGFpcnMiICovCisgICAgaWYgKGxvZy0+cGF0aCA9PSBOVUxMKSB7CisgICAgICAgIGZyZWUobG9nKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHN0cmNweShsb2ctPnBhdGgsIHBhdGgpOworICAgIGxvZy0+ZW5kID0gbG9nLT5wYXRoICsgbjsKKworICAgIC8qIGdhaW4gZXhjbHVzaXZlIGFjY2VzcyBhbmQgdmVyaWZ5IGxvZyBmaWxlIC0tIG1heSBwZXJmb3JtIGEKKyAgICAgICByZWNvdmVyeSBvcGVyYXRpb24gaWYgbmVlZGVkICovCisgICAgaWYgKGxvZ19vcGVuKGxvZykpIHsKKyAgICAgICAgZnJlZShsb2ctPnBhdGgpOworICAgICAgICBmcmVlKGxvZyk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIC8qIHJldHVybiBwb2ludGVyIHRvIGxvZyBzdHJ1Y3R1cmUgKi8KKyAgICByZXR1cm4gbG9nOworfQorCisvKiBnemxvZ19jb21wcmVzcygpIHJldHVybiB2YWx1ZXM6CisgICAgMDogYWxsIGdvb2QKKyAgIC0xOiBmaWxlIGkvbyBlcnJvciAodXN1YWxseSBhY2Nlc3MgaXNzdWUpCisgICAtMjogbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZQorICAgLTM6IGludmFsaWQgbG9nIHBvaW50ZXIgYXJndW1lbnQgKi8KK2ludCBnemxvZ19jb21wcmVzcyhnemxvZyAqbG9nZCkKK3sKKyAgICBpbnQgZmQsIHJldDsKKyAgICB1aW50IGJsb2NrOworICAgIHNpemVfdCBsZW4sIG5leHQ7CisgICAgdW5zaWduZWQgY2hhciAqZGF0YSwgYnVmWzVdOworICAgIHN0cnVjdCBsb2cgKmxvZyA9IGxvZ2Q7CisKKyAgICAvKiBjaGVjayBhcmd1bWVudHMgKi8KKyAgICBpZiAobG9nID09IE5VTEwgfHwgc3RyY21wKGxvZy0+aWQsIExPR0lEKSkKKyAgICAgICAgcmV0dXJuIC0zOworCisgICAgLyogc2VlIGlmIHdlIGxvc3QgdGhlIGxvY2sgLS0gaWYgc28gZ2V0IGl0IGFnYWluIGFuZCByZWxvYWQgdGhlIGV4dHJhCisgICAgICAgZmllbGQgaW5mb3JtYXRpb24gKGl0IHByb2JhYmx5IGNoYW5nZWQpLCByZWNvdmVyIGxhc3Qgb3BlcmF0aW9uIGlmCisgICAgICAgbmVjZXNzYXJ5ICovCisgICAgaWYgKGxvZ19jaGVjayhsb2cpICYmIGxvZ19vcGVuKGxvZykpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIC8qIGNyZWF0ZSBzcGFjZSBmb3IgdW5jb21wcmVzc2VkIGRhdGEgKi8KKyAgICBsZW4gPSAoKHNpemVfdCkobG9nLT5sYXN0IC0gbG9nLT5maXJzdCkgJiB+KCgoc2l6ZV90KTEgPDwgMTApIC0gMSkpICsKKyAgICAgICAgICBsb2ctPnN0b3JlZDsKKyAgICBpZiAoKGRhdGEgPSBtYWxsb2MobGVuKSkgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0yOworCisgICAgLyogZG8gc3RhdGVtZW50IGhlcmUgaXMganVzdCBhIGNoZWFwIHRyaWNrIGZvciBlcnJvciBoYW5kbGluZyAqLworICAgIGRvIHsKKyAgICAgICAgLyogcmVhZCBpbiB0aGUgdW5jb21wcmVzc2VkIGRhdGEgKi8KKyAgICAgICAgaWYgKGxzZWVrKGxvZy0+ZmQsIGxvZy0+Zmlyc3QgLSAxLCBTRUVLX1NFVCkgPCAwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIG5leHQgPSAwOworICAgICAgICB3aGlsZSAobmV4dCA8IGxlbikgeworICAgICAgICAgICAgaWYgKHJlYWQobG9nLT5mZCwgYnVmLCA1KSAhPSA1KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgYmxvY2sgPSBQVUxMMihidWYgKyAxKTsKKyAgICAgICAgICAgIGlmIChuZXh0ICsgYmxvY2sgPiBsZW4gfHwKKyAgICAgICAgICAgICAgICByZWFkKGxvZy0+ZmQsIChjaGFyICopZGF0YSArIG5leHQsIGJsb2NrKSAhPSBibG9jaykKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIG5leHQgKz0gYmxvY2s7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGxzZWVrKGxvZy0+ZmQsIDAsIFNFRUtfQ1VSKSAhPSBsb2ctPmxhc3QgKyA0ICsgbG9nLT5zdG9yZWQpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgbG9nX3RvdWNoKGxvZyk7CisKKyAgICAgICAgLyogd3JpdGUgdGhlIHVuY29tcHJlc3NlZCBkYXRhIHRvIHRoZSAuYWRkIGZpbGUgKi8KKyAgICAgICAgc3RyY3B5KGxvZy0+ZW5kLCAiLmFkZCIpOworICAgICAgICBmZCA9IG9wZW4obG9nLT5wYXRoLCBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX1RSVU5DLCAwNjQ0KTsKKyAgICAgICAgaWYgKGZkIDwgMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICByZXQgPSAoc2l6ZV90KXdyaXRlKGZkLCBkYXRhLCBsZW4pICE9IGxlbjsKKyAgICAgICAgaWYgKHJldCB8IGNsb3NlKGZkKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBsb2dfdG91Y2gobG9nKTsKKworICAgICAgICAvKiB3cml0ZSB0aGUgZGljdGlvbmFyeSBmb3IgdGhlIG5leHQgY29tcHJlc3MgdG8gdGhlIC50ZW1wIGZpbGUgKi8KKyAgICAgICAgc3RyY3B5KGxvZy0+ZW5kLCAiLnRlbXAiKTsKKyAgICAgICAgZmQgPSBvcGVuKGxvZy0+cGF0aCwgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19UUlVOQywgMDY0NCk7CisgICAgICAgIGlmIChmZCA8IDApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgbmV4dCA9IERJQ1QgPiBsZW4gPyBsZW4gOiBESUNUOworICAgICAgICByZXQgPSAoc2l6ZV90KXdyaXRlKGZkLCAoY2hhciAqKWRhdGEgKyBsZW4gLSBuZXh0LCBuZXh0KSAhPSBuZXh0OworICAgICAgICBpZiAocmV0IHwgY2xvc2UoZmQpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGxvZ190b3VjaChsb2cpOworCisgICAgICAgIC8qIHJvbGwgYmFjayB0byBjb21wcmVzc2VkIGRhdGEsIG1hcmsgdGhlIGNvbXByZXNzIGluIHByb2dyZXNzICovCisgICAgICAgIGxvZy0+bGFzdCA9IGxvZy0+Zmlyc3Q7CisgICAgICAgIGxvZy0+c3RvcmVkID0gMDsKKyAgICAgICAgaWYgKGxvZ19tYXJrKGxvZywgQ09NUFJFU1NfT1ApKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIEJBSUwoNyk7CisKKyAgICAgICAgLyogY29tcHJlc3MgYW5kIGFwcGVuZCB0aGUgZGF0YSAoY2xlYXJzIG1hcmspICovCisgICAgICAgIHJldCA9IGxvZ19jb21wcmVzcyhsb2csIGRhdGEsIGxlbik7CisgICAgICAgIGZyZWUoZGF0YSk7CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfSB3aGlsZSAoMCk7CisKKyAgICAvKiBicm9rZSBvdXQgb2YgZG8gYWJvdmUgb24gaS9vIGVycm9yICovCisgICAgZnJlZShkYXRhKTsKKyAgICByZXR1cm4gLTE7Cit9CisKKy8qIGd6bG9nX3dyaXRlKCkgcmV0dXJuIHZhbHVlczoKKyAgICAwOiBhbGwgZ29vZAorICAgLTE6IGZpbGUgaS9vIGVycm9yICh1c3VhbGx5IGFjY2VzcyBpc3N1ZSkKKyAgIC0yOiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlCisgICAtMzogaW52YWxpZCBsb2cgcG9pbnRlciBhcmd1bWVudCAqLworaW50IGd6bG9nX3dyaXRlKGd6bG9nICpsb2dkLCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKQoreworICAgIGludCBmZCwgcmV0OworICAgIHN0cnVjdCBsb2cgKmxvZyA9IGxvZ2Q7CisKKyAgICAvKiBjaGVjayBhcmd1bWVudHMgKi8KKyAgICBpZiAobG9nID09IE5VTEwgfHwgc3RyY21wKGxvZy0+aWQsIExPR0lEKSkKKyAgICAgICAgcmV0dXJuIC0zOworICAgIGlmIChkYXRhID09IE5VTEwgfHwgbGVuIDw9IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgLyogc2VlIGlmIHdlIGxvc3QgdGhlIGxvY2sgLS0gaWYgc28gZ2V0IGl0IGFnYWluIGFuZCByZWxvYWQgdGhlIGV4dHJhCisgICAgICAgZmllbGQgaW5mb3JtYXRpb24gKGl0IHByb2JhYmx5IGNoYW5nZWQpLCByZWNvdmVyIGxhc3Qgb3BlcmF0aW9uIGlmCisgICAgICAgbmVjZXNzYXJ5ICovCisgICAgaWYgKGxvZ19jaGVjayhsb2cpICYmIGxvZ19vcGVuKGxvZykpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIC8qIGNyZWF0ZSBhbmQgd3JpdGUgLmFkZCBmaWxlICovCisgICAgc3RyY3B5KGxvZy0+ZW5kLCAiLmFkZCIpOworICAgIGZkID0gb3Blbihsb2ctPnBhdGgsIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fVFJVTkMsIDA2NDQpOworICAgIGlmIChmZCA8IDApCisgICAgICAgIHJldHVybiAtMTsKKyAgICByZXQgPSAoc2l6ZV90KXdyaXRlKGZkLCBkYXRhLCBsZW4pICE9IGxlbjsKKyAgICBpZiAocmV0IHwgY2xvc2UoZmQpKQorICAgICAgICByZXR1cm4gLTE7CisgICAgbG9nX3RvdWNoKGxvZyk7CisKKyAgICAvKiBtYXJrIGxvZyBmaWxlIHdpdGggYXBwZW5kIGluIHByb2dyZXNzICovCisgICAgaWYgKGxvZ19tYXJrKGxvZywgQVBQRU5EX09QKSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIEJBSUwoOCk7CisKKyAgICAvKiBhcHBlbmQgZGF0YSAoY2xlYXJzIG1hcmspICovCisgICAgaWYgKGxvZ19hcHBlbmQobG9nLCBkYXRhLCBsZW4pKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICAvKiBjaGVjayB0byBzZWUgaWYgaXQncyB0aW1lIHRvIGNvbXByZXNzIC0tIGlmIG5vdCwgdGhlbiBkb25lICovCisgICAgaWYgKCgobG9nLT5sYXN0IC0gbG9nLT5maXJzdCkgPj4gMTApICsgKGxvZy0+c3RvcmVkID4+IDEwKSA8IFRSSUdHRVIpCisgICAgICAgIHJldHVybiAwOworCisgICAgLyogdGltZSB0byBjb21wcmVzcyAqLworICAgIHJldHVybiBnemxvZ19jb21wcmVzcyhsb2cpOworfQorCisvKiBnemxvZ19jbG9zZSgpIHJldHVybiB2YWx1ZXM6CisgICAgMDogb2sKKyAgIC0zOiBpbnZhbGlkIGxvZyBwb2ludGVyIGFyZ3VtZW50ICovCitpbnQgZ3psb2dfY2xvc2UoZ3psb2cgKmxvZ2QpCit7CisgICAgc3RydWN0IGxvZyAqbG9nID0gbG9nZDsKKworICAgIC8qIGNoZWNrIGFyZ3VtZW50cyAqLworICAgIGlmIChsb2cgPT0gTlVMTCB8fCBzdHJjbXAobG9nLT5pZCwgTE9HSUQpKQorICAgICAgICByZXR1cm4gLTM7CisKKyAgICAvKiBjbG9zZSB0aGUgbG9nIGZpbGUgYW5kIHJlbGVhc2UgdGhlIGxvY2sgKi8KKyAgICBsb2dfY2xvc2UobG9nKTsKKworICAgIC8qIGZyZWUgc3RydWN0dXJlIGFuZCByZXR1cm4gKi8KKyAgICBpZiAobG9nLT5wYXRoICE9IE5VTEwpCisgICAgICAgIGZyZWUobG9nLT5wYXRoKTsKKyAgICBzdHJjcHkobG9nLT5pZCwgImJhZCIpOworICAgIGZyZWUobG9nKTsKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3NyYy9leGFtcGxlcy9nemxvZy5oIGIvc3JjL2V4YW1wbGVzL2d6bG9nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZmMGNlYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9leGFtcGxlcy9nemxvZy5oCkBAIC0wLDAgKzEsOTEgQEAKKy8qIGd6bG9nLmgKKyAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA4LCAyMDEyIE1hcmsgQWRsZXIsIGFsbCByaWdodHMgcmVzZXJ2ZWQKKyAgdmVyc2lvbiAyLjIsIDE0IEF1ZyAyMDEyCisKKyAgVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWQKKyAgd2FycmFudHkuICBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3IgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzCisgIGFyaXNpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuCisKKyAgUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UsCisgIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXQKKyAgZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCisgIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90CisgICAgIGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlCisgICAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZQorICAgICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLgorICAyLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZQorICAgICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuCisgIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uCisKKyAgTWFyayBBZGxlciAgICBtYWRsZXJAYWx1bW5pLmNhbHRlY2guZWR1CisgKi8KKworLyogVmVyc2lvbiBIaXN0b3J5OgorICAgMS4wICAyNiBOb3YgMjAwNCAgRmlyc3QgdmVyc2lvbgorICAgMi4wICAyNSBBcHIgMjAwOCAgQ29tcGxldGUgcmVkZXNpZ24gZm9yIHJlY292ZXJ5IG9mIGludGVycnVwdGVkIG9wZXJhdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgIEludGVyZmFjZSBjaGFuZ2VkIHNsaWdodGx5IGluIHRoYXQgbm93IHBhdGggaXMgYSBwcmVmaXgKKyAgICAgICAgICAgICAgICAgICAgIENvbXByZXNzaW9uIG5vdyBvY2N1cnMgYXMgbmVlZGVkIGR1cmluZyBnemxvZ193cml0ZSgpCisgICAgICAgICAgICAgICAgICAgICBnemxvZ193cml0ZSgpIG5vdyBhbHdheXMgbGVhdmVzIHRoZSBsb2cgZmlsZSBhcyB2YWxpZCBnemlwCisgICAyLjEgICA4IEp1bCAyMDEyICBGaXggYXJndW1lbnQgY2hlY2tzIGluIGd6bG9nX2NvbXByZXNzKCkgYW5kIGd6bG9nX3dyaXRlKCkKKyAgIDIuMiAgMTQgQXVnIDIwMTIgIENsZWFuIHVwIHNpZ25lZCBjb21wYXJpc29ucworICovCisKKy8qCisgICBUaGUgZ3psb2cgb2JqZWN0IGFsbG93cyB3cml0aW5nIHNob3J0IG1lc3NhZ2VzIHRvIGEgZ3ppcHBlZCBsb2cgZmlsZSwKKyAgIG9wZW5pbmcgdGhlIGxvZyBmaWxlIGxvY2tlZCBmb3Igc21hbGwgYnVyc3RzLCBhbmQgdGhlbiBjbG9zaW5nIGl0LiAgVGhlIGxvZworICAgb2JqZWN0IHdvcmtzIGJ5IGFwcGVuZGluZyBzdG9yZWQgKHVuY29tcHJlc3NlZCkgZGF0YSB0byB0aGUgZ3ppcCBmaWxlIHVudGlsCisgICAxIE1CIGhhcyBiZWVuIGFjY3VtdWxhdGVkLiAgQXQgdGhhdCB0aW1lLCB0aGUgc3RvcmVkIGRhdGEgaXMgY29tcHJlc3NlZCwgYW5kCisgICByZXBsYWNlcyB0aGUgdW5jb21wcmVzc2VkIGRhdGEgaW4gdGhlIGZpbGUuICBUaGUgbG9nIGZpbGUgaXMgdHJ1bmNhdGVkIHRvCisgICBpdHMgbmV3IHNpemUgYXQgdGhhdCB0aW1lLiAgQWZ0ZXIgZWFjaCB3cml0ZSBvcGVyYXRpb24sIHRoZSBsb2cgZmlsZSBpcyBhCisgICB2YWxpZCBnemlwIGZpbGUgdGhhdCBjYW4gZGVjb21wcmVzc2VkIHRvIHJlY292ZXIgd2hhdCB3YXMgd3JpdHRlbi4KKworICAgVGhlIGd6bG9nIG9wZXJhdGlvbnMgY2FuIGJlIGludGVydXB0ZWQgYXQgYW55IHBvaW50IGR1ZSB0byBhbiBhcHBsaWNhdGlvbiBvcgorICAgc3lzdGVtIGNyYXNoLCBhbmQgdGhlIGxvZyBmaWxlIHdpbGwgYmUgcmVjb3ZlcmVkIHRoZSBuZXh0IHRpbWUgdGhlIGxvZyBpcworICAgb3BlbmVkIHdpdGggZ3psb2dfb3BlbigpLgorICovCisKKyNpZm5kZWYgR1pMT0dfSAorI2RlZmluZSBHWkxPR19ICisKKy8qIGd6bG9nIG9iamVjdCB0eXBlICovCit0eXBlZGVmIHZvaWQgZ3psb2c7CisKKy8qIE9wZW4gYSBnemxvZyBvYmplY3QsIGNyZWF0aW5nIHRoZSBsb2cgZmlsZSBpZiBpdCBkb2VzIG5vdCBleGlzdC4gIFJldHVybgorICAgTlVMTCBvbiBlcnJvci4gIE5vdGUgdGhhdCBnemxvZ19vcGVuKCkgY291bGQgdGFrZSBhIHdoaWxlIHRvIGNvbXBsZXRlIGlmIGl0CisgICBoYXMgdG8gd2FpdCB0byB2ZXJpZnkgdGhhdCBhIGxvY2sgaXMgc3RhbGUgKHBvc3NpYmx5IGZvciBmaXZlIG1pbnV0ZXMpLCBvcgorICAgaWYgdGhlcmUgaXMgc2lnbmlmaWNhbnQgY29udGVudGlvbiB3aXRoIG90aGVyIGluc3RhbnRpYXRpb25zIG9mIHRoaXMgb2JqZWN0CisgICB3aGVuIGxvY2tpbmcgdGhlIHJlc291cmNlLiAgcGF0aCBpcyB0aGUgcHJlZml4IG9mIHRoZSBmaWxlIG5hbWVzIGNyZWF0ZWQgYnkKKyAgIHRoaXMgb2JqZWN0LiAgSWYgcGF0aCBpcyAiZm9vIiwgdGhlbiB0aGUgbG9nIGZpbGUgd2lsbCBiZSAiZm9vLmd6IiwgYW5kCisgICBvdGhlciBhdXhpbGlhcnkgZmlsZXMgd2lsbCBiZSBjcmVhdGVkIGFuZCBkZXN0cm95ZWQgZHVyaW5nIHRoZSBwcm9jZXNzOgorICAgImZvby5kaWN0IiBmb3IgYSBjb21wcmVzc2lvbiBkaWN0aW9uYXJ5LCAiZm9vLnRlbXAiIGZvciBhIHRlbXBvcmFyeSAobmV4dCkKKyAgIGRpY3Rpb25hcnksICJmb28uYWRkIiBmb3IgZGF0YSBiZWluZyBhZGRlZCBvciBjb21wcmVzc2VkLCAiZm9vLmxvY2siIGZvciB0aGUKKyAgIGxvY2sgZmlsZSwgYW5kICJmb28ucmVwYWlycyIgdG8gbG9nIHJlY292ZXJ5IG9wZXJhdGlvbnMgcGVyZm9ybWVkIGR1ZSB0bworICAgaW50ZXJydXB0ZWQgZ3psb2cgb3BlcmF0aW9ucy4gIEEgZ3psb2dfb3BlbigpIGZvbGxvd2VkIGJ5IGEgZ3psb2dfY2xvc2UoKQorICAgd2lsbCByZWNvdmVyIGEgcHJldmlvdXNseSBpbnRlcnJ1cHRlZCBvcGVyYXRpb24sIGlmIGFueS4gKi8KK2d6bG9nICpnemxvZ19vcGVuKGNoYXIgKnBhdGgpOworCisvKiBXcml0ZSB0byBhIGd6bG9nIG9iamVjdC4gIFJldHVybiB6ZXJvIG9uIHN1Y2Nlc3MsIC0xIGlmIHRoZXJlIGlzIGEgZmlsZSBpL28KKyAgIGVycm9yIG9uIGFueSBvZiB0aGUgZ3psb2cgZmlsZXMgKHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4gaWYgZ3psb2dfb3BlbigpCisgICBzdWNjZWVkZWQsIHVubGVzcyB0aGUgZGV2aWNlIGhhcyBydW4gb3V0IG9mIHNwYWNlIG9yIGxlZnRvdmVyIGF1eGlsaWFyeQorICAgZmlsZXMgaGF2ZSBwZXJtaXNzaW9ucyBvciBvd25lcnNoaXAgdGhhdCBwcmV2ZW50IHRoZWlyIHVzZSksIC0yIGlmIHRoZXJlIGlzCisgICBhIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUsIG9yIC0zIGlmIHRoZSBsb2cgYXJndW1lbnQgaXMgaW52YWxpZCAoZS5nLiBpZgorICAgaXQgd2FzIG5vdCBjcmVhdGVkIGJ5IGd6bG9nX29wZW4oKSkuICBUaGlzIGZ1bmN0aW9uIHdpbGwgd3JpdGUgZGF0YSB0byB0aGUKKyAgIGZpbGUgdW5jb21wcmVzc2VkLCB1bnRpbCAxIE1CIGhhcyBiZWVuIGFjY3VtdWxhdGVkLCBhdCB3aGljaCB0aW1lIHRoYXQgZGF0YQorICAgd2lsbCBiZSBjb21wcmVzc2VkLiAgVGhlIGxvZyBmaWxlIHdpbGwgYmUgYSB2YWxpZCBnemlwIGZpbGUgdXBvbiBzdWNjZXNzZnVsCisgICByZXR1cm4uICovCitpbnQgZ3psb2dfd3JpdGUoZ3psb2cgKmxvZywgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7CisKKy8qIEZvcmNlIGNvbXByZXNzaW9uIG9mIGFueSB1bmNvbXByZXNzZWQgZGF0YSBpbiB0aGUgbG9nLiAgVGhpcyBzaG91bGQgYmUgdXNlZAorICAgc3BhcmluZ2x5LCBpZiBhdCBhbGwuICBUaGUgbWFpbiBhcHBsaWNhdGlvbiB3b3VsZCBiZSB3aGVuIGEgbG9nIGZpbGUgd2lsbAorICAgbm90IGJlIGFwcGVuZGVkIHRvIGFnYWluLiAgSWYgdGhpcyBpcyB1c2VkIHRvIGNvbXByZXNzIGZyZXF1ZW50bHkgd2hpbGUKKyAgIGFwcGVuZGluZywgaXQgd2lsbCBib3RoIHNpZ25pZmljYW50bHkgaW5jcmVhc2UgdGhlIGV4ZWN1dGlvbiB0aW1lIGFuZAorICAgcmVkdWNlIHRoZSBjb21wcmVzc2lvbiByYXRpby4gIFRoZSByZXR1cm4gY29kZXMgYXJlIHRoZSBzYW1lIGFzIGZvcgorICAgZ3psb2dfd3JpdGUoKS4gKi8KK2ludCBnemxvZ19jb21wcmVzcyhnemxvZyAqbG9nKTsKKworLyogQ2xvc2UgYSBnemxvZyBvYmplY3QuICBSZXR1cm4gemVybyBvbiBzdWNjZXNzLCAtMyBpZiB0aGUgbG9nIGFyZ3VtZW50IGlzCisgICBpbnZhbGlkLiAgVGhlIGxvZyBvYmplY3QgaXMgZnJlZWQsIGFuZCBzbyBjYW5ub3QgYmUgcmVmZXJlbmNlZCBhZ2Fpbi4gKi8KK2ludCBnemxvZ19jbG9zZShnemxvZyAqbG9nKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvZXhhbXBsZXMvZ3pub3JtLmMgYi9zcmMvZXhhbXBsZXMvZ3pub3JtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhlMGEwZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9leGFtcGxlcy9nem5vcm0uYwpAQCAtMCwwICsxLDQ3MCBAQAorLyogZ3pub3JtLmMgLS0gbm9ybWFsaXplIGEgZ3ppcCBzdHJlYW0KKyAqIENvcHlyaWdodCAoQykgMjAxOCBNYXJrIEFkbGVyCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCisgKiBWZXJzaW9uIDEuMCAgNyBPY3QgMjAxOCAgTWFyayBBZGxlciAqLworCisvLyBnem5vcm0gdGFrZXMgYSBnemlwIHN0cmVhbSwgcG90ZW50aWFsbHkgY29udGFpbmluZyBtdWx0aXBsZSBtZW1iZXJzLCBhbmQKKy8vIGNvbnZlcnRzIGl0IHRvIGEgZ3ppcCBzdHJlYW0gd2l0aCBhIHNpbmdsZSBtZW1iZXIuIEluIGFkZGl0aW9uIHRoZSBnemlwCisvLyBoZWFkZXIgaXMgbm9ybWFsaXplZCwgcmVtb3ZpbmcgdGhlIGZpbGUgbmFtZSBhbmQgdGltZSBzdGFtcCwgYW5kIHNldHRpbmcgdGhlCisvLyBvdGhlciBoZWFkZXIgY29udGVudHMgKFhGTCwgT1MpIHRvIGZpeGVkIHZhbHVlcy4gZ3pub3JtIGRvZXMgbm90IHJlY29tcHJlc3MKKy8vIHRoZSBkYXRhLCBzbyBpdCBpcyBmYXN0LCBidXQgbm8gYWR2YW50YWdlIGlzIGdhaW5lZCBmcm9tIHRoZSBoaXN0b3J5IHRoYXQKKy8vIGNvdWxkIGJlIGF2YWlsYWJsZSBhY3Jvc3MgbWVtYmVyIGJvdW5kYXJpZXMuCisKKyNpbmNsdWRlIDxzdGRpby5oPiAgICAgIC8vIGZyZWFkLCBmd3JpdGUsIHB1dGMsIGZmbHVzaCwgZmVycm9yLCBmcHJpbnRmLAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gdnNucHJpbnRmLCBzdGRvdXQsIHN0ZGVyciwgTlVMTCwgRklMRQorI2luY2x1ZGUgPHN0ZGxpYi5oPiAgICAgLy8gbWFsbG9jLCBmcmVlCisjaW5jbHVkZSA8c3RyaW5nLmg+ICAgICAvLyBzdHJlcnJvcgorI2luY2x1ZGUgPGVycm5vLmg+ICAgICAgLy8gZXJybm8KKyNpbmNsdWRlIDxzdGRhcmcuaD4gICAgIC8vIHZhX2xpc3QsIHZhX3N0YXJ0LCB2YV9lbmQKKyNpbmNsdWRlICJ6bGliLmgiICAgICAgIC8vIGluZmxhdGVJbml0MiwgaW5mbGF0ZSwgaW5mbGF0ZVJlc2V0LCBpbmZsYXRlRW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gel9zdHJlYW0sIHpfb2ZmX3QsIGNyYzMyX2NvbWJpbmUsIFpfTlVMTCwgWl9CTE9DSywKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFpfT0ssIFpfU1RSRUFNX0VORCwgWl9CVUZfRVJST1IsIFpfREFUQV9FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFpfTUVNX0VSUk9SCisKKyNpZiBkZWZpbmVkKE1TRE9TKSB8fCBkZWZpbmVkKE9TMikgfHwgZGVmaW5lZChXSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKQorIyAgaW5jbHVkZSA8ZmNudGwuaD4KKyMgIGluY2x1ZGUgPGlvLmg+CisjICBkZWZpbmUgU0VUX0JJTkFSWV9NT0RFKGZpbGUpIHNldG1vZGUoZmlsZW5vKGZpbGUpLCBPX0JJTkFSWSkKKyNlbHNlCisjICBkZWZpbmUgU0VUX0JJTkFSWV9NT0RFKGZpbGUpCisjZW5kaWYKKworI2RlZmluZSBsb2NhbCBzdGF0aWMKKworLy8gcHJpbnRmIHRvIGFuIGFsbG9jYXRlZCBzdHJpbmcuIFJldHVybiB0aGUgc3RyaW5nLCBvciBOVUxMIGlmIHRoZSBwcmludGYgb3IKKy8vIGFsbG9jYXRpb24gZmFpbHMuCitsb2NhbCBjaGFyICphcHJpbnRmKGNoYXIgKmZtdCwgLi4uKSB7CisgICAgLy8gR2V0IHRoZSBsZW5ndGggb2YgdGhlIHJlc3VsdCBvZiB0aGUgcHJpbnRmLgorICAgIHZhX2xpc3QgYXJnczsKKyAgICB2YV9zdGFydChhcmdzLCBmbXQpOworICAgIGludCBsZW4gPSB2c25wcmludGYoTlVMTCwgMCwgZm10LCBhcmdzKTsKKyAgICB2YV9lbmQoYXJncyk7CisgICAgaWYgKGxlbiA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgLy8gQWxsb2NhdGUgdGhlIHJlcXVpcmVkIHNwYWNlIGFuZCBwcmludGYgdG8gaXQuCisgICAgY2hhciAqc3RyID0gbWFsbG9jKGxlbiArIDEpOworICAgIGlmIChzdHIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgdmFfc3RhcnQoYXJncywgZm10KTsKKyAgICB2c25wcmludGYoc3RyLCBsZW4gKyAxLCBmbXQsIGFyZ3MpOworICAgIHZhX2VuZChhcmdzKTsKKyAgICByZXR1cm4gc3RyOworfQorCisvLyBSZXR1cm4gd2l0aCBhbiBlcnJvciwgcHV0dGluZyBhbiBhbGxvY2F0ZWQgZXJyb3IgbWVzc2FnZSBpbiAqZXJyLiBEb2luZyBhbgorLy8gaW5mbGF0ZUVuZCgpIG9uIGFuIGFscmVhZHkgZW5kZWQgc3RhdGUsIG9yIG9uZSB3aXRoIHN0YXRlIHNldCB0byBaX05VTEwsIGlzCisvLyBwZXJtaXR0ZWQuCisjZGVmaW5lIEJZRSguLi4pIFwKKyAgICBkbyB7IFwKKyAgICAgICAgaW5mbGF0ZUVuZCgmc3RybSk7IFwKKyAgICAgICAgKmVyciA9IGFwcmludGYoX19WQV9BUkdTX18pOyBcCisgICAgICAgIHJldHVybiAxOyBcCisgICAgfSB3aGlsZSAoMCkKKworLy8gQ2h1bmsgc2l6ZSBmb3IgYnVmZmVyZWQgcmVhZHMgYW5kIGZvciBkZWNvbXByZXNzaW9uLiBUd2ljZSB0aGlzIG1hbnkgYnl0ZXMKKy8vIHdpbGwgYmUgYWxsb2NhdGVkIG9uIHRoZSBzdGFjayBieSBnemlwX25vcm1hbGl6ZSgpLiBNdXN0IGZpdCBpbiBhbiB1bnNpZ25lZC4KKyNkZWZpbmUgQ0hVTksgMTYzODQKKworLy8gUmVhZCBhIGd6aXAgc3RyZWFtIGZyb20gaW4gYW5kIHdyaXRlIGFuIGVxdWl2YWxlbnQgbm9ybWFsaXplZCBnemlwIHN0cmVhbSB0bworLy8gb3V0LiBJZiBnaXZlbiBubyBpbnB1dCwgYW4gZW1wdHkgZ3ppcCBzdHJlYW0gd2lsbCBiZSB3cml0dGVuLiBJZiBzdWNjZXNzZnVsLAorLy8gMCBpcyByZXR1cm5lZCwgYW5kICplcnIgaXMgc2V0IHRvIE5VTEwuIE9uIGVycm9yLCAxIGlzIHJldHVybmVkLCB3aGVyZSB0aGUKKy8vIGRldGFpbHMgb2YgdGhlIGVycm9yIGFyZSByZXR1cm5lZCBpbiAqZXJyLCBhIHBvaW50ZXIgdG8gYW4gYWxsb2NhdGVkIHN0cmluZy4KKy8vCisvLyBUaGUgaW5wdXQgbWF5IGJlIGEgc3RyZWFtIHdpdGggbXVsdGlwbGUgZ3ppcCBtZW1iZXJzLCB3aGljaCBpcyBjb252ZXJ0ZWQgdG8KKy8vIGEgc2luZ2xlIGd6aXAgbWVtYmVyIG9uIHRoZSBvdXRwdXQuIEVhY2ggZ3ppcCBtZW1iZXIgaXMgZGVjb21wcmVzc2VkIGF0IHRoZQorLy8gbGV2ZWwgb2YgZGVmbGF0ZSBibG9ja3MuIFRoaXMgZW5hYmxlcyBjbGVhcmluZyB0aGUgbGFzdC1ibG9jayBiaXQsIHNoaWZ0aW5nCisvLyB0aGUgY29tcHJlc3NlZCBkYXRhIHRvIGNvbmNhdGVuYXRlIHRvIHRoZSBwcmV2aW91cyBtZW1iZXIncyBjb21wcmVzc2VkIGRhdGEsCisvLyB3aGljaCBjYW4gZW5kIGF0IGFuIGFyYml0cmFyeSBiaXQgYm91bmRhcnksIGFuZCBpZGVudGlmeWluZyBzdG9yZWQgYmxvY2tzIGluCisvLyBvcmRlciB0byByZXN5bmNocm9uaXplIHRob3NlIHRvIGJ5dGUgYm91bmRhcmllcy4gVGhlIGRlZmxhdGUgY29tcHJlc3NlZCBkYXRhCisvLyBpcyB0ZXJtaW5hdGVkIHdpdGggYSAxMC1iaXQgZW1wdHkgZml4ZWQgYmxvY2suIElmIGFueSBtZW1iZXJzIG9uIHRoZSBpbnB1dAorLy8gZW5kIHdpdGggYSAxMC1iaXQgZW1wdHkgZml4ZWQgYmxvY2ssIHRoZW4gdGhhdCBibG9jayBpcyBleGNpc2VkIGZyb20gdGhlCisvLyBzdHJlYW0uIFRoaXMgYXZvaWRzIGFwcGVuZGluZyBlbXB0eSBmaXhlZCBibG9ja3MgZm9yIGV2ZXJ5IG5vcm1hbGl6YXRpb24sCisvLyBhbmQgYXNzdXJlcyB0aGF0IGd6aXBfbm9ybWFsaXplIGFwcGxpZWQgYSBzZWNvbmQgdGltZSB3aWxsIG5vdCBjaGFuZ2UgdGhlCisvLyBpbnB1dC4gVGhlIHBhZCBiaXRzIGFmdGVyIHN0b3JlZCBibG9jayBoZWFkZXJzIGFuZCBhZnRlciB0aGUgZmluYWwgZGVmbGF0ZQorLy8gYmxvY2sgYXJlIGFsbCBmb3JjZWQgdG8gemVyb3MuCitsb2NhbCBpbnQgZ3ppcF9ub3JtYWxpemUoRklMRSAqaW4sIEZJTEUgKm91dCwgY2hhciAqKmVycikgeworICAgIC8vIGluaXRpYWxpemUgdGhlIGluZmxhdGUgZW5naW5lIHRvIHByb2Nlc3MgYSBnemlwIG1lbWJlcgorICAgIHpfc3RyZWFtIHN0cm07CisgICAgc3RybS56YWxsb2MgPSBaX05VTEw7CisgICAgc3RybS56ZnJlZSA9IFpfTlVMTDsKKyAgICBzdHJtLm9wYXF1ZSA9IFpfTlVMTDsKKyAgICBzdHJtLmF2YWlsX2luID0gMDsKKyAgICBzdHJtLm5leHRfaW4gPSBaX05VTEw7CisgICAgaWYgKGluZmxhdGVJbml0Migmc3RybSwgMTUgKyAxNikgIT0gWl9PSykKKyAgICAgICAgQllFKCJvdXQgb2YgbWVtb3J5Iik7CisKKyAgICAvLyBTdGF0ZSB3aGlsZSBwcm9jZXNzaW5nIHRoZSBpbnB1dCBnemlwIHN0cmVhbS4KKyAgICBlbnVtIHsgICAgICAgICAgICAgIC8vIEJFVFdFRU4gLT4gSEVBRCAtPiBCTE9DSyAtPiBUQUlMIC0+IEJFVFdFRU4gLT4gLi4uCisgICAgICAgIEJFVFdFRU4sICAgICAgICAvLyBiZXR3ZWVuIGd6aXAgbWVtYmVycyAobXVzdCBlbmQgaW4gdGhpcyBzdGF0ZSkKKyAgICAgICAgSEVBRCwgICAgICAgICAgIC8vIHJlYWRpbmcgYSBnemlwIGhlYWRlcgorICAgICAgICBCTE9DSywgICAgICAgICAgLy8gcmVhZGluZyBkZWZsYXRlIGJsb2NrcworICAgICAgICBUQUlMICAgICAgICAgICAgLy8gcmVhZGluZyBhIGd6aXAgdHJhaWxlcgorICAgIH0gc3RhdGUgPSBCRVRXRUVOOyAgICAgICAgICAgICAgLy8gY3VycmVudCBjb21wb25lbnQgYmVpbmcgcHJvY2Vzc2VkCisgICAgdW5zaWduZWQgbG9uZyBjcmMgPSAwOyAgICAgICAgICAvLyBhY2N1bXVsYXRlZCBDUkMgb2YgdW5jb21wcmVzc2VkIGRhdGEKKyAgICB1bnNpZ25lZCBsb25nIGxlbiA9IDA7ICAgICAgICAgIC8vIGFjY3VtdWxhdGVkIGxlbmd0aCBvZiB1bmNvbXByZXNzZWQgZGF0YQorICAgIHVuc2lnbmVkIGxvbmcgYnVmID0gMDsgICAgICAgICAgLy8gZGVmbGF0ZSBzdHJlYW0gYml0IGJ1ZmZlciBvZiBudW0gYml0cworICAgIGludCBudW0gPSAwOyAgICAgICAgICAgICAgICAgICAgLy8gbnVtYmVyIG9mIGJpdHMgaW4gYnVmIChhdCBib3R0b20pCisKKyAgICAvLyBXcml0ZSBhIGNhbm9uaWNhbCBnemlwIGhlYWRlciAobm8gbW9kIHRpbWUsIGZpbGUgbmFtZSwgY29tbWVudCwgZXh0cmEKKyAgICAvLyBibG9jaywgb3IgZXh0cmEgZmxhZ3MsIGFuZCBPUyBpcyBtYXJrZWQgYXMgdW5rbm93bikuCisgICAgZndyaXRlKCJceDFmXHg4Ylx4MDhcMFwwXDBcMFwwXDBceGZmIiwgMSwgMTAsIG91dCk7CisKKyAgICAvLyBQcm9jZXNzIHRoZSBnemlwIHN0cmVhbSBmcm9tIGluIHVudGlsIHJlYWNoaW5nIHRoZSBlbmQgb2YgdGhlIGlucHV0LAorICAgIC8vIGVuY291bnRlcmluZyBpbnZhbGlkIGlucHV0LCBvciBleHBlcmllbmNpbmcgYW4gaS9vIGVycm9yLgorICAgIGludCBtb3JlOyAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJ1ZSBpZiBub3QgYXQgdGhlIGVuZCBvZiB0aGUgaW5wdXQKKyAgICBkbyB7CisgICAgICAgIC8vIFN0YXRlIGluc2lkZSB0aGlzIGxvb3AuCisgICAgICAgIHVuc2lnbmVkIGNoYXIgKnB1dDsgICAgICAgICAvLyBuZXh0IGlucHV0IGJ1ZmZlciBsb2NhdGlvbiB0byBwcm9jZXNzCisgICAgICAgIGludCBwcmV2OyAgICAgICAgICAgICAgICAgICAvLyBudW1iZXIgb2YgYml0cyBmcm9tIHByZXZpb3VzIGJsb2NrIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgYml0IGJ1ZmZlciwgb3IgLTEgaWYgbm90IGF0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3RhcnQgb2YgYSBibG9jaworICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgbWVtYjsgICAgLy8gdW5jb21wcmVzc2VkIGxlbmd0aCBvZiBtZW1iZXIKKyAgICAgICAgc2l6ZV90IHRhaWw7ICAgICAgICAgICAgICAgIC8vIG51bWJlciBvZiB0cmFpbGVyIGJ5dGVzIHJlYWQgKDAuLjgpCisgICAgICAgIHVuc2lnbmVkIGxvbmcgcGFydDsgICAgICAgICAvLyBhY2N1bXVsYXRlZCB0cmFpbGVyIGNvbXBvbmVudAorCisgICAgICAgIC8vIEdldCB0aGUgbmV4dCBjaHVuayBvZiBpbnB1dCBmcm9tIGluLgorICAgICAgICB1bnNpZ25lZCBjaGFyIGRhdFtDSFVOS107CisgICAgICAgIHN0cm0uYXZhaWxfaW4gPSBmcmVhZChkYXQsIDEsIENIVU5LLCBpbik7CisgICAgICAgIGlmIChzdHJtLmF2YWlsX2luID09IDApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgbW9yZSA9IHN0cm0uYXZhaWxfaW4gPT0gQ0hVTks7CisgICAgICAgIHN0cm0ubmV4dF9pbiA9IHB1dCA9IGRhdDsKKworICAgICAgICAvLyBSdW4gdGhhdCBjaHVuayBvZiBpbnB1dCB0aHJvdWdoIHRoZSBpbmZsYXRlIGVuZ2luZSB0byBleGhhdXN0aW9uLgorICAgICAgICBkbyB7CisgICAgICAgICAgICAvLyBBdCB0aGlzIHBvaW50IGl0IGlzIGFzc3VyZWQgdGhhdCBzdHJtLmF2YWlsX2luID4gMC4KKworICAgICAgICAgICAgLy8gSW5mbGF0ZSB1bnRpbCB0aGUgZW5kIG9mIGEgZ3ppcCBjb21wb25lbnQgKGhlYWRlciwgZGVmbGF0ZQorICAgICAgICAgICAgLy8gYmxvY2ssIHRyYWlsZXIpIGlzIHJlYWNoZWQsIG9yIHVudGlsIGFsbCBvZiB0aGUgY2h1bmsgaXMKKyAgICAgICAgICAgIC8vIGNvbnN1bWVkLiBUaGUgcmVzdWx0aW5nIGRlY29tcHJlc3NlZCBkYXRhIGlzIGRpc2NhcmRlZCwgdGhvdWdoCisgICAgICAgICAgICAvLyB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgZGVjb21wcmVzc2VkIGRhdGEgaW4gZWFjaCBtZW1iZXIgaXMKKyAgICAgICAgICAgIC8vIHRyYWNrZWQsIGZvciB0aGUgY2FsY3VsYXRpb24gb2YgdGhlIHRvdGFsIENSQy4KKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAvLyBpbmZsYXRlIGFuZCBoYW5kbGUgYW55IGVycm9ycworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgc2NyYXBbQ0hVTktdOworICAgICAgICAgICAgICAgIHN0cm0uYXZhaWxfb3V0ID0gQ0hVTks7CisgICAgICAgICAgICAgICAgc3RybS5uZXh0X291dCA9IHNjcmFwOworICAgICAgICAgICAgICAgIGludCByZXQgPSBpbmZsYXRlKCZzdHJtLCBaX0JMT0NLKTsKKyAgICAgICAgICAgICAgICBpZiAocmV0ID09IFpfTUVNX0VSUk9SKQorICAgICAgICAgICAgICAgICAgICBCWUUoIm91dCBvZiBtZW1vcnkiKTsKKyAgICAgICAgICAgICAgICBpZiAocmV0ID09IFpfREFUQV9FUlJPUikKKyAgICAgICAgICAgICAgICAgICAgQllFKCJpbnB1dCBpbnZhbGlkOiAlcyIsIHN0cm0ubXNnKTsKKyAgICAgICAgICAgICAgICBpZiAocmV0ICE9IFpfT0sgJiYgcmV0ICE9IFpfQlVGX0VSUk9SICYmIHJldCAhPSBaX1NUUkVBTV9FTkQpCisgICAgICAgICAgICAgICAgICAgIEJZRSgiaW50ZXJuYWwgZXJyb3IiKTsKKworICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgbnVtYmVyIG9mIHVuY29tcHJlc3NlZCBieXRlcyBnZW5lcmF0ZWQgaW4gdGhpcworICAgICAgICAgICAgICAgIC8vIG1lbWJlci4gVGhlIGFjdHVhbCBjb3VudCAobm90IG1vZHVsbyAyXjMyKSBpcyByZXF1aXJlZCB0bworICAgICAgICAgICAgICAgIC8vIGNvcnJlY3RseSBjb21wdXRlIHRoZSB0b3RhbCBDUkMuCisgICAgICAgICAgICAgICAgdW5zaWduZWQgZ290ID0gQ0hVTksgLSBzdHJtLmF2YWlsX291dDsKKyAgICAgICAgICAgICAgICBtZW1iICs9IGdvdDsKKyAgICAgICAgICAgICAgICBpZiAobWVtYiA8IGdvdCkKKyAgICAgICAgICAgICAgICAgICAgQllFKCJvdmVyZmxvdyBlcnJvciIpOworCisgICAgICAgICAgICAgICAgLy8gQ29udGludWUgdG8gcHJvY2VzcyB0aGlzIGNodW5rIHVudGlsIGl0IGlzIGNvbnN1bWVkLCBvcgorICAgICAgICAgICAgICAgIC8vIHVudGlsIHRoZSBlbmQgb2YgYSBjb21wb25lbnQgKGhlYWRlciwgZGVmbGF0ZSBibG9jaywgb3IKKyAgICAgICAgICAgICAgICAvLyB0cmFpbGVyKSBpcyByZWFjaGVkLgorICAgICAgICAgICAgfSB3aGlsZSAoc3RybS5hdmFpbF9vdXQgPT0gMCAmJiAoc3RybS5kYXRhX3R5cGUgJiAweDgwKSA9PSAwKTsKKworICAgICAgICAgICAgLy8gU2luY2Ugc3RybS5hdmFpbF9pbiB3YXMgPiAwIGZvciB0aGUgaW5mbGF0ZSBjYWxsLCBzb21lIGlucHV0IHdhcworICAgICAgICAgICAgLy8ganVzdCBjb25zdW1lZC4gSXQgaXMgdGhlcmVmb3JlIGFzc3VyZWQgdGhhdCBwdXQgPCBzdHJtLm5leHRfaW4uCisKKyAgICAgICAgICAgIC8vIERpc3Bvc2l0aW9uIHRoZSBjb25zdW1lZCBjb21wb25lbnQgb3IgcGFydCBvZiBhIGNvbXBvbmVudC4KKyAgICAgICAgICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEJFVFdFRU46CisgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gSEVBRDsKKyAgICAgICAgICAgICAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIEhFQUQgd2hlbiBzb21lIG9yIGFsbCBvZiB0aGUgaGVhZGVyIGlzCisgICAgICAgICAgICAgICAgICAgIC8vIHByb2Nlc3NlZC4KKworICAgICAgICAgICAgICAgIGNhc2UgSEVBRDoKKyAgICAgICAgICAgICAgICAgICAgLy8gRGlzY2FyZCB0aGUgaGVhZGVyLgorICAgICAgICAgICAgICAgICAgICBpZiAoc3RybS5kYXRhX3R5cGUgJiAweDgwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBFbmQgb2YgaGVhZGVyIHJlYWNoZWQgLS0gZGVmbGF0ZSBibG9ja3MgZm9sbG93LgorICAgICAgICAgICAgICAgICAgICAgICAgcHV0ID0gc3RybS5uZXh0X2luOworICAgICAgICAgICAgICAgICAgICAgICAgcHJldiA9IG51bTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbWIgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBCTE9DSzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgQkxPQ0s6CisgICAgICAgICAgICAgICAgICAgIC8vIENvcHkgdGhlIGRlZmxhdGUgc3RyZWFtIHRvIHRoZSBvdXRwdXQsIGJ1dCB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICAvLyBsYXN0LWJsb2NrLWJpdCBjbGVhcmVkLiBSZS1zeW5jaHJvbml6ZSBzdG9yZWQgYmxvY2sKKyAgICAgICAgICAgICAgICAgICAgLy8gaGVhZGVycyB0byB0aGUgb3V0cHV0IGJ5dGUgYm91bmRhcmllcy4gVGhlIGJ5dGVzIGF0CisgICAgICAgICAgICAgICAgICAgIC8vIHB1dC4uc3RybS5uZXh0X2luLTEgaXMgdGhlIGNvbXByZXNzZWQgZGF0YSB0aGF0IGhhcyBiZWVuCisgICAgICAgICAgICAgICAgICAgIC8vIHByb2Nlc3NlZCBhbmQgaXMgcmVhZHkgdG8gYmUgY29waWVkIHRvIHRoZSBvdXRwdXQuCisKKyAgICAgICAgICAgICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwgaXQgaXMgYXNzdXJlZCB0aGF0IG5ldyBjb21wcmVzc2VkIGRhdGEgaXMKKyAgICAgICAgICAgICAgICAgICAgLy8gYXZhaWxhYmxlLCBpLmUuLCBwdXQgPCBzdHJtLm5leHRfaW4uIElmIHByZXYgaXMgLTEsIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgLy8gdGhhdCBjb21wcmVzc2VkIGRhdGEgc3RhcnRzIGluIHRoZSBtaWRkbGUgb2YgYSBkZWZsYXRlCisgICAgICAgICAgICAgICAgICAgIC8vIGJsb2NrLiBJZiBwcmV2IGlzIG5vdCAtMSwgdGhlbiB0aGUgYml0cyBpbiB0aGUgYml0CisgICAgICAgICAgICAgICAgICAgIC8vIGJ1ZmZlciwgcG9zc2libHkgY29tYmluZWQgd2l0aCB0aGUgYml0cyBpbiAqcHV0LCBjb250YWluCisgICAgICAgICAgICAgICAgICAgIC8vIHRoZSB0aHJlZS1iaXQgaGVhZGVyIG9mIHRoZSBuZXcgZGVmbGF0ZSBibG9jay4gSW4gdGhhdAorICAgICAgICAgICAgICAgICAgICAvLyBjYXNlLCBwcmV2IGlzIHRoZSBudW1iZXIgb2YgYml0cyBmcm9tIHRoZSBwcmV2aW91cyBibG9jaworICAgICAgICAgICAgICAgICAgICAvLyB0aGF0IHJlbWFpbiBpbiB0aGUgYml0IGJ1ZmZlci4gU2luY2UgbnVtIGlzIHRoZSBudW1iZXIKKyAgICAgICAgICAgICAgICAgICAgLy8gb2YgYml0cyBpbiB0aGUgYml0IGJ1ZmZlciwgd2UgaGF2ZSB0aGF0IG51bSAtIHByZXYgaXMKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhlIG51bWJlciBvZiBiaXRzIGZyb20gdGhlIG5ldyBibG9jayBjdXJyZW50bHkgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIC8vIGJpdCBidWZmZXIuCisKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgc3RybS5kYXRhX3R5cGUgJiAweGMwIGlzIDB4ODAsIHRoZW4gdGhlIGxhc3QgYnl0ZSBvZgorICAgICAgICAgICAgICAgICAgICAvLyB0aGUgYXZhaWxhYmxlIGNvbXByZXNzZWQgZGF0YSBpbmNsdWRlcyB0aGUgbGFzdCBiaXRzIG9mCisgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBlbmQgb2YgYSBkZWZsYXRlIGJsb2NrLiBJbiB0aGF0IGNhc2UsIHRoYXQgbGFzdCBieXRlCisgICAgICAgICAgICAgICAgICAgIC8vIGFsc28gaGFzIHN0cm0uZGF0YV90eXBlICYgMHgxZiBiaXRzIG9mIHRoZSBuZXh0IGRlZmxhdGUKKyAgICAgICAgICAgICAgICAgICAgLy8gYmxvY2ssIGluIHRoZSByYW5nZSAwLi43LiBJZiBzdHJtLmRhdGFfdHlwZSAmIDB4YzAgaXMKKyAgICAgICAgICAgICAgICAgICAgLy8gMHhjMCwgdGhlbiB0aGUgbGFzdCBieXRlIG9mIHRoZSBjb21wcmVzc2VkIGRhdGEgaXMgdGhlCisgICAgICAgICAgICAgICAgICAgIC8vIGVuZCBvZiB0aGUgZGVmbGF0ZSBzdHJlYW0sIGZvbGxvd2VkIGJ5IHN0cm0uZGF0YV90eXBlICYKKyAgICAgICAgICAgICAgICAgICAgLy8gMHgxZiBwYWQgYml0cywgYWxzbyBpbiB0aGUgcmFuZ2UgMC4uNy4KKworICAgICAgICAgICAgICAgICAgICAvLyBTZXQgYml0cyB0byB0aGUgbnVtYmVyIG9mIGJpdHMgbm90IHlldCBjb25zdW1lZCBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICAvLyBsYXN0IGJ5dGUuIElmIHdlIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSBibG9jaywgYml0cyBpcworICAgICAgICAgICAgICAgICAgICAvLyBlaXRoZXIgdGhlIG51bWJlciBvZiBiaXRzIGluIHRoZSBsYXN0IGJ5dGUgYmVsb25naW5nIHRvCisgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBuZXh0IGJsb2NrLCBvciB0aGUgbnVtYmVyIG9mIHBhZCBiaXRzIGFmdGVyIHRoZQorICAgICAgICAgICAgICAgICAgICAvLyBmaW5hbCBibG9jay4gSW4gZWl0aGVyIG9mIHRob3NlIGNhc2VzLCBiaXRzIGlzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAvLyByYW5nZSAwLi43LgorICAgICAgICAgICAgICAgICAgICA7ICAgICAgICAgICAgICAgICAgIC8vIChyZXF1aXJlZCBkdWUgdG8gQyBzeW50YXggb2RkaXR5KQorICAgICAgICAgICAgICAgICAgICBpbnQgYml0cyA9IHN0cm0uZGF0YV90eXBlICYgMHgxZjsKKworICAgICAgICAgICAgICAgICAgICBpZiAocHJldiAhPSAtMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgYXJlIGF0IHRoZSBzdGFydCBvZiBhIG5ldyBibG9jay4gQ2xlYXIgdGhlIGxhc3QKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJsb2NrIGJpdCwgYW5kIGNoZWNrIGZvciBzcGVjaWFsIGNhc2VzLiBJZiBpdCBpcyBhCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdG9yZWQgYmxvY2ssIHRoZW4gZW1pdCB0aGUgaGVhZGVyIGFuZCBwYWQgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGJ5dGUgYm91bmRhcnkuIElmIGl0IGlzIGEgZmluYWwsIGVtcHR5IGZpeGVkCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBibG9jaywgdGhlbiBleGNpc2UgaXQuCisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNvbWUgb3IgYWxsIG9mIHRoZSB0aHJlZSBoZWFkZXIgYml0cyBmb3IgdGhpcyBibG9jaworICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWF5IGFscmVhZHkgYmUgaW4gdGhlIGJpdCBidWZmZXIuIExvYWQgYW55IHJlbWFpbmluZworICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGVhZGVyIGJpdHMgaW50byB0aGUgYml0IGJ1ZmZlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudW0gLSBwcmV2IDwgMykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiArPSAodW5zaWduZWQgbG9uZykqcHV0KysgPDwgbnVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bSArPSA4OworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXQgbGFzdCB0byBoYXZlIGEgMSBpbiB0aGUgcG9zaXRpb24gb2YgdGhlIGxhc3QKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJsb2NrIGJpdCBpbiB0aGUgYml0IGJ1ZmZlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbGFzdCA9ICh1bnNpZ25lZCBsb25nKTEgPDwgcHJldjsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoYnVmID4+IHByZXYpICYgNykgPT0gMykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBmaW5hbCBmaXhlZCBibG9jay4gTG9hZCBhdCBsZWFzdCB0ZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBiaXRzIGZyb20gdGhpcyBibG9jaywgaW5jbHVkaW5nIHRoZSBoZWFkZXIsIGludG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgYml0IGJ1ZmZlci4gV2UgYWxyZWFkeSBoYXZlIGF0IGxlYXN0IHRocmVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNvIGF0IG1vc3Qgb25lIG1vcmUgYnl0ZSBuZWVkcyB0byBiZSBsb2FkZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bSAtIHByZXYgPCAxMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHV0ID09IHN0cm0ubmV4dF9pbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5lZWQgdG8gZ28gZ2V0IGFuZCBwcm9jZXNzIG1vcmUgaW5wdXQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSdsbCBlbmQgdXAgYmFjayBoZXJlIHRvIGZpbmlzaCB0aGlzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiArPSAodW5zaWduZWQgbG9uZykqcHV0KysgPDwgbnVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW0gKz0gODsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoYnVmID4+IHByZXYpICYgMHgzZmYpID09IDMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhhdCBmaW5hbCBmaXhlZCBibG9jayBpcyBlbXB0eS4gRGVsZXRlIGl0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIGF2b2lkIGFkZGluZyBhbiBlbXB0eSBibG9jayBldmVyeSB0aW1lIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ3ppcCBzdHJlYW0gaXMgbm9ybWFsaXplZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtID0gcHJldjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmICY9IGxhc3QgLSAxOyAgICAvLyB6ZXJvIHRoZSBwYWQgYml0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCgoYnVmID4+IHByZXYpICYgNikgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBzdG9yZWQgYmxvY2suIEZsdXNoIHRvIHRoZSBuZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZSBib3VuZGFyeSBhZnRlciB0aGUgdGhyZWUtYml0IGhlYWRlci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW0gPSAocHJldiArIDEwKSAmIH43OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiAmPSBsYXN0IC0gMTsgICAgICAgIC8vIHplcm8gdGhlIHBhZCBiaXRzCisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIENsZWFyIHRoZSBsYXN0IGJsb2NrIGJpdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiAmPSB+bGFzdDsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gV3JpdGUgb3V0IGNvbXBsZXRlIGJ5dGVzIGluIHRoZSBiaXQgYnVmZmVyLgorICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG51bSA+PSA4KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0YyhidWYsIG91dCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmID4+PSA4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bSAtPSA4OworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBubyBtb3JlIGJ5dGVzIGxlZnQgdG8gcHJvY2VzcywgdGhlbiB3ZSBoYXZlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zdW1lZCB0aGUgYnl0ZSB0aGF0IGhhZCBiaXRzIGZyb20gdGhlIG5leHQgYmxvY2suCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHV0ID09IHN0cm0ubmV4dF9pbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzID0gMDsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBkb25lIGhhbmRsaW5nIHRoZSBkZWZsYXRlIGJsb2NrIGhlYWRlci4gTm93IGNvcHkKKyAgICAgICAgICAgICAgICAgICAgLy8gYWxsIG9yIGFsbW9zdCBhbGwgb2YgdGhlIHJlbWFpbmluZyBjb21wcmVzc2VkIGRhdGEgdGhhdAorICAgICAgICAgICAgICAgICAgICAvLyBoYXMgYmVlbiBwcm9jZXNzZWQgc28gZmFyLiBEb24ndCBjb3B5IG9uZSBieXRlIGF0IHRoZQorICAgICAgICAgICAgICAgICAgICAvLyBlbmQgaWYgaXQgY29udGFpbnMgYml0cyBmcm9tIHRoZSBuZXh0IGRlZmxhdGUgYmxvY2sgb3IKKyAgICAgICAgICAgICAgICAgICAgLy8gcGFkIGJpdHMgYXQgdGhlIGVuZCBvZiBhIGRlZmxhdGUgYmxvY2suCisKKyAgICAgICAgICAgICAgICAgICAgLy8gbWl4IGlzIDEgaWYgd2UgYXJlIGF0IHRoZSBlbmQgb2YgYSBkZWZsYXRlIGJsb2NrLCBhbmQgaWYKKyAgICAgICAgICAgICAgICAgICAgLy8gc29tZSBvZiB0aGUgYml0cyBpbiB0aGUgbGFzdCBieXRlIGZvbGxvdyB0aGlzIGJsb2NrLiBtaXgKKyAgICAgICAgICAgICAgICAgICAgLy8gaXMgMCBpZiB3ZSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGRlZmxhdGUgYmxvY2ssIGlmIHRoZQorICAgICAgICAgICAgICAgICAgICAvLyBkZWZsYXRlIGJsb2NrIGVuZGVkIG9uIGEgYnl0ZSBib3VuZGFyeSwgb3IgaWYgYWxsIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAvLyBjb21wcmVzc2VkIGRhdGEgcHJvY2Vzc2VkIHNvIGZhciBoYXMgYmVlbiBjb25zdW1lZC4KKyAgICAgICAgICAgICAgICAgICAgaW50IG1peCA9IChzdHJtLmRhdGFfdHlwZSAmIDB4ODApICYmIGJpdHM7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gQ29weSBhbGwgb2YgdGhlIHByb2Nlc3NlZCBjb21wcmVzc2VkIGRhdGEgdG8gdGhlIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgLy8gZXhjZXB0IGZvciB0aGUgbGFzdCBieXRlIGlmIGl0IGNvbnRhaW5zIGJpdHMgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBkZWZsYXRlIGJsb2NrIG9yIHBhZCBiaXRzIGF0IHRoZSBlbmQgb2YgdGhlIGRlZmxhdGUKKyAgICAgICAgICAgICAgICAgICAgLy8gc3RyZWFtLiBDb3B5IHRoZSBkYXRhIGFmdGVyIHNoaWZ0aW5nIGluIG51bSBiaXRzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgLy8gYnVmIGluIGZyb250IG9mIGl0LCBsZWF2aW5nIG51bSBiaXRzIGZyb20gdGhlIGVuZCBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gY29tcHJlc3NlZCBkYXRhIGluIGJ1ZiB3aGVuIGRvbmUuCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmVuZCA9IHN0cm0ubmV4dF9pbiAtIG1peDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHB1dCA8IGVuZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbnNlcnQgbnVtIGJpdHMgZnJvbSBidWYgYmVmb3JlIHRoZSBkYXRhIGJlaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29waWVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmICs9ICh1bnNpZ25lZCkoKnB1dCsrKSA8PCBudW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dGMoYnVmLCBvdXQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYgPj49IDg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAocHV0IDwgZW5kKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vIHNoaWZ0aW5nIG5lZWRlZCAtLSB3cml0ZSBkaXJlY3RseS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmd3JpdGUocHV0LCAxLCBlbmQgLSBwdXQsIG91dCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0ID0gZW5kOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gUHJvY2VzcyB0aGUgbGFzdCBwcm9jZXNzZWQgYnl0ZSBpZiBpdCB3YXNuJ3Qgd3JpdHRlbi4KKyAgICAgICAgICAgICAgICAgICAgaWYgKG1peCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gTG9hZCB0aGUgbGFzdCBieXRlIGludG8gdGhlIGJpdCBidWZmZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBidWYgKz0gKHVuc2lnbmVkKSgqcHV0KyspIDw8IG51bTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG51bSArPSA4OworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RybS5kYXRhX3R5cGUgJiAweDQwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgYXJlIGF0IHRoZSBlbmQgb2YgdGhlIGRlZmxhdGUgc3RyZWFtIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZXJlIGFyZSBiaXRzIHBhZCBiaXRzLiBEaXNjYXJkIHRoZSBwYWQgYml0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCB3cml0ZSBhIGJ5dGUgdG8gdGhlIG91dHB1dCwgaWYgYXZhaWxhYmxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExlYXZlIHRoZSBudW0gYml0cyBsZWZ0IG92ZXIgaW4gYnVmIHRvIHByZXBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byB0aGUgbmV4dCBkZWZsYXRlIHN0cmVhbS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW0gLT0gYml0czsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVtID49IDgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0YyhidWYsIG91dCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bSAtPSA4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYgPj49IDg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm9yY2UgdGhlIHBhZCBiaXRzIGluIHRoZSBiaXQgYnVmZmVyIHRvIHplcm9zLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiAmPSAoKHVuc2lnbmVkIGxvbmcpMSA8PCBudW0pIC0gMTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IG5lZWQgdG8gc2V0IHByZXYgaGVyZSBzaW5jZSBnb2luZyB0byBUQUlMLgorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF0IHRoZSBlbmQgb2YgYW4gaW50ZXJuYWwgZGVmbGF0ZSBibG9jay4gTGVhdmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgbGFzdCBieXRlIGluIHRoZSBiaXQgYnVmZmVyIHRvIGV4YW1pbmUgb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgbmV4dCBlbnRyeSB0byBCTE9DSywgd2hlbiBtb3JlIGJpdHMgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGJsb2NrIHdpbGwgYmUgYXZhaWxhYmxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXYgPSBudW0gLSBiaXRzOyAgICAgIC8vIG51bWJlciBvZiBiaXRzIGluIGJ1ZmZlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZyb20gY3VycmVudCBibG9jaworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgaGF2ZSBhIGJ5dGUgbGVmdCBvdmVyLCBzbyB3ZSBhcmUgaW4gdGhlIG1pZGRsZSBvZgorICAgICAgICAgICAgICAgICAgICAvLyBhIGRlZmxhdGUgYmxvY2ssIG9yIHRoZSBkZWZsYXRlIGJsb2NrIGVuZGVkIG9uIGEgYnl0ZQorICAgICAgICAgICAgICAgICAgICAvLyBib3VuZGFyeS4gU2V0IHByZXYgYXBwcm9wcmlhdGVseSBmb3IgdGhlIG5leHQgZW50cnkgaW50bworICAgICAgICAgICAgICAgICAgICAvLyBCTE9DSy4KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3RybS5kYXRhX3R5cGUgJiAweDgwKQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGJsb2NrIGVuZGVkIG9uIGEgYnl0ZSBib3VuZGFyeSwgc28gbm8gaGVhZGVyCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBiaXRzIGFyZSBpbiB0aGUgYml0IGJ1ZmZlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIHByZXYgPSBudW07CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluIHRoZSBtaWRkbGUgb2YgYSBkZWZsYXRlIGJsb2NrLCBzbyBubyBoZWFkZXIgaGVyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIHByZXYgPSAtMTsKKworICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBmb3IgdGhlIGVuZCBvZiB0aGUgZGVmbGF0ZSBzdHJlYW0uCisgICAgICAgICAgICAgICAgICAgIGlmICgoc3RybS5kYXRhX3R5cGUgJiAweGMwKSA9PSAweGMwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGF0IGVuZHMgdGhlIGRlZmxhdGUgc3RyZWFtIG9uIHRoZSBpbnB1dCBzaWRlLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBhZCBiaXRzIHdlcmUgZGlzY2FyZGVkLCBhbmQgYW55IHJlbWFpbmluZyBiaXRzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBsYXN0IGJsb2NrIGluIHRoZSBzdHJlYW0gYXJlIHNhdmVkIGluIHRoZSBiaXQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ1ZmZlciB0byBwcmVwZW5kIHRvIHRoZSBuZXh0IHN0cmVhbS4gUHJvY2VzcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGd6aXAgdHJhaWxlciBuZXh0LgorICAgICAgICAgICAgICAgICAgICAgICAgdGFpbCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gVEFJTDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVEFJTDoKKyAgICAgICAgICAgICAgICAgICAgLy8gQWNjdW11bGF0ZSBhdmFpbGFibGUgdHJhaWxlciBieXRlcyB0byB1cGRhdGUgdGhlIHRvdGFsCisgICAgICAgICAgICAgICAgICAgIC8vIENSQyBhbmQgdGhlIHRvdGFsIHVuY29tcHJlc3NlZCBsZW5ndGguCisgICAgICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQgPSAocGFydCA+PiA4KSArICgodW5zaWduZWQgbG9uZykoKnB1dCsrKSA8PCAyNCk7CisgICAgICAgICAgICAgICAgICAgICAgICB0YWlsKys7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFpbCA9PSA0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSB0b3RhbCBDUkMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgel9vZmZfdCBsZW4yID0gbWVtYjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVuMiA8IDAgfHwgKHVuc2lnbmVkIGxvbmcgbG9uZylsZW4yICE9IG1lbWIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZRSgib3ZlcmZsb3cgZXJyb3IiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmMgPSBjcmMgPyBjcmMzMl9jb21iaW5lKGNyYywgcGFydCwgbGVuMikgOiBwYXJ0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGFpbCA9PSA4KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSB0b3RhbCB1bmNvbXByZXNzZWQgbGVuZ3RoLiAoSXQncyBvaworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoaXMgc3VtIGlzIGRvbmUgbW9kdWxvIDJeMzIuKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiArPSBwYXJ0OworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXQgdGhlIGVuZCBvZiBhIG1lbWJlci4gU2V0IHVwIHRvIGluZmxhdGUgYW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbW1lZGlhdGVseSBmb2xsb3dpbmcgZ3ppcCBtZW1iZXIuIChJZiB3ZSBtYWRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXQgdGhpcyBmYXIsIHRoZW4gdGhlIHRyYWlsZXIgd2FzIHZhbGlkLikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5mbGF0ZVJlc2V0KCZzdHJtKSAhPSBaX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWUUoImludGVybmFsIGVycm9yIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBCRVRXRUVOOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IHdoaWxlIChwdXQgPCBzdHJtLm5leHRfaW4pOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gUHJvY2VzcyB0aGUgaW5wdXQgYnVmZmVyIHVudGlsIGNvbXBsZXRlbHkgY29uc3VtZWQuCisgICAgICAgIH0gd2hpbGUgKHN0cm0uYXZhaWxfaW4gPiAwKTsKKworICAgICAgICAvLyBQcm9jZXNzIGlucHV0IHVudGlsIGVuZCBvZiBmaWxlLCBpbnZhbGlkIGlucHV0LCBvciBpL28gZXJyb3IuCisgICAgfSB3aGlsZSAobW9yZSk7CisKKyAgICAvLyBEb25lIHdpdGggdGhlIGluZmxhdGUgZW5naW5lLgorICAgIGluZmxhdGVFbmQoJnN0cm0pOworCisgICAgLy8gVmVyaWZ5IHRoZSB2YWxpZGl0eSBvZiB0aGUgaW5wdXQuCisgICAgaWYgKHN0YXRlICE9IEJFVFdFRU4pCisgICAgICAgIEJZRSgiaW5wdXQgaW52YWxpZDogaW5jb21wbGV0ZSBnemlwIHN0cmVhbSIpOworCisgICAgLy8gV3JpdGUgdGhlIHJlbWFpbmluZyBkZWZsYXRlIHN0cmVhbSBiaXRzLCBmb2xsb3dlZCBieSBhIHRlcm1pbmF0aW5nCisgICAgLy8gZGVmbGF0ZSBmaXhlZCBibG9jay4KKyAgICBidWYgKz0gKHVuc2lnbmVkIGxvbmcpMyA8PCBudW07CisgICAgcHV0YyhidWYsIG91dCk7CisgICAgcHV0YyhidWYgPj4gOCwgb3V0KTsKKyAgICBpZiAobnVtID4gNikKKyAgICAgICAgcHV0YygwLCBvdXQpOworCisgICAgLy8gV3JpdGUgdGhlIGd6aXAgdHJhaWxlciwgd2hpY2ggaXMgdGhlIENSQyBhbmQgdGhlIHVuY29tcHJlc3NlZCBsZW5ndGgKKyAgICAvLyBtb2R1bG8gMl4zMiwgYm90aCBpbiBsaXR0bGUtZW5kaWFuIG9yZGVyLgorICAgIHB1dGMoY3JjLCBvdXQpOworICAgIHB1dGMoY3JjID4+IDgsIG91dCk7CisgICAgcHV0YyhjcmMgPj4gMTYsIG91dCk7CisgICAgcHV0YyhjcmMgPj4gMjQsIG91dCk7CisgICAgcHV0YyhsZW4sIG91dCk7CisgICAgcHV0YyhsZW4gPj4gOCwgb3V0KTsKKyAgICBwdXRjKGxlbiA+PiAxNiwgb3V0KTsKKyAgICBwdXRjKGxlbiA+PiAyNCwgb3V0KTsKKyAgICBmZmx1c2gob3V0KTsKKworICAgIC8vIENoZWNrIGZvciBhbnkgaS9vIGVycm9ycy4KKyAgICBpZiAoZmVycm9yKGluKSB8fCBmZXJyb3Iob3V0KSkKKyAgICAgICAgQllFKCJpL28gZXJyb3I6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKworICAgIC8vIEFsbCBnb29kIQorICAgICplcnIgPSBOVUxMOworICAgIHJldHVybiAwOworfQorCisvLyBOb3JtYWxpemUgdGhlIGd6aXAgc3RyZWFtIG9uIHN0ZGluLCB3cml0aW5nIHRoZSByZXN1bHQgdG8gc3Rkb3V0LgoraW50IG1haW4odm9pZCkgeworICAgIC8vIEF2b2lkIGVuZC1vZi1saW5lIGNvbnZlcnNpb25zIG9uIGV2aWwgb3BlcmF0aW5nIHN5c3RlbXMuCisgICAgU0VUX0JJTkFSWV9NT0RFKHN0ZGluKTsKKyAgICBTRVRfQklOQVJZX01PREUoc3Rkb3V0KTsKKworICAgIC8vIE5vcm1hbGl6ZSBmcm9tIHN0ZGluIHRvIHN0ZG91dCwgcmV0dXJuaW5nIDEgb24gZXJyb3IsIDAgaWYgb2suCisgICAgY2hhciAqZXJyOworICAgIGludCByZXQgPSBnemlwX25vcm1hbGl6ZShzdGRpbiwgc3Rkb3V0LCAmZXJyKTsKKyAgICBpZiAocmV0KQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImd6bm9ybSBlcnJvcjogJXNcbiIsIGVycik7CisgICAgZnJlZShlcnIpOworICAgIHJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9zcmMvZXhhbXBsZXMvemxpYl9ob3cuaHRtbCBiL3NyYy9leGFtcGxlcy96bGliX2hvdy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NGZmMWMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvZXhhbXBsZXMvemxpYl9ob3cuaHRtbApAQCAtMCwwICsxLDU0NSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIgorICAiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgorPHRpdGxlPnpsaWIgVXNhZ2UgRXhhbXBsZTwvdGl0bGU+Cis8IS0tICBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgTWFyayBBZGxlci4gIC0tPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0iI0ZGRkZGRiIgdGV4dD0iIzAwMDAwMCIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiMwMEEwMDAiPgorPGgyIGFsaWduPSJjZW50ZXIiPiB6bGliIFVzYWdlIEV4YW1wbGUgPC9oMj4KK1dlIG9mdGVuIGdldCBxdWVzdGlvbnMgYWJvdXQgaG93IHRoZSA8dHQ+ZGVmbGF0ZSgpPC90dD4gYW5kIDx0dD5pbmZsYXRlKCk8L3R0PiBmdW5jdGlvbnMgc2hvdWxkIGJlIHVzZWQuCitVc2VycyB3b25kZXIgd2hlbiB0aGV5IHNob3VsZCBwcm92aWRlIG1vcmUgaW5wdXQsIHdoZW4gdGhleSBzaG91bGQgdXNlIG1vcmUgb3V0cHV0LAord2hhdCB0byBkbyB3aXRoIGEgPHR0PlpfQlVGX0VSUk9SPC90dD4sIGhvdyB0byBtYWtlIHN1cmUgdGhlIHByb2Nlc3MgdGVybWluYXRlcyBwcm9wZXJseSwgYW5kCitzbyBvbi4gIFNvIGZvciB0aG9zZSB3aG8gaGF2ZSByZWFkIDx0dD56bGliLmg8L3R0PiAoYSBmZXcgdGltZXMpLCBhbmQKK3dvdWxkIGxpa2UgZnVydGhlciBlZGlmaWNhdGlvbiwgYmVsb3cgaXMgYW4gYW5ub3RhdGVkIGV4YW1wbGUgaW4gQyBvZiBzaW1wbGUgcm91dGluZXMgdG8gY29tcHJlc3MgYW5kIGRlY29tcHJlc3MKK2Zyb20gYW4gaW5wdXQgZmlsZSB0byBhbiBvdXRwdXQgZmlsZSB1c2luZyA8dHQ+ZGVmbGF0ZSgpPC90dD4gYW5kIDx0dD5pbmZsYXRlKCk8L3R0PiByZXNwZWN0aXZlbHkuICBUaGUKK2Fubm90YXRpb25zIGFyZSBpbnRlcnNwZXJzZWQgYmV0d2VlbiBsaW5lcyBvZiB0aGUgY29kZS4gIFNvIHBsZWFzZSByZWFkIGJldHdlZW4gdGhlIGxpbmVzLgorV2UgaG9wZSB0aGlzIGhlbHBzIGV4cGxhaW4gc29tZSBvZiB0aGUgaW50cmljYWNpZXMgb2YgPGVtPnpsaWI8L2VtPi4KKzxwPgorV2l0aG91dCBmdXJ0aGVyIGFkaWV1LCBoZXJlIGlzIHRoZSBwcm9ncmFtIDxhIGhyZWY9InpwaXBlLmMiPjx0dD56cGlwZS5jPC90dD48L2E+OgorPHByZT48Yj4KKy8qIHpwaXBlLmM6IGV4YW1wbGUgb2YgcHJvcGVyIHVzZSBvZiB6bGliJ3MgaW5mbGF0ZSgpIGFuZCBkZWZsYXRlKCkKKyAgIE5vdCBjb3B5cmlnaHRlZCAtLSBwcm92aWRlZCB0byB0aGUgcHVibGljIGRvbWFpbgorICAgVmVyc2lvbiAxLjQgIDExIERlY2VtYmVyIDIwMDUgIE1hcmsgQWRsZXIgKi8KKworLyogVmVyc2lvbiBoaXN0b3J5OgorICAgMS4wICAzMCBPY3QgMjAwNCAgRmlyc3QgdmVyc2lvbgorICAgMS4xICAgOCBOb3YgMjAwNCAgQWRkIHZvaWQgY2FzdGluZyBmb3IgdW51c2VkIHJldHVybiB2YWx1ZXMKKyAgICAgICAgICAgICAgICAgICAgIFVzZSBzd2l0Y2ggc3RhdGVtZW50IGZvciBpbmZsYXRlKCkgcmV0dXJuIHZhbHVlcworICAgMS4yICAgOSBOb3YgMjAwNCAgQWRkIGFzc2VydGlvbnMgdG8gZG9jdW1lbnQgemxpYiBndWFyYW50ZWVzCisgICAxLjMgICA2IEFwciAyMDA1ICBSZW1vdmUgaW5jb3JyZWN0IGFzc2VydGlvbiBpbiBpbmYoKQorICAgMS40ICAxMSBEZWMgMjAwNSAgQWRkIGhhY2sgdG8gYXZvaWQgTVNET1MgZW5kLW9mLWxpbmUgY29udmVyc2lvbnMKKyAgICAgICAgICAgICAgICAgICAgIEF2b2lkIHNvbWUgY29tcGlsZXIgd2FybmluZ3MgZm9yIGlucHV0IGFuZCBvdXRwdXQgYnVmZmVycworICovCis8L2I+PC9wcmU+PCEtLSAtLT4KK1dlIG5vdyBpbmNsdWRlIHRoZSBoZWFkZXIgZmlsZXMgZm9yIHRoZSByZXF1aXJlZCBkZWZpbml0aW9ucy4gIEZyb20KKzx0dD5zdGRpby5oPC90dD4gd2UgdXNlIDx0dD5mb3BlbigpPC90dD4sIDx0dD5mcmVhZCgpPC90dD4sIDx0dD5md3JpdGUoKTwvdHQ+LAorPHR0PmZlb2YoKTwvdHQ+LCA8dHQ+ZmVycm9yKCk8L3R0PiwgYW5kIDx0dD5mY2xvc2UoKTwvdHQ+IGZvciBmaWxlIGkvbywgYW5kCis8dHQ+ZnB1dHMoKTwvdHQ+IGZvciBlcnJvciBtZXNzYWdlcy4gIEZyb20gPHR0PnN0cmluZy5oPC90dD4gd2UgdXNlCis8dHQ+c3RyY21wKCk8L3R0PiBmb3IgY29tbWFuZCBsaW5lIGFyZ3VtZW50IHByb2Nlc3NpbmcuCitGcm9tIDx0dD5hc3NlcnQuaDwvdHQ+IHdlIHVzZSB0aGUgPHR0PmFzc2VydCgpPC90dD4gbWFjcm8uCitGcm9tIDx0dD56bGliLmg8L3R0Pgord2UgdXNlIHRoZSBiYXNpYyBjb21wcmVzc2lvbiBmdW5jdGlvbnMgPHR0PmRlZmxhdGVJbml0KCk8L3R0PiwKKzx0dD5kZWZsYXRlKCk8L3R0PiwgYW5kIDx0dD5kZWZsYXRlRW5kKCk8L3R0PiwgYW5kIHRoZSBiYXNpYyBkZWNvbXByZXNzaW9uCitmdW5jdGlvbnMgPHR0PmluZmxhdGVJbml0KCk8L3R0PiwgPHR0PmluZmxhdGUoKTwvdHQ+LCBhbmQKKzx0dD5pbmZsYXRlRW5kKCk8L3R0Pi4KKzxwcmU+PGI+CisjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKKyNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKKyNpbmNsdWRlICZsdDthc3NlcnQuaCZndDsKKyNpbmNsdWRlICJ6bGliLmgiCis8L2I+PC9wcmU+PCEtLSAtLT4KK1RoaXMgaXMgYW4gdWdseSBoYWNrIHJlcXVpcmVkIHRvIGF2b2lkIGNvcnJ1cHRpb24gb2YgdGhlIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBvbgorV2luZG93cy9NUy1ET1Mgc3lzdGVtcy4gIFdpdGhvdXQgdGhpcywgdGhvc2Ugc3lzdGVtcyB3b3VsZCBhc3N1bWUgdGhhdCB0aGUgaW5wdXQgYW5kIG91dHB1dAorZmlsZXMgYXJlIHRleHQsIGFuZCB0cnkgdG8gY29udmVydCB0aGUgZW5kLW9mLWxpbmUgY2hhcmFjdGVycyBmcm9tIG9uZSBzdGFuZGFyZCB0bworYW5vdGhlci4gIFRoYXQgd291bGQgY29ycnVwdCBiaW5hcnkgZGF0YSwgYW5kIGluIHBhcnRpY3VsYXIgd291bGQgcmVuZGVyIHRoZSBjb21wcmVzc2VkIGRhdGEgdW51c2FibGUuCitUaGlzIHNldHMgdGhlIGlucHV0IGFuZCBvdXRwdXQgdG8gYmluYXJ5IHdoaWNoIHN1cHByZXNzZXMgdGhlIGVuZC1vZi1saW5lIGNvbnZlcnNpb25zLgorPHR0PlNFVF9CSU5BUllfTU9ERSgpPC90dD4gd2lsbCBiZSB1c2VkIGxhdGVyIG9uIDx0dD5zdGRpbjwvdHQ+IGFuZCA8dHQ+c3Rkb3V0PC90dD4sIGF0IHRoZSBiZWdpbm5pbmcgb2YgPHR0Pm1haW4oKTwvdHQ+LgorPHByZT48Yj4KKyNpZiBkZWZpbmVkKE1TRE9TKSB8fCBkZWZpbmVkKE9TMikgfHwgZGVmaW5lZChXSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKQorIyAgaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKKyMgIGluY2x1ZGUgJmx0O2lvLmgmZ3Q7CisjICBkZWZpbmUgU0VUX0JJTkFSWV9NT0RFKGZpbGUpIHNldG1vZGUoZmlsZW5vKGZpbGUpLCBPX0JJTkFSWSkKKyNlbHNlCisjICBkZWZpbmUgU0VUX0JJTkFSWV9NT0RFKGZpbGUpCisjZW5kaWYKKzwvYj48L3ByZT48IS0tIC0tPgorPHR0PkNIVU5LPC90dD4gaXMgc2ltcGx5IHRoZSBidWZmZXIgc2l6ZSBmb3IgZmVlZGluZyBkYXRhIHRvIGFuZCBwdWxsaW5nIGRhdGEKK2Zyb20gdGhlIDxlbT56bGliPC9lbT4gcm91dGluZXMuICBMYXJnZXIgYnVmZmVyIHNpemVzIHdvdWxkIGJlIG1vcmUgZWZmaWNpZW50LAorZXNwZWNpYWxseSBmb3IgPHR0PmluZmxhdGUoKTwvdHQ+LiAgSWYgdGhlIG1lbW9yeSBpcyBhdmFpbGFibGUsIGJ1ZmZlcnMgc2l6ZXMKK29uIHRoZSBvcmRlciBvZiAxMjhLIG9yIDI1NksgYnl0ZXMgc2hvdWxkIGJlIHVzZWQuCis8cHJlPjxiPgorI2RlZmluZSBDSFVOSyAxNjM4NAorPC9iPjwvcHJlPjwhLS0gLS0+CitUaGUgPHR0PmRlZigpPC90dD4gcm91dGluZSBjb21wcmVzc2VzIGRhdGEgZnJvbSBhbiBpbnB1dCBmaWxlIHRvIGFuIG91dHB1dCBmaWxlLiAgVGhlIG91dHB1dCBkYXRhCit3aWxsIGJlIGluIHRoZSA8ZW0+emxpYjwvZW0+IGZvcm1hdCwgd2hpY2ggaXMgZGlmZmVyZW50IGZyb20gdGhlIDxlbT5nemlwPC9lbT4gb3IgPGVtPnppcDwvZW0+Citmb3JtYXRzLiAgVGhlIDxlbT56bGliPC9lbT4gZm9ybWF0IGhhcyBhIHZlcnkgc21hbGwgaGVhZGVyIG9mIG9ubHkgdHdvIGJ5dGVzIHRvIGlkZW50aWZ5IGl0IGFzCithIDxlbT56bGliPC9lbT4gc3RyZWFtIGFuZCB0byBwcm92aWRlIGRlY29kaW5nIGluZm9ybWF0aW9uLCBhbmQgYSBmb3VyLWJ5dGUgdHJhaWxlciB3aXRoIGEgZmFzdAorY2hlY2sgdmFsdWUgdG8gdmVyaWZ5IHRoZSBpbnRlZ3JpdHkgb2YgdGhlIHVuY29tcHJlc3NlZCBkYXRhIGFmdGVyIGRlY29kaW5nLgorPHByZT48Yj4KKy8qIENvbXByZXNzIGZyb20gZmlsZSBzb3VyY2UgdG8gZmlsZSBkZXN0IHVudGlsIEVPRiBvbiBzb3VyY2UuCisgICBkZWYoKSByZXR1cm5zIFpfT0sgb24gc3VjY2VzcywgWl9NRU1fRVJST1IgaWYgbWVtb3J5IGNvdWxkIG5vdCBiZQorICAgYWxsb2NhdGVkIGZvciBwcm9jZXNzaW5nLCBaX1NUUkVBTV9FUlJPUiBpZiBhbiBpbnZhbGlkIGNvbXByZXNzaW9uCisgICBsZXZlbCBpcyBzdXBwbGllZCwgWl9WRVJTSU9OX0VSUk9SIGlmIHRoZSB2ZXJzaW9uIG9mIHpsaWIuaCBhbmQgdGhlCisgICB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IGxpbmtlZCBkbyBub3QgbWF0Y2gsIG9yIFpfRVJSTk8gaWYgdGhlcmUgaXMKKyAgIGFuIGVycm9yIHJlYWRpbmcgb3Igd3JpdGluZyB0aGUgZmlsZXMuICovCitpbnQgZGVmKEZJTEUgKnNvdXJjZSwgRklMRSAqZGVzdCwgaW50IGxldmVsKQoreworPC9iPjwvcHJlPgorSGVyZSBhcmUgdGhlIGxvY2FsIHZhcmlhYmxlcyBmb3IgPHR0PmRlZigpPC90dD4uICA8dHQ+cmV0PC90dD4gd2lsbCBiZSB1c2VkIGZvciA8ZW0+emxpYjwvZW0+CityZXR1cm4gY29kZXMuICA8dHQ+Zmx1c2g8L3R0PiB3aWxsIGtlZXAgdHJhY2sgb2YgdGhlIGN1cnJlbnQgZmx1c2hpbmcgc3RhdGUgZm9yIDx0dD5kZWZsYXRlKCk8L3R0PiwKK3doaWNoIGlzIGVpdGhlciBubyBmbHVzaGluZywgb3IgZmx1c2ggdG8gY29tcGxldGlvbiBhZnRlciB0aGUgZW5kIG9mIHRoZSBpbnB1dCBmaWxlIGlzIHJlYWNoZWQuCis8dHQ+aGF2ZTwvdHQ+IGlzIHRoZSBhbW91bnQgb2YgZGF0YSByZXR1cm5lZCBmcm9tIDx0dD5kZWZsYXRlKCk8L3R0Pi4gIFRoZSA8dHQ+c3RybTwvdHQ+IHN0cnVjdHVyZQoraXMgdXNlZCB0byBwYXNzIGluZm9ybWF0aW9uIHRvIGFuZCBmcm9tIHRoZSA8ZW0+emxpYjwvZW0+IHJvdXRpbmVzLCBhbmQgdG8gbWFpbnRhaW4gdGhlCis8dHQ+ZGVmbGF0ZSgpPC90dD4gc3RhdGUuICA8dHQ+aW48L3R0PiBhbmQgPHR0Pm91dDwvdHQ+IGFyZSB0aGUgaW5wdXQgYW5kIG91dHB1dCBidWZmZXJzIGZvcgorPHR0PmRlZmxhdGUoKTwvdHQ+LgorPHByZT48Yj4KKyAgICBpbnQgcmV0LCBmbHVzaDsKKyAgICB1bnNpZ25lZCBoYXZlOworICAgIHpfc3RyZWFtIHN0cm07CisgICAgdW5zaWduZWQgY2hhciBpbltDSFVOS107CisgICAgdW5zaWduZWQgY2hhciBvdXRbQ0hVTktdOworPC9iPjwvcHJlPjwhLS0gLS0+CitUaGUgZmlyc3QgdGhpbmcgd2UgZG8gaXMgdG8gaW5pdGlhbGl6ZSB0aGUgPGVtPnpsaWI8L2VtPiBzdGF0ZSBmb3IgY29tcHJlc3Npb24gdXNpbmcKKzx0dD5kZWZsYXRlSW5pdCgpPC90dD4uICBUaGlzIG11c3QgYmUgZG9uZSBiZWZvcmUgdGhlIGZpcnN0IHVzZSBvZiA8dHQ+ZGVmbGF0ZSgpPC90dD4uCitUaGUgPHR0PnphbGxvYzwvdHQ+LCA8dHQ+emZyZWU8L3R0PiwgYW5kIDx0dD5vcGFxdWU8L3R0PiBmaWVsZHMgaW4gdGhlIDx0dD5zdHJtPC90dD4KK3N0cnVjdHVyZSBtdXN0IGJlIGluaXRpYWxpemVkIGJlZm9yZSBjYWxsaW5nIDx0dD5kZWZsYXRlSW5pdCgpPC90dD4uICBIZXJlIHRoZXkgYXJlCitzZXQgdG8gdGhlIDxlbT56bGliPC9lbT4gY29uc3RhbnQgPHR0PlpfTlVMTDwvdHQ+IHRvIHJlcXVlc3QgdGhhdCA8ZW0+emxpYjwvZW0+IHVzZQordGhlIGRlZmF1bHQgbWVtb3J5IGFsbG9jYXRpb24gcm91dGluZXMuICBBbiBhcHBsaWNhdGlvbiBtYXkgYWxzbyBjaG9vc2UgdG8gcHJvdmlkZQorY3VzdG9tIG1lbW9yeSBhbGxvY2F0aW9uIHJvdXRpbmVzIGhlcmUuICA8dHQ+ZGVmbGF0ZUluaXQoKTwvdHQ+IHdpbGwgYWxsb2NhdGUgb24gdGhlCitvcmRlciBvZiAyNTZLIGJ5dGVzIGZvciB0aGUgaW50ZXJuYWwgc3RhdGUuCisoU2VlIDxhIGhyZWY9InpsaWJfdGVjaC5odG1sIj48ZW0+emxpYiBUZWNobmljYWwgRGV0YWlsczwvZW0+PC9hPi4pCis8cD4KKzx0dD5kZWZsYXRlSW5pdCgpPC90dD4gaXMgY2FsbGVkIHdpdGggYSBwb2ludGVyIHRvIHRoZSBzdHJ1Y3R1cmUgdG8gYmUgaW5pdGlhbGl6ZWQgYW5kCit0aGUgY29tcHJlc3Npb24gbGV2ZWwsIHdoaWNoIGlzIGFuIGludGVnZXIgaW4gdGhlIHJhbmdlIG9mIC0xIHRvIDkuICBMb3dlciBjb21wcmVzc2lvbgorbGV2ZWxzIHJlc3VsdCBpbiBmYXN0ZXIgZXhlY3V0aW9uLCBidXQgbGVzcyBjb21wcmVzc2lvbi4gIEhpZ2hlciBsZXZlbHMgcmVzdWx0IGluCitncmVhdGVyIGNvbXByZXNzaW9uLCBidXQgc2xvd2VyIGV4ZWN1dGlvbi4gIFRoZSA8ZW0+emxpYjwvZW0+IGNvbnN0YW50IFpfREVGQVVMVF9DT01QUkVTU0lPTiwKK2VxdWFsIHRvIC0xLAorcHJvdmlkZXMgYSBnb29kIGNvbXByb21pc2UgYmV0d2VlbiBjb21wcmVzc2lvbiBhbmQgc3BlZWQgYW5kIGlzIGVxdWl2YWxlbnQgdG8gbGV2ZWwgNi4KK0xldmVsIDAgYWN0dWFsbHkgZG9lcyBubyBjb21wcmVzc2lvbiBhdCBhbGwsIGFuZCBpbiBmYWN0IGV4cGFuZHMgdGhlIGRhdGEgc2xpZ2h0bHkgdG8gcHJvZHVjZQordGhlIDxlbT56bGliPC9lbT4gZm9ybWF0IChpdCBpcyBub3QgYSBieXRlLWZvci1ieXRlIGNvcHkgb2YgdGhlIGlucHV0KS4KK01vcmUgYWR2YW5jZWQgYXBwbGljYXRpb25zIG9mIDxlbT56bGliPC9lbT4KK21heSB1c2UgPHR0PmRlZmxhdGVJbml0MigpPC90dD4gaGVyZSBpbnN0ZWFkLiAgU3VjaCBhbiBhcHBsaWNhdGlvbiBtYXkgd2FudCB0byByZWR1Y2UgaG93CittdWNoIG1lbW9yeSB3aWxsIGJlIHVzZWQsIGF0IHNvbWUgcHJpY2UgaW4gY29tcHJlc3Npb24uICBPciBpdCBtYXkgbmVlZCB0byByZXF1ZXN0IGEKKzxlbT5nemlwPC9lbT4gaGVhZGVyIGFuZCB0cmFpbGVyIGluc3RlYWQgb2YgYSA8ZW0+emxpYjwvZW0+IGhlYWRlciBhbmQgdHJhaWxlciwgb3IgcmF3CitlbmNvZGluZyB3aXRoIG5vIGhlYWRlciBvciB0cmFpbGVyIGF0IGFsbC4KKzxwPgorV2UgbXVzdCBjaGVjayB0aGUgcmV0dXJuIHZhbHVlIG9mIDx0dD5kZWZsYXRlSW5pdCgpPC90dD4gYWdhaW5zdCB0aGUgPGVtPnpsaWI8L2VtPiBjb25zdGFudAorPHR0PlpfT0s8L3R0PiB0byBtYWtlIHN1cmUgdGhhdCBpdCB3YXMgYWJsZSB0bworYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgaW50ZXJuYWwgc3RhdGUsIGFuZCB0aGF0IHRoZSBwcm92aWRlZCBhcmd1bWVudHMgd2VyZSB2YWxpZC4KKzx0dD5kZWZsYXRlSW5pdCgpPC90dD4gd2lsbCBhbHNvIGNoZWNrIHRoYXQgdGhlIHZlcnNpb24gb2YgPGVtPnpsaWI8L2VtPiB0aGF0IHRoZSA8dHQ+emxpYi5oPC90dD4KK2ZpbGUgY2FtZSBmcm9tIG1hdGNoZXMgdGhlIHZlcnNpb24gb2YgPGVtPnpsaWI8L2VtPiBhY3R1YWxseSBsaW5rZWQgd2l0aCB0aGUgcHJvZ3JhbS4gIFRoaXMKK2lzIGVzcGVjaWFsbHkgaW1wb3J0YW50IGZvciBlbnZpcm9ubWVudHMgaW4gd2hpY2ggPGVtPnpsaWI8L2VtPiBpcyBhIHNoYXJlZCBsaWJyYXJ5LgorPHA+CitOb3RlIHRoYXQgYW4gYXBwbGljYXRpb24gY2FuIGluaXRpYWxpemUgbXVsdGlwbGUsIGluZGVwZW5kZW50IDxlbT56bGliPC9lbT4gc3RyZWFtcywgd2hpY2ggY2FuCitvcGVyYXRlIGluIHBhcmFsbGVsLiAgVGhlIHN0YXRlIGluZm9ybWF0aW9uIG1haW50YWluZWQgaW4gdGhlIHN0cnVjdHVyZSBhbGxvd3MgdGhlIDxlbT56bGliPC9lbT4KK3JvdXRpbmVzIHRvIGJlIHJlZW50cmFudC4KKzxwcmU+PGI+CisgICAgLyogYWxsb2NhdGUgZGVmbGF0ZSBzdGF0ZSAqLworICAgIHN0cm0uemFsbG9jID0gWl9OVUxMOworICAgIHN0cm0uemZyZWUgPSBaX05VTEw7CisgICAgc3RybS5vcGFxdWUgPSBaX05VTEw7CisgICAgcmV0ID0gZGVmbGF0ZUluaXQoJmFtcDtzdHJtLCBsZXZlbCk7CisgICAgaWYgKHJldCAhPSBaX09LKQorICAgICAgICByZXR1cm4gcmV0OworPC9iPjwvcHJlPjwhLS0gLS0+CitXaXRoIHRoZSBwbGVhc2FudHJpZXMgb3V0IG9mIHRoZSB3YXksIG5vdyB3ZSBjYW4gZ2V0IGRvd24gdG8gYnVzaW5lc3MuICBUaGUgb3V0ZXIgPHR0PmRvPC90dD4tbG9vcAorcmVhZHMgYWxsIG9mIHRoZSBpbnB1dCBmaWxlIGFuZCBleGl0cyBhdCB0aGUgYm90dG9tIG9mIHRoZSBsb29wIG9uY2UgZW5kLW9mLWZpbGUgaXMgcmVhY2hlZC4KK1RoaXMgbG9vcCBjb250YWlucyB0aGUgb25seSBjYWxsIG9mIDx0dD5kZWZsYXRlKCk8L3R0Pi4gIFNvIHdlIG11c3QgbWFrZSBzdXJlIHRoYXQgYWxsIG9mIHRoZQoraW5wdXQgZGF0YSBoYXMgYmVlbiBwcm9jZXNzZWQgYW5kIHRoYXQgYWxsIG9mIHRoZSBvdXRwdXQgZGF0YSBoYXMgYmVlbiBnZW5lcmF0ZWQgYW5kIGNvbnN1bWVkCitiZWZvcmUgd2UgZmFsbCBvdXQgb2YgdGhlIGxvb3AgYXQgdGhlIGJvdHRvbS4KKzxwcmU+PGI+CisgICAgLyogY29tcHJlc3MgdW50aWwgZW5kIG9mIGZpbGUgKi8KKyAgICBkbyB7Cis8L2I+PC9wcmU+CitXZSBzdGFydCBvZmYgYnkgcmVhZGluZyBkYXRhIGZyb20gdGhlIGlucHV0IGZpbGUuICBUaGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgaXMgcHV0IGRpcmVjdGx5CitpbnRvIDx0dD5hdmFpbF9pbjwvdHQ+LCBhbmQgYSBwb2ludGVyIHRvIHRob3NlIGJ5dGVzIGlzIHB1dCBpbnRvIDx0dD5uZXh0X2luPC90dD4uICBXZSBhbHNvCitjaGVjayB0byBzZWUgaWYgZW5kLW9mLWZpbGUgb24gdGhlIGlucHV0IGhhcyBiZWVuIHJlYWNoZWQuICBJZiB3ZSBhcmUgYXQgdGhlIGVuZCBvZiBmaWxlLCB0aGVuIDx0dD5mbHVzaDwvdHQ+IGlzIHNldCB0byB0aGUKKzxlbT56bGliPC9lbT4gY29uc3RhbnQgPHR0PlpfRklOSVNIPC90dD4sIHdoaWNoIGlzIGxhdGVyIHBhc3NlZCB0byA8dHQ+ZGVmbGF0ZSgpPC90dD4gdG8KK2luZGljYXRlIHRoYXQgdGhpcyBpcyB0aGUgbGFzdCBjaHVuayBvZiBpbnB1dCBkYXRhIHRvIGNvbXByZXNzLiAgV2UgbmVlZCB0byB1c2UgPHR0PmZlb2YoKTwvdHQ+Cit0byBjaGVjayBmb3IgZW5kLW9mLWZpbGUgYXMgb3Bwb3NlZCB0byBzZWVpbmcgaWYgZmV3ZXIgdGhhbiA8dHQ+Q0hVTks8L3R0PiBieXRlcyBoYXZlIGJlZW4gcmVhZC4gIFRoZQorcmVhc29uIGlzIHRoYXQgaWYgdGhlIGlucHV0IGZpbGUgbGVuZ3RoIGlzIGFuIGV4YWN0IG11bHRpcGxlIG9mIDx0dD5DSFVOSzwvdHQ+LCB3ZSB3aWxsIG1pc3MKK3RoZSBmYWN0IHRoYXQgd2UgZ290IHRvIHRoZSBlbmQtb2YtZmlsZSwgYW5kIG5vdCBrbm93IHRvIHRlbGwgPHR0PmRlZmxhdGUoKTwvdHQ+IHRvIGZpbmlzaAordXAgdGhlIGNvbXByZXNzZWQgc3RyZWFtLiAgSWYgd2UgYXJlIG5vdCB5ZXQgYXQgdGhlIGVuZCBvZiB0aGUgaW5wdXQsIHRoZW4gdGhlIDxlbT56bGliPC9lbT4KK2NvbnN0YW50IDx0dD5aX05PX0ZMVVNIPC90dD4gd2lsbCBiZSBwYXNzZWQgdG8gPHR0PmRlZmxhdGU8L3R0PiB0byBpbmRpY2F0ZSB0aGF0IHdlIGFyZSBzdGlsbAoraW4gdGhlIG1pZGRsZSBvZiB0aGUgdW5jb21wcmVzc2VkIGRhdGEuCis8cD4KK0lmIHRoZXJlIGlzIGFuIGVycm9yIGluIHJlYWRpbmcgZnJvbSB0aGUgaW5wdXQgZmlsZSwgdGhlIHByb2Nlc3MgaXMgYWJvcnRlZCB3aXRoCis8dHQ+ZGVmbGF0ZUVuZCgpPC90dD4gYmVpbmcgY2FsbGVkIHRvIGZyZWUgdGhlIGFsbG9jYXRlZCA8ZW0+emxpYjwvZW0+IHN0YXRlIGJlZm9yZSByZXR1cm5pbmcKK3RoZSBlcnJvci4gIFdlIHdvdWxkbid0IHdhbnQgYSBtZW1vcnkgbGVhaywgbm93IHdvdWxkIHdlPyAgPHR0PmRlZmxhdGVFbmQoKTwvdHQ+IGNhbiBiZSBjYWxsZWQKK2F0IGFueSB0aW1lIGFmdGVyIHRoZSBzdGF0ZSBoYXMgYmVlbiBpbml0aWFsaXplZC4gIE9uY2UgdGhhdCdzIGRvbmUsIDx0dD5kZWZsYXRlSW5pdCgpPC90dD4gKG9yCis8dHQ+ZGVmbGF0ZUluaXQyKCk8L3R0Pikgd291bGQgaGF2ZSB0byBiZSBjYWxsZWQgdG8gc3RhcnQgYSBuZXcgY29tcHJlc3Npb24gcHJvY2Vzcy4gIFRoZXJlIGlzCitubyBwb2ludCBoZXJlIGluIGNoZWNraW5nIHRoZSA8dHQ+ZGVmbGF0ZUVuZCgpPC90dD4gcmV0dXJuIGNvZGUuICBUaGUgZGVhbGxvY2F0aW9uIGNhbid0IGZhaWwuCis8cHJlPjxiPgorICAgICAgICBzdHJtLmF2YWlsX2luID0gZnJlYWQoaW4sIDEsIENIVU5LLCBzb3VyY2UpOworICAgICAgICBpZiAoZmVycm9yKHNvdXJjZSkpIHsKKyAgICAgICAgICAgICh2b2lkKWRlZmxhdGVFbmQoJmFtcDtzdHJtKTsKKyAgICAgICAgICAgIHJldHVybiBaX0VSUk5POworICAgICAgICB9CisgICAgICAgIGZsdXNoID0gZmVvZihzb3VyY2UpID8gWl9GSU5JU0ggOiBaX05PX0ZMVVNIOworICAgICAgICBzdHJtLm5leHRfaW4gPSBpbjsKKzwvYj48L3ByZT48IS0tIC0tPgorVGhlIGlubmVyIDx0dD5kbzwvdHQ+LWxvb3AgcGFzc2VzIG91ciBjaHVuayBvZiBpbnB1dCBkYXRhIHRvIDx0dD5kZWZsYXRlKCk8L3R0PiwgYW5kIHRoZW4KK2tlZXBzIGNhbGxpbmcgPHR0PmRlZmxhdGUoKTwvdHQ+IHVudGlsIGl0IGlzIGRvbmUgcHJvZHVjaW5nIG91dHB1dC4gIE9uY2UgdGhlcmUgaXMgbm8gbW9yZQorbmV3IG91dHB1dCwgPHR0PmRlZmxhdGUoKTwvdHQ+IGlzIGd1YXJhbnRlZWQgdG8gaGF2ZSBjb25zdW1lZCBhbGwgb2YgdGhlIGlucHV0LCBpLmUuLAorPHR0PmF2YWlsX2luPC90dD4gd2lsbCBiZSB6ZXJvLgorPHByZT48Yj4KKyAgICAgICAgLyogcnVuIGRlZmxhdGUoKSBvbiBpbnB1dCB1bnRpbCBvdXRwdXQgYnVmZmVyIG5vdCBmdWxsLCBmaW5pc2gKKyAgICAgICAgICAgY29tcHJlc3Npb24gaWYgYWxsIG9mIHNvdXJjZSBoYXMgYmVlbiByZWFkIGluICovCisgICAgICAgIGRvIHsKKzwvYj48L3ByZT4KK091dHB1dCBzcGFjZSBpcyBwcm92aWRlZCB0byA8dHQ+ZGVmbGF0ZSgpPC90dD4gYnkgc2V0dGluZyA8dHQ+YXZhaWxfb3V0PC90dD4gdG8gdGhlIG51bWJlcgorb2YgYXZhaWxhYmxlIG91dHB1dCBieXRlcyBhbmQgPHR0Pm5leHRfb3V0PC90dD4gdG8gYSBwb2ludGVyIHRvIHRoYXQgc3BhY2UuCis8cHJlPjxiPgorICAgICAgICAgICAgc3RybS5hdmFpbF9vdXQgPSBDSFVOSzsKKyAgICAgICAgICAgIHN0cm0ubmV4dF9vdXQgPSBvdXQ7Cis8L2I+PC9wcmU+CitOb3cgd2UgY2FsbCB0aGUgY29tcHJlc3Npb24gZW5naW5lIGl0c2VsZiwgPHR0PmRlZmxhdGUoKTwvdHQ+LiAgSXQgdGFrZXMgYXMgbWFueSBvZiB0aGUKKzx0dD5hdmFpbF9pbjwvdHQ+IGJ5dGVzIGF0IDx0dD5uZXh0X2luPC90dD4gYXMgaXQgY2FuIHByb2Nlc3MsIGFuZCB3cml0ZXMgYXMgbWFueSBhcworPHR0PmF2YWlsX291dDwvdHQ+IGJ5dGVzIHRvIDx0dD5uZXh0X291dDwvdHQ+LiAgVGhvc2UgY291bnRlcnMgYW5kIHBvaW50ZXJzIGFyZSB0aGVuCit1cGRhdGVkIHBhc3QgdGhlIGlucHV0IGRhdGEgY29uc3VtZWQgYW5kIHRoZSBvdXRwdXQgZGF0YSB3cml0dGVuLiAgSXQgaXMgdGhlIGFtb3VudCBvZgorb3V0cHV0IHNwYWNlIGF2YWlsYWJsZSB0aGF0IG1heSBsaW1pdCBob3cgbXVjaCBpbnB1dCBpcyBjb25zdW1lZC4KK0hlbmNlIHRoZSBpbm5lciBsb29wIHRvIG1ha2Ugc3VyZSB0aGF0CithbGwgb2YgdGhlIGlucHV0IGlzIGNvbnN1bWVkIGJ5IHByb3ZpZGluZyBtb3JlIG91dHB1dCBzcGFjZSBlYWNoIHRpbWUuICBTaW5jZSA8dHQ+YXZhaWxfaW48L3R0PgorYW5kIDx0dD5uZXh0X2luPC90dD4gYXJlIHVwZGF0ZWQgYnkgPHR0PmRlZmxhdGUoKTwvdHQ+LCB3ZSBkb24ndCBoYXZlIHRvIG1lc3Mgd2l0aCB0aG9zZQorYmV0d2VlbiA8dHQ+ZGVmbGF0ZSgpPC90dD4gY2FsbHMgdW50aWwgaXQncyBhbGwgdXNlZCB1cC4KKzxwPgorVGhlIHBhcmFtZXRlcnMgdG8gPHR0PmRlZmxhdGUoKTwvdHQ+IGFyZSBhIHBvaW50ZXIgdG8gdGhlIDx0dD5zdHJtPC90dD4gc3RydWN0dXJlIGNvbnRhaW5pbmcKK3RoZSBpbnB1dCBhbmQgb3V0cHV0IGluZm9ybWF0aW9uIGFuZCB0aGUgaW50ZXJuYWwgY29tcHJlc3Npb24gZW5naW5lIHN0YXRlLCBhbmQgYSBwYXJhbWV0ZXIKK2luZGljYXRpbmcgd2hldGhlciBhbmQgaG93IHRvIGZsdXNoIGRhdGEgdG8gdGhlIG91dHB1dC4gIE5vcm1hbGx5IDx0dD5kZWZsYXRlPC90dD4gd2lsbCBjb25zdW1lCitzZXZlcmFsIEsgYnl0ZXMgb2YgaW5wdXQgZGF0YSBiZWZvcmUgcHJvZHVjaW5nIGFueSBvdXRwdXQgKGV4Y2VwdCBmb3IgdGhlIGhlYWRlciksIGluIG9yZGVyCit0byBhY2N1bXVsYXRlIHN0YXRpc3RpY3Mgb24gdGhlIGRhdGEgZm9yIG9wdGltdW0gY29tcHJlc3Npb24uICBJdCB3aWxsIHRoZW4gcHV0IG91dCBhIGJ1cnN0IG9mCitjb21wcmVzc2VkIGRhdGEsIGFuZCBwcm9jZWVkIHRvIGNvbnN1bWUgbW9yZSBpbnB1dCBiZWZvcmUgdGhlIG5leHQgYnVyc3QuICBFdmVudHVhbGx5LAorPHR0PmRlZmxhdGUoKTwvdHQ+CittdXN0IGJlIHRvbGQgdG8gdGVybWluYXRlIHRoZSBzdHJlYW0sIGNvbXBsZXRlIHRoZSBjb21wcmVzc2lvbiB3aXRoIHByb3ZpZGVkIGlucHV0IGRhdGEsIGFuZAord3JpdGUgb3V0IHRoZSB0cmFpbGVyIGNoZWNrIHZhbHVlLiAgPHR0PmRlZmxhdGUoKTwvdHQ+IHdpbGwgY29udGludWUgdG8gY29tcHJlc3Mgbm9ybWFsbHkgYXMgbG9uZworYXMgdGhlIGZsdXNoIHBhcmFtZXRlciBpcyA8dHQ+Wl9OT19GTFVTSDwvdHQ+LiAgT25jZSB0aGUgPHR0PlpfRklOSVNIPC90dD4gcGFyYW1ldGVyIGlzIHByb3ZpZGVkLAorPHR0PmRlZmxhdGUoKTwvdHQ+IHdpbGwgYmVnaW4gdG8gY29tcGxldGUgdGhlIGNvbXByZXNzZWQgb3V0cHV0IHN0cmVhbS4gIEhvd2V2ZXIgZGVwZW5kaW5nIG9uIGhvdworbXVjaCBvdXRwdXQgc3BhY2UgaXMgcHJvdmlkZWQsIDx0dD5kZWZsYXRlKCk8L3R0PiBtYXkgaGF2ZSB0byBiZSBjYWxsZWQgc2V2ZXJhbCB0aW1lcyB1bnRpbCBpdAoraGFzIHByb3ZpZGVkIHRoZSBjb21wbGV0ZSBjb21wcmVzc2VkIHN0cmVhbSwgZXZlbiBhZnRlciBpdCBoYXMgY29uc3VtZWQgYWxsIG9mIHRoZSBpbnB1dC4gIFRoZSBmbHVzaAorcGFyYW1ldGVyIG11c3QgY29udGludWUgdG8gYmUgPHR0PlpfRklOSVNIPC90dD4gZm9yIHRob3NlIHN1YnNlcXVlbnQgY2FsbHMuCis8cD4KK1RoZXJlIGFyZSBvdGhlciB2YWx1ZXMgb2YgdGhlIGZsdXNoIHBhcmFtZXRlciB0aGF0IGFyZSB1c2VkIGluIG1vcmUgYWR2YW5jZWQgYXBwbGljYXRpb25zLiAgWW91IGNhbgorZm9yY2UgPHR0PmRlZmxhdGUoKTwvdHQ+IHRvIHByb2R1Y2UgYSBidXJzdCBvZiBvdXRwdXQgdGhhdCBlbmNvZGVzIGFsbCBvZiB0aGUgaW5wdXQgZGF0YSBwcm92aWRlZAorc28gZmFyLCBldmVuIGlmIGl0IHdvdWxkbid0IGhhdmUgb3RoZXJ3aXNlLCBmb3IgZXhhbXBsZSB0byBjb250cm9sIGRhdGEgbGF0ZW5jeSBvbiBhIGxpbmsgd2l0aAorY29tcHJlc3NlZCBkYXRhLiAgWW91IGNhbiBhbHNvIGFzayB0aGF0IDx0dD5kZWZsYXRlKCk8L3R0PiBkbyB0aGF0IGFzIHdlbGwgYXMgZXJhc2UgYW55IGhpc3RvcnkgdXAgdG8KK3RoYXQgcG9pbnQgc28gdGhhdCB3aGF0IGZvbGxvd3MgY2FuIGJlIGRlY29tcHJlc3NlZCBpbmRlcGVuZGVudGx5LCBmb3IgZXhhbXBsZSBmb3IgcmFuZG9tIGFjY2VzcworYXBwbGljYXRpb25zLiAgQm90aCByZXF1ZXN0cyB3aWxsIGRlZ3JhZGUgY29tcHJlc3Npb24gYnkgYW4gYW1vdW50IGRlcGVuZGluZyBvbiBob3cgb2Z0ZW4gc3VjaAorcmVxdWVzdHMgYXJlIG1hZGUuCis8cD4KKzx0dD5kZWZsYXRlKCk8L3R0PiBoYXMgYSByZXR1cm4gdmFsdWUgdGhhdCBjYW4gaW5kaWNhdGUgZXJyb3JzLCB5ZXQgd2UgZG8gbm90IGNoZWNrIGl0IGhlcmUuICBXaHkKK25vdD8gIFdlbGwsIGl0IHR1cm5zIG91dCB0aGF0IDx0dD5kZWZsYXRlKCk8L3R0PiBjYW4gZG8gbm8gd3JvbmcgaGVyZS4gIExldCdzIGdvIHRocm91Z2gKKzx0dD5kZWZsYXRlKCk8L3R0PidzIHJldHVybiB2YWx1ZXMgYW5kIGRpc3BlbnNlIHdpdGggdGhlbSBvbmUgYnkgb25lLiAgVGhlIHBvc3NpYmxlIHZhbHVlcyBhcmUKKzx0dD5aX09LPC90dD4sIDx0dD5aX1NUUkVBTV9FTkQ8L3R0PiwgPHR0PlpfU1RSRUFNX0VSUk9SPC90dD4sIG9yIDx0dD5aX0JVRl9FUlJPUjwvdHQ+LiAgPHR0PlpfT0s8L3R0PgoraXMsIHdlbGwsIG9rLiAgPHR0PlpfU1RSRUFNX0VORDwvdHQ+IGlzIGFsc28gb2sgYW5kIHdpbGwgYmUgcmV0dXJuZWQgZm9yIHRoZSBsYXN0IGNhbGwgb2YKKzx0dD5kZWZsYXRlKCk8L3R0Pi4gIFRoaXMgaXMgYWxyZWFkeSBndWFyYW50ZWVkIGJ5IGNhbGxpbmcgPHR0PmRlZmxhdGUoKTwvdHQ+IHdpdGggPHR0PlpfRklOSVNIPC90dD4KK3VudGlsIGl0IGhhcyBubyBtb3JlIG91dHB1dC4gIDx0dD5aX1NUUkVBTV9FUlJPUjwvdHQ+IGlzIG9ubHkgcG9zc2libGUgaWYgdGhlIHN0cmVhbSBpcyBub3QKK2luaXRpYWxpemVkIHByb3Blcmx5LCBidXQgd2UgZGlkIGluaXRpYWxpemUgaXQgcHJvcGVybHkuICBUaGVyZSBpcyBubyBoYXJtIGluIGNoZWNraW5nIGZvcgorPHR0PlpfU1RSRUFNX0VSUk9SPC90dD4gaGVyZSwgZm9yIGV4YW1wbGUgdG8gY2hlY2sgZm9yIHRoZSBwb3NzaWJpbGl0eSB0aGF0IHNvbWUKK290aGVyIHBhcnQgb2YgdGhlIGFwcGxpY2F0aW9uIGluYWR2ZXJ0ZW50bHkgY2xvYmJlcmVkIHRoZSBtZW1vcnkgY29udGFpbmluZyB0aGUgPGVtPnpsaWI8L2VtPiBzdGF0ZS4KKzx0dD5aX0JVRl9FUlJPUjwvdHQ+IHdpbGwgYmUgZXhwbGFpbmVkIGZ1cnRoZXIgYmVsb3csIGJ1dAorc3VmZmljZSBpdCB0byBzYXkgdGhhdCB0aGlzIGlzIHNpbXBseSBhbiBpbmRpY2F0aW9uIHRoYXQgPHR0PmRlZmxhdGUoKTwvdHQ+IGNvdWxkIG5vdCBjb25zdW1lCittb3JlIGlucHV0IG9yIHByb2R1Y2UgbW9yZSBvdXRwdXQuICA8dHQ+ZGVmbGF0ZSgpPC90dD4gY2FuIGJlIGNhbGxlZCBhZ2FpbiB3aXRoIG1vcmUgb3V0cHV0IHNwYWNlCitvciBtb3JlIGF2YWlsYWJsZSBpbnB1dCwgd2hpY2ggaXQgd2lsbCBiZSBpbiB0aGlzIGNvZGUuCis8cHJlPjxiPgorICAgICAgICAgICAgcmV0ID0gZGVmbGF0ZSgmYW1wO3N0cm0sIGZsdXNoKTsgICAgLyogbm8gYmFkIHJldHVybiB2YWx1ZSAqLworICAgICAgICAgICAgYXNzZXJ0KHJldCAhPSBaX1NUUkVBTV9FUlJPUik7ICAvKiBzdGF0ZSBub3QgY2xvYmJlcmVkICovCis8L2I+PC9wcmU+CitOb3cgd2UgY29tcHV0ZSBob3cgbXVjaCBvdXRwdXQgPHR0PmRlZmxhdGUoKTwvdHQ+IHByb3ZpZGVkIG9uIHRoZSBsYXN0IGNhbGwsIHdoaWNoIGlzIHRoZQorZGlmZmVyZW5jZSBiZXR3ZWVuIGhvdyBtdWNoIHNwYWNlIHdhcyBwcm92aWRlZCBiZWZvcmUgdGhlIGNhbGwsIGFuZCBob3cgbXVjaCBvdXRwdXQgc3BhY2UKK2lzIHN0aWxsIGF2YWlsYWJsZSBhZnRlciB0aGUgY2FsbC4gIFRoZW4gdGhhdCBkYXRhLCBpZiBhbnksIGlzIHdyaXR0ZW4gdG8gdGhlIG91dHB1dCBmaWxlLgorV2UgY2FuIHRoZW4gcmV1c2UgdGhlIG91dHB1dCBidWZmZXIgZm9yIHRoZSBuZXh0IGNhbGwgb2YgPHR0PmRlZmxhdGUoKTwvdHQ+LiAgQWdhaW4gaWYgdGhlcmUKK2lzIGEgZmlsZSBpL28gZXJyb3IsIHdlIGNhbGwgPHR0PmRlZmxhdGVFbmQoKTwvdHQ+IGJlZm9yZSByZXR1cm5pbmcgdG8gYXZvaWQgYSBtZW1vcnkgbGVhay4KKzxwcmU+PGI+CisgICAgICAgICAgICBoYXZlID0gQ0hVTksgLSBzdHJtLmF2YWlsX291dDsKKyAgICAgICAgICAgIGlmIChmd3JpdGUob3V0LCAxLCBoYXZlLCBkZXN0KSAhPSBoYXZlIHx8IGZlcnJvcihkZXN0KSkgeworICAgICAgICAgICAgICAgICh2b2lkKWRlZmxhdGVFbmQoJmFtcDtzdHJtKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gWl9FUlJOTzsKKyAgICAgICAgICAgIH0KKzwvYj48L3ByZT4KK1RoZSBpbm5lciA8dHQ+ZG88L3R0Pi1sb29wIGlzIHJlcGVhdGVkIHVudGlsIHRoZSBsYXN0IDx0dD5kZWZsYXRlKCk8L3R0PiBjYWxsIGZhaWxzIHRvIGZpbGwgdGhlCitwcm92aWRlZCBvdXRwdXQgYnVmZmVyLiAgVGhlbiB3ZSBrbm93IHRoYXQgPHR0PmRlZmxhdGUoKTwvdHQ+IGhhcyBkb25lIGFzIG11Y2ggYXMgaXQgY2FuIHdpdGgKK3RoZSBwcm92aWRlZCBpbnB1dCwgYW5kIHRoYXQgYWxsIG9mIHRoYXQgaW5wdXQgaGFzIGJlZW4gY29uc3VtZWQuICBXZSBjYW4gdGhlbiBmYWxsIG91dCBvZiB0aGlzCitsb29wIGFuZCByZXVzZSB0aGUgaW5wdXQgYnVmZmVyLgorPHA+CitUaGUgd2F5IHdlIHRlbGwgdGhhdCA8dHQ+ZGVmbGF0ZSgpPC90dD4gaGFzIG5vIG1vcmUgb3V0cHV0IGlzIGJ5IHNlZWluZyB0aGF0IGl0IGRpZCBub3QgZmlsbAordGhlIG91dHB1dCBidWZmZXIsIGxlYXZpbmcgPHR0PmF2YWlsX291dDwvdHQ+IGdyZWF0ZXIgdGhhbiB6ZXJvLiAgSG93ZXZlciBzdXBwb3NlIHRoYXQKKzx0dD5kZWZsYXRlKCk8L3R0PiBoYXMgbm8gbW9yZSBvdXRwdXQsIGJ1dCBqdXN0IHNvIGhhcHBlbmVkIHRvIGV4YWN0bHkgZmlsbCB0aGUgb3V0cHV0IGJ1ZmZlciEKKzx0dD5hdmFpbF9vdXQ8L3R0PiBpcyB6ZXJvLCBhbmQgd2UgY2FuJ3QgdGVsbCB0aGF0IDx0dD5kZWZsYXRlKCk8L3R0PiBoYXMgZG9uZSBhbGwgaXQgY2FuLgorQXMgZmFyIGFzIHdlIGtub3csIDx0dD5kZWZsYXRlKCk8L3R0PgoraGFzIG1vcmUgb3V0cHV0IGZvciB1cy4gIFNvIHdlIGNhbGwgaXQgYWdhaW4uICBCdXQgbm93IDx0dD5kZWZsYXRlKCk8L3R0PiBwcm9kdWNlcyBubyBvdXRwdXQKK2F0IGFsbCwgYW5kIDx0dD5hdmFpbF9vdXQ8L3R0PiByZW1haW5zIHVuY2hhbmdlZCBhcyA8dHQ+Q0hVTks8L3R0Pi4gIFRoYXQgPHR0PmRlZmxhdGUoKTwvdHQ+IGNhbGwKK3dhc24ndCBhYmxlIHRvIGRvIGFueXRoaW5nLCBlaXRoZXIgY29uc3VtZSBpbnB1dCBvciBwcm9kdWNlIG91dHB1dCwgYW5kIHNvIGl0IHJldHVybnMKKzx0dD5aX0JVRl9FUlJPUjwvdHQ+LiAgKFNlZSwgSSB0b2xkIHlvdSBJJ2QgY292ZXIgdGhpcyBsYXRlci4pICBIb3dldmVyIHRoaXMgaXMgbm90IGEgcHJvYmxlbSBhdAorYWxsLiAgTm93IHdlIGZpbmFsbHkgaGF2ZSB0aGUgZGVzaXJlZCBpbmRpY2F0aW9uIHRoYXQgPHR0PmRlZmxhdGUoKTwvdHQ+IGlzIHJlYWxseSBkb25lLAorYW5kIHNvIHdlIGRyb3Agb3V0IG9mIHRoZSBpbm5lciBsb29wIHRvIHByb3ZpZGUgbW9yZSBpbnB1dCB0byA8dHQ+ZGVmbGF0ZSgpPC90dD4uCis8cD4KK1dpdGggPHR0PmZsdXNoPC90dD4gc2V0IHRvIDx0dD5aX0ZJTklTSDwvdHQ+LCB0aGlzIGZpbmFsIHNldCBvZiA8dHQ+ZGVmbGF0ZSgpPC90dD4gY2FsbHMgd2lsbAorY29tcGxldGUgdGhlIG91dHB1dCBzdHJlYW0uICBPbmNlIHRoYXQgaXMgZG9uZSwgc3Vic2VxdWVudCBjYWxscyBvZiA8dHQ+ZGVmbGF0ZSgpPC90dD4gd291bGQgcmV0dXJuCis8dHQ+Wl9TVFJFQU1fRVJST1I8L3R0PiBpZiB0aGUgZmx1c2ggcGFyYW1ldGVyIGlzIG5vdCA8dHQ+Wl9GSU5JU0g8L3R0PiwgYW5kIGRvIG5vIG1vcmUgcHJvY2Vzc2luZwordW50aWwgdGhlIHN0YXRlIGlzIHJlaW5pdGlhbGl6ZWQuCis8cD4KK1NvbWUgYXBwbGljYXRpb25zIG9mIDxlbT56bGliPC9lbT4gaGF2ZSB0d28gbG9vcHMgdGhhdCBjYWxsIDx0dD5kZWZsYXRlKCk8L3R0PgoraW5zdGVhZCBvZiB0aGUgc2luZ2xlIGlubmVyIGxvb3Agd2UgaGF2ZSBoZXJlLiAgVGhlIGZpcnN0IGxvb3Agd291bGQgY2FsbAord2l0aG91dCBmbHVzaGluZyBhbmQgZmVlZCBhbGwgb2YgdGhlIGRhdGEgdG8gPHR0PmRlZmxhdGUoKTwvdHQ+LiAgVGhlIHNlY29uZCBsb29wIHdvdWxkIGNhbGwKKzx0dD5kZWZsYXRlKCk8L3R0PiB3aXRoIG5vIG1vcmUKK2RhdGEgYW5kIHRoZSA8dHQ+Wl9GSU5JU0g8L3R0PiBwYXJhbWV0ZXIgdG8gY29tcGxldGUgdGhlIHByb2Nlc3MuICBBcyB5b3UgY2FuIHNlZSBmcm9tIHRoaXMKK2V4YW1wbGUsIHRoYXQgY2FuIGJlIGF2b2lkZWQgYnkgc2ltcGx5IGtlZXBpbmcgdHJhY2sgb2YgdGhlIGN1cnJlbnQgZmx1c2ggc3RhdGUuCis8cHJlPjxiPgorICAgICAgICB9IHdoaWxlIChzdHJtLmF2YWlsX291dCA9PSAwKTsKKyAgICAgICAgYXNzZXJ0KHN0cm0uYXZhaWxfaW4gPT0gMCk7ICAgICAvKiBhbGwgaW5wdXQgd2lsbCBiZSB1c2VkICovCis8L2I+PC9wcmU+PCEtLSAtLT4KK05vdyB3ZSBjaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBhbHJlYWR5IHByb2Nlc3NlZCBhbGwgb2YgdGhlIGlucHV0IGZpbGUuICBUaGF0IGluZm9ybWF0aW9uIHdhcworc2F2ZWQgaW4gdGhlIDx0dD5mbHVzaDwvdHQ+IHZhcmlhYmxlLCBzbyB3ZSBzZWUgaWYgdGhhdCB3YXMgc2V0IHRvIDx0dD5aX0ZJTklTSDwvdHQ+LiAgSWYgc28sCit0aGVuIHdlJ3JlIGRvbmUgYW5kIHdlIGZhbGwgb3V0IG9mIHRoZSBvdXRlciBsb29wLiAgV2UncmUgZ3VhcmFudGVlZCB0byBnZXQgPHR0PlpfU1RSRUFNX0VORDwvdHQ+Citmcm9tIHRoZSBsYXN0IDx0dD5kZWZsYXRlKCk8L3R0PiBjYWxsLCBzaW5jZSB3ZSByYW4gaXQgdW50aWwgdGhlIGxhc3QgY2h1bmsgb2YgaW5wdXQgd2FzCitjb25zdW1lZCBhbmQgYWxsIG9mIHRoZSBvdXRwdXQgd2FzIGdlbmVyYXRlZC4KKzxwcmU+PGI+CisgICAgICAgIC8qIGRvbmUgd2hlbiBsYXN0IGRhdGEgaW4gZmlsZSBwcm9jZXNzZWQgKi8KKyAgICB9IHdoaWxlIChmbHVzaCAhPSBaX0ZJTklTSCk7CisgICAgYXNzZXJ0KHJldCA9PSBaX1NUUkVBTV9FTkQpOyAgICAgICAgLyogc3RyZWFtIHdpbGwgYmUgY29tcGxldGUgKi8KKzwvYj48L3ByZT48IS0tIC0tPgorVGhlIHByb2Nlc3MgaXMgY29tcGxldGUsIGJ1dCB3ZSBzdGlsbCBuZWVkIHRvIGRlYWxsb2NhdGUgdGhlIHN0YXRlIHRvIGF2b2lkIGEgbWVtb3J5IGxlYWsKKyhvciByYXRoZXIgbW9yZSBsaWtlIGEgbWVtb3J5IGhlbW9ycmhhZ2UgaWYgeW91IGRpZG4ndCBkbyB0aGlzKS4gIFRoZW4KK2ZpbmFsbHkgd2UgY2FuIHJldHVybiB3aXRoIGEgaGFwcHkgcmV0dXJuIHZhbHVlLgorPHByZT48Yj4KKyAgICAvKiBjbGVhbiB1cCBhbmQgcmV0dXJuICovCisgICAgKHZvaWQpZGVmbGF0ZUVuZCgmYW1wO3N0cm0pOworICAgIHJldHVybiBaX09LOworfQorPC9iPjwvcHJlPjwhLS0gLS0+CitOb3cgd2UgZG8gdGhlIHNhbWUgdGhpbmcgZm9yIGRlY29tcHJlc3Npb24gaW4gdGhlIDx0dD5pbmYoKTwvdHQ+IHJvdXRpbmUuIDx0dD5pbmYoKTwvdHQ+CitkZWNvbXByZXNzZXMgd2hhdCBpcyBob3BlZnVsbHkgYSB2YWxpZCA8ZW0+emxpYjwvZW0+IHN0cmVhbSBmcm9tIHRoZSBpbnB1dCBmaWxlIGFuZCB3cml0ZXMgdGhlCit1bmNvbXByZXNzZWQgZGF0YSB0byB0aGUgb3V0cHV0IGZpbGUuICBNdWNoIG9mIHRoZSBkaXNjdXNzaW9uIGFib3ZlIGZvciA8dHQ+ZGVmKCk8L3R0PgorYXBwbGllcyB0byA8dHQ+aW5mKCk8L3R0PiBhcyB3ZWxsLCBzbyB0aGUgZGlzY3Vzc2lvbiBoZXJlIHdpbGwgZm9jdXMgb24gdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4KK3RoZSB0d28uCis8cHJlPjxiPgorLyogRGVjb21wcmVzcyBmcm9tIGZpbGUgc291cmNlIHRvIGZpbGUgZGVzdCB1bnRpbCBzdHJlYW0gZW5kcyBvciBFT0YuCisgICBpbmYoKSByZXR1cm5zIFpfT0sgb24gc3VjY2VzcywgWl9NRU1fRVJST1IgaWYgbWVtb3J5IGNvdWxkIG5vdCBiZQorICAgYWxsb2NhdGVkIGZvciBwcm9jZXNzaW5nLCBaX0RBVEFfRVJST1IgaWYgdGhlIGRlZmxhdGUgZGF0YSBpcworICAgaW52YWxpZCBvciBpbmNvbXBsZXRlLCBaX1ZFUlNJT05fRVJST1IgaWYgdGhlIHZlcnNpb24gb2YgemxpYi5oIGFuZAorICAgdGhlIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgbGlua2VkIGRvIG5vdCBtYXRjaCwgb3IgWl9FUlJOTyBpZiB0aGVyZQorICAgaXMgYW4gZXJyb3IgcmVhZGluZyBvciB3cml0aW5nIHRoZSBmaWxlcy4gKi8KK2ludCBpbmYoRklMRSAqc291cmNlLCBGSUxFICpkZXN0KQoreworPC9iPjwvcHJlPgorVGhlIGxvY2FsIHZhcmlhYmxlcyBoYXZlIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkgYXMgdGhleSBkbyBmb3IgPHR0PmRlZigpPC90dD4uICBUaGUKK29ubHkgZGlmZmVyZW5jZSBpcyB0aGF0IHRoZXJlIGlzIG5vIDx0dD5mbHVzaDwvdHQ+IHZhcmlhYmxlLCBzaW5jZSA8dHQ+aW5mbGF0ZSgpPC90dD4KK2NhbiB0ZWxsIGZyb20gdGhlIDxlbT56bGliPC9lbT4gc3RyZWFtIGl0c2VsZiB3aGVuIHRoZSBzdHJlYW0gaXMgY29tcGxldGUuCis8cHJlPjxiPgorICAgIGludCByZXQ7CisgICAgdW5zaWduZWQgaGF2ZTsKKyAgICB6X3N0cmVhbSBzdHJtOworICAgIHVuc2lnbmVkIGNoYXIgaW5bQ0hVTktdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0W0NIVU5LXTsKKzwvYj48L3ByZT48IS0tIC0tPgorVGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBzdGF0ZSBpcyB0aGUgc2FtZSwgZXhjZXB0IHRoYXQgdGhlcmUgaXMgbm8gY29tcHJlc3Npb24gbGV2ZWwsCitvZiBjb3Vyc2UsIGFuZCB0d28gbW9yZSBlbGVtZW50cyBvZiB0aGUgc3RydWN0dXJlIGFyZSBpbml0aWFsaXplZC4gIDx0dD5hdmFpbF9pbjwvdHQ+CithbmQgPHR0Pm5leHRfaW48L3R0PiBtdXN0IGJlIGluaXRpYWxpemVkIGJlZm9yZSBjYWxsaW5nIDx0dD5pbmZsYXRlSW5pdCgpPC90dD4uICBUaGlzCitpcyBiZWNhdXNlIHRoZSBhcHBsaWNhdGlvbiBoYXMgdGhlIG9wdGlvbiB0byBwcm92aWRlIHRoZSBzdGFydCBvZiB0aGUgemxpYiBzdHJlYW0gaW4KK29yZGVyIGZvciA8dHQ+aW5mbGF0ZUluaXQoKTwvdHQ+IHRvIGhhdmUgYWNjZXNzIHRvIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb21wcmVzc2lvbgorbWV0aG9kIHRvIGFpZCBpbiBtZW1vcnkgYWxsb2NhdGlvbi4gIEluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIDxlbT56bGliPC9lbT4KKyh1cCB0aHJvdWdoIHZlcnNpb25zIDEuMi54KSwgdGhlIG1ldGhvZC1kZXBlbmRlbnQgbWVtb3J5IGFsbG9jYXRpb25zIGFyZSBkZWZlcnJlZCB0byB0aGUgZmlyc3QgY2FsbCBvZgorPHR0PmluZmxhdGUoKTwvdHQ+IGFueXdheS4gIEhvd2V2ZXIgdGhvc2UgZmllbGRzIG11c3QgYmUgaW5pdGlhbGl6ZWQgc2luY2UgbGF0ZXIgdmVyc2lvbnMKK29mIDxlbT56bGliPC9lbT4gdGhhdCBwcm92aWRlIG1vcmUgY29tcHJlc3Npb24gbWV0aG9kcyBtYXkgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhpcyBpbnRlcmZhY2UuCitJbiBhbnkgY2FzZSwgbm8gZGVjb21wcmVzc2lvbiBpcyBwZXJmb3JtZWQgYnkgPHR0PmluZmxhdGVJbml0KCk8L3R0Piwgc28gdGhlCis8dHQ+YXZhaWxfb3V0PC90dD4gYW5kIDx0dD5uZXh0X291dDwvdHQ+IGZpZWxkcyBkbyBub3QgbmVlZCB0byBiZSBpbml0aWFsaXplZCBiZWZvcmUgY2FsbGluZy4KKzxwPgorSGVyZSA8dHQ+YXZhaWxfaW48L3R0PiBpcyBzZXQgdG8gemVybyBhbmQgPHR0Pm5leHRfaW48L3R0PiBpcyBzZXQgdG8gPHR0PlpfTlVMTDwvdHQ+IHRvCitpbmRpY2F0ZSB0aGF0IG5vIGlucHV0IGRhdGEgaXMgYmVpbmcgcHJvdmlkZWQuCis8cHJlPjxiPgorICAgIC8qIGFsbG9jYXRlIGluZmxhdGUgc3RhdGUgKi8KKyAgICBzdHJtLnphbGxvYyA9IFpfTlVMTDsKKyAgICBzdHJtLnpmcmVlID0gWl9OVUxMOworICAgIHN0cm0ub3BhcXVlID0gWl9OVUxMOworICAgIHN0cm0uYXZhaWxfaW4gPSAwOworICAgIHN0cm0ubmV4dF9pbiA9IFpfTlVMTDsKKyAgICByZXQgPSBpbmZsYXRlSW5pdCgmYW1wO3N0cm0pOworICAgIGlmIChyZXQgIT0gWl9PSykKKyAgICAgICAgcmV0dXJuIHJldDsKKzwvYj48L3ByZT48IS0tIC0tPgorVGhlIG91dGVyIDx0dD5kbzwvdHQ+LWxvb3AgZGVjb21wcmVzc2VzIGlucHV0IHVudGlsIDx0dD5pbmZsYXRlKCk8L3R0PiBpbmRpY2F0ZXMKK3RoYXQgaXQgaGFzIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgY29tcHJlc3NlZCBkYXRhIGFuZCBoYXMgcHJvZHVjZWQgYWxsIG9mIHRoZSB1bmNvbXByZXNzZWQKK291dHB1dC4gIFRoaXMgaXMgaW4gY29udHJhc3QgdG8gPHR0PmRlZigpPC90dD4gd2hpY2ggcHJvY2Vzc2VzIGFsbCBvZiB0aGUgaW5wdXQgZmlsZS4KK0lmIGVuZC1vZi1maWxlIGlzIHJlYWNoZWQgYmVmb3JlIHRoZSBjb21wcmVzc2VkIGRhdGEgc2VsZi10ZXJtaW5hdGVzLCB0aGVuIHRoZSBjb21wcmVzc2VkCitkYXRhIGlzIGluY29tcGxldGUgYW5kIGFuIGVycm9yIGlzIHJldHVybmVkLgorPHByZT48Yj4KKyAgICAvKiBkZWNvbXByZXNzIHVudGlsIGRlZmxhdGUgc3RyZWFtIGVuZHMgb3IgZW5kIG9mIGZpbGUgKi8KKyAgICBkbyB7Cis8L2I+PC9wcmU+CitXZSByZWFkIGlucHV0IGRhdGEgYW5kIHNldCB0aGUgPHR0PnN0cm08L3R0PiBzdHJ1Y3R1cmUgYWNjb3JkaW5nbHkuICBJZiB3ZSd2ZSByZWFjaGVkIHRoZQorZW5kIG9mIHRoZSBpbnB1dCBmaWxlLCB0aGVuIHdlIGxlYXZlIHRoZSBvdXRlciBsb29wIGFuZCByZXBvcnQgYW4gZXJyb3IsIHNpbmNlIHRoZQorY29tcHJlc3NlZCBkYXRhIGlzIGluY29tcGxldGUuICBOb3RlIHRoYXQgd2UgbWF5IHJlYWQgbW9yZSBkYXRhIHRoYW4gaXMgZXZlbnR1YWxseSBjb25zdW1lZAorYnkgPHR0PmluZmxhdGUoKTwvdHQ+LCBpZiB0aGUgaW5wdXQgZmlsZSBjb250aW51ZXMgcGFzdCB0aGUgPGVtPnpsaWI8L2VtPiBzdHJlYW0uCitGb3IgYXBwbGljYXRpb25zIHdoZXJlIDxlbT56bGliPC9lbT4gc3RyZWFtcyBhcmUgZW1iZWRkZWQgaW4gb3RoZXIgZGF0YSwgdGhpcyByb3V0aW5lIHdvdWxkCituZWVkIHRvIGJlIG1vZGlmaWVkIHRvIHJldHVybiB0aGUgdW51c2VkIGRhdGEsIG9yIGF0IGxlYXN0IGluZGljYXRlIGhvdyBtdWNoIG9mIHRoZSBpbnB1dAorZGF0YSB3YXMgbm90IHVzZWQsIHNvIHRoZSBhcHBsaWNhdGlvbiB3b3VsZCBrbm93IHdoZXJlIHRvIHBpY2sgdXAgYWZ0ZXIgdGhlIDxlbT56bGliPC9lbT4gc3RyZWFtLgorPHByZT48Yj4KKyAgICAgICAgc3RybS5hdmFpbF9pbiA9IGZyZWFkKGluLCAxLCBDSFVOSywgc291cmNlKTsKKyAgICAgICAgaWYgKGZlcnJvcihzb3VyY2UpKSB7CisgICAgICAgICAgICAodm9pZClpbmZsYXRlRW5kKCZhbXA7c3RybSk7CisgICAgICAgICAgICByZXR1cm4gWl9FUlJOTzsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3RybS5hdmFpbF9pbiA9PSAwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHN0cm0ubmV4dF9pbiA9IGluOworPC9iPjwvcHJlPjwhLS0gLS0+CitUaGUgaW5uZXIgPHR0PmRvPC90dD4tbG9vcCBoYXMgdGhlIHNhbWUgZnVuY3Rpb24gaXQgZGlkIGluIDx0dD5kZWYoKTwvdHQ+LCB3aGljaCBpcyB0bwora2VlcCBjYWxsaW5nIDx0dD5pbmZsYXRlKCk8L3R0PiB1bnRpbCBoYXMgZ2VuZXJhdGVkIGFsbCBvZiB0aGUgb3V0cHV0IGl0IGNhbiB3aXRoIHRoZQorcHJvdmlkZWQgaW5wdXQuCis8cHJlPjxiPgorICAgICAgICAvKiBydW4gaW5mbGF0ZSgpIG9uIGlucHV0IHVudGlsIG91dHB1dCBidWZmZXIgbm90IGZ1bGwgKi8KKyAgICAgICAgZG8geworPC9iPjwvcHJlPgorSnVzdCBsaWtlIGluIDx0dD5kZWYoKTwvdHQ+LCB0aGUgc2FtZSBvdXRwdXQgc3BhY2UgaXMgcHJvdmlkZWQgZm9yIGVhY2ggY2FsbCBvZiA8dHQ+aW5mbGF0ZSgpPC90dD4uCis8cHJlPjxiPgorICAgICAgICAgICAgc3RybS5hdmFpbF9vdXQgPSBDSFVOSzsKKyAgICAgICAgICAgIHN0cm0ubmV4dF9vdXQgPSBvdXQ7Cis8L2I+PC9wcmU+CitOb3cgd2UgcnVuIHRoZSBkZWNvbXByZXNzaW9uIGVuZ2luZSBpdHNlbGYuICBUaGVyZSBpcyBubyBuZWVkIHRvIGFkanVzdCB0aGUgZmx1c2ggcGFyYW1ldGVyLCBzaW5jZQordGhlIDxlbT56bGliPC9lbT4gZm9ybWF0IGlzIHNlbGYtdGVybWluYXRpbmcuIFRoZSBtYWluIGRpZmZlcmVuY2UgaGVyZSBpcyB0aGF0IHRoZXJlIGFyZQorcmV0dXJuIHZhbHVlcyB0aGF0IHdlIG5lZWQgdG8gcGF5IGF0dGVudGlvbiB0by4gIDx0dD5aX0RBVEFfRVJST1I8L3R0PgoraW5kaWNhdGVzIHRoYXQgPHR0PmluZmxhdGUoKTwvdHQ+IGRldGVjdGVkIGFuIGVycm9yIGluIHRoZSA8ZW0+emxpYjwvZW0+IGNvbXByZXNzZWQgZGF0YSBmb3JtYXQsCit3aGljaCBtZWFucyB0aGF0IGVpdGhlciB0aGUgZGF0YSBpcyBub3QgYSA8ZW0+emxpYjwvZW0+IHN0cmVhbSB0byBiZWdpbiB3aXRoLCBvciB0aGF0IHRoZSBkYXRhIHdhcworY29ycnVwdGVkIHNvbWV3aGVyZSBhbG9uZyB0aGUgd2F5IHNpbmNlIGl0IHdhcyBjb21wcmVzc2VkLiAgVGhlIG90aGVyIGVycm9yIHRvIGJlIHByb2Nlc3NlZCBpcworPHR0PlpfTUVNX0VSUk9SPC90dD4sIHdoaWNoIGNhbiBvY2N1ciBzaW5jZSBtZW1vcnkgYWxsb2NhdGlvbiBpcyBkZWZlcnJlZCB1bnRpbCA8dHQ+aW5mbGF0ZSgpPC90dD4KK25lZWRzIGl0LCB1bmxpa2UgPHR0PmRlZmxhdGUoKTwvdHQ+LCB3aG9zZSBtZW1vcnkgaXMgYWxsb2NhdGVkIGF0IHRoZSBzdGFydCBieSA8dHQ+ZGVmbGF0ZUluaXQoKTwvdHQ+LgorPHA+CitBZHZhbmNlZCBhcHBsaWNhdGlvbnMgbWF5IHVzZQorPHR0PmRlZmxhdGVTZXREaWN0aW9uYXJ5KCk8L3R0PiB0byBwcmltZSA8dHQ+ZGVmbGF0ZSgpPC90dD4gd2l0aCBhIHNldCBvZiBsaWtlbHkgZGF0YSB0byBpbXByb3ZlIHRoZQorZmlyc3QgMzJLIG9yIHNvIG9mIGNvbXByZXNzaW9uLiAgVGhpcyBpcyBub3RlZCBpbiB0aGUgPGVtPnpsaWI8L2VtPiBoZWFkZXIsIHNvIDx0dD5pbmZsYXRlKCk8L3R0PgorcmVxdWVzdHMgdGhhdCB0aGF0IGRpY3Rpb25hcnkgYmUgcHJvdmlkZWQgYmVmb3JlIGl0IGNhbiBzdGFydCB0byBkZWNvbXByZXNzLiAgV2l0aG91dCB0aGUgZGljdGlvbmFyeSwKK2NvcnJlY3QgZGVjb21wcmVzc2lvbiBpcyBub3QgcG9zc2libGUuICBGb3IgdGhpcyByb3V0aW5lLCB3ZSBoYXZlIG5vIGlkZWEgd2hhdCB0aGUgZGljdGlvbmFyeSBpcywKK3NvIHRoZSA8dHQ+Wl9ORUVEX0RJQ1Q8L3R0PiBpbmRpY2F0aW9uIGlzIGNvbnZlcnRlZCB0byBhIDx0dD5aX0RBVEFfRVJST1I8L3R0Pi4KKzxwPgorPHR0PmluZmxhdGUoKTwvdHQ+IGNhbiBhbHNvIHJldHVybiA8dHQ+Wl9TVFJFQU1fRVJST1I8L3R0Piwgd2hpY2ggc2hvdWxkIG5vdCBiZSBwb3NzaWJsZSBoZXJlLAorYnV0IGNvdWxkIGJlIGNoZWNrZWQgZm9yIGFzIG5vdGVkIGFib3ZlIGZvciA8dHQ+ZGVmKCk8L3R0Pi4gIDx0dD5aX0JVRl9FUlJPUjwvdHQ+IGRvZXMgbm90IG5lZWQgdG8gYmUKK2NoZWNrZWQgZm9yIGhlcmUsIGZvciB0aGUgc2FtZSByZWFzb25zIG5vdGVkIGZvciA8dHQ+ZGVmKCk8L3R0Pi4gIDx0dD5aX1NUUkVBTV9FTkQ8L3R0PiB3aWxsIGJlCitjaGVja2VkIGZvciBsYXRlci4KKzxwcmU+PGI+CisgICAgICAgICAgICByZXQgPSBpbmZsYXRlKCZhbXA7c3RybSwgWl9OT19GTFVTSCk7CisgICAgICAgICAgICBhc3NlcnQocmV0ICE9IFpfU1RSRUFNX0VSUk9SKTsgIC8qIHN0YXRlIG5vdCBjbG9iYmVyZWQgKi8KKyAgICAgICAgICAgIHN3aXRjaCAocmV0KSB7CisgICAgICAgICAgICBjYXNlIFpfTkVFRF9ESUNUOgorICAgICAgICAgICAgICAgIHJldCA9IFpfREFUQV9FUlJPUjsgICAgIC8qIGFuZCBmYWxsIHRocm91Z2ggKi8KKyAgICAgICAgICAgIGNhc2UgWl9EQVRBX0VSUk9SOgorICAgICAgICAgICAgY2FzZSBaX01FTV9FUlJPUjoKKyAgICAgICAgICAgICAgICAodm9pZClpbmZsYXRlRW5kKCZhbXA7c3RybSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgICAgIH0KKzwvYj48L3ByZT4KK1RoZSBvdXRwdXQgb2YgPHR0PmluZmxhdGUoKTwvdHQ+IGlzIGhhbmRsZWQgaWRlbnRpY2FsbHkgdG8gdGhhdCBvZiA8dHQ+ZGVmbGF0ZSgpPC90dD4uCis8cHJlPjxiPgorICAgICAgICAgICAgaGF2ZSA9IENIVU5LIC0gc3RybS5hdmFpbF9vdXQ7CisgICAgICAgICAgICBpZiAoZndyaXRlKG91dCwgMSwgaGF2ZSwgZGVzdCkgIT0gaGF2ZSB8fCBmZXJyb3IoZGVzdCkpIHsKKyAgICAgICAgICAgICAgICAodm9pZClpbmZsYXRlRW5kKCZhbXA7c3RybSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFpfRVJSTk87CisgICAgICAgICAgICB9Cis8L2I+PC9wcmU+CitUaGUgaW5uZXIgPHR0PmRvPC90dD4tbG9vcCBlbmRzIHdoZW4gPHR0PmluZmxhdGUoKTwvdHQ+IGhhcyBubyBtb3JlIG91dHB1dCBhcyBpbmRpY2F0ZWQKK2J5IG5vdCBmaWxsaW5nIHRoZSBvdXRwdXQgYnVmZmVyLCBqdXN0IGFzIGZvciA8dHQ+ZGVmbGF0ZSgpPC90dD4uICBJbiB0aGlzIGNhc2UsIHdlIGNhbm5vdAorYXNzZXJ0IHRoYXQgPHR0PnN0cm0uYXZhaWxfaW48L3R0PiB3aWxsIGJlIHplcm8sIHNpbmNlIHRoZSBkZWZsYXRlIHN0cmVhbSBtYXkgZW5kIGJlZm9yZSB0aGUgZmlsZQorZG9lcy4KKzxwcmU+PGI+CisgICAgICAgIH0gd2hpbGUgKHN0cm0uYXZhaWxfb3V0ID09IDApOworPC9iPjwvcHJlPjwhLS0gLS0+CitUaGUgb3V0ZXIgPHR0PmRvPC90dD4tbG9vcCBlbmRzIHdoZW4gPHR0PmluZmxhdGUoKTwvdHQ+IHJlcG9ydHMgdGhhdCBpdCBoYXMgcmVhY2hlZCB0aGUKK2VuZCBvZiB0aGUgaW5wdXQgPGVtPnpsaWI8L2VtPiBzdHJlYW0sIGhhcyBjb21wbGV0ZWQgdGhlIGRlY29tcHJlc3Npb24gYW5kIGludGVncml0eQorY2hlY2ssIGFuZCBoYXMgcHJvdmlkZWQgYWxsIG9mIHRoZSBvdXRwdXQuICBUaGlzIGlzIGluZGljYXRlZCBieSB0aGUgPHR0PmluZmxhdGUoKTwvdHQ+CityZXR1cm4gdmFsdWUgPHR0PlpfU1RSRUFNX0VORDwvdHQ+LiAgVGhlIGlubmVyIGxvb3AgaXMgZ3VhcmFudGVlZCB0byBsZWF2ZSA8dHQ+cmV0PC90dD4KK2VxdWFsIHRvIDx0dD5aX1NUUkVBTV9FTkQ8L3R0PiBpZiB0aGUgbGFzdCBjaHVuayBvZiB0aGUgaW5wdXQgZmlsZSByZWFkIGNvbnRhaW5lZCB0aGUgZW5kCitvZiB0aGUgPGVtPnpsaWI8L2VtPiBzdHJlYW0uICBTbyBpZiB0aGUgcmV0dXJuIHZhbHVlIGlzIG5vdCA8dHQ+Wl9TVFJFQU1fRU5EPC90dD4sIHRoZQorbG9vcCBjb250aW51ZXMgdG8gcmVhZCBtb3JlIGlucHV0LgorPHByZT48Yj4KKyAgICAgICAgLyogZG9uZSB3aGVuIGluZmxhdGUoKSBzYXlzIGl0J3MgZG9uZSAqLworICAgIH0gd2hpbGUgKHJldCAhPSBaX1NUUkVBTV9FTkQpOworPC9iPjwvcHJlPjwhLS0gLS0+CitBdCB0aGlzIHBvaW50LCBkZWNvbXByZXNzaW9uIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQsIG9yIHdlIGJyb2tlIG91dCBvZiB0aGUgbG9vcCBkdWUgdG8gbm8KK21vcmUgZGF0YSBiZWluZyBhdmFpbGFibGUgZnJvbSB0aGUgaW5wdXQgZmlsZS4gIElmIHRoZSBsYXN0IDx0dD5pbmZsYXRlKCk8L3R0PiByZXR1cm4gdmFsdWUKK2lzIG5vdCA8dHQ+Wl9TVFJFQU1fRU5EPC90dD4sIHRoZW4gdGhlIDxlbT56bGliPC9lbT4gc3RyZWFtIHdhcyBpbmNvbXBsZXRlIGFuZCBhIGRhdGEgZXJyb3IKK2lzIHJldHVybmVkLiAgT3RoZXJ3aXNlLCB3ZSByZXR1cm4gd2l0aCBhIGhhcHB5IHJldHVybiB2YWx1ZS4gIE9mIGNvdXJzZSwgPHR0PmluZmxhdGVFbmQoKTwvdHQ+CitpcyBjYWxsZWQgZmlyc3QgdG8gYXZvaWQgYSBtZW1vcnkgbGVhay4KKzxwcmU+PGI+CisgICAgLyogY2xlYW4gdXAgYW5kIHJldHVybiAqLworICAgICh2b2lkKWluZmxhdGVFbmQoJmFtcDtzdHJtKTsKKyAgICByZXR1cm4gcmV0ID09IFpfU1RSRUFNX0VORCA/IFpfT0sgOiBaX0RBVEFfRVJST1I7Cit9Cis8L2I+PC9wcmU+PCEtLSAtLT4KK1RoYXQgZW5kcyB0aGUgcm91dGluZXMgdGhhdCBkaXJlY3RseSB1c2UgPGVtPnpsaWI8L2VtPi4gIFRoZSBmb2xsb3dpbmcgcm91dGluZXMgbWFrZSB0aGlzCithIGNvbW1hbmQtbGluZSBwcm9ncmFtIGJ5IHJ1bm5pbmcgZGF0YSB0aHJvdWdoIHRoZSBhYm92ZSByb3V0aW5lcyBmcm9tIDx0dD5zdGRpbjwvdHQ+IHRvCis8dHQ+c3Rkb3V0PC90dD4sIGFuZCBoYW5kbGluZyBhbnkgZXJyb3JzIHJlcG9ydGVkIGJ5IDx0dD5kZWYoKTwvdHQ+IG9yIDx0dD5pbmYoKTwvdHQ+LgorPHA+Cis8dHQ+emVycigpPC90dD4gaXMgdXNlZCB0byBpbnRlcnByZXQgdGhlIHBvc3NpYmxlIGVycm9yIGNvZGVzIGZyb20gPHR0PmRlZigpPC90dD4KK2FuZCA8dHQ+aW5mKCk8L3R0PiwgYXMgZGV0YWlsZWQgaW4gdGhlaXIgY29tbWVudHMgYWJvdmUsIGFuZCBwcmludCBvdXQgYW4gZXJyb3IgbWVzc2FnZS4KK05vdGUgdGhhdCB0aGVzZSBhcmUgb25seSBhIHN1YnNldCBvZiB0aGUgcG9zc2libGUgcmV0dXJuIHZhbHVlcyBmcm9tIDx0dD5kZWZsYXRlKCk8L3R0PgorYW5kIDx0dD5pbmZsYXRlKCk8L3R0Pi4KKzxwcmU+PGI+CisvKiByZXBvcnQgYSB6bGliIG9yIGkvbyBlcnJvciAqLwordm9pZCB6ZXJyKGludCByZXQpCit7CisgICAgZnB1dHMoInpwaXBlOiAiLCBzdGRlcnIpOworICAgIHN3aXRjaCAocmV0KSB7CisgICAgY2FzZSBaX0VSUk5POgorICAgICAgICBpZiAoZmVycm9yKHN0ZGluKSkKKyAgICAgICAgICAgIGZwdXRzKCJlcnJvciByZWFkaW5nIHN0ZGluXG4iLCBzdGRlcnIpOworICAgICAgICBpZiAoZmVycm9yKHN0ZG91dCkpCisgICAgICAgICAgICBmcHV0cygiZXJyb3Igd3JpdGluZyBzdGRvdXRcbiIsIHN0ZGVycik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWl9TVFJFQU1fRVJST1I6CisgICAgICAgIGZwdXRzKCJpbnZhbGlkIGNvbXByZXNzaW9uIGxldmVsXG4iLCBzdGRlcnIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFpfREFUQV9FUlJPUjoKKyAgICAgICAgZnB1dHMoImludmFsaWQgb3IgaW5jb21wbGV0ZSBkZWZsYXRlIGRhdGFcbiIsIHN0ZGVycik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWl9NRU1fRVJST1I6CisgICAgICAgIGZwdXRzKCJvdXQgb2YgbWVtb3J5XG4iLCBzdGRlcnIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFpfVkVSU0lPTl9FUlJPUjoKKyAgICAgICAgZnB1dHMoInpsaWIgdmVyc2lvbiBtaXNtYXRjaCFcbiIsIHN0ZGVycik7CisgICAgfQorfQorPC9iPjwvcHJlPjwhLS0gLS0+CitIZXJlIGlzIHRoZSA8dHQ+bWFpbigpPC90dD4gcm91dGluZSB1c2VkIHRvIHRlc3QgPHR0PmRlZigpPC90dD4gYW5kIDx0dD5pbmYoKTwvdHQ+LiAgVGhlCis8dHQ+enBpcGU8L3R0PiBjb21tYW5kIGlzIHNpbXBseSBhIGNvbXByZXNzaW9uIHBpcGUgZnJvbSA8dHQ+c3RkaW48L3R0PiB0byA8dHQ+c3Rkb3V0PC90dD4sIGlmCitubyBhcmd1bWVudHMgYXJlIGdpdmVuLCBvciBpdCBpcyBhIGRlY29tcHJlc3Npb24gcGlwZSBpZiA8dHQ+enBpcGUgLWQ8L3R0PiBpcyB1c2VkLiAgSWYgYW55IG90aGVyCithcmd1bWVudHMgYXJlIHByb3ZpZGVkLCBubyBjb21wcmVzc2lvbiBvciBkZWNvbXByZXNzaW9uIGlzIHBlcmZvcm1lZC4gIEluc3RlYWQgYSB1c2FnZQorbWVzc2FnZSBpcyBkaXNwbGF5ZWQuICBFeGFtcGxlcyBhcmUgPHR0PnpwaXBlIDwgZm9vLnR4dCA+IGZvby50eHQuejwvdHQ+IHRvIGNvbXByZXNzLCBhbmQKKzx0dD56cGlwZSAtZCA8IGZvby50eHQueiA+IGZvby50eHQ8L3R0PiB0byBkZWNvbXByZXNzLgorPHByZT48Yj4KKy8qIGNvbXByZXNzIG9yIGRlY29tcHJlc3MgZnJvbSBzdGRpbiB0byBzdGRvdXQgKi8KK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBpbnQgcmV0OworCisgICAgLyogYXZvaWQgZW5kLW9mLWxpbmUgY29udmVyc2lvbnMgKi8KKyAgICBTRVRfQklOQVJZX01PREUoc3RkaW4pOworICAgIFNFVF9CSU5BUllfTU9ERShzdGRvdXQpOworCisgICAgLyogZG8gY29tcHJlc3Npb24gaWYgbm8gYXJndW1lbnRzICovCisgICAgaWYgKGFyZ2MgPT0gMSkgeworICAgICAgICByZXQgPSBkZWYoc3RkaW4sIHN0ZG91dCwgWl9ERUZBVUxUX0NPTVBSRVNTSU9OKTsKKyAgICAgICAgaWYgKHJldCAhPSBaX09LKQorICAgICAgICAgICAgemVycihyZXQpOworICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKworICAgIC8qIGRvIGRlY29tcHJlc3Npb24gaWYgLWQgc3BlY2lmaWVkICovCisgICAgZWxzZSBpZiAoYXJnYyA9PSAyICZhbXA7JmFtcDsgc3RyY21wKGFyZ3ZbMV0sICItZCIpID09IDApIHsKKyAgICAgICAgcmV0ID0gaW5mKHN0ZGluLCBzdGRvdXQpOworICAgICAgICBpZiAocmV0ICE9IFpfT0spCisgICAgICAgICAgICB6ZXJyKHJldCk7CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisgICAgLyogb3RoZXJ3aXNlLCByZXBvcnQgdXNhZ2UgKi8KKyAgICBlbHNlIHsKKyAgICAgICAgZnB1dHMoInpwaXBlIHVzYWdlOiB6cGlwZSBbLWRdICZsdDsgc291cmNlICZndDsgZGVzdFxuIiwgc3RkZXJyKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorfQorPC9iPjwvcHJlPgorPGhyPgorPGk+Q29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IGJ5IE1hcmsgQWRsZXI8YnI+TGFzdCBtb2RpZmllZCAxMSBEZWNlbWJlciAyMDA1PC9pPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvc3JjL2V4YW1wbGVzL3pwaXBlLmMgYi9zcmMvZXhhbXBsZXMvenBpcGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzUzNWQxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2V4YW1wbGVzL3pwaXBlLmMKQEAgLTAsMCArMSwyMDUgQEAKKy8qIHpwaXBlLmM6IGV4YW1wbGUgb2YgcHJvcGVyIHVzZSBvZiB6bGliJ3MgaW5mbGF0ZSgpIGFuZCBkZWZsYXRlKCkKKyAgIE5vdCBjb3B5cmlnaHRlZCAtLSBwcm92aWRlZCB0byB0aGUgcHVibGljIGRvbWFpbgorICAgVmVyc2lvbiAxLjQgIDExIERlY2VtYmVyIDIwMDUgIE1hcmsgQWRsZXIgKi8KKworLyogVmVyc2lvbiBoaXN0b3J5OgorICAgMS4wICAzMCBPY3QgMjAwNCAgRmlyc3QgdmVyc2lvbgorICAgMS4xICAgOCBOb3YgMjAwNCAgQWRkIHZvaWQgY2FzdGluZyBmb3IgdW51c2VkIHJldHVybiB2YWx1ZXMKKyAgICAgICAgICAgICAgICAgICAgIFVzZSBzd2l0Y2ggc3RhdGVtZW50IGZvciBpbmZsYXRlKCkgcmV0dXJuIHZhbHVlcworICAgMS4yICAgOSBOb3YgMjAwNCAgQWRkIGFzc2VydGlvbnMgdG8gZG9jdW1lbnQgemxpYiBndWFyYW50ZWVzCisgICAxLjMgICA2IEFwciAyMDA1ICBSZW1vdmUgaW5jb3JyZWN0IGFzc2VydGlvbiBpbiBpbmYoKQorICAgMS40ICAxMSBEZWMgMjAwNSAgQWRkIGhhY2sgdG8gYXZvaWQgTVNET1MgZW5kLW9mLWxpbmUgY29udmVyc2lvbnMKKyAgICAgICAgICAgICAgICAgICAgIEF2b2lkIHNvbWUgY29tcGlsZXIgd2FybmluZ3MgZm9yIGlucHV0IGFuZCBvdXRwdXQgYnVmZmVycworICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgInpsaWIuaCIKKworI2lmIGRlZmluZWQoTVNET1MpIHx8IGRlZmluZWQoT1MyKSB8fCBkZWZpbmVkKFdJTjMyKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pCisjICBpbmNsdWRlIDxmY250bC5oPgorIyAgaW5jbHVkZSA8aW8uaD4KKyMgIGRlZmluZSBTRVRfQklOQVJZX01PREUoZmlsZSkgc2V0bW9kZShmaWxlbm8oZmlsZSksIE9fQklOQVJZKQorI2Vsc2UKKyMgIGRlZmluZSBTRVRfQklOQVJZX01PREUoZmlsZSkKKyNlbmRpZgorCisjZGVmaW5lIENIVU5LIDE2Mzg0CisKKy8qIENvbXByZXNzIGZyb20gZmlsZSBzb3VyY2UgdG8gZmlsZSBkZXN0IHVudGlsIEVPRiBvbiBzb3VyY2UuCisgICBkZWYoKSByZXR1cm5zIFpfT0sgb24gc3VjY2VzcywgWl9NRU1fRVJST1IgaWYgbWVtb3J5IGNvdWxkIG5vdCBiZQorICAgYWxsb2NhdGVkIGZvciBwcm9jZXNzaW5nLCBaX1NUUkVBTV9FUlJPUiBpZiBhbiBpbnZhbGlkIGNvbXByZXNzaW9uCisgICBsZXZlbCBpcyBzdXBwbGllZCwgWl9WRVJTSU9OX0VSUk9SIGlmIHRoZSB2ZXJzaW9uIG9mIHpsaWIuaCBhbmQgdGhlCisgICB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IGxpbmtlZCBkbyBub3QgbWF0Y2gsIG9yIFpfRVJSTk8gaWYgdGhlcmUgaXMKKyAgIGFuIGVycm9yIHJlYWRpbmcgb3Igd3JpdGluZyB0aGUgZmlsZXMuICovCitpbnQgZGVmKEZJTEUgKnNvdXJjZSwgRklMRSAqZGVzdCwgaW50IGxldmVsKQoreworICAgIGludCByZXQsIGZsdXNoOworICAgIHVuc2lnbmVkIGhhdmU7CisgICAgel9zdHJlYW0gc3RybTsKKyAgICB1bnNpZ25lZCBjaGFyIGluW0NIVU5LXTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dFtDSFVOS107CisKKyAgICAvKiBhbGxvY2F0ZSBkZWZsYXRlIHN0YXRlICovCisgICAgc3RybS56YWxsb2MgPSBaX05VTEw7CisgICAgc3RybS56ZnJlZSA9IFpfTlVMTDsKKyAgICBzdHJtLm9wYXF1ZSA9IFpfTlVMTDsKKyAgICByZXQgPSBkZWZsYXRlSW5pdCgmc3RybSwgbGV2ZWwpOworICAgIGlmIChyZXQgIT0gWl9PSykKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIC8qIGNvbXByZXNzIHVudGlsIGVuZCBvZiBmaWxlICovCisgICAgZG8geworICAgICAgICBzdHJtLmF2YWlsX2luID0gZnJlYWQoaW4sIDEsIENIVU5LLCBzb3VyY2UpOworICAgICAgICBpZiAoZmVycm9yKHNvdXJjZSkpIHsKKyAgICAgICAgICAgICh2b2lkKWRlZmxhdGVFbmQoJnN0cm0pOworICAgICAgICAgICAgcmV0dXJuIFpfRVJSTk87CisgICAgICAgIH0KKyAgICAgICAgZmx1c2ggPSBmZW9mKHNvdXJjZSkgPyBaX0ZJTklTSCA6IFpfTk9fRkxVU0g7CisgICAgICAgIHN0cm0ubmV4dF9pbiA9IGluOworCisgICAgICAgIC8qIHJ1biBkZWZsYXRlKCkgb24gaW5wdXQgdW50aWwgb3V0cHV0IGJ1ZmZlciBub3QgZnVsbCwgZmluaXNoCisgICAgICAgICAgIGNvbXByZXNzaW9uIGlmIGFsbCBvZiBzb3VyY2UgaGFzIGJlZW4gcmVhZCBpbiAqLworICAgICAgICBkbyB7CisgICAgICAgICAgICBzdHJtLmF2YWlsX291dCA9IENIVU5LOworICAgICAgICAgICAgc3RybS5uZXh0X291dCA9IG91dDsKKyAgICAgICAgICAgIHJldCA9IGRlZmxhdGUoJnN0cm0sIGZsdXNoKTsgICAgLyogbm8gYmFkIHJldHVybiB2YWx1ZSAqLworICAgICAgICAgICAgYXNzZXJ0KHJldCAhPSBaX1NUUkVBTV9FUlJPUik7ICAvKiBzdGF0ZSBub3QgY2xvYmJlcmVkICovCisgICAgICAgICAgICBoYXZlID0gQ0hVTksgLSBzdHJtLmF2YWlsX291dDsKKyAgICAgICAgICAgIGlmIChmd3JpdGUob3V0LCAxLCBoYXZlLCBkZXN0KSAhPSBoYXZlIHx8IGZlcnJvcihkZXN0KSkgeworICAgICAgICAgICAgICAgICh2b2lkKWRlZmxhdGVFbmQoJnN0cm0pOworICAgICAgICAgICAgICAgIHJldHVybiBaX0VSUk5POworICAgICAgICAgICAgfQorICAgICAgICB9IHdoaWxlIChzdHJtLmF2YWlsX291dCA9PSAwKTsKKyAgICAgICAgYXNzZXJ0KHN0cm0uYXZhaWxfaW4gPT0gMCk7ICAgICAvKiBhbGwgaW5wdXQgd2lsbCBiZSB1c2VkICovCisKKyAgICAgICAgLyogZG9uZSB3aGVuIGxhc3QgZGF0YSBpbiBmaWxlIHByb2Nlc3NlZCAqLworICAgIH0gd2hpbGUgKGZsdXNoICE9IFpfRklOSVNIKTsKKyAgICBhc3NlcnQocmV0ID09IFpfU1RSRUFNX0VORCk7ICAgICAgICAvKiBzdHJlYW0gd2lsbCBiZSBjb21wbGV0ZSAqLworCisgICAgLyogY2xlYW4gdXAgYW5kIHJldHVybiAqLworICAgICh2b2lkKWRlZmxhdGVFbmQoJnN0cm0pOworICAgIHJldHVybiBaX09LOworfQorCisvKiBEZWNvbXByZXNzIGZyb20gZmlsZSBzb3VyY2UgdG8gZmlsZSBkZXN0IHVudGlsIHN0cmVhbSBlbmRzIG9yIEVPRi4KKyAgIGluZigpIHJldHVybnMgWl9PSyBvbiBzdWNjZXNzLCBaX01FTV9FUlJPUiBpZiBtZW1vcnkgY291bGQgbm90IGJlCisgICBhbGxvY2F0ZWQgZm9yIHByb2Nlc3NpbmcsIFpfREFUQV9FUlJPUiBpZiB0aGUgZGVmbGF0ZSBkYXRhIGlzCisgICBpbnZhbGlkIG9yIGluY29tcGxldGUsIFpfVkVSU0lPTl9FUlJPUiBpZiB0aGUgdmVyc2lvbiBvZiB6bGliLmggYW5kCisgICB0aGUgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSBsaW5rZWQgZG8gbm90IG1hdGNoLCBvciBaX0VSUk5PIGlmIHRoZXJlCisgICBpcyBhbiBlcnJvciByZWFkaW5nIG9yIHdyaXRpbmcgdGhlIGZpbGVzLiAqLworaW50IGluZihGSUxFICpzb3VyY2UsIEZJTEUgKmRlc3QpCit7CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBoYXZlOworICAgIHpfc3RyZWFtIHN0cm07CisgICAgdW5zaWduZWQgY2hhciBpbltDSFVOS107CisgICAgdW5zaWduZWQgY2hhciBvdXRbQ0hVTktdOworCisgICAgLyogYWxsb2NhdGUgaW5mbGF0ZSBzdGF0ZSAqLworICAgIHN0cm0uemFsbG9jID0gWl9OVUxMOworICAgIHN0cm0uemZyZWUgPSBaX05VTEw7CisgICAgc3RybS5vcGFxdWUgPSBaX05VTEw7CisgICAgc3RybS5hdmFpbF9pbiA9IDA7CisgICAgc3RybS5uZXh0X2luID0gWl9OVUxMOworICAgIHJldCA9IGluZmxhdGVJbml0KCZzdHJtKTsKKyAgICBpZiAocmV0ICE9IFpfT0spCisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICAvKiBkZWNvbXByZXNzIHVudGlsIGRlZmxhdGUgc3RyZWFtIGVuZHMgb3IgZW5kIG9mIGZpbGUgKi8KKyAgICBkbyB7CisgICAgICAgIHN0cm0uYXZhaWxfaW4gPSBmcmVhZChpbiwgMSwgQ0hVTkssIHNvdXJjZSk7CisgICAgICAgIGlmIChmZXJyb3Ioc291cmNlKSkgeworICAgICAgICAgICAgKHZvaWQpaW5mbGF0ZUVuZCgmc3RybSk7CisgICAgICAgICAgICByZXR1cm4gWl9FUlJOTzsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3RybS5hdmFpbF9pbiA9PSAwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHN0cm0ubmV4dF9pbiA9IGluOworCisgICAgICAgIC8qIHJ1biBpbmZsYXRlKCkgb24gaW5wdXQgdW50aWwgb3V0cHV0IGJ1ZmZlciBub3QgZnVsbCAqLworICAgICAgICBkbyB7CisgICAgICAgICAgICBzdHJtLmF2YWlsX291dCA9IENIVU5LOworICAgICAgICAgICAgc3RybS5uZXh0X291dCA9IG91dDsKKyAgICAgICAgICAgIHJldCA9IGluZmxhdGUoJnN0cm0sIFpfTk9fRkxVU0gpOworICAgICAgICAgICAgYXNzZXJ0KHJldCAhPSBaX1NUUkVBTV9FUlJPUik7ICAvKiBzdGF0ZSBub3QgY2xvYmJlcmVkICovCisgICAgICAgICAgICBzd2l0Y2ggKHJldCkgeworICAgICAgICAgICAgY2FzZSBaX05FRURfRElDVDoKKyAgICAgICAgICAgICAgICByZXQgPSBaX0RBVEFfRVJST1I7ICAgICAvKiBhbmQgZmFsbCB0aHJvdWdoICovCisgICAgICAgICAgICBjYXNlIFpfREFUQV9FUlJPUjoKKyAgICAgICAgICAgIGNhc2UgWl9NRU1fRVJST1I6CisgICAgICAgICAgICAgICAgKHZvaWQpaW5mbGF0ZUVuZCgmc3RybSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGhhdmUgPSBDSFVOSyAtIHN0cm0uYXZhaWxfb3V0OworICAgICAgICAgICAgaWYgKGZ3cml0ZShvdXQsIDEsIGhhdmUsIGRlc3QpICE9IGhhdmUgfHwgZmVycm9yKGRlc3QpKSB7CisgICAgICAgICAgICAgICAgKHZvaWQpaW5mbGF0ZUVuZCgmc3RybSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFpfRVJSTk87CisgICAgICAgICAgICB9CisgICAgICAgIH0gd2hpbGUgKHN0cm0uYXZhaWxfb3V0ID09IDApOworCisgICAgICAgIC8qIGRvbmUgd2hlbiBpbmZsYXRlKCkgc2F5cyBpdCdzIGRvbmUgKi8KKyAgICB9IHdoaWxlIChyZXQgIT0gWl9TVFJFQU1fRU5EKTsKKworICAgIC8qIGNsZWFuIHVwIGFuZCByZXR1cm4gKi8KKyAgICAodm9pZClpbmZsYXRlRW5kKCZzdHJtKTsKKyAgICByZXR1cm4gcmV0ID09IFpfU1RSRUFNX0VORCA/IFpfT0sgOiBaX0RBVEFfRVJST1I7Cit9CisKKy8qIHJlcG9ydCBhIHpsaWIgb3IgaS9vIGVycm9yICovCit2b2lkIHplcnIoaW50IHJldCkKK3sKKyAgICBmcHV0cygienBpcGU6ICIsIHN0ZGVycik7CisgICAgc3dpdGNoIChyZXQpIHsKKyAgICBjYXNlIFpfRVJSTk86CisgICAgICAgIGlmIChmZXJyb3Ioc3RkaW4pKQorICAgICAgICAgICAgZnB1dHMoImVycm9yIHJlYWRpbmcgc3RkaW5cbiIsIHN0ZGVycik7CisgICAgICAgIGlmIChmZXJyb3Ioc3Rkb3V0KSkKKyAgICAgICAgICAgIGZwdXRzKCJlcnJvciB3cml0aW5nIHN0ZG91dFxuIiwgc3RkZXJyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBaX1NUUkVBTV9FUlJPUjoKKyAgICAgICAgZnB1dHMoImludmFsaWQgY29tcHJlc3Npb24gbGV2ZWxcbiIsIHN0ZGVycik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWl9EQVRBX0VSUk9SOgorICAgICAgICBmcHV0cygiaW52YWxpZCBvciBpbmNvbXBsZXRlIGRlZmxhdGUgZGF0YVxuIiwgc3RkZXJyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBaX01FTV9FUlJPUjoKKyAgICAgICAgZnB1dHMoIm91dCBvZiBtZW1vcnlcbiIsIHN0ZGVycik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWl9WRVJTSU9OX0VSUk9SOgorICAgICAgICBmcHV0cygiemxpYiB2ZXJzaW9uIG1pc21hdGNoIVxuIiwgc3RkZXJyKTsKKyAgICB9Cit9CisKKy8qIGNvbXByZXNzIG9yIGRlY29tcHJlc3MgZnJvbSBzdGRpbiB0byBzdGRvdXQgKi8KK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBpbnQgcmV0OworCisgICAgLyogYXZvaWQgZW5kLW9mLWxpbmUgY29udmVyc2lvbnMgKi8KKyAgICBTRVRfQklOQVJZX01PREUoc3RkaW4pOworICAgIFNFVF9CSU5BUllfTU9ERShzdGRvdXQpOworCisgICAgLyogZG8gY29tcHJlc3Npb24gaWYgbm8gYXJndW1lbnRzICovCisgICAgaWYgKGFyZ2MgPT0gMSkgeworICAgICAgICByZXQgPSBkZWYoc3RkaW4sIHN0ZG91dCwgWl9ERUZBVUxUX0NPTVBSRVNTSU9OKTsKKyAgICAgICAgaWYgKHJldCAhPSBaX09LKQorICAgICAgICAgICAgemVycihyZXQpOworICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKworICAgIC8qIGRvIGRlY29tcHJlc3Npb24gaWYgLWQgc3BlY2lmaWVkICovCisgICAgZWxzZSBpZiAoYXJnYyA9PSAyICYmIHN0cmNtcChhcmd2WzFdLCAiLWQiKSA9PSAwKSB7CisgICAgICAgIHJldCA9IGluZihzdGRpbiwgc3Rkb3V0KTsKKyAgICAgICAgaWYgKHJldCAhPSBaX09LKQorICAgICAgICAgICAgemVycihyZXQpOworICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKworICAgIC8qIG90aGVyd2lzZSwgcmVwb3J0IHVzYWdlICovCisgICAgZWxzZSB7CisgICAgICAgIGZwdXRzKCJ6cGlwZSB1c2FnZTogenBpcGUgWy1kXSA8IHNvdXJjZSA+IGRlc3RcbiIsIHN0ZGVycik7CisgICAgICAgIHJldHVybiAxOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9leGFtcGxlcy96cmFuLmMgYi9zcmMvZXhhbXBsZXMvenJhbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyNzlkYjcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvZXhhbXBsZXMvenJhbi5jCkBAIC0wLDAgKzEsNDc5IEBACisvKiB6cmFuLmMgLS0gZXhhbXBsZSBvZiB6bGliL2d6aXAgc3RyZWFtIGluZGV4aW5nIGFuZCByYW5kb20gYWNjZXNzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMTIsIDIwMTggTWFyayBBZGxlcgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAorICogVmVyc2lvbiAxLjIgIDE0IE9jdCAyMDE4ICBNYXJrIEFkbGVyICovCisKKy8qIFZlcnNpb24gSGlzdG9yeToKKyAxLjAgIDI5IE1heSAyMDA1ICBGaXJzdCB2ZXJzaW9uCisgMS4xICAyOSBTZXAgMjAxMiAgRml4IG1lbW9yeSByZWFsbG9jYXRpb24gZXJyb3IKKyAxLjIgIDE0IE9jdCAyMDE4ICBIYW5kbGUgZ3ppcCBzdHJlYW1zIHdpdGggbXVsdGlwbGUgbWVtYmVycworICAgICAgICAgICAgICAgICAgIEFkZCBhIGhlYWRlciBmaWxlIHRvIGZhY2lsaXRhdGUgdXNhZ2UgaW4gYXBwbGljYXRpb25zCisgKi8KKworLyogSWxsdXN0cmF0ZSB0aGUgdXNlIG9mIFpfQkxPQ0ssIGluZmxhdGVQcmltZSgpLCBhbmQgaW5mbGF0ZVNldERpY3Rpb25hcnkoKQorICAgZm9yIHJhbmRvbSBhY2Nlc3Mgb2YgYSBjb21wcmVzc2VkIGZpbGUuICBBIGZpbGUgY29udGFpbmluZyBhIHpsaWIgb3IgZ3ppcAorICAgc3RyZWFtIGlzIHByb3ZpZGVkIG9uIHRoZSBjb21tYW5kIGxpbmUuICBUaGUgY29tcHJlc3NlZCBzdHJlYW0gaXMgZGVjb2RlZCBpbgorICAgaXRzIGVudGlyZXR5LCBhbmQgYW4gaW5kZXggYnVpbHQgd2l0aCBhY2Nlc3MgcG9pbnRzIGFib3V0IGV2ZXJ5IFNQQU4gYnl0ZXMKKyAgIGluIHRoZSB1bmNvbXByZXNzZWQgb3V0cHV0LiAgVGhlIGNvbXByZXNzZWQgZmlsZSBpcyBsZWZ0IG9wZW4sIGFuZCBjYW4gdGhlbgorICAgYmUgcmVhZCByYW5kb21seSwgaGF2aW5nIHRvIGRlY29tcHJlc3Mgb24gdGhlIGF2ZXJhZ2UgU1BBTi8yIHVuY29tcHJlc3NlZAorICAgYnl0ZXMgYmVmb3JlIGdldHRpbmcgdG8gdGhlIGRlc2lyZWQgYmxvY2sgb2YgZGF0YS4KKworICAgQW4gYWNjZXNzIHBvaW50IGNhbiBiZSBjcmVhdGVkIGF0IHRoZSBzdGFydCBvZiBhbnkgZGVmbGF0ZSBibG9jaywgYnkgc2F2aW5nCisgICB0aGUgc3RhcnRpbmcgZmlsZSBvZmZzZXQgYW5kIGJpdCBvZiB0aGF0IGJsb2NrLCBhbmQgdGhlIDMySyBieXRlcyBvZgorICAgdW5jb21wcmVzc2VkIGRhdGEgdGhhdCBwcmVjZWRlIHRoYXQgYmxvY2suICBBbHNvIHRoZSB1bmNvbXByZXNzZWQgb2Zmc2V0IG9mCisgICB0aGF0IGJsb2NrIGlzIHNhdmVkIHRvIHByb3ZpZGUgYSByZWZlcmVjZSBmb3IgbG9jYXRpbmcgYSBkZXNpcmVkIHN0YXJ0aW5nCisgICBwb2ludCBpbiB0aGUgdW5jb21wcmVzc2VkIHN0cmVhbS4gIGRlZmxhdGVfaW5kZXhfYnVpbGQoKSB3b3JrcyBieQorICAgZGVjb21wcmVzc2luZyB0aGUgaW5wdXQgemxpYiBvciBnemlwIHN0cmVhbSBhIGJsb2NrIGF0IGEgdGltZSwgYW5kIGF0IHRoZQorICAgZW5kIG9mIGVhY2ggYmxvY2sgZGVjaWRpbmcgaWYgZW5vdWdoIHVuY29tcHJlc3NlZCBkYXRhIGhhcyBnb25lIGJ5IHRvCisgICBqdXN0aWZ5IHRoZSBjcmVhdGlvbiBvZiBhIG5ldyBhY2Nlc3MgcG9pbnQuICBJZiBzbywgdGhhdCBwb2ludCBpcyBzYXZlZCBpbiBhCisgICBkYXRhIHN0cnVjdHVyZSB0aGF0IGdyb3dzIGFzIG5lZWRlZCB0byBhY2NvbW1vZGF0ZSB0aGUgcG9pbnRzLgorCisgICBUbyB1c2UgdGhlIGluZGV4LCBhbiBvZmZzZXQgaW4gdGhlIHVuY29tcHJlc3NlZCBkYXRhIGlzIHByb3ZpZGVkLCBmb3Igd2hpY2gKKyAgIHRoZSBsYXRlc3QgYWNjZXNzIHBvaW50IGF0IG9yIHByZWNlZGluZyB0aGF0IG9mZnNldCBpcyBsb2NhdGVkIGluIHRoZSBpbmRleC4KKyAgIFRoZSBpbnB1dCBmaWxlIGlzIHBvc2l0aW9uZWQgdG8gdGhlIHNwZWNpZmllZCBsb2NhdGlvbiBpbiB0aGUgaW5kZXgsIGFuZCBpZgorICAgbmVjZXNzYXJ5IHRoZSBmaXJzdCBmZXcgYml0cyBvZiB0aGUgY29tcHJlc3NlZCBkYXRhIGlzIHJlYWQgZnJvbSB0aGUgZmlsZS4KKyAgIGluZmxhdGUgaXMgaW5pdGlhbGl6ZWQgd2l0aCB0aG9zZSBiaXRzIGFuZCB0aGUgMzJLIG9mIHVuY29tcHJlc3NlZCBkYXRhLCBhbmQKKyAgIHRoZSBkZWNvbXByZXNzaW9uIHRoZW4gcHJvY2VlZHMgdW50aWwgdGhlIGRlc2lyZWQgb2Zmc2V0IGluIHRoZSBmaWxlIGlzCisgICByZWFjaGVkLiAgVGhlbiB0aGUgZGVjb21wcmVzc2lvbiBjb250aW51ZXMgdG8gcmVhZCB0aGUgZGVzaXJlZCB1bmNvbXByZXNzZWQKKyAgIGRhdGEgZnJvbSB0aGUgZmlsZS4KKworICAgQW5vdGhlciBhcHByb2FjaCB3b3VsZCBiZSB0byBnZW5lcmF0ZSB0aGUgaW5kZXggb24gZGVtYW5kLiAgSW4gdGhhdCBjYXNlLAorICAgcmVxdWVzdHMgZm9yIHJhbmRvbSBhY2Nlc3MgcmVhZHMgZnJvbSB0aGUgY29tcHJlc3NlZCBkYXRhIHdvdWxkIHRyeSB0byB1c2UKKyAgIHRoZSBpbmRleCwgYnV0IGlmIGEgcmVhZCBmYXIgZW5vdWdoIHBhc3QgdGhlIGVuZCBvZiB0aGUgaW5kZXggaXMgcmVxdWlyZWQsCisgICB0aGVuIGZ1cnRoZXIgaW5kZXggZW50cmllcyB3b3VsZCBiZSBnZW5lcmF0ZWQgYW5kIGFkZGVkLgorCisgICBUaGVyZSBpcyBzb21lIGZhaXIgYml0IG9mIG92ZXJoZWFkIHRvIHN0YXJ0aW5nIGluZmxhdGlvbiBmb3IgdGhlIHJhbmRvbQorICAgYWNjZXNzLCBtYWlubHkgY29weWluZyB0aGUgMzJLIGJ5dGUgZGljdGlvbmFyeS4gIFNvIGlmIHNtYWxsIHBpZWNlcyBvZiB0aGUKKyAgIGZpbGUgYXJlIGJlaW5nIGFjY2Vzc2VkLCBpdCB3b3VsZCBtYWtlIHNlbnNlIHRvIGltcGxlbWVudCBhIGNhY2hlIHRvIGhvbGQKKyAgIHNvbWUgbG9va2FoZWFkIGFuZCBhdm9pZCBtYW55IGNhbGxzIHRvIGRlZmxhdGVfaW5kZXhfZXh0cmFjdCgpIGZvciBzbWFsbAorICAgbGVuZ3Rocy4KKworICAgQW5vdGhlciB3YXkgdG8gYnVpbGQgYW4gaW5kZXggd291bGQgYmUgdG8gdXNlIGluZmxhdGVDb3B5KCkuICBUaGF0IHdvdWxkCisgICBub3QgYmUgY29uc3RyYWluZWQgdG8gaGF2ZSBhY2Nlc3MgcG9pbnRzIGF0IGJsb2NrIGJvdW5kYXJpZXMsIGJ1dCByZXF1aXJlcworICAgbW9yZSBtZW1vcnkgcGVyIGFjY2VzcyBwb2ludCwgYW5kIGFsc28gY2Fubm90IGJlIHNhdmVkIHRvIGZpbGUgZHVlIHRvIHRoZQorICAgdXNlIG9mIHBvaW50ZXJzIGluIHRoZSBzdGF0ZS4gIFRoZSBhcHByb2FjaCBoZXJlIGFsbG93cyBmb3Igc3RvcmFnZSBvZiB0aGUKKyAgIGluZGV4IGluIGEgZmlsZS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlICJ6bGliLmgiCisjaW5jbHVkZSAienJhbi5oIgorCisjZGVmaW5lIFdJTlNJWkUgMzI3NjhVICAgICAgLyogc2xpZGluZyB3aW5kb3cgc2l6ZSAqLworI2RlZmluZSBDSFVOSyAxNjM4NCAgICAgICAgIC8qIGZpbGUgaW5wdXQgYnVmZmVyIHNpemUgKi8KKworLyogQWNjZXNzIHBvaW50IGVudHJ5LiAqLworc3RydWN0IHBvaW50IHsKKyAgICBvZmZfdCBvdXQ7ICAgICAgICAgIC8qIGNvcnJlc3BvbmRpbmcgb2Zmc2V0IGluIHVuY29tcHJlc3NlZCBkYXRhICovCisgICAgb2ZmX3QgaW47ICAgICAgICAgICAvKiBvZmZzZXQgaW4gaW5wdXQgZmlsZSBvZiBmaXJzdCBmdWxsIGJ5dGUgKi8KKyAgICBpbnQgYml0czsgICAgICAgICAgIC8qIG51bWJlciBvZiBiaXRzICgxLTcpIGZyb20gYnl0ZSBhdCBpbi0xLCBvciAwICovCisgICAgdW5zaWduZWQgY2hhciB3aW5kb3dbV0lOU0laRV07ICAvKiBwcmVjZWRpbmcgMzJLIG9mIHVuY29tcHJlc3NlZCBkYXRhICovCit9OworCisvKiBTZWUgY29tbWVudHMgaW4genJhbi5oLiAqLwordm9pZCBkZWZsYXRlX2luZGV4X2ZyZWUoc3RydWN0IGRlZmxhdGVfaW5kZXggKmluZGV4KQoreworICAgIGlmIChpbmRleCAhPSBOVUxMKSB7CisgICAgICAgIGZyZWUoaW5kZXgtPmxpc3QpOworICAgICAgICBmcmVlKGluZGV4KTsKKyAgICB9Cit9CisKKy8qIEFkZCBhbiBlbnRyeSB0byB0aGUgYWNjZXNzIHBvaW50IGxpc3QuIElmIG91dCBvZiBtZW1vcnksIGRlYWxsb2NhdGUgdGhlCisgICBleGlzdGluZyBsaXN0IGFuZCByZXR1cm4gTlVMTC4gaW5kZXgtPmd6aXAgaXMgdGhlIGFsbG9jYXRlZCBzaXplIG9mIHRoZQorICAgaW5kZXggaW4gcG9pbnQgZW50cmllcywgdW50aWwgaXQgaXMgdGltZSBmb3IgZGVmbGF0ZV9pbmRleF9idWlsZCgpIHRvCisgICByZXR1cm4sIGF0IHdoaWNoIHBvaW50IGd6aXAgaXMgc2V0IHRvIGluZGljYXRlIGEgZ3ppcCBmaWxlIG9yIG5vdC4KKyAqLworc3RhdGljIHN0cnVjdCBkZWZsYXRlX2luZGV4ICphZGRwb2ludChzdHJ1Y3QgZGVmbGF0ZV9pbmRleCAqaW5kZXgsIGludCBiaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZfdCBpbiwgb2ZmX3Qgb3V0LCB1bnNpZ25lZCBsZWZ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICp3aW5kb3cpCit7CisgICAgc3RydWN0IHBvaW50ICpuZXh0OworCisgICAgLyogaWYgbGlzdCBpcyBlbXB0eSwgY3JlYXRlIGl0IChzdGFydCB3aXRoIGVpZ2h0IHBvaW50cykgKi8KKyAgICBpZiAoaW5kZXggPT0gTlVMTCkgeworICAgICAgICBpbmRleCA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGRlZmxhdGVfaW5kZXgpKTsKKyAgICAgICAgaWYgKGluZGV4ID09IE5VTEwpIHJldHVybiBOVUxMOworICAgICAgICBpbmRleC0+bGlzdCA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHBvaW50KSA8PCAzKTsKKyAgICAgICAgaWYgKGluZGV4LT5saXN0ID09IE5VTEwpIHsKKyAgICAgICAgICAgIGZyZWUoaW5kZXgpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgaW5kZXgtPmd6aXAgPSA4OworICAgICAgICBpbmRleC0+aGF2ZSA9IDA7CisgICAgfQorCisgICAgLyogaWYgbGlzdCBpcyBmdWxsLCBtYWtlIGl0IGJpZ2dlciAqLworICAgIGVsc2UgaWYgKGluZGV4LT5oYXZlID09IGluZGV4LT5nemlwKSB7CisgICAgICAgIGluZGV4LT5nemlwIDw8PSAxOworICAgICAgICBuZXh0ID0gcmVhbGxvYyhpbmRleC0+bGlzdCwgc2l6ZW9mKHN0cnVjdCBwb2ludCkgKiBpbmRleC0+Z3ppcCk7CisgICAgICAgIGlmIChuZXh0ID09IE5VTEwpIHsKKyAgICAgICAgICAgIGRlZmxhdGVfaW5kZXhfZnJlZShpbmRleCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBpbmRleC0+bGlzdCA9IG5leHQ7CisgICAgfQorCisgICAgLyogZmlsbCBpbiBlbnRyeSBhbmQgaW5jcmVtZW50IGhvdyBtYW55IHdlIGhhdmUgKi8KKyAgICBuZXh0ID0gKHN0cnVjdCBwb2ludCAqKShpbmRleC0+bGlzdCkgKyBpbmRleC0+aGF2ZTsKKyAgICBuZXh0LT5iaXRzID0gYml0czsKKyAgICBuZXh0LT5pbiA9IGluOworICAgIG5leHQtPm91dCA9IG91dDsKKyAgICBpZiAobGVmdCkKKyAgICAgICAgbWVtY3B5KG5leHQtPndpbmRvdywgd2luZG93ICsgV0lOU0laRSAtIGxlZnQsIGxlZnQpOworICAgIGlmIChsZWZ0IDwgV0lOU0laRSkKKyAgICAgICAgbWVtY3B5KG5leHQtPndpbmRvdyArIGxlZnQsIHdpbmRvdywgV0lOU0laRSAtIGxlZnQpOworICAgIGluZGV4LT5oYXZlKys7CisKKyAgICAvKiByZXR1cm4gbGlzdCwgcG9zc2libHkgcmVhbGxvY2F0ZWQgKi8KKyAgICByZXR1cm4gaW5kZXg7Cit9CisKKy8qIFNlZSBjb21tZW50cyBpbiB6cmFuLmguICovCitpbnQgZGVmbGF0ZV9pbmRleF9idWlsZChGSUxFICppbiwgb2ZmX3Qgc3Bhbiwgc3RydWN0IGRlZmxhdGVfaW5kZXggKipidWlsdCkKK3sKKyAgICBpbnQgcmV0OworICAgIGludCBnemlwID0gMDsgICAgICAgICAgICAgICAvKiB0cnVlIGlmIHJlYWRpbmcgYSBnemlwIGZpbGUgKi8KKyAgICBvZmZfdCB0b3RpbiwgdG90b3V0OyAgICAgICAgLyogb3VyIG93biB0b3RhbCBjb3VudGVycyB0byBhdm9pZCA0R0IgbGltaXQgKi8KKyAgICBvZmZfdCBsYXN0OyAgICAgICAgICAgICAgICAgLyogdG90b3V0IHZhbHVlIG9mIGxhc3QgYWNjZXNzIHBvaW50ICovCisgICAgc3RydWN0IGRlZmxhdGVfaW5kZXggKmluZGV4OyAgICAvKiBhY2Nlc3MgcG9pbnRzIGJlaW5nIGdlbmVyYXRlZCAqLworICAgIHpfc3RyZWFtIHN0cm07CisgICAgdW5zaWduZWQgY2hhciBpbnB1dFtDSFVOS107CisgICAgdW5zaWduZWQgY2hhciB3aW5kb3dbV0lOU0laRV07CisKKyAgICAvKiBpbml0aWFsaXplIGluZmxhdGUgKi8KKyAgICBzdHJtLnphbGxvYyA9IFpfTlVMTDsKKyAgICBzdHJtLnpmcmVlID0gWl9OVUxMOworICAgIHN0cm0ub3BhcXVlID0gWl9OVUxMOworICAgIHN0cm0uYXZhaWxfaW4gPSAwOworICAgIHN0cm0ubmV4dF9pbiA9IFpfTlVMTDsKKyAgICByZXQgPSBpbmZsYXRlSW5pdDIoJnN0cm0sIDQ3KTsgICAgICAvKiBhdXRvbWF0aWMgemxpYiBvciBnemlwIGRlY29kaW5nICovCisgICAgaWYgKHJldCAhPSBaX09LKQorICAgICAgICByZXR1cm4gcmV0OworCisgICAgLyogaW5mbGF0ZSB0aGUgaW5wdXQsIG1haW50YWluIGEgc2xpZGluZyB3aW5kb3csIGFuZCBidWlsZCBhbiBpbmRleCAtLSB0aGlzCisgICAgICAgYWxzbyB2YWxpZGF0ZXMgdGhlIGludGVncml0eSBvZiB0aGUgY29tcHJlc3NlZCBkYXRhIHVzaW5nIHRoZSBjaGVjaworICAgICAgIGluZm9ybWF0aW9uIGluIHRoZSBnemlwIG9yIHpsaWIgc3RyZWFtICovCisgICAgdG90aW4gPSB0b3RvdXQgPSBsYXN0ID0gMDsKKyAgICBpbmRleCA9IE5VTEw7ICAgICAgICAgICAgICAgLyogd2lsbCBiZSBhbGxvY2F0ZWQgYnkgZmlyc3QgYWRkcG9pbnQoKSAqLworICAgIHN0cm0uYXZhaWxfb3V0ID0gMDsKKyAgICBkbyB7CisgICAgICAgIC8qIGdldCBzb21lIGNvbXByZXNzZWQgZGF0YSBmcm9tIGlucHV0IGZpbGUgKi8KKyAgICAgICAgc3RybS5hdmFpbF9pbiA9IGZyZWFkKGlucHV0LCAxLCBDSFVOSywgaW4pOworICAgICAgICBpZiAoZmVycm9yKGluKSkgeworICAgICAgICAgICAgcmV0ID0gWl9FUlJOTzsKKyAgICAgICAgICAgIGdvdG8gZGVmbGF0ZV9pbmRleF9idWlsZF9lcnJvcjsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3RybS5hdmFpbF9pbiA9PSAwKSB7CisgICAgICAgICAgICByZXQgPSBaX0RBVEFfRVJST1I7CisgICAgICAgICAgICBnb3RvIGRlZmxhdGVfaW5kZXhfYnVpbGRfZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgc3RybS5uZXh0X2luID0gaW5wdXQ7CisKKyAgICAgICAgLyogY2hlY2sgZm9yIGEgZ3ppcCBzdHJlYW0gKi8KKyAgICAgICAgaWYgKHRvdGluID09IDAgJiYgc3RybS5hdmFpbF9pbiA+PSAzICYmCisgICAgICAgICAgICBpbnB1dFswXSA9PSAzMSAmJiBpbnB1dFsxXSA9PSAxMzkgJiYgaW5wdXRbMl0gPT0gOCkKKyAgICAgICAgICAgIGd6aXAgPSAxOworCisgICAgICAgIC8qIHByb2Nlc3MgYWxsIG9mIHRoYXQsIG9yIHVudGlsIGVuZCBvZiBzdHJlYW0gKi8KKyAgICAgICAgZG8geworICAgICAgICAgICAgLyogcmVzZXQgc2xpZGluZyB3aW5kb3cgaWYgbmVjZXNzYXJ5ICovCisgICAgICAgICAgICBpZiAoc3RybS5hdmFpbF9vdXQgPT0gMCkgeworICAgICAgICAgICAgICAgIHN0cm0uYXZhaWxfb3V0ID0gV0lOU0laRTsKKyAgICAgICAgICAgICAgICBzdHJtLm5leHRfb3V0ID0gd2luZG93OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBpbmZsYXRlIHVudGlsIG91dCBvZiBpbnB1dCwgb3V0cHV0LCBvciBhdCBlbmQgb2YgYmxvY2sgLS0KKyAgICAgICAgICAgICAgIHVwZGF0ZSB0aGUgdG90YWwgaW5wdXQgYW5kIG91dHB1dCBjb3VudGVycyAqLworICAgICAgICAgICAgdG90aW4gKz0gc3RybS5hdmFpbF9pbjsKKyAgICAgICAgICAgIHRvdG91dCArPSBzdHJtLmF2YWlsX291dDsKKyAgICAgICAgICAgIHJldCA9IGluZmxhdGUoJnN0cm0sIFpfQkxPQ0spOyAgICAgIC8qIHJldHVybiBhdCBlbmQgb2YgYmxvY2sgKi8KKyAgICAgICAgICAgIHRvdGluIC09IHN0cm0uYXZhaWxfaW47CisgICAgICAgICAgICB0b3RvdXQgLT0gc3RybS5hdmFpbF9vdXQ7CisgICAgICAgICAgICBpZiAocmV0ID09IFpfTkVFRF9ESUNUKQorICAgICAgICAgICAgICAgIHJldCA9IFpfREFUQV9FUlJPUjsKKyAgICAgICAgICAgIGlmIChyZXQgPT0gWl9NRU1fRVJST1IgfHwgcmV0ID09IFpfREFUQV9FUlJPUikKKyAgICAgICAgICAgICAgICBnb3RvIGRlZmxhdGVfaW5kZXhfYnVpbGRfZXJyb3I7CisgICAgICAgICAgICBpZiAocmV0ID09IFpfU1RSRUFNX0VORCkgeworICAgICAgICAgICAgICAgIGlmIChnemlwICYmCisgICAgICAgICAgICAgICAgICAgIChzdHJtLmF2YWlsX2luIHx8IHVuZ2V0YyhnZXRjKGluKSwgaW4pICE9IEVPRikpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gaW5mbGF0ZVJlc2V0KCZzdHJtKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJldCAhPSBaX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBkZWZsYXRlX2luZGV4X2J1aWxkX2Vycm9yOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIGlmIGF0IGVuZCBvZiBibG9jaywgY29uc2lkZXIgYWRkaW5nIGFuIGluZGV4IGVudHJ5IChub3RlIHRoYXQgaWYKKyAgICAgICAgICAgICAgIGRhdGFfdHlwZSBpbmRpY2F0ZXMgYW4gZW5kLW9mLWJsb2NrLCB0aGVuIGFsbCBvZiB0aGUKKyAgICAgICAgICAgICAgIHVuY29tcHJlc3NlZCBkYXRhIGZyb20gdGhhdCBibG9jayBoYXMgYmVlbiBkZWxpdmVyZWQsIGFuZCBub25lCisgICAgICAgICAgICAgICBvZiB0aGUgY29tcHJlc3NlZCBkYXRhIGFmdGVyIHRoYXQgYmxvY2sgaGFzIGJlZW4gY29uc3VtZWQsCisgICAgICAgICAgICAgICBleGNlcHQgZm9yIHVwIHRvIHNldmVuIGJpdHMpIC0tIHRoZSB0b3RvdXQgPT0gMCBwcm92aWRlcyBhbgorICAgICAgICAgICAgICAgZW50cnkgcG9pbnQgYWZ0ZXIgdGhlIHpsaWIgb3IgZ3ppcCBoZWFkZXIsIGFuZCBhc3N1cmVzIHRoYXQgdGhlCisgICAgICAgICAgICAgICBpbmRleCBhbHdheXMgaGFzIGF0IGxlYXN0IG9uZSBhY2Nlc3MgcG9pbnQ7IHdlIGF2b2lkIGNyZWF0aW5nIGFuCisgICAgICAgICAgICAgICBhY2Nlc3MgcG9pbnQgYWZ0ZXIgdGhlIGxhc3QgYmxvY2sgYnkgY2hlY2tpbmcgYml0IDYgb2YgZGF0YV90eXBlCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmICgoc3RybS5kYXRhX3R5cGUgJiAxMjgpICYmICEoc3RybS5kYXRhX3R5cGUgJiA2NCkgJiYKKyAgICAgICAgICAgICAgICAodG90b3V0ID09IDAgfHwgdG90b3V0IC0gbGFzdCA+IHNwYW4pKSB7CisgICAgICAgICAgICAgICAgaW5kZXggPSBhZGRwb2ludChpbmRleCwgc3RybS5kYXRhX3R5cGUgJiA3LCB0b3RpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdG91dCwgc3RybS5hdmFpbF9vdXQsIHdpbmRvdyk7CisgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gWl9NRU1fRVJST1I7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZGVmbGF0ZV9pbmRleF9idWlsZF9lcnJvcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbGFzdCA9IHRvdG91dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSAoc3RybS5hdmFpbF9pbiAhPSAwKTsKKyAgICB9IHdoaWxlIChyZXQgIT0gWl9TVFJFQU1fRU5EKTsKKworICAgIC8qIGNsZWFuIHVwIGFuZCByZXR1cm4gaW5kZXggKHJlbGVhc2UgdW51c2VkIGVudHJpZXMgaW4gbGlzdCkgKi8KKyAgICAodm9pZClpbmZsYXRlRW5kKCZzdHJtKTsKKyAgICBpbmRleC0+bGlzdCA9IHJlYWxsb2MoaW5kZXgtPmxpc3QsIHNpemVvZihzdHJ1Y3QgcG9pbnQpICogaW5kZXgtPmhhdmUpOworICAgIGluZGV4LT5nemlwID0gZ3ppcDsKKyAgICBpbmRleC0+bGVuZ3RoID0gdG90b3V0OworICAgICpidWlsdCA9IGluZGV4OworICAgIHJldHVybiBpbmRleC0+aGF2ZTsKKworICAgIC8qIHJldHVybiBlcnJvciAqLworICBkZWZsYXRlX2luZGV4X2J1aWxkX2Vycm9yOgorICAgICh2b2lkKWluZmxhdGVFbmQoJnN0cm0pOworICAgIGRlZmxhdGVfaW5kZXhfZnJlZShpbmRleCk7CisgICAgcmV0dXJuIHJldDsKK30KKworLyogU2VlIGNvbW1lbnRzIGluIHpyYW4uaC4gKi8KK2ludCBkZWZsYXRlX2luZGV4X2V4dHJhY3QoRklMRSAqaW4sIHN0cnVjdCBkZWZsYXRlX2luZGV4ICppbmRleCwgb2ZmX3Qgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWYsIGludCBsZW4pCit7CisgICAgaW50IHJldCwgc2tpcDsKKyAgICB6X3N0cmVhbSBzdHJtOworICAgIHN0cnVjdCBwb2ludCAqaGVyZTsKKyAgICB1bnNpZ25lZCBjaGFyIGlucHV0W0NIVU5LXTsKKyAgICB1bnNpZ25lZCBjaGFyIGRpc2NhcmRbV0lOU0laRV07CisKKyAgICAvKiBwcm9jZWVkIG9ubHkgaWYgc29tZXRoaW5nIHJlYXNvbmFibGUgdG8gZG8gKi8KKyAgICBpZiAobGVuIDwgMCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvKiBmaW5kIHdoZXJlIGluIHN0cmVhbSB0byBzdGFydCAqLworICAgIGhlcmUgPSBpbmRleC0+bGlzdDsKKyAgICByZXQgPSBpbmRleC0+aGF2ZTsKKyAgICB3aGlsZSAoLS1yZXQgJiYgaGVyZVsxXS5vdXQgPD0gb2Zmc2V0KQorICAgICAgICBoZXJlKys7CisKKyAgICAvKiBpbml0aWFsaXplIGZpbGUgYW5kIGluZmxhdGUgc3RhdGUgdG8gc3RhcnQgdGhlcmUgKi8KKyAgICBzdHJtLnphbGxvYyA9IFpfTlVMTDsKKyAgICBzdHJtLnpmcmVlID0gWl9OVUxMOworICAgIHN0cm0ub3BhcXVlID0gWl9OVUxMOworICAgIHN0cm0uYXZhaWxfaW4gPSAwOworICAgIHN0cm0ubmV4dF9pbiA9IFpfTlVMTDsKKyAgICByZXQgPSBpbmZsYXRlSW5pdDIoJnN0cm0sIC0xNSk7ICAgICAgICAgLyogcmF3IGluZmxhdGUgKi8KKyAgICBpZiAocmV0ICE9IFpfT0spCisgICAgICAgIHJldHVybiByZXQ7CisgICAgcmV0ID0gZnNlZWtvKGluLCBoZXJlLT5pbiAtIChoZXJlLT5iaXRzID8gMSA6IDApLCBTRUVLX1NFVCk7CisgICAgaWYgKHJldCA9PSAtMSkKKyAgICAgICAgZ290byBkZWZsYXRlX2luZGV4X2V4dHJhY3RfcmV0OworICAgIGlmIChoZXJlLT5iaXRzKSB7CisgICAgICAgIHJldCA9IGdldGMoaW4pOworICAgICAgICBpZiAocmV0ID09IC0xKSB7CisgICAgICAgICAgICByZXQgPSBmZXJyb3IoaW4pID8gWl9FUlJOTyA6IFpfREFUQV9FUlJPUjsKKyAgICAgICAgICAgIGdvdG8gZGVmbGF0ZV9pbmRleF9leHRyYWN0X3JldDsKKyAgICAgICAgfQorICAgICAgICAodm9pZClpbmZsYXRlUHJpbWUoJnN0cm0sIGhlcmUtPmJpdHMsIHJldCA+PiAoOCAtIGhlcmUtPmJpdHMpKTsKKyAgICB9CisgICAgKHZvaWQpaW5mbGF0ZVNldERpY3Rpb25hcnkoJnN0cm0sIGhlcmUtPndpbmRvdywgV0lOU0laRSk7CisKKyAgICAvKiBza2lwIHVuY29tcHJlc3NlZCBieXRlcyB1bnRpbCBvZmZzZXQgcmVhY2hlZCwgdGhlbiBzYXRpc2Z5IHJlcXVlc3QgKi8KKyAgICBvZmZzZXQgLT0gaGVyZS0+b3V0OworICAgIHN0cm0uYXZhaWxfaW4gPSAwOworICAgIHNraXAgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB3aGlsZSBza2lwcGluZyB0byBvZmZzZXQgKi8KKyAgICBkbyB7CisgICAgICAgIC8qIGRlZmluZSB3aGVyZSB0byBwdXQgdW5jb21wcmVzc2VkIGRhdGEsIGFuZCBob3cgbXVjaCAqLworICAgICAgICBpZiAob2Zmc2V0ID4gV0lOU0laRSkgeyAgICAgICAgICAgICAvKiBza2lwIFdJTlNJWkUgYnl0ZXMgKi8KKyAgICAgICAgICAgIHN0cm0uYXZhaWxfb3V0ID0gV0lOU0laRTsKKyAgICAgICAgICAgIHN0cm0ubmV4dF9vdXQgPSBkaXNjYXJkOworICAgICAgICAgICAgb2Zmc2V0IC09IFdJTlNJWkU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAob2Zmc2V0ID4gMCkgeyAgICAgICAgICAgICAgLyogbGFzdCBza2lwICovCisgICAgICAgICAgICBzdHJtLmF2YWlsX291dCA9ICh1bnNpZ25lZClvZmZzZXQ7CisgICAgICAgICAgICBzdHJtLm5leHRfb3V0ID0gZGlzY2FyZDsKKyAgICAgICAgICAgIG9mZnNldCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc2tpcCkgeyAgICAgICAgICAgICAgICAgICAgLyogYXQgb2Zmc2V0IG5vdyAqLworICAgICAgICAgICAgc3RybS5hdmFpbF9vdXQgPSBsZW47CisgICAgICAgICAgICBzdHJtLm5leHRfb3V0ID0gYnVmOworICAgICAgICAgICAgc2tpcCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAvKiBvbmx5IGRvIHRoaXMgb25jZSAqLworICAgICAgICB9CisKKyAgICAgICAgLyogdW5jb21wcmVzcyB1bnRpbCBhdmFpbF9vdXQgZmlsbGVkLCBvciBlbmQgb2Ygc3RyZWFtICovCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGlmIChzdHJtLmF2YWlsX2luID09IDApIHsKKyAgICAgICAgICAgICAgICBzdHJtLmF2YWlsX2luID0gZnJlYWQoaW5wdXQsIDEsIENIVU5LLCBpbik7CisgICAgICAgICAgICAgICAgaWYgKGZlcnJvcihpbikpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gWl9FUlJOTzsKKyAgICAgICAgICAgICAgICAgICAgZ290byBkZWZsYXRlX2luZGV4X2V4dHJhY3RfcmV0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoc3RybS5hdmFpbF9pbiA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHJldCA9IFpfREFUQV9FUlJPUjsKKyAgICAgICAgICAgICAgICAgICAgZ290byBkZWZsYXRlX2luZGV4X2V4dHJhY3RfcmV0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzdHJtLm5leHRfaW4gPSBpbnB1dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldCA9IGluZmxhdGUoJnN0cm0sIFpfTk9fRkxVU0gpOyAgICAgICAvKiBub3JtYWwgaW5mbGF0ZSAqLworICAgICAgICAgICAgaWYgKHJldCA9PSBaX05FRURfRElDVCkKKyAgICAgICAgICAgICAgICByZXQgPSBaX0RBVEFfRVJST1I7CisgICAgICAgICAgICBpZiAocmV0ID09IFpfTUVNX0VSUk9SIHx8IHJldCA9PSBaX0RBVEFfRVJST1IpCisgICAgICAgICAgICAgICAgZ290byBkZWZsYXRlX2luZGV4X2V4dHJhY3RfcmV0OworICAgICAgICAgICAgaWYgKHJldCA9PSBaX1NUUkVBTV9FTkQpIHsKKyAgICAgICAgICAgICAgICAvKiB0aGUgcmF3IGRlZmxhdGUgc3RyZWFtIGhhcyBlbmRlZCAqLworICAgICAgICAgICAgICAgIGlmIChpbmRleC0+Z3ppcCA9PSAwKQorICAgICAgICAgICAgICAgICAgICAvKiB0aGlzIGlzIGEgemxpYiBzdHJlYW0gdGhhdCBoYXMgZW5kZWQgLS0gZG9uZSAqLworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIC8qIG5lYXIgdGhlIGVuZCBvZiBhIGd6aXAgbWVtYmVyLCB3aGljaCBtaWdodCBiZSBmb2xsb3dlZCBieQorICAgICAgICAgICAgICAgICAgIGFub3RoZXIgZ3ppcCBtZW1iZXIgLS0gc2tpcCB0aGUgZ3ppcCB0cmFpbGVyIGFuZCBzZWUgaWYKKyAgICAgICAgICAgICAgICAgICB0aGVyZSBpcyBtb3JlIGlucHV0IGFmdGVyIGl0ICovCisgICAgICAgICAgICAgICAgaWYgKHN0cm0uYXZhaWxfaW4gPCA4KSB7CisgICAgICAgICAgICAgICAgICAgIGZzZWVrbyhpbiwgOCAtIHN0cm0uYXZhaWxfaW4sIFNFRUtfQ1VSKTsKKyAgICAgICAgICAgICAgICAgICAgc3RybS5hdmFpbF9pbiA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzdHJtLmF2YWlsX2luIC09IDg7CisgICAgICAgICAgICAgICAgICAgIHN0cm0ubmV4dF9pbiArPSA4OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoc3RybS5hdmFpbF9pbiA9PSAwICYmIHVuZ2V0YyhnZXRjKGluKSwgaW4pID09IEVPRikKKyAgICAgICAgICAgICAgICAgICAgLyogdGhlIGlucHV0IGVuZGVkIGFmdGVyIHRoZSBnemlwIHRyYWlsZXIgLS0gZG9uZSAqLworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIC8qIHRoZXJlIGlzIG1vcmUgaW5wdXQsIHNvIGFub3RoZXIgZ3ppcCBtZW1iZXIgc2hvdWxkIGZvbGxvdyAtLQorICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlIGFuZCBza2lwIHRoZSBnemlwIGhlYWRlciAqLworICAgICAgICAgICAgICAgIHJldCA9IGluZmxhdGVSZXNldDIoJnN0cm0sIDMxKTsKKyAgICAgICAgICAgICAgICBpZiAocmV0ICE9IFpfT0spCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZGVmbGF0ZV9pbmRleF9leHRyYWN0X3JldDsKKyAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdHJtLmF2YWlsX2luID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cm0uYXZhaWxfaW4gPSBmcmVhZChpbnB1dCwgMSwgQ0hVTkssIGluKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmZXJyb3IoaW4pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gWl9FUlJOTzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGRlZmxhdGVfaW5kZXhfZXh0cmFjdF9yZXQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RybS5hdmFpbF9pbiA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gWl9EQVRBX0VSUk9SOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZGVmbGF0ZV9pbmRleF9leHRyYWN0X3JldDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cm0ubmV4dF9pbiA9IGlucHV0OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldCA9IGluZmxhdGUoJnN0cm0sIFpfQkxPQ0spOworICAgICAgICAgICAgICAgICAgICBpZiAocmV0ID09IFpfTUVNX0VSUk9SIHx8IHJldCA9PSBaX0RBVEFfRVJST1IpCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGRlZmxhdGVfaW5kZXhfZXh0cmFjdF9yZXQ7CisgICAgICAgICAgICAgICAgfSB3aGlsZSAoKHN0cm0uZGF0YV90eXBlICYgMTI4KSA9PSAwKTsKKworICAgICAgICAgICAgICAgIC8qIHNldCB1cCB0byBjb250aW51ZSBkZWNvbXByZXNzaW9uIG9mIHRoZSByYXcgZGVmbGF0ZSBzdHJlYW0KKyAgICAgICAgICAgICAgICAgICB0aGF0IGZvbGxvd3MgdGhlIGd6aXAgaGVhZGVyICovCisgICAgICAgICAgICAgICAgcmV0ID0gaW5mbGF0ZVJlc2V0Migmc3RybSwgLTE1KTsKKyAgICAgICAgICAgICAgICBpZiAocmV0ICE9IFpfT0spCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZGVmbGF0ZV9pbmRleF9leHRyYWN0X3JldDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogY29udGludWUgdG8gcHJvY2VzcyB0aGUgYXZhaWxhYmxlIGlucHV0IGJlZm9yZSByZWFkaW5nIG1vcmUgKi8KKyAgICAgICAgfSB3aGlsZSAoc3RybS5hdmFpbF9vdXQgIT0gMCk7CisKKyAgICAgICAgaWYgKHJldCA9PSBaX1NUUkVBTV9FTkQpCisgICAgICAgICAgICAvKiByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGNvbXByZXNzZWQgZGF0YSAtLSByZXR1cm4gdGhlIGRhdGEgdGhhdAorICAgICAgICAgICAgICAgd2FzIGF2YWlsYWJsZSwgcG9zc2libHkgbGVzcyB0aGFuIHJlcXVlc3RlZCAqLworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyogZG8gdW50aWwgb2Zmc2V0IHJlYWNoZWQgYW5kIHJlcXVlc3RlZCBkYXRhIHJlYWQgKi8KKyAgICB9IHdoaWxlIChza2lwKTsKKworICAgIC8qIGNvbXB1dGUgdGhlIG51bWJlciBvZiB1bmNvbXByZXNzZWQgYnl0ZXMgcmVhZCBhZnRlciB0aGUgb2Zmc2V0ICovCisgICAgcmV0ID0gc2tpcCA/IDAgOiBsZW4gLSBzdHJtLmF2YWlsX291dDsKKworICAgIC8qIGNsZWFuIHVwIGFuZCByZXR1cm4gdGhlIGJ5dGVzIHJlYWQsIG9yIHRoZSBuZWdhdGl2ZSBlcnJvciAqLworICBkZWZsYXRlX2luZGV4X2V4dHJhY3RfcmV0OgorICAgICh2b2lkKWluZmxhdGVFbmQoJnN0cm0pOworICAgIHJldHVybiByZXQ7Cit9CisKKyNpZmRlZiBURVNUCisKKyNkZWZpbmUgU1BBTiAxMDQ4NTc2TCAgICAgICAvKiBkZXNpcmVkIGRpc3RhbmNlIGJldHdlZW4gYWNjZXNzIHBvaW50cyAqLworI2RlZmluZSBMRU4gMTYzODQgICAgICAgICAgIC8qIG51bWJlciBvZiBieXRlcyB0byBleHRyYWN0ICovCisKKy8qIERlbW9uc3RyYXRlIHRoZSB1c2Ugb2YgZGVmbGF0ZV9pbmRleF9idWlsZCgpIGFuZCBkZWZsYXRlX2luZGV4X2V4dHJhY3QoKSBieQorICAgcHJvY2Vzc2luZyB0aGUgZmlsZSBwcm92aWRlZCBvbiB0aGUgY29tbWFuZCBsaW5lLCBhbmQgZXh0cmFjdGluZyBMRU4gYnl0ZXMKKyAgIGZyb20gMi8zcmRzIG9mIHRoZSB3YXkgdGhyb3VnaCB0aGUgdW5jb21wcmVzc2VkIG91dHB1dCwgd3JpdGluZyB0aGF0IHRvCisgICBzdGRvdXQuIEFuIG9mZnNldCBjYW4gYmUgcHJvdmlkZWQgYXMgdGhlIHNlY29uZCBhcmd1bWVudCwgaW4gd2hpY2ggY2FzZSB0aGUKKyAgIGRhdGEgaXMgZXh0cmFjdGVkIGZyb20gdGhlcmUgaW5zdGVhZC4gKi8KK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBpbnQgbGVuOworICAgIG9mZl90IG9mZnNldCA9IC0xOworICAgIEZJTEUgKmluOworICAgIHN0cnVjdCBkZWZsYXRlX2luZGV4ICppbmRleCA9IE5VTEw7CisgICAgdW5zaWduZWQgY2hhciBidWZbTEVOXTsKKworICAgIC8qIG9wZW4gaW5wdXQgZmlsZSAqLworICAgIGlmIChhcmdjIDwgMiB8fCBhcmdjID4gMykgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInVzYWdlOiB6cmFuIGZpbGUuZ3ogW29mZnNldF1cbiIpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgaW4gPSBmb3Blbihhcmd2WzFdLCAicmIiKTsKKyAgICBpZiAoaW4gPT0gTlVMTCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInpyYW46IGNvdWxkIG5vdCBvcGVuICVzIGZvciByZWFkaW5nXG4iLCBhcmd2WzFdKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgLyogZ2V0IG9wdGlvbmFsIG9mZnNldCAqLworICAgIGlmIChhcmdjID09IDMpIHsKKyAgICAgICAgY2hhciAqZW5kOworICAgICAgICBvZmZzZXQgPSBzdHJ0b2xsKGFyZ3ZbMl0sICZlbmQsIDEwKTsKKyAgICAgICAgaWYgKCplbmQgfHwgb2Zmc2V0IDwgMCkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJ6cmFuOiAlcyBpcyBub3QgYSB2YWxpZCBvZmZzZXRcbiIsIGFyZ3ZbMl0pOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBidWlsZCBpbmRleCAqLworICAgIGxlbiA9IGRlZmxhdGVfaW5kZXhfYnVpbGQoaW4sIFNQQU4sICZpbmRleCk7CisgICAgaWYgKGxlbiA8IDApIHsKKyAgICAgICAgZmNsb3NlKGluKTsKKyAgICAgICAgc3dpdGNoIChsZW4pIHsKKyAgICAgICAgY2FzZSBaX01FTV9FUlJPUjoKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAienJhbjogb3V0IG9mIG1lbW9yeVxuIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBaX0RBVEFfRVJST1I6CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInpyYW46IGNvbXByZXNzZWQgZGF0YSBlcnJvciBpbiAlc1xuIiwgYXJndlsxXSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBaX0VSUk5POgorICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJ6cmFuOiByZWFkIGVycm9yIG9uICVzXG4iLCBhcmd2WzFdKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJ6cmFuOiBlcnJvciAlZCB3aGlsZSBidWlsZGluZyBpbmRleFxuIiwgbGVuKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgZnByaW50ZihzdGRlcnIsICJ6cmFuOiBidWlsdCBpbmRleCB3aXRoICVkIGFjY2VzcyBwb2ludHNcbiIsIGxlbik7CisKKyAgICAvKiB1c2UgaW5kZXggYnkgcmVhZGluZyBzb21lIGJ5dGVzIGZyb20gYW4gYXJiaXRyYXJ5IG9mZnNldCAqLworICAgIGlmIChvZmZzZXQgPT0gLTEpCisgICAgICAgIG9mZnNldCA9IChpbmRleC0+bGVuZ3RoIDw8IDEpIC8gMzsKKyAgICBsZW4gPSBkZWZsYXRlX2luZGV4X2V4dHJhY3QoaW4sIGluZGV4LCBvZmZzZXQsIGJ1ZiwgTEVOKTsKKyAgICBpZiAobGVuIDwgMCkKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJ6cmFuOiBleHRyYWN0aW9uIGZhaWxlZDogJXMgZXJyb3JcbiIsCisgICAgICAgICAgICAgICAgbGVuID09IFpfTUVNX0VSUk9SID8gIm91dCBvZiBtZW1vcnkiIDogImlucHV0IGNvcnJ1cHRlZCIpOworICAgIGVsc2UgeworICAgICAgICBmd3JpdGUoYnVmLCAxLCBsZW4sIHN0ZG91dCk7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAienJhbjogZXh0cmFjdGVkICVkIGJ5dGVzIGF0ICVsbHVcbiIsIGxlbiwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICAvKiBjbGVhbiB1cCBhbmQgZXhpdCAqLworICAgIGRlZmxhdGVfaW5kZXhfZnJlZShpbmRleCk7CisgICAgZmNsb3NlKGluKTsKKyAgICByZXR1cm4gMDsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvZXhhbXBsZXMvenJhbi5oIGIvc3JjL2V4YW1wbGVzL3pyYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzE0MTI1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2V4YW1wbGVzL3pyYW4uaApAQCAtMCwwICsxLDQwIEBACisvKiB6cmFuLmggLS0gZXhhbXBsZSBvZiB6bGliL2d6aXAgc3RyZWFtIGluZGV4aW5nIGFuZCByYW5kb20gYWNjZXNzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMTIsIDIwMTggTWFyayBBZGxlcgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAorICogVmVyc2lvbiAxLjIgIDE0IE9jdCAyMDE4ICBNYXJrIEFkbGVyICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgInpsaWIuaCIKKworLyogQWNjZXNzIHBvaW50IGxpc3QuICovCitzdHJ1Y3QgZGVmbGF0ZV9pbmRleCB7CisgICAgaW50IGhhdmU7ICAgICAgICAgICAvKiBudW1iZXIgb2YgbGlzdCBlbnRyaWVzICovCisgICAgaW50IGd6aXA7ICAgICAgICAgICAvKiAxIGlmIHRoZSBpbmRleCBpcyBvZiBhIGd6aXAgZmlsZSwgMCBpZiBpdCBpcyBvZiBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICB6bGliIHN0cmVhbSAqLworICAgIG9mZl90IGxlbmd0aDsgICAgICAgLyogdG90YWwgbGVuZ3RoIG9mIHVuY29tcHJlc3NlZCBkYXRhICovCisgICAgdm9pZCAqbGlzdDsgICAgICAgICAvKiBhbGxvY2F0ZWQgbGlzdCBvZiBlbnRyaWVzICovCit9OworCisvKiBNYWtlIG9uZSBlbnRpcmUgcGFzcyB0aHJvdWdoIGEgemxpYiBvciBnemlwIGNvbXByZXNzZWQgc3RyZWFtIGFuZCBidWlsZCBhbgorICAgaW5kZXgsIHdpdGggYWNjZXNzIHBvaW50cyBhYm91dCBldmVyeSBzcGFuIGJ5dGVzIG9mIHVuY29tcHJlc3NlZCBvdXRwdXQuCisgICBnemlwIGZpbGVzIHdpdGggbXVsdGlwbGUgbWVtYmVycyBhcmUgaW5kZXhlZCBpbiB0aGVpciBlbnRpcmV0eS4gc3BhbiBzaG91bGQKKyAgIGJlIGNob3NlbiB0byBiYWxhbmNlIHRoZSBzcGVlZCBvZiByYW5kb20gYWNjZXNzIGFnYWluc3QgdGhlIG1lbW9yeQorICAgcmVxdWlyZW1lbnRzIG9mIHRoZSBsaXN0LCBhYm91dCAzMksgYnl0ZXMgcGVyIGFjY2VzcyBwb2ludC4gVGhlIHJldHVybiB2YWx1ZQorICAgaXMgdGhlIG51bWJlciBvZiBhY2Nlc3MgcG9pbnRzIG9uIHN1Y2Nlc3MgKD49IDEpLCBaX01FTV9FUlJPUiBmb3Igb3V0IG9mCisgICBtZW1vcnksIFpfREFUQV9FUlJPUiBmb3IgYW4gZXJyb3IgaW4gdGhlIGlucHV0IGZpbGUsIG9yIFpfRVJSTk8gZm9yIGEgZmlsZQorICAgcmVhZCBlcnJvci4gT24gc3VjY2VzcywgKmJ1aWx0IHBvaW50cyB0byB0aGUgcmVzdWx0aW5nIGluZGV4LiAqLworaW50IGRlZmxhdGVfaW5kZXhfYnVpbGQoRklMRSAqaW4sIG9mZl90IHNwYW4sIHN0cnVjdCBkZWZsYXRlX2luZGV4ICoqYnVpbHQpOworCisvKiBEZWFsbG9jYXRlIGFuIGluZGV4IGJ1aWx0IGJ5IGRlZmxhdGVfaW5kZXhfYnVpbGQoKSAqLwordm9pZCBkZWZsYXRlX2luZGV4X2ZyZWUoc3RydWN0IGRlZmxhdGVfaW5kZXggKmluZGV4KTsKKworLyogVXNlIHRoZSBpbmRleCB0byByZWFkIGxlbiBieXRlcyBmcm9tIG9mZnNldCBpbnRvIGJ1Zi4gUmV0dXJuIGJ5dGVzIHJlYWQgb3IKKyAgIG5lZ2F0aXZlIGZvciBlcnJvciAoWl9EQVRBX0VSUk9SIG9yIFpfTUVNX0VSUk9SKS4gSWYgZGF0YSBpcyByZXF1ZXN0ZWQgcGFzdAorICAgdGhlIGVuZCBvZiB0aGUgdW5jb21wcmVzc2VkIGRhdGEsIHRoZW4gZGVmbGF0ZV9pbmRleF9leHRyYWN0KCkgd2lsbCByZXR1cm4gYQorICAgdmFsdWUgbGVzcyB0aGFuIGxlbiwgaW5kaWNhdGluZyBob3cgbXVjaCB3YXMgYWN0dWFsbHkgcmVhZCBpbnRvIGJ1Zi4gVGhpcworICAgZnVuY3Rpb24gc2hvdWxkIG5vdCByZXR1cm4gYSBkYXRhIGVycm9yIHVubGVzcyB0aGUgZmlsZSB3YXMgbW9kaWZpZWQgc2luY2UKKyAgIHRoZSBpbmRleCB3YXMgZ2VuZXJhdGVkLCBzaW5jZSBkZWZsYXRlX2luZGV4X2J1aWxkKCkgdmFsaWRhdGVkIGFsbCBvZiB0aGUKKyAgIGlucHV0LiBkZWZsYXRlX2luZGV4X2V4dHJhY3QoKSB3aWxsIHJldHVybiBaX0VSUk5PIGlmIHRoZXJlIGlzIGFuIGVycm9yIG9uCisgICByZWFkaW5nIG9yIHNlZWtpbmcgdGhlIGlucHV0IGZpbGUuICovCitpbnQgZGVmbGF0ZV9pbmRleF9leHRyYWN0KEZJTEUgKmluLCBzdHJ1Y3QgZGVmbGF0ZV9pbmRleCAqaW5kZXgsIG9mZl90IG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbGVuKTsKZGlmZiAtLWdpdCBhL3NyYy9nemNsb3NlLmMgYi9zcmMvZ3pjbG9zZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhZWI5OWEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvZ3pjbG9zZS5jCkBAIC0wLDAgKzEsMjUgQEAKKy8qIGd6Y2xvc2UuYyAtLSB6bGliIGd6Y2xvc2UoKSBmdW5jdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDEwIE1hcmsgQWRsZXIKKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKKyAqLworCisjaW5jbHVkZSAiZ3pndXRzLmgiCisKKy8qIGd6Y2xvc2UoKSBpcyBpbiBhIHNlcGFyYXRlIGZpbGUgc28gdGhhdCBpdCBpcyBsaW5rZWQgaW4gb25seSBpZiBpdCBpcyB1c2VkLgorICAgVGhhdCB3YXkgdGhlIG90aGVyIGd6Y2xvc2UgZnVuY3Rpb25zIGNhbiBiZSB1c2VkIGluc3RlYWQgdG8gYXZvaWQgbGlua2luZyBpbgorICAgdW5uZWVkZWQgY29tcHJlc3Npb24gb3IgZGVjb21wcmVzc2lvbiByb3V0aW5lcy4gKi8KK2ludCBaRVhQT1JUIGd6Y2xvc2UoZmlsZSkKKyAgICBnekZpbGUgZmlsZTsKK3sKKyNpZm5kZWYgTk9fR1pDT01QUkVTUworICAgIGd6X3N0YXRlcCBzdGF0ZTsKKworICAgIGlmIChmaWxlID09IE5VTEwpCisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyAgICBzdGF0ZSA9IChnel9zdGF0ZXApZmlsZTsKKworICAgIHJldHVybiBzdGF0ZS0+bW9kZSA9PSBHWl9SRUFEID8gZ3pjbG9zZV9yKGZpbGUpIDogZ3pjbG9zZV93KGZpbGUpOworI2Vsc2UKKyAgICByZXR1cm4gZ3pjbG9zZV9yKGZpbGUpOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9zcmMvZ3pndXRzLmggYi9zcmMvZ3pndXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdmYWYzNwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9nemd1dHMuaApAQCAtMCwwICsxLDIxOSBAQAorLyogZ3pndXRzLmggLS0gemxpYiBpbnRlcm5hbCBoZWFkZXIgZGVmaW5pdGlvbnMgZm9yIGd6KiBvcGVyYXRpb25zCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxOSBNYXJrIEFkbGVyCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCisgKi8KKworI2lmZGVmIF9MQVJHRUZJTEU2NF9TT1VSQ0UKKyMgIGlmbmRlZiBfTEFSR0VGSUxFX1NPVVJDRQorIyAgICBkZWZpbmUgX0xBUkdFRklMRV9TT1VSQ0UgMQorIyAgZW5kaWYKKyMgIGlmZGVmIF9GSUxFX09GRlNFVF9CSVRTCisjICAgIHVuZGVmIF9GSUxFX09GRlNFVF9CSVRTCisjICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0hJRERFTgorIyAgZGVmaW5lIFpMSUJfSU5URVJOQUwgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImhpZGRlbiIpKSkKKyNlbHNlCisjICBkZWZpbmUgWkxJQl9JTlRFUk5BTAorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgInpsaWIuaCIKKyNpZmRlZiBTVERDCisjICBpbmNsdWRlIDxzdHJpbmcuaD4KKyMgIGluY2x1ZGUgPHN0ZGxpYi5oPgorIyAgaW5jbHVkZSA8bGltaXRzLmg+CisjZW5kaWYKKworI2lmbmRlZiBfUE9TSVhfU09VUkNFCisjICBkZWZpbmUgX1BPU0lYX1NPVVJDRQorI2VuZGlmCisjaW5jbHVkZSA8ZmNudGwuaD4KKworI2lmZGVmIF9XSU4zMgorIyAgaW5jbHVkZSA8c3RkZGVmLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19UVVJCT0NfXykgfHwgZGVmaW5lZChfTVNDX1ZFUikgfHwgZGVmaW5lZChfV0lOMzIpCisjICBpbmNsdWRlIDxpby5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyMgIGRlZmluZSBXSURFQ0hBUgorI2VuZGlmCisKKyNpZmRlZiBXSU5BUElfRkFNSUxZCisjICBkZWZpbmUgb3BlbiBfb3BlbgorIyAgZGVmaW5lIHJlYWQgX3JlYWQKKyMgIGRlZmluZSB3cml0ZSBfd3JpdGUKKyMgIGRlZmluZSBjbG9zZSBfY2xvc2UKKyNlbmRpZgorCisjaWZkZWYgTk9fREVGTEFURSAgICAgICAvKiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG9sZCBkZWZpbml0aW9uICovCisjICBkZWZpbmUgTk9fR1pDT01QUkVTUworI2VuZGlmCisKKyNpZiBkZWZpbmVkKFNUREM5OSkgfHwgKGRlZmluZWQoX19UVVJCT0NfXykgJiYgX19UVVJCT0NfXyA+PSAweDU1MCkKKyMgIGlmbmRlZiBIQVZFX1ZTTlBSSU5URgorIyAgICBkZWZpbmUgSEFWRV9WU05QUklOVEYKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19DWUdXSU5fXykKKyMgIGlmbmRlZiBIQVZFX1ZTTlBSSU5URgorIyAgICBkZWZpbmUgSEFWRV9WU05QUklOVEYKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoTVNET1MpICYmIGRlZmluZWQoX19CT1JMQU5EQ19fKSAmJiAoQk9STEFOREMgPiAweDQxMCkKKyMgIGlmbmRlZiBIQVZFX1ZTTlBSSU5URgorIyAgICBkZWZpbmUgSEFWRV9WU05QUklOVEYKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX1ZTTlBSSU5URgorIyAgaWZkZWYgTVNET1MKKy8qIHZzbnByaW50ZiBtYXkgZXhpc3Qgb24gc29tZSBNUy1ET1MgY29tcGlsZXJzIChESkdQUD8pLAorICAgYnV0IGZvciBub3cgd2UganVzdCBhc3N1bWUgaXQgZG9lc24ndC4gKi8KKyMgICAgZGVmaW5lIE5PX3ZzbnByaW50ZgorIyAgZW5kaWYKKyMgIGlmZGVmIF9fVFVSQk9DX18KKyMgICAgZGVmaW5lIE5PX3ZzbnByaW50ZgorIyAgZW5kaWYKKyMgIGlmZGVmIFdJTjMyCisvKiBJbiBXaW4zMiwgdnNucHJpbnRmIGlzIGF2YWlsYWJsZSBhcyB0aGUgIm5vbi1BTlNJIiBfdnNucHJpbnRmLiAqLworIyAgICBpZiAhZGVmaW5lZCh2c25wcmludGYpICYmICFkZWZpbmVkKE5PX3ZzbnByaW50ZikKKyMgICAgICBpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgKCBkZWZpbmVkKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUiA8IDE1MDAgKQorIyAgICAgICAgIGRlZmluZSB2c25wcmludGYgX3ZzbnByaW50ZgorIyAgICAgIGVuZGlmCisjICAgIGVuZGlmCisjICBlbmRpZgorIyAgaWZkZWYgX19TQVNDCisjICAgIGRlZmluZSBOT192c25wcmludGYKKyMgIGVuZGlmCisjICBpZmRlZiBWTVMKKyMgICAgZGVmaW5lIE5PX3ZzbnByaW50ZgorIyAgZW5kaWYKKyMgIGlmZGVmIF9fT1M0MDBfXworIyAgICBkZWZpbmUgTk9fdnNucHJpbnRmCisjICBlbmRpZgorIyAgaWZkZWYgX19NVlNfXworIyAgICBkZWZpbmUgTk9fdnNucHJpbnRmCisjICBlbmRpZgorI2VuZGlmCisKKy8qIHVubGlrZSBzbnByaW50ZiAod2hpY2ggaXMgcmVxdWlyZWQgaW4gQzk5KSwgX3NucHJpbnRmIGRvZXMgbm90IGd1YXJhbnRlZQorICAgbnVsbCB0ZXJtaW5hdGlvbiBvZiB0aGUgcmVzdWx0IC0tIGhvd2V2ZXIgdGhpcyBpcyBvbmx5IHVzZWQgaW4gZ3psaWIuYyB3aGVyZQorICAgdGhlIHJlc3VsdCBpcyBhc3N1cmVkIHRvIGZpdCBpbiB0aGUgc3BhY2UgcHJvdmlkZWQgKi8KKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUiA8IDE5MDAKKyMgIGRlZmluZSBzbnByaW50ZiBfc25wcmludGYKKyNlbmRpZgorCisjaWZuZGVmIGxvY2FsCisjICBkZWZpbmUgbG9jYWwgc3RhdGljCisjZW5kaWYKKy8qIHNpbmNlICJzdGF0aWMiIGlzIHVzZWQgdG8gbWVhbiB0d28gY29tcGxldGVseSBkaWZmZXJlbnQgdGhpbmdzIGluIEMsIHdlCisgICBkZWZpbmUgImxvY2FsIiBmb3IgdGhlIG5vbi1zdGF0aWMgbWVhbmluZyBvZiAic3RhdGljIiwgZm9yIHJlYWRhYmlsaXR5CisgICAoY29tcGlsZSB3aXRoIC1EbG9jYWwgaWYgeW91ciBkZWJ1Z2dlciBjYW4ndCBmaW5kIHN0YXRpYyBzeW1ib2xzKSAqLworCisvKiBneiogZnVuY3Rpb25zIGFsd2F5cyB1c2UgbGlicmFyeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucyAqLworI2lmbmRlZiBTVERDCisgIGV4dGVybiB2b2lkcCAgbWFsbG9jIE9GKCh1SW50IHNpemUpKTsKKyAgZXh0ZXJuIHZvaWQgICBmcmVlICAgT0YoKHZvaWRwZiBwdHIpKTsKKyNlbmRpZgorCisvKiBnZXQgZXJybm8gYW5kIHN0cmVycm9yIGRlZmluaXRpb24gKi8KKyNpZiBkZWZpbmVkIFVOREVSX0NFCisjICBpbmNsdWRlIDx3aW5kb3dzLmg+CisjICBkZWZpbmUgenN0cmVycm9yKCkgZ3pfc3Ryd2luZXJyb3IoKERXT1JEKUdldExhc3RFcnJvcigpKQorI2Vsc2UKKyMgIGlmbmRlZiBOT19TVFJFUlJPUgorIyAgICBpbmNsdWRlIDxlcnJuby5oPgorIyAgICBkZWZpbmUgenN0cmVycm9yKCkgc3RyZXJyb3IoZXJybm8pCisjICBlbHNlCisjICAgIGRlZmluZSB6c3RyZXJyb3IoKSAic3RkaW8gZXJyb3IgKGNvbnN1bHQgZXJybm8pIgorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBwcm92aWRlIHByb3RvdHlwZXMgZm9yIHRoZXNlIHdoZW4gYnVpbGRpbmcgemxpYiB3aXRob3V0IExGUyAqLworI2lmICFkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpIHx8IF9MRlM2NF9MQVJHRUZJTEUtMCA9PSAwCisgICAgWkVYVEVSTiBnekZpbGUgWkVYUE9SVCBnem9wZW42NCBPRigoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopKTsKKyAgICBaRVhURVJOIHpfb2ZmNjRfdCBaRVhQT1JUIGd6c2VlazY0IE9GKChnekZpbGUsIHpfb2ZmNjRfdCwgaW50KSk7CisgICAgWkVYVEVSTiB6X29mZjY0X3QgWkVYUE9SVCBnenRlbGw2NCBPRigoZ3pGaWxlKSk7CisgICAgWkVYVEVSTiB6X29mZjY0X3QgWkVYUE9SVCBnem9mZnNldDY0IE9GKChnekZpbGUpKTsKKyNlbmRpZgorCisvKiBkZWZhdWx0IG1lbUxldmVsICovCisjaWYgTUFYX01FTV9MRVZFTCA+PSA4CisjICBkZWZpbmUgREVGX01FTV9MRVZFTCA4CisjZWxzZQorIyAgZGVmaW5lIERFRl9NRU1fTEVWRUwgIE1BWF9NRU1fTEVWRUwKKyNlbmRpZgorCisvKiBkZWZhdWx0IGkvbyBidWZmZXIgc2l6ZSAtLSBkb3VibGUgdGhpcyBmb3Igb3V0cHV0IHdoZW4gcmVhZGluZyAodGhpcyBhbmQKKyAgIHR3aWNlIHRoaXMgbXVzdCBiZSBhYmxlIHRvIGZpdCBpbiBhbiB1bnNpZ25lZCB0eXBlKSAqLworI2RlZmluZSBHWkJVRlNJWkUgODE5MgorCisvKiBnemlwIG1vZGVzLCBhbHNvIHByb3ZpZGUgYSBsaXR0bGUgaW50ZWdyaXR5IGNoZWNrIG9uIHRoZSBwYXNzZWQgc3RydWN0dXJlICovCisjZGVmaW5lIEdaX05PTkUgMAorI2RlZmluZSBHWl9SRUFEIDcyNDcKKyNkZWZpbmUgR1pfV1JJVEUgMzExNTMKKyNkZWZpbmUgR1pfQVBQRU5EIDEgICAgIC8qIG1vZGUgc2V0IHRvIEdaX1dSSVRFIGFmdGVyIHRoZSBmaWxlIGlzIG9wZW5lZCAqLworCisvKiB2YWx1ZXMgZm9yIGd6X3N0YXRlIGhvdyAqLworI2RlZmluZSBMT09LIDAgICAgICAvKiBsb29rIGZvciBhIGd6aXAgaGVhZGVyICovCisjZGVmaW5lIENPUFkgMSAgICAgIC8qIGNvcHkgaW5wdXQgZGlyZWN0bHkgKi8KKyNkZWZpbmUgR1pJUCAyICAgICAgLyogZGVjb21wcmVzcyBhIGd6aXAgc3RyZWFtICovCisKKy8qIGludGVybmFsIGd6aXAgZmlsZSBzdGF0ZSBkYXRhIHN0cnVjdHVyZSAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgICAgICAvKiBleHBvc2VkIGNvbnRlbnRzIGZvciBnemdldGMoKSBtYWNybyAqLworICAgIHN0cnVjdCBnekZpbGVfcyB4OyAgICAgIC8qICJ4IiBmb3IgZXhwb3NlZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHguaGF2ZTogbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSBhdCB4Lm5leHQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB4Lm5leHQ6IG5leHQgb3V0cHV0IGRhdGEgdG8gZGVsaXZlciBvciB3cml0ZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHgucG9zOiBjdXJyZW50IHBvc2l0aW9uIGluIHVuY29tcHJlc3NlZCBkYXRhICovCisgICAgICAgIC8qIHVzZWQgZm9yIGJvdGggcmVhZGluZyBhbmQgd3JpdGluZyAqLworICAgIGludCBtb2RlOyAgICAgICAgICAgICAgIC8qIHNlZSBnemlwIG1vZGVzIGFib3ZlICovCisgICAgaW50IGZkOyAgICAgICAgICAgICAgICAgLyogZmlsZSBkZXNjcmlwdG9yICovCisgICAgY2hhciAqcGF0aDsgICAgICAgICAgICAgLyogcGF0aCBvciBmZCBmb3IgZXJyb3IgbWVzc2FnZXMgKi8KKyAgICB1bnNpZ25lZCBzaXplOyAgICAgICAgICAvKiBidWZmZXIgc2l6ZSwgemVybyBpZiBub3QgYWxsb2NhdGVkIHlldCAqLworICAgIHVuc2lnbmVkIHdhbnQ7ICAgICAgICAgIC8qIHJlcXVlc3RlZCBidWZmZXIgc2l6ZSwgZGVmYXVsdCBpcyBHWkJVRlNJWkUgKi8KKyAgICB1bnNpZ25lZCBjaGFyICppbjsgICAgICAvKiBpbnB1dCBidWZmZXIgKGRvdWJsZS1zaXplZCB3aGVuIHdyaXRpbmcpICovCisgICAgdW5zaWduZWQgY2hhciAqb3V0OyAgICAgLyogb3V0cHV0IGJ1ZmZlciAoZG91YmxlLXNpemVkIHdoZW4gcmVhZGluZykgKi8KKyAgICBpbnQgZGlyZWN0OyAgICAgICAgICAgICAvKiAwIGlmIHByb2Nlc3NpbmcgZ3ppcCwgMSBpZiB0cmFuc3BhcmVudCAqLworICAgICAgICAvKiBqdXN0IGZvciByZWFkaW5nICovCisgICAgaW50IGhvdzsgICAgICAgICAgICAgICAgLyogMDogZ2V0IGhlYWRlciwgMTogY29weSwgMjogZGVjb21wcmVzcyAqLworICAgIHpfb2ZmNjRfdCBzdGFydDsgICAgICAgIC8qIHdoZXJlIHRoZSBnemlwIGRhdGEgc3RhcnRlZCwgZm9yIHJld2luZGluZyAqLworICAgIGludCBlb2Y7ICAgICAgICAgICAgICAgIC8qIHRydWUgaWYgZW5kIG9mIGlucHV0IGZpbGUgcmVhY2hlZCAqLworICAgIGludCBwYXN0OyAgICAgICAgICAgICAgIC8qIHRydWUgaWYgcmVhZCByZXF1ZXN0ZWQgcGFzdCBlbmQgKi8KKyAgICAgICAgLyoganVzdCBmb3Igd3JpdGluZyAqLworICAgIGludCBsZXZlbDsgICAgICAgICAgICAgIC8qIGNvbXByZXNzaW9uIGxldmVsICovCisgICAgaW50IHN0cmF0ZWd5OyAgICAgICAgICAgLyogY29tcHJlc3Npb24gc3RyYXRlZ3kgKi8KKyAgICBpbnQgcmVzZXQ7ICAgICAgICAgICAgICAvKiB0cnVlIGlmIGEgcmVzZXQgaXMgcGVuZGluZyBhZnRlciBhIFpfRklOSVNIICovCisgICAgICAgIC8qIHNlZWsgcmVxdWVzdCAqLworICAgIHpfb2ZmNjRfdCBza2lwOyAgICAgICAgIC8qIGFtb3VudCB0byBza2lwIChhbHJlYWR5IHJld291bmQgaWYgYmFja3dhcmRzKSAqLworICAgIGludCBzZWVrOyAgICAgICAgICAgICAgIC8qIHRydWUgaWYgc2VlayByZXF1ZXN0IHBlbmRpbmcgKi8KKyAgICAgICAgLyogZXJyb3IgaW5mb3JtYXRpb24gKi8KKyAgICBpbnQgZXJyOyAgICAgICAgICAgICAgICAvKiBlcnJvciBjb2RlICovCisgICAgY2hhciAqbXNnOyAgICAgICAgICAgICAgLyogZXJyb3IgbWVzc2FnZSAqLworICAgICAgICAvKiB6bGliIGluZmxhdGUgb3IgZGVmbGF0ZSBzdHJlYW0gKi8KKyAgICB6X3N0cmVhbSBzdHJtOyAgICAgICAgICAvKiBzdHJlYW0gc3RydWN0dXJlIGluLXBsYWNlIChub3QgYSBwb2ludGVyKSAqLworfSBnel9zdGF0ZTsKK3R5cGVkZWYgZ3pfc3RhdGUgRkFSICpnel9zdGF0ZXA7CisKKy8qIHNoYXJlZCBmdW5jdGlvbnMgKi8KK3ZvaWQgWkxJQl9JTlRFUk5BTCBnel9lcnJvciBPRigoZ3pfc3RhdGVwLCBpbnQsIGNvbnN0IGNoYXIgKikpOworI2lmIGRlZmluZWQgVU5ERVJfQ0UKK2NoYXIgWkxJQl9JTlRFUk5BTCAqZ3pfc3Ryd2luZXJyb3IgT0YoKERXT1JEIGVycm9yKSk7CisjZW5kaWYKKworLyogR1RfT0ZGKHgpLCB3aGVyZSB4IGlzIGFuIHVuc2lnbmVkIHZhbHVlLCBpcyB0cnVlIGlmIHggPiBtYXhpbXVtIHpfb2ZmNjRfdAorICAgdmFsdWUgLS0gbmVlZGVkIHdoZW4gY29tcGFyaW5nIHVuc2lnbmVkIHRvIHpfb2ZmNjRfdCwgd2hpY2ggaXMgc2lnbmVkCisgICAocG9zc2libGUgel9vZmY2NF90IHR5cGVzIG9mZl90LCBvZmY2NF90LCBhbmQgbG9uZyBhcmUgYWxsIHNpZ25lZCkgKi8KKyNpZmRlZiBJTlRfTUFYCisjICBkZWZpbmUgR1RfT0ZGKHgpIChzaXplb2YoaW50KSA9PSBzaXplb2Yoel9vZmY2NF90KSAmJiAoeCkgPiBJTlRfTUFYKQorI2Vsc2UKK3Vuc2lnbmVkIFpMSUJfSU5URVJOQUwgZ3pfaW50bWF4IE9GKCh2b2lkKSk7CisjICBkZWZpbmUgR1RfT0ZGKHgpIChzaXplb2YoaW50KSA9PSBzaXplb2Yoel9vZmY2NF90KSAmJiAoeCkgPiBnel9pbnRtYXgoKSkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2d6bGliLmMgYi9zcmMvZ3psaWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGRhZjI2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2d6bGliLmMKQEAgLTAsMCArMSw2MzkgQEAKKy8qIGd6bGliLmMgLS0gemxpYiBmdW5jdGlvbnMgY29tbW9uIHRvIHJlYWRpbmcgYW5kIHdyaXRpbmcgZ3ppcCBmaWxlcworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTkgTWFyayBBZGxlcgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAorICovCisKKyNpbmNsdWRlICJnemd1dHMuaCIKKworI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX0JPUkxBTkRDX18pCisjICBkZWZpbmUgTFNFRUsgX2xzZWVraTY0CisjZWxzZQorI2lmIGRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkgJiYgX0xGUzY0X0xBUkdFRklMRS0wCisjICBkZWZpbmUgTFNFRUsgbHNlZWs2NAorI2Vsc2UKKyMgIGRlZmluZSBMU0VFSyBsc2VlaworI2VuZGlmCisjZW5kaWYKKworLyogTG9jYWwgZnVuY3Rpb25zICovCitsb2NhbCB2b2lkIGd6X3Jlc2V0IE9GKChnel9zdGF0ZXApKTsKK2xvY2FsIGd6RmlsZSBnel9vcGVuIE9GKChjb25zdCB2b2lkICosIGludCwgY29uc3QgY2hhciAqKSk7CisKKyNpZiBkZWZpbmVkIFVOREVSX0NFCisKKy8qIE1hcCB0aGUgV2luZG93cyBlcnJvciBudW1iZXIgaW4gRVJST1IgdG8gYSBsb2NhbGUtZGVwZW5kZW50IGVycm9yIG1lc3NhZ2UKKyAgIHN0cmluZyBhbmQgcmV0dXJuIGEgcG9pbnRlciB0byBpdC4gIFR5cGljYWxseSwgdGhlIHZhbHVlcyBmb3IgRVJST1IgY29tZQorICAgZnJvbSBHZXRMYXN0RXJyb3IuCisKKyAgIFRoZSBzdHJpbmcgcG9pbnRlZCB0byBzaGFsbCBub3QgYmUgbW9kaWZpZWQgYnkgdGhlIGFwcGxpY2F0aW9uLCBidXQgbWF5IGJlCisgICBvdmVyd3JpdHRlbiBieSBhIHN1YnNlcXVlbnQgY2FsbCB0byBnel9zdHJ3aW5lcnJvcgorCisgICBUaGUgZ3pfc3Ryd2luZXJyb3IgZnVuY3Rpb24gZG9lcyBub3QgY2hhbmdlIHRoZSBjdXJyZW50IHNldHRpbmcgb2YKKyAgIEdldExhc3RFcnJvci4gKi8KK2NoYXIgWkxJQl9JTlRFUk5BTCAqZ3pfc3Ryd2luZXJyb3IgKGVycm9yKQorICAgICBEV09SRCBlcnJvcjsKK3sKKyAgICBzdGF0aWMgY2hhciBidWZbMTAyNF07CisKKyAgICB3Y2hhcl90ICptc2didWY7CisgICAgRFdPUkQgbGFzdGVyciA9IEdldExhc3RFcnJvcigpOworICAgIERXT1JEIGNoYXJzID0gRm9ybWF0TWVzc2FnZShGT1JNQVRfTUVTU0FHRV9GUk9NX1NZU1RFTQorICAgICAgICB8IEZPUk1BVF9NRVNTQUdFX0FMTE9DQVRFX0JVRkZFUiwKKyAgICAgICAgTlVMTCwKKyAgICAgICAgZXJyb3IsCisgICAgICAgIDAsIC8qIERlZmF1bHQgbGFuZ3VhZ2UgKi8KKyAgICAgICAgKExQVk9JRCkmbXNnYnVmLAorICAgICAgICAwLAorICAgICAgICBOVUxMKTsKKyAgICBpZiAoY2hhcnMgIT0gMCkgeworICAgICAgICAvKiBJZiB0aGVyZSBpcyBhbiBcclxuIGFwcGVuZGVkLCB6YXAgaXQuICAqLworICAgICAgICBpZiAoY2hhcnMgPj0gMgorICAgICAgICAgICAgJiYgbXNnYnVmW2NoYXJzIC0gMl0gPT0gJ1xyJyAmJiBtc2didWZbY2hhcnMgLSAxXSA9PSAnXG4nKSB7CisgICAgICAgICAgICBjaGFycyAtPSAyOworICAgICAgICAgICAgbXNnYnVmW2NoYXJzXSA9IDA7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY2hhcnMgPiBzaXplb2YgKGJ1ZikgLSAxKSB7CisgICAgICAgICAgICBjaGFycyA9IHNpemVvZiAoYnVmKSAtIDE7CisgICAgICAgICAgICBtc2didWZbY2hhcnNdID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIHdjc3RvbWJzKGJ1ZiwgbXNnYnVmLCBjaGFycyArIDEpOworICAgICAgICBMb2NhbEZyZWUobXNnYnVmKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHNwcmludGYoYnVmLCAidW5rbm93biB3aW4zMiBlcnJvciAoJWxkKSIsIGVycm9yKTsKKyAgICB9CisKKyAgICBTZXRMYXN0RXJyb3IobGFzdGVycik7CisgICAgcmV0dXJuIGJ1ZjsKK30KKworI2VuZGlmIC8qIFVOREVSX0NFICovCisKKy8qIFJlc2V0IGd6aXAgZmlsZSBzdGF0ZSAqLworbG9jYWwgdm9pZCBnel9yZXNldChzdGF0ZSkKKyAgICBnel9zdGF0ZXAgc3RhdGU7Cit7CisgICAgc3RhdGUtPnguaGF2ZSA9IDA7ICAgICAgICAgICAgICAvKiBubyBvdXRwdXQgZGF0YSBhdmFpbGFibGUgKi8KKyAgICBpZiAoc3RhdGUtPm1vZGUgPT0gR1pfUkVBRCkgeyAgIC8qIGZvciByZWFkaW5nIC4uLiAqLworICAgICAgICBzdGF0ZS0+ZW9mID0gMDsgICAgICAgICAgICAgLyogbm90IGF0IGVuZCBvZiBmaWxlICovCisgICAgICAgIHN0YXRlLT5wYXN0ID0gMDsgICAgICAgICAgICAvKiBoYXZlIG5vdCByZWFkIHBhc3QgZW5kIHlldCAqLworICAgICAgICBzdGF0ZS0+aG93ID0gTE9PSzsgICAgICAgICAgLyogbG9vayBmb3IgZ3ppcCBoZWFkZXIgKi8KKyAgICB9CisgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmb3Igd3JpdGluZyAuLi4gKi8KKyAgICAgICAgc3RhdGUtPnJlc2V0ID0gMDsgICAgICAgICAgIC8qIG5vIGRlZmxhdGVSZXNldCBwZW5kaW5nICovCisgICAgc3RhdGUtPnNlZWsgPSAwOyAgICAgICAgICAgICAgICAvKiBubyBzZWVrIHJlcXVlc3QgcGVuZGluZyAqLworICAgIGd6X2Vycm9yKHN0YXRlLCBaX09LLCBOVUxMKTsgICAgLyogY2xlYXIgZXJyb3IgKi8KKyAgICBzdGF0ZS0+eC5wb3MgPSAwOyAgICAgICAgICAgICAgIC8qIG5vIHVuY29tcHJlc3NlZCBkYXRhIHlldCAqLworICAgIHN0YXRlLT5zdHJtLmF2YWlsX2luID0gMDsgICAgICAgLyogbm8gaW5wdXQgZGF0YSB5ZXQgKi8KK30KKworLyogT3BlbiBhIGd6aXAgZmlsZSBlaXRoZXIgYnkgbmFtZSBvciBmaWxlIGRlc2NyaXB0b3IuICovCitsb2NhbCBnekZpbGUgZ3pfb3BlbihwYXRoLCBmZCwgbW9kZSkKKyAgICBjb25zdCB2b2lkICpwYXRoOworICAgIGludCBmZDsKKyAgICBjb25zdCBjaGFyICptb2RlOworeworICAgIGd6X3N0YXRlcCBzdGF0ZTsKKyAgICB6X3NpemVfdCBsZW47CisgICAgaW50IG9mbGFnOworI2lmZGVmIE9fQ0xPRVhFQworICAgIGludCBjbG9leGVjID0gMDsKKyNlbmRpZgorI2lmZGVmIE9fRVhDTAorICAgIGludCBleGNsdXNpdmUgPSAwOworI2VuZGlmCisKKyAgICAvKiBjaGVjayBpbnB1dCAqLworICAgIGlmIChwYXRoID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgLyogYWxsb2NhdGUgZ3pGaWxlIHN0cnVjdHVyZSB0byByZXR1cm4gKi8KKyAgICBzdGF0ZSA9IChnel9zdGF0ZXApbWFsbG9jKHNpemVvZihnel9zdGF0ZSkpOworICAgIGlmIChzdGF0ZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBzdGF0ZS0+c2l6ZSA9IDA7ICAgICAgICAgICAgLyogbm8gYnVmZmVycyBhbGxvY2F0ZWQgeWV0ICovCisgICAgc3RhdGUtPndhbnQgPSBHWkJVRlNJWkU7ICAgIC8qIHJlcXVlc3RlZCBidWZmZXIgc2l6ZSAqLworICAgIHN0YXRlLT5tc2cgPSBOVUxMOyAgICAgICAgICAvKiBubyBlcnJvciBtZXNzYWdlIHlldCAqLworCisgICAgLyogaW50ZXJwcmV0IG1vZGUgKi8KKyAgICBzdGF0ZS0+bW9kZSA9IEdaX05PTkU7CisgICAgc3RhdGUtPmxldmVsID0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OOworICAgIHN0YXRlLT5zdHJhdGVneSA9IFpfREVGQVVMVF9TVFJBVEVHWTsKKyAgICBzdGF0ZS0+ZGlyZWN0ID0gMDsKKyAgICB3aGlsZSAoKm1vZGUpIHsKKyAgICAgICAgaWYgKCptb2RlID49ICcwJyAmJiAqbW9kZSA8PSAnOScpCisgICAgICAgICAgICBzdGF0ZS0+bGV2ZWwgPSAqbW9kZSAtICcwJzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3dpdGNoICgqbW9kZSkgeworICAgICAgICAgICAgY2FzZSAncic6CisgICAgICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBHWl9SRUFEOworICAgICAgICAgICAgICAgIGJyZWFrOworI2lmbmRlZiBOT19HWkNPTVBSRVNTCisgICAgICAgICAgICBjYXNlICd3JzoKKyAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IEdaX1dSSVRFOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnYSc6CisgICAgICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBHWl9BUFBFTkQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICAgICAgICAgIGNhc2UgJysnOiAgICAgICAvKiBjYW4ndCByZWFkIGFuZCB3cml0ZSBhdCB0aGUgc2FtZSB0aW1lICovCisgICAgICAgICAgICAgICAgZnJlZShzdGF0ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICBjYXNlICdiJzogICAgICAgLyogaWdub3JlIC0tIHdpbGwgcmVxdWVzdCBiaW5hcnkgYW55d2F5ICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisjaWZkZWYgT19DTE9FWEVDCisgICAgICAgICAgICBjYXNlICdlJzoKKyAgICAgICAgICAgICAgICBjbG9leGVjID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorI2lmZGVmIE9fRVhDTAorICAgICAgICAgICAgY2FzZSAneCc6CisgICAgICAgICAgICAgICAgZXhjbHVzaXZlID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorICAgICAgICAgICAgY2FzZSAnZic6CisgICAgICAgICAgICAgICAgc3RhdGUtPnN0cmF0ZWd5ID0gWl9GSUxURVJFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ2gnOgorICAgICAgICAgICAgICAgIHN0YXRlLT5zdHJhdGVneSA9IFpfSFVGRk1BTl9PTkxZOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnUic6CisgICAgICAgICAgICAgICAgc3RhdGUtPnN0cmF0ZWd5ID0gWl9STEU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdGJzoKKyAgICAgICAgICAgICAgICBzdGF0ZS0+c3RyYXRlZ3kgPSBaX0ZJWEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnVCc6CisgICAgICAgICAgICAgICAgc3RhdGUtPmRpcmVjdCA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgLyogY291bGQgY29uc2lkZXIgYXMgYW4gZXJyb3IsIGJ1dCBqdXN0IGlnbm9yZSAqLworICAgICAgICAgICAgICAgIDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgbW9kZSsrOworICAgIH0KKworICAgIC8qIG11c3QgcHJvdmlkZSBhbiAiciIsICJ3Iiwgb3IgImEiICovCisgICAgaWYgKHN0YXRlLT5tb2RlID09IEdaX05PTkUpIHsKKyAgICAgICAgZnJlZShzdGF0ZSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIC8qIGNhbid0IGZvcmNlIHRyYW5zcGFyZW50IHJlYWQgKi8KKyAgICBpZiAoc3RhdGUtPm1vZGUgPT0gR1pfUkVBRCkgeworICAgICAgICBpZiAoc3RhdGUtPmRpcmVjdCkgeworICAgICAgICAgICAgZnJlZShzdGF0ZSk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBzdGF0ZS0+ZGlyZWN0ID0gMTsgICAgICAvKiBmb3IgZW1wdHkgZmlsZSAqLworICAgIH0KKworICAgIC8qIHNhdmUgdGhlIHBhdGggbmFtZSBmb3IgZXJyb3IgbWVzc2FnZXMgKi8KKyNpZmRlZiBXSURFQ0hBUgorICAgIGlmIChmZCA9PSAtMikgeworICAgICAgICBsZW4gPSB3Y3N0b21icyhOVUxMLCBwYXRoLCAwKTsKKyAgICAgICAgaWYgKGxlbiA9PSAoel9zaXplX3QpLTEpCisgICAgICAgICAgICBsZW4gPSAwOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgbGVuID0gc3RybGVuKChjb25zdCBjaGFyICopcGF0aCk7CisgICAgc3RhdGUtPnBhdGggPSAoY2hhciAqKW1hbGxvYyhsZW4gKyAxKTsKKyAgICBpZiAoc3RhdGUtPnBhdGggPT0gTlVMTCkgeworICAgICAgICBmcmVlKHN0YXRlKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorI2lmZGVmIFdJREVDSEFSCisgICAgaWYgKGZkID09IC0yKQorICAgICAgICBpZiAobGVuKQorICAgICAgICAgICAgd2NzdG9tYnMoc3RhdGUtPnBhdGgsIHBhdGgsIGxlbiArIDEpOworICAgICAgICBlbHNlCisgICAgICAgICAgICAqKHN0YXRlLT5wYXRoKSA9IDA7CisgICAgZWxzZQorI2VuZGlmCisjaWYgIWRlZmluZWQoTk9fc25wcmludGYpICYmICFkZWZpbmVkKE5PX3ZzbnByaW50ZikKKyAgICAgICAgKHZvaWQpc25wcmludGYoc3RhdGUtPnBhdGgsIGxlbiArIDEsICIlcyIsIChjb25zdCBjaGFyICopcGF0aCk7CisjZWxzZQorICAgICAgICBzdHJjcHkoc3RhdGUtPnBhdGgsIHBhdGgpOworI2VuZGlmCisKKyAgICAvKiBjb21wdXRlIHRoZSBmbGFncyBmb3Igb3BlbigpICovCisgICAgb2ZsYWcgPQorI2lmZGVmIE9fTEFSR0VGSUxFCisgICAgICAgIE9fTEFSR0VGSUxFIHwKKyNlbmRpZgorI2lmZGVmIE9fQklOQVJZCisgICAgICAgIE9fQklOQVJZIHwKKyNlbmRpZgorI2lmZGVmIE9fQ0xPRVhFQworICAgICAgICAoY2xvZXhlYyA/IE9fQ0xPRVhFQyA6IDApIHwKKyNlbmRpZgorICAgICAgICAoc3RhdGUtPm1vZGUgPT0gR1pfUkVBRCA/CisgICAgICAgICBPX1JET05MWSA6CisgICAgICAgICAoT19XUk9OTFkgfCBPX0NSRUFUIHwKKyNpZmRlZiBPX0VYQ0wKKyAgICAgICAgICAoZXhjbHVzaXZlID8gT19FWENMIDogMCkgfAorI2VuZGlmCisgICAgICAgICAgKHN0YXRlLT5tb2RlID09IEdaX1dSSVRFID8KKyAgICAgICAgICAgT19UUlVOQyA6CisgICAgICAgICAgIE9fQVBQRU5EKSkpOworCisgICAgLyogb3BlbiB0aGUgZmlsZSB3aXRoIHRoZSBhcHByb3ByaWF0ZSBmbGFncyAob3IganVzdCB1c2UgZmQpICovCisgICAgc3RhdGUtPmZkID0gZmQgPiAtMSA/IGZkIDogKAorI2lmZGVmIFdJREVDSEFSCisgICAgICAgIGZkID09IC0yID8gX3dvcGVuKHBhdGgsIG9mbGFnLCAwNjY2KSA6CisjZW5kaWYKKyAgICAgICAgb3BlbigoY29uc3QgY2hhciAqKXBhdGgsIG9mbGFnLCAwNjY2KSk7CisgICAgaWYgKHN0YXRlLT5mZCA9PSAtMSkgeworICAgICAgICBmcmVlKHN0YXRlLT5wYXRoKTsKKyAgICAgICAgZnJlZShzdGF0ZSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoc3RhdGUtPm1vZGUgPT0gR1pfQVBQRU5EKSB7CisgICAgICAgIExTRUVLKHN0YXRlLT5mZCwgMCwgU0VFS19FTkQpOyAgLyogc28gZ3pvZmZzZXQoKSBpcyBjb3JyZWN0ICovCisgICAgICAgIHN0YXRlLT5tb2RlID0gR1pfV1JJVEU7ICAgICAgICAgLyogc2ltcGxpZnkgbGF0ZXIgY2hlY2tzICovCisgICAgfQorCisgICAgLyogc2F2ZSB0aGUgY3VycmVudCBwb3NpdGlvbiBmb3IgcmV3aW5kaW5nIChvbmx5IGlmIHJlYWRpbmcpICovCisgICAgaWYgKHN0YXRlLT5tb2RlID09IEdaX1JFQUQpIHsKKyAgICAgICAgc3RhdGUtPnN0YXJ0ID0gTFNFRUsoc3RhdGUtPmZkLCAwLCBTRUVLX0NVUik7CisgICAgICAgIGlmIChzdGF0ZS0+c3RhcnQgPT0gLTEpIHN0YXRlLT5zdGFydCA9IDA7CisgICAgfQorCisgICAgLyogaW5pdGlhbGl6ZSBzdHJlYW0gKi8KKyAgICBnel9yZXNldChzdGF0ZSk7CisKKyAgICAvKiByZXR1cm4gc3RyZWFtICovCisgICAgcmV0dXJuIChnekZpbGUpc3RhdGU7Cit9CisKKy8qIC0tIHNlZSB6bGliLmggLS0gKi8KK2d6RmlsZSBaRVhQT1JUIGd6b3BlbihwYXRoLCBtb2RlKQorICAgIGNvbnN0IGNoYXIgKnBhdGg7CisgICAgY29uc3QgY2hhciAqbW9kZTsKK3sKKyAgICByZXR1cm4gZ3pfb3BlbihwYXRoLCAtMSwgbW9kZSk7Cit9CisKKy8qIC0tIHNlZSB6bGliLmggLS0gKi8KK2d6RmlsZSBaRVhQT1JUIGd6b3BlbjY0KHBhdGgsIG1vZGUpCisgICAgY29uc3QgY2hhciAqcGF0aDsKKyAgICBjb25zdCBjaGFyICptb2RlOworeworICAgIHJldHVybiBnel9vcGVuKHBhdGgsIC0xLCBtb2RlKTsKK30KKworLyogLS0gc2VlIHpsaWIuaCAtLSAqLworZ3pGaWxlIFpFWFBPUlQgZ3pkb3BlbihmZCwgbW9kZSkKKyAgICBpbnQgZmQ7CisgICAgY29uc3QgY2hhciAqbW9kZTsKK3sKKyAgICBjaGFyICpwYXRoOyAgICAgICAgIC8qIGlkZW50aWZpZXIgZm9yIGVycm9yIG1lc3NhZ2VzICovCisgICAgZ3pGaWxlIGd6OworCisgICAgaWYgKGZkID09IC0xIHx8IChwYXRoID0gKGNoYXIgKiltYWxsb2MoNyArIDMgKiBzaXplb2YoaW50KSkpID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworI2lmICFkZWZpbmVkKE5PX3NucHJpbnRmKSAmJiAhZGVmaW5lZChOT192c25wcmludGYpCisgICAgKHZvaWQpc25wcmludGYocGF0aCwgNyArIDMgKiBzaXplb2YoaW50KSwgIjxmZDolZD4iLCBmZCk7CisjZWxzZQorICAgIHNwcmludGYocGF0aCwgIjxmZDolZD4iLCBmZCk7ICAgLyogZm9yIGRlYnVnZ2luZyAqLworI2VuZGlmCisgICAgZ3ogPSBnel9vcGVuKHBhdGgsIGZkLCBtb2RlKTsKKyAgICBmcmVlKHBhdGgpOworICAgIHJldHVybiBnejsKK30KKworLyogLS0gc2VlIHpsaWIuaCAtLSAqLworI2lmZGVmIFdJREVDSEFSCitnekZpbGUgWkVYUE9SVCBnem9wZW5fdyhwYXRoLCBtb2RlKQorICAgIGNvbnN0IHdjaGFyX3QgKnBhdGg7CisgICAgY29uc3QgY2hhciAqbW9kZTsKK3sKKyAgICByZXR1cm4gZ3pfb3BlbihwYXRoLCAtMiwgbW9kZSk7Cit9CisjZW5kaWYKKworLyogLS0gc2VlIHpsaWIuaCAtLSAqLworaW50IFpFWFBPUlQgZ3pidWZmZXIoZmlsZSwgc2l6ZSkKKyAgICBnekZpbGUgZmlsZTsKKyAgICB1bnNpZ25lZCBzaXplOworeworICAgIGd6X3N0YXRlcCBzdGF0ZTsKKworICAgIC8qIGdldCBpbnRlcm5hbCBzdHJ1Y3R1cmUgYW5kIGNoZWNrIGludGVncml0eSAqLworICAgIGlmIChmaWxlID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBzdGF0ZSA9IChnel9zdGF0ZXApZmlsZTsKKyAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfUkVBRCAmJiBzdGF0ZS0+bW9kZSAhPSBHWl9XUklURSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgLyogbWFrZSBzdXJlIHdlIGhhdmVuJ3QgYWxyZWFkeSBhbGxvY2F0ZWQgbWVtb3J5ICovCisgICAgaWYgKHN0YXRlLT5zaXplICE9IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIC8qIGNoZWNrIGFuZCBzZXQgcmVxdWVzdGVkIHNpemUgKi8KKyAgICBpZiAoKHNpemUgPDwgMSkgPCBzaXplKQorICAgICAgICByZXR1cm4gLTE7ICAgICAgICAgICAgICAvKiBuZWVkIHRvIGJlIGFibGUgdG8gZG91YmxlIGl0ICovCisgICAgaWYgKHNpemUgPCAyKQorICAgICAgICBzaXplID0gMjsgICAgICAgICAgICAgICAvKiBuZWVkIHR3byBieXRlcyB0byBjaGVjayBtYWdpYyBoZWFkZXIgKi8KKyAgICBzdGF0ZS0+d2FudCA9IHNpemU7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qIC0tIHNlZSB6bGliLmggLS0gKi8KK2ludCBaRVhQT1JUIGd6cmV3aW5kKGZpbGUpCisgICAgZ3pGaWxlIGZpbGU7Cit7CisgICAgZ3pfc3RhdGVwIHN0YXRlOworCisgICAgLyogZ2V0IGludGVybmFsIHN0cnVjdHVyZSAqLworICAgIGlmIChmaWxlID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBzdGF0ZSA9IChnel9zdGF0ZXApZmlsZTsKKworICAgIC8qIGNoZWNrIHRoYXQgd2UncmUgcmVhZGluZyBhbmQgdGhhdCB0aGVyZSdzIG5vIGVycm9yICovCisgICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1JFQUQgfHwKKyAgICAgICAgICAgIChzdGF0ZS0+ZXJyICE9IFpfT0sgJiYgc3RhdGUtPmVyciAhPSBaX0JVRl9FUlJPUikpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIC8qIGJhY2sgdXAgYW5kIHN0YXJ0IG92ZXIgKi8KKyAgICBpZiAoTFNFRUsoc3RhdGUtPmZkLCBzdGF0ZS0+c3RhcnQsIFNFRUtfU0VUKSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGd6X3Jlc2V0KHN0YXRlKTsKKyAgICByZXR1cm4gMDsKK30KKworLyogLS0gc2VlIHpsaWIuaCAtLSAqLworel9vZmY2NF90IFpFWFBPUlQgZ3pzZWVrNjQoZmlsZSwgb2Zmc2V0LCB3aGVuY2UpCisgICAgZ3pGaWxlIGZpbGU7CisgICAgel9vZmY2NF90IG9mZnNldDsKKyAgICBpbnQgd2hlbmNlOworeworICAgIHVuc2lnbmVkIG47CisgICAgel9vZmY2NF90IHJldDsKKyAgICBnel9zdGF0ZXAgc3RhdGU7CisKKyAgICAvKiBnZXQgaW50ZXJuYWwgc3RydWN0dXJlIGFuZCBjaGVjayBpbnRlZ3JpdHkgKi8KKyAgICBpZiAoZmlsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgc3RhdGUgPSAoZ3pfc3RhdGVwKWZpbGU7CisgICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1JFQUQgJiYgc3RhdGUtPm1vZGUgIT0gR1pfV1JJVEUpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIC8qIGNoZWNrIHRoYXQgdGhlcmUncyBubyBlcnJvciAqLworICAgIGlmIChzdGF0ZS0+ZXJyICE9IFpfT0sgJiYgc3RhdGUtPmVyciAhPSBaX0JVRl9FUlJPUikKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgLyogY2FuIG9ubHkgc2VlayBmcm9tIHN0YXJ0IG9yIHJlbGF0aXZlIHRvIGN1cnJlbnQgcG9zaXRpb24gKi8KKyAgICBpZiAod2hlbmNlICE9IFNFRUtfU0VUICYmIHdoZW5jZSAhPSBTRUVLX0NVUikKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgLyogbm9ybWFsaXplIG9mZnNldCB0byBhIFNFRUtfQ1VSIHNwZWNpZmljYXRpb24gKi8KKyAgICBpZiAod2hlbmNlID09IFNFRUtfU0VUKQorICAgICAgICBvZmZzZXQgLT0gc3RhdGUtPngucG9zOworICAgIGVsc2UgaWYgKHN0YXRlLT5zZWVrKQorICAgICAgICBvZmZzZXQgKz0gc3RhdGUtPnNraXA7CisgICAgc3RhdGUtPnNlZWsgPSAwOworCisgICAgLyogaWYgd2l0aGluIHJhdyBhcmVhIHdoaWxlIHJlYWRpbmcsIGp1c3QgZ28gdGhlcmUgKi8KKyAgICBpZiAoc3RhdGUtPm1vZGUgPT0gR1pfUkVBRCAmJiBzdGF0ZS0+aG93ID09IENPUFkgJiYKKyAgICAgICAgICAgIHN0YXRlLT54LnBvcyArIG9mZnNldCA+PSAwKSB7CisgICAgICAgIHJldCA9IExTRUVLKHN0YXRlLT5mZCwgb2Zmc2V0IC0gKHpfb2ZmNjRfdClzdGF0ZS0+eC5oYXZlLCBTRUVLX0NVUik7CisgICAgICAgIGlmIChyZXQgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHN0YXRlLT54LmhhdmUgPSAwOworICAgICAgICBzdGF0ZS0+ZW9mID0gMDsKKyAgICAgICAgc3RhdGUtPnBhc3QgPSAwOworICAgICAgICBzdGF0ZS0+c2VlayA9IDA7CisgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX09LLCBOVUxMKTsKKyAgICAgICAgc3RhdGUtPnN0cm0uYXZhaWxfaW4gPSAwOworICAgICAgICBzdGF0ZS0+eC5wb3MgKz0gb2Zmc2V0OworICAgICAgICByZXR1cm4gc3RhdGUtPngucG9zOworICAgIH0KKworICAgIC8qIGNhbGN1bGF0ZSBza2lwIGFtb3VudCwgcmV3aW5kaW5nIGlmIG5lZWRlZCBmb3IgYmFjayBzZWVrIHdoZW4gcmVhZGluZyAqLworICAgIGlmIChvZmZzZXQgPCAwKSB7CisgICAgICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9SRUFEKSAgICAgICAgIC8qIHdyaXRpbmcgLS0gY2FuJ3QgZ28gYmFja3dhcmRzICovCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIG9mZnNldCArPSBzdGF0ZS0+eC5wb3M7CisgICAgICAgIGlmIChvZmZzZXQgPCAwKSAgICAgICAgICAgICAgICAgICAgIC8qIGJlZm9yZSBzdGFydCBvZiBmaWxlISAqLworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBpZiAoZ3pyZXdpbmQoZmlsZSkgPT0gLTEpICAgICAgICAgICAvKiByZXdpbmQsIHRoZW4gc2tpcCB0byBvZmZzZXQgKi8KKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiBpZiByZWFkaW5nLCBza2lwIHdoYXQncyBpbiBvdXRwdXQgYnVmZmVyIChvbmUgbGVzcyBnemdldGMoKSBjaGVjaykgKi8KKyAgICBpZiAoc3RhdGUtPm1vZGUgPT0gR1pfUkVBRCkgeworICAgICAgICBuID0gR1RfT0ZGKHN0YXRlLT54LmhhdmUpIHx8ICh6X29mZjY0X3Qpc3RhdGUtPnguaGF2ZSA+IG9mZnNldCA/CisgICAgICAgICAgICAodW5zaWduZWQpb2Zmc2V0IDogc3RhdGUtPnguaGF2ZTsKKyAgICAgICAgc3RhdGUtPnguaGF2ZSAtPSBuOworICAgICAgICBzdGF0ZS0+eC5uZXh0ICs9IG47CisgICAgICAgIHN0YXRlLT54LnBvcyArPSBuOworICAgICAgICBvZmZzZXQgLT0gbjsKKyAgICB9CisKKyAgICAvKiByZXF1ZXN0IHNraXAgKGlmIG5vdCB6ZXJvKSAqLworICAgIGlmIChvZmZzZXQpIHsKKyAgICAgICAgc3RhdGUtPnNlZWsgPSAxOworICAgICAgICBzdGF0ZS0+c2tpcCA9IG9mZnNldDsKKyAgICB9CisgICAgcmV0dXJuIHN0YXRlLT54LnBvcyArIG9mZnNldDsKK30KKworLyogLS0gc2VlIHpsaWIuaCAtLSAqLworel9vZmZfdCBaRVhQT1JUIGd6c2VlayhmaWxlLCBvZmZzZXQsIHdoZW5jZSkKKyAgICBnekZpbGUgZmlsZTsKKyAgICB6X29mZl90IG9mZnNldDsKKyAgICBpbnQgd2hlbmNlOworeworICAgIHpfb2ZmNjRfdCByZXQ7CisKKyAgICByZXQgPSBnenNlZWs2NChmaWxlLCAoel9vZmY2NF90KW9mZnNldCwgd2hlbmNlKTsKKyAgICByZXR1cm4gcmV0ID09ICh6X29mZl90KXJldCA/ICh6X29mZl90KXJldCA6IC0xOworfQorCisvKiAtLSBzZWUgemxpYi5oIC0tICovCit6X29mZjY0X3QgWkVYUE9SVCBnenRlbGw2NChmaWxlKQorICAgIGd6RmlsZSBmaWxlOworeworICAgIGd6X3N0YXRlcCBzdGF0ZTsKKworICAgIC8qIGdldCBpbnRlcm5hbCBzdHJ1Y3R1cmUgYW5kIGNoZWNrIGludGVncml0eSAqLworICAgIGlmIChmaWxlID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBzdGF0ZSA9IChnel9zdGF0ZXApZmlsZTsKKyAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfUkVBRCAmJiBzdGF0ZS0+bW9kZSAhPSBHWl9XUklURSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgLyogcmV0dXJuIHBvc2l0aW9uICovCisgICAgcmV0dXJuIHN0YXRlLT54LnBvcyArIChzdGF0ZS0+c2VlayA/IHN0YXRlLT5za2lwIDogMCk7Cit9CisKKy8qIC0tIHNlZSB6bGliLmggLS0gKi8KK3pfb2ZmX3QgWkVYUE9SVCBnenRlbGwoZmlsZSkKKyAgICBnekZpbGUgZmlsZTsKK3sKKyAgICB6X29mZjY0X3QgcmV0OworCisgICAgcmV0ID0gZ3p0ZWxsNjQoZmlsZSk7CisgICAgcmV0dXJuIHJldCA9PSAoel9vZmZfdClyZXQgPyAoel9vZmZfdClyZXQgOiAtMTsKK30KKworLyogLS0gc2VlIHpsaWIuaCAtLSAqLworel9vZmY2NF90IFpFWFBPUlQgZ3pvZmZzZXQ2NChmaWxlKQorICAgIGd6RmlsZSBmaWxlOworeworICAgIHpfb2ZmNjRfdCBvZmZzZXQ7CisgICAgZ3pfc3RhdGVwIHN0YXRlOworCisgICAgLyogZ2V0IGludGVybmFsIHN0cnVjdHVyZSBhbmQgY2hlY2sgaW50ZWdyaXR5ICovCisgICAgaWYgKGZpbGUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIHN0YXRlID0gKGd6X3N0YXRlcClmaWxlOworICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9SRUFEICYmIHN0YXRlLT5tb2RlICE9IEdaX1dSSVRFKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICAvKiBjb21wdXRlIGFuZCByZXR1cm4gZWZmZWN0aXZlIG9mZnNldCBpbiBmaWxlICovCisgICAgb2Zmc2V0ID0gTFNFRUsoc3RhdGUtPmZkLCAwLCBTRUVLX0NVUik7CisgICAgaWYgKG9mZnNldCA9PSAtMSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGlmIChzdGF0ZS0+bW9kZSA9PSBHWl9SRUFEKSAgICAgICAgICAgICAvKiByZWFkaW5nICovCisgICAgICAgIG9mZnNldCAtPSBzdGF0ZS0+c3RybS5hdmFpbF9pbjsgICAgIC8qIGRvbid0IGNvdW50IGJ1ZmZlcmVkIGlucHV0ICovCisgICAgcmV0dXJuIG9mZnNldDsKK30KKworLyogLS0gc2VlIHpsaWIuaCAtLSAqLworel9vZmZfdCBaRVhQT1JUIGd6b2Zmc2V0KGZpbGUpCisgICAgZ3pGaWxlIGZpbGU7Cit7CisgICAgel9vZmY2NF90IHJldDsKKworICAgIHJldCA9IGd6b2Zmc2V0NjQoZmlsZSk7CisgICAgcmV0dXJuIHJldCA9PSAoel9vZmZfdClyZXQgPyAoel9vZmZfdClyZXQgOiAtMTsKK30KKworLyogLS0gc2VlIHpsaWIuaCAtLSAqLworaW50IFpFWFBPUlQgZ3plb2YoZmlsZSkKKyAgICBnekZpbGUgZmlsZTsKK3sKKyAgICBnel9zdGF0ZXAgc3RhdGU7CisKKyAgICAvKiBnZXQgaW50ZXJuYWwgc3RydWN0dXJlIGFuZCBjaGVjayBpbnRlZ3JpdHkgKi8KKyAgICBpZiAoZmlsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMDsKKyAgICBzdGF0ZSA9IChnel9zdGF0ZXApZmlsZTsKKyAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfUkVBRCAmJiBzdGF0ZS0+bW9kZSAhPSBHWl9XUklURSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvKiByZXR1cm4gZW5kLW9mLWZpbGUgc3RhdGUgKi8KKyAgICByZXR1cm4gc3RhdGUtPm1vZGUgPT0gR1pfUkVBRCA/IHN0YXRlLT5wYXN0IDogMDsKK30KKworLyogLS0gc2VlIHpsaWIuaCAtLSAqLworY29uc3QgY2hhciAqIFpFWFBPUlQgZ3plcnJvcihmaWxlLCBlcnJudW0pCisgICAgZ3pGaWxlIGZpbGU7CisgICAgaW50ICplcnJudW07Cit7CisgICAgZ3pfc3RhdGVwIHN0YXRlOworCisgICAgLyogZ2V0IGludGVybmFsIHN0cnVjdHVyZSBhbmQgY2hlY2sgaW50ZWdyaXR5ICovCisgICAgaWYgKGZpbGUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgc3RhdGUgPSAoZ3pfc3RhdGVwKWZpbGU7CisgICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1JFQUQgJiYgc3RhdGUtPm1vZGUgIT0gR1pfV1JJVEUpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgLyogcmV0dXJuIGVycm9yIGluZm9ybWF0aW9uICovCisgICAgaWYgKGVycm51bSAhPSBOVUxMKQorICAgICAgICAqZXJybnVtID0gc3RhdGUtPmVycjsKKyAgICByZXR1cm4gc3RhdGUtPmVyciA9PSBaX01FTV9FUlJPUiA/ICJvdXQgb2YgbWVtb3J5IiA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RhdGUtPm1zZyA9PSBOVUxMID8gIiIgOiBzdGF0ZS0+bXNnKTsKK30KKworLyogLS0gc2VlIHpsaWIuaCAtLSAqLwordm9pZCBaRVhQT1JUIGd6Y2xlYXJlcnIoZmlsZSkKKyAgICBnekZpbGUgZmlsZTsKK3sKKyAgICBnel9zdGF0ZXAgc3RhdGU7CisKKyAgICAvKiBnZXQgaW50ZXJuYWwgc3RydWN0dXJlIGFuZCBjaGVjayBpbnRlZ3JpdHkgKi8KKyAgICBpZiAoZmlsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisgICAgc3RhdGUgPSAoZ3pfc3RhdGVwKWZpbGU7CisgICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1JFQUQgJiYgc3RhdGUtPm1vZGUgIT0gR1pfV1JJVEUpCisgICAgICAgIHJldHVybjsKKworICAgIC8qIGNsZWFyIGVycm9yIGFuZCBlbmQtb2YtZmlsZSAqLworICAgIGlmIChzdGF0ZS0+bW9kZSA9PSBHWl9SRUFEKSB7CisgICAgICAgIHN0YXRlLT5lb2YgPSAwOworICAgICAgICBzdGF0ZS0+cGFzdCA9IDA7CisgICAgfQorICAgIGd6X2Vycm9yKHN0YXRlLCBaX09LLCBOVUxMKTsKK30KKworLyogQ3JlYXRlIGFuIGVycm9yIG1lc3NhZ2UgaW4gYWxsb2NhdGVkIG1lbW9yeSBhbmQgc2V0IHN0YXRlLT5lcnIgYW5kCisgICBzdGF0ZS0+bXNnIGFjY29yZGluZ2x5LiAgRnJlZSBhbnkgcHJldmlvdXMgZXJyb3IgbWVzc2FnZSBhbHJlYWR5IHRoZXJlLiAgRG8KKyAgIG5vdCB0cnkgdG8gZnJlZSBvciBhbGxvY2F0ZSBzcGFjZSBpZiB0aGUgZXJyb3IgaXMgWl9NRU1fRVJST1IgKG91dCBvZgorICAgbWVtb3J5KS4gIFNpbXBseSBzYXZlIHRoZSBlcnJvciBtZXNzYWdlIGFzIGEgc3RhdGljIHN0cmluZy4gIElmIHRoZXJlIGlzIGFuCisgICBhbGxvY2F0aW9uIGZhaWx1cmUgY29uc3RydWN0aW5nIHRoZSBlcnJvciBtZXNzYWdlLCB0aGVuIGNvbnZlcnQgdGhlIGVycm9yIHRvCisgICBvdXQgb2YgbWVtb3J5LiAqLwordm9pZCBaTElCX0lOVEVSTkFMIGd6X2Vycm9yKHN0YXRlLCBlcnIsIG1zZykKKyAgICBnel9zdGF0ZXAgc3RhdGU7CisgICAgaW50IGVycjsKKyAgICBjb25zdCBjaGFyICptc2c7Cit7CisgICAgLyogZnJlZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBtZXNzYWdlIGFuZCBjbGVhciAqLworICAgIGlmIChzdGF0ZS0+bXNnICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKHN0YXRlLT5lcnIgIT0gWl9NRU1fRVJST1IpCisgICAgICAgICAgICBmcmVlKHN0YXRlLT5tc2cpOworICAgICAgICBzdGF0ZS0+bXNnID0gTlVMTDsKKyAgICB9CisKKyAgICAvKiBpZiBmYXRhbCwgc2V0IHN0YXRlLT54LmhhdmUgdG8gMCBzbyB0aGF0IHRoZSBnemdldGMoKSBtYWNybyBmYWlscyAqLworICAgIGlmIChlcnIgIT0gWl9PSyAmJiBlcnIgIT0gWl9CVUZfRVJST1IpCisgICAgICAgIHN0YXRlLT54LmhhdmUgPSAwOworCisgICAgLyogc2V0IGVycm9yIGNvZGUsIGFuZCBpZiBubyBtZXNzYWdlLCB0aGVuIGRvbmUgKi8KKyAgICBzdGF0ZS0+ZXJyID0gZXJyOworICAgIGlmIChtc2cgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLyogZm9yIGFuIG91dCBvZiBtZW1vcnkgZXJyb3IsIHJldHVybiBsaXRlcmFsIHN0cmluZyB3aGVuIHJlcXVlc3RlZCAqLworICAgIGlmIChlcnIgPT0gWl9NRU1fRVJST1IpCisgICAgICAgIHJldHVybjsKKworICAgIC8qIGNvbnN0cnVjdCBlcnJvciBtZXNzYWdlIHdpdGggcGF0aCAqLworICAgIGlmICgoc3RhdGUtPm1zZyA9IChjaGFyICopbWFsbG9jKHN0cmxlbihzdGF0ZS0+cGF0aCkgKyBzdHJsZW4obXNnKSArIDMpKSA9PQorICAgICAgICAgICAgTlVMTCkgeworICAgICAgICBzdGF0ZS0+ZXJyID0gWl9NRU1fRVJST1I7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjaWYgIWRlZmluZWQoTk9fc25wcmludGYpICYmICFkZWZpbmVkKE5PX3ZzbnByaW50ZikKKyAgICAodm9pZClzbnByaW50ZihzdGF0ZS0+bXNnLCBzdHJsZW4oc3RhdGUtPnBhdGgpICsgc3RybGVuKG1zZykgKyAzLAorICAgICAgICAgICAgICAgICAgICIlcyVzJXMiLCBzdGF0ZS0+cGF0aCwgIjogIiwgbXNnKTsKKyNlbHNlCisgICAgc3RyY3B5KHN0YXRlLT5tc2csIHN0YXRlLT5wYXRoKTsKKyAgICBzdHJjYXQoc3RhdGUtPm1zZywgIjogIik7CisgICAgc3RyY2F0KHN0YXRlLT5tc2csIG1zZyk7CisjZW5kaWYKK30KKworI2lmbmRlZiBJTlRfTUFYCisvKiBwb3J0YWJseSByZXR1cm4gbWF4aW11bSB2YWx1ZSBmb3IgYW4gaW50ICh3aGVuIGxpbWl0cy5oIHByZXN1bWVkIG5vdAorICAgYXZhaWxhYmxlKSAtLSB3ZSBuZWVkIHRvIGRvIHRoaXMgdG8gY292ZXIgY2FzZXMgd2hlcmUgMidzIGNvbXBsZW1lbnQgbm90CisgICB1c2VkLCBzaW5jZSBDIHN0YW5kYXJkIHBlcm1pdHMgMSdzIGNvbXBsZW1lbnQgYW5kIHNpZ24tYml0IHJlcHJlc2VudGF0aW9ucywKKyAgIG90aGVyd2lzZSB3ZSBjb3VsZCBqdXN0IHVzZSAoKHVuc2lnbmVkKS0xKSA+PiAxICovCit1bnNpZ25lZCBaTElCX0lOVEVSTkFMIGd6X2ludG1heCgpCit7CisgICAgdW5zaWduZWQgcCwgcTsKKworICAgIHAgPSAxOworICAgIGRvIHsKKyAgICAgICAgcSA9IHA7CisgICAgICAgIHAgPDw9IDE7CisgICAgICAgIHArKzsKKyAgICB9IHdoaWxlIChwID4gcSk7CisgICAgcmV0dXJuIHEgPj4gMTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2d6cmVhZC5jIGIvc3JjL2d6cmVhZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NGM5YmYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvZ3pyZWFkLmMKQEAgLTAsMCArMSw2NTIgQEAKKy8qIGd6cmVhZC5jIC0tIHpsaWIgZnVuY3Rpb25zIGZvciByZWFkaW5nIGd6aXAgZmlsZXMKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE3IE1hcmsgQWRsZXIKKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKKyAqLworCisjaW5jbHVkZSAiZ3pndXRzLmgiCisKKy8qIExvY2FsIGZ1bmN0aW9ucyAqLworbG9jYWwgaW50IGd6X2xvYWQgT0YoKGd6X3N0YXRlcCwgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCwgdW5zaWduZWQgKikpOworbG9jYWwgaW50IGd6X2F2YWlsIE9GKChnel9zdGF0ZXApKTsKK2xvY2FsIGludCBnel9sb29rIE9GKChnel9zdGF0ZXApKTsKK2xvY2FsIGludCBnel9kZWNvbXAgT0YoKGd6X3N0YXRlcCkpOworbG9jYWwgaW50IGd6X2ZldGNoIE9GKChnel9zdGF0ZXApKTsKK2xvY2FsIGludCBnel9za2lwIE9GKChnel9zdGF0ZXAsIHpfb2ZmNjRfdCkpOworbG9jYWwgel9zaXplX3QgZ3pfcmVhZCBPRigoZ3pfc3RhdGVwLCB2b2lkcCwgel9zaXplX3QpKTsKKworLyogVXNlIHJlYWQoKSB0byBsb2FkIGEgYnVmZmVyIC0tIHJldHVybiAtMSBvbiBlcnJvciwgb3RoZXJ3aXNlIDAuICBSZWFkIGZyb20KKyAgIHN0YXRlLT5mZCwgYW5kIHVwZGF0ZSBzdGF0ZS0+ZW9mLCBzdGF0ZS0+ZXJyLCBhbmQgc3RhdGUtPm1zZyBhcyBhcHByb3ByaWF0ZS4KKyAgIFRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gbG9vcCBvbiByZWFkKCksIHNpbmNlIHJlYWQoKSBpcyBub3QgZ3VhcmFudGVlZCB0bworICAgcmVhZCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlcXVlc3RlZCwgZGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIGRlc2NyaXB0b3IuICovCitsb2NhbCBpbnQgZ3pfbG9hZChzdGF0ZSwgYnVmLCBsZW4sIGhhdmUpCisgICAgZ3pfc3RhdGVwIHN0YXRlOworICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZjsKKyAgICB1bnNpZ25lZCBsZW47CisgICAgdW5zaWduZWQgKmhhdmU7Cit7CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBnZXQsIG1heCA9ICgodW5zaWduZWQpLTEgPj4gMikgKyAxOworCisgICAgKmhhdmUgPSAwOworICAgIGRvIHsKKyAgICAgICAgZ2V0ID0gbGVuIC0gKmhhdmU7CisgICAgICAgIGlmIChnZXQgPiBtYXgpCisgICAgICAgICAgICBnZXQgPSBtYXg7CisgICAgICAgIHJldCA9IHJlYWQoc3RhdGUtPmZkLCBidWYgKyAqaGF2ZSwgZ2V0KTsKKyAgICAgICAgaWYgKHJldCA8PSAwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICpoYXZlICs9ICh1bnNpZ25lZClyZXQ7CisgICAgfSB3aGlsZSAoKmhhdmUgPCBsZW4pOworICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0VSUk5PLCB6c3RyZXJyb3IoKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKHJldCA9PSAwKQorICAgICAgICBzdGF0ZS0+ZW9mID0gMTsKKyAgICByZXR1cm4gMDsKK30KKworLyogTG9hZCB1cCBpbnB1dCBidWZmZXIgYW5kIHNldCBlb2YgZmxhZyBpZiBsYXN0IGRhdGEgbG9hZGVkIC0tIHJldHVybiAtMSBvbgorICAgZXJyb3IsIDAgb3RoZXJ3aXNlLiAgTm90ZSB0aGF0IHRoZSBlb2YgZmxhZyBpcyBzZXQgd2hlbiB0aGUgZW5kIG9mIHRoZSBpbnB1dAorICAgZmlsZSBpcyByZWFjaGVkLCBldmVuIHRob3VnaCB0aGVyZSBtYXkgYmUgdW51c2VkIGRhdGEgaW4gdGhlIGJ1ZmZlci4gIE9uY2UKKyAgIHRoYXQgZGF0YSBoYXMgYmVlbiB1c2VkLCBubyBtb3JlIGF0dGVtcHRzIHdpbGwgYmUgbWFkZSB0byByZWFkIHRoZSBmaWxlLgorICAgSWYgc3RybS0+YXZhaWxfaW4gIT0gMCwgdGhlbiB0aGUgY3VycmVudCBkYXRhIGlzIG1vdmVkIHRvIHRoZSBiZWdpbm5pbmcgb2YKKyAgIHRoZSBpbnB1dCBidWZmZXIsIGFuZCB0aGVuIHRoZSByZW1haW5kZXIgb2YgdGhlIGJ1ZmZlciBpcyBsb2FkZWQgd2l0aCB0aGUKKyAgIGF2YWlsYWJsZSBkYXRhIGZyb20gdGhlIGlucHV0IGZpbGUuICovCitsb2NhbCBpbnQgZ3pfYXZhaWwoc3RhdGUpCisgICAgZ3pfc3RhdGVwIHN0YXRlOworeworICAgIHVuc2lnbmVkIGdvdDsKKyAgICB6X3N0cmVhbXAgc3RybSA9ICYoc3RhdGUtPnN0cm0pOworCisgICAgaWYgKHN0YXRlLT5lcnIgIT0gWl9PSyAmJiBzdGF0ZS0+ZXJyICE9IFpfQlVGX0VSUk9SKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKHN0YXRlLT5lb2YgPT0gMCkgeworICAgICAgICBpZiAoc3RybS0+YXZhaWxfaW4pIHsgICAgICAgLyogY29weSB3aGF0J3MgdGhlcmUgdG8gdGhlIHN0YXJ0ICovCisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpwID0gc3RhdGUtPmluOworICAgICAgICAgICAgdW5zaWduZWQgY29uc3QgY2hhciAqcSA9IHN0cm0tPm5leHRfaW47CisgICAgICAgICAgICB1bnNpZ25lZCBuID0gc3RybS0+YXZhaWxfaW47CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgKnArKyA9ICpxKys7CisgICAgICAgICAgICB9IHdoaWxlICgtLW4pOworICAgICAgICB9CisgICAgICAgIGlmIChnel9sb2FkKHN0YXRlLCBzdGF0ZS0+aW4gKyBzdHJtLT5hdmFpbF9pbiwKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnNpemUgLSBzdHJtLT5hdmFpbF9pbiwgJmdvdCkgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHN0cm0tPmF2YWlsX2luICs9IGdvdDsKKyAgICAgICAgc3RybS0+bmV4dF9pbiA9IHN0YXRlLT5pbjsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKy8qIExvb2sgZm9yIGd6aXAgaGVhZGVyLCBzZXQgdXAgZm9yIGluZmxhdGUgb3IgY29weS4gIHN0YXRlLT54LmhhdmUgbXVzdCBiZSAwLgorICAgSWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSBpbiwgYWxsb2NhdGUgcmVxdWlyZWQgbWVtb3J5LiAgc3RhdGUtPmhvdyB3aWxsIGJlCisgICBsZWZ0IHVuY2hhbmdlZCBpZiB0aGVyZSBpcyBubyBtb3JlIGlucHV0IGRhdGEgYXZhaWxhYmxlLCB3aWxsIGJlIHNldCB0byBDT1BZCisgICBpZiB0aGVyZSBpcyBubyBnemlwIGhlYWRlciBhbmQgZGlyZWN0IGNvcHlpbmcgd2lsbCBiZSBwZXJmb3JtZWQsIG9yIGl0IHdpbGwKKyAgIGJlIHNldCB0byBHWklQIGZvciBkZWNvbXByZXNzaW9uLiAgSWYgZGlyZWN0IGNvcHlpbmcsIHRoZW4gbGVmdG92ZXIgaW5wdXQKKyAgIGRhdGEgZnJvbSB0aGUgaW5wdXQgYnVmZmVyIHdpbGwgYmUgY29waWVkIHRvIHRoZSBvdXRwdXQgYnVmZmVyLiAgSW4gdGhhdAorICAgY2FzZSwgYWxsIGZ1cnRoZXIgZmlsZSByZWFkcyB3aWxsIGJlIGRpcmVjdGx5IHRvIGVpdGhlciB0aGUgb3V0cHV0IGJ1ZmZlciBvcgorICAgYSB1c2VyIGJ1ZmZlci4gIElmIGRlY29tcHJlc3NpbmcsIHRoZSBpbmZsYXRlIHN0YXRlIHdpbGwgYmUgaW5pdGlhbGl6ZWQuCisgICBnel9sb29rKCkgd2lsbCByZXR1cm4gMCBvbiBzdWNjZXNzIG9yIC0xIG9uIGZhaWx1cmUuICovCitsb2NhbCBpbnQgZ3pfbG9vayhzdGF0ZSkKKyAgICBnel9zdGF0ZXAgc3RhdGU7Cit7CisgICAgel9zdHJlYW1wIHN0cm0gPSAmKHN0YXRlLT5zdHJtKTsKKworICAgIC8qIGFsbG9jYXRlIHJlYWQgYnVmZmVycyBhbmQgaW5mbGF0ZSBtZW1vcnkgKi8KKyAgICBpZiAoc3RhdGUtPnNpemUgPT0gMCkgeworICAgICAgICAvKiBhbGxvY2F0ZSBidWZmZXJzICovCisgICAgICAgIHN0YXRlLT5pbiA9ICh1bnNpZ25lZCBjaGFyICopbWFsbG9jKHN0YXRlLT53YW50KTsKKyAgICAgICAgc3RhdGUtPm91dCA9ICh1bnNpZ25lZCBjaGFyICopbWFsbG9jKHN0YXRlLT53YW50IDw8IDEpOworICAgICAgICBpZiAoc3RhdGUtPmluID09IE5VTEwgfHwgc3RhdGUtPm91dCA9PSBOVUxMKSB7CisgICAgICAgICAgICBmcmVlKHN0YXRlLT5vdXQpOworICAgICAgICAgICAgZnJlZShzdGF0ZS0+aW4pOworICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfTUVNX0VSUk9SLCAib3V0IG9mIG1lbW9yeSIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIHN0YXRlLT5zaXplID0gc3RhdGUtPndhbnQ7CisKKyAgICAgICAgLyogYWxsb2NhdGUgaW5mbGF0ZSBtZW1vcnkgKi8KKyAgICAgICAgc3RhdGUtPnN0cm0uemFsbG9jID0gWl9OVUxMOworICAgICAgICBzdGF0ZS0+c3RybS56ZnJlZSA9IFpfTlVMTDsKKyAgICAgICAgc3RhdGUtPnN0cm0ub3BhcXVlID0gWl9OVUxMOworICAgICAgICBzdGF0ZS0+c3RybS5hdmFpbF9pbiA9IDA7CisgICAgICAgIHN0YXRlLT5zdHJtLm5leHRfaW4gPSBaX05VTEw7CisgICAgICAgIGlmIChpbmZsYXRlSW5pdDIoJihzdGF0ZS0+c3RybSksIDE1ICsgMTYpICE9IFpfT0spIHsgICAgLyogZ3VuemlwICovCisgICAgICAgICAgICBmcmVlKHN0YXRlLT5vdXQpOworICAgICAgICAgICAgZnJlZShzdGF0ZS0+aW4pOworICAgICAgICAgICAgc3RhdGUtPnNpemUgPSAwOworICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfTUVNX0VSUk9SLCAib3V0IG9mIG1lbW9yeSIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorCisgICAgLyogZ2V0IGF0IGxlYXN0IHRoZSBtYWdpYyBieXRlcyBpbiB0aGUgaW5wdXQgYnVmZmVyICovCisgICAgaWYgKHN0cm0tPmF2YWlsX2luIDwgMikgeworICAgICAgICBpZiAoZ3pfYXZhaWwoc3RhdGUpID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBpZiAoc3RybS0+YXZhaWxfaW4gPT0gMCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8qIGxvb2sgZm9yIGd6aXAgbWFnaWMgYnl0ZXMgLS0gaWYgdGhlcmUsIGRvIGd6aXAgZGVjb2RpbmcgKG5vdGU6IHRoZXJlIGlzCisgICAgICAgYSBsb2dpY2FsIGRpbGVtbWEgaGVyZSB3aGVuIGNvbnNpZGVyaW5nIHRoZSBjYXNlIG9mIGEgcGFydGlhbGx5IHdyaXR0ZW4KKyAgICAgICBnemlwIGZpbGUsIHRvIHdpdCwgaWYgYSBzaW5nbGUgMzEgYnl0ZSBpcyB3cml0dGVuLCB0aGVuIHdlIGNhbm5vdCB0ZWxsCisgICAgICAgd2hldGhlciB0aGlzIGlzIGEgc2luZ2xlLWJ5dGUgZmlsZSwgb3IganVzdCBhIHBhcnRpYWxseSB3cml0dGVuIGd6aXAKKyAgICAgICBmaWxlIC0tIGZvciBoZXJlIHdlIGFzc3VtZSB0aGF0IGlmIGEgZ3ppcCBmaWxlIGlzIGJlaW5nIHdyaXR0ZW4sIHRoZW4KKyAgICAgICB0aGUgaGVhZGVyIHdpbGwgYmUgd3JpdHRlbiBpbiBhIHNpbmdsZSBvcGVyYXRpb24sIHNvIHRoYXQgcmVhZGluZyBhCisgICAgICAgc2luZ2xlIGJ5dGUgaXMgc3VmZmljaWVudCBpbmRpY2F0aW9uIHRoYXQgaXQgaXMgbm90IGEgZ3ppcCBmaWxlKSAqLworICAgIGlmIChzdHJtLT5hdmFpbF9pbiA+IDEgJiYKKyAgICAgICAgICAgIHN0cm0tPm5leHRfaW5bMF0gPT0gMzEgJiYgc3RybS0+bmV4dF9pblsxXSA9PSAxMzkpIHsKKyAgICAgICAgaW5mbGF0ZVJlc2V0KHN0cm0pOworICAgICAgICBzdGF0ZS0+aG93ID0gR1pJUDsKKyAgICAgICAgc3RhdGUtPmRpcmVjdCA9IDA7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8qIG5vIGd6aXAgaGVhZGVyIC0tIGlmIHdlIHdlcmUgZGVjb2RpbmcgZ3ppcCBiZWZvcmUsIHRoZW4gdGhpcyBpcyB0cmFpbGluZworICAgICAgIGdhcmJhZ2UuICBJZ25vcmUgdGhlIHRyYWlsaW5nIGdhcmJhZ2UgYW5kIGZpbmlzaC4gKi8KKyAgICBpZiAoc3RhdGUtPmRpcmVjdCA9PSAwKSB7CisgICAgICAgIHN0cm0tPmF2YWlsX2luID0gMDsKKyAgICAgICAgc3RhdGUtPmVvZiA9IDE7CisgICAgICAgIHN0YXRlLT54LmhhdmUgPSAwOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvKiBkb2luZyByYXcgaS9vLCBjb3B5IGFueSBsZWZ0b3ZlciBpbnB1dCB0byBvdXRwdXQgLS0gdGhpcyBhc3N1bWVzIHRoYXQKKyAgICAgICB0aGUgb3V0cHV0IGJ1ZmZlciBpcyBsYXJnZXIgdGhhbiB0aGUgaW5wdXQgYnVmZmVyLCB3aGljaCBhbHNvIGFzc3VyZXMKKyAgICAgICBzcGFjZSBmb3IgZ3p1bmdldGMoKSAqLworICAgIHN0YXRlLT54Lm5leHQgPSBzdGF0ZS0+b3V0OworICAgIGlmIChzdHJtLT5hdmFpbF9pbikgeworICAgICAgICBtZW1jcHkoc3RhdGUtPngubmV4dCwgc3RybS0+bmV4dF9pbiwgc3RybS0+YXZhaWxfaW4pOworICAgICAgICBzdGF0ZS0+eC5oYXZlID0gc3RybS0+YXZhaWxfaW47CisgICAgICAgIHN0cm0tPmF2YWlsX2luID0gMDsKKyAgICB9CisgICAgc3RhdGUtPmhvdyA9IENPUFk7CisgICAgc3RhdGUtPmRpcmVjdCA9IDE7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qIERlY29tcHJlc3MgZnJvbSBpbnB1dCB0byB0aGUgcHJvdmlkZWQgbmV4dF9vdXQgYW5kIGF2YWlsX291dCBpbiB0aGUgc3RhdGUuCisgICBPbiByZXR1cm4sIHN0YXRlLT54LmhhdmUgYW5kIHN0YXRlLT54Lm5leHQgcG9pbnQgdG8gdGhlIGp1c3QgZGVjb21wcmVzc2VkCisgICBkYXRhLiAgSWYgdGhlIGd6aXAgc3RyZWFtIGNvbXBsZXRlcywgc3RhdGUtPmhvdyBpcyByZXNldCB0byBMT09LIHRvIGxvb2sgZm9yCisgICB0aGUgbmV4dCBnemlwIHN0cmVhbSBvciByYXcgZGF0YSwgb25jZSBzdGF0ZS0+eC5oYXZlIGlzIGRlcGxldGVkLiAgUmV0dXJucyAwCisgICBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLiAqLworbG9jYWwgaW50IGd6X2RlY29tcChzdGF0ZSkKKyAgICBnel9zdGF0ZXAgc3RhdGU7Cit7CisgICAgaW50IHJldCA9IFpfT0s7CisgICAgdW5zaWduZWQgaGFkOworICAgIHpfc3RyZWFtcCBzdHJtID0gJihzdGF0ZS0+c3RybSk7CisKKyAgICAvKiBmaWxsIG91dHB1dCBidWZmZXIgdXAgdG8gZW5kIG9mIGRlZmxhdGUgc3RyZWFtICovCisgICAgaGFkID0gc3RybS0+YXZhaWxfb3V0OworICAgIGRvIHsKKyAgICAgICAgLyogZ2V0IG1vcmUgaW5wdXQgZm9yIGluZmxhdGUoKSAqLworICAgICAgICBpZiAoc3RybS0+YXZhaWxfaW4gPT0gMCAmJiBnel9hdmFpbChzdGF0ZSkgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGlmIChzdHJtLT5hdmFpbF9pbiA9PSAwKSB7CisgICAgICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9CVUZfRVJST1IsICJ1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGRlY29tcHJlc3MgYW5kIGhhbmRsZSBlcnJvcnMgKi8KKyAgICAgICAgcmV0ID0gaW5mbGF0ZShzdHJtLCBaX05PX0ZMVVNIKTsKKyAgICAgICAgaWYgKHJldCA9PSBaX1NUUkVBTV9FUlJPUiB8fCByZXQgPT0gWl9ORUVEX0RJQ1QpIHsKKyAgICAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX1NUUkVBTV9FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAgICJpbnRlcm5hbCBlcnJvcjogaW5mbGF0ZSBzdHJlYW0gY29ycnVwdCIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGlmIChyZXQgPT0gWl9NRU1fRVJST1IpIHsKKyAgICAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX01FTV9FUlJPUiwgIm91dCBvZiBtZW1vcnkiKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmV0ID09IFpfREFUQV9FUlJPUikgeyAgICAgICAgICAgICAgLyogZGVmbGF0ZSBzdHJlYW0gaW52YWxpZCAqLworICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfREFUQV9FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAgIHN0cm0tPm1zZyA9PSBOVUxMID8gImNvbXByZXNzZWQgZGF0YSBlcnJvciIgOiBzdHJtLT5tc2cpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfSB3aGlsZSAoc3RybS0+YXZhaWxfb3V0ICYmIHJldCAhPSBaX1NUUkVBTV9FTkQpOworCisgICAgLyogdXBkYXRlIGF2YWlsYWJsZSBvdXRwdXQgKi8KKyAgICBzdGF0ZS0+eC5oYXZlID0gaGFkIC0gc3RybS0+YXZhaWxfb3V0OworICAgIHN0YXRlLT54Lm5leHQgPSBzdHJtLT5uZXh0X291dCAtIHN0YXRlLT54LmhhdmU7CisKKyAgICAvKiBpZiB0aGUgZ3ppcCBzdHJlYW0gY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwgbG9vayBmb3IgYW5vdGhlciAqLworICAgIGlmIChyZXQgPT0gWl9TVFJFQU1fRU5EKQorICAgICAgICBzdGF0ZS0+aG93ID0gTE9PSzsKKworICAgIC8qIGdvb2QgZGVjb21wcmVzc2lvbiAqLworICAgIHJldHVybiAwOworfQorCisvKiBGZXRjaCBkYXRhIGFuZCBwdXQgaXQgaW4gdGhlIG91dHB1dCBidWZmZXIuICBBc3N1bWVzIHN0YXRlLT54LmhhdmUgaXMgMC4KKyAgIERhdGEgaXMgZWl0aGVyIGNvcGllZCBmcm9tIHRoZSBpbnB1dCBmaWxlIG9yIGRlY29tcHJlc3NlZCBmcm9tIHRoZSBpbnB1dAorICAgZmlsZSBkZXBlbmRpbmcgb24gc3RhdGUtPmhvdy4gIElmIHN0YXRlLT5ob3cgaXMgTE9PSywgdGhlbiBhIGd6aXAgaGVhZGVyIGlzCisgICBsb29rZWQgZm9yIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIGNvcHkgb3IgZGVjb21wcmVzcy4gIFJldHVybnMgLTEgb24gZXJyb3IsCisgICBvdGhlcndpc2UgMC4gIGd6X2ZldGNoKCkgd2lsbCBsZWF2ZSBzdGF0ZS0+aG93IGFzIENPUFkgb3IgR1pJUCB1bmxlc3MgdGhlCisgICBlbmQgb2YgdGhlIGlucHV0IGZpbGUgaGFzIGJlZW4gcmVhY2hlZCBhbmQgYWxsIGRhdGEgaGFzIGJlZW4gcHJvY2Vzc2VkLiAgKi8KK2xvY2FsIGludCBnel9mZXRjaChzdGF0ZSkKKyAgICBnel9zdGF0ZXAgc3RhdGU7Cit7CisgICAgel9zdHJlYW1wIHN0cm0gPSAmKHN0YXRlLT5zdHJtKTsKKworICAgIGRvIHsKKyAgICAgICAgc3dpdGNoKHN0YXRlLT5ob3cpIHsKKyAgICAgICAgY2FzZSBMT09LOiAgICAgIC8qIC0+IExPT0ssIENPUFkgKG9ubHkgaWYgbmV2ZXIgR1pJUCksIG9yIEdaSVAgKi8KKyAgICAgICAgICAgIGlmIChnel9sb29rKHN0YXRlKSA9PSAtMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBpZiAoc3RhdGUtPmhvdyA9PSBMT09LKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ09QWTogICAgICAvKiAtPiBDT1BZICovCisgICAgICAgICAgICBpZiAoZ3pfbG9hZChzdGF0ZSwgc3RhdGUtPm91dCwgc3RhdGUtPnNpemUgPDwgMSwgJihzdGF0ZS0+eC5oYXZlKSkKKyAgICAgICAgICAgICAgICAgICAgPT0gLTEpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgc3RhdGUtPngubmV4dCA9IHN0YXRlLT5vdXQ7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSBHWklQOiAgICAgIC8qIC0+IEdaSVAgb3IgTE9PSyAoaWYgZW5kIG9mIGd6aXAgc3RyZWFtKSAqLworICAgICAgICAgICAgc3RybS0+YXZhaWxfb3V0ID0gc3RhdGUtPnNpemUgPDwgMTsKKyAgICAgICAgICAgIHN0cm0tPm5leHRfb3V0ID0gc3RhdGUtPm91dDsKKyAgICAgICAgICAgIGlmIChnel9kZWNvbXAoc3RhdGUpID09IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0gd2hpbGUgKHN0YXRlLT54LmhhdmUgPT0gMCAmJiAoIXN0YXRlLT5lb2YgfHwgc3RybS0+YXZhaWxfaW4pKTsKKyAgICByZXR1cm4gMDsKK30KKworLyogU2tpcCBsZW4gdW5jb21wcmVzc2VkIGJ5dGVzIG9mIG91dHB1dC4gIFJldHVybiAtMSBvbiBlcnJvciwgMCBvbiBzdWNjZXNzLiAqLworbG9jYWwgaW50IGd6X3NraXAoc3RhdGUsIGxlbikKKyAgICBnel9zdGF0ZXAgc3RhdGU7CisgICAgel9vZmY2NF90IGxlbjsKK3sKKyAgICB1bnNpZ25lZCBuOworCisgICAgLyogc2tpcCBvdmVyIGxlbiBieXRlcyBvciByZWFjaCBlbmQtb2YtZmlsZSwgd2hpY2hldmVyIGNvbWVzIGZpcnN0ICovCisgICAgd2hpbGUgKGxlbikKKyAgICAgICAgLyogc2tpcCBvdmVyIHdoYXRldmVyIGlzIGluIG91dHB1dCBidWZmZXIgKi8KKyAgICAgICAgaWYgKHN0YXRlLT54LmhhdmUpIHsKKyAgICAgICAgICAgIG4gPSBHVF9PRkYoc3RhdGUtPnguaGF2ZSkgfHwgKHpfb2ZmNjRfdClzdGF0ZS0+eC5oYXZlID4gbGVuID8KKyAgICAgICAgICAgICAgICAodW5zaWduZWQpbGVuIDogc3RhdGUtPnguaGF2ZTsKKyAgICAgICAgICAgIHN0YXRlLT54LmhhdmUgLT0gbjsKKyAgICAgICAgICAgIHN0YXRlLT54Lm5leHQgKz0gbjsKKyAgICAgICAgICAgIHN0YXRlLT54LnBvcyArPSBuOworICAgICAgICAgICAgbGVuIC09IG47CisgICAgICAgIH0KKworICAgICAgICAvKiBvdXRwdXQgYnVmZmVyIGVtcHR5IC0tIHJldHVybiBpZiB3ZSdyZSBhdCB0aGUgZW5kIG9mIHRoZSBpbnB1dCAqLworICAgICAgICBlbHNlIGlmIChzdGF0ZS0+ZW9mICYmIHN0YXRlLT5zdHJtLmF2YWlsX2luID09IDApCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvKiBuZWVkIG1vcmUgZGF0YSB0byBza2lwIC0tIGxvYWQgdXAgb3V0cHV0IGJ1ZmZlciAqLworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8qIGdldCBtb3JlIG91dHB1dCwgbG9va2luZyBmb3IgaGVhZGVyIGlmIHJlcXVpcmVkICovCisgICAgICAgICAgICBpZiAoZ3pfZmV0Y2goc3RhdGUpID09IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIHJldHVybiAwOworfQorCisvKiBSZWFkIGxlbiBieXRlcyBpbnRvIGJ1ZiBmcm9tIGZpbGUsIG9yIGxlc3MgdGhhbiBsZW4gdXAgdG8gdGhlIGVuZCBvZiB0aGUKKyAgIGlucHV0LiAgUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZC4gIElmIHplcm8gaXMgcmV0dXJuZWQsIGVpdGhlciB0aGUKKyAgIGVuZCBvZiBmaWxlIHdhcyByZWFjaGVkLCBvciB0aGVyZSB3YXMgYW4gZXJyb3IuICBzdGF0ZS0+ZXJyIG11c3QgYmUKKyAgIGNvbnN1bHRlZCBpbiB0aGF0IGNhc2UgdG8gZGV0ZXJtaW5lIHdoaWNoLiAqLworbG9jYWwgel9zaXplX3QgZ3pfcmVhZChzdGF0ZSwgYnVmLCBsZW4pCisgICAgZ3pfc3RhdGVwIHN0YXRlOworICAgIHZvaWRwIGJ1ZjsKKyAgICB6X3NpemVfdCBsZW47Cit7CisgICAgel9zaXplX3QgZ290OworICAgIHVuc2lnbmVkIG47CisKKyAgICAvKiBpZiBsZW4gaXMgemVybywgYXZvaWQgdW5uZWNlc3Nhcnkgb3BlcmF0aW9ucyAqLworICAgIGlmIChsZW4gPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvKiBwcm9jZXNzIGEgc2tpcCByZXF1ZXN0ICovCisgICAgaWYgKHN0YXRlLT5zZWVrKSB7CisgICAgICAgIHN0YXRlLT5zZWVrID0gMDsKKyAgICAgICAgaWYgKGd6X3NraXAoc3RhdGUsIHN0YXRlLT5za2lwKSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8qIGdldCBsZW4gYnl0ZXMgdG8gYnVmLCBvciBsZXNzIHRoYW4gbGVuIGlmIGF0IHRoZSBlbmQgKi8KKyAgICBnb3QgPSAwOworICAgIGRvIHsKKyAgICAgICAgLyogc2V0IG4gdG8gdGhlIG1heGltdW0gYW1vdW50IG9mIGxlbiB0aGF0IGZpdHMgaW4gYW4gdW5zaWduZWQgaW50ICovCisgICAgICAgIG4gPSAodW5zaWduZWQpLTE7CisgICAgICAgIGlmIChuID4gbGVuKQorICAgICAgICAgICAgbiA9ICh1bnNpZ25lZClsZW47CisKKyAgICAgICAgLyogZmlyc3QganVzdCB0cnkgY29weWluZyBkYXRhIGZyb20gdGhlIG91dHB1dCBidWZmZXIgKi8KKyAgICAgICAgaWYgKHN0YXRlLT54LmhhdmUpIHsKKyAgICAgICAgICAgIGlmIChzdGF0ZS0+eC5oYXZlIDwgbikKKyAgICAgICAgICAgICAgICBuID0gc3RhdGUtPnguaGF2ZTsKKyAgICAgICAgICAgIG1lbWNweShidWYsIHN0YXRlLT54Lm5leHQsIG4pOworICAgICAgICAgICAgc3RhdGUtPngubmV4dCArPSBuOworICAgICAgICAgICAgc3RhdGUtPnguaGF2ZSAtPSBuOworICAgICAgICB9CisKKyAgICAgICAgLyogb3V0cHV0IGJ1ZmZlciBlbXB0eSAtLSByZXR1cm4gaWYgd2UncmUgYXQgdGhlIGVuZCBvZiB0aGUgaW5wdXQgKi8KKyAgICAgICAgZWxzZSBpZiAoc3RhdGUtPmVvZiAmJiBzdGF0ZS0+c3RybS5hdmFpbF9pbiA9PSAwKSB7CisgICAgICAgICAgICBzdGF0ZS0+cGFzdCA9IDE7ICAgICAgICAvKiB0cmllZCB0byByZWFkIHBhc3QgZW5kICovCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8qIG5lZWQgb3V0cHV0IGRhdGEgLS0gZm9yIHNtYWxsIGxlbiBvciBuZXcgc3RyZWFtIGxvYWQgdXAgb3VyIG91dHB1dAorICAgICAgICAgICBidWZmZXIgKi8KKyAgICAgICAgZWxzZSBpZiAoc3RhdGUtPmhvdyA9PSBMT09LIHx8IG4gPCAoc3RhdGUtPnNpemUgPDwgMSkpIHsKKyAgICAgICAgICAgIC8qIGdldCBtb3JlIG91dHB1dCwgbG9va2luZyBmb3IgaGVhZGVyIGlmIHJlcXVpcmVkICovCisgICAgICAgICAgICBpZiAoZ3pfZmV0Y2goc3RhdGUpID09IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgY29udGludWU7ICAgICAgIC8qIG5vIHByb2dyZXNzIHlldCAtLSBnbyBiYWNrIHRvIGNvcHkgYWJvdmUgKi8KKyAgICAgICAgICAgIC8qIHRoZSBjb3B5IGFib3ZlIGFzc3VyZXMgdGhhdCB3ZSB3aWxsIGxlYXZlIHdpdGggc3BhY2UgaW4gdGhlCisgICAgICAgICAgICAgICBvdXRwdXQgYnVmZmVyLCBhbGxvd2luZyBhdCBsZWFzdCBvbmUgZ3p1bmdldGMoKSB0byBzdWNjZWVkICovCisgICAgICAgIH0KKworICAgICAgICAvKiBsYXJnZSBsZW4gLS0gcmVhZCBkaXJlY3RseSBpbnRvIHVzZXIgYnVmZmVyICovCisgICAgICAgIGVsc2UgaWYgKHN0YXRlLT5ob3cgPT0gQ09QWSkgeyAgICAgIC8qIHJlYWQgZGlyZWN0bHkgKi8KKyAgICAgICAgICAgIGlmIChnel9sb2FkKHN0YXRlLCAodW5zaWduZWQgY2hhciAqKWJ1ZiwgbiwgJm4pID09IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgLyogbGFyZ2UgbGVuIC0tIGRlY29tcHJlc3MgZGlyZWN0bHkgaW50byB1c2VyIGJ1ZmZlciAqLworICAgICAgICBlbHNlIHsgIC8qIHN0YXRlLT5ob3cgPT0gR1pJUCAqLworICAgICAgICAgICAgc3RhdGUtPnN0cm0uYXZhaWxfb3V0ID0gbjsKKyAgICAgICAgICAgIHN0YXRlLT5zdHJtLm5leHRfb3V0ID0gKHVuc2lnbmVkIGNoYXIgKilidWY7CisgICAgICAgICAgICBpZiAoZ3pfZGVjb21wKHN0YXRlKSA9PSAtMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIG4gPSBzdGF0ZS0+eC5oYXZlOworICAgICAgICAgICAgc3RhdGUtPnguaGF2ZSA9IDA7CisgICAgICAgIH0KKworICAgICAgICAvKiB1cGRhdGUgcHJvZ3Jlc3MgKi8KKyAgICAgICAgbGVuIC09IG47CisgICAgICAgIGJ1ZiA9IChjaGFyICopYnVmICsgbjsKKyAgICAgICAgZ290ICs9IG47CisgICAgICAgIHN0YXRlLT54LnBvcyArPSBuOworICAgIH0gd2hpbGUgKGxlbik7CisKKyAgICAvKiByZXR1cm4gbnVtYmVyIG9mIGJ5dGVzIHJlYWQgaW50byB1c2VyIGJ1ZmZlciAqLworICAgIHJldHVybiBnb3Q7Cit9CisKKy8qIC0tIHNlZSB6bGliLmggLS0gKi8KK2ludCBaRVhQT1JUIGd6cmVhZChmaWxlLCBidWYsIGxlbikKKyAgICBnekZpbGUgZmlsZTsKKyAgICB2b2lkcCBidWY7CisgICAgdW5zaWduZWQgbGVuOworeworICAgIGd6X3N0YXRlcCBzdGF0ZTsKKworICAgIC8qIGdldCBpbnRlcm5hbCBzdHJ1Y3R1cmUgKi8KKyAgICBpZiAoZmlsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgc3RhdGUgPSAoZ3pfc3RhdGVwKWZpbGU7CisKKyAgICAvKiBjaGVjayB0aGF0IHdlJ3JlIHJlYWRpbmcgYW5kIHRoYXQgdGhlcmUncyBubyAoc2VyaW91cykgZXJyb3IgKi8KKyAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfUkVBRCB8fAorICAgICAgICAgICAgKHN0YXRlLT5lcnIgIT0gWl9PSyAmJiBzdGF0ZS0+ZXJyICE9IFpfQlVGX0VSUk9SKSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgLyogc2luY2UgYW4gaW50IGlzIHJldHVybmVkLCBtYWtlIHN1cmUgbGVuIGZpdHMgaW4gb25lLCBvdGhlcndpc2UgcmV0dXJuCisgICAgICAgd2l0aCBhbiBlcnJvciAodGhpcyBhdm9pZHMgYSBmbGF3IGluIHRoZSBpbnRlcmZhY2UpICovCisgICAgaWYgKChpbnQpbGVuIDwgMCkgeworICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9TVFJFQU1fRVJST1IsICJyZXF1ZXN0IGRvZXMgbm90IGZpdCBpbiBhbiBpbnQiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qIHJlYWQgbGVuIG9yIGZld2VyIGJ5dGVzIHRvIGJ1ZiAqLworICAgIGxlbiA9ICh1bnNpZ25lZClnel9yZWFkKHN0YXRlLCBidWYsIGxlbik7CisKKyAgICAvKiBjaGVjayBmb3IgYW4gZXJyb3IgKi8KKyAgICBpZiAobGVuID09IDAgJiYgc3RhdGUtPmVyciAhPSBaX09LICYmIHN0YXRlLT5lcnIgIT0gWl9CVUZfRVJST1IpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIC8qIHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgKHRoaXMgaXMgYXNzdXJlZCB0byBmaXQgaW4gYW4gaW50KSAqLworICAgIHJldHVybiAoaW50KWxlbjsKK30KKworLyogLS0gc2VlIHpsaWIuaCAtLSAqLworel9zaXplX3QgWkVYUE9SVCBnemZyZWFkKGJ1Ziwgc2l6ZSwgbml0ZW1zLCBmaWxlKQorICAgIHZvaWRwIGJ1ZjsKKyAgICB6X3NpemVfdCBzaXplOworICAgIHpfc2l6ZV90IG5pdGVtczsKKyAgICBnekZpbGUgZmlsZTsKK3sKKyAgICB6X3NpemVfdCBsZW47CisgICAgZ3pfc3RhdGVwIHN0YXRlOworCisgICAgLyogZ2V0IGludGVybmFsIHN0cnVjdHVyZSAqLworICAgIGlmIChmaWxlID09IE5VTEwpCisgICAgICAgIHJldHVybiAwOworICAgIHN0YXRlID0gKGd6X3N0YXRlcClmaWxlOworCisgICAgLyogY2hlY2sgdGhhdCB3ZSdyZSByZWFkaW5nIGFuZCB0aGF0IHRoZXJlJ3Mgbm8gKHNlcmlvdXMpIGVycm9yICovCisgICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1JFQUQgfHwKKyAgICAgICAgICAgIChzdGF0ZS0+ZXJyICE9IFpfT0sgJiYgc3RhdGUtPmVyciAhPSBaX0JVRl9FUlJPUikpCisgICAgICAgIHJldHVybiAwOworCisgICAgLyogY29tcHV0ZSBieXRlcyB0byByZWFkIC0tIGVycm9yIG9uIG92ZXJmbG93ICovCisgICAgbGVuID0gbml0ZW1zICogc2l6ZTsKKyAgICBpZiAoc2l6ZSAmJiBsZW4gLyBzaXplICE9IG5pdGVtcykgeworICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9TVFJFQU1fRVJST1IsICJyZXF1ZXN0IGRvZXMgbm90IGZpdCBpbiBhIHNpemVfdCIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvKiByZWFkIGxlbiBvciBmZXdlciBieXRlcyB0byBidWYsIHJldHVybiB0aGUgbnVtYmVyIG9mIGZ1bGwgaXRlbXMgcmVhZCAqLworICAgIHJldHVybiBsZW4gPyBnel9yZWFkKHN0YXRlLCBidWYsIGxlbikgLyBzaXplIDogMDsKK30KKworLyogLS0gc2VlIHpsaWIuaCAtLSAqLworI2lmZGVmIFpfUFJFRklYX1NFVAorIyAgdW5kZWYgel9nemdldGMKKyNlbHNlCisjICB1bmRlZiBnemdldGMKKyNlbmRpZgoraW50IFpFWFBPUlQgZ3pnZXRjKGZpbGUpCisgICAgZ3pGaWxlIGZpbGU7Cit7CisgICAgdW5zaWduZWQgY2hhciBidWZbMV07CisgICAgZ3pfc3RhdGVwIHN0YXRlOworCisgICAgLyogZ2V0IGludGVybmFsIHN0cnVjdHVyZSAqLworICAgIGlmIChmaWxlID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBzdGF0ZSA9IChnel9zdGF0ZXApZmlsZTsKKworICAgIC8qIGNoZWNrIHRoYXQgd2UncmUgcmVhZGluZyBhbmQgdGhhdCB0aGVyZSdzIG5vIChzZXJpb3VzKSBlcnJvciAqLworICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9SRUFEIHx8CisgICAgICAgIChzdGF0ZS0+ZXJyICE9IFpfT0sgJiYgc3RhdGUtPmVyciAhPSBaX0JVRl9FUlJPUikpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIC8qIHRyeSBvdXRwdXQgYnVmZmVyIChubyBuZWVkIHRvIGNoZWNrIGZvciBza2lwIHJlcXVlc3QpICovCisgICAgaWYgKHN0YXRlLT54LmhhdmUpIHsKKyAgICAgICAgc3RhdGUtPnguaGF2ZS0tOworICAgICAgICBzdGF0ZS0+eC5wb3MrKzsKKyAgICAgICAgcmV0dXJuICooc3RhdGUtPngubmV4dCkrKzsKKyAgICB9CisKKyAgICAvKiBub3RoaW5nIHRoZXJlIC0tIHRyeSBnel9yZWFkKCkgKi8KKyAgICByZXR1cm4gZ3pfcmVhZChzdGF0ZSwgYnVmLCAxKSA8IDEgPyAtMSA6IGJ1ZlswXTsKK30KKworaW50IFpFWFBPUlQgZ3pnZXRjXyhmaWxlKQorZ3pGaWxlIGZpbGU7Cit7CisgICAgcmV0dXJuIGd6Z2V0YyhmaWxlKTsKK30KKworLyogLS0gc2VlIHpsaWIuaCAtLSAqLworaW50IFpFWFBPUlQgZ3p1bmdldGMoYywgZmlsZSkKKyAgICBpbnQgYzsKKyAgICBnekZpbGUgZmlsZTsKK3sKKyAgICBnel9zdGF0ZXAgc3RhdGU7CisKKyAgICAvKiBnZXQgaW50ZXJuYWwgc3RydWN0dXJlICovCisgICAgaWYgKGZpbGUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIHN0YXRlID0gKGd6X3N0YXRlcClmaWxlOworCisgICAgLyogY2hlY2sgdGhhdCB3ZSdyZSByZWFkaW5nIGFuZCB0aGF0IHRoZXJlJ3Mgbm8gKHNlcmlvdXMpIGVycm9yICovCisgICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1JFQUQgfHwKKyAgICAgICAgKHN0YXRlLT5lcnIgIT0gWl9PSyAmJiBzdGF0ZS0+ZXJyICE9IFpfQlVGX0VSUk9SKSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgLyogcHJvY2VzcyBhIHNraXAgcmVxdWVzdCAqLworICAgIGlmIChzdGF0ZS0+c2VlaykgeworICAgICAgICBzdGF0ZS0+c2VlayA9IDA7CisgICAgICAgIGlmIChnel9za2lwKHN0YXRlLCBzdGF0ZS0+c2tpcCkgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyogY2FuJ3QgcHVzaCBFT0YgKi8KKyAgICBpZiAoYyA8IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIC8qIGlmIG91dHB1dCBidWZmZXIgZW1wdHksIHB1dCBieXRlIGF0IGVuZCAoYWxsb3dzIG1vcmUgcHVzaGluZykgKi8KKyAgICBpZiAoc3RhdGUtPnguaGF2ZSA9PSAwKSB7CisgICAgICAgIHN0YXRlLT54LmhhdmUgPSAxOworICAgICAgICBzdGF0ZS0+eC5uZXh0ID0gc3RhdGUtPm91dCArIChzdGF0ZS0+c2l6ZSA8PCAxKSAtIDE7CisgICAgICAgIHN0YXRlLT54Lm5leHRbMF0gPSAodW5zaWduZWQgY2hhciljOworICAgICAgICBzdGF0ZS0+eC5wb3MtLTsKKyAgICAgICAgc3RhdGUtPnBhc3QgPSAwOworICAgICAgICByZXR1cm4gYzsKKyAgICB9CisKKyAgICAvKiBpZiBubyByb29tLCBnaXZlIHVwIChtdXN0IGhhdmUgYWxyZWFkeSBkb25lIGEgZ3p1bmdldGMoKSkgKi8KKyAgICBpZiAoc3RhdGUtPnguaGF2ZSA9PSAoc3RhdGUtPnNpemUgPDwgMSkpIHsKKyAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfREFUQV9FUlJPUiwgIm91dCBvZiByb29tIHRvIHB1c2ggY2hhcmFjdGVycyIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyogc2xpZGUgb3V0cHV0IGRhdGEgaWYgbmVlZGVkIGFuZCBpbnNlcnQgYnl0ZSBiZWZvcmUgZXhpc3RpbmcgZGF0YSAqLworICAgIGlmIChzdGF0ZS0+eC5uZXh0ID09IHN0YXRlLT5vdXQpIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciAqc3JjID0gc3RhdGUtPm91dCArIHN0YXRlLT54LmhhdmU7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBzdGF0ZS0+b3V0ICsgKHN0YXRlLT5zaXplIDw8IDEpOworICAgICAgICB3aGlsZSAoc3JjID4gc3RhdGUtPm91dCkKKyAgICAgICAgICAgICotLWRlc3QgPSAqLS1zcmM7CisgICAgICAgIHN0YXRlLT54Lm5leHQgPSBkZXN0OworICAgIH0KKyAgICBzdGF0ZS0+eC5oYXZlKys7CisgICAgc3RhdGUtPngubmV4dC0tOworICAgIHN0YXRlLT54Lm5leHRbMF0gPSAodW5zaWduZWQgY2hhciljOworICAgIHN0YXRlLT54LnBvcy0tOworICAgIHN0YXRlLT5wYXN0ID0gMDsKKyAgICByZXR1cm4gYzsKK30KKworLyogLS0gc2VlIHpsaWIuaCAtLSAqLworY2hhciAqIFpFWFBPUlQgZ3pnZXRzKGZpbGUsIGJ1ZiwgbGVuKQorICAgIGd6RmlsZSBmaWxlOworICAgIGNoYXIgKmJ1ZjsKKyAgICBpbnQgbGVuOworeworICAgIHVuc2lnbmVkIGxlZnQsIG47CisgICAgY2hhciAqc3RyOworICAgIHVuc2lnbmVkIGNoYXIgKmVvbDsKKyAgICBnel9zdGF0ZXAgc3RhdGU7CisKKyAgICAvKiBjaGVjayBwYXJhbWV0ZXJzIGFuZCBnZXQgaW50ZXJuYWwgc3RydWN0dXJlICovCisgICAgaWYgKGZpbGUgPT0gTlVMTCB8fCBidWYgPT0gTlVMTCB8fCBsZW4gPCAxKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBzdGF0ZSA9IChnel9zdGF0ZXApZmlsZTsKKworICAgIC8qIGNoZWNrIHRoYXQgd2UncmUgcmVhZGluZyBhbmQgdGhhdCB0aGVyZSdzIG5vIChzZXJpb3VzKSBlcnJvciAqLworICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9SRUFEIHx8CisgICAgICAgIChzdGF0ZS0+ZXJyICE9IFpfT0sgJiYgc3RhdGUtPmVyciAhPSBaX0JVRl9FUlJPUikpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgLyogcHJvY2VzcyBhIHNraXAgcmVxdWVzdCAqLworICAgIGlmIChzdGF0ZS0+c2VlaykgeworICAgICAgICBzdGF0ZS0+c2VlayA9IDA7CisgICAgICAgIGlmIChnel9za2lwKHN0YXRlLCBzdGF0ZS0+c2tpcCkgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvKiBjb3B5IG91dHB1dCBieXRlcyB1cCB0byBuZXcgbGluZSBvciBsZW4gLSAxLCB3aGljaGV2ZXIgY29tZXMgZmlyc3QgLS0KKyAgICAgICBhcHBlbmQgYSB0ZXJtaW5hdGluZyB6ZXJvIHRvIHRoZSBzdHJpbmcgKHdlIGRvbid0IGNoZWNrIGZvciBhIHplcm8gaW4KKyAgICAgICB0aGUgY29udGVudHMsIGxldCB0aGUgdXNlciB3b3JyeSBhYm91dCB0aGF0KSAqLworICAgIHN0ciA9IGJ1ZjsKKyAgICBsZWZ0ID0gKHVuc2lnbmVkKWxlbiAtIDE7CisgICAgaWYgKGxlZnQpIGRvIHsKKyAgICAgICAgLyogYXNzdXJlIHRoYXQgc29tZXRoaW5nIGlzIGluIHRoZSBvdXRwdXQgYnVmZmVyICovCisgICAgICAgIGlmIChzdGF0ZS0+eC5oYXZlID09IDAgJiYgZ3pfZmV0Y2goc3RhdGUpID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7ICAgICAgICAgICAgICAgIC8qIGVycm9yICovCisgICAgICAgIGlmIChzdGF0ZS0+eC5oYXZlID09IDApIHsgICAgICAgLyogZW5kIG9mIGZpbGUgKi8KKyAgICAgICAgICAgIHN0YXRlLT5wYXN0ID0gMTsgICAgICAgICAgICAvKiByZWFkIHBhc3QgZW5kICovCisgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgLyogcmV0dXJuIHdoYXQgd2UgaGF2ZSAqLworICAgICAgICB9CisKKyAgICAgICAgLyogbG9vayBmb3IgZW5kLW9mLWxpbmUgaW4gY3VycmVudCBvdXRwdXQgYnVmZmVyICovCisgICAgICAgIG4gPSBzdGF0ZS0+eC5oYXZlID4gbGVmdCA/IGxlZnQgOiBzdGF0ZS0+eC5oYXZlOworICAgICAgICBlb2wgPSAodW5zaWduZWQgY2hhciAqKW1lbWNocihzdGF0ZS0+eC5uZXh0LCAnXG4nLCBuKTsKKyAgICAgICAgaWYgKGVvbCAhPSBOVUxMKQorICAgICAgICAgICAgbiA9ICh1bnNpZ25lZCkoZW9sIC0gc3RhdGUtPngubmV4dCkgKyAxOworCisgICAgICAgIC8qIGNvcHkgdGhyb3VnaCBlbmQtb2YtbGluZSwgb3IgcmVtYWluZGVyIGlmIG5vdCBmb3VuZCAqLworICAgICAgICBtZW1jcHkoYnVmLCBzdGF0ZS0+eC5uZXh0LCBuKTsKKyAgICAgICAgc3RhdGUtPnguaGF2ZSAtPSBuOworICAgICAgICBzdGF0ZS0+eC5uZXh0ICs9IG47CisgICAgICAgIHN0YXRlLT54LnBvcyArPSBuOworICAgICAgICBsZWZ0IC09IG47CisgICAgICAgIGJ1ZiArPSBuOworICAgIH0gd2hpbGUgKGxlZnQgJiYgZW9sID09IE5VTEwpOworCisgICAgLyogcmV0dXJuIHRlcm1pbmF0ZWQgc3RyaW5nLCBvciBpZiBub3RoaW5nLCBlbmQgb2YgZmlsZSAqLworICAgIGlmIChidWYgPT0gc3RyKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBidWZbMF0gPSAwOworICAgIHJldHVybiBzdHI7Cit9CisKKy8qIC0tIHNlZSB6bGliLmggLS0gKi8KK2ludCBaRVhQT1JUIGd6ZGlyZWN0KGZpbGUpCisgICAgZ3pGaWxlIGZpbGU7Cit7CisgICAgZ3pfc3RhdGVwIHN0YXRlOworCisgICAgLyogZ2V0IGludGVybmFsIHN0cnVjdHVyZSAqLworICAgIGlmIChmaWxlID09IE5VTEwpCisgICAgICAgIHJldHVybiAwOworICAgIHN0YXRlID0gKGd6X3N0YXRlcClmaWxlOworCisgICAgLyogaWYgdGhlIHN0YXRlIGlzIG5vdCBrbm93biwgYnV0IHdlIGNhbiBmaW5kIG91dCwgdGhlbiBkbyBzbyAodGhpcyBpcworICAgICAgIG1haW5seSBmb3IgcmlnaHQgYWZ0ZXIgYSBnem9wZW4oKSBvciBnemRvcGVuKCkpICovCisgICAgaWYgKHN0YXRlLT5tb2RlID09IEdaX1JFQUQgJiYgc3RhdGUtPmhvdyA9PSBMT09LICYmIHN0YXRlLT54LmhhdmUgPT0gMCkKKyAgICAgICAgKHZvaWQpZ3pfbG9vayhzdGF0ZSk7CisKKyAgICAvKiByZXR1cm4gMSBpZiB0cmFuc3BhcmVudCwgMCBpZiBwcm9jZXNzaW5nIGEgZ3ppcCBzdHJlYW0gKi8KKyAgICByZXR1cm4gc3RhdGUtPmRpcmVjdDsKK30KKworLyogLS0gc2VlIHpsaWIuaCAtLSAqLworaW50IFpFWFBPUlQgZ3pjbG9zZV9yKGZpbGUpCisgICAgZ3pGaWxlIGZpbGU7Cit7CisgICAgaW50IHJldCwgZXJyOworICAgIGd6X3N0YXRlcCBzdGF0ZTsKKworICAgIC8qIGdldCBpbnRlcm5hbCBzdHJ1Y3R1cmUgKi8KKyAgICBpZiAoZmlsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgICAgc3RhdGUgPSAoZ3pfc3RhdGVwKWZpbGU7CisKKyAgICAvKiBjaGVjayB0aGF0IHdlJ3JlIHJlYWRpbmcgKi8KKyAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfUkVBRCkKKyAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworCisgICAgLyogZnJlZSBtZW1vcnkgYW5kIGNsb3NlIGZpbGUgKi8KKyAgICBpZiAoc3RhdGUtPnNpemUpIHsKKyAgICAgICAgaW5mbGF0ZUVuZCgmKHN0YXRlLT5zdHJtKSk7CisgICAgICAgIGZyZWUoc3RhdGUtPm91dCk7CisgICAgICAgIGZyZWUoc3RhdGUtPmluKTsKKyAgICB9CisgICAgZXJyID0gc3RhdGUtPmVyciA9PSBaX0JVRl9FUlJPUiA/IFpfQlVGX0VSUk9SIDogWl9PSzsKKyAgICBnel9lcnJvcihzdGF0ZSwgWl9PSywgTlVMTCk7CisgICAgZnJlZShzdGF0ZS0+cGF0aCk7CisgICAgcmV0ID0gY2xvc2Uoc3RhdGUtPmZkKTsKKyAgICBmcmVlKHN0YXRlKTsKKyAgICByZXR1cm4gcmV0ID8gWl9FUlJOTyA6IGVycjsKK30KZGlmZiAtLWdpdCBhL3NyYy9nendyaXRlLmMgYi9zcmMvZ3p3cml0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ZmZjOGYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvZ3p3cml0ZS5jCkBAIC0wLDAgKzEsNjc3IEBACisvKiBnendyaXRlLmMgLS0gemxpYiBmdW5jdGlvbnMgZm9yIHdyaXRpbmcgZ3ppcCBmaWxlcworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTkgTWFyayBBZGxlcgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAorICovCisKKyNpbmNsdWRlICJnemd1dHMuaCIKKworLyogTG9jYWwgZnVuY3Rpb25zICovCitsb2NhbCBpbnQgZ3pfaW5pdCBPRigoZ3pfc3RhdGVwKSk7Citsb2NhbCBpbnQgZ3pfY29tcCBPRigoZ3pfc3RhdGVwLCBpbnQpKTsKK2xvY2FsIGludCBnel96ZXJvIE9GKChnel9zdGF0ZXAsIHpfb2ZmNjRfdCkpOworbG9jYWwgel9zaXplX3QgZ3pfd3JpdGUgT0YoKGd6X3N0YXRlcCwgdm9pZHBjLCB6X3NpemVfdCkpOworCisvKiBJbml0aWFsaXplIHN0YXRlIGZvciB3cml0aW5nIGEgZ3ppcCBmaWxlLiAgTWFyayBpbml0aWFsaXphdGlvbiBieSBzZXR0aW5nCisgICBzdGF0ZS0+c2l6ZSB0byBub24temVyby4gIFJldHVybiAtMSBvbiBhIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUsIG9yIDAgb24KKyAgIHN1Y2Nlc3MuICovCitsb2NhbCBpbnQgZ3pfaW5pdChzdGF0ZSkKKyAgICBnel9zdGF0ZXAgc3RhdGU7Cit7CisgICAgaW50IHJldDsKKyAgICB6X3N0cmVhbXAgc3RybSA9ICYoc3RhdGUtPnN0cm0pOworCisgICAgLyogYWxsb2NhdGUgaW5wdXQgYnVmZmVyIChkb3VibGUgc2l6ZSBmb3IgZ3pwcmludGYpICovCisgICAgc3RhdGUtPmluID0gKHVuc2lnbmVkIGNoYXIgKiltYWxsb2Moc3RhdGUtPndhbnQgPDwgMSk7CisgICAgaWYgKHN0YXRlLT5pbiA9PSBOVUxMKSB7CisgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX01FTV9FUlJPUiwgIm91dCBvZiBtZW1vcnkiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qIG9ubHkgbmVlZCBvdXRwdXQgYnVmZmVyIGFuZCBkZWZsYXRlIHN0YXRlIGlmIGNvbXByZXNzaW5nICovCisgICAgaWYgKCFzdGF0ZS0+ZGlyZWN0KSB7CisgICAgICAgIC8qIGFsbG9jYXRlIG91dHB1dCBidWZmZXIgKi8KKyAgICAgICAgc3RhdGUtPm91dCA9ICh1bnNpZ25lZCBjaGFyICopbWFsbG9jKHN0YXRlLT53YW50KTsKKyAgICAgICAgaWYgKHN0YXRlLT5vdXQgPT0gTlVMTCkgeworICAgICAgICAgICAgZnJlZShzdGF0ZS0+aW4pOworICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfTUVNX0VSUk9SLCAib3V0IG9mIG1lbW9yeSIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgLyogYWxsb2NhdGUgZGVmbGF0ZSBtZW1vcnksIHNldCB1cCBmb3IgZ3ppcCBjb21wcmVzc2lvbiAqLworICAgICAgICBzdHJtLT56YWxsb2MgPSBaX05VTEw7CisgICAgICAgIHN0cm0tPnpmcmVlID0gWl9OVUxMOworICAgICAgICBzdHJtLT5vcGFxdWUgPSBaX05VTEw7CisgICAgICAgIHJldCA9IGRlZmxhdGVJbml0MihzdHJtLCBzdGF0ZS0+bGV2ZWwsIFpfREVGTEFURUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBNQVhfV0JJVFMgKyAxNiwgREVGX01FTV9MRVZFTCwgc3RhdGUtPnN0cmF0ZWd5KTsKKyAgICAgICAgaWYgKHJldCAhPSBaX09LKSB7CisgICAgICAgICAgICBmcmVlKHN0YXRlLT5vdXQpOworICAgICAgICAgICAgZnJlZShzdGF0ZS0+aW4pOworICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfTUVNX0VSUk9SLCAib3V0IG9mIG1lbW9yeSIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIHN0cm0tPm5leHRfaW4gPSBOVUxMOworICAgIH0KKworICAgIC8qIG1hcmsgc3RhdGUgYXMgaW5pdGlhbGl6ZWQgKi8KKyAgICBzdGF0ZS0+c2l6ZSA9IHN0YXRlLT53YW50OworCisgICAgLyogaW5pdGlhbGl6ZSB3cml0ZSBidWZmZXIgaWYgY29tcHJlc3NpbmcgKi8KKyAgICBpZiAoIXN0YXRlLT5kaXJlY3QpIHsKKyAgICAgICAgc3RybS0+YXZhaWxfb3V0ID0gc3RhdGUtPnNpemU7CisgICAgICAgIHN0cm0tPm5leHRfb3V0ID0gc3RhdGUtPm91dDsKKyAgICAgICAgc3RhdGUtPngubmV4dCA9IHN0cm0tPm5leHRfb3V0OworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworLyogQ29tcHJlc3Mgd2hhdGV2ZXIgaXMgYXQgYXZhaWxfaW4gYW5kIG5leHRfaW4gYW5kIHdyaXRlIHRvIHRoZSBvdXRwdXQgZmlsZS4KKyAgIFJldHVybiAtMSBpZiB0aGVyZSBpcyBhbiBlcnJvciB3cml0aW5nIHRvIHRoZSBvdXRwdXQgZmlsZSBvciBpZiBnel9pbml0KCkKKyAgIGZhaWxzIHRvIGFsbG9jYXRlIG1lbW9yeSwgb3RoZXJ3aXNlIDAuICBmbHVzaCBpcyBhc3N1bWVkIHRvIGJlIGEgdmFsaWQKKyAgIGRlZmxhdGUoKSBmbHVzaCB2YWx1ZS4gIElmIGZsdXNoIGlzIFpfRklOSVNILCB0aGVuIHRoZSBkZWZsYXRlKCkgc3RhdGUgaXMKKyAgIHJlc2V0IHRvIHN0YXJ0IGEgbmV3IGd6aXAgc3RyZWFtLiAgSWYgZ3otPmRpcmVjdCBpcyB0cnVlLCB0aGVuIHNpbXBseSB3cml0ZQorICAgdG8gdGhlIG91dHB1dCBmaWxlIHdpdGhvdXQgY29tcHJlc3NpbmcsIGFuZCBpZ25vcmUgZmx1c2guICovCitsb2NhbCBpbnQgZ3pfY29tcChzdGF0ZSwgZmx1c2gpCisgICAgZ3pfc3RhdGVwIHN0YXRlOworICAgIGludCBmbHVzaDsKK3sKKyAgICBpbnQgcmV0LCB3cml0OworICAgIHVuc2lnbmVkIGhhdmUsIHB1dCwgbWF4ID0gKCh1bnNpZ25lZCktMSA+PiAyKSArIDE7CisgICAgel9zdHJlYW1wIHN0cm0gPSAmKHN0YXRlLT5zdHJtKTsKKworICAgIC8qIGFsbG9jYXRlIG1lbW9yeSBpZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHRocm91Z2ggKi8KKyAgICBpZiAoc3RhdGUtPnNpemUgPT0gMCAmJiBnel9pbml0KHN0YXRlKSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgLyogd3JpdGUgZGlyZWN0bHkgaWYgcmVxdWVzdGVkICovCisgICAgaWYgKHN0YXRlLT5kaXJlY3QpIHsKKyAgICAgICAgd2hpbGUgKHN0cm0tPmF2YWlsX2luKSB7CisgICAgICAgICAgICBwdXQgPSBzdHJtLT5hdmFpbF9pbiA+IG1heCA/IG1heCA6IHN0cm0tPmF2YWlsX2luOworICAgICAgICAgICAgd3JpdCA9IHdyaXRlKHN0YXRlLT5mZCwgc3RybS0+bmV4dF9pbiwgcHV0KTsKKyAgICAgICAgICAgIGlmICh3cml0IDwgMCkgeworICAgICAgICAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0VSUk5PLCB6c3RyZXJyb3IoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RybS0+YXZhaWxfaW4gLT0gKHVuc2lnbmVkKXdyaXQ7CisgICAgICAgICAgICBzdHJtLT5uZXh0X2luICs9IHdyaXQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLyogY2hlY2sgZm9yIGEgcGVuZGluZyByZXNldCAqLworICAgIGlmIChzdGF0ZS0+cmVzZXQpIHsKKyAgICAgICAgLyogZG9uJ3Qgc3RhcnQgYSBuZXcgZ3ppcCBtZW1iZXIgdW5sZXNzIHRoZXJlIGlzIGRhdGEgdG8gd3JpdGUgKi8KKyAgICAgICAgaWYgKHN0cm0tPmF2YWlsX2luID09IDApCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgZGVmbGF0ZVJlc2V0KHN0cm0pOworICAgICAgICBzdGF0ZS0+cmVzZXQgPSAwOworICAgIH0KKworICAgIC8qIHJ1biBkZWZsYXRlKCkgb24gcHJvdmlkZWQgaW5wdXQgdW50aWwgaXQgcHJvZHVjZXMgbm8gbW9yZSBvdXRwdXQgKi8KKyAgICByZXQgPSBaX09LOworICAgIGRvIHsKKyAgICAgICAgLyogd3JpdGUgb3V0IGN1cnJlbnQgYnVmZmVyIGNvbnRlbnRzIGlmIGZ1bGwsIG9yIGlmIGZsdXNoaW5nLCBidXQgaWYKKyAgICAgICAgICAgZG9pbmcgWl9GSU5JU0ggdGhlbiBkb24ndCB3cml0ZSB1bnRpbCB3ZSBnZXQgdG8gWl9TVFJFQU1fRU5EICovCisgICAgICAgIGlmIChzdHJtLT5hdmFpbF9vdXQgPT0gMCB8fCAoZmx1c2ggIT0gWl9OT19GTFVTSCAmJgorICAgICAgICAgICAgKGZsdXNoICE9IFpfRklOSVNIIHx8IHJldCA9PSBaX1NUUkVBTV9FTkQpKSkgeworICAgICAgICAgICAgd2hpbGUgKHN0cm0tPm5leHRfb3V0ID4gc3RhdGUtPngubmV4dCkgeworICAgICAgICAgICAgICAgIHB1dCA9IHN0cm0tPm5leHRfb3V0IC0gc3RhdGUtPngubmV4dCA+IChpbnQpbWF4ID8gbWF4IDoKKyAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQpKHN0cm0tPm5leHRfb3V0IC0gc3RhdGUtPngubmV4dCk7CisgICAgICAgICAgICAgICAgd3JpdCA9IHdyaXRlKHN0YXRlLT5mZCwgc3RhdGUtPngubmV4dCwgcHV0KTsKKyAgICAgICAgICAgICAgICBpZiAod3JpdCA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfRVJSTk8sIHpzdHJlcnJvcigpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzdGF0ZS0+eC5uZXh0ICs9IHdyaXQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc3RybS0+YXZhaWxfb3V0ID09IDApIHsKKyAgICAgICAgICAgICAgICBzdHJtLT5hdmFpbF9vdXQgPSBzdGF0ZS0+c2l6ZTsKKyAgICAgICAgICAgICAgICBzdHJtLT5uZXh0X291dCA9IHN0YXRlLT5vdXQ7CisgICAgICAgICAgICAgICAgc3RhdGUtPngubmV4dCA9IHN0YXRlLT5vdXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiBjb21wcmVzcyAqLworICAgICAgICBoYXZlID0gc3RybS0+YXZhaWxfb3V0OworICAgICAgICByZXQgPSBkZWZsYXRlKHN0cm0sIGZsdXNoKTsKKyAgICAgICAgaWYgKHJldCA9PSBaX1NUUkVBTV9FUlJPUikgeworICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfU1RSRUFNX0VSUk9SLAorICAgICAgICAgICAgICAgICAgICAgICJpbnRlcm5hbCBlcnJvcjogZGVmbGF0ZSBzdHJlYW0gY29ycnVwdCIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGhhdmUgLT0gc3RybS0+YXZhaWxfb3V0OworICAgIH0gd2hpbGUgKGhhdmUpOworCisgICAgLyogaWYgdGhhdCBjb21wbGV0ZWQgYSBkZWZsYXRlIHN0cmVhbSwgYWxsb3cgYW5vdGhlciB0byBzdGFydCAqLworICAgIGlmIChmbHVzaCA9PSBaX0ZJTklTSCkKKyAgICAgICAgc3RhdGUtPnJlc2V0ID0gMTsKKworICAgIC8qIGFsbCBkb25lLCBubyBlcnJvcnMgKi8KKyAgICByZXR1cm4gMDsKK30KKworLyogQ29tcHJlc3MgbGVuIHplcm9zIHRvIG91dHB1dC4gIFJldHVybiAtMSBvbiBhIHdyaXRlIGVycm9yIG9yIG1lbW9yeQorICAgYWxsb2NhdGlvbiBmYWlsdXJlIGJ5IGd6X2NvbXAoKSwgb3IgMCBvbiBzdWNjZXNzLiAqLworbG9jYWwgaW50IGd6X3plcm8oc3RhdGUsIGxlbikKKyAgICBnel9zdGF0ZXAgc3RhdGU7CisgICAgel9vZmY2NF90IGxlbjsKK3sKKyAgICBpbnQgZmlyc3Q7CisgICAgdW5zaWduZWQgbjsKKyAgICB6X3N0cmVhbXAgc3RybSA9ICYoc3RhdGUtPnN0cm0pOworCisgICAgLyogY29uc3VtZSB3aGF0ZXZlcidzIGxlZnQgaW4gdGhlIGlucHV0IGJ1ZmZlciAqLworICAgIGlmIChzdHJtLT5hdmFpbF9pbiAmJiBnel9jb21wKHN0YXRlLCBaX05PX0ZMVVNIKSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgLyogY29tcHJlc3MgbGVuIHplcm9zIChsZW4gZ3VhcmFudGVlZCA+IDApICovCisgICAgZmlyc3QgPSAxOworICAgIHdoaWxlIChsZW4pIHsKKyAgICAgICAgbiA9IEdUX09GRihzdGF0ZS0+c2l6ZSkgfHwgKHpfb2ZmNjRfdClzdGF0ZS0+c2l6ZSA+IGxlbiA/CisgICAgICAgICAgICAodW5zaWduZWQpbGVuIDogc3RhdGUtPnNpemU7CisgICAgICAgIGlmIChmaXJzdCkgeworICAgICAgICAgICAgbWVtc2V0KHN0YXRlLT5pbiwgMCwgbik7CisgICAgICAgICAgICBmaXJzdCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgc3RybS0+YXZhaWxfaW4gPSBuOworICAgICAgICBzdHJtLT5uZXh0X2luID0gc3RhdGUtPmluOworICAgICAgICBzdGF0ZS0+eC5wb3MgKz0gbjsKKyAgICAgICAgaWYgKGd6X2NvbXAoc3RhdGUsIFpfTk9fRkxVU0gpID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBsZW4gLT0gbjsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKy8qIFdyaXRlIGxlbiBieXRlcyBmcm9tIGJ1ZiB0byBmaWxlLiAgUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbi4gIElmCisgICB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgbGVzcyB0aGFuIGxlbiwgdGhlbiB0aGVyZSB3YXMgYW4gZXJyb3IuICovCitsb2NhbCB6X3NpemVfdCBnel93cml0ZShzdGF0ZSwgYnVmLCBsZW4pCisgICAgZ3pfc3RhdGVwIHN0YXRlOworICAgIHZvaWRwYyBidWY7CisgICAgel9zaXplX3QgbGVuOworeworICAgIHpfc2l6ZV90IHB1dCA9IGxlbjsKKworICAgIC8qIGlmIGxlbiBpcyB6ZXJvLCBhdm9pZCB1bm5lY2Vzc2FyeSBvcGVyYXRpb25zICovCisgICAgaWYgKGxlbiA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8qIGFsbG9jYXRlIG1lbW9yeSBpZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHRocm91Z2ggKi8KKyAgICBpZiAoc3RhdGUtPnNpemUgPT0gMCAmJiBnel9pbml0KHN0YXRlKSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvKiBjaGVjayBmb3Igc2VlayByZXF1ZXN0ICovCisgICAgaWYgKHN0YXRlLT5zZWVrKSB7CisgICAgICAgIHN0YXRlLT5zZWVrID0gMDsKKyAgICAgICAgaWYgKGd6X3plcm8oc3RhdGUsIHN0YXRlLT5za2lwKSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8qIGZvciBzbWFsbCBsZW4sIGNvcHkgdG8gaW5wdXQgYnVmZmVyLCBvdGhlcndpc2UgY29tcHJlc3MgZGlyZWN0bHkgKi8KKyAgICBpZiAobGVuIDwgc3RhdGUtPnNpemUpIHsKKyAgICAgICAgLyogY29weSB0byBpbnB1dCBidWZmZXIsIGNvbXByZXNzIHdoZW4gZnVsbCAqLworICAgICAgICBkbyB7CisgICAgICAgICAgICB1bnNpZ25lZCBoYXZlLCBjb3B5OworCisgICAgICAgICAgICBpZiAoc3RhdGUtPnN0cm0uYXZhaWxfaW4gPT0gMCkKKyAgICAgICAgICAgICAgICBzdGF0ZS0+c3RybS5uZXh0X2luID0gc3RhdGUtPmluOworICAgICAgICAgICAgaGF2ZSA9ICh1bnNpZ25lZCkoKHN0YXRlLT5zdHJtLm5leHRfaW4gKyBzdGF0ZS0+c3RybS5hdmFpbF9pbikgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmluKTsKKyAgICAgICAgICAgIGNvcHkgPSBzdGF0ZS0+c2l6ZSAtIGhhdmU7CisgICAgICAgICAgICBpZiAoY29weSA+IGxlbikKKyAgICAgICAgICAgICAgICBjb3B5ID0gKHVuc2lnbmVkKWxlbjsKKyAgICAgICAgICAgIG1lbWNweShzdGF0ZS0+aW4gKyBoYXZlLCBidWYsIGNvcHkpOworICAgICAgICAgICAgc3RhdGUtPnN0cm0uYXZhaWxfaW4gKz0gY29weTsKKyAgICAgICAgICAgIHN0YXRlLT54LnBvcyArPSBjb3B5OworICAgICAgICAgICAgYnVmID0gKGNvbnN0IGNoYXIgKilidWYgKyBjb3B5OworICAgICAgICAgICAgbGVuIC09IGNvcHk7CisgICAgICAgICAgICBpZiAobGVuICYmIGd6X2NvbXAoc3RhdGUsIFpfTk9fRkxVU0gpID09IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9IHdoaWxlIChsZW4pOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgLyogY29uc3VtZSB3aGF0ZXZlcidzIGxlZnQgaW4gdGhlIGlucHV0IGJ1ZmZlciAqLworICAgICAgICBpZiAoc3RhdGUtPnN0cm0uYXZhaWxfaW4gJiYgZ3pfY29tcChzdGF0ZSwgWl9OT19GTFVTSCkgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICAvKiBkaXJlY3RseSBjb21wcmVzcyB1c2VyIGJ1ZmZlciB0byBmaWxlICovCisgICAgICAgIHN0YXRlLT5zdHJtLm5leHRfaW4gPSAoel9jb25zdCBCeXRlZiAqKWJ1ZjsKKyAgICAgICAgZG8geworICAgICAgICAgICAgdW5zaWduZWQgbiA9ICh1bnNpZ25lZCktMTsKKyAgICAgICAgICAgIGlmIChuID4gbGVuKQorICAgICAgICAgICAgICAgIG4gPSAodW5zaWduZWQpbGVuOworICAgICAgICAgICAgc3RhdGUtPnN0cm0uYXZhaWxfaW4gPSBuOworICAgICAgICAgICAgc3RhdGUtPngucG9zICs9IG47CisgICAgICAgICAgICBpZiAoZ3pfY29tcChzdGF0ZSwgWl9OT19GTFVTSCkgPT0gLTEpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBsZW4gLT0gbjsKKyAgICAgICAgfSB3aGlsZSAobGVuKTsKKyAgICB9CisKKyAgICAvKiBpbnB1dCB3YXMgYWxsIGJ1ZmZlcmVkIG9yIGNvbXByZXNzZWQgKi8KKyAgICByZXR1cm4gcHV0OworfQorCisvKiAtLSBzZWUgemxpYi5oIC0tICovCitpbnQgWkVYUE9SVCBnendyaXRlKGZpbGUsIGJ1ZiwgbGVuKQorICAgIGd6RmlsZSBmaWxlOworICAgIHZvaWRwYyBidWY7CisgICAgdW5zaWduZWQgbGVuOworeworICAgIGd6X3N0YXRlcCBzdGF0ZTsKKworICAgIC8qIGdldCBpbnRlcm5hbCBzdHJ1Y3R1cmUgKi8KKyAgICBpZiAoZmlsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMDsKKyAgICBzdGF0ZSA9IChnel9zdGF0ZXApZmlsZTsKKworICAgIC8qIGNoZWNrIHRoYXQgd2UncmUgd3JpdGluZyBhbmQgdGhhdCB0aGVyZSdzIG5vIGVycm9yICovCisgICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1dSSVRFIHx8IHN0YXRlLT5lcnIgIT0gWl9PSykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvKiBzaW5jZSBhbiBpbnQgaXMgcmV0dXJuZWQsIG1ha2Ugc3VyZSBsZW4gZml0cyBpbiBvbmUsIG90aGVyd2lzZSByZXR1cm4KKyAgICAgICB3aXRoIGFuIGVycm9yICh0aGlzIGF2b2lkcyBhIGZsYXcgaW4gdGhlIGludGVyZmFjZSkgKi8KKyAgICBpZiAoKGludClsZW4gPCAwKSB7CisgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0RBVEFfRVJST1IsICJyZXF1ZXN0ZWQgbGVuZ3RoIGRvZXMgbm90IGZpdCBpbiBpbnQiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLyogd3JpdGUgbGVuIGJ5dGVzIGZyb20gYnVmICh0aGUgcmV0dXJuIHZhbHVlIHdpbGwgZml0IGluIGFuIGludCkgKi8KKyAgICByZXR1cm4gKGludClnel93cml0ZShzdGF0ZSwgYnVmLCBsZW4pOworfQorCisvKiAtLSBzZWUgemxpYi5oIC0tICovCit6X3NpemVfdCBaRVhQT1JUIGd6ZndyaXRlKGJ1Ziwgc2l6ZSwgbml0ZW1zLCBmaWxlKQorICAgIHZvaWRwYyBidWY7CisgICAgel9zaXplX3Qgc2l6ZTsKKyAgICB6X3NpemVfdCBuaXRlbXM7CisgICAgZ3pGaWxlIGZpbGU7Cit7CisgICAgel9zaXplX3QgbGVuOworICAgIGd6X3N0YXRlcCBzdGF0ZTsKKworICAgIC8qIGdldCBpbnRlcm5hbCBzdHJ1Y3R1cmUgKi8KKyAgICBpZiAoZmlsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMDsKKyAgICBzdGF0ZSA9IChnel9zdGF0ZXApZmlsZTsKKworICAgIC8qIGNoZWNrIHRoYXQgd2UncmUgd3JpdGluZyBhbmQgdGhhdCB0aGVyZSdzIG5vIGVycm9yICovCisgICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1dSSVRFIHx8IHN0YXRlLT5lcnIgIT0gWl9PSykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvKiBjb21wdXRlIGJ5dGVzIHRvIHJlYWQgLS0gZXJyb3Igb24gb3ZlcmZsb3cgKi8KKyAgICBsZW4gPSBuaXRlbXMgKiBzaXplOworICAgIGlmIChzaXplICYmIGxlbiAvIHNpemUgIT0gbml0ZW1zKSB7CisgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX1NUUkVBTV9FUlJPUiwgInJlcXVlc3QgZG9lcyBub3QgZml0IGluIGEgc2l6ZV90Iik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8qIHdyaXRlIGxlbiBieXRlcyB0byBidWYsIHJldHVybiB0aGUgbnVtYmVyIG9mIGZ1bGwgaXRlbXMgd3JpdHRlbiAqLworICAgIHJldHVybiBsZW4gPyBnel93cml0ZShzdGF0ZSwgYnVmLCBsZW4pIC8gc2l6ZSA6IDA7Cit9CisKKy8qIC0tIHNlZSB6bGliLmggLS0gKi8KK2ludCBaRVhQT1JUIGd6cHV0YyhmaWxlLCBjKQorICAgIGd6RmlsZSBmaWxlOworICAgIGludCBjOworeworICAgIHVuc2lnbmVkIGhhdmU7CisgICAgdW5zaWduZWQgY2hhciBidWZbMV07CisgICAgZ3pfc3RhdGVwIHN0YXRlOworICAgIHpfc3RyZWFtcCBzdHJtOworCisgICAgLyogZ2V0IGludGVybmFsIHN0cnVjdHVyZSAqLworICAgIGlmIChmaWxlID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBzdGF0ZSA9IChnel9zdGF0ZXApZmlsZTsKKyAgICBzdHJtID0gJihzdGF0ZS0+c3RybSk7CisKKyAgICAvKiBjaGVjayB0aGF0IHdlJ3JlIHdyaXRpbmcgYW5kIHRoYXQgdGhlcmUncyBubyBlcnJvciAqLworICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9XUklURSB8fCBzdGF0ZS0+ZXJyICE9IFpfT0spCisgICAgICAgIHJldHVybiAtMTsKKworICAgIC8qIGNoZWNrIGZvciBzZWVrIHJlcXVlc3QgKi8KKyAgICBpZiAoc3RhdGUtPnNlZWspIHsKKyAgICAgICAgc3RhdGUtPnNlZWsgPSAwOworICAgICAgICBpZiAoZ3pfemVybyhzdGF0ZSwgc3RhdGUtPnNraXApID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qIHRyeSB3cml0aW5nIHRvIGlucHV0IGJ1ZmZlciBmb3Igc3BlZWQgKHN0YXRlLT5zaXplID09IDAgaWYgYnVmZmVyIG5vdAorICAgICAgIGluaXRpYWxpemVkKSAqLworICAgIGlmIChzdGF0ZS0+c2l6ZSkgeworICAgICAgICBpZiAoc3RybS0+YXZhaWxfaW4gPT0gMCkKKyAgICAgICAgICAgIHN0cm0tPm5leHRfaW4gPSBzdGF0ZS0+aW47CisgICAgICAgIGhhdmUgPSAodW5zaWduZWQpKChzdHJtLT5uZXh0X2luICsgc3RybS0+YXZhaWxfaW4pIC0gc3RhdGUtPmluKTsKKyAgICAgICAgaWYgKGhhdmUgPCBzdGF0ZS0+c2l6ZSkgeworICAgICAgICAgICAgc3RhdGUtPmluW2hhdmVdID0gKHVuc2lnbmVkIGNoYXIpYzsKKyAgICAgICAgICAgIHN0cm0tPmF2YWlsX2luKys7CisgICAgICAgICAgICBzdGF0ZS0+eC5wb3MrKzsKKyAgICAgICAgICAgIHJldHVybiBjICYgMHhmZjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIG5vIHJvb20gaW4gYnVmZmVyIG9yIG5vdCBpbml0aWFsaXplZCwgdXNlIGd6X3dyaXRlKCkgKi8KKyAgICBidWZbMF0gPSAodW5zaWduZWQgY2hhciljOworICAgIGlmIChnel93cml0ZShzdGF0ZSwgYnVmLCAxKSAhPSAxKQorICAgICAgICByZXR1cm4gLTE7CisgICAgcmV0dXJuIGMgJiAweGZmOworfQorCisvKiAtLSBzZWUgemxpYi5oIC0tICovCitpbnQgWkVYUE9SVCBnenB1dHMoZmlsZSwgcykKKyAgICBnekZpbGUgZmlsZTsKKyAgICBjb25zdCBjaGFyICpzOworeworICAgIHpfc2l6ZV90IGxlbiwgcHV0OworICAgIGd6X3N0YXRlcCBzdGF0ZTsKKworICAgIC8qIGdldCBpbnRlcm5hbCBzdHJ1Y3R1cmUgKi8KKyAgICBpZiAoZmlsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgc3RhdGUgPSAoZ3pfc3RhdGVwKWZpbGU7CisKKyAgICAvKiBjaGVjayB0aGF0IHdlJ3JlIHdyaXRpbmcgYW5kIHRoYXQgdGhlcmUncyBubyBlcnJvciAqLworICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9XUklURSB8fCBzdGF0ZS0+ZXJyICE9IFpfT0spCisgICAgICAgIHJldHVybiAtMTsKKworICAgIC8qIHdyaXRlIHN0cmluZyAqLworICAgIGxlbiA9IHN0cmxlbihzKTsKKyAgICBpZiAoKGludClsZW4gPCAwIHx8ICh1bnNpZ25lZClsZW4gIT0gbGVuKSB7CisgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX1NUUkVBTV9FUlJPUiwgInN0cmluZyBsZW5ndGggZG9lcyBub3QgZml0IGluIGludCIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHB1dCA9IGd6X3dyaXRlKHN0YXRlLCBzLCBsZW4pOworICAgIHJldHVybiBwdXQgPCBsZW4gPyAtMSA6IChpbnQpbGVuOworfQorCisjaWYgZGVmaW5lZChTVERDKSB8fCBkZWZpbmVkKFpfSEFWRV9TVERBUkdfSCkKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworLyogLS0gc2VlIHpsaWIuaCAtLSAqLworaW50IFpFWFBPUlRWQSBnenZwcmludGYoZ3pGaWxlIGZpbGUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCB2YSkKK3sKKyAgICBpbnQgbGVuOworICAgIHVuc2lnbmVkIGxlZnQ7CisgICAgY2hhciAqbmV4dDsKKyAgICBnel9zdGF0ZXAgc3RhdGU7CisgICAgel9zdHJlYW1wIHN0cm07CisKKyAgICAvKiBnZXQgaW50ZXJuYWwgc3RydWN0dXJlICovCisgICAgaWYgKGZpbGUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworICAgIHN0YXRlID0gKGd6X3N0YXRlcClmaWxlOworICAgIHN0cm0gPSAmKHN0YXRlLT5zdHJtKTsKKworICAgIC8qIGNoZWNrIHRoYXQgd2UncmUgd3JpdGluZyBhbmQgdGhhdCB0aGVyZSdzIG5vIGVycm9yICovCisgICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1dSSVRFIHx8IHN0YXRlLT5lcnIgIT0gWl9PSykKKyAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworCisgICAgLyogbWFrZSBzdXJlIHdlIGhhdmUgc29tZSBidWZmZXIgc3BhY2UgKi8KKyAgICBpZiAoc3RhdGUtPnNpemUgPT0gMCAmJiBnel9pbml0KHN0YXRlKSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIHN0YXRlLT5lcnI7CisKKyAgICAvKiBjaGVjayBmb3Igc2VlayByZXF1ZXN0ICovCisgICAgaWYgKHN0YXRlLT5zZWVrKSB7CisgICAgICAgIHN0YXRlLT5zZWVrID0gMDsKKyAgICAgICAgaWYgKGd6X3plcm8oc3RhdGUsIHN0YXRlLT5za2lwKSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0ZS0+ZXJyOworICAgIH0KKworICAgIC8qIGRvIHRoZSBwcmludGYoKSBpbnRvIHRoZSBpbnB1dCBidWZmZXIsIHB1dCBsZW5ndGggaW4gbGVuIC0tIHRoZSBpbnB1dAorICAgICAgIGJ1ZmZlciBpcyBkb3VibGUtc2l6ZWQganVzdCBmb3IgdGhpcyBmdW5jdGlvbiwgc28gdGhlcmUgaXMgZ3VhcmFudGVlZCB0bworICAgICAgIGJlIHN0YXRlLT5zaXplIGJ5dGVzIGF2YWlsYWJsZSBhZnRlciB0aGUgY3VycmVudCBjb250ZW50cyAqLworICAgIGlmIChzdHJtLT5hdmFpbF9pbiA9PSAwKQorICAgICAgICBzdHJtLT5uZXh0X2luID0gc3RhdGUtPmluOworICAgIG5leHQgPSAoY2hhciAqKShzdGF0ZS0+aW4gKyAoc3RybS0+bmV4dF9pbiAtIHN0YXRlLT5pbikgKyBzdHJtLT5hdmFpbF9pbik7CisgICAgbmV4dFtzdGF0ZS0+c2l6ZSAtIDFdID0gMDsKKyNpZmRlZiBOT192c25wcmludGYKKyMgIGlmZGVmIEhBU192c3ByaW50Zl92b2lkCisgICAgKHZvaWQpdnNwcmludGYobmV4dCwgZm9ybWF0LCB2YSk7CisgICAgZm9yIChsZW4gPSAwOyBsZW4gPCBzdGF0ZS0+c2l6ZTsgbGVuKyspCisgICAgICAgIGlmIChuZXh0W2xlbl0gPT0gMCkgYnJlYWs7CisjICBlbHNlCisgICAgbGVuID0gdnNwcmludGYobmV4dCwgZm9ybWF0LCB2YSk7CisjICBlbmRpZgorI2Vsc2UKKyMgIGlmZGVmIEhBU192c25wcmludGZfdm9pZAorICAgICh2b2lkKXZzbnByaW50ZihuZXh0LCBzdGF0ZS0+c2l6ZSwgZm9ybWF0LCB2YSk7CisgICAgbGVuID0gc3RybGVuKG5leHQpOworIyAgZWxzZQorICAgIGxlbiA9IHZzbnByaW50ZihuZXh0LCBzdGF0ZS0+c2l6ZSwgZm9ybWF0LCB2YSk7CisjICBlbmRpZgorI2VuZGlmCisKKyAgICAvKiBjaGVjayB0aGF0IHByaW50ZigpIHJlc3VsdHMgZml0IGluIGJ1ZmZlciAqLworICAgIGlmIChsZW4gPT0gMCB8fCAodW5zaWduZWQpbGVuID49IHN0YXRlLT5zaXplIHx8IG5leHRbc3RhdGUtPnNpemUgLSAxXSAhPSAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8qIHVwZGF0ZSBidWZmZXIgYW5kIHBvc2l0aW9uLCBjb21wcmVzcyBmaXJzdCBoYWxmIGlmIHBhc3QgdGhhdCAqLworICAgIHN0cm0tPmF2YWlsX2luICs9ICh1bnNpZ25lZClsZW47CisgICAgc3RhdGUtPngucG9zICs9IGxlbjsKKyAgICBpZiAoc3RybS0+YXZhaWxfaW4gPj0gc3RhdGUtPnNpemUpIHsKKyAgICAgICAgbGVmdCA9IHN0cm0tPmF2YWlsX2luIC0gc3RhdGUtPnNpemU7CisgICAgICAgIHN0cm0tPmF2YWlsX2luID0gc3RhdGUtPnNpemU7CisgICAgICAgIGlmIChnel9jb21wKHN0YXRlLCBaX05PX0ZMVVNIKSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0ZS0+ZXJyOworICAgICAgICBtZW1tb3ZlKHN0YXRlLT5pbiwgc3RhdGUtPmluICsgc3RhdGUtPnNpemUsIGxlZnQpOworICAgICAgICBzdHJtLT5uZXh0X2luID0gc3RhdGUtPmluOworICAgICAgICBzdHJtLT5hdmFpbF9pbiA9IGxlZnQ7CisgICAgfQorICAgIHJldHVybiBsZW47Cit9CisKK2ludCBaRVhQT1JUVkEgZ3pwcmludGYoZ3pGaWxlIGZpbGUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICAgIHZhX2xpc3QgdmE7CisgICAgaW50IHJldDsKKworICAgIHZhX3N0YXJ0KHZhLCBmb3JtYXQpOworICAgIHJldCA9IGd6dnByaW50ZihmaWxlLCBmb3JtYXQsIHZhKTsKKyAgICB2YV9lbmQodmEpOworICAgIHJldHVybiByZXQ7Cit9CisKKyNlbHNlIC8qICFTVERDICYmICFaX0hBVkVfU1REQVJHX0ggKi8KKworLyogLS0gc2VlIHpsaWIuaCAtLSAqLworaW50IFpFWFBPUlRWQSBnenByaW50ZiAoZmlsZSwgZm9ybWF0LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsIGE5LCBhMTAsCisgICAgICAgICAgICAgICAgICAgICAgIGExMSwgYTEyLCBhMTMsIGExNCwgYTE1LCBhMTYsIGExNywgYTE4LCBhMTksIGEyMCkKKyAgICBnekZpbGUgZmlsZTsKKyAgICBjb25zdCBjaGFyICpmb3JtYXQ7CisgICAgaW50IGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwgYTksIGExMCwKKyAgICAgICAgYTExLCBhMTIsIGExMywgYTE0LCBhMTUsIGExNiwgYTE3LCBhMTgsIGExOSwgYTIwOworeworICAgIHVuc2lnbmVkIGxlbiwgbGVmdDsKKyAgICBjaGFyICpuZXh0OworICAgIGd6X3N0YXRlcCBzdGF0ZTsKKyAgICB6X3N0cmVhbXAgc3RybTsKKworICAgIC8qIGdldCBpbnRlcm5hbCBzdHJ1Y3R1cmUgKi8KKyAgICBpZiAoZmlsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgICAgc3RhdGUgPSAoZ3pfc3RhdGVwKWZpbGU7CisgICAgc3RybSA9ICYoc3RhdGUtPnN0cm0pOworCisgICAgLyogY2hlY2sgdGhhdCBjYW4gcmVhbGx5IHBhc3MgcG9pbnRlciBpbiBpbnRzICovCisgICAgaWYgKHNpemVvZihpbnQpICE9IHNpemVvZih2b2lkICopKQorICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisKKyAgICAvKiBjaGVjayB0aGF0IHdlJ3JlIHdyaXRpbmcgYW5kIHRoYXQgdGhlcmUncyBubyBlcnJvciAqLworICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9XUklURSB8fCBzdGF0ZS0+ZXJyICE9IFpfT0spCisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKworICAgIC8qIG1ha2Ugc3VyZSB3ZSBoYXZlIHNvbWUgYnVmZmVyIHNwYWNlICovCisgICAgaWYgKHN0YXRlLT5zaXplID09IDAgJiYgZ3pfaW5pdChzdGF0ZSkgPT0gLTEpCisgICAgICAgIHJldHVybiBzdGF0ZS0+ZXJyb3I7CisKKyAgICAvKiBjaGVjayBmb3Igc2VlayByZXF1ZXN0ICovCisgICAgaWYgKHN0YXRlLT5zZWVrKSB7CisgICAgICAgIHN0YXRlLT5zZWVrID0gMDsKKyAgICAgICAgaWYgKGd6X3plcm8oc3RhdGUsIHN0YXRlLT5za2lwKSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0ZS0+ZXJyb3I7CisgICAgfQorCisgICAgLyogZG8gdGhlIHByaW50ZigpIGludG8gdGhlIGlucHV0IGJ1ZmZlciwgcHV0IGxlbmd0aCBpbiBsZW4gLS0gdGhlIGlucHV0CisgICAgICAgYnVmZmVyIGlzIGRvdWJsZS1zaXplZCBqdXN0IGZvciB0aGlzIGZ1bmN0aW9uLCBzbyB0aGVyZSBpcyBndWFyYW50ZWVkIHRvCisgICAgICAgYmUgc3RhdGUtPnNpemUgYnl0ZXMgYXZhaWxhYmxlIGFmdGVyIHRoZSBjdXJyZW50IGNvbnRlbnRzICovCisgICAgaWYgKHN0cm0tPmF2YWlsX2luID09IDApCisgICAgICAgIHN0cm0tPm5leHRfaW4gPSBzdGF0ZS0+aW47CisgICAgbmV4dCA9IChjaGFyICopKHN0cm0tPm5leHRfaW4gKyBzdHJtLT5hdmFpbF9pbik7CisgICAgbmV4dFtzdGF0ZS0+c2l6ZSAtIDFdID0gMDsKKyNpZmRlZiBOT19zbnByaW50ZgorIyAgaWZkZWYgSEFTX3NwcmludGZfdm9pZAorICAgIHNwcmludGYobmV4dCwgZm9ybWF0LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsIGE5LCBhMTAsIGExMSwgYTEyLAorICAgICAgICAgICAgYTEzLCBhMTQsIGExNSwgYTE2LCBhMTcsIGExOCwgYTE5LCBhMjApOworICAgIGZvciAobGVuID0gMDsgbGVuIDwgc2l6ZTsgbGVuKyspCisgICAgICAgIGlmIChuZXh0W2xlbl0gPT0gMCkKKyAgICAgICAgICAgIGJyZWFrOworIyAgZWxzZQorICAgIGxlbiA9IHNwcmludGYobmV4dCwgZm9ybWF0LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsIGE5LCBhMTAsIGExMSwKKyAgICAgICAgICAgICAgICAgIGExMiwgYTEzLCBhMTQsIGExNSwgYTE2LCBhMTcsIGExOCwgYTE5LCBhMjApOworIyAgZW5kaWYKKyNlbHNlCisjICBpZmRlZiBIQVNfc25wcmludGZfdm9pZAorICAgIHNucHJpbnRmKG5leHQsIHN0YXRlLT5zaXplLCBmb3JtYXQsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwgYTksCisgICAgICAgICAgICAgYTEwLCBhMTEsIGExMiwgYTEzLCBhMTQsIGExNSwgYTE2LCBhMTcsIGExOCwgYTE5LCBhMjApOworICAgIGxlbiA9IHN0cmxlbihuZXh0KTsKKyMgIGVsc2UKKyAgICBsZW4gPSBzbnByaW50ZihuZXh0LCBzdGF0ZS0+c2l6ZSwgZm9ybWF0LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsCisgICAgICAgICAgICAgICAgICAgYTksIGExMCwgYTExLCBhMTIsIGExMywgYTE0LCBhMTUsIGExNiwgYTE3LCBhMTgsIGExOSwgYTIwKTsKKyMgIGVuZGlmCisjZW5kaWYKKworICAgIC8qIGNoZWNrIHRoYXQgcHJpbnRmKCkgcmVzdWx0cyBmaXQgaW4gYnVmZmVyICovCisgICAgaWYgKGxlbiA9PSAwIHx8IGxlbiA+PSBzdGF0ZS0+c2l6ZSB8fCBuZXh0W3N0YXRlLT5zaXplIC0gMV0gIT0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvKiB1cGRhdGUgYnVmZmVyIGFuZCBwb3NpdGlvbiwgY29tcHJlc3MgZmlyc3QgaGFsZiBpZiBwYXN0IHRoYXQgKi8KKyAgICBzdHJtLT5hdmFpbF9pbiArPSBsZW47CisgICAgc3RhdGUtPngucG9zICs9IGxlbjsKKyAgICBpZiAoc3RybS0+YXZhaWxfaW4gPj0gc3RhdGUtPnNpemUpIHsKKyAgICAgICAgbGVmdCA9IHN0cm0tPmF2YWlsX2luIC0gc3RhdGUtPnNpemU7CisgICAgICAgIHN0cm0tPmF2YWlsX2luID0gc3RhdGUtPnNpemU7CisgICAgICAgIGlmIChnel9jb21wKHN0YXRlLCBaX05PX0ZMVVNIKSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0ZS0+ZXJyOworICAgICAgICBtZW1tb3ZlKHN0YXRlLT5pbiwgc3RhdGUtPmluICsgc3RhdGUtPnNpemUsIGxlZnQpOworICAgICAgICBzdHJtLT5uZXh0X2luID0gc3RhdGUtPmluOworICAgICAgICBzdHJtLT5hdmFpbF9pbiA9IGxlZnQ7CisgICAgfQorICAgIHJldHVybiAoaW50KWxlbjsKK30KKworI2VuZGlmCisKKy8qIC0tIHNlZSB6bGliLmggLS0gKi8KK2ludCBaRVhQT1JUIGd6Zmx1c2goZmlsZSwgZmx1c2gpCisgICAgZ3pGaWxlIGZpbGU7CisgICAgaW50IGZsdXNoOworeworICAgIGd6X3N0YXRlcCBzdGF0ZTsKKworICAgIC8qIGdldCBpbnRlcm5hbCBzdHJ1Y3R1cmUgKi8KKyAgICBpZiAoZmlsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgICAgc3RhdGUgPSAoZ3pfc3RhdGVwKWZpbGU7CisKKyAgICAvKiBjaGVjayB0aGF0IHdlJ3JlIHdyaXRpbmcgYW5kIHRoYXQgdGhlcmUncyBubyBlcnJvciAqLworICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9XUklURSB8fCBzdGF0ZS0+ZXJyICE9IFpfT0spCisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKworICAgIC8qIGNoZWNrIGZsdXNoIHBhcmFtZXRlciAqLworICAgIGlmIChmbHVzaCA8IDAgfHwgZmx1c2ggPiBaX0ZJTklTSCkKKyAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworCisgICAgLyogY2hlY2sgZm9yIHNlZWsgcmVxdWVzdCAqLworICAgIGlmIChzdGF0ZS0+c2VlaykgeworICAgICAgICBzdGF0ZS0+c2VlayA9IDA7CisgICAgICAgIGlmIChnel96ZXJvKHN0YXRlLCBzdGF0ZS0+c2tpcCkgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gc3RhdGUtPmVycjsKKyAgICB9CisKKyAgICAvKiBjb21wcmVzcyByZW1haW5pbmcgZGF0YSB3aXRoIHJlcXVlc3RlZCBmbHVzaCAqLworICAgICh2b2lkKWd6X2NvbXAoc3RhdGUsIGZsdXNoKTsKKyAgICByZXR1cm4gc3RhdGUtPmVycjsKK30KKworLyogLS0gc2VlIHpsaWIuaCAtLSAqLworaW50IFpFWFBPUlQgZ3pzZXRwYXJhbXMoZmlsZSwgbGV2ZWwsIHN0cmF0ZWd5KQorICAgIGd6RmlsZSBmaWxlOworICAgIGludCBsZXZlbDsKKyAgICBpbnQgc3RyYXRlZ3k7Cit7CisgICAgZ3pfc3RhdGVwIHN0YXRlOworICAgIHpfc3RyZWFtcCBzdHJtOworCisgICAgLyogZ2V0IGludGVybmFsIHN0cnVjdHVyZSAqLworICAgIGlmIChmaWxlID09IE5VTEwpCisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyAgICBzdGF0ZSA9IChnel9zdGF0ZXApZmlsZTsKKyAgICBzdHJtID0gJihzdGF0ZS0+c3RybSk7CisKKyAgICAvKiBjaGVjayB0aGF0IHdlJ3JlIHdyaXRpbmcgYW5kIHRoYXQgdGhlcmUncyBubyBlcnJvciAqLworICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9XUklURSB8fCBzdGF0ZS0+ZXJyICE9IFpfT0spCisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKworICAgIC8qIGlmIG5vIGNoYW5nZSBpcyByZXF1ZXN0ZWQsIHRoZW4gZG8gbm90aGluZyAqLworICAgIGlmIChsZXZlbCA9PSBzdGF0ZS0+bGV2ZWwgJiYgc3RyYXRlZ3kgPT0gc3RhdGUtPnN0cmF0ZWd5KQorICAgICAgICByZXR1cm4gWl9PSzsKKworICAgIC8qIGNoZWNrIGZvciBzZWVrIHJlcXVlc3QgKi8KKyAgICBpZiAoc3RhdGUtPnNlZWspIHsKKyAgICAgICAgc3RhdGUtPnNlZWsgPSAwOworICAgICAgICBpZiAoZ3pfemVybyhzdGF0ZSwgc3RhdGUtPnNraXApID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRlLT5lcnI7CisgICAgfQorCisgICAgLyogY2hhbmdlIGNvbXByZXNzaW9uIHBhcmFtZXRlcnMgZm9yIHN1YnNlcXVlbnQgaW5wdXQgKi8KKyAgICBpZiAoc3RhdGUtPnNpemUpIHsKKyAgICAgICAgLyogZmx1c2ggcHJldmlvdXMgaW5wdXQgd2l0aCBwcmV2aW91cyBwYXJhbWV0ZXJzIGJlZm9yZSBjaGFuZ2luZyAqLworICAgICAgICBpZiAoc3RybS0+YXZhaWxfaW4gJiYgZ3pfY29tcChzdGF0ZSwgWl9CTE9DSykgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gc3RhdGUtPmVycjsKKyAgICAgICAgZGVmbGF0ZVBhcmFtcyhzdHJtLCBsZXZlbCwgc3RyYXRlZ3kpOworICAgIH0KKyAgICBzdGF0ZS0+bGV2ZWwgPSBsZXZlbDsKKyAgICBzdGF0ZS0+c3RyYXRlZ3kgPSBzdHJhdGVneTsKKyAgICByZXR1cm4gWl9PSzsKK30KKworLyogLS0gc2VlIHpsaWIuaCAtLSAqLworaW50IFpFWFBPUlQgZ3pjbG9zZV93KGZpbGUpCisgICAgZ3pGaWxlIGZpbGU7Cit7CisgICAgaW50IHJldCA9IFpfT0s7CisgICAgZ3pfc3RhdGVwIHN0YXRlOworCisgICAgLyogZ2V0IGludGVybmFsIHN0cnVjdHVyZSAqLworICAgIGlmIChmaWxlID09IE5VTEwpCisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyAgICBzdGF0ZSA9IChnel9zdGF0ZXApZmlsZTsKKworICAgIC8qIGNoZWNrIHRoYXQgd2UncmUgd3JpdGluZyAqLworICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9XUklURSkKKyAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworCisgICAgLyogY2hlY2sgZm9yIHNlZWsgcmVxdWVzdCAqLworICAgIGlmIChzdGF0ZS0+c2VlaykgeworICAgICAgICBzdGF0ZS0+c2VlayA9IDA7CisgICAgICAgIGlmIChnel96ZXJvKHN0YXRlLCBzdGF0ZS0+c2tpcCkgPT0gLTEpCisgICAgICAgICAgICByZXQgPSBzdGF0ZS0+ZXJyOworICAgIH0KKworICAgIC8qIGZsdXNoLCBmcmVlIG1lbW9yeSwgYW5kIGNsb3NlIGZpbGUgKi8KKyAgICBpZiAoZ3pfY29tcChzdGF0ZSwgWl9GSU5JU0gpID09IC0xKQorICAgICAgICByZXQgPSBzdGF0ZS0+ZXJyOworICAgIGlmIChzdGF0ZS0+c2l6ZSkgeworICAgICAgICBpZiAoIXN0YXRlLT5kaXJlY3QpIHsKKyAgICAgICAgICAgICh2b2lkKWRlZmxhdGVFbmQoJihzdGF0ZS0+c3RybSkpOworICAgICAgICAgICAgZnJlZShzdGF0ZS0+b3V0KTsKKyAgICAgICAgfQorICAgICAgICBmcmVlKHN0YXRlLT5pbik7CisgICAgfQorICAgIGd6X2Vycm9yKHN0YXRlLCBaX09LLCBOVUxMKTsKKyAgICBmcmVlKHN0YXRlLT5wYXRoKTsKKyAgICBpZiAoY2xvc2Uoc3RhdGUtPmZkKSA9PSAtMSkKKyAgICAgICAgcmV0ID0gWl9FUlJOTzsKKyAgICBmcmVlKHN0YXRlKTsKKyAgICByZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvc3JjL2luZmJhY2suYyBiL3NyYy9pbmZiYWNrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM5MGM1OAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmZiYWNrLmMKQEAgLTAsMCArMSw2NDEgQEAKKy8qIGluZmJhY2suYyAtLSBpbmZsYXRlIHVzaW5nIGEgY2FsbC1iYWNrIGludGVyZmFjZQorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjIgTWFyayBBZGxlcgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAorICovCisKKy8qCisgICBUaGlzIGNvZGUgaXMgbGFyZ2VseSBjb3BpZWQgZnJvbSBpbmZsYXRlLmMuICBOb3JtYWxseSBlaXRoZXIgaW5mYmFjay5vIG9yCisgICBpbmZsYXRlLm8gd291bGQgYmUgbGlua2VkIGludG8gYW4gYXBwbGljYXRpb24tLW5vdCBib3RoLiAgVGhlIGludGVyZmFjZQorICAgd2l0aCBpbmZmYXN0LmMgaXMgcmV0YWluZWQgc28gdGhhdCBvcHRpbWl6ZWQgYXNzZW1ibGVyLWNvZGVkIHZlcnNpb25zIG9mCisgICBpbmZsYXRlX2Zhc3QoKSBjYW4gYmUgdXNlZCB3aXRoIGVpdGhlciBpbmZsYXRlLmMgb3IgaW5mYmFjay5jLgorICovCisKKyNpbmNsdWRlICJ6dXRpbC5oIgorI2luY2x1ZGUgImluZnRyZWVzLmgiCisjaW5jbHVkZSAiaW5mbGF0ZS5oIgorI2luY2x1ZGUgImluZmZhc3QuaCIKKworLyogZnVuY3Rpb24gcHJvdG90eXBlcyAqLworbG9jYWwgdm9pZCBmaXhlZHRhYmxlcyBPRigoc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZSkpOworCisvKgorICAgc3RybSBwcm92aWRlcyBtZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbnMgaW4gemFsbG9jIGFuZCB6ZnJlZSwgb3IKKyAgIFpfTlVMTCB0byB1c2UgdGhlIGxpYnJhcnkgbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb25zLgorCisgICB3aW5kb3dCaXRzIGlzIGluIHRoZSByYW5nZSA4Li4xNSwgYW5kIHdpbmRvdyBpcyBhIHVzZXItc3VwcGxpZWQKKyAgIHdpbmRvdyBhbmQgb3V0cHV0IGJ1ZmZlciB0aGF0IGlzIDIqKndpbmRvd0JpdHMgYnl0ZXMuCisgKi8KK2ludCBaRVhQT1JUIGluZmxhdGVCYWNrSW5pdF8oc3RybSwgd2luZG93Qml0cywgd2luZG93LCB2ZXJzaW9uLCBzdHJlYW1fc2l6ZSkKK3pfc3RyZWFtcCBzdHJtOworaW50IHdpbmRvd0JpdHM7Cit1bnNpZ25lZCBjaGFyIEZBUiAqd2luZG93OworY29uc3QgY2hhciAqdmVyc2lvbjsKK2ludCBzdHJlYW1fc2l6ZTsKK3sKKyAgICBzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRlOworCisgICAgaWYgKHZlcnNpb24gPT0gWl9OVUxMIHx8IHZlcnNpb25bMF0gIT0gWkxJQl9WRVJTSU9OWzBdIHx8CisgICAgICAgIHN0cmVhbV9zaXplICE9IChpbnQpKHNpemVvZih6X3N0cmVhbSkpKQorICAgICAgICByZXR1cm4gWl9WRVJTSU9OX0VSUk9SOworICAgIGlmIChzdHJtID09IFpfTlVMTCB8fCB3aW5kb3cgPT0gWl9OVUxMIHx8CisgICAgICAgIHdpbmRvd0JpdHMgPCA4IHx8IHdpbmRvd0JpdHMgPiAxNSkKKyAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworICAgIHN0cm0tPm1zZyA9IFpfTlVMTDsgICAgICAgICAgICAgICAgIC8qIGluIGNhc2Ugd2UgcmV0dXJuIGFuIGVycm9yICovCisgICAgaWYgKHN0cm0tPnphbGxvYyA9PSAoYWxsb2NfZnVuYykwKSB7CisjaWZkZWYgWl9TT0xPCisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyNlbHNlCisgICAgICAgIHN0cm0tPnphbGxvYyA9IHpjYWxsb2M7CisgICAgICAgIHN0cm0tPm9wYXF1ZSA9ICh2b2lkcGYpMDsKKyNlbmRpZgorICAgIH0KKyAgICBpZiAoc3RybS0+emZyZWUgPT0gKGZyZWVfZnVuYykwKQorI2lmZGVmIFpfU09MTworICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisjZWxzZQorICAgIHN0cm0tPnpmcmVlID0gemNmcmVlOworI2VuZGlmCisgICAgc3RhdGUgPSAoc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICopWkFMTE9DKHN0cm0sIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSkpOworICAgIGlmIChzdGF0ZSA9PSBaX05VTEwpIHJldHVybiBaX01FTV9FUlJPUjsKKyAgICBUcmFjZXYoKHN0ZGVyciwgImluZmxhdGU6IGFsbG9jYXRlZFxuIikpOworICAgIHN0cm0tPnN0YXRlID0gKHN0cnVjdCBpbnRlcm5hbF9zdGF0ZSBGQVIgKilzdGF0ZTsKKyAgICBzdGF0ZS0+ZG1heCA9IDMyNzY4VTsKKyAgICBzdGF0ZS0+d2JpdHMgPSAodUludCl3aW5kb3dCaXRzOworICAgIHN0YXRlLT53c2l6ZSA9IDFVIDw8IHdpbmRvd0JpdHM7CisgICAgc3RhdGUtPndpbmRvdyA9IHdpbmRvdzsKKyAgICBzdGF0ZS0+d25leHQgPSAwOworICAgIHN0YXRlLT53aGF2ZSA9IDA7CisgICAgcmV0dXJuIFpfT0s7Cit9CisKKy8qCisgICBSZXR1cm4gc3RhdGUgd2l0aCBsZW5ndGggYW5kIGRpc3RhbmNlIGRlY29kaW5nIHRhYmxlcyBhbmQgaW5kZXggc2l6ZXMgc2V0IHRvCisgICBmaXhlZCBjb2RlIGRlY29kaW5nLiAgTm9ybWFsbHkgdGhpcyByZXR1cm5zIGZpeGVkIHRhYmxlcyBmcm9tIGluZmZpeGVkLmguCisgICBJZiBCVUlMREZJWEVEIGlzIGRlZmluZWQsIHRoZW4gaW5zdGVhZCB0aGlzIHJvdXRpbmUgYnVpbGRzIHRoZSB0YWJsZXMgdGhlCisgICBmaXJzdCB0aW1lIGl0J3MgY2FsbGVkLCBhbmQgcmV0dXJucyB0aG9zZSB0YWJsZXMgdGhlIGZpcnN0IHRpbWUgYW5kCisgICB0aGVyZWFmdGVyLiAgVGhpcyByZWR1Y2VzIHRoZSBzaXplIG9mIHRoZSBjb2RlIGJ5IGFib3V0IDJLIGJ5dGVzLCBpbgorICAgZXhjaGFuZ2UgZm9yIGEgbGl0dGxlIGV4ZWN1dGlvbiB0aW1lLiAgSG93ZXZlciwgQlVJTERGSVhFRCBzaG91bGQgbm90IGJlCisgICB1c2VkIGZvciB0aHJlYWRlZCBhcHBsaWNhdGlvbnMsIHNpbmNlIHRoZSByZXdyaXRpbmcgb2YgdGhlIHRhYmxlcyBhbmQgdmlyZ2luCisgICBtYXkgbm90IGJlIHRocmVhZC1zYWZlLgorICovCitsb2NhbCB2b2lkIGZpeGVkdGFibGVzKHN0YXRlKQorc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKK3sKKyNpZmRlZiBCVUlMREZJWEVECisgICAgc3RhdGljIGludCB2aXJnaW4gPSAxOworICAgIHN0YXRpYyBjb2RlICpsZW5maXgsICpkaXN0Zml4OworICAgIHN0YXRpYyBjb2RlIGZpeGVkWzU0NF07CisKKyAgICAvKiBidWlsZCBmaXhlZCBodWZmbWFuIHRhYmxlcyBpZiBmaXJzdCBjYWxsIChtYXkgbm90IGJlIHRocmVhZCBzYWZlKSAqLworICAgIGlmICh2aXJnaW4pIHsKKyAgICAgICAgdW5zaWduZWQgc3ltLCBiaXRzOworICAgICAgICBzdGF0aWMgY29kZSAqbmV4dDsKKworICAgICAgICAvKiBsaXRlcmFsL2xlbmd0aCB0YWJsZSAqLworICAgICAgICBzeW0gPSAwOworICAgICAgICB3aGlsZSAoc3ltIDwgMTQ0KSBzdGF0ZS0+bGVuc1tzeW0rK10gPSA4OworICAgICAgICB3aGlsZSAoc3ltIDwgMjU2KSBzdGF0ZS0+bGVuc1tzeW0rK10gPSA5OworICAgICAgICB3aGlsZSAoc3ltIDwgMjgwKSBzdGF0ZS0+bGVuc1tzeW0rK10gPSA3OworICAgICAgICB3aGlsZSAoc3ltIDwgMjg4KSBzdGF0ZS0+bGVuc1tzeW0rK10gPSA4OworICAgICAgICBuZXh0ID0gZml4ZWQ7CisgICAgICAgIGxlbmZpeCA9IG5leHQ7CisgICAgICAgIGJpdHMgPSA5OworICAgICAgICBpbmZsYXRlX3RhYmxlKExFTlMsIHN0YXRlLT5sZW5zLCAyODgsICYobmV4dCksICYoYml0cyksIHN0YXRlLT53b3JrKTsKKworICAgICAgICAvKiBkaXN0YW5jZSB0YWJsZSAqLworICAgICAgICBzeW0gPSAwOworICAgICAgICB3aGlsZSAoc3ltIDwgMzIpIHN0YXRlLT5sZW5zW3N5bSsrXSA9IDU7CisgICAgICAgIGRpc3RmaXggPSBuZXh0OworICAgICAgICBiaXRzID0gNTsKKyAgICAgICAgaW5mbGF0ZV90YWJsZShESVNUUywgc3RhdGUtPmxlbnMsIDMyLCAmKG5leHQpLCAmKGJpdHMpLCBzdGF0ZS0+d29yayk7CisKKyAgICAgICAgLyogZG8gdGhpcyBqdXN0IG9uY2UgKi8KKyAgICAgICAgdmlyZ2luID0gMDsKKyAgICB9CisjZWxzZSAvKiAhQlVJTERGSVhFRCAqLworIyAgIGluY2x1ZGUgImluZmZpeGVkLmgiCisjZW5kaWYgLyogQlVJTERGSVhFRCAqLworICAgIHN0YXRlLT5sZW5jb2RlID0gbGVuZml4OworICAgIHN0YXRlLT5sZW5iaXRzID0gOTsKKyAgICBzdGF0ZS0+ZGlzdGNvZGUgPSBkaXN0Zml4OworICAgIHN0YXRlLT5kaXN0Yml0cyA9IDU7Cit9CisKKy8qIE1hY3JvcyBmb3IgaW5mbGF0ZUJhY2soKTogKi8KKworLyogTG9hZCByZXR1cm5lZCBzdGF0ZSBmcm9tIGluZmxhdGVfZmFzdCgpICovCisjZGVmaW5lIExPQUQoKSBcCisgICAgZG8geyBcCisgICAgICAgIHB1dCA9IHN0cm0tPm5leHRfb3V0OyBcCisgICAgICAgIGxlZnQgPSBzdHJtLT5hdmFpbF9vdXQ7IFwKKyAgICAgICAgbmV4dCA9IHN0cm0tPm5leHRfaW47IFwKKyAgICAgICAgaGF2ZSA9IHN0cm0tPmF2YWlsX2luOyBcCisgICAgICAgIGhvbGQgPSBzdGF0ZS0+aG9sZDsgXAorICAgICAgICBiaXRzID0gc3RhdGUtPmJpdHM7IFwKKyAgICB9IHdoaWxlICgwKQorCisvKiBTZXQgc3RhdGUgZnJvbSByZWdpc3RlcnMgZm9yIGluZmxhdGVfZmFzdCgpICovCisjZGVmaW5lIFJFU1RPUkUoKSBcCisgICAgZG8geyBcCisgICAgICAgIHN0cm0tPm5leHRfb3V0ID0gcHV0OyBcCisgICAgICAgIHN0cm0tPmF2YWlsX291dCA9IGxlZnQ7IFwKKyAgICAgICAgc3RybS0+bmV4dF9pbiA9IG5leHQ7IFwKKyAgICAgICAgc3RybS0+YXZhaWxfaW4gPSBoYXZlOyBcCisgICAgICAgIHN0YXRlLT5ob2xkID0gaG9sZDsgXAorICAgICAgICBzdGF0ZS0+Yml0cyA9IGJpdHM7IFwKKyAgICB9IHdoaWxlICgwKQorCisvKiBDbGVhciB0aGUgaW5wdXQgYml0IGFjY3VtdWxhdG9yICovCisjZGVmaW5lIElOSVRCSVRTKCkgXAorICAgIGRvIHsgXAorICAgICAgICBob2xkID0gMDsgXAorICAgICAgICBiaXRzID0gMDsgXAorICAgIH0gd2hpbGUgKDApCisKKy8qIEFzc3VyZSB0aGF0IHNvbWUgaW5wdXQgaXMgYXZhaWxhYmxlLiAgSWYgaW5wdXQgaXMgcmVxdWVzdGVkLCBidXQgZGVuaWVkLAorICAgdGhlbiByZXR1cm4gYSBaX0JVRl9FUlJPUiBmcm9tIGluZmxhdGVCYWNrKCkuICovCisjZGVmaW5lIFBVTEwoKSBcCisgICAgZG8geyBcCisgICAgICAgIGlmIChoYXZlID09IDApIHsgXAorICAgICAgICAgICAgaGF2ZSA9IGluKGluX2Rlc2MsICZuZXh0KTsgXAorICAgICAgICAgICAgaWYgKGhhdmUgPT0gMCkgeyBcCisgICAgICAgICAgICAgICAgbmV4dCA9IFpfTlVMTDsgXAorICAgICAgICAgICAgICAgIHJldCA9IFpfQlVGX0VSUk9SOyBcCisgICAgICAgICAgICAgICAgZ290byBpbmZfbGVhdmU7IFwKKyAgICAgICAgICAgIH0gXAorICAgICAgICB9IFwKKyAgICB9IHdoaWxlICgwKQorCisvKiBHZXQgYSBieXRlIG9mIGlucHV0IGludG8gdGhlIGJpdCBhY2N1bXVsYXRvciwgb3IgcmV0dXJuIGZyb20gaW5mbGF0ZUJhY2soKQorICAgd2l0aCBhbiBlcnJvciBpZiB0aGVyZSBpcyBubyBpbnB1dCBhdmFpbGFibGUuICovCisjZGVmaW5lIFBVTExCWVRFKCkgXAorICAgIGRvIHsgXAorICAgICAgICBQVUxMKCk7IFwKKyAgICAgICAgaGF2ZS0tOyBcCisgICAgICAgIGhvbGQgKz0gKHVuc2lnbmVkIGxvbmcpKCpuZXh0KyspIDw8IGJpdHM7IFwKKyAgICAgICAgYml0cyArPSA4OyBcCisgICAgfSB3aGlsZSAoMCkKKworLyogQXNzdXJlIHRoYXQgdGhlcmUgYXJlIGF0IGxlYXN0IG4gYml0cyBpbiB0aGUgYml0IGFjY3VtdWxhdG9yLiAgSWYgdGhlcmUgaXMKKyAgIG5vdCBlbm91Z2ggYXZhaWxhYmxlIGlucHV0IHRvIGRvIHRoYXQsIHRoZW4gcmV0dXJuIGZyb20gaW5mbGF0ZUJhY2soKSB3aXRoCisgICBhbiBlcnJvci4gKi8KKyNkZWZpbmUgTkVFREJJVFMobikgXAorICAgIGRvIHsgXAorICAgICAgICB3aGlsZSAoYml0cyA8ICh1bnNpZ25lZCkobikpIFwKKyAgICAgICAgICAgIFBVTExCWVRFKCk7IFwKKyAgICB9IHdoaWxlICgwKQorCisvKiBSZXR1cm4gdGhlIGxvdyBuIGJpdHMgb2YgdGhlIGJpdCBhY2N1bXVsYXRvciAobiA8IDE2KSAqLworI2RlZmluZSBCSVRTKG4pIFwKKyAgICAoKHVuc2lnbmVkKWhvbGQgJiAoKDFVIDw8IChuKSkgLSAxKSkKKworLyogUmVtb3ZlIG4gYml0cyBmcm9tIHRoZSBiaXQgYWNjdW11bGF0b3IgKi8KKyNkZWZpbmUgRFJPUEJJVFMobikgXAorICAgIGRvIHsgXAorICAgICAgICBob2xkID4+PSAobik7IFwKKyAgICAgICAgYml0cyAtPSAodW5zaWduZWQpKG4pOyBcCisgICAgfSB3aGlsZSAoMCkKKworLyogUmVtb3ZlIHplcm8gdG8gc2V2ZW4gYml0cyBhcyBuZWVkZWQgdG8gZ28gdG8gYSBieXRlIGJvdW5kYXJ5ICovCisjZGVmaW5lIEJZVEVCSVRTKCkgXAorICAgIGRvIHsgXAorICAgICAgICBob2xkID4+PSBiaXRzICYgNzsgXAorICAgICAgICBiaXRzIC09IGJpdHMgJiA3OyBcCisgICAgfSB3aGlsZSAoMCkKKworLyogQXNzdXJlIHRoYXQgc29tZSBvdXRwdXQgc3BhY2UgaXMgYXZhaWxhYmxlLCBieSB3cml0aW5nIG91dCB0aGUgd2luZG93CisgICBpZiBpdCdzIGZ1bGwuICBJZiB0aGUgd3JpdGUgZmFpbHMsIHJldHVybiBmcm9tIGluZmxhdGVCYWNrKCkgd2l0aCBhCisgICBaX0JVRl9FUlJPUi4gKi8KKyNkZWZpbmUgUk9PTSgpIFwKKyAgICBkbyB7IFwKKyAgICAgICAgaWYgKGxlZnQgPT0gMCkgeyBcCisgICAgICAgICAgICBwdXQgPSBzdGF0ZS0+d2luZG93OyBcCisgICAgICAgICAgICBsZWZ0ID0gc3RhdGUtPndzaXplOyBcCisgICAgICAgICAgICBzdGF0ZS0+d2hhdmUgPSBsZWZ0OyBcCisgICAgICAgICAgICBpZiAob3V0KG91dF9kZXNjLCBwdXQsIGxlZnQpKSB7IFwKKyAgICAgICAgICAgICAgICByZXQgPSBaX0JVRl9FUlJPUjsgXAorICAgICAgICAgICAgICAgIGdvdG8gaW5mX2xlYXZlOyBcCisgICAgICAgICAgICB9IFwKKyAgICAgICAgfSBcCisgICAgfSB3aGlsZSAoMCkKKworLyoKKyAgIHN0cm0gcHJvdmlkZXMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucyBhbmQgd2luZG93IGJ1ZmZlciBvbiBpbnB1dCwKKyAgIGFuZCBwcm92aWRlcyBpbmZvcm1hdGlvbiBvbiB0aGUgdW51c2VkIGlucHV0IG9uIHJldHVybi4gIEZvciBaX0RBVEFfRVJST1IKKyAgIHJldHVybnMsIHN0cm0gd2lsbCBhbHNvIHByb3ZpZGUgYW4gZXJyb3IgbWVzc2FnZS4KKworICAgaW4oKSBhbmQgb3V0KCkgYXJlIHRoZSBjYWxsLWJhY2sgaW5wdXQgYW5kIG91dHB1dCBmdW5jdGlvbnMuICBXaGVuCisgICBpbmZsYXRlQmFjaygpIG5lZWRzIG1vcmUgaW5wdXQsIGl0IGNhbGxzIGluKCkuICBXaGVuIGluZmxhdGVCYWNrKCkgaGFzCisgICBmaWxsZWQgdGhlIHdpbmRvdyB3aXRoIG91dHB1dCwgb3Igd2hlbiBpdCBjb21wbGV0ZXMgd2l0aCBkYXRhIGluIHRoZQorICAgd2luZG93LCBpdCBjYWxscyBvdXQoKSB0byB3cml0ZSBvdXQgdGhlIGRhdGEuICBUaGUgYXBwbGljYXRpb24gbXVzdCBub3QKKyAgIGNoYW5nZSB0aGUgcHJvdmlkZWQgaW5wdXQgdW50aWwgaW4oKSBpcyBjYWxsZWQgYWdhaW4gb3IgaW5mbGF0ZUJhY2soKQorICAgcmV0dXJucy4gIFRoZSBhcHBsaWNhdGlvbiBtdXN0IG5vdCBjaGFuZ2UgdGhlIHdpbmRvdy9vdXRwdXQgYnVmZmVyIHVudGlsCisgICBpbmZsYXRlQmFjaygpIHJldHVybnMuCisKKyAgIGluKCkgYW5kIG91dCgpIGFyZSBjYWxsZWQgd2l0aCBhIGRlc2NyaXB0b3IgcGFyYW1ldGVyIHByb3ZpZGVkIGluIHRoZQorICAgaW5mbGF0ZUJhY2soKSBjYWxsLiAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgc3RydWN0dXJlIHRoYXQgcHJvdmlkZXMgdGhlCisgICBpbmZvcm1hdGlvbiByZXF1aXJlZCB0byBkbyB0aGUgcmVhZCBvciB3cml0ZSwgYXMgd2VsbCBhcyBhY2N1bXVsYXRlZAorICAgaW5mb3JtYXRpb24gb24gdGhlIGlucHV0IGFuZCBvdXRwdXQgc3VjaCBhcyB0b3RhbHMgYW5kIGNoZWNrIHZhbHVlcy4KKworICAgaW4oKSBzaG91bGQgcmV0dXJuIHplcm8gb24gZmFpbHVyZS4gIG91dCgpIHNob3VsZCByZXR1cm4gbm9uLXplcm8gb24KKyAgIGZhaWx1cmUuICBJZiBlaXRoZXIgaW4oKSBvciBvdXQoKSBmYWlscywgdGhhbiBpbmZsYXRlQmFjaygpIHJldHVybnMgYQorICAgWl9CVUZfRVJST1IuICBzdHJtLT5uZXh0X2luIGNhbiBiZSBjaGVja2VkIGZvciBaX05VTEwgdG8gc2VlIHdoZXRoZXIgaXQKKyAgIHdhcyBpbigpIG9yIG91dCgpIHRoYXQgY2F1c2VkIGluIHRoZSBlcnJvci4gIE90aGVyd2lzZSwgIGluZmxhdGVCYWNrKCkKKyAgIHJldHVybnMgWl9TVFJFQU1fRU5EIG9uIHN1Y2Nlc3MsIFpfREFUQV9FUlJPUiBmb3IgYW4gZGVmbGF0ZSBmb3JtYXQKKyAgIGVycm9yLCBvciBaX01FTV9FUlJPUiBpZiBpdCBjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgc3RhdGUuCisgICBpbmZsYXRlQmFjaygpIGNhbiBhbHNvIHJldHVybiBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgaW5wdXQgcGFyYW1ldGVycworICAgYXJlIG5vdCBjb3JyZWN0LCBpLmUuIHN0cm0gaXMgWl9OVUxMIG9yIHRoZSBzdGF0ZSB3YXMgbm90IGluaXRpYWxpemVkLgorICovCitpbnQgWkVYUE9SVCBpbmZsYXRlQmFjayhzdHJtLCBpbiwgaW5fZGVzYywgb3V0LCBvdXRfZGVzYykKK3pfc3RyZWFtcCBzdHJtOworaW5fZnVuYyBpbjsKK3ZvaWQgRkFSICppbl9kZXNjOworb3V0X2Z1bmMgb3V0Owordm9pZCBGQVIgKm91dF9kZXNjOworeworICAgIHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqc3RhdGU7CisgICAgel9jb25zdCB1bnNpZ25lZCBjaGFyIEZBUiAqbmV4dDsgICAgLyogbmV4dCBpbnB1dCAqLworICAgIHVuc2lnbmVkIGNoYXIgRkFSICpwdXQ7ICAgICAvKiBuZXh0IG91dHB1dCAqLworICAgIHVuc2lnbmVkIGhhdmUsIGxlZnQ7ICAgICAgICAvKiBhdmFpbGFibGUgaW5wdXQgYW5kIG91dHB1dCAqLworICAgIHVuc2lnbmVkIGxvbmcgaG9sZDsgICAgICAgICAvKiBiaXQgYnVmZmVyICovCisgICAgdW5zaWduZWQgYml0czsgICAgICAgICAgICAgIC8qIGJpdHMgaW4gYml0IGJ1ZmZlciAqLworICAgIHVuc2lnbmVkIGNvcHk7ICAgICAgICAgICAgICAvKiBudW1iZXIgb2Ygc3RvcmVkIG9yIG1hdGNoIGJ5dGVzIHRvIGNvcHkgKi8KKyAgICB1bnNpZ25lZCBjaGFyIEZBUiAqZnJvbTsgICAgLyogd2hlcmUgdG8gY29weSBtYXRjaCBieXRlcyBmcm9tICovCisgICAgY29kZSBoZXJlOyAgICAgICAgICAgICAgICAgIC8qIGN1cnJlbnQgZGVjb2RpbmcgdGFibGUgZW50cnkgKi8KKyAgICBjb2RlIGxhc3Q7ICAgICAgICAgICAgICAgICAgLyogcGFyZW50IHRhYmxlIGVudHJ5ICovCisgICAgdW5zaWduZWQgbGVuOyAgICAgICAgICAgICAgIC8qIGxlbmd0aCB0byBjb3B5IGZvciByZXBlYXRzLCBiaXRzIHRvIGRyb3AgKi8KKyAgICBpbnQgcmV0OyAgICAgICAgICAgICAgICAgICAgLyogcmV0dXJuIGNvZGUgKi8KKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgb3JkZXJbMTldID0gLyogcGVybXV0YXRpb24gb2YgY29kZSBsZW5ndGhzICovCisgICAgICAgIHsxNiwgMTcsIDE4LCAwLCA4LCA3LCA5LCA2LCAxMCwgNSwgMTEsIDQsIDEyLCAzLCAxMywgMiwgMTQsIDEsIDE1fTsKKworICAgIC8qIENoZWNrIHRoYXQgdGhlIHN0cm0gZXhpc3RzIGFuZCB0aGF0IHRoZSBzdGF0ZSB3YXMgaW5pdGlhbGl6ZWQgKi8KKyAgICBpZiAoc3RybSA9PSBaX05VTEwgfHwgc3RybS0+c3RhdGUgPT0gWl9OVUxMKQorICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgICAgc3RhdGUgPSAoc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICopc3RybS0+c3RhdGU7CisKKyAgICAvKiBSZXNldCB0aGUgc3RhdGUgKi8KKyAgICBzdHJtLT5tc2cgPSBaX05VTEw7CisgICAgc3RhdGUtPm1vZGUgPSBUWVBFOworICAgIHN0YXRlLT5sYXN0ID0gMDsKKyAgICBzdGF0ZS0+d2hhdmUgPSAwOworICAgIG5leHQgPSBzdHJtLT5uZXh0X2luOworICAgIGhhdmUgPSBuZXh0ICE9IFpfTlVMTCA/IHN0cm0tPmF2YWlsX2luIDogMDsKKyAgICBob2xkID0gMDsKKyAgICBiaXRzID0gMDsKKyAgICBwdXQgPSBzdGF0ZS0+d2luZG93OworICAgIGxlZnQgPSBzdGF0ZS0+d3NpemU7CisKKyAgICAvKiBJbmZsYXRlIHVudGlsIGVuZCBvZiBibG9jayBtYXJrZWQgYXMgbGFzdCAqLworICAgIGZvciAoOzspCisgICAgICAgIHN3aXRjaCAoc3RhdGUtPm1vZGUpIHsKKyAgICAgICAgY2FzZSBUWVBFOgorICAgICAgICAgICAgLyogZGV0ZXJtaW5lIGFuZCBkaXNwYXRjaCBibG9jayB0eXBlICovCisgICAgICAgICAgICBpZiAoc3RhdGUtPmxhc3QpIHsKKyAgICAgICAgICAgICAgICBCWVRFQklUUygpOworICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gRE9ORTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIE5FRURCSVRTKDMpOworICAgICAgICAgICAgc3RhdGUtPmxhc3QgPSBCSVRTKDEpOworICAgICAgICAgICAgRFJPUEJJVFMoMSk7CisgICAgICAgICAgICBzd2l0Y2ggKEJJVFMoMikpIHsKKyAgICAgICAgICAgIGNhc2UgMDogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0b3JlZCBibG9jayAqLworICAgICAgICAgICAgICAgIFRyYWNldigoc3RkZXJyLCAiaW5mbGF0ZTogICAgIHN0b3JlZCBibG9jayVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmxhc3QgPyAiIChsYXN0KSIgOiAiIikpOworICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gU1RPUkVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZml4ZWQgYmxvY2sgKi8KKyAgICAgICAgICAgICAgICBmaXhlZHRhYmxlcyhzdGF0ZSk7CisgICAgICAgICAgICAgICAgVHJhY2V2KChzdGRlcnIsICJpbmZsYXRlOiAgICAgZml4ZWQgY29kZXMgYmxvY2slc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5sYXN0ID8gIiAobGFzdCkiIDogIiIpKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IExFTjsgICAgICAgICAgICAgIC8qIGRlY29kZSBjb2RlcyAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZHluYW1pYyBibG9jayAqLworICAgICAgICAgICAgICAgIFRyYWNldigoc3RkZXJyLCAiaW5mbGF0ZTogICAgIGR5bmFtaWMgY29kZXMgYmxvY2slc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5sYXN0ID8gIiAobGFzdCkiIDogIiIpKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IFRBQkxFOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgIHN0cm0tPm1zZyA9IChjaGFyICopImludmFsaWQgYmxvY2sgdHlwZSI7CisgICAgICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBCQUQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBEUk9QQklUUygyKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1RPUkVEOgorICAgICAgICAgICAgLyogZ2V0IGFuZCB2ZXJpZnkgc3RvcmVkIGJsb2NrIGxlbmd0aCAqLworICAgICAgICAgICAgQllURUJJVFMoKTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogZ28gdG8gYnl0ZSBib3VuZGFyeSAqLworICAgICAgICAgICAgTkVFREJJVFMoMzIpOworICAgICAgICAgICAgaWYgKChob2xkICYgMHhmZmZmKSAhPSAoKGhvbGQgPj4gMTYpIF4gMHhmZmZmKSkgeworICAgICAgICAgICAgICAgIHN0cm0tPm1zZyA9IChjaGFyICopImludmFsaWQgc3RvcmVkIGJsb2NrIGxlbmd0aHMiOworICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gQkFEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RhdGUtPmxlbmd0aCA9ICh1bnNpZ25lZClob2xkICYgMHhmZmZmOworICAgICAgICAgICAgVHJhY2V2KChzdGRlcnIsICJpbmZsYXRlOiAgICAgICBzdG9yZWQgbGVuZ3RoICV1XG4iLAorICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+bGVuZ3RoKSk7CisgICAgICAgICAgICBJTklUQklUUygpOworCisgICAgICAgICAgICAvKiBjb3B5IHN0b3JlZCBibG9jayBmcm9tIGlucHV0IHRvIG91dHB1dCAqLworICAgICAgICAgICAgd2hpbGUgKHN0YXRlLT5sZW5ndGggIT0gMCkgeworICAgICAgICAgICAgICAgIGNvcHkgPSBzdGF0ZS0+bGVuZ3RoOworICAgICAgICAgICAgICAgIFBVTEwoKTsKKyAgICAgICAgICAgICAgICBST09NKCk7CisgICAgICAgICAgICAgICAgaWYgKGNvcHkgPiBoYXZlKSBjb3B5ID0gaGF2ZTsKKyAgICAgICAgICAgICAgICBpZiAoY29weSA+IGxlZnQpIGNvcHkgPSBsZWZ0OworICAgICAgICAgICAgICAgIHptZW1jcHkocHV0LCBuZXh0LCBjb3B5KTsKKyAgICAgICAgICAgICAgICBoYXZlIC09IGNvcHk7CisgICAgICAgICAgICAgICAgbmV4dCArPSBjb3B5OworICAgICAgICAgICAgICAgIGxlZnQgLT0gY29weTsKKyAgICAgICAgICAgICAgICBwdXQgKz0gY29weTsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+bGVuZ3RoIC09IGNvcHk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBUcmFjZXYoKHN0ZGVyciwgImluZmxhdGU6ICAgICAgIHN0b3JlZCBlbmRcbiIpKTsKKyAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gVFlQRTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVEFCTEU6CisgICAgICAgICAgICAvKiBnZXQgZHluYW1pYyB0YWJsZSBlbnRyaWVzIGRlc2NyaXB0b3IgKi8KKyAgICAgICAgICAgIE5FRURCSVRTKDE0KTsKKyAgICAgICAgICAgIHN0YXRlLT5ubGVuID0gQklUUyg1KSArIDI1NzsKKyAgICAgICAgICAgIERST1BCSVRTKDUpOworICAgICAgICAgICAgc3RhdGUtPm5kaXN0ID0gQklUUyg1KSArIDE7CisgICAgICAgICAgICBEUk9QQklUUyg1KTsKKyAgICAgICAgICAgIHN0YXRlLT5uY29kZSA9IEJJVFMoNCkgKyA0OworICAgICAgICAgICAgRFJPUEJJVFMoNCk7CisjaWZuZGVmIFBLWklQX0JVR19XT1JLQVJPVU5ECisgICAgICAgICAgICBpZiAoc3RhdGUtPm5sZW4gPiAyODYgfHwgc3RhdGUtPm5kaXN0ID4gMzApIHsKKyAgICAgICAgICAgICAgICBzdHJtLT5tc2cgPSAoY2hhciAqKSJ0b28gbWFueSBsZW5ndGggb3IgZGlzdGFuY2Ugc3ltYm9scyI7CisgICAgICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBCQUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgIFRyYWNldigoc3RkZXJyLCAiaW5mbGF0ZTogICAgICAgdGFibGUgc2l6ZXMgb2tcbiIpKTsKKworICAgICAgICAgICAgLyogZ2V0IGNvZGUgbGVuZ3RoIGNvZGUgbGVuZ3RocyAobm90IGEgdHlwbykgKi8KKyAgICAgICAgICAgIHN0YXRlLT5oYXZlID0gMDsKKyAgICAgICAgICAgIHdoaWxlIChzdGF0ZS0+aGF2ZSA8IHN0YXRlLT5uY29kZSkgeworICAgICAgICAgICAgICAgIE5FRURCSVRTKDMpOworICAgICAgICAgICAgICAgIHN0YXRlLT5sZW5zW29yZGVyW3N0YXRlLT5oYXZlKytdXSA9ICh1bnNpZ25lZCBzaG9ydClCSVRTKDMpOworICAgICAgICAgICAgICAgIERST1BCSVRTKDMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgd2hpbGUgKHN0YXRlLT5oYXZlIDwgMTkpCisgICAgICAgICAgICAgICAgc3RhdGUtPmxlbnNbb3JkZXJbc3RhdGUtPmhhdmUrK11dID0gMDsKKyAgICAgICAgICAgIHN0YXRlLT5uZXh0ID0gc3RhdGUtPmNvZGVzOworICAgICAgICAgICAgc3RhdGUtPmxlbmNvZGUgPSAoY29kZSBjb25zdCBGQVIgKikoc3RhdGUtPm5leHQpOworICAgICAgICAgICAgc3RhdGUtPmxlbmJpdHMgPSA3OworICAgICAgICAgICAgcmV0ID0gaW5mbGF0ZV90YWJsZShDT0RFUywgc3RhdGUtPmxlbnMsIDE5LCAmKHN0YXRlLT5uZXh0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihzdGF0ZS0+bGVuYml0cyksIHN0YXRlLT53b3JrKTsKKyAgICAgICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAgICAgICAgICBzdHJtLT5tc2cgPSAoY2hhciAqKSJpbnZhbGlkIGNvZGUgbGVuZ3RocyBzZXQiOworICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gQkFEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgVHJhY2V2KChzdGRlcnIsICJpbmZsYXRlOiAgICAgICBjb2RlIGxlbmd0aHMgb2tcbiIpKTsKKworICAgICAgICAgICAgLyogZ2V0IGxlbmd0aCBhbmQgZGlzdGFuY2UgY29kZSBjb2RlIGxlbmd0aHMgKi8KKyAgICAgICAgICAgIHN0YXRlLT5oYXZlID0gMDsKKyAgICAgICAgICAgIHdoaWxlIChzdGF0ZS0+aGF2ZSA8IHN0YXRlLT5ubGVuICsgc3RhdGUtPm5kaXN0KSB7CisgICAgICAgICAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgICAgICAgICBoZXJlID0gc3RhdGUtPmxlbmNvZGVbQklUUyhzdGF0ZS0+bGVuYml0cyldOworICAgICAgICAgICAgICAgICAgICBpZiAoKHVuc2lnbmVkKShoZXJlLmJpdHMpIDw9IGJpdHMpIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBQVUxMQllURSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoaGVyZS52YWwgPCAxNikgeworICAgICAgICAgICAgICAgICAgICBEUk9QQklUUyhoZXJlLmJpdHMpOworICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+bGVuc1tzdGF0ZS0+aGF2ZSsrXSA9IGhlcmUudmFsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGhlcmUudmFsID09IDE2KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBORUVEQklUUyhoZXJlLmJpdHMgKyAyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIERST1BCSVRTKGhlcmUuYml0cyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUtPmhhdmUgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm0tPm1zZyA9IChjaGFyICopImludmFsaWQgYml0IGxlbmd0aCByZXBlYXQiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gQkFEOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgbGVuID0gKHVuc2lnbmVkKShzdGF0ZS0+bGVuc1tzdGF0ZS0+aGF2ZSAtIDFdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvcHkgPSAzICsgQklUUygyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIERST1BCSVRTKDIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGhlcmUudmFsID09IDE3KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBORUVEQklUUyhoZXJlLmJpdHMgKyAzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIERST1BCSVRTKGhlcmUuYml0cyk7CisgICAgICAgICAgICAgICAgICAgICAgICBsZW4gPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgY29weSA9IDMgKyBCSVRTKDMpOworICAgICAgICAgICAgICAgICAgICAgICAgRFJPUEJJVFMoMyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBORUVEQklUUyhoZXJlLmJpdHMgKyA3KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIERST1BCSVRTKGhlcmUuYml0cyk7CisgICAgICAgICAgICAgICAgICAgICAgICBsZW4gPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgY29weSA9IDExICsgQklUUyg3KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIERST1BCSVRTKDcpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS0+aGF2ZSArIGNvcHkgPiBzdGF0ZS0+bmxlbiArIHN0YXRlLT5uZGlzdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RybS0+bXNnID0gKGNoYXIgKikiaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdCI7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IEJBRDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChjb3B5LS0pCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+bGVuc1tzdGF0ZS0+aGF2ZSsrXSA9ICh1bnNpZ25lZCBzaG9ydClsZW47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBoYW5kbGUgZXJyb3IgYnJlYWtzIGluIHdoaWxlICovCisgICAgICAgICAgICBpZiAoc3RhdGUtPm1vZGUgPT0gQkFEKSBicmVhazsKKworICAgICAgICAgICAgLyogY2hlY2sgZm9yIGVuZC1vZi1ibG9jayBjb2RlIChiZXR0ZXIgaGF2ZSBvbmUpICovCisgICAgICAgICAgICBpZiAoc3RhdGUtPmxlbnNbMjU2XSA9PSAwKSB7CisgICAgICAgICAgICAgICAgc3RybS0+bXNnID0gKGNoYXIgKikiaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrIjsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IEJBRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogYnVpbGQgY29kZSB0YWJsZXMgLS0gbm90ZTogZG8gbm90IGNoYW5nZSB0aGUgbGVuYml0cyBvciBkaXN0Yml0cworICAgICAgICAgICAgICAgdmFsdWVzIGhlcmUgKDkgYW5kIDYpIHdpdGhvdXQgcmVhZGluZyB0aGUgY29tbWVudHMgaW4gaW5mdHJlZXMuaAorICAgICAgICAgICAgICAgY29uY2VybmluZyB0aGUgRU5PVUdIIGNvbnN0YW50cywgd2hpY2ggZGVwZW5kIG9uIHRob3NlIHZhbHVlcyAqLworICAgICAgICAgICAgc3RhdGUtPm5leHQgPSBzdGF0ZS0+Y29kZXM7CisgICAgICAgICAgICBzdGF0ZS0+bGVuY29kZSA9IChjb2RlIGNvbnN0IEZBUiAqKShzdGF0ZS0+bmV4dCk7CisgICAgICAgICAgICBzdGF0ZS0+bGVuYml0cyA9IDk7CisgICAgICAgICAgICByZXQgPSBpbmZsYXRlX3RhYmxlKExFTlMsIHN0YXRlLT5sZW5zLCBzdGF0ZS0+bmxlbiwgJihzdGF0ZS0+bmV4dCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYoc3RhdGUtPmxlbmJpdHMpLCBzdGF0ZS0+d29yayk7CisgICAgICAgICAgICBpZiAocmV0KSB7CisgICAgICAgICAgICAgICAgc3RybS0+bXNnID0gKGNoYXIgKikiaW52YWxpZCBsaXRlcmFsL2xlbmd0aHMgc2V0IjsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IEJBRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0YXRlLT5kaXN0Y29kZSA9IChjb2RlIGNvbnN0IEZBUiAqKShzdGF0ZS0+bmV4dCk7CisgICAgICAgICAgICBzdGF0ZS0+ZGlzdGJpdHMgPSA2OworICAgICAgICAgICAgcmV0ID0gaW5mbGF0ZV90YWJsZShESVNUUywgc3RhdGUtPmxlbnMgKyBzdGF0ZS0+bmxlbiwgc3RhdGUtPm5kaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYoc3RhdGUtPm5leHQpLCAmKHN0YXRlLT5kaXN0Yml0cyksIHN0YXRlLT53b3JrKTsKKyAgICAgICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAgICAgICAgICBzdHJtLT5tc2cgPSAoY2hhciAqKSJpbnZhbGlkIGRpc3RhbmNlcyBzZXQiOworICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gQkFEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgVHJhY2V2KChzdGRlcnIsICJpbmZsYXRlOiAgICAgICBjb2RlcyBva1xuIikpOworICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBMRU47CisgICAgICAgICAgICAgICAgLyogZmFsbHRocm91Z2ggKi8KKworICAgICAgICBjYXNlIExFTjoKKyAgICAgICAgICAgIC8qIHVzZSBpbmZsYXRlX2Zhc3QoKSBpZiB3ZSBoYXZlIGVub3VnaCBpbnB1dCBhbmQgb3V0cHV0ICovCisgICAgICAgICAgICBpZiAoaGF2ZSA+PSA2ICYmIGxlZnQgPj0gMjU4KSB7CisgICAgICAgICAgICAgICAgUkVTVE9SRSgpOworICAgICAgICAgICAgICAgIGlmIChzdGF0ZS0+d2hhdmUgPCBzdGF0ZS0+d3NpemUpCisgICAgICAgICAgICAgICAgICAgIHN0YXRlLT53aGF2ZSA9IHN0YXRlLT53c2l6ZSAtIGxlZnQ7CisgICAgICAgICAgICAgICAgaW5mbGF0ZV9mYXN0KHN0cm0sIHN0YXRlLT53c2l6ZSk7CisgICAgICAgICAgICAgICAgTE9BRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBnZXQgYSBsaXRlcmFsLCBsZW5ndGgsIG9yIGVuZC1vZi1ibG9jayBjb2RlICovCisgICAgICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgICAgaGVyZSA9IHN0YXRlLT5sZW5jb2RlW0JJVFMoc3RhdGUtPmxlbmJpdHMpXTsKKyAgICAgICAgICAgICAgICBpZiAoKHVuc2lnbmVkKShoZXJlLmJpdHMpIDw9IGJpdHMpIGJyZWFrOworICAgICAgICAgICAgICAgIFBVTExCWVRFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaGVyZS5vcCAmJiAoaGVyZS5vcCAmIDB4ZjApID09IDApIHsKKyAgICAgICAgICAgICAgICBsYXN0ID0gaGVyZTsKKyAgICAgICAgICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgICAgICAgIGhlcmUgPSBzdGF0ZS0+bGVuY29kZVtsYXN0LnZhbCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJJVFMobGFzdC5iaXRzICsgbGFzdC5vcCkgPj4gbGFzdC5iaXRzKV07CisgICAgICAgICAgICAgICAgICAgIGlmICgodW5zaWduZWQpKGxhc3QuYml0cyArIGhlcmUuYml0cykgPD0gYml0cykgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIFBVTExCWVRFKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIERST1BCSVRTKGxhc3QuYml0cyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBEUk9QQklUUyhoZXJlLmJpdHMpOworICAgICAgICAgICAgc3RhdGUtPmxlbmd0aCA9ICh1bnNpZ25lZCloZXJlLnZhbDsKKworICAgICAgICAgICAgLyogcHJvY2VzcyBsaXRlcmFsICovCisgICAgICAgICAgICBpZiAoaGVyZS5vcCA9PSAwKSB7CisgICAgICAgICAgICAgICAgVHJhY2V2digoc3RkZXJyLCBoZXJlLnZhbCA+PSAweDIwICYmIGhlcmUudmFsIDwgMHg3ZiA/CisgICAgICAgICAgICAgICAgICAgICAgICAiaW5mbGF0ZTogICAgICAgICBsaXRlcmFsICclYydcbiIgOgorICAgICAgICAgICAgICAgICAgICAgICAgImluZmxhdGU6ICAgICAgICAgbGl0ZXJhbCAweCUwMnhcbiIsIGhlcmUudmFsKSk7CisgICAgICAgICAgICAgICAgUk9PTSgpOworICAgICAgICAgICAgICAgICpwdXQrKyA9ICh1bnNpZ25lZCBjaGFyKShzdGF0ZS0+bGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBsZWZ0LS07CisgICAgICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBMRU47CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIHByb2Nlc3MgZW5kIG9mIGJsb2NrICovCisgICAgICAgICAgICBpZiAoaGVyZS5vcCAmIDMyKSB7CisgICAgICAgICAgICAgICAgVHJhY2V2digoc3RkZXJyLCAiaW5mbGF0ZTogICAgICAgICBlbmQgb2YgYmxvY2tcbiIpKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IFRZUEU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIGludmFsaWQgY29kZSAqLworICAgICAgICAgICAgaWYgKGhlcmUub3AgJiA2NCkgeworICAgICAgICAgICAgICAgIHN0cm0tPm1zZyA9IChjaGFyICopImludmFsaWQgbGl0ZXJhbC9sZW5ndGggY29kZSI7CisgICAgICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBCQUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIGxlbmd0aCBjb2RlIC0tIGdldCBleHRyYSBiaXRzLCBpZiBhbnkgKi8KKyAgICAgICAgICAgIHN0YXRlLT5leHRyYSA9ICh1bnNpZ25lZCkoaGVyZS5vcCkgJiAxNTsKKyAgICAgICAgICAgIGlmIChzdGF0ZS0+ZXh0cmEgIT0gMCkgeworICAgICAgICAgICAgICAgIE5FRURCSVRTKHN0YXRlLT5leHRyYSk7CisgICAgICAgICAgICAgICAgc3RhdGUtPmxlbmd0aCArPSBCSVRTKHN0YXRlLT5leHRyYSk7CisgICAgICAgICAgICAgICAgRFJPUEJJVFMoc3RhdGUtPmV4dHJhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFRyYWNldnYoKHN0ZGVyciwgImluZmxhdGU6ICAgICAgICAgbGVuZ3RoICV1XG4iLCBzdGF0ZS0+bGVuZ3RoKSk7CisKKyAgICAgICAgICAgIC8qIGdldCBkaXN0YW5jZSBjb2RlICovCisgICAgICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgICAgaGVyZSA9IHN0YXRlLT5kaXN0Y29kZVtCSVRTKHN0YXRlLT5kaXN0Yml0cyldOworICAgICAgICAgICAgICAgIGlmICgodW5zaWduZWQpKGhlcmUuYml0cykgPD0gYml0cykgYnJlYWs7CisgICAgICAgICAgICAgICAgUFVMTEJZVEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgoaGVyZS5vcCAmIDB4ZjApID09IDApIHsKKyAgICAgICAgICAgICAgICBsYXN0ID0gaGVyZTsKKyAgICAgICAgICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgICAgICAgIGhlcmUgPSBzdGF0ZS0+ZGlzdGNvZGVbbGFzdC52YWwgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCSVRTKGxhc3QuYml0cyArIGxhc3Qub3ApID4+IGxhc3QuYml0cyldOworICAgICAgICAgICAgICAgICAgICBpZiAoKHVuc2lnbmVkKShsYXN0LmJpdHMgKyBoZXJlLmJpdHMpIDw9IGJpdHMpIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBQVUxMQllURSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBEUk9QQklUUyhsYXN0LmJpdHMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgRFJPUEJJVFMoaGVyZS5iaXRzKTsKKyAgICAgICAgICAgIGlmIChoZXJlLm9wICYgNjQpIHsKKyAgICAgICAgICAgICAgICBzdHJtLT5tc2cgPSAoY2hhciAqKSJpbnZhbGlkIGRpc3RhbmNlIGNvZGUiOworICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gQkFEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RhdGUtPm9mZnNldCA9ICh1bnNpZ25lZCloZXJlLnZhbDsKKworICAgICAgICAgICAgLyogZ2V0IGRpc3RhbmNlIGV4dHJhIGJpdHMsIGlmIGFueSAqLworICAgICAgICAgICAgc3RhdGUtPmV4dHJhID0gKHVuc2lnbmVkKShoZXJlLm9wKSAmIDE1OworICAgICAgICAgICAgaWYgKHN0YXRlLT5leHRyYSAhPSAwKSB7CisgICAgICAgICAgICAgICAgTkVFREJJVFMoc3RhdGUtPmV4dHJhKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+b2Zmc2V0ICs9IEJJVFMoc3RhdGUtPmV4dHJhKTsKKyAgICAgICAgICAgICAgICBEUk9QQklUUyhzdGF0ZS0+ZXh0cmEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHN0YXRlLT5vZmZzZXQgPiBzdGF0ZS0+d3NpemUgLSAoc3RhdGUtPndoYXZlIDwgc3RhdGUtPndzaXplID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgOiAwKSkgeworICAgICAgICAgICAgICAgIHN0cm0tPm1zZyA9IChjaGFyICopImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIjsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IEJBRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFRyYWNldnYoKHN0ZGVyciwgImluZmxhdGU6ICAgICAgICAgZGlzdGFuY2UgJXVcbiIsIHN0YXRlLT5vZmZzZXQpKTsKKworICAgICAgICAgICAgLyogY29weSBtYXRjaCBmcm9tIHdpbmRvdyB0byBvdXRwdXQgKi8KKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBST09NKCk7CisgICAgICAgICAgICAgICAgY29weSA9IHN0YXRlLT53c2l6ZSAtIHN0YXRlLT5vZmZzZXQ7CisgICAgICAgICAgICAgICAgaWYgKGNvcHkgPCBsZWZ0KSB7CisgICAgICAgICAgICAgICAgICAgIGZyb20gPSBwdXQgKyBjb3B5OworICAgICAgICAgICAgICAgICAgICBjb3B5ID0gbGVmdCAtIGNvcHk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBmcm9tID0gcHV0IC0gc3RhdGUtPm9mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgY29weSA9IGxlZnQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChjb3B5ID4gc3RhdGUtPmxlbmd0aCkgY29weSA9IHN0YXRlLT5sZW5ndGg7CisgICAgICAgICAgICAgICAgc3RhdGUtPmxlbmd0aCAtPSBjb3B5OworICAgICAgICAgICAgICAgIGxlZnQgLT0gY29weTsKKyAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgICpwdXQrKyA9ICpmcm9tKys7CisgICAgICAgICAgICAgICAgfSB3aGlsZSAoLS1jb3B5KTsKKyAgICAgICAgICAgIH0gd2hpbGUgKHN0YXRlLT5sZW5ndGggIT0gMCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIERPTkU6CisgICAgICAgICAgICAvKiBpbmZsYXRlIHN0cmVhbSB0ZXJtaW5hdGVkIHByb3Blcmx5IC0tIHdyaXRlIGxlZnRvdmVyIG91dHB1dCAqLworICAgICAgICAgICAgcmV0ID0gWl9TVFJFQU1fRU5EOworICAgICAgICAgICAgaWYgKGxlZnQgPCBzdGF0ZS0+d3NpemUpIHsKKyAgICAgICAgICAgICAgICBpZiAob3V0KG91dF9kZXNjLCBzdGF0ZS0+d2luZG93LCBzdGF0ZS0+d3NpemUgLSBsZWZ0KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gWl9CVUZfRVJST1I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBnb3RvIGluZl9sZWF2ZTsKKworICAgICAgICBjYXNlIEJBRDoKKyAgICAgICAgICAgIHJldCA9IFpfREFUQV9FUlJPUjsKKyAgICAgICAgICAgIGdvdG8gaW5mX2xlYXZlOworCisgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgIC8qIGNhbid0IGhhcHBlbiwgYnV0IG1ha2VzIGNvbXBpbGVycyBoYXBweSAqLworICAgICAgICAgICAgcmV0ID0gWl9TVFJFQU1fRVJST1I7CisgICAgICAgICAgICBnb3RvIGluZl9sZWF2ZTsKKyAgICAgICAgfQorCisgICAgLyogUmV0dXJuIHVudXNlZCBpbnB1dCAqLworICBpbmZfbGVhdmU6CisgICAgc3RybS0+bmV4dF9pbiA9IG5leHQ7CisgICAgc3RybS0+YXZhaWxfaW4gPSBoYXZlOworICAgIHJldHVybiByZXQ7Cit9CisKK2ludCBaRVhQT1JUIGluZmxhdGVCYWNrRW5kKHN0cm0pCit6X3N0cmVhbXAgc3RybTsKK3sKKyAgICBpZiAoc3RybSA9PSBaX05VTEwgfHwgc3RybS0+c3RhdGUgPT0gWl9OVUxMIHx8IHN0cm0tPnpmcmVlID09IChmcmVlX2Z1bmMpMCkKKyAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworICAgIFpGUkVFKHN0cm0sIHN0cm0tPnN0YXRlKTsKKyAgICBzdHJtLT5zdGF0ZSA9IFpfTlVMTDsKKyAgICBUcmFjZXYoKHN0ZGVyciwgImluZmxhdGU6IGVuZFxuIikpOworICAgIHJldHVybiBaX09LOworfQpkaWZmIC0tZ2l0IGEvc3JjL2luZmZhc3QuYyBiL3NyYy9pbmZmYXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZlYzdmMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmZmYXN0LmMKQEAgLTAsMCArMSwzMjMgQEAKKy8qIGluZmZhc3QuYyAtLSBmYXN0IGRlY29kaW5nCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxNyBNYXJrIEFkbGVyCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCisgKi8KKworI2luY2x1ZGUgInp1dGlsLmgiCisjaW5jbHVkZSAiaW5mdHJlZXMuaCIKKyNpbmNsdWRlICJpbmZsYXRlLmgiCisjaW5jbHVkZSAiaW5mZmFzdC5oIgorCisjaWZkZWYgQVNNSU5GCisjICBwcmFnbWEgbWVzc2FnZSgiQXNzZW1ibGVyIGNvZGUgbWF5IGhhdmUgYnVncyAtLSB1c2UgYXQgeW91ciBvd24gcmlzayIpCisjZWxzZQorCisvKgorICAgRGVjb2RlIGxpdGVyYWwsIGxlbmd0aCwgYW5kIGRpc3RhbmNlIGNvZGVzIGFuZCB3cml0ZSBvdXQgdGhlIHJlc3VsdGluZworICAgbGl0ZXJhbCBhbmQgbWF0Y2ggYnl0ZXMgdW50aWwgZWl0aGVyIG5vdCBlbm91Z2ggaW5wdXQgb3Igb3V0cHV0IGlzCisgICBhdmFpbGFibGUsIGFuIGVuZC1vZi1ibG9jayBpcyBlbmNvdW50ZXJlZCwgb3IgYSBkYXRhIGVycm9yIGlzIGVuY291bnRlcmVkLgorICAgV2hlbiBsYXJnZSBlbm91Z2ggaW5wdXQgYW5kIG91dHB1dCBidWZmZXJzIGFyZSBzdXBwbGllZCB0byBpbmZsYXRlKCksIGZvcgorICAgZXhhbXBsZSwgYSAxNksgaW5wdXQgYnVmZmVyIGFuZCBhIDY0SyBvdXRwdXQgYnVmZmVyLCBtb3JlIHRoYW4gOTUlIG9mIHRoZQorICAgaW5mbGF0ZSBleGVjdXRpb24gdGltZSBpcyBzcGVudCBpbiB0aGlzIHJvdXRpbmUuCisKKyAgIEVudHJ5IGFzc3VtcHRpb25zOgorCisgICAgICAgIHN0YXRlLT5tb2RlID09IExFTgorICAgICAgICBzdHJtLT5hdmFpbF9pbiA+PSA2CisgICAgICAgIHN0cm0tPmF2YWlsX291dCA+PSAyNTgKKyAgICAgICAgc3RhcnQgPj0gc3RybS0+YXZhaWxfb3V0CisgICAgICAgIHN0YXRlLT5iaXRzIDwgOAorCisgICBPbiByZXR1cm4sIHN0YXRlLT5tb2RlIGlzIG9uZSBvZjoKKworICAgICAgICBMRU4gLS0gcmFuIG91dCBvZiBlbm91Z2ggb3V0cHV0IHNwYWNlIG9yIGVub3VnaCBhdmFpbGFibGUgaW5wdXQKKyAgICAgICAgVFlQRSAtLSByZWFjaGVkIGVuZCBvZiBibG9jayBjb2RlLCBpbmZsYXRlKCkgdG8gaW50ZXJwcmV0IG5leHQgYmxvY2sKKyAgICAgICAgQkFEIC0tIGVycm9yIGluIGJsb2NrIGRhdGEKKworICAgTm90ZXM6CisKKyAgICAtIFRoZSBtYXhpbXVtIGlucHV0IGJpdHMgdXNlZCBieSBhIGxlbmd0aC9kaXN0YW5jZSBwYWlyIGlzIDE1IGJpdHMgZm9yIHRoZQorICAgICAgbGVuZ3RoIGNvZGUsIDUgYml0cyBmb3IgdGhlIGxlbmd0aCBleHRyYSwgMTUgYml0cyBmb3IgdGhlIGRpc3RhbmNlIGNvZGUsCisgICAgICBhbmQgMTMgYml0cyBmb3IgdGhlIGRpc3RhbmNlIGV4dHJhLiAgVGhpcyB0b3RhbHMgNDggYml0cywgb3Igc2l4IGJ5dGVzLgorICAgICAgVGhlcmVmb3JlIGlmIHN0cm0tPmF2YWlsX2luID49IDYsIHRoZW4gdGhlcmUgaXMgZW5vdWdoIGlucHV0IHRvIGF2b2lkCisgICAgICBjaGVja2luZyBmb3IgYXZhaWxhYmxlIGlucHV0IHdoaWxlIGRlY29kaW5nLgorCisgICAgLSBUaGUgbWF4aW11bSBieXRlcyB0aGF0IGEgc2luZ2xlIGxlbmd0aC9kaXN0YW5jZSBwYWlyIGNhbiBvdXRwdXQgaXMgMjU4CisgICAgICBieXRlcywgd2hpY2ggaXMgdGhlIG1heGltdW0gbGVuZ3RoIHRoYXQgY2FuIGJlIGNvZGVkLiAgaW5mbGF0ZV9mYXN0KCkKKyAgICAgIHJlcXVpcmVzIHN0cm0tPmF2YWlsX291dCA+PSAyNTggZm9yIGVhY2ggbG9vcCB0byBhdm9pZCBjaGVja2luZyBmb3IKKyAgICAgIG91dHB1dCBzcGFjZS4KKyAqLwordm9pZCBaTElCX0lOVEVSTkFMIGluZmxhdGVfZmFzdChzdHJtLCBzdGFydCkKK3pfc3RyZWFtcCBzdHJtOwordW5zaWduZWQgc3RhcnQ7ICAgICAgICAgLyogaW5mbGF0ZSgpJ3Mgc3RhcnRpbmcgdmFsdWUgZm9yIHN0cm0tPmF2YWlsX291dCAqLworeworICAgIHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqc3RhdGU7CisgICAgel9jb25zdCB1bnNpZ25lZCBjaGFyIEZBUiAqaW47ICAgICAgLyogbG9jYWwgc3RybS0+bmV4dF9pbiAqLworICAgIHpfY29uc3QgdW5zaWduZWQgY2hhciBGQVIgKmxhc3Q7ICAgIC8qIGhhdmUgZW5vdWdoIGlucHV0IHdoaWxlIGluIDwgbGFzdCAqLworICAgIHVuc2lnbmVkIGNoYXIgRkFSICpvdXQ7ICAgICAvKiBsb2NhbCBzdHJtLT5uZXh0X291dCAqLworICAgIHVuc2lnbmVkIGNoYXIgRkFSICpiZWc7ICAgICAvKiBpbmZsYXRlKCkncyBpbml0aWFsIHN0cm0tPm5leHRfb3V0ICovCisgICAgdW5zaWduZWQgY2hhciBGQVIgKmVuZDsgICAgIC8qIHdoaWxlIG91dCA8IGVuZCwgZW5vdWdoIHNwYWNlIGF2YWlsYWJsZSAqLworI2lmZGVmIElORkxBVEVfU1RSSUNUCisgICAgdW5zaWduZWQgZG1heDsgICAgICAgICAgICAgIC8qIG1heGltdW0gZGlzdGFuY2UgZnJvbSB6bGliIGhlYWRlciAqLworI2VuZGlmCisgICAgdW5zaWduZWQgd3NpemU7ICAgICAgICAgICAgIC8qIHdpbmRvdyBzaXplIG9yIHplcm8gaWYgbm90IHVzaW5nIHdpbmRvdyAqLworICAgIHVuc2lnbmVkIHdoYXZlOyAgICAgICAgICAgICAvKiB2YWxpZCBieXRlcyBpbiB0aGUgd2luZG93ICovCisgICAgdW5zaWduZWQgd25leHQ7ICAgICAgICAgICAgIC8qIHdpbmRvdyB3cml0ZSBpbmRleCAqLworICAgIHVuc2lnbmVkIGNoYXIgRkFSICp3aW5kb3c7ICAvKiBhbGxvY2F0ZWQgc2xpZGluZyB3aW5kb3csIGlmIHdzaXplICE9IDAgKi8KKyAgICB1bnNpZ25lZCBsb25nIGhvbGQ7ICAgICAgICAgLyogbG9jYWwgc3RybS0+aG9sZCAqLworICAgIHVuc2lnbmVkIGJpdHM7ICAgICAgICAgICAgICAvKiBsb2NhbCBzdHJtLT5iaXRzICovCisgICAgY29kZSBjb25zdCBGQVIgKmxjb2RlOyAgICAgIC8qIGxvY2FsIHN0cm0tPmxlbmNvZGUgKi8KKyAgICBjb2RlIGNvbnN0IEZBUiAqZGNvZGU7ICAgICAgLyogbG9jYWwgc3RybS0+ZGlzdGNvZGUgKi8KKyAgICB1bnNpZ25lZCBsbWFzazsgICAgICAgICAgICAgLyogbWFzayBmb3IgZmlyc3QgbGV2ZWwgb2YgbGVuZ3RoIGNvZGVzICovCisgICAgdW5zaWduZWQgZG1hc2s7ICAgICAgICAgICAgIC8qIG1hc2sgZm9yIGZpcnN0IGxldmVsIG9mIGRpc3RhbmNlIGNvZGVzICovCisgICAgY29kZSBjb25zdCAqaGVyZTsgICAgICAgICAgIC8qIHJldHJpZXZlZCB0YWJsZSBlbnRyeSAqLworICAgIHVuc2lnbmVkIG9wOyAgICAgICAgICAgICAgICAvKiBjb2RlIGJpdHMsIG9wZXJhdGlvbiwgZXh0cmEgYml0cywgb3IgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIHdpbmRvdyBwb3NpdGlvbiwgd2luZG93IGJ5dGVzIHRvIGNvcHkgKi8KKyAgICB1bnNpZ25lZCBsZW47ICAgICAgICAgICAgICAgLyogbWF0Y2ggbGVuZ3RoLCB1bnVzZWQgYnl0ZXMgKi8KKyAgICB1bnNpZ25lZCBkaXN0OyAgICAgICAgICAgICAgLyogbWF0Y2ggZGlzdGFuY2UgKi8KKyAgICB1bnNpZ25lZCBjaGFyIEZBUiAqZnJvbTsgICAgLyogd2hlcmUgdG8gY29weSBtYXRjaCBmcm9tICovCisKKyAgICAvKiBjb3B5IHN0YXRlIHRvIGxvY2FsIHZhcmlhYmxlcyAqLworICAgIHN0YXRlID0gKHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqKXN0cm0tPnN0YXRlOworICAgIGluID0gc3RybS0+bmV4dF9pbjsKKyAgICBsYXN0ID0gaW4gKyAoc3RybS0+YXZhaWxfaW4gLSA1KTsKKyAgICBvdXQgPSBzdHJtLT5uZXh0X291dDsKKyAgICBiZWcgPSBvdXQgLSAoc3RhcnQgLSBzdHJtLT5hdmFpbF9vdXQpOworICAgIGVuZCA9IG91dCArIChzdHJtLT5hdmFpbF9vdXQgLSAyNTcpOworI2lmZGVmIElORkxBVEVfU1RSSUNUCisgICAgZG1heCA9IHN0YXRlLT5kbWF4OworI2VuZGlmCisgICAgd3NpemUgPSBzdGF0ZS0+d3NpemU7CisgICAgd2hhdmUgPSBzdGF0ZS0+d2hhdmU7CisgICAgd25leHQgPSBzdGF0ZS0+d25leHQ7CisgICAgd2luZG93ID0gc3RhdGUtPndpbmRvdzsKKyAgICBob2xkID0gc3RhdGUtPmhvbGQ7CisgICAgYml0cyA9IHN0YXRlLT5iaXRzOworICAgIGxjb2RlID0gc3RhdGUtPmxlbmNvZGU7CisgICAgZGNvZGUgPSBzdGF0ZS0+ZGlzdGNvZGU7CisgICAgbG1hc2sgPSAoMVUgPDwgc3RhdGUtPmxlbmJpdHMpIC0gMTsKKyAgICBkbWFzayA9ICgxVSA8PCBzdGF0ZS0+ZGlzdGJpdHMpIC0gMTsKKworICAgIC8qIGRlY29kZSBsaXRlcmFscyBhbmQgbGVuZ3RoL2Rpc3RhbmNlcyB1bnRpbCBlbmQtb2YtYmxvY2sgb3Igbm90IGVub3VnaAorICAgICAgIGlucHV0IGRhdGEgb3Igb3V0cHV0IHNwYWNlICovCisgICAgZG8geworICAgICAgICBpZiAoYml0cyA8IDE1KSB7CisgICAgICAgICAgICBob2xkICs9ICh1bnNpZ25lZCBsb25nKSgqaW4rKykgPDwgYml0czsKKyAgICAgICAgICAgIGJpdHMgKz0gODsKKyAgICAgICAgICAgIGhvbGQgKz0gKHVuc2lnbmVkIGxvbmcpKCppbisrKSA8PCBiaXRzOworICAgICAgICAgICAgYml0cyArPSA4OworICAgICAgICB9CisgICAgICAgIGhlcmUgPSBsY29kZSArIChob2xkICYgbG1hc2spOworICAgICAgZG9sZW46CisgICAgICAgIG9wID0gKHVuc2lnbmVkKShoZXJlLT5iaXRzKTsKKyAgICAgICAgaG9sZCA+Pj0gb3A7CisgICAgICAgIGJpdHMgLT0gb3A7CisgICAgICAgIG9wID0gKHVuc2lnbmVkKShoZXJlLT5vcCk7CisgICAgICAgIGlmIChvcCA9PSAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsaXRlcmFsICovCisgICAgICAgICAgICBUcmFjZXZ2KChzdGRlcnIsIGhlcmUtPnZhbCA+PSAweDIwICYmIGhlcmUtPnZhbCA8IDB4N2YgPworICAgICAgICAgICAgICAgICAgICAiaW5mbGF0ZTogICAgICAgICBsaXRlcmFsICclYydcbiIgOgorICAgICAgICAgICAgICAgICAgICAiaW5mbGF0ZTogICAgICAgICBsaXRlcmFsIDB4JTAyeFxuIiwgaGVyZS0+dmFsKSk7CisgICAgICAgICAgICAqb3V0KysgPSAodW5zaWduZWQgY2hhcikoaGVyZS0+dmFsKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChvcCAmIDE2KSB7ICAgICAgICAgICAgICAgICAgICAgLyogbGVuZ3RoIGJhc2UgKi8KKyAgICAgICAgICAgIGxlbiA9ICh1bnNpZ25lZCkoaGVyZS0+dmFsKTsKKyAgICAgICAgICAgIG9wICY9IDE1OyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBleHRyYSBiaXRzICovCisgICAgICAgICAgICBpZiAob3ApIHsKKyAgICAgICAgICAgICAgICBpZiAoYml0cyA8IG9wKSB7CisgICAgICAgICAgICAgICAgICAgIGhvbGQgKz0gKHVuc2lnbmVkIGxvbmcpKCppbisrKSA8PCBiaXRzOworICAgICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxlbiArPSAodW5zaWduZWQpaG9sZCAmICgoMVUgPDwgb3ApIC0gMSk7CisgICAgICAgICAgICAgICAgaG9sZCA+Pj0gb3A7CisgICAgICAgICAgICAgICAgYml0cyAtPSBvcDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFRyYWNldnYoKHN0ZGVyciwgImluZmxhdGU6ICAgICAgICAgbGVuZ3RoICV1XG4iLCBsZW4pKTsKKyAgICAgICAgICAgIGlmIChiaXRzIDwgMTUpIHsKKyAgICAgICAgICAgICAgICBob2xkICs9ICh1bnNpZ25lZCBsb25nKSgqaW4rKykgPDwgYml0czsKKyAgICAgICAgICAgICAgICBiaXRzICs9IDg7CisgICAgICAgICAgICAgICAgaG9sZCArPSAodW5zaWduZWQgbG9uZykoKmluKyspIDw8IGJpdHM7CisgICAgICAgICAgICAgICAgYml0cyArPSA4OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaGVyZSA9IGRjb2RlICsgKGhvbGQgJiBkbWFzayk7CisgICAgICAgICAgZG9kaXN0OgorICAgICAgICAgICAgb3AgPSAodW5zaWduZWQpKGhlcmUtPmJpdHMpOworICAgICAgICAgICAgaG9sZCA+Pj0gb3A7CisgICAgICAgICAgICBiaXRzIC09IG9wOworICAgICAgICAgICAgb3AgPSAodW5zaWduZWQpKGhlcmUtPm9wKTsKKyAgICAgICAgICAgIGlmIChvcCAmIDE2KSB7ICAgICAgICAgICAgICAgICAgICAgIC8qIGRpc3RhbmNlIGJhc2UgKi8KKyAgICAgICAgICAgICAgICBkaXN0ID0gKHVuc2lnbmVkKShoZXJlLT52YWwpOworICAgICAgICAgICAgICAgIG9wICY9IDE1OyAgICAgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGV4dHJhIGJpdHMgKi8KKyAgICAgICAgICAgICAgICBpZiAoYml0cyA8IG9wKSB7CisgICAgICAgICAgICAgICAgICAgIGhvbGQgKz0gKHVuc2lnbmVkIGxvbmcpKCppbisrKSA8PCBiaXRzOworICAgICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CisgICAgICAgICAgICAgICAgICAgIGlmIChiaXRzIDwgb3ApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhvbGQgKz0gKHVuc2lnbmVkIGxvbmcpKCppbisrKSA8PCBiaXRzOworICAgICAgICAgICAgICAgICAgICAgICAgYml0cyArPSA4OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRpc3QgKz0gKHVuc2lnbmVkKWhvbGQgJiAoKDFVIDw8IG9wKSAtIDEpOworI2lmZGVmIElORkxBVEVfU1RSSUNUCisgICAgICAgICAgICAgICAgaWYgKGRpc3QgPiBkbWF4KSB7CisgICAgICAgICAgICAgICAgICAgIHN0cm0tPm1zZyA9IChjaGFyICopImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIjsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBCQUQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgICAgIGhvbGQgPj49IG9wOworICAgICAgICAgICAgICAgIGJpdHMgLT0gb3A7CisgICAgICAgICAgICAgICAgVHJhY2V2digoc3RkZXJyLCAiaW5mbGF0ZTogICAgICAgICBkaXN0YW5jZSAldVxuIiwgZGlzdCkpOworICAgICAgICAgICAgICAgIG9wID0gKHVuc2lnbmVkKShvdXQgLSBiZWcpOyAgICAgLyogbWF4IGRpc3RhbmNlIGluIG91dHB1dCAqLworICAgICAgICAgICAgICAgIGlmIChkaXN0ID4gb3ApIHsgICAgICAgICAgICAgICAgLyogc2VlIGlmIGNvcHkgZnJvbSB3aW5kb3cgKi8KKyAgICAgICAgICAgICAgICAgICAgb3AgPSBkaXN0IC0gb3A7ICAgICAgICAgICAgIC8qIGRpc3RhbmNlIGJhY2sgaW4gd2luZG93ICovCisgICAgICAgICAgICAgICAgICAgIGlmIChvcCA+IHdoYXZlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUtPnNhbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJtLT5tc2cgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBCQUQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisjaWZkZWYgSU5GTEFURV9BTExPV19JTlZBTElEX0RJU1RBTkNFX1RPT0ZBUl9BUlJSCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVuIDw9IG9wIC0gd2hhdmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpvdXQrKyA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoLS1sZW4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgbGVuIC09IG9wIC0gd2hhdmU7CisgICAgICAgICAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm91dCsrID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKC0tb3AgPiB3aGF2ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3AgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gPSBvdXQgLSBkaXN0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm91dCsrID0gKmZyb20rKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgtLWxlbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBmcm9tID0gd2luZG93OworICAgICAgICAgICAgICAgICAgICBpZiAod25leHQgPT0gMCkgeyAgICAgICAgICAgLyogdmVyeSBjb21tb24gY2FzZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSArPSB3c2l6ZSAtIG9wOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wIDwgbGVuKSB7ICAgICAgICAgLyogc29tZSBmcm9tIHdpbmRvdyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiAtPSBvcDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpvdXQrKyA9ICpmcm9tKys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoLS1vcCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSA9IG91dCAtIGRpc3Q7ICAvKiByZXN0IGZyb20gb3V0cHV0ICovCisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAod25leHQgPCBvcCkgeyAgICAgIC8qIHdyYXAgYXJvdW5kIHdpbmRvdyAqLworICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSArPSB3c2l6ZSArIHduZXh0IC0gb3A7CisgICAgICAgICAgICAgICAgICAgICAgICBvcCAtPSB3bmV4dDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcCA8IGxlbikgeyAgICAgICAgIC8qIHNvbWUgZnJvbSBlbmQgb2Ygd2luZG93ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuIC09IG9wOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm91dCsrID0gKmZyb20rKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgtLW9wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tID0gd2luZG93OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3bmV4dCA8IGxlbikgeyAgLyogc29tZSBmcm9tIHN0YXJ0IG9mIHdpbmRvdyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcCA9IHduZXh0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4gLT0gb3A7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpvdXQrKyA9ICpmcm9tKys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKC0tb3ApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tID0gb3V0IC0gZGlzdDsgICAgICAvKiByZXN0IGZyb20gb3V0cHV0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAvKiBjb250aWd1b3VzIGluIHdpbmRvdyAqLworICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSArPSB3bmV4dCAtIG9wOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wIDwgbGVuKSB7ICAgICAgICAgLyogc29tZSBmcm9tIHdpbmRvdyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiAtPSBvcDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpvdXQrKyA9ICpmcm9tKys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoLS1vcCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSA9IG91dCAtIGRpc3Q7ICAvKiByZXN0IGZyb20gb3V0cHV0ICovCisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGxlbiA+IDIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICpvdXQrKyA9ICpmcm9tKys7CisgICAgICAgICAgICAgICAgICAgICAgICAqb3V0KysgPSAqZnJvbSsrOworICAgICAgICAgICAgICAgICAgICAgICAgKm91dCsrID0gKmZyb20rKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlbiAtPSAzOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChsZW4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICpvdXQrKyA9ICpmcm9tKys7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVuID4gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqb3V0KysgPSAqZnJvbSsrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBmcm9tID0gb3V0IC0gZGlzdDsgICAgICAgICAgLyogY29weSBkaXJlY3QgZnJvbSBvdXRwdXQgKi8KKyAgICAgICAgICAgICAgICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1pbmltdW0gbGVuZ3RoIGlzIHRocmVlICovCisgICAgICAgICAgICAgICAgICAgICAgICAqb3V0KysgPSAqZnJvbSsrOworICAgICAgICAgICAgICAgICAgICAgICAgKm91dCsrID0gKmZyb20rKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICpvdXQrKyA9ICpmcm9tKys7CisgICAgICAgICAgICAgICAgICAgICAgICBsZW4gLT0gMzsKKyAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAobGVuID4gMik7CisgICAgICAgICAgICAgICAgICAgIGlmIChsZW4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICpvdXQrKyA9ICpmcm9tKys7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVuID4gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqb3V0KysgPSAqZnJvbSsrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoKG9wICYgNjQpID09IDApIHsgICAgICAgICAgLyogMm5kIGxldmVsIGRpc3RhbmNlIGNvZGUgKi8KKyAgICAgICAgICAgICAgICBoZXJlID0gZGNvZGUgKyBoZXJlLT52YWwgKyAoaG9sZCAmICgoMVUgPDwgb3ApIC0gMSkpOworICAgICAgICAgICAgICAgIGdvdG8gZG9kaXN0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgc3RybS0+bXNnID0gKGNoYXIgKikiaW52YWxpZCBkaXN0YW5jZSBjb2RlIjsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IEJBRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgob3AgJiA2NCkgPT0gMCkgeyAgICAgICAgICAgICAgLyogMm5kIGxldmVsIGxlbmd0aCBjb2RlICovCisgICAgICAgICAgICBoZXJlID0gbGNvZGUgKyBoZXJlLT52YWwgKyAoaG9sZCAmICgoMVUgPDwgb3ApIC0gMSkpOworICAgICAgICAgICAgZ290byBkb2xlbjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChvcCAmIDMyKSB7ICAgICAgICAgICAgICAgICAgICAgLyogZW5kLW9mLWJsb2NrICovCisgICAgICAgICAgICBUcmFjZXZ2KChzdGRlcnIsICJpbmZsYXRlOiAgICAgICAgIGVuZCBvZiBibG9ja1xuIikpOworICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBUWVBFOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzdHJtLT5tc2cgPSAoY2hhciAqKSJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUiOworICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBCQUQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0gd2hpbGUgKGluIDwgbGFzdCAmJiBvdXQgPCBlbmQpOworCisgICAgLyogcmV0dXJuIHVudXNlZCBieXRlcyAob24gZW50cnksIGJpdHMgPCA4LCBzbyBpbiB3b24ndCBnbyB0b28gZmFyIGJhY2spICovCisgICAgbGVuID0gYml0cyA+PiAzOworICAgIGluIC09IGxlbjsKKyAgICBiaXRzIC09IGxlbiA8PCAzOworICAgIGhvbGQgJj0gKDFVIDw8IGJpdHMpIC0gMTsKKworICAgIC8qIHVwZGF0ZSBzdGF0ZSBhbmQgcmV0dXJuICovCisgICAgc3RybS0+bmV4dF9pbiA9IGluOworICAgIHN0cm0tPm5leHRfb3V0ID0gb3V0OworICAgIHN0cm0tPmF2YWlsX2luID0gKHVuc2lnbmVkKShpbiA8IGxhc3QgPyA1ICsgKGxhc3QgLSBpbikgOiA1IC0gKGluIC0gbGFzdCkpOworICAgIHN0cm0tPmF2YWlsX291dCA9ICh1bnNpZ25lZCkob3V0IDwgZW5kID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1NyArIChlbmQgLSBvdXQpIDogMjU3IC0gKG91dCAtIGVuZCkpOworICAgIHN0YXRlLT5ob2xkID0gaG9sZDsKKyAgICBzdGF0ZS0+Yml0cyA9IGJpdHM7CisgICAgcmV0dXJuOworfQorCisvKgorICAgaW5mbGF0ZV9mYXN0KCkgc3BlZWR1cHMgdGhhdCB0dXJuZWQgb3V0IHNsb3dlciAob24gYSBQb3dlclBDIEczIDc1MENYZSk6CisgICAtIFVzaW5nIGJpdCBmaWVsZHMgZm9yIGNvZGUgc3RydWN0dXJlCisgICAtIERpZmZlcmVudCBvcCBkZWZpbml0aW9uIHRvIGF2b2lkICYgZm9yIGV4dHJhIGJpdHMgKGRvICYgZm9yIHRhYmxlIGJpdHMpCisgICAtIFRocmVlIHNlcGFyYXRlIGRlY29kaW5nIGRvLWxvb3BzIGZvciBkaXJlY3QsIHdpbmRvdywgYW5kIHduZXh0ID09IDAKKyAgIC0gU3BlY2lhbCBjYXNlIGZvciBkaXN0YW5jZSA+IDEgY29waWVzIHRvIGRvIG92ZXJsYXBwZWQgbG9hZCBhbmQgc3RvcmUgY29weQorICAgLSBFeHBsaWNpdCBicmFuY2ggcHJlZGljdGlvbnMgKGJhc2VkIG9uIG1lYXN1cmVkIGJyYW5jaCBwcm9iYWJpbGl0aWVzKQorICAgLSBEZWZlcnJpbmcgbWF0Y2ggY29weSBhbmQgaW50ZXJzcGVyc2VkIGl0IHdpdGggZGVjb2Rpbmcgc3Vic2VxdWVudCBjb2RlcworICAgLSBTd2FwcGluZyBsaXRlcmFsL2xlbmd0aCBlbHNlCisgICAtIFN3YXBwaW5nIHdpbmRvdy9kaXJlY3QgZWxzZQorICAgLSBMYXJnZXIgdW5yb2xsZWQgY29weSBsb29wcyAodGhyZWUgaXMgYWJvdXQgcmlnaHQpCisgICAtIE1vdmluZyBsZW4gLT0gMyBzdGF0ZW1lbnQgaW50byBtaWRkbGUgb2YgbG9vcAorICovCisKKyNlbmRpZiAvKiAhQVNNSU5GICovCmRpZmYgLS1naXQgYS9zcmMvaW5mZmFzdC5oIGIvc3JjL2luZmZhc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWMxYWE0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luZmZhc3QuaApAQCAtMCwwICsxLDExIEBACisvKiBpbmZmYXN0LmggLS0gaGVhZGVyIHRvIHVzZSBpbmZmYXN0LmMKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDAzLCAyMDEwIE1hcmsgQWRsZXIKKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKKyAqLworCisvKiBXQVJOSU5HOiB0aGlzIGZpbGUgc2hvdWxkICpub3QqIGJlIHVzZWQgYnkgYXBwbGljYXRpb25zLiBJdCBpcworICAgcGFydCBvZiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGNvbXByZXNzaW9uIGxpYnJhcnkgYW5kIGlzCisgICBzdWJqZWN0IHRvIGNoYW5nZS4gQXBwbGljYXRpb25zIHNob3VsZCBvbmx5IHVzZSB6bGliLmguCisgKi8KKwordm9pZCBaTElCX0lOVEVSTkFMIGluZmxhdGVfZmFzdCBPRigoel9zdHJlYW1wIHN0cm0sIHVuc2lnbmVkIHN0YXJ0KSk7CmRpZmYgLS1naXQgYS9zcmMvaW5mZml4ZWQuaCBiL3NyYy9pbmZmaXhlZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2MjgzMjcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5mZml4ZWQuaApAQCAtMCwwICsxLDk0IEBACisgICAgLyogaW5mZml4ZWQuaCAtLSB0YWJsZSBmb3IgZGVjb2RpbmcgZml4ZWQgY29kZXMKKyAgICAgKiBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBtYWtlZml4ZWQoKS4KKyAgICAgKi8KKworICAgIC8qIFdBUk5JTkc6IHRoaXMgZmlsZSBzaG91bGQgKm5vdCogYmUgdXNlZCBieSBhcHBsaWNhdGlvbnMuCisgICAgICAgSXQgaXMgcGFydCBvZiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBsaWJyYXJ5IGFuZCBpcworICAgICAgIHN1YmplY3QgdG8gY2hhbmdlLiBBcHBsaWNhdGlvbnMgc2hvdWxkIG9ubHkgdXNlIHpsaWIuaC4KKyAgICAgKi8KKworICAgIHN0YXRpYyBjb25zdCBjb2RlIGxlbmZpeFs1MTJdID0geworICAgICAgICB7OTYsNywwfSx7MCw4LDgwfSx7MCw4LDE2fSx7MjAsOCwxMTV9LHsxOCw3LDMxfSx7MCw4LDExMn0sezAsOCw0OH0sCisgICAgICAgIHswLDksMTkyfSx7MTYsNywxMH0sezAsOCw5Nn0sezAsOCwzMn0sezAsOSwxNjB9LHswLDgsMH0sezAsOCwxMjh9LAorICAgICAgICB7MCw4LDY0fSx7MCw5LDIyNH0sezE2LDcsNn0sezAsOCw4OH0sezAsOCwyNH0sezAsOSwxNDR9LHsxOSw3LDU5fSwKKyAgICAgICAgezAsOCwxMjB9LHswLDgsNTZ9LHswLDksMjA4fSx7MTcsNywxN30sezAsOCwxMDR9LHswLDgsNDB9LHswLDksMTc2fSwKKyAgICAgICAgezAsOCw4fSx7MCw4LDEzNn0sezAsOCw3Mn0sezAsOSwyNDB9LHsxNiw3LDR9LHswLDgsODR9LHswLDgsMjB9LAorICAgICAgICB7MjEsOCwyMjd9LHsxOSw3LDQzfSx7MCw4LDExNn0sezAsOCw1Mn0sezAsOSwyMDB9LHsxNyw3LDEzfSx7MCw4LDEwMH0sCisgICAgICAgIHswLDgsMzZ9LHswLDksMTY4fSx7MCw4LDR9LHswLDgsMTMyfSx7MCw4LDY4fSx7MCw5LDIzMn0sezE2LDcsOH0sCisgICAgICAgIHswLDgsOTJ9LHswLDgsMjh9LHswLDksMTUyfSx7MjAsNyw4M30sezAsOCwxMjR9LHswLDgsNjB9LHswLDksMjE2fSwKKyAgICAgICAgezE4LDcsMjN9LHswLDgsMTA4fSx7MCw4LDQ0fSx7MCw5LDE4NH0sezAsOCwxMn0sezAsOCwxNDB9LHswLDgsNzZ9LAorICAgICAgICB7MCw5LDI0OH0sezE2LDcsM30sezAsOCw4Mn0sezAsOCwxOH0sezIxLDgsMTYzfSx7MTksNywzNX0sezAsOCwxMTR9LAorICAgICAgICB7MCw4LDUwfSx7MCw5LDE5Nn0sezE3LDcsMTF9LHswLDgsOTh9LHswLDgsMzR9LHswLDksMTY0fSx7MCw4LDJ9LAorICAgICAgICB7MCw4LDEzMH0sezAsOCw2Nn0sezAsOSwyMjh9LHsxNiw3LDd9LHswLDgsOTB9LHswLDgsMjZ9LHswLDksMTQ4fSwKKyAgICAgICAgezIwLDcsNjd9LHswLDgsMTIyfSx7MCw4LDU4fSx7MCw5LDIxMn0sezE4LDcsMTl9LHswLDgsMTA2fSx7MCw4LDQyfSwKKyAgICAgICAgezAsOSwxODB9LHswLDgsMTB9LHswLDgsMTM4fSx7MCw4LDc0fSx7MCw5LDI0NH0sezE2LDcsNX0sezAsOCw4Nn0sCisgICAgICAgIHswLDgsMjJ9LHs2NCw4LDB9LHsxOSw3LDUxfSx7MCw4LDExOH0sezAsOCw1NH0sezAsOSwyMDR9LHsxNyw3LDE1fSwKKyAgICAgICAgezAsOCwxMDJ9LHswLDgsMzh9LHswLDksMTcyfSx7MCw4LDZ9LHswLDgsMTM0fSx7MCw4LDcwfSx7MCw5LDIzNn0sCisgICAgICAgIHsxNiw3LDl9LHswLDgsOTR9LHswLDgsMzB9LHswLDksMTU2fSx7MjAsNyw5OX0sezAsOCwxMjZ9LHswLDgsNjJ9LAorICAgICAgICB7MCw5LDIyMH0sezE4LDcsMjd9LHswLDgsMTEwfSx7MCw4LDQ2fSx7MCw5LDE4OH0sezAsOCwxNH0sezAsOCwxNDJ9LAorICAgICAgICB7MCw4LDc4fSx7MCw5LDI1Mn0sezk2LDcsMH0sezAsOCw4MX0sezAsOCwxN30sezIxLDgsMTMxfSx7MTgsNywzMX0sCisgICAgICAgIHswLDgsMTEzfSx7MCw4LDQ5fSx7MCw5LDE5NH0sezE2LDcsMTB9LHswLDgsOTd9LHswLDgsMzN9LHswLDksMTYyfSwKKyAgICAgICAgezAsOCwxfSx7MCw4LDEyOX0sezAsOCw2NX0sezAsOSwyMjZ9LHsxNiw3LDZ9LHswLDgsODl9LHswLDgsMjV9LAorICAgICAgICB7MCw5LDE0Nn0sezE5LDcsNTl9LHswLDgsMTIxfSx7MCw4LDU3fSx7MCw5LDIxMH0sezE3LDcsMTd9LHswLDgsMTA1fSwKKyAgICAgICAgezAsOCw0MX0sezAsOSwxNzh9LHswLDgsOX0sezAsOCwxMzd9LHswLDgsNzN9LHswLDksMjQyfSx7MTYsNyw0fSwKKyAgICAgICAgezAsOCw4NX0sezAsOCwyMX0sezE2LDgsMjU4fSx7MTksNyw0M30sezAsOCwxMTd9LHswLDgsNTN9LHswLDksMjAyfSwKKyAgICAgICAgezE3LDcsMTN9LHswLDgsMTAxfSx7MCw4LDM3fSx7MCw5LDE3MH0sezAsOCw1fSx7MCw4LDEzM30sezAsOCw2OX0sCisgICAgICAgIHswLDksMjM0fSx7MTYsNyw4fSx7MCw4LDkzfSx7MCw4LDI5fSx7MCw5LDE1NH0sezIwLDcsODN9LHswLDgsMTI1fSwKKyAgICAgICAgezAsOCw2MX0sezAsOSwyMTh9LHsxOCw3LDIzfSx7MCw4LDEwOX0sezAsOCw0NX0sezAsOSwxODZ9LHswLDgsMTN9LAorICAgICAgICB7MCw4LDE0MX0sezAsOCw3N30sezAsOSwyNTB9LHsxNiw3LDN9LHswLDgsODN9LHswLDgsMTl9LHsyMSw4LDE5NX0sCisgICAgICAgIHsxOSw3LDM1fSx7MCw4LDExNX0sezAsOCw1MX0sezAsOSwxOTh9LHsxNyw3LDExfSx7MCw4LDk5fSx7MCw4LDM1fSwKKyAgICAgICAgezAsOSwxNjZ9LHswLDgsM30sezAsOCwxMzF9LHswLDgsNjd9LHswLDksMjMwfSx7MTYsNyw3fSx7MCw4LDkxfSwKKyAgICAgICAgezAsOCwyN30sezAsOSwxNTB9LHsyMCw3LDY3fSx7MCw4LDEyM30sezAsOCw1OX0sezAsOSwyMTR9LHsxOCw3LDE5fSwKKyAgICAgICAgezAsOCwxMDd9LHswLDgsNDN9LHswLDksMTgyfSx7MCw4LDExfSx7MCw4LDEzOX0sezAsOCw3NX0sezAsOSwyNDZ9LAorICAgICAgICB7MTYsNyw1fSx7MCw4LDg3fSx7MCw4LDIzfSx7NjQsOCwwfSx7MTksNyw1MX0sezAsOCwxMTl9LHswLDgsNTV9LAorICAgICAgICB7MCw5LDIwNn0sezE3LDcsMTV9LHswLDgsMTAzfSx7MCw4LDM5fSx7MCw5LDE3NH0sezAsOCw3fSx7MCw4LDEzNX0sCisgICAgICAgIHswLDgsNzF9LHswLDksMjM4fSx7MTYsNyw5fSx7MCw4LDk1fSx7MCw4LDMxfSx7MCw5LDE1OH0sezIwLDcsOTl9LAorICAgICAgICB7MCw4LDEyN30sezAsOCw2M30sezAsOSwyMjJ9LHsxOCw3LDI3fSx7MCw4LDExMX0sezAsOCw0N30sezAsOSwxOTB9LAorICAgICAgICB7MCw4LDE1fSx7MCw4LDE0M30sezAsOCw3OX0sezAsOSwyNTR9LHs5Niw3LDB9LHswLDgsODB9LHswLDgsMTZ9LAorICAgICAgICB7MjAsOCwxMTV9LHsxOCw3LDMxfSx7MCw4LDExMn0sezAsOCw0OH0sezAsOSwxOTN9LHsxNiw3LDEwfSx7MCw4LDk2fSwKKyAgICAgICAgezAsOCwzMn0sezAsOSwxNjF9LHswLDgsMH0sezAsOCwxMjh9LHswLDgsNjR9LHswLDksMjI1fSx7MTYsNyw2fSwKKyAgICAgICAgezAsOCw4OH0sezAsOCwyNH0sezAsOSwxNDV9LHsxOSw3LDU5fSx7MCw4LDEyMH0sezAsOCw1Nn0sezAsOSwyMDl9LAorICAgICAgICB7MTcsNywxN30sezAsOCwxMDR9LHswLDgsNDB9LHswLDksMTc3fSx7MCw4LDh9LHswLDgsMTM2fSx7MCw4LDcyfSwKKyAgICAgICAgezAsOSwyNDF9LHsxNiw3LDR9LHswLDgsODR9LHswLDgsMjB9LHsyMSw4LDIyN30sezE5LDcsNDN9LHswLDgsMTE2fSwKKyAgICAgICAgezAsOCw1Mn0sezAsOSwyMDF9LHsxNyw3LDEzfSx7MCw4LDEwMH0sezAsOCwzNn0sezAsOSwxNjl9LHswLDgsNH0sCisgICAgICAgIHswLDgsMTMyfSx7MCw4LDY4fSx7MCw5LDIzM30sezE2LDcsOH0sezAsOCw5Mn0sezAsOCwyOH0sezAsOSwxNTN9LAorICAgICAgICB7MjAsNyw4M30sezAsOCwxMjR9LHswLDgsNjB9LHswLDksMjE3fSx7MTgsNywyM30sezAsOCwxMDh9LHswLDgsNDR9LAorICAgICAgICB7MCw5LDE4NX0sezAsOCwxMn0sezAsOCwxNDB9LHswLDgsNzZ9LHswLDksMjQ5fSx7MTYsNywzfSx7MCw4LDgyfSwKKyAgICAgICAgezAsOCwxOH0sezIxLDgsMTYzfSx7MTksNywzNX0sezAsOCwxMTR9LHswLDgsNTB9LHswLDksMTk3fSx7MTcsNywxMX0sCisgICAgICAgIHswLDgsOTh9LHswLDgsMzR9LHswLDksMTY1fSx7MCw4LDJ9LHswLDgsMTMwfSx7MCw4LDY2fSx7MCw5LDIyOX0sCisgICAgICAgIHsxNiw3LDd9LHswLDgsOTB9LHswLDgsMjZ9LHswLDksMTQ5fSx7MjAsNyw2N30sezAsOCwxMjJ9LHswLDgsNTh9LAorICAgICAgICB7MCw5LDIxM30sezE4LDcsMTl9LHswLDgsMTA2fSx7MCw4LDQyfSx7MCw5LDE4MX0sezAsOCwxMH0sezAsOCwxMzh9LAorICAgICAgICB7MCw4LDc0fSx7MCw5LDI0NX0sezE2LDcsNX0sezAsOCw4Nn0sezAsOCwyMn0sezY0LDgsMH0sezE5LDcsNTF9LAorICAgICAgICB7MCw4LDExOH0sezAsOCw1NH0sezAsOSwyMDV9LHsxNyw3LDE1fSx7MCw4LDEwMn0sezAsOCwzOH0sezAsOSwxNzN9LAorICAgICAgICB7MCw4LDZ9LHswLDgsMTM0fSx7MCw4LDcwfSx7MCw5LDIzN30sezE2LDcsOX0sezAsOCw5NH0sezAsOCwzMH0sCisgICAgICAgIHswLDksMTU3fSx7MjAsNyw5OX0sezAsOCwxMjZ9LHswLDgsNjJ9LHswLDksMjIxfSx7MTgsNywyN30sezAsOCwxMTB9LAorICAgICAgICB7MCw4LDQ2fSx7MCw5LDE4OX0sezAsOCwxNH0sezAsOCwxNDJ9LHswLDgsNzh9LHswLDksMjUzfSx7OTYsNywwfSwKKyAgICAgICAgezAsOCw4MX0sezAsOCwxN30sezIxLDgsMTMxfSx7MTgsNywzMX0sezAsOCwxMTN9LHswLDgsNDl9LHswLDksMTk1fSwKKyAgICAgICAgezE2LDcsMTB9LHswLDgsOTd9LHswLDgsMzN9LHswLDksMTYzfSx7MCw4LDF9LHswLDgsMTI5fSx7MCw4LDY1fSwKKyAgICAgICAgezAsOSwyMjd9LHsxNiw3LDZ9LHswLDgsODl9LHswLDgsMjV9LHswLDksMTQ3fSx7MTksNyw1OX0sezAsOCwxMjF9LAorICAgICAgICB7MCw4LDU3fSx7MCw5LDIxMX0sezE3LDcsMTd9LHswLDgsMTA1fSx7MCw4LDQxfSx7MCw5LDE3OX0sezAsOCw5fSwKKyAgICAgICAgezAsOCwxMzd9LHswLDgsNzN9LHswLDksMjQzfSx7MTYsNyw0fSx7MCw4LDg1fSx7MCw4LDIxfSx7MTYsOCwyNTh9LAorICAgICAgICB7MTksNyw0M30sezAsOCwxMTd9LHswLDgsNTN9LHswLDksMjAzfSx7MTcsNywxM30sezAsOCwxMDF9LHswLDgsMzd9LAorICAgICAgICB7MCw5LDE3MX0sezAsOCw1fSx7MCw4LDEzM30sezAsOCw2OX0sezAsOSwyMzV9LHsxNiw3LDh9LHswLDgsOTN9LAorICAgICAgICB7MCw4LDI5fSx7MCw5LDE1NX0sezIwLDcsODN9LHswLDgsMTI1fSx7MCw4LDYxfSx7MCw5LDIxOX0sezE4LDcsMjN9LAorICAgICAgICB7MCw4LDEwOX0sezAsOCw0NX0sezAsOSwxODd9LHswLDgsMTN9LHswLDgsMTQxfSx7MCw4LDc3fSx7MCw5LDI1MX0sCisgICAgICAgIHsxNiw3LDN9LHswLDgsODN9LHswLDgsMTl9LHsyMSw4LDE5NX0sezE5LDcsMzV9LHswLDgsMTE1fSx7MCw4LDUxfSwKKyAgICAgICAgezAsOSwxOTl9LHsxNyw3LDExfSx7MCw4LDk5fSx7MCw4LDM1fSx7MCw5LDE2N30sezAsOCwzfSx7MCw4LDEzMX0sCisgICAgICAgIHswLDgsNjd9LHswLDksMjMxfSx7MTYsNyw3fSx7MCw4LDkxfSx7MCw4LDI3fSx7MCw5LDE1MX0sezIwLDcsNjd9LAorICAgICAgICB7MCw4LDEyM30sezAsOCw1OX0sezAsOSwyMTV9LHsxOCw3LDE5fSx7MCw4LDEwN30sezAsOCw0M30sezAsOSwxODN9LAorICAgICAgICB7MCw4LDExfSx7MCw4LDEzOX0sezAsOCw3NX0sezAsOSwyNDd9LHsxNiw3LDV9LHswLDgsODd9LHswLDgsMjN9LAorICAgICAgICB7NjQsOCwwfSx7MTksNyw1MX0sezAsOCwxMTl9LHswLDgsNTV9LHswLDksMjA3fSx7MTcsNywxNX0sezAsOCwxMDN9LAorICAgICAgICB7MCw4LDM5fSx7MCw5LDE3NX0sezAsOCw3fSx7MCw4LDEzNX0sezAsOCw3MX0sezAsOSwyMzl9LHsxNiw3LDl9LAorICAgICAgICB7MCw4LDk1fSx7MCw4LDMxfSx7MCw5LDE1OX0sezIwLDcsOTl9LHswLDgsMTI3fSx7MCw4LDYzfSx7MCw5LDIyM30sCisgICAgICAgIHsxOCw3LDI3fSx7MCw4LDExMX0sezAsOCw0N30sezAsOSwxOTF9LHswLDgsMTV9LHswLDgsMTQzfSx7MCw4LDc5fSwKKyAgICAgICAgezAsOSwyNTV9CisgICAgfTsKKworICAgIHN0YXRpYyBjb25zdCBjb2RlIGRpc3RmaXhbMzJdID0geworICAgICAgICB7MTYsNSwxfSx7MjMsNSwyNTd9LHsxOSw1LDE3fSx7MjcsNSw0MDk3fSx7MTcsNSw1fSx7MjUsNSwxMDI1fSwKKyAgICAgICAgezIxLDUsNjV9LHsyOSw1LDE2Mzg1fSx7MTYsNSwzfSx7MjQsNSw1MTN9LHsyMCw1LDMzfSx7MjgsNSw4MTkzfSwKKyAgICAgICAgezE4LDUsOX0sezI2LDUsMjA0OX0sezIyLDUsMTI5fSx7NjQsNSwwfSx7MTYsNSwyfSx7MjMsNSwzODV9LAorICAgICAgICB7MTksNSwyNX0sezI3LDUsNjE0NX0sezE3LDUsN30sezI1LDUsMTUzN30sezIxLDUsOTd9LHsyOSw1LDI0NTc3fSwKKyAgICAgICAgezE2LDUsNH0sezI0LDUsNzY5fSx7MjAsNSw0OX0sezI4LDUsMTIyODl9LHsxOCw1LDEzfSx7MjYsNSwzMDczfSwKKyAgICAgICAgezIyLDUsMTkzfSx7NjQsNSwwfQorICAgIH07CmRpZmYgLS1naXQgYS9zcmMvaW5mbGF0ZS5jIGIvc3JjL2luZmxhdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmU4YzYzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luZmxhdGUuYwpAQCAtMCwwICsxLDE1OTIgQEAKKy8qIGluZmxhdGUuYyAtLSB6bGliIGRlY29tcHJlc3Npb24KKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIyIE1hcmsgQWRsZXIKKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKKyAqLworCisvKgorICogQ2hhbmdlIGhpc3Rvcnk6CisgKgorICogMS4yLmJldGEwICAgIDI0IE5vdiAyMDAyCisgKiAtIEZpcnN0IHZlcnNpb24gLS0gY29tcGxldGUgcmV3cml0ZSBvZiBpbmZsYXRlIHRvIHNpbXBsaWZ5IGNvZGUsIGF2b2lkCisgKiAgIGNyZWF0aW9uIG9mIHdpbmRvdyB3aGVuIG5vdCBuZWVkZWQsIG1pbmltaXplIHVzZSBvZiB3aW5kb3cgd2hlbiBpdCBpcworICogICBuZWVkZWQsIG1ha2UgaW5mZmFzdC5jIGV2ZW4gZmFzdGVyLCBpbXBsZW1lbnQgZ3ppcCBkZWNvZGluZywgYW5kIHRvCisgKiAgIGltcHJvdmUgY29kZSByZWFkYWJpbGl0eSBhbmQgc3R5bGUgb3ZlciB0aGUgcHJldmlvdXMgemxpYiBpbmZsYXRlIGNvZGUKKyAqCisgKiAxLjIuYmV0YTEgICAgMjUgTm92IDIwMDIKKyAqIC0gVXNlIHBvaW50ZXJzIGZvciBhdmFpbGFibGUgaW5wdXQgYW5kIG91dHB1dCBjaGVja2luZyBpbiBpbmZmYXN0LmMKKyAqIC0gUmVtb3ZlIGlucHV0IGFuZCBvdXRwdXQgY291bnRlcnMgaW4gaW5mZmFzdC5jCisgKiAtIENoYW5nZSBpbmZmYXN0LmMgZW50cnkgYW5kIGxvb3AgZnJvbSBhdmFpbF9pbiA+PSA3IHRvID49IDYKKyAqIC0gUmVtb3ZlIHVubmVjZXNzYXJ5IHNlY29uZCBieXRlIHB1bGwgZnJvbSBsZW5ndGggZXh0cmEgaW4gaW5mZmFzdC5jCisgKiAtIFVucm9sbCBkaXJlY3QgY29weSB0byB0aHJlZSBjb3BpZXMgcGVyIGxvb3AgaW4gaW5mZmFzdC5jCisgKgorICogMS4yLmJldGEyICAgIDQgRGVjIDIwMDIKKyAqIC0gQ2hhbmdlIGV4dGVybmFsIHJvdXRpbmUgbmFtZXMgdG8gcmVkdWNlIHBvdGVudGlhbCBjb25mbGljdHMKKyAqIC0gQ29ycmVjdCBmaWxlbmFtZSB0byBpbmZmaXhlZC5oIGZvciBmaXhlZCB0YWJsZXMgaW4gaW5mbGF0ZS5jCisgKiAtIE1ha2UgaGJ1ZltdIHVuc2lnbmVkIGNoYXIgdG8gbWF0Y2ggcGFyYW1ldGVyIHR5cGUgaW4gaW5mbGF0ZS5jCisgKiAtIENoYW5nZSBzdHJtLT5uZXh0X291dFstc3RhdGUtPm9mZnNldF0gdG8gKihzdHJtLT5uZXh0X291dCAtIHN0YXRlLT5vZmZzZXQpCisgKiAgIHRvIGF2b2lkIG5lZ2F0aW9uIHByb2JsZW0gb24gQWxwaGFzICg2NCBiaXQpIGluIGluZmxhdGUuYworICoKKyAqIDEuMi5iZXRhMyAgICAyMiBEZWMgMjAwMgorICogLSBBZGQgY29tbWVudHMgb24gc3RhdGUtPmJpdHMgYXNzZXJ0aW9uIGluIGluZmZhc3QuYworICogLSBBZGQgY29tbWVudHMgb24gb3AgZmllbGQgaW4gaW5mdHJlZXMuaAorICogLSBGaXggYnVnIGluIHJldXNlIG9mIGFsbG9jYXRlZCB3aW5kb3cgYWZ0ZXIgaW5mbGF0ZVJlc2V0KCkKKyAqIC0gUmVtb3ZlIGJpdCBmaWVsZHMtLWJhY2sgdG8gYnl0ZSBzdHJ1Y3R1cmUgZm9yIHNwZWVkCisgKiAtIFJlbW92ZSBkaXN0YW5jZSBleHRyYSA9PSAwIGNoZWNrIGluIGluZmxhdGVfZmFzdCgpLS1vbmx5IGhlbHBzIGZvciBsZW5ndGhzCisgKiAtIENoYW5nZSBwb3N0LWluY3JlbWVudHMgdG8gcHJlLWluY3JlbWVudHMgaW4gaW5mbGF0ZV9mYXN0KCksIFBQQyBiaWFzZWQ/CisgKiAtIEFkZCBjb21waWxlIHRpbWUgb3B0aW9uLCBQT1NUSU5DLCB0byB1c2UgcG9zdC1pbmNyZW1lbnRzIGluc3RlYWQgKEludGVsPykKKyAqIC0gTWFrZSBNQVRDSCBjb3B5IGluIGluZmxhdGUoKSBtdWNoIGZhc3RlciBmb3Igd2hlbiBpbmZsYXRlX2Zhc3QoKSBub3QgdXNlZAorICogLSBVc2UgbG9jYWwgY29waWVzIG9mIHN0cmVhbSBuZXh0IGFuZCBhdmFpbCB2YWx1ZXMsIGFzIHdlbGwgYXMgbG9jYWwgYml0CisgKiAgIGJ1ZmZlciBhbmQgYml0IGNvdW50IGluIGluZmxhdGUoKS0tZm9yIHNwZWVkIHdoZW4gaW5mbGF0ZV9mYXN0KCkgbm90IHVzZWQKKyAqCisgKiAxLjIuYmV0YTQgICAgMSBKYW4gMjAwMworICogLSBTcGxpdCBwdHIgLSAyNTcgc3RhdGVtZW50cyBpbiBpbmZsYXRlX3RhYmxlKCkgdG8gYXZvaWQgY29tcGlsZXIgd2FybmluZ3MKKyAqIC0gTW92ZSBhIGNvbW1lbnQgb24gb3V0cHV0IGJ1ZmZlciBzaXplcyBmcm9tIGluZmZhc3QuYyB0byBpbmZsYXRlLmMKKyAqIC0gQWRkIGNvbW1lbnRzIGluIGluZmZhc3QuYyB0byBpbnRyb2R1Y2UgdGhlIGluZmxhdGVfZmFzdCgpIHJvdXRpbmUKKyAqIC0gUmVhcnJhbmdlIHdpbmRvdyBjb3BpZXMgaW4gaW5mbGF0ZV9mYXN0KCkgZm9yIHNwZWVkIGFuZCBzaW1wbGlmaWNhdGlvbgorICogLSBVbnJvbGwgbGFzdCBjb3B5IGZvciB3aW5kb3cgbWF0Y2ggaW4gaW5mbGF0ZV9mYXN0KCkKKyAqIC0gVXNlIGxvY2FsIGNvcGllcyBvZiB3aW5kb3cgdmFyaWFibGVzIGluIGluZmxhdGVfZmFzdCgpIGZvciBzcGVlZAorICogLSBQdWxsIG91dCBjb21tb24gd25leHQgPT0gMCBjYXNlIGZvciBzcGVlZCBpbiBpbmZsYXRlX2Zhc3QoKQorICogLSBNYWtlIG9wIGFuZCBsZW4gaW4gaW5mbGF0ZV9mYXN0KCkgdW5zaWduZWQgZm9yIGNvbnNpc3RlbmN5CisgKiAtIEFkZCBGQVIgdG8gbGNvZGUgYW5kIGRjb2RlIGRlY2xhcmF0aW9ucyBpbiBpbmZsYXRlX2Zhc3QoKQorICogLSBTaW1wbGlmaWVkIGJhZCBkaXN0YW5jZSBjaGVjayBpbiBpbmZsYXRlX2Zhc3QoKQorICogLSBBZGRlZCBpbmZsYXRlQmFja0luaXQoKSwgaW5mbGF0ZUJhY2soKSwgYW5kIGluZmxhdGVCYWNrRW5kKCkgaW4gbmV3CisgKiAgIHNvdXJjZSBmaWxlIGluZmJhY2suYyB0byBwcm92aWRlIGEgY2FsbC1iYWNrIGludGVyZmFjZSB0byBpbmZsYXRlIGZvcgorICogICBwcm9ncmFtcyBsaWtlIGd6aXAgYW5kIHVuemlwIC0tIHVzZXMgd2luZG93IGFzIG91dHB1dCBidWZmZXIgdG8gYXZvaWQKKyAqICAgd2luZG93IGNvcHlpbmcKKyAqCisgKiAxLjIuYmV0YTUgICAgMSBKYW4gMjAwMworICogLSBJbXByb3ZlZCBpbmZsYXRlQmFjaygpIGludGVyZmFjZSB0byBhbGxvdyB0aGUgY2FsbGVyIHRvIHByb3ZpZGUgaW5pdGlhbAorICogICBpbnB1dCBpbiBzdHJtLgorICogLSBGaXhlZCBzdG9yZWQgYmxvY2tzIGJ1ZyBpbiBpbmZsYXRlQmFjaygpCisgKgorICogMS4yLmJldGE2ICAgIDQgSmFuIDIwMDMKKyAqIC0gQWRkZWQgY29tbWVudHMgaW4gaW5mZmFzdC5jIG9uIGVmZmVjdGl2ZW5lc3Mgb2YgUE9TVElOQworICogLSBUeXBlY2FzdGluZyBhbGwgYXJvdW5kIHRvIHJlZHVjZSBjb21waWxlciB3YXJuaW5ncworICogLSBDaGFuZ2VkIGxvb3BzIGZyb20gd2hpbGUgKDEpIG9yIGRvIHt9IHdoaWxlICgxKSB0byBmb3IgKDs7KSwgYWdhaW4gdG8KKyAqICAgbWFrZSBjb21waWxlcnMgaGFwcHkKKyAqIC0gQ2hhbmdlZCB0eXBlIG9mIHdpbmRvdyBpbiBpbmZsYXRlQmFja0luaXQoKSB0byB1bnNpZ25lZCBjaGFyICoKKyAqCisgKiAxLjIuYmV0YTcgICAgMjcgSmFuIDIwMDMKKyAqIC0gQ2hhbmdlZCBtYW55IHR5cGVzIHRvIHVuc2lnbmVkIG9yIHVuc2lnbmVkIHNob3J0IHRvIGF2b2lkIHdhcm5pbmdzCisgKiAtIEFkZGVkIGluZmxhdGVDb3B5KCkgZnVuY3Rpb24KKyAqCisgKiAxLjIuMCAgICAgICAgOSBNYXIgMjAwMworICogLSBDaGFuZ2VkIGluZmxhdGVCYWNrKCkgaW50ZXJmYWNlIHRvIHByb3ZpZGUgc2VwYXJhdGUgb3BhcXVlIGRlc2NyaXB0b3JzCisgKiAgIGZvciB0aGUgaW4oKSBhbmQgb3V0KCkgZnVuY3Rpb25zCisgKiAtIENoYW5nZWQgaW5mbGF0ZUJhY2soKSBhcmd1bWVudCBhbmQgaW5fZnVuYyB0eXBlZGVmIHRvIHN3YXAgdGhlIGxlbmd0aAorICogICBhbmQgYnVmZmVyIGFkZHJlc3MgcmV0dXJuIHZhbHVlcyBmb3IgdGhlIGlucHV0IGZ1bmN0aW9uCisgKiAtIENoZWNrIG5leHRfaW4gYW5kIG5leHRfb3V0IGZvciBaX05VTEwgb24gZW50cnkgdG8gaW5mbGF0ZSgpCisgKgorICogVGhlIGhpc3RvcnkgZm9yIHZlcnNpb25zIGFmdGVyIDEuMi4wIGFyZSBpbiBDaGFuZ2VMb2cgaW4gemxpYiBkaXN0cmlidXRpb24uCisgKi8KKworI2luY2x1ZGUgInp1dGlsLmgiCisjaW5jbHVkZSAiaW5mdHJlZXMuaCIKKyNpbmNsdWRlICJpbmZsYXRlLmgiCisjaW5jbHVkZSAiaW5mZmFzdC5oIgorCisjaWZkZWYgTUFLRUZJWEVECisjICBpZm5kZWYgQlVJTERGSVhFRAorIyAgICBkZWZpbmUgQlVJTERGSVhFRAorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBmdW5jdGlvbiBwcm90b3R5cGVzICovCitsb2NhbCBpbnQgaW5mbGF0ZVN0YXRlQ2hlY2sgT0YoKHpfc3RyZWFtcCBzdHJtKSk7Citsb2NhbCB2b2lkIGZpeGVkdGFibGVzIE9GKChzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRlKSk7Citsb2NhbCBpbnQgdXBkYXRld2luZG93IE9GKCh6X3N0cmVhbXAgc3RybSwgY29uc3QgdW5zaWduZWQgY2hhciBGQVIgKmVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvcHkpKTsKKyNpZmRlZiBCVUlMREZJWEVECisgICB2b2lkIG1ha2VmaXhlZCBPRigodm9pZCkpOworI2VuZGlmCitsb2NhbCB1bnNpZ25lZCBzeW5jc2VhcmNoIE9GKCh1bnNpZ25lZCBGQVIgKmhhdmUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgRkFSICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsZW4pKTsKKworbG9jYWwgaW50IGluZmxhdGVTdGF0ZUNoZWNrKHN0cm0pCit6X3N0cmVhbXAgc3RybTsKK3sKKyAgICBzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRlOworICAgIGlmIChzdHJtID09IFpfTlVMTCB8fAorICAgICAgICBzdHJtLT56YWxsb2MgPT0gKGFsbG9jX2Z1bmMpMCB8fCBzdHJtLT56ZnJlZSA9PSAoZnJlZV9mdW5jKTApCisgICAgICAgIHJldHVybiAxOworICAgIHN0YXRlID0gKHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqKXN0cm0tPnN0YXRlOworICAgIGlmIChzdGF0ZSA9PSBaX05VTEwgfHwgc3RhdGUtPnN0cm0gIT0gc3RybSB8fAorICAgICAgICBzdGF0ZS0+bW9kZSA8IEhFQUQgfHwgc3RhdGUtPm1vZGUgPiBTWU5DKQorICAgICAgICByZXR1cm4gMTsKKyAgICByZXR1cm4gMDsKK30KKworaW50IFpFWFBPUlQgaW5mbGF0ZVJlc2V0S2VlcChzdHJtKQorel9zdHJlYW1wIHN0cm07Cit7CisgICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKKworICAgIGlmIChpbmZsYXRlU3RhdGVDaGVjayhzdHJtKSkgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworICAgIHN0YXRlID0gKHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqKXN0cm0tPnN0YXRlOworICAgIHN0cm0tPnRvdGFsX2luID0gc3RybS0+dG90YWxfb3V0ID0gc3RhdGUtPnRvdGFsID0gMDsKKyAgICBzdHJtLT5tc2cgPSBaX05VTEw7CisgICAgaWYgKHN0YXRlLT53cmFwKSAgICAgICAgLyogdG8gc3VwcG9ydCBpbGwtY29uY2VpdmVkIEphdmEgdGVzdCBzdWl0ZSAqLworICAgICAgICBzdHJtLT5hZGxlciA9IHN0YXRlLT53cmFwICYgMTsKKyAgICBzdGF0ZS0+bW9kZSA9IEhFQUQ7CisgICAgc3RhdGUtPmxhc3QgPSAwOworICAgIHN0YXRlLT5oYXZlZGljdCA9IDA7CisgICAgc3RhdGUtPmZsYWdzID0gLTE7CisgICAgc3RhdGUtPmRtYXggPSAzMjc2OFU7CisgICAgc3RhdGUtPmhlYWQgPSBaX05VTEw7CisgICAgc3RhdGUtPmhvbGQgPSAwOworICAgIHN0YXRlLT5iaXRzID0gMDsKKyAgICBzdGF0ZS0+bGVuY29kZSA9IHN0YXRlLT5kaXN0Y29kZSA9IHN0YXRlLT5uZXh0ID0gc3RhdGUtPmNvZGVzOworICAgIHN0YXRlLT5zYW5lID0gMTsKKyAgICBzdGF0ZS0+YmFjayA9IC0xOworICAgIFRyYWNldigoc3RkZXJyLCAiaW5mbGF0ZTogcmVzZXRcbiIpKTsKKyAgICByZXR1cm4gWl9PSzsKK30KKworaW50IFpFWFBPUlQgaW5mbGF0ZVJlc2V0KHN0cm0pCit6X3N0cmVhbXAgc3RybTsKK3sKKyAgICBzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRlOworCisgICAgaWYgKGluZmxhdGVTdGF0ZUNoZWNrKHN0cm0pKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgICAgc3RhdGUgPSAoc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICopc3RybS0+c3RhdGU7CisgICAgc3RhdGUtPndzaXplID0gMDsKKyAgICBzdGF0ZS0+d2hhdmUgPSAwOworICAgIHN0YXRlLT53bmV4dCA9IDA7CisgICAgcmV0dXJuIGluZmxhdGVSZXNldEtlZXAoc3RybSk7Cit9CisKK2ludCBaRVhQT1JUIGluZmxhdGVSZXNldDIoc3RybSwgd2luZG93Qml0cykKK3pfc3RyZWFtcCBzdHJtOworaW50IHdpbmRvd0JpdHM7Cit7CisgICAgaW50IHdyYXA7CisgICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKKworICAgIC8qIGdldCB0aGUgc3RhdGUgKi8KKyAgICBpZiAoaW5mbGF0ZVN0YXRlQ2hlY2soc3RybSkpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyAgICBzdGF0ZSA9IChzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKilzdHJtLT5zdGF0ZTsKKworICAgIC8qIGV4dHJhY3Qgd3JhcCByZXF1ZXN0IGZyb20gd2luZG93Qml0cyBwYXJhbWV0ZXIgKi8KKyAgICBpZiAod2luZG93Qml0cyA8IDApIHsKKyAgICAgICAgd3JhcCA9IDA7CisgICAgICAgIHdpbmRvd0JpdHMgPSAtd2luZG93Qml0czsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHdyYXAgPSAod2luZG93Qml0cyA+PiA0KSArIDU7CisjaWZkZWYgR1VOWklQCisgICAgICAgIGlmICh3aW5kb3dCaXRzIDwgNDgpCisgICAgICAgICAgICB3aW5kb3dCaXRzICY9IDE1OworI2VuZGlmCisgICAgfQorCisgICAgLyogc2V0IG51bWJlciBvZiB3aW5kb3cgYml0cywgZnJlZSB3aW5kb3cgaWYgZGlmZmVyZW50ICovCisgICAgaWYgKHdpbmRvd0JpdHMgJiYgKHdpbmRvd0JpdHMgPCA4IHx8IHdpbmRvd0JpdHMgPiAxNSkpCisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyAgICBpZiAoc3RhdGUtPndpbmRvdyAhPSBaX05VTEwgJiYgc3RhdGUtPndiaXRzICE9ICh1bnNpZ25lZCl3aW5kb3dCaXRzKSB7CisgICAgICAgIFpGUkVFKHN0cm0sIHN0YXRlLT53aW5kb3cpOworICAgICAgICBzdGF0ZS0+d2luZG93ID0gWl9OVUxMOworICAgIH0KKworICAgIC8qIHVwZGF0ZSBzdGF0ZSBhbmQgcmVzZXQgdGhlIHJlc3Qgb2YgaXQgKi8KKyAgICBzdGF0ZS0+d3JhcCA9IHdyYXA7CisgICAgc3RhdGUtPndiaXRzID0gKHVuc2lnbmVkKXdpbmRvd0JpdHM7CisgICAgcmV0dXJuIGluZmxhdGVSZXNldChzdHJtKTsKK30KKworaW50IFpFWFBPUlQgaW5mbGF0ZUluaXQyXyhzdHJtLCB3aW5kb3dCaXRzLCB2ZXJzaW9uLCBzdHJlYW1fc2l6ZSkKK3pfc3RyZWFtcCBzdHJtOworaW50IHdpbmRvd0JpdHM7Citjb25zdCBjaGFyICp2ZXJzaW9uOworaW50IHN0cmVhbV9zaXplOworeworICAgIGludCByZXQ7CisgICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKKworICAgIGlmICh2ZXJzaW9uID09IFpfTlVMTCB8fCB2ZXJzaW9uWzBdICE9IFpMSUJfVkVSU0lPTlswXSB8fAorICAgICAgICBzdHJlYW1fc2l6ZSAhPSAoaW50KShzaXplb2Yoel9zdHJlYW0pKSkKKyAgICAgICAgcmV0dXJuIFpfVkVSU0lPTl9FUlJPUjsKKyAgICBpZiAoc3RybSA9PSBaX05VTEwpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyAgICBzdHJtLT5tc2cgPSBaX05VTEw7ICAgICAgICAgICAgICAgICAvKiBpbiBjYXNlIHdlIHJldHVybiBhbiBlcnJvciAqLworICAgIGlmIChzdHJtLT56YWxsb2MgPT0gKGFsbG9jX2Z1bmMpMCkgeworI2lmZGVmIFpfU09MTworICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisjZWxzZQorICAgICAgICBzdHJtLT56YWxsb2MgPSB6Y2FsbG9jOworICAgICAgICBzdHJtLT5vcGFxdWUgPSAodm9pZHBmKTA7CisjZW5kaWYKKyAgICB9CisgICAgaWYgKHN0cm0tPnpmcmVlID09IChmcmVlX2Z1bmMpMCkKKyNpZmRlZiBaX1NPTE8KKyAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworI2Vsc2UKKyAgICAgICAgc3RybS0+emZyZWUgPSB6Y2ZyZWU7CisjZW5kaWYKKyAgICBzdGF0ZSA9IChzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKikKKyAgICAgICAgICAgIFpBTExPQyhzdHJtLCAxLCBzaXplb2Yoc3RydWN0IGluZmxhdGVfc3RhdGUpKTsKKyAgICBpZiAoc3RhdGUgPT0gWl9OVUxMKSByZXR1cm4gWl9NRU1fRVJST1I7CisgICAgVHJhY2V2KChzdGRlcnIsICJpbmZsYXRlOiBhbGxvY2F0ZWRcbiIpKTsKKyAgICBzdHJtLT5zdGF0ZSA9IChzdHJ1Y3QgaW50ZXJuYWxfc3RhdGUgRkFSICopc3RhdGU7CisgICAgc3RhdGUtPnN0cm0gPSBzdHJtOworICAgIHN0YXRlLT53aW5kb3cgPSBaX05VTEw7CisgICAgc3RhdGUtPm1vZGUgPSBIRUFEOyAgICAgLyogdG8gcGFzcyBzdGF0ZSB0ZXN0IGluIGluZmxhdGVSZXNldDIoKSAqLworICAgIHJldCA9IGluZmxhdGVSZXNldDIoc3RybSwgd2luZG93Qml0cyk7CisgICAgaWYgKHJldCAhPSBaX09LKSB7CisgICAgICAgIFpGUkVFKHN0cm0sIHN0YXRlKTsKKyAgICAgICAgc3RybS0+c3RhdGUgPSBaX05VTEw7CisgICAgfQorICAgIHJldHVybiByZXQ7Cit9CisKK2ludCBaRVhQT1JUIGluZmxhdGVJbml0XyhzdHJtLCB2ZXJzaW9uLCBzdHJlYW1fc2l6ZSkKK3pfc3RyZWFtcCBzdHJtOworY29uc3QgY2hhciAqdmVyc2lvbjsKK2ludCBzdHJlYW1fc2l6ZTsKK3sKKyAgICByZXR1cm4gaW5mbGF0ZUluaXQyXyhzdHJtLCBERUZfV0JJVFMsIHZlcnNpb24sIHN0cmVhbV9zaXplKTsKK30KKworaW50IFpFWFBPUlQgaW5mbGF0ZVByaW1lKHN0cm0sIGJpdHMsIHZhbHVlKQorel9zdHJlYW1wIHN0cm07CitpbnQgYml0czsKK2ludCB2YWx1ZTsKK3sKKyAgICBzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRlOworCisgICAgaWYgKGluZmxhdGVTdGF0ZUNoZWNrKHN0cm0pKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgICAgc3RhdGUgPSAoc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICopc3RybS0+c3RhdGU7CisgICAgaWYgKGJpdHMgPCAwKSB7CisgICAgICAgIHN0YXRlLT5ob2xkID0gMDsKKyAgICAgICAgc3RhdGUtPmJpdHMgPSAwOworICAgICAgICByZXR1cm4gWl9PSzsKKyAgICB9CisgICAgaWYgKGJpdHMgPiAxNiB8fCBzdGF0ZS0+Yml0cyArICh1SW50KWJpdHMgPiAzMikgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworICAgIHZhbHVlICY9ICgxTCA8PCBiaXRzKSAtIDE7CisgICAgc3RhdGUtPmhvbGQgKz0gKHVuc2lnbmVkKXZhbHVlIDw8IHN0YXRlLT5iaXRzOworICAgIHN0YXRlLT5iaXRzICs9ICh1SW50KWJpdHM7CisgICAgcmV0dXJuIFpfT0s7Cit9CisKKy8qCisgICBSZXR1cm4gc3RhdGUgd2l0aCBsZW5ndGggYW5kIGRpc3RhbmNlIGRlY29kaW5nIHRhYmxlcyBhbmQgaW5kZXggc2l6ZXMgc2V0IHRvCisgICBmaXhlZCBjb2RlIGRlY29kaW5nLiAgTm9ybWFsbHkgdGhpcyByZXR1cm5zIGZpeGVkIHRhYmxlcyBmcm9tIGluZmZpeGVkLmguCisgICBJZiBCVUlMREZJWEVEIGlzIGRlZmluZWQsIHRoZW4gaW5zdGVhZCB0aGlzIHJvdXRpbmUgYnVpbGRzIHRoZSB0YWJsZXMgdGhlCisgICBmaXJzdCB0aW1lIGl0J3MgY2FsbGVkLCBhbmQgcmV0dXJucyB0aG9zZSB0YWJsZXMgdGhlIGZpcnN0IHRpbWUgYW5kCisgICB0aGVyZWFmdGVyLiAgVGhpcyByZWR1Y2VzIHRoZSBzaXplIG9mIHRoZSBjb2RlIGJ5IGFib3V0IDJLIGJ5dGVzLCBpbgorICAgZXhjaGFuZ2UgZm9yIGEgbGl0dGxlIGV4ZWN1dGlvbiB0aW1lLiAgSG93ZXZlciwgQlVJTERGSVhFRCBzaG91bGQgbm90IGJlCisgICB1c2VkIGZvciB0aHJlYWRlZCBhcHBsaWNhdGlvbnMsIHNpbmNlIHRoZSByZXdyaXRpbmcgb2YgdGhlIHRhYmxlcyBhbmQgdmlyZ2luCisgICBtYXkgbm90IGJlIHRocmVhZC1zYWZlLgorICovCitsb2NhbCB2b2lkIGZpeGVkdGFibGVzKHN0YXRlKQorc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKK3sKKyNpZmRlZiBCVUlMREZJWEVECisgICAgc3RhdGljIGludCB2aXJnaW4gPSAxOworICAgIHN0YXRpYyBjb2RlICpsZW5maXgsICpkaXN0Zml4OworICAgIHN0YXRpYyBjb2RlIGZpeGVkWzU0NF07CisKKyAgICAvKiBidWlsZCBmaXhlZCBodWZmbWFuIHRhYmxlcyBpZiBmaXJzdCBjYWxsIChtYXkgbm90IGJlIHRocmVhZCBzYWZlKSAqLworICAgIGlmICh2aXJnaW4pIHsKKyAgICAgICAgdW5zaWduZWQgc3ltLCBiaXRzOworICAgICAgICBzdGF0aWMgY29kZSAqbmV4dDsKKworICAgICAgICAvKiBsaXRlcmFsL2xlbmd0aCB0YWJsZSAqLworICAgICAgICBzeW0gPSAwOworICAgICAgICB3aGlsZSAoc3ltIDwgMTQ0KSBzdGF0ZS0+bGVuc1tzeW0rK10gPSA4OworICAgICAgICB3aGlsZSAoc3ltIDwgMjU2KSBzdGF0ZS0+bGVuc1tzeW0rK10gPSA5OworICAgICAgICB3aGlsZSAoc3ltIDwgMjgwKSBzdGF0ZS0+bGVuc1tzeW0rK10gPSA3OworICAgICAgICB3aGlsZSAoc3ltIDwgMjg4KSBzdGF0ZS0+bGVuc1tzeW0rK10gPSA4OworICAgICAgICBuZXh0ID0gZml4ZWQ7CisgICAgICAgIGxlbmZpeCA9IG5leHQ7CisgICAgICAgIGJpdHMgPSA5OworICAgICAgICBpbmZsYXRlX3RhYmxlKExFTlMsIHN0YXRlLT5sZW5zLCAyODgsICYobmV4dCksICYoYml0cyksIHN0YXRlLT53b3JrKTsKKworICAgICAgICAvKiBkaXN0YW5jZSB0YWJsZSAqLworICAgICAgICBzeW0gPSAwOworICAgICAgICB3aGlsZSAoc3ltIDwgMzIpIHN0YXRlLT5sZW5zW3N5bSsrXSA9IDU7CisgICAgICAgIGRpc3RmaXggPSBuZXh0OworICAgICAgICBiaXRzID0gNTsKKyAgICAgICAgaW5mbGF0ZV90YWJsZShESVNUUywgc3RhdGUtPmxlbnMsIDMyLCAmKG5leHQpLCAmKGJpdHMpLCBzdGF0ZS0+d29yayk7CisKKyAgICAgICAgLyogZG8gdGhpcyBqdXN0IG9uY2UgKi8KKyAgICAgICAgdmlyZ2luID0gMDsKKyAgICB9CisjZWxzZSAvKiAhQlVJTERGSVhFRCAqLworIyAgIGluY2x1ZGUgImluZmZpeGVkLmgiCisjZW5kaWYgLyogQlVJTERGSVhFRCAqLworICAgIHN0YXRlLT5sZW5jb2RlID0gbGVuZml4OworICAgIHN0YXRlLT5sZW5iaXRzID0gOTsKKyAgICBzdGF0ZS0+ZGlzdGNvZGUgPSBkaXN0Zml4OworICAgIHN0YXRlLT5kaXN0Yml0cyA9IDU7Cit9CisKKyNpZmRlZiBNQUtFRklYRUQKKyNpbmNsdWRlIDxzdGRpby5oPgorCisvKgorICAgV3JpdGUgb3V0IHRoZSBpbmZmaXhlZC5oIHRoYXQgaXMgI2luY2x1ZGUnZCBhYm92ZS4gIERlZmluaW5nIE1BS0VGSVhFRCBhbHNvCisgICBkZWZpbmVzIEJVSUxERklYRUQsIHNvIHRoZSB0YWJsZXMgYXJlIGJ1aWx0IG9uIHRoZSBmbHkuICBtYWtlZml4ZWQoKSB3cml0ZXMKKyAgIHRob3NlIHRhYmxlcyB0byBzdGRvdXQsIHdoaWNoIHdvdWxkIGJlIHBpcGVkIHRvIGluZmZpeGVkLmguICBBIHNtYWxsIHByb2dyYW0KKyAgIGNhbiBzaW1wbHkgY2FsbCBtYWtlZml4ZWQgdG8gZG8gdGhpczoKKworICAgIHZvaWQgbWFrZWZpeGVkKHZvaWQpOworCisgICAgaW50IG1haW4odm9pZCkKKyAgICB7CisgICAgICAgIG1ha2VmaXhlZCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgIFRoZW4gdGhhdCBjYW4gYmUgbGlua2VkIHdpdGggemxpYiBidWlsdCB3aXRoIE1BS0VGSVhFRCBkZWZpbmVkIGFuZCBydW46CisKKyAgICBhLm91dCA+IGluZmZpeGVkLmgKKyAqLwordm9pZCBtYWtlZml4ZWQoKQoreworICAgIHVuc2lnbmVkIGxvdywgc2l6ZTsKKyAgICBzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBzdGF0ZTsKKworICAgIGZpeGVkdGFibGVzKCZzdGF0ZSk7CisgICAgcHV0cygiICAgIC8qIGluZmZpeGVkLmggLS0gdGFibGUgZm9yIGRlY29kaW5nIGZpeGVkIGNvZGVzIik7CisgICAgcHV0cygiICAgICAqIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IG1ha2VmaXhlZCgpLiIpOworICAgIHB1dHMoIiAgICAgKi8iKTsKKyAgICBwdXRzKCIiKTsKKyAgICBwdXRzKCIgICAgLyogV0FSTklORzogdGhpcyBmaWxlIHNob3VsZCAqbm90KiBiZSB1c2VkIGJ5IGFwcGxpY2F0aW9ucy4iKTsKKyAgICBwdXRzKCIgICAgICAgSXQgaXMgcGFydCBvZiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBsaWJyYXJ5IGFuZCBpcyIpOworICAgIHB1dHMoIiAgICAgICBzdWJqZWN0IHRvIGNoYW5nZS4gQXBwbGljYXRpb25zIHNob3VsZCBvbmx5IHVzZSB6bGliLmguIik7CisgICAgcHV0cygiICAgICAqLyIpOworICAgIHB1dHMoIiIpOworICAgIHNpemUgPSAxVSA8PCA5OworICAgIHByaW50ZigiICAgIHN0YXRpYyBjb25zdCBjb2RlIGxlbmZpeFsldV0gPSB7Iiwgc2l6ZSk7CisgICAgbG93ID0gMDsKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGlmICgobG93ICUgNykgPT0gMCkgcHJpbnRmKCJcbiAgICAgICAgIik7CisgICAgICAgIHByaW50ZigieyV1LCV1LCVkfSIsIChsb3cgJiAxMjcpID09IDk5ID8gNjQgOiBzdGF0ZS5sZW5jb2RlW2xvd10ub3AsCisgICAgICAgICAgICAgICBzdGF0ZS5sZW5jb2RlW2xvd10uYml0cywgc3RhdGUubGVuY29kZVtsb3ddLnZhbCk7CisgICAgICAgIGlmICgrK2xvdyA9PSBzaXplKSBicmVhazsKKyAgICAgICAgcHV0Y2hhcignLCcpOworICAgIH0KKyAgICBwdXRzKCJcbiAgICB9OyIpOworICAgIHNpemUgPSAxVSA8PCA1OworICAgIHByaW50ZigiXG4gICAgc3RhdGljIGNvbnN0IGNvZGUgZGlzdGZpeFsldV0gPSB7Iiwgc2l6ZSk7CisgICAgbG93ID0gMDsKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGlmICgobG93ICUgNikgPT0gMCkgcHJpbnRmKCJcbiAgICAgICAgIik7CisgICAgICAgIHByaW50ZigieyV1LCV1LCVkfSIsIHN0YXRlLmRpc3Rjb2RlW2xvd10ub3AsIHN0YXRlLmRpc3Rjb2RlW2xvd10uYml0cywKKyAgICAgICAgICAgICAgIHN0YXRlLmRpc3Rjb2RlW2xvd10udmFsKTsKKyAgICAgICAgaWYgKCsrbG93ID09IHNpemUpIGJyZWFrOworICAgICAgICBwdXRjaGFyKCcsJyk7CisgICAgfQorICAgIHB1dHMoIlxuICAgIH07Iik7Cit9CisjZW5kaWYgLyogTUFLRUZJWEVEICovCisKKy8qCisgICBVcGRhdGUgdGhlIHdpbmRvdyB3aXRoIHRoZSBsYXN0IHdzaXplIChub3JtYWxseSAzMkspIGJ5dGVzIHdyaXR0ZW4gYmVmb3JlCisgICByZXR1cm5pbmcuICBJZiB3aW5kb3cgZG9lcyBub3QgZXhpc3QgeWV0LCBjcmVhdGUgaXQuICBUaGlzIGlzIG9ubHkgY2FsbGVkCisgICB3aGVuIGEgd2luZG93IGlzIGFscmVhZHkgaW4gdXNlLCBvciB3aGVuIG91dHB1dCBoYXMgYmVlbiB3cml0dGVuIGR1cmluZyB0aGlzCisgICBpbmZsYXRlIGNhbGwsIGJ1dCB0aGUgZW5kIG9mIHRoZSBkZWZsYXRlIHN0cmVhbSBoYXMgbm90IGJlZW4gcmVhY2hlZCB5ZXQuCisgICBJdCBpcyBhbHNvIGNhbGxlZCB0byBjcmVhdGUgYSB3aW5kb3cgZm9yIGRpY3Rpb25hcnkgZGF0YSB3aGVuIGEgZGljdGlvbmFyeQorICAgaXMgbG9hZGVkLgorCisgICBQcm92aWRpbmcgb3V0cHV0IGJ1ZmZlcnMgbGFyZ2VyIHRoYW4gMzJLIHRvIGluZmxhdGUoKSBzaG91bGQgcHJvdmlkZSBhIHNwZWVkCisgICBhZHZhbnRhZ2UsIHNpbmNlIG9ubHkgdGhlIGxhc3QgMzJLIG9mIG91dHB1dCBpcyBjb3BpZWQgdG8gdGhlIHNsaWRpbmcgd2luZG93CisgICB1cG9uIHJldHVybiBmcm9tIGluZmxhdGUoKSwgYW5kIHNpbmNlIGFsbCBkaXN0YW5jZXMgYWZ0ZXIgdGhlIGZpcnN0IDMySyBvZgorICAgb3V0cHV0IHdpbGwgZmFsbCBpbiB0aGUgb3V0cHV0IGRhdGEsIG1ha2luZyBtYXRjaCBjb3BpZXMgc2ltcGxlciBhbmQgZmFzdGVyLgorICAgVGhlIGFkdmFudGFnZSBtYXkgYmUgZGVwZW5kZW50IG9uIHRoZSBzaXplIG9mIHRoZSBwcm9jZXNzb3IncyBkYXRhIGNhY2hlcy4KKyAqLworbG9jYWwgaW50IHVwZGF0ZXdpbmRvdyhzdHJtLCBlbmQsIGNvcHkpCit6X3N0cmVhbXAgc3RybTsKK2NvbnN0IEJ5dGVmICplbmQ7Cit1bnNpZ25lZCBjb3B5OworeworICAgIHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqc3RhdGU7CisgICAgdW5zaWduZWQgZGlzdDsKKworICAgIHN0YXRlID0gKHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqKXN0cm0tPnN0YXRlOworCisgICAgLyogaWYgaXQgaGFzbid0IGJlZW4gZG9uZSBhbHJlYWR5LCBhbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIHdpbmRvdyAqLworICAgIGlmIChzdGF0ZS0+d2luZG93ID09IFpfTlVMTCkgeworICAgICAgICBzdGF0ZS0+d2luZG93ID0gKHVuc2lnbmVkIGNoYXIgRkFSICopCisgICAgICAgICAgICAgICAgICAgICAgICBaQUxMT0Moc3RybSwgMVUgPDwgc3RhdGUtPndiaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih1bnNpZ25lZCBjaGFyKSk7CisgICAgICAgIGlmIChzdGF0ZS0+d2luZG93ID09IFpfTlVMTCkgcmV0dXJuIDE7CisgICAgfQorCisgICAgLyogaWYgd2luZG93IG5vdCBpbiB1c2UgeWV0LCBpbml0aWFsaXplICovCisgICAgaWYgKHN0YXRlLT53c2l6ZSA9PSAwKSB7CisgICAgICAgIHN0YXRlLT53c2l6ZSA9IDFVIDw8IHN0YXRlLT53Yml0czsKKyAgICAgICAgc3RhdGUtPnduZXh0ID0gMDsKKyAgICAgICAgc3RhdGUtPndoYXZlID0gMDsKKyAgICB9CisKKyAgICAvKiBjb3B5IHN0YXRlLT53c2l6ZSBvciBsZXNzIG91dHB1dCBieXRlcyBpbnRvIHRoZSBjaXJjdWxhciB3aW5kb3cgKi8KKyAgICBpZiAoY29weSA+PSBzdGF0ZS0+d3NpemUpIHsKKyAgICAgICAgem1lbWNweShzdGF0ZS0+d2luZG93LCBlbmQgLSBzdGF0ZS0+d3NpemUsIHN0YXRlLT53c2l6ZSk7CisgICAgICAgIHN0YXRlLT53bmV4dCA9IDA7CisgICAgICAgIHN0YXRlLT53aGF2ZSA9IHN0YXRlLT53c2l6ZTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGRpc3QgPSBzdGF0ZS0+d3NpemUgLSBzdGF0ZS0+d25leHQ7CisgICAgICAgIGlmIChkaXN0ID4gY29weSkgZGlzdCA9IGNvcHk7CisgICAgICAgIHptZW1jcHkoc3RhdGUtPndpbmRvdyArIHN0YXRlLT53bmV4dCwgZW5kIC0gY29weSwgZGlzdCk7CisgICAgICAgIGNvcHkgLT0gZGlzdDsKKyAgICAgICAgaWYgKGNvcHkpIHsKKyAgICAgICAgICAgIHptZW1jcHkoc3RhdGUtPndpbmRvdywgZW5kIC0gY29weSwgY29weSk7CisgICAgICAgICAgICBzdGF0ZS0+d25leHQgPSBjb3B5OworICAgICAgICAgICAgc3RhdGUtPndoYXZlID0gc3RhdGUtPndzaXplOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc3RhdGUtPnduZXh0ICs9IGRpc3Q7CisgICAgICAgICAgICBpZiAoc3RhdGUtPnduZXh0ID09IHN0YXRlLT53c2l6ZSkgc3RhdGUtPnduZXh0ID0gMDsKKyAgICAgICAgICAgIGlmIChzdGF0ZS0+d2hhdmUgPCBzdGF0ZS0+d3NpemUpIHN0YXRlLT53aGF2ZSArPSBkaXN0OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorCisvKiBNYWNyb3MgZm9yIGluZmxhdGUoKTogKi8KKworLyogY2hlY2sgZnVuY3Rpb24gdG8gdXNlIGFkbGVyMzIoKSBmb3IgemxpYiBvciBjcmMzMigpIGZvciBnemlwICovCisjaWZkZWYgR1VOWklQCisjICBkZWZpbmUgVVBEQVRFX0NIRUNLKGNoZWNrLCBidWYsIGxlbikgXAorICAgIChzdGF0ZS0+ZmxhZ3MgPyBjcmMzMihjaGVjaywgYnVmLCBsZW4pIDogYWRsZXIzMihjaGVjaywgYnVmLCBsZW4pKQorI2Vsc2UKKyMgIGRlZmluZSBVUERBVEVfQ0hFQ0soY2hlY2ssIGJ1ZiwgbGVuKSBhZGxlcjMyKGNoZWNrLCBidWYsIGxlbikKKyNlbmRpZgorCisvKiBjaGVjayBtYWNyb3MgZm9yIGhlYWRlciBjcmMgKi8KKyNpZmRlZiBHVU5aSVAKKyMgIGRlZmluZSBDUkMyKGNoZWNrLCB3b3JkKSBcCisgICAgZG8geyBcCisgICAgICAgIGhidWZbMF0gPSAodW5zaWduZWQgY2hhcikod29yZCk7IFwKKyAgICAgICAgaGJ1ZlsxXSA9ICh1bnNpZ25lZCBjaGFyKSgod29yZCkgPj4gOCk7IFwKKyAgICAgICAgY2hlY2sgPSBjcmMzMihjaGVjaywgaGJ1ZiwgMik7IFwKKyAgICB9IHdoaWxlICgwKQorCisjICBkZWZpbmUgQ1JDNChjaGVjaywgd29yZCkgXAorICAgIGRvIHsgXAorICAgICAgICBoYnVmWzBdID0gKHVuc2lnbmVkIGNoYXIpKHdvcmQpOyBcCisgICAgICAgIGhidWZbMV0gPSAodW5zaWduZWQgY2hhcikoKHdvcmQpID4+IDgpOyBcCisgICAgICAgIGhidWZbMl0gPSAodW5zaWduZWQgY2hhcikoKHdvcmQpID4+IDE2KTsgXAorICAgICAgICBoYnVmWzNdID0gKHVuc2lnbmVkIGNoYXIpKCh3b3JkKSA+PiAyNCk7IFwKKyAgICAgICAgY2hlY2sgPSBjcmMzMihjaGVjaywgaGJ1ZiwgNCk7IFwKKyAgICB9IHdoaWxlICgwKQorI2VuZGlmCisKKy8qIExvYWQgcmVnaXN0ZXJzIHdpdGggc3RhdGUgaW4gaW5mbGF0ZSgpIGZvciBzcGVlZCAqLworI2RlZmluZSBMT0FEKCkgXAorICAgIGRvIHsgXAorICAgICAgICBwdXQgPSBzdHJtLT5uZXh0X291dDsgXAorICAgICAgICBsZWZ0ID0gc3RybS0+YXZhaWxfb3V0OyBcCisgICAgICAgIG5leHQgPSBzdHJtLT5uZXh0X2luOyBcCisgICAgICAgIGhhdmUgPSBzdHJtLT5hdmFpbF9pbjsgXAorICAgICAgICBob2xkID0gc3RhdGUtPmhvbGQ7IFwKKyAgICAgICAgYml0cyA9IHN0YXRlLT5iaXRzOyBcCisgICAgfSB3aGlsZSAoMCkKKworLyogUmVzdG9yZSBzdGF0ZSBmcm9tIHJlZ2lzdGVycyBpbiBpbmZsYXRlKCkgKi8KKyNkZWZpbmUgUkVTVE9SRSgpIFwKKyAgICBkbyB7IFwKKyAgICAgICAgc3RybS0+bmV4dF9vdXQgPSBwdXQ7IFwKKyAgICAgICAgc3RybS0+YXZhaWxfb3V0ID0gbGVmdDsgXAorICAgICAgICBzdHJtLT5uZXh0X2luID0gbmV4dDsgXAorICAgICAgICBzdHJtLT5hdmFpbF9pbiA9IGhhdmU7IFwKKyAgICAgICAgc3RhdGUtPmhvbGQgPSBob2xkOyBcCisgICAgICAgIHN0YXRlLT5iaXRzID0gYml0czsgXAorICAgIH0gd2hpbGUgKDApCisKKy8qIENsZWFyIHRoZSBpbnB1dCBiaXQgYWNjdW11bGF0b3IgKi8KKyNkZWZpbmUgSU5JVEJJVFMoKSBcCisgICAgZG8geyBcCisgICAgICAgIGhvbGQgPSAwOyBcCisgICAgICAgIGJpdHMgPSAwOyBcCisgICAgfSB3aGlsZSAoMCkKKworLyogR2V0IGEgYnl0ZSBvZiBpbnB1dCBpbnRvIHRoZSBiaXQgYWNjdW11bGF0b3IsIG9yIHJldHVybiBmcm9tIGluZmxhdGUoKQorICAgaWYgdGhlcmUgaXMgbm8gaW5wdXQgYXZhaWxhYmxlLiAqLworI2RlZmluZSBQVUxMQllURSgpIFwKKyAgICBkbyB7IFwKKyAgICAgICAgaWYgKGhhdmUgPT0gMCkgZ290byBpbmZfbGVhdmU7IFwKKyAgICAgICAgaGF2ZS0tOyBcCisgICAgICAgIGhvbGQgKz0gKHVuc2lnbmVkIGxvbmcpKCpuZXh0KyspIDw8IGJpdHM7IFwKKyAgICAgICAgYml0cyArPSA4OyBcCisgICAgfSB3aGlsZSAoMCkKKworLyogQXNzdXJlIHRoYXQgdGhlcmUgYXJlIGF0IGxlYXN0IG4gYml0cyBpbiB0aGUgYml0IGFjY3VtdWxhdG9yLiAgSWYgdGhlcmUgaXMKKyAgIG5vdCBlbm91Z2ggYXZhaWxhYmxlIGlucHV0IHRvIGRvIHRoYXQsIHRoZW4gcmV0dXJuIGZyb20gaW5mbGF0ZSgpLiAqLworI2RlZmluZSBORUVEQklUUyhuKSBcCisgICAgZG8geyBcCisgICAgICAgIHdoaWxlIChiaXRzIDwgKHVuc2lnbmVkKShuKSkgXAorICAgICAgICAgICAgUFVMTEJZVEUoKTsgXAorICAgIH0gd2hpbGUgKDApCisKKy8qIFJldHVybiB0aGUgbG93IG4gYml0cyBvZiB0aGUgYml0IGFjY3VtdWxhdG9yIChuIDwgMTYpICovCisjZGVmaW5lIEJJVFMobikgXAorICAgICgodW5zaWduZWQpaG9sZCAmICgoMVUgPDwgKG4pKSAtIDEpKQorCisvKiBSZW1vdmUgbiBiaXRzIGZyb20gdGhlIGJpdCBhY2N1bXVsYXRvciAqLworI2RlZmluZSBEUk9QQklUUyhuKSBcCisgICAgZG8geyBcCisgICAgICAgIGhvbGQgPj49IChuKTsgXAorICAgICAgICBiaXRzIC09ICh1bnNpZ25lZCkobik7IFwKKyAgICB9IHdoaWxlICgwKQorCisvKiBSZW1vdmUgemVybyB0byBzZXZlbiBiaXRzIGFzIG5lZWRlZCB0byBnbyB0byBhIGJ5dGUgYm91bmRhcnkgKi8KKyNkZWZpbmUgQllURUJJVFMoKSBcCisgICAgZG8geyBcCisgICAgICAgIGhvbGQgPj49IGJpdHMgJiA3OyBcCisgICAgICAgIGJpdHMgLT0gYml0cyAmIDc7IFwKKyAgICB9IHdoaWxlICgwKQorCisvKgorICAgaW5mbGF0ZSgpIHVzZXMgYSBzdGF0ZSBtYWNoaW5lIHRvIHByb2Nlc3MgYXMgbXVjaCBpbnB1dCBkYXRhIGFuZCBnZW5lcmF0ZSBhcworICAgbXVjaCBvdXRwdXQgZGF0YSBhcyBwb3NzaWJsZSBiZWZvcmUgcmV0dXJuaW5nLiAgVGhlIHN0YXRlIG1hY2hpbmUgaXMKKyAgIHN0cnVjdHVyZWQgcm91Z2hseSBhcyBmb2xsb3dzOgorCisgICAgZm9yICg7Oykgc3dpdGNoIChzdGF0ZSkgeworICAgIC4uLgorICAgIGNhc2UgU1RBVEVuOgorICAgICAgICBpZiAobm90IGVub3VnaCBpbnB1dCBkYXRhIG9yIG91dHB1dCBzcGFjZSB0byBtYWtlIHByb2dyZXNzKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAuLi4gbWFrZSBwcm9ncmVzcyAuLi4KKyAgICAgICAgc3RhdGUgPSBTVEFURW07CisgICAgICAgIGJyZWFrOworICAgIC4uLgorICAgIH0KKworICAgc28gd2hlbiBpbmZsYXRlKCkgaXMgY2FsbGVkIGFnYWluLCB0aGUgc2FtZSBjYXNlIGlzIGF0dGVtcHRlZCBhZ2FpbiwgYW5kCisgICBpZiB0aGUgYXBwcm9wcmlhdGUgcmVzb3VyY2VzIGFyZSBwcm92aWRlZCwgdGhlIG1hY2hpbmUgcHJvY2VlZHMgdG8gdGhlCisgICBuZXh0IHN0YXRlLiAgVGhlIE5FRURCSVRTKCkgbWFjcm8gaXMgdXN1YWxseSB0aGUgd2F5IHRoZSBzdGF0ZSBldmFsdWF0ZXMKKyAgIHdoZXRoZXIgaXQgY2FuIHByb2NlZWQgb3Igc2hvdWxkIHJldHVybi4gIE5FRURCSVRTKCkgZG9lcyB0aGUgcmV0dXJuIGlmCisgICB0aGUgcmVxdWVzdGVkIGJpdHMgYXJlIG5vdCBhdmFpbGFibGUuICBUaGUgdHlwaWNhbCB1c2Ugb2YgdGhlIEJJVFMgbWFjcm9zCisgICBpczoKKworICAgICAgICBORUVEQklUUyhuKTsKKyAgICAgICAgLi4uIGRvIHNvbWV0aGluZyB3aXRoIEJJVFMobikgLi4uCisgICAgICAgIERST1BCSVRTKG4pOworCisgICB3aGVyZSBORUVEQklUUyhuKSBlaXRoZXIgcmV0dXJucyBmcm9tIGluZmxhdGUoKSBpZiB0aGVyZSBpc24ndCBlbm91Z2gKKyAgIGlucHV0IGxlZnQgdG8gbG9hZCBuIGJpdHMgaW50byB0aGUgYWNjdW11bGF0b3IsIG9yIGl0IGNvbnRpbnVlcy4gIEJJVFMobikKKyAgIGdpdmVzIHRoZSBsb3cgbiBiaXRzIGluIHRoZSBhY2N1bXVsYXRvci4gIFdoZW4gZG9uZSwgRFJPUEJJVFMobikgZHJvcHMKKyAgIHRoZSBsb3cgbiBiaXRzIG9mZiB0aGUgYWNjdW11bGF0b3IuICBJTklUQklUUygpIGNsZWFycyB0aGUgYWNjdW11bGF0b3IKKyAgIGFuZCBzZXRzIHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIGJpdHMgdG8gemVyby4gIEJZVEVCSVRTKCkgZGlzY2FyZHMganVzdAorICAgZW5vdWdoIGJpdHMgdG8gcHV0IHRoZSBhY2N1bXVsYXRvciBvbiBhIGJ5dGUgYm91bmRhcnkuICBBZnRlciBCWVRFQklUUygpCisgICBhbmQgYSBORUVEQklUUyg4KSwgdGhlbiBCSVRTKDgpIHdvdWxkIHJldHVybiB0aGUgbmV4dCBieXRlIGluIHRoZSBzdHJlYW0uCisKKyAgIE5FRURCSVRTKG4pIHVzZXMgUFVMTEJZVEUoKSB0byBnZXQgYW4gYXZhaWxhYmxlIGJ5dGUgb2YgaW5wdXQsIG9yIHRvIHJldHVybgorICAgaWYgdGhlcmUgaXMgbm8gaW5wdXQgYXZhaWxhYmxlLiAgVGhlIGRlY29kaW5nIG9mIHZhcmlhYmxlIGxlbmd0aCBjb2RlcyB1c2VzCisgICBQVUxMQllURSgpIGRpcmVjdGx5IGluIG9yZGVyIHRvIHB1bGwganVzdCBlbm91Z2ggYnl0ZXMgdG8gZGVjb2RlIHRoZSBuZXh0CisgICBjb2RlLCBhbmQgbm8gbW9yZS4KKworICAgU29tZSBzdGF0ZXMgbG9vcCB1bnRpbCB0aGV5IGdldCBlbm91Z2ggaW5wdXQsIG1ha2luZyBzdXJlIHRoYXQgZW5vdWdoCisgICBzdGF0ZSBpbmZvcm1hdGlvbiBpcyBtYWludGFpbmVkIHRvIGNvbnRpbnVlIHRoZSBsb29wIHdoZXJlIGl0IGxlZnQgb2ZmCisgICBpZiBORUVEQklUUygpIHJldHVybnMgaW4gdGhlIGxvb3AuICBGb3IgZXhhbXBsZSwgd2FudCwgbmVlZCwgYW5kIGtlZXAKKyAgIHdvdWxkIGFsbCBoYXZlIHRvIGFjdHVhbGx5IGJlIHBhcnQgb2YgdGhlIHNhdmVkIHN0YXRlIGluIGNhc2UgTkVFREJJVFMoKQorICAgcmV0dXJuczoKKworICAgIGNhc2UgU1RBVEV3OgorICAgICAgICB3aGlsZSAod2FudCA8IG5lZWQpIHsKKyAgICAgICAgICAgIE5FRURCSVRTKG4pOworICAgICAgICAgICAga2VlcFt3YW50KytdID0gQklUUyhuKTsKKyAgICAgICAgICAgIERST1BCSVRTKG4pOworICAgICAgICB9CisgICAgICAgIHN0YXRlID0gU1RBVEV4OworICAgIGNhc2UgU1RBVEV4OgorCisgICBBcyBzaG93biBhYm92ZSwgaWYgdGhlIG5leHQgc3RhdGUgaXMgYWxzbyB0aGUgbmV4dCBjYXNlLCB0aGVuIHRoZSBicmVhaworICAgaXMgb21pdHRlZC4KKworICAgQSBzdGF0ZSBtYXkgYWxzbyByZXR1cm4gaWYgdGhlcmUgaXMgbm90IGVub3VnaCBvdXRwdXQgc3BhY2UgYXZhaWxhYmxlIHRvCisgICBjb21wbGV0ZSB0aGF0IHN0YXRlLiAgVGhvc2Ugc3RhdGVzIGFyZSBjb3B5aW5nIHN0b3JlZCBkYXRhLCB3cml0aW5nIGEKKyAgIGxpdGVyYWwgYnl0ZSwgYW5kIGNvcHlpbmcgYSBtYXRjaGluZyBzdHJpbmcuCisKKyAgIFdoZW4gcmV0dXJuaW5nLCBhICJnb3RvIGluZl9sZWF2ZSIgaXMgdXNlZCB0byB1cGRhdGUgdGhlIHRvdGFsIGNvdW50ZXJzLAorICAgdXBkYXRlIHRoZSBjaGVjayB2YWx1ZSwgYW5kIGRldGVybWluZSB3aGV0aGVyIGFueSBwcm9ncmVzcyBoYXMgYmVlbiBtYWRlCisgICBkdXJpbmcgdGhhdCBpbmZsYXRlKCkgY2FsbCBpbiBvcmRlciB0byByZXR1cm4gdGhlIHByb3BlciByZXR1cm4gY29kZS4KKyAgIFByb2dyZXNzIGlzIGRlZmluZWQgYXMgYSBjaGFuZ2UgaW4gZWl0aGVyIHN0cm0tPmF2YWlsX2luIG9yIHN0cm0tPmF2YWlsX291dC4KKyAgIFdoZW4gdGhlcmUgaXMgYSB3aW5kb3csIGdvdG8gaW5mX2xlYXZlIHdpbGwgdXBkYXRlIHRoZSB3aW5kb3cgd2l0aCB0aGUgbGFzdAorICAgb3V0cHV0IHdyaXR0ZW4uICBJZiBhIGdvdG8gaW5mX2xlYXZlIG9jY3VycyBpbiB0aGUgbWlkZGxlIG9mIGRlY29tcHJlc3Npb24KKyAgIGFuZCB0aGVyZSBpcyBubyB3aW5kb3cgY3VycmVudGx5LCBnb3RvIGluZl9sZWF2ZSB3aWxsIGNyZWF0ZSBvbmUgYW5kIGNvcHkKKyAgIG91dHB1dCB0byB0aGUgd2luZG93IGZvciB0aGUgbmV4dCBjYWxsIG9mIGluZmxhdGUoKS4KKworICAgSW4gdGhpcyBpbXBsZW1lbnRhdGlvbiwgdGhlIGZsdXNoIHBhcmFtZXRlciBvZiBpbmZsYXRlKCkgb25seSBhZmZlY3RzIHRoZQorICAgcmV0dXJuIGNvZGUgKHBlciB6bGliLmgpLiAgaW5mbGF0ZSgpIGFsd2F5cyB3cml0ZXMgYXMgbXVjaCBhcyBwb3NzaWJsZSB0bworICAgc3RybS0+bmV4dF9vdXQsIGdpdmVuIHRoZSBzcGFjZSBhdmFpbGFibGUgYW5kIHRoZSBwcm92aWRlZCBpbnB1dC0tdGhlIGVmZmVjdAorICAgZG9jdW1lbnRlZCBpbiB6bGliLmggb2YgWl9TWU5DX0ZMVVNILiAgRnVydGhlcm1vcmUsIGluZmxhdGUoKSBhbHdheXMgZGVmZXJzCisgICB0aGUgYWxsb2NhdGlvbiBvZiBhbmQgY29weWluZyBpbnRvIGEgc2xpZGluZyB3aW5kb3cgdW50aWwgbmVjZXNzYXJ5LCB3aGljaAorICAgcHJvdmlkZXMgdGhlIGVmZmVjdCBkb2N1bWVudGVkIGluIHpsaWIuaCBmb3IgWl9GSU5JU0ggd2hlbiB0aGUgZW50aXJlIGlucHV0CisgICBzdHJlYW0gYXZhaWxhYmxlLiAgU28gdGhlIG9ubHkgdGhpbmcgdGhlIGZsdXNoIHBhcmFtZXRlciBhY3R1YWxseSBkb2VzIGlzOgorICAgd2hlbiBmbHVzaCBpcyBzZXQgdG8gWl9GSU5JU0gsIGluZmxhdGUoKSBjYW5ub3QgcmV0dXJuIFpfT0suICBJbnN0ZWFkIGl0CisgICB3aWxsIHJldHVybiBaX0JVRl9FUlJPUiBpZiBpdCBoYXMgbm90IHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgc3RyZWFtLgorICovCisKK2ludCBaRVhQT1JUIGluZmxhdGUoc3RybSwgZmx1c2gpCit6X3N0cmVhbXAgc3RybTsKK2ludCBmbHVzaDsKK3sKKyAgICBzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRlOworICAgIHpfY29uc3QgdW5zaWduZWQgY2hhciBGQVIgKm5leHQ7ICAgIC8qIG5leHQgaW5wdXQgKi8KKyAgICB1bnNpZ25lZCBjaGFyIEZBUiAqcHV0OyAgICAgLyogbmV4dCBvdXRwdXQgKi8KKyAgICB1bnNpZ25lZCBoYXZlLCBsZWZ0OyAgICAgICAgLyogYXZhaWxhYmxlIGlucHV0IGFuZCBvdXRwdXQgKi8KKyAgICB1bnNpZ25lZCBsb25nIGhvbGQ7ICAgICAgICAgLyogYml0IGJ1ZmZlciAqLworICAgIHVuc2lnbmVkIGJpdHM7ICAgICAgICAgICAgICAvKiBiaXRzIGluIGJpdCBidWZmZXIgKi8KKyAgICB1bnNpZ25lZCBpbiwgb3V0OyAgICAgICAgICAgLyogc2F2ZSBzdGFydGluZyBhdmFpbGFibGUgaW5wdXQgYW5kIG91dHB1dCAqLworICAgIHVuc2lnbmVkIGNvcHk7ICAgICAgICAgICAgICAvKiBudW1iZXIgb2Ygc3RvcmVkIG9yIG1hdGNoIGJ5dGVzIHRvIGNvcHkgKi8KKyAgICB1bnNpZ25lZCBjaGFyIEZBUiAqZnJvbTsgICAgLyogd2hlcmUgdG8gY29weSBtYXRjaCBieXRlcyBmcm9tICovCisgICAgY29kZSBoZXJlOyAgICAgICAgICAgICAgICAgIC8qIGN1cnJlbnQgZGVjb2RpbmcgdGFibGUgZW50cnkgKi8KKyAgICBjb2RlIGxhc3Q7ICAgICAgICAgICAgICAgICAgLyogcGFyZW50IHRhYmxlIGVudHJ5ICovCisgICAgdW5zaWduZWQgbGVuOyAgICAgICAgICAgICAgIC8qIGxlbmd0aCB0byBjb3B5IGZvciByZXBlYXRzLCBiaXRzIHRvIGRyb3AgKi8KKyAgICBpbnQgcmV0OyAgICAgICAgICAgICAgICAgICAgLyogcmV0dXJuIGNvZGUgKi8KKyNpZmRlZiBHVU5aSVAKKyAgICB1bnNpZ25lZCBjaGFyIGhidWZbNF07ICAgICAgLyogYnVmZmVyIGZvciBnemlwIGhlYWRlciBjcmMgY2FsY3VsYXRpb24gKi8KKyNlbmRpZgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBvcmRlclsxOV0gPSAvKiBwZXJtdXRhdGlvbiBvZiBjb2RlIGxlbmd0aHMgKi8KKyAgICAgICAgezE2LCAxNywgMTgsIDAsIDgsIDcsIDksIDYsIDEwLCA1LCAxMSwgNCwgMTIsIDMsIDEzLCAyLCAxNCwgMSwgMTV9OworCisgICAgaWYgKGluZmxhdGVTdGF0ZUNoZWNrKHN0cm0pIHx8IHN0cm0tPm5leHRfb3V0ID09IFpfTlVMTCB8fAorICAgICAgICAoc3RybS0+bmV4dF9pbiA9PSBaX05VTEwgJiYgc3RybS0+YXZhaWxfaW4gIT0gMCkpCisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKworICAgIHN0YXRlID0gKHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqKXN0cm0tPnN0YXRlOworICAgIGlmIChzdGF0ZS0+bW9kZSA9PSBUWVBFKSBzdGF0ZS0+bW9kZSA9IFRZUEVETzsgICAgICAvKiBza2lwIGNoZWNrICovCisgICAgTE9BRCgpOworICAgIGluID0gaGF2ZTsKKyAgICBvdXQgPSBsZWZ0OworICAgIHJldCA9IFpfT0s7CisgICAgZm9yICg7OykKKyAgICAgICAgc3dpdGNoIChzdGF0ZS0+bW9kZSkgeworICAgICAgICBjYXNlIEhFQUQ6CisgICAgICAgICAgICBpZiAoc3RhdGUtPndyYXAgPT0gMCkgeworICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gVFlQRURPOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgTkVFREJJVFMoMTYpOworI2lmZGVmIEdVTlpJUAorICAgICAgICAgICAgaWYgKChzdGF0ZS0+d3JhcCAmIDIpICYmIGhvbGQgPT0gMHg4YjFmKSB7ICAvKiBnemlwIGhlYWRlciAqLworICAgICAgICAgICAgICAgIGlmIChzdGF0ZS0+d2JpdHMgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUtPndiaXRzID0gMTU7CisgICAgICAgICAgICAgICAgc3RhdGUtPmNoZWNrID0gY3JjMzIoMEwsIFpfTlVMTCwgMCk7CisgICAgICAgICAgICAgICAgQ1JDMihzdGF0ZS0+Y2hlY2ssIGhvbGQpOworICAgICAgICAgICAgICAgIElOSVRCSVRTKCk7CisgICAgICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBGTEFHUzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzdGF0ZS0+aGVhZCAhPSBaX05VTEwpCisgICAgICAgICAgICAgICAgc3RhdGUtPmhlYWQtPmRvbmUgPSAtMTsKKyAgICAgICAgICAgIGlmICghKHN0YXRlLT53cmFwICYgMSkgfHwgICAvKiBjaGVjayBpZiB6bGliIGhlYWRlciBhbGxvd2VkICovCisjZWxzZQorICAgICAgICAgICAgaWYgKAorI2VuZGlmCisgICAgICAgICAgICAgICAgKChCSVRTKDgpIDw8IDgpICsgKGhvbGQgPj4gOCkpICUgMzEpIHsKKyAgICAgICAgICAgICAgICBzdHJtLT5tc2cgPSAoY2hhciAqKSJpbmNvcnJlY3QgaGVhZGVyIGNoZWNrIjsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IEJBRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChCSVRTKDQpICE9IFpfREVGTEFURUQpIHsKKyAgICAgICAgICAgICAgICBzdHJtLT5tc2cgPSAoY2hhciAqKSJ1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCI7CisgICAgICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBCQUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBEUk9QQklUUyg0KTsKKyAgICAgICAgICAgIGxlbiA9IEJJVFMoNCkgKyA4OworICAgICAgICAgICAgaWYgKHN0YXRlLT53Yml0cyA9PSAwKQorICAgICAgICAgICAgICAgIHN0YXRlLT53Yml0cyA9IGxlbjsKKyAgICAgICAgICAgIGlmIChsZW4gPiAxNSB8fCBsZW4gPiBzdGF0ZS0+d2JpdHMpIHsKKyAgICAgICAgICAgICAgICBzdHJtLT5tc2cgPSAoY2hhciAqKSJpbnZhbGlkIHdpbmRvdyBzaXplIjsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IEJBRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0YXRlLT5kbWF4ID0gMVUgPDwgbGVuOworICAgICAgICAgICAgc3RhdGUtPmZsYWdzID0gMDsgICAgICAgICAgICAgICAvKiBpbmRpY2F0ZSB6bGliIGhlYWRlciAqLworICAgICAgICAgICAgVHJhY2V2KChzdGRlcnIsICJpbmZsYXRlOiAgIHpsaWIgaGVhZGVyIG9rXG4iKSk7CisgICAgICAgICAgICBzdHJtLT5hZGxlciA9IHN0YXRlLT5jaGVjayA9IGFkbGVyMzIoMEwsIFpfTlVMTCwgMCk7CisgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IGhvbGQgJiAweDIwMCA/IERJQ1RJRCA6IFRZUEU7CisgICAgICAgICAgICBJTklUQklUUygpOworICAgICAgICAgICAgYnJlYWs7CisjaWZkZWYgR1VOWklQCisgICAgICAgIGNhc2UgRkxBR1M6CisgICAgICAgICAgICBORUVEQklUUygxNik7CisgICAgICAgICAgICBzdGF0ZS0+ZmxhZ3MgPSAoaW50KShob2xkKTsKKyAgICAgICAgICAgIGlmICgoc3RhdGUtPmZsYWdzICYgMHhmZikgIT0gWl9ERUZMQVRFRCkgeworICAgICAgICAgICAgICAgIHN0cm0tPm1zZyA9IChjaGFyICopInVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIjsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IEJBRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzdGF0ZS0+ZmxhZ3MgJiAweGUwMDApIHsKKyAgICAgICAgICAgICAgICBzdHJtLT5tc2cgPSAoY2hhciAqKSJ1bmtub3duIGhlYWRlciBmbGFncyBzZXQiOworICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gQkFEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHN0YXRlLT5oZWFkICE9IFpfTlVMTCkKKyAgICAgICAgICAgICAgICBzdGF0ZS0+aGVhZC0+dGV4dCA9IChpbnQpKChob2xkID4+IDgpICYgMSk7CisgICAgICAgICAgICBpZiAoKHN0YXRlLT5mbGFncyAmIDB4MDIwMCkgJiYgKHN0YXRlLT53cmFwICYgNCkpCisgICAgICAgICAgICAgICAgQ1JDMihzdGF0ZS0+Y2hlY2ssIGhvbGQpOworICAgICAgICAgICAgSU5JVEJJVFMoKTsKKyAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gVElNRTsKKyAgICAgICAgICAgICAgICAvKiBmYWxsdGhyb3VnaCAqLworICAgICAgICBjYXNlIFRJTUU6CisgICAgICAgICAgICBORUVEQklUUygzMik7CisgICAgICAgICAgICBpZiAoc3RhdGUtPmhlYWQgIT0gWl9OVUxMKQorICAgICAgICAgICAgICAgIHN0YXRlLT5oZWFkLT50aW1lID0gaG9sZDsKKyAgICAgICAgICAgIGlmICgoc3RhdGUtPmZsYWdzICYgMHgwMjAwKSAmJiAoc3RhdGUtPndyYXAgJiA0KSkKKyAgICAgICAgICAgICAgICBDUkM0KHN0YXRlLT5jaGVjaywgaG9sZCk7CisgICAgICAgICAgICBJTklUQklUUygpOworICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBPUzsKKyAgICAgICAgICAgICAgICAvKiBmYWxsdGhyb3VnaCAqLworICAgICAgICBjYXNlIE9TOgorICAgICAgICAgICAgTkVFREJJVFMoMTYpOworICAgICAgICAgICAgaWYgKHN0YXRlLT5oZWFkICE9IFpfTlVMTCkgeworICAgICAgICAgICAgICAgIHN0YXRlLT5oZWFkLT54ZmxhZ3MgPSAoaW50KShob2xkICYgMHhmZik7CisgICAgICAgICAgICAgICAgc3RhdGUtPmhlYWQtPm9zID0gKGludCkoaG9sZCA+PiA4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgoc3RhdGUtPmZsYWdzICYgMHgwMjAwKSAmJiAoc3RhdGUtPndyYXAgJiA0KSkKKyAgICAgICAgICAgICAgICBDUkMyKHN0YXRlLT5jaGVjaywgaG9sZCk7CisgICAgICAgICAgICBJTklUQklUUygpOworICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBFWExFTjsKKyAgICAgICAgICAgICAgICAvKiBmYWxsdGhyb3VnaCAqLworICAgICAgICBjYXNlIEVYTEVOOgorICAgICAgICAgICAgaWYgKHN0YXRlLT5mbGFncyAmIDB4MDQwMCkgeworICAgICAgICAgICAgICAgIE5FRURCSVRTKDE2KTsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+bGVuZ3RoID0gKHVuc2lnbmVkKShob2xkKTsKKyAgICAgICAgICAgICAgICBpZiAoc3RhdGUtPmhlYWQgIT0gWl9OVUxMKQorICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+aGVhZC0+ZXh0cmFfbGVuID0gKHVuc2lnbmVkKWhvbGQ7CisgICAgICAgICAgICAgICAgaWYgKChzdGF0ZS0+ZmxhZ3MgJiAweDAyMDApICYmIChzdGF0ZS0+d3JhcCAmIDQpKQorICAgICAgICAgICAgICAgICAgICBDUkMyKHN0YXRlLT5jaGVjaywgaG9sZCk7CisgICAgICAgICAgICAgICAgSU5JVEJJVFMoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHN0YXRlLT5oZWFkICE9IFpfTlVMTCkKKyAgICAgICAgICAgICAgICBzdGF0ZS0+aGVhZC0+ZXh0cmEgPSBaX05VTEw7CisgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IEVYVFJBOworICAgICAgICAgICAgICAgIC8qIGZhbGx0aHJvdWdoICovCisgICAgICAgIGNhc2UgRVhUUkE6CisgICAgICAgICAgICBpZiAoc3RhdGUtPmZsYWdzICYgMHgwNDAwKSB7CisgICAgICAgICAgICAgICAgY29weSA9IHN0YXRlLT5sZW5ndGg7CisgICAgICAgICAgICAgICAgaWYgKGNvcHkgPiBoYXZlKSBjb3B5ID0gaGF2ZTsKKyAgICAgICAgICAgICAgICBpZiAoY29weSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUtPmhlYWQgIT0gWl9OVUxMICYmCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+aGVhZC0+ZXh0cmEgIT0gWl9OVUxMKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsZW4gPSBzdGF0ZS0+aGVhZC0+ZXh0cmFfbGVuIC0gc3RhdGUtPmxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHptZW1jcHkoc3RhdGUtPmhlYWQtPmV4dHJhICsgbGVuLCBuZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4gKyBjb3B5ID4gc3RhdGUtPmhlYWQtPmV4dHJhX21heCA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5oZWFkLT5leHRyYV9tYXggLSBsZW4gOiBjb3B5KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoKHN0YXRlLT5mbGFncyAmIDB4MDIwMCkgJiYgKHN0YXRlLT53cmFwICYgNCkpCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+Y2hlY2sgPSBjcmMzMihzdGF0ZS0+Y2hlY2ssIG5leHQsIGNvcHkpOworICAgICAgICAgICAgICAgICAgICBoYXZlIC09IGNvcHk7CisgICAgICAgICAgICAgICAgICAgIG5leHQgKz0gY29weTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmxlbmd0aCAtPSBjb3B5OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoc3RhdGUtPmxlbmd0aCkgZ290byBpbmZfbGVhdmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdGF0ZS0+bGVuZ3RoID0gMDsKKyAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gTkFNRTsKKyAgICAgICAgICAgICAgICAvKiBmYWxsdGhyb3VnaCAqLworICAgICAgICBjYXNlIE5BTUU6CisgICAgICAgICAgICBpZiAoc3RhdGUtPmZsYWdzICYgMHgwODAwKSB7CisgICAgICAgICAgICAgICAgaWYgKGhhdmUgPT0gMCkgZ290byBpbmZfbGVhdmU7CisgICAgICAgICAgICAgICAgY29weSA9IDA7CisgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICAgICBsZW4gPSAodW5zaWduZWQpKG5leHRbY29weSsrXSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS0+aGVhZCAhPSBaX05VTEwgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+aGVhZC0+bmFtZSAhPSBaX05VTEwgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+bGVuZ3RoIDwgc3RhdGUtPmhlYWQtPm5hbWVfbWF4KQorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmhlYWQtPm5hbWVbc3RhdGUtPmxlbmd0aCsrXSA9IChCeXRlZilsZW47CisgICAgICAgICAgICAgICAgfSB3aGlsZSAobGVuICYmIGNvcHkgPCBoYXZlKTsKKyAgICAgICAgICAgICAgICBpZiAoKHN0YXRlLT5mbGFncyAmIDB4MDIwMCkgJiYgKHN0YXRlLT53cmFwICYgNCkpCisgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5jaGVjayA9IGNyYzMyKHN0YXRlLT5jaGVjaywgbmV4dCwgY29weSk7CisgICAgICAgICAgICAgICAgaGF2ZSAtPSBjb3B5OworICAgICAgICAgICAgICAgIG5leHQgKz0gY29weTsKKyAgICAgICAgICAgICAgICBpZiAobGVuKSBnb3RvIGluZl9sZWF2ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHN0YXRlLT5oZWFkICE9IFpfTlVMTCkKKyAgICAgICAgICAgICAgICBzdGF0ZS0+aGVhZC0+bmFtZSA9IFpfTlVMTDsKKyAgICAgICAgICAgIHN0YXRlLT5sZW5ndGggPSAwOworICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBDT01NRU5UOworICAgICAgICAgICAgICAgIC8qIGZhbGx0aHJvdWdoICovCisgICAgICAgIGNhc2UgQ09NTUVOVDoKKyAgICAgICAgICAgIGlmIChzdGF0ZS0+ZmxhZ3MgJiAweDEwMDApIHsKKyAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PSAwKSBnb3RvIGluZl9sZWF2ZTsKKyAgICAgICAgICAgICAgICBjb3B5ID0gMDsKKyAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgIGxlbiA9ICh1bnNpZ25lZCkobmV4dFtjb3B5KytdKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLT5oZWFkICE9IFpfTlVMTCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5oZWFkLT5jb21tZW50ICE9IFpfTlVMTCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5sZW5ndGggPCBzdGF0ZS0+aGVhZC0+Y29tbV9tYXgpCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+aGVhZC0+Y29tbWVudFtzdGF0ZS0+bGVuZ3RoKytdID0gKEJ5dGVmKWxlbjsKKyAgICAgICAgICAgICAgICB9IHdoaWxlIChsZW4gJiYgY29weSA8IGhhdmUpOworICAgICAgICAgICAgICAgIGlmICgoc3RhdGUtPmZsYWdzICYgMHgwMjAwKSAmJiAoc3RhdGUtPndyYXAgJiA0KSkKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmNoZWNrID0gY3JjMzIoc3RhdGUtPmNoZWNrLCBuZXh0LCBjb3B5KTsKKyAgICAgICAgICAgICAgICBoYXZlIC09IGNvcHk7CisgICAgICAgICAgICAgICAgbmV4dCArPSBjb3B5OworICAgICAgICAgICAgICAgIGlmIChsZW4pIGdvdG8gaW5mX2xlYXZlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoc3RhdGUtPmhlYWQgIT0gWl9OVUxMKQorICAgICAgICAgICAgICAgIHN0YXRlLT5oZWFkLT5jb21tZW50ID0gWl9OVUxMOworICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBIQ1JDOworICAgICAgICAgICAgICAgIC8qIGZhbGx0aHJvdWdoICovCisgICAgICAgIGNhc2UgSENSQzoKKyAgICAgICAgICAgIGlmIChzdGF0ZS0+ZmxhZ3MgJiAweDAyMDApIHsKKyAgICAgICAgICAgICAgICBORUVEQklUUygxNik7CisgICAgICAgICAgICAgICAgaWYgKChzdGF0ZS0+d3JhcCAmIDQpICYmIGhvbGQgIT0gKHN0YXRlLT5jaGVjayAmIDB4ZmZmZikpIHsKKyAgICAgICAgICAgICAgICAgICAgc3RybS0+bXNnID0gKGNoYXIgKikiaGVhZGVyIGNyYyBtaXNtYXRjaCI7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gQkFEOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgSU5JVEJJVFMoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzdGF0ZS0+aGVhZCAhPSBaX05VTEwpIHsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+aGVhZC0+aGNyYyA9IChpbnQpKChzdGF0ZS0+ZmxhZ3MgPj4gOSkgJiAxKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+aGVhZC0+ZG9uZSA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdHJtLT5hZGxlciA9IHN0YXRlLT5jaGVjayA9IGNyYzMyKDBMLCBaX05VTEwsIDApOworICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBUWVBFOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICAgICAgY2FzZSBESUNUSUQ6CisgICAgICAgICAgICBORUVEQklUUygzMik7CisgICAgICAgICAgICBzdHJtLT5hZGxlciA9IHN0YXRlLT5jaGVjayA9IFpTV0FQMzIoaG9sZCk7CisgICAgICAgICAgICBJTklUQklUUygpOworICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBESUNUOworICAgICAgICAgICAgICAgIC8qIGZhbGx0aHJvdWdoICovCisgICAgICAgIGNhc2UgRElDVDoKKyAgICAgICAgICAgIGlmIChzdGF0ZS0+aGF2ZWRpY3QgPT0gMCkgeworICAgICAgICAgICAgICAgIFJFU1RPUkUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gWl9ORUVEX0RJQ1Q7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdHJtLT5hZGxlciA9IHN0YXRlLT5jaGVjayA9IGFkbGVyMzIoMEwsIFpfTlVMTCwgMCk7CisgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IFRZUEU7CisgICAgICAgICAgICAgICAgLyogZmFsbHRocm91Z2ggKi8KKyAgICAgICAgY2FzZSBUWVBFOgorICAgICAgICAgICAgaWYgKGZsdXNoID09IFpfQkxPQ0sgfHwgZmx1c2ggPT0gWl9UUkVFUykgZ290byBpbmZfbGVhdmU7CisgICAgICAgICAgICAgICAgLyogZmFsbHRocm91Z2ggKi8KKyAgICAgICAgY2FzZSBUWVBFRE86CisgICAgICAgICAgICBpZiAoc3RhdGUtPmxhc3QpIHsKKyAgICAgICAgICAgICAgICBCWVRFQklUUygpOworICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gQ0hFQ0s7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBORUVEQklUUygzKTsKKyAgICAgICAgICAgIHN0YXRlLT5sYXN0ID0gQklUUygxKTsKKyAgICAgICAgICAgIERST1BCSVRTKDEpOworICAgICAgICAgICAgc3dpdGNoIChCSVRTKDIpKSB7CisgICAgICAgICAgICBjYXNlIDA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdG9yZWQgYmxvY2sgKi8KKyAgICAgICAgICAgICAgICBUcmFjZXYoKHN0ZGVyciwgImluZmxhdGU6ICAgICBzdG9yZWQgYmxvY2slc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5sYXN0ID8gIiAobGFzdCkiIDogIiIpKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IFNUT1JFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZpeGVkIGJsb2NrICovCisgICAgICAgICAgICAgICAgZml4ZWR0YWJsZXMoc3RhdGUpOworICAgICAgICAgICAgICAgIFRyYWNldigoc3RkZXJyLCAiaW5mbGF0ZTogICAgIGZpeGVkIGNvZGVzIGJsb2NrJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+bGFzdCA/ICIgKGxhc3QpIiA6ICIiKSk7CisgICAgICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBMRU5fOyAgICAgICAgICAgICAvKiBkZWNvZGUgY29kZXMgKi8KKyAgICAgICAgICAgICAgICBpZiAoZmx1c2ggPT0gWl9UUkVFUykgeworICAgICAgICAgICAgICAgICAgICBEUk9QQklUUygyKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBpbmZfbGVhdmU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZHluYW1pYyBibG9jayAqLworICAgICAgICAgICAgICAgIFRyYWNldigoc3RkZXJyLCAiaW5mbGF0ZTogICAgIGR5bmFtaWMgY29kZXMgYmxvY2slc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5sYXN0ID8gIiAobGFzdCkiIDogIiIpKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IFRBQkxFOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgIHN0cm0tPm1zZyA9IChjaGFyICopImludmFsaWQgYmxvY2sgdHlwZSI7CisgICAgICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBCQUQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBEUk9QQklUUygyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNUT1JFRDoKKyAgICAgICAgICAgIEJZVEVCSVRTKCk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGdvIHRvIGJ5dGUgYm91bmRhcnkgKi8KKyAgICAgICAgICAgIE5FRURCSVRTKDMyKTsKKyAgICAgICAgICAgIGlmICgoaG9sZCAmIDB4ZmZmZikgIT0gKChob2xkID4+IDE2KSBeIDB4ZmZmZikpIHsKKyAgICAgICAgICAgICAgICBzdHJtLT5tc2cgPSAoY2hhciAqKSJpbnZhbGlkIHN0b3JlZCBibG9jayBsZW5ndGhzIjsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IEJBRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0YXRlLT5sZW5ndGggPSAodW5zaWduZWQpaG9sZCAmIDB4ZmZmZjsKKyAgICAgICAgICAgIFRyYWNldigoc3RkZXJyLCAiaW5mbGF0ZTogICAgICAgc3RvcmVkIGxlbmd0aCAldVxuIiwKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmxlbmd0aCkpOworICAgICAgICAgICAgSU5JVEJJVFMoKTsKKyAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gQ09QWV87CisgICAgICAgICAgICBpZiAoZmx1c2ggPT0gWl9UUkVFUykgZ290byBpbmZfbGVhdmU7CisgICAgICAgICAgICAgICAgLyogZmFsbHRocm91Z2ggKi8KKyAgICAgICAgY2FzZSBDT1BZXzoKKyAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gQ09QWTsKKyAgICAgICAgICAgICAgICAvKiBmYWxsdGhyb3VnaCAqLworICAgICAgICBjYXNlIENPUFk6CisgICAgICAgICAgICBjb3B5ID0gc3RhdGUtPmxlbmd0aDsKKyAgICAgICAgICAgIGlmIChjb3B5KSB7CisgICAgICAgICAgICAgICAgaWYgKGNvcHkgPiBoYXZlKSBjb3B5ID0gaGF2ZTsKKyAgICAgICAgICAgICAgICBpZiAoY29weSA+IGxlZnQpIGNvcHkgPSBsZWZ0OworICAgICAgICAgICAgICAgIGlmIChjb3B5ID09IDApIGdvdG8gaW5mX2xlYXZlOworICAgICAgICAgICAgICAgIHptZW1jcHkocHV0LCBuZXh0LCBjb3B5KTsKKyAgICAgICAgICAgICAgICBoYXZlIC09IGNvcHk7CisgICAgICAgICAgICAgICAgbmV4dCArPSBjb3B5OworICAgICAgICAgICAgICAgIGxlZnQgLT0gY29weTsKKyAgICAgICAgICAgICAgICBwdXQgKz0gY29weTsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+bGVuZ3RoIC09IGNvcHk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBUcmFjZXYoKHN0ZGVyciwgImluZmxhdGU6ICAgICAgIHN0b3JlZCBlbmRcbiIpKTsKKyAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gVFlQRTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFRBQkxFOgorICAgICAgICAgICAgTkVFREJJVFMoMTQpOworICAgICAgICAgICAgc3RhdGUtPm5sZW4gPSBCSVRTKDUpICsgMjU3OworICAgICAgICAgICAgRFJPUEJJVFMoNSk7CisgICAgICAgICAgICBzdGF0ZS0+bmRpc3QgPSBCSVRTKDUpICsgMTsKKyAgICAgICAgICAgIERST1BCSVRTKDUpOworICAgICAgICAgICAgc3RhdGUtPm5jb2RlID0gQklUUyg0KSArIDQ7CisgICAgICAgICAgICBEUk9QQklUUyg0KTsKKyNpZm5kZWYgUEtaSVBfQlVHX1dPUktBUk9VTkQKKyAgICAgICAgICAgIGlmIChzdGF0ZS0+bmxlbiA+IDI4NiB8fCBzdGF0ZS0+bmRpc3QgPiAzMCkgeworICAgICAgICAgICAgICAgIHN0cm0tPm1zZyA9IChjaGFyICopInRvbyBtYW55IGxlbmd0aCBvciBkaXN0YW5jZSBzeW1ib2xzIjsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IEJBRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgVHJhY2V2KChzdGRlcnIsICJpbmZsYXRlOiAgICAgICB0YWJsZSBzaXplcyBva1xuIikpOworICAgICAgICAgICAgc3RhdGUtPmhhdmUgPSAwOworICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBMRU5MRU5TOworICAgICAgICAgICAgICAgIC8qIGZhbGx0aHJvdWdoICovCisgICAgICAgIGNhc2UgTEVOTEVOUzoKKyAgICAgICAgICAgIHdoaWxlIChzdGF0ZS0+aGF2ZSA8IHN0YXRlLT5uY29kZSkgeworICAgICAgICAgICAgICAgIE5FRURCSVRTKDMpOworICAgICAgICAgICAgICAgIHN0YXRlLT5sZW5zW29yZGVyW3N0YXRlLT5oYXZlKytdXSA9ICh1bnNpZ25lZCBzaG9ydClCSVRTKDMpOworICAgICAgICAgICAgICAgIERST1BCSVRTKDMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgd2hpbGUgKHN0YXRlLT5oYXZlIDwgMTkpCisgICAgICAgICAgICAgICAgc3RhdGUtPmxlbnNbb3JkZXJbc3RhdGUtPmhhdmUrK11dID0gMDsKKyAgICAgICAgICAgIHN0YXRlLT5uZXh0ID0gc3RhdGUtPmNvZGVzOworICAgICAgICAgICAgc3RhdGUtPmxlbmNvZGUgPSAoY29uc3QgY29kZSBGQVIgKikoc3RhdGUtPm5leHQpOworICAgICAgICAgICAgc3RhdGUtPmxlbmJpdHMgPSA3OworICAgICAgICAgICAgcmV0ID0gaW5mbGF0ZV90YWJsZShDT0RFUywgc3RhdGUtPmxlbnMsIDE5LCAmKHN0YXRlLT5uZXh0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihzdGF0ZS0+bGVuYml0cyksIHN0YXRlLT53b3JrKTsKKyAgICAgICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAgICAgICAgICBzdHJtLT5tc2cgPSAoY2hhciAqKSJpbnZhbGlkIGNvZGUgbGVuZ3RocyBzZXQiOworICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gQkFEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgVHJhY2V2KChzdGRlcnIsICJpbmZsYXRlOiAgICAgICBjb2RlIGxlbmd0aHMgb2tcbiIpKTsKKyAgICAgICAgICAgIHN0YXRlLT5oYXZlID0gMDsKKyAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gQ09ERUxFTlM7CisgICAgICAgICAgICAgICAgLyogZmFsbHRocm91Z2ggKi8KKyAgICAgICAgY2FzZSBDT0RFTEVOUzoKKyAgICAgICAgICAgIHdoaWxlIChzdGF0ZS0+aGF2ZSA8IHN0YXRlLT5ubGVuICsgc3RhdGUtPm5kaXN0KSB7CisgICAgICAgICAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgICAgICAgICBoZXJlID0gc3RhdGUtPmxlbmNvZGVbQklUUyhzdGF0ZS0+bGVuYml0cyldOworICAgICAgICAgICAgICAgICAgICBpZiAoKHVuc2lnbmVkKShoZXJlLmJpdHMpIDw9IGJpdHMpIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBQVUxMQllURSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoaGVyZS52YWwgPCAxNikgeworICAgICAgICAgICAgICAgICAgICBEUk9QQklUUyhoZXJlLmJpdHMpOworICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+bGVuc1tzdGF0ZS0+aGF2ZSsrXSA9IGhlcmUudmFsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGhlcmUudmFsID09IDE2KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBORUVEQklUUyhoZXJlLmJpdHMgKyAyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIERST1BCSVRTKGhlcmUuYml0cyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUtPmhhdmUgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm0tPm1zZyA9IChjaGFyICopImludmFsaWQgYml0IGxlbmd0aCByZXBlYXQiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gQkFEOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgbGVuID0gc3RhdGUtPmxlbnNbc3RhdGUtPmhhdmUgLSAxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvcHkgPSAzICsgQklUUygyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIERST1BCSVRTKDIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGhlcmUudmFsID09IDE3KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBORUVEQklUUyhoZXJlLmJpdHMgKyAzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIERST1BCSVRTKGhlcmUuYml0cyk7CisgICAgICAgICAgICAgICAgICAgICAgICBsZW4gPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgY29weSA9IDMgKyBCSVRTKDMpOworICAgICAgICAgICAgICAgICAgICAgICAgRFJPUEJJVFMoMyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBORUVEQklUUyhoZXJlLmJpdHMgKyA3KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIERST1BCSVRTKGhlcmUuYml0cyk7CisgICAgICAgICAgICAgICAgICAgICAgICBsZW4gPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgY29weSA9IDExICsgQklUUyg3KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIERST1BCSVRTKDcpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS0+aGF2ZSArIGNvcHkgPiBzdGF0ZS0+bmxlbiArIHN0YXRlLT5uZGlzdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RybS0+bXNnID0gKGNoYXIgKikiaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdCI7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IEJBRDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChjb3B5LS0pCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+bGVuc1tzdGF0ZS0+aGF2ZSsrXSA9ICh1bnNpZ25lZCBzaG9ydClsZW47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBoYW5kbGUgZXJyb3IgYnJlYWtzIGluIHdoaWxlICovCisgICAgICAgICAgICBpZiAoc3RhdGUtPm1vZGUgPT0gQkFEKSBicmVhazsKKworICAgICAgICAgICAgLyogY2hlY2sgZm9yIGVuZC1vZi1ibG9jayBjb2RlIChiZXR0ZXIgaGF2ZSBvbmUpICovCisgICAgICAgICAgICBpZiAoc3RhdGUtPmxlbnNbMjU2XSA9PSAwKSB7CisgICAgICAgICAgICAgICAgc3RybS0+bXNnID0gKGNoYXIgKikiaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrIjsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IEJBRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogYnVpbGQgY29kZSB0YWJsZXMgLS0gbm90ZTogZG8gbm90IGNoYW5nZSB0aGUgbGVuYml0cyBvciBkaXN0Yml0cworICAgICAgICAgICAgICAgdmFsdWVzIGhlcmUgKDkgYW5kIDYpIHdpdGhvdXQgcmVhZGluZyB0aGUgY29tbWVudHMgaW4gaW5mdHJlZXMuaAorICAgICAgICAgICAgICAgY29uY2VybmluZyB0aGUgRU5PVUdIIGNvbnN0YW50cywgd2hpY2ggZGVwZW5kIG9uIHRob3NlIHZhbHVlcyAqLworICAgICAgICAgICAgc3RhdGUtPm5leHQgPSBzdGF0ZS0+Y29kZXM7CisgICAgICAgICAgICBzdGF0ZS0+bGVuY29kZSA9IChjb25zdCBjb2RlIEZBUiAqKShzdGF0ZS0+bmV4dCk7CisgICAgICAgICAgICBzdGF0ZS0+bGVuYml0cyA9IDk7CisgICAgICAgICAgICByZXQgPSBpbmZsYXRlX3RhYmxlKExFTlMsIHN0YXRlLT5sZW5zLCBzdGF0ZS0+bmxlbiwgJihzdGF0ZS0+bmV4dCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYoc3RhdGUtPmxlbmJpdHMpLCBzdGF0ZS0+d29yayk7CisgICAgICAgICAgICBpZiAocmV0KSB7CisgICAgICAgICAgICAgICAgc3RybS0+bXNnID0gKGNoYXIgKikiaW52YWxpZCBsaXRlcmFsL2xlbmd0aHMgc2V0IjsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IEJBRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0YXRlLT5kaXN0Y29kZSA9IChjb25zdCBjb2RlIEZBUiAqKShzdGF0ZS0+bmV4dCk7CisgICAgICAgICAgICBzdGF0ZS0+ZGlzdGJpdHMgPSA2OworICAgICAgICAgICAgcmV0ID0gaW5mbGF0ZV90YWJsZShESVNUUywgc3RhdGUtPmxlbnMgKyBzdGF0ZS0+bmxlbiwgc3RhdGUtPm5kaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYoc3RhdGUtPm5leHQpLCAmKHN0YXRlLT5kaXN0Yml0cyksIHN0YXRlLT53b3JrKTsKKyAgICAgICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAgICAgICAgICBzdHJtLT5tc2cgPSAoY2hhciAqKSJpbnZhbGlkIGRpc3RhbmNlcyBzZXQiOworICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gQkFEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgVHJhY2V2KChzdGRlcnIsICJpbmZsYXRlOiAgICAgICBjb2RlcyBva1xuIikpOworICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBMRU5fOworICAgICAgICAgICAgaWYgKGZsdXNoID09IFpfVFJFRVMpIGdvdG8gaW5mX2xlYXZlOworICAgICAgICAgICAgICAgIC8qIGZhbGx0aHJvdWdoICovCisgICAgICAgIGNhc2UgTEVOXzoKKyAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gTEVOOworICAgICAgICAgICAgICAgIC8qIGZhbGx0aHJvdWdoICovCisgICAgICAgIGNhc2UgTEVOOgorICAgICAgICAgICAgaWYgKGhhdmUgPj0gNiAmJiBsZWZ0ID49IDI1OCkgeworICAgICAgICAgICAgICAgIFJFU1RPUkUoKTsKKyAgICAgICAgICAgICAgICBpbmZsYXRlX2Zhc3Qoc3RybSwgb3V0KTsKKyAgICAgICAgICAgICAgICBMT0FEKCk7CisgICAgICAgICAgICAgICAgaWYgKHN0YXRlLT5tb2RlID09IFRZUEUpCisgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5iYWNrID0gLTE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdGF0ZS0+YmFjayA9IDA7CisgICAgICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgICAgaGVyZSA9IHN0YXRlLT5sZW5jb2RlW0JJVFMoc3RhdGUtPmxlbmJpdHMpXTsKKyAgICAgICAgICAgICAgICBpZiAoKHVuc2lnbmVkKShoZXJlLmJpdHMpIDw9IGJpdHMpIGJyZWFrOworICAgICAgICAgICAgICAgIFBVTExCWVRFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaGVyZS5vcCAmJiAoaGVyZS5vcCAmIDB4ZjApID09IDApIHsKKyAgICAgICAgICAgICAgICBsYXN0ID0gaGVyZTsKKyAgICAgICAgICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgICAgICAgIGhlcmUgPSBzdGF0ZS0+bGVuY29kZVtsYXN0LnZhbCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJJVFMobGFzdC5iaXRzICsgbGFzdC5vcCkgPj4gbGFzdC5iaXRzKV07CisgICAgICAgICAgICAgICAgICAgIGlmICgodW5zaWduZWQpKGxhc3QuYml0cyArIGhlcmUuYml0cykgPD0gYml0cykgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIFBVTExCWVRFKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIERST1BCSVRTKGxhc3QuYml0cyk7CisgICAgICAgICAgICAgICAgc3RhdGUtPmJhY2sgKz0gbGFzdC5iaXRzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgRFJPUEJJVFMoaGVyZS5iaXRzKTsKKyAgICAgICAgICAgIHN0YXRlLT5iYWNrICs9IGhlcmUuYml0czsKKyAgICAgICAgICAgIHN0YXRlLT5sZW5ndGggPSAodW5zaWduZWQpaGVyZS52YWw7CisgICAgICAgICAgICBpZiAoKGludCkoaGVyZS5vcCkgPT0gMCkgeworICAgICAgICAgICAgICAgIFRyYWNldnYoKHN0ZGVyciwgaGVyZS52YWwgPj0gMHgyMCAmJiBoZXJlLnZhbCA8IDB4N2YgPworICAgICAgICAgICAgICAgICAgICAgICAgImluZmxhdGU6ICAgICAgICAgbGl0ZXJhbCAnJWMnXG4iIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICJpbmZsYXRlOiAgICAgICAgIGxpdGVyYWwgMHglMDJ4XG4iLCBoZXJlLnZhbCkpOworICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gTElUOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGhlcmUub3AgJiAzMikgeworICAgICAgICAgICAgICAgIFRyYWNldnYoKHN0ZGVyciwgImluZmxhdGU6ICAgICAgICAgZW5kIG9mIGJsb2NrXG4iKSk7CisgICAgICAgICAgICAgICAgc3RhdGUtPmJhY2sgPSAtMTsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IFRZUEU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaGVyZS5vcCAmIDY0KSB7CisgICAgICAgICAgICAgICAgc3RybS0+bXNnID0gKGNoYXIgKikiaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIjsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IEJBRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0YXRlLT5leHRyYSA9ICh1bnNpZ25lZCkoaGVyZS5vcCkgJiAxNTsKKyAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gTEVORVhUOworICAgICAgICAgICAgICAgIC8qIGZhbGx0aHJvdWdoICovCisgICAgICAgIGNhc2UgTEVORVhUOgorICAgICAgICAgICAgaWYgKHN0YXRlLT5leHRyYSkgeworICAgICAgICAgICAgICAgIE5FRURCSVRTKHN0YXRlLT5leHRyYSk7CisgICAgICAgICAgICAgICAgc3RhdGUtPmxlbmd0aCArPSBCSVRTKHN0YXRlLT5leHRyYSk7CisgICAgICAgICAgICAgICAgRFJPUEJJVFMoc3RhdGUtPmV4dHJhKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+YmFjayArPSBzdGF0ZS0+ZXh0cmE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBUcmFjZXZ2KChzdGRlcnIsICJpbmZsYXRlOiAgICAgICAgIGxlbmd0aCAldVxuIiwgc3RhdGUtPmxlbmd0aCkpOworICAgICAgICAgICAgc3RhdGUtPndhcyA9IHN0YXRlLT5sZW5ndGg7CisgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IERJU1Q7CisgICAgICAgICAgICAgICAgLyogZmFsbHRocm91Z2ggKi8KKyAgICAgICAgY2FzZSBESVNUOgorICAgICAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgICAgIGhlcmUgPSBzdGF0ZS0+ZGlzdGNvZGVbQklUUyhzdGF0ZS0+ZGlzdGJpdHMpXTsKKyAgICAgICAgICAgICAgICBpZiAoKHVuc2lnbmVkKShoZXJlLmJpdHMpIDw9IGJpdHMpIGJyZWFrOworICAgICAgICAgICAgICAgIFBVTExCWVRFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKGhlcmUub3AgJiAweGYwKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgbGFzdCA9IGhlcmU7CisgICAgICAgICAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgICAgICAgICBoZXJlID0gc3RhdGUtPmRpc3Rjb2RlW2xhc3QudmFsICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQklUUyhsYXN0LmJpdHMgKyBsYXN0Lm9wKSA+PiBsYXN0LmJpdHMpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCh1bnNpZ25lZCkobGFzdC5iaXRzICsgaGVyZS5iaXRzKSA8PSBiaXRzKSBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgUFVMTEJZVEUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgRFJPUEJJVFMobGFzdC5iaXRzKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+YmFjayArPSBsYXN0LmJpdHM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBEUk9QQklUUyhoZXJlLmJpdHMpOworICAgICAgICAgICAgc3RhdGUtPmJhY2sgKz0gaGVyZS5iaXRzOworICAgICAgICAgICAgaWYgKGhlcmUub3AgJiA2NCkgeworICAgICAgICAgICAgICAgIHN0cm0tPm1zZyA9IChjaGFyICopImludmFsaWQgZGlzdGFuY2UgY29kZSI7CisgICAgICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBCQUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdGF0ZS0+b2Zmc2V0ID0gKHVuc2lnbmVkKWhlcmUudmFsOworICAgICAgICAgICAgc3RhdGUtPmV4dHJhID0gKHVuc2lnbmVkKShoZXJlLm9wKSAmIDE1OworICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBESVNURVhUOworICAgICAgICAgICAgICAgIC8qIGZhbGx0aHJvdWdoICovCisgICAgICAgIGNhc2UgRElTVEVYVDoKKyAgICAgICAgICAgIGlmIChzdGF0ZS0+ZXh0cmEpIHsKKyAgICAgICAgICAgICAgICBORUVEQklUUyhzdGF0ZS0+ZXh0cmEpOworICAgICAgICAgICAgICAgIHN0YXRlLT5vZmZzZXQgKz0gQklUUyhzdGF0ZS0+ZXh0cmEpOworICAgICAgICAgICAgICAgIERST1BCSVRTKHN0YXRlLT5leHRyYSk7CisgICAgICAgICAgICAgICAgc3RhdGUtPmJhY2sgKz0gc3RhdGUtPmV4dHJhOworICAgICAgICAgICAgfQorI2lmZGVmIElORkxBVEVfU1RSSUNUCisgICAgICAgICAgICBpZiAoc3RhdGUtPm9mZnNldCA+IHN0YXRlLT5kbWF4KSB7CisgICAgICAgICAgICAgICAgc3RybS0+bXNnID0gKGNoYXIgKikiaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siOworICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gQkFEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgICAgICBUcmFjZXZ2KChzdGRlcnIsICJpbmZsYXRlOiAgICAgICAgIGRpc3RhbmNlICV1XG4iLCBzdGF0ZS0+b2Zmc2V0KSk7CisgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IE1BVENIOworICAgICAgICAgICAgICAgIC8qIGZhbGx0aHJvdWdoICovCisgICAgICAgIGNhc2UgTUFUQ0g6CisgICAgICAgICAgICBpZiAobGVmdCA9PSAwKSBnb3RvIGluZl9sZWF2ZTsKKyAgICAgICAgICAgIGNvcHkgPSBvdXQgLSBsZWZ0OworICAgICAgICAgICAgaWYgKHN0YXRlLT5vZmZzZXQgPiBjb3B5KSB7ICAgICAgICAgLyogY29weSBmcm9tIHdpbmRvdyAqLworICAgICAgICAgICAgICAgIGNvcHkgPSBzdGF0ZS0+b2Zmc2V0IC0gY29weTsKKyAgICAgICAgICAgICAgICBpZiAoY29weSA+IHN0YXRlLT53aGF2ZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUtPnNhbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cm0tPm1zZyA9IChjaGFyICopImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gQkFEOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyNpZmRlZiBJTkZMQVRFX0FMTE9XX0lOVkFMSURfRElTVEFOQ0VfVE9PRkFSX0FSUlIKKyAgICAgICAgICAgICAgICAgICAgVHJhY2UoKHN0ZGVyciwgImluZmxhdGUuYyB0b28gZmFyXG4iKSk7CisgICAgICAgICAgICAgICAgICAgIGNvcHkgLT0gc3RhdGUtPndoYXZlOworICAgICAgICAgICAgICAgICAgICBpZiAoY29weSA+IHN0YXRlLT5sZW5ndGgpIGNvcHkgPSBzdGF0ZS0+bGVuZ3RoOworICAgICAgICAgICAgICAgICAgICBpZiAoY29weSA+IGxlZnQpIGNvcHkgPSBsZWZ0OworICAgICAgICAgICAgICAgICAgICBsZWZ0IC09IGNvcHk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5sZW5ndGggLT0gY29weTsKKyAgICAgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICAgICAgICAgKnB1dCsrID0gMDsKKyAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoLS1jb3B5KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLT5sZW5ndGggPT0gMCkgc3RhdGUtPm1vZGUgPSBMRU47CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChjb3B5ID4gc3RhdGUtPnduZXh0KSB7CisgICAgICAgICAgICAgICAgICAgIGNvcHkgLT0gc3RhdGUtPnduZXh0OworICAgICAgICAgICAgICAgICAgICBmcm9tID0gc3RhdGUtPndpbmRvdyArIChzdGF0ZS0+d3NpemUgLSBjb3B5KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBmcm9tID0gc3RhdGUtPndpbmRvdyArIChzdGF0ZS0+d25leHQgLSBjb3B5KTsKKyAgICAgICAgICAgICAgICBpZiAoY29weSA+IHN0YXRlLT5sZW5ndGgpIGNvcHkgPSBzdGF0ZS0+bGVuZ3RoOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29weSBmcm9tIG91dHB1dCAqLworICAgICAgICAgICAgICAgIGZyb20gPSBwdXQgLSBzdGF0ZS0+b2Zmc2V0OworICAgICAgICAgICAgICAgIGNvcHkgPSBzdGF0ZS0+bGVuZ3RoOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNvcHkgPiBsZWZ0KSBjb3B5ID0gbGVmdDsKKyAgICAgICAgICAgIGxlZnQgLT0gY29weTsKKyAgICAgICAgICAgIHN0YXRlLT5sZW5ndGggLT0gY29weTsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAqcHV0KysgPSAqZnJvbSsrOworICAgICAgICAgICAgfSB3aGlsZSAoLS1jb3B5KTsKKyAgICAgICAgICAgIGlmIChzdGF0ZS0+bGVuZ3RoID09IDApIHN0YXRlLT5tb2RlID0gTEVOOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTElUOgorICAgICAgICAgICAgaWYgKGxlZnQgPT0gMCkgZ290byBpbmZfbGVhdmU7CisgICAgICAgICAgICAqcHV0KysgPSAodW5zaWduZWQgY2hhcikoc3RhdGUtPmxlbmd0aCk7CisgICAgICAgICAgICBsZWZ0LS07CisgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IExFTjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENIRUNLOgorICAgICAgICAgICAgaWYgKHN0YXRlLT53cmFwKSB7CisgICAgICAgICAgICAgICAgTkVFREJJVFMoMzIpOworICAgICAgICAgICAgICAgIG91dCAtPSBsZWZ0OworICAgICAgICAgICAgICAgIHN0cm0tPnRvdGFsX291dCArPSBvdXQ7CisgICAgICAgICAgICAgICAgc3RhdGUtPnRvdGFsICs9IG91dDsKKyAgICAgICAgICAgICAgICBpZiAoKHN0YXRlLT53cmFwICYgNCkgJiYgb3V0KQorICAgICAgICAgICAgICAgICAgICBzdHJtLT5hZGxlciA9IHN0YXRlLT5jaGVjayA9CisgICAgICAgICAgICAgICAgICAgICAgICBVUERBVEVfQ0hFQ0soc3RhdGUtPmNoZWNrLCBwdXQgLSBvdXQsIG91dCk7CisgICAgICAgICAgICAgICAgb3V0ID0gbGVmdDsKKyAgICAgICAgICAgICAgICBpZiAoKHN0YXRlLT53cmFwICYgNCkgJiYgKAorI2lmZGVmIEdVTlpJUAorICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmZsYWdzID8gaG9sZCA6CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgIFpTV0FQMzIoaG9sZCkpICE9IHN0YXRlLT5jaGVjaykgeworICAgICAgICAgICAgICAgICAgICBzdHJtLT5tc2cgPSAoY2hhciAqKSJpbmNvcnJlY3QgZGF0YSBjaGVjayI7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gQkFEOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgSU5JVEJJVFMoKTsKKyAgICAgICAgICAgICAgICBUcmFjZXYoKHN0ZGVyciwgImluZmxhdGU6ICAgY2hlY2sgbWF0Y2hlcyB0cmFpbGVyXG4iKSk7CisgICAgICAgICAgICB9CisjaWZkZWYgR1VOWklQCisgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IExFTkdUSDsKKyAgICAgICAgICAgICAgICAvKiBmYWxsdGhyb3VnaCAqLworICAgICAgICBjYXNlIExFTkdUSDoKKyAgICAgICAgICAgIGlmIChzdGF0ZS0+d3JhcCAmJiBzdGF0ZS0+ZmxhZ3MpIHsKKyAgICAgICAgICAgICAgICBORUVEQklUUygzMik7CisgICAgICAgICAgICAgICAgaWYgKChzdGF0ZS0+d3JhcCAmIDQpICYmIGhvbGQgIT0gKHN0YXRlLT50b3RhbCAmIDB4ZmZmZmZmZmYpKSB7CisgICAgICAgICAgICAgICAgICAgIHN0cm0tPm1zZyA9IChjaGFyICopImluY29ycmVjdCBsZW5ndGggY2hlY2siOworICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IEJBRDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIElOSVRCSVRTKCk7CisgICAgICAgICAgICAgICAgVHJhY2V2KChzdGRlcnIsICJpbmZsYXRlOiAgIGxlbmd0aCBtYXRjaGVzIHRyYWlsZXJcbiIpKTsKKyAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBET05FOworICAgICAgICAgICAgICAgIC8qIGZhbGx0aHJvdWdoICovCisgICAgICAgIGNhc2UgRE9ORToKKyAgICAgICAgICAgIHJldCA9IFpfU1RSRUFNX0VORDsKKyAgICAgICAgICAgIGdvdG8gaW5mX2xlYXZlOworICAgICAgICBjYXNlIEJBRDoKKyAgICAgICAgICAgIHJldCA9IFpfREFUQV9FUlJPUjsKKyAgICAgICAgICAgIGdvdG8gaW5mX2xlYXZlOworICAgICAgICBjYXNlIE1FTToKKyAgICAgICAgICAgIHJldHVybiBaX01FTV9FUlJPUjsKKyAgICAgICAgY2FzZSBTWU5DOgorICAgICAgICAgICAgICAgIC8qIGZhbGx0aHJvdWdoICovCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgICAgICAgIH0KKworICAgIC8qCisgICAgICAgUmV0dXJuIGZyb20gaW5mbGF0ZSgpLCB1cGRhdGluZyB0aGUgdG90YWwgY291bnRzIGFuZCB0aGUgY2hlY2sgdmFsdWUuCisgICAgICAgSWYgdGhlcmUgd2FzIG5vIHByb2dyZXNzIGR1cmluZyB0aGUgaW5mbGF0ZSgpIGNhbGwsIHJldHVybiBhIGJ1ZmZlcgorICAgICAgIGVycm9yLiAgQ2FsbCB1cGRhdGV3aW5kb3coKSB0byBjcmVhdGUgYW5kL29yIHVwZGF0ZSB0aGUgd2luZG93IHN0YXRlLgorICAgICAgIE5vdGU6IGEgbWVtb3J5IGVycm9yIGZyb20gaW5mbGF0ZSgpIGlzIG5vbi1yZWNvdmVyYWJsZS4KKyAgICAgKi8KKyAgaW5mX2xlYXZlOgorICAgIFJFU1RPUkUoKTsKKyAgICBpZiAoc3RhdGUtPndzaXplIHx8IChvdXQgIT0gc3RybS0+YXZhaWxfb3V0ICYmIHN0YXRlLT5tb2RlIDwgQkFEICYmCisgICAgICAgICAgICAoc3RhdGUtPm1vZGUgPCBDSEVDSyB8fCBmbHVzaCAhPSBaX0ZJTklTSCkpKQorICAgICAgICBpZiAodXBkYXRld2luZG93KHN0cm0sIHN0cm0tPm5leHRfb3V0LCBvdXQgLSBzdHJtLT5hdmFpbF9vdXQpKSB7CisgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IE1FTTsKKyAgICAgICAgICAgIHJldHVybiBaX01FTV9FUlJPUjsKKyAgICAgICAgfQorICAgIGluIC09IHN0cm0tPmF2YWlsX2luOworICAgIG91dCAtPSBzdHJtLT5hdmFpbF9vdXQ7CisgICAgc3RybS0+dG90YWxfaW4gKz0gaW47CisgICAgc3RybS0+dG90YWxfb3V0ICs9IG91dDsKKyAgICBzdGF0ZS0+dG90YWwgKz0gb3V0OworICAgIGlmICgoc3RhdGUtPndyYXAgJiA0KSAmJiBvdXQpCisgICAgICAgIHN0cm0tPmFkbGVyID0gc3RhdGUtPmNoZWNrID0KKyAgICAgICAgICAgIFVQREFURV9DSEVDSyhzdGF0ZS0+Y2hlY2ssIHN0cm0tPm5leHRfb3V0IC0gb3V0LCBvdXQpOworICAgIHN0cm0tPmRhdGFfdHlwZSA9IChpbnQpc3RhdGUtPmJpdHMgKyAoc3RhdGUtPmxhc3QgPyA2NCA6IDApICsKKyAgICAgICAgICAgICAgICAgICAgICAoc3RhdGUtPm1vZGUgPT0gVFlQRSA/IDEyOCA6IDApICsKKyAgICAgICAgICAgICAgICAgICAgICAoc3RhdGUtPm1vZGUgPT0gTEVOXyB8fCBzdGF0ZS0+bW9kZSA9PSBDT1BZXyA/IDI1NiA6IDApOworICAgIGlmICgoKGluID09IDAgJiYgb3V0ID09IDApIHx8IGZsdXNoID09IFpfRklOSVNIKSAmJiByZXQgPT0gWl9PSykKKyAgICAgICAgcmV0ID0gWl9CVUZfRVJST1I7CisgICAgcmV0dXJuIHJldDsKK30KKworaW50IFpFWFBPUlQgaW5mbGF0ZUVuZChzdHJtKQorel9zdHJlYW1wIHN0cm07Cit7CisgICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKKyAgICBpZiAoaW5mbGF0ZVN0YXRlQ2hlY2soc3RybSkpCisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyAgICBzdGF0ZSA9IChzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKilzdHJtLT5zdGF0ZTsKKyAgICBpZiAoc3RhdGUtPndpbmRvdyAhPSBaX05VTEwpIFpGUkVFKHN0cm0sIHN0YXRlLT53aW5kb3cpOworICAgIFpGUkVFKHN0cm0sIHN0cm0tPnN0YXRlKTsKKyAgICBzdHJtLT5zdGF0ZSA9IFpfTlVMTDsKKyAgICBUcmFjZXYoKHN0ZGVyciwgImluZmxhdGU6IGVuZFxuIikpOworICAgIHJldHVybiBaX09LOworfQorCitpbnQgWkVYUE9SVCBpbmZsYXRlR2V0RGljdGlvbmFyeShzdHJtLCBkaWN0aW9uYXJ5LCBkaWN0TGVuZ3RoKQorel9zdHJlYW1wIHN0cm07CitCeXRlZiAqZGljdGlvbmFyeTsKK3VJbnQgKmRpY3RMZW5ndGg7Cit7CisgICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKKworICAgIC8qIGNoZWNrIHN0YXRlICovCisgICAgaWYgKGluZmxhdGVTdGF0ZUNoZWNrKHN0cm0pKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgICAgc3RhdGUgPSAoc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICopc3RybS0+c3RhdGU7CisKKyAgICAvKiBjb3B5IGRpY3Rpb25hcnkgKi8KKyAgICBpZiAoc3RhdGUtPndoYXZlICYmIGRpY3Rpb25hcnkgIT0gWl9OVUxMKSB7CisgICAgICAgIHptZW1jcHkoZGljdGlvbmFyeSwgc3RhdGUtPndpbmRvdyArIHN0YXRlLT53bmV4dCwKKyAgICAgICAgICAgICAgICBzdGF0ZS0+d2hhdmUgLSBzdGF0ZS0+d25leHQpOworICAgICAgICB6bWVtY3B5KGRpY3Rpb25hcnkgKyBzdGF0ZS0+d2hhdmUgLSBzdGF0ZS0+d25leHQsCisgICAgICAgICAgICAgICAgc3RhdGUtPndpbmRvdywgc3RhdGUtPnduZXh0KTsKKyAgICB9CisgICAgaWYgKGRpY3RMZW5ndGggIT0gWl9OVUxMKQorICAgICAgICAqZGljdExlbmd0aCA9IHN0YXRlLT53aGF2ZTsKKyAgICByZXR1cm4gWl9PSzsKK30KKworaW50IFpFWFBPUlQgaW5mbGF0ZVNldERpY3Rpb25hcnkoc3RybSwgZGljdGlvbmFyeSwgZGljdExlbmd0aCkKK3pfc3RyZWFtcCBzdHJtOworY29uc3QgQnl0ZWYgKmRpY3Rpb25hcnk7Cit1SW50IGRpY3RMZW5ndGg7Cit7CisgICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKKyAgICB1bnNpZ25lZCBsb25nIGRpY3RpZDsKKyAgICBpbnQgcmV0OworCisgICAgLyogY2hlY2sgc3RhdGUgKi8KKyAgICBpZiAoaW5mbGF0ZVN0YXRlQ2hlY2soc3RybSkpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyAgICBzdGF0ZSA9IChzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKilzdHJtLT5zdGF0ZTsKKyAgICBpZiAoc3RhdGUtPndyYXAgIT0gMCAmJiBzdGF0ZS0+bW9kZSAhPSBESUNUKQorICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisKKyAgICAvKiBjaGVjayBmb3IgY29ycmVjdCBkaWN0aW9uYXJ5IGlkZW50aWZpZXIgKi8KKyAgICBpZiAoc3RhdGUtPm1vZGUgPT0gRElDVCkgeworICAgICAgICBkaWN0aWQgPSBhZGxlcjMyKDBMLCBaX05VTEwsIDApOworICAgICAgICBkaWN0aWQgPSBhZGxlcjMyKGRpY3RpZCwgZGljdGlvbmFyeSwgZGljdExlbmd0aCk7CisgICAgICAgIGlmIChkaWN0aWQgIT0gc3RhdGUtPmNoZWNrKQorICAgICAgICAgICAgcmV0dXJuIFpfREFUQV9FUlJPUjsKKyAgICB9CisKKyAgICAvKiBjb3B5IGRpY3Rpb25hcnkgdG8gd2luZG93IHVzaW5nIHVwZGF0ZXdpbmRvdygpLCB3aGljaCB3aWxsIGFtZW5kIHRoZQorICAgICAgIGV4aXN0aW5nIGRpY3Rpb25hcnkgaWYgYXBwcm9wcmlhdGUgKi8KKyAgICByZXQgPSB1cGRhdGV3aW5kb3coc3RybSwgZGljdGlvbmFyeSArIGRpY3RMZW5ndGgsIGRpY3RMZW5ndGgpOworICAgIGlmIChyZXQpIHsKKyAgICAgICAgc3RhdGUtPm1vZGUgPSBNRU07CisgICAgICAgIHJldHVybiBaX01FTV9FUlJPUjsKKyAgICB9CisgICAgc3RhdGUtPmhhdmVkaWN0ID0gMTsKKyAgICBUcmFjZXYoKHN0ZGVyciwgImluZmxhdGU6ICAgZGljdGlvbmFyeSBzZXRcbiIpKTsKKyAgICByZXR1cm4gWl9PSzsKK30KKworaW50IFpFWFBPUlQgaW5mbGF0ZUdldEhlYWRlcihzdHJtLCBoZWFkKQorel9zdHJlYW1wIHN0cm07Citnel9oZWFkZXJwIGhlYWQ7Cit7CisgICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKKworICAgIC8qIGNoZWNrIHN0YXRlICovCisgICAgaWYgKGluZmxhdGVTdGF0ZUNoZWNrKHN0cm0pKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgICAgc3RhdGUgPSAoc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICopc3RybS0+c3RhdGU7CisgICAgaWYgKChzdGF0ZS0+d3JhcCAmIDIpID09IDApIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKworICAgIC8qIHNhdmUgaGVhZGVyIHN0cnVjdHVyZSAqLworICAgIHN0YXRlLT5oZWFkID0gaGVhZDsKKyAgICBoZWFkLT5kb25lID0gMDsKKyAgICByZXR1cm4gWl9PSzsKK30KKworLyoKKyAgIFNlYXJjaCBidWZbMC4ubGVuLTFdIGZvciB0aGUgcGF0dGVybjogMCwgMCwgMHhmZiwgMHhmZi4gIFJldHVybiB3aGVuIGZvdW5kCisgICBvciB3aGVuIG91dCBvZiBpbnB1dC4gIFdoZW4gY2FsbGVkLCAqaGF2ZSBpcyB0aGUgbnVtYmVyIG9mIHBhdHRlcm4gYnl0ZXMKKyAgIGZvdW5kIGluIG9yZGVyIHNvIGZhciwgaW4gMC4uMy4gIE9uIHJldHVybiAqaGF2ZSBpcyB1cGRhdGVkIHRvIHRoZSBuZXcKKyAgIHN0YXRlLiAgSWYgb24gcmV0dXJuICpoYXZlIGVxdWFscyBmb3VyLCB0aGVuIHRoZSBwYXR0ZXJuIHdhcyBmb3VuZCBhbmQgdGhlCisgICByZXR1cm4gdmFsdWUgaXMgaG93IG1hbnkgYnl0ZXMgd2VyZSByZWFkIGluY2x1ZGluZyB0aGUgbGFzdCBieXRlIG9mIHRoZQorICAgcGF0dGVybi4gIElmICpoYXZlIGlzIGxlc3MgdGhhbiBmb3VyLCB0aGVuIHRoZSBwYXR0ZXJuIGhhcyBub3QgYmVlbiBmb3VuZAorICAgeWV0IGFuZCB0aGUgcmV0dXJuIHZhbHVlIGlzIGxlbi4gIEluIHRoZSBsYXR0ZXIgY2FzZSwgc3luY3NlYXJjaCgpIGNhbiBiZQorICAgY2FsbGVkIGFnYWluIHdpdGggbW9yZSBkYXRhIGFuZCB0aGUgKmhhdmUgc3RhdGUuICAqaGF2ZSBpcyBpbml0aWFsaXplZCB0bworICAgemVybyBmb3IgdGhlIGZpcnN0IGNhbGwuCisgKi8KK2xvY2FsIHVuc2lnbmVkIHN5bmNzZWFyY2goaGF2ZSwgYnVmLCBsZW4pCit1bnNpZ25lZCBGQVIgKmhhdmU7Citjb25zdCB1bnNpZ25lZCBjaGFyIEZBUiAqYnVmOwordW5zaWduZWQgbGVuOworeworICAgIHVuc2lnbmVkIGdvdDsKKyAgICB1bnNpZ25lZCBuZXh0OworCisgICAgZ290ID0gKmhhdmU7CisgICAgbmV4dCA9IDA7CisgICAgd2hpbGUgKG5leHQgPCBsZW4gJiYgZ290IDwgNCkgeworICAgICAgICBpZiAoKGludCkoYnVmW25leHRdKSA9PSAoZ290IDwgMiA/IDAgOiAweGZmKSkKKyAgICAgICAgICAgIGdvdCsrOworICAgICAgICBlbHNlIGlmIChidWZbbmV4dF0pCisgICAgICAgICAgICBnb3QgPSAwOworICAgICAgICBlbHNlCisgICAgICAgICAgICBnb3QgPSA0IC0gZ290OworICAgICAgICBuZXh0Kys7CisgICAgfQorICAgICpoYXZlID0gZ290OworICAgIHJldHVybiBuZXh0OworfQorCitpbnQgWkVYUE9SVCBpbmZsYXRlU3luYyhzdHJtKQorel9zdHJlYW1wIHN0cm07Cit7CisgICAgdW5zaWduZWQgbGVuOyAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBieXRlcyB0byBsb29rIGF0IG9yIGxvb2tlZCBhdCAqLworICAgIGludCBmbGFnczsgICAgICAgICAgICAgICAgICAvKiB0ZW1wb3JhcnkgdG8gc2F2ZSBoZWFkZXIgc3RhdHVzICovCisgICAgdW5zaWduZWQgbG9uZyBpbiwgb3V0OyAgICAgIC8qIHRlbXBvcmFyeSB0byBzYXZlIHRvdGFsX2luIGFuZCB0b3RhbF9vdXQgKi8KKyAgICB1bnNpZ25lZCBjaGFyIGJ1Zls0XTsgICAgICAgLyogdG8gcmVzdG9yZSBiaXQgYnVmZmVyIHRvIGJ5dGUgc3RyaW5nICovCisgICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKKworICAgIC8qIGNoZWNrIHBhcmFtZXRlcnMgKi8KKyAgICBpZiAoaW5mbGF0ZVN0YXRlQ2hlY2soc3RybSkpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyAgICBzdGF0ZSA9IChzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKilzdHJtLT5zdGF0ZTsKKyAgICBpZiAoc3RybS0+YXZhaWxfaW4gPT0gMCAmJiBzdGF0ZS0+Yml0cyA8IDgpIHJldHVybiBaX0JVRl9FUlJPUjsKKworICAgIC8qIGlmIGZpcnN0IHRpbWUsIHN0YXJ0IHNlYXJjaCBpbiBiaXQgYnVmZmVyICovCisgICAgaWYgKHN0YXRlLT5tb2RlICE9IFNZTkMpIHsKKyAgICAgICAgc3RhdGUtPm1vZGUgPSBTWU5DOworICAgICAgICBzdGF0ZS0+aG9sZCA8PD0gc3RhdGUtPmJpdHMgJiA3OworICAgICAgICBzdGF0ZS0+Yml0cyAtPSBzdGF0ZS0+Yml0cyAmIDc7CisgICAgICAgIGxlbiA9IDA7CisgICAgICAgIHdoaWxlIChzdGF0ZS0+Yml0cyA+PSA4KSB7CisgICAgICAgICAgICBidWZbbGVuKytdID0gKHVuc2lnbmVkIGNoYXIpKHN0YXRlLT5ob2xkKTsKKyAgICAgICAgICAgIHN0YXRlLT5ob2xkID4+PSA4OworICAgICAgICAgICAgc3RhdGUtPmJpdHMgLT0gODsKKyAgICAgICAgfQorICAgICAgICBzdGF0ZS0+aGF2ZSA9IDA7CisgICAgICAgIHN5bmNzZWFyY2goJihzdGF0ZS0+aGF2ZSksIGJ1ZiwgbGVuKTsKKyAgICB9CisKKyAgICAvKiBzZWFyY2ggYXZhaWxhYmxlIGlucHV0ICovCisgICAgbGVuID0gc3luY3NlYXJjaCgmKHN0YXRlLT5oYXZlKSwgc3RybS0+bmV4dF9pbiwgc3RybS0+YXZhaWxfaW4pOworICAgIHN0cm0tPmF2YWlsX2luIC09IGxlbjsKKyAgICBzdHJtLT5uZXh0X2luICs9IGxlbjsKKyAgICBzdHJtLT50b3RhbF9pbiArPSBsZW47CisKKyAgICAvKiByZXR1cm4gbm8gam95IG9yIHNldCB1cCB0byByZXN0YXJ0IGluZmxhdGUoKSBvbiBhIG5ldyBibG9jayAqLworICAgIGlmIChzdGF0ZS0+aGF2ZSAhPSA0KSByZXR1cm4gWl9EQVRBX0VSUk9SOworICAgIGlmIChzdGF0ZS0+ZmxhZ3MgPT0gLTEpCisgICAgICAgIHN0YXRlLT53cmFwID0gMDsgICAgLyogaWYgbm8gaGVhZGVyIHlldCwgdHJlYXQgYXMgcmF3ICovCisgICAgZWxzZQorICAgICAgICBzdGF0ZS0+d3JhcCAmPSB+NDsgIC8qIG5vIHBvaW50IGluIGNvbXB1dGluZyBhIGNoZWNrIHZhbHVlIG5vdyAqLworICAgIGZsYWdzID0gc3RhdGUtPmZsYWdzOworICAgIGluID0gc3RybS0+dG90YWxfaW47ICBvdXQgPSBzdHJtLT50b3RhbF9vdXQ7CisgICAgaW5mbGF0ZVJlc2V0KHN0cm0pOworICAgIHN0cm0tPnRvdGFsX2luID0gaW47ICBzdHJtLT50b3RhbF9vdXQgPSBvdXQ7CisgICAgc3RhdGUtPmZsYWdzID0gZmxhZ3M7CisgICAgc3RhdGUtPm1vZGUgPSBUWVBFOworICAgIHJldHVybiBaX09LOworfQorCisvKgorICAgUmV0dXJucyB0cnVlIGlmIGluZmxhdGUgaXMgY3VycmVudGx5IGF0IHRoZSBlbmQgb2YgYSBibG9jayBnZW5lcmF0ZWQgYnkKKyAgIFpfU1lOQ19GTFVTSCBvciBaX0ZVTExfRkxVU0guIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSBvbmUgUFBQCisgICBpbXBsZW1lbnRhdGlvbiB0byBwcm92aWRlIGFuIGFkZGl0aW9uYWwgc2FmZXR5IGNoZWNrLiBQUFAgdXNlcworICAgWl9TWU5DX0ZMVVNIIGJ1dCByZW1vdmVzIHRoZSBsZW5ndGggYnl0ZXMgb2YgdGhlIHJlc3VsdGluZyBlbXB0eSBzdG9yZWQKKyAgIGJsb2NrLiBXaGVuIGRlY29tcHJlc3NpbmcsIFBQUCBjaGVja3MgdGhhdCBhdCB0aGUgZW5kIG9mIGlucHV0IHBhY2tldCwKKyAgIGluZmxhdGUgaXMgd2FpdGluZyBmb3IgdGhlc2UgbGVuZ3RoIGJ5dGVzLgorICovCitpbnQgWkVYUE9SVCBpbmZsYXRlU3luY1BvaW50KHN0cm0pCit6X3N0cmVhbXAgc3RybTsKK3sKKyAgICBzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRlOworCisgICAgaWYgKGluZmxhdGVTdGF0ZUNoZWNrKHN0cm0pKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgICAgc3RhdGUgPSAoc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICopc3RybS0+c3RhdGU7CisgICAgcmV0dXJuIHN0YXRlLT5tb2RlID09IFNUT1JFRCAmJiBzdGF0ZS0+Yml0cyA9PSAwOworfQorCitpbnQgWkVYUE9SVCBpbmZsYXRlQ29weShkZXN0LCBzb3VyY2UpCit6X3N0cmVhbXAgZGVzdDsKK3pfc3RyZWFtcCBzb3VyY2U7Cit7CisgICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKKyAgICBzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKmNvcHk7CisgICAgdW5zaWduZWQgY2hhciBGQVIgKndpbmRvdzsKKyAgICB1bnNpZ25lZCB3c2l6ZTsKKworICAgIC8qIGNoZWNrIGlucHV0ICovCisgICAgaWYgKGluZmxhdGVTdGF0ZUNoZWNrKHNvdXJjZSkgfHwgZGVzdCA9PSBaX05VTEwpCisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyAgICBzdGF0ZSA9IChzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKilzb3VyY2UtPnN0YXRlOworCisgICAgLyogYWxsb2NhdGUgc3BhY2UgKi8KKyAgICBjb3B5ID0gKHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqKQorICAgICAgICAgICBaQUxMT0Moc291cmNlLCAxLCBzaXplb2Yoc3RydWN0IGluZmxhdGVfc3RhdGUpKTsKKyAgICBpZiAoY29weSA9PSBaX05VTEwpIHJldHVybiBaX01FTV9FUlJPUjsKKyAgICB3aW5kb3cgPSBaX05VTEw7CisgICAgaWYgKHN0YXRlLT53aW5kb3cgIT0gWl9OVUxMKSB7CisgICAgICAgIHdpbmRvdyA9ICh1bnNpZ25lZCBjaGFyIEZBUiAqKQorICAgICAgICAgICAgICAgICBaQUxMT0Moc291cmNlLCAxVSA8PCBzdGF0ZS0+d2JpdHMsIHNpemVvZih1bnNpZ25lZCBjaGFyKSk7CisgICAgICAgIGlmICh3aW5kb3cgPT0gWl9OVUxMKSB7CisgICAgICAgICAgICBaRlJFRShzb3VyY2UsIGNvcHkpOworICAgICAgICAgICAgcmV0dXJuIFpfTUVNX0VSUk9SOworICAgICAgICB9CisgICAgfQorCisgICAgLyogY29weSBzdGF0ZSAqLworICAgIHptZW1jcHkoKHZvaWRwZilkZXN0LCAodm9pZHBmKXNvdXJjZSwgc2l6ZW9mKHpfc3RyZWFtKSk7CisgICAgem1lbWNweSgodm9pZHBmKWNvcHksICh2b2lkcGYpc3RhdGUsIHNpemVvZihzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSkpOworICAgIGNvcHktPnN0cm0gPSBkZXN0OworICAgIGlmIChzdGF0ZS0+bGVuY29kZSA+PSBzdGF0ZS0+Y29kZXMgJiYKKyAgICAgICAgc3RhdGUtPmxlbmNvZGUgPD0gc3RhdGUtPmNvZGVzICsgRU5PVUdIIC0gMSkgeworICAgICAgICBjb3B5LT5sZW5jb2RlID0gY29weS0+Y29kZXMgKyAoc3RhdGUtPmxlbmNvZGUgLSBzdGF0ZS0+Y29kZXMpOworICAgICAgICBjb3B5LT5kaXN0Y29kZSA9IGNvcHktPmNvZGVzICsgKHN0YXRlLT5kaXN0Y29kZSAtIHN0YXRlLT5jb2Rlcyk7CisgICAgfQorICAgIGNvcHktPm5leHQgPSBjb3B5LT5jb2RlcyArIChzdGF0ZS0+bmV4dCAtIHN0YXRlLT5jb2Rlcyk7CisgICAgaWYgKHdpbmRvdyAhPSBaX05VTEwpIHsKKyAgICAgICAgd3NpemUgPSAxVSA8PCBzdGF0ZS0+d2JpdHM7CisgICAgICAgIHptZW1jcHkod2luZG93LCBzdGF0ZS0+d2luZG93LCB3c2l6ZSk7CisgICAgfQorICAgIGNvcHktPndpbmRvdyA9IHdpbmRvdzsKKyAgICBkZXN0LT5zdGF0ZSA9IChzdHJ1Y3QgaW50ZXJuYWxfc3RhdGUgRkFSICopY29weTsKKyAgICByZXR1cm4gWl9PSzsKK30KKworaW50IFpFWFBPUlQgaW5mbGF0ZVVuZGVybWluZShzdHJtLCBzdWJ2ZXJ0KQorel9zdHJlYW1wIHN0cm07CitpbnQgc3VidmVydDsKK3sKKyAgICBzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRlOworCisgICAgaWYgKGluZmxhdGVTdGF0ZUNoZWNrKHN0cm0pKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgICAgc3RhdGUgPSAoc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICopc3RybS0+c3RhdGU7CisjaWZkZWYgSU5GTEFURV9BTExPV19JTlZBTElEX0RJU1RBTkNFX1RPT0ZBUl9BUlJSCisgICAgc3RhdGUtPnNhbmUgPSAhc3VidmVydDsKKyAgICByZXR1cm4gWl9PSzsKKyNlbHNlCisgICAgKHZvaWQpc3VidmVydDsKKyAgICBzdGF0ZS0+c2FuZSA9IDE7CisgICAgcmV0dXJuIFpfREFUQV9FUlJPUjsKKyNlbmRpZgorfQorCitpbnQgWkVYUE9SVCBpbmZsYXRlVmFsaWRhdGUoc3RybSwgY2hlY2spCit6X3N0cmVhbXAgc3RybTsKK2ludCBjaGVjazsKK3sKKyAgICBzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRlOworCisgICAgaWYgKGluZmxhdGVTdGF0ZUNoZWNrKHN0cm0pKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgICAgc3RhdGUgPSAoc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICopc3RybS0+c3RhdGU7CisgICAgaWYgKGNoZWNrICYmIHN0YXRlLT53cmFwKQorICAgICAgICBzdGF0ZS0+d3JhcCB8PSA0OworICAgIGVsc2UKKyAgICAgICAgc3RhdGUtPndyYXAgJj0gfjQ7CisgICAgcmV0dXJuIFpfT0s7Cit9CisKK2xvbmcgWkVYUE9SVCBpbmZsYXRlTWFyayhzdHJtKQorel9zdHJlYW1wIHN0cm07Cit7CisgICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKKworICAgIGlmIChpbmZsYXRlU3RhdGVDaGVjayhzdHJtKSkKKyAgICAgICAgcmV0dXJuIC0oMUwgPDwgMTYpOworICAgIHN0YXRlID0gKHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqKXN0cm0tPnN0YXRlOworICAgIHJldHVybiAobG9uZykoKCh1bnNpZ25lZCBsb25nKSgobG9uZylzdGF0ZS0+YmFjaykpIDw8IDE2KSArCisgICAgICAgIChzdGF0ZS0+bW9kZSA9PSBDT1BZID8gc3RhdGUtPmxlbmd0aCA6CisgICAgICAgICAgICAoc3RhdGUtPm1vZGUgPT0gTUFUQ0ggPyBzdGF0ZS0+d2FzIC0gc3RhdGUtPmxlbmd0aCA6IDApKTsKK30KKwordW5zaWduZWQgbG9uZyBaRVhQT1JUIGluZmxhdGVDb2Rlc1VzZWQoc3RybSkKK3pfc3RyZWFtcCBzdHJtOworeworICAgIHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqc3RhdGU7CisgICAgaWYgKGluZmxhdGVTdGF0ZUNoZWNrKHN0cm0pKSByZXR1cm4gKHVuc2lnbmVkIGxvbmcpLTE7CisgICAgc3RhdGUgPSAoc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICopc3RybS0+c3RhdGU7CisgICAgcmV0dXJuICh1bnNpZ25lZCBsb25nKShzdGF0ZS0+bmV4dCAtIHN0YXRlLT5jb2Rlcyk7Cit9CmRpZmYgLS1naXQgYS9zcmMvaW5mbGF0ZS5oIGIvc3JjL2luZmxhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTI3YjZiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luZmxhdGUuaApAQCAtMCwwICsxLDEyNiBAQAorLyogaW5mbGF0ZS5oIC0tIGludGVybmFsIGluZmxhdGUgc3RhdGUgZGVmaW5pdGlvbgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTkgTWFyayBBZGxlcgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAorICovCisKKy8qIFdBUk5JTkc6IHRoaXMgZmlsZSBzaG91bGQgKm5vdCogYmUgdXNlZCBieSBhcHBsaWNhdGlvbnMuIEl0IGlzCisgICBwYXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgY29tcHJlc3Npb24gbGlicmFyeSBhbmQgaXMKKyAgIHN1YmplY3QgdG8gY2hhbmdlLiBBcHBsaWNhdGlvbnMgc2hvdWxkIG9ubHkgdXNlIHpsaWIuaC4KKyAqLworCisvKiBkZWZpbmUgTk9fR1pJUCB3aGVuIGNvbXBpbGluZyBpZiB5b3Ugd2FudCB0byBkaXNhYmxlIGd6aXAgaGVhZGVyIGFuZAorICAgdHJhaWxlciBkZWNvZGluZyBieSBpbmZsYXRlKCkuICBOT19HWklQIHdvdWxkIGJlIHVzZWQgdG8gYXZvaWQgbGlua2luZyBpbgorICAgdGhlIGNyYyBjb2RlIHdoZW4gaXQgaXMgbm90IG5lZWRlZC4gIEZvciBzaGFyZWQgbGlicmFyaWVzLCBnemlwIGRlY29kaW5nCisgICBzaG91bGQgYmUgbGVmdCBlbmFibGVkLiAqLworI2lmbmRlZiBOT19HWklQCisjICBkZWZpbmUgR1VOWklQCisjZW5kaWYKKworLyogUG9zc2libGUgaW5mbGF0ZSBtb2RlcyBiZXR3ZWVuIGluZmxhdGUoKSBjYWxscyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICBIRUFEID0gMTYxODAsICAgLyogaTogd2FpdGluZyBmb3IgbWFnaWMgaGVhZGVyICovCisgICAgRkxBR1MsICAgICAgLyogaTogd2FpdGluZyBmb3IgbWV0aG9kIGFuZCBmbGFncyAoZ3ppcCkgKi8KKyAgICBUSU1FLCAgICAgICAvKiBpOiB3YWl0aW5nIGZvciBtb2RpZmljYXRpb24gdGltZSAoZ3ppcCkgKi8KKyAgICBPUywgICAgICAgICAvKiBpOiB3YWl0aW5nIGZvciBleHRyYSBmbGFncyBhbmQgb3BlcmF0aW5nIHN5c3RlbSAoZ3ppcCkgKi8KKyAgICBFWExFTiwgICAgICAvKiBpOiB3YWl0aW5nIGZvciBleHRyYSBsZW5ndGggKGd6aXApICovCisgICAgRVhUUkEsICAgICAgLyogaTogd2FpdGluZyBmb3IgZXh0cmEgYnl0ZXMgKGd6aXApICovCisgICAgTkFNRSwgICAgICAgLyogaTogd2FpdGluZyBmb3IgZW5kIG9mIGZpbGUgbmFtZSAoZ3ppcCkgKi8KKyAgICBDT01NRU5ULCAgICAvKiBpOiB3YWl0aW5nIGZvciBlbmQgb2YgY29tbWVudCAoZ3ppcCkgKi8KKyAgICBIQ1JDLCAgICAgICAvKiBpOiB3YWl0aW5nIGZvciBoZWFkZXIgY3JjIChnemlwKSAqLworICAgIERJQ1RJRCwgICAgIC8qIGk6IHdhaXRpbmcgZm9yIGRpY3Rpb25hcnkgY2hlY2sgdmFsdWUgKi8KKyAgICBESUNULCAgICAgICAvKiB3YWl0aW5nIGZvciBpbmZsYXRlU2V0RGljdGlvbmFyeSgpIGNhbGwgKi8KKyAgICAgICAgVFlQRSwgICAgICAgLyogaTogd2FpdGluZyBmb3IgdHlwZSBiaXRzLCBpbmNsdWRpbmcgbGFzdC1mbGFnIGJpdCAqLworICAgICAgICBUWVBFRE8sICAgICAvKiBpOiBzYW1lLCBidXQgc2tpcCBjaGVjayB0byBleGl0IGluZmxhdGUgb24gbmV3IGJsb2NrICovCisgICAgICAgIFNUT1JFRCwgICAgIC8qIGk6IHdhaXRpbmcgZm9yIHN0b3JlZCBzaXplIChsZW5ndGggYW5kIGNvbXBsZW1lbnQpICovCisgICAgICAgIENPUFlfLCAgICAgIC8qIGkvbzogc2FtZSBhcyBDT1BZIGJlbG93LCBidXQgb25seSBmaXJzdCB0aW1lIGluICovCisgICAgICAgIENPUFksICAgICAgIC8qIGkvbzogd2FpdGluZyBmb3IgaW5wdXQgb3Igb3V0cHV0IHRvIGNvcHkgc3RvcmVkIGJsb2NrICovCisgICAgICAgIFRBQkxFLCAgICAgIC8qIGk6IHdhaXRpbmcgZm9yIGR5bmFtaWMgYmxvY2sgdGFibGUgbGVuZ3RocyAqLworICAgICAgICBMRU5MRU5TLCAgICAvKiBpOiB3YWl0aW5nIGZvciBjb2RlIGxlbmd0aCBjb2RlIGxlbmd0aHMgKi8KKyAgICAgICAgQ09ERUxFTlMsICAgLyogaTogd2FpdGluZyBmb3IgbGVuZ3RoL2xpdCBhbmQgZGlzdGFuY2UgY29kZSBsZW5ndGhzICovCisgICAgICAgICAgICBMRU5fLCAgICAgICAvKiBpOiBzYW1lIGFzIExFTiBiZWxvdywgYnV0IG9ubHkgZmlyc3QgdGltZSBpbiAqLworICAgICAgICAgICAgTEVOLCAgICAgICAgLyogaTogd2FpdGluZyBmb3IgbGVuZ3RoL2xpdC9lb2IgY29kZSAqLworICAgICAgICAgICAgTEVORVhULCAgICAgLyogaTogd2FpdGluZyBmb3IgbGVuZ3RoIGV4dHJhIGJpdHMgKi8KKyAgICAgICAgICAgIERJU1QsICAgICAgIC8qIGk6IHdhaXRpbmcgZm9yIGRpc3RhbmNlIGNvZGUgKi8KKyAgICAgICAgICAgIERJU1RFWFQsICAgIC8qIGk6IHdhaXRpbmcgZm9yIGRpc3RhbmNlIGV4dHJhIGJpdHMgKi8KKyAgICAgICAgICAgIE1BVENILCAgICAgIC8qIG86IHdhaXRpbmcgZm9yIG91dHB1dCBzcGFjZSB0byBjb3B5IHN0cmluZyAqLworICAgICAgICAgICAgTElULCAgICAgICAgLyogbzogd2FpdGluZyBmb3Igb3V0cHV0IHNwYWNlIHRvIHdyaXRlIGxpdGVyYWwgKi8KKyAgICBDSEVDSywgICAgICAvKiBpOiB3YWl0aW5nIGZvciAzMi1iaXQgY2hlY2sgdmFsdWUgKi8KKyAgICBMRU5HVEgsICAgICAvKiBpOiB3YWl0aW5nIGZvciAzMi1iaXQgbGVuZ3RoIChnemlwKSAqLworICAgIERPTkUsICAgICAgIC8qIGZpbmlzaGVkIGNoZWNrLCBkb25lIC0tIHJlbWFpbiBoZXJlIHVudGlsIHJlc2V0ICovCisgICAgQkFELCAgICAgICAgLyogZ290IGEgZGF0YSBlcnJvciAtLSByZW1haW4gaGVyZSB1bnRpbCByZXNldCAqLworICAgIE1FTSwgICAgICAgIC8qIGdvdCBhbiBpbmZsYXRlKCkgbWVtb3J5IGVycm9yIC0tIHJlbWFpbiBoZXJlIHVudGlsIHJlc2V0ICovCisgICAgU1lOQyAgICAgICAgLyogbG9va2luZyBmb3Igc3luY2hyb25pemF0aW9uIGJ5dGVzIHRvIHJlc3RhcnQgaW5mbGF0ZSgpICovCit9IGluZmxhdGVfbW9kZTsKKworLyoKKyAgICBTdGF0ZSB0cmFuc2l0aW9ucyBiZXR3ZWVuIGFib3ZlIG1vZGVzIC0KKworICAgIChtb3N0IG1vZGVzIGNhbiBnbyB0byBCQUQgb3IgTUVNIG9uIGVycm9yIC0tIG5vdCBzaG93biBmb3IgY2xhcml0eSkKKworICAgIFByb2Nlc3MgaGVhZGVyOgorICAgICAgICBIRUFEIC0+IChnemlwKSBvciAoemxpYikgb3IgKHJhdykKKyAgICAgICAgKGd6aXApIC0+IEZMQUdTIC0+IFRJTUUgLT4gT1MgLT4gRVhMRU4gLT4gRVhUUkEgLT4gTkFNRSAtPiBDT01NRU5UIC0+CisgICAgICAgICAgICAgICAgICBIQ1JDIC0+IFRZUEUKKyAgICAgICAgKHpsaWIpIC0+IERJQ1RJRCBvciBUWVBFCisgICAgICAgIERJQ1RJRCAtPiBESUNUIC0+IFRZUEUKKyAgICAgICAgKHJhdykgLT4gVFlQRURPCisgICAgUmVhZCBkZWZsYXRlIGJsb2NrczoKKyAgICAgICAgICAgIFRZUEUgLT4gVFlQRURPIC0+IFNUT1JFRCBvciBUQUJMRSBvciBMRU5fIG9yIENIRUNLCisgICAgICAgICAgICBTVE9SRUQgLT4gQ09QWV8gLT4gQ09QWSAtPiBUWVBFCisgICAgICAgICAgICBUQUJMRSAtPiBMRU5MRU5TIC0+IENPREVMRU5TIC0+IExFTl8KKyAgICAgICAgICAgIExFTl8gLT4gTEVOCisgICAgUmVhZCBkZWZsYXRlIGNvZGVzIGluIGZpeGVkIG9yIGR5bmFtaWMgYmxvY2s6CisgICAgICAgICAgICAgICAgTEVOIC0+IExFTkVYVCBvciBMSVQgb3IgVFlQRQorICAgICAgICAgICAgICAgIExFTkVYVCAtPiBESVNUIC0+IERJU1RFWFQgLT4gTUFUQ0ggLT4gTEVOCisgICAgICAgICAgICAgICAgTElUIC0+IExFTgorICAgIFByb2Nlc3MgdHJhaWxlcjoKKyAgICAgICAgQ0hFQ0sgLT4gTEVOR1RIIC0+IERPTkUKKyAqLworCisvKiBTdGF0ZSBtYWludGFpbmVkIGJldHdlZW4gaW5mbGF0ZSgpIGNhbGxzIC0tIGFwcHJveGltYXRlbHkgN0sgYnl0ZXMsIG5vdAorICAgaW5jbHVkaW5nIHRoZSBhbGxvY2F0ZWQgc2xpZGluZyB3aW5kb3csIHdoaWNoIGlzIHVwIHRvIDMySyBieXRlcy4gKi8KK3N0cnVjdCBpbmZsYXRlX3N0YXRlIHsKKyAgICB6X3N0cmVhbXAgc3RybTsgICAgICAgICAgICAgLyogcG9pbnRlciBiYWNrIHRvIHRoaXMgemxpYiBzdHJlYW0gKi8KKyAgICBpbmZsYXRlX21vZGUgbW9kZTsgICAgICAgICAgLyogY3VycmVudCBpbmZsYXRlIG1vZGUgKi8KKyAgICBpbnQgbGFzdDsgICAgICAgICAgICAgICAgICAgLyogdHJ1ZSBpZiBwcm9jZXNzaW5nIGxhc3QgYmxvY2sgKi8KKyAgICBpbnQgd3JhcDsgICAgICAgICAgICAgICAgICAgLyogYml0IDAgdHJ1ZSBmb3IgemxpYiwgYml0IDEgdHJ1ZSBmb3IgZ3ppcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0IDIgdHJ1ZSB0byB2YWxpZGF0ZSBjaGVjayB2YWx1ZSAqLworICAgIGludCBoYXZlZGljdDsgICAgICAgICAgICAgICAvKiB0cnVlIGlmIGRpY3Rpb25hcnkgcHJvdmlkZWQgKi8KKyAgICBpbnQgZmxhZ3M7ICAgICAgICAgICAgICAgICAgLyogZ3ppcCBoZWFkZXIgbWV0aG9kIGFuZCBmbGFncywgMCBpZiB6bGliLCBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSBpZiByYXcgb3Igbm8gaGVhZGVyIHlldCAqLworICAgIHVuc2lnbmVkIGRtYXg7ICAgICAgICAgICAgICAvKiB6bGliIGhlYWRlciBtYXggZGlzdGFuY2UgKElORkxBVEVfU1RSSUNUKSAqLworICAgIHVuc2lnbmVkIGxvbmcgY2hlY2s7ICAgICAgICAvKiBwcm90ZWN0ZWQgY29weSBvZiBjaGVjayB2YWx1ZSAqLworICAgIHVuc2lnbmVkIGxvbmcgdG90YWw7ICAgICAgICAvKiBwcm90ZWN0ZWQgY29weSBvZiBvdXRwdXQgY291bnQgKi8KKyAgICBnel9oZWFkZXJwIGhlYWQ7ICAgICAgICAgICAgLyogd2hlcmUgdG8gc2F2ZSBnemlwIGhlYWRlciBpbmZvcm1hdGlvbiAqLworICAgICAgICAvKiBzbGlkaW5nIHdpbmRvdyAqLworICAgIHVuc2lnbmVkIHdiaXRzOyAgICAgICAgICAgICAvKiBsb2cgYmFzZSAyIG9mIHJlcXVlc3RlZCB3aW5kb3cgc2l6ZSAqLworICAgIHVuc2lnbmVkIHdzaXplOyAgICAgICAgICAgICAvKiB3aW5kb3cgc2l6ZSBvciB6ZXJvIGlmIG5vdCB1c2luZyB3aW5kb3cgKi8KKyAgICB1bnNpZ25lZCB3aGF2ZTsgICAgICAgICAgICAgLyogdmFsaWQgYnl0ZXMgaW4gdGhlIHdpbmRvdyAqLworICAgIHVuc2lnbmVkIHduZXh0OyAgICAgICAgICAgICAvKiB3aW5kb3cgd3JpdGUgaW5kZXggKi8KKyAgICB1bnNpZ25lZCBjaGFyIEZBUiAqd2luZG93OyAgLyogYWxsb2NhdGVkIHNsaWRpbmcgd2luZG93LCBpZiBuZWVkZWQgKi8KKyAgICAgICAgLyogYml0IGFjY3VtdWxhdG9yICovCisgICAgdW5zaWduZWQgbG9uZyBob2xkOyAgICAgICAgIC8qIGlucHV0IGJpdCBhY2N1bXVsYXRvciAqLworICAgIHVuc2lnbmVkIGJpdHM7ICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgYml0cyBpbiAiaW4iICovCisgICAgICAgIC8qIGZvciBzdHJpbmcgYW5kIHN0b3JlZCBibG9jayBjb3B5aW5nICovCisgICAgdW5zaWduZWQgbGVuZ3RoOyAgICAgICAgICAgIC8qIGxpdGVyYWwgb3IgbGVuZ3RoIG9mIGRhdGEgdG8gY29weSAqLworICAgIHVuc2lnbmVkIG9mZnNldDsgICAgICAgICAgICAvKiBkaXN0YW5jZSBiYWNrIHRvIGNvcHkgc3RyaW5nIGZyb20gKi8KKyAgICAgICAgLyogZm9yIHRhYmxlIGFuZCBjb2RlIGRlY29kaW5nICovCisgICAgdW5zaWduZWQgZXh0cmE7ICAgICAgICAgICAgIC8qIGV4dHJhIGJpdHMgbmVlZGVkICovCisgICAgICAgIC8qIGZpeGVkIGFuZCBkeW5hbWljIGNvZGUgdGFibGVzICovCisgICAgY29kZSBjb25zdCBGQVIgKmxlbmNvZGU7ICAgIC8qIHN0YXJ0aW5nIHRhYmxlIGZvciBsZW5ndGgvbGl0ZXJhbCBjb2RlcyAqLworICAgIGNvZGUgY29uc3QgRkFSICpkaXN0Y29kZTsgICAvKiBzdGFydGluZyB0YWJsZSBmb3IgZGlzdGFuY2UgY29kZXMgKi8KKyAgICB1bnNpZ25lZCBsZW5iaXRzOyAgICAgICAgICAgLyogaW5kZXggYml0cyBmb3IgbGVuY29kZSAqLworICAgIHVuc2lnbmVkIGRpc3RiaXRzOyAgICAgICAgICAvKiBpbmRleCBiaXRzIGZvciBkaXN0Y29kZSAqLworICAgICAgICAvKiBkeW5hbWljIHRhYmxlIGJ1aWxkaW5nICovCisgICAgdW5zaWduZWQgbmNvZGU7ICAgICAgICAgICAgIC8qIG51bWJlciBvZiBjb2RlIGxlbmd0aCBjb2RlIGxlbmd0aHMgKi8KKyAgICB1bnNpZ25lZCBubGVuOyAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGxlbmd0aCBjb2RlIGxlbmd0aHMgKi8KKyAgICB1bnNpZ25lZCBuZGlzdDsgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGRpc3RhbmNlIGNvZGUgbGVuZ3RocyAqLworICAgIHVuc2lnbmVkIGhhdmU7ICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgY29kZSBsZW5ndGhzIGluIGxlbnNbXSAqLworICAgIGNvZGUgRkFSICpuZXh0OyAgICAgICAgICAgICAvKiBuZXh0IGF2YWlsYWJsZSBzcGFjZSBpbiBjb2Rlc1tdICovCisgICAgdW5zaWduZWQgc2hvcnQgbGVuc1szMjBdOyAgIC8qIHRlbXBvcmFyeSBzdG9yYWdlIGZvciBjb2RlIGxlbmd0aHMgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCB3b3JrWzI4OF07ICAgLyogd29yayBhcmVhIGZvciBjb2RlIHRhYmxlIGJ1aWxkaW5nICovCisgICAgY29kZSBjb2Rlc1tFTk9VR0hdOyAgICAgICAgIC8qIHNwYWNlIGZvciBjb2RlIHRhYmxlcyAqLworICAgIGludCBzYW5lOyAgICAgICAgICAgICAgICAgICAvKiBpZiBmYWxzZSwgYWxsb3cgaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyICovCisgICAgaW50IGJhY2s7ICAgICAgICAgICAgICAgICAgIC8qIGJpdHMgYmFjayBvZiBsYXN0IHVucHJvY2Vzc2VkIGxlbmd0aC9saXQgKi8KKyAgICB1bnNpZ25lZCB3YXM7ICAgICAgICAgICAgICAgLyogaW5pdGlhbCBsZW5ndGggb2YgbWF0Y2ggKi8KK307CmRpZmYgLS1naXQgYS9zcmMvaW5mdHJlZXMuYyBiL3NyYy9pbmZ0cmVlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5NDYyYTcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5mdHJlZXMuYwpAQCAtMCwwICsxLDMwNCBAQAorLyogaW5mdHJlZXMuYyAtLSBnZW5lcmF0ZSBIdWZmbWFuIHRyZWVzIGZvciBlZmZpY2llbnQgZGVjb2RpbmcKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIyIE1hcmsgQWRsZXIKKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKKyAqLworCisjaW5jbHVkZSAienV0aWwuaCIKKyNpbmNsdWRlICJpbmZ0cmVlcy5oIgorCisjZGVmaW5lIE1BWEJJVFMgMTUKKworY29uc3QgY2hhciBpbmZsYXRlX2NvcHlyaWdodFtdID0KKyAgICIgaW5mbGF0ZSAxLjIuMTIgQ29weXJpZ2h0IDE5OTUtMjAyMiBNYXJrIEFkbGVyICI7CisvKgorICBJZiB5b3UgdXNlIHRoZSB6bGliIGxpYnJhcnkgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpcyB3ZWxjb21lCisgIGluIHRoZSBkb2N1bWVudGF0aW9uIG9mIHlvdXIgcHJvZHVjdC4gSWYgZm9yIHNvbWUgcmVhc29uIHlvdSBjYW5ub3QKKyAgaW5jbHVkZSBzdWNoIGFuIGFja25vd2xlZGdtZW50LCBJIHdvdWxkIGFwcHJlY2lhdGUgdGhhdCB5b3Uga2VlcCB0aGlzCisgIGNvcHlyaWdodCBzdHJpbmcgaW4gdGhlIGV4ZWN1dGFibGUgb2YgeW91ciBwcm9kdWN0LgorICovCisKKy8qCisgICBCdWlsZCBhIHNldCBvZiB0YWJsZXMgdG8gZGVjb2RlIHRoZSBwcm92aWRlZCBjYW5vbmljYWwgSHVmZm1hbiBjb2RlLgorICAgVGhlIGNvZGUgbGVuZ3RocyBhcmUgbGVuc1swLi5jb2Rlcy0xXS4gIFRoZSByZXN1bHQgc3RhcnRzIGF0ICp0YWJsZSwKKyAgIHdob3NlIGluZGljZXMgYXJlIDAuLjJeYml0cy0xLiAgd29yayBpcyBhIHdyaXRhYmxlIGFycmF5IG9mIGF0IGxlYXN0CisgICBsZW5zIHNob3J0cywgd2hpY2ggaXMgdXNlZCBhcyBhIHdvcmsgYXJlYS4gIHR5cGUgaXMgdGhlIHR5cGUgb2YgY29kZQorICAgdG8gYmUgZ2VuZXJhdGVkLCBDT0RFUywgTEVOUywgb3IgRElTVFMuICBPbiByZXR1cm4sIHplcm8gaXMgc3VjY2VzcywKKyAgIC0xIGlzIGFuIGludmFsaWQgY29kZSwgYW5kICsxIG1lYW5zIHRoYXQgRU5PVUdIIGlzbid0IGVub3VnaC4gIHRhYmxlCisgICBvbiByZXR1cm4gcG9pbnRzIHRvIHRoZSBuZXh0IGF2YWlsYWJsZSBlbnRyeSdzIGFkZHJlc3MuICBiaXRzIGlzIHRoZQorICAgcmVxdWVzdGVkIHJvb3QgdGFibGUgaW5kZXggYml0cywgYW5kIG9uIHJldHVybiBpdCBpcyB0aGUgYWN0dWFsIHJvb3QKKyAgIHRhYmxlIGluZGV4IGJpdHMuICBJdCB3aWxsIGRpZmZlciBpZiB0aGUgcmVxdWVzdCBpcyBncmVhdGVyIHRoYW4gdGhlCisgICBsb25nZXN0IGNvZGUgb3IgaWYgaXQgaXMgbGVzcyB0aGFuIHRoZSBzaG9ydGVzdCBjb2RlLgorICovCitpbnQgWkxJQl9JTlRFUk5BTCBpbmZsYXRlX3RhYmxlKHR5cGUsIGxlbnMsIGNvZGVzLCB0YWJsZSwgYml0cywgd29yaykKK2NvZGV0eXBlIHR5cGU7Cit1bnNpZ25lZCBzaG9ydCBGQVIgKmxlbnM7Cit1bnNpZ25lZCBjb2RlczsKK2NvZGUgRkFSICogRkFSICp0YWJsZTsKK3Vuc2lnbmVkIEZBUiAqYml0czsKK3Vuc2lnbmVkIHNob3J0IEZBUiAqd29yazsKK3sKKyAgICB1bnNpZ25lZCBsZW47ICAgICAgICAgICAgICAgLyogYSBjb2RlJ3MgbGVuZ3RoIGluIGJpdHMgKi8KKyAgICB1bnNpZ25lZCBzeW07ICAgICAgICAgICAgICAgLyogaW5kZXggb2YgY29kZSBzeW1ib2xzICovCisgICAgdW5zaWduZWQgbWluLCBtYXg7ICAgICAgICAgIC8qIG1pbmltdW0gYW5kIG1heGltdW0gY29kZSBsZW5ndGhzICovCisgICAgdW5zaWduZWQgcm9vdDsgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBpbmRleCBiaXRzIGZvciByb290IHRhYmxlICovCisgICAgdW5zaWduZWQgY3VycjsgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBpbmRleCBiaXRzIGZvciBjdXJyZW50IHRhYmxlICovCisgICAgdW5zaWduZWQgZHJvcDsgICAgICAgICAgICAgIC8qIGNvZGUgYml0cyB0byBkcm9wIGZvciBzdWItdGFibGUgKi8KKyAgICBpbnQgbGVmdDsgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHByZWZpeCBjb2RlcyBhdmFpbGFibGUgKi8KKyAgICB1bnNpZ25lZCB1c2VkOyAgICAgICAgICAgICAgLyogY29kZSBlbnRyaWVzIGluIHRhYmxlIHVzZWQgKi8KKyAgICB1bnNpZ25lZCBodWZmOyAgICAgICAgICAgICAgLyogSHVmZm1hbiBjb2RlICovCisgICAgdW5zaWduZWQgaW5jcjsgICAgICAgICAgICAgIC8qIGZvciBpbmNyZW1lbnRpbmcgY29kZSwgaW5kZXggKi8KKyAgICB1bnNpZ25lZCBmaWxsOyAgICAgICAgICAgICAgLyogaW5kZXggZm9yIHJlcGxpY2F0aW5nIGVudHJpZXMgKi8KKyAgICB1bnNpZ25lZCBsb3c7ICAgICAgICAgICAgICAgLyogbG93IGJpdHMgZm9yIGN1cnJlbnQgcm9vdCBlbnRyeSAqLworICAgIHVuc2lnbmVkIG1hc2s7ICAgICAgICAgICAgICAvKiBtYXNrIGZvciBsb3cgcm9vdCBiaXRzICovCisgICAgY29kZSBoZXJlOyAgICAgICAgICAgICAgICAgIC8qIHRhYmxlIGVudHJ5IGZvciBkdXBsaWNhdGlvbiAqLworICAgIGNvZGUgRkFSICpuZXh0OyAgICAgICAgICAgICAvKiBuZXh0IGF2YWlsYWJsZSBzcGFjZSBpbiB0YWJsZSAqLworICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IEZBUiAqYmFzZTsgICAgIC8qIGJhc2UgdmFsdWUgdGFibGUgdG8gdXNlICovCisgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgRkFSICpleHRyYTsgICAgLyogZXh0cmEgYml0cyB0YWJsZSB0byB1c2UgKi8KKyAgICB1bnNpZ25lZCBtYXRjaDsgICAgICAgICAgICAgLyogdXNlIGJhc2UgYW5kIGV4dHJhIGZvciBzeW1ib2wgPj0gbWF0Y2ggKi8KKyAgICB1bnNpZ25lZCBzaG9ydCBjb3VudFtNQVhCSVRTKzFdOyAgICAvKiBudW1iZXIgb2YgY29kZXMgb2YgZWFjaCBsZW5ndGggKi8KKyAgICB1bnNpZ25lZCBzaG9ydCBvZmZzW01BWEJJVFMrMV07ICAgICAvKiBvZmZzZXRzIGluIHRhYmxlIGZvciBlYWNoIGxlbmd0aCAqLworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBsYmFzZVszMV0gPSB7IC8qIExlbmd0aCBjb2RlcyAyNTcuLjI4NSBiYXNlICovCisgICAgICAgIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTMsIDE1LCAxNywgMTksIDIzLCAyNywgMzEsCisgICAgICAgIDM1LCA0MywgNTEsIDU5LCA2NywgODMsIDk5LCAxMTUsIDEzMSwgMTYzLCAxOTUsIDIyNywgMjU4LCAwLCAwfTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbGV4dFszMV0gPSB7IC8qIExlbmd0aCBjb2RlcyAyNTcuLjI4NSBleHRyYSAqLworICAgICAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE3LCAxNywgMTcsIDE3LCAxOCwgMTgsIDE4LCAxOCwKKyAgICAgICAgMTksIDE5LCAxOSwgMTksIDIwLCAyMCwgMjAsIDIwLCAyMSwgMjEsIDIxLCAyMSwgMTYsIDE5OSwgMjAyfTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgZGJhc2VbMzJdID0geyAvKiBEaXN0YW5jZSBjb2RlcyAwLi4yOSBiYXNlICovCisgICAgICAgIDEsIDIsIDMsIDQsIDUsIDcsIDksIDEzLCAxNywgMjUsIDMzLCA0OSwgNjUsIDk3LCAxMjksIDE5MywKKyAgICAgICAgMjU3LCAzODUsIDUxMywgNzY5LCAxMDI1LCAxNTM3LCAyMDQ5LCAzMDczLCA0MDk3LCA2MTQ1LAorICAgICAgICA4MTkzLCAxMjI4OSwgMTYzODUsIDI0NTc3LCAwLCAwfTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgZGV4dFszMl0gPSB7IC8qIERpc3RhbmNlIGNvZGVzIDAuLjI5IGV4dHJhICovCisgICAgICAgIDE2LCAxNiwgMTYsIDE2LCAxNywgMTcsIDE4LCAxOCwgMTksIDE5LCAyMCwgMjAsIDIxLCAyMSwgMjIsIDIyLAorICAgICAgICAyMywgMjMsIDI0LCAyNCwgMjUsIDI1LCAyNiwgMjYsIDI3LCAyNywKKyAgICAgICAgMjgsIDI4LCAyOSwgMjksIDY0LCA2NH07CisKKyAgICAvKgorICAgICAgIFByb2Nlc3MgYSBzZXQgb2YgY29kZSBsZW5ndGhzIHRvIGNyZWF0ZSBhIGNhbm9uaWNhbCBIdWZmbWFuIGNvZGUuICBUaGUKKyAgICAgICBjb2RlIGxlbmd0aHMgYXJlIGxlbnNbMC4uY29kZXMtMV0uICBFYWNoIGxlbmd0aCBjb3JyZXNwb25kcyB0byB0aGUKKyAgICAgICBzeW1ib2xzIDAuLmNvZGVzLTEuICBUaGUgSHVmZm1hbiBjb2RlIGlzIGdlbmVyYXRlZCBieSBmaXJzdCBzb3J0aW5nIHRoZQorICAgICAgIHN5bWJvbHMgYnkgbGVuZ3RoIGZyb20gc2hvcnQgdG8gbG9uZywgYW5kIHJldGFpbmluZyB0aGUgc3ltYm9sIG9yZGVyCisgICAgICAgZm9yIGNvZGVzIHdpdGggZXF1YWwgbGVuZ3Rocy4gIFRoZW4gdGhlIGNvZGUgc3RhcnRzIHdpdGggYWxsIHplcm8gYml0cworICAgICAgIGZvciB0aGUgZmlyc3QgY29kZSBvZiB0aGUgc2hvcnRlc3QgbGVuZ3RoLCBhbmQgdGhlIGNvZGVzIGFyZSBpbnRlZ2VyCisgICAgICAgaW5jcmVtZW50cyBmb3IgdGhlIHNhbWUgbGVuZ3RoLCBhbmQgemVyb3MgYXJlIGFwcGVuZGVkIGFzIHRoZSBsZW5ndGgKKyAgICAgICBpbmNyZWFzZXMuICBGb3IgdGhlIGRlZmxhdGUgZm9ybWF0LCB0aGVzZSBiaXRzIGFyZSBzdG9yZWQgYmFja3dhcmRzCisgICAgICAgZnJvbSB0aGVpciBtb3JlIG5hdHVyYWwgaW50ZWdlciBpbmNyZW1lbnQgb3JkZXJpbmcsIGFuZCBzbyB3aGVuIHRoZQorICAgICAgIGRlY29kaW5nIHRhYmxlcyBhcmUgYnVpbHQgaW4gdGhlIGxhcmdlIGxvb3AgYmVsb3csIHRoZSBpbnRlZ2VyIGNvZGVzCisgICAgICAgYXJlIGluY3JlbWVudGVkIGJhY2t3YXJkcy4KKworICAgICAgIFRoaXMgcm91dGluZSBhc3N1bWVzLCBidXQgZG9lcyBub3QgY2hlY2ssIHRoYXQgYWxsIG9mIHRoZSBlbnRyaWVzIGluCisgICAgICAgbGVuc1tdIGFyZSBpbiB0aGUgcmFuZ2UgMC4uTUFYQklUUy4gIFRoZSBjYWxsZXIgbXVzdCBhc3N1cmUgdGhpcy4KKyAgICAgICAxLi5NQVhCSVRTIGlzIGludGVycHJldGVkIGFzIHRoYXQgY29kZSBsZW5ndGguICB6ZXJvIG1lYW5zIHRoYXQgdGhhdAorICAgICAgIHN5bWJvbCBkb2VzIG5vdCBvY2N1ciBpbiB0aGlzIGNvZGUuCisKKyAgICAgICBUaGUgY29kZXMgYXJlIHNvcnRlZCBieSBjb21wdXRpbmcgYSBjb3VudCBvZiBjb2RlcyBmb3IgZWFjaCBsZW5ndGgsCisgICAgICAgY3JlYXRpbmcgZnJvbSB0aGF0IGEgdGFibGUgb2Ygc3RhcnRpbmcgaW5kaWNlcyBmb3IgZWFjaCBsZW5ndGggaW4gdGhlCisgICAgICAgc29ydGVkIHRhYmxlLCBhbmQgdGhlbiBlbnRlcmluZyB0aGUgc3ltYm9scyBpbiBvcmRlciBpbiB0aGUgc29ydGVkCisgICAgICAgdGFibGUuICBUaGUgc29ydGVkIHRhYmxlIGlzIHdvcmtbXSwgd2l0aCB0aGF0IHNwYWNlIGJlaW5nIHByb3ZpZGVkIGJ5CisgICAgICAgdGhlIGNhbGxlci4KKworICAgICAgIFRoZSBsZW5ndGggY291bnRzIGFyZSB1c2VkIGZvciBvdGhlciBwdXJwb3NlcyBhcyB3ZWxsLCBpLmUuIGZpbmRpbmcKKyAgICAgICB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBsZW5ndGggY29kZXMsIGRldGVybWluaW5nIGlmIHRoZXJlIGFyZSBhbnkKKyAgICAgICBjb2RlcyBhdCBhbGwsIGNoZWNraW5nIGZvciBhIHZhbGlkIHNldCBvZiBsZW5ndGhzLCBhbmQgbG9va2luZyBhaGVhZAorICAgICAgIGF0IGxlbmd0aCBjb3VudHMgdG8gZGV0ZXJtaW5lIHN1Yi10YWJsZSBzaXplcyB3aGVuIGJ1aWxkaW5nIHRoZQorICAgICAgIGRlY29kaW5nIHRhYmxlcy4KKyAgICAgKi8KKworICAgIC8qIGFjY3VtdWxhdGUgbGVuZ3RocyBmb3IgY29kZXMgKGFzc3VtZXMgbGVuc1tdIGFsbCBpbiAwLi5NQVhCSVRTKSAqLworICAgIGZvciAobGVuID0gMDsgbGVuIDw9IE1BWEJJVFM7IGxlbisrKQorICAgICAgICBjb3VudFtsZW5dID0gMDsKKyAgICBmb3IgKHN5bSA9IDA7IHN5bSA8IGNvZGVzOyBzeW0rKykKKyAgICAgICAgY291bnRbbGVuc1tzeW1dXSsrOworCisgICAgLyogYm91bmQgY29kZSBsZW5ndGhzLCBmb3JjZSByb290IHRvIGJlIHdpdGhpbiBjb2RlIGxlbmd0aHMgKi8KKyAgICByb290ID0gKmJpdHM7CisgICAgZm9yIChtYXggPSBNQVhCSVRTOyBtYXggPj0gMTsgbWF4LS0pCisgICAgICAgIGlmIChjb3VudFttYXhdICE9IDApIGJyZWFrOworICAgIGlmIChyb290ID4gbWF4KSByb290ID0gbWF4OworICAgIGlmIChtYXggPT0gMCkgeyAgICAgICAgICAgICAgICAgICAgIC8qIG5vIHN5bWJvbHMgdG8gY29kZSBhdCBhbGwgKi8KKyAgICAgICAgaGVyZS5vcCA9ICh1bnNpZ25lZCBjaGFyKTY0OyAgICAvKiBpbnZhbGlkIGNvZGUgbWFya2VyICovCisgICAgICAgIGhlcmUuYml0cyA9ICh1bnNpZ25lZCBjaGFyKTE7CisgICAgICAgIGhlcmUudmFsID0gKHVuc2lnbmVkIHNob3J0KTA7CisgICAgICAgICooKnRhYmxlKSsrID0gaGVyZTsgICAgICAgICAgICAgLyogbWFrZSBhIHRhYmxlIHRvIGZvcmNlIGFuIGVycm9yICovCisgICAgICAgICooKnRhYmxlKSsrID0gaGVyZTsKKyAgICAgICAgKmJpdHMgPSAxOworICAgICAgICByZXR1cm4gMDsgICAgIC8qIG5vIHN5bWJvbHMsIGJ1dCB3YWl0IGZvciBkZWNvZGluZyB0byByZXBvcnQgZXJyb3IgKi8KKyAgICB9CisgICAgZm9yIChtaW4gPSAxOyBtaW4gPCBtYXg7IG1pbisrKQorICAgICAgICBpZiAoY291bnRbbWluXSAhPSAwKSBicmVhazsKKyAgICBpZiAocm9vdCA8IG1pbikgcm9vdCA9IG1pbjsKKworICAgIC8qIGNoZWNrIGZvciBhbiBvdmVyLXN1YnNjcmliZWQgb3IgaW5jb21wbGV0ZSBzZXQgb2YgbGVuZ3RocyAqLworICAgIGxlZnQgPSAxOworICAgIGZvciAobGVuID0gMTsgbGVuIDw9IE1BWEJJVFM7IGxlbisrKSB7CisgICAgICAgIGxlZnQgPDw9IDE7CisgICAgICAgIGxlZnQgLT0gY291bnRbbGVuXTsKKyAgICAgICAgaWYgKGxlZnQgPCAwKSByZXR1cm4gLTE7ICAgICAgICAvKiBvdmVyLXN1YnNjcmliZWQgKi8KKyAgICB9CisgICAgaWYgKGxlZnQgPiAwICYmICh0eXBlID09IENPREVTIHx8IG1heCAhPSAxKSkKKyAgICAgICAgcmV0dXJuIC0xOyAgICAgICAgICAgICAgICAgICAgICAvKiBpbmNvbXBsZXRlIHNldCAqLworCisgICAgLyogZ2VuZXJhdGUgb2Zmc2V0cyBpbnRvIHN5bWJvbCB0YWJsZSBmb3IgZWFjaCBsZW5ndGggZm9yIHNvcnRpbmcgKi8KKyAgICBvZmZzWzFdID0gMDsKKyAgICBmb3IgKGxlbiA9IDE7IGxlbiA8IE1BWEJJVFM7IGxlbisrKQorICAgICAgICBvZmZzW2xlbiArIDFdID0gb2Zmc1tsZW5dICsgY291bnRbbGVuXTsKKworICAgIC8qIHNvcnQgc3ltYm9scyBieSBsZW5ndGgsIGJ5IHN5bWJvbCBvcmRlciB3aXRoaW4gZWFjaCBsZW5ndGggKi8KKyAgICBmb3IgKHN5bSA9IDA7IHN5bSA8IGNvZGVzOyBzeW0rKykKKyAgICAgICAgaWYgKGxlbnNbc3ltXSAhPSAwKSB3b3JrW29mZnNbbGVuc1tzeW1dXSsrXSA9ICh1bnNpZ25lZCBzaG9ydClzeW07CisKKyAgICAvKgorICAgICAgIENyZWF0ZSBhbmQgZmlsbCBpbiBkZWNvZGluZyB0YWJsZXMuICBJbiB0aGlzIGxvb3AsIHRoZSB0YWJsZSBiZWluZworICAgICAgIGZpbGxlZCBpcyBhdCBuZXh0IGFuZCBoYXMgY3VyciBpbmRleCBiaXRzLiAgVGhlIGNvZGUgYmVpbmcgdXNlZCBpcyBodWZmCisgICAgICAgd2l0aCBsZW5ndGggbGVuLiAgVGhhdCBjb2RlIGlzIGNvbnZlcnRlZCB0byBhbiBpbmRleCBieSBkcm9wcGluZyBkcm9wCisgICAgICAgYml0cyBvZmYgb2YgdGhlIGJvdHRvbS4gIEZvciBjb2RlcyB3aGVyZSBsZW4gaXMgbGVzcyB0aGFuIGRyb3AgKyBjdXJyLAorICAgICAgIHRob3NlIHRvcCBkcm9wICsgY3VyciAtIGxlbiBiaXRzIGFyZSBpbmNyZW1lbnRlZCB0aHJvdWdoIGFsbCB2YWx1ZXMgdG8KKyAgICAgICBmaWxsIHRoZSB0YWJsZSB3aXRoIHJlcGxpY2F0ZWQgZW50cmllcy4KKworICAgICAgIHJvb3QgaXMgdGhlIG51bWJlciBvZiBpbmRleCBiaXRzIGZvciB0aGUgcm9vdCB0YWJsZS4gIFdoZW4gbGVuIGV4Y2VlZHMKKyAgICAgICByb290LCBzdWItdGFibGVzIGFyZSBjcmVhdGVkIHBvaW50ZWQgdG8gYnkgdGhlIHJvb3QgZW50cnkgd2l0aCBhbiBpbmRleAorICAgICAgIG9mIHRoZSBsb3cgcm9vdCBiaXRzIG9mIGh1ZmYuICBUaGlzIGlzIHNhdmVkIGluIGxvdyB0byBjaGVjayBmb3Igd2hlbiBhCisgICAgICAgbmV3IHN1Yi10YWJsZSBzaG91bGQgYmUgc3RhcnRlZC4gIGRyb3AgaXMgemVybyB3aGVuIHRoZSByb290IHRhYmxlIGlzCisgICAgICAgYmVpbmcgZmlsbGVkLCBhbmQgZHJvcCBpcyByb290IHdoZW4gc3ViLXRhYmxlcyBhcmUgYmVpbmcgZmlsbGVkLgorCisgICAgICAgV2hlbiBhIG5ldyBzdWItdGFibGUgaXMgbmVlZGVkLCBpdCBpcyBuZWNlc3NhcnkgdG8gbG9vayBhaGVhZCBpbiB0aGUKKyAgICAgICBjb2RlIGxlbmd0aHMgdG8gZGV0ZXJtaW5lIHdoYXQgc2l6ZSBzdWItdGFibGUgaXMgbmVlZGVkLiAgVGhlIGxlbmd0aAorICAgICAgIGNvdW50cyBhcmUgdXNlZCBmb3IgdGhpcywgYW5kIHNvIGNvdW50W10gaXMgZGVjcmVtZW50ZWQgYXMgY29kZXMgYXJlCisgICAgICAgZW50ZXJlZCBpbiB0aGUgdGFibGVzLgorCisgICAgICAgdXNlZCBrZWVwcyB0cmFjayBvZiBob3cgbWFueSB0YWJsZSBlbnRyaWVzIGhhdmUgYmVlbiBhbGxvY2F0ZWQgZnJvbSB0aGUKKyAgICAgICBwcm92aWRlZCAqdGFibGUgc3BhY2UuICBJdCBpcyBjaGVja2VkIGZvciBMRU5TIGFuZCBESVNUIHRhYmxlcyBhZ2FpbnN0CisgICAgICAgdGhlIGNvbnN0YW50cyBFTk9VR0hfTEVOUyBhbmQgRU5PVUdIX0RJU1RTIHRvIGd1YXJkIGFnYWluc3QgY2hhbmdlcyBpbgorICAgICAgIHRoZSBpbml0aWFsIHJvb3QgdGFibGUgc2l6ZSBjb25zdGFudHMuICBTZWUgdGhlIGNvbW1lbnRzIGluIGluZnRyZWVzLmgKKyAgICAgICBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworICAgICAgIHN5bSBpbmNyZW1lbnRzIHRocm91Z2ggYWxsIHN5bWJvbHMsIGFuZCB0aGUgbG9vcCB0ZXJtaW5hdGVzIHdoZW4KKyAgICAgICBhbGwgY29kZXMgb2YgbGVuZ3RoIG1heCwgaS5lLiBhbGwgY29kZXMsIGhhdmUgYmVlbiBwcm9jZXNzZWQuICBUaGlzCisgICAgICAgcm91dGluZSBwZXJtaXRzIGluY29tcGxldGUgY29kZXMsIHNvIGFub3RoZXIgbG9vcCBhZnRlciB0aGlzIG9uZSBmaWxscworICAgICAgIGluIHRoZSByZXN0IG9mIHRoZSBkZWNvZGluZyB0YWJsZXMgd2l0aCBpbnZhbGlkIGNvZGUgbWFya2Vycy4KKyAgICAgKi8KKworICAgIC8qIHNldCB1cCBmb3IgY29kZSB0eXBlICovCisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBDT0RFUzoKKyAgICAgICAgYmFzZSA9IGV4dHJhID0gd29yazsgICAgLyogZHVtbXkgdmFsdWUtLW5vdCB1c2VkICovCisgICAgICAgIG1hdGNoID0gMjA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTEVOUzoKKyAgICAgICAgYmFzZSA9IGxiYXNlOworICAgICAgICBleHRyYSA9IGxleHQ7CisgICAgICAgIG1hdGNoID0gMjU3OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OiAgICAvKiBESVNUUyAqLworICAgICAgICBiYXNlID0gZGJhc2U7CisgICAgICAgIGV4dHJhID0gZGV4dDsKKyAgICAgICAgbWF0Y2ggPSAwOworICAgIH0KKworICAgIC8qIGluaXRpYWxpemUgc3RhdGUgZm9yIGxvb3AgKi8KKyAgICBodWZmID0gMDsgICAgICAgICAgICAgICAgICAgLyogc3RhcnRpbmcgY29kZSAqLworICAgIHN5bSA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiBzdGFydGluZyBjb2RlIHN5bWJvbCAqLworICAgIGxlbiA9IG1pbjsgICAgICAgICAgICAgICAgICAvKiBzdGFydGluZyBjb2RlIGxlbmd0aCAqLworICAgIG5leHQgPSAqdGFibGU7ICAgICAgICAgICAgICAvKiBjdXJyZW50IHRhYmxlIHRvIGZpbGwgaW4gKi8KKyAgICBjdXJyID0gcm9vdDsgICAgICAgICAgICAgICAgLyogY3VycmVudCB0YWJsZSBpbmRleCBiaXRzICovCisgICAgZHJvcCA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIGN1cnJlbnQgYml0cyB0byBkcm9wIGZyb20gY29kZSBmb3IgaW5kZXggKi8KKyAgICBsb3cgPSAodW5zaWduZWQpKC0xKTsgICAgICAgLyogdHJpZ2dlciBuZXcgc3ViLXRhYmxlIHdoZW4gbGVuID4gcm9vdCAqLworICAgIHVzZWQgPSAxVSA8PCByb290OyAgICAgICAgICAvKiB1c2Ugcm9vdCB0YWJsZSBlbnRyaWVzICovCisgICAgbWFzayA9IHVzZWQgLSAxOyAgICAgICAgICAgIC8qIG1hc2sgZm9yIGNvbXBhcmluZyBsb3cgKi8KKworICAgIC8qIGNoZWNrIGF2YWlsYWJsZSB0YWJsZSBzcGFjZSAqLworICAgIGlmICgodHlwZSA9PSBMRU5TICYmIHVzZWQgPiBFTk9VR0hfTEVOUykgfHwKKyAgICAgICAgKHR5cGUgPT0gRElTVFMgJiYgdXNlZCA+IEVOT1VHSF9ESVNUUykpCisgICAgICAgIHJldHVybiAxOworCisgICAgLyogcHJvY2VzcyBhbGwgY29kZXMgYW5kIG1ha2UgdGFibGUgZW50cmllcyAqLworICAgIGZvciAoOzspIHsKKyAgICAgICAgLyogY3JlYXRlIHRhYmxlIGVudHJ5ICovCisgICAgICAgIGhlcmUuYml0cyA9ICh1bnNpZ25lZCBjaGFyKShsZW4gLSBkcm9wKTsKKyAgICAgICAgaWYgKHdvcmtbc3ltXSArIDFVIDwgbWF0Y2gpIHsKKyAgICAgICAgICAgIGhlcmUub3AgPSAodW5zaWduZWQgY2hhcikwOworICAgICAgICAgICAgaGVyZS52YWwgPSB3b3JrW3N5bV07CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAod29ya1tzeW1dID49IG1hdGNoKSB7CisgICAgICAgICAgICBoZXJlLm9wID0gKHVuc2lnbmVkIGNoYXIpKGV4dHJhW3dvcmtbc3ltXSAtIG1hdGNoXSk7CisgICAgICAgICAgICBoZXJlLnZhbCA9IGJhc2Vbd29ya1tzeW1dIC0gbWF0Y2hdOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaGVyZS5vcCA9ICh1bnNpZ25lZCBjaGFyKSgzMiArIDY0KTsgICAgICAgICAvKiBlbmQgb2YgYmxvY2sgKi8KKyAgICAgICAgICAgIGhlcmUudmFsID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHJlcGxpY2F0ZSBmb3IgdGhvc2UgaW5kaWNlcyB3aXRoIGxvdyBsZW4gYml0cyBlcXVhbCB0byBodWZmICovCisgICAgICAgIGluY3IgPSAxVSA8PCAobGVuIC0gZHJvcCk7CisgICAgICAgIGZpbGwgPSAxVSA8PCBjdXJyOworICAgICAgICBtaW4gPSBmaWxsOyAgICAgICAgICAgICAgICAgLyogc2F2ZSBvZmZzZXQgdG8gbmV4dCB0YWJsZSAqLworICAgICAgICBkbyB7CisgICAgICAgICAgICBmaWxsIC09IGluY3I7CisgICAgICAgICAgICBuZXh0WyhodWZmID4+IGRyb3ApICsgZmlsbF0gPSBoZXJlOworICAgICAgICB9IHdoaWxlIChmaWxsICE9IDApOworCisgICAgICAgIC8qIGJhY2t3YXJkcyBpbmNyZW1lbnQgdGhlIGxlbi1iaXQgY29kZSBodWZmICovCisgICAgICAgIGluY3IgPSAxVSA8PCAobGVuIC0gMSk7CisgICAgICAgIHdoaWxlIChodWZmICYgaW5jcikKKyAgICAgICAgICAgIGluY3IgPj49IDE7CisgICAgICAgIGlmIChpbmNyICE9IDApIHsKKyAgICAgICAgICAgIGh1ZmYgJj0gaW5jciAtIDE7CisgICAgICAgICAgICBodWZmICs9IGluY3I7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaHVmZiA9IDA7CisKKyAgICAgICAgLyogZ28gdG8gbmV4dCBzeW1ib2wsIHVwZGF0ZSBjb3VudCwgbGVuICovCisgICAgICAgIHN5bSsrOworICAgICAgICBpZiAoLS0oY291bnRbbGVuXSkgPT0gMCkgeworICAgICAgICAgICAgaWYgKGxlbiA9PSBtYXgpIGJyZWFrOworICAgICAgICAgICAgbGVuID0gbGVuc1t3b3JrW3N5bV1dOworICAgICAgICB9CisKKyAgICAgICAgLyogY3JlYXRlIG5ldyBzdWItdGFibGUgaWYgbmVlZGVkICovCisgICAgICAgIGlmIChsZW4gPiByb290ICYmIChodWZmICYgbWFzaykgIT0gbG93KSB7CisgICAgICAgICAgICAvKiBpZiBmaXJzdCB0aW1lLCB0cmFuc2l0aW9uIHRvIHN1Yi10YWJsZXMgKi8KKyAgICAgICAgICAgIGlmIChkcm9wID09IDApCisgICAgICAgICAgICAgICAgZHJvcCA9IHJvb3Q7CisKKyAgICAgICAgICAgIC8qIGluY3JlbWVudCBwYXN0IGxhc3QgdGFibGUgKi8KKyAgICAgICAgICAgIG5leHQgKz0gbWluOyAgICAgICAgICAgIC8qIGhlcmUgbWluIGlzIDEgPDwgY3VyciAqLworCisgICAgICAgICAgICAvKiBkZXRlcm1pbmUgbGVuZ3RoIG9mIG5leHQgdGFibGUgKi8KKyAgICAgICAgICAgIGN1cnIgPSBsZW4gLSBkcm9wOworICAgICAgICAgICAgbGVmdCA9IChpbnQpKDEgPDwgY3Vycik7CisgICAgICAgICAgICB3aGlsZSAoY3VyciArIGRyb3AgPCBtYXgpIHsKKyAgICAgICAgICAgICAgICBsZWZ0IC09IGNvdW50W2N1cnIgKyBkcm9wXTsKKyAgICAgICAgICAgICAgICBpZiAobGVmdCA8PSAwKSBicmVhazsKKyAgICAgICAgICAgICAgICBjdXJyKys7CisgICAgICAgICAgICAgICAgbGVmdCA8PD0gMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogY2hlY2sgZm9yIGVub3VnaCBzcGFjZSAqLworICAgICAgICAgICAgdXNlZCArPSAxVSA8PCBjdXJyOworICAgICAgICAgICAgaWYgKCh0eXBlID09IExFTlMgJiYgdXNlZCA+IEVOT1VHSF9MRU5TKSB8fAorICAgICAgICAgICAgICAgICh0eXBlID09IERJU1RTICYmIHVzZWQgPiBFTk9VR0hfRElTVFMpKQorICAgICAgICAgICAgICAgIHJldHVybiAxOworCisgICAgICAgICAgICAvKiBwb2ludCBlbnRyeSBpbiByb290IHRhYmxlIHRvIHN1Yi10YWJsZSAqLworICAgICAgICAgICAgbG93ID0gaHVmZiAmIG1hc2s7CisgICAgICAgICAgICAoKnRhYmxlKVtsb3ddLm9wID0gKHVuc2lnbmVkIGNoYXIpY3VycjsKKyAgICAgICAgICAgICgqdGFibGUpW2xvd10uYml0cyA9ICh1bnNpZ25lZCBjaGFyKXJvb3Q7CisgICAgICAgICAgICAoKnRhYmxlKVtsb3ddLnZhbCA9ICh1bnNpZ25lZCBzaG9ydCkobmV4dCAtICp0YWJsZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBmaWxsIGluIHJlbWFpbmluZyB0YWJsZSBlbnRyeSBpZiBjb2RlIGlzIGluY29tcGxldGUgKGd1YXJhbnRlZWQgdG8gaGF2ZQorICAgICAgIGF0IG1vc3Qgb25lIHJlbWFpbmluZyBlbnRyeSwgc2luY2UgaWYgdGhlIGNvZGUgaXMgaW5jb21wbGV0ZSwgdGhlCisgICAgICAgbWF4aW11bSBjb2RlIGxlbmd0aCB0aGF0IHdhcyBhbGxvd2VkIHRvIGdldCB0aGlzIGZhciBpcyBvbmUgYml0KSAqLworICAgIGlmIChodWZmICE9IDApIHsKKyAgICAgICAgaGVyZS5vcCA9ICh1bnNpZ25lZCBjaGFyKTY0OyAgICAgICAgICAgIC8qIGludmFsaWQgY29kZSBtYXJrZXIgKi8KKyAgICAgICAgaGVyZS5iaXRzID0gKHVuc2lnbmVkIGNoYXIpKGxlbiAtIGRyb3ApOworICAgICAgICBoZXJlLnZhbCA9ICh1bnNpZ25lZCBzaG9ydCkwOworICAgICAgICBuZXh0W2h1ZmZdID0gaGVyZTsKKyAgICB9CisKKyAgICAvKiBzZXQgcmV0dXJuIHBhcmFtZXRlcnMgKi8KKyAgICAqdGFibGUgKz0gdXNlZDsKKyAgICAqYml0cyA9IHJvb3Q7CisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9zcmMvaW5mdHJlZXMuaCBiL3NyYy9pbmZ0cmVlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhYTUzYTAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5mdHJlZXMuaApAQCAtMCwwICsxLDYyIEBACisvKiBpbmZ0cmVlcy5oIC0tIGhlYWRlciB0byB1c2UgaW5mdHJlZXMuYworICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDUsIDIwMTAgTWFyayBBZGxlcgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAorICovCisKKy8qIFdBUk5JTkc6IHRoaXMgZmlsZSBzaG91bGQgKm5vdCogYmUgdXNlZCBieSBhcHBsaWNhdGlvbnMuIEl0IGlzCisgICBwYXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgY29tcHJlc3Npb24gbGlicmFyeSBhbmQgaXMKKyAgIHN1YmplY3QgdG8gY2hhbmdlLiBBcHBsaWNhdGlvbnMgc2hvdWxkIG9ubHkgdXNlIHpsaWIuaC4KKyAqLworCisvKiBTdHJ1Y3R1cmUgZm9yIGRlY29kaW5nIHRhYmxlcy4gIEVhY2ggZW50cnkgcHJvdmlkZXMgZWl0aGVyIHRoZQorICAgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGRvIHRoZSBvcGVyYXRpb24gcmVxdWVzdGVkIGJ5IHRoZSBjb2RlIHRoYXQKKyAgIGluZGV4ZWQgdGhhdCB0YWJsZSBlbnRyeSwgb3IgaXQgcHJvdmlkZXMgYSBwb2ludGVyIHRvIGFub3RoZXIKKyAgIHRhYmxlIHRoYXQgaW5kZXhlcyBtb3JlIGJpdHMgb2YgdGhlIGNvZGUuICBvcCBpbmRpY2F0ZXMgd2hldGhlcgorICAgdGhlIGVudHJ5IGlzIGEgcG9pbnRlciB0byBhbm90aGVyIHRhYmxlLCBhIGxpdGVyYWwsIGEgbGVuZ3RoIG9yCisgICBkaXN0YW5jZSwgYW4gZW5kLW9mLWJsb2NrLCBvciBhbiBpbnZhbGlkIGNvZGUuICBGb3IgYSB0YWJsZQorICAgcG9pbnRlciwgdGhlIGxvdyBmb3VyIGJpdHMgb2Ygb3AgaXMgdGhlIG51bWJlciBvZiBpbmRleCBiaXRzIG9mCisgICB0aGF0IHRhYmxlLiAgRm9yIGEgbGVuZ3RoIG9yIGRpc3RhbmNlLCB0aGUgbG93IGZvdXIgYml0cyBvZiBvcAorICAgaXMgdGhlIG51bWJlciBvZiBleHRyYSBiaXRzIHRvIGdldCBhZnRlciB0aGUgY29kZS4gIGJpdHMgaXMKKyAgIHRoZSBudW1iZXIgb2YgYml0cyBpbiB0aGlzIGNvZGUgb3IgcGFydCBvZiB0aGUgY29kZSB0byBkcm9wIG9mZgorICAgb2YgdGhlIGJpdCBidWZmZXIuICB2YWwgaXMgdGhlIGFjdHVhbCBieXRlIHRvIG91dHB1dCBpbiB0aGUgY2FzZQorICAgb2YgYSBsaXRlcmFsLCB0aGUgYmFzZSBsZW5ndGggb3IgZGlzdGFuY2UsIG9yIHRoZSBvZmZzZXQgZnJvbQorICAgdGhlIGN1cnJlbnQgdGFibGUgdG8gdGhlIG5leHQgdGFibGUuICBFYWNoIGVudHJ5IGlzIGZvdXIgYnl0ZXMuICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgdW5zaWduZWQgY2hhciBvcDsgICAgICAgICAgIC8qIG9wZXJhdGlvbiwgZXh0cmEgYml0cywgdGFibGUgYml0cyAqLworICAgIHVuc2lnbmVkIGNoYXIgYml0czsgICAgICAgICAvKiBiaXRzIGluIHRoaXMgcGFydCBvZiB0aGUgY29kZSAqLworICAgIHVuc2lnbmVkIHNob3J0IHZhbDsgICAgICAgICAvKiBvZmZzZXQgaW4gdGFibGUgb3IgY29kZSB2YWx1ZSAqLworfSBjb2RlOworCisvKiBvcCB2YWx1ZXMgYXMgc2V0IGJ5IGluZmxhdGVfdGFibGUoKToKKyAgICAwMDAwMDAwMCAtIGxpdGVyYWwKKyAgICAwMDAwdHR0dCAtIHRhYmxlIGxpbmssIHR0dHQgIT0gMCBpcyB0aGUgbnVtYmVyIG9mIHRhYmxlIGluZGV4IGJpdHMKKyAgICAwMDAxZWVlZSAtIGxlbmd0aCBvciBkaXN0YW5jZSwgZWVlZSBpcyB0aGUgbnVtYmVyIG9mIGV4dHJhIGJpdHMKKyAgICAwMTEwMDAwMCAtIGVuZCBvZiBibG9jaworICAgIDAxMDAwMDAwIC0gaW52YWxpZCBjb2RlCisgKi8KKworLyogTWF4aW11bSBzaXplIG9mIHRoZSBkeW5hbWljIHRhYmxlLiAgVGhlIG1heGltdW0gbnVtYmVyIG9mIGNvZGUgc3RydWN0dXJlcyBpcworICAgMTQ0NCwgd2hpY2ggaXMgdGhlIHN1bSBvZiA4NTIgZm9yIGxpdGVyYWwvbGVuZ3RoIGNvZGVzIGFuZCA1OTIgZm9yIGRpc3RhbmNlCisgICBjb2Rlcy4gIFRoZXNlIHZhbHVlcyB3ZXJlIGZvdW5kIGJ5IGV4aGF1c3RpdmUgc2VhcmNoZXMgdXNpbmcgdGhlIHByb2dyYW0KKyAgIGV4YW1wbGVzL2Vub3VnaC5jIGZvdW5kIGluIHRoZSB6bGliIGRpc3RyaWJ0dXRpb24uICBUaGUgYXJndW1lbnRzIHRvIHRoYXQKKyAgIHByb2dyYW0gYXJlIHRoZSBudW1iZXIgb2Ygc3ltYm9scywgdGhlIGluaXRpYWwgcm9vdCB0YWJsZSBzaXplLCBhbmQgdGhlCisgICBtYXhpbXVtIGJpdCBsZW5ndGggb2YgYSBjb2RlLiAgImVub3VnaCAyODYgOSAxNSIgZm9yIGxpdGVyYWwvbGVuZ3RoIGNvZGVzCisgICByZXR1cm5zIHJldHVybnMgODUyLCBhbmQgImVub3VnaCAzMCA2IDE1IiBmb3IgZGlzdGFuY2UgY29kZXMgcmV0dXJucyA1OTIuCisgICBUaGUgaW5pdGlhbCByb290IHRhYmxlIHNpemUgKDkgb3IgNikgaXMgZm91bmQgaW4gdGhlIGZpZnRoIGFyZ3VtZW50IG9mIHRoZQorICAgaW5mbGF0ZV90YWJsZSgpIGNhbGxzIGluIGluZmxhdGUuYyBhbmQgaW5mYmFjay5jLiAgSWYgdGhlIHJvb3QgdGFibGUgc2l6ZSBpcworICAgY2hhbmdlZCwgdGhlbiB0aGVzZSBtYXhpbXVtIHNpemVzIHdvdWxkIGJlIG5lZWQgdG8gYmUgcmVjYWxjdWxhdGVkIGFuZAorICAgdXBkYXRlZC4gKi8KKyNkZWZpbmUgRU5PVUdIX0xFTlMgODUyCisjZGVmaW5lIEVOT1VHSF9ESVNUUyA1OTIKKyNkZWZpbmUgRU5PVUdIIChFTk9VR0hfTEVOUytFTk9VR0hfRElTVFMpCisKKy8qIFR5cGUgb2YgY29kZSB0byBidWlsZCBmb3IgaW5mbGF0ZV90YWJsZSgpICovCit0eXBlZGVmIGVudW0geworICAgIENPREVTLAorICAgIExFTlMsCisgICAgRElTVFMKK30gY29kZXR5cGU7CisKK2ludCBaTElCX0lOVEVSTkFMIGluZmxhdGVfdGFibGUgT0YoKGNvZGV0eXBlIHR5cGUsIHVuc2lnbmVkIHNob3J0IEZBUiAqbGVucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY29kZXMsIGNvZGUgRkFSICogRkFSICp0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgRkFSICpiaXRzLCB1bnNpZ25lZCBzaG9ydCBGQVIgKndvcmspKTsKZGlmZiAtLWdpdCBhL3NyYy9tYWtlX3Ztcy5jb20gYi9zcmMvbWFrZV92bXMuY29tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ZTlkMGMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFrZV92bXMuY29tCkBAIC0wLDAgKzEsODY3IEBACiskISBtYWtlIGxpYnogdW5kZXIgVk1TIHdyaXR0ZW4gYnkKKyQhIE1hcnRpbiBQLkouIFppbnNlcgorJCEKKyQhIEluIGNhc2Ugb2YgcHJvYmxlbXMgd2l0aCB0aGUgaW5zdGFsbCB5b3UgbWlnaHQgY29udGFjdCBtZSBhdAorJCEgemluc2VyQHppbnNlci5uby1pcC5pbmZvKHByZWZlcnJlZCkgb3IKKyQhIG1hcnRpbi56aW5zZXJAZXVyZXhjaGFuZ2UuY29tICh3b3JrKQorJCEKKyQhIE1ha2UgcHJvY2VkdXJlIGhpc3RvcnkgZm9yIFpsaWIKKyQhCiskIS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCEgVmVyc2lvbiBoaXN0b3J5CiskISAwLjAxIDIwMDYwMTIwIEZpcnN0IHZlcnNpb24gdG8gcmVjZWl2ZSBhIG51bWJlcgorJCEgMC4wMiAyMDA2MTAwOCBBZGFwdCB0byBuZXcgTWFrZWZpbGUuaW4KKyQhIDAuMDMgMjAwOTEyMjQgQWRkIHN1cHBvcnQgZm9yIGxhcmdlIGZpbGUgY2hlY2sKKyQhIDAuMDQgMjAxMDAxMTAgQWRkIG5ldyBnemNsb3NlLCBnemxpYiwgZ3pyZWFkLCBnendyaXRlCiskISAwLjA1IDIwMTAwMjIxIEV4Y2hhbmdlIHpsaWJkZWZzLmggYnkgemNvbmYuaC5pbgorJCEgMC4wNiAyMDEyMDExMSBGaXggbWlzc2luZyBhbWlzc19lcnIsIHVwZGF0ZSB6Y29uZl9oLmluLCBmaXggbmV3IGV4bXBsZXMKKyQhICAgICAgICAgICAgICAgc3ViZGlyIHBhdGgsIHVwZGF0ZSBtb2R1bGUgc2VhcmNoIGluIG1ha2VmaWxlLmluCiskISAwLjA3IDIwMTIwMTE1IFRyaWdnZXJlZCBieSB3b3JrIGRvbmUgYnkgQWxleGV5IENodXBhaGluIGNvbXBsZXRseSByZWRlc2lnbmVkCiskISAgICAgICAgICAgICAgIHNoYXJlZCBpbWFnZSBjcmVhdGlvbgorJCEgMC4wOCAyMDEyMDIxOSBNYWtlIGl0IHdvcmsgb24gVkFYIGFnYWluLCBwcmUtbG9hZCBtaXNzaW5nIHN5bWJvbHMgdG8gc2hhcmVkCiskISAgICAgICAgICAgICAgIGltYWdlCiskISAwLjA5IDIwMTIwMzA1IFNNUy4gIFAxIHNldHMgYnVpbGRlciAoIk1NSyIsICJNTVMiLCAiICIgKGJ1aWx0LWluKSkuCiskISAgICAgICAgICAgICAgICIiIC0+IGF1dG9tYXRpYywgcHJlZmVyZW5jZTogTU1LLCBNTVMsIGJ1aWx0LWluLgorJCEKKyQgb24gZXJyb3IgdGhlbiBnb3RvIGVycl9leGl0CiskIQorJCB0cnVlICA9IDEKKyQgZmFsc2UgPSAwCiskIHRtcG5hbSA9ICJ0ZW1wXyIgKyBmJGdldGpwaSgiIiwicGlkIikKKyQgdHQgPSB0bXBuYW0gKyAiLnR4dCIKKyQgdGMgPSB0bXBuYW0gKyAiLmMiCiskIHRoID0gdG1wbmFtICsgIi5oIgorJCBkZWZpbmUvbm9sb2cgdGNvbmZpZyAndGgnCiskIGl0c19kZWNjID0gZmFsc2UKKyQgaXRzX3ZheGMgPSBmYWxzZQorJCBpdHNfZ251YyA9IGZhbHNlCiskIHNfY2FzZSAgID0gRmFsc2UKKyQhCiskISBTZXR1cCB2YXJpYWJsZXMgaG9sZGluZyAiY29uZmlnIiBpbmZvcm1hdGlvbgorJCEKKyQgTWFrZSAgICA9ICInJ3AxJyIKKyQgbmFtZSAgICAgPSAiWmxpYiIKKyQgdmVyc2lvbiAgPSAiPy4/Lj8iCiskIHZfc3RyaW5nID0gIlpMSUJfVkVSU0lPTiIKKyQgdl9maWxlICAgPSAiemxpYi5oIgorJCBjY29wdCAgID0gIi9pbmNsdWRlID0gW10iCiskIGxvcHRzICAgPSAiIgorJCBkbnNybCAgID0gIiIKKyQgYWNvbmZfaW5fZmlsZSA9ICJ6Y29uZi5oLmluI3pjb25mLmhfaW4jemNvbmZfaC5pbiIKKyQgY29uZl9jaGVja19zdHJpbmcgPSAiIgorJCBsaW5rb25seSA9IGZhbHNlCiskIG9wdGZpbGUgID0gbmFtZSArICIub3B0IgorJCBtYXBmaWxlICA9IG5hbWUgKyAiLm1hcCIKKyQgbGliZGVmcyAgPSAiIgorJCB2YXggICAgICA9IGYkZ2V0c3lpKCJIV19NT0RFTCIpLmx0LjEwMjQKKyQgYXhwICAgICAgPSBmJGdldHN5aSgiSFdfTU9ERUwiKS5nZS4xMDI0IC5hbmQuIGYkZ2V0c3lpKCJIV19NT0RFTCIpLmx0LjQwOTYKKyQgaWE2NCAgICAgPSBmJGdldHN5aSgiSFdfTU9ERUwiKS5nZS40MDk2CiskIQorJCEgMjAxMi0wMy0wNSBTTVMuCiskISBXaHkgaXMgdGhpcyBuZWVkZWQ/ICBBbmQgaWYgaXQgaXMgbmVlZGVkLCB3aHkgbm90IHNpbXBseSAiLm5vdC4gdmF4Ij8KKyQhCiskISEhIGlmIGF4cCAub3IuIGlhNjQgdGhlbiAgc2V0IHByb2MvcGFyc2U9ZXh0ZW5kZWQKKyQhCiskIHdob2FtaSA9IGYkcGFyc2UoZiRlbnZpcm9ubWVudCgiUHJvY2VkdXJlIiksLCwsIk5PX0NPTkNFQUwiKQorJCBteWRlZiAgPSBGJHBhcnNlKHdob2FtaSwsLCJERVZJQ0UiKQorJCBteWRpciAgPSBmJHBhcnNlKHdob2FtaSwsLCJESVJFQ1RPUlkiKSAtICJdWyIKKyQgbXlwcm9jID0gZiRwYXJzZSh3aG9hbWksLCwiTmFtZSIpICsgZiRwYXJzZSh3aG9hbWksLCwidHlwZSIpCiskIQorJCEgQ2hlY2sgZm9yIE1NSy9NTVMKKyQhCiskIGlmIChNYWtlIC5lcXMuICIiKQorJCB0aGVuCiskICAgSWYgRiRTZWFyY2ggKCJTeXMkU3lzdGVtOk1NUy5FWEUiKSAubmVzLiAiIiBUaGVuIE1ha2UgPSAiTU1TIgorJCAgIElmIEYkVHlwZSAoTU1LKSAuZXFzLiAiU1RSSU5HIiBUaGVuIE1ha2UgPSAiTU1LIgorJCBlbHNlCiskICAgTWFrZSA9IGYkZWRpdCggTWFrZSwgInRyaW0iKQorJCBlbmRpZgorJCEKKyQgZ29zdWIgZmluZF92ZXJzaW9uCiskIQorJCAgb3Blbi93cml0ZSB0b3B0IHRtcC5vcHQKKyQgIG9wZW4vd3JpdGUgb3B0ZiAnb3B0ZmlsZScKKyQhCiskIGdvc3ViIGNoZWNrX29wdHMKKyQhCiskISBMb29rIGZvciB0aGUgY29tcGlsZXIgdXNlZAorJCEKKyQgZ29zdWIgY2hlY2tfY29tcGlsZXIKKyQgY2xvc2UgdG9wdAorJCBjbG9zZSBvcHRmCiskIQorJCBpZiBpdHNfZGVjYworJCB0aGVuCiskICAgY2NvcHQgPSAiL3ByZWZpeD1hbGwiICsgY2NvcHQKKyQgICBpZiBmJHRybmxubSgiU1lTIikgLmVxcy4gIiIKKyQgICB0aGVuCiskICAgICBpZiBheHAKKyQgICAgIHRoZW4KKyQgICAgICAgZGVmaW5lIHN5cyBzeXMkbGlicmFyeToKKyQgICAgIGVsc2UKKyQgICAgICAgY2NvcHQgPSAiL2RlY2MiICsgY2NvcHQKKyQgICAgICAgZGVmaW5lIHN5cyBkZWNjJGxpYnJhcnlfaW5jbHVkZToKKyQgICAgIGVuZGlmCiskICAgZW5kaWYKKyQhCiskISAyMDEyLTAzLTA1IFNNUy4KKyQhIFdoeSAvTkFNRVMgPSBBU19JUz8gIFdoeSBub3Qgc2ltcGx5ICIubm90LiB2YXgiPyAgQW5kIHdoeSBub3Qgb24gVkFYPworJCEKKyQgICBpZiBheHAgLm9yLiBpYTY0CiskICAgdGhlbgorJCAgICAgICBjY29wdCA9IGNjb3B0ICsgIi9uYW1lPWFzX2lzL29wdD0oaW5saW5lPXNwZWVkKSIKKyQgICAgICAgc19jYXNlID0gdHJ1ZQorJCAgIGVuZGlmCiskIGVuZGlmCiskIGlmIGl0c192YXhjIC5vci4gaXRzX2dudWMKKyQgdGhlbgorJCAgICBpZiBmJHRybmxubSgiU1lTIikuZXFzLiIiIHRoZW4gZGVmaW5lIHN5cyBzeXMkbGlicmFyeToKKyQgZW5kaWYKKyQhCiskISBCdWlsZCBhIGZha2UgY29uZmlndXJlIGlucHV0IGhlYWRlcgorJCEKKyQgb3Blbi93cml0ZSBjb25mX2hpbiBjb25maWcuaGluCiskIHdyaXRlIGNvbmZfaGluICIjdW5kZWYgX0xBUkdFRklMRTY0X1NPVVJDRSIKKyQgY2xvc2UgY29uZl9oaW4KKyQhCiskIQorJCBpID0gMAorJEZJTkRfQUNPTkY6CiskIGZuYW1lID0gZiRlbGVtZW50KGksIiMiLGFjb25mX2luX2ZpbGUpCiskIGlmIGZuYW1lIC5lcXMuICIjIiB0aGVuIGdvdG8gQU1JU1NfRVJSCiskIGlmIGYkc2VhcmNoKGZuYW1lKSAuZXFzLiAiIgorJCB0aGVuCiskICAgaSA9IGkgKyAxCiskICAgZ290byBmaW5kX2Fjb25mCiskIGVuZGlmCiskIG9wZW4vcmVhZC9lcnI9YWNvbmZfZXJyIGFjb25mX2luICdmbmFtZScKKyQgb3Blbi93cml0ZSBhY29uZiB6Y29uZi5oCiskQUNPTkZfTE9PUDoKKyQgcmVhZC9lbmRfb2ZfZmlsZT1hY29uZl9leGl0IGFjb25mX2luIGxpbmUKKyQgd29yayA9IGYkZWRpdChsaW5lLCAiY29tcHJlc3MsdHJpbSIpCiskIGlmIGYkZXh0cmFjdCgwLDYsd29yaykgLm5lcy4gIiN1bmRlZiIKKyQgdGhlbgorJCAgIGlmIGYkZXh0cmFjdCgwLDEyLHdvcmspIC5uZXMuICIjY21ha2VkZWZpbmUiCiskICAgdGhlbgorJCAgICAgICB3cml0ZSBhY29uZiBsaW5lCiskICAgZW5kaWYKKyQgZWxzZQorJCAgIGNkZWYgPSBmJGVsZW1lbnQoMSwiICIsd29yaykKKyQgICBnb3N1YiBjaGVja19jb25maWcKKyQgZW5kaWYKKyQgZ290byBhY29uZl9sb29wCiskQUNPTkZfRVhJVDoKKyQgd3JpdGUgYWNvbmYgIiIKKyQgd3JpdGUgYWNvbmYgIi8qIFZNUyBzcGVjaWZpY3MgYWRkZWQgYnkgbWFrZV92bXMuY29tOiAqLyIKKyQgd3JpdGUgYWNvbmYgIiNkZWZpbmUgVk1TIDEiCiskIHdyaXRlIGFjb25mICIjaW5jbHVkZSA8dW5pc3RkLmg+IgorJCB3cml0ZSBhY29uZiAiI2luY2x1ZGUgPHVuaXhpby5oPiIKKyQgd3JpdGUgYWNvbmYgIiNpZmRlZiBfTEFSR0VGSUxFIgorJCB3cml0ZSBhY29uZiAiIyBkZWZpbmUgb2ZmNjRfdCBfX29mZjY0X3QiCiskIHdyaXRlIGFjb25mICIjIGRlZmluZSBmb3BlbjY0IGZvcGVuIgorJCB3cml0ZSBhY29uZiAiIyBkZWZpbmUgZnNlZWtvNjQgZnNlZWtvIgorJCB3cml0ZSBhY29uZiAiIyBkZWZpbmUgbHNlZWs2NCBsc2VlayIKKyQgd3JpdGUgYWNvbmYgIiMgZGVmaW5lIGZ0ZWxsbzY0IGZ0ZWxsIgorJCB3cml0ZSBhY29uZiAiI2VuZGlmIgorJCB3cml0ZSBhY29uZiAiI2lmICFkZWZpbmVkKCBfX1ZBWCkgJiYgKF9fQ1JUTF9WRVIgPj0gNzAzMTIwMDApIgorJCB3cml0ZSBhY29uZiAiIyBkZWZpbmUgSEFWRV9WU05QUklOVEYiCiskIHdyaXRlIGFjb25mICIjZW5kaWYiCiskIGNsb3NlIGFjb25mX2luCiskIGNsb3NlIGFjb25mCiskIGlmIGYkc2VhcmNoKCInJ3RoJyIpIC5uZXMuICIiIHRoZW4gZGVsZXRlICd0aCc7KgorJCEgQnVpbGQgdGhlIHRoaW5nIHBsYWluIG9yIHdpdGggbW1zCiskIQorJCB3cml0ZSBzeXMkb3V0cHV0ICJDb21waWxpbmcgWmxpYiBzb3VyY2VzIC4uLiIKKyQgaWYgbWFrZS5lcXMuIiIKKyQgdGhlbgorJCAgIGlmIChmJHNlYXJjaCggImV4YW1wbGUub2JqOyoiKSAubmVzLiAiIikgdGhlbiBkZWxldGUgZXhhbXBsZS5vYmo7KgorJCAgIGlmIChmJHNlYXJjaCggIm1pbmlnemlwLm9iajsqIikgLm5lcy4gIiIpIHRoZW4gZGVsZXRlIG1pbmlnemlwLm9iajsqCiskICAgQ0FMTCBNQUtFIGFkbGVyMzIuT0JKICJDQyAnJ0NDT1BUJyBhZGxlcjMyIiAtCisgICAgICAgICAgICAgICAgYWRsZXIzMi5jIHpsaWIuaCB6Y29uZi5oCiskICAgQ0FMTCBNQUtFIGNvbXByZXNzLk9CSiAiQ0MgJydDQ09QVCcgY29tcHJlc3MiIC0KKyAgICAgICAgICAgICAgICBjb21wcmVzcy5jIHpsaWIuaCB6Y29uZi5oCiskICAgQ0FMTCBNQUtFIGNyYzMyLk9CSiAiQ0MgJydDQ09QVCcgY3JjMzIiIC0KKyAgICAgICAgICAgICAgICBjcmMzMi5jIHpsaWIuaCB6Y29uZi5oCiskICAgQ0FMTCBNQUtFIGRlZmxhdGUuT0JKICJDQyAnJ0NDT1BUJyBkZWZsYXRlIiAtCisgICAgICAgICAgICAgICAgZGVmbGF0ZS5jIGRlZmxhdGUuaCB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oCiskICAgQ0FMTCBNQUtFIGd6Y2xvc2UuT0JKICJDQyAnJ0NDT1BUJyBnemNsb3NlIiAtCisgICAgICAgICAgICAgICAgZ3pjbG9zZS5jIHp1dGlsLmggemxpYi5oIHpjb25mLmgKKyQgICBDQUxMIE1BS0UgZ3psaWIuT0JKICJDQyAnJ0NDT1BUJyBnemxpYiIgLQorICAgICAgICAgICAgICAgIGd6bGliLmMgenV0aWwuaCB6bGliLmggemNvbmYuaAorJCAgIENBTEwgTUFLRSBnenJlYWQuT0JKICJDQyAnJ0NDT1BUJyBnenJlYWQiIC0KKyAgICAgICAgICAgICAgICBnenJlYWQuYyB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oCiskICAgQ0FMTCBNQUtFIGd6d3JpdGUuT0JKICJDQyAnJ0NDT1BUJyBnendyaXRlIiAtCisgICAgICAgICAgICAgICAgZ3p3cml0ZS5jIHp1dGlsLmggemxpYi5oIHpjb25mLmgKKyQgICBDQUxMIE1BS0UgaW5mYmFjay5PQkogIkNDICcnQ0NPUFQnIGluZmJhY2siIC0KKyAgICAgICAgICAgICAgICBpbmZiYWNrLmMgenV0aWwuaCBpbmZ0cmVlcy5oIGluZmxhdGUuaCBpbmZmYXN0LmggaW5mZml4ZWQuaAorJCAgIENBTEwgTUFLRSBpbmZmYXN0Lk9CSiAiQ0MgJydDQ09QVCcgaW5mZmFzdCIgLQorICAgICAgICAgICAgICAgIGluZmZhc3QuYyB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oIGluZmZhc3QuaAorJCAgIENBTEwgTUFLRSBpbmZsYXRlLk9CSiAiQ0MgJydDQ09QVCcgaW5mbGF0ZSIgLQorICAgICAgICAgICAgICAgIGluZmxhdGUuYyB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oIGluZmJsb2NrLmgKKyQgICBDQUxMIE1BS0UgaW5mdHJlZXMuT0JKICJDQyAnJ0NDT1BUJyBpbmZ0cmVlcyIgLQorICAgICAgICAgICAgICAgIGluZnRyZWVzLmMgenV0aWwuaCB6bGliLmggemNvbmYuaCBpbmZ0cmVlcy5oCiskICAgQ0FMTCBNQUtFIHRyZWVzLk9CSiAiQ0MgJydDQ09QVCcgdHJlZXMiIC0KKyAgICAgICAgICAgICAgICB0cmVlcy5jIGRlZmxhdGUuaCB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oCiskICAgQ0FMTCBNQUtFIHVuY29tcHIuT0JKICJDQyAnJ0NDT1BUJyB1bmNvbXByIiAtCisgICAgICAgICAgICAgICAgdW5jb21wci5jIHpsaWIuaCB6Y29uZi5oCiskICAgQ0FMTCBNQUtFIHp1dGlsLk9CSiAiQ0MgJydDQ09QVCcgenV0aWwiIC0KKyAgICAgICAgICAgICAgICB6dXRpbC5jIHp1dGlsLmggemxpYi5oIHpjb25mLmgKKyQgICB3cml0ZSBzeXMkb3V0cHV0ICJCdWlsZGluZyBabGliIC4uLiIKKyQgICBDQUxMIE1BS0UgbGliei5PTEIgImxpYi9jcmVhIGxpYnoub2xiICoub2JqIiAqLk9CSgorJCAgIHdyaXRlIHN5cyRvdXRwdXQgIkJ1aWxkaW5nIGV4YW1wbGUuLi4iCiskICAgQ0FMTCBNQUtFIGV4YW1wbGUuT0JKICJDQyAnJ0NDT1BUJyBbLnRlc3RdZXhhbXBsZSIgLQorICAgICAgICAgICAgICAgIFsudGVzdF1leGFtcGxlLmMgemxpYi5oIHpjb25mLmgKKyQgICBjYWxsIG1ha2UgZXhhbXBsZS5leGUgIkxJTksgZXhhbXBsZSxsaWJ6Lm9sYi9saWIiIGV4YW1wbGUub2JqIGxpYnoub2xiCiskICAgd3JpdGUgc3lzJG91dHB1dCAiQnVpbGRpbmcgbWluaWd6aXAuLi4iCiskICAgQ0FMTCBNQUtFIG1pbmlnemlwLk9CSiAiQ0MgJydDQ09QVCcgWy50ZXN0XW1pbmlnemlwIiAtCisgICAgICAgICAgICAgIFsudGVzdF1taW5pZ3ppcC5jIHpsaWIuaCB6Y29uZi5oCiskICAgY2FsbCBtYWtlIG1pbmlnemlwLmV4ZSAtCisgICAgICAgICAgICAgICJMSU5LIG1pbmlnemlwLGxpYnoub2xiL2xpYiIgLQorICAgICAgICAgICAgICBtaW5pZ3ppcC5vYmogbGliei5vbGIKKyQgZWxzZQorJCAgIGdvc3ViIGNyZWFfbW1zCiskICAgd3JpdGUgc3lzJG91dHB1dCAiTWFrZSAnJ25hbWUnICcndmVyc2lvbicgd2l0aCAnJ01ha2UnICIKKyQgICAnbWFrZScKKyQgZW5kaWYKKyQhCiskISBDcmVhdGUgc2hhcmVhYmxlIGltYWdlCiskIQorJCBnb3N1YiBjcmVhX29saXN0CiskIHdyaXRlIHN5cyRvdXRwdXQgIkNyZWF0aW5nIGxpYnpzaHIuZXhlIgorJCBjYWxsIG1hcF8yX3Nob3B0ICdtYXBmaWxlJyAnb3B0ZmlsZScKKyQgTElOS18nbG9wdHMnL1NIQVJFPWxpYnpzaHIuZXhlIG1vZHVsZXMub3B0L29wdCwnb3B0ZmlsZScvb3B0CiskIHdyaXRlIHN5cyRvdXRwdXQgIlpsaWIgYnVpbGQgY29tcGxldGVkIgorJCBkZWxldGUvbm9sb2cgdG1wLm9wdDsqCiskIGV4aXQKKyRBTUlTU19FUlI6CiskIHdyaXRlIHN5cyRvdXRwdXQgIk5vIHNvdXJjZSBmb3IgY29uZmlnLmhpbiBmb3VuZC4iCiskIHdyaXRlIHN5cyRvdXRwdXQgIlRyaWVkIGFueSBvZiAnJ2Fjb25mX2luX2ZpbGUnIgorJCBnb3RvIGVycl9leGl0CiskQ0NfRVJSOgorJCB3cml0ZSBzeXMkb3V0cHV0ICJDIGNvbXBpbGVyIHJlcXVpcmVkIHRvIGJ1aWxkICcnbmFtZSciCiskIGdvdG8gZXJyX2V4aXQKKyRFUlJfRVhJVDoKKyQgc2V0IG1lc3NhZ2UvZmFjaWwvaWRlbnQvc2V2ZXIvdGV4dAorJCBjbG9zZS9ub2xvZyBvcHRmCiskIGNsb3NlL25vbG9nIHRvcHQKKyQgY2xvc2Uvbm9sb2cgYWNvbmZfaW4KKyQgY2xvc2Uvbm9sb2cgYWNvbmYKKyQgY2xvc2Uvbm9sb2cgb3V0CiskIGNsb3NlL25vbG9nIG1pbgorJCBjbG9zZS9ub2xvZyBtb2QKKyQgY2xvc2Uvbm9sb2cgaF9pbgorJCB3cml0ZSBzeXMkb3V0cHV0ICJFeGl0aW5nLi4uIgorJCBleGl0IDIKKyQhCiskIQorJE1BS0U6IFNVQlJPVVRJTkUgICAhU1VCUk9VVElORSBUTyBDSEVDSyBERVBFTkRFTkNJRVMKKyQgViA9ICdGJFZlcmlmeSgwKQorJCEgUDEgPSBXaGF0IHdlIGFyZSB0cnlpbmcgdG8gbWFrZQorJCEgUDIgPSBDb21tYW5kIHRvIG1ha2UgaXQKKyQhIFAzIC0gUDggIFdoYXQgaXQgZGVwZW5kcyBvbgorJAorJCBJZiBGJFNlYXJjaChQMSkgLkVxcy4gIiIgVGhlbiBHb3RvIE1ha2VpdAorJCBUaW1lID0gRiRDdlRpbWUoRiRGaWxlKFAxLCJSRFQiKSkKKyRhcmc9MworJExvb3A6CiskICAgICAgIEFyZ3VtZW50ID0gUCdhcmcKKyQgICAgICAgSWYgQXJndW1lbnQgLkVxcy4gIiIgVGhlbiBHb3RvIEV4aXQKKyQgICAgICAgRWw9MAorJExvb3AyOgorJCAgICAgICBGaWxlID0gRiRFbGVtZW50KEVsLCIgIixBcmd1bWVudCkKKyQgICAgICAgSWYgRmlsZSAuRXFzLiAiICIgVGhlbiBHb3RvIEVuZGwKKyQgICAgICAgQUZpbGUgPSAiIgorJExvb3AzOgorJCAgICAgICBPRmlsZSA9IEFGaWxlCiskICAgICAgIEFGaWxlID0gRiRTZWFyY2goRmlsZSkKKyQgICAgICAgSWYgQUZpbGUgLkVxcy4gIiIgLk9yLiBBRmlsZSAuRXFzLiBPRmlsZSBUaGVuIEdvdG8gTmV4dEVsCiskICAgICAgIElmIEYkQ3ZUaW1lKEYkRmlsZShBRmlsZSwiUkRUIikpIC5HZXMuIFRpbWUgVGhlbiBHb3RvIE1ha2VpdAorJCAgICAgICBHb3RvIExvb3AzCiskTmV4dEVMOgorJCAgICAgICBFbCA9IEVsICsgMQorJCAgICAgICBHb3RvIExvb3AyCiskRW5kTDoKKyQgYXJnPWFyZysxCiskIElmIGFyZyAuTGUuIDggVGhlbiBHb3RvIExvb3AKKyQgR290byBFeGl0CiskCiskTWFrZWl0OgorJCBWVj1GJFZFUklGWSgwKQorJCB3cml0ZSBzeXMkb3V0cHV0IFAyCiskICdQMgorJCBWVj0nRiRWZXJpZnkoVlYpCiskRXhpdDoKKyQgSWYgViBUaGVuIFNldCBWZXJpZnkKKyRFTkRTVUJST1VUSU5FCiskIS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCEKKyQhIENoZWNrIGNvbW1hbmQgbGluZSBvcHRpb25zIGFuZCBzZXQgc3ltYm9scyBhY2NvcmRpbmdseQorJCEKKyQhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskISBWZXJzaW9uIGhpc3RvcnkKKyQhIDAuMDEgMjAwNDEyMDYgRmlyc3QgdmVyc2lvbiB0byByZWNlaXZlIGEgbnVtYmVyCiskISAwLjAyIDIwMDYwMTI2IEFkZCBuZXcgIkhFTFAiIHRhcmdldAorJCBDSEVDS19PUFRTOgorJCBpID0gMQorJCBPUFRfTE9PUDoKKyQgaWYgaSAubHQuIDkKKyQgdGhlbgorJCAgIGNwYXJtID0gZiRlZGl0KHAnaScsInVwY2FzZSIpCiskIQorJCEgQ2hlY2sgaWYgcGFyYW1ldGVyIGFjdHVhbGx5IGNvbnRhaW5zIHNvbWV0aGluZworJCEKKyQgICBpZiBmJGVkaXQoY3Bhcm0sInRyaW0iKSAubmVzLiAiIgorJCAgIHRoZW4KKyQgICAgIGlmIGNwYXJtIC5lcXMuICJERUJVRyIKKyQgICAgIHRoZW4KKyQgICAgICAgY2NvcHQgPSBjY29wdCArICIvbm9vcHQvZGViIgorJCAgICAgICBsb3B0cyA9IGxvcHRzICsgIi9kZWIiCiskICAgICBlbmRpZgorJCAgICAgaWYgZiRsb2NhdGUoIkNDT1BUPSIsY3Bhcm0pIC5sdC4gZiRsZW5ndGgoY3Bhcm0pCiskICAgICB0aGVuCiskICAgICAgIHN0YXJ0ID0gZiRsb2NhdGUoIj0iLGNwYXJtKSArIDEKKyQgICAgICAgbGVuICAgPSBmJGxlbmd0aChjcGFybSkgLSBzdGFydAorJCAgICAgICBjY29wdCA9IGNjb3B0ICsgZiRleHRyYWN0KHN0YXJ0LGxlbixjcGFybSkKKyQgICAgICAgaWYgZiRsb2NhdGUoIkFTX0lTIixmJGVkaXQoY2NvcHQsIlVQQ0FTRSIpKSAubHQuIGYkbGVuZ3RoKGNjb3B0KSAtCisgICAgICAgICAgdGhlbiBzX2Nhc2UgPSB0cnVlCiskICAgICBlbmRpZgorJCAgICAgaWYgY3Bhcm0gLmVxcy4gIkxJTksiIHRoZW4gbGlua29ubHkgPSB0cnVlCiskICAgICBpZiBmJGxvY2F0ZSgiTE9QVFM9IixjcGFybSkgLmx0LiBmJGxlbmd0aChjcGFybSkKKyQgICAgIHRoZW4KKyQgICAgICAgc3RhcnQgPSBmJGxvY2F0ZSgiPSIsY3Bhcm0pICsgMQorJCAgICAgICBsZW4gICA9IGYkbGVuZ3RoKGNwYXJtKSAtIHN0YXJ0CiskICAgICAgIGxvcHRzID0gbG9wdHMgKyBmJGV4dHJhY3Qoc3RhcnQsbGVuLGNwYXJtKQorJCAgICAgZW5kaWYKKyQgICAgIGlmIGYkbG9jYXRlKCJDQz0iLGNwYXJtKSAubHQuIGYkbGVuZ3RoKGNwYXJtKQorJCAgICAgdGhlbgorJCAgICAgICBzdGFydCAgPSBmJGxvY2F0ZSgiPSIsY3Bhcm0pICsgMQorJCAgICAgICBsZW4gICAgPSBmJGxlbmd0aChjcGFybSkgLSBzdGFydAorJCAgICAgICBjY19jb20gPSBmJGV4dHJhY3Qoc3RhcnQsbGVuLGNwYXJtKQorICAgICAgICBpZiAoY2NfY29tIC5uZXMuICJERUNDIikgLmFuZC4gLQorICAgICAgICAgICAoY2NfY29tIC5uZXMuICJWQVhDIikgLmFuZC4gLQorICAgICAgICAgICAoY2NfY29tIC5uZXMuICJHTlVDIikKKyQgICAgICAgdGhlbgorJCAgICAgICAgIHdyaXRlIHN5cyRvdXRwdXQgIlVuc3VwcG9ydGVkIGNvbXBpbGVyIGNob2ljZSAnJ2NjX2NvbScgaWdub3JlZCIKKyQgICAgICAgICB3cml0ZSBzeXMkb3V0cHV0ICJVc2UgREVDQywgVkFYQywgb3IgR05VQyBpbnN0ZWFkIgorJCAgICAgICBlbHNlCiskICAgICAgICAgaWYgY2NfY29tIC5lcXMuICJERUNDIiB0aGVuIGl0c19kZWNjID0gdHJ1ZQorJCAgICAgICAgIGlmIGNjX2NvbSAuZXFzLiAiVkFYQyIgdGhlbiBpdHNfdmF4YyA9IHRydWUKKyQgICAgICAgICBpZiBjY19jb20gLmVxcy4gIkdOVUMiIHRoZW4gaXRzX2dudWMgPSB0cnVlCiskICAgICAgIGVuZGlmCiskICAgICBlbmRpZgorJCAgICAgaWYgZiRsb2NhdGUoIk1BS0U9IixjcGFybSkgLmx0LiBmJGxlbmd0aChjcGFybSkKKyQgICAgIHRoZW4KKyQgICAgICAgc3RhcnQgID0gZiRsb2NhdGUoIj0iLGNwYXJtKSArIDEKKyQgICAgICAgbGVuICAgID0gZiRsZW5ndGgoY3Bhcm0pIC0gc3RhcnQKKyQgICAgICAgbW1rcyA9IGYkZXh0cmFjdChzdGFydCxsZW4sY3Bhcm0pCiskICAgICAgIGlmIChtbWtzIC5lcXMuICJNTUsiKSAub3IuIChtbWtzIC5lcXMuICJNTVMiKQorJCAgICAgICB0aGVuCiskICAgICAgICAgbWFrZSA9IG1ta3MKKyQgICAgICAgZWxzZQorJCAgICAgICAgIHdyaXRlIHN5cyRvdXRwdXQgIlVuc3VwcG9ydGVkIG1ha2UgY2hvaWNlICcnbW1rcycgaWdub3JlZCIKKyQgICAgICAgICB3cml0ZSBzeXMkb3V0cHV0ICJVc2UgTU1LIG9yIE1NUyBpbnN0ZWFkIgorJCAgICAgICBlbmRpZgorJCAgICAgZW5kaWYKKyQgICAgIGlmIGNwYXJtIC5lcXMuICJIRUxQIiB0aGVuIGdvc3ViIGJoZWxwCiskICAgZW5kaWYKKyQgICBpID0gaSArIDEKKyQgICBnb3RvIG9wdF9sb29wCiskIGVuZGlmCiskIHJldHVybgorJCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQhCiskISBMb29rIGZvciB0aGUgY29tcGlsZXIgdXNlZAorJCEKKyQhIFZlcnNpb24gaGlzdG9yeQorJCEgMC4wMSAyMDA0MDIyMyBGaXJzdCB2ZXJzaW9uIHRvIHJlY2VpdmUgYSBudW1iZXIKKyQhIDAuMDIgMjAwNDAyMjkgU2F2ZS9zZXQgdmFsdWUgb2YgZGVjYyRub19yb290ZWRfc2VhcmNoX2xpc3RzCiskISAwLjAzIDIwMDYwMjAyIEV4dGVuZCBoYW5kbGluZyBvZiBHTlUgQworJCEgMC4wNCAyMDA5MDQwMiBDb21wYXEgLT4gaHAKKyRDSEVDS19DT01QSUxFUjoKKyQgaWYgKC5ub3QuIChpdHNfZGVjYyAub3IuIGl0c192YXhjIC5vci4gaXRzX2dudWMpKQorJCB0aGVuCiskICAgaXRzX2RlY2MgPSAoZiRzZWFyY2goIlNZUyRTWVNURU06REVDQyRDT01QSUxFUi5FWEUiKSAubmVzLiAiIikKKyQgICBpdHNfdmF4YyA9IC5ub3QuIGl0c19kZWNjIC5hbmQuIChGJFNlYXJjaCgiU1lTJFN5c3RlbTpWQVhDLkV4ZSIpIC5uZXMuICIiKQorJCAgIGl0c19nbnVjID0gLm5vdC4gKGl0c19kZWNjIC5vci4gaXRzX3ZheGMpIC5hbmQuIChmJHRybmxubSgiZ251X2NjIikgLm5lcy4gIiIpCiskIGVuZGlmCiskIQorJCEgRXhpdCBpZiBubyBjb21waWxlciBhdmFpbGFibGUKKyQhCiskIGlmICgubm90LiAoaXRzX2RlY2MgLm9yLiBpdHNfdmF4YyAub3IuIGl0c19nbnVjKSkKKyQgdGhlbiBnb3RvIENDX0VSUgorJCBlbHNlCiskICAgaWYgaXRzX2RlY2MKKyQgICB0aGVuCiskICAgICB3cml0ZSBzeXMkb3V0cHV0ICJDQyBjb21waWxlciBjaGVjayAuLi4gaHAgQyIKKyQgICAgIGlmIGYkdHJubG5tKCJkZWNjJG5vX3Jvb3RlZF9zZWFyY2hfbGlzdHMiKSAubmVzLiAiIgorJCAgICAgdGhlbgorJCAgICAgICBkbnJzbCA9IGYkdHJubG5tKCJkZWNjJG5vX3Jvb3RlZF9zZWFyY2hfbGlzdHMiKQorJCAgICAgZW5kaWYKKyQgICAgIGRlZmluZS9ub2xvZyBkZWNjJG5vX3Jvb3RlZF9zZWFyY2hfbGlzdHMgMQorJCAgIGVsc2UKKyQgICAgIGlmIGl0c192YXhjIHRoZW4gd3JpdGUgc3lzJG91dHB1dCAiQ0MgY29tcGlsZXIgY2hlY2sgLi4uIFZBWCBDIgorJCAgICAgaWYgaXRzX2dudWMKKyQgICAgIHRoZW4KKyQgICAgICAgICB3cml0ZSBzeXMkb3V0cHV0ICJDQyBjb21waWxlciBjaGVjayAuLi4gR05VIEMiCiskICAgICAgICAgaWYgZiR0cm5sbm0odG9wdCkgdGhlbiB3cml0ZSB0b3B0ICJnbnVfY2M6WzAwMDAwMF1nY2NsaWIub2xiL2xpYiIKKyQgICAgICAgICBpZiBmJHRybmxubShvcHRmKSB0aGVuIHdyaXRlIG9wdGYgImdudV9jYzpbMDAwMDAwXWdjY2xpYi5vbGIvbGliIgorJCAgICAgICAgIGNjID0gImdjYyIKKyQgICAgIGVuZGlmCiskICAgICBpZiBmJHRybmxubSh0b3B0KSB0aGVuIHdyaXRlIHRvcHQgInN5cyRzaGFyZTp2YXhjcnRsLmV4ZS9zaGFyZSIKKyQgICAgIGlmIGYkdHJubG5tKG9wdGYpIHRoZW4gd3JpdGUgb3B0ZiAic3lzJHNoYXJlOnZheGNydGwuZXhlL3NoYXJlIgorJCAgIGVuZGlmCiskIGVuZGlmCiskIHJldHVybgorJCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQhCiskISBJZiBNTVMvTU1LIGFyZSBhdmFpbGFibGUgZHVtcCBvdXQgdGhlIGRlc2NyaXAubW1zIGlmIHJlcXVpcmVkCiskIQorJENSRUFfTU1TOgorJCB3cml0ZSBzeXMkb3V0cHV0ICJDcmVhdGluZyBkZXNjcmlwLm1tcy4uLiIKKyQgY3JlYXRlIGRlc2NyaXAubW1zCiskIG9wZW4vYXBwZW5kIG91dCBkZXNjcmlwLm1tcworJCBjb3B5IHN5cyRpbnB1dDogb3V0CiskIGRlY2sKKyMgZGVzY3JpcC5tbXM6IE1NUyBkZXNjcmlwdGlvbiBmaWxlIGZvciBidWlsZGluZyB6bGliIG9uIFZNUworIyB3cml0dGVuIGJ5IE1hcnRpbiBQLkouIFppbnNlcgorIyA8emluc2VyQHppbnNlci5uby1pcC5pbmZvIG9yIG1hcnRpbi56aW5zZXJAZXVyZXhjaGFuZ2UuY29tPgorCitPQkpTID0gYWRsZXIzMi5vYmosIGNvbXByZXNzLm9iaiwgY3JjMzIub2JqLCBnemNsb3NlLm9iaiwgZ3psaWIub2JqXAorICAgICAgIGd6cmVhZC5vYmosIGd6d3JpdGUub2JqLCB1bmNvbXByLm9iaiwgaW5mYmFjay5vYmpcCisgICAgICAgZGVmbGF0ZS5vYmosIHRyZWVzLm9iaiwgenV0aWwub2JqLCBpbmZsYXRlLm9iaiwgXAorICAgICAgIGluZnRyZWVzLm9iaiwgaW5mZmFzdC5vYmoKKworJCBlb2QKKyQgd3JpdGUgb3V0ICJDRkxBR1M9IiwgY2NvcHQKKyQgd3JpdGUgb3V0ICJMT1BUUz0iLCBsb3B0cworJCB3cml0ZSBvdXQgImFsbCA6IGV4YW1wbGUuZXhlIG1pbmlnemlwLmV4ZSBsaWJ6Lm9sYiIKKyQgY29weSBzeXMkaW5wdXQ6IG91dAorJCBkZWNrCisgICAgICAgIEAgd3JpdGUgc3lzJG91dHB1dCAiIEV4YW1wbGUgYXBwbGljYXRpb25zIGF2YWlsYWJsZSIKKworbGliei5vbGIgOiBsaWJ6Lm9sYigkKE9CSlMpKQorCUAgd3JpdGUgc3lzJG91dHB1dCAiIGxpYnogYXZhaWxhYmxlIgorCitleGFtcGxlLmV4ZSA6IGV4YW1wbGUub2JqIGxpYnoub2xiCisgICAgICAgICAgICAgIGxpbmsgJChMT1BUUykgZXhhbXBsZSxsaWJ6Lm9sYi9saWIKKworbWluaWd6aXAuZXhlIDogbWluaWd6aXAub2JqIGxpYnoub2xiCisgICAgICAgICAgICAgIGxpbmsgJChMT1BUUykgbWluaWd6aXAsbGliei5vbGIvbGliCisKK2NsZWFuIDoKKwlkZWxldGUgKi5vYmo7KixsaWJ6Lm9sYjsqLCoub3B0OyosKi5leGU7KgorCisKKyMgT3RoZXIgZGVwZW5kZW5jaWVzLgorYWRsZXIzMi5vYmogIDogYWRsZXIzMi5jIHp1dGlsLmggemxpYi5oIHpjb25mLmgKK2NvbXByZXNzLm9iaiA6IGNvbXByZXNzLmMgemxpYi5oIHpjb25mLmgKK2NyYzMyLm9iaiAgICA6IGNyYzMyLmMgenV0aWwuaCB6bGliLmggemNvbmYuaAorZGVmbGF0ZS5vYmogIDogZGVmbGF0ZS5jIGRlZmxhdGUuaCB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oCitleGFtcGxlLm9iaiAgOiBbLnRlc3RdZXhhbXBsZS5jIHpsaWIuaCB6Y29uZi5oCitnemNsb3NlLm9iaiAgOiBnemNsb3NlLmMgenV0aWwuaCB6bGliLmggemNvbmYuaAorZ3psaWIub2JqICAgIDogZ3psaWIuYyB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oCitnenJlYWQub2JqICAgOiBnenJlYWQuYyB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oCitnendyaXRlLm9iaiAgOiBnendyaXRlLmMgenV0aWwuaCB6bGliLmggemNvbmYuaAoraW5mZmFzdC5vYmogIDogaW5mZmFzdC5jIHp1dGlsLmggemxpYi5oIHpjb25mLmggaW5mdHJlZXMuaCBpbmZmYXN0LmgKK2luZmxhdGUub2JqICA6IGluZmxhdGUuYyB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oCitpbmZ0cmVlcy5vYmogOiBpbmZ0cmVlcy5jIHp1dGlsLmggemxpYi5oIHpjb25mLmggaW5mdHJlZXMuaAorbWluaWd6aXAub2JqIDogWy50ZXN0XW1pbmlnemlwLmMgemxpYi5oIHpjb25mLmgKK3RyZWVzLm9iaiAgICA6IHRyZWVzLmMgZGVmbGF0ZS5oIHp1dGlsLmggemxpYi5oIHpjb25mLmgKK3VuY29tcHIub2JqICA6IHVuY29tcHIuYyB6bGliLmggemNvbmYuaAorenV0aWwub2JqICAgIDogenV0aWwuYyB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oCitpbmZiYWNrLm9iaiAgOiBpbmZiYWNrLmMgenV0aWwuaCBpbmZ0cmVlcy5oIGluZmxhdGUuaCBpbmZmYXN0LmggaW5mZml4ZWQuaAorJCBlb2QKKyQgY2xvc2Ugb3V0CiskIHJldHVybgorJCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQhCiskISBSZWFkIGxpc3Qgb2YgY29yZSBsaWJyYXJ5IHNvdXJjZXMgZnJvbSBtYWtlZmlsZS5pbiBhbmQgY3JlYXRlIG9wdGlvbnMKKyQhIG5lZWRlZCB0byBidWlsZCBzaGFyZWFibGUgaW1hZ2UKKyQhCiskQ1JFQV9PTElTVDoKKyQgb3Blbi9yZWFkIG1pbiBtYWtlZmlsZS5pbgorJCBvcGVuL3dyaXRlIG1vZCBtb2R1bGVzLm9wdAorJCBzcmNfY2hlY2tfbGlzdCA9ICJPQkpaID0jT0JKRyA9IgorJE1STE9PUDoKKyQgcmVhZC9lbmQ9bXJkb25lIG1pbiByZWMKKyQgaSA9IDAKKyRTUkNfQ0hFQ0tfTE9PUDoKKyQgc3JjX2NoZWNrID0gZiRlbGVtZW50KGksICIjIiwgc3JjX2NoZWNrX2xpc3QpCiskIGkgPSBpKzEKKyQgaWYgc3JjX2NoZWNrIC5lcXMuICIjIiB0aGVuIGdvdG8gbXJsb29wCiskIGlmIChmJGV4dHJhY3QoMCw2LHJlYykgLm5lcy4gc3JjX2NoZWNrKSB0aGVuIGdvdG8gc3JjX2NoZWNrX2xvb3AKKyQgcmVjID0gcmVjIC0gc3JjX2NoZWNrCiskIGdvc3ViIGV4dHJhX2ZpbG5hbQorJCBpZiAoZiRlbGVtZW50KDEsIlwiLHJlYykgLmVxcy4gIlwiKSB0aGVuIGdvdG8gbXJsb29wCiskTVJTTE9PUDoKKyQgcmVhZC9lbmQ9bXJkb25lIG1pbiByZWMKKyQgZ29zdWIgZXh0cmFfZmlsbmFtCiskIGlmIChmJGVsZW1lbnQoMSwiXCIscmVjKSAubmVzLiAiXCIpIHRoZW4gZ290byBtcnNsb29wCiskTVJET05FOgorJCBjbG9zZSBtaW4KKyQgY2xvc2UgbW9kCiskIHJldHVybgorJCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQhCiskISBUYWtlIHJlY29yZCBleHRyYWN0ZWQgaW4gY3JlYV9vbGlzdCBhbmQgc3BsaXQgaXQgaW50byBzaW5nbGUgZmlsZW5hbWVzCiskIQorJEVYVFJBX0ZJTE5BTToKKyQgbXlyZWMgPSBmJGVkaXQocmVjIC0gIlwiLCAidHJpbSxjb21wcmVzcyIpCiskIGkgPSAwCiskRkVMT09QOgorJCBzcmNmaWwgPSBmJGVsZW1lbnQoaSwiICIsIG15cmVjKQorJCBpZiAoc3JjZmlsIC5uZXMuICIgIikKKyQgdGhlbgorJCAgIHdyaXRlIG1vZCBmJHBhcnNlKHNyY2ZpbCwsLCJOQU1FIiksICIub2JqIgorJCAgIGkgPSBpICsgMQorJCAgIGdvdG8gZmVsb29wCiskIGVuZGlmCiskIHJldHVybgorJCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQhCiskISBGaW5kIGN1cnJlbnQgWmxpYiB2ZXJzaW9uIG51bWJlcgorJCEKKyRGSU5EX1ZFUlNJT046CiskIG9wZW4vcmVhZCBoX2luICd2X2ZpbGUnCiskaGxvb3A6CiskIHJlYWQvZW5kPWhkb25lIGhfaW4gcmVjCiskIHJlYyA9IGYkZWRpdChyZWMsIlRSSU0iKQorJCBpZiAoZiRleHRyYWN0KDAsMSxyZWMpIC5uZXMuICIjIikgdGhlbiBnb3RvIGhsb29wCiskIHJlYyA9IGYkZWRpdChyZWMgLSAiIyIsICJUUklNIikKKyQgaWYgZiRlbGVtZW50KDAsIiAiLHJlYykgLm5lcy4gImRlZmluZSIgdGhlbiBnb3RvIGhsb29wCiskIGlmIGYkZWxlbWVudCgxLCIgIixyZWMpIC5lcXMuIHZfc3RyaW5nCiskIHRoZW4KKyQgICB2ZXJzaW9uID0gJ2YkZWxlbWVudCgyLCIgIixyZWMpJworJCAgIGdvdG8gaGRvbmUKKyQgZW5kaWYKKyQgZ290byBobG9vcAorJGhkb25lOgorJCBjbG9zZSBoX2luCiskIHJldHVybgorJCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQhCiskQ0hFQ0tfQ09ORklHOgorJCEKKyQgaW5fbGRlZiA9IGYkbG9jYXRlKGNkZWYsbGliZGVmcykKKyQgaWYgKGluX2xkZWYgLmx0LiBmJGxlbmd0aChsaWJkZWZzKSkKKyQgdGhlbgorJCAgIHdyaXRlIGFjb25mICIjZGVmaW5lICcnY2RlZicgMSIKKyQgICBsaWJkZWZzID0gZiRleHRyYWN0KDAsaW5fbGRlZixsaWJkZWZzKSArIC0KKyAgICAgICAgICAgICAgZiRleHRyYWN0KGluX2xkZWYgKyBmJGxlbmd0aChjZGVmKSArIDEsIC0KKyAgICAgICAgICAgICAgICAgICAgICAgIGYkbGVuZ3RoKGxpYmRlZnMpIC0gaW5fbGRlZiAtIGYkbGVuZ3RoKGNkZWYpIC0gMSwgLQorICAgICAgICAgICAgICAgICAgICAgICAgbGliZGVmcykKKyQgZWxzZQorJCAgIGlmIChmJHR5cGUoJ2NkZWYnKSAuZXFzLiAiSU5URUdFUiIpCiskICAgdGhlbgorJCAgICAgd3JpdGUgYWNvbmYgIiNkZWZpbmUgJydjZGVmJyAiLCAnY2RlZicKKyQgICBlbHNlCiskICAgICBpZiAoZiR0eXBlKCdjZGVmJykgLmVxcy4gIlNUUklORyIpCiskICAgICB0aGVuCiskICAgICAgIHdyaXRlIGFjb25mICIjZGVmaW5lICcnY2RlZicgIiwgIiIiIiwgJycnY2RlZicnLCAiIiIiCiskICAgICBlbHNlCiskICAgICAgIGdvc3ViIGNoZWNrX2NjX2RlZgorJCAgICAgZW5kaWYKKyQgICBlbmRpZgorJCBlbmRpZgorJCByZXR1cm4KKyQhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIQorJCEgQ2hlY2sgaWYgdGhpcyBpcyBhIGRlZmluZSByZWxhdGluZyB0byB0aGUgcHJvcGVydGllcyBvZiB0aGUgQy9DKysKKyQhIGNvbXBpbGVyCiskIQorJCBDSEVDS19DQ19ERUY6CiskIGlmIChjZGVmIC5lcXMuICJfTEFSR0VGSUxFNjRfU09VUkNFIikKKyQgdGhlbgorJCAgIGNvcHkgc3lzJGlucHV0OiAndGMnCiskICAgZGVjaworI2luY2x1ZGUgInRjb25maWciCisjZGVmaW5lIF9MQVJHRUZJTEUKKyNpbmNsdWRlIDxzdGRpby5oPgorCitpbnQgbWFpbigpeworRklMRSAqZnA7CisgIGZwID0gZm9wZW4oInRlbXAudHh0IiwiciIpOworICBmc2Vla28oZnAsMSxTRUVLX1NFVCk7CisgIGZjbG9zZShmcCk7Cit9CisKKyQgICBlb2QKKyQgICB0ZXN0X2ludiA9IGZhbHNlCiskICAgY29tbV9oID0gZmFsc2UKKyQgICBnb3N1YiBjY19wcm9wX2NoZWNrCiskICAgcmV0dXJuCiskIGVuZGlmCiskIHdyaXRlIGFjb25mICIvKiAiLCBsaW5lLCAiICovIgorJCByZXR1cm4KKyQhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIQorJCEgQ2hlY2sgZm9yIHByb3BlcnRpZXMgb2YgQy9DKysgY29tcGlsZXIKKyQhCiskISBWZXJzaW9uIGhpc3RvcnkKKyQhIDAuMDEgMjAwMzEwMjAgRmlyc3QgdmVyc2lvbiB0byByZWNlaXZlIGEgbnVtYmVyCiskISAwLjAyIDIwMDMxMDIyIEFkZGVkIGxvZ2ljIGZvciBkZWZpbmVzIHdpdGggdmFsdWUKKyQhIDAuMDMgMjAwNDAzMDkgTWFrZSBzdXJlIGxvY2FsIGNvbmZpZyBmaWxlIGdldHMgbm90IGRlbGV0ZWQKKyQhIDAuMDQgMjAwNDEyMzAgQWxzbyB3cml0ZSBpbmNsdWRlIGZvciBjb25maWd1cmUgcnVuCiskISAwLjA1IDIwMDUwMTAzIEFkZCBwcm9jZXNzaW5nIG9mICJjb21tZW50IGRlZmluZXMiCiskQ0NfUFJPUF9DSEVDSzoKKyQgY2NfcHJvcCA9IHRydWUKKyQgaXNfbmVlZCA9IGZhbHNlCiskIGlzX25lZWQgPSAoZiRleHRyYWN0KDAsNCxjZGVmKSAuZXFzLiAiTkVFRCIpIC5vci4gKHRlc3RfaW52IC5lcS4gdHJ1ZSkKKyQgaWYgZiRzZWFyY2godGgpIC5lcXMuICIiIHRoZW4gY3JlYXRlICd0aCcKKyQgc2V0IG1lc3NhZ2Uvbm9mYWMvbm9pZGVudC9ub3NldmVyL25vdGV4dAorJCBvbiBlcnJvciB0aGVuIGNvbnRpbnVlCiskIGNjICd0bXBuYW0nCiskIGlmIC5ub3QuICgkc3RhdHVzKSAgdGhlbiBjY19wcm9wID0gZmFsc2UKKyQgb24gZXJyb3IgdGhlbiBjb250aW51ZQorJCEgVGhlIGhlYWRlcnMgbWlnaHQgbGllIGFib3V0IHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIFJUTAorJCBsaW5rICd0bXBuYW0nLHRtcC5vcHQvb3B0CiskIGlmIC5ub3QuICgkc3RhdHVzKSAgdGhlbiBjY19wcm9wID0gZmFsc2UKKyQgc2V0IG1lc3NhZ2UvZmFjL2lkZW50L3NldmVyL3RleHQKKyQgb24gZXJyb3IgdGhlbiBnb3RvIGVycl9leGl0CiskIGRlbGV0ZS9ub2xvZyAndG1wbmFtJy4qOyovZXhjbHVkZT0ndGgnCiskIGlmIChjY19wcm9wIC5hbmQuIC5ub3QuIGlzX25lZWQpIC5vci4gLQorICAgICAoLm5vdC4gY2NfcHJvcCAuYW5kLiBpc19uZWVkKQorJCB0aGVuCiskICAgd3JpdGUgc3lzJG91dHB1dCAiQ2hlY2tpbmcgZm9yICcnY2RlZicuLi4geWVzIgorJCAgIGlmIGYkdHlwZSgnY2RlZl92YWwnX3llcykgLm5lcy4gIiIKKyQgICB0aGVuCiskICAgICBpZiBmJHR5cGUoJ2NkZWZfdmFsJ195ZXMpIC5lcXMuICJJTlRFR0VSIiAtCisgICAgICAgICB0aGVuIGNhbGwgd3JpdGVfY29uZmlnIGYkZmFvKCIjZGVmaW5lICFBUyAhVUwiLGNkZWYsJ2NkZWZfdmFsJ195ZXMpCiskICAgICBpZiBmJHR5cGUoJ2NkZWZfdmFsJ195ZXMpIC5lcXMuICJTVFJJTkciIC0KKyAgICAgICAgIHRoZW4gY2FsbCB3cml0ZV9jb25maWcgZiRmYW8oIiNkZWZpbmUgIUFTICFBUyIsY2RlZiwnY2RlZl92YWwnX3llcykKKyQgICBlbHNlCiskICAgICBjYWxsIHdyaXRlX2NvbmZpZyBmJGZhbygiI2RlZmluZSAhQVMgMSIsY2RlZikKKyQgICBlbmRpZgorJCAgIGlmIChjZGVmIC5lcXMuICJIQVZFX0ZTRUVLTyIpIC5vci4gKGNkZWYgLmVxcy4gIl9MQVJHRV9GSUxFUyIpIC5vci4gLQorICAgICAgIChjZGVmIC5lcXMuICJfTEFSR0VGSUxFNjRfU09VUkNFIikgdGhlbiAtCisgICAgICBjYWxsIHdyaXRlX2NvbmZpZyBmJHN0cmluZygiI2RlZmluZSBfTEFSR0VGSUxFIDEiKQorJCBlbHNlCiskICAgd3JpdGUgc3lzJG91dHB1dCAiQ2hlY2tpbmcgZm9yICcnY2RlZicuLi4gbm8iCiskICAgaWYgKGNvbW1faCkKKyQgICB0aGVuCisgICAgICBjYWxsIHdyaXRlX2NvbmZpZyBmJGZhbygiLyogIUFTICovIixsaW5lKQorJCAgIGVsc2UKKyQgICAgIGlmIGYkdHlwZSgnY2RlZl92YWwnX25vKSAubmVzLiAiIgorJCAgICAgdGhlbgorJCAgICAgICBpZiBmJHR5cGUoJ2NkZWZfdmFsJ19ubykgLmVxcy4gIklOVEVHRVIiIC0KKyAgICAgICAgICAgdGhlbiBjYWxsIHdyaXRlX2NvbmZpZyBmJGZhbygiI2RlZmluZSAhQVMgIVVMIixjZGVmLCdjZGVmX3ZhbCdfbm8pCiskICAgICAgIGlmIGYkdHlwZSgnY2RlZl92YWwnX25vKSAuZXFzLiAiU1RSSU5HIiAtCisgICAgICAgICAgIHRoZW4gY2FsbCB3cml0ZV9jb25maWcgZiRmYW8oIiNkZWZpbmUgIUFTICFBUyIsY2RlZiwnY2RlZl92YWwnX25vKQorJCAgICAgZWxzZQorJCAgICAgICBjYWxsIHdyaXRlX2NvbmZpZyBmJGZhbygiI3VuZGVmICFBUyIsY2RlZikKKyQgICAgIGVuZGlmCiskICAgZW5kaWYKKyQgZW5kaWYKKyQgcmV0dXJuCiskIS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCEKKyQhIENoZWNrIGZvciBwcm9wZXJ0aWVzIG9mIEMvQysrIGNvbXBpbGVyIHdpdGggbXVsdGlwbGUgcmVzdWx0IHZhbHVlcworJCEKKyQhIFZlcnNpb24gaGlzdG9yeQorJCEgMC4wMSAyMDA0MDEyNyBGaXJzdCB2ZXJzaW9uCiskISAwLjAyIDIwMDUwMTAzIFJlY29uY2lsZSBjaGFuZ2VzIGZyb20gY2NfcHJvcCB1cCB0byB2ZXJzaW9uIDAuMDUKKyRDQ19NUFJPUF9DSEVDSzoKKyQgY2NfcHJvcCA9IHRydWUKKyQgaSAgICA9IDEKKyQgaWRlbCA9IDEKKyQgTVRfTE9PUDoKKyQgaWYgZiR0eXBlKHJlc3VsdF8naScpIC5lcXMuICJTVFJJTkciCiskIHRoZW4KKyQgICBzZXQgbWVzc2FnZS9ub2ZhYy9ub2lkZW50L25vc2V2ZXIvbm90ZXh0CiskICAgb24gZXJyb3IgdGhlbiBjb250aW51ZQorJCAgIGNjICd0bXBuYW0nXydpJworJCAgIGlmIC5ub3QuICgkc3RhdHVzKSAgdGhlbiBjY19wcm9wID0gZmFsc2UKKyQgICBvbiBlcnJvciB0aGVuIGNvbnRpbnVlCiskISBUaGUgaGVhZGVycyBtaWdodCBsaWUgYWJvdXQgdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgUlRMCiskICAgbGluayAndG1wbmFtJ18naScsdG1wLm9wdC9vcHQKKyQgICBpZiAubm90LiAoJHN0YXR1cykgIHRoZW4gY2NfcHJvcCA9IGZhbHNlCiskICAgc2V0IG1lc3NhZ2UvZmFjL2lkZW50L3NldmVyL3RleHQKKyQgICBvbiBlcnJvciB0aGVuIGdvdG8gZXJyX2V4aXQKKyQgICBkZWxldGUvbm9sb2cgJ3RtcG5hbSdfJ2knLio7KgorJCAgIGlmIChjY19wcm9wKQorJCAgIHRoZW4KKyQgICAgIHdyaXRlIHN5cyRvdXRwdXQgIkNoZWNraW5nIGZvciAnJ2NkZWYnLi4uICIsIG1kZWZfJ2knCiskICAgICBpZiBmJHR5cGUobWRlZl8naScpIC5lcXMuICJJTlRFR0VSIiAtCisgICAgICAgICB0aGVuIGNhbGwgd3JpdGVfY29uZmlnIGYkZmFvKCIjZGVmaW5lICFBUyAhVUwiLGNkZWYsbWRlZl8naScpCiskICAgICBpZiBmJHR5cGUoJ2NkZWZfdmFsJ195ZXMpIC5lcXMuICJTVFJJTkciIC0KKyAgICAgICAgIHRoZW4gY2FsbCB3cml0ZV9jb25maWcgZiRmYW8oIiNkZWZpbmUgIUFTICFBUyIsY2RlZixtZGVmXydpJykKKyQgICAgIGdvdG8gbXN5bV9jbGVhbgorJCAgIGVsc2UKKyQgICAgIGkgPSBpICsgMQorJCAgICAgZ290byBtdF9sb29wCiskICAgZW5kaWYKKyQgZW5kaWYKKyQgd3JpdGUgc3lzJG91dHB1dCAiQ2hlY2tpbmcgZm9yICcnY2RlZicuLi4gbm8iCiskIGNhbGwgd3JpdGVfY29uZmlnIGYkZmFvKCIjdW5kZWYgIUFTIixjZGVmKQorJCBNU1lNX0NMRUFOOgorJCBpZiAoaWRlbCAubGUuIG1zeW1fbWF4KQorJCB0aGVuCiskICAgZGVsZXRlL3N5bSBtZGVmXydpZGVsJworJCAgIGlkZWwgPSBpZGVsICsgMQorJCAgIGdvdG8gbXN5bV9jbGVhbgorJCBlbmRpZgorJCByZXR1cm4KKyQhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIQorJCEgV3JpdGUgY29uZmlndXJhdGlvbiB0byBib3RoIHBlcm1hbmVudCBhbmQgdGVtcG9yYXJ5IGNvbmZpZyBmaWxlCiskIQorJCEgVmVyc2lvbiBoaXN0b3J5CiskISAwLjAxIDIwMDMxMDI5IEZpcnN0IHZlcnNpb24gdG8gcmVjZWl2ZSBhIG51bWJlcgorJCEKKyRXUklURV9DT05GSUc6IFNVQlJPVVRJTkUKKyQgIHdyaXRlIGFjb25mICdwMScKKyQgIG9wZW4vYXBwZW5kIGNvbmZoICd0aCcKKyQgIHdyaXRlIGNvbmZoICdwMScKKyQgIGNsb3NlIGNvbmZoCiskRU5EU1VCUk9VVElORQorJCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQhCiskISBBbmFseXplIHRoZSBwcm9qZWN0IG1hcCBmaWxlIGFuZCBjcmVhdGUgdGhlIHN5bWJvbCB2ZWN0b3IgZm9yIGEgc2hhcmVhYmxlCiskISBpbWFnZSBmcm9tIGl0CiskIQorJCEgVmVyc2lvbiBoaXN0b3J5CiskISAwLjAxIDIwMTIwMTI4IEZpcnN0IHZlcnNpb24KKyQhIDAuMDIgMjAxMjAyMjYgQWRkIHByZS1sb2FkIGxvZ2ljCiskIQorJCBNQVBfMl9TSE9QVDogU3Vicm91dGluZQorJCEKKyQgU0FZIDo9ICJXUklURV8gU1lTJE9VVFBVVCIKKyQhCiskIElGIEYkU0VBUkNIKCInJ1AxJyIpIC5FUVMuICIiCiskIFRIRU4KKyQgICAgU0FZICJNQVBfMl9TSE9QVC1FLU5PU1VDSEZJTEU6ICBFcnJvciwgaW5wdXRmaWxlICcncDEnIG5vdCBhdmFpbGFibGUiCiskICAgIGdvdG8gZXhpdF9tMnMKKyQgRU5ESUYKKyQgSUYgIicnUDInIiAuRVFTLiAiIgorJCBUSEVOCiskICAgIFNBWSAiTUFQXzJfU0hPUFQ6ICBFcnJvciwgbm8gb3V0cHV0IGZpbGUgcHJvdmlkZWQiCiskICAgIGdvdG8gZXhpdF9tMnMKKyQgRU5ESUYKKyQhCiskIG1vZHVsZTEgPSAiZGVmbGF0ZSNkZWZsYXRlRW5kI2RlZmxhdGVJbml0XyNkZWZsYXRlUGFyYW1zI2RlZmxhdGVTZXREaWN0aW9uYXJ5IgorJCBtb2R1bGUyID0gImd6Y2xvc2UjZ3plcnJvciNnemdldGMjZ3pnZXRzI2d6b3BlbiNnenByaW50ZiNnenB1dGMjZ3pwdXRzI2d6cmVhZCIKKyQgbW9kdWxlMyA9ICJnenNlZWsjZ3p0ZWxsI2luZmxhdGUjaW5mbGF0ZUVuZCNpbmZsYXRlSW5pdF8jaW5mbGF0ZVNldERpY3Rpb25hcnkiCiskIG1vZHVsZTQgPSAiaW5mbGF0ZVN5bmMjdW5jb21wcmVzcyN6bGliVmVyc2lvbiNjb21wcmVzcyIKKyQgb3Blbi9yZWFkIG1hcCAncDEKKyQgaWYgYXhwIC5vci4gaWE2NAorJCB0aGVuCiskICAgICBvcGVuL3dyaXRlIGFvcHQgYS5vcHQKKyQgICAgIG9wZW4vd3JpdGUgYm9wdCBiLm9wdAorJCAgICAgd3JpdGUgYW9wdCAiIENBU0VfU0VOU0lUSVZFPVlFUyIKKyQgICAgIHdyaXRlIGJvcHQgIlNZTUJPTF9WRUNUT1I9ICgtIgorJCAgICAgbW9kX3N5bV9udW0gPSAxCiskIE1PRF9TWU1fTE9PUDoKKyQgICAgIGlmIGYkdHlwZShtb2R1bGUnbW9kX3N5bV9udW0nKSAubmVzLiAiIgorJCAgICAgdGhlbgorJCAgICAgICAgIG1vZF9pbiA9IDAKKyQgTU9EX1NZTV9JTjoKKyQgICAgICAgICBzaGFyZWRfcHJvYyA9IGYkZWxlbWVudChtb2RfaW4sICIjIiwgbW9kdWxlJ21vZF9zeW1fbnVtJykKKyQgICAgICAgICBpZiBzaGFyZWRfcHJvYyAubmVzLiAiIyIKKyQgICAgICAgICB0aGVuCiskICAgICAgICAgICAgIHdyaXRlIGFvcHQgZiRmYW8oIiBzeW1ib2xfdmVjdG9yPSghQVMvIUFTPVBST0NFRFVSRSkiLC0KKyAgICAgICAgCQkgICAgICAgZiRlZGl0KHNoYXJlZF9wcm9jLCJ1cGNhc2UiKSxzaGFyZWRfcHJvYykKKyQgICAgICAgICAgICAgd3JpdGUgYm9wdCBmJGZhbygiIUFTPVBST0NFRFVSRSwtIixzaGFyZWRfcHJvYykKKyQgICAgICAgICAgICAgbW9kX2luID0gbW9kX2luICsgMQorJCAgICAgICAgICAgICBnb3RvIG1vZF9zeW1faW4KKyQgICAgICAgICBlbmRpZgorJCAgICAgICAgIG1vZF9zeW1fbnVtID0gbW9kX3N5bV9udW0gKyAxCiskICAgICAgICAgZ290byBtb2Rfc3ltX2xvb3AKKyQgICAgIGVuZGlmCiskTUFQX0xPT1A6CiskICAgICByZWFkL2VuZD1tYXBfZW5kIG1hcCBsaW5lCiskICAgICBpZiAoZiRsb2NhdGUoInsiLGxpbmUpLmx0LiBmJGxlbmd0aChsaW5lKSkgLm9yLiAtCisgICAgICAgICAoZiRsb2NhdGUoImdsb2JhbDoiLCBsaW5lKSAubHQuIGYkbGVuZ3RoKGxpbmUpKQorJCAgICAgdGhlbgorJCAgICAgICAgIHByb2MgPSB0cnVlCiskICAgICAgICAgZ290byBtYXBfbG9vcAorJCAgICAgZW5kaWYKKyQgICAgIGlmIGYkbG9jYXRlKCJ9IixsaW5lKS5sdC4gZiRsZW5ndGgobGluZSkgdGhlbiBwcm9jID0gZmFsc2UKKyQgICAgIGlmIGYkbG9jYXRlKCJsb2NhbDoiLCBsaW5lKSAubHQuIGYkbGVuZ3RoKGxpbmUpIHRoZW4gcHJvYyA9IGZhbHNlCiskICAgICBpZiBwcm9jCiskICAgICB0aGVuCiskICAgICAgICAgc2hhcmVkX3Byb2MgPSBmJGVkaXQobGluZSwiY29sbGFwc2UiKQorJCAgICAgICAgIGNob3Bfc2VtaSA9IGYkbG9jYXRlKCI7Iiwgc2hhcmVkX3Byb2MpCiskICAgICAgICAgaWYgY2hvcF9zZW1pIC5sdC4gZiRsZW5ndGgoc2hhcmVkX3Byb2MpIHRoZW4gLQorICAgICAgICAgICAgICBzaGFyZWRfcHJvYyA9IGYkZXh0cmFjdCgwLCBjaG9wX3NlbWksIHNoYXJlZF9wcm9jKQorJCAgICAgICAgIHdyaXRlIGFvcHQgZiRmYW8oIiBzeW1ib2xfdmVjdG9yPSghQVMvIUFTPVBST0NFRFVSRSkiLC0KKyAgICAgICAgCQkJIGYkZWRpdChzaGFyZWRfcHJvYywidXBjYXNlIiksc2hhcmVkX3Byb2MpCiskICAgICAgICAgd3JpdGUgYm9wdCBmJGZhbygiIUFTPVBST0NFRFVSRSwtIixzaGFyZWRfcHJvYykKKyQgICAgIGVuZGlmCiskICAgICBnb3RvIG1hcF9sb29wCiskTUFQX0VORDoKKyQgICAgIGNsb3NlL25vbG9nIGFvcHQKKyQgICAgIGNsb3NlL25vbG9nIGJvcHQKKyQgICAgIG9wZW4vYXBwZW5kIGxpYm9wdCAncDInCiskICAgICBvcGVuL3JlYWQgYW9wdCBhLm9wdAorJCAgICAgb3Blbi9yZWFkIGJvcHQgYi5vcHQKKyRBTE9PUDoKKyQgICAgIHJlYWQvZW5kPWFsb29wX2VuZCBhb3B0IGxpbmUKKyQgICAgIHdyaXRlIGxpYm9wdCBsaW5lCiskICAgICBnb3RvIGFsb29wCiskQUxPT1BfRU5EOgorJCAgICAgY2xvc2Uvbm9sb2cgYW9wdAorJCAgICAgc3YgPSAiIgorJEJMT09QOgorJCAgICAgcmVhZC9lbmQ9Ymxvb3BfZW5kIGJvcHQgc3ZuCiskICAgICBpZiAoc3ZuLm5lcy4iIikKKyQgICAgIHRoZW4KKyQgICAgICAgIGlmIChzdi5uZXMuIiIpIHRoZW4gd3JpdGUgbGlib3B0IHN2CiskICAgICAgICBzdiA9IHN2bgorJCAgICAgZW5kaWYKKyQgICAgIGdvdG8gYmxvb3AKKyRCTE9PUF9FTkQ6CiskICAgICB3cml0ZSBsaWJvcHQgZiRleHRyYWN0KDAsZiRsZW5ndGgoc3YpLTIsc3YpLCAiLSIKKyQgICAgIHdyaXRlIGxpYm9wdCAiKSIKKyQgICAgIGNsb3NlL25vbG9nIGJvcHQKKyQgICAgIGRlbGV0ZS9ub2xvZy9ub2NvbmYgYS5vcHQ7KixiLm9wdDsqCiskIGVsc2UKKyQgICAgIGlmIHZheAorJCAgICAgdGhlbgorJCAgICAgb3Blbi9hcHBlbmQgbGlib3B0ICdwMicKKyQgICAgIG1vZF9zeW1fbnVtID0gMQorJCBWTU9EX1NZTV9MT09QOgorJCAgICAgaWYgZiR0eXBlKG1vZHVsZSdtb2Rfc3ltX251bScpIC5uZXMuICIiCiskICAgICB0aGVuCiskICAgICAgICAgbW9kX2luID0gMAorJCBWTU9EX1NZTV9JTjoKKyQgICAgICAgICBzaGFyZWRfcHJvYyA9IGYkZWxlbWVudChtb2RfaW4sICIjIiwgbW9kdWxlJ21vZF9zeW1fbnVtJykKKyQgICAgICAgICBpZiBzaGFyZWRfcHJvYyAubmVzLiAiIyIKKyQgICAgICAgICB0aGVuCiskICAgICAJICAgICAgd3JpdGUgbGlib3B0IGYkZmFvKCJVTklWRVJTQUw9IUFTIiwtCisgICAgICAJICAJCQkgICAgIGYkZWRpdChzaGFyZWRfcHJvYywidXBjYXNlIikpCiskICAgICAgICAgICAgIG1vZF9pbiA9IG1vZF9pbiArIDEKKyQgICAgICAgICAgICAgZ290byB2bW9kX3N5bV9pbgorJCAgICAgICAgIGVuZGlmCiskICAgICAgICAgbW9kX3N5bV9udW0gPSBtb2Rfc3ltX251bSArIDEKKyQgICAgICAgICBnb3RvIHZtb2Rfc3ltX2xvb3AKKyQgICAgIGVuZGlmCiskVk1BUF9MT09QOgorJCAgICAgCSAgcmVhZC9lbmQ9dm1hcF9lbmQgbWFwIGxpbmUKKyQgICAgIAkgIGlmIChmJGxvY2F0ZSgieyIsbGluZSkubHQuIGYkbGVuZ3RoKGxpbmUpKSAub3IuIC0KKyAgIAkgICAgICAoZiRsb2NhdGUoImdsb2JhbDoiLCBsaW5lKSAubHQuIGYkbGVuZ3RoKGxpbmUpKQorJCAgICAgCSAgdGhlbgorJCAgICAgCSAgICAgIHByb2MgPSB0cnVlCiskICAgICAJICAgICAgZ290byB2bWFwX2xvb3AKKyQgICAgIAkgIGVuZGlmCiskICAgICAJICBpZiBmJGxvY2F0ZSgifSIsbGluZSkubHQuIGYkbGVuZ3RoKGxpbmUpIHRoZW4gcHJvYyA9IGZhbHNlCiskICAgICAJICBpZiBmJGxvY2F0ZSgibG9jYWw6IiwgbGluZSkgLmx0LiBmJGxlbmd0aChsaW5lKSB0aGVuIHByb2MgPSBmYWxzZQorJCAgICAgCSAgaWYgcHJvYworJCAgICAgCSAgdGhlbgorJCAgICAgCSAgICAgIHNoYXJlZF9wcm9jID0gZiRlZGl0KGxpbmUsImNvbGxhcHNlIikKKyQgICAgIAkgICAgICBjaG9wX3NlbWkgPSBmJGxvY2F0ZSgiOyIsIHNoYXJlZF9wcm9jKQorJCAgICAgCSAgICAgIGlmIGNob3Bfc2VtaSAubHQuIGYkbGVuZ3RoKHNoYXJlZF9wcm9jKSB0aGVuIC0KKyAgICAgIAkgIAkgIHNoYXJlZF9wcm9jID0gZiRleHRyYWN0KDAsIGNob3Bfc2VtaSwgc2hhcmVkX3Byb2MpCiskICAgICAJICAgICAgd3JpdGUgbGlib3B0IGYkZmFvKCJVTklWRVJTQUw9IUFTIiwtCisgICAgICAJICAJCQkgICAgIGYkZWRpdChzaGFyZWRfcHJvYywidXBjYXNlIikpCiskICAgICAJICBlbmRpZgorJCAgICAgCSAgZ290byB2bWFwX2xvb3AKKyRWTUFQX0VORDoKKyQgICAgIGVsc2UKKyQgICAgICAgICB3cml0ZSBzeXMkb3V0cHV0ICJVbmtub3duIEFyY2hpdGVjdHVyZSAoTm90IFZBWCwgQVhQLCBvciBJQTY0KSIKKyQgICAgICAgICB3cml0ZSBzeXMkb3V0cHV0ICJObyBvcHRpb25zIGZpbGUgY3JlYXRlZCIKKyQgICAgIGVuZGlmCiskIGVuZGlmCiskIEVYSVRfTTJTOgorJCBjbG9zZS9ub2xvZyBtYXAKKyQgY2xvc2Uvbm9sb2cgbGlib3B0CiskIGVuZHN1YnJvdXRpbmUKZGlmZiAtLWdpdCBhL3NyYy9tc2Rvcy9NYWtlZmlsZS5ib3IgYi9zcmMvbXNkb3MvTWFrZWZpbGUuYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkMTJhMmMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbXNkb3MvTWFrZWZpbGUuYm9yCkBAIC0wLDAgKzEsMTE1IEBACisjIE1ha2VmaWxlIGZvciB6bGliCisjIEJvcmxhbmQgQysrCisjIExhc3QgdXBkYXRlZDogMTUtTWFyLTIwMDMKKworIyBUbyB1c2UsIGRvICJtYWtlIC1mbWFrZWZpbGUuYm9yIgorIyBUbyBjb21waWxlIGluIHNtYWxsIG1vZGVsLCBzZXQgYmVsb3c6IE1PREVMPXMKKworIyBXQVJOSU5HOiB0aGUgc21hbGwgbW9kZWwgaXMgc3VwcG9ydGVkIGJ1dCBvbmx5IGZvciBzbWFsbCB2YWx1ZXMgb2YKKyMgTUFYX1dCSVRTIGFuZCBNQVhfTUVNX0xFVkVMLiBGb3IgZXhhbXBsZToKKyMgICAgLURNQVhfV0JJVFM9MTEgLURERUZfV0JJVFM9MTEgLURNQVhfTUVNX0xFVkVMPTMKKyMgSWYgeW91IHdpc2ggdG8gcmVkdWNlIHRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzIChkZWZhdWx0IDI1NksgZm9yIGJpZworIyBvYmplY3RzIHBsdXMgYSBmZXcgSyksIHlvdSBjYW4gYWRkIHRvIHRoZSBMT0MgbWFjcm8gYmVsb3c6CisjICAgLURNQVhfTUVNX0xFVkVMPTcgLURNQVhfV0JJVFM9MTQKKyMgU2VlIHpjb25mLmggZm9yIGRldGFpbHMgYWJvdXQgdGhlIG1lbW9yeSByZXF1aXJlbWVudHMuCisKKyMgLS0tLS0tLS0tLS0tIFR1cmJvIEMrKywgQm9ybGFuZCBDKysgLS0tLS0tLS0tLS0tCisKKyMgICAgT3B0aW9uYWwgbm9uc3RhbmRhcmQgcHJlcHJvY2Vzc29yIGZsYWdzIChlLmcuIC1ETUFYX01FTV9MRVZFTD03KQorIyAgICBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIGVudmlyb25tZW50IHZpYSAic2V0IExPQ0FMX1pMSUI9LURGT08iIG9yIGFkZGVkCisjICAgIHRvIHRoZSBkZWNsYXJhdGlvbiBvZiBMT0MgaGVyZToKK0xPQyA9ICQoTE9DQUxfWkxJQikKKworIyB0eXBlIGZvciBDUFUgcmVxdWlyZWQ6IDA6IDgwODYsIDE6IDgwMTg2LCAyOiA4MDI4NiwgMzogODAzODYsIGV0Yy4KK0NQVV9UWVAgPSAwCisKKyMgbWVtb3J5IG1vZGVsOiBvbmUgb2YgcywgbSwgYywgbCAoc21hbGwsIG1lZGl1bSwgY29tcGFjdCwgbGFyZ2UpCitNT0RFTD1sCisKKyMgcmVwbGFjZSBiY2Mgd2l0aCB0Y2MgZm9yIFR1cmJvIEMrKyAxLjAsIHdpdGggYmNjMzIgZm9yIHRoZSAzMiBiaXQgdmVyc2lvbgorQ0M9YmNjCitMRD1iY2MKK0FSPXRsaWIKKworIyBjb21waWxlciBmbGFncworIyByZXBsYWNlICItTzIiIGJ5ICItTyAtRyAtYSAtZCIgZm9yIFR1cmJvIEMrKyAxLjAKK0NGTEFHUz0tTzIgLVogLW0kKE1PREVMKSAkKExPQykKKworTERGTEFHUz0tbSQoTU9ERUwpIC1mLQorCisKKyMgdmFyaWFibGVzCitaTElCX0xJQiA9IHpsaWJfJChNT0RFTCkubGliCisKK09CSjEgPSBhZGxlcjMyLm9iaiBjb21wcmVzcy5vYmogY3JjMzIub2JqIGRlZmxhdGUub2JqIGd6Y2xvc2Uub2JqIGd6bGliLm9iaiBnenJlYWQub2JqCitPQkoyID0gZ3p3cml0ZS5vYmogaW5mYmFjay5vYmogaW5mZmFzdC5vYmogaW5mbGF0ZS5vYmogaW5mdHJlZXMub2JqIHRyZWVzLm9iaiB1bmNvbXByLm9iaiB6dXRpbC5vYmoKK09CSlAxID0gK2FkbGVyMzIub2JqK2NvbXByZXNzLm9iaitjcmMzMi5vYmorZGVmbGF0ZS5vYmorZ3pjbG9zZS5vYmorZ3psaWIub2JqK2d6cmVhZC5vYmoKK09CSlAyID0gK2d6d3JpdGUub2JqK2luZmJhY2sub2JqK2luZmZhc3Qub2JqK2luZmxhdGUub2JqK2luZnRyZWVzLm9iait0cmVlcy5vYmordW5jb21wci5vYmorenV0aWwub2JqCisKKworIyB0YXJnZXRzCithbGw6ICQoWkxJQl9MSUIpIGV4YW1wbGUuZXhlIG1pbmlnemlwLmV4ZQorCisuYy5vYmo6CisJJChDQykgLWMgJChDRkxBR1MpICQqLmMKKworYWRsZXIzMi5vYmo6IGFkbGVyMzIuYyB6bGliLmggemNvbmYuaAorCitjb21wcmVzcy5vYmo6IGNvbXByZXNzLmMgemxpYi5oIHpjb25mLmgKKworY3JjMzIub2JqOiBjcmMzMi5jIHpsaWIuaCB6Y29uZi5oIGNyYzMyLmgKKworZGVmbGF0ZS5vYmo6IGRlZmxhdGUuYyBkZWZsYXRlLmggenV0aWwuaCB6bGliLmggemNvbmYuaAorCitnemNsb3NlLm9iajogZ3pjbG9zZS5jIHpsaWIuaCB6Y29uZi5oIGd6Z3V0cy5oCisKK2d6bGliLm9iajogZ3psaWIuYyB6bGliLmggemNvbmYuaCBnemd1dHMuaAorCitnenJlYWQub2JqOiBnenJlYWQuYyB6bGliLmggemNvbmYuaCBnemd1dHMuaAorCitnendyaXRlLm9iajogZ3p3cml0ZS5jIHpsaWIuaCB6Y29uZi5oIGd6Z3V0cy5oCisKK2luZmJhY2sub2JqOiBpbmZiYWNrLmMgenV0aWwuaCB6bGliLmggemNvbmYuaCBpbmZ0cmVlcy5oIGluZmxhdGUuaCBcCisgaW5mZmFzdC5oIGluZmZpeGVkLmgKKworaW5mZmFzdC5vYmo6IGluZmZhc3QuYyB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oIGluZnRyZWVzLmggaW5mbGF0ZS5oIFwKKyBpbmZmYXN0LmgKKworaW5mbGF0ZS5vYmo6IGluZmxhdGUuYyB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oIGluZnRyZWVzLmggaW5mbGF0ZS5oIFwKKyBpbmZmYXN0LmggaW5mZml4ZWQuaAorCitpbmZ0cmVlcy5vYmo6IGluZnRyZWVzLmMgenV0aWwuaCB6bGliLmggemNvbmYuaCBpbmZ0cmVlcy5oCisKK3RyZWVzLm9iajogdHJlZXMuYyB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oIGRlZmxhdGUuaCB0cmVlcy5oCisKK3VuY29tcHIub2JqOiB1bmNvbXByLmMgemxpYi5oIHpjb25mLmgKKworenV0aWwub2JqOiB6dXRpbC5jIHp1dGlsLmggemxpYi5oIHpjb25mLmgKKworZXhhbXBsZS5vYmo6IHRlc3QvZXhhbXBsZS5jIHpsaWIuaCB6Y29uZi5oCisKK21pbmlnemlwLm9iajogdGVzdC9taW5pZ3ppcC5jIHpsaWIuaCB6Y29uZi5oCisKKworIyB0aGUgY29tbWFuZCBsaW5lIGlzIGN1dCB0byBmaXQgaW4gdGhlIE1TLURPUyAxMjggYnl0ZSBsaW1pdDoKKyQoWkxJQl9MSUIpOiAkKE9CSjEpICQoT0JKMikKKwktZGVsICQoWkxJQl9MSUIpCisJJChBUikgJChaTElCX0xJQikgJChPQkpQMSkKKwkkKEFSKSAkKFpMSUJfTElCKSAkKE9CSlAyKQorCitleGFtcGxlLmV4ZTogZXhhbXBsZS5vYmogJChaTElCX0xJQikKKwkkKExEKSAkKExERkxBR1MpIGV4YW1wbGUub2JqICQoWkxJQl9MSUIpCisKK21pbmlnemlwLmV4ZTogbWluaWd6aXAub2JqICQoWkxJQl9MSUIpCisJJChMRCkgJChMREZMQUdTKSBtaW5pZ3ppcC5vYmogJChaTElCX0xJQikKKwordGVzdDogZXhhbXBsZS5leGUgbWluaWd6aXAuZXhlCisJZXhhbXBsZQorCWVjaG8gaGVsbG8gd29ybGQgfCBtaW5pZ3ppcCB8IG1pbmlnemlwIC1kCisKK2NsZWFuOgorCS1kZWwgKi5vYmoKKwktZGVsICoubGliCisJLWRlbCAqLmV4ZQorCS1kZWwgemxpYl8qLmJhaworCS1kZWwgZm9vLmd6CmRpZmYgLS1naXQgYS9zcmMvbXNkb3MvTWFrZWZpbGUuZGoyIGIvc3JjL21zZG9zL01ha2VmaWxlLmRqMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWQyMDM3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL21zZG9zL01ha2VmaWxlLmRqMgpAQCAtMCwwICsxLDEwNCBAQAorIyBNYWtlZmlsZSBmb3IgemxpYi4gIE1vZGlmaWVkIGZvciBkamdwcCB2Mi4wIGJ5IEYuIEouIERvbmFob2UsIDMvMTUvOTYuCisjIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEplYW4tbG91cCBHYWlsbHkuCisjIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKKworIyBUbyBjb21waWxlLCBvciB0byBjb21waWxlIGFuZCB0ZXN0LCB0eXBlOgorIworIyAgIG1ha2UgLWZtYWtlZmlsZS5kajI7ICBtYWtlIHRlc3QgLWZtYWtlZmlsZS5kajIKKyMKKyMgVG8gaW5zdGFsbCBsaWJ6LmEsIHpjb25mLmggYW5kIHpsaWIuaCBpbiB0aGUgZGpncHAgZGlyZWN0b3JpZXMsIHR5cGU6CisjCisjICAgIG1ha2UgaW5zdGFsbCAtZm1ha2VmaWxlLmRqMgorIworIyBhZnRlciBmaXJzdCBkZWZpbmluZyBMSUJSQVJZX1BBVEggYW5kIElOQ0xVREVfUEFUSCBpbiBkamdwcC5lbnYgYXMKKyMgaW4gdGhlIHNhbXBsZSBiZWxvdyBpZiB0aGUgcGF0dGVybiBvZiB0aGUgREpHUFAgZGlzdHJpYnV0aW9uIGlzIHRvCisjIGJlIGZvbGxvd2VkLiAgUmVtZW1iZXIgdGhhdCwgd2hpbGUgPHNwPidlcyBhcm91bmQgPD0+IGFyZSBpZ25vcmVkIGluCisjIG1ha2VmaWxlcywgdGhleSBhcmUgKm5vdCogaW4gYmF0Y2ggZmlsZXMgb3IgaW4gZGpncHAuZW52LgorIyAtIC0gLSAtIC0KKyMgW21ha2VdCisjIElOQ0xVREVfUEFUSD0lXD47SU5DTFVERV9QQVRIJSVcREpESVIlXGluY2x1ZGUKKyMgTElCUkFSWV9QQVRIPSVcPjtMSUJSQVJZX1BBVEglJVxESkRJUiVcbGliCisjIEJVVFQ9LW00ODYKKyMgLSAtIC0gLSAtCisjIEFsdGVybmF0ZWx5LCB0aGVzZSB2YXJpYWJsZXMgbWF5IGJlIGRlZmluZWQgYmVsb3csIG92ZXJyaWRpbmcgdGhlIHZhbHVlcworIyBpbiBkamdwcC5lbnYsIGFzCisjIElOQ0xVREVfUEFUSD1jOlx1c3JcaW5jbHVkZQorIyBMSUJSQVJZX1BBVEg9YzpcdXNyXGxpYgorCitDQz1nY2MKKworI0NGTEFHUz0tTU1EIC1PCisjQ0ZMQUdTPS1PIC1ETUFYX1dCSVRTPTE0IC1ETUFYX01FTV9MRVZFTD03CisjQ0ZMQUdTPS1NTUQgLWcgLURaTElCX0RFQlVHCitDRkxBR1M9LU1NRCAtTzMgJChCVVRUKSAtV2FsbCAtV3dyaXRlLXN0cmluZ3MgLVdwb2ludGVyLWFyaXRoIC1XY29udmVyc2lvbiBcCisgICAgICAgICAgICAgLVdzdHJpY3QtcHJvdG90eXBlcyAtV21pc3NpbmctcHJvdG90eXBlcworCisjIElmIGNwLmV4ZSBpcyBhdmFpbGFibGUsIHJlcGxhY2UgImNvcHkgL1kiIHdpdGggImNwIC1mcCIgLgorQ1A9Y29weSAvWQorIyBJZiBnbnUgaW5zdGFsbC5leGUgaXMgYXZhaWxhYmxlLCByZXBsYWNlICQoQ1ApIHdpdGggZ2luc3RhbGwuCitJTlNUQUxMPSQoQ1ApCisjIFRoZSBkZWZhdWx0IHZhbHVlIG9mIFJNIGlzICJybSAtZi4iICBJZiAicm0uZXhlIiBpcyBmb3VuZCwgY29tbWVudCBvdXQ6CitSTT1kZWwKK0xETElCUz0tTC4gLWx6CitMRD0kKENDKSAtcyAtbworTERTSEFSRUQ9JChDQykKKworSU5DTD16bGliLmggemNvbmYuaAorTElCUz1saWJ6LmEKKworQVI9YXIgcmNzCisKK3ByZWZpeD0vdXNyL2xvY2FsCitleGVjX3ByZWZpeCA9ICQocHJlZml4KQorCitPQkpTID0gYWRsZXIzMi5vIGNvbXByZXNzLm8gY3JjMzIubyBnemNsb3NlLm8gZ3psaWIubyBnenJlYWQubyBnendyaXRlLm8gXAorICAgICAgIHVuY29tcHIubyBkZWZsYXRlLm8gdHJlZXMubyB6dXRpbC5vIGluZmxhdGUubyBpbmZiYWNrLm8gaW5mdHJlZXMubyBpbmZmYXN0Lm8KKworT0JKQSA9CisjIHRvIHVzZSB0aGUgYXNtIGNvZGU6IG1ha2UgT0JKQT1tYXRjaC5vCisKK1RFU1RfT0JKUyA9IGV4YW1wbGUubyBtaW5pZ3ppcC5vCisKK2FsbDogZXhhbXBsZS5leGUgbWluaWd6aXAuZXhlCisKK2NoZWNrOiB0ZXN0Cit0ZXN0OiBhbGwKKwkuL2V4YW1wbGUKKwllY2hvIGhlbGxvIHdvcmxkIHwgLlxtaW5pZ3ppcCB8IC5cbWluaWd6aXAgLWQKKworJS5vIDogJS5jCisJJChDQykgJChDRkxBR1MpIC1jICQ8IC1vICRACisKK2xpYnouYTogJChPQkpTKSAkKE9CSkEpCisJJChBUikgJEAgJChPQkpTKSAkKE9CSkEpCisKKyUuZXhlIDogJS5vICQoTElCUykKKwkkKExEKSAkQCAkPCAkKExETElCUykKKworIyBJTkNMVURFX1BBVEggYW5kIExJQlJBUllfUEFUSCB3ZXJlIHNldCBmb3IgW21ha2VdIGluIGRqZ3BwLmVudiAuCisKKy5QSE9OWSA6IHVuaW5zdGFsbCBjbGVhbgorCitpbnN0YWxsOiAkKElOQ0wpICQoTElCUykKKwktQGlmIG5vdCBleGlzdCAkKElOQ0xVREVfUEFUSClcbnVsIG1rZGlyICQoSU5DTFVERV9QQVRIKQorCS1AaWYgbm90IGV4aXN0ICQoTElCUkFSWV9QQVRIKVxudWwgbWtkaXIgJChMSUJSQVJZX1BBVEgpCisJJChJTlNUQUxMKSB6bGliLmggJChJTkNMVURFX1BBVEgpCisJJChJTlNUQUxMKSB6Y29uZi5oICQoSU5DTFVERV9QQVRIKQorCSQoSU5TVEFMTCkgbGliei5hICQoTElCUkFSWV9QQVRIKQorCit1bmluc3RhbGw6CisJJChSTSkgJChJTkNMVURFX1BBVEgpXHpsaWIuaAorCSQoUk0pICQoSU5DTFVERV9QQVRIKVx6Y29uZi5oCisJJChSTSkgJChMSUJSQVJZX1BBVEgpXGxpYnouYQorCitjbGVhbjoKKwkkKFJNKSAqLmQKKwkkKFJNKSAqLm8KKwkkKFJNKSAqLmV4ZQorCSQoUk0pIGxpYnouYQorCSQoUk0pIGZvby5negorCitERVBTIDo9ICQod2lsZGNhcmQgKi5kKQoraWZuZXEgKCQoREVQUyksKQoraW5jbHVkZSAkKERFUFMpCitlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL21zZG9zL01ha2VmaWxlLmVteCBiL3NyYy9tc2Rvcy9NYWtlZmlsZS5lbXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTMwZjY3YgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tc2Rvcy9NYWtlZmlsZS5lbXgKQEAgLTAsMCArMSw2OSBAQAorIyBNYWtlZmlsZSBmb3IgemxpYi4gIE1vZGlmaWVkIGZvciBlbXggMC45YyBieSBDaHIuIFNwaWVsZXIsIDYvMTcvOTguCisjIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEplYW4tbG91cCBHYWlsbHkuCisjIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKKworIyBUbyBjb21waWxlLCBvciB0byBjb21waWxlIGFuZCB0ZXN0LCB0eXBlOgorIworIyAgIG1ha2UgLWZtYWtlZmlsZS5lbXg7ICBtYWtlIHRlc3QgLWZtYWtlZmlsZS5lbXgKKyMKKworQ0M9Z2NjCisKKyNDRkxBR1M9LU1NRCAtTworI0NGTEFHUz0tTyAtRE1BWF9XQklUUz0xNCAtRE1BWF9NRU1fTEVWRUw9NworI0NGTEFHUz0tTU1EIC1nIC1EWkxJQl9ERUJVRworQ0ZMQUdTPS1NTUQgLU8zICQoQlVUVCkgLVdhbGwgLVd3cml0ZS1zdHJpbmdzIC1XcG9pbnRlci1hcml0aCAtV2NvbnZlcnNpb24gXAorICAgICAgICAgICAgIC1Xc3RyaWN0LXByb3RvdHlwZXMgLVdtaXNzaW5nLXByb3RvdHlwZXMKKworIyBJZiBjcC5leGUgaXMgYXZhaWxhYmxlLCByZXBsYWNlICJjb3B5IC9ZIiB3aXRoICJjcCAtZnAiIC4KK0NQPWNvcHkgL1kKKyMgSWYgZ251IGluc3RhbGwuZXhlIGlzIGF2YWlsYWJsZSwgcmVwbGFjZSAkKENQKSB3aXRoIGdpbnN0YWxsLgorSU5TVEFMTD0kKENQKQorIyBUaGUgZGVmYXVsdCB2YWx1ZSBvZiBSTSBpcyAicm0gLWYuIiAgSWYgInJtLmV4ZSIgaXMgZm91bmQsIGNvbW1lbnQgb3V0OgorUk09ZGVsCitMRExJQlM9LUwuIC1semxpYgorTEQ9JChDQykgLXMgLW8KK0xEU0hBUkVEPSQoQ0MpCisKK0lOQ0w9emxpYi5oIHpjb25mLmgKK0xJQlM9emxpYi5hCisKK0FSPWFyIHJjcworCitwcmVmaXg9L3Vzci9sb2NhbAorZXhlY19wcmVmaXggPSAkKHByZWZpeCkKKworT0JKUyA9IGFkbGVyMzIubyBjb21wcmVzcy5vIGNyYzMyLm8gZ3pjbG9zZS5vIGd6bGliLm8gZ3pyZWFkLm8gZ3p3cml0ZS5vIFwKKyAgICAgICB1bmNvbXByLm8gZGVmbGF0ZS5vIHRyZWVzLm8genV0aWwubyBpbmZsYXRlLm8gaW5mYmFjay5vIGluZnRyZWVzLm8gaW5mZmFzdC5vCisKK1RFU1RfT0JKUyA9IGV4YW1wbGUubyBtaW5pZ3ppcC5vCisKK2FsbDogZXhhbXBsZS5leGUgbWluaWd6aXAuZXhlCisKK3Rlc3Q6IGFsbAorCS4vZXhhbXBsZQorCWVjaG8gaGVsbG8gd29ybGQgfCAuXG1pbmlnemlwIHwgLlxtaW5pZ3ppcCAtZAorCislLm8gOiAlLmMKKwkkKENDKSAkKENGTEFHUykgLWMgJDwgLW8gJEAKKworemxpYi5hOiAkKE9CSlMpCisJJChBUikgJEAgJChPQkpTKQorCislLmV4ZSA6ICUubyAkKExJQlMpCisJJChMRCkgJEAgJDwgJChMRExJQlMpCisKKworLlBIT05ZIDogY2xlYW4KKworY2xlYW46CisJJChSTSkgKi5kCisJJChSTSkgKi5vCisJJChSTSkgKi5leGUKKwkkKFJNKSB6bGliLmEKKwkkKFJNKSBmb28uZ3oKKworREVQUyA6PSAkKHdpbGRjYXJkICouZCkKK2lmbmVxICgkKERFUFMpLCkKK2luY2x1ZGUgJChERVBTKQorZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9tc2Rvcy9NYWtlZmlsZS5tc2MgYi9zcmMvbXNkb3MvTWFrZWZpbGUubXNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlODM3ODYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbXNkb3MvTWFrZWZpbGUubXNjCkBAIC0wLDAgKzEsMTEyIEBACisjIE1ha2VmaWxlIGZvciB6bGliCisjIE1pY3Jvc29mdCBDIDUuMSBvciBsYXRlcgorIyBMYXN0IHVwZGF0ZWQ6IDE5LU1hci0yMDAzCisKKyMgVG8gdXNlLCBkbyAibWFrZSBtYWtlZmlsZS5tc2MiCisjIFRvIGNvbXBpbGUgaW4gc21hbGwgbW9kZWwsIHNldCBiZWxvdzogTU9ERUw9UworCisjIElmIHlvdSB3aXNoIHRvIHJlZHVjZSB0aGUgbWVtb3J5IHJlcXVpcmVtZW50cyAoZGVmYXVsdCAyNTZLIGZvciBiaWcKKyMgb2JqZWN0cyBwbHVzIGEgZmV3IEspLCB5b3UgY2FuIGFkZCB0byB0aGUgTE9DIG1hY3JvIGJlbG93OgorIyAgIC1ETUFYX01FTV9MRVZFTD03IC1ETUFYX1dCSVRTPTE0CisjIFNlZSB6Y29uZi5oIGZvciBkZXRhaWxzIGFib3V0IHRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzLgorCisjIC0tLS0tLS0tLS0tLS0gTWljcm9zb2Z0IEMgNS4xIGFuZCBsYXRlciAtLS0tLS0tLS0tLS0tCisKKyMgICAgT3B0aW9uYWwgbm9uc3RhbmRhcmQgcHJlcHJvY2Vzc29yIGZsYWdzIChlLmcuIC1ETUFYX01FTV9MRVZFTD03KQorIyAgICBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIGVudmlyb25tZW50IHZpYSAic2V0IExPQ0FMX1pMSUI9LURGT08iIG9yIGFkZGVkCisjICAgIHRvIHRoZSBkZWNsYXJhdGlvbiBvZiBMT0MgaGVyZToKK0xPQyA9ICQoTE9DQUxfWkxJQikKKworIyBUeXBlIGZvciBDUFUgcmVxdWlyZWQ6IDA6IDgwODYsIDE6IDgwMTg2LCAyOiA4MDI4NiwgMzogODAzODYsIGV0Yy4KK0NQVV9UWVAgPSAwCisKKyMgTWVtb3J5IG1vZGVsOiBvbmUgb2YgUywgTSwgQywgTCAoc21hbGwsIG1lZGl1bSwgY29tcGFjdCwgbGFyZ2UpCitNT0RFTD1MCisKK0NDPWNsCitDRkxBR1M9LW5vbG9nbyAtQSQoTU9ERUwpIC1HJChDUFVfVFlQKSAtVzMgLU9haXQgLUdzICQoTE9DKQorIy1PeCBnZW5lcmF0ZXMgYmFkIGNvZGUgd2l0aCBNU0MgNS4xCitMSUJfQ0ZMQUdTPS1abCAkKENGTEFHUykKKworTEQ9bGluaworTERGTEFHUz0vbm9pL2Uvc3Q6MHgxNTAwL25vZS9mYXJjYWxsL3BhY2tjb2RlCisjICIvZmFyY2FsbC9wYWNrY29kZSIgYXJlIG9ubHkgdXNlZnVsIGZvciBgbGFyZ2UgY29kZScgbWVtb3J5IG1vZGVscworIyBidXQgc2hvdWxkIGJlIGEgIm5vLW9wIiBmb3Igc21hbGwgY29kZSBtb2RlbHMuCisKKworIyB2YXJpYWJsZXMKK1pMSUJfTElCID0gemxpYl8kKE1PREVMKS5saWIKKworT0JKMSA9IGFkbGVyMzIub2JqIGNvbXByZXNzLm9iaiBjcmMzMi5vYmogZGVmbGF0ZS5vYmogZ3pjbG9zZS5vYmogZ3psaWIub2JqIGd6cmVhZC5vYmoKK09CSjIgPSBnendyaXRlLm9iaiBpbmZiYWNrLm9iaiBpbmZmYXN0Lm9iaiBpbmZsYXRlLm9iaiBpbmZ0cmVlcy5vYmogdHJlZXMub2JqIHVuY29tcHIub2JqIHp1dGlsLm9iagorCisKKyMgdGFyZ2V0cworYWxsOiAgJChaTElCX0xJQikgZXhhbXBsZS5leGUgbWluaWd6aXAuZXhlCisKKy5jLm9iajoKKwkkKENDKSAtYyAkKExJQl9DRkxBR1MpICQqLmMKKworYWRsZXIzMi5vYmo6IGFkbGVyMzIuYyB6bGliLmggemNvbmYuaAorCitjb21wcmVzcy5vYmo6IGNvbXByZXNzLmMgemxpYi5oIHpjb25mLmgKKworY3JjMzIub2JqOiBjcmMzMi5jIHpsaWIuaCB6Y29uZi5oIGNyYzMyLmgKKworZGVmbGF0ZS5vYmo6IGRlZmxhdGUuYyBkZWZsYXRlLmggenV0aWwuaCB6bGliLmggemNvbmYuaAorCitnemNsb3NlLm9iajogZ3pjbG9zZS5jIHpsaWIuaCB6Y29uZi5oIGd6Z3V0cy5oCisKK2d6bGliLm9iajogZ3psaWIuYyB6bGliLmggemNvbmYuaCBnemd1dHMuaAorCitnenJlYWQub2JqOiBnenJlYWQuYyB6bGliLmggemNvbmYuaCBnemd1dHMuaAorCitnendyaXRlLm9iajogZ3p3cml0ZS5jIHpsaWIuaCB6Y29uZi5oIGd6Z3V0cy5oCisKK2luZmJhY2sub2JqOiBpbmZiYWNrLmMgenV0aWwuaCB6bGliLmggemNvbmYuaCBpbmZ0cmVlcy5oIGluZmxhdGUuaCBcCisgaW5mZmFzdC5oIGluZmZpeGVkLmgKKworaW5mZmFzdC5vYmo6IGluZmZhc3QuYyB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oIGluZnRyZWVzLmggaW5mbGF0ZS5oIFwKKyBpbmZmYXN0LmgKKworaW5mbGF0ZS5vYmo6IGluZmxhdGUuYyB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oIGluZnRyZWVzLmggaW5mbGF0ZS5oIFwKKyBpbmZmYXN0LmggaW5mZml4ZWQuaAorCitpbmZ0cmVlcy5vYmo6IGluZnRyZWVzLmMgenV0aWwuaCB6bGliLmggemNvbmYuaCBpbmZ0cmVlcy5oCisKK3RyZWVzLm9iajogdHJlZXMuYyB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oIGRlZmxhdGUuaCB0cmVlcy5oCisKK3VuY29tcHIub2JqOiB1bmNvbXByLmMgemxpYi5oIHpjb25mLmgKKworenV0aWwub2JqOiB6dXRpbC5jIHp1dGlsLmggemxpYi5oIHpjb25mLmgKKworZXhhbXBsZS5vYmo6IHRlc3QvZXhhbXBsZS5jIHpsaWIuaCB6Y29uZi5oCisJJChDQykgLWMgJChDRkxBR1MpICQqLmMKKworbWluaWd6aXAub2JqOiB0ZXN0L21pbmlnemlwLmMgemxpYi5oIHpjb25mLmgKKwkkKENDKSAtYyAkKENGTEFHUykgJCouYworCisKKyMgdGhlIGNvbW1hbmQgbGluZSBpcyBjdXQgdG8gZml0IGluIHRoZSBNUy1ET1MgMTI4IGJ5dGUgbGltaXQ6CiskKFpMSUJfTElCKTogJChPQkoxKSAkKE9CSjIpCisJaWYgZXhpc3QgJChaTElCX0xJQikgZGVsICQoWkxJQl9MSUIpCisJbGliICQoWkxJQl9MSUIpICQoT0JKMSk7CisJbGliICQoWkxJQl9MSUIpICQoT0JKMik7CisKK2V4YW1wbGUuZXhlOiBleGFtcGxlLm9iaiAkKFpMSUJfTElCKQorCSQoTEQpICQoTERGTEFHUykgZXhhbXBsZS5vYmosLCwkKFpMSUJfTElCKTsKKworbWluaWd6aXAuZXhlOiBtaW5pZ3ppcC5vYmogJChaTElCX0xJQikKKwkkKExEKSAkKExERkxBR1MpIG1pbmlnemlwLm9iaiwsLCQoWkxJQl9MSUIpOworCit0ZXN0OiBleGFtcGxlLmV4ZSBtaW5pZ3ppcC5leGUKKwlleGFtcGxlCisJZWNobyBoZWxsbyB3b3JsZCB8IG1pbmlnemlwIHwgbWluaWd6aXAgLWQKKworY2xlYW46CisJLWRlbCAqLm9iagorCS1kZWwgKi5saWIKKwktZGVsICouZXhlCisJLWRlbCAqLm1hcAorCS1kZWwgemxpYl8qLmJhaworCS1kZWwgZm9vLmd6CmRpZmYgLS1naXQgYS9zcmMvbXNkb3MvTWFrZWZpbGUudGMgYi9zcmMvbXNkb3MvTWFrZWZpbGUudGMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFlYzgyYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tc2Rvcy9NYWtlZmlsZS50YwpAQCAtMCwwICsxLDEwMCBAQAorIyBNYWtlZmlsZSBmb3IgemxpYgorIyBUdXJibyBDIDIuMDEsIFR1cmJvIEMrKyAxLjAxCisjIExhc3QgdXBkYXRlZDogMTUtTWFyLTIwMDMKKworIyBUbyB1c2UsIGRvICJtYWtlIC1mbWFrZWZpbGUudGMiCisjIFRvIGNvbXBpbGUgaW4gc21hbGwgbW9kZWwsIHNldCBiZWxvdzogTU9ERUw9cworCisjIFdBUk5JTkc6IHRoZSBzbWFsbCBtb2RlbCBpcyBzdXBwb3J0ZWQgYnV0IG9ubHkgZm9yIHNtYWxsIHZhbHVlcyBvZgorIyBNQVhfV0JJVFMgYW5kIE1BWF9NRU1fTEVWRUwuIEZvciBleGFtcGxlOgorIyAgICAtRE1BWF9XQklUUz0xMSAtRE1BWF9NRU1fTEVWRUw9MworIyBJZiB5b3Ugd2lzaCB0byByZWR1Y2UgdGhlIG1lbW9yeSByZXF1aXJlbWVudHMgKGRlZmF1bHQgMjU2SyBmb3IgYmlnCisjIG9iamVjdHMgcGx1cyBhIGZldyBLKSwgeW91IGNhbiBhZGQgdG8gQ0ZMQUdTIGJlbG93OgorIyAgIC1ETUFYX01FTV9MRVZFTD03IC1ETUFYX1dCSVRTPTE0CisjIFNlZSB6Y29uZi5oIGZvciBkZXRhaWxzIGFib3V0IHRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzLgorCisjIC0tLS0tLS0tLS0tLSBUdXJibyBDIDIuMDEsIFR1cmJvIEMrKyAxLjAxIC0tLS0tLS0tLS0tLQorTU9ERUw9bAorQ0M9dGNjCitMRD10Y2MKK0FSPXRsaWIKKyMgQ0ZMQUdTPS1PMiAtRyAtWiAtbSQoTU9ERUwpIC1ETUFYX1dCSVRTPTExIC1ETUFYX01FTV9MRVZFTD0zCitDRkxBR1M9LU8yIC1HIC1aIC1tJChNT0RFTCkKK0xERkxBR1M9LW0kKE1PREVMKSAtZi0KKworCisjIHZhcmlhYmxlcworWkxJQl9MSUIgPSB6bGliXyQoTU9ERUwpLmxpYgorCitPQkoxID0gYWRsZXIzMi5vYmogY29tcHJlc3Mub2JqIGNyYzMyLm9iaiBkZWZsYXRlLm9iaiBnemNsb3NlLm9iaiBnemxpYi5vYmogZ3pyZWFkLm9iagorT0JKMiA9IGd6d3JpdGUub2JqIGluZmJhY2sub2JqIGluZmZhc3Qub2JqIGluZmxhdGUub2JqIGluZnRyZWVzLm9iaiB0cmVlcy5vYmogdW5jb21wci5vYmogenV0aWwub2JqCitPQkpQMSA9ICthZGxlcjMyLm9iaitjb21wcmVzcy5vYmorY3JjMzIub2JqK2RlZmxhdGUub2JqK2d6Y2xvc2Uub2JqK2d6bGliLm9iaitnenJlYWQub2JqCitPQkpQMiA9ICtnendyaXRlLm9iaitpbmZiYWNrLm9iaitpbmZmYXN0Lm9iaitpbmZsYXRlLm9iaitpbmZ0cmVlcy5vYmordHJlZXMub2JqK3VuY29tcHIub2JqK3p1dGlsLm9iagorCisKKyMgdGFyZ2V0cworYWxsOiAkKFpMSUJfTElCKSBleGFtcGxlLmV4ZSBtaW5pZ3ppcC5leGUKKworLmMub2JqOgorCSQoQ0MpIC1jICQoQ0ZMQUdTKSAkKi5jCisKK2FkbGVyMzIub2JqOiBhZGxlcjMyLmMgemxpYi5oIHpjb25mLmgKKworY29tcHJlc3Mub2JqOiBjb21wcmVzcy5jIHpsaWIuaCB6Y29uZi5oCisKK2NyYzMyLm9iajogY3JjMzIuYyB6bGliLmggemNvbmYuaCBjcmMzMi5oCisKK2RlZmxhdGUub2JqOiBkZWZsYXRlLmMgZGVmbGF0ZS5oIHp1dGlsLmggemxpYi5oIHpjb25mLmgKKworZ3pjbG9zZS5vYmo6IGd6Y2xvc2UuYyB6bGliLmggemNvbmYuaCBnemd1dHMuaAorCitnemxpYi5vYmo6IGd6bGliLmMgemxpYi5oIHpjb25mLmggZ3pndXRzLmgKKworZ3pyZWFkLm9iajogZ3pyZWFkLmMgemxpYi5oIHpjb25mLmggZ3pndXRzLmgKKworZ3p3cml0ZS5vYmo6IGd6d3JpdGUuYyB6bGliLmggemNvbmYuaCBnemd1dHMuaAorCitpbmZiYWNrLm9iajogaW5mYmFjay5jIHp1dGlsLmggemxpYi5oIHpjb25mLmggaW5mdHJlZXMuaCBpbmZsYXRlLmggXAorIGluZmZhc3QuaCBpbmZmaXhlZC5oCisKK2luZmZhc3Qub2JqOiBpbmZmYXN0LmMgenV0aWwuaCB6bGliLmggemNvbmYuaCBpbmZ0cmVlcy5oIGluZmxhdGUuaCBcCisgaW5mZmFzdC5oCisKK2luZmxhdGUub2JqOiBpbmZsYXRlLmMgenV0aWwuaCB6bGliLmggemNvbmYuaCBpbmZ0cmVlcy5oIGluZmxhdGUuaCBcCisgaW5mZmFzdC5oIGluZmZpeGVkLmgKKworaW5mdHJlZXMub2JqOiBpbmZ0cmVlcy5jIHp1dGlsLmggemxpYi5oIHpjb25mLmggaW5mdHJlZXMuaAorCit0cmVlcy5vYmo6IHRyZWVzLmMgenV0aWwuaCB6bGliLmggemNvbmYuaCBkZWZsYXRlLmggdHJlZXMuaAorCit1bmNvbXByLm9iajogdW5jb21wci5jIHpsaWIuaCB6Y29uZi5oCisKK3p1dGlsLm9iajogenV0aWwuYyB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oCisKK2V4YW1wbGUub2JqOiB0ZXN0L2V4YW1wbGUuYyB6bGliLmggemNvbmYuaAorCittaW5pZ3ppcC5vYmo6IHRlc3QvbWluaWd6aXAuYyB6bGliLmggemNvbmYuaAorCisKKyMgdGhlIGNvbW1hbmQgbGluZSBpcyBjdXQgdG8gZml0IGluIHRoZSBNUy1ET1MgMTI4IGJ5dGUgbGltaXQ6CiskKFpMSUJfTElCKTogJChPQkoxKSAkKE9CSjIpCisJLWRlbCAkKFpMSUJfTElCKQorCSQoQVIpICQoWkxJQl9MSUIpICQoT0JKUDEpCisJJChBUikgJChaTElCX0xJQikgJChPQkpQMikKKworZXhhbXBsZS5leGU6IGV4YW1wbGUub2JqICQoWkxJQl9MSUIpCisJJChMRCkgJChMREZMQUdTKSBleGFtcGxlLm9iaiAkKFpMSUJfTElCKQorCittaW5pZ3ppcC5leGU6IG1pbmlnemlwLm9iaiAkKFpMSUJfTElCKQorCSQoTEQpICQoTERGTEFHUykgbWluaWd6aXAub2JqICQoWkxJQl9MSUIpCisKK3Rlc3Q6IGV4YW1wbGUuZXhlIG1pbmlnemlwLmV4ZQorCWV4YW1wbGUKKwllY2hvIGhlbGxvIHdvcmxkIHwgbWluaWd6aXAgfCBtaW5pZ3ppcCAtZAorCitjbGVhbjoKKwktZGVsICoub2JqCisJLWRlbCAqLmxpYgorCS1kZWwgKi5leGUKKwktZGVsIHpsaWJfKi5iYWsKKwktZGVsIGZvby5negpkaWZmIC0tZ2l0IGEvc3JjL25pbnRlbmRvZHMvTWFrZWZpbGUgYi9zcmMvbmludGVuZG9kcy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTMzN2QwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL25pbnRlbmRvZHMvTWFrZWZpbGUKQEAgLTAsMCArMSwxMjYgQEAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy5TVUZGSVhFUzoKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworaWZlcSAoJChzdHJpcCAkKERFVktJVEFSTSkpLCkKKyQoZXJyb3IgIlBsZWFzZSBzZXQgREVWS0lUQVJNIGluIHlvdXIgZW52aXJvbm1lbnQuIGV4cG9ydCBERVZLSVRBUk09PHBhdGggdG8+ZGV2a2l0QVJNIikKK2VuZGlmCisKK2luY2x1ZGUgJChERVZLSVRBUk0pL2RzX3J1bGVzCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVEFSR0VUIGlzIHRoZSBuYW1lIG9mIHRoZSBvdXRwdXQKKyMgQlVJTEQgaXMgdGhlIGRpcmVjdG9yeSB3aGVyZSBvYmplY3QgZmlsZXMgJiBpbnRlcm1lZGlhdGUgZmlsZXMgd2lsbCBiZSBwbGFjZWQKKyMgU09VUkNFUyBpcyBhIGxpc3Qgb2YgZGlyZWN0b3JpZXMgY29udGFpbmluZyBzb3VyY2UgY29kZQorIyBEQVRBIGlzIGEgbGlzdCBvZiBkaXJlY3RvcmllcyBjb250YWluaW5nIGRhdGEgZmlsZXMKKyMgSU5DTFVERVMgaXMgYSBsaXN0IG9mIGRpcmVjdG9yaWVzIGNvbnRhaW5pbmcgaGVhZGVyIGZpbGVzCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUQVJHRVQJCTo9CSQoc2hlbGwgYmFzZW5hbWUgJChDVVJESVIpKQorQlVJTEQJCTo9CWJ1aWxkCitTT1VSQ0VTCQk6PQkuLi8uLi8KK0RBVEEJCTo9CWRhdGEKK0lOQ0xVREVTCTo9CWluY2x1ZGUKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBvcHRpb25zIGZvciBjb2RlIGdlbmVyYXRpb24KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FSQ0gJOj0JLW10aHVtYiAtbXRodW1iLWludGVyd29yaworCitDRkxBR1MJOj0JLVdhbGwgLU8yXAorCQktbWFyY2g9YXJtdjV0ZSAtbXR1bmU9YXJtOTQ2ZS1zIFwKKwkJLWZvbWl0LWZyYW1lLXBvaW50ZXIgLWZmYXN0LW1hdGggXAorCQkkKEFSQ0gpCisKK0NGTEFHUwkrPQkkKElOQ0xVREUpIC1EQVJNOQorQ1hYRkxBR1MJOj0gJChDRkxBR1MpIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMKKworQVNGTEFHUwk6PQkkKEFSQ0gpIC1tYXJjaD1hcm12NXRlIC1tdHVuZT1hcm05NDZlLXMKK0xERkxBR1MJPQktc3BlY3M9ZHNfYXJtOS5zcGVjcyAtZyAkKEFSQ0gpIC1XbCwtTWFwLCQobm90ZGlyICQqLm1hcCkKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBsaXN0IG9mIGRpcmVjdG9yaWVzIGNvbnRhaW5pbmcgbGlicmFyaWVzLCB0aGlzIG11c3QgYmUgdGhlIHRvcCBsZXZlbCBjb250YWluaW5nCisjIGluY2x1ZGUgYW5kIGxpYgorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTElCRElSUwk6PQkkKExJQk5EUykKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBubyByZWFsIG5lZWQgdG8gZWRpdCBhbnl0aGluZyBwYXN0IHRoaXMgcG9pbnQgdW5sZXNzIHlvdSBuZWVkIHRvIGFkZCBhZGRpdGlvbmFsCisjIHJ1bGVzIGZvciBkaWZmZXJlbnQgZmlsZSBleHRlbnNpb25zCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitpZm5lcSAoJChCVUlMRCksJChub3RkaXIgJChDVVJESVIpKSkKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZXhwb3J0IE9VVFBVVAk6PQkkKENVUkRJUikvbGliL2xpYnouYQorCitleHBvcnQgVlBBVEgJOj0JJChmb3JlYWNoIGRpciwkKFNPVVJDRVMpLCQoQ1VSRElSKS8kKGRpcikpIFwKKwkJCSQoZm9yZWFjaCBkaXIsJChEQVRBKSwkKENVUkRJUikvJChkaXIpKQorCitleHBvcnQgREVQU0RJUgk6PQkkKENVUkRJUikvJChCVUlMRCkKKworQ0ZJTEVTCQk6PQkkKGZvcmVhY2ggZGlyLCQoU09VUkNFUyksJChub3RkaXIgJCh3aWxkY2FyZCAkKGRpcikvKi5jKSkpCitDUFBGSUxFUwk6PQkkKGZvcmVhY2ggZGlyLCQoU09VUkNFUyksJChub3RkaXIgJCh3aWxkY2FyZCAkKGRpcikvKi5jcHApKSkKK1NGSUxFUwkJOj0JJChmb3JlYWNoIGRpciwkKFNPVVJDRVMpLCQobm90ZGlyICQod2lsZGNhcmQgJChkaXIpLyoucykpKQorQklORklMRVMJOj0JJChmb3JlYWNoIGRpciwkKERBVEEpLCQobm90ZGlyICQod2lsZGNhcmQgJChkaXIpLyouKikpKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIHVzZSBDWFggZm9yIGxpbmtpbmcgQysrIHByb2plY3RzLCBDQyBmb3Igc3RhbmRhcmQgQworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraWZlcSAoJChzdHJpcCAkKENQUEZJTEVTKSksKQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCWV4cG9ydCBMRAk6PQkkKENDKQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZWxzZQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCWV4cG9ydCBMRAk6PQkkKENYWCkKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2VuZGlmCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2V4cG9ydCBPRklMRVMJOj0JJChhZGRzdWZmaXggLm8sJChCSU5GSUxFUykpIFwKKwkJCSQoQ1BQRklMRVM6LmNwcD0ubykgJChDRklMRVM6LmM9Lm8pICQoU0ZJTEVTOi5zPS5vKQorCitleHBvcnQgSU5DTFVERQk6PQkkKGZvcmVhY2ggZGlyLCQoSU5DTFVERVMpLC1JJChDVVJESVIpLyQoZGlyKSkgXAorCQkJJChmb3JlYWNoIGRpciwkKExJQkRJUlMpLC1JJChkaXIpL2luY2x1ZGUpIFwKKwkJCS1JJChDVVJESVIpLyQoQlVJTEQpCisKKy5QSE9OWTogJChCVUlMRCkgY2xlYW4gYWxsCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2FsbDogJChCVUlMRCkKKwlAWyAtZCAkQCBdIHx8IG1rZGlyIC1wIGluY2x1ZGUKKwlAY3AgLi4vLi4vKi5oIGluY2x1ZGUKKworbGliOgorCUBbIC1kICRAIF0gfHwgbWtkaXIgLXAgJEAKKwkKKyQoQlVJTEQpOiBsaWIKKwlAWyAtZCAkQCBdIHx8IG1rZGlyIC1wICRACisJQCQoTUFLRSkgLS1uby1wcmludC1kaXJlY3RvcnkgLUMgJChCVUlMRCkgLWYgJChDVVJESVIpL01ha2VmaWxlCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2NsZWFuOgorCUBlY2hvIGNsZWFuIC4uLgorCUBybSAtZnIgJChCVUlMRCkgbGliCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Vsc2UKKworREVQRU5EUwk6PQkkKE9GSUxFUzoubz0uZCkKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBtYWluIHRhcmdldHMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQoT1VUUFVUKQk6CSQoT0ZJTEVTKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCislLmJpbi5vCToJJS5iaW4KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlAZWNobyAkKG5vdGRpciAkPCkKKwlAJChiaW4ybykKKworCistaW5jbHVkZSAkKERFUEVORFMpCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2VuZGlmCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9zcmMvbmludGVuZG9kcy9SRUFETUUgYi9zcmMvbmludGVuZG9kcy9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE3YTM3ZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9uaW50ZW5kb2RzL1JFQURNRQpAQCAtMCwwICsxLDUgQEAKK1RoaXMgTWFrZWZpbGUgcmVxdWlyZXMgZGV2a2l0QVJNIChodHRwOi8vd3d3LmRldmtpdHByby5vcmcvY2F0ZWdvcnkvZGV2a2l0YXJtLykgYW5kIHdvcmtzIGluc2lkZSAiY29udHJpYi9uZHMiLiBJdCBpcyBiYXNlZCBvbiBhIGRldmtpdEFSTSB0ZW1wbGF0ZS4KKworRWR1YXJkbyBDb3N0YSA8ZWR1YXJkby5tLmNvc3RhQGdtYWlsLmNvbT4KK0phbnVhcnkgMywgMjAwOQorCmRpZmYgLS1naXQgYS9zcmMvb2xkL01ha2VmaWxlLmVteCBiL3NyYy9vbGQvTWFrZWZpbGUuZW14Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxMmIwMzcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvb2xkL01ha2VmaWxlLmVteApAQCAtMCwwICsxLDY5IEBACisjIE1ha2VmaWxlIGZvciB6bGliLiAgTW9kaWZpZWQgZm9yIGVteC9yc3hudCBieSBDaHIuIFNwaWVsZXIsIDYvMTYvOTguCisjIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEplYW4tbG91cCBHYWlsbHkuCisjIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKKworIyBUbyBjb21waWxlLCBvciB0byBjb21waWxlIGFuZCB0ZXN0LCB0eXBlOgorIworIyAgIG1ha2UgLWZtYWtlZmlsZS5lbXg7ICBtYWtlIHRlc3QgLWZtYWtlZmlsZS5lbXgKKyMKKworQ0M9Z2NjIC1ad2luMzIKKworI0NGTEFHUz0tTU1EIC1PCisjQ0ZMQUdTPS1PIC1ETUFYX1dCSVRTPTE0IC1ETUFYX01FTV9MRVZFTD03CisjQ0ZMQUdTPS1NTUQgLWcgLURaTElCX0RFQlVHCitDRkxBR1M9LU1NRCAtTzMgJChCVVRUKSAtV2FsbCAtV3dyaXRlLXN0cmluZ3MgLVdwb2ludGVyLWFyaXRoIC1XY29udmVyc2lvbiBcCisgICAgICAgICAgICAgLVdzdHJpY3QtcHJvdG90eXBlcyAtV21pc3NpbmctcHJvdG90eXBlcworCisjIElmIGNwLmV4ZSBpcyBhdmFpbGFibGUsIHJlcGxhY2UgImNvcHkgL1kiIHdpdGggImNwIC1mcCIgLgorQ1A9Y29weSAvWQorIyBJZiBnbnUgaW5zdGFsbC5leGUgaXMgYXZhaWxhYmxlLCByZXBsYWNlICQoQ1ApIHdpdGggZ2luc3RhbGwuCitJTlNUQUxMPSQoQ1ApCisjIFRoZSBkZWZhdWx0IHZhbHVlIG9mIFJNIGlzICJybSAtZi4iICBJZiAicm0uZXhlIiBpcyBmb3VuZCwgY29tbWVudCBvdXQ6CitSTT1kZWwKK0xETElCUz0tTC4gLWx6bGliCitMRD0kKENDKSAtcyAtbworTERTSEFSRUQ9JChDQykKKworSU5DTD16bGliLmggemNvbmYuaAorTElCUz16bGliLmEKKworQVI9YXIgcmNzCisKK3ByZWZpeD0vdXNyL2xvY2FsCitleGVjX3ByZWZpeCA9ICQocHJlZml4KQorCitPQkpTID0gYWRsZXIzMi5vIGNvbXByZXNzLm8gY3JjMzIubyBkZWZsYXRlLm8gZ3pjbG9zZS5vIGd6bGliLm8gZ3pyZWFkLm8gXAorICAgICAgIGd6d3JpdGUubyBpbmZiYWNrLm8gaW5mZmFzdC5vIGluZmxhdGUubyBpbmZ0cmVlcy5vIHRyZWVzLm8gdW5jb21wci5vIHp1dGlsLm8KKworVEVTVF9PQkpTID0gZXhhbXBsZS5vIG1pbmlnemlwLm8KKworYWxsOiBleGFtcGxlLmV4ZSBtaW5pZ3ppcC5leGUKKwordGVzdDogYWxsCisJLi9leGFtcGxlCisJZWNobyBoZWxsbyB3b3JsZCB8IC5cbWluaWd6aXAgfCAuXG1pbmlnemlwIC1kCisKKyUubyA6ICUuYworCSQoQ0MpICQoQ0ZMQUdTKSAtYyAkPCAtbyAkQAorCit6bGliLmE6ICQoT0JKUykKKwkkKEFSKSAkQCAkKE9CSlMpCisKKyUuZXhlIDogJS5vICQoTElCUykKKwkkKExEKSAkQCAkPCAkKExETElCUykKKworCisuUEhPTlkgOiBjbGVhbgorCitjbGVhbjoKKwkkKFJNKSAqLmQKKwkkKFJNKSAqLm8KKwkkKFJNKSAqLmV4ZQorCSQoUk0pIHpsaWIuYQorCSQoUk0pIGZvby5negorCitERVBTIDo9ICQod2lsZGNhcmQgKi5kKQoraWZuZXEgKCQoREVQUyksKQoraW5jbHVkZSAkKERFUFMpCitlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL29sZC9NYWtlZmlsZS5yaXNjb3MgYi9zcmMvb2xkL01ha2VmaWxlLnJpc2NvcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2UyOWQzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL29sZC9NYWtlZmlsZS5yaXNjb3MKQEAgLTAsMCArMSwxNTEgQEAKKyMgUHJvamVjdDogICB6bGliXzFfMDMKKyMgUGF0Y2hlZCBmb3IgemxpYiAxLjEuMiByd0BzaGFkb3cub3JnLnVrIDE5OTgwNDMwCisjIHRlc3Qgd29ya3Mgb3V0LW9mLXRoZS1ib3gsIGluc3RhbGxzIGBzb21ld2hlcmUnIG9uIGRlbWFuZAorCisjIFRvb2xmbGFnczoKK0NDZmxhZ3MgPSAtYyAtZGVwZW5kICFEZXBlbmQgLUlDOiAtZyAtdGhyb3diYWNrICAtRFJJU0NPUyAgLWZhaAorQysrZmxhZ3MgPSAtYyAtZGVwZW5kICFEZXBlbmQgLUlDOiAtdGhyb3diYWNrCitMaW5rZmxhZ3MgPSAtYWlmIC1jKysgLW8gJEAKK09iakFzbWZsYWdzID0gLXRocm93YmFjayAtTm9DYWNoZSAtZGVwZW5kICFEZXBlbmQKK0NNSEdmbGFncyA9CitMaWJGaWxlZmxhZ3MgPSAtYyAtbCAtbyAkQAorU3F1ZWV6ZWZsYWdzID0gLW8gJEAKKworIyBjaGFuZ2UgdGhlIGxpbmUgYmVsb3cgdG8gd2hlcmUgX3lvdV8gd2FudCB0aGUgbGlicmFyeSBpbnN0YWxsZWQuCitsaWJkZXN0ID0gbGliOnpsaWIKKworIyBGaW5hbCB0YXJnZXRzOgorQC5saWI6ICAgQC5vLmFkbGVyMzIgQC5vLmNvbXByZXNzIEAuby5jcmMzMiBALm8uZGVmbGF0ZSBALm8uZ3ppbyBcCisgICAgICAgIEAuby5pbmZibG9jayBALm8uaW5mY29kZXMgQC5vLmluZmZhc3QgQC5vLmluZmxhdGUgQC5vLmluZnRyZWVzIEAuby5pbmZ1dGlsIEAuby50cmVlcyBcCisgICAgICAgIEAuby51bmNvbXByIEAuby56dXRpbAorICAgICAgICBMaWJGaWxlICQoTGliRmlsZWZsYWdzKSBALm8uYWRsZXIzMiBALm8uY29tcHJlc3MgQC5vLmNyYzMyIEAuby5kZWZsYXRlIFwKKyAgICAgICAgQC5vLmd6aW8gQC5vLmluZmJsb2NrIEAuby5pbmZjb2RlcyBALm8uaW5mZmFzdCBALm8uaW5mbGF0ZSBALm8uaW5mdHJlZXMgQC5vLmluZnV0aWwgXAorICAgICAgICBALm8udHJlZXMgQC5vLnVuY29tcHIgQC5vLnp1dGlsCit0ZXN0OiAgIEAubWluaWd6aXAgQC5leGFtcGxlIEAubGliCisJQGNvcHkgQC5saWIgQC5saWJjICBBfkN+REZ+TH5OflB+UX5SU35UVgorCUBlY2hvIHJ1bm5pbmcgdGVzdHM6IGhhbmcgb24uCisJQC9ALm1pbmlnemlwIC1mIC05IGxpYmMKKwlAL0AubWluaWd6aXAgLWQgbGliYy1negorCUAvQC5taW5pZ3ppcCAtZiAtMSBsaWJjCisJQC9ALm1pbmlnemlwIC1kIGxpYmMtZ3oKKwlAL0AubWluaWd6aXAgLWggLTkgbGliYworCUAvQC5taW5pZ3ppcCAtZCBsaWJjLWd6CisJQC9ALm1pbmlnemlwIC1oIC0xIGxpYmMKKwlAL0AubWluaWd6aXAgLWQgbGliYy1negorCUAvQC5taW5pZ3ppcCAtOSBsaWJjCisJQC9ALm1pbmlnemlwIC1kIGxpYmMtZ3oKKwlAL0AubWluaWd6aXAgLTEgbGliYworCUAvQC5taW5pZ3ppcCAtZCBsaWJjLWd6CisJQGRpZmYgQC5saWIgQC5saWJjCisJQGVjaG8gdGhhdCBzaG91bGQgaGF2ZSByZXBvcnRlZCAnQC5saWIgYW5kIEAubGliYyBpZGVudGljYWwnIGlmIHlvdSBoYXZlIGRpZmYuCisJQC9ALmV4YW1wbGUgQC5mcmVkIEAuZnJlZAorCUBlY2hvIHRoYXQgd2lsbCBoYXZlIGdpdmVuIGxvdHMgb2YgaGVsbG8hJ3MuCisKK0AubWluaWd6aXA6ICAgQC5vLm1pbmlnemlwIEAubGliIEM6by5TdHVicworICAgICAgICBMaW5rICQoTGlua2ZsYWdzKSBALm8ubWluaWd6aXAgQC5saWIgQzpvLlN0dWJzCitALmV4YW1wbGU6ICAgQC5vLmV4YW1wbGUgQC5saWIgQzpvLlN0dWJzCisgICAgICAgIExpbmsgJChMaW5rZmxhZ3MpIEAuby5leGFtcGxlIEAubGliIEM6by5TdHVicworCitpbnN0YWxsOiBALmxpYgorCWNkaXIgJChsaWJkZXN0KQorCWNkaXIgJChsaWJkZXN0KS5oCisJQGNvcHkgQC5oLnpsaWIgJChsaWJkZXN0KS5oLnpsaWIgQX5DfkRGfkx+Tn5QflF+UlN+VFYKKwlAY29weSBALmguemNvbmYgJChsaWJkZXN0KS5oLnpjb25mIEF+Q35ERn5Mfk5+UH5RflJTflRWCisJQGNvcHkgQC5saWIgJChsaWJkZXN0KS5saWIgIEF+Q35ERn5Mfk5+UH5RflJTflRWCisJQGVjaG8gb2theSwgaW5zdGFsbGVkIHpsaWIgaW4gJChsaWJkZXN0KQorCitjbGVhbjo7IHJlbW92ZSBALm1pbmlnemlwCisJcmVtb3ZlIEAuZXhhbXBsZQorCXJlbW92ZSBALmxpYmMKKwktd2lwZSBALm8uKiBGfnJ+Y1YKKwlyZW1vdmUgQC5mcmVkCisKKyMgVXNlci1lZGl0YWJsZSBkZXBlbmRlbmNpZXM6CisuYy5vOgorICAgICAgICBjYyAkKGNjZmxhZ3MpIC1vICRAICQ8CisKKyMgU3RhdGljIGRlcGVuZGVuY2llczoKKworIyBEeW5hbWljIGRlcGVuZGVuY2llczoKK28uZXhhbXBsZToJYy5leGFtcGxlCitvLmV4YW1wbGU6CWguemxpYgorby5leGFtcGxlOgloLnpjb25mCitvLm1pbmlnemlwOgljLm1pbmlnemlwCitvLm1pbmlnemlwOgloLnpsaWIKK28ubWluaWd6aXA6CWguemNvbmYKK28uYWRsZXIzMjoJYy5hZGxlcjMyCitvLmFkbGVyMzI6CWguemxpYgorby5hZGxlcjMyOgloLnpjb25mCitvLmNvbXByZXNzOgljLmNvbXByZXNzCitvLmNvbXByZXNzOgloLnpsaWIKK28uY29tcHJlc3M6CWguemNvbmYKK28uY3JjMzI6CWMuY3JjMzIKK28uY3JjMzI6CWguemxpYgorby5jcmMzMjoJaC56Y29uZgorby5kZWZsYXRlOgljLmRlZmxhdGUKK28uZGVmbGF0ZToJaC5kZWZsYXRlCitvLmRlZmxhdGU6CWguenV0aWwKK28uZGVmbGF0ZToJaC56bGliCitvLmRlZmxhdGU6CWguemNvbmYKK28uZ3ppbzoJYy5nemlvCitvLmd6aW86CWguenV0aWwKK28uZ3ppbzoJaC56bGliCitvLmd6aW86CWguemNvbmYKK28uaW5mYmxvY2s6CWMuaW5mYmxvY2sKK28uaW5mYmxvY2s6CWguenV0aWwKK28uaW5mYmxvY2s6CWguemxpYgorby5pbmZibG9jazoJaC56Y29uZgorby5pbmZibG9jazoJaC5pbmZibG9jaworby5pbmZibG9jazoJaC5pbmZ0cmVlcworby5pbmZibG9jazoJaC5pbmZjb2Rlcworby5pbmZibG9jazoJaC5pbmZ1dGlsCitvLmluZmNvZGVzOgljLmluZmNvZGVzCitvLmluZmNvZGVzOgloLnp1dGlsCitvLmluZmNvZGVzOgloLnpsaWIKK28uaW5mY29kZXM6CWguemNvbmYKK28uaW5mY29kZXM6CWguaW5mdHJlZXMKK28uaW5mY29kZXM6CWguaW5mYmxvY2sKK28uaW5mY29kZXM6CWguaW5mY29kZXMKK28uaW5mY29kZXM6CWguaW5mdXRpbAorby5pbmZjb2RlczoJaC5pbmZmYXN0CitvLmluZmZhc3Q6CWMuaW5mZmFzdAorby5pbmZmYXN0OgloLnp1dGlsCitvLmluZmZhc3Q6CWguemxpYgorby5pbmZmYXN0OgloLnpjb25mCitvLmluZmZhc3Q6CWguaW5mdHJlZXMKK28uaW5mZmFzdDoJaC5pbmZibG9jaworby5pbmZmYXN0OgloLmluZmNvZGVzCitvLmluZmZhc3Q6CWguaW5mdXRpbAorby5pbmZmYXN0OgloLmluZmZhc3QKK28uaW5mbGF0ZToJYy5pbmZsYXRlCitvLmluZmxhdGU6CWguenV0aWwKK28uaW5mbGF0ZToJaC56bGliCitvLmluZmxhdGU6CWguemNvbmYKK28uaW5mbGF0ZToJaC5pbmZibG9jaworby5pbmZ0cmVlczoJYy5pbmZ0cmVlcworby5pbmZ0cmVlczoJaC56dXRpbAorby5pbmZ0cmVlczoJaC56bGliCitvLmluZnRyZWVzOgloLnpjb25mCitvLmluZnRyZWVzOgloLmluZnRyZWVzCitvLmluZnRyZWVzOgloLmluZmZpeGVkCitvLmluZnV0aWw6CWMuaW5mdXRpbAorby5pbmZ1dGlsOgloLnp1dGlsCitvLmluZnV0aWw6CWguemxpYgorby5pbmZ1dGlsOgloLnpjb25mCitvLmluZnV0aWw6CWguaW5mYmxvY2sKK28uaW5mdXRpbDoJaC5pbmZ0cmVlcworby5pbmZ1dGlsOgloLmluZmNvZGVzCitvLmluZnV0aWw6CWguaW5mdXRpbAorby50cmVlczoJYy50cmVlcworby50cmVlczoJaC5kZWZsYXRlCitvLnRyZWVzOgloLnp1dGlsCitvLnRyZWVzOgloLnpsaWIKK28udHJlZXM6CWguemNvbmYKK28udHJlZXM6CWgudHJlZXMKK28udW5jb21wcjoJYy51bmNvbXByCitvLnVuY29tcHI6CWguemxpYgorby51bmNvbXByOgloLnpjb25mCitvLnp1dGlsOgljLnp1dGlsCitvLnp1dGlsOgloLnp1dGlsCitvLnp1dGlsOgloLnpsaWIKK28uenV0aWw6CWguemNvbmYKZGlmZiAtLWdpdCBhL3NyYy9vbGQvUkVBRE1FIGIvc3JjL29sZC9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAwYmYwNwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9vbGQvUkVBRE1FCkBAIC0wLDAgKzEsMyBAQAorVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgZmlsZXMgdGhhdCBoYXZlIG5vdCBiZWVuIHVwZGF0ZWQgZm9yIHpsaWIgMS4yLngKKworKFZvbHVudGVlcnMgYXJlIGVuY291cmFnZWQgdG8gaGVscCBjbGVhbiB0aGlzIHVwLiAgVGhhbmtzLikKZGlmZiAtLWdpdCBhL3NyYy9vbGQvZGVzY3JpcC5tbXMgYi9zcmMvb2xkL2Rlc2NyaXAubW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNjZkYTUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvb2xkL2Rlc2NyaXAubW1zCkBAIC0wLDAgKzEsNDggQEAKKyMgZGVzY3JpcC5tbXM6IE1NUyBkZXNjcmlwdGlvbiBmaWxlIGZvciBidWlsZGluZyB6bGliIG9uIFZNUworIyB3cml0dGVuIGJ5IE1hcnRpbiBQLkouIFppbnNlciA8bS56aW5zZXJAZ3NpLmRlPgorCitjY19kZWZzID0KK2NfZGViID0KKworLmlmZGVmIF9fREVDQ19fCitwcmVmID0gL3ByZWZpeD1hbGwKKy5lbmRpZgorCitPQkpTID0gYWRsZXIzMi5vYmosIGNvbXByZXNzLm9iaiwgY3JjMzIub2JqLCBnemlvLm9iaiwgdW5jb21wci5vYmosXAorICAgICAgIGRlZmxhdGUub2JqLCB0cmVlcy5vYmosIHp1dGlsLm9iaiwgaW5mbGF0ZS5vYmosIGluZmJsb2NrLm9iaixcCisgICAgICAgaW5mdHJlZXMub2JqLCBpbmZjb2Rlcy5vYmosIGluZnV0aWwub2JqLCBpbmZmYXN0Lm9iagorCitDRkxBR1M9ICQoQ19ERUIpICQoQ0NfREVGUykgJChQUkVGKQorCithbGwgOiBleGFtcGxlLmV4ZSBtaW5pZ3ppcC5leGUKKyAgICAgICAgQCB3cml0ZSBzeXMkb3V0cHV0ICIgRXhhbXBsZSBhcHBsaWNhdGlvbnMgYXZhaWxhYmxlIgorbGliei5vbGIgOiBsaWJ6Lm9sYigkKE9CSlMpKQorCUAgd3JpdGUgc3lzJG91dHB1dCAiIGxpYnogYXZhaWxhYmxlIgorCitleGFtcGxlLmV4ZSA6IGV4YW1wbGUub2JqIGxpYnoub2xiCisgICAgICAgICAgICAgIGxpbmsgZXhhbXBsZSxsaWJ6Lm9sYi9saWIKKworbWluaWd6aXAuZXhlIDogbWluaWd6aXAub2JqIGxpYnoub2xiCisgICAgICAgICAgICAgIGxpbmsgbWluaWd6aXAsbGliei5vbGIvbGliLHgxMXZtczp4dm1zdXRpbHMub2xiL2xpYgorCitjbGVhbiA6CisJZGVsZXRlICoub2JqOyosbGliei5vbGI7KgorCisKKyMgT3RoZXIgZGVwZW5kZW5jaWVzLgorYWRsZXIzMi5vYmogOiB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oCitjb21wcmVzcy5vYmogOiB6bGliLmggemNvbmYuaAorY3JjMzIub2JqIDogenV0aWwuaCB6bGliLmggemNvbmYuaAorZGVmbGF0ZS5vYmogOiBkZWZsYXRlLmggenV0aWwuaCB6bGliLmggemNvbmYuaAorZXhhbXBsZS5vYmogOiB6bGliLmggemNvbmYuaAorZ3ppby5vYmogOiB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oCitpbmZibG9jay5vYmogOiB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oIGluZmJsb2NrLmggaW5mdHJlZXMuaCBpbmZjb2Rlcy5oIGluZnV0aWwuaAoraW5mY29kZXMub2JqIDogenV0aWwuaCB6bGliLmggemNvbmYuaCBpbmZ0cmVlcy5oIGluZnV0aWwuaCBpbmZjb2Rlcy5oIGluZmZhc3QuaAoraW5mZmFzdC5vYmogOiB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oIGluZnRyZWVzLmggaW5mdXRpbC5oIGluZmZhc3QuaAoraW5mbGF0ZS5vYmogOiB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oIGluZmJsb2NrLmgKK2luZnRyZWVzLm9iaiA6IHp1dGlsLmggemxpYi5oIHpjb25mLmggaW5mdHJlZXMuaAoraW5mdXRpbC5vYmogOiB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oIGluZnRyZWVzLmggaW5mdXRpbC5oCittaW5pZ3ppcC5vYmogOiB6bGliLmggemNvbmYuaAordHJlZXMub2JqIDogZGVmbGF0ZS5oIHp1dGlsLmggemxpYi5oIHpjb25mLmgKK3VuY29tcHIub2JqIDogemxpYi5oIHpjb25mLmgKK3p1dGlsLm9iaiA6IHp1dGlsLmggemxpYi5oIHpjb25mLmgKZGlmZiAtLWdpdCBhL3NyYy9vbGQvb3MyL01ha2VmaWxlLm9zMiBiL3NyYy9vbGQvb3MyL01ha2VmaWxlLm9zMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjQyNmMwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL29sZC9vczIvTWFrZWZpbGUub3MyCkBAIC0wLDAgKzEsMTM2IEBACisjIE1ha2VmaWxlIGZvciB6bGliIHVuZGVyIE9TLzIgdXNpbmcgR0NDIChQR0NDKQorIyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCisKKyMgVG8gY29tcGlsZSBhbmQgdGVzdCwgdHlwZToKKyMgICBjcCBNYWtlZmlsZS5vczIgLi4KKyMgICBjZCAuLgorIyAgIG1ha2UgLWYgTWFrZWZpbGUub3MyIHRlc3QKKworIyBUaGlzIG1ha2VmaWxlIHdpbGwgYnVpbGQgYSBzdGF0aWMgbGlicmFyeSB6LmxpYiwgYSBzaGFyZWQgbGlicmFyeQorIyB6LmRsbCBhbmQgYSBpbXBvcnQgbGlicmFyeSB6ZGxsLmxpYi4gWW91IGNhbiB1c2UgZWl0aGVyIHoubGliIG9yCisjIHpkbGwubGliIGJ5IHNwZWNpZnlpbmcgZWl0aGVyIC1seiBvciAtbHpkbGwgb24gZ2NjJ3MgY29tbWFuZCBsaW5lCisKK0NDPWdjYyAtWm9tZiAtcworCitDRkxBR1M9LU82IC1XYWxsCisjQ0ZMQUdTPS1PIC1ETUFYX1dCSVRTPTE0IC1ETUFYX01FTV9MRVZFTD03CisjQ0ZMQUdTPS1nIC1EWkxJQl9ERUJVRworI0NGTEFHUz0tTzMgLVdhbGwgLVd3cml0ZS1zdHJpbmdzIC1XcG9pbnRlci1hcml0aCAtV2NvbnZlcnNpb24gXAorIyAgICAgICAgICAgLVdzdHJpY3QtcHJvdG90eXBlcyAtV21pc3NpbmctcHJvdG90eXBlcworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyBCVUcgV0FSTklORzogIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyBpbmZjb2Rlcy5jIGhpdHMgYSBidWcgaW4gcGdjYy0xLjAsIHNvIHlvdSBoYXZlIHRvIHVzZSBlaXRoZXIKKyMjIC1PIyB3aGVyZSAjIDw9IDQgb3Igb25lIG9mICgtZm5vLW9tbWl0LWZyYW1lLXBvaW50ZXIgb3IgLWZuby1mb3JjZS1tZW0pCisjIyBUaGlzIGJ1ZyBpcyByZXBvcnRlZGx5IGZpeGVkIGluIHBnY2MgPjEuMCwgYnV0IHRoaXMgd2FzIG5vdCB0ZXN0ZWQKK0NGTEFHUys9LWZuby1mb3JjZS1tZW0KKworTERGTEFHUz0tcyAtTC4gLWx6ZGxsIC1aY3J0ZGxsCitMRFNIQVJFRD0kKENDKSAtcyAtWm9tZiAtWmRsbCAtWmNydGRsbAorCitWRVI9MS4xLjAKK1pMSUI9ei5saWIKK1NIQVJFRExJQj16LmRsbAorU0hBUkVETElCSU1QPXpkbGwubGliCitMSUJTPSQoWkxJQikgJChTSEFSRURMSUIpICQoU0hBUkVETElCSU1QKQorCitBUj1lbXhvbWZhciBjcgorSU1QTElCPWVteGltcAorUkFOTElCPWVjaG8KK1RBUj10YXIKK1NIRUxMPWJhc2gKKworcHJlZml4PS91c3IvbG9jYWwKK2V4ZWNfcHJlZml4ID0gJChwcmVmaXgpCisKK09CSlMgPSBhZGxlcjMyLm8gY29tcHJlc3MubyBjcmMzMi5vIGd6aW8ubyB1bmNvbXByLm8gZGVmbGF0ZS5vIHRyZWVzLm8gXAorICAgICAgIHp1dGlsLm8gaW5mbGF0ZS5vIGluZmJsb2NrLm8gaW5mdHJlZXMubyBpbmZjb2Rlcy5vIGluZnV0aWwubyBpbmZmYXN0Lm8KKworVEVTVF9PQkpTID0gZXhhbXBsZS5vIG1pbmlnemlwLm8KKworRElTVEZJTEVTID0gUkVBRE1FIElOREVYIENoYW5nZUxvZyBjb25maWd1cmUgTWFrZSpbYS16MC05XSAqLltjaF0gZGVzY3JpcC5tbXMgXAorICBhbGdvcml0aG0udHh0IHpsaWIuMyBtc2Rvcy9NYWtlKlthLXowLTldIG1zZG9zL3psaWIuZGVmIG1zZG9zL3psaWIucmMgXAorICBudC9NYWtlZmlsZS5udCBudC96bGliLmRudCAgY29udHJpYi9SRUFETUUuY29udHJpYiBjb250cmliLyoudHh0IFwKKyAgY29udHJpYi9hc20zODYvKi5hc20gY29udHJpYi9hc20zODYvKi5jIFwKKyAgY29udHJpYi9hc20zODYvKi5iYXQgY29udHJpYi9hc20zODYvemxpYnZjLmQ/PyBjb250cmliL2lvc3RyZWFtLyouY3BwIFwKKyAgY29udHJpYi9pb3N0cmVhbS8qLmggIGNvbnRyaWIvaW9zdHJlYW0yLyouaCBjb250cmliL2lvc3RyZWFtMi8qLmNwcCBcCisgIGNvbnRyaWIvdW50Z3ovTWFrZWZpbGUgY29udHJpYi91bnRnei8qLmMgY29udHJpYi91bnRnei8qLnczMgorCithbGw6IGV4YW1wbGUuZXhlIG1pbmlnemlwLmV4ZQorCit0ZXN0OiBhbGwKKwlATERfTElCUkFSWV9QQVRIPS46JChMRF9MSUJSQVJZX1BBVEgpIDsgZXhwb3J0IExEX0xJQlJBUllfUEFUSDsgXAorCWVjaG8gaGVsbG8gd29ybGQgfCAuL21pbmlnemlwIHwgLi9taW5pZ3ppcCAtZCB8fCBcCisJICBlY2hvICcJCSoqKiBtaW5pZ3ppcCB0ZXN0IEZBSUxFRCAqKionIDsgXAorCWlmIC4vZXhhbXBsZTsgdGhlbiBcCisJICBlY2hvICcJCSoqKiB6bGliIHRlc3QgT0sgKioqJzsgXAorCWVsc2UgXAorCSAgZWNobyAnCQkqKiogemxpYiB0ZXN0IEZBSUxFRCAqKionOyBcCisJZmkKKworJChaTElCKTogJChPQkpTKQorCSQoQVIpICRAICQoT0JKUykKKwktQCAoJChSQU5MSUIpICRAIHx8IHRydWUpID4vZGV2L251bGwgMj4mMQorCiskKFNIQVJFRExJQik6ICQoT0JKUykgb3MyL3ouZGVmCisJJChMRFNIQVJFRCkgLW8gJEAgJF4KKworJChTSEFSRURMSUJJTVApOiBvczIvei5kZWYKKwkkKElNUExJQikgLW8gJEAgJF4KKworZXhhbXBsZS5leGU6IGV4YW1wbGUubyAkKExJQlMpCisJJChDQykgJChDRkxBR1MpIC1vICRAIGV4YW1wbGUubyAkKExERkxBR1MpCisKK21pbmlnemlwLmV4ZTogbWluaWd6aXAubyAkKExJQlMpCisJJChDQykgJChDRkxBR1MpIC1vICRAIG1pbmlnemlwLm8gJChMREZMQUdTKQorCitjbGVhbjoKKwlybSAtZiAqLm8gKn4gZXhhbXBsZSBtaW5pZ3ppcCBsaWJ6LmEgbGliei5zbyogZm9vLmd6CisKK2Rpc3RjbGVhbjoJY2xlYW4KKworemlwOgorCW12IE1ha2VmaWxlIE1ha2VmaWxlfjsgY3AgLXAgTWFrZWZpbGUuaW4gTWFrZWZpbGUKKwlybSAtZiB0ZXN0LmMgenRlc3QqLmMKKwl2PWBzZWQgLW4gLWUgJ3MvXC4vL2cnIC1lICcvVkVSU0lPTiAiL3MvLioiXCguKlwpIi4qL1wxL3AnIDwgemxpYi5oYDtcCisJemlwIC11bDkgemxpYiQkdiAkKERJU1RGSUxFUykKKwltdiBNYWtlZmlsZX4gTWFrZWZpbGUKKworZGlzdDoKKwltdiBNYWtlZmlsZSBNYWtlZmlsZX47IGNwIC1wIE1ha2VmaWxlLmluIE1ha2VmaWxlCisJcm0gLWYgdGVzdC5jIHp0ZXN0Ki5jCisJZD16bGliLWBzZWQgLW4gJy9WRVJTSU9OICIvcy8uKiJcKC4qXCkiLiovXDEvcCcgPCB6bGliLmhgO1wKKwlybSAtZiAkJGQudGFyLmd6OyBcCisJaWYgdGVzdCAhIC1kIC4uLyQkZDsgdGhlbiBybSAtZiAuLi8kJGQ7IGxuIC1zIGBwd2RgIC4uLyQkZDsgZmk7IFwKKwlmaWxlcz0iIjsgXAorCWZvciBmIGluICQoRElTVEZJTEVTKTsgZG8gZmlsZXM9IiQkZmlsZXMgJCRkLyQkZiI7IGRvbmU7IFwKKwljZCAuLjsgXAorCUdaSVA9LTkgJChUQVIpIGNob2Z6ICQkZC8kJGQudGFyLmd6ICQkZmlsZXM7IFwKKwlpZiB0ZXN0ICEgLWQgJCRkOyB0aGVuIHJtIC1mICQkZDsgZmkKKwltdiBNYWtlZmlsZX4gTWFrZWZpbGUKKwordGFnczoKKwlldGFncyAqLltjaF0KKworZGVwZW5kOgorCW1ha2VkZXBlbmQgLS0gJChDRkxBR1MpIC0tICouW2NoXQorCisjIERPIE5PVCBERUxFVEUgVEhJUyBMSU5FIC0tIG1ha2UgZGVwZW5kIGRlcGVuZHMgb24gaXQuCisKK2FkbGVyMzIubzogemxpYi5oIHpjb25mLmgKK2NvbXByZXNzLm86IHpsaWIuaCB6Y29uZi5oCitjcmMzMi5vOiB6bGliLmggemNvbmYuaAorZGVmbGF0ZS5vOiBkZWZsYXRlLmggenV0aWwuaCB6bGliLmggemNvbmYuaAorZXhhbXBsZS5vOiB6bGliLmggemNvbmYuaAorZ3ppby5vOiB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oCitpbmZibG9jay5vOiBpbmZibG9jay5oIGluZnRyZWVzLmggaW5mY29kZXMuaCBpbmZ1dGlsLmggenV0aWwuaCB6bGliLmggemNvbmYuaAoraW5mY29kZXMubzogenV0aWwuaCB6bGliLmggemNvbmYuaAoraW5mY29kZXMubzogaW5mdHJlZXMuaCBpbmZibG9jay5oIGluZmNvZGVzLmggaW5mdXRpbC5oIGluZmZhc3QuaAoraW5mZmFzdC5vOiB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oIGluZnRyZWVzLmgKK2luZmZhc3QubzogaW5mYmxvY2suaCBpbmZjb2Rlcy5oIGluZnV0aWwuaCBpbmZmYXN0LmgKK2luZmxhdGUubzogenV0aWwuaCB6bGliLmggemNvbmYuaCBpbmZibG9jay5oCitpbmZ0cmVlcy5vOiB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oIGluZnRyZWVzLmgKK2luZnV0aWwubzogenV0aWwuaCB6bGliLmggemNvbmYuaCBpbmZibG9jay5oIGluZnRyZWVzLmggaW5mY29kZXMuaCBpbmZ1dGlsLmgKK21pbmlnemlwLm86IHpsaWIuaCB6Y29uZi5oCit0cmVlcy5vOiBkZWZsYXRlLmggenV0aWwuaCB6bGliLmggemNvbmYuaCB0cmVlcy5oCit1bmNvbXByLm86IHpsaWIuaCB6Y29uZi5oCit6dXRpbC5vOiB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oCmRpZmYgLS1naXQgYS9zcmMvb2xkL29zMi96bGliLmRlZiBiL3NyYy9vbGQvb3MyL3psaWIuZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjNzUzZjEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvb2xkL29zMi96bGliLmRlZgpAQCAtMCwwICsxLDUxIEBACis7Cis7IFNsaWdodGx5IG1vZGlmaWVkIHZlcnNpb24gb2YgLi4vbnQvemxpYi5kbnQgOi0pCis7CisKK0xJQlJBUlkJCVoKK0RFU0NSSVBUSU9OCSJabGliIGNvbXByZXNzaW9uIGxpYnJhcnkgZm9yIE9TLzIiCitDT0RFCQlQUkVMT0FEIE1PVkVBQkxFIERJU0NBUkRBQkxFCitEQVRBCQlQUkVMT0FEIE1PVkVBQkxFIE1VTFRJUExFCisKK0VYUE9SVFMKKyAgICBhZGxlcjMyCisgICAgY29tcHJlc3MKKyAgICBjcmMzMgorICAgIGRlZmxhdGUKKyAgICBkZWZsYXRlQ29weQorICAgIGRlZmxhdGVFbmQKKyAgICBkZWZsYXRlSW5pdDJfCisgICAgZGVmbGF0ZUluaXRfCisgICAgZGVmbGF0ZVBhcmFtcworICAgIGRlZmxhdGVSZXNldAorICAgIGRlZmxhdGVTZXREaWN0aW9uYXJ5CisgICAgZ3pjbG9zZQorICAgIGd6ZG9wZW4KKyAgICBnemVycm9yCisgICAgZ3pmbHVzaAorICAgIGd6b3BlbgorICAgIGd6cmVhZAorICAgIGd6d3JpdGUKKyAgICBpbmZsYXRlCisgICAgaW5mbGF0ZUVuZAorICAgIGluZmxhdGVJbml0Ml8KKyAgICBpbmZsYXRlSW5pdF8KKyAgICBpbmZsYXRlUmVzZXQKKyAgICBpbmZsYXRlU2V0RGljdGlvbmFyeQorICAgIGluZmxhdGVTeW5jCisgICAgdW5jb21wcmVzcworICAgIHpsaWJWZXJzaW9uCisgICAgZ3pwcmludGYKKyAgICBnenB1dGMKKyAgICBnemdldGMKKyAgICBnenNlZWsKKyAgICBnenJld2luZAorICAgIGd6dGVsbAorICAgIGd6ZW9mCisgICAgZ3pzZXRwYXJhbXMKKyAgICB6RXJyb3IKKyAgICBpbmZsYXRlU3luY1BvaW50CisgICAgZ2V0X2NyY190YWJsZQorICAgIGNvbXByZXNzMgorICAgIGd6cHV0cworICAgIGd6Z2V0cwpkaWZmIC0tZ2l0IGEvc3JjL29sZC92aXN1YWwtYmFzaWMudHh0IGIvc3JjL29sZC92aXN1YWwtYmFzaWMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ZWZlNTgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvb2xkL3Zpc3VhbC1iYXNpYy50eHQKQEAgLTAsMCArMSwxNjAgQEAKK1NlZSBiZWxvdyBzb21lIGZ1bmN0aW9ucyBkZWNsYXJhdGlvbnMgZm9yIFZpc3VhbCBCYXNpYy4KKworRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvbjoKKworUTogRWFjaCB0aW1lIEkgdXNlIHRoZSBjb21wcmVzcyBmdW5jdGlvbiBJIGdldCB0aGUgLTUgZXJyb3IgKG5vdCBlbm91Z2gKKyAgIHJvb20gaW4gdGhlIG91dHB1dCBidWZmZXIpLgorCitBOiBNYWtlIHN1cmUgdGhhdCB0aGUgbGVuZ3RoIG9mIHRoZSBjb21wcmVzc2VkIGJ1ZmZlciBpcyBwYXNzZWQgYnkKKyAgIHJlZmVyZW5jZSAoImFzIGFueSIpLCBub3QgYnkgdmFsdWUgKCJhcyBsb25nIikuIEFsc28gY2hlY2sgdGhhdAorICAgYmVmb3JlIHRoZSBjYWxsIG9mIGNvbXByZXNzIHRoaXMgbGVuZ3RoIGlzIGVxdWFsIHRvIHRoZSB0b3RhbCBzaXplIG9mCisgICB0aGUgY29tcHJlc3NlZCBidWZmZXIgYW5kIG5vdCB6ZXJvLgorCisKK0Zyb206ICJKb24gQ2FydWFuYSIgPGpvbi1uZXRAdXNhLm5ldD4KK1N1YmplY3Q6IFJlOiBIb3cgdG8gcG9ydCB6bGliIGRlY2xhcmVzIHRvIHZiPworRGF0ZTogTW9uLCAyOCBPY3QgMTk5NiAxODozMzowMyAtMDYwMAorCitHb3QgdGhlIGFuc3dlciEgKEkgaGF2ZW4ndCBoYWQgdGltZSB0byBjaGVjayB0aGlzIGJ1dCBpdCdzIHdoYXQgSSBnb3QsIGFuZAorbG9va3MgY29ycmVjdCk6CisKK0hlIGhhcyB0aGUgZm9sbG93aW5nIHJvdXRpbmVzIHdvcmtpbmc6CisgICAgICAgIGNvbXByZXNzCisgICAgICAgIHVuY29tcHJlc3MKKyAgICAgICAgZ3pvcGVuCisgICAgICAgIGd6d3JpdGUKKyAgICAgICAgZ3pyZWFkCisgICAgICAgIGd6Y2xvc2UKKworRGVjbGFyZXMgZm9sbG93OiAoUXVvdGVkIGZyb20gQ2FybG9zIFJpb3MgPGNfcmlvc0Bzb25kYS5jbD4sIGluIFZiNCBmb3JtKQorCisjSWYgV2luMTYgVGhlbiAgICdVc2UgV2luMTYgY2FsbHMuCitEZWNsYXJlIEZ1bmN0aW9uIGNvbXByZXNzIExpYiAiWkxJQi5ETEwiIChCeVZhbCBjb21wciBBcworICAgICAgICBTdHJpbmcsIGNvbXByTGVuIEFzIEFueSwgQnlWYWwgYnVmIEFzIFN0cmluZywgQnlWYWwgYnVmbGVuCisgICAgICAgIEFzIExvbmcpIEFzIEludGVnZXIKK0RlY2xhcmUgRnVuY3Rpb24gdW5jb21wcmVzcyBMaWIgIlpMSUIuRExMIiAoQnlWYWwgdW5jb21wcgorICAgICAgICBBcyBTdHJpbmcsIHVuY29tcHJMZW4gQXMgQW55LCBCeVZhbCBjb21wciBBcyBTdHJpbmcsIEJ5VmFsCisgICAgICAgIGxjb21wciBBcyBMb25nKSBBcyBJbnRlZ2VyCitEZWNsYXJlIEZ1bmN0aW9uIGd6b3BlbiBMaWIgIlpMSUIuRExMIiAoQnlWYWwgZmlsZVBhdGggQXMKKyAgICAgICAgU3RyaW5nLCBCeVZhbCBtb2RlIEFzIFN0cmluZykgQXMgTG9uZworRGVjbGFyZSBGdW5jdGlvbiBnenJlYWQgTGliICJaTElCLkRMTCIgKEJ5VmFsIGZpbGUgQXMKKyAgICAgICAgTG9uZywgQnlWYWwgdW5jb21wciBBcyBTdHJpbmcsIEJ5VmFsIHVuY29tcHJMZW4gQXMgSW50ZWdlcikKKyAgICAgICAgQXMgSW50ZWdlcgorRGVjbGFyZSBGdW5jdGlvbiBnendyaXRlIExpYiAiWkxJQi5ETEwiIChCeVZhbCBmaWxlIEFzCisgICAgICAgIExvbmcsIEJ5VmFsIHVuY29tcHIgQXMgU3RyaW5nLCBCeVZhbCB1bmNvbXByTGVuIEFzIEludGVnZXIpCisgICAgICAgIEFzIEludGVnZXIKK0RlY2xhcmUgRnVuY3Rpb24gZ3pjbG9zZSBMaWIgIlpMSUIuRExMIiAoQnlWYWwgZmlsZSBBcworICAgICAgICBMb25nKSBBcyBJbnRlZ2VyCisjRWxzZQorRGVjbGFyZSBGdW5jdGlvbiBjb21wcmVzcyBMaWIgIlpMSUIzMi5ETEwiCisgICAgICAgIChCeVZhbCBjb21wciBBcyBTdHJpbmcsIGNvbXByTGVuIEFzIEFueSwgQnlWYWwgYnVmIEFzCisgICAgICAgIFN0cmluZywgQnlWYWwgYnVmbGVuIEFzIExvbmcpIEFzIEludGVnZXIKK0RlY2xhcmUgRnVuY3Rpb24gdW5jb21wcmVzcyBMaWIgIlpMSUIzMi5ETEwiCisgICAgICAgIChCeVZhbCB1bmNvbXByIEFzIFN0cmluZywgdW5jb21wckxlbiBBcyBBbnksIEJ5VmFsIGNvbXByIEFzCisgICAgICAgIFN0cmluZywgQnlWYWwgbGNvbXByIEFzIExvbmcpIEFzIExvbmcKK0RlY2xhcmUgRnVuY3Rpb24gZ3pvcGVuIExpYiAiWkxJQjMyLkRMTCIKKyAgICAgICAgKEJ5VmFsIGZpbGUgQXMgU3RyaW5nLCBCeVZhbCBtb2RlIEFzIFN0cmluZykgQXMgTG9uZworRGVjbGFyZSBGdW5jdGlvbiBnenJlYWQgTGliICJaTElCMzIuRExMIgorICAgICAgICAoQnlWYWwgZmlsZSBBcyBMb25nLCBCeVZhbCB1bmNvbXByIEFzIFN0cmluZywgQnlWYWwKKyAgICAgICAgdW5jb21wckxlbiBBcyBMb25nKSBBcyBMb25nCitEZWNsYXJlIEZ1bmN0aW9uIGd6d3JpdGUgTGliICJaTElCMzIuRExMIgorICAgICAgICAoQnlWYWwgZmlsZSBBcyBMb25nLCBCeVZhbCB1bmNvbXByIEFzIFN0cmluZywgQnlWYWwKKyAgICAgICAgdW5jb21wckxlbiBBcyBMb25nKSBBcyBMb25nCitEZWNsYXJlIEZ1bmN0aW9uIGd6Y2xvc2UgTGliICJaTElCMzIuRExMIgorICAgICAgICAoQnlWYWwgZmlsZSBBcyBMb25nKSBBcyBMb25nCisjRW5kIElmCisKKy1Kb24gQ2FydWFuYQoram9uLW5ldEB1c2EubmV0CitNaWNyb3NvZnQgU2l0ZWJ1aWxkZXIgTmV0d29yayBMZXZlbCAxIE1lbWJlciAtIEhUTUwgV3JpdGVyJ3MgR3VpbGQgTWVtYmVyCisKKworSGVyZSBpcyBhbm90aGVyIGV4YW1wbGUgZnJvbSBNaWNoYWVsIDxtaWNoYWVsX2JvcmdzeXNAaG90bWFpbC5jb20+IHRoYXQgaGUKK3NheXMgY29uZm9ybXMgdG8gdGhlIFZCIGd1aWRlbGluZXMsIGFuZCB0aGF0IHNvbHZlcyB0aGUgcHJvYmxlbSBvZiBub3QKK2tub3dpbmcgdGhlIHVuY29tcHJlc3NlZCBzaXplIGJ5IHN0b3JpbmcgaXQgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZToKKworJ0NhbGxpbmcgdGhlIGZ1bmN0aW9uczoKKydicmFja2V0IG1lYW5pbmc6IDxwYXJhbWV0ZXI+IFtvcHRpb25hbF0ge1JhbmdlIG9mIHBvc3NpYmxlIHZhbHVlc30KKydDYWxsIHN1YkNvbXByZXNzRmlsZSg8cGF0aCB3aXRoIGZpbGVuYW1lIHRvIGNvbXByZXNzPiBbLCA8cGF0aCB3aXRoCitmaWxlbmFtZSB0byB3cml0ZSB0bz4sIFtsZXZlbCBvZiBjb21wcmVzc2lvbiB7MS4uOX1dXSkKKydDYWxsIHN1YlVuY29tcHJlc3NGaWxlKDxwYXRoIHdpdGggZmlsZW5hbWUgdG8gY29tcHJlc3M+KQorCitPcHRpb24gRXhwbGljaXQKK1ByaXZhdGUgbG5ncHZ0UGNuU21sIEFzIExvbmcgJ1N0b3JlcyB2YWx1ZSBmb3IgJ2xuZ1BlcmNlbnRTbWFsbGVyJworUHJpdmF0ZSBDb25zdCBTVUNDRVNTIEFzIExvbmcgPSAwCitQcml2YXRlIENvbnN0IHN0ckZpbEV4dCBBcyBTdHJpbmcgPSAiLmNwciIKK1ByaXZhdGUgRGVjbGFyZSBGdW5jdGlvbiBsbmdmbmNDcHIgTGliICJ6bGliLmRsbCIgQWxpYXMgImNvbXByZXNzMiIgKEJ5UmVmCitkZXN0IEFzIEFueSwgQnlSZWYgZGVzdExlbiBBcyBBbnksIEJ5UmVmIHNyYyBBcyBBbnksIEJ5VmFsIHNyY0xlbiBBcyBMb25nLAorQnlWYWwgbGV2ZWwgQXMgSW50ZWdlcikgQXMgTG9uZworUHJpdmF0ZSBEZWNsYXJlIEZ1bmN0aW9uIGxuZ2ZuY1VjcCBMaWIgInpsaWIuZGxsIiBBbGlhcyAidW5jb21wcmVzcyIgKEJ5UmVmCitkZXN0IEFzIEFueSwgQnlSZWYgZGVzdExlbiBBcyBBbnksIEJ5UmVmIHNyYyBBcyBBbnksIEJ5VmFsIHNyY0xlbiBBcyBMb25nKQorQXMgTG9uZworCitQdWJsaWMgU3ViIHN1YkNvbXByZXNzRmlsZShCeVZhbCBzdHJhcmdPcmlGaWxQdGggQXMgU3RyaW5nLCBPcHRpb25hbCBCeVZhbAorc3RyYXJnQ3ByRmlsUHRoIEFzIFN0cmluZywgT3B0aW9uYWwgQnlWYWwgaW50THZsIEFzIEludGVnZXIgPSA5KQorICAgIERpbSBzdHJDcHJQdGggQXMgU3RyaW5nCisgICAgRGltIGxuZ09yaVNpeiBBcyBMb25nCisgICAgRGltIGxuZ0NwclNpeiBBcyBMb25nCisgICAgRGltIGJ5dGFyeU9yaSgpIEFzIEJ5dGUKKyAgICBEaW0gYnl0YXJ5Q3ByKCkgQXMgQnl0ZQorICAgIGxuZ09yaVNpeiA9IEZpbGVMZW4oc3RyYXJnT3JpRmlsUHRoKQorICAgIFJlRGltIGJ5dGFyeU9yaShsbmdPcmlTaXogLSAxKQorICAgIE9wZW4gc3RyYXJnT3JpRmlsUHRoIEZvciBCaW5hcnkgQWNjZXNzIFJlYWQgQXMgIzEKKyAgICAgICAgR2V0ICMxLCAsIGJ5dGFyeU9yaSgpCisgICAgQ2xvc2UgIzEKKyAgICBzdHJDcHJQdGggPSBJSWYoc3RyYXJnQ3ByRmlsUHRoID0gIiIsIHN0cmFyZ09yaUZpbFB0aCwgc3RyYXJnQ3ByRmlsUHRoKQorJ1NlbGVjdCBmaWxlIHBhdGggYW5kIG5hbWUKKyAgICBzdHJDcHJQdGggPSBzdHJDcHJQdGggJiBJSWYoUmlnaHQoc3RyQ3ByUHRoLCBMZW4oc3RyRmlsRXh0KSkgPQorc3RyRmlsRXh0LCAiIiwgc3RyRmlsRXh0KSAnQWRkIGZpbGUgZXh0ZW5zaW9uIGlmIG5vdCBleGlzdHMKKyAgICBsbmdDcHJTaXogPSAobG5nT3JpU2l6ICogMS4wMSkgKyAxMiAnQ29tcHJlc3Npb24gbmVlZHMgdGVtcG9yYXJ5IGEgYml0Cittb3JlIHNwYWNlIHRoZW4gb3JpZ2luYWwgZmlsZSBzaXplCisgICAgUmVEaW0gYnl0YXJ5Q3ByKGxuZ0NwclNpeiAtIDEpCisgICAgSWYgbG5nZm5jQ3ByKGJ5dGFyeUNwcigwKSwgbG5nQ3ByU2l6LCBieXRhcnlPcmkoMCksIGxuZ09yaVNpeiwgaW50THZsKSA9CitTVUNDRVNTIFRoZW4KKyAgICAgICAgbG5ncHZ0UGNuU21sID0gKDEjIC0gKGxuZ0NwclNpeiAvIGxuZ09yaVNpeikpICogMTAwCisgICAgICAgIFJlRGltIFByZXNlcnZlIGJ5dGFyeUNwcihsbmdDcHJTaXogLSAxKQorICAgICAgICBPcGVuIHN0ckNwclB0aCBGb3IgQmluYXJ5IEFjY2VzcyBXcml0ZSBBcyAjMQorICAgICAgICAgICAgUHV0ICMxLCAsIGJ5dGFyeUNwcigpCisgICAgICAgICAgICBQdXQgIzEsICwgbG5nT3JpU2l6ICdBZGQgdGhlIHRoZSBvcmlnaW5hbCBzaXplIHZhbHVlIHRvIHRoZSBlbmQKKyhsYXN0IDQgYnl0ZXMpCisgICAgICAgIENsb3NlICMxCisgICAgRWxzZQorICAgICAgICBNc2dCb3ggIkNvbXByZXNzaW9uIGVycm9yIgorICAgIEVuZCBJZgorICAgIEVyYXNlIGJ5dGFyeUNwcgorICAgIEVyYXNlIGJ5dGFyeU9yaQorRW5kIFN1YgorCitQdWJsaWMgU3ViIHN1YlVuY29tcHJlc3NGaWxlKEJ5VmFsIHN0cmFyZ0ZpbFB0aCBBcyBTdHJpbmcpCisgICAgRGltIGJ5dGFyeUNwcigpIEFzIEJ5dGUKKyAgICBEaW0gYnl0YXJ5T3JpKCkgQXMgQnl0ZQorICAgIERpbSBsbmdPcmlTaXogQXMgTG9uZworICAgIERpbSBsbmdDcHJTaXogQXMgTG9uZworICAgIERpbSBzdHJPcmlQdGggQXMgU3RyaW5nCisgICAgbG5nQ3ByU2l6ID0gRmlsZUxlbihzdHJhcmdGaWxQdGgpCisgICAgUmVEaW0gYnl0YXJ5Q3ByKGxuZ0NwclNpeiAtIDEpCisgICAgT3BlbiBzdHJhcmdGaWxQdGggRm9yIEJpbmFyeSBBY2Nlc3MgUmVhZCBBcyAjMQorICAgICAgICBHZXQgIzEsICwgYnl0YXJ5Q3ByKCkKKyAgICBDbG9zZSAjMQorICAgICdSZWFkIHRoZSBvcmlnaW5hbCBmaWxlIHNpemUgdmFsdWU6CisgICAgbG5nT3JpU2l6ID0gYnl0YXJ5Q3ByKGxuZ0NwclNpeiAtIDEpICogKDIgXiAyNCkgXworICAgICAgICAgICAgICArIGJ5dGFyeUNwcihsbmdDcHJTaXogLSAyKSAqICgyIF4gMTYpIF8KKyAgICAgICAgICAgICAgKyBieXRhcnlDcHIobG5nQ3ByU2l6IC0gMykgKiAoMiBeIDgpIF8KKyAgICAgICAgICAgICAgKyBieXRhcnlDcHIobG5nQ3ByU2l6IC0gNCkKKyAgICBSZURpbSBQcmVzZXJ2ZSBieXRhcnlDcHIobG5nQ3ByU2l6IC0gNSkgJ0N1dCBvZiB0aGUgb3JpZ2luYWwgc2l6ZSB2YWx1ZQorICAgIFJlRGltIGJ5dGFyeU9yaShsbmdPcmlTaXogLSAxKQorICAgIElmIGxuZ2ZuY1VjcChieXRhcnlPcmkoMCksIGxuZ09yaVNpeiwgYnl0YXJ5Q3ByKDApLCBsbmdDcHJTaXopID0gU1VDQ0VTUworVGhlbgorICAgICAgICBzdHJPcmlQdGggPSBMZWZ0KHN0cmFyZ0ZpbFB0aCwgTGVuKHN0cmFyZ0ZpbFB0aCkgLSBMZW4oc3RyRmlsRXh0KSkKKyAgICAgICAgT3BlbiBzdHJPcmlQdGggRm9yIEJpbmFyeSBBY2Nlc3MgV3JpdGUgQXMgIzEKKyAgICAgICAgICAgIFB1dCAjMSwgLCBieXRhcnlPcmkoKQorICAgICAgICBDbG9zZSAjMQorICAgIEVsc2UKKyAgICAgICAgTXNnQm94ICJVbmNvbXByZXNzaW9uIGVycm9yIgorICAgIEVuZCBJZgorICAgIEVyYXNlIGJ5dGFyeUNwcgorICAgIEVyYXNlIGJ5dGFyeU9yaQorRW5kIFN1YgorUHVibGljIFByb3BlcnR5IEdldCBsbmdQZXJjZW50U21hbGxlcigpIEFzIExvbmcKKyAgICBsbmdQZXJjZW50U21hbGxlciA9IGxuZ3B2dFBjblNtbAorRW5kIFByb3BlcnR5CmRpZmYgLS1naXQgYS9zcmMvb3M0MDAvUkVBRE1FNDAwIGIvc3JjL29zNDAwL1JFQURNRTQwMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGY2YzlkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL29zNDAwL1JFQURNRTQwMApAQCAtMCwwICsxLDQ4IEBACisgICAgICAgIFpMSUIgdmVyc2lvbiAxLjIuMTIgZm9yIE9TLzQwMCBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zCisKKzEpIERvd25sb2FkIGFuZCB1bnBhY2sgdGhlIHpsaWIgdGFyYmFsbCB0byBzb21lIElGUyBkaXJlY3RvcnkuCisgICAoaS5lLjogL3BhdGgvdG8vdGhlL3psaWIvaWZzL3NvdXJjZS9kaXJlY3RvcnkpCisKKyAgIElmIHRoZSBpbnN0YWxsZWQgSUZTIGNvbW1hbmQgc3VwcG9ycyBnemlwIGZvcm1hdCwgdGhpcyBpcyBzdHJhaWdodGZvcndhcmQsCitlbHNlIHlvdSBoYXZlIHRvIHVucGFjayBmaXJzdCB0byBzb21lIGRpcmVjdG9yeSBvbiBhIHN5c3RlbSBzdXBwb3J0aW5nIGl0LAordGhlbiBtb3ZlIHRoZSB3aG9sZSBkaXJlY3RvcnkgdG8gdGhlIElGUyB2aWEgdGhlIG5ldHdvcmsgKHZpYSBTTUIgb3IgRlRQKS4KKworMikgRWRpdCB0aGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGluIHRoZSBjb21waWxhdGlvbiBzY3JpcHQuCisKKyAgICAgICAgRURURiBTVE1GKCcvcGF0aC90by90aGUvemxpYi9pZnMvc291cmNlL2RpcmVjdG9yeS9vczQwMC9tYWtlLnNoJykKKworVHVuZSB0aGUgcGFyYW1ldGVycyBhY2NvcmRpbmcgdG8geW91ciBuZWVkcyBpZiBub3QgbWF0Y2hpbmcgdGhlIGRlZmF1bHRzLgorU2F2ZSB0aGUgZmlsZSBhbmQgZXhpdCBhZnRlciBlZGl0aW9uLgorCiszKSBFbnRlciBxc2hlbGwsIHRoZW4gd29yayBpbiB0aGUgemxpYiBPUy80MDAgc3BlY2lmaWMgZGlyZWN0b3J5LgorCisgICAgICAgIFFTSAorICAgICAgICBjZCAvcGF0aC90by90aGUvemxpYi9pZnMvc291cmNlL2RpcmVjdG9yeS9vczQwMAorCis0KSBDb21waWxlIGFuZCBpbnN0YWxsCisKKyAgICAgICAgc2ggbWFrZS5zaAorCitUaGUgc2NyaXB0IHdpbGw6CistIGNyZWF0ZSB0aGUgbGlicmFyaWVzLCBvYmplY3RzIGFuZCBJRlMgZGlyZWN0b3JpZXMgZm9yIHRoZSB6bGliIGVudmlyb25tZW50LAorLSBjb21waWxlIGFsbCBtb2R1bGVzLAorLSBjcmVhdGUgYSBzZXJ2aWNlIHByb2dyYW0sCistIGNyZWF0ZSBhIHN0YXRpYyBhbmQgYSBkeW5hbWljIGJpbmRpbmcgZGlyZWN0b3J5LAorLSBpbnN0YWxsIGhlYWRlciBmaWxlcyBmb3IgQy9DKysgYW5kIGZvciBJTEUvUlBHLCBib3RoIGZvciBjb21waWxhdGlvbiBpbgorICBEQjIgYW5kIElGUyBlbnZpcm9ubWVudHMuCisKK1RoYXQncyBhbGwuIAorCisKK05vdGVzOiAgRm9yIE9TLzQwMCBJTEUgUlBHIHByb2dyYW1tZXJzLCBhIC9jb3B5IG1lbWJlciBkZWZpbmluZyB0aGUgWkxJQgorICAgICAgICAgICAgICAgIEFQSSBwcm90b3R5cGVzIGZvciBJTEUgUlBHIGNhbiBiZSBmb3VuZCBpbiBaTElCL0goWkxJQi5JTkMpLgorICAgICAgICAgICAgICAgIEluIHRoZSBJTEUgZW52aXJvbm1lbnQsIHRoZSBzYW1lIGRlZmluaXRpb25zIGFyZSBhdmFpbGFibGUgZnJvbQorICAgICAgICAgICAgICAgIGZpbGUgemxpYi5pbmMgbG9jYXRlZCBpbiB0aGUgc2FtZSBJRlMgaW5jbHVkZSBkaXJlY3RvcnkgYXMgdGhlCisgICAgICAgICAgICAgICAgQy9DKysgaGVhZGVyIGZpbGVzLgorICAgICAgICAgICAgICAgIFBsZWFzZSByZWFkIGNvbW1lbnRzIGluIHRoaXMgbWVtYmVyIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisgICAgICAgIFJlbWVtYmVyIHRoYXQgbW9zdCBmb3JlaWduIHRleHR1YWwgZGF0YSBhcmUgQVNDSUkgY29kZWQ6IHRoaXMKKyAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBoYW5kbGUgY29udmVyc2lvbiBmcm9tL3RvIEFTQ0lJLCBzbworICAgICAgICAgICAgICAgIHRleHQgZGF0YSBjb2RlIGNvbnZlcnNpb25zIG11c3QgYmUgZG9uZSBleHBsaWNpdGVseS4KKworICAgICAgICBNYWlubHkgZm9yIHRoZSByZWFzb24gYWJvdmUsIGFsd2F5cyBvcGVuIHppcHBlZCBmaWxlcyBpbiBiaW5hcnkgbW9kZS4KZGlmZiAtLWdpdCBhL3NyYy9vczQwMC9ibmRzcmMgYi9zcmMvb3M0MDAvYm5kc3JjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNmUwYTIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvb3M0MDAvYm5kc3JjCkBAIC0wLDAgKzEsMTE5IEBACitTVFJQR01FWFAgUEdNTFZMKCpDVVJSRU5UKSBTSUdOQVRVUkUoJ1pMSUInKQorCisvKkBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQCovCisvKiAgIFZlcnNpb24gMS4xLjMgZW50cnkgcG9pbnRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKkBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQCovCisKKyAgRVhQT1JUIFNZTUJPTCgiYWRsZXIzMiIpCisgIEVYUE9SVCBTWU1CT0woImNvbXByZXNzIikKKyAgRVhQT1JUIFNZTUJPTCgiY29tcHJlc3MyIikKKyAgRVhQT1JUIFNZTUJPTCgiY3JjMzIiKQorICBFWFBPUlQgU1lNQk9MKCJnZXRfY3JjX3RhYmxlIikKKyAgRVhQT1JUIFNZTUJPTCgiZGVmbGF0ZSIpCisgIEVYUE9SVCBTWU1CT0woImRlZmxhdGVFbmQiKQorICBFWFBPUlQgU1lNQk9MKCJkZWZsYXRlU2V0RGljdGlvbmFyeSIpCisgIEVYUE9SVCBTWU1CT0woImRlZmxhdGVDb3B5IikKKyAgRVhQT1JUIFNZTUJPTCgiZGVmbGF0ZVJlc2V0IikKKyAgRVhQT1JUIFNZTUJPTCgiZGVmbGF0ZVBhcmFtcyIpCisgIEVYUE9SVCBTWU1CT0woImRlZmxhdGVQcmltZSIpCisgIEVYUE9SVCBTWU1CT0woImRlZmxhdGVJbml0XyIpCisgIEVYUE9SVCBTWU1CT0woImRlZmxhdGVJbml0Ml8iKQorICBFWFBPUlQgU1lNQk9MKCJnem9wZW4iKQorICBFWFBPUlQgU1lNQk9MKCJnemRvcGVuIikKKyAgRVhQT1JUIFNZTUJPTCgiZ3pzZXRwYXJhbXMiKQorICBFWFBPUlQgU1lNQk9MKCJnenJlYWQiKQorICBFWFBPUlQgU1lNQk9MKCJnendyaXRlIikKKyAgRVhQT1JUIFNZTUJPTCgiZ3pwcmludGYiKQorICBFWFBPUlQgU1lNQk9MKCJnenB1dHMiKQorICBFWFBPUlQgU1lNQk9MKCJnemdldHMiKQorICBFWFBPUlQgU1lNQk9MKCJnenB1dGMiKQorICBFWFBPUlQgU1lNQk9MKCJnemdldGMiKQorICBFWFBPUlQgU1lNQk9MKCJnemZsdXNoIikKKyAgRVhQT1JUIFNZTUJPTCgiZ3pzZWVrIikKKyAgRVhQT1JUIFNZTUJPTCgiZ3pyZXdpbmQiKQorICBFWFBPUlQgU1lNQk9MKCJnenRlbGwiKQorICBFWFBPUlQgU1lNQk9MKCJnemVvZiIpCisgIEVYUE9SVCBTWU1CT0woImd6Y2xvc2UiKQorICBFWFBPUlQgU1lNQk9MKCJnemVycm9yIikKKyAgRVhQT1JUIFNZTUJPTCgiaW5mbGF0ZSIpCisgIEVYUE9SVCBTWU1CT0woImluZmxhdGVFbmQiKQorICBFWFBPUlQgU1lNQk9MKCJpbmZsYXRlU2V0RGljdGlvbmFyeSIpCisgIEVYUE9SVCBTWU1CT0woImluZmxhdGVTeW5jIikKKyAgRVhQT1JUIFNZTUJPTCgiaW5mbGF0ZVJlc2V0IikKKyAgRVhQT1JUIFNZTUJPTCgiaW5mbGF0ZUluaXRfIikKKyAgRVhQT1JUIFNZTUJPTCgiaW5mbGF0ZUluaXQyXyIpCisgIEVYUE9SVCBTWU1CT0woImluZmxhdGVTeW5jUG9pbnQiKQorICBFWFBPUlQgU1lNQk9MKCJ1bmNvbXByZXNzIikKKyAgRVhQT1JUIFNZTUJPTCgiemxpYlZlcnNpb24iKQorICBFWFBPUlQgU1lNQk9MKCJ6RXJyb3IiKQorICBFWFBPUlQgU1lNQk9MKCJ6X2Vycm1zZyIpCisKKy8qQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAKi8KKy8qICAgVmVyc2lvbiAxLjIuMSBhZGRpdGlvbmFsIGVudHJ5IHBvaW50cy4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAKi8KKworICBFWFBPUlQgU1lNQk9MKCJjb21wcmVzc0JvdW5kIikKKyAgRVhQT1JUIFNZTUJPTCgiZGVmbGF0ZUJvdW5kIikKKyAgRVhQT1JUIFNZTUJPTCgiZGVmbGF0ZVBlbmRpbmciKQorICBFWFBPUlQgU1lNQk9MKCJnenVuZ2V0YyIpCisgIEVYUE9SVCBTWU1CT0woImd6Y2xlYXJlcnIiKQorICBFWFBPUlQgU1lNQk9MKCJpbmZsYXRlQmFjayIpCisgIEVYUE9SVCBTWU1CT0woImluZmxhdGVCYWNrRW5kIikKKyAgRVhQT1JUIFNZTUJPTCgiaW5mbGF0ZUJhY2tJbml0XyIpCisgIEVYUE9SVCBTWU1CT0woImluZmxhdGVDb3B5IikKKyAgRVhQT1JUIFNZTUJPTCgiemxpYkNvbXBpbGVGbGFncyIpCisKKy8qQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAKi8KKy8qICAgVmVyc2lvbiAxLjIuNCBhZGRpdGlvbmFsIGVudHJ5IHBvaW50cy4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAKi8KKworICBFWFBPUlQgU1lNQk9MKCJhZGxlcjMyX2NvbWJpbmUiKQorICBFWFBPUlQgU1lNQk9MKCJhZGxlcjMyX2NvbWJpbmU2NCIpCisgIEVYUE9SVCBTWU1CT0woImNyYzMyX2NvbWJpbmUiKQorICBFWFBPUlQgU1lNQk9MKCJjcmMzMl9jb21iaW5lNjQiKQorICBFWFBPUlQgU1lNQk9MKCJkZWZsYXRlU2V0SGVhZGVyIikKKyAgRVhQT1JUIFNZTUJPTCgiZGVmbGF0ZVR1bmUiKQorICBFWFBPUlQgU1lNQk9MKCJnemJ1ZmZlciIpCisgIEVYUE9SVCBTWU1CT0woImd6Y2xvc2VfciIpCisgIEVYUE9SVCBTWU1CT0woImd6Y2xvc2VfdyIpCisgIEVYUE9SVCBTWU1CT0woImd6ZGlyZWN0IikKKyAgRVhQT1JUIFNZTUJPTCgiZ3pvZmZzZXQiKQorICBFWFBPUlQgU1lNQk9MKCJnem9mZnNldDY0IikKKyAgRVhQT1JUIFNZTUJPTCgiZ3pvcGVuNjQiKQorICBFWFBPUlQgU1lNQk9MKCJnenNlZWs2NCIpCisgIEVYUE9SVCBTWU1CT0woImd6dGVsbDY0IikKKyAgRVhQT1JUIFNZTUJPTCgiaW5mbGF0ZUdldEhlYWRlciIpCisgIEVYUE9SVCBTWU1CT0woImluZmxhdGVNYXJrIikKKyAgRVhQT1JUIFNZTUJPTCgiaW5mbGF0ZVByaW1lIikKKyAgRVhQT1JUIFNZTUJPTCgiaW5mbGF0ZVJlc2V0MiIpCisgIEVYUE9SVCBTWU1CT0woImluZmxhdGVVbmRlcm1pbmUiKQorCisvKkBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQCovCisvKiAgIFZlcnNpb24gMS4yLjYgYWRkaXRpb25hbCBlbnRyeSBwb2ludHMuICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKkBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQCovCisKKyAgRVhQT1JUIFNZTUJPTCgiZGVmbGF0ZVJlc2V0S2VlcCIpCisgIEVYUE9SVCBTWU1CT0woImd6Z2V0Y18iKQorICBFWFBPUlQgU1lNQk9MKCJpbmZsYXRlUmVzZXRLZWVwIikKKworLypAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAqLworLyogICBWZXJzaW9uIDEuMi44IGFkZGl0aW9uYWwgZW50cnkgcG9pbnRzLiAgICAgICAgICAgICAgICAgICAgICAgICAqLworLypAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAqLworCisgIEVYUE9SVCBTWU1CT0woImd6dnByaW50ZiIpCisgIEVYUE9SVCBTWU1CT0woImluZmxhdGVHZXREaWN0aW9uYXJ5IikKKworLypAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAqLworLyogICBWZXJzaW9uIDEuMi45IGFkZGl0aW9uYWwgZW50cnkgcG9pbnRzLiAgICAgICAgICAgICAgICAgICAgICAgICAqLworLypAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAqLworCisgIEVYUE9SVCBTWU1CT0woImFkbGVyMzJfeiIpCisgIEVYUE9SVCBTWU1CT0woImNyYzMyX3oiKQorICBFWFBPUlQgU1lNQk9MKCJkZWZsYXRlR2V0RGljdGlvbmFyeSIpCisgIEVYUE9SVCBTWU1CT0woImd6ZnJlYWQiKQorICBFWFBPUlQgU1lNQk9MKCJnemZ3cml0ZSIpCisgIEVYUE9SVCBTWU1CT0woImluZmxhdGVDb2Rlc1VzZWQiKQorICBFWFBPUlQgU1lNQk9MKCJpbmZsYXRlVmFsaWRhdGUiKQorICBFWFBPUlQgU1lNQk9MKCJ1bmNvbXByZXNzMiIpCisKK0VORFBHTUVYUApkaWZmIC0tZ2l0IGEvc3JjL29zNDAwL21ha2Uuc2ggYi9zcmMvb3M0MDAvbWFrZS5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWVlYzExCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL29zNDAwL21ha2Uuc2gKQEAgLTAsMCArMSwzNjYgQEAKKyMhL2Jpbi9zaAorIworIyAgICAgICBaTElCIGNvbXBpbGF0aW9uIHNjcmlwdCBmb3IgdGhlIE9TLzQwMC4KKyMKKyMKKyMgICAgICAgVGhpcyBpcyBhIHNoZWxsIHNjcmlwdCBzaW5jZSBtYWtlIGlzIG5vdCBhIHN0YW5kYXJkIGNvbXBvbmVudCBvZiBPUy80MDAuCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgICAgICAgICAgICAgICAgICAgICAgIFR1bmFibGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworVEFSR0VUTElCPSdaTElCJyAgICAgICAgICAgICAgICAjIFRhcmdldCBPUy80MDAgcHJvZ3JhbSBsaWJyYXJ5CitTVEFUQk5ERElSPSdaTElCX0EnICAgICAgICAgICAgICMgU3RhdGljIGJpbmRpbmcgZGlyZWN0b3J5LgorRFlOQk5ERElSPSdaTElCJyAgICAgICAgICAgICAgICAjIER5bmFtaWMgYmluZGluZyBkaXJlY3RvcnkuCitTUlZQR009IlpMSUIiICAgICAgICAgICAgICAgICAgICMgU2VydmljZSBwcm9ncmFtLgorSUZTRElSPScvemxpYicgICAgICAgICAgICAgICAgICAjIElGUyBzdXBwb3J0IGJhc2UgZGlyZWN0b3J5LgorVEdUQ0NTSUQ9JzUwMCcgICAgICAgICAgICAgICAgICAjIFRhcmdldCBDQ1NJRCBvZiBvYmplY3RzCitERUJVRz0nKk5PTkUnICAgICAgICAgICAgICAgICAgICMgRGVidWcgbGV2ZWwKK09QVElNSVpFPSc0MCcgICAgICAgICAgICAgICAgICAgIyBPcHRpbWlzYXRpb24gbGV2ZWwKK09VVFBVVD0nKk5PTkUnICAgICAgICAgICAgICAgICAgIyBDb21waWxhdGlvbiBvdXRwdXQgb3B0aW9uLgorVEdUUkxTPSdWNlIxTTAnICAgICAgICAgICAgICAgICAjIFRhcmdldCBPUyByZWxlYXNlCisKK2V4cG9ydCBUQVJHRVRMSUIgU1RBVEJORERJUiBEWU5CTkRESVIgU1JWUEdNIElGU0RJUgorZXhwb3J0IFRHVENDU0lEIERFQlVHIE9QVElNSVpFIE9VVFBVVCBUR1RSTFMKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyAgICAgICAgICAgICAgICAgICAgICAgT1MvNDAwIHNwZWNpZmljIGRlZmluaXRpb25zLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworTElCSUZTTkFNRT0iL1FTWVMuTElCLyR7VEFSR0VUTElCfS5MSUIiCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvY2VkdXJlcy4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgICAgICAgYWN0aW9uX25lZWRlZCBkZXN0IFtzcmNdCisjCisjICAgICAgIGRlc3QgaXMgYW4gb2JqZWN0IHRvIGJ1aWxkCisjICAgICAgIGlmIHNwZWNpZmllZCwgc3JjIGlzIGFuIG9iamVjdCBvbiB3aGljaCBkZXN0IGRlcGVuZHMuCisjCisjICAgICAgIGV4aXQgMCAoc3VjY2VlZHMpIGlmIHNvbWUgYWN0aW9uIGhhcyB0byBiZSB0YWtlbiwgZWxzZSAxLgorCithY3Rpb25fbmVlZGVkKCkKKworeworICAgICAgICBbICEgLWUgIiR7MX0iIF0gJiYgcmV0dXJuIDAKKyAgICAgICAgWyAiJHsyfSIgXSB8fCByZXR1cm4gMQorICAgICAgICBbICIkezF9IiAtb3QgIiR7Mn0iIF0gJiYgcmV0dXJuIDAKKyAgICAgICAgcmV0dXJuIDEKK30KKworCisjICAgICAgIG1ha2VfbW9kdWxlIG1vZHVsZV9uYW1lIHNvdXJjZV9uYW1lIFthZGRpdGlvbmFsX2RlZmluaXRpb25zXQorIworIyAgICAgICBDb21waWxlIHNvdXJjZSBuYW1lIGludG8gbW9kdWxlIGlmIG5lZWRlZC4KKyMgICAgICAgQXMgc2lkZSBlZmZlY3QsIGFwcGVuZCB0aGUgbW9kdWxlIG5hbWUgdG8gdmFyaWFibGUgTU9EVUxFUy4KKyMgICAgICAgU2V0IExJTksgdG8gIllFUyIgaWYgdGhlIG1vZHVsZSBoYXMgYmVlbiBjb21waWxlZC4KKworbWFrZV9tb2R1bGUoKQorCit7CisgICAgTU9EVUxFUz0iJHtNT0RVTEVTfSAkezF9IgorICAgIE1PRElGU05BTUU9IiR7TElCSUZTTkFNRX0vJHsxfS5NT0RVTEUiCisgICAgQ1NSQz0iYGJhc2VuYW1lIFwiJHsyfVwiYCIKKworICAgIGlmIGFjdGlvbl9uZWVkZWQgIiR7TU9ESUZTTkFNRX0iICIkezJ9IgorICAgIHRoZW4gICAgOgorICAgIGVsaWYgWyAhICJgc2VkIC1lIFwiLzxzb3VyY2UgbmFtZT1cXFwiJHtDU1JDfVxcXCI+LywvPFxcXFwvc291cmNlPi8hZFwiIFwKKyAgICAgIC1lICcvPGRlcGVuZCAvIWQnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIC1lICdzLy4qIG5hbWU9XCJcXChbXlwiXSpcXClcIi4qL1xcMS8nIDwgXCIke1RPUERJUn0vdHJlZWJ1aWxkLnhtbFwiIHwKKyAgICAgICAgd2hpbGUgcmVhZCBIRFIKKyAgICAgICAgZG8gICAgICBpZiBhY3Rpb25fbmVlZGVkIFwiJHtNT0RJRlNOQU1FfVwiIFwiJHtJRlNESVJ9L2luY2x1ZGUvJHtIRFJ9XCIKKyAgICAgICAgICAgICAgICB0aGVuICAgIGVjaG8gcmVjb21waWxlCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGZpCisgICAgICAgIGRvbmVgIiBdCisgICAgdGhlbiAgICByZXR1cm4gMAorICAgIGZpCisKKyAgICBDTUQ9IkNSVENNT0QgTU9EVUxFKCR7VEFSR0VUTElCfS8kezF9KSBTUkNTVE1GKCckezJ9JykiCisgICAgQ01EPSIke0NNRH0gU1lTSUZDT1BUKCpJRlM2NElPKSBPUFRJT04oKklOQ0RJUkZJUlNUKSIKKyAgICBDTUQ9IiR7Q01EfSBMT0NBTEVUWVBFKCpMT0NBTEUpIEZMQUcoMTApIgorICAgIENNRD0iJHtDTUR9IElOQ0RJUignJHtJRlNESVJ9L2luY2x1ZGUnICR7SU5DTFVERVN9KSIKKyAgICBDTUQ9IiR7Q01EfSBUR1RDQ1NJRCgke1RHVENDU0lEfSkgVEdUUkxTKCR7VEdUUkxTfSkiCisgICAgQ01EPSIke0NNRH0gT1VUUFVUKCR7T1VUUFVUfSkiCisgICAgQ01EPSIke0NNRH0gT1BUSU1JWkUoJHtPUFRJTUlaRX0pIgorICAgIENNRD0iJHtDTUR9IERCR1ZJRVcoJHtERUJVR30pIgorICAgIHN5c3RlbSAiJHtDTUR9IgorICAgIExJTks9WUVTCit9CisKKworIyAgICAgICBEZXRlcm1pbmUgREIyIG9iamVjdCBuYW1lIGZyb20gSUZTIG5hbWUuCisKK2RiMl9uYW1lKCkKKworeworICAgICAgICBiYXNlbmFtZSAiJHsxfSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICB0ciAnYS16LScgJ0EtWl8nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICBzZWQgLWUgJ3MvXC4uKi8vJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgLWUgJ3MvXlwoLlwpLipcKC4uLi4uLi4uLlwpJC9cMVwyLycKK30KKworCisjICAgICAgIEZvcmNlIGVudW1lcmF0aW9uIHR5cGVzIHRvIGJlIHRoZSBzYW1lIHNpemUgYXMgaW50ZWdlcnMuCisKK2NvcHlfaGZpbGUoKQorCit7CisgICAgICAgIHNlZCAtZSAnMWlcCisjcHJhZ21hIGVudW0oaW50KVwKKycgIiR7QH0iIC1lICckYVwKKyNwcmFnbWEgZW51bShwb3ApXAorJworfQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY3JpcHQgaW5pdGlhbGl6YXRpb24uCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitTQ1JJUFRESVI9YGRpcm5hbWUgIiR7MH0iYAorCitjYXNlICIke1NDUklQVERJUn0iIGluCisvKikgICAgIDs7CisqKSAgICAgIFNDUklQVERJUj0iYHB3ZGAvJHtTQ1JJUFRESVJ9IgorZXNhYworCit3aGlsZSB0cnVlCitkbyAgICAgIGNhc2UgIiR7U0NSSVBURElSfSIgaW4KKyAgICAgICAgKi8uKSAgICBTQ1JJUFRESVI9IiR7U0NSSVBURElSJS8ufSI7OworICAgICAgICAqKSAgICAgIGJyZWFrOzsKKyAgICAgICAgZXNhYworZG9uZQorCisjICBUaGUgc2NyaXB0IGRpcmVjdG9yeSBpcyBzdXBwb3NlZCB0byBiZSBpbiAke1RPUERJUn0vb3M0MDAuCisKK1RPUERJUj1gZGlybmFtZSAiJHtTQ1JJUFRESVJ9ImAKK2V4cG9ydCBTQ1JJUFRESVIgVE9QRElSCitjZCAiJHtUT1BESVJ9IgorCisKKyMgIEV4dHJhY3QgdGhlIHZlcnNpb24gZnJvbSB0aGUgbWFzdGVyIGNvbXBpbGF0aW9uIFhNTCBmaWxlLgorCitWRVJTSU9OPWBzZWQgLWUgJy9ePHBhY2thZ2UgLyFkJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAtZSAncy9eLiogdmVyc2lvbj0iXChbMC05Ll0qXCkiLiokL1wxLycgLWUgJ3EnICAgICAgICAgICAgICBcCisgICAgICAgICAgICA8IHRyZWVidWlsZC54bWxgCitleHBvcnQgVkVSU0lPTgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisKKyMgICAgICAgQ3JlYXRlIHRoZSBPUy80MDAgbGlicmFyeSBpZiBpdCBkb2VzIG5vdCBleGlzdC4KKworaWYgYWN0aW9uX25lZWRlZCAiJHtMSUJJRlNOQU1FfSIKK3RoZW4gICAgQ01EPSJDUlRMSUIgTElCKCR7VEFSR0VUTElCfSkgVEVYVCgnWkxJQjogRGF0YSBjb21wcmVzc2lvbiBBUEknKSIKKyAgICAgICAgc3lzdGVtICIke0NNRH0iCitmaQorCisKKyMgICAgICAgQ3JlYXRlIHRoZSBET0NTIHNvdXJjZSBmaWxlIGlmIGl0IGRvZXMgbm90IGV4aXN0LgorCitpZiBhY3Rpb25fbmVlZGVkICIke0xJQklGU05BTUV9L0RPQ1MuRklMRSIKK3RoZW4gICAgQ01EPSJDUlRTUkNQRiBGSUxFKCR7VEFSR0VUTElCfS9ET0NTKSBSQ0RMRU4oMTEyKSIKKyAgICAgICAgQ01EPSIke0NNRH0gQ0NTSUQoJHtUR1RDQ1NJRH0pIFRFWFQoJ0RvY3VtZW50YXRpb24gdGV4dHMnKSIKKyAgICAgICAgc3lzdGVtICIke0NNRH0iCitmaQorCisjICAgICAgIENvcHkgc29tZSBkb2N1bWVudGF0aW9uIGZpbGVzIGlmIG5lZWRlZC4KKworZm9yIFRFWFQgaW4gIiR7VE9QRElSfS9DaGFuZ2VMb2ciICIke1RPUERJUn0vRkFRIiAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICIke1RPUERJUn0vUkVBRE1FIiAiJHtTQ1JJUFRESVJ9L1JFQURNRTQwMCIKK2RvICAgICAgTUVNQkVSPSIke0xJQklGU05BTUV9L0RPQ1MuRklMRS9gZGIyX25hbWUgXCIke1RFWFR9XCJgLk1CUiIKKworICAgICAgICBpZiBhY3Rpb25fbmVlZGVkICIke01FTUJFUn0iICIke1RFWFR9IgorICAgICAgICB0aGVuICAgIENNRD0iQ1BZIE9CSignJHtURVhUfScpIFRPT0JKKCcke01FTUJFUn0nKSBUT0NDU0lEKCR7VEdUQ0NTSUR9KSIKKyAgICAgICAgICAgICAgICBDTUQ9IiR7Q01EfSBEVEFGTVQoKlRFWFQpIFJFUExBQ0UoKllFUykiCisgICAgICAgICAgICAgICAgc3lzdGVtICIke0NNRH0iCisgICAgICAgIGZpCitkb25lCisKKworIyAgICAgICBDcmVhdGUgdGhlIE9TLzQwMCBzb3VyY2UgcHJvZ3JhbSBmaWxlIGZvciB0aGUgQyBoZWFkZXIgZmlsZXMuCisKK1NSQ1BGPSIke0xJQklGU05BTUV9L0guRklMRSIKKworaWYgYWN0aW9uX25lZWRlZCAiJHtTUkNQRn0iCit0aGVuICAgIENNRD0iQ1JUU1JDUEYgRklMRSgke1RBUkdFVExJQn0vSCkgUkNETEVOKDExMikiCisgICAgICAgIENNRD0iJHtDTUR9IENDU0lEKCR7VEdUQ0NTSUR9KSBURVhUKCdaTElCOiBDL0MrKyBoZWFkZXIgZmlsZXMnKSIKKyAgICAgICAgc3lzdGVtICIke0NNRH0iCitmaQorCisKKyMgICAgICAgQ3JlYXRlIHRoZSBJRlMgZGlyZWN0b3J5IGZvciB0aGUgQyBoZWFkZXIgZmlsZXMuCisKK2lmIGFjdGlvbl9uZWVkZWQgIiR7SUZTRElSfS9pbmNsdWRlIgordGhlbiAgICBta2RpciAtcCAiJHtJRlNESVJ9L2luY2x1ZGUiCitmaQorCisjICAgICAgIENvcHkgdGhlIGhlYWRlciBmaWxlcyB0byBEQjIgbGlicmFyeS4gTGluayBmcm9tIElGUyBpbmNsdWRlIGRpcmVjdG9yeS4KKworZm9yIEhGSUxFIGluICIke1RPUERJUn0vIiouaAorZG8gICAgICBERVNUPSIke1NSQ1BGfS9gZGIyX25hbWUgXCIke0hGSUxFfVwiYC5NQlIiCisKKyAgICAgICAgaWYgYWN0aW9uX25lZWRlZCAiJHtERVNUfSIgIiR7SEZJTEV9IgorICAgICAgICB0aGVuICAgIGNvcHlfaGZpbGUgPCAiJHtIRklMRX0iID4gdG1waGRyZmlsZQorCisgICAgICAgICAgICAgICAgIyAgICAgICBOZWVkIHRvIHRyYW5zbGF0ZSB0byB0YXJnZXQgQ0NTSUQuCisKKyAgICAgICAgICAgICAgICBDTUQ9IkNQWSBPQkooJ2Bwd2RgL3RtcGhkcmZpbGUnKSBUT09CSignJHtERVNUfScpIgorICAgICAgICAgICAgICAgIENNRD0iJHtDTUR9IFRPQ0NTSUQoJHtUR1RDQ1NJRH0pIERUQUZNVCgqVEVYVCkgUkVQTEFDRSgqWUVTKSIKKyAgICAgICAgICAgICAgICBzeXN0ZW0gIiR7Q01EfSIKKyAgICAgICAgICAgICAgICAjIHRvdWNoIC1yICIke0hGSUxFfSIgIiR7REVTVH0iCisgICAgICAgICAgICAgICAgcm0gLWYgdG1waGRyZmlsZQorICAgICAgICBmaQorCisgICAgICAgIElGU0ZJTEU9IiR7SUZTRElSfS9pbmNsdWRlL2BiYXNlbmFtZSBcIiR7SEZJTEV9XCJgIgorCisgICAgICAgIGlmIGFjdGlvbl9uZWVkZWQgIiR7SUZTRklMRX0iICIke0RFU1R9IgorICAgICAgICB0aGVuICAgIHJtIC1mICIke0lGU0ZJTEV9IgorICAgICAgICAgICAgICAgIGxuIC1zICIke0RFU1R9IiAiJHtJRlNGSUxFfSIKKyAgICAgICAgZmkKK2RvbmUKKworCisjICAgICAgIEluc3RhbGwgdGhlIElMRS9SUEcgaGVhZGVyIGZpbGUuCisKKworSEZJTEU9IiR7U0NSSVBURElSfS96bGliLmluYyIKK0RFU1Q9IiR7U1JDUEZ9L1pMSUIuSU5DLk1CUiIKKworaWYgYWN0aW9uX25lZWRlZCAiJHtERVNUfSIgIiR7SEZJTEV9IgordGhlbiAgICBDTUQ9IkNQWSBPQkooJyR7SEZJTEV9JykgVE9PQkooJyR7REVTVH0nKSIKKyAgICAgICAgQ01EPSIke0NNRH0gVE9DQ1NJRCgke1RHVENDU0lEfSkgRFRBRk1UKCpURVhUKSBSRVBMQUNFKCpZRVMpIgorICAgICAgICBzeXN0ZW0gIiR7Q01EfSIKKyAgICAgICAgIyB0b3VjaCAtciAiJHtIRklMRX0iICIke0RFU1R9IgorZmkKKworSUZTRklMRT0iJHtJRlNESVJ9L2luY2x1ZGUvYGJhc2VuYW1lIFwiJHtIRklMRX1cImAiCisKK2lmIGFjdGlvbl9uZWVkZWQgIiR7SUZTRklMRX0iICIke0RFU1R9IgordGhlbiAgICBybSAtZiAiJHtJRlNGSUxFfSIKKyAgICAgICAgbG4gLXMgIiR7REVTVH0iICIke0lGU0ZJTEV9IgorZmkKKworCisjICAgICAgQ3JlYXRlIGFuZCBjb21waWxlIHRoZSBpZGVudGlmaWNhdGlvbiBzb3VyY2UgZmlsZS4KKworZWNobyAnI3ByYWdtYSBjb21tZW50KHVzZXIsICJaTElCIHZlcnNpb24gJyIke1ZFUlNJT059IiciKScgPiBvczQwMC5jCitlY2hvICcjcHJhZ21hIGNvbW1lbnQodXNlciwgX19EQVRFX18pJyA+PiBvczQwMC5jCitlY2hvICcjcHJhZ21hIGNvbW1lbnQodXNlciwgX19USU1FX18pJyA+PiBvczQwMC5jCitlY2hvICcjcHJhZ21hIGNvbW1lbnQoY29weXJpZ2h0LCAiQ29weXJpZ2h0IChDKSAxOTk1LTIwMTcgSmVhbi1Mb3VwIEdhaWxseSwgTWFyayBBZGxlci4gT1MvNDAwIHZlcnNpb24gYnkgUC4gTW9ubmVyYXQuIiknID4+IG9zNDAwLmMKK21ha2VfbW9kdWxlICAgICBPUzQwMCAgICAgICAgICAgb3M0MDAuYworTElOSz0gICAgICAgICAgICAgICAgICAgICAgICAgICAjIE5vIG5lZWQgdG8gcmVidWlsZCBzZXJ2aWNlIHByb2dyYW0geWV0LgorTU9EVUxFUz0KKworCisjICAgICAgIEdldCBzb3VyY2UgbGlzdC4KKworQ1NPVVJDRVM9YHNlZCAtZSAnLzxzb3VyY2UgbmFtZT0iLyFkJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1lICdzLy4qIG5hbWU9IlwoW14iXSpcKSIuKi9cMS8nIDwgdHJlZWJ1aWxkLnhtbGAKKworIyAgICAgICBDb21waWxlIHRoZSBzb3VyY2VzIGludG8gbW9kdWxlcy4KKworZm9yIFNSQyBpbiAke0NTT1VSQ0VTfQorZG8gICAgICBNT0RVTEU9YGRiMl9uYW1lICIke1NSQ30iYAorICAgICAgICBtYWtlX21vZHVsZSAiJHtNT0RVTEV9IiAiJHtTUkN9IgorZG9uZQorCisKKyMgICAgICAgSWYgbmVlZGVkLCAocmUpY3JlYXRlIHRoZSBzdGF0aWMgYmluZGluZyBkaXJlY3RvcnkuCisKK2lmIGFjdGlvbl9uZWVkZWQgIiR7TElCSUZTTkFNRX0vJHtTVEFUQk5ERElSfS5CTkRESVIiCit0aGVuICAgIExJTks9WUVTCitmaQorCitpZiBbICIke0xJTkt9IiBdCit0aGVuICAgIHJtIC1yZiAiJHtMSUJJRlNOQU1FfS8ke1NUQVRCTkRESVJ9LkJORERJUiIKKyAgICAgICAgQ01EPSJDUlRCTkRESVIgQk5ERElSKCR7VEFSR0VUTElCfS8ke1NUQVRCTkRESVJ9KSIKKyAgICAgICAgQ01EPSIke0NNRH0gVEVYVCgnWkxJQiBzdGF0aWMgYmluZGluZyBkaXJlY3RvcnknKSIKKyAgICAgICAgc3lzdGVtICIke0NNRH0iCisKKyAgICAgICAgZm9yIE1PRFVMRSBpbiAke01PRFVMRVN9CisgICAgICAgIGRvICAgICAgQ01EPSJBRERCTkRESVJFIEJORERJUigke1RBUkdFVExJQn0vJHtTVEFUQk5ERElSfSkiCisgICAgICAgICAgICAgICAgQ01EPSIke0NNRH0gT0JKKCgke1RBUkdFVExJQn0vJHtNT0RVTEV9ICpNT0RVTEUpKSIKKyAgICAgICAgICAgICAgICBzeXN0ZW0gIiR7Q01EfSIKKyAgICAgICAgZG9uZQorZmkKKworCisjICAgICAgIFRoZSBleHBvcnRhdGlvbiBmaWxlIGZvciBzZXJ2aWNlIHByb2dyYW0gY3JlYXRpb24gbXVzdCBiZSBpbiBhIERCMgorIyAgICAgICAgICAgICAgIHNvdXJjZSBmaWxlLCBzbyBtYWtlIHN1cmUgaXQgZXhpc3RzLgorCitpZiBhY3Rpb25fbmVlZGVkICIke0xJQklGU05BTUV9L1RPT0xTLkZJTEUiCit0aGVuICAgIENNRD0iQ1JUU1JDUEYgRklMRSgke1RBUkdFVExJQn0vVE9PTFMpIFJDRExFTigxMTIpIgorICAgICAgICBDTUQ9IiR7Q01EfSBDQ1NJRCgke1RHVENDU0lEfSkgVEVYVCgnWkxJQjogYnVpbGQgdG9vbHMnKSIKKyAgICAgICAgc3lzdGVtICIke0NNRH0iCitmaQorCisKK0RFU1Q9IiR7TElCSUZTTkFNRX0vVE9PTFMuRklMRS9CTkRTUkMuTUJSIgorCitpZiBhY3Rpb25fbmVlZGVkICIke1NDUklQVERJUn0vYm5kc3JjIiAiJHtERVNUfSIKK3RoZW4gICAgQ01EPSJDUFkgT0JKKCcke1NDUklQVERJUn0vYm5kc3JjJykgVE9PQkooJyR7REVTVH0nKSIKKyAgICAgICAgQ01EPSIke0NNRH0gVE9DQ1NJRCgke1RHVENDU0lEfSkgRFRBRk1UKCpURVhUKSBSRVBMQUNFKCpZRVMpIgorICAgICAgICBzeXN0ZW0gIiR7Q01EfSIKKyAgICAgICAgIyB0b3VjaCAtciAiJHtTQ1JJUFRESVJ9L2JuZHNyYyIgIiR7REVTVH0iCisgICAgICAgIExJTks9WUVTCitmaQorCisKKyMgICAgICAgQnVpbGQgdGhlIHNlcnZpY2UgcHJvZ3JhbSBpZiBuZWVkZWQuCisKK2lmIGFjdGlvbl9uZWVkZWQgIiR7TElCSUZTTkFNRX0vJHtTUlZQR019LlNSVlBHTSIKK3RoZW4gICAgTElOSz1ZRVMKK2ZpCisKK2lmIFsgIiR7TElOS30iIF0KK3RoZW4gICAgQ01EPSJDUlRTUlZQR00gU1JWUEdNKCR7VEFSR0VUTElCfS8ke1NSVlBHTX0pIgorICAgICAgICBDTUQ9IiR7Q01EfSBTUkNGSUxFKCR7VEFSR0VUTElCfS9UT09MUykgU1JDTUJSKEJORFNSQykiCisgICAgICAgIENNRD0iJHtDTUR9IE1PRFVMRSgke1RBUkdFVExJQn0vT1M0MDApIgorICAgICAgICBDTUQ9IiR7Q01EfSBCTkRESVIoJHtUQVJHRVRMSUJ9LyR7U1RBVEJORERJUn0pIgorICAgICAgICBDTUQ9IiR7Q01EfSBURVhUKCdaTElCICR7VkVSU0lPTn0gZHluYW1pYyBsaWJyYXJ5JykiCisgICAgICAgIENNRD0iJHtDTUR9IFRHVFJMUygke1RHVFJMU30pIgorICAgICAgICBzeXN0ZW0gIiR7Q01EfSIKKyAgICAgICAgTElOSz1ZRVMKKworICAgICAgICAjICAgICAgIER1cGxpY2F0ZSB0aGUgc2VydmljZSBwcm9ncmFtIGZvciBhIHZlcnNpb25lZCBiYWNrdXAuCisKKyAgICAgICAgQkFDS1VQPWBlY2hvICIke1NSVlBHTX0ke1ZFUlNJT059IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICBzZWQgLWUgJ3MvLipcKC4uLi4uLi4uLi5cKSQvXDEvJyAtZSAncy9cLi9fL2cnYAorICAgICAgICBCQUNLVVA9ImBkYjJfbmFtZSBcIiR7QkFDS1VQfVwiYCIKKyAgICAgICAgQktVUElGU05BTUU9IiR7TElCSUZTTkFNRX0vJHtCQUNLVVB9LlNSVlBHTSIKKyAgICAgICAgcm0gLWYgIiR7QktVUElGU05BTUV9IgorICAgICAgICBDTUQ9IkNSVERVUE9CSiBPQkooJHtTUlZQR019KSBGUk9NTElCKCR7VEFSR0VUTElCfSkiCisgICAgICAgIENNRD0iJHtDTUR9IE9CSlRZUEUoKlNSVlBHTSkgTkVXT0JKKCR7QkFDS1VQfSkiCisgICAgICAgIHN5c3RlbSAiJHtDTUR9IgorZmkKKworCisjICAgICAgIElmIG5lZWRlZCwgKHJlKWNyZWF0ZSB0aGUgZHluYW1pYyBiaW5kaW5nIGRpcmVjdG9yeS4KKworaWYgYWN0aW9uX25lZWRlZCAiJHtMSUJJRlNOQU1FfS8ke0RZTkJORERJUn0uQk5ERElSIgordGhlbiAgICBMSU5LPVlFUworZmkKKworaWYgWyAiJHtMSU5LfSIgXQordGhlbiAgICBybSAtcmYgIiR7TElCSUZTTkFNRX0vJHtEWU5CTkRESVJ9LkJORERJUiIKKyAgICAgICAgQ01EPSJDUlRCTkRESVIgQk5ERElSKCR7VEFSR0VUTElCfS8ke0RZTkJORERJUn0pIgorICAgICAgICBDTUQ9IiR7Q01EfSBURVhUKCdaTElCIGR5bmFtaWMgYmluZGluZyBkaXJlY3RvcnknKSIKKyAgICAgICAgc3lzdGVtICIke0NNRH0iCisgICAgICAgIENNRD0iQUREQk5ERElSRSBCTkRESVIoJHtUQVJHRVRMSUJ9LyR7RFlOQk5ERElSfSkiCisgICAgICAgIENNRD0iJHtDTUR9IE9CSigoKkxJQkwvJHtTUlZQR019ICpTUlZQR00pKSIKKyAgICAgICAgc3lzdGVtICIke0NNRH0iCitmaQpkaWZmIC0tZ2l0IGEvc3JjL29zNDAwL3psaWIuaW5jIGIvc3JjL29zNDAwL3psaWIuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkYTE1NmIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvb3M0MDAvemxpYi5pbmMKQEAgLTAsMCArMSw1MjcgQEAKKyAgICAgICogIFpMSUIuSU5DIC0gSW50ZXJmYWNlIHRvIHRoZSBnZW5lcmFsIHB1cnBvc2UgY29tcHJlc3Npb24gbGlicmFyeQorICAgICAgKgorICAgICAgKiAgSUxFIFJQRzQwMCB2ZXJzaW9uIGJ5IFBhdHJpY2sgTW9ubmVyYXQsIERBVEFTUEhFUkUuCisgICAgICAqICBWZXJzaW9uIDEuMi4xMgorICAgICAgKgorICAgICAgKgorICAgICAgKiAgV0FSTklORzoKKyAgICAgICogICAgIFByb2NlZHVyZXMgaW5mbGF0ZUluaXQoKSwgaW5mbGF0ZUluaXQyKCksIGRlZmxhdGVJbml0KCksCisgICAgICAqICAgICAgICAgZGVmbGF0ZUluaXQyKCkgYW5kIGluZmxhdGVCYWNrSW5pdCgpIG5lZWQgdG8gYmUgY2FsbGVkIHdpdGgKKyAgICAgICogICAgICAgICB0d28gYWRkaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAqICAgICAgICAgdGhlIHBhY2thZ2UgdmVyc2lvbiBzdHJpbmcgYW5kIHRoZSBzdHJlYW0gY29udHJvbCBzdHJ1Y3R1cmUuCisgICAgICAqICAgICAgICAgc2l6ZS4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBSUEcgbGFja3Mgc29tZSBtYWNybyBmZWF0dXJlLgorICAgICAgKiAgICAgICAgIENhbGwgdGhlc2UgcHJvY2VkdXJlcyBhczoKKyAgICAgICogICAgICAgICAgICAgaW5mbGF0ZUluaXQoLi4uOiBaTElCX1ZFUlNJT046ICVzaXplKHpfc3RyZWFtKSkKKyAgICAgICoKKyAgICAgIC9pZiBub3QgZGVmaW5lZChaTElCX0hfKQorICAgICAgL2RlZmluZSBaTElCX0hfCisgICAgICAqCisgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25zdGFudHMKKyAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAqCisgICAgICAqICBWZXJzaW9uaW5nIGluZm9ybWF0aW9uLgorICAgICAgKgorICAgICBEIFpMSUJfVkVSU0lPTiAgICBDICAgICAgICAgICAgICAgICAgICcxLjIuMTInCisgICAgIEQgWkxJQl9WRVJOVU0gICAgIEMgICAgICAgICAgICAgICAgICAgWCcxMmEwJworICAgICBEIFpMSUJfVkVSX01BSk9SICBDICAgICAgICAgICAgICAgICAgIDEKKyAgICAgRCBaTElCX1ZFUl9NSU5PUiAgQyAgICAgICAgICAgICAgICAgICAyCisgICAgIEQgWkxJQl9WRVJfUkVWSVNJT04uLi4KKyAgICAgRCAgICAgICAgICAgICAgICAgQyAgICAgICAgICAgICAgICAgICAxMgorICAgICBEIFpMSUJfVkVSX1NVQlJFVklTSU9OLi4uCisgICAgIEQgICAgICAgICAgICAgICAgIEMgICAgICAgICAgICAgICAgICAgMAorICAgICAgKgorICAgICAgKiAgT3RoZXIgZXF1YXRlcy4KKyAgICAgICoKKyAgICAgRCBaX05PX0ZMVVNIICAgICAgQyAgICAgICAgICAgICAgICAgICAwCisgICAgIEQgWl9QQVJUSUFMX0ZMVVNILi4uCisgICAgIEQgICAgICAgICAgICAgICAgIEMgICAgICAgICAgICAgICAgICAgMQorICAgICBEIFpfU1lOQ19GTFVTSCAgICBDICAgICAgICAgICAgICAgICAgIDIKKyAgICAgRCBaX0ZVTExfRkxVU0ggICAgQyAgICAgICAgICAgICAgICAgICAzCisgICAgIEQgWl9GSU5JU0ggICAgICAgIEMgICAgICAgICAgICAgICAgICAgNAorICAgICBEIFpfQkxPQ0sgICAgICAgICBDICAgICAgICAgICAgICAgICAgIDUKKyAgICAgRCBaX1RSRUVTICAgICAgICAgQyAgICAgICAgICAgICAgICAgICA2CisgICAgICAqCisgICAgIEQgWl9PSyAgICAgICAgICAgIEMgICAgICAgICAgICAgICAgICAgMAorICAgICBEIFpfU1RSRUFNX0VORCAgICBDICAgICAgICAgICAgICAgICAgIDEKKyAgICAgRCBaX05FRURfRElDVCAgICAgQyAgICAgICAgICAgICAgICAgICAyCisgICAgIEQgWl9FUlJOTyAgICAgICAgIEMgICAgICAgICAgICAgICAgICAgLTEKKyAgICAgRCBaX1NUUkVBTV9FUlJPUiAgQyAgICAgICAgICAgICAgICAgICAtMgorICAgICBEIFpfREFUQV9FUlJPUiAgICBDICAgICAgICAgICAgICAgICAgIC0zCisgICAgIEQgWl9NRU1fRVJST1IgICAgIEMgICAgICAgICAgICAgICAgICAgLTQKKyAgICAgRCBaX0JVRl9FUlJPUiAgICAgQyAgICAgICAgICAgICAgICAgICAtNQorICAgICBEIFpfVkVSU0lPTl9FUlJPUiBDICAgICAgICAgICAgICAgICAgIC02CisgICAgICAqCisgICAgIEQgWl9OT19DT01QUkVTU0lPTi4uLgorICAgICBEICAgICAgICAgICAgICAgICBDICAgICAgICAgICAgICAgICAgIDAKKyAgICAgRCBaX0JFU1RfU1BFRUQgICAgQyAgICAgICAgICAgICAgICAgICAxCisgICAgIEQgWl9CRVNUX0NPTVBSRVNTSU9OLi4uCisgICAgIEQgICAgICAgICAgICAgICAgIEMgICAgICAgICAgICAgICAgICAgOQorICAgICBEIFpfREVGQVVMVF9DT01QUkVTU0lPTi4uLgorICAgICBEICAgICAgICAgICAgICAgICBDICAgICAgICAgICAgICAgICAgIC0xCisgICAgICAqCisgICAgIEQgWl9GSUxURVJFRCAgICAgIEMgICAgICAgICAgICAgICAgICAgMQorICAgICBEIFpfSFVGRk1BTl9PTkxZICBDICAgICAgICAgICAgICAgICAgIDIKKyAgICAgRCBaX1JMRSAgICAgICAgICAgQyAgICAgICAgICAgICAgICAgICAzCisgICAgIEQgWl9ERUZBVUxUX1NUUkFURUdZLi4uCisgICAgIEQgICAgICAgICAgICAgICAgIEMgICAgICAgICAgICAgICAgICAgMAorICAgICAgKgorICAgICBEIFpfQklOQVJZICAgICAgICBDICAgICAgICAgICAgICAgICAgIDAKKyAgICAgRCBaX0FTQ0lJICAgICAgICAgQyAgICAgICAgICAgICAgICAgICAxCisgICAgIEQgWl9VTktOT1dOICAgICAgIEMgICAgICAgICAgICAgICAgICAgMgorICAgICAgKgorICAgICBEIFpfREVGTEFURUQgICAgICBDICAgICAgICAgICAgICAgICAgIDgKKyAgICAgICoKKyAgICAgRCBaX05VTEwgICAgICAgICAgQyAgICAgICAgICAgICAgICAgICAwCisgICAgICAqCisgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVzCisgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgKgorICAgICBEIHpfc3RyZWFtcCAgICAgICBTICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJlYW0gc3RydWN0IHB0cgorICAgICBEIGd6RmlsZSAgICAgICAgICBTICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWxlIHBvaW50ZXIKKyAgICAgRCBnel9oZWFkZXJwICAgICAgUyAgICAgICAgICAgICAgICoKKyAgICAgRCB6X29mZl90ICAgICAgICAgUyAgICAgICAgICAgICAxMGkgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyZWFtIG9mZnNldHMKKyAgICAgRCB6X29mZjY0X3QgICAgICAgUyAgICAgICAgICAgICAyMGkgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyZWFtIG9mZnNldHMKKyAgICAgICoKKyAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZXMKKyAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAqCisgICAgICAqICBUaGUgR1pJUCBlbmNvZGUvZGVjb2RlIHN0cmVhbSBzdXBwb3J0IHN0cnVjdHVyZS4KKyAgICAgICoKKyAgICAgRCB6X3N0cmVhbSAgICAgICAgRFMgICAgICAgICAgICAgICAgICBhbGlnbiBiYXNlZCh6X3N0cmVhbXApCisgICAgIEQgIHpzX25leHRfaW4gICAgICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5leHQgaW5wdXQgYnl0ZQorICAgICBEICB6c19hdmFpbF9pbiAgICAgICAgICAgICAgICAgIDEwVSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeXRlIGNudCBhdCBuZXh0X2luCisgICAgIEQgIHpzX3RvdGFsX2luICAgICAgICAgICAgICAgICAgMTBVIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvdGFsIGJ5dGVzIHJlYWQKKyAgICAgRCAgenNfbmV4dF9vdXQgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0IGJ1ZmZlciBwdHIKKyAgICAgRCAgenNfYXZhaWxfb3V0ICAgICAgICAgICAgICAgICAxMFUgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUm9vbSBsZWZ0IEAgbmV4dF9vdXQKKyAgICAgRCAgenNfdG90YWxfb3V0ICAgICAgICAgICAgICAgICAxMFUgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG90YWwgYnl0ZXMgd3JpdHRlbgorICAgICBEICB6c19tc2cgICAgICAgICAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXN0IGVycm1zZyBvciBudWxsCisgICAgIEQgIHpzX3N0YXRlICAgICAgICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsIHN0YXRlCisgICAgIEQgIHpzX3phbGxvYyAgICAgICAgICAgICAgICAgICAgICAqICAgcHJvY3B0ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludC4gc3RhdGUgYWxsb2NhdG9yCisgICAgIEQgIHpzX2ZyZWUgICAgICAgICAgICAgICAgICAgICAgICAqICAgcHJvY3B0ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludC4gc3RhdGUgZGVhbGxvYy4KKyAgICAgRCAgenNfb3BhcXVlICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpdmF0ZSBhbGxvYy4gZGF0YQorICAgICBEICB6c19kYXRhX3R5cGUgICAgICAgICAgICAgICAgIDEwaSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU0MvQklOIGJlc3QgZ3Vlc3MKKyAgICAgRCAgenNfYWRsZXIgICAgICAgICAgICAgICAgICAgICAxMHUgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVW5jb21wci4gYWRsZXIzMiB2YWwKKyAgICAgRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMFUgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQKKyAgICAgRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMFUgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHRyLiBhbGlnbm1lbnQKKyAgICAgICoKKyAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAqICAgICAgICAgICAgICAgICAgICAgVXRpbGl0eSBmdW5jdGlvbiBwcm90b3R5cGVzCisgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgKgorICAgICBEIGNvbXByZXNzICAgICAgICBQUiAgICAgICAgICAgIDEwSSAwIGV4dHByb2MoJ2NvbXByZXNzJykKKyAgICAgRCAgZGVzdCAgICAgICAgICAgICAgICAgICAgICA2NTUzNSAgICBvcHRpb25zKCp2YXJzaXplKSAgICAgICAgICAgICAgICAgICAgRGVzdGluYXRpb24gYnVmZmVyCisgICAgIEQgIGRlc3RMZW4gICAgICAgICAgICAgICAgICAgICAgMTBVIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc3RpbmF0aW9uIGxlbmd0aAorICAgICBEICBzb3VyY2UgICAgICAgICAgICAgICAgICAgIDY1NTM1ICAgIGNvbnN0IG9wdGlvbnMoKnZhcnNpemUpICAgICAgICAgICAgICBTb3VyY2UgYnVmZmVyCisgICAgIEQgIHNvdXJjZUxlbiAgICAgICAgICAgICAgICAgICAgMTB1IDAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZSBsZW5ndGgKKyAgICAgICoKKyAgICAgRCBjb21wcmVzczIgICAgICAgUFIgICAgICAgICAgICAxMEkgMCBleHRwcm9jKCdjb21wcmVzczInKQorICAgICBEICBkZXN0ICAgICAgICAgICAgICAgICAgICAgIDY1NTM1ICAgIG9wdGlvbnMoKnZhcnNpemUpICAgICAgICAgICAgICAgICAgICBEZXN0aW5hdGlvbiBidWZmZXIKKyAgICAgRCAgZGVzdExlbiAgICAgICAgICAgICAgICAgICAgICAxMFUgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzdGluYXRpb24gbGVuZ3RoCisgICAgIEQgIHNvdXJjZSAgICAgICAgICAgICAgICAgICAgNjU1MzUgICAgY29uc3Qgb3B0aW9ucygqdmFyc2l6ZSkgICAgICAgICAgICAgIFNvdXJjZSBidWZmZXIKKyAgICAgRCAgc291cmNlTGVuICAgICAgICAgICAgICAgICAgICAxMFUgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlIGxlbmd0aAorICAgICBEICBsZXZlbCAgICAgICAgICAgICAgICAgICAgICAgIDEwSSAwIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wcmVzc2lvbiBsZXZlbAorICAgICAgKgorICAgICBEIGNvbXByZXNzQm91bmQgICBQUiAgICAgICAgICAgIDEwVSAwIGV4dHByb2MoJ2NvbXByZXNzQm91bmQnKQorICAgICBEICBzb3VyY2VMZW4gICAgICAgICAgICAgICAgICAgIDEwVSAwIHZhbHVlCisgICAgICAqCisgICAgIEQgdW5jb21wcmVzcyAgICAgIFBSICAgICAgICAgICAgMTBJIDAgZXh0cHJvYygndW5jb21wcmVzcycpCisgICAgIEQgIGRlc3QgICAgICAgICAgICAgICAgICAgICAgNjU1MzUgICAgb3B0aW9ucygqdmFyc2l6ZSkgICAgICAgICAgICAgICAgICAgIERlc3RpbmF0aW9uIGJ1ZmZlcgorICAgICBEICBkZXN0TGVuICAgICAgICAgICAgICAgICAgICAgIDEwVSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXN0aW5hdGlvbiBsZW5ndGgKKyAgICAgRCAgc291cmNlICAgICAgICAgICAgICAgICAgICA2NTUzNSAgICBjb25zdCBvcHRpb25zKCp2YXJzaXplKSAgICAgICAgICAgICAgU291cmNlIGJ1ZmZlcgorICAgICBEICBzb3VyY2VMZW4gICAgICAgICAgICAgICAgICAgIDEwVSAwIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2UgbGVuZ3RoCisgICAgICAqCisgICAgIEQgdW5jb21wcmVzczIgICAgIFBSICAgICAgICAgICAgMTBJIDAgZXh0cHJvYygndW5jb21wcmVzczInKQorICAgICBEICBkZXN0ICAgICAgICAgICAgICAgICAgICAgIDY1NTM1ICAgIG9wdGlvbnMoKnZhcnNpemUpICAgICAgICAgICAgICAgICAgICBEZXN0aW5hdGlvbiBidWZmZXIKKyAgICAgRCAgZGVzdExlbiAgICAgICAgICAgICAgICAgICAgICAxMFUgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzdGluYXRpb24gbGVuZ3RoCisgICAgIEQgIHNvdXJjZSAgICAgICAgICAgICAgICAgICAgNjU1MzUgICAgY29uc3Qgb3B0aW9ucygqdmFyc2l6ZSkgICAgICAgICAgICAgIFNvdXJjZSBidWZmZXIKKyAgICAgRCAgc291cmNlTGVuICAgICAgICAgICAgICAgICAgICAxMFUgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlIGxlbmd0aAorICAgICAgKgorICAgICAgL2lmIG5vdCBkZWZpbmVkKExBUkdFX0ZJTEVTKQorICAgICBEIGd6b3BlbiAgICAgICAgICBQUiAgICAgICAgICAgICAgICAgIGV4dHByb2MoJ2d6b3BlbicpCisgICAgIEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZShnekZpbGUpCisgICAgIEQgIHBhdGggICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgdmFsdWUgb3B0aW9ucygqc3RyaW5nKSAgICAgICAgICAgICAgIEZpbGUgcGF0aG5hbWUKKyAgICAgRCAgbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICogICB2YWx1ZSBvcHRpb25zKCpzdHJpbmcpICAgICAgICAgICAgICAgT3BlbiBtb2RlCisgICAgICAvZWxzZQorICAgICBEIGd6b3BlbiAgICAgICAgICBQUiAgICAgICAgICAgICAgICAgIGV4dHByb2MoJ2d6b3BlbjY0JykKKyAgICAgRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKGd6RmlsZSkKKyAgICAgRCAgcGF0aCAgICAgICAgICAgICAgICAgICAgICAgICAgICogICB2YWx1ZSBvcHRpb25zKCpzdHJpbmcpICAgICAgICAgICAgICAgRmlsZSBwYXRobmFtZQorICAgICBEICBtb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHZhbHVlIG9wdGlvbnMoKnN0cmluZykgICAgICAgICAgICAgICBPcGVuIG1vZGUKKyAgICAgICoKKyAgICAgRCBnem9wZW42NCAgICAgICAgUFIgICAgICAgICAgICAgICAgICBleHRwcm9jKCdnem9wZW42NCcpCisgICAgIEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZShnekZpbGUpCisgICAgIEQgIHBhdGggICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgdmFsdWUgb3B0aW9ucygqc3RyaW5nKSAgICAgICAgICAgICAgIEZpbGUgcGF0aG5hbWUKKyAgICAgRCAgbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICogICB2YWx1ZSBvcHRpb25zKCpzdHJpbmcpICAgICAgICAgICAgICAgT3BlbiBtb2RlCisgICAgICAvZW5kaWYKKyAgICAgICoKKyAgICAgRCBnemRvcGVuICAgICAgICAgUFIgICAgICAgICAgICAgICAgICBleHRwcm9jKCdnemRvcGVuJykKKyAgICAgRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKGd6RmlsZSkKKyAgICAgRCAgZmQgICAgICAgICAgICAgICAgICAgICAgICAgICAxMEkgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsZSBkZXNjcmlwdG9yCisgICAgIEQgIG1vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgdmFsdWUgb3B0aW9ucygqc3RyaW5nKSAgICAgICAgICAgICAgIE9wZW4gbW9kZQorICAgICAgKgorICAgICBEIGd6YnVmZmVyICAgICAgICBQUiAgICAgICAgICAgIDEwSSAwIGV4dHByb2MoJ2d6YnVmZmVyJykKKyAgICAgRCAgZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBsaWtlKGd6RmlsZSkgICAgICAgICAgICAgICAgICAgRmlsZSBwb2ludGVyCisgICAgIEQgIHNpemUgICAgICAgICAgICAgICAgICAgICAgICAgMTBVIDAgdmFsdWUKKyAgICAgICoKKyAgICAgRCBnenNldHBhcmFtcyAgICAgUFIgICAgICAgICAgICAxMEkgMCBleHRwcm9jKCdnenNldHBhcmFtcycpCisgICAgIEQgIGZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgbGlrZShnekZpbGUpICAgICAgICAgICAgICAgICAgIEZpbGUgcG9pbnRlcgorICAgICBEICBsZXZlbCAgICAgICAgICAgICAgICAgICAgICAgIDEwSSAwIHZhbHVlCisgICAgIEQgIHN0cmF0ZWd5ICAgICAgICAgICAgICAgICAgICAgMTBJIDAgdmFsdWUKKyAgICAgICoKKyAgICAgRCBnenJlYWQgICAgICAgICAgUFIgICAgICAgICAgICAxMEkgMCBleHRwcm9jKCdnenJlYWQnKQorICAgICBEICBmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGxpa2UoZ3pGaWxlKSAgICAgICAgICAgICAgICAgICBGaWxlIHBvaW50ZXIKKyAgICAgRCAgYnVmICAgICAgICAgICAgICAgICAgICAgICA2NTUzNSAgICBvcHRpb25zKCp2YXJzaXplKSAgICAgICAgICAgICAgICAgICAgQnVmZmVyCisgICAgIEQgIGxlbiAgICAgICAgICAgICAgICAgICAgICAgICAgMTB1IDAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlciBsZW5ndGgKKyAgICAgICoKKyAgICAgRCBnemZyZWFkICAgICAgICAgIFBSICAgICAgICAgICAyMEkgMCBleHRwcm9jKCdnemZyZWFkJykKKyAgICAgRCAgYnVmICAgICAgICAgICAgICAgICAgICAgICA2NTUzNSAgICBvcHRpb25zKCp2YXJzaXplKSAgICAgICAgICAgICAgICAgICAgQnVmZmVyCisgICAgIEQgIHNpemUgICAgICAgICAgICAgICAgICAgICAgICAgMjB1IDAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlciBsZW5ndGgKKyAgICAgRCAgbml0ZW1zICAgICAgICAgICAgICAgICAgICAgICAyMHUgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVyIGxlbmd0aAorICAgICBEICBmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGxpa2UoZ3pGaWxlKSAgICAgICAgICAgICAgICAgICBGaWxlIHBvaW50ZXIKKyAgICAgICoKKyAgICAgRCBnendyaXRlICAgICAgICAgUFIgICAgICAgICAgICAxMEkgMCBleHRwcm9jKCdnendyaXRlJykKKyAgICAgRCAgZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBsaWtlKGd6RmlsZSkgICAgICAgICAgICAgICAgICAgRmlsZSBwb2ludGVyCisgICAgIEQgIGJ1ZiAgICAgICAgICAgICAgICAgICAgICAgNjU1MzUgICAgY29uc3Qgb3B0aW9ucygqdmFyc2l6ZSkgICAgICAgICAgICAgIEJ1ZmZlcgorICAgICBEICBsZW4gICAgICAgICAgICAgICAgICAgICAgICAgIDEwdSAwIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXIgbGVuZ3RoCisgICAgICAqCisgICAgIEQgZ3pmd3JpdGUgICAgICAgICBQUiAgICAgICAgICAgMjBJIDAgZXh0cHJvYygnZ3pmd3JpdGUnKQorICAgICBEICBidWYgICAgICAgICAgICAgICAgICAgICAgIDY1NTM1ICAgIG9wdGlvbnMoKnZhcnNpemUpICAgICAgICAgICAgICAgICAgICBCdWZmZXIKKyAgICAgRCAgc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAyMHUgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVyIGxlbmd0aAorICAgICBEICBuaXRlbXMgICAgICAgICAgICAgICAgICAgICAgIDIwdSAwIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXIgbGVuZ3RoCisgICAgIEQgIGZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgbGlrZShnekZpbGUpICAgICAgICAgICAgICAgICAgIEZpbGUgcG9pbnRlcgorICAgICAgKgorICAgICBEIGd6cHV0cyAgICAgICAgICBQUiAgICAgICAgICAgIDEwSSAwIGV4dHByb2MoJ2d6cHV0cycpCisgICAgIEQgIGZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgbGlrZShnekZpbGUpICAgICAgICAgICAgICAgICAgIEZpbGUgcG9pbnRlcgorICAgICBEICBzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHZhbHVlIG9wdGlvbnMoKnN0cmluZykgICAgICAgICAgICAgICBTdHJpbmcgdG8gb3V0cHV0CisgICAgICAqCisgICAgIEQgZ3pnZXRzICAgICAgICAgIFBSICAgICAgICAgICAgICAqICAgZXh0cHJvYygnZ3pnZXRzJykKKyAgICAgRCAgZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBsaWtlKGd6RmlsZSkgICAgICAgICAgICAgICAgICAgRmlsZSBwb2ludGVyCisgICAgIEQgIGJ1ZiAgICAgICAgICAgICAgICAgICAgICAgNjU1MzUgICAgb3B0aW9ucygqdmFyc2l6ZSkgICAgICAgICAgICAgICAgICAgIFJlYWQgYnVmZmVyCisgICAgIEQgIGxlbiAgICAgICAgICAgICAgICAgICAgICAgICAgMTBpIDAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlciBsZW5ndGgKKyAgICAgICoKKyAgICAgRCBnenB1dGMgICAgICAgICAgUFIgICAgICAgICAgICAxMGkgMCBleHRwcm9jKCdnenB1dGMnKQorICAgICBEICBmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGxpa2UoZ3pGaWxlKSAgICAgICAgICAgICAgICAgICBGaWxlIHBvaW50ZXIKKyAgICAgRCAgYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMEkgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcmFjdGVyIHRvIHdyaXRlCisgICAgICAqCisgICAgIEQgZ3pnZXRjICAgICAgICAgIFBSICAgICAgICAgICAgMTBpIDAgZXh0cHJvYygnZ3pnZXRjJykKKyAgICAgRCAgZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBsaWtlKGd6RmlsZSkgICAgICAgICAgICAgICAgICAgRmlsZSBwb2ludGVyCisgICAgICAqCisgICAgIEQgZ3pnZXRjXyAgICAgICAgIFBSICAgICAgICAgICAgMTBpIDAgZXh0cHJvYygnZ3pnZXRjXycpCisgICAgIEQgIGZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgbGlrZShnekZpbGUpICAgICAgICAgICAgICAgICAgIEZpbGUgcG9pbnRlcgorICAgICAgKgorICAgICBEIGd6dW5nZXRjICAgICAgICBQUiAgICAgICAgICAgIDEwaSAwIGV4dHByb2MoJ2d6dW5nZXRjJykKKyAgICAgRCAgYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMEkgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcmFjdGVyIHRvIHB1c2gKKyAgICAgRCAgZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBsaWtlKGd6RmlsZSkgICAgICAgICAgICAgICAgICAgRmlsZSBwb2ludGVyCisgICAgICAqCisgICAgIEQgZ3pmbHVzaCAgICAgICAgIFBSICAgICAgICAgICAgMTBpIDAgZXh0cHJvYygnZ3pmbHVzaCcpCisgICAgIEQgIGZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgbGlrZShnekZpbGUpICAgICAgICAgICAgICAgICAgIEZpbGUgcG9pbnRlcgorICAgICBEICBmbHVzaCAgICAgICAgICAgICAgICAgICAgICAgIDEwSSAwIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlIG9mIGZsdXNoCisgICAgICAqCisgICAgICAvaWYgbm90IGRlZmluZWQoTEFSR0VfRklMRVMpCisgICAgIEQgZ3pzZWVrICAgICAgICAgIFBSICAgICAgICAgICAgICAgICAgZXh0cHJvYygnZ3pzZWVrJykKKyAgICAgRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKHpfb2ZmX3QpCisgICAgIEQgIGZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgbGlrZShnekZpbGUpICAgICAgICAgICAgICAgICAgIEZpbGUgcG9pbnRlcgorICAgICBEICBvZmZzZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGxpa2Uoel9vZmZfdCkgICAgICAgICAgICAgICAgICBPZmZzZXQKKyAgICAgRCAgd2hlbmNlICAgICAgICAgICAgICAgICAgICAgICAxMGkgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JpZ2luCisgICAgICAvZWxzZQorICAgICBEIGd6c2VlayAgICAgICAgICBQUiAgICAgICAgICAgICAgICAgIGV4dHByb2MoJ2d6c2VlazY0JykKKyAgICAgRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKHpfb2ZmX3QpCisgICAgIEQgIGZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgbGlrZShnekZpbGUpICAgICAgICAgICAgICAgICAgIEZpbGUgcG9pbnRlcgorICAgICBEICBvZmZzZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGxpa2Uoel9vZmZfdCkgICAgICAgICAgICAgICAgICBPZmZzZXQKKyAgICAgRCAgd2hlbmNlICAgICAgICAgICAgICAgICAgICAgICAxMGkgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JpZ2luCisgICAgICAqCisgICAgIEQgZ3pzZWVrNjQgICAgICAgIFBSICAgICAgICAgICAgICAgICAgZXh0cHJvYygnZ3pzZWVrNjQnKQorICAgICBEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2Uoel9vZmY2NF90KQorICAgICBEICBmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGxpa2UoZ3pGaWxlKSAgICAgICAgICAgICAgICAgICBGaWxlIHBvaW50ZXIKKyAgICAgRCAgb2Zmc2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBsaWtlKHpfb2ZmNjRfdCkgICAgICAgICAgICAgICAgT2Zmc2V0CisgICAgIEQgIHdoZW5jZSAgICAgICAgICAgICAgICAgICAgICAgMTBpIDAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yaWdpbgorICAgICAgL2VuZGlmCisgICAgICAqCisgICAgIEQgZ3pyZXdpbmQgICAgICAgIFBSICAgICAgICAgICAgMTBpIDAgZXh0cHJvYygnZ3pyZXdpbmQnKQorICAgICBEICBmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGxpa2UoZ3pGaWxlKSAgICAgICAgICAgICAgICAgICBGaWxlIHBvaW50ZXIKKyAgICAgICoKKyAgICAgIC9pZiBub3QgZGVmaW5lZChMQVJHRV9GSUxFUykKKyAgICAgRCBnenRlbGwgICAgICAgICAgUFIgICAgICAgICAgICAgICAgICBleHRwcm9jKCdnenRlbGwnKQorICAgICBEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2Uoel9vZmZfdCkKKyAgICAgRCAgZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBsaWtlKGd6RmlsZSkgICAgICAgICAgICAgICAgICAgRmlsZSBwb2ludGVyCisgICAgICAvZWxzZQorICAgICBEIGd6dGVsbCAgICAgICAgICBQUiAgICAgICAgICAgICAgICAgIGV4dHByb2MoJ2d6dGVsbDY0JykKKyAgICAgRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKHpfb2ZmX3QpCisgICAgIEQgIGZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgbGlrZShnekZpbGUpICAgICAgICAgICAgICAgICAgIEZpbGUgcG9pbnRlcgorICAgICAgKgorICAgICBEIGd6dGVsbDY0ICAgICAgICBQUiAgICAgICAgICAgICAgICAgIGV4dHByb2MoJ2d6dGVsbDY0JykKKyAgICAgRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKHpfb2ZmNjRfdCkKKyAgICAgRCAgZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBsaWtlKGd6RmlsZSkgICAgICAgICAgICAgICAgICAgRmlsZSBwb2ludGVyCisgICAgICAvZW5kaWYKKyAgICAgICoKKyAgICAgIC9pZiBub3QgZGVmaW5lZChMQVJHRV9GSUxFUykKKyAgICAgRCBnem9mZnNldCAgICAgICAgUFIgICAgICAgICAgICAgICAgICBleHRwcm9jKCdnem9mZnNldCcpCisgICAgIEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSh6X29mZl90KQorICAgICBEICBmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGxpa2UoZ3pGaWxlKSAgICAgICAgICAgICAgICAgICBGaWxlIHBvaW50ZXIKKyAgICAgIC9lbHNlCisgICAgIEQgZ3pvZmZzZXQgICAgICAgIFBSICAgICAgICAgICAgICAgICAgZXh0cHJvYygnZ3pvZmZzZXQ2NCcpCisgICAgIEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSh6X29mZl90KQorICAgICBEICBmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGxpa2UoZ3pGaWxlKSAgICAgICAgICAgICAgICAgICBGaWxlIHBvaW50ZXIKKyAgICAgICoKKyAgICAgRCBnem9mZnNldDY0ICAgICAgUFIgICAgICAgICAgICAgICAgICBleHRwcm9jKCdnem9mZnNldDY0JykKKyAgICAgRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKHpfb2ZmNjRfdCkKKyAgICAgRCAgZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBsaWtlKGd6RmlsZSkgICAgICAgICAgICAgICAgICAgRmlsZSBwb2ludGVyCisgICAgICAvZW5kaWYKKyAgICAgICoKKyAgICAgRCBnemVvZiAgICAgICAgICAgUFIgICAgICAgICAgICAxMGkgMCBleHRwcm9jKCdnemVvZicpCisgICAgIEQgIGZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgbGlrZShnekZpbGUpICAgICAgICAgICAgICAgICAgIEZpbGUgcG9pbnRlcgorICAgICAgKgorICAgICBEIGd6ZGlyZWN0ICAgICAgICBQUiAgICAgICAgICAgIDEwaSAwIGV4dHByb2MoJ2d6ZGlyZWN0JykKKyAgICAgRCAgZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBsaWtlKGd6RmlsZSkgICAgICAgICAgICAgICAgICAgRmlsZSBwb2ludGVyCisgICAgICAqCisgICAgIEQgZ3pjbG9zZV9yICAgICAgIFBSICAgICAgICAgICAgMTBpIDAgZXh0cHJvYygnZ3pjbG9zZV9yJykKKyAgICAgRCAgZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBsaWtlKGd6RmlsZSkgICAgICAgICAgICAgICAgICAgRmlsZSBwb2ludGVyCisgICAgICAqCisgICAgIEQgZ3pjbG9zZV93ICAgICAgIFBSICAgICAgICAgICAgMTBpIDAgZXh0cHJvYygnZ3pjbG9zZV93JykKKyAgICAgRCAgZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBsaWtlKGd6RmlsZSkgICAgICAgICAgICAgICAgICAgRmlsZSBwb2ludGVyCisgICAgICAqCisgICAgIEQgZ3pjbG9zZSAgICAgICAgIFBSICAgICAgICAgICAgMTBpIDAgZXh0cHJvYygnZ3pjbG9zZScpCisgICAgIEQgIGZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgbGlrZShnekZpbGUpICAgICAgICAgICAgICAgICAgIEZpbGUgcG9pbnRlcgorICAgICAgKgorICAgICBEIGd6ZXJyb3IgICAgICAgICBQUiAgICAgICAgICAgICAgKiAgIGV4dHByb2MoJ2d6ZXJyb3InKSAgICAgICAgICAgICAgICAgICBFcnJvciBzdHJpbmcKKyAgICAgRCAgZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBsaWtlKGd6RmlsZSkgICAgICAgICAgICAgICAgICAgRmlsZSBwb2ludGVyCisgICAgIEQgIGVycm51bSAgICAgICAgICAgICAgICAgICAgICAgMTBJIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVycm9yIGNvZGUKKyAgICAgICoKKyAgICAgRCBnemNsZWFyZXJyICAgICAgUFIgICAgICAgICAgICAgICAgICBleHRwcm9jKCdnemNsZWFyZXJyJykKKyAgICAgRCAgZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBsaWtlKGd6RmlsZSkgICAgICAgICAgICAgICAgICAgRmlsZSBwb2ludGVyCisgICAgICAqCisgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIEJhc2ljIGZ1bmN0aW9uIHByb3RvdHlwZXMKKyAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAqCisgICAgIEQgemxpYlZlcnNpb24gICAgIFBSICAgICAgICAgICAgICAqICAgZXh0cHJvYygnemxpYlZlcnNpb24nKSAgICAgICAgICAgICAgIFZlcnNpb24gc3RyaW5nCisgICAgICAqCisgICAgIEQgZGVmbGF0ZUluaXQgICAgIFBSICAgICAgICAgICAgMTBJIDAgZXh0cHJvYygnZGVmbGF0ZUluaXRfJykgICAgICAgICAgICAgIEluaXQuIGNvbXByZXNzaW9uCisgICAgIEQgIHN0cm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSh6X3N0cmVhbSkgICAgICAgICAgICAgICAgICAgICAgIENvbXByZXNzaW9uIHN0cmVhbQorICAgICBEICBsZXZlbCAgICAgICAgICAgICAgICAgICAgICAgIDEwSSAwIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wcmVzc2lvbiBsZXZlbAorICAgICBEICB2ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHZhbHVlIG9wdGlvbnMoKnN0cmluZykgICAgICAgICAgICAgICBWZXJzaW9uIHN0cmluZworICAgICBEICBzdHJlYW1fc2l6ZSAgICAgICAgICAgICAgICAgIDEwaSAwIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJlYW0gc3RydWN0LiBzaXplCisgICAgICAqCisgICAgIEQgZGVmbGF0ZSAgICAgICAgIFBSICAgICAgICAgICAgMTBJIDAgZXh0cHJvYygnZGVmbGF0ZScpICAgICAgICAgICAgICAgICAgIENvbXByZXNzIGRhdGEKKyAgICAgRCAgc3RybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKHpfc3RyZWFtKSAgICAgICAgICAgICAgICAgICAgICAgQ29tcHJlc3Npb24gc3RyZWFtCisgICAgIEQgIGZsdXNoICAgICAgICAgICAgICAgICAgICAgICAgMTBJIDAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsdXNoIHR5cGUgcmVxdWlyZWQKKyAgICAgICoKKyAgICAgRCBkZWZsYXRlRW5kICAgICAgUFIgICAgICAgICAgICAxMEkgMCBleHRwcm9jKCdkZWZsYXRlRW5kJykgICAgICAgICAgICAgICAgVGVybWluLiBjb21wcmVzc2lvbgorICAgICBEICBzdHJtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2Uoel9zdHJlYW0pICAgICAgICAgICAgICAgICAgICAgICBDb21wcmVzc2lvbiBzdHJlYW0KKyAgICAgICoKKyAgICAgRCBpbmZsYXRlSW5pdCAgICAgUFIgICAgICAgICAgICAxMEkgMCBleHRwcm9jKCdpbmZsYXRlSW5pdF8nKSAgICAgICAgICAgICAgSW5pdC4gZXhwYW5zaW9uCisgICAgIEQgIHN0cm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSh6X3N0cmVhbSkgICAgICAgICAgICAgICAgICAgICAgIEV4cGFuc2lvbiBzdHJlYW0KKyAgICAgRCAgdmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICogICB2YWx1ZSBvcHRpb25zKCpzdHJpbmcpICAgICAgICAgICAgICAgVmVyc2lvbiBzdHJpbmcKKyAgICAgRCAgc3RyZWFtX3NpemUgICAgICAgICAgICAgICAgICAxMGkgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyZWFtIHN0cnVjdC4gc2l6ZQorICAgICAgKgorICAgICBEIGluZmxhdGUgICAgICAgICBQUiAgICAgICAgICAgIDEwSSAwIGV4dHByb2MoJ2luZmxhdGUnKSAgICAgICAgICAgICAgICAgICBFeHBhbmQgZGF0YQorICAgICBEICBzdHJtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2Uoel9zdHJlYW0pICAgICAgICAgICAgICAgICAgICAgICBFeHBhbnNpb24gc3RyZWFtCisgICAgIEQgIGZsdXNoICAgICAgICAgICAgICAgICAgICAgICAgMTBJIDAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsdXNoIHR5cGUgcmVxdWlyZWQKKyAgICAgICoKKyAgICAgRCBpbmZsYXRlRW5kICAgICAgUFIgICAgICAgICAgICAxMEkgMCBleHRwcm9jKCdpbmZsYXRlRW5kJykgICAgICAgICAgICAgICAgVGVybWluLiBleHBhbnNpb24KKyAgICAgRCAgc3RybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKHpfc3RyZWFtKSAgICAgICAgICAgICAgICAgICAgICAgRXhwYW5zaW9uIHN0cmVhbQorICAgICAgKgorICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICogICAgICAgICAgICAgICAgICAgICAgICBBZHZhbmNlZCBmdW5jdGlvbiBwcm90b3R5cGVzCisgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgKgorICAgICBEIGRlZmxhdGVJbml0MiAgICBQUiAgICAgICAgICAgIDEwSSAwIGV4dHByb2MoJ2RlZmxhdGVJbml0Ml8nKSAgICAgICAgICAgICBJbml0LiBjb21wcmVzc2lvbgorICAgICBEICBzdHJtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2Uoel9zdHJlYW0pICAgICAgICAgICAgICAgICAgICAgICBDb21wcmVzc2lvbiBzdHJlYW0KKyAgICAgRCAgbGV2ZWwgICAgICAgICAgICAgICAgICAgICAgICAxMEkgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcHJlc3Npb24gbGV2ZWwKKyAgICAgRCAgbWV0aG9kICAgICAgICAgICAgICAgICAgICAgICAxMEkgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcHJlc3Npb24gbWV0aG9kCisgICAgIEQgIHdpbmRvd0JpdHMgICAgICAgICAgICAgICAgICAgMTBJIDAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZzIod2luZG93IHNpemUpCisgICAgIEQgIG1lbUxldmVsICAgICAgICAgICAgICAgICAgICAgMTBJIDAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lbS9jbXByZXNzIHRyYWRlb2ZmCisgICAgIEQgIHN0cmF0ZWd5ICAgICAgICAgICAgICAgICAgICAgMTBJIDAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXByZXNzaW9uIHN0cmF0ZWd5CisgICAgIEQgIHZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAqICAgdmFsdWUgb3B0aW9ucygqc3RyaW5nKSAgICAgICAgICAgICAgIFZlcnNpb24gc3RyaW5nCisgICAgIEQgIHN0cmVhbV9zaXplICAgICAgICAgICAgICAgICAgMTBpIDAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmVhbSBzdHJ1Y3QuIHNpemUKKyAgICAgICoKKyAgICAgRCBkZWZsYXRlU2V0RGljdGlvbmFyeS4uLgorICAgICBEICAgICAgICAgICAgICAgICBQUiAgICAgICAgICAgIDEwSSAwIGV4dHByb2MoJ2RlZmxhdGVTZXREaWN0aW9uYXJ5JykgICAgICBJbml0LiBkaWN0aW9uYXJ5CisgICAgIEQgIHN0cm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSh6X3N0cmVhbSkgICAgICAgICAgICAgICAgICAgICAgIENvbXByZXNzaW9uIHN0cmVhbQorICAgICBEICBkaWN0aW9uYXJ5ICAgICAgICAgICAgICAgIDY1NTM1ICAgIGNvbnN0IG9wdGlvbnMoKnZhcnNpemUpICAgICAgICAgICAgICBEaWN0aW9uYXJ5IGJ5dGVzCisgICAgIEQgIGRpY3RMZW5ndGggICAgICAgICAgICAgICAgICAgMTBVIDAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpY3Rpb25hcnkgbGVuZ3RoCisgICAgICAqCisgICAgIEQgZGVmbGF0ZUNvcHkgICAgIFBSICAgICAgICAgICAgMTBJIDAgZXh0cHJvYygnZGVmbGF0ZUNvcHknKSAgICAgICAgICAgICAgIENvbXByZXNzIHN0cm0gMiBzdHJtCisgICAgIEQgIGRlc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSh6X3N0cmVhbSkgICAgICAgICAgICAgICAgICAgICAgIERlc3RpbmF0aW9uIHN0cmVhbQorICAgICBEICBzb3VyY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2Uoel9zdHJlYW0pICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2Ugc3RyZWFtCisgICAgICAqCisgICAgIEQgZGVmbGF0ZVJlc2V0ICAgIFBSICAgICAgICAgICAgMTBJIDAgZXh0cHJvYygnZGVmbGF0ZVJlc2V0JykgICAgICAgICAgICAgIEVuZCBhbmQgaW5pdC4gc3RyZWFtCisgICAgIEQgIHN0cm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSh6X3N0cmVhbSkgICAgICAgICAgICAgICAgICAgICAgIENvbXByZXNzaW9uIHN0cmVhbQorICAgICAgKgorICAgICBEIGRlZmxhdGVQYXJhbXMgICBQUiAgICAgICAgICAgIDEwSSAwIGV4dHByb2MoJ2RlZmxhdGVQYXJhbXMnKSAgICAgICAgICAgICBDaGFuZ2UgbGV2ZWwgJiBzdHJhdAorICAgICBEICBzdHJtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2Uoel9zdHJlYW0pICAgICAgICAgICAgICAgICAgICAgICBDb21wcmVzc2lvbiBzdHJlYW0KKyAgICAgRCAgbGV2ZWwgICAgICAgICAgICAgICAgICAgICAgICAxMEkgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcHJlc3Npb24gbGV2ZWwKKyAgICAgRCAgc3RyYXRlZ3kgICAgICAgICAgICAgICAgICAgICAxMEkgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcHJlc3Npb24gc3RyYXRlZ3kKKyAgICAgICoKKyAgICAgRCBkZWZsYXRlVHVuZSAgICAgUFIgICAgICAgICAgICAxMEkgMCBleHRwcm9jKCdkZWZsYXRlVHVuZScpCisgICAgIEQgIHN0cm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSh6X3N0cmVhbSkgICAgICAgICAgICAgICAgICAgICAgIENvbXByZXNzaW9uIHN0cmVhbQorICAgICBEICBnb29kICAgICAgICAgICAgICAgICAgICAgICAgIDEwSSAwIHZhbHVlCisgICAgIEQgIGxhenkgICAgICAgICAgICAgICAgICAgICAgICAgMTBJIDAgdmFsdWUKKyAgICAgRCAgbmljZSAgICAgICAgICAgICAgICAgICAgICAgICAxMEkgMCB2YWx1ZQorICAgICBEICBjaGFpbiAgICAgICAgICAgICAgICAgICAgICAgIDEwSSAwIHZhbHVlCisgICAgICAqCisgICAgIEQgZGVmbGF0ZUJvdW5kICAgIFBSICAgICAgICAgICAgMTBVIDAgZXh0cHJvYygnZGVmbGF0ZUJvdW5kJykgICAgICAgICAgICAgIENoYW5nZSBsZXZlbCAmIHN0cmF0CisgICAgIEQgIHN0cm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSh6X3N0cmVhbSkgICAgICAgICAgICAgICAgICAgICAgIENvbXByZXNzaW9uIHN0cmVhbQorICAgICBEICBzb3VyY2VsZW4gICAgICAgICAgICAgICAgICAgIDEwVSAwIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wcmVzc2lvbiBsZXZlbAorICAgICAgKgorICAgICBEIGRlZmxhdGVQZW5kaW5nICBQUiAgICAgICAgICAgIDEwSSAwIGV4dHByb2MoJ2RlZmxhdGVQZW5kaW5nJykgICAgICAgICAgICBDaGFuZ2UgbGV2ZWwgJiBzdHJhdAorICAgICBEICBzdHJtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2Uoel9zdHJlYW0pICAgICAgICAgICAgICAgICAgICAgICBDb21wcmVzc2lvbiBzdHJlYW0KKyAgICAgRCAgcGVuZGluZyAgICAgICAgICAgICAgICAgICAgICAxMFUgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGVuZGluZyBieXRlcworICAgICBEICBiaXRzICAgICAgICAgICAgICAgICAgICAgICAgIDEwSSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQZW5kaW5nIGJpdHMKKyAgICAgICoKKyAgICAgRCBkZWZsYXRlUHJpbWUgICAgUFIgICAgICAgICAgICAxMEkgMCBleHRwcm9jKCdkZWZsYXRlUHJpbWUnKSAgICAgICAgICAgICAgQ2hhbmdlIGxldmVsICYgc3RyYXQKKyAgICAgRCAgc3RybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKHpfc3RyZWFtKSAgICAgICAgICAgICAgICAgICAgICAgQ29tcHJlc3Npb24gc3RyZWFtCisgICAgIEQgIGJpdHMgICAgICAgICAgICAgICAgICAgICAgICAgMTBJIDAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgb2YgYml0cyB0byBpbnNlcnQKKyAgICAgRCAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAxMEkgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0cyB0byBpbnNlcnQKKyAgICAgICoKKyAgICAgRCBpbmZsYXRlSW5pdDIgICAgUFIgICAgICAgICAgICAxMEkgMCBleHRwcm9jKCdpbmZsYXRlSW5pdDJfJykgICAgICAgICAgICAgSW5pdC4gZXhwYW5zaW9uCisgICAgIEQgIHN0cm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSh6X3N0cmVhbSkgICAgICAgICAgICAgICAgICAgICAgIEV4cGFuc2lvbiBzdHJlYW0KKyAgICAgRCAgd2luZG93Qml0cyAgICAgICAgICAgICAgICAgICAxMEkgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nMih3aW5kb3cgc2l6ZSkKKyAgICAgRCAgdmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICogICB2YWx1ZSBvcHRpb25zKCpzdHJpbmcpICAgICAgICAgICAgICAgVmVyc2lvbiBzdHJpbmcKKyAgICAgRCAgc3RyZWFtX3NpemUgICAgICAgICAgICAgICAgICAxMGkgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyZWFtIHN0cnVjdC4gc2l6ZQorICAgICAgKgorICAgICBEIGluZmxhdGVTZXREaWN0aW9uYXJ5Li4uCisgICAgIEQgICAgICAgICAgICAgICAgIFBSICAgICAgICAgICAgMTBJIDAgZXh0cHJvYygnaW5mbGF0ZVNldERpY3Rpb25hcnknKSAgICAgIEluaXQuIGRpY3Rpb25hcnkKKyAgICAgRCAgc3RybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKHpfc3RyZWFtKSAgICAgICAgICAgICAgICAgICAgICAgRXhwYW5zaW9uIHN0cmVhbQorICAgICBEICBkaWN0aW9uYXJ5ICAgICAgICAgICAgICAgIDY1NTM1ICAgIGNvbnN0IG9wdGlvbnMoKnZhcnNpemUpICAgICAgICAgICAgICBEaWN0aW9uYXJ5IGJ5dGVzCisgICAgIEQgIGRpY3RMZW5ndGggICAgICAgICAgICAgICAgICAgMTBVIDAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpY3Rpb25hcnkgbGVuZ3RoCisgICAgICAqCisgICAgIEQgaW5mbGF0ZUdldERpY3Rpb25hcnkuLi4KKyAgICAgRCAgICAgICAgICAgICAgICAgUFIgICAgICAgICAgICAxMEkgMCBleHRwcm9jKCdpbmZsYXRlR2V0RGljdGlvbmFyeScpICAgICAgR2V0IGRpY3Rpb25hcnkKKyAgICAgRCAgc3RybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKHpfc3RyZWFtKSAgICAgICAgICAgICAgICAgICAgICAgRXhwYW5zaW9uIHN0cmVhbQorICAgICBEICBkaWN0aW9uYXJ5ICAgICAgICAgICAgICAgIDY1NTM1ICAgIG9wdGlvbnMoKnZhcnNpemUpICAgICAgICAgICAgICAgICAgICBEaWN0aW9uYXJ5IGJ5dGVzCisgICAgIEQgIGRpY3RMZW5ndGggICAgICAgICAgICAgICAgICAgMTBVIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpY3Rpb25hcnkgbGVuZ3RoCisgICAgICAqCisgICAgIEQgZGVmbGF0ZUdldERpY3Rpb25hcnkuLi4KKyAgICAgRCAgICAgICAgICAgICAgICAgUFIgICAgICAgICAgICAxMEkgMCBleHRwcm9jKCdkZWZsYXRlR2V0RGljdGlvbmFyeScpICAgICAgR2V0IGRpY3Rpb25hcnkKKyAgICAgRCAgc3RybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKHpfc3RyZWFtKSAgICAgICAgICAgICAgICAgICAgICAgRXhwYW5zaW9uIHN0cmVhbQorICAgICBEICBkaWN0aW9uYXJ5ICAgICAgICAgICAgICAgIDY1NTM1ICAgIG9wdGlvbnMoKnZhcnNpemUpICAgICAgICAgICAgICAgICAgICBEaWN0aW9uYXJ5IGJ5dGVzCisgICAgIEQgIGRpY3RMZW5ndGggICAgICAgICAgICAgICAgICAgMTBVIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpY3Rpb25hcnkgbGVuZ3RoCisgICAgICAqCisgICAgIEQgaW5mbGF0ZVN5bmMgICAgIFBSICAgICAgICAgICAgMTBJIDAgZXh0cHJvYygnaW5mbGF0ZVN5bmMnKSAgICAgICAgICAgICAgIFN5bmMuIGV4cGFuc2lvbgorICAgICBEICBzdHJtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2Uoel9zdHJlYW0pICAgICAgICAgICAgICAgICAgICAgICBFeHBhbnNpb24gc3RyZWFtCisgICAgICAqCisgICAgIEQgaW5mbGF0ZUNvcHkgICAgIFBSICAgICAgICAgICAgMTBJIDAgZXh0cHJvYygnaW5mbGF0ZUNvcHknKQorICAgICBEICBkZXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2Uoel9zdHJlYW0pICAgICAgICAgICAgICAgICAgICAgICBEZXN0aW5hdGlvbiBzdHJlYW0KKyAgICAgRCAgc291cmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKHpfc3RyZWFtKSAgICAgICAgICAgICAgICAgICAgICAgU291cmNlIHN0cmVhbQorICAgICAgKgorICAgICBEIGluZmxhdGVSZXNldCAgICBQUiAgICAgICAgICAgIDEwSSAwIGV4dHByb2MoJ2luZmxhdGVSZXNldCcpICAgICAgICAgICAgICBFbmQgYW5kIGluaXQuIHN0cmVhbQorICAgICBEICBzdHJtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2Uoel9zdHJlYW0pICAgICAgICAgICAgICAgICAgICAgICBFeHBhbnNpb24gc3RyZWFtCisgICAgICAqCisgICAgIEQgaW5mbGF0ZVJlc2V0MiAgIFBSICAgICAgICAgICAgMTBJIDAgZXh0cHJvYygnaW5mbGF0ZVJlc2V0MicpICAgICAgICAgICAgIEVuZCBhbmQgaW5pdC4gc3RyZWFtCisgICAgIEQgIHN0cm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSh6X3N0cmVhbSkgICAgICAgICAgICAgICAgICAgICAgIEV4cGFuc2lvbiBzdHJlYW0KKyAgICAgRCAgd2luZG93Qml0cyAgICAgICAgICAgICAgICAgICAxMEkgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nMihidWZmZXIgc2l6ZSkKKyAgICAgICoKKyAgICAgRCBpbmZsYXRlUHJpbWUgICAgUFIgICAgICAgICAgICAxMEkgMCBleHRwcm9jKCdpbmZsYXRlUHJpbWUnKSAgICAgICAgICAgICAgSW5zZXJ0IGJpdHMKKyAgICAgRCAgc3RybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKHpfc3RyZWFtKSAgICAgICAgICAgICAgICAgICAgICAgRXhwYW5zaW9uIHN0cmVhbQorICAgICBEICBiaXRzICAgICAgICAgICAgICAgICAgICAgICAgIDEwSSAwIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaXQgY291bnQKKyAgICAgRCAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAxMEkgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0cyB0byBpbnNlcnQKKyAgICAgICoKKyAgICAgRCBpbmZsYXRlTWFyayAgICAgUFIgICAgICAgICAgICAxMEkgMCBleHRwcm9jKCdpbmZsYXRlTWFyaycpICAgICAgICAgICAgICAgR2V0IGluZmxhdGUgaW5mbworICAgICBEICBzdHJtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2Uoel9zdHJlYW0pICAgICAgICAgICAgICAgICAgICAgICBFeHBhbnNpb24gc3RyZWFtCisgICAgICAqCisgICAgIEQgaW5mbGF0ZUNvZGVzVXNlZC4uLgorICAgICAgICAgICAgICAgICAgICAgICBQUiAgICAgICAgICAgIDIwVSAwIGV4dHByb2MoJ2luZmxhdGVDb2Rlc1VzZWQnKQorICAgICBEICBzdHJtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2Uoel9zdHJlYW0pICAgICAgICAgICAgICAgICAgICAgICBFeHBhbnNpb24gc3RyZWFtCisgICAgICAqCisgICAgIEQgaW5mbGF0ZVZhbGlkYXRlLi4uCisgICAgICAgICAgICAgICAgICAgICAgIFBSICAgICAgICAgICAgMjBVIDAgZXh0cHJvYygnaW5mbGF0ZVZhbGlkYXRlJykKKyAgICAgRCAgc3RybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKHpfc3RyZWFtKSAgICAgICAgICAgICAgICAgICAgICAgRXhwYW5zaW9uIHN0cmVhbQorICAgICBEICBjaGVjayAgICAgICAgICAgICAgICAgICAgICAgIDEwSSAwIHZhbHVlCisgICAgICAqCisgICAgIEQgaW5mbGF0ZUdldEhlYWRlci4uLgorICAgICAgICAgICAgICAgICAgICAgICBQUiAgICAgICAgICAgIDEwVSAwIGV4dHByb2MoJ2luZmxhdGVHZXRIZWFkZXInKQorICAgICBEICBzdHJtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2Uoel9zdHJlYW0pICAgICAgICAgICAgICAgICAgICAgICBFeHBhbnNpb24gc3RyZWFtCisgICAgIEQgIGhlYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZShnel9oZWFkZXJwKQorICAgICAgKgorICAgICBEIGRlZmxhdGVTZXRIZWFkZXIuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgUFIgICAgICAgICAgICAxMFUgMCBleHRwcm9jKCdkZWZsYXRlU2V0SGVhZGVyJykKKyAgICAgRCAgc3RybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKHpfc3RyZWFtKSAgICAgICAgICAgICAgICAgICAgICAgRXhwYW5zaW9uIHN0cmVhbQorICAgICBEICBoZWFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UoZ3pfaGVhZGVycCkKKyAgICAgICoKKyAgICAgRCBpbmZsYXRlQmFja0luaXQuLi4KKyAgICAgRCAgICAgICAgICAgICAgICAgUFIgICAgICAgICAgICAxMEkgMCBleHRwcm9jKCdpbmZsYXRlQmFja0luaXRfJykKKyAgICAgRCAgc3RybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKHpfc3RyZWFtKSAgICAgICAgICAgICAgICAgICAgICAgRXhwYW5zaW9uIHN0cmVhbQorICAgICBEICB3aW5kb3dCaXRzICAgICAgICAgICAgICAgICAgIDEwSSAwIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cyKGJ1ZmZlciBzaXplKQorICAgICBEICB3aW5kb3cgICAgICAgICAgICAgICAgICAgIDY1NTM1ICAgIG9wdGlvbnMoKnZhcnNpemUpICAgICAgICAgICAgICAgICAgICBCdWZmZXIKKyAgICAgRCAgdmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICogICB2YWx1ZSBvcHRpb25zKCpzdHJpbmcpICAgICAgICAgICAgICAgVmVyc2lvbiBzdHJpbmcKKyAgICAgRCAgc3RyZWFtX3NpemUgICAgICAgICAgICAgICAgICAxMGkgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyZWFtIHN0cnVjdC4gc2l6ZQorICAgICAgKgorICAgICBEIGluZmxhdGVCYWNrICAgICBQUiAgICAgICAgICAgIDEwSSAwIGV4dHByb2MoJ2luZmxhdGVCYWNrJykKKyAgICAgRCAgc3RybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKHpfc3RyZWFtKSAgICAgICAgICAgICAgICAgICAgICAgRXhwYW5zaW9uIHN0cmVhbQorICAgICBEICBpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHZhbHVlIHByb2NwdHIgICAgICAgICAgICAgICAgICAgICAgICBJbnB1dCBmdW5jdGlvbgorICAgICBEICBpbl9kZXNjICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnB1dCBkZXNjcmlwdG9yCisgICAgIEQgIG91dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgdmFsdWUgcHJvY3B0ciAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dCBmdW5jdGlvbgorICAgICBEICBvdXRfZGVzYyAgICAgICAgICAgICAgICAgICAgICAgKiAgIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQgZGVzY3JpcHRvcgorICAgICAgKgorICAgICBEIGluZmxhdGVCYWNrRW5kICBQUiAgICAgICAgICAgIDEwSSAwIGV4dHByb2MoJ2luZmxhdGVCYWNrRW5kJykKKyAgICAgRCAgc3RybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKHpfc3RyZWFtKSAgICAgICAgICAgICAgICAgICAgICAgRXhwYW5zaW9uIHN0cmVhbQorICAgICAgKgorICAgICBEIHpsaWJDb21waWxlRmxhZ3MuLi4KKyAgICAgRCAgICAgICAgICAgICAgICAgUFIgICAgICAgICAgICAxMFUgMCBleHRwcm9jKCd6bGliQ29tcGlsZUZsYWdzJykKKyAgICAgICoKKyAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgQ2hlY2tzdW0gZnVuY3Rpb24gcHJvdG90eXBlcworICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICoKKyAgICAgRCBhZGxlcjMyICAgICAgICAgUFIgICAgICAgICAgICAxMFUgMCBleHRwcm9jKCdhZGxlcjMyJykgICAgICAgICAgICAgICAgICAgTmV3IGNoZWNrc3VtCisgICAgIEQgIGFkbGVyICAgICAgICAgICAgICAgICAgICAgICAgMTBVIDAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9sZCBjaGVja3N1bQorICAgICBEICBidWYgICAgICAgICAgICAgICAgICAgICAgIDY1NTM1ICAgIGNvbnN0IG9wdGlvbnMoKnZhcnNpemUpICAgICAgICAgICAgICBCeXRlcyB0byBhY2N1bXVsYXRlCisgICAgIEQgIGxlbiAgICAgICAgICAgICAgICAgICAgICAgICAgMTBVIDAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlciBsZW5ndGgKKyAgICAgICoKKyAgICAgRCBhZGxlcjMyX2NvbWJpbmUuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgUFIgICAgICAgICAgICAxMFUgMCBleHRwcm9jKCdhZGxlcjMyX2NvbWJpbmUnKSAgICAgICAgICAgTmV3IGNoZWNrc3VtCisgICAgIEQgIGFkbGVyMSAgICAgICAgICAgICAgICAgICAgICAgMTBVIDAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9sZCBjaGVja3N1bQorICAgICBEICBhZGxlcjIgICAgICAgICAgICAgICAgICAgICAgIDEwVSAwIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbGQgY2hlY2tzdW0KKyAgICAgRCAgbGVuMiAgICAgICAgICAgICAgICAgICAgICAgICAyMFUgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVyIGxlbmd0aAorICAgICAgKgorICAgICBEIGFkbGVyMzJfeiAgICAgICBQUiAgICAgICAgICAgIDEwVSAwIGV4dHByb2MoJ2FkbGVyMzJfeicpICAgICAgICAgICAgICAgICBOZXcgY2hlY2tzdW0KKyAgICAgRCAgYWRsZXIgICAgICAgICAgICAgICAgICAgICAgICAxMFUgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2xkIGNoZWNrc3VtCisgICAgIEQgIGJ1ZiAgICAgICAgICAgICAgICAgICAgICAgNjU1MzUgICAgY29uc3Qgb3B0aW9ucygqdmFyc2l6ZSkgICAgICAgICAgICAgIEJ5dGVzIHRvIGFjY3VtdWxhdGUKKyAgICAgRCAgbGVuICAgICAgICAgICAgICAgICAgICAgICAgICAyMFUgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVyIGxlbmd0aAorICAgICAgKgorICAgICBEIGNyYzMyICAgICAgICAgICBQUiAgICAgICAgICAgIDEwVSAwIGV4dHByb2MoJ2NyYzMyJykgICAgICAgICAgICAgICAgICAgICBOZXcgY2hlY2tzdW0KKyAgICAgRCAgY3JjICAgICAgICAgICAgICAgICAgICAgICAgICAxMFUgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2xkIGNoZWNrc3VtCisgICAgIEQgIGJ1ZiAgICAgICAgICAgICAgICAgICAgICAgNjU1MzUgICAgY29uc3Qgb3B0aW9ucygqdmFyc2l6ZSkgICAgICAgICAgICAgIEJ5dGVzIHRvIGFjY3VtdWxhdGUKKyAgICAgRCAgbGVuICAgICAgICAgICAgICAgICAgICAgICAgICAxMFUgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVyIGxlbmd0aAorICAgICAgKgorICAgICBEIGNyYzMyX2NvbWJpbmUuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgUFIgICAgICAgICAgICAxMFUgMCBleHRwcm9jKCdjcmMzMl9jb21iaW5lJykgICAgICAgICAgICAgTmV3IGNoZWNrc3VtCisgICAgIEQgIGNyYzEgICAgICAgICAgICAgICAgICAgICAgICAgMTBVIDAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9sZCBjaGVja3N1bQorICAgICBEICBjcmMyICAgICAgICAgICAgICAgICAgICAgICAgIDEwVSAwIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbGQgY2hlY2tzdW0KKyAgICAgRCAgbGVuMiAgICAgICAgICAgICAgICAgICAgICAgICAyMFUgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVyIGxlbmd0aAorICAgICAgKgorICAgICBEIGNyYzMyX3ogICAgICAgICBQUiAgICAgICAgICAgIDEwVSAwIGV4dHByb2MoJ2NyYzMyX3onKSAgICAgICAgICAgICAgICAgICBOZXcgY2hlY2tzdW0KKyAgICAgRCAgY3JjICAgICAgICAgICAgICAgICAgICAgICAgICAxMFUgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2xkIGNoZWNrc3VtCisgICAgIEQgIGJ1ZiAgICAgICAgICAgICAgICAgICAgICAgNjU1MzUgICAgY29uc3Qgb3B0aW9ucygqdmFyc2l6ZSkgICAgICAgICAgICAgIEJ5dGVzIHRvIGFjY3VtdWxhdGUKKyAgICAgRCAgbGVuICAgICAgICAgICAgICAgICAgICAgICAgICAyMFUgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVyIGxlbmd0aAorICAgICAgKgorICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICogICAgICAgICAgICAgICAgICAgICBNaXNjZWxsYW5lb3VzIGZ1bmN0aW9uIHByb3RvdHlwZXMKKyAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAqCisgICAgIEQgekVycm9yICAgICAgICAgIFBSICAgICAgICAgICAgICAqICAgZXh0cHJvYygnekVycm9yJykgICAgICAgICAgICAgICAgICAgIEVycm9yIHN0cmluZworICAgICBEICBlcnIgICAgICAgICAgICAgICAgICAgICAgICAgIDEwSSAwIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFcnJvciBjb2RlCisgICAgICAqCisgICAgIEQgaW5mbGF0ZVN5bmNQb2ludC4uLgorICAgICBEICAgICAgICAgICAgICAgICBQUiAgICAgICAgICAgIDEwSSAwIGV4dHByb2MoJ2luZmxhdGVTeW5jUG9pbnQnKQorICAgICBEICBzdHJtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2Uoel9zdHJlYW0pICAgICAgICAgICAgICAgICAgICAgICBFeHBhbnNpb24gc3RyZWFtCisgICAgICAqCisgICAgIEQgZ2V0X2NyY190YWJsZSAgIFBSICAgICAgICAgICAgICAqICAgZXh0cHJvYygnZ2V0X2NyY190YWJsZScpICAgICAgICAgICAgIFB0ciB0byB1bG9uZ3MKKyAgICAgICoKKyAgICAgRCBpbmZsYXRlVW5kZXJtaW5lLi4uCisgICAgIEQgICAgICAgICAgICAgICAgIFBSICAgICAgICAgICAgMTBJIDAgZXh0cHJvYygnaW5mbGF0ZVVuZGVybWluZScpCisgICAgIEQgIHN0cm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSh6X3N0cmVhbSkgICAgICAgICAgICAgICAgICAgICAgIEV4cGFuc2lvbiBzdHJlYW0KKyAgICAgRCAgYXJnICAgICAgICAgICAgICAgICAgICAgICAgICAxMEkgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXJyb3IgY29kZQorICAgICAgKgorICAgICBEIGluZmxhdGVSZXNldEtlZXAuLi4KKyAgICAgRCAgICAgICAgICAgICAgICAgUFIgICAgICAgICAgICAxMEkgMCBleHRwcm9jKCdpbmZsYXRlUmVzZXRLZWVwJykgICAgICAgICAgRW5kIGFuZCBpbml0LiBzdHJlYW0KKyAgICAgRCAgc3RybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKHpfc3RyZWFtKSAgICAgICAgICAgICAgICAgICAgICAgRXhwYW5zaW9uIHN0cmVhbQorICAgICAgKgorICAgICBEIGRlZmxhdGVSZXNldEtlZXAuLi4KKyAgICAgRCAgICAgICAgICAgICAgICAgUFIgICAgICAgICAgICAxMEkgMCBleHRwcm9jKCdkZWZsYXRlUmVzZXRLZWVwJykgICAgICAgICAgRW5kIGFuZCBpbml0LiBzdHJlYW0KKyAgICAgRCAgc3RybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKHpfc3RyZWFtKSAgICAgICAgICAgICAgICAgICAgICAgRXhwYW5zaW9uIHN0cmVhbQorICAgICAgKgorICAgICAgL2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvcW54L3BhY2thZ2UucXBnIGIvc3JjL3FueC9wYWNrYWdlLnFwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWRkMWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3FueC9wYWNrYWdlLnFwZwpAQCAtMCwwICsxLDE0MSBAQAorPFFQRzpHZW5lcmF0aW9uPgorICAgPFFQRzpPcHRpb25zPgorICAgICAgPFFQRzpVc2VyIHVuYXR0ZW5kZWQ9Im5vIiB2ZXJib3NpdHk9IjIiIGxpc3RmaWxlcz0ieWVzIi8+CisgICAgICA8UVBHOkRlZmF1bHRzIHR5cGU9InFueF9wYWNrYWdlIi8+CisgICAgICA8UVBHOlNvdXJjZT48L1FQRzpTb3VyY2U+CisgICAgICA8UVBHOlJlbGVhc2UgbnVtYmVyPSIrIi8+CisgICAgICA8UVBHOkJ1aWxkPjwvUVBHOkJ1aWxkPgorICAgICAgPFFQRzpGaWxlU29ydGluZyBzdHJpcD0ieWVzIi8+CisgICAgICA8UVBHOlBhY2thZ2UgdGFyZ2V0cz0iY29tYmluZSIvPgorICAgICAgPFFQRzpSZXBvc2l0b3J5IGdlbmVyYXRlPSJ5ZXMiLz4KKyAgICAgIDxRUEc6RmluYWxEaXI+PC9RUEc6RmluYWxEaXI+CisgICAgICA8UVBHOkNsZWFudXA+PC9RUEc6Q2xlYW51cD4KKyAgIDwvUVBHOk9wdGlvbnM+CisKKyAgIDxRUEc6UmVzcG9uc2libGU+CisgICAgICA8UVBHOkNvbXBhbnk+PC9RUEc6Q29tcGFueT4KKyAgICAgIDxRUEc6RGVwYXJ0bWVudD48L1FQRzpEZXBhcnRtZW50PgorICAgICAgPFFQRzpHcm91cD48L1FQRzpHcm91cD4KKyAgICAgIDxRUEc6VGVhbT48L1FQRzpUZWFtPgorICAgICAgPFFQRzpFbXBsb3llZT48L1FQRzpFbXBsb3llZT4KKyAgICAgIDxRUEc6RW1haWxBZGRyZXNzPjwvUVBHOkVtYWlsQWRkcmVzcz4KKyAgIDwvUVBHOlJlc3BvbnNpYmxlPgorCisgICA8UVBHOlZhbHVlcz4KKyAgICAgIDxRUEc6RmlsZXM+CisgICAgICAgICA8UVBHOkFkZCBmaWxlPSIuLi96Y29uZi5oIiBpbnN0YWxsPSIvb3B0L2luY2x1ZGUvIiB1c2VyPSJyb290OnN5cyIgcGVybWlzc2lvbj0iNjQ0Ii8+CisgICAgICAgICA8UVBHOkFkZCBmaWxlPSIuLi96bGliLmgiIGluc3RhbGw9Ii9vcHQvaW5jbHVkZS8iIHVzZXI9InJvb3Q6c3lzIiBwZXJtaXNzaW9uPSI2NDQiLz4KKyAgICAgICAgIDxRUEc6QWRkIGZpbGU9Ii4uL2xpYnouc28uMS4yLjEyIiBpbnN0YWxsPSIvb3B0L2xpYi8iIHVzZXI9InJvb3Q6YmluIiBwZXJtaXNzaW9uPSI2NDQiLz4KKyAgICAgICAgIDxRUEc6QWRkIGZpbGU9ImxpYnouc28iIGluc3RhbGw9Ii9vcHQvbGliLyIgY29tcG9uZW50PSJkZXYiIGZpbGV0eXBlPSJzeW1saW5rIiBsaW5rdG89ImxpYnouc28uMS4yLjEyIi8+CisgICAgICAgICA8UVBHOkFkZCBmaWxlPSJsaWJ6LnNvLjEiIGluc3RhbGw9Ii9vcHQvbGliLyIgZmlsZXR5cGU9InN5bWxpbmsiIGxpbmt0bz0ibGliei5zby4xLjIuMTIiLz4KKyAgICAgICAgIDxRUEc6QWRkIGZpbGU9Ii4uL2xpYnouc28uMS4yLjEyIiBpbnN0YWxsPSIvb3B0L2xpYi8iIGNvbXBvbmVudD0ic2xpYiIvPgorICAgICAgPC9RUEc6RmlsZXM+CisKKyAgICAgIDxRUEc6UGFja2FnZUZpbHRlcj4KKyAgICAgICAgIDxRUE06UGFja2FnZU1hbmlmZXN0PgorICAgICAgICAgICAgPFFQTTpQYWNrYWdlRGVzY3JpcHRpb24+CisgICAgICAgICAgICAgICA8UVBNOlBhY2thZ2VUeXBlPkxpYnJhcnk8L1FQTTpQYWNrYWdlVHlwZT4KKyAgICAgICAgICAgICAgIDxRUE06UGFja2FnZVJlbGVhc2VOb3Rlcz48L1FQTTpQYWNrYWdlUmVsZWFzZU5vdGVzPgorICAgICAgICAgICAgICAgPFFQTTpQYWNrYWdlUmVsZWFzZVVyZ2VuY3k+TWVkaXVtPC9RUE06UGFja2FnZVJlbGVhc2VVcmdlbmN5PgorICAgICAgICAgICAgICAgPFFQTTpQYWNrYWdlUmVwb3NpdG9yeT48L1FQTTpQYWNrYWdlUmVwb3NpdG9yeT4KKyAgICAgICAgICAgICAgIDxRUE06RmlsZVZlcnNpb24+Mi4wPC9RUE06RmlsZVZlcnNpb24+CisgICAgICAgICAgICA8L1FQTTpQYWNrYWdlRGVzY3JpcHRpb24+CisKKyAgICAgICAgICAgIDxRUE06UHJvZHVjdERlc2NyaXB0aW9uPgorICAgICAgICAgICAgICAgPFFQTTpQcm9kdWN0TmFtZT56bGliPC9RUE06UHJvZHVjdE5hbWU+CisgICAgICAgICAgICAgICA8UVBNOlByb2R1Y3RJZGVudGlmaWVyPnpsaWI8L1FQTTpQcm9kdWN0SWRlbnRpZmllcj4KKyAgICAgICAgICAgICAgIDxRUE06UHJvZHVjdEVtYWlsPmFsYWluLmJvbm5lZm95QGljYnQuY29tPC9RUE06UHJvZHVjdEVtYWlsPgorICAgICAgICAgICAgICAgPFFQTTpWZW5kb3JOYW1lPlB1YmxpYzwvUVBNOlZlbmRvck5hbWU+CisgICAgICAgICAgICAgICA8UVBNOlZlbmRvckluc3RhbGxOYW1lPnB1YmxpYzwvUVBNOlZlbmRvckluc3RhbGxOYW1lPgorICAgICAgICAgICAgICAgPFFQTTpWZW5kb3JVUkw+d3d3Lmd6aXAub3JnL3psaWI8L1FQTTpWZW5kb3JVUkw+CisgICAgICAgICAgICAgICA8UVBNOlZlbmRvckVtYmVkVVJMPjwvUVBNOlZlbmRvckVtYmVkVVJMPgorICAgICAgICAgICAgICAgPFFQTTpWZW5kb3JFbWFpbD48L1FQTTpWZW5kb3JFbWFpbD4KKyAgICAgICAgICAgICAgIDxRUE06QXV0aG9yTmFtZT5KZWFuLUxvdXAgR2FpbGx5LE1hcmsgQWRsZXI8L1FQTTpBdXRob3JOYW1lPgorICAgICAgICAgICAgICAgPFFQTTpBdXRob3JVUkw+d3d3Lmd6aXAub3JnL3psaWI8L1FQTTpBdXRob3JVUkw+CisgICAgICAgICAgICAgICA8UVBNOkF1dGhvckVtYmVkVVJMPjwvUVBNOkF1dGhvckVtYmVkVVJMPgorICAgICAgICAgICAgICAgPFFQTTpBdXRob3JFbWFpbD56bGliQGd6aXAub3JnPC9RUE06QXV0aG9yRW1haWw+CisgICAgICAgICAgICAgICA8UVBNOlByb2R1Y3RJY29uU21hbGw+PC9RUE06UHJvZHVjdEljb25TbWFsbD4KKyAgICAgICAgICAgICAgIDxRUE06UHJvZHVjdEljb25MYXJnZT48L1FQTTpQcm9kdWN0SWNvbkxhcmdlPgorICAgICAgICAgICAgICAgPFFQTTpQcm9kdWN0RGVzY3JpcHRpb25TaG9ydD5BIG1hc3NpdmVseSBzcGlmZnkgeWV0IGRlbGljYXRlbHkgdW5vYnRydXNpdmUgY29tcHJlc3Npb24gbGlicmFyeS48L1FQTTpQcm9kdWN0RGVzY3JpcHRpb25TaG9ydD4KKyAgICAgICAgICAgICAgIDxRUE06UHJvZHVjdERlc2NyaXB0aW9uTG9uZz56bGliIGlzIGRlc2lnbmVkIHRvIGJlIGEgZnJlZSwgZ2VuZXJhbC1wdXJwb3NlLCBsZWdhbGx5IHVuZW5jdW1iZXJlZCwgbG9zc2xlc3MgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5IGZvciB1c2Ugb24gdmlydHVhbGx5IGFueSBjb21wdXRlciBoYXJkd2FyZSBhbmQgb3BlcmF0aW5nIHN5c3RlbS48L1FQTTpQcm9kdWN0RGVzY3JpcHRpb25Mb25nPgorICAgICAgICAgICAgICAgPFFQTTpQcm9kdWN0RGVzY3JpcHRpb25VUkw+aHR0cDovL3d3dy5nemlwLm9yZy96bGliPC9RUE06UHJvZHVjdERlc2NyaXB0aW9uVVJMPgorICAgICAgICAgICAgICAgPFFQTTpQcm9kdWN0RGVzY3JpcHRpb25FbWJlZFVSTD48L1FQTTpQcm9kdWN0RGVzY3JpcHRpb25FbWJlZFVSTD4KKyAgICAgICAgICAgIDwvUVBNOlByb2R1Y3REZXNjcmlwdGlvbj4KKworICAgICAgICAgICAgPFFQTTpSZWxlYXNlRGVzY3JpcHRpb24+CisgICAgICAgICAgICAgICA8UVBNOlJlbGVhc2VWZXJzaW9uPjEuMi4xMjwvUVBNOlJlbGVhc2VWZXJzaW9uPgorICAgICAgICAgICAgICAgPFFQTTpSZWxlYXNlVXJnZW5jeT5NZWRpdW08L1FQTTpSZWxlYXNlVXJnZW5jeT4KKyAgICAgICAgICAgICAgIDxRUE06UmVsZWFzZVN0YWJpbGl0eT5TdGFibGU8L1FQTTpSZWxlYXNlU3RhYmlsaXR5PgorICAgICAgICAgICAgICAgPFFQTTpSZWxlYXNlTm90ZU1pbm9yPjwvUVBNOlJlbGVhc2VOb3RlTWlub3I+CisgICAgICAgICAgICAgICA8UVBNOlJlbGVhc2VOb3RlTWFqb3I+PC9RUE06UmVsZWFzZU5vdGVNYWpvcj4KKyAgICAgICAgICAgICAgIDxRUE06RXhjbHVkZUNvdW50cmllcz4KKyAgICAgICAgICAgICAgICAgIDxRUE06Q291bnRyeT48L1FQTTpDb3VudHJ5PgorICAgICAgICAgICAgICAgPC9RUE06RXhjbHVkZUNvdW50cmllcz4KKworICAgICAgICAgICAgICAgPFFQTTpSZWxlYXNlQ29weXJpZ2h0Pk5vIExpY2Vuc2U8L1FQTTpSZWxlYXNlQ29weXJpZ2h0PgorICAgICAgICAgICAgPC9RUE06UmVsZWFzZURlc2NyaXB0aW9uPgorCisgICAgICAgICAgICA8UVBNOkNvbnRlbnREZXNjcmlwdGlvbj4KKyAgICAgICAgICAgICAgIDxRUE06Q29udGVudFRvcGljIHhtbG11bHRpcGxlPSJ0cnVlIj5Tb2Z0d2FyZSBEZXZlbG9wbWVudC9MaWJyYXJpZXMgYW5kIEV4dGVuc2lvbnMvQyBMaWJyYXJpZXM8L1FQTTpDb250ZW50VG9waWM+CisgICAgICAgICAgICAgICA8UVBNOkNvbnRlbnRLZXl3b3JkPnpsaWIsY29tcHJlc3Npb248L1FQTTpDb250ZW50S2V5d29yZD4KKyAgICAgICAgICAgICAgIDxRUE06VGFyZ2V0T1M+cW54NjwvUVBNOlRhcmdldE9TPgorICAgICAgICAgICAgICAgPFFQTTpIb3N0T1M+cW54NjwvUVBNOkhvc3RPUz4KKyAgICAgICAgICAgICAgIDxRUE06RGlzcGxheUVudmlyb25tZW50IHhtbG11bHRpcGxlPSJ0cnVlIj5Ob25lPC9RUE06RGlzcGxheUVudmlyb25tZW50PgorICAgICAgICAgICAgICAgPFFQTTpUYXJnZXRBdWRpZW5jZSB4bWxtdWx0aXBsZT0idHJ1ZSI+RGV2ZWxvcGVyPC9RUE06VGFyZ2V0QXVkaWVuY2U+CisgICAgICAgICAgICA8L1FQTTpDb250ZW50RGVzY3JpcHRpb24+CisgICAgICAgICA8L1FQTTpQYWNrYWdlTWFuaWZlc3Q+CisgICAgICA8L1FQRzpQYWNrYWdlRmlsdGVyPgorCisgICAgICA8UVBHOlBhY2thZ2VGaWx0ZXIgcHJvYz0ibm9uZSIgdGFyZ2V0PSJub25lIj4KKyAgICAgICAgIDxRUE06UGFja2FnZU1hbmlmZXN0PgorICAgICAgICAgICAgPFFQTTpQcm9kdWN0SW5zdGFsbGF0aW9uRGVwZW5kZW5jaWVzPgorICAgICAgICAgICAgICAgPFFQTTpQcm9kdWN0UmVxdWlyZW1lbnRzPjwvUVBNOlByb2R1Y3RSZXF1aXJlbWVudHM+CisgICAgICAgICAgICA8L1FQTTpQcm9kdWN0SW5zdGFsbGF0aW9uRGVwZW5kZW5jaWVzPgorCisgICAgICAgICAgICA8UVBNOlByb2R1Y3RJbnN0YWxsYXRpb25Qcm9jZWR1cmU+CisgICAgICAgICAgICAgICA8UVBNOlNjcmlwdCB4bWxtdWx0aXBsZT0idHJ1ZSI+CisgICAgICAgICAgICAgICAgICA8UVBNOlNjcmlwdE5hbWU+PC9RUE06U2NyaXB0TmFtZT4KKyAgICAgICAgICAgICAgICAgIDxRUE06U2NyaXB0VHlwZT5JbnN0YWxsPC9RUE06U2NyaXB0VHlwZT4KKyAgICAgICAgICAgICAgICAgIDxRUE06U2NyaXB0VGltaW5nPlBvc3Q8L1FQTTpTY3JpcHRUaW1pbmc+CisgICAgICAgICAgICAgICAgICA8UVBNOlNjcmlwdEJsb2NraW5nPk5vPC9RUE06U2NyaXB0QmxvY2tpbmc+CisgICAgICAgICAgICAgICAgICA8UVBNOlNjcmlwdFJlc3VsdD5JZ25vcmU8L1FQTTpTY3JpcHRSZXN1bHQ+CisgICAgICAgICAgICAgICAgICA8UVBNOlNob3J0RGVzY3JpcHRpb24+PC9RUE06U2hvcnREZXNjcmlwdGlvbj4KKyAgICAgICAgICAgICAgICAgIDxRUE06VXNlQmluYXJpZXM+Tm88L1FQTTpVc2VCaW5hcmllcz4KKyAgICAgICAgICAgICAgICAgIDxRUE06UHJpb3JpdHk+T3B0aW9uYWw8L1FQTTpQcmlvcml0eT4KKyAgICAgICAgICAgICAgIDwvUVBNOlNjcmlwdD4KKyAgICAgICAgICAgIDwvUVBNOlByb2R1Y3RJbnN0YWxsYXRpb25Qcm9jZWR1cmU+CisgICAgICAgICA8L1FQTTpQYWNrYWdlTWFuaWZlc3Q+CisKKyAgICAgICAgIDxRUE06TGF1bmNoPgorICAgICAgICAgPC9RUE06TGF1bmNoPgorICAgICAgPC9RUEc6UGFja2FnZUZpbHRlcj4KKworICAgICAgPFFQRzpQYWNrYWdlRmlsdGVyIHR5cGU9ImNvcmUiIGNvbXBvbmVudD0ibm9uZSI+CisgICAgICAgICA8UVBNOlBhY2thZ2VNYW5pZmVzdD4KKyAgICAgICAgICAgIDxRUE06UHJvZHVjdEluc3RhbGxhdGlvblByb2NlZHVyZT4KKwkgICAgICAgPFFQTTpPcmRlckRlcGVuZGVuY3kgeG1sbXVsdGlwbGU9InRydWUiPgorCSAgICAgICAgICA8UVBNOk9yZGVyPkluc3RhbGxPdmVyPC9RUE06T3JkZXI+CisJICAgICAgICAgIDxRUE06UHJvZHVjdD56bGliPC9RUE06UHJvZHVjdD4KKwkgICAgICAgPC9RUE06T3JkZXJEZXBlbmRlbmN5PgorICAgICAgICAgICAgPC9RUE06UHJvZHVjdEluc3RhbGxhdGlvblByb2NlZHVyZT4KKyAgICAgICAgIDwvUVBNOlBhY2thZ2VNYW5pZmVzdD4KKworICAgICAgICAgPFFQTTpMYXVuY2g+CisgICAgICAgICA8L1FQTTpMYXVuY2g+CisgICAgICA8L1FQRzpQYWNrYWdlRmlsdGVyPgorCisgICAgICA8UVBHOlBhY2thZ2VGaWx0ZXIgdHlwZT0iY29yZSIgY29tcG9uZW50PSJkZXYiPgorICAgICAgICAgPFFQTTpQYWNrYWdlTWFuaWZlc3Q+CisgICAgICAgICAgICA8UVBNOlByb2R1Y3RJbnN0YWxsYXRpb25Qcm9jZWR1cmU+CisJICAgICAgIDxRUE06T3JkZXJEZXBlbmRlbmN5IHhtbG11bHRpcGxlPSJ0cnVlIj4KKwkgICAgICAgICAgPFFQTTpPcmRlcj5JbnN0YWxsT3ZlcjwvUVBNOk9yZGVyPgorCSAgICAgICAgICA8UVBNOlByb2R1Y3Q+emxpYi1kZXY8L1FQTTpQcm9kdWN0PgorCSAgICAgICA8L1FQTTpPcmRlckRlcGVuZGVuY3k+CisgICAgICAgICAgICA8L1FQTTpQcm9kdWN0SW5zdGFsbGF0aW9uUHJvY2VkdXJlPgorICAgICAgICAgPC9RUE06UGFja2FnZU1hbmlmZXN0PgorCisgICAgICAgICA8UVBNOkxhdW5jaD4KKyAgICAgICAgIDwvUVBNOkxhdW5jaD4KKyAgICAgIDwvUVBHOlBhY2thZ2VGaWx0ZXI+CisgICA8L1FQRzpWYWx1ZXM+Cis8L1FQRzpHZW5lcmF0aW9uPgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvZXhhbXBsZS5jIGIvc3JjL3Rlc3QvZXhhbXBsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0OWY0ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9leGFtcGxlLmMKQEAgLTAsMCArMSw2MDEgQEAKKy8qIGV4YW1wbGUuYyAtLSB1c2FnZSBleGFtcGxlIG9mIHRoZSB6bGliIGNvbXByZXNzaW9uIGxpYnJhcnkKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA2LCAyMDExLCAyMDE2IEplYW4tbG91cCBHYWlsbHkKKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKKyAqLworCisvKiBAKCMpICRJZCQgKi8KKworI2luY2x1ZGUgInpsaWIuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaWZkZWYgU1REQworIyAgaW5jbHVkZSA8c3RyaW5nLmg+CisjICBpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChWTVMpIHx8IGRlZmluZWQoUklTQ09TKQorIyAgZGVmaW5lIFRFU1RGSUxFICJmb28tZ3oiCisjZWxzZQorIyAgZGVmaW5lIFRFU1RGSUxFICJmb28uZ3oiCisjZW5kaWYKKworI2RlZmluZSBDSEVDS19FUlIoZXJyLCBtc2cpIHsgXAorICAgIGlmIChlcnIgIT0gWl9PSykgeyBcCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMgZXJyb3I6ICVkXG4iLCBtc2csIGVycik7IFwKKyAgICAgICAgZXhpdCgxKTsgXAorICAgIH0gXAorfQorCitzdGF0aWMgel9jb25zdCBjaGFyIGhlbGxvW10gPSAiaGVsbG8sIGhlbGxvISI7CisvKiAiaGVsbG8gd29ybGQiIHdvdWxkIGJlIG1vcmUgc3RhbmRhcmQsIGJ1dCB0aGUgcmVwZWF0ZWQgImhlbGxvIgorICogc3RyZXNzZXMgdGhlIGNvbXByZXNzaW9uIGNvZGUgYmV0dGVyLCBzb3JyeS4uLgorICovCisKK3N0YXRpYyBjb25zdCBjaGFyIGRpY3Rpb25hcnlbXSA9ICJoZWxsbyI7CitzdGF0aWMgdUxvbmcgZGljdElkOyAgICAvKiBBZGxlcjMyIHZhbHVlIG9mIHRoZSBkaWN0aW9uYXJ5ICovCisKK3ZvaWQgdGVzdF9kZWZsYXRlICAgICAgIE9GKChCeXRlICpjb21wciwgdUxvbmcgY29tcHJMZW4pKTsKK3ZvaWQgdGVzdF9pbmZsYXRlICAgICAgIE9GKChCeXRlICpjb21wciwgdUxvbmcgY29tcHJMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnl0ZSAqdW5jb21wciwgdUxvbmcgdW5jb21wckxlbikpOwordm9pZCB0ZXN0X2xhcmdlX2RlZmxhdGUgT0YoKEJ5dGUgKmNvbXByLCB1TG9uZyBjb21wckxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeXRlICp1bmNvbXByLCB1TG9uZyB1bmNvbXByTGVuKSk7Cit2b2lkIHRlc3RfbGFyZ2VfaW5mbGF0ZSBPRigoQnl0ZSAqY29tcHIsIHVMb25nIGNvbXByTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5dGUgKnVuY29tcHIsIHVMb25nIHVuY29tcHJMZW4pKTsKK3ZvaWQgdGVzdF9mbHVzaCAgICAgICAgIE9GKChCeXRlICpjb21wciwgdUxvbmcgKmNvbXByTGVuKSk7Cit2b2lkIHRlc3Rfc3luYyAgICAgICAgICBPRigoQnl0ZSAqY29tcHIsIHVMb25nIGNvbXByTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5dGUgKnVuY29tcHIsIHVMb25nIHVuY29tcHJMZW4pKTsKK3ZvaWQgdGVzdF9kaWN0X2RlZmxhdGUgIE9GKChCeXRlICpjb21wciwgdUxvbmcgY29tcHJMZW4pKTsKK3ZvaWQgdGVzdF9kaWN0X2luZmxhdGUgIE9GKChCeXRlICpjb21wciwgdUxvbmcgY29tcHJMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnl0ZSAqdW5jb21wciwgdUxvbmcgdW5jb21wckxlbikpOworaW50ICBtYWluICAgICAgICAgICAgICAgT0YoKGludCBhcmdjLCBjaGFyICphcmd2W10pKTsKKworCisjaWZkZWYgWl9TT0xPCisKK3ZvaWQgKm15YWxsb2MgT0YoKHZvaWQgKiwgdW5zaWduZWQsIHVuc2lnbmVkKSk7Cit2b2lkIG15ZnJlZSBPRigodm9pZCAqLCB2b2lkICopKTsKKwordm9pZCAqbXlhbGxvYyhxLCBuLCBtKQorICAgIHZvaWQgKnE7CisgICAgdW5zaWduZWQgbiwgbTsKK3sKKyAgICAodm9pZClxOworICAgIHJldHVybiBjYWxsb2MobiwgbSk7Cit9CisKK3ZvaWQgbXlmcmVlKHZvaWQgKnEsIHZvaWQgKnApCit7CisgICAgKHZvaWQpcTsKKyAgICBmcmVlKHApOworfQorCitzdGF0aWMgYWxsb2NfZnVuYyB6YWxsb2MgPSBteWFsbG9jOworc3RhdGljIGZyZWVfZnVuYyB6ZnJlZSA9IG15ZnJlZTsKKworI2Vsc2UgLyogIVpfU09MTyAqLworCitzdGF0aWMgYWxsb2NfZnVuYyB6YWxsb2MgPSAoYWxsb2NfZnVuYykwOworc3RhdGljIGZyZWVfZnVuYyB6ZnJlZSA9IChmcmVlX2Z1bmMpMDsKKwordm9pZCB0ZXN0X2NvbXByZXNzICAgICAgT0YoKEJ5dGUgKmNvbXByLCB1TG9uZyBjb21wckxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeXRlICp1bmNvbXByLCB1TG9uZyB1bmNvbXByTGVuKSk7Cit2b2lkIHRlc3RfZ3ppbyAgICAgICAgICBPRigoY29uc3QgY2hhciAqZm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnl0ZSAqdW5jb21wciwgdUxvbmcgdW5jb21wckxlbikpOworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIFRlc3QgY29tcHJlc3MoKSBhbmQgdW5jb21wcmVzcygpCisgKi8KK3ZvaWQgdGVzdF9jb21wcmVzcyhjb21wciwgY29tcHJMZW4sIHVuY29tcHIsIHVuY29tcHJMZW4pCisgICAgQnl0ZSAqY29tcHIsICp1bmNvbXByOworICAgIHVMb25nIGNvbXByTGVuLCB1bmNvbXByTGVuOworeworICAgIGludCBlcnI7CisgICAgdUxvbmcgbGVuID0gKHVMb25nKXN0cmxlbihoZWxsbykrMTsKKworICAgIGVyciA9IGNvbXByZXNzKGNvbXByLCAmY29tcHJMZW4sIChjb25zdCBCeXRlZiopaGVsbG8sIGxlbik7CisgICAgQ0hFQ0tfRVJSKGVyciwgImNvbXByZXNzIik7CisKKyAgICBzdHJjcHkoKGNoYXIqKXVuY29tcHIsICJnYXJiYWdlIik7CisKKyAgICBlcnIgPSB1bmNvbXByZXNzKHVuY29tcHIsICZ1bmNvbXByTGVuLCBjb21wciwgY29tcHJMZW4pOworICAgIENIRUNLX0VSUihlcnIsICJ1bmNvbXByZXNzIik7CisKKyAgICBpZiAoc3RyY21wKChjaGFyKil1bmNvbXByLCBoZWxsbykpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJiYWQgdW5jb21wcmVzc1xuIik7CisgICAgICAgIGV4aXQoMSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHJpbnRmKCJ1bmNvbXByZXNzKCk6ICVzXG4iLCAoY2hhciAqKXVuY29tcHIpOworICAgIH0KK30KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBUZXN0IHJlYWQvd3JpdGUgb2YgLmd6IGZpbGVzCisgKi8KK3ZvaWQgdGVzdF9nemlvKGZuYW1lLCB1bmNvbXByLCB1bmNvbXByTGVuKQorICAgIGNvbnN0IGNoYXIgKmZuYW1lOyAvKiBjb21wcmVzc2VkIGZpbGUgbmFtZSAqLworICAgIEJ5dGUgKnVuY29tcHI7CisgICAgdUxvbmcgdW5jb21wckxlbjsKK3sKKyNpZmRlZiBOT19HWkNPTVBSRVNTCisgICAgZnByaW50ZihzdGRlcnIsICJOT19HWkNPTVBSRVNTIC0tIGd6KiBmdW5jdGlvbnMgY2Fubm90IGNvbXByZXNzXG4iKTsKKyNlbHNlCisgICAgaW50IGVycjsKKyAgICBpbnQgbGVuID0gKGludClzdHJsZW4oaGVsbG8pKzE7CisgICAgZ3pGaWxlIGZpbGU7CisgICAgel9vZmZfdCBwb3M7CisKKyAgICBmaWxlID0gZ3pvcGVuKGZuYW1lLCAid2IiKTsKKyAgICBpZiAoZmlsZSA9PSBOVUxMKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZ3pvcGVuIGVycm9yXG4iKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgZ3pwdXRjKGZpbGUsICdoJyk7CisgICAgaWYgKGd6cHV0cyhmaWxlLCAiZWxsbyIpICE9IDQpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJnenB1dHMgZXJyOiAlc1xuIiwgZ3plcnJvcihmaWxlLCAmZXJyKSk7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIGlmIChnenByaW50ZihmaWxlLCAiLCAlcyEiLCAiaGVsbG8iKSAhPSA4KSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZ3pwcmludGYgZXJyOiAlc1xuIiwgZ3plcnJvcihmaWxlLCAmZXJyKSk7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIGd6c2VlayhmaWxlLCAxTCwgU0VFS19DVVIpOyAvKiBhZGQgb25lIHplcm8gYnl0ZSAqLworICAgIGd6Y2xvc2UoZmlsZSk7CisKKyAgICBmaWxlID0gZ3pvcGVuKGZuYW1lLCAicmIiKTsKKyAgICBpZiAoZmlsZSA9PSBOVUxMKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZ3pvcGVuIGVycm9yXG4iKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgc3RyY3B5KChjaGFyKil1bmNvbXByLCAiZ2FyYmFnZSIpOworCisgICAgaWYgKGd6cmVhZChmaWxlLCB1bmNvbXByLCAodW5zaWduZWQpdW5jb21wckxlbikgIT0gbGVuKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZ3pyZWFkIGVycjogJXNcbiIsIGd6ZXJyb3IoZmlsZSwgJmVycikpOworICAgICAgICBleGl0KDEpOworICAgIH0KKyAgICBpZiAoc3RyY21wKChjaGFyKil1bmNvbXByLCBoZWxsbykpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJiYWQgZ3pyZWFkOiAlc1xuIiwgKGNoYXIqKXVuY29tcHIpOworICAgICAgICBleGl0KDEpOworICAgIH0gZWxzZSB7CisgICAgICAgIHByaW50ZigiZ3pyZWFkKCk6ICVzXG4iLCAoY2hhciopdW5jb21wcik7CisgICAgfQorCisgICAgcG9zID0gZ3pzZWVrKGZpbGUsIC04TCwgU0VFS19DVVIpOworICAgIGlmIChwb3MgIT0gNiB8fCBnenRlbGwoZmlsZSkgIT0gcG9zKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZ3pzZWVrIGVycm9yLCBwb3M9JWxkLCBnenRlbGw9JWxkXG4iLAorICAgICAgICAgICAgICAgIChsb25nKXBvcywgKGxvbmcpZ3p0ZWxsKGZpbGUpKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9CisKKyAgICBpZiAoZ3pnZXRjKGZpbGUpICE9ICcgJykgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImd6Z2V0YyBlcnJvclxuIik7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorCisgICAgaWYgKGd6dW5nZXRjKCcgJywgZmlsZSkgIT0gJyAnKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZ3p1bmdldGMgZXJyb3JcbiIpOworICAgICAgICBleGl0KDEpOworICAgIH0KKworICAgIGd6Z2V0cyhmaWxlLCAoY2hhciopdW5jb21wciwgKGludCl1bmNvbXByTGVuKTsKKyAgICBpZiAoc3RybGVuKChjaGFyKil1bmNvbXByKSAhPSA3KSB7IC8qICIgaGVsbG8hIiAqLworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImd6Z2V0cyBlcnIgYWZ0ZXIgZ3pzZWVrOiAlc1xuIiwgZ3plcnJvcihmaWxlLCAmZXJyKSk7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIGlmIChzdHJjbXAoKGNoYXIqKXVuY29tcHIsIGhlbGxvICsgNikpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJiYWQgZ3pnZXRzIGFmdGVyIGd6c2Vla1xuIik7CisgICAgICAgIGV4aXQoMSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHJpbnRmKCJnemdldHMoKSBhZnRlciBnenNlZWs6ICVzXG4iLCAoY2hhciopdW5jb21wcik7CisgICAgfQorCisgICAgZ3pjbG9zZShmaWxlKTsKKyNlbmRpZgorfQorCisjZW5kaWYgLyogWl9TT0xPICovCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogVGVzdCBkZWZsYXRlKCkgd2l0aCBzbWFsbCBidWZmZXJzCisgKi8KK3ZvaWQgdGVzdF9kZWZsYXRlKGNvbXByLCBjb21wckxlbikKKyAgICBCeXRlICpjb21wcjsKKyAgICB1TG9uZyBjb21wckxlbjsKK3sKKyAgICB6X3N0cmVhbSBjX3N0cmVhbTsgLyogY29tcHJlc3Npb24gc3RyZWFtICovCisgICAgaW50IGVycjsKKyAgICB1TG9uZyBsZW4gPSAodUxvbmcpc3RybGVuKGhlbGxvKSsxOworCisgICAgY19zdHJlYW0uemFsbG9jID0gemFsbG9jOworICAgIGNfc3RyZWFtLnpmcmVlID0gemZyZWU7CisgICAgY19zdHJlYW0ub3BhcXVlID0gKHZvaWRwZikwOworCisgICAgZXJyID0gZGVmbGF0ZUluaXQoJmNfc3RyZWFtLCBaX0RFRkFVTFRfQ09NUFJFU1NJT04pOworICAgIENIRUNLX0VSUihlcnIsICJkZWZsYXRlSW5pdCIpOworCisgICAgY19zdHJlYW0ubmV4dF9pbiAgPSAoel9jb25zdCB1bnNpZ25lZCBjaGFyICopaGVsbG87CisgICAgY19zdHJlYW0ubmV4dF9vdXQgPSBjb21wcjsKKworICAgIHdoaWxlIChjX3N0cmVhbS50b3RhbF9pbiAhPSBsZW4gJiYgY19zdHJlYW0udG90YWxfb3V0IDwgY29tcHJMZW4pIHsKKyAgICAgICAgY19zdHJlYW0uYXZhaWxfaW4gPSBjX3N0cmVhbS5hdmFpbF9vdXQgPSAxOyAvKiBmb3JjZSBzbWFsbCBidWZmZXJzICovCisgICAgICAgIGVyciA9IGRlZmxhdGUoJmNfc3RyZWFtLCBaX05PX0ZMVVNIKTsKKyAgICAgICAgQ0hFQ0tfRVJSKGVyciwgImRlZmxhdGUiKTsKKyAgICB9CisgICAgLyogRmluaXNoIHRoZSBzdHJlYW0sIHN0aWxsIGZvcmNpbmcgc21hbGwgYnVmZmVyczogKi8KKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGNfc3RyZWFtLmF2YWlsX291dCA9IDE7CisgICAgICAgIGVyciA9IGRlZmxhdGUoJmNfc3RyZWFtLCBaX0ZJTklTSCk7CisgICAgICAgIGlmIChlcnIgPT0gWl9TVFJFQU1fRU5EKSBicmVhazsKKyAgICAgICAgQ0hFQ0tfRVJSKGVyciwgImRlZmxhdGUiKTsKKyAgICB9CisKKyAgICBlcnIgPSBkZWZsYXRlRW5kKCZjX3N0cmVhbSk7CisgICAgQ0hFQ0tfRVJSKGVyciwgImRlZmxhdGVFbmQiKTsKK30KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBUZXN0IGluZmxhdGUoKSB3aXRoIHNtYWxsIGJ1ZmZlcnMKKyAqLwordm9pZCB0ZXN0X2luZmxhdGUoY29tcHIsIGNvbXByTGVuLCB1bmNvbXByLCB1bmNvbXByTGVuKQorICAgIEJ5dGUgKmNvbXByLCAqdW5jb21wcjsKKyAgICB1TG9uZyBjb21wckxlbiwgdW5jb21wckxlbjsKK3sKKyAgICBpbnQgZXJyOworICAgIHpfc3RyZWFtIGRfc3RyZWFtOyAvKiBkZWNvbXByZXNzaW9uIHN0cmVhbSAqLworCisgICAgc3RyY3B5KChjaGFyKil1bmNvbXByLCAiZ2FyYmFnZSIpOworCisgICAgZF9zdHJlYW0uemFsbG9jID0gemFsbG9jOworICAgIGRfc3RyZWFtLnpmcmVlID0gemZyZWU7CisgICAgZF9zdHJlYW0ub3BhcXVlID0gKHZvaWRwZikwOworCisgICAgZF9zdHJlYW0ubmV4dF9pbiAgPSBjb21wcjsKKyAgICBkX3N0cmVhbS5hdmFpbF9pbiA9IDA7CisgICAgZF9zdHJlYW0ubmV4dF9vdXQgPSB1bmNvbXByOworCisgICAgZXJyID0gaW5mbGF0ZUluaXQoJmRfc3RyZWFtKTsKKyAgICBDSEVDS19FUlIoZXJyLCAiaW5mbGF0ZUluaXQiKTsKKworICAgIHdoaWxlIChkX3N0cmVhbS50b3RhbF9vdXQgPCB1bmNvbXByTGVuICYmIGRfc3RyZWFtLnRvdGFsX2luIDwgY29tcHJMZW4pIHsKKyAgICAgICAgZF9zdHJlYW0uYXZhaWxfaW4gPSBkX3N0cmVhbS5hdmFpbF9vdXQgPSAxOyAvKiBmb3JjZSBzbWFsbCBidWZmZXJzICovCisgICAgICAgIGVyciA9IGluZmxhdGUoJmRfc3RyZWFtLCBaX05PX0ZMVVNIKTsKKyAgICAgICAgaWYgKGVyciA9PSBaX1NUUkVBTV9FTkQpIGJyZWFrOworICAgICAgICBDSEVDS19FUlIoZXJyLCAiaW5mbGF0ZSIpOworICAgIH0KKworICAgIGVyciA9IGluZmxhdGVFbmQoJmRfc3RyZWFtKTsKKyAgICBDSEVDS19FUlIoZXJyLCAiaW5mbGF0ZUVuZCIpOworCisgICAgaWYgKHN0cmNtcCgoY2hhciopdW5jb21wciwgaGVsbG8pKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiYmFkIGluZmxhdGVcbiIpOworICAgICAgICBleGl0KDEpOworICAgIH0gZWxzZSB7CisgICAgICAgIHByaW50ZigiaW5mbGF0ZSgpOiAlc1xuIiwgKGNoYXIgKil1bmNvbXByKTsKKyAgICB9Cit9CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogVGVzdCBkZWZsYXRlKCkgd2l0aCBsYXJnZSBidWZmZXJzIGFuZCBkeW5hbWljIGNoYW5nZSBvZiBjb21wcmVzc2lvbiBsZXZlbAorICovCit2b2lkIHRlc3RfbGFyZ2VfZGVmbGF0ZShjb21wciwgY29tcHJMZW4sIHVuY29tcHIsIHVuY29tcHJMZW4pCisgICAgQnl0ZSAqY29tcHIsICp1bmNvbXByOworICAgIHVMb25nIGNvbXByTGVuLCB1bmNvbXByTGVuOworeworICAgIHpfc3RyZWFtIGNfc3RyZWFtOyAvKiBjb21wcmVzc2lvbiBzdHJlYW0gKi8KKyAgICBpbnQgZXJyOworCisgICAgY19zdHJlYW0uemFsbG9jID0gemFsbG9jOworICAgIGNfc3RyZWFtLnpmcmVlID0gemZyZWU7CisgICAgY19zdHJlYW0ub3BhcXVlID0gKHZvaWRwZikwOworCisgICAgZXJyID0gZGVmbGF0ZUluaXQoJmNfc3RyZWFtLCBaX0JFU1RfU1BFRUQpOworICAgIENIRUNLX0VSUihlcnIsICJkZWZsYXRlSW5pdCIpOworCisgICAgY19zdHJlYW0ubmV4dF9vdXQgPSBjb21wcjsKKyAgICBjX3N0cmVhbS5hdmFpbF9vdXQgPSAodUludCljb21wckxlbjsKKworICAgIC8qIEF0IHRoaXMgcG9pbnQsIHVuY29tcHIgaXMgc3RpbGwgbW9zdGx5IHplcm9lcywgc28gaXQgc2hvdWxkIGNvbXByZXNzCisgICAgICogdmVyeSB3ZWxsOgorICAgICAqLworICAgIGNfc3RyZWFtLm5leHRfaW4gPSB1bmNvbXByOworICAgIGNfc3RyZWFtLmF2YWlsX2luID0gKHVJbnQpdW5jb21wckxlbjsKKyAgICBlcnIgPSBkZWZsYXRlKCZjX3N0cmVhbSwgWl9OT19GTFVTSCk7CisgICAgQ0hFQ0tfRVJSKGVyciwgImRlZmxhdGUiKTsKKyAgICBpZiAoY19zdHJlYW0uYXZhaWxfaW4gIT0gMCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImRlZmxhdGUgbm90IGdyZWVkeVxuIik7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorCisgICAgLyogRmVlZCBpbiBhbHJlYWR5IGNvbXByZXNzZWQgZGF0YSBhbmQgc3dpdGNoIHRvIG5vIGNvbXByZXNzaW9uOiAqLworICAgIGRlZmxhdGVQYXJhbXMoJmNfc3RyZWFtLCBaX05PX0NPTVBSRVNTSU9OLCBaX0RFRkFVTFRfU1RSQVRFR1kpOworICAgIGNfc3RyZWFtLm5leHRfaW4gPSBjb21wcjsKKyAgICBjX3N0cmVhbS5hdmFpbF9pbiA9ICh1SW50KWNvbXByTGVuLzI7CisgICAgZXJyID0gZGVmbGF0ZSgmY19zdHJlYW0sIFpfTk9fRkxVU0gpOworICAgIENIRUNLX0VSUihlcnIsICJkZWZsYXRlIik7CisKKyAgICAvKiBTd2l0Y2ggYmFjayB0byBjb21wcmVzc2luZyBtb2RlOiAqLworICAgIGRlZmxhdGVQYXJhbXMoJmNfc3RyZWFtLCBaX0JFU1RfQ09NUFJFU1NJT04sIFpfRklMVEVSRUQpOworICAgIGNfc3RyZWFtLm5leHRfaW4gPSB1bmNvbXByOworICAgIGNfc3RyZWFtLmF2YWlsX2luID0gKHVJbnQpdW5jb21wckxlbjsKKyAgICBlcnIgPSBkZWZsYXRlKCZjX3N0cmVhbSwgWl9OT19GTFVTSCk7CisgICAgQ0hFQ0tfRVJSKGVyciwgImRlZmxhdGUiKTsKKworICAgIGVyciA9IGRlZmxhdGUoJmNfc3RyZWFtLCBaX0ZJTklTSCk7CisgICAgaWYgKGVyciAhPSBaX1NUUkVBTV9FTkQpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJkZWZsYXRlIHNob3VsZCByZXBvcnQgWl9TVFJFQU1fRU5EXG4iKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgZXJyID0gZGVmbGF0ZUVuZCgmY19zdHJlYW0pOworICAgIENIRUNLX0VSUihlcnIsICJkZWZsYXRlRW5kIik7Cit9CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogVGVzdCBpbmZsYXRlKCkgd2l0aCBsYXJnZSBidWZmZXJzCisgKi8KK3ZvaWQgdGVzdF9sYXJnZV9pbmZsYXRlKGNvbXByLCBjb21wckxlbiwgdW5jb21wciwgdW5jb21wckxlbikKKyAgICBCeXRlICpjb21wciwgKnVuY29tcHI7CisgICAgdUxvbmcgY29tcHJMZW4sIHVuY29tcHJMZW47Cit7CisgICAgaW50IGVycjsKKyAgICB6X3N0cmVhbSBkX3N0cmVhbTsgLyogZGVjb21wcmVzc2lvbiBzdHJlYW0gKi8KKworICAgIHN0cmNweSgoY2hhciopdW5jb21wciwgImdhcmJhZ2UiKTsKKworICAgIGRfc3RyZWFtLnphbGxvYyA9IHphbGxvYzsKKyAgICBkX3N0cmVhbS56ZnJlZSA9IHpmcmVlOworICAgIGRfc3RyZWFtLm9wYXF1ZSA9ICh2b2lkcGYpMDsKKworICAgIGRfc3RyZWFtLm5leHRfaW4gID0gY29tcHI7CisgICAgZF9zdHJlYW0uYXZhaWxfaW4gPSAodUludCljb21wckxlbjsKKworICAgIGVyciA9IGluZmxhdGVJbml0KCZkX3N0cmVhbSk7CisgICAgQ0hFQ0tfRVJSKGVyciwgImluZmxhdGVJbml0Iik7CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGRfc3RyZWFtLm5leHRfb3V0ID0gdW5jb21wcjsgICAgICAgICAgICAvKiBkaXNjYXJkIHRoZSBvdXRwdXQgKi8KKyAgICAgICAgZF9zdHJlYW0uYXZhaWxfb3V0ID0gKHVJbnQpdW5jb21wckxlbjsKKyAgICAgICAgZXJyID0gaW5mbGF0ZSgmZF9zdHJlYW0sIFpfTk9fRkxVU0gpOworICAgICAgICBpZiAoZXJyID09IFpfU1RSRUFNX0VORCkgYnJlYWs7CisgICAgICAgIENIRUNLX0VSUihlcnIsICJsYXJnZSBpbmZsYXRlIik7CisgICAgfQorCisgICAgZXJyID0gaW5mbGF0ZUVuZCgmZF9zdHJlYW0pOworICAgIENIRUNLX0VSUihlcnIsICJpbmZsYXRlRW5kIik7CisKKyAgICBpZiAoZF9zdHJlYW0udG90YWxfb3V0ICE9IDIqdW5jb21wckxlbiArIGNvbXByTGVuLzIpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJiYWQgbGFyZ2UgaW5mbGF0ZTogJWxkXG4iLCBkX3N0cmVhbS50b3RhbF9vdXQpOworICAgICAgICBleGl0KDEpOworICAgIH0gZWxzZSB7CisgICAgICAgIHByaW50ZigibGFyZ2VfaW5mbGF0ZSgpOiBPS1xuIik7CisgICAgfQorfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIFRlc3QgZGVmbGF0ZSgpIHdpdGggZnVsbCBmbHVzaAorICovCit2b2lkIHRlc3RfZmx1c2goY29tcHIsIGNvbXByTGVuKQorICAgIEJ5dGUgKmNvbXByOworICAgIHVMb25nICpjb21wckxlbjsKK3sKKyAgICB6X3N0cmVhbSBjX3N0cmVhbTsgLyogY29tcHJlc3Npb24gc3RyZWFtICovCisgICAgaW50IGVycjsKKyAgICB1SW50IGxlbiA9ICh1SW50KXN0cmxlbihoZWxsbykrMTsKKworICAgIGNfc3RyZWFtLnphbGxvYyA9IHphbGxvYzsKKyAgICBjX3N0cmVhbS56ZnJlZSA9IHpmcmVlOworICAgIGNfc3RyZWFtLm9wYXF1ZSA9ICh2b2lkcGYpMDsKKworICAgIGVyciA9IGRlZmxhdGVJbml0KCZjX3N0cmVhbSwgWl9ERUZBVUxUX0NPTVBSRVNTSU9OKTsKKyAgICBDSEVDS19FUlIoZXJyLCAiZGVmbGF0ZUluaXQiKTsKKworICAgIGNfc3RyZWFtLm5leHRfaW4gID0gKHpfY29uc3QgdW5zaWduZWQgY2hhciAqKWhlbGxvOworICAgIGNfc3RyZWFtLm5leHRfb3V0ID0gY29tcHI7CisgICAgY19zdHJlYW0uYXZhaWxfaW4gPSAzOworICAgIGNfc3RyZWFtLmF2YWlsX291dCA9ICh1SW50KSpjb21wckxlbjsKKyAgICBlcnIgPSBkZWZsYXRlKCZjX3N0cmVhbSwgWl9GVUxMX0ZMVVNIKTsKKyAgICBDSEVDS19FUlIoZXJyLCAiZGVmbGF0ZSIpOworCisgICAgY29tcHJbM10rKzsgLyogZm9yY2UgYW4gZXJyb3IgaW4gZmlyc3QgY29tcHJlc3NlZCBibG9jayAqLworICAgIGNfc3RyZWFtLmF2YWlsX2luID0gbGVuIC0gMzsKKworICAgIGVyciA9IGRlZmxhdGUoJmNfc3RyZWFtLCBaX0ZJTklTSCk7CisgICAgaWYgKGVyciAhPSBaX1NUUkVBTV9FTkQpIHsKKyAgICAgICAgQ0hFQ0tfRVJSKGVyciwgImRlZmxhdGUiKTsKKyAgICB9CisgICAgZXJyID0gZGVmbGF0ZUVuZCgmY19zdHJlYW0pOworICAgIENIRUNLX0VSUihlcnIsICJkZWZsYXRlRW5kIik7CisKKyAgICAqY29tcHJMZW4gPSBjX3N0cmVhbS50b3RhbF9vdXQ7Cit9CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogVGVzdCBpbmZsYXRlU3luYygpCisgKi8KK3ZvaWQgdGVzdF9zeW5jKGNvbXByLCBjb21wckxlbiwgdW5jb21wciwgdW5jb21wckxlbikKKyAgICBCeXRlICpjb21wciwgKnVuY29tcHI7CisgICAgdUxvbmcgY29tcHJMZW4sIHVuY29tcHJMZW47Cit7CisgICAgaW50IGVycjsKKyAgICB6X3N0cmVhbSBkX3N0cmVhbTsgLyogZGVjb21wcmVzc2lvbiBzdHJlYW0gKi8KKworICAgIHN0cmNweSgoY2hhciopdW5jb21wciwgImdhcmJhZ2UiKTsKKworICAgIGRfc3RyZWFtLnphbGxvYyA9IHphbGxvYzsKKyAgICBkX3N0cmVhbS56ZnJlZSA9IHpmcmVlOworICAgIGRfc3RyZWFtLm9wYXF1ZSA9ICh2b2lkcGYpMDsKKworICAgIGRfc3RyZWFtLm5leHRfaW4gID0gY29tcHI7CisgICAgZF9zdHJlYW0uYXZhaWxfaW4gPSAyOyAvKiBqdXN0IHJlYWQgdGhlIHpsaWIgaGVhZGVyICovCisKKyAgICBlcnIgPSBpbmZsYXRlSW5pdCgmZF9zdHJlYW0pOworICAgIENIRUNLX0VSUihlcnIsICJpbmZsYXRlSW5pdCIpOworCisgICAgZF9zdHJlYW0ubmV4dF9vdXQgPSB1bmNvbXByOworICAgIGRfc3RyZWFtLmF2YWlsX291dCA9ICh1SW50KXVuY29tcHJMZW47CisKKyAgICBlcnIgPSBpbmZsYXRlKCZkX3N0cmVhbSwgWl9OT19GTFVTSCk7CisgICAgQ0hFQ0tfRVJSKGVyciwgImluZmxhdGUiKTsKKworICAgIGRfc3RyZWFtLmF2YWlsX2luID0gKHVJbnQpY29tcHJMZW4tMjsgICAvKiByZWFkIGFsbCBjb21wcmVzc2VkIGRhdGEgKi8KKyAgICBlcnIgPSBpbmZsYXRlU3luYygmZF9zdHJlYW0pOyAgICAgICAgICAgLyogYnV0IHNraXAgdGhlIGRhbWFnZWQgcGFydCAqLworICAgIENIRUNLX0VSUihlcnIsICJpbmZsYXRlU3luYyIpOworCisgICAgZXJyID0gaW5mbGF0ZSgmZF9zdHJlYW0sIFpfRklOSVNIKTsKKyAgICBpZiAoZXJyICE9IFpfU1RSRUFNX0VORCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImluZmxhdGUgc2hvdWxkIHJlcG9ydCBaX1NUUkVBTV9FTkRcbiIpOworICAgICAgICBleGl0KDEpOworICAgIH0KKyAgICBlcnIgPSBpbmZsYXRlRW5kKCZkX3N0cmVhbSk7CisgICAgQ0hFQ0tfRVJSKGVyciwgImluZmxhdGVFbmQiKTsKKworICAgIHByaW50ZigiYWZ0ZXIgaW5mbGF0ZVN5bmMoKTogaGVsJXNcbiIsIChjaGFyICopdW5jb21wcik7Cit9CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogVGVzdCBkZWZsYXRlKCkgd2l0aCBwcmVzZXQgZGljdGlvbmFyeQorICovCit2b2lkIHRlc3RfZGljdF9kZWZsYXRlKGNvbXByLCBjb21wckxlbikKKyAgICBCeXRlICpjb21wcjsKKyAgICB1TG9uZyBjb21wckxlbjsKK3sKKyAgICB6X3N0cmVhbSBjX3N0cmVhbTsgLyogY29tcHJlc3Npb24gc3RyZWFtICovCisgICAgaW50IGVycjsKKworICAgIGNfc3RyZWFtLnphbGxvYyA9IHphbGxvYzsKKyAgICBjX3N0cmVhbS56ZnJlZSA9IHpmcmVlOworICAgIGNfc3RyZWFtLm9wYXF1ZSA9ICh2b2lkcGYpMDsKKworICAgIGVyciA9IGRlZmxhdGVJbml0KCZjX3N0cmVhbSwgWl9CRVNUX0NPTVBSRVNTSU9OKTsKKyAgICBDSEVDS19FUlIoZXJyLCAiZGVmbGF0ZUluaXQiKTsKKworICAgIGVyciA9IGRlZmxhdGVTZXREaWN0aW9uYXJ5KCZjX3N0cmVhbSwKKyAgICAgICAgICAgICAgICAoY29uc3QgQnl0ZWYqKWRpY3Rpb25hcnksIChpbnQpc2l6ZW9mKGRpY3Rpb25hcnkpKTsKKyAgICBDSEVDS19FUlIoZXJyLCAiZGVmbGF0ZVNldERpY3Rpb25hcnkiKTsKKworICAgIGRpY3RJZCA9IGNfc3RyZWFtLmFkbGVyOworICAgIGNfc3RyZWFtLm5leHRfb3V0ID0gY29tcHI7CisgICAgY19zdHJlYW0uYXZhaWxfb3V0ID0gKHVJbnQpY29tcHJMZW47CisKKyAgICBjX3N0cmVhbS5uZXh0X2luID0gKHpfY29uc3QgdW5zaWduZWQgY2hhciAqKWhlbGxvOworICAgIGNfc3RyZWFtLmF2YWlsX2luID0gKHVJbnQpc3RybGVuKGhlbGxvKSsxOworCisgICAgZXJyID0gZGVmbGF0ZSgmY19zdHJlYW0sIFpfRklOSVNIKTsKKyAgICBpZiAoZXJyICE9IFpfU1RSRUFNX0VORCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImRlZmxhdGUgc2hvdWxkIHJlcG9ydCBaX1NUUkVBTV9FTkRcbiIpOworICAgICAgICBleGl0KDEpOworICAgIH0KKyAgICBlcnIgPSBkZWZsYXRlRW5kKCZjX3N0cmVhbSk7CisgICAgQ0hFQ0tfRVJSKGVyciwgImRlZmxhdGVFbmQiKTsKK30KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBUZXN0IGluZmxhdGUoKSB3aXRoIGEgcHJlc2V0IGRpY3Rpb25hcnkKKyAqLwordm9pZCB0ZXN0X2RpY3RfaW5mbGF0ZShjb21wciwgY29tcHJMZW4sIHVuY29tcHIsIHVuY29tcHJMZW4pCisgICAgQnl0ZSAqY29tcHIsICp1bmNvbXByOworICAgIHVMb25nIGNvbXByTGVuLCB1bmNvbXByTGVuOworeworICAgIGludCBlcnI7CisgICAgel9zdHJlYW0gZF9zdHJlYW07IC8qIGRlY29tcHJlc3Npb24gc3RyZWFtICovCisKKyAgICBzdHJjcHkoKGNoYXIqKXVuY29tcHIsICJnYXJiYWdlIik7CisKKyAgICBkX3N0cmVhbS56YWxsb2MgPSB6YWxsb2M7CisgICAgZF9zdHJlYW0uemZyZWUgPSB6ZnJlZTsKKyAgICBkX3N0cmVhbS5vcGFxdWUgPSAodm9pZHBmKTA7CisKKyAgICBkX3N0cmVhbS5uZXh0X2luICA9IGNvbXByOworICAgIGRfc3RyZWFtLmF2YWlsX2luID0gKHVJbnQpY29tcHJMZW47CisKKyAgICBlcnIgPSBpbmZsYXRlSW5pdCgmZF9zdHJlYW0pOworICAgIENIRUNLX0VSUihlcnIsICJpbmZsYXRlSW5pdCIpOworCisgICAgZF9zdHJlYW0ubmV4dF9vdXQgPSB1bmNvbXByOworICAgIGRfc3RyZWFtLmF2YWlsX291dCA9ICh1SW50KXVuY29tcHJMZW47CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGVyciA9IGluZmxhdGUoJmRfc3RyZWFtLCBaX05PX0ZMVVNIKTsKKyAgICAgICAgaWYgKGVyciA9PSBaX1NUUkVBTV9FTkQpIGJyZWFrOworICAgICAgICBpZiAoZXJyID09IFpfTkVFRF9ESUNUKSB7CisgICAgICAgICAgICBpZiAoZF9zdHJlYW0uYWRsZXIgIT0gZGljdElkKSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJ1bmV4cGVjdGVkIGRpY3Rpb25hcnkiKTsKKyAgICAgICAgICAgICAgICBleGl0KDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZXJyID0gaW5mbGF0ZVNldERpY3Rpb25hcnkoJmRfc3RyZWFtLCAoY29uc3QgQnl0ZWYqKWRpY3Rpb25hcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KXNpemVvZihkaWN0aW9uYXJ5KSk7CisgICAgICAgIH0KKyAgICAgICAgQ0hFQ0tfRVJSKGVyciwgImluZmxhdGUgd2l0aCBkaWN0Iik7CisgICAgfQorCisgICAgZXJyID0gaW5mbGF0ZUVuZCgmZF9zdHJlYW0pOworICAgIENIRUNLX0VSUihlcnIsICJpbmZsYXRlRW5kIik7CisKKyAgICBpZiAoc3RyY21wKChjaGFyKil1bmNvbXByLCBoZWxsbykpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJiYWQgaW5mbGF0ZSB3aXRoIGRpY3RcbiIpOworICAgICAgICBleGl0KDEpOworICAgIH0gZWxzZSB7CisgICAgICAgIHByaW50ZigiaW5mbGF0ZSB3aXRoIGRpY3Rpb25hcnk6ICVzXG4iLCAoY2hhciAqKXVuY29tcHIpOworICAgIH0KK30KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBVc2FnZTogIGV4YW1wbGUgW291dHB1dC5neiAgW2lucHV0Lmd6XV0KKyAqLworCitpbnQgbWFpbihhcmdjLCBhcmd2KQorICAgIGludCBhcmdjOworICAgIGNoYXIgKmFyZ3ZbXTsKK3sKKyAgICBCeXRlICpjb21wciwgKnVuY29tcHI7CisgICAgdUxvbmcgY29tcHJMZW4gPSAxMDAwMCpzaXplb2YoaW50KTsgLyogZG9uJ3Qgb3ZlcmZsb3cgb24gTVNET1MgKi8KKyAgICB1TG9uZyB1bmNvbXByTGVuID0gY29tcHJMZW47CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIG15VmVyc2lvbiA9IFpMSUJfVkVSU0lPTjsKKworICAgIGlmICh6bGliVmVyc2lvbigpWzBdICE9IG15VmVyc2lvblswXSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImluY29tcGF0aWJsZSB6bGliIHZlcnNpb25cbiIpOworICAgICAgICBleGl0KDEpOworCisgICAgfSBlbHNlIGlmIChzdHJjbXAoemxpYlZlcnNpb24oKSwgWkxJQl9WRVJTSU9OKSAhPSAwKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAid2FybmluZzogZGlmZmVyZW50IHpsaWIgdmVyc2lvblxuIik7CisgICAgfQorCisgICAgcHJpbnRmKCJ6bGliIHZlcnNpb24gJXMgPSAweCUwNHgsIGNvbXBpbGUgZmxhZ3MgPSAweCVseFxuIiwKKyAgICAgICAgICAgIFpMSUJfVkVSU0lPTiwgWkxJQl9WRVJOVU0sIHpsaWJDb21waWxlRmxhZ3MoKSk7CisKKyAgICBjb21wciAgICA9IChCeXRlKiljYWxsb2MoKHVJbnQpY29tcHJMZW4sIDEpOworICAgIHVuY29tcHIgID0gKEJ5dGUqKWNhbGxvYygodUludCl1bmNvbXByTGVuLCAxKTsKKyAgICAvKiBjb21wciBhbmQgdW5jb21wciBhcmUgY2xlYXJlZCB0byBhdm9pZCByZWFkaW5nIHVuaW5pdGlhbGl6ZWQKKyAgICAgKiBkYXRhIGFuZCB0byBlbnN1cmUgdGhhdCB1bmNvbXByIGNvbXByZXNzZXMgd2VsbC4KKyAgICAgKi8KKyAgICBpZiAoY29tcHIgPT0gWl9OVUxMIHx8IHVuY29tcHIgPT0gWl9OVUxMKSB7CisgICAgICAgIHByaW50Zigib3V0IG9mIG1lbW9yeVxuIik7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorCisjaWZkZWYgWl9TT0xPCisgICAgKHZvaWQpYXJnYzsKKyAgICAodm9pZClhcmd2OworI2Vsc2UKKyAgICB0ZXN0X2NvbXByZXNzKGNvbXByLCBjb21wckxlbiwgdW5jb21wciwgdW5jb21wckxlbik7CisKKyAgICB0ZXN0X2d6aW8oKGFyZ2MgPiAxID8gYXJndlsxXSA6IFRFU1RGSUxFKSwKKyAgICAgICAgICAgICAgdW5jb21wciwgdW5jb21wckxlbik7CisjZW5kaWYKKworICAgIHRlc3RfZGVmbGF0ZShjb21wciwgY29tcHJMZW4pOworICAgIHRlc3RfaW5mbGF0ZShjb21wciwgY29tcHJMZW4sIHVuY29tcHIsIHVuY29tcHJMZW4pOworCisgICAgdGVzdF9sYXJnZV9kZWZsYXRlKGNvbXByLCBjb21wckxlbiwgdW5jb21wciwgdW5jb21wckxlbik7CisgICAgdGVzdF9sYXJnZV9pbmZsYXRlKGNvbXByLCBjb21wckxlbiwgdW5jb21wciwgdW5jb21wckxlbik7CisKKyAgICB0ZXN0X2ZsdXNoKGNvbXByLCAmY29tcHJMZW4pOworICAgIHRlc3Rfc3luYyhjb21wciwgY29tcHJMZW4sIHVuY29tcHIsIHVuY29tcHJMZW4pOworICAgIGNvbXByTGVuID0gdW5jb21wckxlbjsKKworICAgIHRlc3RfZGljdF9kZWZsYXRlKGNvbXByLCBjb21wckxlbik7CisgICAgdGVzdF9kaWN0X2luZmxhdGUoY29tcHIsIGNvbXByTGVuLCB1bmNvbXByLCB1bmNvbXByTGVuKTsKKworICAgIGZyZWUoY29tcHIpOworICAgIGZyZWUodW5jb21wcik7CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2luZmNvdmVyLmMgYi9zcmMvdGVzdC9pbmZjb3Zlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiZTAxNjQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9pbmZjb3Zlci5jCkBAIC0wLDAgKzEsNjcxIEBACisvKiBpbmZjb3Zlci5jIC0tIHRlc3QgemxpYidzIGluZmxhdGUgcm91dGluZXMgd2l0aCBmdWxsIGNvZGUgY292ZXJhZ2UKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNiBNYXJrIEFkbGVyCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCisgKi8KKworLyogdG8gdXNlLCBkbzogLi9jb25maWd1cmUgLS1jb3ZlciAmJiBtYWtlIGNvdmVyICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgInpsaWIuaCIKKworLyogZ2V0IGRlZmluaXRpb24gb2YgaW50ZXJuYWwgc3RydWN0dXJlIHNvIHdlIGNhbiBtZXNzIHdpdGggaXQgKHNlZSBwdWxsKCkpLAorICAgYW5kIHNvIHdlIGNhbiBjYWxsIGluZmxhdGVfdHJlZXMoKSAoc2VlIGNvdmVyNSgpKSAqLworI2RlZmluZSBaTElCX0lOVEVSTkFMCisjaW5jbHVkZSAiaW5mdHJlZXMuaCIKKyNpbmNsdWRlICJpbmZsYXRlLmgiCisKKyNkZWZpbmUgbG9jYWwgc3RhdGljCisKKy8qIC0tIG1lbW9yeSB0cmFja2luZyByb3V0aW5lcyAtLSAqLworCisvKgorICAgVGhlc2UgbWVtb3J5IHRyYWNraW5nIHJvdXRpbmVzIGFyZSBwcm92aWRlZCB0byB6bGliIGFuZCB0cmFjayBhbGwgb2YgemxpYidzCisgICBhbGxvY2F0aW9ucyBhbmQgZGVhbGxvY2F0aW9ucywgY2hlY2sgZm9yIExJRk8gb3BlcmF0aW9ucywga2VlcCBhIGN1cnJlbnQKKyAgIGFuZCBoaWdoIHdhdGVyIG1hcmsgb2YgdG90YWwgYnl0ZXMgcmVxdWVzdGVkLCBvcHRpb25hbGx5IHNldCBhIGxpbWl0IG9uIHRoZQorICAgdG90YWwgbWVtb3J5IHRoYXQgY2FuIGJlIGFsbG9jYXRlZCwgYW5kIHdoZW4gZG9uZSBjaGVjayBmb3IgbWVtb3J5IGxlYWtzLgorCisgICBUaGV5IGFyZSB1c2VkIGFzIGZvbGxvd3M6CisKKyAgIHpfc3RyZWFtIHN0cm07CisgICBtZW1fc2V0dXAoJnN0cm0pICAgICAgICAgaW5pdGlhbGl6ZXMgdGhlIG1lbW9yeSB0cmFja2luZyBhbmQgc2V0cyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB6YWxsb2MsIHpmcmVlLCBhbmQgb3BhcXVlIG1lbWJlcnMgb2Ygc3RybSB0byB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnkgdHJhY2tpbmcgZm9yIGFsbCB6bGliIG9wZXJhdGlvbnMgb24gc3RybQorICAgbWVtX2xpbWl0KCZzdHJtLCBsaW1pdCkgIHNldHMgYSBsaW1pdCBvbiB0aGUgdG90YWwgYnl0ZXMgcmVxdWVzdGVkIC0tIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0IHRoYXQgZXhjZWVkcyB0aGlzIGxpbWl0IHdpbGwgcmVzdWx0IGluIGFuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGlvbiBmYWlsdXJlIChyZXR1cm5zIE5VTEwpIC0tIHNldHRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGltaXQgdG8gemVybyBtZWFucyBubyBsaW1pdCwgd2hpY2ggaXMgdGhlIGRlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlciBtZW1fc2V0dXAoKQorICAgbWVtX3VzZWQoJnN0cm0sICJtc2ciKSAgIHByaW50cyB0byBzdGRlcnIgIm1zZyIgYW5kIHRoZSB0b3RhbCBieXRlcyB1c2VkCisgICBtZW1faGlnaCgmc3RybSwgIm1zZyIpICAgcHJpbnRzIHRvIHN0ZGVyciAibXNnIiBhbmQgdGhlIGhpZ2ggd2F0ZXIgbWFyaworICAgbWVtX2RvbmUoJnN0cm0sICJtc2ciKSAgIGVuZHMgbWVtb3J5IHRyYWNraW5nLCByZWxlYXNlcyBhbGwgYWxsb2NhdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIHRyYWNraW5nIGFzIHdlbGwgYXMgbGVha2VkIHpsaWIgYmxvY2tzLCBpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueS4gIElmIHRoZXJlIHdhcyBhbnl0aGluZyB1bnVzdWFsLCBzdWNoIGFzIGxlYWtlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2Nrcywgbm9uLUZJRk8gZnJlZXMsIG9yIGZyZWVzIG9mIGFkZHJlc3NlcyBub3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvY2F0ZWQsIHRoZW4gIm1zZyIgYW5kIGluZm9ybWF0aW9uIGFib3V0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2JsZW0gaXMgcHJpbnRlZCB0byBzdGRlcnIuICBJZiBldmVyeXRoaW5nIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsLCBub3RoaW5nIGlzIHByaW50ZWQuIG1lbV9kb25lIHJlc2V0cyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJtIG1lbWJlcnMgdG8gWl9OVUxMIHRvIHVzZSB0aGUgZGVmYXVsdCBtZW1vcnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvY2F0aW9uIHJvdXRpbmVzIG9uIHRoZSBuZXh0IHpsaWIgaW5pdGlhbGl6YXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZyBzdHJtLgorICovCisKKy8qIHRoZXNlIGl0ZW1zIGFyZSBzdHJ1bmcgdG9nZXRoZXIgaW4gYSBsaW5rZWQgbGlzdCwgb25lIGZvciBlYWNoIGFsbG9jYXRpb24gKi8KK3N0cnVjdCBtZW1faXRlbSB7CisgICAgdm9pZCAqcHRyOyAgICAgICAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gYWxsb2NhdGVkIG1lbW9yeSAqLworICAgIHNpemVfdCBzaXplOyAgICAgICAgICAgICAgICAvKiByZXF1ZXN0ZWQgc2l6ZSBvZiBhbGxvY2F0aW9uICovCisgICAgc3RydWN0IG1lbV9pdGVtICpuZXh0OyAgICAgIC8qIHBvaW50ZXIgdG8gbmV4dCBpdGVtIGluIGxpc3QsIG9yIE5VTEwgKi8KK307CisKKy8qIHRoaXMgc3RydWN0dXJlIGlzIGF0IHRoZSByb290IG9mIHRoZSBsaW5rZWQgbGlzdCwgYW5kIHRyYWNrcyBzdGF0aXN0aWNzICovCitzdHJ1Y3QgbWVtX3pvbmUgeworICAgIHN0cnVjdCBtZW1faXRlbSAqZmlyc3Q7ICAgICAvKiBwb2ludGVyIHRvIGZpcnN0IGl0ZW0gaW4gbGlzdCwgb3IgTlVMTCAqLworICAgIHNpemVfdCB0b3RhbCwgaGlnaHdhdGVyOyAgICAvKiB0b3RhbCBhbGxvY2F0aW9ucywgYW5kIGxhcmdlc3QgdG90YWwgKi8KKyAgICBzaXplX3QgbGltaXQ7ICAgICAgICAgICAgICAgLyogbWVtb3J5IGFsbG9jYXRpb24gbGltaXQsIG9yIDAgaWYgbm8gbGltaXQgKi8KKyAgICBpbnQgbm90bGlmbywgcm9ndWU7ICAgICAgICAgLyogY291bnRzIG9mIG5vbi1MSUZPIGZyZWVzIGFuZCByb2d1ZSBmcmVlcyAqLworfTsKKworLyogbWVtb3J5IGFsbG9jYXRpb24gcm91dGluZSB0byBwYXNzIHRvIHpsaWIgKi8KK2xvY2FsIHZvaWQgKm1lbV9hbGxvYyh2b2lkICptZW0sIHVuc2lnbmVkIGNvdW50LCB1bnNpZ25lZCBzaXplKQoreworICAgIHZvaWQgKnB0cjsKKyAgICBzdHJ1Y3QgbWVtX2l0ZW0gKml0ZW07CisgICAgc3RydWN0IG1lbV96b25lICp6b25lID0gbWVtOworICAgIHNpemVfdCBsZW4gPSBjb3VudCAqIChzaXplX3Qpc2l6ZTsKKworICAgIC8qIGluZHVjZWQgYWxsb2NhdGlvbiBmYWlsdXJlICovCisgICAgaWYgKHpvbmUgPT0gTlVMTCB8fCAoem9uZS0+bGltaXQgJiYgem9uZS0+dG90YWwgKyBsZW4gPiB6b25lLT5saW1pdCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgLyogcGVyZm9ybSBhbGxvY2F0aW9uIHVzaW5nIHRoZSBzdGFuZGFyZCBsaWJyYXJ5LCBmaWxsIG1lbW9yeSB3aXRoIGEKKyAgICAgICBub24temVybyB2YWx1ZSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgY29kZSBpc24ndCBkZXBlbmRpbmcgb24gemVyb3MgKi8KKyAgICBwdHIgPSBtYWxsb2MobGVuKTsKKyAgICBpZiAocHRyID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIG1lbXNldChwdHIsIDB4YTUsIGxlbik7CisKKyAgICAvKiBjcmVhdGUgYSBuZXcgaXRlbSBmb3IgdGhlIGxpc3QgKi8KKyAgICBpdGVtID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWVtX2l0ZW0pKTsKKyAgICBpZiAoaXRlbSA9PSBOVUxMKSB7CisgICAgICAgIGZyZWUocHRyKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGl0ZW0tPnB0ciA9IHB0cjsKKyAgICBpdGVtLT5zaXplID0gbGVuOworCisgICAgLyogaW5zZXJ0IGl0ZW0gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdCAqLworICAgIGl0ZW0tPm5leHQgPSB6b25lLT5maXJzdDsKKyAgICB6b25lLT5maXJzdCA9IGl0ZW07CisKKyAgICAvKiB1cGRhdGUgdGhlIHN0YXRpc3RpY3MgKi8KKyAgICB6b25lLT50b3RhbCArPSBpdGVtLT5zaXplOworICAgIGlmICh6b25lLT50b3RhbCA+IHpvbmUtPmhpZ2h3YXRlcikKKyAgICAgICAgem9uZS0+aGlnaHdhdGVyID0gem9uZS0+dG90YWw7CisKKyAgICAvKiByZXR1cm4gdGhlIGFsbG9jYXRlZCBtZW1vcnkgKi8KKyAgICByZXR1cm4gcHRyOworfQorCisvKiBtZW1vcnkgZnJlZSByb3V0aW5lIHRvIHBhc3MgdG8gemxpYiAqLworbG9jYWwgdm9pZCBtZW1fZnJlZSh2b2lkICptZW0sIHZvaWQgKnB0cikKK3sKKyAgICBzdHJ1Y3QgbWVtX2l0ZW0gKml0ZW0sICpuZXh0OworICAgIHN0cnVjdCBtZW1fem9uZSAqem9uZSA9IG1lbTsKKworICAgIC8qIGlmIG5vIHpvbmUsIGp1c3QgZG8gYSBmcmVlICovCisgICAgaWYgKHpvbmUgPT0gTlVMTCkgeworICAgICAgICBmcmVlKHB0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKiBwb2ludCBuZXh0IHRvIHRoZSBpdGVtIHRoYXQgbWF0Y2hlcyBwdHIsIG9yIE5VTEwgaWYgbm90IGZvdW5kIC0tIHJlbW92ZQorICAgICAgIHRoZSBpdGVtIGZyb20gdGhlIGxpbmtlZCBsaXN0IGlmIGZvdW5kICovCisgICAgbmV4dCA9IHpvbmUtPmZpcnN0OworICAgIGlmIChuZXh0KSB7CisgICAgICAgIGlmIChuZXh0LT5wdHIgPT0gcHRyKQorICAgICAgICAgICAgem9uZS0+Zmlyc3QgPSBuZXh0LT5uZXh0OyAgIC8qIGZpcnN0IG9uZSBpcyBpdCwgcmVtb3ZlIGZyb20gbGlzdCAqLworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBzZWFyY2ggdGhlIGxpbmtlZCBsaXN0ICovCisgICAgICAgICAgICAgICAgaXRlbSA9IG5leHQ7CisgICAgICAgICAgICAgICAgbmV4dCA9IGl0ZW0tPm5leHQ7CisgICAgICAgICAgICB9IHdoaWxlIChuZXh0ICE9IE5VTEwgJiYgbmV4dC0+cHRyICE9IHB0cik7CisgICAgICAgICAgICBpZiAobmV4dCkgeyAgICAgICAgICAgICAgICAgLyogaWYgZm91bmQsIHJlbW92ZSBmcm9tIGxpbmtlZCBsaXN0ICovCisgICAgICAgICAgICAgICAgaXRlbS0+bmV4dCA9IG5leHQtPm5leHQ7CisgICAgICAgICAgICAgICAgem9uZS0+bm90bGlmbysrOyAgICAgICAgLyogbm90IGEgTElGTyBmcmVlICovCisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIGlmIGZvdW5kLCB1cGRhdGUgdGhlIHN0YXRpc3RpY3MgYW5kIGZyZWUgdGhlIGl0ZW0gKi8KKyAgICBpZiAobmV4dCkgeworICAgICAgICB6b25lLT50b3RhbCAtPSBuZXh0LT5zaXplOworICAgICAgICBmcmVlKG5leHQpOworICAgIH0KKworICAgIC8qIGlmIG5vdCBmb3VuZCwgdXBkYXRlIHRoZSByb2d1ZSBjb3VudCAqLworICAgIGVsc2UKKyAgICAgICAgem9uZS0+cm9ndWUrKzsKKworICAgIC8qIGluIGFueSBjYXNlLCBkbyB0aGUgcmVxdWVzdGVkIGZyZWUgd2l0aCB0aGUgc3RhbmRhcmQgbGlicmFyeSBmdW5jdGlvbiAqLworICAgIGZyZWUocHRyKTsKK30KKworLyogc2V0IHVwIGEgY29udHJvbGxlZCBtZW1vcnkgYWxsb2NhdGlvbiBzcGFjZSBmb3IgbW9uaXRvcmluZywgc2V0IHRoZSBzdHJlYW0KKyAgIHBhcmFtZXRlcnMgdG8gdGhlIGNvbnRyb2xsZWQgcm91dGluZXMsIHdpdGggb3BhcXVlIHBvaW50aW5nIHRvIHRoZSBzcGFjZSAqLworbG9jYWwgdm9pZCBtZW1fc2V0dXAoel9zdHJlYW0gKnN0cm0pCit7CisgICAgc3RydWN0IG1lbV96b25lICp6b25lOworCisgICAgem9uZSA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IG1lbV96b25lKSk7CisgICAgYXNzZXJ0KHpvbmUgIT0gTlVMTCk7CisgICAgem9uZS0+Zmlyc3QgPSBOVUxMOworICAgIHpvbmUtPnRvdGFsID0gMDsKKyAgICB6b25lLT5oaWdod2F0ZXIgPSAwOworICAgIHpvbmUtPmxpbWl0ID0gMDsKKyAgICB6b25lLT5ub3RsaWZvID0gMDsKKyAgICB6b25lLT5yb2d1ZSA9IDA7CisgICAgc3RybS0+b3BhcXVlID0gem9uZTsKKyAgICBzdHJtLT56YWxsb2MgPSBtZW1fYWxsb2M7CisgICAgc3RybS0+emZyZWUgPSBtZW1fZnJlZTsKK30KKworLyogc2V0IGEgbGltaXQgb24gdGhlIHRvdGFsIG1lbW9yeSBhbGxvY2F0aW9uLCBvciAwIHRvIHJlbW92ZSB0aGUgbGltaXQgKi8KK2xvY2FsIHZvaWQgbWVtX2xpbWl0KHpfc3RyZWFtICpzdHJtLCBzaXplX3QgbGltaXQpCit7CisgICAgc3RydWN0IG1lbV96b25lICp6b25lID0gc3RybS0+b3BhcXVlOworCisgICAgem9uZS0+bGltaXQgPSBsaW1pdDsKK30KKworLyogc2hvdyB0aGUgY3VycmVudCB0b3RhbCByZXF1ZXN0ZWQgYWxsb2NhdGlvbnMgaW4gYnl0ZXMgKi8KK2xvY2FsIHZvaWQgbWVtX3VzZWQoel9zdHJlYW0gKnN0cm0sIGNoYXIgKnByZWZpeCkKK3sKKyAgICBzdHJ1Y3QgbWVtX3pvbmUgKnpvbmUgPSBzdHJtLT5vcGFxdWU7CisKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiAlbHUgYWxsb2NhdGVkXG4iLCBwcmVmaXgsIHpvbmUtPnRvdGFsKTsKK30KKworLyogc2hvdyB0aGUgaGlnaCB3YXRlciBhbGxvY2F0aW9uIGluIGJ5dGVzICovCitsb2NhbCB2b2lkIG1lbV9oaWdoKHpfc3RyZWFtICpzdHJtLCBjaGFyICpwcmVmaXgpCit7CisgICAgc3RydWN0IG1lbV96b25lICp6b25lID0gc3RybS0+b3BhcXVlOworCisgICAgZnByaW50ZihzdGRlcnIsICIlczogJWx1IGhpZ2ggd2F0ZXIgbWFya1xuIiwgcHJlZml4LCB6b25lLT5oaWdod2F0ZXIpOworfQorCisvKiByZWxlYXNlIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiB6b25lIC0tIGlmIHRoZXJlIGFyZSBhbnkgc3VycHJpc2VzLCBub3RpZnkgKi8KK2xvY2FsIHZvaWQgbWVtX2RvbmUoel9zdHJlYW0gKnN0cm0sIGNoYXIgKnByZWZpeCkKK3sKKyAgICBpbnQgY291bnQgPSAwOworICAgIHN0cnVjdCBtZW1faXRlbSAqaXRlbSwgKm5leHQ7CisgICAgc3RydWN0IG1lbV96b25lICp6b25lID0gc3RybS0+b3BhcXVlOworCisgICAgLyogc2hvdyBoaWdoIHdhdGVyIG1hcmsgKi8KKyAgICBtZW1faGlnaChzdHJtLCBwcmVmaXgpOworCisgICAgLyogZnJlZSBsZWZ0b3ZlciBhbGxvY2F0aW9ucyBhbmQgaXRlbSBzdHJ1Y3R1cmVzLCBpZiBhbnkgKi8KKyAgICBpdGVtID0gem9uZS0+Zmlyc3Q7CisgICAgd2hpbGUgKGl0ZW0gIT0gTlVMTCkgeworICAgICAgICBmcmVlKGl0ZW0tPnB0cik7CisgICAgICAgIG5leHQgPSBpdGVtLT5uZXh0OworICAgICAgICBmcmVlKGl0ZW0pOworICAgICAgICBpdGVtID0gbmV4dDsKKyAgICAgICAgY291bnQrKzsKKyAgICB9CisKKyAgICAvKiBpc3N1ZSBhbGVydHMgYWJvdXQgYW55dGhpbmcgdW5leHBlY3RlZCAqLworICAgIGlmIChjb3VudCB8fCB6b25lLT50b3RhbCkKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIqKiAlczogJWx1IGJ5dGVzIGluICVkIGJsb2NrcyBub3QgZnJlZWRcbiIsCisgICAgICAgICAgICAgICAgcHJlZml4LCB6b25lLT50b3RhbCwgY291bnQpOworICAgIGlmICh6b25lLT5ub3RsaWZvKQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIioqICVzOiAlZCBmcmVlcyBub3QgTElGT1xuIiwgcHJlZml4LCB6b25lLT5ub3RsaWZvKTsKKyAgICBpZiAoem9uZS0+cm9ndWUpCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiKiogJXM6ICVkIGZyZWVzIG5vdCByZWNvZ25pemVkXG4iLAorICAgICAgICAgICAgICAgIHByZWZpeCwgem9uZS0+cm9ndWUpOworCisgICAgLyogZnJlZSB0aGUgem9uZSBhbmQgZGVsZXRlIGZyb20gdGhlIHN0cmVhbSAqLworICAgIGZyZWUoem9uZSk7CisgICAgc3RybS0+b3BhcXVlID0gWl9OVUxMOworICAgIHN0cm0tPnphbGxvYyA9IFpfTlVMTDsKKyAgICBzdHJtLT56ZnJlZSA9IFpfTlVMTDsKK30KKworLyogLS0gaW5mbGF0ZSB0ZXN0IHJvdXRpbmVzIC0tICovCisKKy8qIERlY29kZSBhIGhleGFkZWNpbWFsIHN0cmluZywgc2V0ICpsZW4gdG8gbGVuZ3RoLCBpbltdIHRvIHRoZSBieXRlcy4gIFRoaXMKKyAgIGRlY29kZXMgbGliZXJhbGx5LCBpbiB0aGF0IGhleCBkaWdpdHMgY2FuIGJlIGFkamFjZW50LCBpbiB3aGljaCBjYXNlIHR3byBpbgorICAgYSByb3cgd3JpdGVzIGEgYnl0ZS4gIE9yIHRoZXkgY2FuIGJlIGRlbGltaXRlZCBieSBhbnkgbm9uLWhleCBjaGFyYWN0ZXIsCisgICB3aGVyZSB0aGUgZGVsaW1pdGVycyBhcmUgaWdub3JlZCBleGNlcHQgd2hlbiBhIHNpbmdsZSBoZXggZGlnaXQgaXMgZm9sbG93ZWQKKyAgIGJ5IGEgZGVsaW1pdGVyLCB3aGVyZSB0aGF0IHNpbmdsZSBkaWdpdCB3cml0ZXMgYSBieXRlLiAgVGhlIHJldHVybmVkIGRhdGEgaXMKKyAgIGFsbG9jYXRlZCBhbmQgbXVzdCBldmVudHVhbGx5IGJlIGZyZWVkLiAgTlVMTCBpcyByZXR1cm5lZCBpZiBvdXQgb2YgbWVtb3J5LgorICAgSWYgdGhlIGxlbmd0aCBpcyBub3QgbmVlZGVkLCB0aGVuIGxlbiBjYW4gYmUgTlVMTC4gKi8KK2xvY2FsIHVuc2lnbmVkIGNoYXIgKmgyYihjb25zdCBjaGFyICpoZXgsIHVuc2lnbmVkICpsZW4pCit7CisgICAgdW5zaWduZWQgY2hhciAqaW4sICpyZTsKKyAgICB1bnNpZ25lZCBuZXh0LCB2YWw7CisKKyAgICBpbiA9IG1hbGxvYygoc3RybGVuKGhleCkgKyAxKSA+PiAxKTsKKyAgICBpZiAoaW4gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgbmV4dCA9IDA7CisgICAgdmFsID0gMTsKKyAgICBkbyB7CisgICAgICAgIGlmICgqaGV4ID49ICcwJyAmJiAqaGV4IDw9ICc5JykKKyAgICAgICAgICAgIHZhbCA9ICh2YWwgPDwgNCkgKyAqaGV4IC0gJzAnOworICAgICAgICBlbHNlIGlmICgqaGV4ID49ICdBJyAmJiAqaGV4IDw9ICdGJykKKyAgICAgICAgICAgIHZhbCA9ICh2YWwgPDwgNCkgKyAqaGV4IC0gJ0EnICsgMTA7CisgICAgICAgIGVsc2UgaWYgKCpoZXggPj0gJ2EnICYmICpoZXggPD0gJ2YnKQorICAgICAgICAgICAgdmFsID0gKHZhbCA8PCA0KSArICpoZXggLSAnYScgKyAxMDsKKyAgICAgICAgZWxzZSBpZiAodmFsICE9IDEgJiYgdmFsIDwgMzIpICAvKiBvbmUgZGlnaXQgZm9sbG93ZWQgYnkgZGVsaW1pdGVyICovCisgICAgICAgICAgICB2YWwgKz0gMjQwOyAgICAgICAgICAgICAgICAgLyogbWFrZSBpdCBsb29rIGxpa2UgdHdvIGRpZ2l0cyAqLworICAgICAgICBpZiAodmFsID4gMjU1KSB7ICAgICAgICAgICAgICAgIC8qIGhhdmUgdHdvIGRpZ2l0cyAqLworICAgICAgICAgICAgaW5bbmV4dCsrXSA9IHZhbCAmIDB4ZmY7ICAgIC8qIHNhdmUgdGhlIGRlY29kZWQgYnl0ZSAqLworICAgICAgICAgICAgdmFsID0gMTsgICAgICAgICAgICAgICAgICAgIC8qIHN0YXJ0IG92ZXIgKi8KKyAgICAgICAgfQorICAgIH0gd2hpbGUgKCpoZXgrKyk7ICAgICAgIC8qIGdvIHRocm91Z2ggdGhlIGxvb3Agd2l0aCB0aGUgdGVybWluYXRpbmcgbnVsbCAqLworICAgIGlmIChsZW4gIT0gTlVMTCkKKyAgICAgICAgKmxlbiA9IG5leHQ7CisgICAgcmUgPSByZWFsbG9jKGluLCBuZXh0KTsKKyAgICByZXR1cm4gcmUgPT0gTlVMTCA/IGluIDogcmU7Cit9CisKKy8qIGdlbmVyaWMgaW5mbGF0ZSgpIHJ1biwgd2hlcmUgaGV4IGlzIHRoZSBoZXhhZGVjaW1hbCBpbnB1dCBkYXRhLCB3aGF0IGlzIHRoZQorICAgdGV4dCB0byBpbmNsdWRlIGluIGFuIGVycm9yIG1lc3NhZ2UsIHN0ZXAgaXMgaG93IG11Y2ggaW5wdXQgZGF0YSB0byBmZWVkCisgICBpbmZsYXRlKCkgb24gZWFjaCBjYWxsLCBvciB6ZXJvIHRvIGZlZWQgaXQgYWxsLCB3aW4gaXMgdGhlIHdpbmRvdyBiaXRzCisgICBwYXJhbWV0ZXIgdG8gaW5mbGF0ZUluaXQyKCksIGxlbiBpcyB0aGUgc2l6ZSBvZiB0aGUgb3V0cHV0IGJ1ZmZlciwgYW5kIGVycgorICAgaXMgdGhlIGVycm9yIGNvZGUgZXhwZWN0ZWQgZnJvbSB0aGUgZmlyc3QgaW5mbGF0ZSgpIGNhbGwgKHRoZSBzZWNvbmQKKyAgIGluZmxhdGUoKSBjYWxsIGlzIGV4cGVjdGVkIHRvIHJldHVybiBaX1NUUkVBTV9FTkQpLiAgSWYgd2luIGlzIDQ3LCB0aGVuCisgICBoZWFkZXIgaW5mb3JtYXRpb24gaXMgY29sbGVjdGVkIHdpdGggaW5mbGF0ZUdldEhlYWRlcigpLiAgSWYgYSB6bGliIHN0cmVhbQorICAgaXMgbG9va2luZyBmb3IgYSBkaWN0aW9uYXJ5LCB0aGVuIGFuIGVtcHR5IGRpY3Rpb25hcnkgaXMgcHJvdmlkZWQuCisgICBpbmZsYXRlKCkgaXMgcnVuIHVudGlsIGFsbCBvZiB0aGUgaW5wdXQgZGF0YSBpcyBjb25zdW1lZC4gKi8KK2xvY2FsIHZvaWQgaW5mKGNoYXIgKmhleCwgY2hhciAqd2hhdCwgdW5zaWduZWQgc3RlcCwgaW50IHdpbiwgdW5zaWduZWQgbGVuLAorICAgICAgICAgICAgICAgaW50IGVycikKK3sKKyAgICBpbnQgcmV0OworICAgIHVuc2lnbmVkIGhhdmU7CisgICAgdW5zaWduZWQgY2hhciAqaW4sICpvdXQ7CisgICAgel9zdHJlYW0gc3RybSwgY29weTsKKyAgICBnel9oZWFkZXIgaGVhZDsKKworICAgIG1lbV9zZXR1cCgmc3RybSk7CisgICAgc3RybS5hdmFpbF9pbiA9IDA7CisgICAgc3RybS5uZXh0X2luID0gWl9OVUxMOworICAgIHJldCA9IGluZmxhdGVJbml0Migmc3RybSwgd2luKTsKKyAgICBpZiAocmV0ICE9IFpfT0spIHsKKyAgICAgICAgbWVtX2RvbmUoJnN0cm0sIHdoYXQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG91dCA9IG1hbGxvYyhsZW4pOyAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KG91dCAhPSBOVUxMKTsKKyAgICBpZiAod2luID09IDQ3KSB7CisgICAgICAgIGhlYWQuZXh0cmEgPSBvdXQ7CisgICAgICAgIGhlYWQuZXh0cmFfbWF4ID0gbGVuOworICAgICAgICBoZWFkLm5hbWUgPSBvdXQ7CisgICAgICAgIGhlYWQubmFtZV9tYXggPSBsZW47CisgICAgICAgIGhlYWQuY29tbWVudCA9IG91dDsKKyAgICAgICAgaGVhZC5jb21tX21heCA9IGxlbjsKKyAgICAgICAgcmV0ID0gaW5mbGF0ZUdldEhlYWRlcigmc3RybSwgJmhlYWQpOyAgIGFzc2VydChyZXQgPT0gWl9PSyk7CisgICAgfQorICAgIGluID0gaDJiKGhleCwgJmhhdmUpOyAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGluICE9IE5VTEwpOworICAgIGlmIChzdGVwID09IDAgfHwgc3RlcCA+IGhhdmUpCisgICAgICAgIHN0ZXAgPSBoYXZlOworICAgIHN0cm0uYXZhaWxfaW4gPSBzdGVwOworICAgIGhhdmUgLT0gc3RlcDsKKyAgICBzdHJtLm5leHRfaW4gPSBpbjsKKyAgICBkbyB7CisgICAgICAgIHN0cm0uYXZhaWxfb3V0ID0gbGVuOworICAgICAgICBzdHJtLm5leHRfb3V0ID0gb3V0OworICAgICAgICByZXQgPSBpbmZsYXRlKCZzdHJtLCBaX05PX0ZMVVNIKTsgICAgICAgYXNzZXJ0KGVyciA9PSA5IHx8IHJldCA9PSBlcnIpOworICAgICAgICBpZiAocmV0ICE9IFpfT0sgJiYgcmV0ICE9IFpfQlVGX0VSUk9SICYmIHJldCAhPSBaX05FRURfRElDVCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAocmV0ID09IFpfTkVFRF9ESUNUKSB7CisgICAgICAgICAgICByZXQgPSBpbmZsYXRlU2V0RGljdGlvbmFyeSgmc3RybSwgaW4sIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJldCA9PSBaX0RBVEFfRVJST1IpOworICAgICAgICAgICAgbWVtX2xpbWl0KCZzdHJtLCAxKTsKKyAgICAgICAgICAgIHJldCA9IGluZmxhdGVTZXREaWN0aW9uYXJ5KCZzdHJtLCBvdXQsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJldCA9PSBaX01FTV9FUlJPUik7CisgICAgICAgICAgICBtZW1fbGltaXQoJnN0cm0sIDApOworICAgICAgICAgICAgKChzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSAqKXN0cm0uc3RhdGUpLT5tb2RlID0gRElDVDsKKyAgICAgICAgICAgIHJldCA9IGluZmxhdGVTZXREaWN0aW9uYXJ5KCZzdHJtLCBvdXQsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJldCA9PSBaX09LKTsKKyAgICAgICAgICAgIHJldCA9IGluZmxhdGUoJnN0cm0sIFpfTk9fRkxVU0gpOyAgIGFzc2VydChyZXQgPT0gWl9CVUZfRVJST1IpOworICAgICAgICB9CisgICAgICAgIHJldCA9IGluZmxhdGVDb3B5KCZjb3B5LCAmc3RybSk7ICAgICAgICBhc3NlcnQocmV0ID09IFpfT0spOworICAgICAgICByZXQgPSBpbmZsYXRlRW5kKCZjb3B5KTsgICAgICAgICAgICAgICAgYXNzZXJ0KHJldCA9PSBaX09LKTsKKyAgICAgICAgZXJyID0gOTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb24ndCBjYXJlIG5leHQgdGltZSBhcm91bmQgKi8KKyAgICAgICAgaGF2ZSArPSBzdHJtLmF2YWlsX2luOworICAgICAgICBzdHJtLmF2YWlsX2luID0gc3RlcCA+IGhhdmUgPyBoYXZlIDogc3RlcDsKKyAgICAgICAgaGF2ZSAtPSBzdHJtLmF2YWlsX2luOworICAgIH0gd2hpbGUgKHN0cm0uYXZhaWxfaW4pOworICAgIGZyZWUoaW4pOworICAgIGZyZWUob3V0KTsKKyAgICByZXQgPSBpbmZsYXRlUmVzZXQyKCZzdHJtLCAtOCk7ICAgICAgICAgICAgIGFzc2VydChyZXQgPT0gWl9PSyk7CisgICAgcmV0ID0gaW5mbGF0ZUVuZCgmc3RybSk7ICAgICAgICAgICAgICAgICAgICBhc3NlcnQocmV0ID09IFpfT0spOworICAgIG1lbV9kb25lKCZzdHJtLCB3aGF0KTsKK30KKworLyogY292ZXIgYWxsIG9mIHRoZSBsaW5lcyBpbiBpbmZsYXRlLmMgdXAgdG8gaW5mbGF0ZSgpICovCitsb2NhbCB2b2lkIGNvdmVyX3N1cHBvcnQodm9pZCkKK3sKKyAgICBpbnQgcmV0OworICAgIHpfc3RyZWFtIHN0cm07CisKKyAgICBtZW1fc2V0dXAoJnN0cm0pOworICAgIHN0cm0uYXZhaWxfaW4gPSAwOworICAgIHN0cm0ubmV4dF9pbiA9IFpfTlVMTDsKKyAgICByZXQgPSBpbmZsYXRlSW5pdCgmc3RybSk7ICAgICAgICAgICAgICAgICAgIGFzc2VydChyZXQgPT0gWl9PSyk7CisgICAgbWVtX3VzZWQoJnN0cm0sICJpbmZsYXRlIGluaXQiKTsKKyAgICByZXQgPSBpbmZsYXRlUHJpbWUoJnN0cm0sIDUsIDMxKTsgICAgICAgICAgIGFzc2VydChyZXQgPT0gWl9PSyk7CisgICAgcmV0ID0gaW5mbGF0ZVByaW1lKCZzdHJtLCAtMSwgMCk7ICAgICAgICAgICBhc3NlcnQocmV0ID09IFpfT0spOworICAgIHJldCA9IGluZmxhdGVTZXREaWN0aW9uYXJ5KCZzdHJtLCBaX05VTEwsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJldCA9PSBaX1NUUkVBTV9FUlJPUik7CisgICAgcmV0ID0gaW5mbGF0ZUVuZCgmc3RybSk7ICAgICAgICAgICAgICAgICAgICBhc3NlcnQocmV0ID09IFpfT0spOworICAgIG1lbV9kb25lKCZzdHJtLCAicHJpbWUiKTsKKworICAgIGluZigiNjMgMCIsICJmb3JjZSB3aW5kb3cgYWxsb2NhdGlvbiIsIDAsIC0xNSwgMSwgWl9PSyk7CisgICAgaW5mKCI2MyAxOCA1IiwgImZvcmNlIHdpbmRvdyByZXBsYWNlbWVudCIsIDAsIC04LCAyNTksIFpfT0spOworICAgIGluZigiNjMgMTggNjggMzAgZDAgMCAwIiwgImZvcmNlIHNwbGl0IHdpbmRvdyB1cGRhdGUiLCA0LCAtOCwgMjU5LCBaX09LKTsKKyAgICBpbmYoIjMgMCIsICJ1c2UgZml4ZWQgYmxvY2tzIiwgMCwgLTE1LCAxLCBaX1NUUkVBTV9FTkQpOworICAgIGluZigiIiwgImJhZCB3aW5kb3cgc2l6ZSIsIDAsIDEsIDAsIFpfU1RSRUFNX0VSUk9SKTsKKworICAgIG1lbV9zZXR1cCgmc3RybSk7CisgICAgc3RybS5hdmFpbF9pbiA9IDA7CisgICAgc3RybS5uZXh0X2luID0gWl9OVUxMOworICAgIHJldCA9IGluZmxhdGVJbml0Xygmc3RybSwgWkxJQl9WRVJTSU9OIC0gMSwgKGludClzaXplb2Yoel9zdHJlYW0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChyZXQgPT0gWl9WRVJTSU9OX0VSUk9SKTsKKyAgICBtZW1fZG9uZSgmc3RybSwgIndyb25nIHZlcnNpb24iKTsKKworICAgIHN0cm0uYXZhaWxfaW4gPSAwOworICAgIHN0cm0ubmV4dF9pbiA9IFpfTlVMTDsKKyAgICByZXQgPSBpbmZsYXRlSW5pdCgmc3RybSk7ICAgICAgICAgICAgICAgICAgIGFzc2VydChyZXQgPT0gWl9PSyk7CisgICAgcmV0ID0gaW5mbGF0ZUVuZCgmc3RybSk7ICAgICAgICAgICAgICAgICAgICBhc3NlcnQocmV0ID09IFpfT0spOworICAgIGZwdXRzKCJpbmZsYXRlIGJ1aWx0LWluIG1lbW9yeSByb3V0aW5lc1xuIiwgc3RkZXJyKTsKK30KKworLyogY292ZXIgYWxsIGluZmxhdGUoKSBoZWFkZXIgYW5kIHRyYWlsZXIgY2FzZXMgYW5kIGNvZGUgYWZ0ZXIgaW5mbGF0ZSgpICovCitsb2NhbCB2b2lkIGNvdmVyX3dyYXAodm9pZCkKK3sKKyAgICBpbnQgcmV0OworICAgIHpfc3RyZWFtIHN0cm0sIGNvcHk7CisgICAgdW5zaWduZWQgY2hhciBkaWN0WzI1N107CisKKyAgICByZXQgPSBpbmZsYXRlKFpfTlVMTCwgMCk7ICAgICAgICAgICAgICAgICAgIGFzc2VydChyZXQgPT0gWl9TVFJFQU1fRVJST1IpOworICAgIHJldCA9IGluZmxhdGVFbmQoWl9OVUxMKTsgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJldCA9PSBaX1NUUkVBTV9FUlJPUik7CisgICAgcmV0ID0gaW5mbGF0ZUNvcHkoWl9OVUxMLCBaX05VTEwpOyAgICAgICAgICBhc3NlcnQocmV0ID09IFpfU1RSRUFNX0VSUk9SKTsKKyAgICBmcHV0cygiaW5mbGF0ZSBiYWQgcGFyYW1ldGVyc1xuIiwgc3RkZXJyKTsKKworICAgIGluZigiMWYgOGIgMCAwIiwgImJhZCBnemlwIG1ldGhvZCIsIDAsIDMxLCAwLCBaX0RBVEFfRVJST1IpOworICAgIGluZigiMWYgOGIgOCA4MCIsICJiYWQgZ3ppcCBmbGFncyIsIDAsIDMxLCAwLCBaX0RBVEFfRVJST1IpOworICAgIGluZigiNzcgODUiLCAiYmFkIHpsaWIgbWV0aG9kIiwgMCwgMTUsIDAsIFpfREFUQV9FUlJPUik7CisgICAgaW5mKCI4IDk5IiwgInNldCB3aW5kb3cgc2l6ZSBmcm9tIGhlYWRlciIsIDAsIDAsIDAsIFpfT0spOworICAgIGluZigiNzggOWMiLCAiYmFkIHpsaWIgd2luZG93IHNpemUiLCAwLCA4LCAwLCBaX0RBVEFfRVJST1IpOworICAgIGluZigiNzggOWMgNjMgMCAwIDAgMSAwIDEiLCAiY2hlY2sgYWRsZXIzMiIsIDAsIDE1LCAxLCBaX1NUUkVBTV9FTkQpOworICAgIGluZigiMWYgOGIgOCAxZSAwIDAgMCAwIDAgMCAxIDAgMCAwIDAgMCAwIiwgImJhZCBoZWFkZXIgY3JjIiwgMCwgNDcsIDEsCisgICAgICAgIFpfREFUQV9FUlJPUik7CisgICAgaW5mKCIxZiA4YiA4IDIgMCAwIDAgMCAwIDAgMWQgMjYgMyAwIDAgMCAwIDAgMCAwIDAgMCIsICJjaGVjayBnemlwIGxlbmd0aCIsCisgICAgICAgIDAsIDQ3LCAwLCBaX1NUUkVBTV9FTkQpOworICAgIGluZigiNzggOTAiLCAiYmFkIHpsaWIgaGVhZGVyIGNoZWNrIiwgMCwgNDcsIDAsIFpfREFUQV9FUlJPUik7CisgICAgaW5mKCI4IGI4IDAgMCAwIDEiLCAibmVlZCBkaWN0aW9uYXJ5IiwgMCwgOCwgMCwgWl9ORUVEX0RJQ1QpOworICAgIGluZigiNzggOWMgNjMgMCIsICJjb21wdXRlIGFkbGVyMzIiLCAwLCAxNSwgMSwgWl9PSyk7CisKKyAgICBtZW1fc2V0dXAoJnN0cm0pOworICAgIHN0cm0uYXZhaWxfaW4gPSAwOworICAgIHN0cm0ubmV4dF9pbiA9IFpfTlVMTDsKKyAgICByZXQgPSBpbmZsYXRlSW5pdDIoJnN0cm0sIC04KTsKKyAgICBzdHJtLmF2YWlsX2luID0gMjsKKyAgICBzdHJtLm5leHRfaW4gPSAodm9pZCAqKSJceDYzIjsKKyAgICBzdHJtLmF2YWlsX291dCA9IDE7CisgICAgc3RybS5uZXh0X291dCA9ICh2b2lkICopJnJldDsKKyAgICBtZW1fbGltaXQoJnN0cm0sIDEpOworICAgIHJldCA9IGluZmxhdGUoJnN0cm0sIFpfTk9fRkxVU0gpOyAgICAgICAgICAgYXNzZXJ0KHJldCA9PSBaX01FTV9FUlJPUik7CisgICAgcmV0ID0gaW5mbGF0ZSgmc3RybSwgWl9OT19GTFVTSCk7ICAgICAgICAgICBhc3NlcnQocmV0ID09IFpfTUVNX0VSUk9SKTsKKyAgICBtZW1fbGltaXQoJnN0cm0sIDApOworICAgIG1lbXNldChkaWN0LCAwLCAyNTcpOworICAgIHJldCA9IGluZmxhdGVTZXREaWN0aW9uYXJ5KCZzdHJtLCBkaWN0LCAyNTcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJldCA9PSBaX09LKTsKKyAgICBtZW1fbGltaXQoJnN0cm0sIChzaXplb2Yoc3RydWN0IGluZmxhdGVfc3RhdGUpIDw8IDEpICsgMjU2KTsKKyAgICByZXQgPSBpbmZsYXRlUHJpbWUoJnN0cm0sIDE2LCAwKTsgICAgICAgICAgIGFzc2VydChyZXQgPT0gWl9PSyk7CisgICAgc3RybS5hdmFpbF9pbiA9IDI7CisgICAgc3RybS5uZXh0X2luID0gKHZvaWQgKikiXHg4MCI7CisgICAgcmV0ID0gaW5mbGF0ZVN5bmMoJnN0cm0pOyAgICAgICAgICAgICAgICAgICBhc3NlcnQocmV0ID09IFpfREFUQV9FUlJPUik7CisgICAgcmV0ID0gaW5mbGF0ZSgmc3RybSwgWl9OT19GTFVTSCk7ICAgICAgICAgICBhc3NlcnQocmV0ID09IFpfU1RSRUFNX0VSUk9SKTsKKyAgICBzdHJtLmF2YWlsX2luID0gNDsKKyAgICBzdHJtLm5leHRfaW4gPSAodm9pZCAqKSJcMFwwXHhmZlx4ZmYiOworICAgIHJldCA9IGluZmxhdGVTeW5jKCZzdHJtKTsgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJldCA9PSBaX09LKTsKKyAgICAodm9pZClpbmZsYXRlU3luY1BvaW50KCZzdHJtKTsKKyAgICByZXQgPSBpbmZsYXRlQ29weSgmY29weSwgJnN0cm0pOyAgICAgICAgICAgIGFzc2VydChyZXQgPT0gWl9NRU1fRVJST1IpOworICAgIG1lbV9saW1pdCgmc3RybSwgMCk7CisgICAgcmV0ID0gaW5mbGF0ZVVuZGVybWluZSgmc3RybSwgMSk7ICAgICAgICAgICBhc3NlcnQocmV0ID09IFpfREFUQV9FUlJPUik7CisgICAgKHZvaWQpaW5mbGF0ZU1hcmsoJnN0cm0pOworICAgIHJldCA9IGluZmxhdGVFbmQoJnN0cm0pOyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJldCA9PSBaX09LKTsKKyAgICBtZW1fZG9uZSgmc3RybSwgIm1pc2NlbGxhbmVvdXMsIGZvcmNlIG1lbW9yeSBlcnJvcnMiKTsKK30KKworLyogaW5wdXQgYW5kIG91dHB1dCBmdW5jdGlvbnMgZm9yIGluZmxhdGVCYWNrKCkgKi8KK2xvY2FsIHVuc2lnbmVkIHB1bGwodm9pZCAqZGVzYywgdW5zaWduZWQgY2hhciAqKmJ1ZikKK3sKKyAgICBzdGF0aWMgdW5zaWduZWQgaW50IG5leHQgPSAwOworICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGRhdFtdID0gezB4NjMsIDAsIDIsIDB9OworICAgIHN0cnVjdCBpbmZsYXRlX3N0YXRlICpzdGF0ZTsKKworICAgIGlmIChkZXNjID09IFpfTlVMTCkgeworICAgICAgICBuZXh0ID0gMDsKKyAgICAgICAgcmV0dXJuIDA7ICAgLyogbm8gaW5wdXQgKGFscmVhZHkgcHJvdmlkZWQgYXQgbmV4dF9pbikgKi8KKyAgICB9CisgICAgc3RhdGUgPSAodm9pZCAqKSgoel9zdHJlYW0gKilkZXNjKS0+c3RhdGU7CisgICAgaWYgKHN0YXRlICE9IFpfTlVMTCkKKyAgICAgICAgc3RhdGUtPm1vZGUgPSBTWU5DOyAgICAgLyogZm9yY2UgYW4gb3RoZXJ3aXNlIGltcG9zc2libGUgc2l0dWF0aW9uICovCisgICAgcmV0dXJuIG5leHQgPCBzaXplb2YoZGF0KSA/ICgqYnVmID0gZGF0ICsgbmV4dCsrLCAxKSA6IDA7Cit9CisKK2xvY2FsIGludCBwdXNoKHZvaWQgKmRlc2MsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVuKQoreworICAgIGJ1ZiArPSBsZW47CisgICAgcmV0dXJuIGRlc2MgIT0gWl9OVUxMOyAgICAgIC8qIGZvcmNlIGVycm9yIGlmIGRlc2Mgbm90IG51bGwgKi8KK30KKworLyogY292ZXIgaW5mbGF0ZUJhY2soKSB1cCB0byBjb21tb24gZGVmbGF0ZSBkYXRhIGNhc2VzIGFuZCBhZnRlciB0aG9zZSAqLworbG9jYWwgdm9pZCBjb3Zlcl9iYWNrKHZvaWQpCit7CisgICAgaW50IHJldDsKKyAgICB6X3N0cmVhbSBzdHJtOworICAgIHVuc2lnbmVkIGNoYXIgd2luWzMyNzY4XTsKKworICAgIHJldCA9IGluZmxhdGVCYWNrSW5pdF8oWl9OVUxMLCAwLCB3aW4sIDAsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJldCA9PSBaX1ZFUlNJT05fRVJST1IpOworICAgIHJldCA9IGluZmxhdGVCYWNrSW5pdChaX05VTEwsIDAsIHdpbik7ICAgICAgYXNzZXJ0KHJldCA9PSBaX1NUUkVBTV9FUlJPUik7CisgICAgcmV0ID0gaW5mbGF0ZUJhY2soWl9OVUxMLCBaX05VTEwsIFpfTlVMTCwgWl9OVUxMLCBaX05VTEwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJldCA9PSBaX1NUUkVBTV9FUlJPUik7CisgICAgcmV0ID0gaW5mbGF0ZUJhY2tFbmQoWl9OVUxMKTsgICAgICAgICAgICAgICBhc3NlcnQocmV0ID09IFpfU1RSRUFNX0VSUk9SKTsKKyAgICBmcHV0cygiaW5mbGF0ZUJhY2sgYmFkIHBhcmFtZXRlcnNcbiIsIHN0ZGVycik7CisKKyAgICBtZW1fc2V0dXAoJnN0cm0pOworICAgIHJldCA9IGluZmxhdGVCYWNrSW5pdCgmc3RybSwgMTUsIHdpbik7ICAgICAgYXNzZXJ0KHJldCA9PSBaX09LKTsKKyAgICBzdHJtLmF2YWlsX2luID0gMjsKKyAgICBzdHJtLm5leHRfaW4gPSAodm9pZCAqKSJceDAzIjsKKyAgICByZXQgPSBpbmZsYXRlQmFjaygmc3RybSwgcHVsbCwgWl9OVUxMLCBwdXNoLCBaX05VTEwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJldCA9PSBaX1NUUkVBTV9FTkQpOworICAgICAgICAvKiBmb3JjZSBvdXRwdXQgZXJyb3IgKi8KKyAgICBzdHJtLmF2YWlsX2luID0gMzsKKyAgICBzdHJtLm5leHRfaW4gPSAodm9pZCAqKSJceDYzXHgwMCI7CisgICAgcmV0ID0gaW5mbGF0ZUJhY2soJnN0cm0sIHB1bGwsIFpfTlVMTCwgcHVzaCwgJnN0cm0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJldCA9PSBaX0JVRl9FUlJPUik7CisgICAgICAgIC8qIGZvcmNlIG1vZGUgZXJyb3IgYnkgbXVja2luZyB3aXRoIHN0YXRlICovCisgICAgcmV0ID0gaW5mbGF0ZUJhY2soJnN0cm0sIHB1bGwsICZzdHJtLCBwdXNoLCBaX05VTEwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJldCA9PSBaX1NUUkVBTV9FUlJPUik7CisgICAgcmV0ID0gaW5mbGF0ZUJhY2tFbmQoJnN0cm0pOyAgICAgICAgICAgICAgICBhc3NlcnQocmV0ID09IFpfT0spOworICAgIG1lbV9kb25lKCZzdHJtLCAiaW5mbGF0ZUJhY2sgYmFkIHN0YXRlIik7CisKKyAgICByZXQgPSBpbmZsYXRlQmFja0luaXQoJnN0cm0sIDE1LCB3aW4pOyAgICAgIGFzc2VydChyZXQgPT0gWl9PSyk7CisgICAgcmV0ID0gaW5mbGF0ZUJhY2tFbmQoJnN0cm0pOyAgICAgICAgICAgICAgICBhc3NlcnQocmV0ID09IFpfT0spOworICAgIGZwdXRzKCJpbmZsYXRlQmFjayBidWlsdC1pbiBtZW1vcnkgcm91dGluZXNcbiIsIHN0ZGVycik7Cit9CisKKy8qIGRvIGEgcmF3IGluZmxhdGUgb2YgZGF0YSBpbiBoZXhhZGVjaW1hbCB3aXRoIGJvdGggaW5mbGF0ZSBhbmQgaW5mbGF0ZUJhY2sgKi8KK2xvY2FsIGludCB0cnkoY2hhciAqaGV4LCBjaGFyICppZCwgaW50IGVycikKK3sKKyAgICBpbnQgcmV0OworICAgIHVuc2lnbmVkIGxlbiwgc2l6ZTsKKyAgICB1bnNpZ25lZCBjaGFyICppbiwgKm91dCwgKndpbjsKKyAgICBjaGFyICpwcmVmaXg7CisgICAgel9zdHJlYW0gc3RybTsKKworICAgIC8qIGNvbnZlcnQgdG8gaGV4ICovCisgICAgaW4gPSBoMmIoaGV4LCAmbGVuKTsKKyAgICBhc3NlcnQoaW4gIT0gTlVMTCk7CisKKyAgICAvKiBhbGxvY2F0ZSB3b3JrIGFyZWFzICovCisgICAgc2l6ZSA9IGxlbiA8PCAzOworICAgIG91dCA9IG1hbGxvYyhzaXplKTsKKyAgICBhc3NlcnQob3V0ICE9IE5VTEwpOworICAgIHdpbiA9IG1hbGxvYygzMjc2OCk7CisgICAgYXNzZXJ0KHdpbiAhPSBOVUxMKTsKKyAgICBwcmVmaXggPSBtYWxsb2Moc3RybGVuKGlkKSArIDYpOworICAgIGFzc2VydChwcmVmaXggIT0gTlVMTCk7CisKKyAgICAvKiBmaXJzdCB3aXRoIGluZmxhdGUgKi8KKyAgICBzdHJjcHkocHJlZml4LCBpZCk7CisgICAgc3RyY2F0KHByZWZpeCwgIi1sYXRlIik7CisgICAgbWVtX3NldHVwKCZzdHJtKTsKKyAgICBzdHJtLmF2YWlsX2luID0gMDsKKyAgICBzdHJtLm5leHRfaW4gPSBaX05VTEw7CisgICAgcmV0ID0gaW5mbGF0ZUluaXQyKCZzdHJtLCBlcnIgPCAwID8gNDcgOiAtMTUpOworICAgIGFzc2VydChyZXQgPT0gWl9PSyk7CisgICAgc3RybS5hdmFpbF9pbiA9IGxlbjsKKyAgICBzdHJtLm5leHRfaW4gPSBpbjsKKyAgICBkbyB7CisgICAgICAgIHN0cm0uYXZhaWxfb3V0ID0gc2l6ZTsKKyAgICAgICAgc3RybS5uZXh0X291dCA9IG91dDsKKyAgICAgICAgcmV0ID0gaW5mbGF0ZSgmc3RybSwgWl9UUkVFUyk7CisgICAgICAgIGFzc2VydChyZXQgIT0gWl9TVFJFQU1fRVJST1IgJiYgcmV0ICE9IFpfTUVNX0VSUk9SKTsKKyAgICAgICAgaWYgKHJldCA9PSBaX0RBVEFfRVJST1IgfHwgcmV0ID09IFpfTkVFRF9ESUNUKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfSB3aGlsZSAoc3RybS5hdmFpbF9pbiB8fCBzdHJtLmF2YWlsX291dCA9PSAwKTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIGFzc2VydChyZXQgPT0gWl9EQVRBX0VSUk9SKTsKKyAgICAgICAgYXNzZXJ0KHN0cmNtcChpZCwgc3RybS5tc2cpID09IDApOworICAgIH0KKyAgICBpbmZsYXRlRW5kKCZzdHJtKTsKKyAgICBtZW1fZG9uZSgmc3RybSwgcHJlZml4KTsKKworICAgIC8qIHRoZW4gd2l0aCBpbmZsYXRlQmFjayAqLworICAgIGlmIChlcnIgPj0gMCkgeworICAgICAgICBzdHJjcHkocHJlZml4LCBpZCk7CisgICAgICAgIHN0cmNhdChwcmVmaXgsICItYmFjayIpOworICAgICAgICBtZW1fc2V0dXAoJnN0cm0pOworICAgICAgICByZXQgPSBpbmZsYXRlQmFja0luaXQoJnN0cm0sIDE1LCB3aW4pOworICAgICAgICBhc3NlcnQocmV0ID09IFpfT0spOworICAgICAgICBzdHJtLmF2YWlsX2luID0gbGVuOworICAgICAgICBzdHJtLm5leHRfaW4gPSBpbjsKKyAgICAgICAgcmV0ID0gaW5mbGF0ZUJhY2soJnN0cm0sIHB1bGwsIFpfTlVMTCwgcHVzaCwgWl9OVUxMKTsKKyAgICAgICAgYXNzZXJ0KHJldCAhPSBaX1NUUkVBTV9FUlJPUik7CisgICAgICAgIGlmIChlcnIpIHsKKyAgICAgICAgICAgIGFzc2VydChyZXQgPT0gWl9EQVRBX0VSUk9SKTsKKyAgICAgICAgICAgIGFzc2VydChzdHJjbXAoaWQsIHN0cm0ubXNnKSA9PSAwKTsKKyAgICAgICAgfQorICAgICAgICBpbmZsYXRlQmFja0VuZCgmc3RybSk7CisgICAgICAgIG1lbV9kb25lKCZzdHJtLCBwcmVmaXgpOworICAgIH0KKworICAgIC8qIGNsZWFuIHVwICovCisgICAgZnJlZShwcmVmaXgpOworICAgIGZyZWUod2luKTsKKyAgICBmcmVlKG91dCk7CisgICAgZnJlZShpbik7CisgICAgcmV0dXJuIHJldDsKK30KKworLyogY292ZXIgZGVmbGF0ZSBkYXRhIGNhc2VzIGluIGJvdGggaW5mbGF0ZSgpIGFuZCBpbmZsYXRlQmFjaygpICovCitsb2NhbCB2b2lkIGNvdmVyX2luZmxhdGUodm9pZCkKK3sKKyAgICB0cnkoIjAgMCAwIDAgMCIsICJpbnZhbGlkIHN0b3JlZCBibG9jayBsZW5ndGhzIiwgMSk7CisgICAgdHJ5KCIzIDAiLCAiZml4ZWQiLCAwKTsKKyAgICB0cnkoIjYiLCAiaW52YWxpZCBibG9jayB0eXBlIiwgMSk7CisgICAgdHJ5KCIxIDEgMCBmZSBmZiAwIiwgInN0b3JlZCIsIDApOworICAgIHRyeSgiZmMgMCAwIiwgInRvbyBtYW55IGxlbmd0aCBvciBkaXN0YW5jZSBzeW1ib2xzIiwgMSk7CisgICAgdHJ5KCI0IDAgZmUgZmYiLCAiaW52YWxpZCBjb2RlIGxlbmd0aHMgc2V0IiwgMSk7CisgICAgdHJ5KCI0IDAgMjQgNDkgMCIsICJpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0IiwgMSk7CisgICAgdHJ5KCI0IDAgMjQgZTkgZmYgZmYiLCAiaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdCIsIDEpOworICAgIHRyeSgiNCAwIDI0IGU5IGZmIDZkIiwgImludmFsaWQgY29kZSAtLSBtaXNzaW5nIGVuZC1vZi1ibG9jayIsIDEpOworICAgIHRyeSgiNCA4MCA0OSA5MiAyNCA0OSA5MiAyNCA3MSBmZiBmZiA5MyAxMSAwIiwKKyAgICAgICAgImludmFsaWQgbGl0ZXJhbC9sZW5ndGhzIHNldCIsIDEpOworICAgIHRyeSgiNCA4MCA0OSA5MiAyNCA0OSA5MiAyNCBmIGI0IGZmIGZmIGMzIDg0IiwgImludmFsaWQgZGlzdGFuY2VzIHNldCIsIDEpOworICAgIHRyeSgiNCBjMCA4MSA4IDAgMCAwIDAgMjAgN2YgZWIgYiAwIDAiLCAiaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIiwgMSk7CisgICAgdHJ5KCIyIDdlIGZmIGZmIiwgImludmFsaWQgZGlzdGFuY2UgY29kZSIsIDEpOworICAgIHRyeSgiYyBjMCA4MSAwIDAgMCAwIDAgOTAgZmYgNmIgNCAwIiwgImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIiwgMSk7CisKKyAgICAvKiBhbHNvIHRyYWlsZXIgbWlzbWF0Y2gganVzdCBpbiBpbmZsYXRlKCkgKi8KKyAgICB0cnkoIjFmIDhiIDggMCAwIDAgMCAwIDAgMCAzIDAgMCAwIDAgMSIsICJpbmNvcnJlY3QgZGF0YSBjaGVjayIsIC0xKTsKKyAgICB0cnkoIjFmIDhiIDggMCAwIDAgMCAwIDAgMCAzIDAgMCAwIDAgMCAwIDAgMCAxIiwKKyAgICAgICAgImluY29ycmVjdCBsZW5ndGggY2hlY2siLCAtMSk7CisgICAgdHJ5KCI1IGMwIDIxIGQgMCAwIDAgODAgYjAgZmUgNmQgMmYgOTEgNmMiLCAicHVsbCAxNyIsIDApOworICAgIHRyeSgiNSBlMCA4MSA5MSAyNCBjYiBiMiAyYyA0OSBlMiBmIDJlIDhiIDlhIDQ3IDU2IDlmIGZiIGZlIGVjIGQyIGZmIDFmIiwKKyAgICAgICAgImxvbmcgY29kZSIsIDApOworICAgIHRyeSgiZWQgYzAgMSAxIDAgMCAwIDQwIDIwIGZmIDU3IDFiIDQyIDJjIDRmIiwgImxlbmd0aCBleHRyYSIsIDApOworICAgIHRyeSgiZWQgY2YgYzEgYjEgMmMgNDcgMTAgYzQgMzAgZmEgNmYgMzUgMWQgMSA4MiA1OSAzZCBmYiBiZSAyZSAyYSBmYyBmIGMiLAorICAgICAgICAibG9uZyBkaXN0YW5jZSBhbmQgZXh0cmEiLCAwKTsKKyAgICB0cnkoImVkIGMwIDgxIDAgMCAwIDAgODAgYTAgZmQgYTkgMTcgYTkgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwICIKKyAgICAgICAgIjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDYiLCAid2luZG93IGVuZCIsIDApOworICAgIGluZigiMiA4IDIwIDgwIDAgMyAwIiwgImluZmxhdGVfZmFzdCBUWVBFIHJldHVybiIsIDAsIC0xNSwgMjU4LAorICAgICAgICBaX1NUUkVBTV9FTkQpOworICAgIGluZigiNjMgMTggNSA0MCBjIDAiLCAid2luZG93IHdyYXAiLCAzLCAtOCwgMzAwLCBaX09LKTsKK30KKworLyogY292ZXIgcmVtYWluaW5nIGxpbmVzIGluIGluZnRyZWVzLmMgKi8KK2xvY2FsIHZvaWQgY292ZXJfdHJlZXModm9pZCkKK3sKKyAgICBpbnQgcmV0OworICAgIHVuc2lnbmVkIGJpdHM7CisgICAgdW5zaWduZWQgc2hvcnQgbGVuc1sxNl0sIHdvcmtbMTZdOworICAgIGNvZGUgKm5leHQsIHRhYmxlW0VOT1VHSF9ESVNUU107CisKKyAgICAvKiB3ZSBuZWVkIHRvIGNhbGwgaW5mbGF0ZV90YWJsZSgpIGRpcmVjdGx5IGluIG9yZGVyIHRvIG1hbmlmZXN0IG5vdC0KKyAgICAgICBlbm91Z2ggZXJyb3JzLCBzaW5jZSB6bGliIGluc3VyZXMgdGhhdCBlbm91Z2ggaXMgYWx3YXlzIGVub3VnaCAqLworICAgIGZvciAoYml0cyA9IDA7IGJpdHMgPCAxNTsgYml0cysrKQorICAgICAgICBsZW5zW2JpdHNdID0gKHVuc2lnbmVkIHNob3J0KShiaXRzICsgMSk7CisgICAgbGVuc1sxNV0gPSAxNTsKKyAgICBuZXh0ID0gdGFibGU7CisgICAgYml0cyA9IDE1OworICAgIHJldCA9IGluZmxhdGVfdGFibGUoRElTVFMsIGxlbnMsIDE2LCAmbmV4dCwgJmJpdHMsIHdvcmspOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJldCA9PSAxKTsKKyAgICBuZXh0ID0gdGFibGU7CisgICAgYml0cyA9IDE7CisgICAgcmV0ID0gaW5mbGF0ZV90YWJsZShESVNUUywgbGVucywgMTYsICZuZXh0LCAmYml0cywgd29yayk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQocmV0ID09IDEpOworICAgIGZwdXRzKCJpbmZsYXRlX3RhYmxlIG5vdCBlbm91Z2ggZXJyb3JzXG4iLCBzdGRlcnIpOworfQorCisvKiBjb3ZlciByZW1haW5pbmcgaW5mZmFzdC5jIGRlY29kaW5nIGFuZCB3aW5kb3cgY29weWluZyAqLworbG9jYWwgdm9pZCBjb3Zlcl9mYXN0KHZvaWQpCit7CisgICAgaW5mKCJlNSBlMCA4MSBhZCA2ZCBjYiBiMiAyYyBjOSAwMSAxZSA1OSA2MyBhZSA3ZCBlZSBmYiA0ZCBmZCBiNSAzNSA0MSA2OCIKKyAgICAgICAgIiBmZiA3ZiAwZiAwIDAgMCIsICJmYXN0IGxlbmd0aCBleHRyYSBiaXRzIiwgMCwgLTgsIDI1OCwgWl9EQVRBX0VSUk9SKTsKKyAgICBpbmYoIjI1IGZkIDgxIGI1IDZkIDU5IGI2IDZhIDQ5IGVhIGFmIDM1IDYgMzQgZWIgOGMgYjkgZjYgYjkgMWUgZWYgNjcgNDkiCisgICAgICAgICIgNTAgZmUgZmYgZmYgM2YgMCAwIiwgImZhc3QgZGlzdGFuY2UgZXh0cmEgYml0cyIsIDAsIC04LCAyNTgsCisgICAgICAgIFpfREFUQV9FUlJPUik7CisgICAgaW5mKCIzIDdlIDAgMCAwIDAgMCIsICJmYXN0IGludmFsaWQgZGlzdGFuY2UgY29kZSIsIDAsIC04LCAyNTgsCisgICAgICAgIFpfREFUQV9FUlJPUik7CisgICAgaW5mKCIxYiA3IDAgMCAwIDAgMCIsICJmYXN0IGludmFsaWQgbGl0ZXJhbC9sZW5ndGggY29kZSIsIDAsIC04LCAyNTgsCisgICAgICAgIFpfREFUQV9FUlJPUik7CisgICAgaW5mKCJkIGM3IDEgYWUgZWIgMzggYyA0IDQxIGEwIDg3IDcyIGRlIGRmIGZiIDFmIGI4IDM2IGIxIDM4IDVkIGZmIGZmIDAiLAorICAgICAgICAiZmFzdCAybmQgbGV2ZWwgY29kZXMgYW5kIHRvbyBmYXIgYmFjayIsIDAsIC04LCAyNTgsIFpfREFUQV9FUlJPUik7CisgICAgaW5mKCI2MyAxOCA1IDhjIDEwIDggMCAwIDAgMCIsICJ2ZXJ5IGNvbW1vbiBjYXNlIiwgMCwgLTgsIDI1OSwgWl9PSyk7CisgICAgaW5mKCI2MyA2MCA2MCAxOCBjOSAwIDggMTggMTggMTggMjYgYzAgMjggMCAyOSAwIDAgMCIsCisgICAgICAgICJjb250aWd1b3VzIGFuZCB3cmFwIGFyb3VuZCB3aW5kb3ciLCA2LCAtOCwgMjU5LCBaX09LKTsKKyAgICBpbmYoIjYzIDAgMyAwIDAgMCAwIDAiLCAiY29weSBkaXJlY3QgZnJvbSBvdXRwdXQiLCAwLCAtOCwgMjU5LAorICAgICAgICBaX1NUUkVBTV9FTkQpOworfQorCitpbnQgbWFpbih2b2lkKQoreworICAgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsIHpsaWJWZXJzaW9uKCkpOworICAgIGNvdmVyX3N1cHBvcnQoKTsKKyAgICBjb3Zlcl93cmFwKCk7CisgICAgY292ZXJfYmFjaygpOworICAgIGNvdmVyX2luZmxhdGUoKTsKKyAgICBjb3Zlcl90cmVlcygpOworICAgIGNvdmVyX2Zhc3QoKTsKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21pbmlnemlwLmMgYi9zcmMvdGVzdC9taW5pZ3ppcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyMmZiMDgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9taW5pZ3ppcC5jCkBAIC0wLDAgKzEsNjUxIEBACisvKiBtaW5pZ3ppcC5jIC0tIHNpbXVsYXRlIGd6aXAgdXNpbmcgdGhlIHpsaWIgY29tcHJlc3Npb24gbGlicmFyeQorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDYsIDIwMTAsIDIwMTEsIDIwMTYgSmVhbi1sb3VwIEdhaWxseQorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAorICovCisKKy8qCisgKiBtaW5pZ3ppcCBpcyBhIG1pbmltYWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIGd6aXAgdXRpbGl0eS4gVGhpcyBpcworICogb25seSBhbiBleGFtcGxlIG9mIHVzaW5nIHpsaWIgYW5kIGlzbid0IG1lYW50IHRvIHJlcGxhY2UgdGhlCisgKiBmdWxsLWZlYXR1cmVkIGd6aXAuIE5vIGF0dGVtcHQgaXMgbWFkZSB0byBkZWFsIHdpdGggZmlsZSBzeXN0ZW1zCisgKiBsaW1pdGluZyBuYW1lcyB0byAxNCBvciA4KzMgY2hhcmFjdGVycywgZXRjLi4uIEVycm9yIGNoZWNraW5nIGlzCisgKiB2ZXJ5IGxpbWl0ZWQuIFNvIHVzZSBtaW5pZ3ppcCBvbmx5IGZvciB0ZXN0aW5nOyB1c2UgZ3ppcCBmb3IgdGhlCisgKiByZWFsIHRoaW5nLiBPbiBNU0RPUywgdXNlIG9ubHkgb24gZmlsZSBuYW1lcyB3aXRob3V0IGV4dGVuc2lvbgorICogb3IgaW4gcGlwZSBtb2RlLgorICovCisKKy8qIEAoIykgJElkJCAqLworCisjaW5jbHVkZSAiemxpYi5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpZmRlZiBTVERDCisjICBpbmNsdWRlIDxzdHJpbmcuaD4KKyMgIGluY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisKKyNpZmRlZiBVU0VfTU1BUAorIyAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjICBpbmNsdWRlIDxzeXMvbW1hbi5oPgorIyAgaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNU0RPUykgfHwgZGVmaW5lZChPUzIpIHx8IGRlZmluZWQoV0lOMzIpIHx8IGRlZmluZWQoX19DWUdXSU5fXykKKyMgIGluY2x1ZGUgPGZjbnRsLmg+CisjICBpbmNsdWRlIDxpby5oPgorIyAgaWZkZWYgVU5ERVJfQ0UKKyMgICAgaW5jbHVkZSA8c3RkbGliLmg+CisjICBlbmRpZgorIyAgZGVmaW5lIFNFVF9CSU5BUllfTU9ERShmaWxlKSBzZXRtb2RlKGZpbGVubyhmaWxlKSwgT19CSU5BUlkpCisjZWxzZQorIyAgZGVmaW5lIFNFVF9CSU5BUllfTU9ERShmaWxlKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUiA8IDE5MDAKKyMgIGRlZmluZSBzbnByaW50ZiBfc25wcmludGYKKyNlbmRpZgorCisjaWZkZWYgVk1TCisjICBkZWZpbmUgdW5saW5rIGRlbGV0ZQorIyAgZGVmaW5lIEdaX1NVRkZJWCAiLWd6IgorI2VuZGlmCisjaWZkZWYgUklTQ09TCisjICBkZWZpbmUgdW5saW5rIHJlbW92ZQorIyAgZGVmaW5lIEdaX1NVRkZJWCAiLWd6IgorIyAgZGVmaW5lIGZpbGVubyhmaWxlKSBmaWxlLT5fX2ZpbGUKKyNlbmRpZgorI2lmIGRlZmluZWQoX19NV0VSS1NfXykgJiYgX19kZXN0X29zICE9IF9fYmVfb3MgJiYgX19kZXN0X29zICE9IF9fd2luMzJfb3MKKyMgIGluY2x1ZGUgPHVuaXguaD4gLyogZm9yIGZpbGVubyAqLworI2VuZGlmCisKKyNpZiAhZGVmaW5lZChaX0hBVkVfVU5JU1REX0gpICYmICFkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpCisjaWZuZGVmIFdJTjMyIC8qIHVubGluayBhbHJlYWR5IGluIHN0ZGlvLmggZm9yIFdJTjMyICovCisgIGV4dGVybiBpbnQgdW5saW5rIE9GKChjb25zdCBjaGFyICopKTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFVOREVSX0NFKQorIyAgaW5jbHVkZSA8d2luZG93cy5oPgorIyAgZGVmaW5lIHBlcnJvcihzKSBwd2luZXJyb3IocykKKworLyogTWFwIHRoZSBXaW5kb3dzIGVycm9yIG51bWJlciBpbiBFUlJPUiB0byBhIGxvY2FsZS1kZXBlbmRlbnQgZXJyb3IKKyAgIG1lc3NhZ2Ugc3RyaW5nIGFuZCByZXR1cm4gYSBwb2ludGVyIHRvIGl0LiAgVHlwaWNhbGx5LCB0aGUgdmFsdWVzCisgICBmb3IgRVJST1IgY29tZSBmcm9tIEdldExhc3RFcnJvci4KKworICAgVGhlIHN0cmluZyBwb2ludGVkIHRvIHNoYWxsIG5vdCBiZSBtb2RpZmllZCBieSB0aGUgYXBwbGljYXRpb24sCisgICBidXQgbWF5IGJlIG92ZXJ3cml0dGVuIGJ5IGEgc3Vic2VxdWVudCBjYWxsIHRvIHN0cndpbmVycm9yCisKKyAgIFRoZSBzdHJ3aW5lcnJvciBmdW5jdGlvbiBkb2VzIG5vdCBjaGFuZ2UgdGhlIGN1cnJlbnQgc2V0dGluZworICAgb2YgR2V0TGFzdEVycm9yLiAgKi8KKworc3RhdGljIGNoYXIgKnN0cndpbmVycm9yIChlcnJvcikKKyAgICAgRFdPUkQgZXJyb3I7Cit7CisgICAgc3RhdGljIGNoYXIgYnVmWzEwMjRdOworCisgICAgd2NoYXJfdCAqbXNnYnVmOworICAgIERXT1JEIGxhc3RlcnIgPSBHZXRMYXN0RXJyb3IoKTsKKyAgICBEV09SRCBjaGFycyA9IEZvcm1hdE1lc3NhZ2UoRk9STUFUX01FU1NBR0VfRlJPTV9TWVNURU0KKyAgICAgICAgfCBGT1JNQVRfTUVTU0FHRV9BTExPQ0FURV9CVUZGRVIsCisgICAgICAgIE5VTEwsCisgICAgICAgIGVycm9yLAorICAgICAgICAwLCAvKiBEZWZhdWx0IGxhbmd1YWdlICovCisgICAgICAgIChMUFZPSUQpJm1zZ2J1ZiwKKyAgICAgICAgMCwKKyAgICAgICAgTlVMTCk7CisgICAgaWYgKGNoYXJzICE9IDApIHsKKyAgICAgICAgLyogSWYgdGhlcmUgaXMgYW4gXHJcbiBhcHBlbmRlZCwgemFwIGl0LiAgKi8KKyAgICAgICAgaWYgKGNoYXJzID49IDIKKyAgICAgICAgICAgICYmIG1zZ2J1ZltjaGFycyAtIDJdID09ICdccicgJiYgbXNnYnVmW2NoYXJzIC0gMV0gPT0gJ1xuJykgeworICAgICAgICAgICAgY2hhcnMgLT0gMjsKKyAgICAgICAgICAgIG1zZ2J1ZltjaGFyc10gPSAwOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNoYXJzID4gc2l6ZW9mIChidWYpIC0gMSkgeworICAgICAgICAgICAgY2hhcnMgPSBzaXplb2YgKGJ1ZikgLSAxOworICAgICAgICAgICAgbXNnYnVmW2NoYXJzXSA9IDA7CisgICAgICAgIH0KKworICAgICAgICB3Y3N0b21icyhidWYsIG1zZ2J1ZiwgY2hhcnMgKyAxKTsKKyAgICAgICAgTG9jYWxGcmVlKG1zZ2J1Zik7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBzcHJpbnRmKGJ1ZiwgInVua25vd24gd2luMzIgZXJyb3IgKCVsZCkiLCBlcnJvcik7CisgICAgfQorCisgICAgU2V0TGFzdEVycm9yKGxhc3RlcnIpOworICAgIHJldHVybiBidWY7Cit9CisKK3N0YXRpYyB2b2lkIHB3aW5lcnJvciAocykKKyAgICBjb25zdCBjaGFyICpzOworeworICAgIGlmIChzICYmICpzKQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiAlc1xuIiwgcywgc3Ryd2luZXJyb3IoR2V0TGFzdEVycm9yICgpKSk7CisgICAgZWxzZQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBzdHJ3aW5lcnJvcihHZXRMYXN0RXJyb3IgKCkpKTsKK30KKworI2VuZGlmIC8qIFVOREVSX0NFICovCisKKyNpZm5kZWYgR1pfU1VGRklYCisjICBkZWZpbmUgR1pfU1VGRklYICIuZ3oiCisjZW5kaWYKKyNkZWZpbmUgU1VGRklYX0xFTiAoc2l6ZW9mKEdaX1NVRkZJWCktMSkKKworI2RlZmluZSBCVUZMRU4gICAgICAxNjM4NAorI2RlZmluZSBNQVhfTkFNRV9MRU4gMTAyNAorCisjaWZkZWYgTUFYU0VHXzY0SworIyAgZGVmaW5lIGxvY2FsIHN0YXRpYworICAgLyogTmVlZGVkIGZvciBzeXN0ZW1zIHdpdGggbGltaXRhdGlvbiBvbiBzdGFjayBzaXplLiAqLworI2Vsc2UKKyMgIGRlZmluZSBsb2NhbAorI2VuZGlmCisKKyNpZmRlZiBaX1NPTE8KKy8qIGZvciBaX1NPTE8sIGNyZWF0ZSBzaW1wbGlmaWVkIGd6KiBmdW5jdGlvbnMgdXNpbmcgZGVmbGF0ZSBhbmQgaW5mbGF0ZSAqLworCisjaWYgZGVmaW5lZChaX0hBVkVfVU5JU1REX0gpIHx8IGRlZmluZWQoWl9MQVJHRSkKKyMgIGluY2x1ZGUgPHVuaXN0ZC5oPiAgICAgICAvKiBmb3IgdW5saW5rKCkgKi8KKyNlbmRpZgorCit2b2lkICpteWFsbG9jIE9GKCh2b2lkICosIHVuc2lnbmVkLCB1bnNpZ25lZCkpOwordm9pZCBteWZyZWUgT0YoKHZvaWQgKiwgdm9pZCAqKSk7CisKK3ZvaWQgKm15YWxsb2MocSwgbiwgbSkKKyAgICB2b2lkICpxOworICAgIHVuc2lnbmVkIG4sIG07Cit7CisgICAgKHZvaWQpcTsKKyAgICByZXR1cm4gY2FsbG9jKG4sIG0pOworfQorCit2b2lkIG15ZnJlZShxLCBwKQorICAgIHZvaWQgKnEsICpwOworeworICAgICh2b2lkKXE7CisgICAgZnJlZShwKTsKK30KKwordHlwZWRlZiBzdHJ1Y3QgZ3pGaWxlX3MgeworICAgIEZJTEUgKmZpbGU7CisgICAgaW50IHdyaXRlOworICAgIGludCBlcnI7CisgICAgY2hhciAqbXNnOworICAgIHpfc3RyZWFtIHN0cm07Cit9ICpnekZpbGU7CisKK2d6RmlsZSBnem9wZW4gT0YoKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKSk7CitnekZpbGUgZ3pkb3BlbiBPRigoaW50LCBjb25zdCBjaGFyICopKTsKK2d6RmlsZSBnel9vcGVuIE9GKChjb25zdCBjaGFyICosIGludCwgY29uc3QgY2hhciAqKSk7CisKK2d6RmlsZSBnem9wZW4ocGF0aCwgbW9kZSkKK2NvbnN0IGNoYXIgKnBhdGg7Citjb25zdCBjaGFyICptb2RlOworeworICAgIHJldHVybiBnel9vcGVuKHBhdGgsIC0xLCBtb2RlKTsKK30KKworZ3pGaWxlIGd6ZG9wZW4oZmQsIG1vZGUpCitpbnQgZmQ7Citjb25zdCBjaGFyICptb2RlOworeworICAgIHJldHVybiBnel9vcGVuKE5VTEwsIGZkLCBtb2RlKTsKK30KKworZ3pGaWxlIGd6X29wZW4ocGF0aCwgZmQsIG1vZGUpCisgICAgY29uc3QgY2hhciAqcGF0aDsKKyAgICBpbnQgZmQ7CisgICAgY29uc3QgY2hhciAqbW9kZTsKK3sKKyAgICBnekZpbGUgZ3o7CisgICAgaW50IHJldDsKKworICAgIGd6ID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgZ3pGaWxlX3MpKTsKKyAgICBpZiAoZ3ogPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgZ3otPndyaXRlID0gc3RyY2hyKG1vZGUsICd3JykgIT0gTlVMTDsKKyAgICBnei0+c3RybS56YWxsb2MgPSBteWFsbG9jOworICAgIGd6LT5zdHJtLnpmcmVlID0gbXlmcmVlOworICAgIGd6LT5zdHJtLm9wYXF1ZSA9IFpfTlVMTDsKKyAgICBpZiAoZ3otPndyaXRlKQorICAgICAgICByZXQgPSBkZWZsYXRlSW5pdDIoJihnei0+c3RybSksIC0xLCA4LCAxNSArIDE2LCA4LCAwKTsKKyAgICBlbHNlIHsKKyAgICAgICAgZ3otPnN0cm0ubmV4dF9pbiA9IDA7CisgICAgICAgIGd6LT5zdHJtLmF2YWlsX2luID0gWl9OVUxMOworICAgICAgICByZXQgPSBpbmZsYXRlSW5pdDIoJihnei0+c3RybSksIDE1ICsgMTYpOworICAgIH0KKyAgICBpZiAocmV0ICE9IFpfT0spIHsKKyAgICAgICAgZnJlZShneik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBnei0+ZmlsZSA9IHBhdGggPT0gTlVMTCA/IGZkb3BlbihmZCwgZ3otPndyaXRlID8gIndiIiA6ICJyYiIpIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcGVuKHBhdGgsIGd6LT53cml0ZSA/ICJ3YiIgOiAicmIiKTsKKyAgICBpZiAoZ3otPmZpbGUgPT0gTlVMTCkgeworICAgICAgICBnei0+d3JpdGUgPyBkZWZsYXRlRW5kKCYoZ3otPnN0cm0pKSA6IGluZmxhdGVFbmQoJihnei0+c3RybSkpOworICAgICAgICBmcmVlKGd6KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGd6LT5lcnIgPSAwOworICAgIGd6LT5tc2cgPSAiIjsKKyAgICByZXR1cm4gZ3o7Cit9CisKK2ludCBnendyaXRlIE9GKChnekZpbGUsIGNvbnN0IHZvaWQgKiwgdW5zaWduZWQpKTsKKworaW50IGd6d3JpdGUoZ3osIGJ1ZiwgbGVuKQorICAgIGd6RmlsZSBnejsKKyAgICBjb25zdCB2b2lkICpidWY7CisgICAgdW5zaWduZWQgbGVuOworeworICAgIHpfc3RyZWFtICpzdHJtOworICAgIHVuc2lnbmVkIGNoYXIgb3V0W0JVRkxFTl07CisKKyAgICBpZiAoZ3ogPT0gTlVMTCB8fCAhZ3otPndyaXRlKQorICAgICAgICByZXR1cm4gMDsKKyAgICBzdHJtID0gJihnei0+c3RybSk7CisgICAgc3RybS0+bmV4dF9pbiA9ICh2b2lkICopYnVmOworICAgIHN0cm0tPmF2YWlsX2luID0gbGVuOworICAgIGRvIHsKKyAgICAgICAgc3RybS0+bmV4dF9vdXQgPSBvdXQ7CisgICAgICAgIHN0cm0tPmF2YWlsX291dCA9IEJVRkxFTjsKKyAgICAgICAgKHZvaWQpZGVmbGF0ZShzdHJtLCBaX05PX0ZMVVNIKTsKKyAgICAgICAgZndyaXRlKG91dCwgMSwgQlVGTEVOIC0gc3RybS0+YXZhaWxfb3V0LCBnei0+ZmlsZSk7CisgICAgfSB3aGlsZSAoc3RybS0+YXZhaWxfb3V0ID09IDApOworICAgIHJldHVybiBsZW47Cit9CisKK2ludCBnenJlYWQgT0YoKGd6RmlsZSwgdm9pZCAqLCB1bnNpZ25lZCkpOworCitpbnQgZ3pyZWFkKGd6LCBidWYsIGxlbikKKyAgICBnekZpbGUgZ3o7CisgICAgdm9pZCAqYnVmOworICAgIHVuc2lnbmVkIGxlbjsKK3sKKyAgICBpbnQgcmV0OworICAgIHVuc2lnbmVkIGdvdDsKKyAgICB1bnNpZ25lZCBjaGFyIGluWzFdOworICAgIHpfc3RyZWFtICpzdHJtOworCisgICAgaWYgKGd6ID09IE5VTEwgfHwgZ3otPndyaXRlKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoZ3otPmVycikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgc3RybSA9ICYoZ3otPnN0cm0pOworICAgIHN0cm0tPm5leHRfb3V0ID0gKHZvaWQgKilidWY7CisgICAgc3RybS0+YXZhaWxfb3V0ID0gbGVuOworICAgIGRvIHsKKyAgICAgICAgZ290ID0gZnJlYWQoaW4sIDEsIDEsIGd6LT5maWxlKTsKKyAgICAgICAgaWYgKGdvdCA9PSAwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHN0cm0tPm5leHRfaW4gPSBpbjsKKyAgICAgICAgc3RybS0+YXZhaWxfaW4gPSAxOworICAgICAgICByZXQgPSBpbmZsYXRlKHN0cm0sIFpfTk9fRkxVU0gpOworICAgICAgICBpZiAocmV0ID09IFpfREFUQV9FUlJPUikgeworICAgICAgICAgICAgZ3otPmVyciA9IFpfREFUQV9FUlJPUjsKKyAgICAgICAgICAgIGd6LT5tc2cgPSBzdHJtLT5tc2c7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBpZiAocmV0ID09IFpfU1RSRUFNX0VORCkKKyAgICAgICAgICAgIGluZmxhdGVSZXNldChzdHJtKTsKKyAgICB9IHdoaWxlIChzdHJtLT5hdmFpbF9vdXQpOworICAgIHJldHVybiBsZW4gLSBzdHJtLT5hdmFpbF9vdXQ7Cit9CisKK2ludCBnemNsb3NlIE9GKChnekZpbGUpKTsKKworaW50IGd6Y2xvc2UoZ3opCisgICAgZ3pGaWxlIGd6OworeworICAgIHpfc3RyZWFtICpzdHJtOworICAgIHVuc2lnbmVkIGNoYXIgb3V0W0JVRkxFTl07CisKKyAgICBpZiAoZ3ogPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworICAgIHN0cm0gPSAmKGd6LT5zdHJtKTsKKyAgICBpZiAoZ3otPndyaXRlKSB7CisgICAgICAgIHN0cm0tPm5leHRfaW4gPSBaX05VTEw7CisgICAgICAgIHN0cm0tPmF2YWlsX2luID0gMDsKKyAgICAgICAgZG8geworICAgICAgICAgICAgc3RybS0+bmV4dF9vdXQgPSBvdXQ7CisgICAgICAgICAgICBzdHJtLT5hdmFpbF9vdXQgPSBCVUZMRU47CisgICAgICAgICAgICAodm9pZClkZWZsYXRlKHN0cm0sIFpfRklOSVNIKTsKKyAgICAgICAgICAgIGZ3cml0ZShvdXQsIDEsIEJVRkxFTiAtIHN0cm0tPmF2YWlsX291dCwgZ3otPmZpbGUpOworICAgICAgICB9IHdoaWxlIChzdHJtLT5hdmFpbF9vdXQgPT0gMCk7CisgICAgICAgIGRlZmxhdGVFbmQoc3RybSk7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgaW5mbGF0ZUVuZChzdHJtKTsKKyAgICBmY2xvc2UoZ3otPmZpbGUpOworICAgIGZyZWUoZ3opOworICAgIHJldHVybiBaX09LOworfQorCitjb25zdCBjaGFyICpnemVycm9yIE9GKChnekZpbGUsIGludCAqKSk7CisKK2NvbnN0IGNoYXIgKmd6ZXJyb3IoZ3osIGVycikKKyAgICBnekZpbGUgZ3o7CisgICAgaW50ICplcnI7Cit7CisgICAgKmVyciA9IGd6LT5lcnI7CisgICAgcmV0dXJuIGd6LT5tc2c7Cit9CisKKyNlbmRpZgorCitzdGF0aWMgY2hhciAqcHJvZzsKKwordm9pZCBlcnJvciAgICAgICAgICAgIE9GKChjb25zdCBjaGFyICptc2cpKTsKK3ZvaWQgZ3pfY29tcHJlc3MgICAgICBPRigoRklMRSAgICppbiwgZ3pGaWxlIG91dCkpOworI2lmZGVmIFVTRV9NTUFQCitpbnQgIGd6X2NvbXByZXNzX21tYXAgT0YoKEZJTEUgICAqaW4sIGd6RmlsZSBvdXQpKTsKKyNlbmRpZgordm9pZCBnel91bmNvbXByZXNzICAgIE9GKChnekZpbGUgaW4sIEZJTEUgICAqb3V0KSk7Cit2b2lkIGZpbGVfY29tcHJlc3MgICAgT0YoKGNoYXIgICpmaWxlLCBjaGFyICptb2RlKSk7Cit2b2lkIGZpbGVfdW5jb21wcmVzcyAgT0YoKGNoYXIgICpmaWxlKSk7CitpbnQgIG1haW4gICAgICAgICAgICAgT0YoKGludCBhcmdjLCBjaGFyICphcmd2W10pKTsKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBEaXNwbGF5IGVycm9yIG1lc3NhZ2UgYW5kIGV4aXQKKyAqLwordm9pZCBlcnJvcihtc2cpCisgICAgY29uc3QgY2hhciAqbXNnOworeworICAgIGZwcmludGYoc3RkZXJyLCAiJXM6ICVzXG4iLCBwcm9nLCBtc2cpOworICAgIGV4aXQoMSk7Cit9CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29tcHJlc3MgaW5wdXQgdG8gb3V0cHV0IHRoZW4gY2xvc2UgYm90aCBmaWxlcy4KKyAqLworCit2b2lkIGd6X2NvbXByZXNzKGluLCBvdXQpCisgICAgRklMRSAgICppbjsKKyAgICBnekZpbGUgb3V0OworeworICAgIGxvY2FsIGNoYXIgYnVmW0JVRkxFTl07CisgICAgaW50IGxlbjsKKyAgICBpbnQgZXJyOworCisjaWZkZWYgVVNFX01NQVAKKyAgICAvKiBUcnkgZmlyc3QgY29tcHJlc3Npbmcgd2l0aCBtbWFwLiBJZiBtbWFwIGZhaWxzIChtaW5pZ3ppcCB1c2VkIGluIGEKKyAgICAgKiBwaXBlKSwgdXNlIHRoZSBub3JtYWwgZnJlYWQgbG9vcC4KKyAgICAgKi8KKyAgICBpZiAoZ3pfY29tcHJlc3NfbW1hcChpbiwgb3V0KSA9PSBaX09LKSByZXR1cm47CisjZW5kaWYKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGxlbiA9IChpbnQpZnJlYWQoYnVmLCAxLCBzaXplb2YoYnVmKSwgaW4pOworICAgICAgICBpZiAoZmVycm9yKGluKSkgeworICAgICAgICAgICAgcGVycm9yKCJmcmVhZCIpOworICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobGVuID09IDApIGJyZWFrOworCisgICAgICAgIGlmIChnendyaXRlKG91dCwgYnVmLCAodW5zaWduZWQpbGVuKSAhPSBsZW4pIGVycm9yKGd6ZXJyb3Iob3V0LCAmZXJyKSk7CisgICAgfQorICAgIGZjbG9zZShpbik7CisgICAgaWYgKGd6Y2xvc2Uob3V0KSAhPSBaX09LKSBlcnJvcigiZmFpbGVkIGd6Y2xvc2UiKTsKK30KKworI2lmZGVmIFVTRV9NTUFQIC8qIE1NQVAgdmVyc2lvbiwgTWlndWVsIEFsYnJlY2h0IDxtYWxicmVjaEBlc28ub3JnPiAqLworCisvKiBUcnkgY29tcHJlc3NpbmcgdGhlIGlucHV0IGZpbGUgYXQgb25jZSB1c2luZyBtbWFwLiBSZXR1cm4gWl9PSyBpZgorICogaWYgc3VjY2VzcywgWl9FUlJOTyBvdGhlcndpc2UuCisgKi8KK2ludCBnel9jb21wcmVzc19tbWFwKGluLCBvdXQpCisgICAgRklMRSAgICppbjsKKyAgICBnekZpbGUgb3V0OworeworICAgIGludCBsZW47CisgICAgaW50IGVycjsKKyAgICBpbnQgaWZkID0gZmlsZW5vKGluKTsKKyAgICBjYWRkcl90IGJ1ZjsgICAgLyogbW1hcCdlZCBidWZmZXIgZm9yIHRoZSBlbnRpcmUgaW5wdXQgZmlsZSAqLworICAgIG9mZl90IGJ1Zl9sZW47ICAvKiBsZW5ndGggb2YgdGhlIGlucHV0IGZpbGUgKi8KKyAgICBzdHJ1Y3Qgc3RhdCBzYjsKKworICAgIC8qIERldGVybWluZSB0aGUgc2l6ZSBvZiB0aGUgZmlsZSwgbmVlZGVkIGZvciBtbWFwOiAqLworICAgIGlmIChmc3RhdChpZmQsICZzYikgPCAwKSByZXR1cm4gWl9FUlJOTzsKKyAgICBidWZfbGVuID0gc2Iuc3Rfc2l6ZTsKKyAgICBpZiAoYnVmX2xlbiA8PSAwKSByZXR1cm4gWl9FUlJOTzsKKworICAgIC8qIE5vdyBkbyB0aGUgYWN0dWFsIG1tYXA6ICovCisgICAgYnVmID0gbW1hcCgoY2FkZHJfdCkgMCwgYnVmX2xlbiwgUFJPVF9SRUFELCBNQVBfU0hBUkVELCBpZmQsIChvZmZfdCkwKTsKKyAgICBpZiAoYnVmID09IChjYWRkcl90KSgtMSkpIHJldHVybiBaX0VSUk5POworCisgICAgLyogQ29tcHJlc3MgdGhlIHdob2xlIGZpbGUgYXQgb25jZTogKi8KKyAgICBsZW4gPSBnendyaXRlKG91dCwgKGNoYXIgKilidWYsICh1bnNpZ25lZClidWZfbGVuKTsKKworICAgIGlmIChsZW4gIT0gKGludClidWZfbGVuKSBlcnJvcihnemVycm9yKG91dCwgJmVycikpOworCisgICAgbXVubWFwKGJ1ZiwgYnVmX2xlbik7CisgICAgZmNsb3NlKGluKTsKKyAgICBpZiAoZ3pjbG9zZShvdXQpICE9IFpfT0spIGVycm9yKCJmYWlsZWQgZ3pjbG9zZSIpOworICAgIHJldHVybiBaX09LOworfQorI2VuZGlmIC8qIFVTRV9NTUFQICovCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogVW5jb21wcmVzcyBpbnB1dCB0byBvdXRwdXQgdGhlbiBjbG9zZSBib3RoIGZpbGVzLgorICovCit2b2lkIGd6X3VuY29tcHJlc3MoaW4sIG91dCkKKyAgICBnekZpbGUgaW47CisgICAgRklMRSAgICpvdXQ7Cit7CisgICAgbG9jYWwgY2hhciBidWZbQlVGTEVOXTsKKyAgICBpbnQgbGVuOworICAgIGludCBlcnI7CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGxlbiA9IGd6cmVhZChpbiwgYnVmLCBzaXplb2YoYnVmKSk7CisgICAgICAgIGlmIChsZW4gPCAwKSBlcnJvciAoZ3plcnJvcihpbiwgJmVycikpOworICAgICAgICBpZiAobGVuID09IDApIGJyZWFrOworCisgICAgICAgIGlmICgoaW50KWZ3cml0ZShidWYsIDEsICh1bnNpZ25lZClsZW4sIG91dCkgIT0gbGVuKSB7CisgICAgICAgICAgICBlcnJvcigiZmFpbGVkIGZ3cml0ZSIpOworICAgICAgICB9CisgICAgfQorICAgIGlmIChmY2xvc2Uob3V0KSkgZXJyb3IoImZhaWxlZCBmY2xvc2UiKTsKKworICAgIGlmIChnemNsb3NlKGluKSAhPSBaX09LKSBlcnJvcigiZmFpbGVkIGd6Y2xvc2UiKTsKK30KKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvbXByZXNzIHRoZSBnaXZlbiBmaWxlOiBjcmVhdGUgYSBjb3JyZXNwb25kaW5nIC5neiBmaWxlIGFuZCByZW1vdmUgdGhlCisgKiBvcmlnaW5hbC4KKyAqLwordm9pZCBmaWxlX2NvbXByZXNzKGZpbGUsIG1vZGUpCisgICAgY2hhciAgKmZpbGU7CisgICAgY2hhciAgKm1vZGU7Cit7CisgICAgbG9jYWwgY2hhciBvdXRmaWxlW01BWF9OQU1FX0xFTl07CisgICAgRklMRSAgKmluOworICAgIGd6RmlsZSBvdXQ7CisKKyAgICBpZiAoc3RybGVuKGZpbGUpICsgc3RybGVuKEdaX1NVRkZJWCkgPj0gc2l6ZW9mKG91dGZpbGUpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGZpbGVuYW1lIHRvbyBsb25nXG4iLCBwcm9nKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9CisKKyNpZiAhZGVmaW5lZChOT19zbnByaW50ZikgJiYgIWRlZmluZWQoTk9fdnNucHJpbnRmKQorICAgIHNucHJpbnRmKG91dGZpbGUsIHNpemVvZihvdXRmaWxlKSwgIiVzJXMiLCBmaWxlLCBHWl9TVUZGSVgpOworI2Vsc2UKKyAgICBzdHJjcHkob3V0ZmlsZSwgZmlsZSk7CisgICAgc3RyY2F0KG91dGZpbGUsIEdaX1NVRkZJWCk7CisjZW5kaWYKKworICAgIGluID0gZm9wZW4oZmlsZSwgInJiIik7CisgICAgaWYgKGluID09IE5VTEwpIHsKKyAgICAgICAgcGVycm9yKGZpbGUpOworICAgICAgICBleGl0KDEpOworICAgIH0KKyAgICBvdXQgPSBnem9wZW4ob3V0ZmlsZSwgbW9kZSk7CisgICAgaWYgKG91dCA9PSBOVUxMKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGNhbid0IGd6b3BlbiAlc1xuIiwgcHJvZywgb3V0ZmlsZSk7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIGd6X2NvbXByZXNzKGluLCBvdXQpOworCisgICAgdW5saW5rKGZpbGUpOworfQorCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogVW5jb21wcmVzcyB0aGUgZ2l2ZW4gZmlsZSBhbmQgcmVtb3ZlIHRoZSBvcmlnaW5hbC4KKyAqLwordm9pZCBmaWxlX3VuY29tcHJlc3MoZmlsZSkKKyAgICBjaGFyICAqZmlsZTsKK3sKKyAgICBsb2NhbCBjaGFyIGJ1ZltNQVhfTkFNRV9MRU5dOworICAgIGNoYXIgKmluZmlsZSwgKm91dGZpbGU7CisgICAgRklMRSAgKm91dDsKKyAgICBnekZpbGUgaW47CisgICAgdW5zaWduZWQgbGVuID0gc3RybGVuKGZpbGUpOworCisgICAgaWYgKGxlbiArIHN0cmxlbihHWl9TVUZGSVgpID49IHNpemVvZihidWYpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGZpbGVuYW1lIHRvbyBsb25nXG4iLCBwcm9nKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9CisKKyNpZiAhZGVmaW5lZChOT19zbnByaW50ZikgJiYgIWRlZmluZWQoTk9fdnNucHJpbnRmKQorICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcyIsIGZpbGUpOworI2Vsc2UKKyAgICBzdHJjcHkoYnVmLCBmaWxlKTsKKyNlbmRpZgorCisgICAgaWYgKGxlbiA+IFNVRkZJWF9MRU4gJiYgc3RyY21wKGZpbGUrbGVuLVNVRkZJWF9MRU4sIEdaX1NVRkZJWCkgPT0gMCkgeworICAgICAgICBpbmZpbGUgPSBmaWxlOworICAgICAgICBvdXRmaWxlID0gYnVmOworICAgICAgICBvdXRmaWxlW2xlbi0zXSA9ICdcMCc7CisgICAgfSBlbHNlIHsKKyAgICAgICAgb3V0ZmlsZSA9IGZpbGU7CisgICAgICAgIGluZmlsZSA9IGJ1ZjsKKyNpZiAhZGVmaW5lZChOT19zbnByaW50ZikgJiYgIWRlZmluZWQoTk9fdnNucHJpbnRmKQorICAgICAgICBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLCAiJXMiLCBHWl9TVUZGSVgpOworI2Vsc2UKKyAgICAgICAgc3RyY2F0KGluZmlsZSwgR1pfU1VGRklYKTsKKyNlbmRpZgorICAgIH0KKyAgICBpbiA9IGd6b3BlbihpbmZpbGUsICJyYiIpOworICAgIGlmIChpbiA9PSBOVUxMKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGNhbid0IGd6b3BlbiAlc1xuIiwgcHJvZywgaW5maWxlKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgb3V0ID0gZm9wZW4ob3V0ZmlsZSwgIndiIik7CisgICAgaWYgKG91dCA9PSBOVUxMKSB7CisgICAgICAgIHBlcnJvcihmaWxlKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9CisKKyAgICBnel91bmNvbXByZXNzKGluLCBvdXQpOworCisgICAgdW5saW5rKGluZmlsZSk7Cit9CisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBVc2FnZTogIG1pbmlnemlwIFstY10gWy1kXSBbLWZdIFstaF0gWy1yXSBbLTEgdG8gLTldIFtmaWxlcy4uLl0KKyAqICAgLWMgOiB3cml0ZSB0byBzdGFuZGFyZCBvdXRwdXQKKyAqICAgLWQgOiBkZWNvbXByZXNzCisgKiAgIC1mIDogY29tcHJlc3Mgd2l0aCBaX0ZJTFRFUkVECisgKiAgIC1oIDogY29tcHJlc3Mgd2l0aCBaX0hVRkZNQU5fT05MWQorICogICAtciA6IGNvbXByZXNzIHdpdGggWl9STEUKKyAqICAgLTEgdG8gLTkgOiBjb21wcmVzc2lvbiBsZXZlbAorICovCisKK2ludCBtYWluKGFyZ2MsIGFyZ3YpCisgICAgaW50IGFyZ2M7CisgICAgY2hhciAqYXJndltdOworeworICAgIGludCBjb3B5b3V0ID0gMDsKKyAgICBpbnQgdW5jb21wciA9IDA7CisgICAgZ3pGaWxlIGZpbGU7CisgICAgY2hhciAqYm5hbWUsIG91dG1vZGVbMjBdOworCisjaWYgIWRlZmluZWQoTk9fc25wcmludGYpICYmICFkZWZpbmVkKE5PX3ZzbnByaW50ZikKKyAgICBzbnByaW50ZihvdXRtb2RlLCBzaXplb2Yob3V0bW9kZSksICIlcyIsICJ3YjYgIik7CisjZWxzZQorICAgIHN0cmNweShvdXRtb2RlLCAid2I2ICIpOworI2VuZGlmCisKKyAgICBwcm9nID0gYXJndlswXTsKKyAgICBibmFtZSA9IHN0cnJjaHIoYXJndlswXSwgJy8nKTsKKyAgICBpZiAoYm5hbWUpCisgICAgICBibmFtZSsrOworICAgIGVsc2UKKyAgICAgIGJuYW1lID0gYXJndlswXTsKKyAgICBhcmdjLS0sIGFyZ3YrKzsKKworICAgIGlmICghc3RyY21wKGJuYW1lLCAiZ3VuemlwIikpCisgICAgICB1bmNvbXByID0gMTsKKyAgICBlbHNlIGlmICghc3RyY21wKGJuYW1lLCAiemNhdCIpKQorICAgICAgY29weW91dCA9IHVuY29tcHIgPSAxOworCisgICAgd2hpbGUgKGFyZ2MgPiAwKSB7CisgICAgICBpZiAoc3RyY21wKCphcmd2LCAiLWMiKSA9PSAwKQorICAgICAgICBjb3B5b3V0ID0gMTsKKyAgICAgIGVsc2UgaWYgKHN0cmNtcCgqYXJndiwgIi1kIikgPT0gMCkKKyAgICAgICAgdW5jb21wciA9IDE7CisgICAgICBlbHNlIGlmIChzdHJjbXAoKmFyZ3YsICItZiIpID09IDApCisgICAgICAgIG91dG1vZGVbM10gPSAnZic7CisgICAgICBlbHNlIGlmIChzdHJjbXAoKmFyZ3YsICItaCIpID09IDApCisgICAgICAgIG91dG1vZGVbM10gPSAnaCc7CisgICAgICBlbHNlIGlmIChzdHJjbXAoKmFyZ3YsICItciIpID09IDApCisgICAgICAgIG91dG1vZGVbM10gPSAnUic7CisgICAgICBlbHNlIGlmICgoKmFyZ3YpWzBdID09ICctJyAmJiAoKmFyZ3YpWzFdID49ICcxJyAmJiAoKmFyZ3YpWzFdIDw9ICc5JyAmJgorICAgICAgICAgICAgICAgKCphcmd2KVsyXSA9PSAwKQorICAgICAgICBvdXRtb2RlWzJdID0gKCphcmd2KVsxXTsKKyAgICAgIGVsc2UKKyAgICAgICAgYnJlYWs7CisgICAgICBhcmdjLS0sIGFyZ3YrKzsKKyAgICB9CisgICAgaWYgKG91dG1vZGVbM10gPT0gJyAnKQorICAgICAgICBvdXRtb2RlWzNdID0gMDsKKyAgICBpZiAoYXJnYyA9PSAwKSB7CisgICAgICAgIFNFVF9CSU5BUllfTU9ERShzdGRpbik7CisgICAgICAgIFNFVF9CSU5BUllfTU9ERShzdGRvdXQpOworICAgICAgICBpZiAodW5jb21wcikgeworICAgICAgICAgICAgZmlsZSA9IGd6ZG9wZW4oZmlsZW5vKHN0ZGluKSwgInJiIik7CisgICAgICAgICAgICBpZiAoZmlsZSA9PSBOVUxMKSBlcnJvcigiY2FuJ3QgZ3pkb3BlbiBzdGRpbiIpOworICAgICAgICAgICAgZ3pfdW5jb21wcmVzcyhmaWxlLCBzdGRvdXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZmlsZSA9IGd6ZG9wZW4oZmlsZW5vKHN0ZG91dCksIG91dG1vZGUpOworICAgICAgICAgICAgaWYgKGZpbGUgPT0gTlVMTCkgZXJyb3IoImNhbid0IGd6ZG9wZW4gc3Rkb3V0Iik7CisgICAgICAgICAgICBnel9jb21wcmVzcyhzdGRpbiwgZmlsZSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoY29weW91dCkgeworICAgICAgICAgICAgU0VUX0JJTkFSWV9NT0RFKHN0ZG91dCk7CisgICAgICAgIH0KKyAgICAgICAgZG8geworICAgICAgICAgICAgaWYgKHVuY29tcHIpIHsKKyAgICAgICAgICAgICAgICBpZiAoY29weW91dCkgeworICAgICAgICAgICAgICAgICAgICBmaWxlID0gZ3pvcGVuKCphcmd2LCAicmIiKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZpbGUgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGNhbid0IGd6b3BlbiAlc1xuIiwgcHJvZywgKmFyZ3YpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBnel91bmNvbXByZXNzKGZpbGUsIHN0ZG91dCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZmlsZV91bmNvbXByZXNzKCphcmd2KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChjb3B5b3V0KSB7CisgICAgICAgICAgICAgICAgICAgIEZJTEUgKiBpbiA9IGZvcGVuKCphcmd2LCAicmIiKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoaW4gPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcGVycm9yKCphcmd2KTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgPSBnemRvcGVuKGZpbGVubyhzdGRvdXQpLCBvdXRtb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWxlID09IE5VTEwpIGVycm9yKCJjYW4ndCBnemRvcGVuIHN0ZG91dCIpOworCisgICAgICAgICAgICAgICAgICAgICAgICBnel9jb21wcmVzcyhpbiwgZmlsZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGZpbGVfY29tcHJlc3MoKmFyZ3YsIG91dG1vZGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSAoYXJndisrLCAtLWFyZ2MpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3NyYy90cmVlYnVpbGQueG1sIGIvc3JjL3RyZWVidWlsZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzgxYjRjOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90cmVlYnVpbGQueG1sCkBAIC0wLDAgKzEsMTE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiID8+Cis8cGFja2FnZSBuYW1lPSJ6bGliIiB2ZXJzaW9uPSIxLjIuMTIiPgorICAgIDxsaWJyYXJ5IG5hbWU9InpsaWIiIGRsdmVyc2lvbj0iMS4yLjEyIiBkbG5hbWU9InoiPgorCTxwcm9wZXJ0eSBuYW1lPSJkZXNjcmlwdGlvbiI+IHppcCBjb21wcmVzc2lvbiBsaWJyYXJ5IDwvcHJvcGVydHk+CisJPHByb3BlcnR5IG5hbWU9ImluY2x1ZGUtdGFyZ2V0LWRpciIgdmFsdWU9IiQoQFBBQ0tBR0UvaW5zdGFsbC1pbmNsdWRlZGlyKSIgLz4KKworCTwhLS0gZml4bWU6IG5vdCBpbXBsZW1lbnRlZCB5ZXQgLS0+CisJPHByb3BlcnR5IG5hbWU9ImNvbXBpbGVyL2MvaW5saW5lIiB2YWx1ZT0ieWVzIiAvPgorCisJPGluY2x1ZGUtZmlsZSBuYW1lPSJ6bGliLmgiIHNjb3BlPSJwdWJsaWMiIG1vZGU9IjY0NCIgLz4KKwk8aW5jbHVkZS1maWxlIG5hbWU9Inpjb25mLmgiIHNjb3BlPSJwdWJsaWMiIG1vZGU9IjY0NCIgLz4KKworCTxzb3VyY2UgbmFtZT0iYWRsZXIzMi5jIj4KKwkgICAgPGRlcGVuZCBuYW1lPSJ6bGliLmgiIC8+CisJICAgIDxkZXBlbmQgbmFtZT0iemNvbmYuaCIgLz4KKwk8L3NvdXJjZT4KKwk8c291cmNlIG5hbWU9ImNvbXByZXNzLmMiPgorCSAgICA8ZGVwZW5kIG5hbWU9InpsaWIuaCIgLz4KKwkgICAgPGRlcGVuZCBuYW1lPSJ6Y29uZi5oIiAvPgorCTwvc291cmNlPgorCTxzb3VyY2UgbmFtZT0iY3JjMzIuYyI+CisJICAgIDxkZXBlbmQgbmFtZT0iemxpYi5oIiAvPgorCSAgICA8ZGVwZW5kIG5hbWU9Inpjb25mLmgiIC8+CisJICAgIDxkZXBlbmQgbmFtZT0iY3JjMzIuaCIgLz4KKwk8L3NvdXJjZT4KKwk8c291cmNlIG5hbWU9Imd6Y2xvc2UuYyI+CisJICAgIDxkZXBlbmQgbmFtZT0iemxpYi5oIiAvPgorCSAgICA8ZGVwZW5kIG5hbWU9Inpjb25mLmgiIC8+CisJICAgIDxkZXBlbmQgbmFtZT0iZ3pndXRzLmgiIC8+CisJPC9zb3VyY2U+CisJPHNvdXJjZSBuYW1lPSJnemxpYi5jIj4KKwkgICAgPGRlcGVuZCBuYW1lPSJ6bGliLmgiIC8+CisJICAgIDxkZXBlbmQgbmFtZT0iemNvbmYuaCIgLz4KKwkgICAgPGRlcGVuZCBuYW1lPSJnemd1dHMuaCIgLz4KKwk8L3NvdXJjZT4KKwk8c291cmNlIG5hbWU9Imd6cmVhZC5jIj4KKwkgICAgPGRlcGVuZCBuYW1lPSJ6bGliLmgiIC8+CisJICAgIDxkZXBlbmQgbmFtZT0iemNvbmYuaCIgLz4KKwkgICAgPGRlcGVuZCBuYW1lPSJnemd1dHMuaCIgLz4KKwk8L3NvdXJjZT4KKwk8c291cmNlIG5hbWU9Imd6d3JpdGUuYyI+CisJICAgIDxkZXBlbmQgbmFtZT0iemxpYi5oIiAvPgorCSAgICA8ZGVwZW5kIG5hbWU9Inpjb25mLmgiIC8+CisJICAgIDxkZXBlbmQgbmFtZT0iZ3pndXRzLmgiIC8+CisJPC9zb3VyY2U+CisJPHNvdXJjZSBuYW1lPSJ1bmNvbXByLmMiPgorCSAgICA8ZGVwZW5kIG5hbWU9InpsaWIuaCIgLz4KKwkgICAgPGRlcGVuZCBuYW1lPSJ6Y29uZi5oIiAvPgorCTwvc291cmNlPgorCTxzb3VyY2UgbmFtZT0iZGVmbGF0ZS5jIj4KKwkgICAgPGRlcGVuZCBuYW1lPSJ6bGliLmgiIC8+CisJICAgIDxkZXBlbmQgbmFtZT0iemNvbmYuaCIgLz4KKwkgICAgPGRlcGVuZCBuYW1lPSJ6dXRpbC5oIiAvPgorCSAgICA8ZGVwZW5kIG5hbWU9ImRlZmxhdGUuaCIgLz4KKwk8L3NvdXJjZT4KKwk8c291cmNlIG5hbWU9InRyZWVzLmMiPgorCSAgICA8ZGVwZW5kIG5hbWU9InpsaWIuaCIgLz4KKwkgICAgPGRlcGVuZCBuYW1lPSJ6Y29uZi5oIiAvPgorCSAgICA8ZGVwZW5kIG5hbWU9Inp1dGlsLmgiIC8+CisJICAgIDxkZXBlbmQgbmFtZT0iZGVmbGF0ZS5oIiAvPgorCSAgICA8ZGVwZW5kIG5hbWU9InRyZWVzLmgiIC8+CisJPC9zb3VyY2U+CisJPHNvdXJjZSBuYW1lPSJ6dXRpbC5jIj4KKwkgICAgPGRlcGVuZCBuYW1lPSJ6bGliLmgiIC8+CisJICAgIDxkZXBlbmQgbmFtZT0iemNvbmYuaCIgLz4KKwkgICAgPGRlcGVuZCBuYW1lPSJ6dXRpbC5oIiAvPgorCTwvc291cmNlPgorCTxzb3VyY2UgbmFtZT0iaW5mbGF0ZS5jIj4KKwkgICAgPGRlcGVuZCBuYW1lPSJ6bGliLmgiIC8+CisJICAgIDxkZXBlbmQgbmFtZT0iemNvbmYuaCIgLz4KKwkgICAgPGRlcGVuZCBuYW1lPSJ6dXRpbC5oIiAvPgorCSAgICA8ZGVwZW5kIG5hbWU9ImluZnRyZWVzLmgiIC8+CisJICAgIDxkZXBlbmQgbmFtZT0iaW5mbGF0ZS5oIiAvPgorCSAgICA8ZGVwZW5kIG5hbWU9ImluZmZhc3QuaCIgLz4KKwk8L3NvdXJjZT4KKwk8c291cmNlIG5hbWU9ImluZmJhY2suYyI+CisJICAgIDxkZXBlbmQgbmFtZT0iemxpYi5oIiAvPgorCSAgICA8ZGVwZW5kIG5hbWU9Inpjb25mLmgiIC8+CisJICAgIDxkZXBlbmQgbmFtZT0ienV0aWwuaCIgLz4KKwkgICAgPGRlcGVuZCBuYW1lPSJpbmZ0cmVlcy5oIiAvPgorCSAgICA8ZGVwZW5kIG5hbWU9ImluZmxhdGUuaCIgLz4KKwkgICAgPGRlcGVuZCBuYW1lPSJpbmZmYXN0LmgiIC8+CisJPC9zb3VyY2U+CisJPHNvdXJjZSBuYW1lPSJpbmZ0cmVlcy5jIj4KKwkgICAgPGRlcGVuZCBuYW1lPSJ6bGliLmgiIC8+CisJICAgIDxkZXBlbmQgbmFtZT0iemNvbmYuaCIgLz4KKwkgICAgPGRlcGVuZCBuYW1lPSJ6dXRpbC5oIiAvPgorCSAgICA8ZGVwZW5kIG5hbWU9ImluZnRyZWVzLmgiIC8+CisJPC9zb3VyY2U+CisJPHNvdXJjZSBuYW1lPSJpbmZmYXN0LmMiPgorCSAgICA8ZGVwZW5kIG5hbWU9InpsaWIuaCIgLz4KKwkgICAgPGRlcGVuZCBuYW1lPSJ6Y29uZi5oIiAvPgorCSAgICA8ZGVwZW5kIG5hbWU9Inp1dGlsLmgiIC8+CisJICAgIDxkZXBlbmQgbmFtZT0iaW5mdHJlZXMuaCIgLz4KKwkgICAgPGRlcGVuZCBuYW1lPSJpbmZsYXRlLmgiIC8+CisJICAgIDxkZXBlbmQgbmFtZT0iaW5mZmFzdC5oIiAvPgorCTwvc291cmNlPgorICAgIDwvbGlicmFyeT4KKzwvcGFja2FnZT4KKworPCEtLQorQ0ZMQUdTPS1PCisjQ0ZMQUdTPS1PIC1ETUFYX1dCSVRTPTE0IC1ETUFYX01FTV9MRVZFTD03CisjQ0ZMQUdTPS1nIC1EWkxJQl9ERUJVRworI0NGTEFHUz0tTzMgLVdhbGwgLVd3cml0ZS1zdHJpbmdzIC1XcG9pbnRlci1hcml0aCAtV2NvbnZlcnNpb24gXAorIyAgICAgICAgICAgLVdzdHJpY3QtcHJvdG90eXBlcyAtV21pc3NpbmctcHJvdG90eXBlcworCisjIE9CSkEgPQorIyB0byB1c2UgdGhlIGFzbSBjb2RlOiBtYWtlIE9CSkE9bWF0Y2gubworIworbWF0Y2gubzogbWF0Y2guUworCSQoQ1BQKSBtYXRjaC5TID4gX21hdGNoLnMKKwkkKENDKSAtYyBfbWF0Y2gucworCW12IF9tYXRjaC5vIG1hdGNoLm8KKwlybSAtZiBfbWF0Y2gucworLS0+CmRpZmYgLS1naXQgYS9zcmMvdHJlZXMuYyBiL3NyYy90cmVlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3M2ZkOTkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdHJlZXMuYwpAQCAtMCwwICsxLDExODIgQEAKKy8qIHRyZWVzLmMgLS0gb3V0cHV0IGRlZmxhdGVkIGRhdGEgdXNpbmcgSHVmZm1hbiBjb2RpbmcKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIxIEplYW4tbG91cCBHYWlsbHkKKyAqIGRldGVjdF9kYXRhX3R5cGUoKSBmdW5jdGlvbiBwcm92aWRlZCBmcmVlbHkgYnkgQ29zbWluIFRydXRhLCAyMDA2CisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCisgKi8KKworLyoKKyAqICBBTEdPUklUSE0KKyAqCisgKiAgICAgIFRoZSAiZGVmbGF0aW9uIiBwcm9jZXNzIHVzZXMgc2V2ZXJhbCBIdWZmbWFuIHRyZWVzLiBUaGUgbW9yZQorICogICAgICBjb21tb24gc291cmNlIHZhbHVlcyBhcmUgcmVwcmVzZW50ZWQgYnkgc2hvcnRlciBiaXQgc2VxdWVuY2VzLgorICoKKyAqICAgICAgRWFjaCBjb2RlIHRyZWUgaXMgc3RvcmVkIGluIGEgY29tcHJlc3NlZCBmb3JtIHdoaWNoIGlzIGl0c2VsZgorICogYSBIdWZmbWFuIGVuY29kaW5nIG9mIHRoZSBsZW5ndGhzIG9mIGFsbCB0aGUgY29kZSBzdHJpbmdzIChpbgorICogYXNjZW5kaW5nIG9yZGVyIGJ5IHNvdXJjZSB2YWx1ZXMpLiAgVGhlIGFjdHVhbCBjb2RlIHN0cmluZ3MgYXJlCisgKiByZWNvbnN0cnVjdGVkIGZyb20gdGhlIGxlbmd0aHMgaW4gdGhlIGluZmxhdGUgcHJvY2VzcywgYXMgZGVzY3JpYmVkCisgKiBpbiB0aGUgZGVmbGF0ZSBzcGVjaWZpY2F0aW9uLgorICoKKyAqICBSRUZFUkVOQ0VTCisgKgorICogICAgICBEZXV0c2NoLCBMLlAuLCInRGVmbGF0ZScgQ29tcHJlc3NlZCBEYXRhIEZvcm1hdCBTcGVjaWZpY2F0aW9uIi4KKyAqICAgICAgQXZhaWxhYmxlIGluIGZ0cC51dS5uZXQ6L3B1Yi9hcmNoaXZpbmcvemlwL2RvYy9kZWZsYXRlLTEuMS5kb2MKKyAqCisgKiAgICAgIFN0b3JlciwgSmFtZXMgQS4KKyAqICAgICAgICAgIERhdGEgQ29tcHJlc3Npb246ICBNZXRob2RzIGFuZCBUaGVvcnksIHBwLiA0OS01MC4KKyAqICAgICAgICAgIENvbXB1dGVyIFNjaWVuY2UgUHJlc3MsIDE5ODguICBJU0JOIDAtNzE2Ny04MTU2LTUuCisgKgorICogICAgICBTZWRnZXdpY2ssIFIuCisgKiAgICAgICAgICBBbGdvcml0aG1zLCBwMjkwLgorICogICAgICAgICAgQWRkaXNvbi1XZXNsZXksIDE5ODMuIElTQk4gMC0yMDEtMDY2NzItNi4KKyAqLworCisvKiBAKCMpICRJZCQgKi8KKworLyogI2RlZmluZSBHRU5fVFJFRVNfSCAqLworCisjaW5jbHVkZSAiZGVmbGF0ZS5oIgorCisjaWZkZWYgWkxJQl9ERUJVRworIyAgaW5jbHVkZSA8Y3R5cGUuaD4KKyNlbmRpZgorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvbnN0YW50cworICovCisKKyNkZWZpbmUgTUFYX0JMX0JJVFMgNworLyogQml0IGxlbmd0aCBjb2RlcyBtdXN0IG5vdCBleGNlZWQgTUFYX0JMX0JJVFMgYml0cyAqLworCisjZGVmaW5lIEVORF9CTE9DSyAyNTYKKy8qIGVuZCBvZiBibG9jayBsaXRlcmFsIGNvZGUgKi8KKworI2RlZmluZSBSRVBfM182ICAgICAgMTYKKy8qIHJlcGVhdCBwcmV2aW91cyBiaXQgbGVuZ3RoIDMtNiB0aW1lcyAoMiBiaXRzIG9mIHJlcGVhdCBjb3VudCkgKi8KKworI2RlZmluZSBSRVBaXzNfMTAgICAgMTcKKy8qIHJlcGVhdCBhIHplcm8gbGVuZ3RoIDMtMTAgdGltZXMgICgzIGJpdHMgb2YgcmVwZWF0IGNvdW50KSAqLworCisjZGVmaW5lIFJFUFpfMTFfMTM4ICAxOAorLyogcmVwZWF0IGEgemVybyBsZW5ndGggMTEtMTM4IHRpbWVzICAoNyBiaXRzIG9mIHJlcGVhdCBjb3VudCkgKi8KKworbG9jYWwgY29uc3QgaW50IGV4dHJhX2xiaXRzW0xFTkdUSF9DT0RFU10gLyogZXh0cmEgYml0cyBmb3IgZWFjaCBsZW5ndGggY29kZSAqLworICAgPSB7MCwwLDAsMCwwLDAsMCwwLDEsMSwxLDEsMiwyLDIsMiwzLDMsMywzLDQsNCw0LDQsNSw1LDUsNSwwfTsKKworbG9jYWwgY29uc3QgaW50IGV4dHJhX2RiaXRzW0RfQ09ERVNdIC8qIGV4dHJhIGJpdHMgZm9yIGVhY2ggZGlzdGFuY2UgY29kZSAqLworICAgPSB7MCwwLDAsMCwxLDEsMiwyLDMsMyw0LDQsNSw1LDYsNiw3LDcsOCw4LDksOSwxMCwxMCwxMSwxMSwxMiwxMiwxMywxM307CisKK2xvY2FsIGNvbnN0IGludCBleHRyYV9ibGJpdHNbQkxfQ09ERVNdLyogZXh0cmEgYml0cyBmb3IgZWFjaCBiaXQgbGVuZ3RoIGNvZGUgKi8KKyAgID0gezAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwzLDd9OworCitsb2NhbCBjb25zdCB1Y2ggYmxfb3JkZXJbQkxfQ09ERVNdCisgICA9IHsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1fTsKKy8qIFRoZSBsZW5ndGhzIG9mIHRoZSBiaXQgbGVuZ3RoIGNvZGVzIGFyZSBzZW50IGluIG9yZGVyIG9mIGRlY3JlYXNpbmcKKyAqIHByb2JhYmlsaXR5LCB0byBhdm9pZCB0cmFuc21pdHRpbmcgdGhlIGxlbmd0aHMgZm9yIHVudXNlZCBiaXQgbGVuZ3RoIGNvZGVzLgorICovCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogTG9jYWwgZGF0YS4gVGhlc2UgYXJlIGluaXRpYWxpemVkIG9ubHkgb25jZS4KKyAqLworCisjZGVmaW5lIERJU1RfQ09ERV9MRU4gIDUxMiAvKiBzZWUgZGVmaW5pdGlvbiBvZiBhcnJheSBkaXN0X2NvZGUgYmVsb3cgKi8KKworI2lmIGRlZmluZWQoR0VOX1RSRUVTX0gpIHx8ICFkZWZpbmVkKFNUREMpCisvKiBub24gQU5TSSBjb21waWxlcnMgbWF5IG5vdCBhY2NlcHQgdHJlZXMuaCAqLworCitsb2NhbCBjdF9kYXRhIHN0YXRpY19sdHJlZVtMX0NPREVTKzJdOworLyogVGhlIHN0YXRpYyBsaXRlcmFsIHRyZWUuIFNpbmNlIHRoZSBiaXQgbGVuZ3RocyBhcmUgaW1wb3NlZCwgdGhlcmUgaXMgbm8KKyAqIG5lZWQgZm9yIHRoZSBMX0NPREVTIGV4dHJhIGNvZGVzIHVzZWQgZHVyaW5nIGhlYXAgY29uc3RydWN0aW9uLiBIb3dldmVyCisgKiBUaGUgY29kZXMgMjg2IGFuZCAyODcgYXJlIG5lZWRlZCB0byBidWlsZCBhIGNhbm9uaWNhbCB0cmVlIChzZWUgX3RyX2luaXQKKyAqIGJlbG93KS4KKyAqLworCitsb2NhbCBjdF9kYXRhIHN0YXRpY19kdHJlZVtEX0NPREVTXTsKKy8qIFRoZSBzdGF0aWMgZGlzdGFuY2UgdHJlZS4gKEFjdHVhbGx5IGEgdHJpdmlhbCB0cmVlIHNpbmNlIGFsbCBjb2RlcyB1c2UKKyAqIDUgYml0cy4pCisgKi8KKwordWNoIF9kaXN0X2NvZGVbRElTVF9DT0RFX0xFTl07CisvKiBEaXN0YW5jZSBjb2Rlcy4gVGhlIGZpcnN0IDI1NiB2YWx1ZXMgY29ycmVzcG9uZCB0byB0aGUgZGlzdGFuY2VzCisgKiAzIC4uIDI1OCwgdGhlIGxhc3QgMjU2IHZhbHVlcyBjb3JyZXNwb25kIHRvIHRoZSB0b3AgOCBiaXRzIG9mCisgKiB0aGUgMTUgYml0IGRpc3RhbmNlcy4KKyAqLworCit1Y2ggX2xlbmd0aF9jb2RlW01BWF9NQVRDSC1NSU5fTUFUQ0grMV07CisvKiBsZW5ndGggY29kZSBmb3IgZWFjaCBub3JtYWxpemVkIG1hdGNoIGxlbmd0aCAoMCA9PSBNSU5fTUFUQ0gpICovCisKK2xvY2FsIGludCBiYXNlX2xlbmd0aFtMRU5HVEhfQ09ERVNdOworLyogRmlyc3Qgbm9ybWFsaXplZCBsZW5ndGggZm9yIGVhY2ggY29kZSAoMCA9IE1JTl9NQVRDSCkgKi8KKworbG9jYWwgaW50IGJhc2VfZGlzdFtEX0NPREVTXTsKKy8qIEZpcnN0IG5vcm1hbGl6ZWQgZGlzdGFuY2UgZm9yIGVhY2ggY29kZSAoMCA9IGRpc3RhbmNlIG9mIDEpICovCisKKyNlbHNlCisjICBpbmNsdWRlICJ0cmVlcy5oIgorI2VuZGlmIC8qIEdFTl9UUkVFU19IICovCisKK3N0cnVjdCBzdGF0aWNfdHJlZV9kZXNjX3MgeworICAgIGNvbnN0IGN0X2RhdGEgKnN0YXRpY190cmVlOyAgLyogc3RhdGljIHRyZWUgb3IgTlVMTCAqLworICAgIGNvbnN0IGludGYgKmV4dHJhX2JpdHM7ICAgICAgLyogZXh0cmEgYml0cyBmb3IgZWFjaCBjb2RlIG9yIE5VTEwgKi8KKyAgICBpbnQgICAgIGV4dHJhX2Jhc2U7ICAgICAgICAgIC8qIGJhc2UgaW5kZXggZm9yIGV4dHJhX2JpdHMgKi8KKyAgICBpbnQgICAgIGVsZW1zOyAgICAgICAgICAgICAgIC8qIG1heCBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIHRyZWUgKi8KKyAgICBpbnQgICAgIG1heF9sZW5ndGg7ICAgICAgICAgIC8qIG1heCBiaXQgbGVuZ3RoIGZvciB0aGUgY29kZXMgKi8KK307CisKK2xvY2FsIGNvbnN0IHN0YXRpY190cmVlX2Rlc2MgIHN0YXRpY19sX2Rlc2MgPQore3N0YXRpY19sdHJlZSwgZXh0cmFfbGJpdHMsIExJVEVSQUxTKzEsIExfQ09ERVMsIE1BWF9CSVRTfTsKKworbG9jYWwgY29uc3Qgc3RhdGljX3RyZWVfZGVzYyAgc3RhdGljX2RfZGVzYyA9Cit7c3RhdGljX2R0cmVlLCBleHRyYV9kYml0cywgMCwgICAgICAgICAgRF9DT0RFUywgTUFYX0JJVFN9OworCitsb2NhbCBjb25zdCBzdGF0aWNfdHJlZV9kZXNjICBzdGF0aWNfYmxfZGVzYyA9Cit7KGNvbnN0IGN0X2RhdGEgKikwLCBleHRyYV9ibGJpdHMsIDAsICAgQkxfQ09ERVMsIE1BWF9CTF9CSVRTfTsKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBMb2NhbCAoc3RhdGljKSByb3V0aW5lcyBpbiB0aGlzIGZpbGUuCisgKi8KKworbG9jYWwgdm9pZCB0cl9zdGF0aWNfaW5pdCBPRigodm9pZCkpOworbG9jYWwgdm9pZCBpbml0X2Jsb2NrICAgICBPRigoZGVmbGF0ZV9zdGF0ZSAqcykpOworbG9jYWwgdm9pZCBwcWRvd25oZWFwICAgICBPRigoZGVmbGF0ZV9zdGF0ZSAqcywgY3RfZGF0YSAqdHJlZSwgaW50IGspKTsKK2xvY2FsIHZvaWQgZ2VuX2JpdGxlbiAgICAgT0YoKGRlZmxhdGVfc3RhdGUgKnMsIHRyZWVfZGVzYyAqZGVzYykpOworbG9jYWwgdm9pZCBnZW5fY29kZXMgICAgICBPRigoY3RfZGF0YSAqdHJlZSwgaW50IG1heF9jb2RlLCB1c2hmICpibF9jb3VudCkpOworbG9jYWwgdm9pZCBidWlsZF90cmVlICAgICBPRigoZGVmbGF0ZV9zdGF0ZSAqcywgdHJlZV9kZXNjICpkZXNjKSk7Citsb2NhbCB2b2lkIHNjYW5fdHJlZSAgICAgIE9GKChkZWZsYXRlX3N0YXRlICpzLCBjdF9kYXRhICp0cmVlLCBpbnQgbWF4X2NvZGUpKTsKK2xvY2FsIHZvaWQgc2VuZF90cmVlICAgICAgT0YoKGRlZmxhdGVfc3RhdGUgKnMsIGN0X2RhdGEgKnRyZWUsIGludCBtYXhfY29kZSkpOworbG9jYWwgaW50ICBidWlsZF9ibF90cmVlICBPRigoZGVmbGF0ZV9zdGF0ZSAqcykpOworbG9jYWwgdm9pZCBzZW5kX2FsbF90cmVlcyBPRigoZGVmbGF0ZV9zdGF0ZSAqcywgaW50IGxjb2RlcywgaW50IGRjb2RlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBibGNvZGVzKSk7Citsb2NhbCB2b2lkIGNvbXByZXNzX2Jsb2NrIE9GKChkZWZsYXRlX3N0YXRlICpzLCBjb25zdCBjdF9kYXRhICpsdHJlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN0X2RhdGEgKmR0cmVlKSk7Citsb2NhbCBpbnQgIGRldGVjdF9kYXRhX3R5cGUgT0YoKGRlZmxhdGVfc3RhdGUgKnMpKTsKK2xvY2FsIHVuc2lnbmVkIGJpX3JldmVyc2UgT0YoKHVuc2lnbmVkIGNvZGUsIGludCBsZW4pKTsKK2xvY2FsIHZvaWQgYmlfd2luZHVwICAgICAgT0YoKGRlZmxhdGVfc3RhdGUgKnMpKTsKK2xvY2FsIHZvaWQgYmlfZmx1c2ggICAgICAgT0YoKGRlZmxhdGVfc3RhdGUgKnMpKTsKKworI2lmZGVmIEdFTl9UUkVFU19ICitsb2NhbCB2b2lkIGdlbl90cmVlc19oZWFkZXIgT0YoKHZvaWQpKTsKKyNlbmRpZgorCisjaWZuZGVmIFpMSUJfREVCVUcKKyMgIGRlZmluZSBzZW5kX2NvZGUocywgYywgdHJlZSkgc2VuZF9iaXRzKHMsIHRyZWVbY10uQ29kZSwgdHJlZVtjXS5MZW4pCisgICAvKiBTZW5kIGEgY29kZSBvZiB0aGUgZ2l2ZW4gdHJlZS4gYyBhbmQgdHJlZSBtdXN0IG5vdCBoYXZlIHNpZGUgZWZmZWN0cyAqLworCisjZWxzZSAvKiAhWkxJQl9ERUJVRyAqLworIyAgZGVmaW5lIHNlbmRfY29kZShzLCBjLCB0cmVlKSBcCisgICAgIHsgaWYgKHpfdmVyYm9zZT4yKSBmcHJpbnRmKHN0ZGVyciwiXG5jZCAlM2QgIiwoYykpOyBcCisgICAgICAgc2VuZF9iaXRzKHMsIHRyZWVbY10uQ29kZSwgdHJlZVtjXS5MZW4pOyB9CisjZW5kaWYKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBPdXRwdXQgYSBzaG9ydCBMU0IgZmlyc3Qgb24gdGhlIHN0cmVhbS4KKyAqIElOIGFzc2VydGlvbjogdGhlcmUgaXMgZW5vdWdoIHJvb20gaW4gcGVuZGluZ0J1Zi4KKyAqLworI2RlZmluZSBwdXRfc2hvcnQocywgdykgeyBcCisgICAgcHV0X2J5dGUocywgKHVjaCkoKHcpICYgMHhmZikpOyBcCisgICAgcHV0X2J5dGUocywgKHVjaCkoKHVzaCkodykgPj4gOCkpOyBcCit9CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogU2VuZCBhIHZhbHVlIG9uIGEgZ2l2ZW4gbnVtYmVyIG9mIGJpdHMuCisgKiBJTiBhc3NlcnRpb246IGxlbmd0aCA8PSAxNiBhbmQgdmFsdWUgZml0cyBpbiBsZW5ndGggYml0cy4KKyAqLworI2lmZGVmIFpMSUJfREVCVUcKK2xvY2FsIHZvaWQgc2VuZF9iaXRzICAgICAgT0YoKGRlZmxhdGVfc3RhdGUgKnMsIGludCB2YWx1ZSwgaW50IGxlbmd0aCkpOworCitsb2NhbCB2b2lkIHNlbmRfYml0cyhzLCB2YWx1ZSwgbGVuZ3RoKQorICAgIGRlZmxhdGVfc3RhdGUgKnM7CisgICAgaW50IHZhbHVlOyAgLyogdmFsdWUgdG8gc2VuZCAqLworICAgIGludCBsZW5ndGg7IC8qIG51bWJlciBvZiBiaXRzICovCit7CisgICAgVHJhY2V2digoc3RkZXJyLCIgbCAlMmQgdiAlNHggIiwgbGVuZ3RoLCB2YWx1ZSkpOworICAgIEFzc2VydChsZW5ndGggPiAwICYmIGxlbmd0aCA8PSAxNSwgImludmFsaWQgbGVuZ3RoIik7CisgICAgcy0+Yml0c19zZW50ICs9ICh1bGcpbGVuZ3RoOworCisgICAgLyogSWYgbm90IGVub3VnaCByb29tIGluIGJpX2J1ZiwgdXNlICh2YWxpZCkgYml0cyBmcm9tIGJpX2J1ZiBhbmQKKyAgICAgKiAoMTYgLSBiaV92YWxpZCkgYml0cyBmcm9tIHZhbHVlLCBsZWF2aW5nICh3aWR0aCAtICgxNi1iaV92YWxpZCkpCisgICAgICogdW51c2VkIGJpdHMgaW4gdmFsdWUuCisgICAgICovCisgICAgaWYgKHMtPmJpX3ZhbGlkID4gKGludClCdWZfc2l6ZSAtIGxlbmd0aCkgeworICAgICAgICBzLT5iaV9idWYgfD0gKHVzaCl2YWx1ZSA8PCBzLT5iaV92YWxpZDsKKyAgICAgICAgcHV0X3Nob3J0KHMsIHMtPmJpX2J1Zik7CisgICAgICAgIHMtPmJpX2J1ZiA9ICh1c2gpdmFsdWUgPj4gKEJ1Zl9zaXplIC0gcy0+YmlfdmFsaWQpOworICAgICAgICBzLT5iaV92YWxpZCArPSBsZW5ndGggLSBCdWZfc2l6ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBzLT5iaV9idWYgfD0gKHVzaCl2YWx1ZSA8PCBzLT5iaV92YWxpZDsKKyAgICAgICAgcy0+YmlfdmFsaWQgKz0gbGVuZ3RoOworICAgIH0KK30KKyNlbHNlIC8qICFaTElCX0RFQlVHICovCisKKyNkZWZpbmUgc2VuZF9iaXRzKHMsIHZhbHVlLCBsZW5ndGgpIFwKK3sgaW50IGxlbiA9IGxlbmd0aDtcCisgIGlmIChzLT5iaV92YWxpZCA+IChpbnQpQnVmX3NpemUgLSBsZW4pIHtcCisgICAgaW50IHZhbCA9IChpbnQpdmFsdWU7XAorICAgIHMtPmJpX2J1ZiB8PSAodXNoKXZhbCA8PCBzLT5iaV92YWxpZDtcCisgICAgcHV0X3Nob3J0KHMsIHMtPmJpX2J1Zik7XAorICAgIHMtPmJpX2J1ZiA9ICh1c2gpdmFsID4+IChCdWZfc2l6ZSAtIHMtPmJpX3ZhbGlkKTtcCisgICAgcy0+YmlfdmFsaWQgKz0gbGVuIC0gQnVmX3NpemU7XAorICB9IGVsc2Uge1wKKyAgICBzLT5iaV9idWYgfD0gKHVzaCkodmFsdWUpIDw8IHMtPmJpX3ZhbGlkO1wKKyAgICBzLT5iaV92YWxpZCArPSBsZW47XAorICB9XAorfQorI2VuZGlmIC8qIFpMSUJfREVCVUcgKi8KKworCisvKiB0aGUgYXJndW1lbnRzIG11c3Qgbm90IGhhdmUgc2lkZSBlZmZlY3RzICovCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogSW5pdGlhbGl6ZSB0aGUgdmFyaW91cyAnY29uc3RhbnQnIHRhYmxlcy4KKyAqLworbG9jYWwgdm9pZCB0cl9zdGF0aWNfaW5pdCgpCit7CisjaWYgZGVmaW5lZChHRU5fVFJFRVNfSCkgfHwgIWRlZmluZWQoU1REQykKKyAgICBzdGF0aWMgaW50IHN0YXRpY19pbml0X2RvbmUgPSAwOworICAgIGludCBuOyAgICAgICAgLyogaXRlcmF0ZXMgb3ZlciB0cmVlIGVsZW1lbnRzICovCisgICAgaW50IGJpdHM7ICAgICAvKiBiaXQgY291bnRlciAqLworICAgIGludCBsZW5ndGg7ICAgLyogbGVuZ3RoIHZhbHVlICovCisgICAgaW50IGNvZGU7ICAgICAvKiBjb2RlIHZhbHVlICovCisgICAgaW50IGRpc3Q7ICAgICAvKiBkaXN0YW5jZSBpbmRleCAqLworICAgIHVzaCBibF9jb3VudFtNQVhfQklUUysxXTsKKyAgICAvKiBudW1iZXIgb2YgY29kZXMgYXQgZWFjaCBiaXQgbGVuZ3RoIGZvciBhbiBvcHRpbWFsIHRyZWUgKi8KKworICAgIGlmIChzdGF0aWNfaW5pdF9kb25lKSByZXR1cm47CisKKyAgICAvKiBGb3Igc29tZSBlbWJlZGRlZCB0YXJnZXRzLCBnbG9iYWwgdmFyaWFibGVzIGFyZSBub3QgaW5pdGlhbGl6ZWQ6ICovCisjaWZkZWYgTk9fSU5JVF9HTE9CQUxfUE9JTlRFUlMKKyAgICBzdGF0aWNfbF9kZXNjLnN0YXRpY190cmVlID0gc3RhdGljX2x0cmVlOworICAgIHN0YXRpY19sX2Rlc2MuZXh0cmFfYml0cyA9IGV4dHJhX2xiaXRzOworICAgIHN0YXRpY19kX2Rlc2Muc3RhdGljX3RyZWUgPSBzdGF0aWNfZHRyZWU7CisgICAgc3RhdGljX2RfZGVzYy5leHRyYV9iaXRzID0gZXh0cmFfZGJpdHM7CisgICAgc3RhdGljX2JsX2Rlc2MuZXh0cmFfYml0cyA9IGV4dHJhX2JsYml0czsKKyNlbmRpZgorCisgICAgLyogSW5pdGlhbGl6ZSB0aGUgbWFwcGluZyBsZW5ndGggKDAuLjI1NSkgLT4gbGVuZ3RoIGNvZGUgKDAuLjI4KSAqLworICAgIGxlbmd0aCA9IDA7CisgICAgZm9yIChjb2RlID0gMDsgY29kZSA8IExFTkdUSF9DT0RFUy0xOyBjb2RlKyspIHsKKyAgICAgICAgYmFzZV9sZW5ndGhbY29kZV0gPSBsZW5ndGg7CisgICAgICAgIGZvciAobiA9IDA7IG4gPCAoMTw8ZXh0cmFfbGJpdHNbY29kZV0pOyBuKyspIHsKKyAgICAgICAgICAgIF9sZW5ndGhfY29kZVtsZW5ndGgrK10gPSAodWNoKWNvZGU7CisgICAgICAgIH0KKyAgICB9CisgICAgQXNzZXJ0IChsZW5ndGggPT0gMjU2LCAidHJfc3RhdGljX2luaXQ6IGxlbmd0aCAhPSAyNTYiKTsKKyAgICAvKiBOb3RlIHRoYXQgdGhlIGxlbmd0aCAyNTUgKG1hdGNoIGxlbmd0aCAyNTgpIGNhbiBiZSByZXByZXNlbnRlZAorICAgICAqIGluIHR3byBkaWZmZXJlbnQgd2F5czogY29kZSAyODQgKyA1IGJpdHMgb3IgY29kZSAyODUsIHNvIHdlCisgICAgICogb3ZlcndyaXRlIGxlbmd0aF9jb2RlWzI1NV0gdG8gdXNlIHRoZSBiZXN0IGVuY29kaW5nOgorICAgICAqLworICAgIF9sZW5ndGhfY29kZVtsZW5ndGgtMV0gPSAodWNoKWNvZGU7CisKKyAgICAvKiBJbml0aWFsaXplIHRoZSBtYXBwaW5nIGRpc3QgKDAuLjMySykgLT4gZGlzdCBjb2RlICgwLi4yOSkgKi8KKyAgICBkaXN0ID0gMDsKKyAgICBmb3IgKGNvZGUgPSAwIDsgY29kZSA8IDE2OyBjb2RlKyspIHsKKyAgICAgICAgYmFzZV9kaXN0W2NvZGVdID0gZGlzdDsKKyAgICAgICAgZm9yIChuID0gMDsgbiA8ICgxPDxleHRyYV9kYml0c1tjb2RlXSk7IG4rKykgeworICAgICAgICAgICAgX2Rpc3RfY29kZVtkaXN0KytdID0gKHVjaCljb2RlOworICAgICAgICB9CisgICAgfQorICAgIEFzc2VydCAoZGlzdCA9PSAyNTYsICJ0cl9zdGF0aWNfaW5pdDogZGlzdCAhPSAyNTYiKTsKKyAgICBkaXN0ID4+PSA3OyAvKiBmcm9tIG5vdyBvbiwgYWxsIGRpc3RhbmNlcyBhcmUgZGl2aWRlZCBieSAxMjggKi8KKyAgICBmb3IgKCA7IGNvZGUgPCBEX0NPREVTOyBjb2RlKyspIHsKKyAgICAgICAgYmFzZV9kaXN0W2NvZGVdID0gZGlzdCA8PCA3OworICAgICAgICBmb3IgKG4gPSAwOyBuIDwgKDE8PChleHRyYV9kYml0c1tjb2RlXS03KSk7IG4rKykgeworICAgICAgICAgICAgX2Rpc3RfY29kZVsyNTYgKyBkaXN0KytdID0gKHVjaCljb2RlOworICAgICAgICB9CisgICAgfQorICAgIEFzc2VydCAoZGlzdCA9PSAyNTYsICJ0cl9zdGF0aWNfaW5pdDogMjU2K2Rpc3QgIT0gNTEyIik7CisKKyAgICAvKiBDb25zdHJ1Y3QgdGhlIGNvZGVzIG9mIHRoZSBzdGF0aWMgbGl0ZXJhbCB0cmVlICovCisgICAgZm9yIChiaXRzID0gMDsgYml0cyA8PSBNQVhfQklUUzsgYml0cysrKSBibF9jb3VudFtiaXRzXSA9IDA7CisgICAgbiA9IDA7CisgICAgd2hpbGUgKG4gPD0gMTQzKSBzdGF0aWNfbHRyZWVbbisrXS5MZW4gPSA4LCBibF9jb3VudFs4XSsrOworICAgIHdoaWxlIChuIDw9IDI1NSkgc3RhdGljX2x0cmVlW24rK10uTGVuID0gOSwgYmxfY291bnRbOV0rKzsKKyAgICB3aGlsZSAobiA8PSAyNzkpIHN0YXRpY19sdHJlZVtuKytdLkxlbiA9IDcsIGJsX2NvdW50WzddKys7CisgICAgd2hpbGUgKG4gPD0gMjg3KSBzdGF0aWNfbHRyZWVbbisrXS5MZW4gPSA4LCBibF9jb3VudFs4XSsrOworICAgIC8qIENvZGVzIDI4NiBhbmQgMjg3IGRvIG5vdCBleGlzdCwgYnV0IHdlIG11c3QgaW5jbHVkZSB0aGVtIGluIHRoZQorICAgICAqIHRyZWUgY29uc3RydWN0aW9uIHRvIGdldCBhIGNhbm9uaWNhbCBIdWZmbWFuIHRyZWUgKGxvbmdlc3QgY29kZQorICAgICAqIGFsbCBvbmVzKQorICAgICAqLworICAgIGdlbl9jb2RlcygoY3RfZGF0YSAqKXN0YXRpY19sdHJlZSwgTF9DT0RFUysxLCBibF9jb3VudCk7CisKKyAgICAvKiBUaGUgc3RhdGljIGRpc3RhbmNlIHRyZWUgaXMgdHJpdmlhbDogKi8KKyAgICBmb3IgKG4gPSAwOyBuIDwgRF9DT0RFUzsgbisrKSB7CisgICAgICAgIHN0YXRpY19kdHJlZVtuXS5MZW4gPSA1OworICAgICAgICBzdGF0aWNfZHRyZWVbbl0uQ29kZSA9IGJpX3JldmVyc2UoKHVuc2lnbmVkKW4sIDUpOworICAgIH0KKyAgICBzdGF0aWNfaW5pdF9kb25lID0gMTsKKworIyAgaWZkZWYgR0VOX1RSRUVTX0gKKyAgICBnZW5fdHJlZXNfaGVhZGVyKCk7CisjICBlbmRpZgorI2VuZGlmIC8qIGRlZmluZWQoR0VOX1RSRUVTX0gpIHx8ICFkZWZpbmVkKFNUREMpICovCit9CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogR2VuZXJlcmF0ZSB0aGUgZmlsZSB0cmVlcy5oIGRlc2NyaWJpbmcgdGhlIHN0YXRpYyB0cmVlcy4KKyAqLworI2lmZGVmIEdFTl9UUkVFU19ICisjICBpZm5kZWYgWkxJQl9ERUJVRworIyAgICBpbmNsdWRlIDxzdGRpby5oPgorIyAgZW5kaWYKKworIyAgZGVmaW5lIFNFUEFSQVRPUihpLCBsYXN0LCB3aWR0aCkgXAorICAgICAgKChpKSA9PSAobGFzdCk/ICJcbn07XG5cbiIgOiAgICBcCisgICAgICAgKChpKSAlICh3aWR0aCkgPT0gKHdpZHRoKS0xID8gIixcbiIgOiAiLCAiKSkKKwordm9pZCBnZW5fdHJlZXNfaGVhZGVyKCkKK3sKKyAgICBGSUxFICpoZWFkZXIgPSBmb3BlbigidHJlZXMuaCIsICJ3Iik7CisgICAgaW50IGk7CisKKyAgICBBc3NlcnQgKGhlYWRlciAhPSBOVUxMLCAiQ2FuJ3Qgb3BlbiB0cmVlcy5oIik7CisgICAgZnByaW50ZihoZWFkZXIsCisgICAgICAgICAgICAiLyogaGVhZGVyIGNyZWF0ZWQgYXV0b21hdGljYWxseSB3aXRoIC1ER0VOX1RSRUVTX0ggKi9cblxuIik7CisKKyAgICBmcHJpbnRmKGhlYWRlciwgImxvY2FsIGNvbnN0IGN0X2RhdGEgc3RhdGljX2x0cmVlW0xfQ09ERVMrMl0gPSB7XG4iKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgTF9DT0RFUysyOyBpKyspIHsKKyAgICAgICAgZnByaW50ZihoZWFkZXIsICJ7eyUzdX0seyUzdX19JXMiLCBzdGF0aWNfbHRyZWVbaV0uQ29kZSwKKyAgICAgICAgICAgICAgICBzdGF0aWNfbHRyZWVbaV0uTGVuLCBTRVBBUkFUT1IoaSwgTF9DT0RFUysxLCA1KSk7CisgICAgfQorCisgICAgZnByaW50ZihoZWFkZXIsICJsb2NhbCBjb25zdCBjdF9kYXRhIHN0YXRpY19kdHJlZVtEX0NPREVTXSA9IHtcbiIpOworICAgIGZvciAoaSA9IDA7IGkgPCBEX0NPREVTOyBpKyspIHsKKyAgICAgICAgZnByaW50ZihoZWFkZXIsICJ7eyUydX0seyUydX19JXMiLCBzdGF0aWNfZHRyZWVbaV0uQ29kZSwKKyAgICAgICAgICAgICAgICBzdGF0aWNfZHRyZWVbaV0uTGVuLCBTRVBBUkFUT1IoaSwgRF9DT0RFUy0xLCA1KSk7CisgICAgfQorCisgICAgZnByaW50ZihoZWFkZXIsICJjb25zdCB1Y2ggWkxJQl9JTlRFUk5BTCBfZGlzdF9jb2RlW0RJU1RfQ09ERV9MRU5dID0ge1xuIik7CisgICAgZm9yIChpID0gMDsgaSA8IERJU1RfQ09ERV9MRU47IGkrKykgeworICAgICAgICBmcHJpbnRmKGhlYWRlciwgIiUydSVzIiwgX2Rpc3RfY29kZVtpXSwKKyAgICAgICAgICAgICAgICBTRVBBUkFUT1IoaSwgRElTVF9DT0RFX0xFTi0xLCAyMCkpOworICAgIH0KKworICAgIGZwcmludGYoaGVhZGVyLAorICAgICAgICAiY29uc3QgdWNoIFpMSUJfSU5URVJOQUwgX2xlbmd0aF9jb2RlW01BWF9NQVRDSC1NSU5fTUFUQ0grMV09IHtcbiIpOworICAgIGZvciAoaSA9IDA7IGkgPCBNQVhfTUFUQ0gtTUlOX01BVENIKzE7IGkrKykgeworICAgICAgICBmcHJpbnRmKGhlYWRlciwgIiUydSVzIiwgX2xlbmd0aF9jb2RlW2ldLAorICAgICAgICAgICAgICAgIFNFUEFSQVRPUihpLCBNQVhfTUFUQ0gtTUlOX01BVENILCAyMCkpOworICAgIH0KKworICAgIGZwcmludGYoaGVhZGVyLCAibG9jYWwgY29uc3QgaW50IGJhc2VfbGVuZ3RoW0xFTkdUSF9DT0RFU10gPSB7XG4iKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgTEVOR1RIX0NPREVTOyBpKyspIHsKKyAgICAgICAgZnByaW50ZihoZWFkZXIsICIlMXUlcyIsIGJhc2VfbGVuZ3RoW2ldLAorICAgICAgICAgICAgICAgIFNFUEFSQVRPUihpLCBMRU5HVEhfQ09ERVMtMSwgMjApKTsKKyAgICB9CisKKyAgICBmcHJpbnRmKGhlYWRlciwgImxvY2FsIGNvbnN0IGludCBiYXNlX2Rpc3RbRF9DT0RFU10gPSB7XG4iKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgRF9DT0RFUzsgaSsrKSB7CisgICAgICAgIGZwcmludGYoaGVhZGVyLCAiJTV1JXMiLCBiYXNlX2Rpc3RbaV0sCisgICAgICAgICAgICAgICAgU0VQQVJBVE9SKGksIERfQ09ERVMtMSwgMTApKTsKKyAgICB9CisKKyAgICBmY2xvc2UoaGVhZGVyKTsKK30KKyNlbmRpZiAvKiBHRU5fVFJFRVNfSCAqLworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIEluaXRpYWxpemUgdGhlIHRyZWUgZGF0YSBzdHJ1Y3R1cmVzIGZvciBhIG5ldyB6bGliIHN0cmVhbS4KKyAqLwordm9pZCBaTElCX0lOVEVSTkFMIF90cl9pbml0KHMpCisgICAgZGVmbGF0ZV9zdGF0ZSAqczsKK3sKKyAgICB0cl9zdGF0aWNfaW5pdCgpOworCisgICAgcy0+bF9kZXNjLmR5bl90cmVlID0gcy0+ZHluX2x0cmVlOworICAgIHMtPmxfZGVzYy5zdGF0X2Rlc2MgPSAmc3RhdGljX2xfZGVzYzsKKworICAgIHMtPmRfZGVzYy5keW5fdHJlZSA9IHMtPmR5bl9kdHJlZTsKKyAgICBzLT5kX2Rlc2Muc3RhdF9kZXNjID0gJnN0YXRpY19kX2Rlc2M7CisKKyAgICBzLT5ibF9kZXNjLmR5bl90cmVlID0gcy0+YmxfdHJlZTsKKyAgICBzLT5ibF9kZXNjLnN0YXRfZGVzYyA9ICZzdGF0aWNfYmxfZGVzYzsKKworICAgIHMtPmJpX2J1ZiA9IDA7CisgICAgcy0+YmlfdmFsaWQgPSAwOworI2lmZGVmIFpMSUJfREVCVUcKKyAgICBzLT5jb21wcmVzc2VkX2xlbiA9IDBMOworICAgIHMtPmJpdHNfc2VudCA9IDBMOworI2VuZGlmCisKKyAgICAvKiBJbml0aWFsaXplIHRoZSBmaXJzdCBibG9jayBvZiB0aGUgZmlyc3QgZmlsZTogKi8KKyAgICBpbml0X2Jsb2NrKHMpOworfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIEluaXRpYWxpemUgYSBuZXcgYmxvY2suCisgKi8KK2xvY2FsIHZvaWQgaW5pdF9ibG9jayhzKQorICAgIGRlZmxhdGVfc3RhdGUgKnM7Cit7CisgICAgaW50IG47IC8qIGl0ZXJhdGVzIG92ZXIgdHJlZSBlbGVtZW50cyAqLworCisgICAgLyogSW5pdGlhbGl6ZSB0aGUgdHJlZXMuICovCisgICAgZm9yIChuID0gMDsgbiA8IExfQ09ERVM7ICBuKyspIHMtPmR5bl9sdHJlZVtuXS5GcmVxID0gMDsKKyAgICBmb3IgKG4gPSAwOyBuIDwgRF9DT0RFUzsgIG4rKykgcy0+ZHluX2R0cmVlW25dLkZyZXEgPSAwOworICAgIGZvciAobiA9IDA7IG4gPCBCTF9DT0RFUzsgbisrKSBzLT5ibF90cmVlW25dLkZyZXEgPSAwOworCisgICAgcy0+ZHluX2x0cmVlW0VORF9CTE9DS10uRnJlcSA9IDE7CisgICAgcy0+b3B0X2xlbiA9IHMtPnN0YXRpY19sZW4gPSAwTDsKKyAgICBzLT5zeW1fbmV4dCA9IHMtPm1hdGNoZXMgPSAwOworfQorCisjZGVmaW5lIFNNQUxMRVNUIDEKKy8qIEluZGV4IHdpdGhpbiB0aGUgaGVhcCBhcnJheSBvZiBsZWFzdCBmcmVxdWVudCBub2RlIGluIHRoZSBIdWZmbWFuIHRyZWUgKi8KKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIFJlbW92ZSB0aGUgc21hbGxlc3QgZWxlbWVudCBmcm9tIHRoZSBoZWFwIGFuZCByZWNyZWF0ZSB0aGUgaGVhcCB3aXRoCisgKiBvbmUgbGVzcyBlbGVtZW50LiBVcGRhdGVzIGhlYXAgYW5kIGhlYXBfbGVuLgorICovCisjZGVmaW5lIHBxcmVtb3ZlKHMsIHRyZWUsIHRvcCkgXAore1wKKyAgICB0b3AgPSBzLT5oZWFwW1NNQUxMRVNUXTsgXAorICAgIHMtPmhlYXBbU01BTExFU1RdID0gcy0+aGVhcFtzLT5oZWFwX2xlbi0tXTsgXAorICAgIHBxZG93bmhlYXAocywgdHJlZSwgU01BTExFU1QpOyBcCit9CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29tcGFyZXMgdG8gc3VidHJlZXMsIHVzaW5nIHRoZSB0cmVlIGRlcHRoIGFzIHRpZSBicmVha2VyIHdoZW4KKyAqIHRoZSBzdWJ0cmVlcyBoYXZlIGVxdWFsIGZyZXF1ZW5jeS4gVGhpcyBtaW5pbWl6ZXMgdGhlIHdvcnN0IGNhc2UgbGVuZ3RoLgorICovCisjZGVmaW5lIHNtYWxsZXIodHJlZSwgbiwgbSwgZGVwdGgpIFwKKyAgICh0cmVlW25dLkZyZXEgPCB0cmVlW21dLkZyZXEgfHwgXAorICAgKHRyZWVbbl0uRnJlcSA9PSB0cmVlW21dLkZyZXEgJiYgZGVwdGhbbl0gPD0gZGVwdGhbbV0pKQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIFJlc3RvcmUgdGhlIGhlYXAgcHJvcGVydHkgYnkgbW92aW5nIGRvd24gdGhlIHRyZWUgc3RhcnRpbmcgYXQgbm9kZSBrLAorICogZXhjaGFuZ2luZyBhIG5vZGUgd2l0aCB0aGUgc21hbGxlc3Qgb2YgaXRzIHR3byBzb25zIGlmIG5lY2Vzc2FyeSwgc3RvcHBpbmcKKyAqIHdoZW4gdGhlIGhlYXAgcHJvcGVydHkgaXMgcmUtZXN0YWJsaXNoZWQgKGVhY2ggZmF0aGVyIHNtYWxsZXIgdGhhbiBpdHMKKyAqIHR3byBzb25zKS4KKyAqLworbG9jYWwgdm9pZCBwcWRvd25oZWFwKHMsIHRyZWUsIGspCisgICAgZGVmbGF0ZV9zdGF0ZSAqczsKKyAgICBjdF9kYXRhICp0cmVlOyAgLyogdGhlIHRyZWUgdG8gcmVzdG9yZSAqLworICAgIGludCBrOyAgICAgICAgICAgICAgIC8qIG5vZGUgdG8gbW92ZSBkb3duICovCit7CisgICAgaW50IHYgPSBzLT5oZWFwW2tdOworICAgIGludCBqID0gayA8PCAxOyAgLyogbGVmdCBzb24gb2YgayAqLworICAgIHdoaWxlIChqIDw9IHMtPmhlYXBfbGVuKSB7CisgICAgICAgIC8qIFNldCBqIHRvIHRoZSBzbWFsbGVzdCBvZiB0aGUgdHdvIHNvbnM6ICovCisgICAgICAgIGlmIChqIDwgcy0+aGVhcF9sZW4gJiYKKyAgICAgICAgICAgIHNtYWxsZXIodHJlZSwgcy0+aGVhcFtqKzFdLCBzLT5oZWFwW2pdLCBzLT5kZXB0aCkpIHsKKyAgICAgICAgICAgIGorKzsKKyAgICAgICAgfQorICAgICAgICAvKiBFeGl0IGlmIHYgaXMgc21hbGxlciB0aGFuIGJvdGggc29ucyAqLworICAgICAgICBpZiAoc21hbGxlcih0cmVlLCB2LCBzLT5oZWFwW2pdLCBzLT5kZXB0aCkpIGJyZWFrOworCisgICAgICAgIC8qIEV4Y2hhbmdlIHYgd2l0aCB0aGUgc21hbGxlc3Qgc29uICovCisgICAgICAgIHMtPmhlYXBba10gPSBzLT5oZWFwW2pdOyAgayA9IGo7CisKKyAgICAgICAgLyogQW5kIGNvbnRpbnVlIGRvd24gdGhlIHRyZWUsIHNldHRpbmcgaiB0byB0aGUgbGVmdCBzb24gb2YgayAqLworICAgICAgICBqIDw8PSAxOworICAgIH0KKyAgICBzLT5oZWFwW2tdID0gdjsKK30KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb21wdXRlIHRoZSBvcHRpbWFsIGJpdCBsZW5ndGhzIGZvciBhIHRyZWUgYW5kIHVwZGF0ZSB0aGUgdG90YWwgYml0IGxlbmd0aAorICogZm9yIHRoZSBjdXJyZW50IGJsb2NrLgorICogSU4gYXNzZXJ0aW9uOiB0aGUgZmllbGRzIGZyZXEgYW5kIGRhZCBhcmUgc2V0LCBoZWFwW2hlYXBfbWF4XSBhbmQKKyAqICAgIGFib3ZlIGFyZSB0aGUgdHJlZSBub2RlcyBzb3J0ZWQgYnkgaW5jcmVhc2luZyBmcmVxdWVuY3kuCisgKiBPVVQgYXNzZXJ0aW9uczogdGhlIGZpZWxkIGxlbiBpcyBzZXQgdG8gdGhlIG9wdGltYWwgYml0IGxlbmd0aCwgdGhlCisgKiAgICAgYXJyYXkgYmxfY291bnQgY29udGFpbnMgdGhlIGZyZXF1ZW5jaWVzIGZvciBlYWNoIGJpdCBsZW5ndGguCisgKiAgICAgVGhlIGxlbmd0aCBvcHRfbGVuIGlzIHVwZGF0ZWQ7IHN0YXRpY19sZW4gaXMgYWxzbyB1cGRhdGVkIGlmIHN0cmVlIGlzCisgKiAgICAgbm90IG51bGwuCisgKi8KK2xvY2FsIHZvaWQgZ2VuX2JpdGxlbihzLCBkZXNjKQorICAgIGRlZmxhdGVfc3RhdGUgKnM7CisgICAgdHJlZV9kZXNjICpkZXNjOyAgICAvKiB0aGUgdHJlZSBkZXNjcmlwdG9yICovCit7CisgICAgY3RfZGF0YSAqdHJlZSAgICAgICAgPSBkZXNjLT5keW5fdHJlZTsKKyAgICBpbnQgbWF4X2NvZGUgICAgICAgICA9IGRlc2MtPm1heF9jb2RlOworICAgIGNvbnN0IGN0X2RhdGEgKnN0cmVlID0gZGVzYy0+c3RhdF9kZXNjLT5zdGF0aWNfdHJlZTsKKyAgICBjb25zdCBpbnRmICpleHRyYSAgICA9IGRlc2MtPnN0YXRfZGVzYy0+ZXh0cmFfYml0czsKKyAgICBpbnQgYmFzZSAgICAgICAgICAgICA9IGRlc2MtPnN0YXRfZGVzYy0+ZXh0cmFfYmFzZTsKKyAgICBpbnQgbWF4X2xlbmd0aCAgICAgICA9IGRlc2MtPnN0YXRfZGVzYy0+bWF4X2xlbmd0aDsKKyAgICBpbnQgaDsgICAgICAgICAgICAgIC8qIGhlYXAgaW5kZXggKi8KKyAgICBpbnQgbiwgbTsgICAgICAgICAgIC8qIGl0ZXJhdGUgb3ZlciB0aGUgdHJlZSBlbGVtZW50cyAqLworICAgIGludCBiaXRzOyAgICAgICAgICAgLyogYml0IGxlbmd0aCAqLworICAgIGludCB4Yml0czsgICAgICAgICAgLyogZXh0cmEgYml0cyAqLworICAgIHVzaCBmOyAgICAgICAgICAgICAgLyogZnJlcXVlbmN5ICovCisgICAgaW50IG92ZXJmbG93ID0gMDsgICAvKiBudW1iZXIgb2YgZWxlbWVudHMgd2l0aCBiaXQgbGVuZ3RoIHRvbyBsYXJnZSAqLworCisgICAgZm9yIChiaXRzID0gMDsgYml0cyA8PSBNQVhfQklUUzsgYml0cysrKSBzLT5ibF9jb3VudFtiaXRzXSA9IDA7CisKKyAgICAvKiBJbiBhIGZpcnN0IHBhc3MsIGNvbXB1dGUgdGhlIG9wdGltYWwgYml0IGxlbmd0aHMgKHdoaWNoIG1heQorICAgICAqIG92ZXJmbG93IGluIHRoZSBjYXNlIG9mIHRoZSBiaXQgbGVuZ3RoIHRyZWUpLgorICAgICAqLworICAgIHRyZWVbcy0+aGVhcFtzLT5oZWFwX21heF1dLkxlbiA9IDA7IC8qIHJvb3Qgb2YgdGhlIGhlYXAgKi8KKworICAgIGZvciAoaCA9IHMtPmhlYXBfbWF4KzE7IGggPCBIRUFQX1NJWkU7IGgrKykgeworICAgICAgICBuID0gcy0+aGVhcFtoXTsKKyAgICAgICAgYml0cyA9IHRyZWVbdHJlZVtuXS5EYWRdLkxlbiArIDE7CisgICAgICAgIGlmIChiaXRzID4gbWF4X2xlbmd0aCkgYml0cyA9IG1heF9sZW5ndGgsIG92ZXJmbG93Kys7CisgICAgICAgIHRyZWVbbl0uTGVuID0gKHVzaCliaXRzOworICAgICAgICAvKiBXZSBvdmVyd3JpdGUgdHJlZVtuXS5EYWQgd2hpY2ggaXMgbm8gbG9uZ2VyIG5lZWRlZCAqLworCisgICAgICAgIGlmIChuID4gbWF4X2NvZGUpIGNvbnRpbnVlOyAvKiBub3QgYSBsZWFmIG5vZGUgKi8KKworICAgICAgICBzLT5ibF9jb3VudFtiaXRzXSsrOworICAgICAgICB4Yml0cyA9IDA7CisgICAgICAgIGlmIChuID49IGJhc2UpIHhiaXRzID0gZXh0cmFbbi1iYXNlXTsKKyAgICAgICAgZiA9IHRyZWVbbl0uRnJlcTsKKyAgICAgICAgcy0+b3B0X2xlbiArPSAodWxnKWYgKiAodW5zaWduZWQpKGJpdHMgKyB4Yml0cyk7CisgICAgICAgIGlmIChzdHJlZSkgcy0+c3RhdGljX2xlbiArPSAodWxnKWYgKiAodW5zaWduZWQpKHN0cmVlW25dLkxlbiArIHhiaXRzKTsKKyAgICB9CisgICAgaWYgKG92ZXJmbG93ID09IDApIHJldHVybjsKKworICAgIFRyYWNldigoc3RkZXJyLCJcbmJpdCBsZW5ndGggb3ZlcmZsb3dcbiIpKTsKKyAgICAvKiBUaGlzIGhhcHBlbnMgZm9yIGV4YW1wbGUgb24gb2JqMiBhbmQgcGljIG9mIHRoZSBDYWxnYXJ5IGNvcnB1cyAqLworCisgICAgLyogRmluZCB0aGUgZmlyc3QgYml0IGxlbmd0aCB3aGljaCBjb3VsZCBpbmNyZWFzZTogKi8KKyAgICBkbyB7CisgICAgICAgIGJpdHMgPSBtYXhfbGVuZ3RoLTE7CisgICAgICAgIHdoaWxlIChzLT5ibF9jb3VudFtiaXRzXSA9PSAwKSBiaXRzLS07CisgICAgICAgIHMtPmJsX2NvdW50W2JpdHNdLS07ICAgICAgLyogbW92ZSBvbmUgbGVhZiBkb3duIHRoZSB0cmVlICovCisgICAgICAgIHMtPmJsX2NvdW50W2JpdHMrMV0gKz0gMjsgLyogbW92ZSBvbmUgb3ZlcmZsb3cgaXRlbSBhcyBpdHMgYnJvdGhlciAqLworICAgICAgICBzLT5ibF9jb3VudFttYXhfbGVuZ3RoXS0tOworICAgICAgICAvKiBUaGUgYnJvdGhlciBvZiB0aGUgb3ZlcmZsb3cgaXRlbSBhbHNvIG1vdmVzIG9uZSBzdGVwIHVwLAorICAgICAgICAgKiBidXQgdGhpcyBkb2VzIG5vdCBhZmZlY3QgYmxfY291bnRbbWF4X2xlbmd0aF0KKyAgICAgICAgICovCisgICAgICAgIG92ZXJmbG93IC09IDI7CisgICAgfSB3aGlsZSAob3ZlcmZsb3cgPiAwKTsKKworICAgIC8qIE5vdyByZWNvbXB1dGUgYWxsIGJpdCBsZW5ndGhzLCBzY2FubmluZyBpbiBpbmNyZWFzaW5nIGZyZXF1ZW5jeS4KKyAgICAgKiBoIGlzIHN0aWxsIGVxdWFsIHRvIEhFQVBfU0laRS4gKEl0IGlzIHNpbXBsZXIgdG8gcmVjb25zdHJ1Y3QgYWxsCisgICAgICogbGVuZ3RocyBpbnN0ZWFkIG9mIGZpeGluZyBvbmx5IHRoZSB3cm9uZyBvbmVzLiBUaGlzIGlkZWEgaXMgdGFrZW4KKyAgICAgKiBmcm9tICdhcicgd3JpdHRlbiBieSBIYXJ1aGlrbyBPa3VtdXJhLikKKyAgICAgKi8KKyAgICBmb3IgKGJpdHMgPSBtYXhfbGVuZ3RoOyBiaXRzICE9IDA7IGJpdHMtLSkgeworICAgICAgICBuID0gcy0+YmxfY291bnRbYml0c107CisgICAgICAgIHdoaWxlIChuICE9IDApIHsKKyAgICAgICAgICAgIG0gPSBzLT5oZWFwWy0taF07CisgICAgICAgICAgICBpZiAobSA+IG1heF9jb2RlKSBjb250aW51ZTsKKyAgICAgICAgICAgIGlmICgodW5zaWduZWQpIHRyZWVbbV0uTGVuICE9ICh1bnNpZ25lZCkgYml0cykgeworICAgICAgICAgICAgICAgIFRyYWNldigoc3RkZXJyLCJjb2RlICVkIGJpdHMgJWQtPiVkXG4iLCBtLCB0cmVlW21dLkxlbiwgYml0cykpOworICAgICAgICAgICAgICAgIHMtPm9wdF9sZW4gKz0gKCh1bGcpYml0cyAtIHRyZWVbbV0uTGVuKSAqIHRyZWVbbV0uRnJlcTsKKyAgICAgICAgICAgICAgICB0cmVlW21dLkxlbiA9ICh1c2gpYml0czsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG4tLTsKKyAgICAgICAgfQorICAgIH0KK30KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBHZW5lcmF0ZSB0aGUgY29kZXMgZm9yIGEgZ2l2ZW4gdHJlZSBhbmQgYml0IGNvdW50cyAod2hpY2ggbmVlZCBub3QgYmUKKyAqIG9wdGltYWwpLgorICogSU4gYXNzZXJ0aW9uOiB0aGUgYXJyYXkgYmxfY291bnQgY29udGFpbnMgdGhlIGJpdCBsZW5ndGggc3RhdGlzdGljcyBmb3IKKyAqIHRoZSBnaXZlbiB0cmVlIGFuZCB0aGUgZmllbGQgbGVuIGlzIHNldCBmb3IgYWxsIHRyZWUgZWxlbWVudHMuCisgKiBPVVQgYXNzZXJ0aW9uOiB0aGUgZmllbGQgY29kZSBpcyBzZXQgZm9yIGFsbCB0cmVlIGVsZW1lbnRzIG9mIG5vbgorICogICAgIHplcm8gY29kZSBsZW5ndGguCisgKi8KK2xvY2FsIHZvaWQgZ2VuX2NvZGVzICh0cmVlLCBtYXhfY29kZSwgYmxfY291bnQpCisgICAgY3RfZGF0YSAqdHJlZTsgICAgICAgICAgICAgLyogdGhlIHRyZWUgdG8gZGVjb3JhdGUgKi8KKyAgICBpbnQgbWF4X2NvZGU7ICAgICAgICAgICAgICAvKiBsYXJnZXN0IGNvZGUgd2l0aCBub24gemVybyBmcmVxdWVuY3kgKi8KKyAgICB1c2hmICpibF9jb3VudDsgICAgICAgICAgICAvKiBudW1iZXIgb2YgY29kZXMgYXQgZWFjaCBiaXQgbGVuZ3RoICovCit7CisgICAgdXNoIG5leHRfY29kZVtNQVhfQklUUysxXTsgLyogbmV4dCBjb2RlIHZhbHVlIGZvciBlYWNoIGJpdCBsZW5ndGggKi8KKyAgICB1bnNpZ25lZCBjb2RlID0gMDsgICAgICAgICAvKiBydW5uaW5nIGNvZGUgdmFsdWUgKi8KKyAgICBpbnQgYml0czsgICAgICAgICAgICAgICAgICAvKiBiaXQgaW5kZXggKi8KKyAgICBpbnQgbjsgICAgICAgICAgICAgICAgICAgICAvKiBjb2RlIGluZGV4ICovCisKKyAgICAvKiBUaGUgZGlzdHJpYnV0aW9uIGNvdW50cyBhcmUgZmlyc3QgdXNlZCB0byBnZW5lcmF0ZSB0aGUgY29kZSB2YWx1ZXMKKyAgICAgKiB3aXRob3V0IGJpdCByZXZlcnNhbC4KKyAgICAgKi8KKyAgICBmb3IgKGJpdHMgPSAxOyBiaXRzIDw9IE1BWF9CSVRTOyBiaXRzKyspIHsKKyAgICAgICAgY29kZSA9IChjb2RlICsgYmxfY291bnRbYml0cy0xXSkgPDwgMTsKKyAgICAgICAgbmV4dF9jb2RlW2JpdHNdID0gKHVzaCljb2RlOworICAgIH0KKyAgICAvKiBDaGVjayB0aGF0IHRoZSBiaXQgY291bnRzIGluIGJsX2NvdW50IGFyZSBjb25zaXN0ZW50LiBUaGUgbGFzdCBjb2RlCisgICAgICogbXVzdCBiZSBhbGwgb25lcy4KKyAgICAgKi8KKyAgICBBc3NlcnQgKGNvZGUgKyBibF9jb3VudFtNQVhfQklUU10tMSA9PSAoMTw8TUFYX0JJVFMpLTEsCisgICAgICAgICAgICAiaW5jb25zaXN0ZW50IGJpdCBjb3VudHMiKTsKKyAgICBUcmFjZXYoKHN0ZGVyciwiXG5nZW5fY29kZXM6IG1heF9jb2RlICVkICIsIG1heF9jb2RlKSk7CisKKyAgICBmb3IgKG4gPSAwOyAgbiA8PSBtYXhfY29kZTsgbisrKSB7CisgICAgICAgIGludCBsZW4gPSB0cmVlW25dLkxlbjsKKyAgICAgICAgaWYgKGxlbiA9PSAwKSBjb250aW51ZTsKKyAgICAgICAgLyogTm93IHJldmVyc2UgdGhlIGJpdHMgKi8KKyAgICAgICAgdHJlZVtuXS5Db2RlID0gKHVzaCliaV9yZXZlcnNlKG5leHRfY29kZVtsZW5dKyssIGxlbik7CisKKyAgICAgICAgVHJhY2Vjdih0cmVlICE9IHN0YXRpY19sdHJlZSwgKHN0ZGVyciwiXG5uICUzZCAlYyBsICUyZCBjICU0eCAoJXgpICIsCisgICAgICAgICAgICAgbiwgKGlzZ3JhcGgobikgPyBuIDogJyAnKSwgbGVuLCB0cmVlW25dLkNvZGUsIG5leHRfY29kZVtsZW5dLTEpKTsKKyAgICB9Cit9CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29uc3RydWN0IG9uZSBIdWZmbWFuIHRyZWUgYW5kIGFzc2lnbnMgdGhlIGNvZGUgYml0IHN0cmluZ3MgYW5kIGxlbmd0aHMuCisgKiBVcGRhdGUgdGhlIHRvdGFsIGJpdCBsZW5ndGggZm9yIHRoZSBjdXJyZW50IGJsb2NrLgorICogSU4gYXNzZXJ0aW9uOiB0aGUgZmllbGQgZnJlcSBpcyBzZXQgZm9yIGFsbCB0cmVlIGVsZW1lbnRzLgorICogT1VUIGFzc2VydGlvbnM6IHRoZSBmaWVsZHMgbGVuIGFuZCBjb2RlIGFyZSBzZXQgdG8gdGhlIG9wdGltYWwgYml0IGxlbmd0aAorICogICAgIGFuZCBjb3JyZXNwb25kaW5nIGNvZGUuIFRoZSBsZW5ndGggb3B0X2xlbiBpcyB1cGRhdGVkOyBzdGF0aWNfbGVuIGlzCisgKiAgICAgYWxzbyB1cGRhdGVkIGlmIHN0cmVlIGlzIG5vdCBudWxsLiBUaGUgZmllbGQgbWF4X2NvZGUgaXMgc2V0LgorICovCitsb2NhbCB2b2lkIGJ1aWxkX3RyZWUocywgZGVzYykKKyAgICBkZWZsYXRlX3N0YXRlICpzOworICAgIHRyZWVfZGVzYyAqZGVzYzsgLyogdGhlIHRyZWUgZGVzY3JpcHRvciAqLworeworICAgIGN0X2RhdGEgKnRyZWUgICAgICAgICA9IGRlc2MtPmR5bl90cmVlOworICAgIGNvbnN0IGN0X2RhdGEgKnN0cmVlICA9IGRlc2MtPnN0YXRfZGVzYy0+c3RhdGljX3RyZWU7CisgICAgaW50IGVsZW1zICAgICAgICAgICAgID0gZGVzYy0+c3RhdF9kZXNjLT5lbGVtczsKKyAgICBpbnQgbiwgbTsgICAgICAgICAgLyogaXRlcmF0ZSBvdmVyIGhlYXAgZWxlbWVudHMgKi8KKyAgICBpbnQgbWF4X2NvZGUgPSAtMTsgLyogbGFyZ2VzdCBjb2RlIHdpdGggbm9uIHplcm8gZnJlcXVlbmN5ICovCisgICAgaW50IG5vZGU7ICAgICAgICAgIC8qIG5ldyBub2RlIGJlaW5nIGNyZWF0ZWQgKi8KKworICAgIC8qIENvbnN0cnVjdCB0aGUgaW5pdGlhbCBoZWFwLCB3aXRoIGxlYXN0IGZyZXF1ZW50IGVsZW1lbnQgaW4KKyAgICAgKiBoZWFwW1NNQUxMRVNUXS4gVGhlIHNvbnMgb2YgaGVhcFtuXSBhcmUgaGVhcFsyKm5dIGFuZCBoZWFwWzIqbisxXS4KKyAgICAgKiBoZWFwWzBdIGlzIG5vdCB1c2VkLgorICAgICAqLworICAgIHMtPmhlYXBfbGVuID0gMCwgcy0+aGVhcF9tYXggPSBIRUFQX1NJWkU7CisKKyAgICBmb3IgKG4gPSAwOyBuIDwgZWxlbXM7IG4rKykgeworICAgICAgICBpZiAodHJlZVtuXS5GcmVxICE9IDApIHsKKyAgICAgICAgICAgIHMtPmhlYXBbKysocy0+aGVhcF9sZW4pXSA9IG1heF9jb2RlID0gbjsKKyAgICAgICAgICAgIHMtPmRlcHRoW25dID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRyZWVbbl0uTGVuID0gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIFRoZSBwa3ppcCBmb3JtYXQgcmVxdWlyZXMgdGhhdCBhdCBsZWFzdCBvbmUgZGlzdGFuY2UgY29kZSBleGlzdHMsCisgICAgICogYW5kIHRoYXQgYXQgbGVhc3Qgb25lIGJpdCBzaG91bGQgYmUgc2VudCBldmVuIGlmIHRoZXJlIGlzIG9ubHkgb25lCisgICAgICogcG9zc2libGUgY29kZS4gU28gdG8gYXZvaWQgc3BlY2lhbCBjaGVja3MgbGF0ZXIgb24gd2UgZm9yY2UgYXQgbGVhc3QKKyAgICAgKiB0d28gY29kZXMgb2Ygbm9uIHplcm8gZnJlcXVlbmN5LgorICAgICAqLworICAgIHdoaWxlIChzLT5oZWFwX2xlbiA8IDIpIHsKKyAgICAgICAgbm9kZSA9IHMtPmhlYXBbKysocy0+aGVhcF9sZW4pXSA9IChtYXhfY29kZSA8IDIgPyArK21heF9jb2RlIDogMCk7CisgICAgICAgIHRyZWVbbm9kZV0uRnJlcSA9IDE7CisgICAgICAgIHMtPmRlcHRoW25vZGVdID0gMDsKKyAgICAgICAgcy0+b3B0X2xlbi0tOyBpZiAoc3RyZWUpIHMtPnN0YXRpY19sZW4gLT0gc3RyZWVbbm9kZV0uTGVuOworICAgICAgICAvKiBub2RlIGlzIDAgb3IgMSBzbyBpdCBkb2VzIG5vdCBoYXZlIGV4dHJhIGJpdHMgKi8KKyAgICB9CisgICAgZGVzYy0+bWF4X2NvZGUgPSBtYXhfY29kZTsKKworICAgIC8qIFRoZSBlbGVtZW50cyBoZWFwW2hlYXBfbGVuLzIrMSAuLiBoZWFwX2xlbl0gYXJlIGxlYXZlcyBvZiB0aGUgdHJlZSwKKyAgICAgKiBlc3RhYmxpc2ggc3ViLWhlYXBzIG9mIGluY3JlYXNpbmcgbGVuZ3RoczoKKyAgICAgKi8KKyAgICBmb3IgKG4gPSBzLT5oZWFwX2xlbi8yOyBuID49IDE7IG4tLSkgcHFkb3duaGVhcChzLCB0cmVlLCBuKTsKKworICAgIC8qIENvbnN0cnVjdCB0aGUgSHVmZm1hbiB0cmVlIGJ5IHJlcGVhdGVkbHkgY29tYmluaW5nIHRoZSBsZWFzdCB0d28KKyAgICAgKiBmcmVxdWVudCBub2Rlcy4KKyAgICAgKi8KKyAgICBub2RlID0gZWxlbXM7ICAgICAgICAgICAgICAvKiBuZXh0IGludGVybmFsIG5vZGUgb2YgdGhlIHRyZWUgKi8KKyAgICBkbyB7CisgICAgICAgIHBxcmVtb3ZlKHMsIHRyZWUsIG4pOyAgLyogbiA9IG5vZGUgb2YgbGVhc3QgZnJlcXVlbmN5ICovCisgICAgICAgIG0gPSBzLT5oZWFwW1NNQUxMRVNUXTsgLyogbSA9IG5vZGUgb2YgbmV4dCBsZWFzdCBmcmVxdWVuY3kgKi8KKworICAgICAgICBzLT5oZWFwWy0tKHMtPmhlYXBfbWF4KV0gPSBuOyAvKiBrZWVwIHRoZSBub2RlcyBzb3J0ZWQgYnkgZnJlcXVlbmN5ICovCisgICAgICAgIHMtPmhlYXBbLS0ocy0+aGVhcF9tYXgpXSA9IG07CisKKyAgICAgICAgLyogQ3JlYXRlIGEgbmV3IG5vZGUgZmF0aGVyIG9mIG4gYW5kIG0gKi8KKyAgICAgICAgdHJlZVtub2RlXS5GcmVxID0gdHJlZVtuXS5GcmVxICsgdHJlZVttXS5GcmVxOworICAgICAgICBzLT5kZXB0aFtub2RlXSA9ICh1Y2gpKChzLT5kZXB0aFtuXSA+PSBzLT5kZXB0aFttXSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPmRlcHRoW25dIDogcy0+ZGVwdGhbbV0pICsgMSk7CisgICAgICAgIHRyZWVbbl0uRGFkID0gdHJlZVttXS5EYWQgPSAodXNoKW5vZGU7CisjaWZkZWYgRFVNUF9CTF9UUkVFCisgICAgICAgIGlmICh0cmVlID09IHMtPmJsX3RyZWUpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCJcbm5vZGUgJWQoJWQpLCBzb25zICVkKCVkKSAlZCglZCkiLAorICAgICAgICAgICAgICAgICAgICBub2RlLCB0cmVlW25vZGVdLkZyZXEsIG4sIHRyZWVbbl0uRnJlcSwgbSwgdHJlZVttXS5GcmVxKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIC8qIGFuZCBpbnNlcnQgdGhlIG5ldyBub2RlIGluIHRoZSBoZWFwICovCisgICAgICAgIHMtPmhlYXBbU01BTExFU1RdID0gbm9kZSsrOworICAgICAgICBwcWRvd25oZWFwKHMsIHRyZWUsIFNNQUxMRVNUKTsKKworICAgIH0gd2hpbGUgKHMtPmhlYXBfbGVuID49IDIpOworCisgICAgcy0+aGVhcFstLShzLT5oZWFwX21heCldID0gcy0+aGVhcFtTTUFMTEVTVF07CisKKyAgICAvKiBBdCB0aGlzIHBvaW50LCB0aGUgZmllbGRzIGZyZXEgYW5kIGRhZCBhcmUgc2V0LiBXZSBjYW4gbm93CisgICAgICogZ2VuZXJhdGUgdGhlIGJpdCBsZW5ndGhzLgorICAgICAqLworICAgIGdlbl9iaXRsZW4ocywgKHRyZWVfZGVzYyAqKWRlc2MpOworCisgICAgLyogVGhlIGZpZWxkIGxlbiBpcyBub3cgc2V0LCB3ZSBjYW4gZ2VuZXJhdGUgdGhlIGJpdCBjb2RlcyAqLworICAgIGdlbl9jb2RlcyAoKGN0X2RhdGEgKil0cmVlLCBtYXhfY29kZSwgcy0+YmxfY291bnQpOworfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIFNjYW4gYSBsaXRlcmFsIG9yIGRpc3RhbmNlIHRyZWUgdG8gZGV0ZXJtaW5lIHRoZSBmcmVxdWVuY2llcyBvZiB0aGUgY29kZXMKKyAqIGluIHRoZSBiaXQgbGVuZ3RoIHRyZWUuCisgKi8KK2xvY2FsIHZvaWQgc2Nhbl90cmVlIChzLCB0cmVlLCBtYXhfY29kZSkKKyAgICBkZWZsYXRlX3N0YXRlICpzOworICAgIGN0X2RhdGEgKnRyZWU7ICAgLyogdGhlIHRyZWUgdG8gYmUgc2Nhbm5lZCAqLworICAgIGludCBtYXhfY29kZTsgICAgLyogYW5kIGl0cyBsYXJnZXN0IGNvZGUgb2Ygbm9uIHplcm8gZnJlcXVlbmN5ICovCit7CisgICAgaW50IG47ICAgICAgICAgICAgICAgICAgICAgLyogaXRlcmF0ZXMgb3ZlciBhbGwgdHJlZSBlbGVtZW50cyAqLworICAgIGludCBwcmV2bGVuID0gLTE7ICAgICAgICAgIC8qIGxhc3QgZW1pdHRlZCBsZW5ndGggKi8KKyAgICBpbnQgY3VybGVuOyAgICAgICAgICAgICAgICAvKiBsZW5ndGggb2YgY3VycmVudCBjb2RlICovCisgICAgaW50IG5leHRsZW4gPSB0cmVlWzBdLkxlbjsgLyogbGVuZ3RoIG9mIG5leHQgY29kZSAqLworICAgIGludCBjb3VudCA9IDA7ICAgICAgICAgICAgIC8qIHJlcGVhdCBjb3VudCBvZiB0aGUgY3VycmVudCBjb2RlICovCisgICAgaW50IG1heF9jb3VudCA9IDc7ICAgICAgICAgLyogbWF4IHJlcGVhdCBjb3VudCAqLworICAgIGludCBtaW5fY291bnQgPSA0OyAgICAgICAgIC8qIG1pbiByZXBlYXQgY291bnQgKi8KKworICAgIGlmIChuZXh0bGVuID09IDApIG1heF9jb3VudCA9IDEzOCwgbWluX2NvdW50ID0gMzsKKyAgICB0cmVlW21heF9jb2RlKzFdLkxlbiA9ICh1c2gpMHhmZmZmOyAvKiBndWFyZCAqLworCisgICAgZm9yIChuID0gMDsgbiA8PSBtYXhfY29kZTsgbisrKSB7CisgICAgICAgIGN1cmxlbiA9IG5leHRsZW47IG5leHRsZW4gPSB0cmVlW24rMV0uTGVuOworICAgICAgICBpZiAoKytjb3VudCA8IG1heF9jb3VudCAmJiBjdXJsZW4gPT0gbmV4dGxlbikgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0gZWxzZSBpZiAoY291bnQgPCBtaW5fY291bnQpIHsKKyAgICAgICAgICAgIHMtPmJsX3RyZWVbY3VybGVuXS5GcmVxICs9IGNvdW50OworICAgICAgICB9IGVsc2UgaWYgKGN1cmxlbiAhPSAwKSB7CisgICAgICAgICAgICBpZiAoY3VybGVuICE9IHByZXZsZW4pIHMtPmJsX3RyZWVbY3VybGVuXS5GcmVxKys7CisgICAgICAgICAgICBzLT5ibF90cmVlW1JFUF8zXzZdLkZyZXErKzsKKyAgICAgICAgfSBlbHNlIGlmIChjb3VudCA8PSAxMCkgeworICAgICAgICAgICAgcy0+YmxfdHJlZVtSRVBaXzNfMTBdLkZyZXErKzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHMtPmJsX3RyZWVbUkVQWl8xMV8xMzhdLkZyZXErKzsKKyAgICAgICAgfQorICAgICAgICBjb3VudCA9IDA7IHByZXZsZW4gPSBjdXJsZW47CisgICAgICAgIGlmIChuZXh0bGVuID09IDApIHsKKyAgICAgICAgICAgIG1heF9jb3VudCA9IDEzOCwgbWluX2NvdW50ID0gMzsKKyAgICAgICAgfSBlbHNlIGlmIChjdXJsZW4gPT0gbmV4dGxlbikgeworICAgICAgICAgICAgbWF4X2NvdW50ID0gNiwgbWluX2NvdW50ID0gMzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1heF9jb3VudCA9IDcsIG1pbl9jb3VudCA9IDQ7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogU2VuZCBhIGxpdGVyYWwgb3IgZGlzdGFuY2UgdHJlZSBpbiBjb21wcmVzc2VkIGZvcm0sIHVzaW5nIHRoZSBjb2RlcyBpbgorICogYmxfdHJlZS4KKyAqLworbG9jYWwgdm9pZCBzZW5kX3RyZWUgKHMsIHRyZWUsIG1heF9jb2RlKQorICAgIGRlZmxhdGVfc3RhdGUgKnM7CisgICAgY3RfZGF0YSAqdHJlZTsgLyogdGhlIHRyZWUgdG8gYmUgc2Nhbm5lZCAqLworICAgIGludCBtYXhfY29kZTsgICAgICAgLyogYW5kIGl0cyBsYXJnZXN0IGNvZGUgb2Ygbm9uIHplcm8gZnJlcXVlbmN5ICovCit7CisgICAgaW50IG47ICAgICAgICAgICAgICAgICAgICAgLyogaXRlcmF0ZXMgb3ZlciBhbGwgdHJlZSBlbGVtZW50cyAqLworICAgIGludCBwcmV2bGVuID0gLTE7ICAgICAgICAgIC8qIGxhc3QgZW1pdHRlZCBsZW5ndGggKi8KKyAgICBpbnQgY3VybGVuOyAgICAgICAgICAgICAgICAvKiBsZW5ndGggb2YgY3VycmVudCBjb2RlICovCisgICAgaW50IG5leHRsZW4gPSB0cmVlWzBdLkxlbjsgLyogbGVuZ3RoIG9mIG5leHQgY29kZSAqLworICAgIGludCBjb3VudCA9IDA7ICAgICAgICAgICAgIC8qIHJlcGVhdCBjb3VudCBvZiB0aGUgY3VycmVudCBjb2RlICovCisgICAgaW50IG1heF9jb3VudCA9IDc7ICAgICAgICAgLyogbWF4IHJlcGVhdCBjb3VudCAqLworICAgIGludCBtaW5fY291bnQgPSA0OyAgICAgICAgIC8qIG1pbiByZXBlYXQgY291bnQgKi8KKworICAgIC8qIHRyZWVbbWF4X2NvZGUrMV0uTGVuID0gLTE7ICovICAvKiBndWFyZCBhbHJlYWR5IHNldCAqLworICAgIGlmIChuZXh0bGVuID09IDApIG1heF9jb3VudCA9IDEzOCwgbWluX2NvdW50ID0gMzsKKworICAgIGZvciAobiA9IDA7IG4gPD0gbWF4X2NvZGU7IG4rKykgeworICAgICAgICBjdXJsZW4gPSBuZXh0bGVuOyBuZXh0bGVuID0gdHJlZVtuKzFdLkxlbjsKKyAgICAgICAgaWYgKCsrY291bnQgPCBtYXhfY291bnQgJiYgY3VybGVuID09IG5leHRsZW4pIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9IGVsc2UgaWYgKGNvdW50IDwgbWluX2NvdW50KSB7CisgICAgICAgICAgICBkbyB7IHNlbmRfY29kZShzLCBjdXJsZW4sIHMtPmJsX3RyZWUpOyB9IHdoaWxlICgtLWNvdW50ICE9IDApOworCisgICAgICAgIH0gZWxzZSBpZiAoY3VybGVuICE9IDApIHsKKyAgICAgICAgICAgIGlmIChjdXJsZW4gIT0gcHJldmxlbikgeworICAgICAgICAgICAgICAgIHNlbmRfY29kZShzLCBjdXJsZW4sIHMtPmJsX3RyZWUpOyBjb3VudC0tOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQXNzZXJ0KGNvdW50ID49IDMgJiYgY291bnQgPD0gNiwgIiAzXzY/Iik7CisgICAgICAgICAgICBzZW5kX2NvZGUocywgUkVQXzNfNiwgcy0+YmxfdHJlZSk7IHNlbmRfYml0cyhzLCBjb3VudC0zLCAyKTsKKworICAgICAgICB9IGVsc2UgaWYgKGNvdW50IDw9IDEwKSB7CisgICAgICAgICAgICBzZW5kX2NvZGUocywgUkVQWl8zXzEwLCBzLT5ibF90cmVlKTsgc2VuZF9iaXRzKHMsIGNvdW50LTMsIDMpOworCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzZW5kX2NvZGUocywgUkVQWl8xMV8xMzgsIHMtPmJsX3RyZWUpOyBzZW5kX2JpdHMocywgY291bnQtMTEsIDcpOworICAgICAgICB9CisgICAgICAgIGNvdW50ID0gMDsgcHJldmxlbiA9IGN1cmxlbjsKKyAgICAgICAgaWYgKG5leHRsZW4gPT0gMCkgeworICAgICAgICAgICAgbWF4X2NvdW50ID0gMTM4LCBtaW5fY291bnQgPSAzOworICAgICAgICB9IGVsc2UgaWYgKGN1cmxlbiA9PSBuZXh0bGVuKSB7CisgICAgICAgICAgICBtYXhfY291bnQgPSA2LCBtaW5fY291bnQgPSAzOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbWF4X2NvdW50ID0gNywgbWluX2NvdW50ID0gNDsKKyAgICAgICAgfQorICAgIH0KK30KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb25zdHJ1Y3QgdGhlIEh1ZmZtYW4gdHJlZSBmb3IgdGhlIGJpdCBsZW5ndGhzIGFuZCByZXR1cm4gdGhlIGluZGV4IGluCisgKiBibF9vcmRlciBvZiB0aGUgbGFzdCBiaXQgbGVuZ3RoIGNvZGUgdG8gc2VuZC4KKyAqLworbG9jYWwgaW50IGJ1aWxkX2JsX3RyZWUocykKKyAgICBkZWZsYXRlX3N0YXRlICpzOworeworICAgIGludCBtYXhfYmxpbmRleDsgIC8qIGluZGV4IG9mIGxhc3QgYml0IGxlbmd0aCBjb2RlIG9mIG5vbiB6ZXJvIGZyZXEgKi8KKworICAgIC8qIERldGVybWluZSB0aGUgYml0IGxlbmd0aCBmcmVxdWVuY2llcyBmb3IgbGl0ZXJhbCBhbmQgZGlzdGFuY2UgdHJlZXMgKi8KKyAgICBzY2FuX3RyZWUocywgKGN0X2RhdGEgKilzLT5keW5fbHRyZWUsIHMtPmxfZGVzYy5tYXhfY29kZSk7CisgICAgc2Nhbl90cmVlKHMsIChjdF9kYXRhICopcy0+ZHluX2R0cmVlLCBzLT5kX2Rlc2MubWF4X2NvZGUpOworCisgICAgLyogQnVpbGQgdGhlIGJpdCBsZW5ndGggdHJlZTogKi8KKyAgICBidWlsZF90cmVlKHMsICh0cmVlX2Rlc2MgKikoJihzLT5ibF9kZXNjKSkpOworICAgIC8qIG9wdF9sZW4gbm93IGluY2x1ZGVzIHRoZSBsZW5ndGggb2YgdGhlIHRyZWUgcmVwcmVzZW50YXRpb25zLCBleGNlcHQKKyAgICAgKiB0aGUgbGVuZ3RocyBvZiB0aGUgYml0IGxlbmd0aHMgY29kZXMgYW5kIHRoZSA1KzUrNCBiaXRzIGZvciB0aGUgY291bnRzLgorICAgICAqLworCisgICAgLyogRGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgYml0IGxlbmd0aCBjb2RlcyB0byBzZW5kLiBUaGUgcGt6aXAgZm9ybWF0CisgICAgICogcmVxdWlyZXMgdGhhdCBhdCBsZWFzdCA0IGJpdCBsZW5ndGggY29kZXMgYmUgc2VudC4gKGFwcG5vdGUudHh0IHNheXMKKyAgICAgKiAzIGJ1dCB0aGUgYWN0dWFsIHZhbHVlIHVzZWQgaXMgNC4pCisgICAgICovCisgICAgZm9yIChtYXhfYmxpbmRleCA9IEJMX0NPREVTLTE7IG1heF9ibGluZGV4ID49IDM7IG1heF9ibGluZGV4LS0pIHsKKyAgICAgICAgaWYgKHMtPmJsX3RyZWVbYmxfb3JkZXJbbWF4X2JsaW5kZXhdXS5MZW4gIT0gMCkgYnJlYWs7CisgICAgfQorICAgIC8qIFVwZGF0ZSBvcHRfbGVuIHRvIGluY2x1ZGUgdGhlIGJpdCBsZW5ndGggdHJlZSBhbmQgY291bnRzICovCisgICAgcy0+b3B0X2xlbiArPSAzKigodWxnKW1heF9ibGluZGV4KzEpICsgNSs1KzQ7CisgICAgVHJhY2V2KChzdGRlcnIsICJcbmR5biB0cmVlczogZHluICVsZCwgc3RhdCAlbGQiLAorICAgICAgICAgICAgcy0+b3B0X2xlbiwgcy0+c3RhdGljX2xlbikpOworCisgICAgcmV0dXJuIG1heF9ibGluZGV4OworfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIFNlbmQgdGhlIGhlYWRlciBmb3IgYSBibG9jayB1c2luZyBkeW5hbWljIEh1ZmZtYW4gdHJlZXM6IHRoZSBjb3VudHMsIHRoZQorICogbGVuZ3RocyBvZiB0aGUgYml0IGxlbmd0aCBjb2RlcywgdGhlIGxpdGVyYWwgdHJlZSBhbmQgdGhlIGRpc3RhbmNlIHRyZWUuCisgKiBJTiBhc3NlcnRpb246IGxjb2RlcyA+PSAyNTcsIGRjb2RlcyA+PSAxLCBibGNvZGVzID49IDQuCisgKi8KK2xvY2FsIHZvaWQgc2VuZF9hbGxfdHJlZXMocywgbGNvZGVzLCBkY29kZXMsIGJsY29kZXMpCisgICAgZGVmbGF0ZV9zdGF0ZSAqczsKKyAgICBpbnQgbGNvZGVzLCBkY29kZXMsIGJsY29kZXM7IC8qIG51bWJlciBvZiBjb2RlcyBmb3IgZWFjaCB0cmVlICovCit7CisgICAgaW50IHJhbms7ICAgICAgICAgICAgICAgICAgICAvKiBpbmRleCBpbiBibF9vcmRlciAqLworCisgICAgQXNzZXJ0IChsY29kZXMgPj0gMjU3ICYmIGRjb2RlcyA+PSAxICYmIGJsY29kZXMgPj0gNCwgIm5vdCBlbm91Z2ggY29kZXMiKTsKKyAgICBBc3NlcnQgKGxjb2RlcyA8PSBMX0NPREVTICYmIGRjb2RlcyA8PSBEX0NPREVTICYmIGJsY29kZXMgPD0gQkxfQ09ERVMsCisgICAgICAgICAgICAidG9vIG1hbnkgY29kZXMiKTsKKyAgICBUcmFjZXYoKHN0ZGVyciwgIlxuYmwgY291bnRzOiAiKSk7CisgICAgc2VuZF9iaXRzKHMsIGxjb2Rlcy0yNTcsIDUpOyAvKiBub3QgKzI1NSBhcyBzdGF0ZWQgaW4gYXBwbm90ZS50eHQgKi8KKyAgICBzZW5kX2JpdHMocywgZGNvZGVzLTEsICAgNSk7CisgICAgc2VuZF9iaXRzKHMsIGJsY29kZXMtNCwgIDQpOyAvKiBub3QgLTMgYXMgc3RhdGVkIGluIGFwcG5vdGUudHh0ICovCisgICAgZm9yIChyYW5rID0gMDsgcmFuayA8IGJsY29kZXM7IHJhbmsrKykgeworICAgICAgICBUcmFjZXYoKHN0ZGVyciwgIlxuYmwgY29kZSAlMmQgIiwgYmxfb3JkZXJbcmFua10pKTsKKyAgICAgICAgc2VuZF9iaXRzKHMsIHMtPmJsX3RyZWVbYmxfb3JkZXJbcmFua11dLkxlbiwgMyk7CisgICAgfQorICAgIFRyYWNldigoc3RkZXJyLCAiXG5ibCB0cmVlOiBzZW50ICVsZCIsIHMtPmJpdHNfc2VudCkpOworCisgICAgc2VuZF90cmVlKHMsIChjdF9kYXRhICopcy0+ZHluX2x0cmVlLCBsY29kZXMtMSk7IC8qIGxpdGVyYWwgdHJlZSAqLworICAgIFRyYWNldigoc3RkZXJyLCAiXG5saXQgdHJlZTogc2VudCAlbGQiLCBzLT5iaXRzX3NlbnQpKTsKKworICAgIHNlbmRfdHJlZShzLCAoY3RfZGF0YSAqKXMtPmR5bl9kdHJlZSwgZGNvZGVzLTEpOyAvKiBkaXN0YW5jZSB0cmVlICovCisgICAgVHJhY2V2KChzdGRlcnIsICJcbmRpc3QgdHJlZTogc2VudCAlbGQiLCBzLT5iaXRzX3NlbnQpKTsKK30KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBTZW5kIGEgc3RvcmVkIGJsb2NrCisgKi8KK3ZvaWQgWkxJQl9JTlRFUk5BTCBfdHJfc3RvcmVkX2Jsb2NrKHMsIGJ1Ziwgc3RvcmVkX2xlbiwgbGFzdCkKKyAgICBkZWZsYXRlX3N0YXRlICpzOworICAgIGNoYXJmICpidWY7ICAgICAgIC8qIGlucHV0IGJsb2NrICovCisgICAgdWxnIHN0b3JlZF9sZW47ICAgLyogbGVuZ3RoIG9mIGlucHV0IGJsb2NrICovCisgICAgaW50IGxhc3Q7ICAgICAgICAgLyogb25lIGlmIHRoaXMgaXMgdGhlIGxhc3QgYmxvY2sgZm9yIGEgZmlsZSAqLworeworICAgIHNlbmRfYml0cyhzLCAoU1RPUkVEX0JMT0NLPDwxKStsYXN0LCAzKTsgICAgLyogc2VuZCBibG9jayB0eXBlICovCisgICAgYmlfd2luZHVwKHMpOyAgICAgICAgLyogYWxpZ24gb24gYnl0ZSBib3VuZGFyeSAqLworICAgIHB1dF9zaG9ydChzLCAodXNoKXN0b3JlZF9sZW4pOworICAgIHB1dF9zaG9ydChzLCAodXNoKX5zdG9yZWRfbGVuKTsKKyAgICBpZiAoc3RvcmVkX2xlbikKKyAgICAgICAgem1lbWNweShzLT5wZW5kaW5nX2J1ZiArIHMtPnBlbmRpbmcsIChCeXRlZiAqKWJ1Ziwgc3RvcmVkX2xlbik7CisgICAgcy0+cGVuZGluZyArPSBzdG9yZWRfbGVuOworI2lmZGVmIFpMSUJfREVCVUcKKyAgICBzLT5jb21wcmVzc2VkX2xlbiA9IChzLT5jb21wcmVzc2VkX2xlbiArIDMgKyA3KSAmICh1bGcpfjdMOworICAgIHMtPmNvbXByZXNzZWRfbGVuICs9IChzdG9yZWRfbGVuICsgNCkgPDwgMzsKKyAgICBzLT5iaXRzX3NlbnQgKz0gMioxNjsKKyAgICBzLT5iaXRzX3NlbnQgKz0gc3RvcmVkX2xlbjw8MzsKKyNlbmRpZgorfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIEZsdXNoIHRoZSBiaXRzIGluIHRoZSBiaXQgYnVmZmVyIHRvIHBlbmRpbmcgb3V0cHV0IChsZWF2ZXMgYXQgbW9zdCA3IGJpdHMpCisgKi8KK3ZvaWQgWkxJQl9JTlRFUk5BTCBfdHJfZmx1c2hfYml0cyhzKQorICAgIGRlZmxhdGVfc3RhdGUgKnM7Cit7CisgICAgYmlfZmx1c2gocyk7Cit9CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogU2VuZCBvbmUgZW1wdHkgc3RhdGljIGJsb2NrIHRvIGdpdmUgZW5vdWdoIGxvb2thaGVhZCBmb3IgaW5mbGF0ZS4KKyAqIFRoaXMgdGFrZXMgMTAgYml0cywgb2Ygd2hpY2ggNyBtYXkgcmVtYWluIGluIHRoZSBiaXQgYnVmZmVyLgorICovCit2b2lkIFpMSUJfSU5URVJOQUwgX3RyX2FsaWduKHMpCisgICAgZGVmbGF0ZV9zdGF0ZSAqczsKK3sKKyAgICBzZW5kX2JpdHMocywgU1RBVElDX1RSRUVTPDwxLCAzKTsKKyAgICBzZW5kX2NvZGUocywgRU5EX0JMT0NLLCBzdGF0aWNfbHRyZWUpOworI2lmZGVmIFpMSUJfREVCVUcKKyAgICBzLT5jb21wcmVzc2VkX2xlbiArPSAxMEw7IC8qIDMgZm9yIGJsb2NrIHR5cGUsIDcgZm9yIEVPQiAqLworI2VuZGlmCisgICAgYmlfZmx1c2gocyk7Cit9CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogRGV0ZXJtaW5lIHRoZSBiZXN0IGVuY29kaW5nIGZvciB0aGUgY3VycmVudCBibG9jazogZHluYW1pYyB0cmVlcywgc3RhdGljCisgKiB0cmVlcyBvciBzdG9yZSwgYW5kIHdyaXRlIG91dCB0aGUgZW5jb2RlZCBibG9jay4KKyAqLwordm9pZCBaTElCX0lOVEVSTkFMIF90cl9mbHVzaF9ibG9jayhzLCBidWYsIHN0b3JlZF9sZW4sIGxhc3QpCisgICAgZGVmbGF0ZV9zdGF0ZSAqczsKKyAgICBjaGFyZiAqYnVmOyAgICAgICAvKiBpbnB1dCBibG9jaywgb3IgTlVMTCBpZiB0b28gb2xkICovCisgICAgdWxnIHN0b3JlZF9sZW47ICAgLyogbGVuZ3RoIG9mIGlucHV0IGJsb2NrICovCisgICAgaW50IGxhc3Q7ICAgICAgICAgLyogb25lIGlmIHRoaXMgaXMgdGhlIGxhc3QgYmxvY2sgZm9yIGEgZmlsZSAqLworeworICAgIHVsZyBvcHRfbGVuYiwgc3RhdGljX2xlbmI7IC8qIG9wdF9sZW4gYW5kIHN0YXRpY19sZW4gaW4gYnl0ZXMgKi8KKyAgICBpbnQgbWF4X2JsaW5kZXggPSAwOyAgLyogaW5kZXggb2YgbGFzdCBiaXQgbGVuZ3RoIGNvZGUgb2Ygbm9uIHplcm8gZnJlcSAqLworCisgICAgLyogQnVpbGQgdGhlIEh1ZmZtYW4gdHJlZXMgdW5sZXNzIGEgc3RvcmVkIGJsb2NrIGlzIGZvcmNlZCAqLworICAgIGlmIChzLT5sZXZlbCA+IDApIHsKKworICAgICAgICAvKiBDaGVjayBpZiB0aGUgZmlsZSBpcyBiaW5hcnkgb3IgdGV4dCAqLworICAgICAgICBpZiAocy0+c3RybS0+ZGF0YV90eXBlID09IFpfVU5LTk9XTikKKyAgICAgICAgICAgIHMtPnN0cm0tPmRhdGFfdHlwZSA9IGRldGVjdF9kYXRhX3R5cGUocyk7CisKKyAgICAgICAgLyogQ29uc3RydWN0IHRoZSBsaXRlcmFsIGFuZCBkaXN0YW5jZSB0cmVlcyAqLworICAgICAgICBidWlsZF90cmVlKHMsICh0cmVlX2Rlc2MgKikoJihzLT5sX2Rlc2MpKSk7CisgICAgICAgIFRyYWNldigoc3RkZXJyLCAiXG5saXQgZGF0YTogZHluICVsZCwgc3RhdCAlbGQiLCBzLT5vcHRfbGVuLAorICAgICAgICAgICAgICAgIHMtPnN0YXRpY19sZW4pKTsKKworICAgICAgICBidWlsZF90cmVlKHMsICh0cmVlX2Rlc2MgKikoJihzLT5kX2Rlc2MpKSk7CisgICAgICAgIFRyYWNldigoc3RkZXJyLCAiXG5kaXN0IGRhdGE6IGR5biAlbGQsIHN0YXQgJWxkIiwgcy0+b3B0X2xlbiwKKyAgICAgICAgICAgICAgICBzLT5zdGF0aWNfbGVuKSk7CisgICAgICAgIC8qIEF0IHRoaXMgcG9pbnQsIG9wdF9sZW4gYW5kIHN0YXRpY19sZW4gYXJlIHRoZSB0b3RhbCBiaXQgbGVuZ3RocyBvZgorICAgICAgICAgKiB0aGUgY29tcHJlc3NlZCBibG9jayBkYXRhLCBleGNsdWRpbmcgdGhlIHRyZWUgcmVwcmVzZW50YXRpb25zLgorICAgICAgICAgKi8KKworICAgICAgICAvKiBCdWlsZCB0aGUgYml0IGxlbmd0aCB0cmVlIGZvciB0aGUgYWJvdmUgdHdvIHRyZWVzLCBhbmQgZ2V0IHRoZSBpbmRleAorICAgICAgICAgKiBpbiBibF9vcmRlciBvZiB0aGUgbGFzdCBiaXQgbGVuZ3RoIGNvZGUgdG8gc2VuZC4KKyAgICAgICAgICovCisgICAgICAgIG1heF9ibGluZGV4ID0gYnVpbGRfYmxfdHJlZShzKTsKKworICAgICAgICAvKiBEZXRlcm1pbmUgdGhlIGJlc3QgZW5jb2RpbmcuIENvbXB1dGUgdGhlIGJsb2NrIGxlbmd0aHMgaW4gYnl0ZXMuICovCisgICAgICAgIG9wdF9sZW5iID0gKHMtPm9wdF9sZW4rMys3KT4+MzsKKyAgICAgICAgc3RhdGljX2xlbmIgPSAocy0+c3RhdGljX2xlbiszKzcpPj4zOworCisgICAgICAgIFRyYWNldigoc3RkZXJyLCAiXG5vcHQgJWx1KCVsdSkgc3RhdCAlbHUoJWx1KSBzdG9yZWQgJWx1IGxpdCAldSAiLAorICAgICAgICAgICAgICAgIG9wdF9sZW5iLCBzLT5vcHRfbGVuLCBzdGF0aWNfbGVuYiwgcy0+c3RhdGljX2xlbiwgc3RvcmVkX2xlbiwKKyAgICAgICAgICAgICAgICBzLT5zeW1fbmV4dCAvIDMpKTsKKworICAgICAgICBpZiAoc3RhdGljX2xlbmIgPD0gb3B0X2xlbmIpIG9wdF9sZW5iID0gc3RhdGljX2xlbmI7CisKKyAgICB9IGVsc2UgeworICAgICAgICBBc3NlcnQoYnVmICE9IChjaGFyKikwLCAibG9zdCBidWYiKTsKKyAgICAgICAgb3B0X2xlbmIgPSBzdGF0aWNfbGVuYiA9IHN0b3JlZF9sZW4gKyA1OyAvKiBmb3JjZSBhIHN0b3JlZCBibG9jayAqLworICAgIH0KKworI2lmZGVmIEZPUkNFX1NUT1JFRAorICAgIGlmIChidWYgIT0gKGNoYXIqKTApIHsgLyogZm9yY2Ugc3RvcmVkIGJsb2NrICovCisjZWxzZQorICAgIGlmIChzdG9yZWRfbGVuKzQgPD0gb3B0X2xlbmIgJiYgYnVmICE9IChjaGFyKikwKSB7CisgICAgICAgICAgICAgICAgICAgICAgIC8qIDQ6IHR3byB3b3JkcyBmb3IgdGhlIGxlbmd0aHMgKi8KKyNlbmRpZgorICAgICAgICAvKiBUaGUgdGVzdCBidWYgIT0gTlVMTCBpcyBvbmx5IG5lY2Vzc2FyeSBpZiBMSVRfQlVGU0laRSA+IFdTSVpFLgorICAgICAgICAgKiBPdGhlcndpc2Ugd2UgY2FuJ3QgaGF2ZSBwcm9jZXNzZWQgbW9yZSB0aGFuIFdTSVpFIGlucHV0IGJ5dGVzIHNpbmNlCisgICAgICAgICAqIHRoZSBsYXN0IGJsb2NrIGZsdXNoLCBiZWNhdXNlIGNvbXByZXNzaW9uIHdvdWxkIGhhdmUgYmVlbgorICAgICAgICAgKiBzdWNjZXNzZnVsLiBJZiBMSVRfQlVGU0laRSA8PSBXU0laRSwgaXQgaXMgbmV2ZXIgdG9vIGxhdGUgdG8KKyAgICAgICAgICogdHJhbnNmb3JtIGEgYmxvY2sgaW50byBhIHN0b3JlZCBibG9jay4KKyAgICAgICAgICovCisgICAgICAgIF90cl9zdG9yZWRfYmxvY2socywgYnVmLCBzdG9yZWRfbGVuLCBsYXN0KTsKKworI2lmZGVmIEZPUkNFX1NUQVRJQworICAgIH0gZWxzZSBpZiAoc3RhdGljX2xlbmIgPj0gMCkgeyAvKiBmb3JjZSBzdGF0aWMgdHJlZXMgKi8KKyNlbHNlCisgICAgfSBlbHNlIGlmIChzLT5zdHJhdGVneSA9PSBaX0ZJWEVEIHx8IHN0YXRpY19sZW5iID09IG9wdF9sZW5iKSB7CisjZW5kaWYKKyAgICAgICAgc2VuZF9iaXRzKHMsIChTVEFUSUNfVFJFRVM8PDEpK2xhc3QsIDMpOworICAgICAgICBjb21wcmVzc19ibG9jayhzLCAoY29uc3QgY3RfZGF0YSAqKXN0YXRpY19sdHJlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGN0X2RhdGEgKilzdGF0aWNfZHRyZWUpOworI2lmZGVmIFpMSUJfREVCVUcKKyAgICAgICAgcy0+Y29tcHJlc3NlZF9sZW4gKz0gMyArIHMtPnN0YXRpY19sZW47CisjZW5kaWYKKyAgICB9IGVsc2UgeworICAgICAgICBzZW5kX2JpdHMocywgKERZTl9UUkVFUzw8MSkrbGFzdCwgMyk7CisgICAgICAgIHNlbmRfYWxsX3RyZWVzKHMsIHMtPmxfZGVzYy5tYXhfY29kZSsxLCBzLT5kX2Rlc2MubWF4X2NvZGUrMSwKKyAgICAgICAgICAgICAgICAgICAgICAgbWF4X2JsaW5kZXgrMSk7CisgICAgICAgIGNvbXByZXNzX2Jsb2NrKHMsIChjb25zdCBjdF9kYXRhICopcy0+ZHluX2x0cmVlLAorICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgY3RfZGF0YSAqKXMtPmR5bl9kdHJlZSk7CisjaWZkZWYgWkxJQl9ERUJVRworICAgICAgICBzLT5jb21wcmVzc2VkX2xlbiArPSAzICsgcy0+b3B0X2xlbjsKKyNlbmRpZgorICAgIH0KKyAgICBBc3NlcnQgKHMtPmNvbXByZXNzZWRfbGVuID09IHMtPmJpdHNfc2VudCwgImJhZCBjb21wcmVzc2VkIHNpemUiKTsKKyAgICAvKiBUaGUgYWJvdmUgY2hlY2sgaXMgbWFkZSBtb2QgMl4zMiwgZm9yIGZpbGVzIGxhcmdlciB0aGFuIDUxMiBNQgorICAgICAqIGFuZCB1TG9uZyBpbXBsZW1lbnRlZCBvbiAzMiBiaXRzLgorICAgICAqLworICAgIGluaXRfYmxvY2socyk7CisKKyAgICBpZiAobGFzdCkgeworICAgICAgICBiaV93aW5kdXAocyk7CisjaWZkZWYgWkxJQl9ERUJVRworICAgICAgICBzLT5jb21wcmVzc2VkX2xlbiArPSA3OyAgLyogYWxpZ24gb24gYnl0ZSBib3VuZGFyeSAqLworI2VuZGlmCisgICAgfQorICAgIFRyYWNldigoc3RkZXJyLCJcbmNvbXBybGVuICVsdSglbHUpICIsIHMtPmNvbXByZXNzZWRfbGVuPj4zLAorICAgICAgICAgICBzLT5jb21wcmVzc2VkX2xlbi03Kmxhc3QpKTsKK30KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBTYXZlIHRoZSBtYXRjaCBpbmZvIGFuZCB0YWxseSB0aGUgZnJlcXVlbmN5IGNvdW50cy4gUmV0dXJuIHRydWUgaWYKKyAqIHRoZSBjdXJyZW50IGJsb2NrIG11c3QgYmUgZmx1c2hlZC4KKyAqLworaW50IFpMSUJfSU5URVJOQUwgX3RyX3RhbGx5IChzLCBkaXN0LCBsYykKKyAgICBkZWZsYXRlX3N0YXRlICpzOworICAgIHVuc2lnbmVkIGRpc3Q7ICAvKiBkaXN0YW5jZSBvZiBtYXRjaGVkIHN0cmluZyAqLworICAgIHVuc2lnbmVkIGxjOyAgICAvKiBtYXRjaCBsZW5ndGgtTUlOX01BVENIIG9yIHVubWF0Y2hlZCBjaGFyIChpZiBkaXN0PT0wKSAqLworeworICAgIHMtPnN5bV9idWZbcy0+c3ltX25leHQrK10gPSBkaXN0OworICAgIHMtPnN5bV9idWZbcy0+c3ltX25leHQrK10gPSBkaXN0ID4+IDg7CisgICAgcy0+c3ltX2J1ZltzLT5zeW1fbmV4dCsrXSA9IGxjOworICAgIGlmIChkaXN0ID09IDApIHsKKyAgICAgICAgLyogbGMgaXMgdGhlIHVubWF0Y2hlZCBjaGFyICovCisgICAgICAgIHMtPmR5bl9sdHJlZVtsY10uRnJlcSsrOworICAgIH0gZWxzZSB7CisgICAgICAgIHMtPm1hdGNoZXMrKzsKKyAgICAgICAgLyogSGVyZSwgbGMgaXMgdGhlIG1hdGNoIGxlbmd0aCAtIE1JTl9NQVRDSCAqLworICAgICAgICBkaXN0LS07ICAgICAgICAgICAgIC8qIGRpc3QgPSBtYXRjaCBkaXN0YW5jZSAtIDEgKi8KKyAgICAgICAgQXNzZXJ0KCh1c2gpZGlzdCA8ICh1c2gpTUFYX0RJU1QocykgJiYKKyAgICAgICAgICAgICAgICh1c2gpbGMgPD0gKHVzaCkoTUFYX01BVENILU1JTl9NQVRDSCkgJiYKKyAgICAgICAgICAgICAgICh1c2gpZF9jb2RlKGRpc3QpIDwgKHVzaClEX0NPREVTLCAgIl90cl90YWxseTogYmFkIG1hdGNoIik7CisKKyAgICAgICAgcy0+ZHluX2x0cmVlW19sZW5ndGhfY29kZVtsY10rTElURVJBTFMrMV0uRnJlcSsrOworICAgICAgICBzLT5keW5fZHRyZWVbZF9jb2RlKGRpc3QpXS5GcmVxKys7CisgICAgfQorICAgIHJldHVybiAocy0+c3ltX25leHQgPT0gcy0+c3ltX2VuZCk7Cit9CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogU2VuZCB0aGUgYmxvY2sgZGF0YSBjb21wcmVzc2VkIHVzaW5nIHRoZSBnaXZlbiBIdWZmbWFuIHRyZWVzCisgKi8KK2xvY2FsIHZvaWQgY29tcHJlc3NfYmxvY2socywgbHRyZWUsIGR0cmVlKQorICAgIGRlZmxhdGVfc3RhdGUgKnM7CisgICAgY29uc3QgY3RfZGF0YSAqbHRyZWU7IC8qIGxpdGVyYWwgdHJlZSAqLworICAgIGNvbnN0IGN0X2RhdGEgKmR0cmVlOyAvKiBkaXN0YW5jZSB0cmVlICovCit7CisgICAgdW5zaWduZWQgZGlzdDsgICAgICAvKiBkaXN0YW5jZSBvZiBtYXRjaGVkIHN0cmluZyAqLworICAgIGludCBsYzsgICAgICAgICAgICAgLyogbWF0Y2ggbGVuZ3RoIG9yIHVubWF0Y2hlZCBjaGFyIChpZiBkaXN0ID09IDApICovCisgICAgdW5zaWduZWQgc3ggPSAwOyAgICAvKiBydW5uaW5nIGluZGV4IGluIHN5bV9idWYgKi8KKyAgICB1bnNpZ25lZCBjb2RlOyAgICAgIC8qIHRoZSBjb2RlIHRvIHNlbmQgKi8KKyAgICBpbnQgZXh0cmE7ICAgICAgICAgIC8qIG51bWJlciBvZiBleHRyYSBiaXRzIHRvIHNlbmQgKi8KKworICAgIGlmIChzLT5zeW1fbmV4dCAhPSAwKSBkbyB7CisgICAgICAgIGRpc3QgPSBzLT5zeW1fYnVmW3N4KytdICYgMHhmZjsKKyAgICAgICAgZGlzdCArPSAodW5zaWduZWQpKHMtPnN5bV9idWZbc3grK10gJiAweGZmKSA8PCA4OworICAgICAgICBsYyA9IHMtPnN5bV9idWZbc3grK107CisgICAgICAgIGlmIChkaXN0ID09IDApIHsKKyAgICAgICAgICAgIHNlbmRfY29kZShzLCBsYywgbHRyZWUpOyAvKiBzZW5kIGEgbGl0ZXJhbCBieXRlICovCisgICAgICAgICAgICBUcmFjZWN2KGlzZ3JhcGgobGMpLCAoc3RkZXJyLCIgJyVjJyAiLCBsYykpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyogSGVyZSwgbGMgaXMgdGhlIG1hdGNoIGxlbmd0aCAtIE1JTl9NQVRDSCAqLworICAgICAgICAgICAgY29kZSA9IF9sZW5ndGhfY29kZVtsY107CisgICAgICAgICAgICBzZW5kX2NvZGUocywgY29kZStMSVRFUkFMUysxLCBsdHJlZSk7IC8qIHNlbmQgdGhlIGxlbmd0aCBjb2RlICovCisgICAgICAgICAgICBleHRyYSA9IGV4dHJhX2xiaXRzW2NvZGVdOworICAgICAgICAgICAgaWYgKGV4dHJhICE9IDApIHsKKyAgICAgICAgICAgICAgICBsYyAtPSBiYXNlX2xlbmd0aFtjb2RlXTsKKyAgICAgICAgICAgICAgICBzZW5kX2JpdHMocywgbGMsIGV4dHJhKTsgICAgICAgLyogc2VuZCB0aGUgZXh0cmEgbGVuZ3RoIGJpdHMgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRpc3QtLTsgLyogZGlzdCBpcyBub3cgdGhlIG1hdGNoIGRpc3RhbmNlIC0gMSAqLworICAgICAgICAgICAgY29kZSA9IGRfY29kZShkaXN0KTsKKyAgICAgICAgICAgIEFzc2VydCAoY29kZSA8IERfQ09ERVMsICJiYWQgZF9jb2RlIik7CisKKyAgICAgICAgICAgIHNlbmRfY29kZShzLCBjb2RlLCBkdHJlZSk7ICAgICAgIC8qIHNlbmQgdGhlIGRpc3RhbmNlIGNvZGUgKi8KKyAgICAgICAgICAgIGV4dHJhID0gZXh0cmFfZGJpdHNbY29kZV07CisgICAgICAgICAgICBpZiAoZXh0cmEgIT0gMCkgeworICAgICAgICAgICAgICAgIGRpc3QgLT0gKHVuc2lnbmVkKWJhc2VfZGlzdFtjb2RlXTsKKyAgICAgICAgICAgICAgICBzZW5kX2JpdHMocywgZGlzdCwgZXh0cmEpOyAgIC8qIHNlbmQgdGhlIGV4dHJhIGRpc3RhbmNlIGJpdHMgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSAvKiBsaXRlcmFsIG9yIG1hdGNoIHBhaXIgPyAqLworCisgICAgICAgIC8qIENoZWNrIHRoYXQgdGhlIG92ZXJsYXkgYmV0d2VlbiBwZW5kaW5nX2J1ZiBhbmQgc3ltX2J1ZiBpcyBvazogKi8KKyAgICAgICAgQXNzZXJ0KHMtPnBlbmRpbmcgPCBzLT5saXRfYnVmc2l6ZSArIHN4LCAicGVuZGluZ0J1ZiBvdmVyZmxvdyIpOworCisgICAgfSB3aGlsZSAoc3ggPCBzLT5zeW1fbmV4dCk7CisKKyAgICBzZW5kX2NvZGUocywgRU5EX0JMT0NLLCBsdHJlZSk7Cit9CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ2hlY2sgaWYgdGhlIGRhdGEgdHlwZSBpcyBURVhUIG9yIEJJTkFSWSwgdXNpbmcgdGhlIGZvbGxvd2luZyBhbGdvcml0aG06CisgKiAtIFRFWFQgaWYgdGhlIHR3byBjb25kaXRpb25zIGJlbG93IGFyZSBzYXRpc2ZpZWQ6CisgKiAgICBhKSBUaGVyZSBhcmUgbm8gbm9uLXBvcnRhYmxlIGNvbnRyb2wgY2hhcmFjdGVycyBiZWxvbmdpbmcgdG8gdGhlCisgKiAgICAgICAiYmxvY2sgbGlzdCIgKDAuLjYsIDE0Li4yNSwgMjguLjMxKS4KKyAqICAgIGIpIFRoZXJlIGlzIGF0IGxlYXN0IG9uZSBwcmludGFibGUgY2hhcmFjdGVyIGJlbG9uZ2luZyB0byB0aGUKKyAqICAgICAgICJhbGxvdyBsaXN0IiAoOSB7VEFCfSwgMTAge0xGfSwgMTMge0NSfSwgMzIuLjI1NSkuCisgKiAtIEJJTkFSWSBvdGhlcndpc2UuCisgKiAtIFRoZSBmb2xsb3dpbmcgcGFydGlhbGx5LXBvcnRhYmxlIGNvbnRyb2wgY2hhcmFjdGVycyBmb3JtIGEKKyAqICAgImdyYXkgbGlzdCIgdGhhdCBpcyBpZ25vcmVkIGluIHRoaXMgZGV0ZWN0aW9uIGFsZ29yaXRobToKKyAqICAgKDcge0JFTH0sIDgge0JTfSwgMTEge1ZUfSwgMTIge0ZGfSwgMjYge1NVQn0sIDI3IHtFU0N9KS4KKyAqIElOIGFzc2VydGlvbjogdGhlIGZpZWxkcyBGcmVxIG9mIGR5bl9sdHJlZSBhcmUgc2V0LgorICovCitsb2NhbCBpbnQgZGV0ZWN0X2RhdGFfdHlwZShzKQorICAgIGRlZmxhdGVfc3RhdGUgKnM7Cit7CisgICAgLyogYmxvY2tfbWFzayBpcyB0aGUgYml0IG1hc2sgb2YgYmxvY2stbGlzdGVkIGJ5dGVzCisgICAgICogc2V0IGJpdHMgMC4uNiwgMTQuLjI1LCBhbmQgMjguLjMxCisgICAgICogMHhmM2ZmYzA3ZiA9IGJpbmFyeSAxMTExMDAxMTExMTExMTExMTEwMDAwMDAwMTExMTExMQorICAgICAqLworICAgIHVuc2lnbmVkIGxvbmcgYmxvY2tfbWFzayA9IDB4ZjNmZmMwN2ZVTDsKKyAgICBpbnQgbjsKKworICAgIC8qIENoZWNrIGZvciBub24tdGV4dHVhbCAoImJsb2NrLWxpc3RlZCIpIGJ5dGVzLiAqLworICAgIGZvciAobiA9IDA7IG4gPD0gMzE7IG4rKywgYmxvY2tfbWFzayA+Pj0gMSkKKyAgICAgICAgaWYgKChibG9ja19tYXNrICYgMSkgJiYgKHMtPmR5bl9sdHJlZVtuXS5GcmVxICE9IDApKQorICAgICAgICAgICAgcmV0dXJuIFpfQklOQVJZOworCisgICAgLyogQ2hlY2sgZm9yIHRleHR1YWwgKCJhbGxvdy1saXN0ZWQiKSBieXRlcy4gKi8KKyAgICBpZiAocy0+ZHluX2x0cmVlWzldLkZyZXEgIT0gMCB8fCBzLT5keW5fbHRyZWVbMTBdLkZyZXEgIT0gMAorICAgICAgICAgICAgfHwgcy0+ZHluX2x0cmVlWzEzXS5GcmVxICE9IDApCisgICAgICAgIHJldHVybiBaX1RFWFQ7CisgICAgZm9yIChuID0gMzI7IG4gPCBMSVRFUkFMUzsgbisrKQorICAgICAgICBpZiAocy0+ZHluX2x0cmVlW25dLkZyZXEgIT0gMCkKKyAgICAgICAgICAgIHJldHVybiBaX1RFWFQ7CisKKyAgICAvKiBUaGVyZSBhcmUgbm8gImJsb2NrLWxpc3RlZCIgb3IgImFsbG93LWxpc3RlZCIgYnl0ZXM6CisgICAgICogdGhpcyBzdHJlYW0gZWl0aGVyIGlzIGVtcHR5IG9yIGhhcyB0b2xlcmF0ZWQgKCJncmF5LWxpc3RlZCIpIGJ5dGVzIG9ubHkuCisgICAgICovCisgICAgcmV0dXJuIFpfQklOQVJZOworfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIFJldmVyc2UgdGhlIGZpcnN0IGxlbiBiaXRzIG9mIGEgY29kZSwgdXNpbmcgc3RyYWlnaHRmb3J3YXJkIGNvZGUgKGEgZmFzdGVyCisgKiBtZXRob2Qgd291bGQgdXNlIGEgdGFibGUpCisgKiBJTiBhc3NlcnRpb246IDEgPD0gbGVuIDw9IDE1CisgKi8KK2xvY2FsIHVuc2lnbmVkIGJpX3JldmVyc2UoY29kZSwgbGVuKQorICAgIHVuc2lnbmVkIGNvZGU7IC8qIHRoZSB2YWx1ZSB0byBpbnZlcnQgKi8KKyAgICBpbnQgbGVuOyAgICAgICAvKiBpdHMgYml0IGxlbmd0aCAqLworeworICAgIHJlZ2lzdGVyIHVuc2lnbmVkIHJlcyA9IDA7CisgICAgZG8geworICAgICAgICByZXMgfD0gY29kZSAmIDE7CisgICAgICAgIGNvZGUgPj49IDEsIHJlcyA8PD0gMTsKKyAgICB9IHdoaWxlICgtLWxlbiA+IDApOworICAgIHJldHVybiByZXMgPj4gMTsKK30KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBGbHVzaCB0aGUgYml0IGJ1ZmZlciwga2VlcGluZyBhdCBtb3N0IDcgYml0cyBpbiBpdC4KKyAqLworbG9jYWwgdm9pZCBiaV9mbHVzaChzKQorICAgIGRlZmxhdGVfc3RhdGUgKnM7Cit7CisgICAgaWYgKHMtPmJpX3ZhbGlkID09IDE2KSB7CisgICAgICAgIHB1dF9zaG9ydChzLCBzLT5iaV9idWYpOworICAgICAgICBzLT5iaV9idWYgPSAwOworICAgICAgICBzLT5iaV92YWxpZCA9IDA7CisgICAgfSBlbHNlIGlmIChzLT5iaV92YWxpZCA+PSA4KSB7CisgICAgICAgIHB1dF9ieXRlKHMsIChCeXRlKXMtPmJpX2J1Zik7CisgICAgICAgIHMtPmJpX2J1ZiA+Pj0gODsKKyAgICAgICAgcy0+YmlfdmFsaWQgLT0gODsKKyAgICB9Cit9CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogRmx1c2ggdGhlIGJpdCBidWZmZXIgYW5kIGFsaWduIHRoZSBvdXRwdXQgb24gYSBieXRlIGJvdW5kYXJ5CisgKi8KK2xvY2FsIHZvaWQgYmlfd2luZHVwKHMpCisgICAgZGVmbGF0ZV9zdGF0ZSAqczsKK3sKKyAgICBpZiAocy0+YmlfdmFsaWQgPiA4KSB7CisgICAgICAgIHB1dF9zaG9ydChzLCBzLT5iaV9idWYpOworICAgIH0gZWxzZSBpZiAocy0+YmlfdmFsaWQgPiAwKSB7CisgICAgICAgIHB1dF9ieXRlKHMsIChCeXRlKXMtPmJpX2J1Zik7CisgICAgfQorICAgIHMtPmJpX2J1ZiA9IDA7CisgICAgcy0+YmlfdmFsaWQgPSAwOworI2lmZGVmIFpMSUJfREVCVUcKKyAgICBzLT5iaXRzX3NlbnQgPSAocy0+Yml0c19zZW50KzcpICYgfjc7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL3NyYy90cmVlcy5oIGIvc3JjL3RyZWVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM1NjM5ZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90cmVlcy5oCkBAIC0wLDAgKzEsMTI4IEBACisvKiBoZWFkZXIgY3JlYXRlZCBhdXRvbWF0aWNhbGx5IHdpdGggLURHRU5fVFJFRVNfSCAqLworCitsb2NhbCBjb25zdCBjdF9kYXRhIHN0YXRpY19sdHJlZVtMX0NPREVTKzJdID0gewore3sgMTJ9LHsgIDh9fSwge3sxNDB9LHsgIDh9fSwge3sgNzZ9LHsgIDh9fSwge3syMDR9LHsgIDh9fSwge3sgNDR9LHsgIDh9fSwKK3t7MTcyfSx7ICA4fX0sIHt7MTA4fSx7ICA4fX0sIHt7MjM2fSx7ICA4fX0sIHt7IDI4fSx7ICA4fX0sIHt7MTU2fSx7ICA4fX0sCit7eyA5Mn0seyAgOH19LCB7ezIyMH0seyAgOH19LCB7eyA2MH0seyAgOH19LCB7ezE4OH0seyAgOH19LCB7ezEyNH0seyAgOH19LAore3syNTJ9LHsgIDh9fSwge3sgIDJ9LHsgIDh9fSwge3sxMzB9LHsgIDh9fSwge3sgNjZ9LHsgIDh9fSwge3sxOTR9LHsgIDh9fSwKK3t7IDM0fSx7ICA4fX0sIHt7MTYyfSx7ICA4fX0sIHt7IDk4fSx7ICA4fX0sIHt7MjI2fSx7ICA4fX0sIHt7IDE4fSx7ICA4fX0sCit7ezE0Nn0seyAgOH19LCB7eyA4Mn0seyAgOH19LCB7ezIxMH0seyAgOH19LCB7eyA1MH0seyAgOH19LCB7ezE3OH0seyAgOH19LAore3sxMTR9LHsgIDh9fSwge3syNDJ9LHsgIDh9fSwge3sgMTB9LHsgIDh9fSwge3sxMzh9LHsgIDh9fSwge3sgNzR9LHsgIDh9fSwKK3t7MjAyfSx7ICA4fX0sIHt7IDQyfSx7ICA4fX0sIHt7MTcwfSx7ICA4fX0sIHt7MTA2fSx7ICA4fX0sIHt7MjM0fSx7ICA4fX0sCit7eyAyNn0seyAgOH19LCB7ezE1NH0seyAgOH19LCB7eyA5MH0seyAgOH19LCB7ezIxOH0seyAgOH19LCB7eyA1OH0seyAgOH19LAore3sxODZ9LHsgIDh9fSwge3sxMjJ9LHsgIDh9fSwge3syNTB9LHsgIDh9fSwge3sgIDZ9LHsgIDh9fSwge3sxMzR9LHsgIDh9fSwKK3t7IDcwfSx7ICA4fX0sIHt7MTk4fSx7ICA4fX0sIHt7IDM4fSx7ICA4fX0sIHt7MTY2fSx7ICA4fX0sIHt7MTAyfSx7ICA4fX0sCit7ezIzMH0seyAgOH19LCB7eyAyMn0seyAgOH19LCB7ezE1MH0seyAgOH19LCB7eyA4Nn0seyAgOH19LCB7ezIxNH0seyAgOH19LAore3sgNTR9LHsgIDh9fSwge3sxODJ9LHsgIDh9fSwge3sxMTh9LHsgIDh9fSwge3syNDZ9LHsgIDh9fSwge3sgMTR9LHsgIDh9fSwKK3t7MTQyfSx7ICA4fX0sIHt7IDc4fSx7ICA4fX0sIHt7MjA2fSx7ICA4fX0sIHt7IDQ2fSx7ICA4fX0sIHt7MTc0fSx7ICA4fX0sCit7ezExMH0seyAgOH19LCB7ezIzOH0seyAgOH19LCB7eyAzMH0seyAgOH19LCB7ezE1OH0seyAgOH19LCB7eyA5NH0seyAgOH19LAore3syMjJ9LHsgIDh9fSwge3sgNjJ9LHsgIDh9fSwge3sxOTB9LHsgIDh9fSwge3sxMjZ9LHsgIDh9fSwge3syNTR9LHsgIDh9fSwKK3t7ICAxfSx7ICA4fX0sIHt7MTI5fSx7ICA4fX0sIHt7IDY1fSx7ICA4fX0sIHt7MTkzfSx7ICA4fX0sIHt7IDMzfSx7ICA4fX0sCit7ezE2MX0seyAgOH19LCB7eyA5N30seyAgOH19LCB7ezIyNX0seyAgOH19LCB7eyAxN30seyAgOH19LCB7ezE0NX0seyAgOH19LAore3sgODF9LHsgIDh9fSwge3syMDl9LHsgIDh9fSwge3sgNDl9LHsgIDh9fSwge3sxNzd9LHsgIDh9fSwge3sxMTN9LHsgIDh9fSwKK3t7MjQxfSx7ICA4fX0sIHt7ICA5fSx7ICA4fX0sIHt7MTM3fSx7ICA4fX0sIHt7IDczfSx7ICA4fX0sIHt7MjAxfSx7ICA4fX0sCit7eyA0MX0seyAgOH19LCB7ezE2OX0seyAgOH19LCB7ezEwNX0seyAgOH19LCB7ezIzM30seyAgOH19LCB7eyAyNX0seyAgOH19LAore3sxNTN9LHsgIDh9fSwge3sgODl9LHsgIDh9fSwge3syMTd9LHsgIDh9fSwge3sgNTd9LHsgIDh9fSwge3sxODV9LHsgIDh9fSwKK3t7MTIxfSx7ICA4fX0sIHt7MjQ5fSx7ICA4fX0sIHt7ICA1fSx7ICA4fX0sIHt7MTMzfSx7ICA4fX0sIHt7IDY5fSx7ICA4fX0sCit7ezE5N30seyAgOH19LCB7eyAzN30seyAgOH19LCB7ezE2NX0seyAgOH19LCB7ezEwMX0seyAgOH19LCB7ezIyOX0seyAgOH19LAore3sgMjF9LHsgIDh9fSwge3sxNDl9LHsgIDh9fSwge3sgODV9LHsgIDh9fSwge3syMTN9LHsgIDh9fSwge3sgNTN9LHsgIDh9fSwKK3t7MTgxfSx7ICA4fX0sIHt7MTE3fSx7ICA4fX0sIHt7MjQ1fSx7ICA4fX0sIHt7IDEzfSx7ICA4fX0sIHt7MTQxfSx7ICA4fX0sCit7eyA3N30seyAgOH19LCB7ezIwNX0seyAgOH19LCB7eyA0NX0seyAgOH19LCB7ezE3M30seyAgOH19LCB7ezEwOX0seyAgOH19LAore3syMzd9LHsgIDh9fSwge3sgMjl9LHsgIDh9fSwge3sxNTd9LHsgIDh9fSwge3sgOTN9LHsgIDh9fSwge3syMjF9LHsgIDh9fSwKK3t7IDYxfSx7ICA4fX0sIHt7MTg5fSx7ICA4fX0sIHt7MTI1fSx7ICA4fX0sIHt7MjUzfSx7ICA4fX0sIHt7IDE5fSx7ICA5fX0sCit7ezI3NX0seyAgOX19LCB7ezE0N30seyAgOX19LCB7ezQwM30seyAgOX19LCB7eyA4M30seyAgOX19LCB7ezMzOX0seyAgOX19LAore3syMTF9LHsgIDl9fSwge3s0Njd9LHsgIDl9fSwge3sgNTF9LHsgIDl9fSwge3szMDd9LHsgIDl9fSwge3sxNzl9LHsgIDl9fSwKK3t7NDM1fSx7ICA5fX0sIHt7MTE1fSx7ICA5fX0sIHt7MzcxfSx7ICA5fX0sIHt7MjQzfSx7ICA5fX0sIHt7NDk5fSx7ICA5fX0sCit7eyAxMX0seyAgOX19LCB7ezI2N30seyAgOX19LCB7ezEzOX0seyAgOX19LCB7ezM5NX0seyAgOX19LCB7eyA3NX0seyAgOX19LAore3szMzF9LHsgIDl9fSwge3syMDN9LHsgIDl9fSwge3s0NTl9LHsgIDl9fSwge3sgNDN9LHsgIDl9fSwge3syOTl9LHsgIDl9fSwKK3t7MTcxfSx7ICA5fX0sIHt7NDI3fSx7ICA5fX0sIHt7MTA3fSx7ICA5fX0sIHt7MzYzfSx7ICA5fX0sIHt7MjM1fSx7ICA5fX0sCit7ezQ5MX0seyAgOX19LCB7eyAyN30seyAgOX19LCB7ezI4M30seyAgOX19LCB7ezE1NX0seyAgOX19LCB7ezQxMX0seyAgOX19LAore3sgOTF9LHsgIDl9fSwge3szNDd9LHsgIDl9fSwge3syMTl9LHsgIDl9fSwge3s0NzV9LHsgIDl9fSwge3sgNTl9LHsgIDl9fSwKK3t7MzE1fSx7ICA5fX0sIHt7MTg3fSx7ICA5fX0sIHt7NDQzfSx7ICA5fX0sIHt7MTIzfSx7ICA5fX0sIHt7Mzc5fSx7ICA5fX0sCit7ezI1MX0seyAgOX19LCB7ezUwN30seyAgOX19LCB7eyAgN30seyAgOX19LCB7ezI2M30seyAgOX19LCB7ezEzNX0seyAgOX19LAore3szOTF9LHsgIDl9fSwge3sgNzF9LHsgIDl9fSwge3szMjd9LHsgIDl9fSwge3sxOTl9LHsgIDl9fSwge3s0NTV9LHsgIDl9fSwKK3t7IDM5fSx7ICA5fX0sIHt7Mjk1fSx7ICA5fX0sIHt7MTY3fSx7ICA5fX0sIHt7NDIzfSx7ICA5fX0sIHt7MTAzfSx7ICA5fX0sCit7ezM1OX0seyAgOX19LCB7ezIzMX0seyAgOX19LCB7ezQ4N30seyAgOX19LCB7eyAyM30seyAgOX19LCB7ezI3OX0seyAgOX19LAore3sxNTF9LHsgIDl9fSwge3s0MDd9LHsgIDl9fSwge3sgODd9LHsgIDl9fSwge3szNDN9LHsgIDl9fSwge3syMTV9LHsgIDl9fSwKK3t7NDcxfSx7ICA5fX0sIHt7IDU1fSx7ICA5fX0sIHt7MzExfSx7ICA5fX0sIHt7MTgzfSx7ICA5fX0sIHt7NDM5fSx7ICA5fX0sCit7ezExOX0seyAgOX19LCB7ezM3NX0seyAgOX19LCB7ezI0N30seyAgOX19LCB7ezUwM30seyAgOX19LCB7eyAxNX0seyAgOX19LAore3syNzF9LHsgIDl9fSwge3sxNDN9LHsgIDl9fSwge3szOTl9LHsgIDl9fSwge3sgNzl9LHsgIDl9fSwge3szMzV9LHsgIDl9fSwKK3t7MjA3fSx7ICA5fX0sIHt7NDYzfSx7ICA5fX0sIHt7IDQ3fSx7ICA5fX0sIHt7MzAzfSx7ICA5fX0sIHt7MTc1fSx7ICA5fX0sCit7ezQzMX0seyAgOX19LCB7ezExMX0seyAgOX19LCB7ezM2N30seyAgOX19LCB7ezIzOX0seyAgOX19LCB7ezQ5NX0seyAgOX19LAore3sgMzF9LHsgIDl9fSwge3syODd9LHsgIDl9fSwge3sxNTl9LHsgIDl9fSwge3s0MTV9LHsgIDl9fSwge3sgOTV9LHsgIDl9fSwKK3t7MzUxfSx7ICA5fX0sIHt7MjIzfSx7ICA5fX0sIHt7NDc5fSx7ICA5fX0sIHt7IDYzfSx7ICA5fX0sIHt7MzE5fSx7ICA5fX0sCit7ezE5MX0seyAgOX19LCB7ezQ0N30seyAgOX19LCB7ezEyN30seyAgOX19LCB7ezM4M30seyAgOX19LCB7ezI1NX0seyAgOX19LAore3s1MTF9LHsgIDl9fSwge3sgIDB9LHsgIDd9fSwge3sgNjR9LHsgIDd9fSwge3sgMzJ9LHsgIDd9fSwge3sgOTZ9LHsgIDd9fSwKK3t7IDE2fSx7ICA3fX0sIHt7IDgwfSx7ICA3fX0sIHt7IDQ4fSx7ICA3fX0sIHt7MTEyfSx7ICA3fX0sIHt7ICA4fSx7ICA3fX0sCit7eyA3Mn0seyAgN319LCB7eyA0MH0seyAgN319LCB7ezEwNH0seyAgN319LCB7eyAyNH0seyAgN319LCB7eyA4OH0seyAgN319LAore3sgNTZ9LHsgIDd9fSwge3sxMjB9LHsgIDd9fSwge3sgIDR9LHsgIDd9fSwge3sgNjh9LHsgIDd9fSwge3sgMzZ9LHsgIDd9fSwKK3t7MTAwfSx7ICA3fX0sIHt7IDIwfSx7ICA3fX0sIHt7IDg0fSx7ICA3fX0sIHt7IDUyfSx7ICA3fX0sIHt7MTE2fSx7ICA3fX0sCit7eyAgM30seyAgOH19LCB7ezEzMX0seyAgOH19LCB7eyA2N30seyAgOH19LCB7ezE5NX0seyAgOH19LCB7eyAzNX0seyAgOH19LAore3sxNjN9LHsgIDh9fSwge3sgOTl9LHsgIDh9fSwge3syMjd9LHsgIDh9fQorfTsKKworbG9jYWwgY29uc3QgY3RfZGF0YSBzdGF0aWNfZHRyZWVbRF9DT0RFU10gPSB7Cit7eyAwfSx7IDV9fSwge3sxNn0seyA1fX0sIHt7IDh9LHsgNX19LCB7ezI0fSx7IDV9fSwge3sgNH0seyA1fX0sCit7ezIwfSx7IDV9fSwge3sxMn0seyA1fX0sIHt7Mjh9LHsgNX19LCB7eyAyfSx7IDV9fSwge3sxOH0seyA1fX0sCit7ezEwfSx7IDV9fSwge3syNn0seyA1fX0sIHt7IDZ9LHsgNX19LCB7ezIyfSx7IDV9fSwge3sxNH0seyA1fX0sCit7ezMwfSx7IDV9fSwge3sgMX0seyA1fX0sIHt7MTd9LHsgNX19LCB7eyA5fSx7IDV9fSwge3syNX0seyA1fX0sCit7eyA1fSx7IDV9fSwge3syMX0seyA1fX0sIHt7MTN9LHsgNX19LCB7ezI5fSx7IDV9fSwge3sgM30seyA1fX0sCit7ezE5fSx7IDV9fSwge3sxMX0seyA1fX0sIHt7Mjd9LHsgNX19LCB7eyA3fSx7IDV9fSwge3syM30seyA1fX0KK307CisKK2NvbnN0IHVjaCBaTElCX0lOVEVSTkFMIF9kaXN0X2NvZGVbRElTVF9DT0RFX0xFTl0gPSB7CisgMCwgIDEsICAyLCAgMywgIDQsICA0LCAgNSwgIDUsICA2LCAgNiwgIDYsICA2LCAgNywgIDcsICA3LCAgNywgIDgsICA4LCAgOCwgIDgsCisgOCwgIDgsICA4LCAgOCwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsCisxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsCisxMSwgMTEsIDExLCAxMSwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsCisxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTMsIDEzLCAxMywgMTMsCisxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgIDAsICAwLCAxNiwgMTcsCisxOCwgMTgsIDE5LCAxOSwgMjAsIDIwLCAyMCwgMjAsIDIxLCAyMSwgMjEsIDIxLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsCisyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsCisyNCwgMjQsIDI0LCAyNCwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsCisyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsCisyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsCisyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsCisyNywgMjcsIDI3LCAyNywgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsCisyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsCisyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsCisyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI5LCAyOSwgMjksIDI5LCAyOSwgMjksIDI5LCAyOSwgMjksIDI5LCAyOSwgMjksCisyOSwgMjksIDI5LCAyOSwgMjksIDI5LCAyOSwgMjksIDI5LCAyOSwgMjksIDI5LCAyOSwgMjksIDI5LCAyOSwgMjksIDI5LCAyOSwgMjksCisyOSwgMjksIDI5LCAyOSwgMjksIDI5LCAyOSwgMjksIDI5LCAyOSwgMjksIDI5LCAyOSwgMjksIDI5LCAyOSwgMjksIDI5LCAyOSwgMjksCisyOSwgMjksIDI5LCAyOSwgMjksIDI5LCAyOSwgMjksIDI5LCAyOSwgMjksIDI5Cit9OworCitjb25zdCB1Y2ggWkxJQl9JTlRFUk5BTCBfbGVuZ3RoX2NvZGVbTUFYX01BVENILU1JTl9NQVRDSCsxXT0geworIDAsICAxLCAgMiwgIDMsICA0LCAgNSwgIDYsICA3LCAgOCwgIDgsICA5LCAgOSwgMTAsIDEwLCAxMSwgMTEsIDEyLCAxMiwgMTIsIDEyLAorMTMsIDEzLCAxMywgMTMsIDE0LCAxNCwgMTQsIDE0LCAxNSwgMTUsIDE1LCAxNSwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE5LCAxOSwgMTksIDE5LAorMTksIDE5LCAxOSwgMTksIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLAorMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIyLCAyMiwgMjIsIDIyLAorMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLAorMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LAorMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LAorMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LAorMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LAorMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LAorMjYsIDI2LCAyNiwgMjYsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LAorMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjgKK307CisKK2xvY2FsIGNvbnN0IGludCBiYXNlX2xlbmd0aFtMRU5HVEhfQ09ERVNdID0geworMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgMTAsIDEyLCAxNCwgMTYsIDIwLCAyNCwgMjgsIDMyLCA0MCwgNDgsIDU2LAorNjQsIDgwLCA5NiwgMTEyLCAxMjgsIDE2MCwgMTkyLCAyMjQsIDAKK307CisKK2xvY2FsIGNvbnN0IGludCBiYXNlX2Rpc3RbRF9DT0RFU10gPSB7CisgICAgMCwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsICAgICA2LCAgICAgOCwgICAgMTIsICAgIDE2LCAgICAyNCwKKyAgIDMyLCAgICA0OCwgICAgNjQsICAgIDk2LCAgIDEyOCwgICAxOTIsICAgMjU2LCAgIDM4NCwgICA1MTIsICAgNzY4LAorIDEwMjQsICAxNTM2LCAgMjA0OCwgIDMwNzIsICA0MDk2LCAgNjE0NCwgIDgxOTIsIDEyMjg4LCAxNjM4NCwgMjQ1NzYKK307CisKZGlmZiAtLWdpdCBhL3NyYy91bmNvbXByLmMgYi9zcmMvdW5jb21wci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwM2ExYTgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdW5jb21wci5jCkBAIC0wLDAgKzEsOTMgQEAKKy8qIHVuY29tcHIuYyAtLSBkZWNvbXByZXNzIGEgbWVtb3J5IGJ1ZmZlcgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDMsIDIwMTAsIDIwMTQsIDIwMTYgSmVhbi1sb3VwIEdhaWxseSwgTWFyayBBZGxlcgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAorICovCisKKy8qIEAoIykgJElkJCAqLworCisjZGVmaW5lIFpMSUJfSU5URVJOQUwKKyNpbmNsdWRlICJ6bGliLmgiCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgICBEZWNvbXByZXNzZXMgdGhlIHNvdXJjZSBidWZmZXIgaW50byB0aGUgZGVzdGluYXRpb24gYnVmZmVyLiAgKnNvdXJjZUxlbiBpcworICAgdGhlIGJ5dGUgbGVuZ3RoIG9mIHRoZSBzb3VyY2UgYnVmZmVyLiBVcG9uIGVudHJ5LCAqZGVzdExlbiBpcyB0aGUgdG90YWwgc2l6ZQorICAgb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciwgd2hpY2ggbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCB0aGUgZW50aXJlCisgICB1bmNvbXByZXNzZWQgZGF0YS4gKFRoZSBzaXplIG9mIHRoZSB1bmNvbXByZXNzZWQgZGF0YSBtdXN0IGhhdmUgYmVlbiBzYXZlZAorICAgcHJldmlvdXNseSBieSB0aGUgY29tcHJlc3NvciBhbmQgdHJhbnNtaXR0ZWQgdG8gdGhlIGRlY29tcHJlc3NvciBieSBzb21lCisgICBtZWNoYW5pc20gb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBjb21wcmVzc2lvbiBsaWJyYXJ5LikgVXBvbiBleGl0LAorICAgKmRlc3RMZW4gaXMgdGhlIHNpemUgb2YgdGhlIGRlY29tcHJlc3NlZCBkYXRhIGFuZCAqc291cmNlTGVuIGlzIHRoZSBudW1iZXIKKyAgIG9mIHNvdXJjZSBieXRlcyBjb25zdW1lZC4gVXBvbiByZXR1cm4sIHNvdXJjZSArICpzb3VyY2VMZW4gcG9pbnRzIHRvIHRoZQorICAgZmlyc3QgdW51c2VkIGlucHV0IGJ5dGUuCisKKyAgICAgdW5jb21wcmVzcyByZXR1cm5zIFpfT0sgaWYgc3VjY2VzcywgWl9NRU1fRVJST1IgaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2gKKyAgIG1lbW9yeSwgWl9CVUZfRVJST1IgaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2ggcm9vbSBpbiB0aGUgb3V0cHV0IGJ1ZmZlciwgb3IKKyAgIFpfREFUQV9FUlJPUiBpZiB0aGUgaW5wdXQgZGF0YSB3YXMgY29ycnVwdGVkLCBpbmNsdWRpbmcgaWYgdGhlIGlucHV0IGRhdGEgaXMKKyAgIGFuIGluY29tcGxldGUgemxpYiBzdHJlYW0uCisqLworaW50IFpFWFBPUlQgdW5jb21wcmVzczIgKGRlc3QsIGRlc3RMZW4sIHNvdXJjZSwgc291cmNlTGVuKQorICAgIEJ5dGVmICpkZXN0OworICAgIHVMb25nZiAqZGVzdExlbjsKKyAgICBjb25zdCBCeXRlZiAqc291cmNlOworICAgIHVMb25nICpzb3VyY2VMZW47Cit7CisgICAgel9zdHJlYW0gc3RyZWFtOworICAgIGludCBlcnI7CisgICAgY29uc3QgdUludCBtYXggPSAodUludCktMTsKKyAgICB1TG9uZyBsZW4sIGxlZnQ7CisgICAgQnl0ZSBidWZbMV07ICAgIC8qIGZvciBkZXRlY3Rpb24gb2YgaW5jb21wbGV0ZSBzdHJlYW0gd2hlbiAqZGVzdExlbiA9PSAwICovCisKKyAgICBsZW4gPSAqc291cmNlTGVuOworICAgIGlmICgqZGVzdExlbikgeworICAgICAgICBsZWZ0ID0gKmRlc3RMZW47CisgICAgICAgICpkZXN0TGVuID0gMDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGxlZnQgPSAxOworICAgICAgICBkZXN0ID0gYnVmOworICAgIH0KKworICAgIHN0cmVhbS5uZXh0X2luID0gKHpfY29uc3QgQnl0ZWYgKilzb3VyY2U7CisgICAgc3RyZWFtLmF2YWlsX2luID0gMDsKKyAgICBzdHJlYW0uemFsbG9jID0gKGFsbG9jX2Z1bmMpMDsKKyAgICBzdHJlYW0uemZyZWUgPSAoZnJlZV9mdW5jKTA7CisgICAgc3RyZWFtLm9wYXF1ZSA9ICh2b2lkcGYpMDsKKworICAgIGVyciA9IGluZmxhdGVJbml0KCZzdHJlYW0pOworICAgIGlmIChlcnIgIT0gWl9PSykgcmV0dXJuIGVycjsKKworICAgIHN0cmVhbS5uZXh0X291dCA9IGRlc3Q7CisgICAgc3RyZWFtLmF2YWlsX291dCA9IDA7CisKKyAgICBkbyB7CisgICAgICAgIGlmIChzdHJlYW0uYXZhaWxfb3V0ID09IDApIHsKKyAgICAgICAgICAgIHN0cmVhbS5hdmFpbF9vdXQgPSBsZWZ0ID4gKHVMb25nKW1heCA/IG1heCA6ICh1SW50KWxlZnQ7CisgICAgICAgICAgICBsZWZ0IC09IHN0cmVhbS5hdmFpbF9vdXQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN0cmVhbS5hdmFpbF9pbiA9PSAwKSB7CisgICAgICAgICAgICBzdHJlYW0uYXZhaWxfaW4gPSBsZW4gPiAodUxvbmcpbWF4ID8gbWF4IDogKHVJbnQpbGVuOworICAgICAgICAgICAgbGVuIC09IHN0cmVhbS5hdmFpbF9pbjsKKyAgICAgICAgfQorICAgICAgICBlcnIgPSBpbmZsYXRlKCZzdHJlYW0sIFpfTk9fRkxVU0gpOworICAgIH0gd2hpbGUgKGVyciA9PSBaX09LKTsKKworICAgICpzb3VyY2VMZW4gLT0gbGVuICsgc3RyZWFtLmF2YWlsX2luOworICAgIGlmIChkZXN0ICE9IGJ1ZikKKyAgICAgICAgKmRlc3RMZW4gPSBzdHJlYW0udG90YWxfb3V0OworICAgIGVsc2UgaWYgKHN0cmVhbS50b3RhbF9vdXQgJiYgZXJyID09IFpfQlVGX0VSUk9SKQorICAgICAgICBsZWZ0ID0gMTsKKworICAgIGluZmxhdGVFbmQoJnN0cmVhbSk7CisgICAgcmV0dXJuIGVyciA9PSBaX1NUUkVBTV9FTkQgPyBaX09LIDoKKyAgICAgICAgICAgZXJyID09IFpfTkVFRF9ESUNUID8gWl9EQVRBX0VSUk9SICA6CisgICAgICAgICAgIGVyciA9PSBaX0JVRl9FUlJPUiAmJiBsZWZ0ICsgc3RyZWFtLmF2YWlsX291dCA/IFpfREFUQV9FUlJPUiA6CisgICAgICAgICAgIGVycjsKK30KKworaW50IFpFWFBPUlQgdW5jb21wcmVzcyAoZGVzdCwgZGVzdExlbiwgc291cmNlLCBzb3VyY2VMZW4pCisgICAgQnl0ZWYgKmRlc3Q7CisgICAgdUxvbmdmICpkZXN0TGVuOworICAgIGNvbnN0IEJ5dGVmICpzb3VyY2U7CisgICAgdUxvbmcgc291cmNlTGVuOworeworICAgIHJldHVybiB1bmNvbXByZXNzMihkZXN0LCBkZXN0TGVuLCBzb3VyY2UsICZzb3VyY2VMZW4pOworfQpkaWZmIC0tZ2l0IGEvc3JjL3dhdGNvbS93YXRjb21fZi5tYWsgYi9zcmMvd2F0Y29tL3dhdGNvbV9mLm1hawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2Y0ZDc0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3dhdGNvbS93YXRjb21fZi5tYWsKQEAgLTAsMCArMSw0MyBAQAorIyBNYWtlZmlsZSBmb3IgemxpYgorIyBPcGVuV2F0Y29tIGZsYXQgbW9kZWwKKyMgTGFzdCB1cGRhdGVkOiAyOC1EZWMtMjAwNQorCisjIFRvIHVzZSwgZG8gIndtYWtlIC1mIHdhdGNvbV9mLm1hayIKKworQ19TT1VSQ0UgPSAgYWRsZXIzMi5jICBjb21wcmVzcy5jIGNyYzMyLmMgICBkZWZsYXRlLmMgICAgJgorCSAgICBnemNsb3NlLmMgIGd6bGliLmMgICAgZ3pyZWFkLmMgIGd6d3JpdGUuYyAgICAmCisgICAgICAgICAgICBpbmZiYWNrLmMgIGluZmZhc3QuYyAgaW5mbGF0ZS5jIGluZnRyZWVzLmMgICAmCisgICAgICAgICAgICB0cmVlcy5jICAgIHVuY29tcHIuYyAgenV0aWwuYworCitPQkpTID0gICAgICBhZGxlcjMyLm9iaiAgY29tcHJlc3Mub2JqIGNyYzMyLm9iaiAgIGRlZmxhdGUub2JqICAgICYKKwkgICAgZ3pjbG9zZS5vYmogIGd6bGliLm9iaiAgICBnenJlYWQub2JqICBnendyaXRlLm9iaiAgICAmCisgICAgICAgICAgICBpbmZiYWNrLm9iaiAgaW5mZmFzdC5vYmogIGluZmxhdGUub2JqIGluZnRyZWVzLm9iaiAgICYKKyAgICAgICAgICAgIHRyZWVzLm9iaiAgICB1bmNvbXByLm9iaiAgenV0aWwub2JqCisKK0NDICAgICAgID0gd2NjMzg2CitMSU5LRVIgICA9IHdjbDM4NgorQ0ZMQUdTICAgPSAtenEgLW1mIC0zciAtZnAzIC1zIC1idD1kb3MgLW9pbHJ0Zm0gLWZyPW51bCAtd3gKK1pMSUJfTElCID0gemxpYl9mLmxpYgorCisuQy5PQko6CisgICAgICAgICQoQ0MpICQoQ0ZMQUdTKSAkW0AKKworYWxsOiAkKFpMSUJfTElCKSBleGFtcGxlLmV4ZSBtaW5pZ3ppcC5leGUKKworJChaTElCX0xJQik6ICQoT0JKUykKKwl3bGliIC1iIC1jICQoWkxJQl9MSUIpIC0rYWRsZXIzMi5vYmogIC0rY29tcHJlc3Mub2JqIC0rY3JjMzIub2JqCisJd2xpYiAtYiAtYyAkKFpMSUJfTElCKSAtK2d6Y2xvc2Uub2JqICAtK2d6bGliLm9iaiAgICAtK2d6cmVhZC5vYmogICAtK2d6d3JpdGUub2JqCisgICAgICAgIHdsaWIgLWIgLWMgJChaTElCX0xJQikgLStkZWZsYXRlLm9iaiAgLStpbmZiYWNrLm9iagorICAgICAgICB3bGliIC1iIC1jICQoWkxJQl9MSUIpIC0raW5mZmFzdC5vYmogIC0raW5mbGF0ZS5vYmogIC0raW5mdHJlZXMub2JqCisgICAgICAgIHdsaWIgLWIgLWMgJChaTElCX0xJQikgLSt0cmVlcy5vYmogICAgLSt1bmNvbXByLm9iaiAgLSt6dXRpbC5vYmoKKworZXhhbXBsZS5leGU6ICQoWkxJQl9MSUIpIGV4YW1wbGUub2JqCisJJChMSU5LRVIpIC1sZG9zMzJhIC1mZT1leGFtcGxlLmV4ZSBleGFtcGxlLm9iaiAkKFpMSUJfTElCKQorCittaW5pZ3ppcC5leGU6ICQoWkxJQl9MSUIpIG1pbmlnemlwLm9iagorCSQoTElOS0VSKSAtbGRvczMyYSAtZmU9bWluaWd6aXAuZXhlIG1pbmlnemlwLm9iaiAkKFpMSUJfTElCKQorCitjbGVhbjogLlNZTUJPTElDCisgICAgICAgICAgZGVsICoub2JqCisgICAgICAgICAgZGVsICQoWkxJQl9MSUIpCisgICAgICAgICAgQGVjaG8gQ2xlYW5pbmcgZG9uZQpkaWZmIC0tZ2l0IGEvc3JjL3dhdGNvbS93YXRjb21fbC5tYWsgYi9zcmMvd2F0Y29tL3dhdGNvbV9sLm1hawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTNlZWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3dhdGNvbS93YXRjb21fbC5tYWsKQEAgLTAsMCArMSw0MyBAQAorIyBNYWtlZmlsZSBmb3IgemxpYgorIyBPcGVuV2F0Y29tIGxhcmdlIG1vZGVsCisjIExhc3QgdXBkYXRlZDogMjgtRGVjLTIwMDUKKworIyBUbyB1c2UsIGRvICJ3bWFrZSAtZiB3YXRjb21fbC5tYWsiCisKK0NfU09VUkNFID0gIGFkbGVyMzIuYyAgY29tcHJlc3MuYyBjcmMzMi5jICAgZGVmbGF0ZS5jICAgICYKKwkgICAgZ3pjbG9zZS5jICBnemxpYi5jICAgIGd6cmVhZC5jICBnendyaXRlLmMgICAgJgorICAgICAgICAgICAgaW5mYmFjay5jICBpbmZmYXN0LmMgIGluZmxhdGUuYyBpbmZ0cmVlcy5jICAgJgorICAgICAgICAgICAgdHJlZXMuYyAgICB1bmNvbXByLmMgIHp1dGlsLmMKKworT0JKUyA9ICAgICAgYWRsZXIzMi5vYmogIGNvbXByZXNzLm9iaiBjcmMzMi5vYmogICBkZWZsYXRlLm9iaiAgICAmCisJICAgIGd6Y2xvc2Uub2JqICBnemxpYi5vYmogICAgZ3pyZWFkLm9iaiAgZ3p3cml0ZS5vYmogICAgJgorICAgICAgICAgICAgaW5mYmFjay5vYmogIGluZmZhc3Qub2JqICBpbmZsYXRlLm9iaiBpbmZ0cmVlcy5vYmogICAmCisgICAgICAgICAgICB0cmVlcy5vYmogICAgdW5jb21wci5vYmogIHp1dGlsLm9iagorCitDQyAgICAgICA9IHdjYworTElOS0VSICAgPSB3Y2wKK0NGTEFHUyAgID0gLXpxIC1tbCAtcyAtYnQ9ZG9zIC1vaWxydGZtIC1mcj1udWwgLXd4CitaTElCX0xJQiA9IHpsaWJfbC5saWIKKworLkMuT0JKOgorICAgICAgICAkKENDKSAkKENGTEFHUykgJFtACisKK2FsbDogJChaTElCX0xJQikgZXhhbXBsZS5leGUgbWluaWd6aXAuZXhlCisKKyQoWkxJQl9MSUIpOiAkKE9CSlMpCisJd2xpYiAtYiAtYyAkKFpMSUJfTElCKSAtK2FkbGVyMzIub2JqICAtK2NvbXByZXNzLm9iaiAtK2NyYzMyLm9iagorCXdsaWIgLWIgLWMgJChaTElCX0xJQikgLStnemNsb3NlLm9iaiAgLStnemxpYi5vYmogICAgLStnenJlYWQub2JqICAgLStnendyaXRlLm9iagorICAgICAgICB3bGliIC1iIC1jICQoWkxJQl9MSUIpIC0rZGVmbGF0ZS5vYmogIC0raW5mYmFjay5vYmoKKyAgICAgICAgd2xpYiAtYiAtYyAkKFpMSUJfTElCKSAtK2luZmZhc3Qub2JqICAtK2luZmxhdGUub2JqICAtK2luZnRyZWVzLm9iagorICAgICAgICB3bGliIC1iIC1jICQoWkxJQl9MSUIpIC0rdHJlZXMub2JqICAgIC0rdW5jb21wci5vYmogIC0renV0aWwub2JqCisKK2V4YW1wbGUuZXhlOiAkKFpMSUJfTElCKSBleGFtcGxlLm9iagorCSQoTElOS0VSKSAtZmU9ZXhhbXBsZS5leGUgZXhhbXBsZS5vYmogJChaTElCX0xJQikKKworbWluaWd6aXAuZXhlOiAkKFpMSUJfTElCKSBtaW5pZ3ppcC5vYmoKKwkkKExJTktFUikgLWZlPW1pbmlnemlwLmV4ZSBtaW5pZ3ppcC5vYmogJChaTElCX0xJQikKKworY2xlYW46IC5TWU1CT0xJQworICAgICAgICAgIGRlbCAqLm9iagorICAgICAgICAgIGRlbCAkKFpMSUJfTElCKQorICAgICAgICAgIEBlY2hvIENsZWFuaW5nIGRvbmUKZGlmZiAtLWdpdCBhL3NyYy93aW4zMi9ETExfRkFRLnR4dCBiL3NyYy93aW4zMi9ETExfRkFRLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmMwMDkwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3dpbjMyL0RMTF9GQVEudHh0CkBAIC0wLDAgKzEsMzk3IEBACisKKyAgICAgICAgICAgIEZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb25zIGFib3V0IFpMSUIxLkRMTAorCisKK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBkZXNpZ24sIHRoZSByYXRpb25hbGUsIGFuZCB0aGUgdXNhZ2UKK29mIHRoZSBvZmZpY2lhbCBETEwgYnVpbGQgb2YgemxpYiwgbmFtZWQgWkxJQjEuRExMLiAgSWYgeW91IGhhdmUKK2dlbmVyYWwgcXVlc3Rpb25zIGFib3V0IHpsaWIsIHlvdSBzaG91bGQgc2VlIHRoZSBmaWxlICJGQVEiIGZvdW5kCitpbiB0aGUgemxpYiBkaXN0cmlidXRpb24sIG9yIGF0IHRoZSBmb2xsb3dpbmcgbG9jYXRpb246CisgIGh0dHA6Ly93d3cuZ3ppcC5vcmcvemxpYi96bGliX2ZhcS5odG1sCisKKworIDEuIFdoYXQgaXMgWkxJQjEuRExMLCBhbmQgaG93IGNhbiBJIGdldCBpdD8KKworICAtIFpMSUIxLkRMTCBpcyB0aGUgb2ZmaWNpYWwgYnVpbGQgb2YgemxpYiBhcyBhIERMTC4KKyAgICAoUGxlYXNlIHJlbWFyayB0aGUgY2hhcmFjdGVyICcxJyBpbiB0aGUgbmFtZS4pCisKKyAgICBQb2ludGVycyB0byBhIHByZWNvbXBpbGVkIFpMSUIxLkRMTCBjYW4gYmUgZm91bmQgaW4gdGhlIHpsaWIKKyAgICB3ZWIgc2l0ZSBhdDoKKyAgICAgIGh0dHA6Ly93d3cuemxpYi5uZXQvCisKKyAgICBBcHBsaWNhdGlvbnMgdGhhdCBsaW5rIHRvIFpMSUIxLkRMTCBjYW4gcmVseSBvbiB0aGUgZm9sbG93aW5nCisgICAgc3BlY2lmaWNhdGlvbjoKKworICAgICogVGhlIGV4cG9ydGVkIHN5bWJvbHMgYXJlIGV4Y2x1c2l2ZWx5IGRlZmluZWQgaW4gdGhlIHNvdXJjZQorICAgICAgZmlsZXMgInpsaWIuaCIgYW5kICJ6bGliLmRlZiIsIGZvdW5kIGluIGFuIG9mZmljaWFsIHpsaWIKKyAgICAgIHNvdXJjZSBkaXN0cmlidXRpb24uCisgICAgKiBUaGUgc3ltYm9scyBhcmUgZXhwb3J0ZWQgYnkgbmFtZSwgbm90IGJ5IG9yZGluYWwuCisgICAgKiBUaGUgZXhwb3J0ZWQgbmFtZXMgYXJlIHVuZGVjb3JhdGVkLgorICAgICogVGhlIGNhbGxpbmcgY29udmVudGlvbiBvZiBmdW5jdGlvbnMgaXMgIkMiIChDREVDTCkuCisgICAgKiBUaGUgWkxJQjEuRExMIGJpbmFyeSBpcyBsaW5rZWQgdG8gTVNWQ1JULkRMTC4KKworICAgIFRoZSBhcmNoaXZlIGluIHdoaWNoIFpMSUIxLkRMTCBpcyBidW5kbGVkIGNvbnRhaW5zIGNvbXBpbGVkCisgICAgdGVzdCBwcm9ncmFtcyB0aGF0IG11c3QgcnVuIHdpdGggYSB2YWxpZCBidWlsZCBvZiBaTElCMS5ETEwuCisgICAgSXQgaXMgcmVjb21tZW5kZWQgdG8gZG93bmxvYWQgdGhlIHByZWJ1aWx0IERMTCBmcm9tIHRoZSB6bGliCisgICAgd2ViIHNpdGUsIGluc3RlYWQgb2YgYnVpbGRpbmcgaXQgeW91cnNlbGYsIHRvIGF2b2lkIHBvdGVudGlhbAorICAgIGluY29tcGF0aWJpbGl0aWVzIHRoYXQgY291bGQgYmUgaW50cm9kdWNlZCBieSB5b3VyIGNvbXBpbGVyCisgICAgYW5kIGJ1aWxkIHNldHRpbmdzLiAgSWYgeW91IGRvIGJ1aWxkIHRoZSBETEwgeW91cnNlbGYsIHBsZWFzZQorICAgIG1ha2Ugc3VyZSB0aGF0IGl0IGNvbXBsaWVzIHdpdGggYWxsIHRoZSBhYm92ZSByZXF1aXJlbWVudHMsCisgICAgYW5kIGl0IHJ1bnMgd2l0aCB0aGUgcHJlY29tcGlsZWQgdGVzdCBwcm9ncmFtcywgYnVuZGxlZCB3aXRoCisgICAgdGhlIG9yaWdpbmFsIFpMSUIxLkRMTCBkaXN0cmlidXRpb24uCisKKyAgICBJZiwgZm9yIGFueSByZWFzb24sIHlvdSBuZWVkIHRvIGJ1aWxkIGFuIGluY29tcGF0aWJsZSBETEwsCisgICAgcGxlYXNlIHVzZSBhIGRpZmZlcmVudCBmaWxlIG5hbWUuCisKKworIDIuIFdoeSBkaWQgeW91IGNoYW5nZSB0aGUgbmFtZSBvZiB0aGUgRExMIHRvIFpMSUIxLkRMTD8KKyAgICBXaGF0IGhhcHBlbmVkIHRvIHRoZSBvbGQgWkxJQi5ETEw/CisKKyAgLSBUaGUgb2xkIFpMSUIuRExMLCBidWlsdCBmcm9tIHpsaWItMS4xLjQgb3IgZWFybGllciwgcmVxdWlyZWQKKyAgICBjb21waWxhdGlvbiBzZXR0aW5ncyB0aGF0IHdlcmUgaW5jb21wYXRpYmxlIHRvIHRob3NlIHVzZWQgYnkKKyAgICBhIHN0YXRpYyBidWlsZC4gIFRoZSBETEwgc2V0dGluZ3Mgd2VyZSBzdXBwb3NlZCB0byBiZSBlbmFibGVkCisgICAgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIFpMSUJfRExMLCBiZWZvcmUgaW5jbHVkaW5nICJ6bGliLmgiLgorICAgIEluY29ycmVjdCBoYW5kbGluZyBvZiB0aGlzIG1hY3JvIHdhcyBzaWxlbnRseSBhY2NlcHRlZCBhdAorICAgIGJ1aWxkIHRpbWUsIHJlc3VsdGluZyBpbiB0d28gbWFqb3IgcHJvYmxlbXM6CisKKyAgICAqIFpMSUJfRExMIHdhcyBtaXNzaW5nIGZyb20gdGhlIG9sZCBtYWtlZmlsZS4gIFdoZW4gYnVpbGRpbmcKKyAgICAgIHRoZSBETEwsIG5vdCBhbGwgcGVvcGxlIGFkZGVkIGl0IHRvIHRoZSBidWlsZCBvcHRpb25zLiAgSW4KKyAgICAgIGNvbnNlcXVlbmNlLCBpbmNvbXBhdGlibGUgaW5jYXJuYXRpb25zIG9mIFpMSUIuRExMIHN0YXJ0ZWQKKyAgICAgIHRvIGNpcmN1bGF0ZSBhcm91bmQgdGhlIG5ldC4KKworICAgICogV2hlbiBzd2l0Y2hpbmcgZnJvbSB1c2luZyB0aGUgc3RhdGljIGxpYnJhcnkgdG8gdXNpbmcgdGhlCisgICAgICBETEwsIGFwcGxpY2F0aW9ucyBoYWQgdG8gZGVmaW5lIHRoZSBaTElCX0RMTCBtYWNybyBhbmQKKyAgICAgIHRvIHJlY29tcGlsZSBhbGwgdGhlIHNvdXJjZXMgdGhhdCBjb250YWluZWQgY2FsbHMgdG8gemxpYgorICAgICAgZnVuY3Rpb25zLiAgRmFpbHVyZSB0byBkbyBzbyByZXN1bHRlZCBpbiBjcmVhdGluZyBiaW5hcmllcworICAgICAgdGhhdCB3ZXJlIHVuYWJsZSB0byBydW4gd2l0aCB0aGUgb2ZmaWNpYWwgWkxJQi5ETEwgYnVpbGQuCisKKyAgICBUaGUgb25seSBwb3NzaWJsZSBzb2x1dGlvbiB0aGF0IHdlIGNvdWxkIGZvcmVzZWUgd2FzIHRvIG1ha2UKKyAgICBhIGJpbmFyeS1pbmNvbXBhdGlibGUgY2hhbmdlIGluIHRoZSBETEwgaW50ZXJmYWNlLCBpbiBvcmRlciB0bworICAgIHJlbW92ZSB0aGUgZGVwZW5kZW5jeSBvbiB0aGUgWkxJQl9ETEwgbWFjcm8sIGFuZCB0byByZWxlYXNlCisgICAgdGhlIG5ldyBETEwgdW5kZXIgYSBkaWZmZXJlbnQgbmFtZS4KKworICAgIFdlIGNob3NlIHRoZSBuYW1lIFpMSUIxLkRMTCwgd2hlcmUgJzEnIGluZGljYXRlcyB0aGUgbWFqb3IKKyAgICB6bGliIHZlcnNpb24gbnVtYmVyLiAgV2UgaG9wZSB0aGF0IHdlIHdpbGwgbm90IGhhdmUgdG8gYnJlYWsKKyAgICB0aGUgYmluYXJ5IGNvbXBhdGliaWxpdHkgYWdhaW4sIGF0IGxlYXN0IG5vdCBhcyBsb25nIGFzIHRoZQorICAgIHpsaWItMS54IHNlcmllcyB3aWxsIGxhc3QuCisKKyAgICBUaGVyZSBpcyBzdGlsbCBhIFpMSUJfRExMIG1hY3JvLCB0aGF0IGNhbiB0cmlnZ2VyIGEgbW9yZQorICAgIGVmZmljaWVudCBidWlsZCBhbmQgdXNlIG9mIHRoZSBETEwsIGJ1dCBjb21wYXRpYmlsaXR5IG5vCisgICAgbG9uZ2VyIGRlcGVuZGVudHMgb24gaXQuCisKKworIDMuIENhbiBJIGJ1aWxkIFpMSUIuRExMIGZyb20gdGhlIG5ldyB6bGliIHNvdXJjZXMsIGFuZCByZXBsYWNlCisgICAgYW4gb2xkIFpMSUIuRExMLCB0aGF0IHdhcyBidWlsdCBmcm9tIHpsaWItMS4xLjQgb3IgZWFybGllcj8KKworICAtIEluIHByaW5jaXBsZSwgeW91IGNhbiBkbyBpdCBieSBhc3NpZ25pbmcgY2FsbGluZyBjb252ZW50aW9uCisgICAga2V5d29yZHMgdG8gdGhlIG1hY3JvcyBaRVhQT1JUIGFuZCBaRVhQT1JUVkEuICBJbiBwcmFjdGljZSwKKyAgICBpdCBkZXBlbmRzIG9uIHdoYXQgeW91IG1lYW4gYnkgImFuIG9sZCBaTElCLkRMTCIsIGJlY2F1c2UgdGhlCisgICAgb2xkIERMTCBleGlzdHMgaW4gc2V2ZXJhbCBtdXR1YWxseS1pbmNvbXBhdGlibGUgdmVyc2lvbnMuCisgICAgWW91IGhhdmUgdG8gZmluZCBvdXQgZmlyc3Qgd2hhdCBraW5kIG9mIGNhbGxpbmcgY29udmVudGlvbiBpcworICAgIGJlaW5nIHVzZWQgaW4geW91ciBwYXJ0aWN1bGFyIFpMSUIuRExMIGJ1aWxkLCBhbmQgdG8gdXNlIHRoZQorICAgIHNhbWUgb25lIGluIHRoZSBuZXcgYnVpbGQuICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRoaXMgaXMgYWxsCisgICAgYWJvdXQsIHlvdSBtaWdodCBiZSBiZXR0ZXIgb2ZmIGlmIHlvdSB3b3VsZCBqdXN0IGxlYXZlIHRoZSBvbGQKKyAgICBETEwgaW50YWN0LgorCisKKyA0LiBDYW4gSSBjb21waWxlIG15IGFwcGxpY2F0aW9uIHVzaW5nIHRoZSBuZXcgemxpYiBpbnRlcmZhY2UsIGFuZAorICAgIGxpbmsgaXQgdG8gYW4gb2xkIFpMSUIuRExMLCB0aGF0IHdhcyBidWlsdCBmcm9tIHpsaWItMS4xLjQgb3IKKyAgICBlYXJsaWVyPworCisgIC0gVGhlIG9mZmljaWFsIGFuc3dlciBpcyAibm8iOyB0aGUgcmVhbCBhbnN3ZXIgZGVwZW5kcyBhZ2FpbiBvbgorICAgIHdoYXQga2luZCBvZiBaTElCLkRMTCB5b3UgaGF2ZS4gIEV2ZW4gaWYgeW91IGFyZSBsdWNreSwgdGhpcworICAgIGNvdXJzZSBvZiBhY3Rpb24gaXMgdW5yZWxpYWJsZS4KKworICAgIElmIHlvdSByZWJ1aWxkIHlvdXIgYXBwbGljYXRpb24gYW5kIHlvdSBpbnRlbmQgdG8gdXNlIGEgbmV3ZXIKKyAgICB2ZXJzaW9uIG9mIHpsaWIgKHBvc3QtIDEuMS40KSwgaXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdG8KKyAgICBsaW5rIGl0IHRvIHRoZSBuZXcgWkxJQjEuRExMLgorCisKKyA1LiBXaHkgYXJlIHRoZSB6bGliIHN5bWJvbHMgZXhwb3J0ZWQgYnkgbmFtZSwgYW5kIG5vdCBieSBvcmRpbmFsPworCisgIC0gQWx0aG91Z2ggZXhwb3J0aW5nIHN5bWJvbHMgYnkgb3JkaW5hbCBpcyBhIGxpdHRsZSBmYXN0ZXIsIGl0CisgICAgaXMgcmlza3kuICBBbnkgc2luZ2xlIGdsaXRjaCBpbiB0aGUgbWFpbnRlbmFuY2Ugb3IgdXNlIG9mIHRoZQorICAgIERFRiBmaWxlIHRoYXQgY29udGFpbnMgdGhlIG9yZGluYWxzIGNhbiByZXN1bHQgaW4gaW5jb21wYXRpYmxlCisgICAgYnVpbGRzIGFuZCBmcnVzdHJhdGluZyBjcmFzaGVzLiAgU2ltcGx5IHB1dCwgdGhlIGJlbmVmaXRzIG9mCisgICAgZXhwb3J0aW5nIHN5bWJvbHMgYnkgb3JkaW5hbCBkbyBub3QganVzdGlmeSB0aGUgcmlza3MuCisKKyAgICBUZWNobmljYWxseSwgaXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIG1haW50YWluIG9yZGluYWxzIGluCisgICAgdGhlIERFRiBmaWxlLCBhbmQgc3RpbGwgZXhwb3J0IHRoZSBzeW1ib2xzIGJ5IG5hbWUuICBPcmRpbmFscworICAgIGV4aXN0IGluIGV2ZXJ5IERMTCwgYW5kIGV2ZW4gaWYgdGhlIGR5bmFtaWMgbGlua2luZyBwZXJmb3JtZWQKKyAgICBhdCB0aGUgRExMIHN0YXJ0dXAgaXMgc2VhcmNoaW5nIGZvciBuYW1lcywgb3JkaW5hbHMgc2VydmUgYXMKKyAgICBoaW50cywgZm9yIGEgZmFzdGVyIG5hbWUgbG9va3VwLiAgSG93ZXZlciwgaWYgdGhlIERFRiBmaWxlCisgICAgY29udGFpbnMgb3JkaW5hbHMsIHRoZSBNaWNyb3NvZnQgbGlua2VyIGF1dG9tYXRpY2FsbHkgYnVpbGRzCisgICAgYW4gaW1wbGliIHRoYXQgd2lsbCBjYXVzZSB0aGUgZXhlY3V0YWJsZXMgbGlua2VkIHRvIGl0IHRvIHVzZQorICAgIHRob3NlIG9yZGluYWxzLCBhbmQgbm90IHRoZSBuYW1lcy4gIEl0IGlzIGludGVyZXN0aW5nIHRvCisgICAgbm90aWNlIHRoYXQgdGhlIEdOVSBsaW5rZXIgZm9yIFdpbjMyIGRvZXMgbm90IHN1ZmZlciBmcm9tIHRoaXMKKyAgICBwcm9ibGVtLgorCisgICAgSXQgaXMgcG9zc2libGUgdG8gYXZvaWQgdGhlIERFRiBmaWxlIGlmIHRoZSBleHBvcnRlZCBzeW1ib2xzCisgICAgYXJlIGFjY29tcGFuaWVkIGJ5IGEgIl9fZGVjbHNwZWMoZGxsZXhwb3J0KSIgYXR0cmlidXRlIGluIHRoZQorICAgIHNvdXJjZSBmaWxlcy4gIFlvdSBjYW4gZG8gdGhpcyBpbiB6bGliIGJ5IHByZWRlZmluaW5nIHRoZQorICAgIFpMSUJfRExMIG1hY3JvLgorCisKKyA2LiBJIHNlZSB0aGF0IHRoZSBaTElCMS5ETEwgZnVuY3Rpb25zIHVzZSB0aGUgIkMiIChDREVDTCkgY2FsbGluZworICAgIGNvbnZlbnRpb24uICBXaHkgbm90IHVzZSB0aGUgU1REQ0FMTCBjb252ZW50aW9uPworICAgIFNURENBTEwgaXMgdGhlIHN0YW5kYXJkIGNvbnZlbnRpb24gaW4gV2luMzIsIGFuZCBJIG5lZWQgaXQgaW4KKyAgICBteSBWaXN1YWwgQmFzaWMgcHJvamVjdCEKKworICAgIChGb3IgcmVhZGFiaWxpdHksIHdlIHVzZSBDREVDTCB0byByZWZlciB0byB0aGUgY29udmVudGlvbgorICAgICB0cmlnZ2VyZWQgYnkgdGhlICJfX2NkZWNsIiBrZXl3b3JkLCBTVERDQUxMIHRvIHJlZmVyIHRvCisgICAgIHRoZSBjb252ZW50aW9uIHRyaWdnZXJlZCBieSAiX19zdGRjYWxsIiwgYW5kIEZBU1RDQUxMIHRvCisgICAgIHJlZmVyIHRvIHRoZSBjb252ZW50aW9uIHRyaWdnZXJlZCBieSAiX19mYXN0Y2FsbCIuKQorCisgIC0gTW9zdCBvZiB0aGUgbmF0aXZlIFdpbmRvd3MgQVBJIGZ1bmN0aW9ucyAod2l0aG91dCB2YXJhcmdzKSB1c2UKKyAgICBpbmRlZWQgdGhlIFdJTkFQSSBjb252ZW50aW9uICh3aGljaCB0cmFuc2xhdGVzIHRvIFNURENBTEwgaW4KKyAgICBXaW4zMiksIGJ1dCB0aGUgc3RhbmRhcmQgQyBmdW5jdGlvbnMgdXNlIENERUNMLiAgSWYgYSB1c2VyCisgICAgYXBwbGljYXRpb24gaXMgaW50cmluc2ljYWxseSB0aWVkIHRvIHRoZSBXaW5kb3dzIEFQSSAoZS5nLgorICAgIGl0IGNhbGxzIG5hdGl2ZSBXaW5kb3dzIEFQSSBmdW5jdGlvbnMgc3VjaCBhcyBDcmVhdGVGaWxlKCkpLAorICAgIHNvbWV0aW1lcyBpdCBtYWtlcyBzZW5zZSB0byBkZWNvcmF0ZSBpdHMgb3duIGZ1bmN0aW9ucyB3aXRoCisgICAgV0lOQVBJLiAgQnV0IGlmIEFOU0kgQyBvciBQT1NJWCBwb3J0YWJpbGl0eSBpcyBhIGdvYWwgKGUuZy4KKyAgICBpdCBjYWxscyBzdGFuZGFyZCBDIGZ1bmN0aW9ucyBzdWNoIGFzIGZvcGVuKCkpLCBpdCBpcyBub3QgYQorICAgIHNvdW5kIGRlY2lzaW9uIHRvIHJlcXVlc3QgdGhlIGluY2x1c2lvbiBvZiA8d2luZG93cy5oPiwgb3IgdG8KKyAgICB1c2Ugbm9uLUFOU0kgY29uc3RydWN0cywgZm9yIHRoZSBzb2xlIHB1cnBvc2UgdG8gbWFrZSB0aGUgdXNlcgorICAgIGZ1bmN0aW9ucyBTVERDQUxMLWFibGUuCisKKyAgICBUaGUgZnVuY3Rpb25hbGl0eSBvZmZlcmVkIGJ5IHpsaWIgaXMgbm90IGluIHRoZSBjYXRlZ29yeSBvZgorICAgICJXaW5kb3dzIGZ1bmN0aW9uYWxpdHkiLCBidXQgaXMgbW9yZSBsaWtlICJDIGZ1bmN0aW9uYWxpdHkiLgorCisgICAgVGVjaG5pY2FsbHksIFNURENBTEwgaXMgbm90IGJhZDsgaW4gZmFjdCwgaXQgaXMgc2xpZ2h0bHkKKyAgICBmYXN0ZXIgdGhhbiBDREVDTCwgYW5kIGl0IHdvcmtzIHdpdGggdmFyaWFibGUtYXJndW1lbnQKKyAgICBmdW5jdGlvbnMsIGp1c3QgbGlrZSBDREVDTC4gIEl0IGlzIHVuZm9ydHVuYXRlIHRoYXQsIGluIHNwaXRlCisgICAgb2YgdXNpbmcgU1REQ0FMTCBpbiB0aGUgV2luZG93cyBBUEksIGl0IGlzIG5vdCB0aGUgZGVmYXVsdAorICAgIGNvbnZlbnRpb24gdXNlZCBieSB0aGUgQyBjb21waWxlcnMgdGhhdCBydW4gdW5kZXIgV2luZG93cy4KKyAgICBUaGUgcm9vdHMgb2YgdGhlIHByb2JsZW0gcmVzaWRlIGRlZXAgaW5zaWRlIHRoZSB1bnNhZmV0eSBvZgorICAgIHRoZSBLJlItc3R5bGUgZnVuY3Rpb24gcHJvdG90eXBlcywgd2hlcmUgdGhlIGFyZ3VtZW50IHR5cGVzCisgICAgYXJlIG5vdCBzcGVjaWZpZWQ7IGJ1dCB0aGF0IGlzIGFub3RoZXIgc3RvcnkgZm9yIGFub3RoZXIgZGF5LgorCisgICAgVGhlIHJlbWFpbmluZyBmYWN0IGlzIHRoYXQgQ0RFQ0wgaXMgdGhlIGRlZmF1bHQgY29udmVudGlvbi4KKyAgICBFdmVuIGlmIGFuIGV4cGxpY2l0IGNvbnZlbnRpb24gaXMgaGFyZC1jb2RlZCBpbnRvIHRoZSBmdW5jdGlvbgorICAgIHByb3RvdHlwZXMgaW5zaWRlIEMgaGVhZGVycywgcHJvYmxlbXMgbWF5IGFwcGVhci4gIFRoZQorICAgIG5lY2Vzc2l0eSB0byBleHBvc2UgdGhlIGNvbnZlbnRpb24gaW4gdXNlcnMnIGNhbGxiYWNrcyBpcyBvbmUKKyAgICBvZiB0aGVzZSBwcm9ibGVtcy4KKworICAgIFRoZSBjYWxsaW5nIGNvbnZlbnRpb24gaXNzdWVzIGFyZSBhbHNvIGltcG9ydGFudCB3aGVuIHVzaW5nCisgICAgemxpYiBpbiBvdGhlciBwcm9ncmFtbWluZyBsYW5ndWFnZXMuICBTb21lIG9mIHRoZW0sIGxpa2UgQWRhCisgICAgKEdOQVQpIGFuZCBGb3J0cmFuIChHTlUgRzc3KSwgaGF2ZSBDIGJpbmRpbmdzIGltcGxlbWVudGVkCisgICAgaW5pdGlhbGx5IG9uIFVuaXgsIGFuZCByZWx5aW5nIG9uIHRoZSBDIGNhbGxpbmcgY29udmVudGlvbi4KKyAgICBPbiB0aGUgb3RoZXIgaGFuZCwgdGhlIHByZS0gLk5FVCB2ZXJzaW9ucyBvZiBNaWNyb3NvZnQgVmlzdWFsCisgICAgQmFzaWMgcmVxdWlyZSBTVERDQUxMLCB3aGlsZSBCb3JsYW5kIERlbHBoaSBwcmVmZXJzLCBhbHRob3VnaAorICAgIGl0IGRvZXMgbm90IHJlcXVpcmUsIEZBU1RDQUxMLgorCisgICAgSW4gZmFpcm5lc3MgdG8gYWxsIHBvc3NpYmxlIHVzZXMgb2YgemxpYiBvdXRzaWRlIHRoZSBDCisgICAgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UsIHdlIGNob29zZSB0aGUgZGVmYXVsdCAiQyIgY29udmVudGlvbi4KKyAgICBBbnlvbmUgaW50ZXJlc3RlZCBpbiBkaWZmZXJlbnQgYmluZGluZ3Mgb3IgY29udmVudGlvbnMgaXMKKyAgICBlbmNvdXJhZ2VkIHRvIG1haW50YWluIHNwZWNpYWxpemVkIHByb2plY3RzLiAgVGhlICJjb250cmliLyIKKyAgICBkaXJlY3RvcnkgZnJvbSB0aGUgemxpYiBkaXN0cmlidXRpb24gYWxyZWFkeSBob2xkcyBhIGNvdXBsZQorICAgIG9mIGZvcmVpZ24gYmluZGluZ3MsIHN1Y2ggYXMgQWRhLCBDKyssIGFuZCBEZWxwaGkuCisKKworIDcuIEkgbmVlZCBhIERMTCBmb3IgbXkgVmlzdWFsIEJhc2ljIHByb2plY3QuICBXaGF0IGNhbiBJIGRvPworCisgIC0gRGVmaW5lIHRoZSBaTElCX1dJTkFQSSBtYWNybyBiZWZvcmUgaW5jbHVkaW5nICJ6bGliLmgiLCB3aGVuCisgICAgYnVpbGRpbmcgYm90aCB0aGUgRExMIGFuZCB0aGUgdXNlciBhcHBsaWNhdGlvbiAoZXhjZXB0IHRoYXQKKyAgICB5b3UgZG9uJ3QgbmVlZCB0byBkZWZpbmUgYW55dGhpbmcgd2hlbiB1c2luZyB0aGUgRExMIGluIFZpc3VhbAorICAgIEJhc2ljKS4gIFRoZSBaTElCX1dJTkFQSSBtYWNybyB3aWxsIHN3aXRjaCBvbiB0aGUgV0lOQVBJCisgICAgKFNURENBTEwpIGNvbnZlbnRpb24uICBUaGUgbmFtZSBvZiB0aGlzIERMTCBtdXN0IGJlIGRpZmZlcmVudAorICAgIHRoYW4gdGhlIG9mZmljaWFsIFpMSUIxLkRMTC4KKworICAgIEdpbGxlcyBWb2xsYW50IGhhcyBjb250cmlidXRlZCBhIGJ1aWxkIG5hbWVkIFpMSUJXQVBJLkRMTCwKKyAgICB3aXRoIHRoZSBaTElCX1dJTkFQSSBtYWNybyB0dXJuZWQgb24sIGFuZCB3aXRoIHRoZSBtaW5pemlwCisgICAgZnVuY3Rpb25hbGl0eSBidWlsdCBpbi4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgcmVhZAorICAgIHRoZSBub3RlcyBpbnNpZGUgImNvbnRyaWIvdnN0dWRpby9yZWFkbWUudHh0IiwgZm91bmQgaW4gdGhlCisgICAgemxpYiBkaXN0cmlidXRpb24uCisKKworIDguIEkgbmVlZCB0byB1c2UgemxpYiBpbiBteSBNaWNyb3NvZnQgLk5FVCBwcm9qZWN0LiAgV2hhdCBjYW4gSQorICAgIGRvPworCisgIC0gSGVucmlrIFJhdm4gaGFzIGNvbnRyaWJ1dGVkIGEgLk5FVCB3cmFwcGVyIGFyb3VuZCB6bGliLiAgTG9vaworICAgIGludG8gY29udHJpYi9kb3R6bGliLywgaW5zaWRlIHRoZSB6bGliIGRpc3RyaWJ1dGlvbi4KKworCisgOS4gSWYgbXkgYXBwbGljYXRpb24gdXNlcyBaTElCMS5ETEwsIHNob3VsZCBJIGxpbmsgaXQgdG8KKyAgICBNU1ZDUlQuRExMPyAgV2h5PworCisgIC0gSXQgaXMgbm90IHJlcXVpcmVkLCBidXQgaXQgaXMgcmVjb21tZW5kZWQgdG8gbGluayB5b3VyCisgICAgYXBwbGljYXRpb24gdG8gTVNWQ1JULkRMTCwgaWYgaXQgdXNlcyBaTElCMS5ETEwuCisKKyAgICBUaGUgZXhlY3V0YWJsZXMgKC5FWEUsIC5ETEwsIGV0Yy4pIHRoYXQgYXJlIGludm9sdmVkIGluIHRoZQorICAgIHNhbWUgcHJvY2VzcyBhbmQgYXJlIHVzaW5nIHRoZSBDIHJ1bi10aW1lIGxpYnJhcnkgKGkuZS4gdGhleQorICAgIGFyZSBjYWxsaW5nIHN0YW5kYXJkIEMgZnVuY3Rpb25zKSwgbXVzdCBsaW5rIHRvIHRoZSBzYW1lCisgICAgbGlicmFyeS4gIFRoZXJlIGFyZSBzZXZlcmFsIGxpYnJhcmllcyBpbiB0aGUgV2luMzIgc3lzdGVtOgorICAgIENSVERMTC5ETEwsIE1TVkNSVC5ETEwsIHRoZSBzdGF0aWMgQyBsaWJyYXJpZXMsIGV0Yy4KKyAgICBTaW5jZSBaTElCMS5ETEwgaXMgbGlua2VkIHRvIE1TVkNSVC5ETEwsIHRoZSBleGVjdXRhYmxlcyB0aGF0CisgICAgZGVwZW5kIG9uIGl0IHNob3VsZCBhbHNvIGJlIGxpbmtlZCB0byBNU1ZDUlQuRExMLgorCisKKzEwLiBXaHkgYXJlIHlvdSBzYXlpbmcgdGhhdCBaTElCMS5ETEwgYW5kIG15IGFwcGxpY2F0aW9uIHNob3VsZAorICAgIGJlIGxpbmtlZCB0byB0aGUgc2FtZSBDIHJ1bi10aW1lIChDUlQpIGxpYnJhcnk/ICBJIGxpbmtlZCBteQorICAgIGFwcGxpY2F0aW9uIGFuZCBteSBETExzIHRvIGRpZmZlcmVudCBDIGxpYnJhcmllcyAoZS5nLiBteQorICAgIGFwcGxpY2F0aW9uIHRvIGEgc3RhdGljIGxpYnJhcnksIGFuZCBteSBETExzIHRvIE1TVkNSVC5ETEwpLAorICAgIGFuZCBldmVyeXRoaW5nIHdvcmtzIGZpbmUuCisKKyAgLSBJZiBhIHVzZXIgbGlicmFyeSBpbnZva2VzIG9ubHkgcHVyZSBXaW4zMiBBUEkgKGFjY2Vzc2libGUgdmlhCisgICAgPHdpbmRvd3MuaD4gYW5kIHRoZSByZWxhdGVkIGhlYWRlcnMpLCBpdHMgRExMIGJ1aWxkIHdpbGwgd29yaworICAgIGluIGFueSBjb250ZXh0LiAgQnV0IGlmIHRoaXMgbGlicmFyeSBpbnZva2VzIHN0YW5kYXJkIEMgQVBJLAorICAgIHRoaW5ncyBnZXQgbW9yZSBjb21wbGljYXRlZC4KKworICAgIFRoZXJlIGlzIGEgc2luZ2xlIFdpbjMyIGxpYnJhcnkgaW4gYSBXaW4zMiBzeXN0ZW0uICBFdmVyeQorICAgIGZ1bmN0aW9uIGluIHRoaXMgbGlicmFyeSByZXNpZGVzIGluIGEgc2luZ2xlIERMTCBtb2R1bGUsIHRoYXQKKyAgICBpcyBzYWZlIHRvIGNhbGwgZnJvbSBhbnl3aGVyZS4gIE9uIHRoZSBvdGhlciBoYW5kLCB0aGVyZSBhcmUKKyAgICBtdWx0aXBsZSB2ZXJzaW9ucyBvZiB0aGUgQyBsaWJyYXJ5LCBhbmQgZWFjaCBvZiB0aGVtIGhhcyBpdHMKKyAgICBvd24gc2VwYXJhdGUgaW50ZXJuYWwgc3RhdGUuICBTdGFuZGFsb25lIGV4ZWN1dGFibGVzIGFuZCB1c2VyCisgICAgRExMcyB0aGF0IGNhbGwgc3RhbmRhcmQgQyBmdW5jdGlvbnMgbXVzdCBsaW5rIHRvIGEgQyBydW4tdGltZQorICAgIChDUlQpIGxpYnJhcnksIGJlIGl0IHN0YXRpYyBvciBzaGFyZWQgKERMTCkuICBJbnRlcm1peGluZworICAgIG9jY3VycyB3aGVuIGFuIGV4ZWN1dGFibGUgKG5vdCBuZWNlc3NhcmlseSBzdGFuZGFsb25lKSBhbmQgYQorICAgIERMTCBhcmUgbGlua2VkIHRvIGRpZmZlcmVudCBDUlRzLCBhbmQgYm90aCBhcmUgcnVubmluZyBpbiB0aGUKKyAgICBzYW1lIHByb2Nlc3MuCisKKyAgICBJbnRlcm1peGluZyBtdWx0aXBsZSBDUlRzIGlzIHBvc3NpYmxlLCBhcyBsb25nIGFzIHRoZWlyCisgICAgaW50ZXJuYWwgc3RhdGVzIGFyZSBrZXB0IGludGFjdC4gIFRoZSBNaWNyb3NvZnQgS25vd2xlZGdlIEJhc2UKKyAgICBhcnRpY2xlcyBLQjk0MjQ4ICJIT1dUTzogVXNlIHRoZSBDIFJ1bi1UaW1lIiBhbmQgS0IxNDA1ODQKKyAgICAiSE9XVE86IExpbmsgd2l0aCB0aGUgQ29ycmVjdCBDIFJ1bi1UaW1lIChDUlQpIExpYnJhcnkiCisgICAgbWVudGlvbiB0aGUgcG90ZW50aWFsIHByb2JsZW1zIHJhaXNlZCBieSBpbnRlcm1peGluZy4KKworICAgIElmIGludGVybWl4aW5nIHdvcmtzIGZvciB5b3UsIGl0J3MgYmVjYXVzZSB5b3VyIGFwcGxpY2F0aW9uCisgICAgYW5kIERMTHMgYXJlIGF2b2lkaW5nIHRoZSBjb3JydXB0aW9uIG9mIGVhY2ggb2YgdGhlIENSVHMnCisgICAgaW50ZXJuYWwgc3RhdGVzLCBtYXliZSBieSBjYXJlZnVsIGRlc2lnbiwgb3IgbWF5YmUgYnkgZm9ydHVuZS4KKworICAgIEFsc28gbm90ZSB0aGF0IGxpbmtpbmcgWkxJQjEuRExMIHRvIG5vbi1NaWNyb3NvZnQgQ1JUcywgc3VjaAorICAgIGFzIHRob3NlIHByb3ZpZGVkIGJ5IEJvcmxhbmQsIHJhaXNlcyBzaW1pbGFyIHByb2JsZW1zLgorCisKKzExLiBXaHkgYXJlIHlvdSBsaW5raW5nIFpMSUIxLkRMTCB0byBNU1ZDUlQuRExMPworCisgIC0gTVNWQ1JULkRMTCBleGlzdHMgb24gZXZlcnkgV2luZG93cyA5NSB3aXRoIGEgbmV3IHNlcnZpY2UgcGFjaworICAgIGluc3RhbGxlZCwgb3Igd2l0aCBNaWNyb3NvZnQgSW50ZXJuZXQgRXhwbG9yZXIgNCBvciBsYXRlciwgYW5kCisgICAgb24gYWxsIG90aGVyIFdpbmRvd3MgNC54IG9yIGxhdGVyIChXaW5kb3dzIDk4LCBXaW5kb3dzIE5UIDQsCisgICAgb3IgbGF0ZXIpLiAgSXQgaXMgZnJlZWx5IGRpc3RyaWJ1dGFibGU7IGlmIG5vdCBwcmVzZW50IGluIHRoZQorICAgIHN5c3RlbSwgaXQgY2FuIGJlIGRvd25sb2FkZWQgZnJvbSBNaWNyb3NvZnQgb3IgZnJvbSBvdGhlcgorICAgIHNvZnR3YXJlIHByb3ZpZGVyIGZvciBmcmVlLgorCisgICAgVGhlIGZhY3QgdGhhdCBNU1ZDUlQuRExMIGRvZXMgbm90IGV4aXN0IG9uIGEgdmlyZ2luIFdpbmRvd3MgOTUKKyAgICBpcyBub3Qgc28gcHJvYmxlbWF0aWMuICBXaW5kb3dzIDk1IGlzIHNjYXJjZWx5IGZvdW5kIG5vd2FkYXlzLAorICAgIE1pY3Jvc29mdCBlbmRlZCBpdHMgc3VwcG9ydCBhIGxvbmcgdGltZSBhZ28sIGFuZCBtYW55IHJlY2VudAorICAgIGFwcGxpY2F0aW9ucyBmcm9tIHZhcmlvdXMgdmVuZG9ycywgaW5jbHVkaW5nIE1pY3Jvc29mdCwgZG8gbm90CisgICAgZXZlbiBydW4gb24gaXQuICBGdXJ0aGVybW9yZSwgbm8gc2VyaW91cyB1c2VyIHNob3VsZCBydW4KKyAgICBXaW5kb3dzIDk1IHdpdGhvdXQgYSBwcm9wZXIgdXBkYXRlIGluc3RhbGxlZC4KKworCisxMi4gV2h5IGFyZSB5b3Ugbm90IGxpbmtpbmcgWkxJQjEuRExMIHRvCisgICAgPDxteSBmYXZvcml0ZSBDIHJ1bi10aW1lIGxpYnJhcnk+PiA/CisKKyAgLSBXZSBjb25zaWRlcmVkIGFuZCBhYmFuZG9uZWQgdGhlIGZvbGxvd2luZyBhbHRlcm5hdGl2ZXM6CisKKyAgICAqIExpbmtpbmcgWkxJQjEuRExMIHRvIGEgc3RhdGljIEMgbGlicmFyeSAoTElCQy5MSUIsIG9yCisgICAgICBMSUJDTVQuTElCKSBpcyBub3QgYSBnb29kIG9wdGlvbi4gIFBlb3BsZSBhcmUgdXNpbmcgdGhlIERMTAorICAgICAgbWFpbmx5IHRvIHNhdmUgZGlzayBzcGFjZS4gIElmIHlvdSBhcmUgbGlua2luZyB5b3VyIHByb2dyYW0KKyAgICAgIHRvIGEgc3RhdGljIEMgbGlicmFyeSwgeW91IG1heSBhcyB3ZWxsIGNvbnNpZGVyIGxpbmtpbmcgemxpYgorICAgICAgaW4gc3RhdGljYWxseSwgdG9vLgorCisgICAgKiBMaW5raW5nIFpMSUIxLkRMTCB0byBDUlRETEwuRExMIGxvb2tzIGFwcGVhbGluZywgYmVjYXVzZQorICAgICAgQ1JURExMLkRMTCBpcyBwcmVzZW50IG9uIGV2ZXJ5IFdpbjMyIGluc3RhbGxhdGlvbi4KKyAgICAgIFVuZm9ydHVuYXRlbHksIGl0IGhhcyBhIHNlcmllcyBvZiBwcm9ibGVtczogaXQgZG9lcyBub3QKKyAgICAgIHdvcmsgcHJvcGVybHkgd2l0aCBNaWNyb3NvZnQncyBDKysgbGlicmFyaWVzLCBpdCBkb2VzIG5vdAorICAgICAgcHJvdmlkZSBzdXBwb3J0IGZvciA2NC1iaXQgZmlsZSBvZmZzZXRzLCAoYW5kIHNvIG9uLi4uKSwKKyAgICAgIGFuZCBNaWNyb3NvZnQgZGlzY29udGludWVkIGl0cyBzdXBwb3J0IGEgbG9uZyB0aW1lIGFnby4KKworICAgICogTGlua2luZyBaTElCMS5ETEwgdG8gTVNWQ1I3MC5ETEwgb3IgTVNWQ1I3MS5ETEwsIHN1cHBsaWVkCisgICAgICB3aXRoIHRoZSBNaWNyb3NvZnQgLk5FVCBwbGF0Zm9ybSwgYW5kIFZpc3VhbCBDKysgNy4wLzcuMSwKKyAgICAgIHJhaXNlcyBwcm9ibGVtcyByZWxhdGVkIHRvIHRoZSBzdGF0dXMgb2YgWkxJQjEuRExMIGFzIGEKKyAgICAgIHN5c3RlbSBjb21wb25lbnQuICBBY2NvcmRpbmcgdG8gdGhlIE1pY3Jvc29mdCBLbm93bGVkZ2UgQmFzZQorICAgICAgYXJ0aWNsZSBLQjMyNjkyMiAiSU5GTzogUmVkaXN0cmlidXRpb24gb2YgdGhlIFNoYXJlZCBDCisgICAgICBSdW50aW1lIENvbXBvbmVudCBpbiBWaXN1YWwgQysrIC5ORVQiLCBNU1ZDUjcwLkRMTCBhbmQKKyAgICAgIE1TVkNSNzEuRExMIGFyZSBub3Qgc3VwcG9zZWQgdG8gZnVuY3Rpb24gYXMgc3lzdGVtIERMTHMsCisgICAgICBiZWNhdXNlIHRoZXkgbWF5IGNsYXNoIHdpdGggTVNWQ1JULkRMTC4gIEluc3RlYWQsIHRoZQorICAgICAgYXBwbGljYXRpb24ncyBpbnN0YWxsZXIgaXMgc3VwcG9zZWQgdG8gcHV0IHRoZXNlIERMTHMKKyAgICAgIChpZiBuZWVkZWQpIGluIHRoZSBhcHBsaWNhdGlvbidzIHByaXZhdGUgZGlyZWN0b3J5LgorICAgICAgSWYgWkxJQjEuRExMIGRlcGVuZHMgb24gYSBub24tc3lzdGVtIHJ1bnRpbWUsIGl0IGNhbm5vdAorICAgICAgZnVuY3Rpb24gYXMgYSByZWRpc3RyaWJ1dGFibGUgc3lzdGVtIGNvbXBvbmVudC4KKworICAgICogTGlua2luZyBaTElCMS5ETEwgdG8gbm9uLU1pY3Jvc29mdCBydW50aW1lcywgc3VjaCBhcworICAgICAgQm9ybGFuZCdzLCBvciBDeWd3aW4ncywgcmFpc2VzIHByb2JsZW1zIHJlbGF0ZWQgdG8gdGhlCisgICAgICByZWxpYWJsZSBwcmVzZW5jZSBvZiB0aGVzZSBydW50aW1lcyBvbiBXaW4zMiBzeXN0ZW1zLgorICAgICAgSXQncyBlYXNpZXIgdG8gbGV0IHRoZSBETEwgYnVpbGQgb2YgemxpYiB1cCB0byB0aGUgcGVvcGxlCisgICAgICB3aG8gZGlzdHJpYnV0ZSB0aGVzZSBydW50aW1lcywgYW5kIHdobyBtYXkgcHJvY2VlZCBhcworICAgICAgZXhwbGFpbmVkIGluIHRoZSBhbnN3ZXIgdG8gUXVlc3Rpb24gMTQuCisKKworMTMuIElmIFpMSUIxLkRMTCBjYW5ub3QgYmUgbGlua2VkIHRvIE1TVkNSNzAuRExMIG9yIE1TVkNSNzEuRExMLAorICAgIGhvdyBjYW4gSSBidWlsZC91c2UgWkxJQjEuRExMIGluIE1pY3Jvc29mdCBWaXN1YWwgQysrIDcuMAorICAgIChWaXN1YWwgU3R1ZGlvIC5ORVQpIG9yIG5ld2VyPworCisgIC0gRHVlIHRvIHRoZSBwcm9ibGVtcyBleHBsYWluZWQgaW4gdGhlIE1pY3Jvc29mdCBLbm93bGVkZ2UgQmFzZQorICAgIGFydGljbGUgS0IzMjY5MjIgKHNlZSB0aGUgcHJldmlvdXMgYW5zd2VyKSwgdGhlIEMgcnVudGltZSB0aGF0CisgICAgY29tZXMgd2l0aCB0aGUgVkM3IGVudmlyb25tZW50IGlzIG5vIGxvbmdlciBjb25zaWRlcmVkIGEKKyAgICBzeXN0ZW0gY29tcG9uZW50LiAgVGhhdCBpcywgaXQgc2hvdWxkIG5vdCBiZSBhc3N1bWVkIHRoYXQgdGhpcworICAgIHJ1bnRpbWUgZXhpc3RzLCBvciBtYXkgYmUgaW5zdGFsbGVkIGluIGEgc3lzdGVtIGRpcmVjdG9yeS4KKyAgICBTaW5jZSBaTElCMS5ETEwgaXMgc3VwcG9zZWQgdG8gYmUgYSBzeXN0ZW0gY29tcG9uZW50LCBpdCBtYXkKKyAgICBub3QgZGVwZW5kIG9uIGEgbm9uLXN5c3RlbSBjb21wb25lbnQuCisKKyAgICBJbiBvcmRlciB0byBsaW5rIFpMSUIxLkRMTCBhbmQgeW91ciBhcHBsaWNhdGlvbiB0byBNU1ZDUlQuRExMCisgICAgaW4gVkM3LCB5b3UgbmVlZCB0aGUgbGlicmFyeSBvZiBWaXN1YWwgQysrIDYuMCBvciBvbGRlci4gIElmCisgICAgeW91IGRvbid0IGhhdmUgdGhpcyBsaWJyYXJ5IGF0IGhhbmQsIGl0J3MgcHJvYmFibHkgYmVzdCBub3QgdG8KKyAgICB1c2UgWkxJQjEuRExMLgorCisgICAgV2UgYXJlIGhvcGluZyB0aGF0LCBpbiB0aGUgZnV0dXJlLCBNaWNyb3NvZnQgd2lsbCBwcm92aWRlIGEKKyAgICB3YXkgdG8gYnVpbGQgYXBwbGljYXRpb25zIGxpbmtlZCB0byBhIHByb3BlciBzeXN0ZW0gcnVudGltZSwKKyAgICBmcm9tIHRoZSBWaXN1YWwgQysrIGVudmlyb25tZW50LiAgVW50aWwgdGhlbiwgeW91IGhhdmUgYQorICAgIGNvdXBsZSBvZiBhbHRlcm5hdGl2ZXMsIHN1Y2ggYXMgbGlua2luZyB6bGliIGluIHN0YXRpY2FsbHkuCisgICAgSWYgeW91ciBhcHBsaWNhdGlvbiByZXF1aXJlcyBkeW5hbWljIGxpbmtpbmcsIHlvdSBtYXkgcHJvY2VlZAorICAgIGFzIGV4cGxhaW5lZCBpbiB0aGUgYW5zd2VyIHRvIFF1ZXN0aW9uIDE0LgorCisKKzE0LiBJIG5lZWQgdG8gbGluayBteSBvd24gRExMIGJ1aWxkIHRvIGEgQ1JUIGRpZmZlcmVudCB0aGFuCisgICAgTVNWQ1JULkRMTC4gIFdoYXQgY2FuIEkgZG8/CisKKyAgLSBGZWVsIGZyZWUgdG8gcmVidWlsZCB0aGUgRExMIGZyb20gdGhlIHpsaWIgc291cmNlcywgYW5kIGxpbmsKKyAgICBpdCB0aGUgd2F5IHlvdSB3YW50LiAgWW91IHNob3VsZCwgaG93ZXZlciwgY2xlYXJseSBzdGF0ZSB0aGF0CisgICAgeW91ciBidWlsZCBpcyB1bm9mZmljaWFsLiAgWW91IHNob3VsZCBnaXZlIGl0IGEgZGlmZmVyZW50IGZpbGUKKyAgICBuYW1lLCBhbmQvb3IgaW5zdGFsbCBpdCBpbiBhIHByaXZhdGUgZGlyZWN0b3J5IHRoYXQgY2FuIGJlCisgICAgYWNjZXNzZWQgYnkgeW91ciBhcHBsaWNhdGlvbiBvbmx5LCBhbmQgaXMgbm90IHZpc2libGUgdG8gdGhlCisgICAgb3RoZXJzIChpLmUuIGl0J3MgbmVpdGhlciBpbiB0aGUgUEFUSCwgbm9yIGluIHRoZSBTWVNURU0gb3IKKyAgICBTWVNURU0zMiBkaXJlY3RvcmllcykuICBPdGhlcndpc2UsIHlvdXIgYnVpbGQgbWF5IGNsYXNoIHdpdGgKKyAgICBhcHBsaWNhdGlvbnMgdGhhdCBsaW5rIHRvIHRoZSBvZmZpY2lhbCBidWlsZC4KKworICAgIEZvciBleGFtcGxlLCBpbiBDeWd3aW4sIHpsaWIgaXMgbGlua2VkIHRvIHRoZSBDeWd3aW4gcnVudGltZQorICAgIENZR1dJTjEuRExMLCBhbmQgaXQgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIG5hbWUgQ1lHWi5ETEwuCisKKworMTUuIE1heSBJIGluY2x1ZGUgYWRkaXRpb25hbCBwaWVjZXMgb2YgY29kZSB0aGF0IEkgZmluZCB1c2VmdWwsCisgICAgbGluayB0aGVtIGluIFpMSUIxLkRMTCwgYW5kIGV4cG9ydCB0aGVtPworCisgIC0gTm8uICBBIGxlZ2l0aW1hdGUgYnVpbGQgb2YgWkxJQjEuRExMIG11c3Qgbm90IGluY2x1ZGUgY29kZQorICAgIHRoYXQgZG9lcyBub3Qgb3JpZ2luYXRlIGZyb20gdGhlIG9mZmljaWFsIHpsaWIgc291cmNlIGNvZGUuCisgICAgQnV0IHlvdSBjYW4gbWFrZSB5b3VyIG93biBwcml2YXRlIERMTCBidWlsZCwgdW5kZXIgYSBkaWZmZXJlbnQKKyAgICBmaWxlIG5hbWUsIGFzIHN1Z2dlc3RlZCBpbiB0aGUgcHJldmlvdXMgYW5zd2VyLgorCisgICAgRm9yIGV4YW1wbGUsIHpsaWIgaXMgYSBwYXJ0IG9mIHRoZSBWQ0wgbGlicmFyeSwgZGlzdHJpYnV0ZWQKKyAgICB3aXRoIEJvcmxhbmQgRGVscGhpIGFuZCBDKysgQnVpbGRlci4gIFRoZSBETEwgYnVpbGQgb2YgVkNMCisgICAgaXMgYSByZWRpc3RyaWJ1dGFibGUgZmlsZSwgbmFtZWQgVkNMeHguRExMLgorCisKKzE2LiBNYXkgSSByZW1vdmUgc29tZSBmdW5jdGlvbmFsaXR5IG91dCBvZiBaTElCMS5ETEwsIGJ5IGVuYWJsaW5nCisgICAgbWFjcm9zIGxpa2UgTk9fR1pDT01QUkVTUyBvciBOT19HWklQIGF0IGNvbXBpbGUgdGltZT8KKworICAtIE5vLiAgQSBsZWdpdGltYXRlIGJ1aWxkIG9mIFpMSUIxLkRMTCBtdXN0IHByb3ZpZGUgdGhlIGNvbXBsZXRlCisgICAgemxpYiBmdW5jdGlvbmFsaXR5LCBhcyBpbXBsZW1lbnRlZCBpbiB0aGUgb2ZmaWNpYWwgemxpYiBzb3VyY2UKKyAgICBjb2RlLiAgQnV0IHlvdSBjYW4gbWFrZSB5b3VyIG93biBwcml2YXRlIERMTCBidWlsZCwgdW5kZXIgYQorICAgIGRpZmZlcmVudCBmaWxlIG5hbWUsIGFzIHN1Z2dlc3RlZCBpbiB0aGUgcHJldmlvdXMgYW5zd2VyLgorCisKKzE3LiBJIG1hZGUgbXkgb3duIFpMSUIxLkRMTCBidWlsZC4gIENhbiBJIHRlc3QgaXQgZm9yIGNvbXBsaWFuY2U/CisKKyAgLSBXZSBwcmVmZXIgdGhhdCB5b3UgZG93bmxvYWQgdGhlIG9mZmljaWFsIERMTCBmcm9tIHRoZSB6bGliCisgICAgd2ViIHNpdGUuICBJZiB5b3UgbmVlZCBzb21ldGhpbmcgcGVjdWxpYXIgZnJvbSB0aGlzIERMTCwgeW91CisgICAgY2FuIHNlbmQgeW91ciBzdWdnZXN0aW9uIHRvIHRoZSB6bGliIG1haWxpbmcgbGlzdC4KKworICAgIEhvd2V2ZXIsIGluIGNhc2UgeW91IGRvIHJlYnVpbGQgdGhlIERMTCB5b3Vyc2VsZiwgeW91IGNhbiBydW4KKyAgICBpdCB3aXRoIHRoZSB0ZXN0IHByb2dyYW1zIGZvdW5kIGluIHRoZSBETEwgZGlzdHJpYnV0aW9uLgorICAgIFJ1bm5pbmcgdGhlc2UgdGVzdCBwcm9ncmFtcyBpcyBub3QgYSBndWFyYW50ZWUgb2YgY29tcGxpYW5jZSwKKyAgICBidXQgYSBmYWlsdXJlIGNhbiBpbXBseSBhIGRldGVjdGVkIHByb2JsZW0uCisKKyoqCisKK1RoaXMgZG9jdW1lbnQgaXMgd3JpdHRlbiBhbmQgbWFpbnRhaW5lZCBieQorQ29zbWluIFRydXRhIDxjb3NtaW50QGNzLnViYmNsdWoucm8+CmRpZmYgLS1naXQgYS9zcmMvd2luMzIvTWFrZWZpbGUuYm9yIGIvc3JjL3dpbjMyL01ha2VmaWxlLmJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDk1MzUzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3dpbjMyL01ha2VmaWxlLmJvcgpAQCAtMCwwICsxLDEwOSBAQAorIyBNYWtlZmlsZSBmb3IgemxpYgorIyBCb3JsYW5kIEMrKyBmb3IgV2luMzIKKyMKKyMgVXNhZ2U6CisjICBtYWtlIC1mIHdpbjMyL01ha2VmaWxlLmJvcgorCisjIC0tLS0tLS0tLS0tLSBCb3JsYW5kIEMrKyAtLS0tLS0tLS0tLS0KKworIyBPcHRpb25hbCBub25zdGFuZGFyZCBwcmVwcm9jZXNzb3IgZmxhZ3MgKGUuZy4gLURNQVhfTUVNX0xFVkVMPTcpCisjIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgZW52aXJvbm1lbnQgdmlhICJzZXQgTE9DQUxfWkxJQj0tREZPTyIgb3IKKyMgYWRkZWQgdG8gdGhlIGRlY2xhcmF0aW9uIG9mIExPQyBoZXJlOgorTE9DID0gJChMT0NBTF9aTElCKQorCitDQyA9IGJjYzMyCitBUyA9IGJjYzMyCitMRCA9IGJjYzMyCitBUiA9IHRsaWIKK0NGTEFHUyAgPSAtYSAtZCAtay0gLU8yICQoTE9DKQorQVNGTEFHUyA9ICQoTE9DKQorTERGTEFHUyA9ICQoTE9DKQorCisKKyMgdmFyaWFibGVzCitaTElCX0xJQiA9IHpsaWIubGliCisKK09CSjEgPSBhZGxlcjMyLm9iaiBjb21wcmVzcy5vYmogY3JjMzIub2JqIGRlZmxhdGUub2JqIGd6Y2xvc2Uub2JqIGd6bGliLm9iaiBnenJlYWQub2JqCitPQkoyID0gZ3p3cml0ZS5vYmogaW5mYmFjay5vYmogaW5mZmFzdC5vYmogaW5mbGF0ZS5vYmogaW5mdHJlZXMub2JqIHRyZWVzLm9iaiB1bmNvbXByLm9iaiB6dXRpbC5vYmoKKyNPQkpBID0KK09CSlAxID0gK2FkbGVyMzIub2JqK2NvbXByZXNzLm9iaitjcmMzMi5vYmorZGVmbGF0ZS5vYmorZ3pjbG9zZS5vYmorZ3psaWIub2JqK2d6cmVhZC5vYmoKK09CSlAyID0gK2d6d3JpdGUub2JqK2luZmJhY2sub2JqK2luZmZhc3Qub2JqK2luZmxhdGUub2JqK2luZnRyZWVzLm9iait0cmVlcy5vYmordW5jb21wci5vYmorenV0aWwub2JqCisjT0JKUEE9CisKKworIyB0YXJnZXRzCithbGw6ICQoWkxJQl9MSUIpIGV4YW1wbGUuZXhlIG1pbmlnemlwLmV4ZQorCisuYy5vYmo6CisJJChDQykgLWMgJChDRkxBR1MpICQ8CisKKy5hc20ub2JqOgorCSQoQVMpIC1jICQoQVNGTEFHUykgJDwKKworYWRsZXIzMi5vYmo6IGFkbGVyMzIuYyB6bGliLmggemNvbmYuaAorCitjb21wcmVzcy5vYmo6IGNvbXByZXNzLmMgemxpYi5oIHpjb25mLmgKKworY3JjMzIub2JqOiBjcmMzMi5jIHpsaWIuaCB6Y29uZi5oIGNyYzMyLmgKKworZGVmbGF0ZS5vYmo6IGRlZmxhdGUuYyBkZWZsYXRlLmggenV0aWwuaCB6bGliLmggemNvbmYuaAorCitnemNsb3NlLm9iajogZ3pjbG9zZS5jIHpsaWIuaCB6Y29uZi5oIGd6Z3V0cy5oCisKK2d6bGliLm9iajogZ3psaWIuYyB6bGliLmggemNvbmYuaCBnemd1dHMuaAorCitnenJlYWQub2JqOiBnenJlYWQuYyB6bGliLmggemNvbmYuaCBnemd1dHMuaAorCitnendyaXRlLm9iajogZ3p3cml0ZS5jIHpsaWIuaCB6Y29uZi5oIGd6Z3V0cy5oCisKK2luZmJhY2sub2JqOiBpbmZiYWNrLmMgenV0aWwuaCB6bGliLmggemNvbmYuaCBpbmZ0cmVlcy5oIGluZmxhdGUuaCBcCisgaW5mZmFzdC5oIGluZmZpeGVkLmgKKworaW5mZmFzdC5vYmo6IGluZmZhc3QuYyB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oIGluZnRyZWVzLmggaW5mbGF0ZS5oIFwKKyBpbmZmYXN0LmgKKworaW5mbGF0ZS5vYmo6IGluZmxhdGUuYyB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oIGluZnRyZWVzLmggaW5mbGF0ZS5oIFwKKyBpbmZmYXN0LmggaW5mZml4ZWQuaAorCitpbmZ0cmVlcy5vYmo6IGluZnRyZWVzLmMgenV0aWwuaCB6bGliLmggemNvbmYuaCBpbmZ0cmVlcy5oCisKK3RyZWVzLm9iajogdHJlZXMuYyB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oIGRlZmxhdGUuaCB0cmVlcy5oCisKK3VuY29tcHIub2JqOiB1bmNvbXByLmMgemxpYi5oIHpjb25mLmgKKworenV0aWwub2JqOiB6dXRpbC5jIHp1dGlsLmggemxpYi5oIHpjb25mLmgKKworZXhhbXBsZS5vYmo6IHRlc3QvZXhhbXBsZS5jIHpsaWIuaCB6Y29uZi5oCisKK21pbmlnemlwLm9iajogdGVzdC9taW5pZ3ppcC5jIHpsaWIuaCB6Y29uZi5oCisKKworIyBGb3IgdGhlIHNha2Ugb2YgdGhlIG9sZCBCb3JsYW5kIG1ha2UsCisjIHRoZSBjb21tYW5kIGxpbmUgaXMgY3V0IHRvIGZpdCBpbiB0aGUgTVMtRE9TIDEyOCBieXRlIGxpbWl0OgorJChaTElCX0xJQik6ICQoT0JKMSkgJChPQkoyKSAkKE9CSkEpCisJLWRlbCAkKFpMSUJfTElCKQorCSQoQVIpICQoWkxJQl9MSUIpICQoT0JKUDEpCisJJChBUikgJChaTElCX0xJQikgJChPQkpQMikKKwkkKEFSKSAkKFpMSUJfTElCKSAkKE9CSlBBKQorCisKKyMgdGVzdGluZwordGVzdDogZXhhbXBsZS5leGUgbWluaWd6aXAuZXhlCisJZXhhbXBsZQorCWVjaG8gaGVsbG8gd29ybGQgfCBtaW5pZ3ppcCB8IG1pbmlnemlwIC1kCisKK2V4YW1wbGUuZXhlOiBleGFtcGxlLm9iaiAkKFpMSUJfTElCKQorCSQoTEQpICQoTERGTEFHUykgZXhhbXBsZS5vYmogJChaTElCX0xJQikKKworbWluaWd6aXAuZXhlOiBtaW5pZ3ppcC5vYmogJChaTElCX0xJQikKKwkkKExEKSAkKExERkxBR1MpIG1pbmlnemlwLm9iaiAkKFpMSUJfTElCKQorCisKKyMgY2xlYW51cAorY2xlYW46CisJLWRlbCAkKFpMSUJfTElCKQorCS1kZWwgKi5vYmoKKwktZGVsICouZXhlCisJLWRlbCAqLnRkcworCS1kZWwgemxpYi5iYWsKKwktZGVsIGZvby5negpkaWZmIC0tZ2l0IGEvc3JjL3dpbjMyL01ha2VmaWxlLmdjYyBiL3NyYy93aW4zMi9NYWtlZmlsZS5nY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgxZTM5MQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy93aW4zMi9NYWtlZmlsZS5nY2MKQEAgLTAsMCArMSwxNzcgQEAKKyMgTWFrZWZpbGUgZm9yIHpsaWIsIGRlcml2ZWQgZnJvbSBNYWtlZmlsZS5kajIuCisjIE1vZGlmaWVkIGZvciBtaW5ndzMyIGJ5IEMuIFNwaWVsZXIsIDYvMTYvOTguCisjIFVwZGF0ZWQgZm9yIHpsaWIgMS4yLnggYnkgQ2hyaXN0aWFuIFNwaWVsZXIgYW5kIENvc21pbiBUcnV0YSwgTWFyLTIwMDMuCisjIExhc3QgdXBkYXRlZDogTWFyIDIwMTIuCisjIFRlc3RlZCB1bmRlciBDeWd3aW4gYW5kIE1pbkdXLgorCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDAzIEplYW4tbG91cCBHYWlsbHkuCisjIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKKworIyBUbyBjb21waWxlLCBvciB0byBjb21waWxlIGFuZCB0ZXN0LCB0eXBlIGZyb20gdGhlIHRvcCBsZXZlbCB6bGliIGRpcmVjdG9yeToKKyMKKyMgICBtYWtlIC1md2luMzIvTWFrZWZpbGUuZ2NjOyAgbWFrZSB0ZXN0IHRlc3RkbGwgLWZ3aW4zMi9NYWtlZmlsZS5nY2MKKyMKKyMgVG8gaW5zdGFsbCBsaWJ6LmEsIHpjb25mLmggYW5kIHpsaWIuaCBpbiB0aGUgc3lzdGVtIGRpcmVjdG9yaWVzLCB0eXBlOgorIworIyAgIG1ha2UgaW5zdGFsbCAtZndpbjMyL01ha2VmaWxlLmdjYworIworIyBCSU5BUllfUEFUSCwgSU5DTFVERV9QQVRIIGFuZCBMSUJSQVJZX1BBVEggbXVzdCBiZSBzZXQuCisjCisjIFRvIGluc3RhbGwgdGhlIHNoYXJlZCBsaWIsIGFwcGVuZCBTSEFSRURfTU9ERT0xIHRvIHRoZSBtYWtlIGNvbW1hbmQgOgorIworIyAgIG1ha2UgaW5zdGFsbCAtZndpbjMyL01ha2VmaWxlLmdjYyBTSEFSRURfTU9ERT0xCisKKyMgTm90ZToKKyMgSWYgdGhlIHBsYXRmb3JtIGlzICpub3QqIE1pbkdXIChlLmcuIGl0IGlzIEN5Z3dpbiBvciBVV0lOKSwKKyMgdGhlIERMTCBuYW1lIHNob3VsZCBiZSBjaGFuZ2VkIGZyb20gInpsaWIxLmRsbCIuCisKK1NUQVRJQ0xJQiA9IGxpYnouYQorU0hBUkVETElCID0gemxpYjEuZGxsCitJTVBMSUIgICAgPSBsaWJ6LmRsbC5hCisKKyMKKyMgU2V0IHRvIDEgaWYgc2hhcmVkIG9iamVjdCBuZWVkcyB0byBiZSBpbnN0YWxsZWQKKyMKK1NIQVJFRF9NT0RFPTAKKworI0xPQyA9IC1EWkxJQl9ERUJVRyAtZworCitQUkVGSVggPQorQ0MgPSAkKFBSRUZJWClnY2MKK0NGTEFHUyA9ICQoTE9DKSAtTzMgLVdhbGwKKworQVMgPSAkKENDKQorQVNGTEFHUyA9ICQoTE9DKSAtV2FsbAorCitMRCA9ICQoQ0MpCitMREZMQUdTID0gJChMT0MpCisKK0FSID0gJChQUkVGSVgpYXIKK0FSRkxBR1MgPSByY3MKKworUkMgPSAkKFBSRUZJWCl3aW5kcmVzCitSQ0ZMQUdTID0gLS1kZWZpbmUgR0NDX1dJTkRSRVMKKworU1RSSVAgPSAkKFBSRUZJWClzdHJpcAorCitDUCA9IGNwIC1mcAorIyBJZiBHTlUgaW5zdGFsbCBpcyBhdmFpbGFibGUsIHJlcGxhY2UgJChDUCkgd2l0aCBpbnN0YWxsLgorSU5TVEFMTCA9ICQoQ1ApCitSTSA9IHJtIC1mCisKK3ByZWZpeCA/PSAvdXNyL2xvY2FsCitleGVjX3ByZWZpeCA9ICQocHJlZml4KQorCitPQkpTID0gYWRsZXIzMi5vIGNvbXByZXNzLm8gY3JjMzIubyBkZWZsYXRlLm8gZ3pjbG9zZS5vIGd6bGliLm8gZ3pyZWFkLm8gXAorICAgICAgIGd6d3JpdGUubyBpbmZiYWNrLm8gaW5mZmFzdC5vIGluZmxhdGUubyBpbmZ0cmVlcy5vIHRyZWVzLm8gdW5jb21wci5vIHp1dGlsLm8KK09CSkEgPQorCithbGw6ICQoU1RBVElDTElCKSAkKFNIQVJFRExJQikgJChJTVBMSUIpIGV4YW1wbGUuZXhlIG1pbmlnemlwLmV4ZSBleGFtcGxlX2QuZXhlIG1pbmlnemlwX2QuZXhlCisKK3Rlc3Q6IGV4YW1wbGUuZXhlIG1pbmlnemlwLmV4ZQorCS4vZXhhbXBsZQorCWVjaG8gaGVsbG8gd29ybGQgfCAuL21pbmlnemlwIHwgLi9taW5pZ3ppcCAtZAorCit0ZXN0ZGxsOiBleGFtcGxlX2QuZXhlIG1pbmlnemlwX2QuZXhlCisJLi9leGFtcGxlX2QKKwllY2hvIGhlbGxvIHdvcmxkIHwgLi9taW5pZ3ppcF9kIHwgLi9taW5pZ3ppcF9kIC1kCisKKy5jLm86CisJJChDQykgJChDRkxBR1MpIC1jIC1vICRAICQ8CisKKy5TLm86CisJJChBUykgJChBU0ZMQUdTKSAtYyAtbyAkQCAkPAorCiskKFNUQVRJQ0xJQik6ICQoT0JKUykgJChPQkpBKQorCSQoQVIpICQoQVJGTEFHUykgJEAgJChPQkpTKSAkKE9CSkEpCisKKyQoSU1QTElCKTogJChTSEFSRURMSUIpCisKKyQoU0hBUkVETElCKTogd2luMzIvemxpYi5kZWYgJChPQkpTKSAkKE9CSkEpIHpsaWJyYy5vCisJJChDQykgLXNoYXJlZCAtV2wsLS1vdXQtaW1wbGliLCQoSU1QTElCKSAkKExERkxBR1MpIFwKKwktbyAkQCB3aW4zMi96bGliLmRlZiAkKE9CSlMpICQoT0JKQSkgemxpYnJjLm8KKwkkKFNUUklQKSAkQAorCitleGFtcGxlLmV4ZTogZXhhbXBsZS5vICQoU1RBVElDTElCKQorCSQoTEQpICQoTERGTEFHUykgLW8gJEAgZXhhbXBsZS5vICQoU1RBVElDTElCKQorCSQoU1RSSVApICRACisKK21pbmlnemlwLmV4ZTogbWluaWd6aXAubyAkKFNUQVRJQ0xJQikKKwkkKExEKSAkKExERkxBR1MpIC1vICRAIG1pbmlnemlwLm8gJChTVEFUSUNMSUIpCisJJChTVFJJUCkgJEAKKworZXhhbXBsZV9kLmV4ZTogZXhhbXBsZS5vICQoSU1QTElCKQorCSQoTEQpICQoTERGTEFHUykgLW8gJEAgZXhhbXBsZS5vICQoSU1QTElCKQorCSQoU1RSSVApICRACisKK21pbmlnemlwX2QuZXhlOiBtaW5pZ3ppcC5vICQoSU1QTElCKQorCSQoTEQpICQoTERGTEFHUykgLW8gJEAgbWluaWd6aXAubyAkKElNUExJQikKKwkkKFNUUklQKSAkQAorCitleGFtcGxlLm86IHRlc3QvZXhhbXBsZS5jIHpsaWIuaCB6Y29uZi5oCisJJChDQykgJChDRkxBR1MpIC1JLiAtYyAtbyAkQCB0ZXN0L2V4YW1wbGUuYworCittaW5pZ3ppcC5vOiB0ZXN0L21pbmlnemlwLmMgemxpYi5oIHpjb25mLmgKKwkkKENDKSAkKENGTEFHUykgLUkuIC1jIC1vICRAIHRlc3QvbWluaWd6aXAuYworCit6bGlicmMubzogd2luMzIvemxpYjEucmMKKwkkKFJDKSAkKFJDRkxBR1MpIC1vICRAIHdpbjMyL3psaWIxLnJjCisKKy5QSE9OWTogaW5zdGFsbCB1bmluc3RhbGwgY2xlYW4KKworaW5zdGFsbDogemxpYi5oIHpjb25mLmggJChTVEFUSUNMSUIpICQoSU1QTElCKQorCUBpZiB0ZXN0IC16ICIkKERFU1RESVIpJChJTkNMVURFX1BBVEgpIiAtbyAteiAiJChERVNURElSKSQoTElCUkFSWV9QQVRIKSIgLW8gLXogIiQoREVTVERJUikkKEJJTkFSWV9QQVRIKSI7IHRoZW4gXAorCQllY2hvIElOQ0xVREVfUEFUSCwgTElCUkFSWV9QQVRILCBhbmQgQklOQVJZX1BBVEggbXVzdCBiZSBzcGVjaWZpZWQ7IFwKKwkJZXhpdCAxOyBcCisJZmkKKwktQG1rZGlyIC1wICckKERFU1RESVIpJChJTkNMVURFX1BBVEgpJworCS1AbWtkaXIgLXAgJyQoREVTVERJUikkKExJQlJBUllfUEFUSCknICckKERFU1RESVIpJChMSUJSQVJZX1BBVEgpJy9wa2djb25maWcKKwktaWYgWyAiJChTSEFSRURfTU9ERSkiID0gIjEiIF07IHRoZW4gXAorCQlta2RpciAtcCAnJChERVNURElSKSQoQklOQVJZX1BBVEgpJzsgXAorCQkkKElOU1RBTEwpICQoU0hBUkVETElCKSAnJChERVNURElSKSQoQklOQVJZX1BBVEgpJzsgXAorCQkkKElOU1RBTEwpICQoSU1QTElCKSAnJChERVNURElSKSQoTElCUkFSWV9QQVRIKSc7IFwKKwlmaQorCS0kKElOU1RBTEwpIHpsaWIuaCAnJChERVNURElSKSQoSU5DTFVERV9QQVRIKScKKwktJChJTlNUQUxMKSB6Y29uZi5oICckKERFU1RESVIpJChJTkNMVURFX1BBVEgpJworCS0kKElOU1RBTEwpICQoU1RBVElDTElCKSAnJChERVNURElSKSQoTElCUkFSWV9QQVRIKScKKwlzZWQgXAorCQktZSAnc3xAcHJlZml4QHwke3ByZWZpeH18ZycgXAorCQktZSAnc3xAZXhlY19wcmVmaXhAfCR7ZXhlY19wcmVmaXh9fGcnIFwKKwkJLWUgJ3N8QGxpYmRpckB8JChMSUJSQVJZX1BBVEgpfGcnIFwKKwkJLWUgJ3N8QHNoYXJlZGxpYmRpckB8JChMSUJSQVJZX1BBVEgpfGcnIFwKKwkJLWUgJ3N8QGluY2x1ZGVkaXJAfCQoSU5DTFVERV9QQVRIKXxnJyBcCisJCS1lICdzfEBWRVJTSU9OQHwnYHNlZCAtbiAtZSAnL1ZFUlNJT04gIi9zLy4qIlwoLipcKSIuKi9cMS9wJyB6bGliLmhgJ3xnJyBcCisJCXpsaWIucGMuaW4gPiAnJChERVNURElSKSQoTElCUkFSWV9QQVRIKScvcGtnY29uZmlnL3psaWIucGMKKwordW5pbnN0YWxsOgorCS1pZiBbICIkKFNIQVJFRF9NT0RFKSIgPSAiMSIgXTsgdGhlbiBcCisJCSQoUk0pICckKERFU1RESVIpJChCSU5BUllfUEFUSCknLyQoU0hBUkVETElCKTsgXAorCQkkKFJNKSAnJChERVNURElSKSQoTElCUkFSWV9QQVRIKScvJChJTVBMSUIpOyBcCisJZmkKKwktJChSTSkgJyQoREVTVERJUikkKElOQ0xVREVfUEFUSCknL3psaWIuaAorCS0kKFJNKSAnJChERVNURElSKSQoSU5DTFVERV9QQVRIKScvemNvbmYuaAorCS0kKFJNKSAnJChERVNURElSKSQoTElCUkFSWV9QQVRIKScvJChTVEFUSUNMSUIpCisKK2NsZWFuOgorCS0kKFJNKSAkKFNUQVRJQ0xJQikKKwktJChSTSkgJChTSEFSRURMSUIpCisJLSQoUk0pICQoSU1QTElCKQorCS0kKFJNKSAqLm8KKwktJChSTSkgKi5leGUKKwktJChSTSkgZm9vLmd6CisKK2FkbGVyMzIubzogemxpYi5oIHpjb25mLmgKK2NvbXByZXNzLm86IHpsaWIuaCB6Y29uZi5oCitjcmMzMi5vOiBjcmMzMi5oIHpsaWIuaCB6Y29uZi5oCitkZWZsYXRlLm86IGRlZmxhdGUuaCB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oCitnemNsb3NlLm86IHpsaWIuaCB6Y29uZi5oIGd6Z3V0cy5oCitnemxpYi5vOiB6bGliLmggemNvbmYuaCBnemd1dHMuaAorZ3pyZWFkLm86IHpsaWIuaCB6Y29uZi5oIGd6Z3V0cy5oCitnendyaXRlLm86IHpsaWIuaCB6Y29uZi5oIGd6Z3V0cy5oCitpbmZmYXN0Lm86IHp1dGlsLmggemxpYi5oIHpjb25mLmggaW5mdHJlZXMuaCBpbmZsYXRlLmggaW5mZmFzdC5oCitpbmZsYXRlLm86IHp1dGlsLmggemxpYi5oIHpjb25mLmggaW5mdHJlZXMuaCBpbmZsYXRlLmggaW5mZmFzdC5oCitpbmZiYWNrLm86IHp1dGlsLmggemxpYi5oIHpjb25mLmggaW5mdHJlZXMuaCBpbmZsYXRlLmggaW5mZmFzdC5oCitpbmZ0cmVlcy5vOiB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oIGluZnRyZWVzLmgKK3RyZWVzLm86IGRlZmxhdGUuaCB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oIHRyZWVzLmgKK3VuY29tcHIubzogemxpYi5oIHpjb25mLmgKK3p1dGlsLm86IHp1dGlsLmggemxpYi5oIHpjb25mLmgKZGlmZiAtLWdpdCBhL3NyYy93aW4zMi9NYWtlZmlsZS5tc2MgYi9zcmMvd2luMzIvTWFrZWZpbGUubXNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljNjUxNTMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvd2luMzIvTWFrZWZpbGUubXNjCkBAIC0wLDAgKzEsMTU5IEBACisjIE1ha2VmaWxlIGZvciB6bGliIHVzaW5nIE1pY3Jvc29mdCAoVmlzdWFsKSBDCisjIHpsaWIgaXMgY29weXJpZ2h0IChDKSAxOTk1LTIwMTcgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlcgorIworIyBVc2FnZToKKyMgICBubWFrZSAtZiB3aW4zMi9NYWtlZmlsZS5tc2MgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGFuZGFyZCBidWlsZCkKKyMgICBubWFrZSAtZiB3aW4zMi9NYWtlZmlsZS5tc2MgTE9DPS1ERk9PICAgICAgICAgICAgICAgIChub25zdGFuZGFyZCBidWlsZCkKKworIyBUaGUgdG9wbGV2ZWwgZGlyZWN0b3J5IG9mIHRoZSBzb3VyY2UgdHJlZS4KKyMKK1RPUCA9IC4KKworIyBvcHRpb25hbCBidWlsZCBmbGFncworTE9DID0KKworIyB2YXJpYWJsZXMKK1NUQVRJQ0xJQiA9IHpsaWIubGliCitTSEFSRURMSUIgPSB6bGliMS5kbGwKK0lNUExJQiAgICA9IHpkbGwubGliCisKK0NDID0gY2wKK0FTID0gbWwKK0xEID0gbGluaworQVIgPSBsaWIKK1JDID0gcmMKK0NGTEFHUyAgPSAtbm9sb2dvIC1NRCAtVzMgLU8yIC1PeS0gLVppIC1GZCJ6bGliIiAkKExPQykKK1dGTEFHUyAgPSAtRF9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSAtRF9DUlRfTk9OU1REQ19OT19ERVBSRUNBVEUKK0FTRkxBR1MgPSAtY29mZiAtWmkgJChMT0MpCitMREZMQUdTID0gLW5vbG9nbyAtZGVidWcgLWluY3JlbWVudGFsOm5vIC1vcHQ6cmVmCitBUkZMQUdTID0gLW5vbG9nbworUkNGTEFHUyA9IC9kV0lOMzIgL3IKKworT0JKUyA9IGFkbGVyMzIub2JqIGNvbXByZXNzLm9iaiBjcmMzMi5vYmogZGVmbGF0ZS5vYmogZ3pjbG9zZS5vYmogZ3psaWIub2JqIGd6cmVhZC5vYmogXAorICAgICAgIGd6d3JpdGUub2JqIGluZmJhY2sub2JqIGluZmxhdGUub2JqIGluZnRyZWVzLm9iaiBpbmZmYXN0Lm9iaiB0cmVlcy5vYmogdW5jb21wci5vYmogenV0aWwub2JqCitPQkpBID0KKworCisjIHRhcmdldHMKK2FsbDogJChTVEFUSUNMSUIpICQoU0hBUkVETElCKSAkKElNUExJQikgXAorICAgICBleGFtcGxlLmV4ZSBtaW5pZ3ppcC5leGUgZXhhbXBsZV9kLmV4ZSBtaW5pZ3ppcF9kLmV4ZQorCiskKFNUQVRJQ0xJQik6ICQoT0JKUykgJChPQkpBKQorCSQoQVIpICQoQVJGTEFHUykgLW91dDokQCAkKE9CSlMpICQoT0JKQSkKKworJChJTVBMSUIpOiAkKFNIQVJFRExJQikKKworJChTSEFSRURMSUIpOiAkKFRPUCkvd2luMzIvemxpYi5kZWYgJChPQkpTKSAkKE9CSkEpIHpsaWIxLnJlcworCSQoTEQpICQoTERGTEFHUykgLWRlZjokKFRPUCkvd2luMzIvemxpYi5kZWYgLWRsbCAtaW1wbGliOiQoSU1QTElCKSBcCisJICAtb3V0OiRAIC1iYXNlOjB4NUE0QzAwMDAgJChPQkpTKSAkKE9CSkEpIHpsaWIxLnJlcworCWlmIGV4aXN0ICRALm1hbmlmZXN0IFwKKwkgIG10IC1ub2xvZ28gLW1hbmlmZXN0ICRALm1hbmlmZXN0IC1vdXRwdXRyZXNvdXJjZTokQDsyCisKK2V4YW1wbGUuZXhlOiBleGFtcGxlLm9iaiAkKFNUQVRJQ0xJQikKKwkkKExEKSAkKExERkxBR1MpIGV4YW1wbGUub2JqICQoU1RBVElDTElCKQorCWlmIGV4aXN0ICRALm1hbmlmZXN0IFwKKwkgIG10IC1ub2xvZ28gLW1hbmlmZXN0ICRALm1hbmlmZXN0IC1vdXRwdXRyZXNvdXJjZTokQDsxCisKK21pbmlnemlwLmV4ZTogbWluaWd6aXAub2JqICQoU1RBVElDTElCKQorCSQoTEQpICQoTERGTEFHUykgbWluaWd6aXAub2JqICQoU1RBVElDTElCKQorCWlmIGV4aXN0ICRALm1hbmlmZXN0IFwKKwkgIG10IC1ub2xvZ28gLW1hbmlmZXN0ICRALm1hbmlmZXN0IC1vdXRwdXRyZXNvdXJjZTokQDsxCisKK2V4YW1wbGVfZC5leGU6IGV4YW1wbGUub2JqICQoSU1QTElCKQorCSQoTEQpICQoTERGTEFHUykgLW91dDokQCBleGFtcGxlLm9iaiAkKElNUExJQikKKwlpZiBleGlzdCAkQC5tYW5pZmVzdCBcCisJICBtdCAtbm9sb2dvIC1tYW5pZmVzdCAkQC5tYW5pZmVzdCAtb3V0cHV0cmVzb3VyY2U6JEA7MQorCittaW5pZ3ppcF9kLmV4ZTogbWluaWd6aXAub2JqICQoSU1QTElCKQorCSQoTEQpICQoTERGTEFHUykgLW91dDokQCBtaW5pZ3ppcC5vYmogJChJTVBMSUIpCisJaWYgZXhpc3QgJEAubWFuaWZlc3QgXAorCSAgbXQgLW5vbG9nbyAtbWFuaWZlc3QgJEAubWFuaWZlc3QgLW91dHB1dHJlc291cmNlOiRAOzEKKworeyQoVE9QKX0uYy5vYmo6CisJJChDQykgLWMgJChXRkxBR1MpICQoQ0ZMQUdTKSAkPAorCit7JChUT1ApL3Rlc3R9LmMub2JqOgorCSQoQ0MpIC1jIC1JJChUT1ApICQoV0ZMQUdTKSAkKENGTEFHUykgJDwKKworeyQoVE9QKS9jb250cmliL21hc214NjR9LmMub2JqOgorCSQoQ0MpIC1jICQoV0ZMQUdTKSAkKENGTEFHUykgJDwKKworeyQoVE9QKS9jb250cmliL21hc214NjR9LmFzbS5vYmo6CisJJChBUykgLWMgJChBU0ZMQUdTKSAkPAorCit7JChUT1ApL2NvbnRyaWIvbWFzbXg4Nn0uYXNtLm9iajoKKwkkKEFTKSAtYyAkKEFTRkxBR1MpICQ8CisKK2FkbGVyMzIub2JqOiAkKFRPUCkvYWRsZXIzMi5jICQoVE9QKS96bGliLmggJChUT1ApL3pjb25mLmgKKworY29tcHJlc3Mub2JqOiAkKFRPUCkvY29tcHJlc3MuYyAkKFRPUCkvemxpYi5oICQoVE9QKS96Y29uZi5oCisKK2NyYzMyLm9iajogJChUT1ApL2NyYzMyLmMgJChUT1ApL3psaWIuaCAkKFRPUCkvemNvbmYuaCAkKFRPUCkvY3JjMzIuaAorCitkZWZsYXRlLm9iajogJChUT1ApL2RlZmxhdGUuYyAkKFRPUCkvZGVmbGF0ZS5oICQoVE9QKS96dXRpbC5oICQoVE9QKS96bGliLmggJChUT1ApL3pjb25mLmgKKworZ3pjbG9zZS5vYmo6ICQoVE9QKS9nemNsb3NlLmMgJChUT1ApL3psaWIuaCAkKFRPUCkvemNvbmYuaCAkKFRPUCkvZ3pndXRzLmgKKworZ3psaWIub2JqOiAkKFRPUCkvZ3psaWIuYyAkKFRPUCkvemxpYi5oICQoVE9QKS96Y29uZi5oICQoVE9QKS9nemd1dHMuaAorCitnenJlYWQub2JqOiAkKFRPUCkvZ3pyZWFkLmMgJChUT1ApL3psaWIuaCAkKFRPUCkvemNvbmYuaCAkKFRPUCkvZ3pndXRzLmgKKworZ3p3cml0ZS5vYmo6ICQoVE9QKS9nendyaXRlLmMgJChUT1ApL3psaWIuaCAkKFRPUCkvemNvbmYuaCAkKFRPUCkvZ3pndXRzLmgKKworaW5mYmFjay5vYmo6ICQoVE9QKS9pbmZiYWNrLmMgJChUT1ApL3p1dGlsLmggJChUT1ApL3psaWIuaCAkKFRPUCkvemNvbmYuaCAkKFRPUCkvaW5mdHJlZXMuaCAkKFRPUCkvaW5mbGF0ZS5oIFwKKyAgICAgICAgICAgICAkKFRPUCkvaW5mZmFzdC5oICQoVE9QKS9pbmZmaXhlZC5oCisKK2luZmZhc3Qub2JqOiAkKFRPUCkvaW5mZmFzdC5jICQoVE9QKS96dXRpbC5oICQoVE9QKS96bGliLmggJChUT1ApL3pjb25mLmggJChUT1ApL2luZnRyZWVzLmggJChUT1ApL2luZmxhdGUuaCBcCisgICAgICAgICAgICAgJChUT1ApL2luZmZhc3QuaAorCitpbmZsYXRlLm9iajogJChUT1ApL2luZmxhdGUuYyAkKFRPUCkvenV0aWwuaCAkKFRPUCkvemxpYi5oICQoVE9QKS96Y29uZi5oICQoVE9QKS9pbmZ0cmVlcy5oICQoVE9QKS9pbmZsYXRlLmggXAorICAgICAgICAgICAgICQoVE9QKS9pbmZmYXN0LmggJChUT1ApL2luZmZpeGVkLmgKKworaW5mdHJlZXMub2JqOiAkKFRPUCkvaW5mdHJlZXMuYyAkKFRPUCkvenV0aWwuaCAkKFRPUCkvemxpYi5oICQoVE9QKS96Y29uZi5oICQoVE9QKS9pbmZ0cmVlcy5oCisKK3RyZWVzLm9iajogJChUT1ApL3RyZWVzLmMgJChUT1ApL3p1dGlsLmggJChUT1ApL3psaWIuaCAkKFRPUCkvemNvbmYuaCAkKFRPUCkvZGVmbGF0ZS5oICQoVE9QKS90cmVlcy5oCisKK3VuY29tcHIub2JqOiAkKFRPUCkvdW5jb21wci5jICQoVE9QKS96bGliLmggJChUT1ApL3pjb25mLmgKKworenV0aWwub2JqOiAkKFRPUCkvenV0aWwuYyAkKFRPUCkvenV0aWwuaCAkKFRPUCkvemxpYi5oICQoVE9QKS96Y29uZi5oCisKK2d2bWF0NjQub2JqOiAkKFRPUCkvY29udHJpYlxtYXNteDY0XGd2bWF0NjQuYXNtCisKK2luZmZhc3g2NC5vYmo6ICQoVE9QKS9jb250cmliXG1hc214NjRcaW5mZmFzeDY0LmFzbQorCitpbmZmYXM4NjY0Lm9iajogJChUT1ApL2NvbnRyaWJcbWFzbXg2NFxpbmZmYXM4NjY0LmMgJChUT1ApL3p1dGlsLmggJChUT1ApL3psaWIuaCAkKFRPUCkvemNvbmYuaCBcCisJCSQoVE9QKS9pbmZ0cmVlcy5oICQoVE9QKS9pbmZsYXRlLmggJChUT1ApL2luZmZhc3QuaAorCitpbmZmYXMzMi5vYmo6ICQoVE9QKS9jb250cmliXG1hc214ODZcaW5mZmFzMzIuYXNtCisKK21hdGNoNjg2Lm9iajogJChUT1ApL2NvbnRyaWJcbWFzbXg4NlxtYXRjaDY4Ni5hc20KKworZXhhbXBsZS5vYmo6ICQoVE9QKS90ZXN0L2V4YW1wbGUuYyAkKFRPUCkvemxpYi5oICQoVE9QKS96Y29uZi5oCisKK21pbmlnemlwLm9iajogJChUT1ApL3Rlc3QvbWluaWd6aXAuYyAkKFRPUCkvemxpYi5oICQoVE9QKS96Y29uZi5oCisKK3psaWIxLnJlczogJChUT1ApL3dpbjMyL3psaWIxLnJjCisJJChSQykgJChSQ0ZMQUdTKSAvZm8kQCAkKFRPUCkvd2luMzIvemxpYjEucmMKKworIyB0ZXN0aW5nCit0ZXN0OiBleGFtcGxlLmV4ZSBtaW5pZ3ppcC5leGUKKwlleGFtcGxlCisJZWNobyBoZWxsbyB3b3JsZCB8IG1pbmlnemlwIHwgbWluaWd6aXAgLWQKKwordGVzdGRsbDogZXhhbXBsZV9kLmV4ZSBtaW5pZ3ppcF9kLmV4ZQorCWV4YW1wbGVfZAorCWVjaG8gaGVsbG8gd29ybGQgfCBtaW5pZ3ppcF9kIHwgbWluaWd6aXBfZCAtZAorCisKKyMgY2xlYW51cAorY2xlYW46CisJLWRlbCAkKFNUQVRJQ0xJQikKKwktZGVsICQoU0hBUkVETElCKQorCS1kZWwgJChJTVBMSUIpCisJLWRlbCAqLm9iagorCS1kZWwgKi5yZXMKKwktZGVsICouZXhwCisJLWRlbCAqLmV4ZQorCS1kZWwgKi5wZGIKKwktZGVsICoubWFuaWZlc3QKKwktZGVsIGZvby5negpkaWZmIC0tZ2l0IGEvc3JjL3dpbjMyL1JFQURNRS1XSU4zMi50eHQgYi9zcmMvd2luMzIvUkVBRE1FLVdJTjMyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzZjZmVjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3dpbjMyL1JFQURNRS1XSU4zMi50eHQKQEAgLTAsMCArMSwxMDMgQEAKK1pMSUIgREFUQSBDT01QUkVTU0lPTiBMSUJSQVJZCisKK3psaWIgMS4yLjEyIGlzIGEgZ2VuZXJhbCBwdXJwb3NlIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4gIEFsbCB0aGUgY29kZSBpcwordGhyZWFkIHNhZmUuICBUaGUgZGF0YSBmb3JtYXQgdXNlZCBieSB0aGUgemxpYiBsaWJyYXJ5IGlzIGRlc2NyaWJlZCBieSBSRkNzCisoUmVxdWVzdCBmb3IgQ29tbWVudHMpIDE5NTAgdG8gMTk1MiBpbiB0aGUgZmlsZXMKK2h0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzE5NTAudHh0ICh6bGliIGZvcm1hdCksIHJmYzE5NTEudHh0IChkZWZsYXRlIGZvcm1hdCkKK2FuZCByZmMxOTUyLnR4dCAoZ3ppcCBmb3JtYXQpLgorCitBbGwgZnVuY3Rpb25zIG9mIHRoZSBjb21wcmVzc2lvbiBsaWJyYXJ5IGFyZSBkb2N1bWVudGVkIGluIHRoZSBmaWxlIHpsaWIuaAorKHZvbHVudGVlciB0byB3cml0ZSBtYW4gcGFnZXMgd2VsY29tZSwgY29udGFjdCB6bGliQGd6aXAub3JnKS4gIFR3byBjb21waWxlZAorZXhhbXBsZXMgYXJlIGRpc3RyaWJ1dGVkIGluIHRoaXMgcGFja2FnZSwgZXhhbXBsZSBhbmQgbWluaWd6aXAuICBUaGUgZXhhbXBsZV9kCithbmQgbWluaWd6aXBfZCBmbGF2b3JzIHZhbGlkYXRlIHRoYXQgdGhlIHpsaWIxLmRsbCBmaWxlIGlzIHdvcmtpbmcgY29ycmVjdGx5LgorCitRdWVzdGlvbnMgYWJvdXQgemxpYiBzaG91bGQgYmUgc2VudCB0byA8emxpYkBnemlwLm9yZz4uICBUaGUgemxpYiBob21lIHBhZ2UKK2lzIGh0dHA6Ly96bGliLm5ldC8gLiAgQmVmb3JlIHJlcG9ydGluZyBhIHByb2JsZW0sIHBsZWFzZSBjaGVjayB0aGlzIHNpdGUgdG8KK3ZlcmlmeSB0aGF0IHlvdSBoYXZlIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB6bGliOyBvdGhlcndpc2UgZ2V0IHRoZSBsYXRlc3QKK3ZlcnNpb24gYW5kIGNoZWNrIHdoZXRoZXIgdGhlIHByb2JsZW0gc3RpbGwgZXhpc3RzIG9yIG5vdC4KKworUExFQVNFIHJlYWQgRExMX0ZBUS50eHQsIGFuZCB0aGUgdGhlIHpsaWIgRkFRIGh0dHA6Ly96bGliLm5ldC96bGliX2ZhcS5odG1sCitiZWZvcmUgYXNraW5nIGZvciBoZWxwLgorCisKK01hbmlmZXN0OgorCitUaGUgcGFja2FnZSB6bGliLTEuMi4xMi13aW4zMi14ODYuemlwIHdpbGwgY29udGFpbiB0aGUgZm9sbG93aW5nIGZpbGVzOgorCisgIFJFQURNRS1XSU4zMi50eHQgVGhpcyBkb2N1bWVudAorICBDaGFuZ2VMb2cgICAgICAgIENoYW5nZXMgc2luY2UgcHJldmlvdXMgemxpYiBwYWNrYWdlcworICBETExfRkFRLnR4dCAgICAgIEZyZXF1ZW50bHkgYXNrZWQgcXVlc3Rpb25zIGFib3V0IHpsaWIxLmRsbAorICB6bGliLjMucGRmICAgICAgIERvY3VtZW50YXRpb24gb2YgdGhpcyBsaWJyYXJ5IGluIEFkb2JlIEFjcm9iYXQgZm9ybWF0CisKKyAgZXhhbXBsZS5leGUgICAgICBBIHN0YXRpY2FsbHktYm91bmQgZXhhbXBsZSAodXNpbmcgemxpYi5saWIsIG5vdCB0aGUgZGxsKQorICBleGFtcGxlLnBkYiAgICAgIFN5bWJvbGljIGluZm9ybWF0aW9uIGZvciBkZWJ1Z2dpbmcgZXhhbXBsZS5leGUKKworICBleGFtcGxlX2QuZXhlICAgIEEgemxpYjEuZGxsIGJvdW5kIGV4YW1wbGUgKHVzaW5nIHpkbGwubGliKQorICBleGFtcGxlX2QucGRiICAgIFN5bWJvbGljIGluZm9ybWF0aW9uIGZvciBkZWJ1Z2dpbmcgZXhhbXBsZV9kLmV4ZQorCisgIG1pbmlnemlwLmV4ZSAgICAgQSBzdGF0aWNhbGx5LWJvdW5kIHRlc3QgcHJvZ3JhbSAodXNpbmcgemxpYi5saWIsIG5vdCB0aGUgZGxsKQorICBtaW5pZ3ppcC5wZGIgICAgIFN5bWJvbGljIGluZm9ybWF0aW9uIGZvciBkZWJ1Z2dpbmcgbWluaWd6aXAuZXhlCisKKyAgbWluaWd6aXBfZC5leGUgICBBIHpsaWIxLmRsbCBib3VuZCB0ZXN0IHByb2dyYW0gKHVzaW5nIHpkbGwubGliKQorICBtaW5pZ3ppcF9kLnBkYiAgIFN5bWJvbGljIGluZm9ybWF0aW9uIGZvciBkZWJ1Z2dpbmcgbWluaWd6aXBfZC5leGUKKworICB6bGliLmggICAgICAgICAgIEluc3RhbGwgdGhlc2UgZmlsZXMgaW50byB0aGUgY29tcGlsZXJzJyBJTkNMVURFIHBhdGggdG8KKyAgemNvbmYuaCAgICAgICAgICBjb21waWxlIHByb2dyYW1zIHdoaWNoIHVzZSB6bGliLmxpYiBvciB6ZGxsLmxpYgorCisgIHpkbGwubGliICAgICAgICAgSW5zdGFsbCB0aGVzZSBmaWxlcyBpbnRvIHRoZSBjb21waWxlcnMnIExJQiBwYXRoIGlmIGxpbmtpbmcKKyAgemRsbC5leHAgICAgICAgICBhIGNvbXBpbGVkIHByb2dyYW0gdG8gdGhlIHpsaWIxLmRsbCBiaW5hcnkKKworICB6bGliLmxpYiAgICAgICAgIEluc3RhbGwgdGhlc2UgZmlsZXMgaW50byB0aGUgY29tcGlsZXJzJyBMSUIgcGF0aCB0byBsaW5rIHpsaWIKKyAgemxpYi5wZGIgICAgICAgICBpbnRvIGNvbXBpbGVkIHByb2dyYW1zLCB3aXRob3V0IHpsaWIxLmRsbCBydW50aW1lIGRlcGVuZGVuY3kKKyAgICAgICAgICAgICAgICAgICAoemxpYi5wZGIgcHJvdmlkZXMgZGVidWdnaW5nIGluZm8gdG8gdGhlIGNvbXBpbGUgdGltZSBsaW5rZXIpCisKKyAgemxpYjEuZGxsICAgICAgICBJbnN0YWxsIHRoaXMgYmluYXJ5IHNoYXJlZCBsaWJyYXJ5IGludG8gdGhlIHN5c3RlbSBQQVRILCBvcgorICAgICAgICAgICAgICAgICAgIHRoZSBwcm9ncmFtJ3MgcnVudGltZSBkaXJlY3RvcnkgKHdoZXJlIHRoZSAuZXhlIHJlc2lkZXMpCisgIHpsaWIxLnBkYiAgICAgICAgSW5zdGFsbCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgemxpYjEuZGxsLCBpbiBvcmRlciB0byBkZWJ1ZworICAgICAgICAgICAgICAgICAgIGFuIGFwcGxpY2F0aW9uIGNyYXNoIHVzaW5nIFdpbkRiZyBvciBzaW1pbGFyIHRvb2xzLgorCitBbGwgLnBkYiBmaWxlcyBhYm92ZSBhcmUgZW50aXJlbHkgb3B0aW9uYWwsIGJ1dCBhcmUgdmVyeSB1c2VmdWwgdG8gYSBkZXZlbG9wZXIKK2F0dGVtcHRpbmcgdG8gZGlhZ25vc2UgcHJvZ3JhbSBtaXNiZWhhdmlvciBvciBhIGNyYXNoLiAgTWFueSBhZGRpdGlvbmFsCitpbXBvcnRhbnQgZmlsZXMgZm9yIGRldmVsb3BlcnMgY2FuIGJlIGZvdW5kIGluIHRoZSB6bGliMTI3LnppcCBzb3VyY2UgcGFja2FnZQorYXZhaWxhYmxlIGZyb20gaHR0cDovL3psaWIubmV0LyAtIHJldmlldyB0aGF0IHBhY2thZ2UncyBSRUFETUUgZmlsZSBmb3IgZGV0YWlscy4KKworCitBY2tub3dsZWRnbWVudHM6CisKK1RoZSBkZWZsYXRlIGZvcm1hdCB1c2VkIGJ5IHpsaWIgd2FzIGRlZmluZWQgYnkgUGhpbCBLYXR6LiAgVGhlIGRlZmxhdGUgYW5kCit6bGliIHNwZWNpZmljYXRpb25zIHdlcmUgd3JpdHRlbiBieSBMLiAgUGV0ZXIgRGV1dHNjaC4gIFRoYW5rcyB0byBhbGwgdGhlCitwZW9wbGUgd2hvIHJlcG9ydGVkIHByb2JsZW1zIGFuZCBzdWdnZXN0ZWQgdmFyaW91cyBpbXByb3ZlbWVudHMgaW4gemxpYjsgdGhleQorYXJlIHRvbyBudW1lcm91cyB0byBjaXRlIGhlcmUuCisKKworQ29weXJpZ2h0IG5vdGljZToKKworICAoQykgMTk5NS0yMDE3IEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIKKworICBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZAorICB3YXJyYW50eS4gIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzCisgIGFyaXNpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuCisKKyAgUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UsCisgIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXQKKyAgZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCisgIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90CisgICAgIGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlCisgICAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZQorICAgICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLgorICAyLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZQorICAgICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuCisgIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uCisKKyAgSmVhbi1sb3VwIEdhaWxseSAgICAgICAgTWFyayBBZGxlcgorICBqbG91cEBnemlwLm9yZyAgICAgICAgICBtYWRsZXJAYWx1bW5pLmNhbHRlY2guZWR1CisKK0lmIHlvdSB1c2UgdGhlIHpsaWIgbGlicmFyeSBpbiBhIHByb2R1Y3QsIHdlIHdvdWxkIGFwcHJlY2lhdGUgKm5vdCogcmVjZWl2aW5nCitsZW5ndGh5IGxlZ2FsIGRvY3VtZW50cyB0byBzaWduLiAgVGhlIHNvdXJjZXMgYXJlIHByb3ZpZGVkIGZvciBmcmVlIGJ1dCB3aXRob3V0Cit3YXJyYW50eSBvZiBhbnkga2luZC4gIFRoZSBsaWJyYXJ5IGhhcyBiZWVuIGVudGlyZWx5IHdyaXR0ZW4gYnkgSmVhbi1sb3VwCitHYWlsbHkgYW5kIE1hcmsgQWRsZXI7IGl0IGRvZXMgbm90IGluY2x1ZGUgdGhpcmQtcGFydHkgY29kZS4KKworSWYgeW91IHJlZGlzdHJpYnV0ZSBtb2RpZmllZCBzb3VyY2VzLCB3ZSB3b3VsZCBhcHByZWNpYXRlIHRoYXQgeW91IGluY2x1ZGUgaW4KK3RoZSBmaWxlIENoYW5nZUxvZyBoaXN0b3J5IGluZm9ybWF0aW9uIGRvY3VtZW50aW5nIHlvdXIgY2hhbmdlcy4gIFBsZWFzZSByZWFkCit0aGUgRkFRIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBkaXN0cmlidXRpb24gb2YgbW9kaWZpZWQgc291cmNlIHZlcnNpb25zLgpkaWZmIC0tZ2l0IGEvc3JjL3dpbjMyL1Zpc3VhbEMudHh0IGIvc3JjL3dpbjMyL1Zpc3VhbEMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwMDViMjEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvd2luMzIvVmlzdWFsQy50eHQKQEAgLTAsMCArMSwzIEBACisKK1RvIGJ1aWxkIHpsaWIgdXNpbmcgdGhlIE1pY3Jvc29mdCBWaXN1YWwgQysrIGVudmlyb25tZW50LAordXNlIHRoZSBhcHByb3ByaWF0ZSBwcm9qZWN0IGZyb20gdGhlIGNvbnRyaWIvdnN0dWRpby8gZGlyZWN0b3J5LgpkaWZmIC0tZ2l0IGEvc3JjL3dpbjMyL3psaWIuZGVmIGIvc3JjL3dpbjMyL3psaWIuZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzYzgwMTEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvd2luMzIvemxpYi5kZWYKQEAgLTAsMCArMSw5NyBAQAorOyB6bGliIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeQ0KK0VYUE9SVFMNCis7IGJhc2ljIGZ1bmN0aW9ucw0KKyAgICB6bGliVmVyc2lvbg0KKyAgICBkZWZsYXRlDQorICAgIGRlZmxhdGVFbmQNCisgICAgaW5mbGF0ZQ0KKyAgICBpbmZsYXRlRW5kDQorOyBhZHZhbmNlZCBmdW5jdGlvbnMNCisgICAgZGVmbGF0ZVNldERpY3Rpb25hcnkNCisgICAgZGVmbGF0ZUdldERpY3Rpb25hcnkNCisgICAgZGVmbGF0ZUNvcHkNCisgICAgZGVmbGF0ZVJlc2V0DQorICAgIGRlZmxhdGVQYXJhbXMNCisgICAgZGVmbGF0ZVR1bmUNCisgICAgZGVmbGF0ZUJvdW5kDQorICAgIGRlZmxhdGVQZW5kaW5nDQorICAgIGRlZmxhdGVQcmltZQ0KKyAgICBkZWZsYXRlU2V0SGVhZGVyDQorICAgIGluZmxhdGVTZXREaWN0aW9uYXJ5DQorICAgIGluZmxhdGVHZXREaWN0aW9uYXJ5DQorICAgIGluZmxhdGVTeW5jDQorICAgIGluZmxhdGVDb3B5DQorICAgIGluZmxhdGVSZXNldA0KKyAgICBpbmZsYXRlUmVzZXQyDQorICAgIGluZmxhdGVQcmltZQ0KKyAgICBpbmZsYXRlTWFyaw0KKyAgICBpbmZsYXRlR2V0SGVhZGVyDQorICAgIGluZmxhdGVCYWNrDQorICAgIGluZmxhdGVCYWNrRW5kDQorICAgIHpsaWJDb21waWxlRmxhZ3MNCis7IHV0aWxpdHkgZnVuY3Rpb25zDQorICAgIGNvbXByZXNzDQorICAgIGNvbXByZXNzMg0KKyAgICBjb21wcmVzc0JvdW5kDQorICAgIHVuY29tcHJlc3MNCisgICAgdW5jb21wcmVzczINCisgICAgZ3pvcGVuDQorICAgIGd6ZG9wZW4NCisgICAgZ3pidWZmZXINCisgICAgZ3pzZXRwYXJhbXMNCisgICAgZ3pyZWFkDQorICAgIGd6ZnJlYWQNCisgICAgZ3p3cml0ZQ0KKyAgICBnemZ3cml0ZQ0KKyAgICBnenByaW50Zg0KKyAgICBnenZwcmludGYNCisgICAgZ3pwdXRzDQorICAgIGd6Z2V0cw0KKyAgICBnenB1dGMNCisgICAgZ3pnZXRjDQorICAgIGd6dW5nZXRjDQorICAgIGd6Zmx1c2gNCisgICAgZ3pzZWVrDQorICAgIGd6cmV3aW5kDQorICAgIGd6dGVsbA0KKyAgICBnem9mZnNldA0KKyAgICBnemVvZg0KKyAgICBnemRpcmVjdA0KKyAgICBnemNsb3NlDQorICAgIGd6Y2xvc2Vfcg0KKyAgICBnemNsb3NlX3cNCisgICAgZ3plcnJvcg0KKyAgICBnemNsZWFyZXJyDQorOyBsYXJnZSBmaWxlIGZ1bmN0aW9ucw0KKyAgICBnem9wZW42NA0KKyAgICBnenNlZWs2NA0KKyAgICBnenRlbGw2NA0KKyAgICBnem9mZnNldDY0DQorICAgIGFkbGVyMzJfY29tYmluZTY0DQorICAgIGNyYzMyX2NvbWJpbmU2NA0KKyAgICBjcmMzMl9jb21iaW5lX2dlbjY0DQorOyBjaGVja3N1bSBmdW5jdGlvbnMNCisgICAgYWRsZXIzMg0KKyAgICBhZGxlcjMyX3oNCisgICAgY3JjMzINCisgICAgY3JjMzJfeg0KKyAgICBhZGxlcjMyX2NvbWJpbmUNCisgICAgY3JjMzJfY29tYmluZQ0KKyAgICBjcmMzMl9jb21iaW5lX2dlbg0KKyAgICBjcmMzMl9jb21iaW5lX29wDQorOyB2YXJpb3VzIGhhY2tzLCBkb24ndCBsb29rIDopDQorICAgIGRlZmxhdGVJbml0Xw0KKyAgICBkZWZsYXRlSW5pdDJfDQorICAgIGluZmxhdGVJbml0Xw0KKyAgICBpbmZsYXRlSW5pdDJfDQorICAgIGluZmxhdGVCYWNrSW5pdF8NCisgICAgZ3pnZXRjXw0KKyAgICB6RXJyb3INCisgICAgaW5mbGF0ZVN5bmNQb2ludA0KKyAgICBnZXRfY3JjX3RhYmxlDQorICAgIGluZmxhdGVVbmRlcm1pbmUNCisgICAgaW5mbGF0ZVZhbGlkYXRlDQorICAgIGluZmxhdGVDb2Rlc1VzZWQNCisgICAgaW5mbGF0ZVJlc2V0S2VlcA0KKyAgICBkZWZsYXRlUmVzZXRLZWVwDQorICAgIGd6b3Blbl93DQpkaWZmIC0tZ2l0IGEvc3JjL3dpbjMyL3psaWIxLnJjIGIvc3JjL3dpbjMyL3psaWIxLnJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNGU2NDEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvd2luMzIvemxpYjEucmMKQEAgLTAsMCArMSw0MCBAQAorI2luY2x1ZGUgPHdpbnZlci5oPgorI2luY2x1ZGUgIi4uL3psaWIuaCIKKworI2lmZGVmIEdDQ19XSU5EUkVTCitWU19WRVJTSU9OX0lORk8JCVZFUlNJT05JTkZPCisjZWxzZQorVlNfVkVSU0lPTl9JTkZPCQlWRVJTSU9OSU5GTwlNT1ZFQUJMRSBJTVBVUkUgTE9BRE9OQ0FMTCBESVNDQVJEQUJMRQorI2VuZGlmCisgIEZJTEVWRVJTSU9OCQlaTElCX1ZFUl9NQUpPUixaTElCX1ZFUl9NSU5PUixaTElCX1ZFUl9SRVZJU0lPTiwwCisgIFBST0RVQ1RWRVJTSU9OCVpMSUJfVkVSX01BSk9SLFpMSUJfVkVSX01JTk9SLFpMSUJfVkVSX1JFVklTSU9OLDAKKyAgRklMRUZMQUdTTUFTSwkJVlNfRkZJX0ZJTEVGTEFHU01BU0sKKyNpZmRlZiBfREVCVUcKKyAgRklMRUZMQUdTCQkxCisjZWxzZQorICBGSUxFRkxBR1MJCTAKKyNlbmRpZgorICBGSUxFT1MJCVZPU19fV0lORE9XUzMyCisgIEZJTEVUWVBFCQlWRlRfRExMCisgIEZJTEVTVUJUWVBFCQkwCS8vIG5vdCB1c2VkCitCRUdJTgorICBCTE9DSyAiU3RyaW5nRmlsZUluZm8iCisgIEJFR0lOCisgICAgQkxPQ0sgIjA0MDkwNEU0IgorICAgIC8vbGFuZ3VhZ2UgSUQgPSBVLlMuIEVuZ2xpc2gsIGNoYXIgc2V0ID0gV2luZG93cywgTXVsdGlsaW5ndWFsCisgICAgQkVHSU4KKyAgICAgIFZBTFVFICJGaWxlRGVzY3JpcHRpb24iLAkiemxpYiBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnlcMCIKKyAgICAgIFZBTFVFICJGaWxlVmVyc2lvbiIsCVpMSUJfVkVSU0lPTiAiXDAiCisgICAgICBWQUxVRSAiSW50ZXJuYWxOYW1lIiwJInpsaWIxLmRsbFwwIgorICAgICAgVkFMVUUgIkxlZ2FsQ29weXJpZ2h0IiwJIihDKSAxOTk1LTIwMTcgSmVhbi1sb3VwIEdhaWxseSAmIE1hcmsgQWRsZXJcMCIKKyAgICAgIFZBTFVFICJPcmlnaW5hbEZpbGVuYW1lIiwJInpsaWIxLmRsbFwwIgorICAgICAgVkFMVUUgIlByb2R1Y3ROYW1lIiwJInpsaWJcMCIKKyAgICAgIFZBTFVFICJQcm9kdWN0VmVyc2lvbiIsCVpMSUJfVkVSU0lPTiAiXDAiCisgICAgICBWQUxVRSAiQ29tbWVudHMiLAkJIkZvciBtb3JlIGluZm9ybWF0aW9uIHZpc2l0IGh0dHA6Ly93d3cuemxpYi5uZXQvXDAiCisgICAgRU5ECisgIEVORAorICBCTE9DSyAiVmFyRmlsZUluZm8iCisgIEJFR0lOCisgICAgVkFMVUUgIlRyYW5zbGF0aW9uIiwgMHgwNDA5LCAxMjUyCisgIEVORAorRU5ECmRpZmYgLS1naXQgYS9zcmMvemNvbmYuaCBiL3NyYy96Y29uZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlMWQ2OGEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvemNvbmYuaApAQCAtMCwwICsxLDUzNCBAQAorLyogemNvbmYuaCAtLSBjb25maWd1cmF0aW9uIG9mIHRoZSB6bGliIGNvbXByZXNzaW9uIGxpYnJhcnkKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDE2IEplYW4tbG91cCBHYWlsbHksIE1hcmsgQWRsZXIKKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKKyAqLworCisvKiBAKCMpICRJZCQgKi8KKworI2lmbmRlZiBaQ09ORl9ICisjZGVmaW5lIFpDT05GX0gKKworLyoKKyAqIElmIHlvdSAqcmVhbGx5KiBuZWVkIGEgdW5pcXVlIHByZWZpeCBmb3IgYWxsIHR5cGVzIGFuZCBsaWJyYXJ5IGZ1bmN0aW9ucywKKyAqIGNvbXBpbGUgd2l0aCAtRFpfUFJFRklYLiBUaGUgInN0YW5kYXJkIiB6bGliIHNob3VsZCBiZSBjb21waWxlZCB3aXRob3V0IGl0LgorICogRXZlbiBiZXR0ZXIgdGhhbiBjb21waWxpbmcgd2l0aCAtRFpfUFJFRklYIHdvdWxkIGJlIHRvIHVzZSBjb25maWd1cmUgdG8gc2V0CisgKiB0aGlzIHBlcm1hbmVudGx5IGluIHpjb25mLmggdXNpbmcgIi4vY29uZmlndXJlIC0tenByZWZpeCIuCisgKi8KKyNpZmRlZiBaX1BSRUZJWCAgICAgLyogbWF5IGJlIHNldCB0byAjaWYgMSBieSAuL2NvbmZpZ3VyZSAqLworIyAgZGVmaW5lIFpfUFJFRklYX1NFVAorCisvKiBhbGwgbGlua2VkIHN5bWJvbHMgYW5kIGluaXQgbWFjcm9zICovCisjICBkZWZpbmUgX2Rpc3RfY29kZSAgICAgICAgICAgIHpfX2Rpc3RfY29kZQorIyAgZGVmaW5lIF9sZW5ndGhfY29kZSAgICAgICAgICB6X19sZW5ndGhfY29kZQorIyAgZGVmaW5lIF90cl9hbGlnbiAgICAgICAgICAgICB6X190cl9hbGlnbgorIyAgZGVmaW5lIF90cl9mbHVzaF9iaXRzICAgICAgICB6X190cl9mbHVzaF9iaXRzCisjICBkZWZpbmUgX3RyX2ZsdXNoX2Jsb2NrICAgICAgIHpfX3RyX2ZsdXNoX2Jsb2NrCisjICBkZWZpbmUgX3RyX2luaXQgICAgICAgICAgICAgIHpfX3RyX2luaXQKKyMgIGRlZmluZSBfdHJfc3RvcmVkX2Jsb2NrICAgICAgel9fdHJfc3RvcmVkX2Jsb2NrCisjICBkZWZpbmUgX3RyX3RhbGx5ICAgICAgICAgICAgIHpfX3RyX3RhbGx5CisjICBkZWZpbmUgYWRsZXIzMiAgICAgICAgICAgICAgIHpfYWRsZXIzMgorIyAgZGVmaW5lIGFkbGVyMzJfY29tYmluZSAgICAgICB6X2FkbGVyMzJfY29tYmluZQorIyAgZGVmaW5lIGFkbGVyMzJfY29tYmluZTY0ICAgICB6X2FkbGVyMzJfY29tYmluZTY0CisjICBkZWZpbmUgYWRsZXIzMl96ICAgICAgICAgICAgIHpfYWRsZXIzMl96CisjICBpZm5kZWYgWl9TT0xPCisjICAgIGRlZmluZSBjb21wcmVzcyAgICAgICAgICAgICAgel9jb21wcmVzcworIyAgICBkZWZpbmUgY29tcHJlc3MyICAgICAgICAgICAgIHpfY29tcHJlc3MyCisjICAgIGRlZmluZSBjb21wcmVzc0JvdW5kICAgICAgICAgel9jb21wcmVzc0JvdW5kCisjICBlbmRpZgorIyAgZGVmaW5lIGNyYzMyICAgICAgICAgICAgICAgICB6X2NyYzMyCisjICBkZWZpbmUgY3JjMzJfY29tYmluZSAgICAgICAgIHpfY3JjMzJfY29tYmluZQorIyAgZGVmaW5lIGNyYzMyX2NvbWJpbmU2NCAgICAgICB6X2NyYzMyX2NvbWJpbmU2NAorIyAgZGVmaW5lIGNyYzMyX3ogICAgICAgICAgICAgICB6X2NyYzMyX3oKKyMgIGRlZmluZSBkZWZsYXRlICAgICAgICAgICAgICAgel9kZWZsYXRlCisjICBkZWZpbmUgZGVmbGF0ZUJvdW5kICAgICAgICAgIHpfZGVmbGF0ZUJvdW5kCisjICBkZWZpbmUgZGVmbGF0ZUNvcHkgICAgICAgICAgIHpfZGVmbGF0ZUNvcHkKKyMgIGRlZmluZSBkZWZsYXRlRW5kICAgICAgICAgICAgel9kZWZsYXRlRW5kCisjICBkZWZpbmUgZGVmbGF0ZUdldERpY3Rpb25hcnkgIHpfZGVmbGF0ZUdldERpY3Rpb25hcnkKKyMgIGRlZmluZSBkZWZsYXRlSW5pdCAgICAgICAgICAgel9kZWZsYXRlSW5pdAorIyAgZGVmaW5lIGRlZmxhdGVJbml0MiAgICAgICAgICB6X2RlZmxhdGVJbml0MgorIyAgZGVmaW5lIGRlZmxhdGVJbml0Ml8gICAgICAgICB6X2RlZmxhdGVJbml0Ml8KKyMgIGRlZmluZSBkZWZsYXRlSW5pdF8gICAgICAgICAgel9kZWZsYXRlSW5pdF8KKyMgIGRlZmluZSBkZWZsYXRlUGFyYW1zICAgICAgICAgel9kZWZsYXRlUGFyYW1zCisjICBkZWZpbmUgZGVmbGF0ZVBlbmRpbmcgICAgICAgIHpfZGVmbGF0ZVBlbmRpbmcKKyMgIGRlZmluZSBkZWZsYXRlUHJpbWUgICAgICAgICAgel9kZWZsYXRlUHJpbWUKKyMgIGRlZmluZSBkZWZsYXRlUmVzZXQgICAgICAgICAgel9kZWZsYXRlUmVzZXQKKyMgIGRlZmluZSBkZWZsYXRlUmVzZXRLZWVwICAgICAgel9kZWZsYXRlUmVzZXRLZWVwCisjICBkZWZpbmUgZGVmbGF0ZVNldERpY3Rpb25hcnkgIHpfZGVmbGF0ZVNldERpY3Rpb25hcnkKKyMgIGRlZmluZSBkZWZsYXRlU2V0SGVhZGVyICAgICAgel9kZWZsYXRlU2V0SGVhZGVyCisjICBkZWZpbmUgZGVmbGF0ZVR1bmUgICAgICAgICAgIHpfZGVmbGF0ZVR1bmUKKyMgIGRlZmluZSBkZWZsYXRlX2NvcHlyaWdodCAgICAgel9kZWZsYXRlX2NvcHlyaWdodAorIyAgZGVmaW5lIGdldF9jcmNfdGFibGUgICAgICAgICB6X2dldF9jcmNfdGFibGUKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgZGVmaW5lIGd6X2Vycm9yICAgICAgICAgICAgICB6X2d6X2Vycm9yCisjICAgIGRlZmluZSBnel9pbnRtYXggICAgICAgICAgICAgel9nel9pbnRtYXgKKyMgICAgZGVmaW5lIGd6X3N0cndpbmVycm9yICAgICAgICB6X2d6X3N0cndpbmVycm9yCisjICAgIGRlZmluZSBnemJ1ZmZlciAgICAgICAgICAgICAgel9nemJ1ZmZlcgorIyAgICBkZWZpbmUgZ3pjbGVhcmVyciAgICAgICAgICAgIHpfZ3pjbGVhcmVycgorIyAgICBkZWZpbmUgZ3pjbG9zZSAgICAgICAgICAgICAgIHpfZ3pjbG9zZQorIyAgICBkZWZpbmUgZ3pjbG9zZV9yICAgICAgICAgICAgIHpfZ3pjbG9zZV9yCisjICAgIGRlZmluZSBnemNsb3NlX3cgICAgICAgICAgICAgel9nemNsb3NlX3cKKyMgICAgZGVmaW5lIGd6ZGlyZWN0ICAgICAgICAgICAgICB6X2d6ZGlyZWN0CisjICAgIGRlZmluZSBnemRvcGVuICAgICAgICAgICAgICAgel9nemRvcGVuCisjICAgIGRlZmluZSBnemVvZiAgICAgICAgICAgICAgICAgel9nemVvZgorIyAgICBkZWZpbmUgZ3plcnJvciAgICAgICAgICAgICAgIHpfZ3plcnJvcgorIyAgICBkZWZpbmUgZ3pmbHVzaCAgICAgICAgICAgICAgIHpfZ3pmbHVzaAorIyAgICBkZWZpbmUgZ3pmcmVhZCAgICAgICAgICAgICAgIHpfZ3pmcmVhZAorIyAgICBkZWZpbmUgZ3pmd3JpdGUgICAgICAgICAgICAgIHpfZ3pmd3JpdGUKKyMgICAgZGVmaW5lIGd6Z2V0YyAgICAgICAgICAgICAgICB6X2d6Z2V0YworIyAgICBkZWZpbmUgZ3pnZXRjXyAgICAgICAgICAgICAgIHpfZ3pnZXRjXworIyAgICBkZWZpbmUgZ3pnZXRzICAgICAgICAgICAgICAgIHpfZ3pnZXRzCisjICAgIGRlZmluZSBnem9mZnNldCAgICAgICAgICAgICAgel9nem9mZnNldAorIyAgICBkZWZpbmUgZ3pvZmZzZXQ2NCAgICAgICAgICAgIHpfZ3pvZmZzZXQ2NAorIyAgICBkZWZpbmUgZ3pvcGVuICAgICAgICAgICAgICAgIHpfZ3pvcGVuCisjICAgIGRlZmluZSBnem9wZW42NCAgICAgICAgICAgICAgel9nem9wZW42NAorIyAgICBpZmRlZiBfV0lOMzIKKyMgICAgICBkZWZpbmUgZ3pvcGVuX3cgICAgICAgICAgICAgIHpfZ3pvcGVuX3cKKyMgICAgZW5kaWYKKyMgICAgZGVmaW5lIGd6cHJpbnRmICAgICAgICAgICAgICB6X2d6cHJpbnRmCisjICAgIGRlZmluZSBnenB1dGMgICAgICAgICAgICAgICAgel9nenB1dGMKKyMgICAgZGVmaW5lIGd6cHV0cyAgICAgICAgICAgICAgICB6X2d6cHV0cworIyAgICBkZWZpbmUgZ3pyZWFkICAgICAgICAgICAgICAgIHpfZ3pyZWFkCisjICAgIGRlZmluZSBnenJld2luZCAgICAgICAgICAgICAgel9nenJld2luZAorIyAgICBkZWZpbmUgZ3pzZWVrICAgICAgICAgICAgICAgIHpfZ3pzZWVrCisjICAgIGRlZmluZSBnenNlZWs2NCAgICAgICAgICAgICAgel9nenNlZWs2NAorIyAgICBkZWZpbmUgZ3pzZXRwYXJhbXMgICAgICAgICAgIHpfZ3pzZXRwYXJhbXMKKyMgICAgZGVmaW5lIGd6dGVsbCAgICAgICAgICAgICAgICB6X2d6dGVsbAorIyAgICBkZWZpbmUgZ3p0ZWxsNjQgICAgICAgICAgICAgIHpfZ3p0ZWxsNjQKKyMgICAgZGVmaW5lIGd6dW5nZXRjICAgICAgICAgICAgICB6X2d6dW5nZXRjCisjICAgIGRlZmluZSBnenZwcmludGYgICAgICAgICAgICAgel9nenZwcmludGYKKyMgICAgZGVmaW5lIGd6d3JpdGUgICAgICAgICAgICAgICB6X2d6d3JpdGUKKyMgIGVuZGlmCisjICBkZWZpbmUgaW5mbGF0ZSAgICAgICAgICAgICAgIHpfaW5mbGF0ZQorIyAgZGVmaW5lIGluZmxhdGVCYWNrICAgICAgICAgICB6X2luZmxhdGVCYWNrCisjICBkZWZpbmUgaW5mbGF0ZUJhY2tFbmQgICAgICAgIHpfaW5mbGF0ZUJhY2tFbmQKKyMgIGRlZmluZSBpbmZsYXRlQmFja0luaXQgICAgICAgel9pbmZsYXRlQmFja0luaXQKKyMgIGRlZmluZSBpbmZsYXRlQmFja0luaXRfICAgICAgel9pbmZsYXRlQmFja0luaXRfCisjICBkZWZpbmUgaW5mbGF0ZUNvZGVzVXNlZCAgICAgIHpfaW5mbGF0ZUNvZGVzVXNlZAorIyAgZGVmaW5lIGluZmxhdGVDb3B5ICAgICAgICAgICB6X2luZmxhdGVDb3B5CisjICBkZWZpbmUgaW5mbGF0ZUVuZCAgICAgICAgICAgIHpfaW5mbGF0ZUVuZAorIyAgZGVmaW5lIGluZmxhdGVHZXREaWN0aW9uYXJ5ICB6X2luZmxhdGVHZXREaWN0aW9uYXJ5CisjICBkZWZpbmUgaW5mbGF0ZUdldEhlYWRlciAgICAgIHpfaW5mbGF0ZUdldEhlYWRlcgorIyAgZGVmaW5lIGluZmxhdGVJbml0ICAgICAgICAgICB6X2luZmxhdGVJbml0CisjICBkZWZpbmUgaW5mbGF0ZUluaXQyICAgICAgICAgIHpfaW5mbGF0ZUluaXQyCisjICBkZWZpbmUgaW5mbGF0ZUluaXQyXyAgICAgICAgIHpfaW5mbGF0ZUluaXQyXworIyAgZGVmaW5lIGluZmxhdGVJbml0XyAgICAgICAgICB6X2luZmxhdGVJbml0XworIyAgZGVmaW5lIGluZmxhdGVNYXJrICAgICAgICAgICB6X2luZmxhdGVNYXJrCisjICBkZWZpbmUgaW5mbGF0ZVByaW1lICAgICAgICAgIHpfaW5mbGF0ZVByaW1lCisjICBkZWZpbmUgaW5mbGF0ZVJlc2V0ICAgICAgICAgIHpfaW5mbGF0ZVJlc2V0CisjICBkZWZpbmUgaW5mbGF0ZVJlc2V0MiAgICAgICAgIHpfaW5mbGF0ZVJlc2V0MgorIyAgZGVmaW5lIGluZmxhdGVSZXNldEtlZXAgICAgICB6X2luZmxhdGVSZXNldEtlZXAKKyMgIGRlZmluZSBpbmZsYXRlU2V0RGljdGlvbmFyeSAgel9pbmZsYXRlU2V0RGljdGlvbmFyeQorIyAgZGVmaW5lIGluZmxhdGVTeW5jICAgICAgICAgICB6X2luZmxhdGVTeW5jCisjICBkZWZpbmUgaW5mbGF0ZVN5bmNQb2ludCAgICAgIHpfaW5mbGF0ZVN5bmNQb2ludAorIyAgZGVmaW5lIGluZmxhdGVVbmRlcm1pbmUgICAgICB6X2luZmxhdGVVbmRlcm1pbmUKKyMgIGRlZmluZSBpbmZsYXRlVmFsaWRhdGUgICAgICAgel9pbmZsYXRlVmFsaWRhdGUKKyMgIGRlZmluZSBpbmZsYXRlX2NvcHlyaWdodCAgICAgel9pbmZsYXRlX2NvcHlyaWdodAorIyAgZGVmaW5lIGluZmxhdGVfZmFzdCAgICAgICAgICB6X2luZmxhdGVfZmFzdAorIyAgZGVmaW5lIGluZmxhdGVfdGFibGUgICAgICAgICB6X2luZmxhdGVfdGFibGUKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgZGVmaW5lIHVuY29tcHJlc3MgICAgICAgICAgICB6X3VuY29tcHJlc3MKKyMgICAgZGVmaW5lIHVuY29tcHJlc3MyICAgICAgICAgICB6X3VuY29tcHJlc3MyCisjICBlbmRpZgorIyAgZGVmaW5lIHpFcnJvciAgICAgICAgICAgICAgICB6X3pFcnJvcgorIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgemNhbGxvYyAgICAgICAgICAgICAgIHpfemNhbGxvYworIyAgICBkZWZpbmUgemNmcmVlICAgICAgICAgICAgICAgIHpfemNmcmVlCisjICBlbmRpZgorIyAgZGVmaW5lIHpsaWJDb21waWxlRmxhZ3MgICAgICB6X3psaWJDb21waWxlRmxhZ3MKKyMgIGRlZmluZSB6bGliVmVyc2lvbiAgICAgICAgICAgel96bGliVmVyc2lvbgorCisvKiBhbGwgemxpYiB0eXBlZGVmcyBpbiB6bGliLmggYW5kIHpjb25mLmggKi8KKyMgIGRlZmluZSBCeXRlICAgICAgICAgICAgICAgICAgel9CeXRlCisjICBkZWZpbmUgQnl0ZWYgICAgICAgICAgICAgICAgIHpfQnl0ZWYKKyMgIGRlZmluZSBhbGxvY19mdW5jICAgICAgICAgICAgel9hbGxvY19mdW5jCisjICBkZWZpbmUgY2hhcmYgICAgICAgICAgICAgICAgIHpfY2hhcmYKKyMgIGRlZmluZSBmcmVlX2Z1bmMgICAgICAgICAgICAgel9mcmVlX2Z1bmMKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgZGVmaW5lIGd6RmlsZSAgICAgICAgICAgICAgICB6X2d6RmlsZQorIyAgZW5kaWYKKyMgIGRlZmluZSBnel9oZWFkZXIgICAgICAgICAgICAgel9nel9oZWFkZXIKKyMgIGRlZmluZSBnel9oZWFkZXJwICAgICAgICAgICAgel9nel9oZWFkZXJwCisjICBkZWZpbmUgaW5fZnVuYyAgICAgICAgICAgICAgIHpfaW5fZnVuYworIyAgZGVmaW5lIGludGYgICAgICAgICAgICAgICAgICB6X2ludGYKKyMgIGRlZmluZSBvdXRfZnVuYyAgICAgICAgICAgICAgel9vdXRfZnVuYworIyAgZGVmaW5lIHVJbnQgICAgICAgICAgICAgICAgICB6X3VJbnQKKyMgIGRlZmluZSB1SW50ZiAgICAgICAgICAgICAgICAgel91SW50ZgorIyAgZGVmaW5lIHVMb25nICAgICAgICAgICAgICAgICB6X3VMb25nCisjICBkZWZpbmUgdUxvbmdmICAgICAgICAgICAgICAgIHpfdUxvbmdmCisjICBkZWZpbmUgdm9pZHAgICAgICAgICAgICAgICAgIHpfdm9pZHAKKyMgIGRlZmluZSB2b2lkcGMgICAgICAgICAgICAgICAgel92b2lkcGMKKyMgIGRlZmluZSB2b2lkcGYgICAgICAgICAgICAgICAgel92b2lkcGYKKworLyogYWxsIHpsaWIgc3RydWN0cyBpbiB6bGliLmggYW5kIHpjb25mLmggKi8KKyMgIGRlZmluZSBnel9oZWFkZXJfcyAgICAgICAgICAgel9nel9oZWFkZXJfcworIyAgZGVmaW5lIGludGVybmFsX3N0YXRlICAgICAgICB6X2ludGVybmFsX3N0YXRlCisKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX01TRE9TX18pICYmICFkZWZpbmVkKE1TRE9TKQorIyAgZGVmaW5lIE1TRE9TCisjZW5kaWYKKyNpZiAoZGVmaW5lZChPU18yKSB8fCBkZWZpbmVkKF9fT1MyX18pKSAmJiAhZGVmaW5lZChPUzIpCisjICBkZWZpbmUgT1MyCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9XSU5ET1dTKSAmJiAhZGVmaW5lZChXSU5ET1dTKQorIyAgZGVmaW5lIFdJTkRPV1MKKyNlbmRpZgorI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpIHx8IGRlZmluZWQoX19XSU4zMl9fKQorIyAgaWZuZGVmIFdJTjMyCisjICAgIGRlZmluZSBXSU4zMgorIyAgZW5kaWYKKyNlbmRpZgorI2lmIChkZWZpbmVkKE1TRE9TKSB8fCBkZWZpbmVkKE9TMikgfHwgZGVmaW5lZChXSU5ET1dTKSkgJiYgIWRlZmluZWQoV0lOMzIpCisjICBpZiAhZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX19GTEFUX18pICYmICFkZWZpbmVkKF9fMzg2X18pCisjICAgIGlmbmRlZiBTWVMxNkJJVAorIyAgICAgIGRlZmluZSBTWVMxNkJJVAorIyAgICBlbmRpZgorIyAgZW5kaWYKKyNlbmRpZgorCisvKgorICogQ29tcGlsZSB3aXRoIC1ETUFYU0VHXzY0SyBpZiB0aGUgYWxsb2MgZnVuY3Rpb24gY2Fubm90IGFsbG9jYXRlIG1vcmUKKyAqIHRoYW4gNjRrIGJ5dGVzIGF0IGEgdGltZSAobmVlZGVkIG9uIHN5c3RlbXMgd2l0aCAxNi1iaXQgaW50KS4KKyAqLworI2lmZGVmIFNZUzE2QklUCisjICBkZWZpbmUgTUFYU0VHXzY0SworI2VuZGlmCisjaWZkZWYgTVNET1MKKyMgIGRlZmluZSBVTkFMSUdORURfT0sKKyNlbmRpZgorCisjaWZkZWYgX19TVERDX1ZFUlNJT05fXworIyAgaWZuZGVmIFNUREMKKyMgICAgZGVmaW5lIFNUREMKKyMgIGVuZGlmCisjICBpZiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKKyMgICAgaWZuZGVmIFNUREM5OQorIyAgICAgIGRlZmluZSBTVERDOTkKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZChTVERDKSAmJiAoZGVmaW5lZChfX1NURENfXykgfHwgZGVmaW5lZChfX2NwbHVzcGx1cykpCisjICBkZWZpbmUgU1REQworI2VuZGlmCisjaWYgIWRlZmluZWQoU1REQykgJiYgKGRlZmluZWQoX19HTlVDX18pIHx8IGRlZmluZWQoX19CT1JMQU5EQ19fKSkKKyMgIGRlZmluZSBTVERDCisjZW5kaWYKKyNpZiAhZGVmaW5lZChTVERDKSAmJiAoZGVmaW5lZChNU0RPUykgfHwgZGVmaW5lZChXSU5ET1dTKSB8fCBkZWZpbmVkKFdJTjMyKSkKKyMgIGRlZmluZSBTVERDCisjZW5kaWYKKyNpZiAhZGVmaW5lZChTVERDKSAmJiAoZGVmaW5lZChPUzIpIHx8IGRlZmluZWQoX19IT1NfQUlYX18pKQorIyAgZGVmaW5lIFNUREMKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX09TNDAwX18pICYmICFkZWZpbmVkKFNUREMpICAgIC8qIGlTZXJpZXMgKGZvcm1lcmx5IEFTLzQwMCkuICovCisjICBkZWZpbmUgU1REQworI2VuZGlmCisKKyNpZm5kZWYgU1REQworIyAgaWZuZGVmIGNvbnN0IC8qIGNhbm5vdCB1c2UgIWRlZmluZWQoU1REQykgJiYgIWRlZmluZWQoY29uc3QpIG9uIE1hYyAqLworIyAgICBkZWZpbmUgY29uc3QgICAgICAgLyogbm90ZTogbmVlZCBhIG1vcmUgZ2VudGxlIHNvbHV0aW9uIGhlcmUgKi8KKyMgIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoWkxJQl9DT05TVCkgJiYgIWRlZmluZWQoel9jb25zdCkKKyMgIGRlZmluZSB6X2NvbnN0IGNvbnN0CisjZWxzZQorIyAgZGVmaW5lIHpfY29uc3QKKyNlbmRpZgorCisjaWZkZWYgWl9TT0xPCisgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgel9zaXplX3Q7CisjZWxzZQorIyAgZGVmaW5lIHpfbG9uZ2xvbmcgbG9uZyBsb25nCisjICBpZiBkZWZpbmVkKE5PX1NJWkVfVCkKKyAgICAgdHlwZWRlZiB1bnNpZ25lZCBOT19TSVpFX1Qgel9zaXplX3Q7CisjICBlbGlmIGRlZmluZWQoU1REQykKKyMgICAgaW5jbHVkZSA8c3RkZGVmLmg+CisgICAgIHR5cGVkZWYgc2l6ZV90IHpfc2l6ZV90OworIyAgZWxzZQorICAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgel9zaXplX3Q7CisjICBlbmRpZgorIyAgdW5kZWYgel9sb25nbG9uZworI2VuZGlmCisKKy8qIE1heGltdW0gdmFsdWUgZm9yIG1lbUxldmVsIGluIGRlZmxhdGVJbml0MiAqLworI2lmbmRlZiBNQVhfTUVNX0xFVkVMCisjICBpZmRlZiBNQVhTRUdfNjRLCisjICAgIGRlZmluZSBNQVhfTUVNX0xFVkVMIDgKKyMgIGVsc2UKKyMgICAgZGVmaW5lIE1BWF9NRU1fTEVWRUwgOQorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBNYXhpbXVtIHZhbHVlIGZvciB3aW5kb3dCaXRzIGluIGRlZmxhdGVJbml0MiBhbmQgaW5mbGF0ZUluaXQyLgorICogV0FSTklORzogcmVkdWNpbmcgTUFYX1dCSVRTIG1ha2VzIG1pbmlnemlwIHVuYWJsZSB0byBleHRyYWN0IC5neiBmaWxlcworICogY3JlYXRlZCBieSBnemlwLiAoRmlsZXMgY3JlYXRlZCBieSBtaW5pZ3ppcCBjYW4gc3RpbGwgYmUgZXh0cmFjdGVkIGJ5CisgKiBnemlwLikKKyAqLworI2lmbmRlZiBNQVhfV0JJVFMKKyMgIGRlZmluZSBNQVhfV0JJVFMgICAxNSAvKiAzMksgTFo3NyB3aW5kb3cgKi8KKyNlbmRpZgorCisvKiBUaGUgbWVtb3J5IHJlcXVpcmVtZW50cyBmb3IgZGVmbGF0ZSBhcmUgKGluIGJ5dGVzKToKKyAgICAgICAgICAgICgxIDw8ICh3aW5kb3dCaXRzKzIpKSArICAoMSA8PCAobWVtTGV2ZWwrOSkpCisgdGhhdCBpczogMTI4SyBmb3Igd2luZG93Qml0cz0xNSAgKyAgMTI4SyBmb3IgbWVtTGV2ZWwgPSA4ICAoZGVmYXVsdCB2YWx1ZXMpCisgcGx1cyBhIGZldyBraWxvYnl0ZXMgZm9yIHNtYWxsIG9iamVjdHMuIEZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0byByZWR1Y2UKKyB0aGUgZGVmYXVsdCBtZW1vcnkgcmVxdWlyZW1lbnRzIGZyb20gMjU2SyB0byAxMjhLLCBjb21waWxlIHdpdGgKKyAgICAgbWFrZSBDRkxBR1M9Ii1PIC1ETUFYX1dCSVRTPTE0IC1ETUFYX01FTV9MRVZFTD03IgorIE9mIGNvdXJzZSB0aGlzIHdpbGwgZ2VuZXJhbGx5IGRlZ3JhZGUgY29tcHJlc3Npb24gKHRoZXJlJ3Mgbm8gZnJlZSBsdW5jaCkuCisKKyAgIFRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzIGZvciBpbmZsYXRlIGFyZSAoaW4gYnl0ZXMpIDEgPDwgd2luZG93Qml0cworIHRoYXQgaXMsIDMySyBmb3Igd2luZG93Qml0cz0xNSAoZGVmYXVsdCB2YWx1ZSkgcGx1cyBhYm91dCA3IGtpbG9ieXRlcworIGZvciBzbWFsbCBvYmplY3RzLgorKi8KKworICAgICAgICAgICAgICAgICAgICAgICAgLyogVHlwZSBkZWNsYXJhdGlvbnMgKi8KKworI2lmbmRlZiBPRiAvKiBmdW5jdGlvbiBwcm90b3R5cGVzICovCisjICBpZmRlZiBTVERDCisjICAgIGRlZmluZSBPRihhcmdzKSAgYXJncworIyAgZWxzZQorIyAgICBkZWZpbmUgT0YoYXJncykgICgpCisjICBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgWl9BUkcgLyogZnVuY3Rpb24gcHJvdG90eXBlcyBmb3Igc3RkYXJnICovCisjICBpZiBkZWZpbmVkKFNUREMpIHx8IGRlZmluZWQoWl9IQVZFX1NUREFSR19IKQorIyAgICBkZWZpbmUgWl9BUkcoYXJncykgIGFyZ3MKKyMgIGVsc2UKKyMgICAgZGVmaW5lIFpfQVJHKGFyZ3MpICAoKQorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBUaGUgZm9sbG93aW5nIGRlZmluaXRpb25zIGZvciBGQVIgYXJlIG5lZWRlZCBvbmx5IGZvciBNU0RPUyBtaXhlZAorICogbW9kZWwgcHJvZ3JhbW1pbmcgKHNtYWxsIG9yIG1lZGl1bSBtb2RlbCB3aXRoIHNvbWUgZmFyIGFsbG9jYXRpb25zKS4KKyAqIFRoaXMgd2FzIHRlc3RlZCBvbmx5IHdpdGggTVNDOyBmb3Igb3RoZXIgTVNET1MgY29tcGlsZXJzIHlvdSBtYXkgaGF2ZQorICogdG8gZGVmaW5lIE5PX01FTUNQWSBpbiB6dXRpbC5oLiAgSWYgeW91IGRvbid0IG5lZWQgdGhlIG1peGVkIG1vZGVsLAorICoganVzdCBkZWZpbmUgRkFSIHRvIGJlIGVtcHR5LgorICovCisjaWZkZWYgU1lTMTZCSVQKKyMgIGlmIGRlZmluZWQoTV9JODZTTSkgfHwgZGVmaW5lZChNX0k4Nk1NKQorICAgICAvKiBNU0Mgc21hbGwgb3IgbWVkaXVtIG1vZGVsICovCisjICAgIGRlZmluZSBTTUFMTF9NRURJVU0KKyMgICAgaWZkZWYgX01TQ19WRVIKKyMgICAgICBkZWZpbmUgRkFSIF9mYXIKKyMgICAgZWxzZQorIyAgICAgIGRlZmluZSBGQVIgZmFyCisjICAgIGVuZGlmCisjICBlbmRpZgorIyAgaWYgKGRlZmluZWQoX19TTUFMTF9fKSB8fCBkZWZpbmVkKF9fTUVESVVNX18pKQorICAgICAvKiBUdXJibyBDIHNtYWxsIG9yIG1lZGl1bSBtb2RlbCAqLworIyAgICBkZWZpbmUgU01BTExfTUVESVVNCisjICAgIGlmZGVmIF9fQk9STEFORENfXworIyAgICAgIGRlZmluZSBGQVIgX2ZhcgorIyAgICBlbHNlCisjICAgICAgZGVmaW5lIEZBUiBmYXIKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoV0lORE9XUykgfHwgZGVmaW5lZChXSU4zMikKKyAgIC8qIElmIGJ1aWxkaW5nIG9yIHVzaW5nIHpsaWIgYXMgYSBETEwsIGRlZmluZSBaTElCX0RMTC4KKyAgICAqIFRoaXMgaXMgbm90IG1hbmRhdG9yeSwgYnV0IGl0IG9mZmVycyBhIGxpdHRsZSBwZXJmb3JtYW5jZSBpbmNyZWFzZS4KKyAgICAqLworIyAgaWZkZWYgWkxJQl9ETEwKKyMgICAgaWYgZGVmaW5lZChXSU4zMikgJiYgKCFkZWZpbmVkKF9fQk9STEFORENfXykgfHwgKF9fQk9STEFORENfXyA+PSAweDUwMCkpCisjICAgICAgaWZkZWYgWkxJQl9JTlRFUk5BTAorIyAgICAgICAgZGVmaW5lIFpFWFRFUk4gZXh0ZXJuIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorIyAgICAgIGVsc2UKKyMgICAgICAgIGRlZmluZSBaRVhURVJOIGV4dGVybiBfX2RlY2xzcGVjKGRsbGltcG9ydCkKKyMgICAgICBlbmRpZgorIyAgICBlbmRpZgorIyAgZW5kaWYgIC8qIFpMSUJfRExMICovCisgICAvKiBJZiBidWlsZGluZyBvciB1c2luZyB6bGliIHdpdGggdGhlIFdJTkFQSS9XSU5BUElWIGNhbGxpbmcgY29udmVudGlvbiwKKyAgICAqIGRlZmluZSBaTElCX1dJTkFQSS4KKyAgICAqIENhdXRpb246IHRoZSBzdGFuZGFyZCBaTElCMS5ETEwgaXMgTk9UIGNvbXBpbGVkIHVzaW5nIFpMSUJfV0lOQVBJLgorICAgICovCisjICBpZmRlZiBaTElCX1dJTkFQSQorIyAgICBpZmRlZiBGQVIKKyMgICAgICB1bmRlZiBGQVIKKyMgICAgZW5kaWYKKyMgICAgaW5jbHVkZSA8d2luZG93cy5oPgorICAgICAvKiBObyBuZWVkIGZvciBfZXhwb3J0LCB1c2UgWkxJQi5ERUYgaW5zdGVhZC4gKi8KKyAgICAgLyogRm9yIGNvbXBsZXRlIFdpbmRvd3MgY29tcGF0aWJpbGl0eSwgdXNlIFdJTkFQSSwgbm90IF9fc3RkY2FsbC4gKi8KKyMgICAgZGVmaW5lIFpFWFBPUlQgV0lOQVBJCisjICAgIGlmZGVmIFdJTjMyCisjICAgICAgZGVmaW5lIFpFWFBPUlRWQSBXSU5BUElWCisjICAgIGVsc2UKKyMgICAgICBkZWZpbmUgWkVYUE9SVFZBIEZBUiBDREVDTAorIyAgICBlbmRpZgorIyAgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX19CRU9TX18pCisjICBpZmRlZiBaTElCX0RMTAorIyAgICBpZmRlZiBaTElCX0lOVEVSTkFMCisjICAgICAgZGVmaW5lIFpFWFBPUlQgICBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKKyMgICAgICBkZWZpbmUgWkVYUE9SVFZBIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorIyAgICBlbHNlCisjICAgICAgZGVmaW5lIFpFWFBPUlQgICBfX2RlY2xzcGVjKGRsbGltcG9ydCkKKyMgICAgICBkZWZpbmUgWkVYUE9SVFZBIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQorIyAgICBlbmRpZgorIyAgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIFpFWFRFUk4KKyMgIGRlZmluZSBaRVhURVJOIGV4dGVybgorI2VuZGlmCisjaWZuZGVmIFpFWFBPUlQKKyMgIGRlZmluZSBaRVhQT1JUCisjZW5kaWYKKyNpZm5kZWYgWkVYUE9SVFZBCisjICBkZWZpbmUgWkVYUE9SVFZBCisjZW5kaWYKKworI2lmbmRlZiBGQVIKKyMgIGRlZmluZSBGQVIKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX19NQUNUWVBFU19fKQordHlwZWRlZiB1bnNpZ25lZCBjaGFyICBCeXRlOyAgLyogOCBiaXRzICovCisjZW5kaWYKK3R5cGVkZWYgdW5zaWduZWQgaW50ICAgdUludDsgIC8qIDE2IGJpdHMgb3IgbW9yZSAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nICB1TG9uZzsgLyogMzIgYml0cyBvciBtb3JlICovCisKKyNpZmRlZiBTTUFMTF9NRURJVU0KKyAgIC8qIEJvcmxhbmQgQy9DKysgYW5kIHNvbWUgb2xkIE1TQyB2ZXJzaW9ucyBpZ25vcmUgRkFSIGluc2lkZSB0eXBlZGVmICovCisjICBkZWZpbmUgQnl0ZWYgQnl0ZSBGQVIKKyNlbHNlCisgICB0eXBlZGVmIEJ5dGUgIEZBUiBCeXRlZjsKKyNlbmRpZgordHlwZWRlZiBjaGFyICBGQVIgY2hhcmY7Cit0eXBlZGVmIGludCAgIEZBUiBpbnRmOwordHlwZWRlZiB1SW50ICBGQVIgdUludGY7Cit0eXBlZGVmIHVMb25nIEZBUiB1TG9uZ2Y7CisKKyNpZmRlZiBTVERDCisgICB0eXBlZGVmIHZvaWQgY29uc3QgKnZvaWRwYzsKKyAgIHR5cGVkZWYgdm9pZCBGQVIgICAqdm9pZHBmOworICAgdHlwZWRlZiB2b2lkICAgICAgICp2b2lkcDsKKyNlbHNlCisgICB0eXBlZGVmIEJ5dGUgY29uc3QgKnZvaWRwYzsKKyAgIHR5cGVkZWYgQnl0ZSBGQVIgICAqdm9pZHBmOworICAgdHlwZWRlZiBCeXRlICAgICAgICp2b2lkcDsKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoWl9VNCkgJiYgIWRlZmluZWQoWl9TT0xPKSAmJiBkZWZpbmVkKFNUREMpCisjICBpbmNsdWRlIDxsaW1pdHMuaD4KKyMgIGlmIChVSU5UX01BWCA9PSAweGZmZmZmZmZmVUwpCisjICAgIGRlZmluZSBaX1U0IHVuc2lnbmVkCisjICBlbGlmIChVTE9OR19NQVggPT0gMHhmZmZmZmZmZlVMKQorIyAgICBkZWZpbmUgWl9VNCB1bnNpZ25lZCBsb25nCisjICBlbGlmIChVU0hSVF9NQVggPT0gMHhmZmZmZmZmZlVMKQorIyAgICBkZWZpbmUgWl9VNCB1bnNpZ25lZCBzaG9ydAorIyAgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgWl9VNAorICAgdHlwZWRlZiBaX1U0IHpfY3JjX3Q7CisjZWxzZQorICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIHpfY3JjX3Q7CisjZW5kaWYKKworI2lmZGVmIEhBVkVfVU5JU1REX0ggICAgLyogbWF5IGJlIHNldCB0byAjaWYgMSBieSAuL2NvbmZpZ3VyZSAqLworIyAgZGVmaW5lIFpfSEFWRV9VTklTVERfSAorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1NUREFSR19IICAgIC8qIG1heSBiZSBzZXQgdG8gI2lmIDEgYnkgLi9jb25maWd1cmUgKi8KKyMgIGRlZmluZSBaX0hBVkVfU1REQVJHX0gKKyNlbmRpZgorCisjaWZkZWYgU1REQworIyAgaWZuZGVmIFpfU09MTworIyAgICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4gICAgICAvKiBmb3Igb2ZmX3QgKi8KKyMgIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoU1REQykgfHwgZGVmaW5lZChaX0hBVkVfU1REQVJHX0gpCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGluY2x1ZGUgPHN0ZGFyZy5oPiAgICAgICAgIC8qIGZvciB2YV9saXN0ICovCisjICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfV0lOMzIKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgaW5jbHVkZSA8c3RkZGVmLmg+ICAgICAgICAgLyogZm9yIHdjaGFyX3QgKi8KKyMgIGVuZGlmCisjZW5kaWYKKworLyogYSBsaXR0bGUgdHJpY2sgdG8gYWNjb21tb2RhdGUgYm90aCAiI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFIiBhbmQKKyAqICIjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UgMSIgYXMgcmVxdWVzdGluZyA2NC1iaXQgb3BlcmF0aW9ucywgKGV2ZW4KKyAqIHRob3VnaCB0aGUgZm9ybWVyIGRvZXMgbm90IGNvbmZvcm0gdG8gdGhlIExGUyBkb2N1bWVudCksIGJ1dCBjb25zaWRlcmluZworICogYm90aCAiI3VuZGVmIF9MQVJHRUZJTEU2NF9TT1VSQ0UiIGFuZCAiI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFIDAiIGFzCisgKiBlcXVpdmFsZW50bHkgcmVxdWVzdGluZyBubyA2NC1iaXQgb3BlcmF0aW9ucworICovCisjaWYgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKSAmJiAtX0xBUkdFRklMRTY0X1NPVVJDRSAtIC0xID09IDEKKyMgIHVuZGVmIF9MQVJHRUZJTEU2NF9TT1VSQ0UKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX1dBVENPTUNfXykgJiYgIWRlZmluZWQoWl9IQVZFX1VOSVNURF9IKQorIyAgZGVmaW5lIFpfSEFWRV9VTklTVERfSAorI2VuZGlmCisjaWZuZGVmIFpfU09MTworIyAgaWYgZGVmaW5lZChaX0hBVkVfVU5JU1REX0gpIHx8IGRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkKKyMgICAgaW5jbHVkZSA8dW5pc3RkLmg+ICAgICAgICAgLyogZm9yIFNFRUtfKiwgb2ZmX3QsIGFuZCBfTEZTNjRfTEFSR0VGSUxFICovCisjICAgIGlmZGVmIFZNUworIyAgICAgIGluY2x1ZGUgPHVuaXhpby5oPiAgICAgICAvKiBmb3Igb2ZmX3QgKi8KKyMgICAgZW5kaWYKKyMgICAgaWZuZGVmIHpfb2ZmX3QKKyMgICAgICBkZWZpbmUgel9vZmZfdCBvZmZfdAorIyAgICBlbmRpZgorIyAgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfTEZTNjRfTEFSR0VGSUxFKSAmJiBfTEZTNjRfTEFSR0VGSUxFLTAKKyMgIGRlZmluZSBaX0xGUzY0CisjZW5kaWYKKworI2lmIGRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkgJiYgZGVmaW5lZChaX0xGUzY0KQorIyAgZGVmaW5lIFpfTEFSR0U2NAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUy0wID09IDY0ICYmIGRlZmluZWQoWl9MRlM2NCkKKyMgIGRlZmluZSBaX1dBTlQ2NAorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChTRUVLX1NFVCkgJiYgIWRlZmluZWQoWl9TT0xPKQorIyAgZGVmaW5lIFNFRUtfU0VUICAgICAgICAwICAgICAgIC8qIFNlZWsgZnJvbSBiZWdpbm5pbmcgb2YgZmlsZS4gICovCisjICBkZWZpbmUgU0VFS19DVVIgICAgICAgIDEgICAgICAgLyogU2VlayBmcm9tIGN1cnJlbnQgcG9zaXRpb24uICAqLworIyAgZGVmaW5lIFNFRUtfRU5EICAgICAgICAyICAgICAgIC8qIFNldCBmaWxlIHBvaW50ZXIgdG8gRU9GIHBsdXMgIm9mZnNldCIgKi8KKyNlbmRpZgorCisjaWZuZGVmIHpfb2ZmX3QKKyMgIGRlZmluZSB6X29mZl90IGxvbmcKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX1dJTjMyKSAmJiBkZWZpbmVkKFpfTEFSR0U2NCkKKyMgIGRlZmluZSB6X29mZjY0X3Qgb2ZmNjRfdAorI2Vsc2UKKyMgIGlmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoWl9TT0xPKQorIyAgICBkZWZpbmUgel9vZmY2NF90IF9faW50NjQKKyMgIGVsc2UKKyMgICAgZGVmaW5lIHpfb2ZmNjRfdCB6X29mZl90CisjICBlbmRpZgorI2VuZGlmCisKKy8qIE1WUyBsaW5rZXIgZG9lcyBub3Qgc3VwcG9ydCBleHRlcm5hbCBuYW1lcyBsYXJnZXIgdGhhbiA4IGJ5dGVzICovCisjaWYgZGVmaW5lZChfX01WU19fKQorICAjcHJhZ21hIG1hcChkZWZsYXRlSW5pdF8sIkRFSU4iKQorICAjcHJhZ21hIG1hcChkZWZsYXRlSW5pdDJfLCJERUlOMiIpCisgICNwcmFnbWEgbWFwKGRlZmxhdGVFbmQsIkRFRU5EIikKKyAgI3ByYWdtYSBtYXAoZGVmbGF0ZUJvdW5kLCJERUJORCIpCisgICNwcmFnbWEgbWFwKGluZmxhdGVJbml0XywiSU5JTiIpCisgICNwcmFnbWEgbWFwKGluZmxhdGVJbml0Ml8sIklOSU4yIikKKyAgI3ByYWdtYSBtYXAoaW5mbGF0ZUVuZCwiSU5FTkQiKQorICAjcHJhZ21hIG1hcChpbmZsYXRlU3luYywiSU5TWSIpCisgICNwcmFnbWEgbWFwKGluZmxhdGVTZXREaWN0aW9uYXJ5LCJJTlNFREkiKQorICAjcHJhZ21hIG1hcChjb21wcmVzc0JvdW5kLCJDTUJORCIpCisgICNwcmFnbWEgbWFwKGluZmxhdGVfdGFibGUsIklOVEFCTCIpCisgICNwcmFnbWEgbWFwKGluZmxhdGVfZmFzdCwiSU5GQSIpCisgICNwcmFnbWEgbWFwKGluZmxhdGVfY29weXJpZ2h0LCJJTkNPUFkiKQorI2VuZGlmCisKKyNlbmRpZiAvKiBaQ09ORl9IICovCmRpZmYgLS1naXQgYS9zcmMvemNvbmYuaC5jbWFrZWluIGIvc3JjL3pjb25mLmguY21ha2VpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2YyNGNjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3pjb25mLmguY21ha2VpbgpAQCAtMCwwICsxLDUzNiBAQAorLyogemNvbmYuaCAtLSBjb25maWd1cmF0aW9uIG9mIHRoZSB6bGliIGNvbXByZXNzaW9uIGxpYnJhcnkKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDE2IEplYW4tbG91cCBHYWlsbHksIE1hcmsgQWRsZXIKKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKKyAqLworCisvKiBAKCMpICRJZCQgKi8KKworI2lmbmRlZiBaQ09ORl9ICisjZGVmaW5lIFpDT05GX0gKKyNjbWFrZWRlZmluZSBaX1BSRUZJWAorI2NtYWtlZGVmaW5lIFpfSEFWRV9VTklTVERfSAorCisvKgorICogSWYgeW91ICpyZWFsbHkqIG5lZWQgYSB1bmlxdWUgcHJlZml4IGZvciBhbGwgdHlwZXMgYW5kIGxpYnJhcnkgZnVuY3Rpb25zLAorICogY29tcGlsZSB3aXRoIC1EWl9QUkVGSVguIFRoZSAic3RhbmRhcmQiIHpsaWIgc2hvdWxkIGJlIGNvbXBpbGVkIHdpdGhvdXQgaXQuCisgKiBFdmVuIGJldHRlciB0aGFuIGNvbXBpbGluZyB3aXRoIC1EWl9QUkVGSVggd291bGQgYmUgdG8gdXNlIGNvbmZpZ3VyZSB0byBzZXQKKyAqIHRoaXMgcGVybWFuZW50bHkgaW4gemNvbmYuaCB1c2luZyAiLi9jb25maWd1cmUgLS16cHJlZml4Ii4KKyAqLworI2lmZGVmIFpfUFJFRklYICAgICAvKiBtYXkgYmUgc2V0IHRvICNpZiAxIGJ5IC4vY29uZmlndXJlICovCisjICBkZWZpbmUgWl9QUkVGSVhfU0VUCisKKy8qIGFsbCBsaW5rZWQgc3ltYm9scyBhbmQgaW5pdCBtYWNyb3MgKi8KKyMgIGRlZmluZSBfZGlzdF9jb2RlICAgICAgICAgICAgel9fZGlzdF9jb2RlCisjICBkZWZpbmUgX2xlbmd0aF9jb2RlICAgICAgICAgIHpfX2xlbmd0aF9jb2RlCisjICBkZWZpbmUgX3RyX2FsaWduICAgICAgICAgICAgIHpfX3RyX2FsaWduCisjICBkZWZpbmUgX3RyX2ZsdXNoX2JpdHMgICAgICAgIHpfX3RyX2ZsdXNoX2JpdHMKKyMgIGRlZmluZSBfdHJfZmx1c2hfYmxvY2sgICAgICAgel9fdHJfZmx1c2hfYmxvY2sKKyMgIGRlZmluZSBfdHJfaW5pdCAgICAgICAgICAgICAgel9fdHJfaW5pdAorIyAgZGVmaW5lIF90cl9zdG9yZWRfYmxvY2sgICAgICB6X190cl9zdG9yZWRfYmxvY2sKKyMgIGRlZmluZSBfdHJfdGFsbHkgICAgICAgICAgICAgel9fdHJfdGFsbHkKKyMgIGRlZmluZSBhZGxlcjMyICAgICAgICAgICAgICAgel9hZGxlcjMyCisjICBkZWZpbmUgYWRsZXIzMl9jb21iaW5lICAgICAgIHpfYWRsZXIzMl9jb21iaW5lCisjICBkZWZpbmUgYWRsZXIzMl9jb21iaW5lNjQgICAgIHpfYWRsZXIzMl9jb21iaW5lNjQKKyMgIGRlZmluZSBhZGxlcjMyX3ogICAgICAgICAgICAgel9hZGxlcjMyX3oKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgZGVmaW5lIGNvbXByZXNzICAgICAgICAgICAgICB6X2NvbXByZXNzCisjICAgIGRlZmluZSBjb21wcmVzczIgICAgICAgICAgICAgel9jb21wcmVzczIKKyMgICAgZGVmaW5lIGNvbXByZXNzQm91bmQgICAgICAgICB6X2NvbXByZXNzQm91bmQKKyMgIGVuZGlmCisjICBkZWZpbmUgY3JjMzIgICAgICAgICAgICAgICAgIHpfY3JjMzIKKyMgIGRlZmluZSBjcmMzMl9jb21iaW5lICAgICAgICAgel9jcmMzMl9jb21iaW5lCisjICBkZWZpbmUgY3JjMzJfY29tYmluZTY0ICAgICAgIHpfY3JjMzJfY29tYmluZTY0CisjICBkZWZpbmUgY3JjMzJfeiAgICAgICAgICAgICAgIHpfY3JjMzJfegorIyAgZGVmaW5lIGRlZmxhdGUgICAgICAgICAgICAgICB6X2RlZmxhdGUKKyMgIGRlZmluZSBkZWZsYXRlQm91bmQgICAgICAgICAgel9kZWZsYXRlQm91bmQKKyMgIGRlZmluZSBkZWZsYXRlQ29weSAgICAgICAgICAgel9kZWZsYXRlQ29weQorIyAgZGVmaW5lIGRlZmxhdGVFbmQgICAgICAgICAgICB6X2RlZmxhdGVFbmQKKyMgIGRlZmluZSBkZWZsYXRlR2V0RGljdGlvbmFyeSAgel9kZWZsYXRlR2V0RGljdGlvbmFyeQorIyAgZGVmaW5lIGRlZmxhdGVJbml0ICAgICAgICAgICB6X2RlZmxhdGVJbml0CisjICBkZWZpbmUgZGVmbGF0ZUluaXQyICAgICAgICAgIHpfZGVmbGF0ZUluaXQyCisjICBkZWZpbmUgZGVmbGF0ZUluaXQyXyAgICAgICAgIHpfZGVmbGF0ZUluaXQyXworIyAgZGVmaW5lIGRlZmxhdGVJbml0XyAgICAgICAgICB6X2RlZmxhdGVJbml0XworIyAgZGVmaW5lIGRlZmxhdGVQYXJhbXMgICAgICAgICB6X2RlZmxhdGVQYXJhbXMKKyMgIGRlZmluZSBkZWZsYXRlUGVuZGluZyAgICAgICAgel9kZWZsYXRlUGVuZGluZworIyAgZGVmaW5lIGRlZmxhdGVQcmltZSAgICAgICAgICB6X2RlZmxhdGVQcmltZQorIyAgZGVmaW5lIGRlZmxhdGVSZXNldCAgICAgICAgICB6X2RlZmxhdGVSZXNldAorIyAgZGVmaW5lIGRlZmxhdGVSZXNldEtlZXAgICAgICB6X2RlZmxhdGVSZXNldEtlZXAKKyMgIGRlZmluZSBkZWZsYXRlU2V0RGljdGlvbmFyeSAgel9kZWZsYXRlU2V0RGljdGlvbmFyeQorIyAgZGVmaW5lIGRlZmxhdGVTZXRIZWFkZXIgICAgICB6X2RlZmxhdGVTZXRIZWFkZXIKKyMgIGRlZmluZSBkZWZsYXRlVHVuZSAgICAgICAgICAgel9kZWZsYXRlVHVuZQorIyAgZGVmaW5lIGRlZmxhdGVfY29weXJpZ2h0ICAgICB6X2RlZmxhdGVfY29weXJpZ2h0CisjICBkZWZpbmUgZ2V0X2NyY190YWJsZSAgICAgICAgIHpfZ2V0X2NyY190YWJsZQorIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgZ3pfZXJyb3IgICAgICAgICAgICAgIHpfZ3pfZXJyb3IKKyMgICAgZGVmaW5lIGd6X2ludG1heCAgICAgICAgICAgICB6X2d6X2ludG1heAorIyAgICBkZWZpbmUgZ3pfc3Ryd2luZXJyb3IgICAgICAgIHpfZ3pfc3Ryd2luZXJyb3IKKyMgICAgZGVmaW5lIGd6YnVmZmVyICAgICAgICAgICAgICB6X2d6YnVmZmVyCisjICAgIGRlZmluZSBnemNsZWFyZXJyICAgICAgICAgICAgel9nemNsZWFyZXJyCisjICAgIGRlZmluZSBnemNsb3NlICAgICAgICAgICAgICAgel9nemNsb3NlCisjICAgIGRlZmluZSBnemNsb3NlX3IgICAgICAgICAgICAgel9nemNsb3NlX3IKKyMgICAgZGVmaW5lIGd6Y2xvc2VfdyAgICAgICAgICAgICB6X2d6Y2xvc2VfdworIyAgICBkZWZpbmUgZ3pkaXJlY3QgICAgICAgICAgICAgIHpfZ3pkaXJlY3QKKyMgICAgZGVmaW5lIGd6ZG9wZW4gICAgICAgICAgICAgICB6X2d6ZG9wZW4KKyMgICAgZGVmaW5lIGd6ZW9mICAgICAgICAgICAgICAgICB6X2d6ZW9mCisjICAgIGRlZmluZSBnemVycm9yICAgICAgICAgICAgICAgel9nemVycm9yCisjICAgIGRlZmluZSBnemZsdXNoICAgICAgICAgICAgICAgel9nemZsdXNoCisjICAgIGRlZmluZSBnemZyZWFkICAgICAgICAgICAgICAgel9nemZyZWFkCisjICAgIGRlZmluZSBnemZ3cml0ZSAgICAgICAgICAgICAgel9nemZ3cml0ZQorIyAgICBkZWZpbmUgZ3pnZXRjICAgICAgICAgICAgICAgIHpfZ3pnZXRjCisjICAgIGRlZmluZSBnemdldGNfICAgICAgICAgICAgICAgel9nemdldGNfCisjICAgIGRlZmluZSBnemdldHMgICAgICAgICAgICAgICAgel9nemdldHMKKyMgICAgZGVmaW5lIGd6b2Zmc2V0ICAgICAgICAgICAgICB6X2d6b2Zmc2V0CisjICAgIGRlZmluZSBnem9mZnNldDY0ICAgICAgICAgICAgel9nem9mZnNldDY0CisjICAgIGRlZmluZSBnem9wZW4gICAgICAgICAgICAgICAgel9nem9wZW4KKyMgICAgZGVmaW5lIGd6b3BlbjY0ICAgICAgICAgICAgICB6X2d6b3BlbjY0CisjICAgIGlmZGVmIF9XSU4zMgorIyAgICAgIGRlZmluZSBnem9wZW5fdyAgICAgICAgICAgICAgel9nem9wZW5fdworIyAgICBlbmRpZgorIyAgICBkZWZpbmUgZ3pwcmludGYgICAgICAgICAgICAgIHpfZ3pwcmludGYKKyMgICAgZGVmaW5lIGd6cHV0YyAgICAgICAgICAgICAgICB6X2d6cHV0YworIyAgICBkZWZpbmUgZ3pwdXRzICAgICAgICAgICAgICAgIHpfZ3pwdXRzCisjICAgIGRlZmluZSBnenJlYWQgICAgICAgICAgICAgICAgel9nenJlYWQKKyMgICAgZGVmaW5lIGd6cmV3aW5kICAgICAgICAgICAgICB6X2d6cmV3aW5kCisjICAgIGRlZmluZSBnenNlZWsgICAgICAgICAgICAgICAgel9nenNlZWsKKyMgICAgZGVmaW5lIGd6c2VlazY0ICAgICAgICAgICAgICB6X2d6c2VlazY0CisjICAgIGRlZmluZSBnenNldHBhcmFtcyAgICAgICAgICAgel9nenNldHBhcmFtcworIyAgICBkZWZpbmUgZ3p0ZWxsICAgICAgICAgICAgICAgIHpfZ3p0ZWxsCisjICAgIGRlZmluZSBnenRlbGw2NCAgICAgICAgICAgICAgel9nenRlbGw2NAorIyAgICBkZWZpbmUgZ3p1bmdldGMgICAgICAgICAgICAgIHpfZ3p1bmdldGMKKyMgICAgZGVmaW5lIGd6dnByaW50ZiAgICAgICAgICAgICB6X2d6dnByaW50ZgorIyAgICBkZWZpbmUgZ3p3cml0ZSAgICAgICAgICAgICAgIHpfZ3p3cml0ZQorIyAgZW5kaWYKKyMgIGRlZmluZSBpbmZsYXRlICAgICAgICAgICAgICAgel9pbmZsYXRlCisjICBkZWZpbmUgaW5mbGF0ZUJhY2sgICAgICAgICAgIHpfaW5mbGF0ZUJhY2sKKyMgIGRlZmluZSBpbmZsYXRlQmFja0VuZCAgICAgICAgel9pbmZsYXRlQmFja0VuZAorIyAgZGVmaW5lIGluZmxhdGVCYWNrSW5pdCAgICAgICB6X2luZmxhdGVCYWNrSW5pdAorIyAgZGVmaW5lIGluZmxhdGVCYWNrSW5pdF8gICAgICB6X2luZmxhdGVCYWNrSW5pdF8KKyMgIGRlZmluZSBpbmZsYXRlQ29kZXNVc2VkICAgICAgel9pbmZsYXRlQ29kZXNVc2VkCisjICBkZWZpbmUgaW5mbGF0ZUNvcHkgICAgICAgICAgIHpfaW5mbGF0ZUNvcHkKKyMgIGRlZmluZSBpbmZsYXRlRW5kICAgICAgICAgICAgel9pbmZsYXRlRW5kCisjICBkZWZpbmUgaW5mbGF0ZUdldERpY3Rpb25hcnkgIHpfaW5mbGF0ZUdldERpY3Rpb25hcnkKKyMgIGRlZmluZSBpbmZsYXRlR2V0SGVhZGVyICAgICAgel9pbmZsYXRlR2V0SGVhZGVyCisjICBkZWZpbmUgaW5mbGF0ZUluaXQgICAgICAgICAgIHpfaW5mbGF0ZUluaXQKKyMgIGRlZmluZSBpbmZsYXRlSW5pdDIgICAgICAgICAgel9pbmZsYXRlSW5pdDIKKyMgIGRlZmluZSBpbmZsYXRlSW5pdDJfICAgICAgICAgel9pbmZsYXRlSW5pdDJfCisjICBkZWZpbmUgaW5mbGF0ZUluaXRfICAgICAgICAgIHpfaW5mbGF0ZUluaXRfCisjICBkZWZpbmUgaW5mbGF0ZU1hcmsgICAgICAgICAgIHpfaW5mbGF0ZU1hcmsKKyMgIGRlZmluZSBpbmZsYXRlUHJpbWUgICAgICAgICAgel9pbmZsYXRlUHJpbWUKKyMgIGRlZmluZSBpbmZsYXRlUmVzZXQgICAgICAgICAgel9pbmZsYXRlUmVzZXQKKyMgIGRlZmluZSBpbmZsYXRlUmVzZXQyICAgICAgICAgel9pbmZsYXRlUmVzZXQyCisjICBkZWZpbmUgaW5mbGF0ZVJlc2V0S2VlcCAgICAgIHpfaW5mbGF0ZVJlc2V0S2VlcAorIyAgZGVmaW5lIGluZmxhdGVTZXREaWN0aW9uYXJ5ICB6X2luZmxhdGVTZXREaWN0aW9uYXJ5CisjICBkZWZpbmUgaW5mbGF0ZVN5bmMgICAgICAgICAgIHpfaW5mbGF0ZVN5bmMKKyMgIGRlZmluZSBpbmZsYXRlU3luY1BvaW50ICAgICAgel9pbmZsYXRlU3luY1BvaW50CisjICBkZWZpbmUgaW5mbGF0ZVVuZGVybWluZSAgICAgIHpfaW5mbGF0ZVVuZGVybWluZQorIyAgZGVmaW5lIGluZmxhdGVWYWxpZGF0ZSAgICAgICB6X2luZmxhdGVWYWxpZGF0ZQorIyAgZGVmaW5lIGluZmxhdGVfY29weXJpZ2h0ICAgICB6X2luZmxhdGVfY29weXJpZ2h0CisjICBkZWZpbmUgaW5mbGF0ZV9mYXN0ICAgICAgICAgIHpfaW5mbGF0ZV9mYXN0CisjICBkZWZpbmUgaW5mbGF0ZV90YWJsZSAgICAgICAgIHpfaW5mbGF0ZV90YWJsZQorIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgdW5jb21wcmVzcyAgICAgICAgICAgIHpfdW5jb21wcmVzcworIyAgICBkZWZpbmUgdW5jb21wcmVzczIgICAgICAgICAgIHpfdW5jb21wcmVzczIKKyMgIGVuZGlmCisjICBkZWZpbmUgekVycm9yICAgICAgICAgICAgICAgIHpfekVycm9yCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGRlZmluZSB6Y2FsbG9jICAgICAgICAgICAgICAgel96Y2FsbG9jCisjICAgIGRlZmluZSB6Y2ZyZWUgICAgICAgICAgICAgICAgel96Y2ZyZWUKKyMgIGVuZGlmCisjICBkZWZpbmUgemxpYkNvbXBpbGVGbGFncyAgICAgIHpfemxpYkNvbXBpbGVGbGFncworIyAgZGVmaW5lIHpsaWJWZXJzaW9uICAgICAgICAgICB6X3psaWJWZXJzaW9uCisKKy8qIGFsbCB6bGliIHR5cGVkZWZzIGluIHpsaWIuaCBhbmQgemNvbmYuaCAqLworIyAgZGVmaW5lIEJ5dGUgICAgICAgICAgICAgICAgICB6X0J5dGUKKyMgIGRlZmluZSBCeXRlZiAgICAgICAgICAgICAgICAgel9CeXRlZgorIyAgZGVmaW5lIGFsbG9jX2Z1bmMgICAgICAgICAgICB6X2FsbG9jX2Z1bmMKKyMgIGRlZmluZSBjaGFyZiAgICAgICAgICAgICAgICAgel9jaGFyZgorIyAgZGVmaW5lIGZyZWVfZnVuYyAgICAgICAgICAgICB6X2ZyZWVfZnVuYworIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgZ3pGaWxlICAgICAgICAgICAgICAgIHpfZ3pGaWxlCisjICBlbmRpZgorIyAgZGVmaW5lIGd6X2hlYWRlciAgICAgICAgICAgICB6X2d6X2hlYWRlcgorIyAgZGVmaW5lIGd6X2hlYWRlcnAgICAgICAgICAgICB6X2d6X2hlYWRlcnAKKyMgIGRlZmluZSBpbl9mdW5jICAgICAgICAgICAgICAgel9pbl9mdW5jCisjICBkZWZpbmUgaW50ZiAgICAgICAgICAgICAgICAgIHpfaW50ZgorIyAgZGVmaW5lIG91dF9mdW5jICAgICAgICAgICAgICB6X291dF9mdW5jCisjICBkZWZpbmUgdUludCAgICAgICAgICAgICAgICAgIHpfdUludAorIyAgZGVmaW5lIHVJbnRmICAgICAgICAgICAgICAgICB6X3VJbnRmCisjICBkZWZpbmUgdUxvbmcgICAgICAgICAgICAgICAgIHpfdUxvbmcKKyMgIGRlZmluZSB1TG9uZ2YgICAgICAgICAgICAgICAgel91TG9uZ2YKKyMgIGRlZmluZSB2b2lkcCAgICAgICAgICAgICAgICAgel92b2lkcAorIyAgZGVmaW5lIHZvaWRwYyAgICAgICAgICAgICAgICB6X3ZvaWRwYworIyAgZGVmaW5lIHZvaWRwZiAgICAgICAgICAgICAgICB6X3ZvaWRwZgorCisvKiBhbGwgemxpYiBzdHJ1Y3RzIGluIHpsaWIuaCBhbmQgemNvbmYuaCAqLworIyAgZGVmaW5lIGd6X2hlYWRlcl9zICAgICAgICAgICB6X2d6X2hlYWRlcl9zCisjICBkZWZpbmUgaW50ZXJuYWxfc3RhdGUgICAgICAgIHpfaW50ZXJuYWxfc3RhdGUKKworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fTVNET1NfXykgJiYgIWRlZmluZWQoTVNET1MpCisjICBkZWZpbmUgTVNET1MKKyNlbmRpZgorI2lmIChkZWZpbmVkKE9TXzIpIHx8IGRlZmluZWQoX19PUzJfXykpICYmICFkZWZpbmVkKE9TMikKKyMgIGRlZmluZSBPUzIKKyNlbmRpZgorI2lmIGRlZmluZWQoX1dJTkRPV1MpICYmICFkZWZpbmVkKFdJTkRPV1MpCisjICBkZWZpbmUgV0lORE9XUworI2VuZGlmCisjaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX1dJTjMyX1dDRSkgfHwgZGVmaW5lZChfX1dJTjMyX18pCisjICBpZm5kZWYgV0lOMzIKKyMgICAgZGVmaW5lIFdJTjMyCisjICBlbmRpZgorI2VuZGlmCisjaWYgKGRlZmluZWQoTVNET1MpIHx8IGRlZmluZWQoT1MyKSB8fCBkZWZpbmVkKFdJTkRPV1MpKSAmJiAhZGVmaW5lZChXSU4zMikKKyMgIGlmICFkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChfX0ZMQVRfXykgJiYgIWRlZmluZWQoX18zODZfXykKKyMgICAgaWZuZGVmIFNZUzE2QklUCisjICAgICAgZGVmaW5lIFNZUzE2QklUCisjICAgIGVuZGlmCisjICBlbmRpZgorI2VuZGlmCisKKy8qCisgKiBDb21waWxlIHdpdGggLURNQVhTRUdfNjRLIGlmIHRoZSBhbGxvYyBmdW5jdGlvbiBjYW5ub3QgYWxsb2NhdGUgbW9yZQorICogdGhhbiA2NGsgYnl0ZXMgYXQgYSB0aW1lIChuZWVkZWQgb24gc3lzdGVtcyB3aXRoIDE2LWJpdCBpbnQpLgorICovCisjaWZkZWYgU1lTMTZCSVQKKyMgIGRlZmluZSBNQVhTRUdfNjRLCisjZW5kaWYKKyNpZmRlZiBNU0RPUworIyAgZGVmaW5lIFVOQUxJR05FRF9PSworI2VuZGlmCisKKyNpZmRlZiBfX1NURENfVkVSU0lPTl9fCisjICBpZm5kZWYgU1REQworIyAgICBkZWZpbmUgU1REQworIyAgZW5kaWYKKyMgIGlmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTAorIyAgICBpZm5kZWYgU1REQzk5CisjICAgICAgZGVmaW5lIFNUREM5OQorIyAgICBlbmRpZgorIyAgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkKFNUREMpICYmIChkZWZpbmVkKF9fU1REQ19fKSB8fCBkZWZpbmVkKF9fY3BsdXNwbHVzKSkKKyMgIGRlZmluZSBTVERDCisjZW5kaWYKKyNpZiAhZGVmaW5lZChTVERDKSAmJiAoZGVmaW5lZChfX0dOVUNfXykgfHwgZGVmaW5lZChfX0JPUkxBTkRDX18pKQorIyAgZGVmaW5lIFNUREMKKyNlbmRpZgorI2lmICFkZWZpbmVkKFNUREMpICYmIChkZWZpbmVkKE1TRE9TKSB8fCBkZWZpbmVkKFdJTkRPV1MpIHx8IGRlZmluZWQoV0lOMzIpKQorIyAgZGVmaW5lIFNUREMKKyNlbmRpZgorI2lmICFkZWZpbmVkKFNUREMpICYmIChkZWZpbmVkKE9TMikgfHwgZGVmaW5lZChfX0hPU19BSVhfXykpCisjICBkZWZpbmUgU1REQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fT1M0MDBfXykgJiYgIWRlZmluZWQoU1REQykgICAgLyogaVNlcmllcyAoZm9ybWVybHkgQVMvNDAwKS4gKi8KKyMgIGRlZmluZSBTVERDCisjZW5kaWYKKworI2lmbmRlZiBTVERDCisjICBpZm5kZWYgY29uc3QgLyogY2Fubm90IHVzZSAhZGVmaW5lZChTVERDKSAmJiAhZGVmaW5lZChjb25zdCkgb24gTWFjICovCisjICAgIGRlZmluZSBjb25zdCAgICAgICAvKiBub3RlOiBuZWVkIGEgbW9yZSBnZW50bGUgc29sdXRpb24gaGVyZSAqLworIyAgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChaTElCX0NPTlNUKSAmJiAhZGVmaW5lZCh6X2NvbnN0KQorIyAgZGVmaW5lIHpfY29uc3QgY29uc3QKKyNlbHNlCisjICBkZWZpbmUgel9jb25zdAorI2VuZGlmCisKKyNpZmRlZiBaX1NPTE8KKyAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyB6X3NpemVfdDsKKyNlbHNlCisjICBkZWZpbmUgel9sb25nbG9uZyBsb25nIGxvbmcKKyMgIGlmIGRlZmluZWQoTk9fU0laRV9UKQorICAgICB0eXBlZGVmIHVuc2lnbmVkIE5PX1NJWkVfVCB6X3NpemVfdDsKKyMgIGVsaWYgZGVmaW5lZChTVERDKQorIyAgICBpbmNsdWRlIDxzdGRkZWYuaD4KKyAgICAgdHlwZWRlZiBzaXplX3Qgel9zaXplX3Q7CisjICBlbHNlCisgICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyB6X3NpemVfdDsKKyMgIGVuZGlmCisjICB1bmRlZiB6X2xvbmdsb25nCisjZW5kaWYKKworLyogTWF4aW11bSB2YWx1ZSBmb3IgbWVtTGV2ZWwgaW4gZGVmbGF0ZUluaXQyICovCisjaWZuZGVmIE1BWF9NRU1fTEVWRUwKKyMgIGlmZGVmIE1BWFNFR182NEsKKyMgICAgZGVmaW5lIE1BWF9NRU1fTEVWRUwgOAorIyAgZWxzZQorIyAgICBkZWZpbmUgTUFYX01FTV9MRVZFTCA5CisjICBlbmRpZgorI2VuZGlmCisKKy8qIE1heGltdW0gdmFsdWUgZm9yIHdpbmRvd0JpdHMgaW4gZGVmbGF0ZUluaXQyIGFuZCBpbmZsYXRlSW5pdDIuCisgKiBXQVJOSU5HOiByZWR1Y2luZyBNQVhfV0JJVFMgbWFrZXMgbWluaWd6aXAgdW5hYmxlIHRvIGV4dHJhY3QgLmd6IGZpbGVzCisgKiBjcmVhdGVkIGJ5IGd6aXAuIChGaWxlcyBjcmVhdGVkIGJ5IG1pbmlnemlwIGNhbiBzdGlsbCBiZSBleHRyYWN0ZWQgYnkKKyAqIGd6aXAuKQorICovCisjaWZuZGVmIE1BWF9XQklUUworIyAgZGVmaW5lIE1BWF9XQklUUyAgIDE1IC8qIDMySyBMWjc3IHdpbmRvdyAqLworI2VuZGlmCisKKy8qIFRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzIGZvciBkZWZsYXRlIGFyZSAoaW4gYnl0ZXMpOgorICAgICAgICAgICAgKDEgPDwgKHdpbmRvd0JpdHMrMikpICsgICgxIDw8IChtZW1MZXZlbCs5KSkKKyB0aGF0IGlzOiAxMjhLIGZvciB3aW5kb3dCaXRzPTE1ICArICAxMjhLIGZvciBtZW1MZXZlbCA9IDggIChkZWZhdWx0IHZhbHVlcykKKyBwbHVzIGEgZmV3IGtpbG9ieXRlcyBmb3Igc21hbGwgb2JqZWN0cy4gRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIHJlZHVjZQorIHRoZSBkZWZhdWx0IG1lbW9yeSByZXF1aXJlbWVudHMgZnJvbSAyNTZLIHRvIDEyOEssIGNvbXBpbGUgd2l0aAorICAgICBtYWtlIENGTEFHUz0iLU8gLURNQVhfV0JJVFM9MTQgLURNQVhfTUVNX0xFVkVMPTciCisgT2YgY291cnNlIHRoaXMgd2lsbCBnZW5lcmFsbHkgZGVncmFkZSBjb21wcmVzc2lvbiAodGhlcmUncyBubyBmcmVlIGx1bmNoKS4KKworICAgVGhlIG1lbW9yeSByZXF1aXJlbWVudHMgZm9yIGluZmxhdGUgYXJlIChpbiBieXRlcykgMSA8PCB3aW5kb3dCaXRzCisgdGhhdCBpcywgMzJLIGZvciB3aW5kb3dCaXRzPTE1IChkZWZhdWx0IHZhbHVlKSBwbHVzIGFib3V0IDcga2lsb2J5dGVzCisgZm9yIHNtYWxsIG9iamVjdHMuCisqLworCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBUeXBlIGRlY2xhcmF0aW9ucyAqLworCisjaWZuZGVmIE9GIC8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KKyMgIGlmZGVmIFNUREMKKyMgICAgZGVmaW5lIE9GKGFyZ3MpICBhcmdzCisjICBlbHNlCisjICAgIGRlZmluZSBPRihhcmdzKSAgKCkKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBaX0FSRyAvKiBmdW5jdGlvbiBwcm90b3R5cGVzIGZvciBzdGRhcmcgKi8KKyMgIGlmIGRlZmluZWQoU1REQykgfHwgZGVmaW5lZChaX0hBVkVfU1REQVJHX0gpCisjICAgIGRlZmluZSBaX0FSRyhhcmdzKSAgYXJncworIyAgZWxzZQorIyAgICBkZWZpbmUgWl9BUkcoYXJncykgICgpCisjICBlbmRpZgorI2VuZGlmCisKKy8qIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgZm9yIEZBUiBhcmUgbmVlZGVkIG9ubHkgZm9yIE1TRE9TIG1peGVkCisgKiBtb2RlbCBwcm9ncmFtbWluZyAoc21hbGwgb3IgbWVkaXVtIG1vZGVsIHdpdGggc29tZSBmYXIgYWxsb2NhdGlvbnMpLgorICogVGhpcyB3YXMgdGVzdGVkIG9ubHkgd2l0aCBNU0M7IGZvciBvdGhlciBNU0RPUyBjb21waWxlcnMgeW91IG1heSBoYXZlCisgKiB0byBkZWZpbmUgTk9fTUVNQ1BZIGluIHp1dGlsLmguICBJZiB5b3UgZG9uJ3QgbmVlZCB0aGUgbWl4ZWQgbW9kZWwsCisgKiBqdXN0IGRlZmluZSBGQVIgdG8gYmUgZW1wdHkuCisgKi8KKyNpZmRlZiBTWVMxNkJJVAorIyAgaWYgZGVmaW5lZChNX0k4NlNNKSB8fCBkZWZpbmVkKE1fSTg2TU0pCisgICAgIC8qIE1TQyBzbWFsbCBvciBtZWRpdW0gbW9kZWwgKi8KKyMgICAgZGVmaW5lIFNNQUxMX01FRElVTQorIyAgICBpZmRlZiBfTVNDX1ZFUgorIyAgICAgIGRlZmluZSBGQVIgX2ZhcgorIyAgICBlbHNlCisjICAgICAgZGVmaW5lIEZBUiBmYXIKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjICBpZiAoZGVmaW5lZChfX1NNQUxMX18pIHx8IGRlZmluZWQoX19NRURJVU1fXykpCisgICAgIC8qIFR1cmJvIEMgc21hbGwgb3IgbWVkaXVtIG1vZGVsICovCisjICAgIGRlZmluZSBTTUFMTF9NRURJVU0KKyMgICAgaWZkZWYgX19CT1JMQU5EQ19fCisjICAgICAgZGVmaW5lIEZBUiBfZmFyCisjICAgIGVsc2UKKyMgICAgICBkZWZpbmUgRkFSIGZhcgorIyAgICBlbmRpZgorIyAgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChXSU5ET1dTKSB8fCBkZWZpbmVkKFdJTjMyKQorICAgLyogSWYgYnVpbGRpbmcgb3IgdXNpbmcgemxpYiBhcyBhIERMTCwgZGVmaW5lIFpMSUJfRExMLgorICAgICogVGhpcyBpcyBub3QgbWFuZGF0b3J5LCBidXQgaXQgb2ZmZXJzIGEgbGl0dGxlIHBlcmZvcm1hbmNlIGluY3JlYXNlLgorICAgICovCisjICBpZmRlZiBaTElCX0RMTAorIyAgICBpZiBkZWZpbmVkKFdJTjMyKSAmJiAoIWRlZmluZWQoX19CT1JMQU5EQ19fKSB8fCAoX19CT1JMQU5EQ19fID49IDB4NTAwKSkKKyMgICAgICBpZmRlZiBaTElCX0lOVEVSTkFMCisjICAgICAgICBkZWZpbmUgWkVYVEVSTiBleHRlcm4gX19kZWNsc3BlYyhkbGxleHBvcnQpCisjICAgICAgZWxzZQorIyAgICAgICAgZGVmaW5lIFpFWFRFUk4gZXh0ZXJuIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQorIyAgICAgIGVuZGlmCisjICAgIGVuZGlmCisjICBlbmRpZiAgLyogWkxJQl9ETEwgKi8KKyAgIC8qIElmIGJ1aWxkaW5nIG9yIHVzaW5nIHpsaWIgd2l0aCB0aGUgV0lOQVBJL1dJTkFQSVYgY2FsbGluZyBjb252ZW50aW9uLAorICAgICogZGVmaW5lIFpMSUJfV0lOQVBJLgorICAgICogQ2F1dGlvbjogdGhlIHN0YW5kYXJkIFpMSUIxLkRMTCBpcyBOT1QgY29tcGlsZWQgdXNpbmcgWkxJQl9XSU5BUEkuCisgICAgKi8KKyMgIGlmZGVmIFpMSUJfV0lOQVBJCisjICAgIGlmZGVmIEZBUgorIyAgICAgIHVuZGVmIEZBUgorIyAgICBlbmRpZgorIyAgICBpbmNsdWRlIDx3aW5kb3dzLmg+CisgICAgIC8qIE5vIG5lZWQgZm9yIF9leHBvcnQsIHVzZSBaTElCLkRFRiBpbnN0ZWFkLiAqLworICAgICAvKiBGb3IgY29tcGxldGUgV2luZG93cyBjb21wYXRpYmlsaXR5LCB1c2UgV0lOQVBJLCBub3QgX19zdGRjYWxsLiAqLworIyAgICBkZWZpbmUgWkVYUE9SVCBXSU5BUEkKKyMgICAgaWZkZWYgV0lOMzIKKyMgICAgICBkZWZpbmUgWkVYUE9SVFZBIFdJTkFQSVYKKyMgICAgZWxzZQorIyAgICAgIGRlZmluZSBaRVhQT1JUVkEgRkFSIENERUNMCisjICAgIGVuZGlmCisjICBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfX0JFT1NfXykKKyMgIGlmZGVmIFpMSUJfRExMCisjICAgIGlmZGVmIFpMSUJfSU5URVJOQUwKKyMgICAgICBkZWZpbmUgWkVYUE9SVCAgIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorIyAgICAgIGRlZmluZSBaRVhQT1JUVkEgX19kZWNsc3BlYyhkbGxleHBvcnQpCisjICAgIGVsc2UKKyMgICAgICBkZWZpbmUgWkVYUE9SVCAgIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQorIyAgICAgIGRlZmluZSBaRVhQT1JUVkEgX19kZWNsc3BlYyhkbGxpbXBvcnQpCisjICAgIGVuZGlmCisjICBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgWkVYVEVSTgorIyAgZGVmaW5lIFpFWFRFUk4gZXh0ZXJuCisjZW5kaWYKKyNpZm5kZWYgWkVYUE9SVAorIyAgZGVmaW5lIFpFWFBPUlQKKyNlbmRpZgorI2lmbmRlZiBaRVhQT1JUVkEKKyMgIGRlZmluZSBaRVhQT1JUVkEKKyNlbmRpZgorCisjaWZuZGVmIEZBUgorIyAgZGVmaW5lIEZBUgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfX01BQ1RZUEVTX18pCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgIEJ5dGU7ICAvKiA4IGJpdHMgKi8KKyNlbmRpZgordHlwZWRlZiB1bnNpZ25lZCBpbnQgICB1SW50OyAgLyogMTYgYml0cyBvciBtb3JlICovCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgIHVMb25nOyAvKiAzMiBiaXRzIG9yIG1vcmUgKi8KKworI2lmZGVmIFNNQUxMX01FRElVTQorICAgLyogQm9ybGFuZCBDL0MrKyBhbmQgc29tZSBvbGQgTVNDIHZlcnNpb25zIGlnbm9yZSBGQVIgaW5zaWRlIHR5cGVkZWYgKi8KKyMgIGRlZmluZSBCeXRlZiBCeXRlIEZBUgorI2Vsc2UKKyAgIHR5cGVkZWYgQnl0ZSAgRkFSIEJ5dGVmOworI2VuZGlmCit0eXBlZGVmIGNoYXIgIEZBUiBjaGFyZjsKK3R5cGVkZWYgaW50ICAgRkFSIGludGY7Cit0eXBlZGVmIHVJbnQgIEZBUiB1SW50ZjsKK3R5cGVkZWYgdUxvbmcgRkFSIHVMb25nZjsKKworI2lmZGVmIFNUREMKKyAgIHR5cGVkZWYgdm9pZCBjb25zdCAqdm9pZHBjOworICAgdHlwZWRlZiB2b2lkIEZBUiAgICp2b2lkcGY7CisgICB0eXBlZGVmIHZvaWQgICAgICAgKnZvaWRwOworI2Vsc2UKKyAgIHR5cGVkZWYgQnl0ZSBjb25zdCAqdm9pZHBjOworICAgdHlwZWRlZiBCeXRlIEZBUiAgICp2b2lkcGY7CisgICB0eXBlZGVmIEJ5dGUgICAgICAgKnZvaWRwOworI2VuZGlmCisKKyNpZiAhZGVmaW5lZChaX1U0KSAmJiAhZGVmaW5lZChaX1NPTE8pICYmIGRlZmluZWQoU1REQykKKyMgIGluY2x1ZGUgPGxpbWl0cy5oPgorIyAgaWYgKFVJTlRfTUFYID09IDB4ZmZmZmZmZmZVTCkKKyMgICAgZGVmaW5lIFpfVTQgdW5zaWduZWQKKyMgIGVsaWYgKFVMT05HX01BWCA9PSAweGZmZmZmZmZmVUwpCisjICAgIGRlZmluZSBaX1U0IHVuc2lnbmVkIGxvbmcKKyMgIGVsaWYgKFVTSFJUX01BWCA9PSAweGZmZmZmZmZmVUwpCisjICAgIGRlZmluZSBaX1U0IHVuc2lnbmVkIHNob3J0CisjICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBaX1U0CisgICB0eXBlZGVmIFpfVTQgel9jcmNfdDsKKyNlbHNlCisgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgel9jcmNfdDsKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9VTklTVERfSCAgICAvKiBtYXkgYmUgc2V0IHRvICNpZiAxIGJ5IC4vY29uZmlndXJlICovCisjICBkZWZpbmUgWl9IQVZFX1VOSVNURF9ICisjZW5kaWYKKworI2lmZGVmIEhBVkVfU1REQVJHX0ggICAgLyogbWF5IGJlIHNldCB0byAjaWYgMSBieSAuL2NvbmZpZ3VyZSAqLworIyAgZGVmaW5lIFpfSEFWRV9TVERBUkdfSAorI2VuZGlmCisKKyNpZmRlZiBTVERDCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGluY2x1ZGUgPHN5cy90eXBlcy5oPiAgICAgIC8qIGZvciBvZmZfdCAqLworIyAgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChTVERDKSB8fCBkZWZpbmVkKFpfSEFWRV9TVERBUkdfSCkKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgaW5jbHVkZSA8c3RkYXJnLmg+ICAgICAgICAgLyogZm9yIHZhX2xpc3QgKi8KKyMgIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIF9XSU4zMgorIyAgaWZuZGVmIFpfU09MTworIyAgICBpbmNsdWRlIDxzdGRkZWYuaD4gICAgICAgICAvKiBmb3Igd2NoYXJfdCAqLworIyAgZW5kaWYKKyNlbmRpZgorCisvKiBhIGxpdHRsZSB0cmljayB0byBhY2NvbW1vZGF0ZSBib3RoICIjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UiIGFuZAorICogIiNkZWZpbmUgX0xBUkdFRklMRTY0X1NPVVJDRSAxIiBhcyByZXF1ZXN0aW5nIDY0LWJpdCBvcGVyYXRpb25zLCAoZXZlbgorICogdGhvdWdoIHRoZSBmb3JtZXIgZG9lcyBub3QgY29uZm9ybSB0byB0aGUgTEZTIGRvY3VtZW50KSwgYnV0IGNvbnNpZGVyaW5nCisgKiBib3RoICIjdW5kZWYgX0xBUkdFRklMRTY0X1NPVVJDRSIgYW5kICIjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UgMCIgYXMKKyAqIGVxdWl2YWxlbnRseSByZXF1ZXN0aW5nIG5vIDY0LWJpdCBvcGVyYXRpb25zCisgKi8KKyNpZiBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpICYmIC1fTEFSR0VGSUxFNjRfU09VUkNFIC0gLTEgPT0gMQorIyAgdW5kZWYgX0xBUkdFRklMRTY0X1NPVVJDRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fV0FUQ09NQ19fKSAmJiAhZGVmaW5lZChaX0hBVkVfVU5JU1REX0gpCisjICBkZWZpbmUgWl9IQVZFX1VOSVNURF9ICisjZW5kaWYKKyNpZm5kZWYgWl9TT0xPCisjICBpZiBkZWZpbmVkKFpfSEFWRV9VTklTVERfSCkgfHwgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKQorIyAgICBpbmNsdWRlIDx1bmlzdGQuaD4gICAgICAgICAvKiBmb3IgU0VFS18qLCBvZmZfdCwgYW5kIF9MRlM2NF9MQVJHRUZJTEUgKi8KKyMgICAgaWZkZWYgVk1TCisjICAgICAgaW5jbHVkZSA8dW5peGlvLmg+ICAgICAgIC8qIGZvciBvZmZfdCAqLworIyAgICBlbmRpZgorIyAgICBpZm5kZWYgel9vZmZfdAorIyAgICAgIGRlZmluZSB6X29mZl90IG9mZl90CisjICAgIGVuZGlmCisjICBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9MRlM2NF9MQVJHRUZJTEUpICYmIF9MRlM2NF9MQVJHRUZJTEUtMAorIyAgZGVmaW5lIFpfTEZTNjQKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKSAmJiBkZWZpbmVkKFpfTEZTNjQpCisjICBkZWZpbmUgWl9MQVJHRTY0CisjZW5kaWYKKworI2lmIGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTLTAgPT0gNjQgJiYgZGVmaW5lZChaX0xGUzY0KQorIyAgZGVmaW5lIFpfV0FOVDY0CisjZW5kaWYKKworI2lmICFkZWZpbmVkKFNFRUtfU0VUKSAmJiAhZGVmaW5lZChaX1NPTE8pCisjICBkZWZpbmUgU0VFS19TRVQgICAgICAgIDAgICAgICAgLyogU2VlayBmcm9tIGJlZ2lubmluZyBvZiBmaWxlLiAgKi8KKyMgIGRlZmluZSBTRUVLX0NVUiAgICAgICAgMSAgICAgICAvKiBTZWVrIGZyb20gY3VycmVudCBwb3NpdGlvbi4gICovCisjICBkZWZpbmUgU0VFS19FTkQgICAgICAgIDIgICAgICAgLyogU2V0IGZpbGUgcG9pbnRlciB0byBFT0YgcGx1cyAib2Zmc2V0IiAqLworI2VuZGlmCisKKyNpZm5kZWYgel9vZmZfdAorIyAgZGVmaW5lIHpfb2ZmX3QgbG9uZworI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfV0lOMzIpICYmIGRlZmluZWQoWl9MQVJHRTY0KQorIyAgZGVmaW5lIHpfb2ZmNjRfdCBvZmY2NF90CisjZWxzZQorIyAgaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChaX1NPTE8pCisjICAgIGRlZmluZSB6X29mZjY0X3QgX19pbnQ2NAorIyAgZWxzZQorIyAgICBkZWZpbmUgel9vZmY2NF90IHpfb2ZmX3QKKyMgIGVuZGlmCisjZW5kaWYKKworLyogTVZTIGxpbmtlciBkb2VzIG5vdCBzdXBwb3J0IGV4dGVybmFsIG5hbWVzIGxhcmdlciB0aGFuIDggYnl0ZXMgKi8KKyNpZiBkZWZpbmVkKF9fTVZTX18pCisgICNwcmFnbWEgbWFwKGRlZmxhdGVJbml0XywiREVJTiIpCisgICNwcmFnbWEgbWFwKGRlZmxhdGVJbml0Ml8sIkRFSU4yIikKKyAgI3ByYWdtYSBtYXAoZGVmbGF0ZUVuZCwiREVFTkQiKQorICAjcHJhZ21hIG1hcChkZWZsYXRlQm91bmQsIkRFQk5EIikKKyAgI3ByYWdtYSBtYXAoaW5mbGF0ZUluaXRfLCJJTklOIikKKyAgI3ByYWdtYSBtYXAoaW5mbGF0ZUluaXQyXywiSU5JTjIiKQorICAjcHJhZ21hIG1hcChpbmZsYXRlRW5kLCJJTkVORCIpCisgICNwcmFnbWEgbWFwKGluZmxhdGVTeW5jLCJJTlNZIikKKyAgI3ByYWdtYSBtYXAoaW5mbGF0ZVNldERpY3Rpb25hcnksIklOU0VESSIpCisgICNwcmFnbWEgbWFwKGNvbXByZXNzQm91bmQsIkNNQk5EIikKKyAgI3ByYWdtYSBtYXAoaW5mbGF0ZV90YWJsZSwiSU5UQUJMIikKKyAgI3ByYWdtYSBtYXAoaW5mbGF0ZV9mYXN0LCJJTkZBIikKKyAgI3ByYWdtYSBtYXAoaW5mbGF0ZV9jb3B5cmlnaHQsIklOQ09QWSIpCisjZW5kaWYKKworI2VuZGlmIC8qIFpDT05GX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy96Y29uZi5oLmluIGIvc3JjL3pjb25mLmguaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWUxZDY4YQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy96Y29uZi5oLmluCkBAIC0wLDAgKzEsNTM0IEBACisvKiB6Y29uZi5oIC0tIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHpsaWIgY29tcHJlc3Npb24gbGlicmFyeQorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTYgSmVhbi1sb3VwIEdhaWxseSwgTWFyayBBZGxlcgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAorICovCisKKy8qIEAoIykgJElkJCAqLworCisjaWZuZGVmIFpDT05GX0gKKyNkZWZpbmUgWkNPTkZfSAorCisvKgorICogSWYgeW91ICpyZWFsbHkqIG5lZWQgYSB1bmlxdWUgcHJlZml4IGZvciBhbGwgdHlwZXMgYW5kIGxpYnJhcnkgZnVuY3Rpb25zLAorICogY29tcGlsZSB3aXRoIC1EWl9QUkVGSVguIFRoZSAic3RhbmRhcmQiIHpsaWIgc2hvdWxkIGJlIGNvbXBpbGVkIHdpdGhvdXQgaXQuCisgKiBFdmVuIGJldHRlciB0aGFuIGNvbXBpbGluZyB3aXRoIC1EWl9QUkVGSVggd291bGQgYmUgdG8gdXNlIGNvbmZpZ3VyZSB0byBzZXQKKyAqIHRoaXMgcGVybWFuZW50bHkgaW4gemNvbmYuaCB1c2luZyAiLi9jb25maWd1cmUgLS16cHJlZml4Ii4KKyAqLworI2lmZGVmIFpfUFJFRklYICAgICAvKiBtYXkgYmUgc2V0IHRvICNpZiAxIGJ5IC4vY29uZmlndXJlICovCisjICBkZWZpbmUgWl9QUkVGSVhfU0VUCisKKy8qIGFsbCBsaW5rZWQgc3ltYm9scyBhbmQgaW5pdCBtYWNyb3MgKi8KKyMgIGRlZmluZSBfZGlzdF9jb2RlICAgICAgICAgICAgel9fZGlzdF9jb2RlCisjICBkZWZpbmUgX2xlbmd0aF9jb2RlICAgICAgICAgIHpfX2xlbmd0aF9jb2RlCisjICBkZWZpbmUgX3RyX2FsaWduICAgICAgICAgICAgIHpfX3RyX2FsaWduCisjICBkZWZpbmUgX3RyX2ZsdXNoX2JpdHMgICAgICAgIHpfX3RyX2ZsdXNoX2JpdHMKKyMgIGRlZmluZSBfdHJfZmx1c2hfYmxvY2sgICAgICAgel9fdHJfZmx1c2hfYmxvY2sKKyMgIGRlZmluZSBfdHJfaW5pdCAgICAgICAgICAgICAgel9fdHJfaW5pdAorIyAgZGVmaW5lIF90cl9zdG9yZWRfYmxvY2sgICAgICB6X190cl9zdG9yZWRfYmxvY2sKKyMgIGRlZmluZSBfdHJfdGFsbHkgICAgICAgICAgICAgel9fdHJfdGFsbHkKKyMgIGRlZmluZSBhZGxlcjMyICAgICAgICAgICAgICAgel9hZGxlcjMyCisjICBkZWZpbmUgYWRsZXIzMl9jb21iaW5lICAgICAgIHpfYWRsZXIzMl9jb21iaW5lCisjICBkZWZpbmUgYWRsZXIzMl9jb21iaW5lNjQgICAgIHpfYWRsZXIzMl9jb21iaW5lNjQKKyMgIGRlZmluZSBhZGxlcjMyX3ogICAgICAgICAgICAgel9hZGxlcjMyX3oKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgZGVmaW5lIGNvbXByZXNzICAgICAgICAgICAgICB6X2NvbXByZXNzCisjICAgIGRlZmluZSBjb21wcmVzczIgICAgICAgICAgICAgel9jb21wcmVzczIKKyMgICAgZGVmaW5lIGNvbXByZXNzQm91bmQgICAgICAgICB6X2NvbXByZXNzQm91bmQKKyMgIGVuZGlmCisjICBkZWZpbmUgY3JjMzIgICAgICAgICAgICAgICAgIHpfY3JjMzIKKyMgIGRlZmluZSBjcmMzMl9jb21iaW5lICAgICAgICAgel9jcmMzMl9jb21iaW5lCisjICBkZWZpbmUgY3JjMzJfY29tYmluZTY0ICAgICAgIHpfY3JjMzJfY29tYmluZTY0CisjICBkZWZpbmUgY3JjMzJfeiAgICAgICAgICAgICAgIHpfY3JjMzJfegorIyAgZGVmaW5lIGRlZmxhdGUgICAgICAgICAgICAgICB6X2RlZmxhdGUKKyMgIGRlZmluZSBkZWZsYXRlQm91bmQgICAgICAgICAgel9kZWZsYXRlQm91bmQKKyMgIGRlZmluZSBkZWZsYXRlQ29weSAgICAgICAgICAgel9kZWZsYXRlQ29weQorIyAgZGVmaW5lIGRlZmxhdGVFbmQgICAgICAgICAgICB6X2RlZmxhdGVFbmQKKyMgIGRlZmluZSBkZWZsYXRlR2V0RGljdGlvbmFyeSAgel9kZWZsYXRlR2V0RGljdGlvbmFyeQorIyAgZGVmaW5lIGRlZmxhdGVJbml0ICAgICAgICAgICB6X2RlZmxhdGVJbml0CisjICBkZWZpbmUgZGVmbGF0ZUluaXQyICAgICAgICAgIHpfZGVmbGF0ZUluaXQyCisjICBkZWZpbmUgZGVmbGF0ZUluaXQyXyAgICAgICAgIHpfZGVmbGF0ZUluaXQyXworIyAgZGVmaW5lIGRlZmxhdGVJbml0XyAgICAgICAgICB6X2RlZmxhdGVJbml0XworIyAgZGVmaW5lIGRlZmxhdGVQYXJhbXMgICAgICAgICB6X2RlZmxhdGVQYXJhbXMKKyMgIGRlZmluZSBkZWZsYXRlUGVuZGluZyAgICAgICAgel9kZWZsYXRlUGVuZGluZworIyAgZGVmaW5lIGRlZmxhdGVQcmltZSAgICAgICAgICB6X2RlZmxhdGVQcmltZQorIyAgZGVmaW5lIGRlZmxhdGVSZXNldCAgICAgICAgICB6X2RlZmxhdGVSZXNldAorIyAgZGVmaW5lIGRlZmxhdGVSZXNldEtlZXAgICAgICB6X2RlZmxhdGVSZXNldEtlZXAKKyMgIGRlZmluZSBkZWZsYXRlU2V0RGljdGlvbmFyeSAgel9kZWZsYXRlU2V0RGljdGlvbmFyeQorIyAgZGVmaW5lIGRlZmxhdGVTZXRIZWFkZXIgICAgICB6X2RlZmxhdGVTZXRIZWFkZXIKKyMgIGRlZmluZSBkZWZsYXRlVHVuZSAgICAgICAgICAgel9kZWZsYXRlVHVuZQorIyAgZGVmaW5lIGRlZmxhdGVfY29weXJpZ2h0ICAgICB6X2RlZmxhdGVfY29weXJpZ2h0CisjICBkZWZpbmUgZ2V0X2NyY190YWJsZSAgICAgICAgIHpfZ2V0X2NyY190YWJsZQorIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgZ3pfZXJyb3IgICAgICAgICAgICAgIHpfZ3pfZXJyb3IKKyMgICAgZGVmaW5lIGd6X2ludG1heCAgICAgICAgICAgICB6X2d6X2ludG1heAorIyAgICBkZWZpbmUgZ3pfc3Ryd2luZXJyb3IgICAgICAgIHpfZ3pfc3Ryd2luZXJyb3IKKyMgICAgZGVmaW5lIGd6YnVmZmVyICAgICAgICAgICAgICB6X2d6YnVmZmVyCisjICAgIGRlZmluZSBnemNsZWFyZXJyICAgICAgICAgICAgel9nemNsZWFyZXJyCisjICAgIGRlZmluZSBnemNsb3NlICAgICAgICAgICAgICAgel9nemNsb3NlCisjICAgIGRlZmluZSBnemNsb3NlX3IgICAgICAgICAgICAgel9nemNsb3NlX3IKKyMgICAgZGVmaW5lIGd6Y2xvc2VfdyAgICAgICAgICAgICB6X2d6Y2xvc2VfdworIyAgICBkZWZpbmUgZ3pkaXJlY3QgICAgICAgICAgICAgIHpfZ3pkaXJlY3QKKyMgICAgZGVmaW5lIGd6ZG9wZW4gICAgICAgICAgICAgICB6X2d6ZG9wZW4KKyMgICAgZGVmaW5lIGd6ZW9mICAgICAgICAgICAgICAgICB6X2d6ZW9mCisjICAgIGRlZmluZSBnemVycm9yICAgICAgICAgICAgICAgel9nemVycm9yCisjICAgIGRlZmluZSBnemZsdXNoICAgICAgICAgICAgICAgel9nemZsdXNoCisjICAgIGRlZmluZSBnemZyZWFkICAgICAgICAgICAgICAgel9nemZyZWFkCisjICAgIGRlZmluZSBnemZ3cml0ZSAgICAgICAgICAgICAgel9nemZ3cml0ZQorIyAgICBkZWZpbmUgZ3pnZXRjICAgICAgICAgICAgICAgIHpfZ3pnZXRjCisjICAgIGRlZmluZSBnemdldGNfICAgICAgICAgICAgICAgel9nemdldGNfCisjICAgIGRlZmluZSBnemdldHMgICAgICAgICAgICAgICAgel9nemdldHMKKyMgICAgZGVmaW5lIGd6b2Zmc2V0ICAgICAgICAgICAgICB6X2d6b2Zmc2V0CisjICAgIGRlZmluZSBnem9mZnNldDY0ICAgICAgICAgICAgel9nem9mZnNldDY0CisjICAgIGRlZmluZSBnem9wZW4gICAgICAgICAgICAgICAgel9nem9wZW4KKyMgICAgZGVmaW5lIGd6b3BlbjY0ICAgICAgICAgICAgICB6X2d6b3BlbjY0CisjICAgIGlmZGVmIF9XSU4zMgorIyAgICAgIGRlZmluZSBnem9wZW5fdyAgICAgICAgICAgICAgel9nem9wZW5fdworIyAgICBlbmRpZgorIyAgICBkZWZpbmUgZ3pwcmludGYgICAgICAgICAgICAgIHpfZ3pwcmludGYKKyMgICAgZGVmaW5lIGd6cHV0YyAgICAgICAgICAgICAgICB6X2d6cHV0YworIyAgICBkZWZpbmUgZ3pwdXRzICAgICAgICAgICAgICAgIHpfZ3pwdXRzCisjICAgIGRlZmluZSBnenJlYWQgICAgICAgICAgICAgICAgel9nenJlYWQKKyMgICAgZGVmaW5lIGd6cmV3aW5kICAgICAgICAgICAgICB6X2d6cmV3aW5kCisjICAgIGRlZmluZSBnenNlZWsgICAgICAgICAgICAgICAgel9nenNlZWsKKyMgICAgZGVmaW5lIGd6c2VlazY0ICAgICAgICAgICAgICB6X2d6c2VlazY0CisjICAgIGRlZmluZSBnenNldHBhcmFtcyAgICAgICAgICAgel9nenNldHBhcmFtcworIyAgICBkZWZpbmUgZ3p0ZWxsICAgICAgICAgICAgICAgIHpfZ3p0ZWxsCisjICAgIGRlZmluZSBnenRlbGw2NCAgICAgICAgICAgICAgel9nenRlbGw2NAorIyAgICBkZWZpbmUgZ3p1bmdldGMgICAgICAgICAgICAgIHpfZ3p1bmdldGMKKyMgICAgZGVmaW5lIGd6dnByaW50ZiAgICAgICAgICAgICB6X2d6dnByaW50ZgorIyAgICBkZWZpbmUgZ3p3cml0ZSAgICAgICAgICAgICAgIHpfZ3p3cml0ZQorIyAgZW5kaWYKKyMgIGRlZmluZSBpbmZsYXRlICAgICAgICAgICAgICAgel9pbmZsYXRlCisjICBkZWZpbmUgaW5mbGF0ZUJhY2sgICAgICAgICAgIHpfaW5mbGF0ZUJhY2sKKyMgIGRlZmluZSBpbmZsYXRlQmFja0VuZCAgICAgICAgel9pbmZsYXRlQmFja0VuZAorIyAgZGVmaW5lIGluZmxhdGVCYWNrSW5pdCAgICAgICB6X2luZmxhdGVCYWNrSW5pdAorIyAgZGVmaW5lIGluZmxhdGVCYWNrSW5pdF8gICAgICB6X2luZmxhdGVCYWNrSW5pdF8KKyMgIGRlZmluZSBpbmZsYXRlQ29kZXNVc2VkICAgICAgel9pbmZsYXRlQ29kZXNVc2VkCisjICBkZWZpbmUgaW5mbGF0ZUNvcHkgICAgICAgICAgIHpfaW5mbGF0ZUNvcHkKKyMgIGRlZmluZSBpbmZsYXRlRW5kICAgICAgICAgICAgel9pbmZsYXRlRW5kCisjICBkZWZpbmUgaW5mbGF0ZUdldERpY3Rpb25hcnkgIHpfaW5mbGF0ZUdldERpY3Rpb25hcnkKKyMgIGRlZmluZSBpbmZsYXRlR2V0SGVhZGVyICAgICAgel9pbmZsYXRlR2V0SGVhZGVyCisjICBkZWZpbmUgaW5mbGF0ZUluaXQgICAgICAgICAgIHpfaW5mbGF0ZUluaXQKKyMgIGRlZmluZSBpbmZsYXRlSW5pdDIgICAgICAgICAgel9pbmZsYXRlSW5pdDIKKyMgIGRlZmluZSBpbmZsYXRlSW5pdDJfICAgICAgICAgel9pbmZsYXRlSW5pdDJfCisjICBkZWZpbmUgaW5mbGF0ZUluaXRfICAgICAgICAgIHpfaW5mbGF0ZUluaXRfCisjICBkZWZpbmUgaW5mbGF0ZU1hcmsgICAgICAgICAgIHpfaW5mbGF0ZU1hcmsKKyMgIGRlZmluZSBpbmZsYXRlUHJpbWUgICAgICAgICAgel9pbmZsYXRlUHJpbWUKKyMgIGRlZmluZSBpbmZsYXRlUmVzZXQgICAgICAgICAgel9pbmZsYXRlUmVzZXQKKyMgIGRlZmluZSBpbmZsYXRlUmVzZXQyICAgICAgICAgel9pbmZsYXRlUmVzZXQyCisjICBkZWZpbmUgaW5mbGF0ZVJlc2V0S2VlcCAgICAgIHpfaW5mbGF0ZVJlc2V0S2VlcAorIyAgZGVmaW5lIGluZmxhdGVTZXREaWN0aW9uYXJ5ICB6X2luZmxhdGVTZXREaWN0aW9uYXJ5CisjICBkZWZpbmUgaW5mbGF0ZVN5bmMgICAgICAgICAgIHpfaW5mbGF0ZVN5bmMKKyMgIGRlZmluZSBpbmZsYXRlU3luY1BvaW50ICAgICAgel9pbmZsYXRlU3luY1BvaW50CisjICBkZWZpbmUgaW5mbGF0ZVVuZGVybWluZSAgICAgIHpfaW5mbGF0ZVVuZGVybWluZQorIyAgZGVmaW5lIGluZmxhdGVWYWxpZGF0ZSAgICAgICB6X2luZmxhdGVWYWxpZGF0ZQorIyAgZGVmaW5lIGluZmxhdGVfY29weXJpZ2h0ICAgICB6X2luZmxhdGVfY29weXJpZ2h0CisjICBkZWZpbmUgaW5mbGF0ZV9mYXN0ICAgICAgICAgIHpfaW5mbGF0ZV9mYXN0CisjICBkZWZpbmUgaW5mbGF0ZV90YWJsZSAgICAgICAgIHpfaW5mbGF0ZV90YWJsZQorIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgdW5jb21wcmVzcyAgICAgICAgICAgIHpfdW5jb21wcmVzcworIyAgICBkZWZpbmUgdW5jb21wcmVzczIgICAgICAgICAgIHpfdW5jb21wcmVzczIKKyMgIGVuZGlmCisjICBkZWZpbmUgekVycm9yICAgICAgICAgICAgICAgIHpfekVycm9yCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGRlZmluZSB6Y2FsbG9jICAgICAgICAgICAgICAgel96Y2FsbG9jCisjICAgIGRlZmluZSB6Y2ZyZWUgICAgICAgICAgICAgICAgel96Y2ZyZWUKKyMgIGVuZGlmCisjICBkZWZpbmUgemxpYkNvbXBpbGVGbGFncyAgICAgIHpfemxpYkNvbXBpbGVGbGFncworIyAgZGVmaW5lIHpsaWJWZXJzaW9uICAgICAgICAgICB6X3psaWJWZXJzaW9uCisKKy8qIGFsbCB6bGliIHR5cGVkZWZzIGluIHpsaWIuaCBhbmQgemNvbmYuaCAqLworIyAgZGVmaW5lIEJ5dGUgICAgICAgICAgICAgICAgICB6X0J5dGUKKyMgIGRlZmluZSBCeXRlZiAgICAgICAgICAgICAgICAgel9CeXRlZgorIyAgZGVmaW5lIGFsbG9jX2Z1bmMgICAgICAgICAgICB6X2FsbG9jX2Z1bmMKKyMgIGRlZmluZSBjaGFyZiAgICAgICAgICAgICAgICAgel9jaGFyZgorIyAgZGVmaW5lIGZyZWVfZnVuYyAgICAgICAgICAgICB6X2ZyZWVfZnVuYworIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgZ3pGaWxlICAgICAgICAgICAgICAgIHpfZ3pGaWxlCisjICBlbmRpZgorIyAgZGVmaW5lIGd6X2hlYWRlciAgICAgICAgICAgICB6X2d6X2hlYWRlcgorIyAgZGVmaW5lIGd6X2hlYWRlcnAgICAgICAgICAgICB6X2d6X2hlYWRlcnAKKyMgIGRlZmluZSBpbl9mdW5jICAgICAgICAgICAgICAgel9pbl9mdW5jCisjICBkZWZpbmUgaW50ZiAgICAgICAgICAgICAgICAgIHpfaW50ZgorIyAgZGVmaW5lIG91dF9mdW5jICAgICAgICAgICAgICB6X291dF9mdW5jCisjICBkZWZpbmUgdUludCAgICAgICAgICAgICAgICAgIHpfdUludAorIyAgZGVmaW5lIHVJbnRmICAgICAgICAgICAgICAgICB6X3VJbnRmCisjICBkZWZpbmUgdUxvbmcgICAgICAgICAgICAgICAgIHpfdUxvbmcKKyMgIGRlZmluZSB1TG9uZ2YgICAgICAgICAgICAgICAgel91TG9uZ2YKKyMgIGRlZmluZSB2b2lkcCAgICAgICAgICAgICAgICAgel92b2lkcAorIyAgZGVmaW5lIHZvaWRwYyAgICAgICAgICAgICAgICB6X3ZvaWRwYworIyAgZGVmaW5lIHZvaWRwZiAgICAgICAgICAgICAgICB6X3ZvaWRwZgorCisvKiBhbGwgemxpYiBzdHJ1Y3RzIGluIHpsaWIuaCBhbmQgemNvbmYuaCAqLworIyAgZGVmaW5lIGd6X2hlYWRlcl9zICAgICAgICAgICB6X2d6X2hlYWRlcl9zCisjICBkZWZpbmUgaW50ZXJuYWxfc3RhdGUgICAgICAgIHpfaW50ZXJuYWxfc3RhdGUKKworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fTVNET1NfXykgJiYgIWRlZmluZWQoTVNET1MpCisjICBkZWZpbmUgTVNET1MKKyNlbmRpZgorI2lmIChkZWZpbmVkKE9TXzIpIHx8IGRlZmluZWQoX19PUzJfXykpICYmICFkZWZpbmVkKE9TMikKKyMgIGRlZmluZSBPUzIKKyNlbmRpZgorI2lmIGRlZmluZWQoX1dJTkRPV1MpICYmICFkZWZpbmVkKFdJTkRPV1MpCisjICBkZWZpbmUgV0lORE9XUworI2VuZGlmCisjaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX1dJTjMyX1dDRSkgfHwgZGVmaW5lZChfX1dJTjMyX18pCisjICBpZm5kZWYgV0lOMzIKKyMgICAgZGVmaW5lIFdJTjMyCisjICBlbmRpZgorI2VuZGlmCisjaWYgKGRlZmluZWQoTVNET1MpIHx8IGRlZmluZWQoT1MyKSB8fCBkZWZpbmVkKFdJTkRPV1MpKSAmJiAhZGVmaW5lZChXSU4zMikKKyMgIGlmICFkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChfX0ZMQVRfXykgJiYgIWRlZmluZWQoX18zODZfXykKKyMgICAgaWZuZGVmIFNZUzE2QklUCisjICAgICAgZGVmaW5lIFNZUzE2QklUCisjICAgIGVuZGlmCisjICBlbmRpZgorI2VuZGlmCisKKy8qCisgKiBDb21waWxlIHdpdGggLURNQVhTRUdfNjRLIGlmIHRoZSBhbGxvYyBmdW5jdGlvbiBjYW5ub3QgYWxsb2NhdGUgbW9yZQorICogdGhhbiA2NGsgYnl0ZXMgYXQgYSB0aW1lIChuZWVkZWQgb24gc3lzdGVtcyB3aXRoIDE2LWJpdCBpbnQpLgorICovCisjaWZkZWYgU1lTMTZCSVQKKyMgIGRlZmluZSBNQVhTRUdfNjRLCisjZW5kaWYKKyNpZmRlZiBNU0RPUworIyAgZGVmaW5lIFVOQUxJR05FRF9PSworI2VuZGlmCisKKyNpZmRlZiBfX1NURENfVkVSU0lPTl9fCisjICBpZm5kZWYgU1REQworIyAgICBkZWZpbmUgU1REQworIyAgZW5kaWYKKyMgIGlmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTAorIyAgICBpZm5kZWYgU1REQzk5CisjICAgICAgZGVmaW5lIFNUREM5OQorIyAgICBlbmRpZgorIyAgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkKFNUREMpICYmIChkZWZpbmVkKF9fU1REQ19fKSB8fCBkZWZpbmVkKF9fY3BsdXNwbHVzKSkKKyMgIGRlZmluZSBTVERDCisjZW5kaWYKKyNpZiAhZGVmaW5lZChTVERDKSAmJiAoZGVmaW5lZChfX0dOVUNfXykgfHwgZGVmaW5lZChfX0JPUkxBTkRDX18pKQorIyAgZGVmaW5lIFNUREMKKyNlbmRpZgorI2lmICFkZWZpbmVkKFNUREMpICYmIChkZWZpbmVkKE1TRE9TKSB8fCBkZWZpbmVkKFdJTkRPV1MpIHx8IGRlZmluZWQoV0lOMzIpKQorIyAgZGVmaW5lIFNUREMKKyNlbmRpZgorI2lmICFkZWZpbmVkKFNUREMpICYmIChkZWZpbmVkKE9TMikgfHwgZGVmaW5lZChfX0hPU19BSVhfXykpCisjICBkZWZpbmUgU1REQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fT1M0MDBfXykgJiYgIWRlZmluZWQoU1REQykgICAgLyogaVNlcmllcyAoZm9ybWVybHkgQVMvNDAwKS4gKi8KKyMgIGRlZmluZSBTVERDCisjZW5kaWYKKworI2lmbmRlZiBTVERDCisjICBpZm5kZWYgY29uc3QgLyogY2Fubm90IHVzZSAhZGVmaW5lZChTVERDKSAmJiAhZGVmaW5lZChjb25zdCkgb24gTWFjICovCisjICAgIGRlZmluZSBjb25zdCAgICAgICAvKiBub3RlOiBuZWVkIGEgbW9yZSBnZW50bGUgc29sdXRpb24gaGVyZSAqLworIyAgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChaTElCX0NPTlNUKSAmJiAhZGVmaW5lZCh6X2NvbnN0KQorIyAgZGVmaW5lIHpfY29uc3QgY29uc3QKKyNlbHNlCisjICBkZWZpbmUgel9jb25zdAorI2VuZGlmCisKKyNpZmRlZiBaX1NPTE8KKyAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyB6X3NpemVfdDsKKyNlbHNlCisjICBkZWZpbmUgel9sb25nbG9uZyBsb25nIGxvbmcKKyMgIGlmIGRlZmluZWQoTk9fU0laRV9UKQorICAgICB0eXBlZGVmIHVuc2lnbmVkIE5PX1NJWkVfVCB6X3NpemVfdDsKKyMgIGVsaWYgZGVmaW5lZChTVERDKQorIyAgICBpbmNsdWRlIDxzdGRkZWYuaD4KKyAgICAgdHlwZWRlZiBzaXplX3Qgel9zaXplX3Q7CisjICBlbHNlCisgICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyB6X3NpemVfdDsKKyMgIGVuZGlmCisjICB1bmRlZiB6X2xvbmdsb25nCisjZW5kaWYKKworLyogTWF4aW11bSB2YWx1ZSBmb3IgbWVtTGV2ZWwgaW4gZGVmbGF0ZUluaXQyICovCisjaWZuZGVmIE1BWF9NRU1fTEVWRUwKKyMgIGlmZGVmIE1BWFNFR182NEsKKyMgICAgZGVmaW5lIE1BWF9NRU1fTEVWRUwgOAorIyAgZWxzZQorIyAgICBkZWZpbmUgTUFYX01FTV9MRVZFTCA5CisjICBlbmRpZgorI2VuZGlmCisKKy8qIE1heGltdW0gdmFsdWUgZm9yIHdpbmRvd0JpdHMgaW4gZGVmbGF0ZUluaXQyIGFuZCBpbmZsYXRlSW5pdDIuCisgKiBXQVJOSU5HOiByZWR1Y2luZyBNQVhfV0JJVFMgbWFrZXMgbWluaWd6aXAgdW5hYmxlIHRvIGV4dHJhY3QgLmd6IGZpbGVzCisgKiBjcmVhdGVkIGJ5IGd6aXAuIChGaWxlcyBjcmVhdGVkIGJ5IG1pbmlnemlwIGNhbiBzdGlsbCBiZSBleHRyYWN0ZWQgYnkKKyAqIGd6aXAuKQorICovCisjaWZuZGVmIE1BWF9XQklUUworIyAgZGVmaW5lIE1BWF9XQklUUyAgIDE1IC8qIDMySyBMWjc3IHdpbmRvdyAqLworI2VuZGlmCisKKy8qIFRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzIGZvciBkZWZsYXRlIGFyZSAoaW4gYnl0ZXMpOgorICAgICAgICAgICAgKDEgPDwgKHdpbmRvd0JpdHMrMikpICsgICgxIDw8IChtZW1MZXZlbCs5KSkKKyB0aGF0IGlzOiAxMjhLIGZvciB3aW5kb3dCaXRzPTE1ICArICAxMjhLIGZvciBtZW1MZXZlbCA9IDggIChkZWZhdWx0IHZhbHVlcykKKyBwbHVzIGEgZmV3IGtpbG9ieXRlcyBmb3Igc21hbGwgb2JqZWN0cy4gRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIHJlZHVjZQorIHRoZSBkZWZhdWx0IG1lbW9yeSByZXF1aXJlbWVudHMgZnJvbSAyNTZLIHRvIDEyOEssIGNvbXBpbGUgd2l0aAorICAgICBtYWtlIENGTEFHUz0iLU8gLURNQVhfV0JJVFM9MTQgLURNQVhfTUVNX0xFVkVMPTciCisgT2YgY291cnNlIHRoaXMgd2lsbCBnZW5lcmFsbHkgZGVncmFkZSBjb21wcmVzc2lvbiAodGhlcmUncyBubyBmcmVlIGx1bmNoKS4KKworICAgVGhlIG1lbW9yeSByZXF1aXJlbWVudHMgZm9yIGluZmxhdGUgYXJlIChpbiBieXRlcykgMSA8PCB3aW5kb3dCaXRzCisgdGhhdCBpcywgMzJLIGZvciB3aW5kb3dCaXRzPTE1IChkZWZhdWx0IHZhbHVlKSBwbHVzIGFib3V0IDcga2lsb2J5dGVzCisgZm9yIHNtYWxsIG9iamVjdHMuCisqLworCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBUeXBlIGRlY2xhcmF0aW9ucyAqLworCisjaWZuZGVmIE9GIC8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KKyMgIGlmZGVmIFNUREMKKyMgICAgZGVmaW5lIE9GKGFyZ3MpICBhcmdzCisjICBlbHNlCisjICAgIGRlZmluZSBPRihhcmdzKSAgKCkKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBaX0FSRyAvKiBmdW5jdGlvbiBwcm90b3R5cGVzIGZvciBzdGRhcmcgKi8KKyMgIGlmIGRlZmluZWQoU1REQykgfHwgZGVmaW5lZChaX0hBVkVfU1REQVJHX0gpCisjICAgIGRlZmluZSBaX0FSRyhhcmdzKSAgYXJncworIyAgZWxzZQorIyAgICBkZWZpbmUgWl9BUkcoYXJncykgICgpCisjICBlbmRpZgorI2VuZGlmCisKKy8qIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgZm9yIEZBUiBhcmUgbmVlZGVkIG9ubHkgZm9yIE1TRE9TIG1peGVkCisgKiBtb2RlbCBwcm9ncmFtbWluZyAoc21hbGwgb3IgbWVkaXVtIG1vZGVsIHdpdGggc29tZSBmYXIgYWxsb2NhdGlvbnMpLgorICogVGhpcyB3YXMgdGVzdGVkIG9ubHkgd2l0aCBNU0M7IGZvciBvdGhlciBNU0RPUyBjb21waWxlcnMgeW91IG1heSBoYXZlCisgKiB0byBkZWZpbmUgTk9fTUVNQ1BZIGluIHp1dGlsLmguICBJZiB5b3UgZG9uJ3QgbmVlZCB0aGUgbWl4ZWQgbW9kZWwsCisgKiBqdXN0IGRlZmluZSBGQVIgdG8gYmUgZW1wdHkuCisgKi8KKyNpZmRlZiBTWVMxNkJJVAorIyAgaWYgZGVmaW5lZChNX0k4NlNNKSB8fCBkZWZpbmVkKE1fSTg2TU0pCisgICAgIC8qIE1TQyBzbWFsbCBvciBtZWRpdW0gbW9kZWwgKi8KKyMgICAgZGVmaW5lIFNNQUxMX01FRElVTQorIyAgICBpZmRlZiBfTVNDX1ZFUgorIyAgICAgIGRlZmluZSBGQVIgX2ZhcgorIyAgICBlbHNlCisjICAgICAgZGVmaW5lIEZBUiBmYXIKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjICBpZiAoZGVmaW5lZChfX1NNQUxMX18pIHx8IGRlZmluZWQoX19NRURJVU1fXykpCisgICAgIC8qIFR1cmJvIEMgc21hbGwgb3IgbWVkaXVtIG1vZGVsICovCisjICAgIGRlZmluZSBTTUFMTF9NRURJVU0KKyMgICAgaWZkZWYgX19CT1JMQU5EQ19fCisjICAgICAgZGVmaW5lIEZBUiBfZmFyCisjICAgIGVsc2UKKyMgICAgICBkZWZpbmUgRkFSIGZhcgorIyAgICBlbmRpZgorIyAgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChXSU5ET1dTKSB8fCBkZWZpbmVkKFdJTjMyKQorICAgLyogSWYgYnVpbGRpbmcgb3IgdXNpbmcgemxpYiBhcyBhIERMTCwgZGVmaW5lIFpMSUJfRExMLgorICAgICogVGhpcyBpcyBub3QgbWFuZGF0b3J5LCBidXQgaXQgb2ZmZXJzIGEgbGl0dGxlIHBlcmZvcm1hbmNlIGluY3JlYXNlLgorICAgICovCisjICBpZmRlZiBaTElCX0RMTAorIyAgICBpZiBkZWZpbmVkKFdJTjMyKSAmJiAoIWRlZmluZWQoX19CT1JMQU5EQ19fKSB8fCAoX19CT1JMQU5EQ19fID49IDB4NTAwKSkKKyMgICAgICBpZmRlZiBaTElCX0lOVEVSTkFMCisjICAgICAgICBkZWZpbmUgWkVYVEVSTiBleHRlcm4gX19kZWNsc3BlYyhkbGxleHBvcnQpCisjICAgICAgZWxzZQorIyAgICAgICAgZGVmaW5lIFpFWFRFUk4gZXh0ZXJuIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQorIyAgICAgIGVuZGlmCisjICAgIGVuZGlmCisjICBlbmRpZiAgLyogWkxJQl9ETEwgKi8KKyAgIC8qIElmIGJ1aWxkaW5nIG9yIHVzaW5nIHpsaWIgd2l0aCB0aGUgV0lOQVBJL1dJTkFQSVYgY2FsbGluZyBjb252ZW50aW9uLAorICAgICogZGVmaW5lIFpMSUJfV0lOQVBJLgorICAgICogQ2F1dGlvbjogdGhlIHN0YW5kYXJkIFpMSUIxLkRMTCBpcyBOT1QgY29tcGlsZWQgdXNpbmcgWkxJQl9XSU5BUEkuCisgICAgKi8KKyMgIGlmZGVmIFpMSUJfV0lOQVBJCisjICAgIGlmZGVmIEZBUgorIyAgICAgIHVuZGVmIEZBUgorIyAgICBlbmRpZgorIyAgICBpbmNsdWRlIDx3aW5kb3dzLmg+CisgICAgIC8qIE5vIG5lZWQgZm9yIF9leHBvcnQsIHVzZSBaTElCLkRFRiBpbnN0ZWFkLiAqLworICAgICAvKiBGb3IgY29tcGxldGUgV2luZG93cyBjb21wYXRpYmlsaXR5LCB1c2UgV0lOQVBJLCBub3QgX19zdGRjYWxsLiAqLworIyAgICBkZWZpbmUgWkVYUE9SVCBXSU5BUEkKKyMgICAgaWZkZWYgV0lOMzIKKyMgICAgICBkZWZpbmUgWkVYUE9SVFZBIFdJTkFQSVYKKyMgICAgZWxzZQorIyAgICAgIGRlZmluZSBaRVhQT1JUVkEgRkFSIENERUNMCisjICAgIGVuZGlmCisjICBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfX0JFT1NfXykKKyMgIGlmZGVmIFpMSUJfRExMCisjICAgIGlmZGVmIFpMSUJfSU5URVJOQUwKKyMgICAgICBkZWZpbmUgWkVYUE9SVCAgIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorIyAgICAgIGRlZmluZSBaRVhQT1JUVkEgX19kZWNsc3BlYyhkbGxleHBvcnQpCisjICAgIGVsc2UKKyMgICAgICBkZWZpbmUgWkVYUE9SVCAgIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQorIyAgICAgIGRlZmluZSBaRVhQT1JUVkEgX19kZWNsc3BlYyhkbGxpbXBvcnQpCisjICAgIGVuZGlmCisjICBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgWkVYVEVSTgorIyAgZGVmaW5lIFpFWFRFUk4gZXh0ZXJuCisjZW5kaWYKKyNpZm5kZWYgWkVYUE9SVAorIyAgZGVmaW5lIFpFWFBPUlQKKyNlbmRpZgorI2lmbmRlZiBaRVhQT1JUVkEKKyMgIGRlZmluZSBaRVhQT1JUVkEKKyNlbmRpZgorCisjaWZuZGVmIEZBUgorIyAgZGVmaW5lIEZBUgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfX01BQ1RZUEVTX18pCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgIEJ5dGU7ICAvKiA4IGJpdHMgKi8KKyNlbmRpZgordHlwZWRlZiB1bnNpZ25lZCBpbnQgICB1SW50OyAgLyogMTYgYml0cyBvciBtb3JlICovCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgIHVMb25nOyAvKiAzMiBiaXRzIG9yIG1vcmUgKi8KKworI2lmZGVmIFNNQUxMX01FRElVTQorICAgLyogQm9ybGFuZCBDL0MrKyBhbmQgc29tZSBvbGQgTVNDIHZlcnNpb25zIGlnbm9yZSBGQVIgaW5zaWRlIHR5cGVkZWYgKi8KKyMgIGRlZmluZSBCeXRlZiBCeXRlIEZBUgorI2Vsc2UKKyAgIHR5cGVkZWYgQnl0ZSAgRkFSIEJ5dGVmOworI2VuZGlmCit0eXBlZGVmIGNoYXIgIEZBUiBjaGFyZjsKK3R5cGVkZWYgaW50ICAgRkFSIGludGY7Cit0eXBlZGVmIHVJbnQgIEZBUiB1SW50ZjsKK3R5cGVkZWYgdUxvbmcgRkFSIHVMb25nZjsKKworI2lmZGVmIFNUREMKKyAgIHR5cGVkZWYgdm9pZCBjb25zdCAqdm9pZHBjOworICAgdHlwZWRlZiB2b2lkIEZBUiAgICp2b2lkcGY7CisgICB0eXBlZGVmIHZvaWQgICAgICAgKnZvaWRwOworI2Vsc2UKKyAgIHR5cGVkZWYgQnl0ZSBjb25zdCAqdm9pZHBjOworICAgdHlwZWRlZiBCeXRlIEZBUiAgICp2b2lkcGY7CisgICB0eXBlZGVmIEJ5dGUgICAgICAgKnZvaWRwOworI2VuZGlmCisKKyNpZiAhZGVmaW5lZChaX1U0KSAmJiAhZGVmaW5lZChaX1NPTE8pICYmIGRlZmluZWQoU1REQykKKyMgIGluY2x1ZGUgPGxpbWl0cy5oPgorIyAgaWYgKFVJTlRfTUFYID09IDB4ZmZmZmZmZmZVTCkKKyMgICAgZGVmaW5lIFpfVTQgdW5zaWduZWQKKyMgIGVsaWYgKFVMT05HX01BWCA9PSAweGZmZmZmZmZmVUwpCisjICAgIGRlZmluZSBaX1U0IHVuc2lnbmVkIGxvbmcKKyMgIGVsaWYgKFVTSFJUX01BWCA9PSAweGZmZmZmZmZmVUwpCisjICAgIGRlZmluZSBaX1U0IHVuc2lnbmVkIHNob3J0CisjICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBaX1U0CisgICB0eXBlZGVmIFpfVTQgel9jcmNfdDsKKyNlbHNlCisgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgel9jcmNfdDsKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9VTklTVERfSCAgICAvKiBtYXkgYmUgc2V0IHRvICNpZiAxIGJ5IC4vY29uZmlndXJlICovCisjICBkZWZpbmUgWl9IQVZFX1VOSVNURF9ICisjZW5kaWYKKworI2lmZGVmIEhBVkVfU1REQVJHX0ggICAgLyogbWF5IGJlIHNldCB0byAjaWYgMSBieSAuL2NvbmZpZ3VyZSAqLworIyAgZGVmaW5lIFpfSEFWRV9TVERBUkdfSAorI2VuZGlmCisKKyNpZmRlZiBTVERDCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGluY2x1ZGUgPHN5cy90eXBlcy5oPiAgICAgIC8qIGZvciBvZmZfdCAqLworIyAgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChTVERDKSB8fCBkZWZpbmVkKFpfSEFWRV9TVERBUkdfSCkKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgaW5jbHVkZSA8c3RkYXJnLmg+ICAgICAgICAgLyogZm9yIHZhX2xpc3QgKi8KKyMgIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIF9XSU4zMgorIyAgaWZuZGVmIFpfU09MTworIyAgICBpbmNsdWRlIDxzdGRkZWYuaD4gICAgICAgICAvKiBmb3Igd2NoYXJfdCAqLworIyAgZW5kaWYKKyNlbmRpZgorCisvKiBhIGxpdHRsZSB0cmljayB0byBhY2NvbW1vZGF0ZSBib3RoICIjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UiIGFuZAorICogIiNkZWZpbmUgX0xBUkdFRklMRTY0X1NPVVJDRSAxIiBhcyByZXF1ZXN0aW5nIDY0LWJpdCBvcGVyYXRpb25zLCAoZXZlbgorICogdGhvdWdoIHRoZSBmb3JtZXIgZG9lcyBub3QgY29uZm9ybSB0byB0aGUgTEZTIGRvY3VtZW50KSwgYnV0IGNvbnNpZGVyaW5nCisgKiBib3RoICIjdW5kZWYgX0xBUkdFRklMRTY0X1NPVVJDRSIgYW5kICIjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UgMCIgYXMKKyAqIGVxdWl2YWxlbnRseSByZXF1ZXN0aW5nIG5vIDY0LWJpdCBvcGVyYXRpb25zCisgKi8KKyNpZiBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpICYmIC1fTEFSR0VGSUxFNjRfU09VUkNFIC0gLTEgPT0gMQorIyAgdW5kZWYgX0xBUkdFRklMRTY0X1NPVVJDRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fV0FUQ09NQ19fKSAmJiAhZGVmaW5lZChaX0hBVkVfVU5JU1REX0gpCisjICBkZWZpbmUgWl9IQVZFX1VOSVNURF9ICisjZW5kaWYKKyNpZm5kZWYgWl9TT0xPCisjICBpZiBkZWZpbmVkKFpfSEFWRV9VTklTVERfSCkgfHwgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKQorIyAgICBpbmNsdWRlIDx1bmlzdGQuaD4gICAgICAgICAvKiBmb3IgU0VFS18qLCBvZmZfdCwgYW5kIF9MRlM2NF9MQVJHRUZJTEUgKi8KKyMgICAgaWZkZWYgVk1TCisjICAgICAgaW5jbHVkZSA8dW5peGlvLmg+ICAgICAgIC8qIGZvciBvZmZfdCAqLworIyAgICBlbmRpZgorIyAgICBpZm5kZWYgel9vZmZfdAorIyAgICAgIGRlZmluZSB6X29mZl90IG9mZl90CisjICAgIGVuZGlmCisjICBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9MRlM2NF9MQVJHRUZJTEUpICYmIF9MRlM2NF9MQVJHRUZJTEUtMAorIyAgZGVmaW5lIFpfTEZTNjQKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKSAmJiBkZWZpbmVkKFpfTEZTNjQpCisjICBkZWZpbmUgWl9MQVJHRTY0CisjZW5kaWYKKworI2lmIGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTLTAgPT0gNjQgJiYgZGVmaW5lZChaX0xGUzY0KQorIyAgZGVmaW5lIFpfV0FOVDY0CisjZW5kaWYKKworI2lmICFkZWZpbmVkKFNFRUtfU0VUKSAmJiAhZGVmaW5lZChaX1NPTE8pCisjICBkZWZpbmUgU0VFS19TRVQgICAgICAgIDAgICAgICAgLyogU2VlayBmcm9tIGJlZ2lubmluZyBvZiBmaWxlLiAgKi8KKyMgIGRlZmluZSBTRUVLX0NVUiAgICAgICAgMSAgICAgICAvKiBTZWVrIGZyb20gY3VycmVudCBwb3NpdGlvbi4gICovCisjICBkZWZpbmUgU0VFS19FTkQgICAgICAgIDIgICAgICAgLyogU2V0IGZpbGUgcG9pbnRlciB0byBFT0YgcGx1cyAib2Zmc2V0IiAqLworI2VuZGlmCisKKyNpZm5kZWYgel9vZmZfdAorIyAgZGVmaW5lIHpfb2ZmX3QgbG9uZworI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfV0lOMzIpICYmIGRlZmluZWQoWl9MQVJHRTY0KQorIyAgZGVmaW5lIHpfb2ZmNjRfdCBvZmY2NF90CisjZWxzZQorIyAgaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChaX1NPTE8pCisjICAgIGRlZmluZSB6X29mZjY0X3QgX19pbnQ2NAorIyAgZWxzZQorIyAgICBkZWZpbmUgel9vZmY2NF90IHpfb2ZmX3QKKyMgIGVuZGlmCisjZW5kaWYKKworLyogTVZTIGxpbmtlciBkb2VzIG5vdCBzdXBwb3J0IGV4dGVybmFsIG5hbWVzIGxhcmdlciB0aGFuIDggYnl0ZXMgKi8KKyNpZiBkZWZpbmVkKF9fTVZTX18pCisgICNwcmFnbWEgbWFwKGRlZmxhdGVJbml0XywiREVJTiIpCisgICNwcmFnbWEgbWFwKGRlZmxhdGVJbml0Ml8sIkRFSU4yIikKKyAgI3ByYWdtYSBtYXAoZGVmbGF0ZUVuZCwiREVFTkQiKQorICAjcHJhZ21hIG1hcChkZWZsYXRlQm91bmQsIkRFQk5EIikKKyAgI3ByYWdtYSBtYXAoaW5mbGF0ZUluaXRfLCJJTklOIikKKyAgI3ByYWdtYSBtYXAoaW5mbGF0ZUluaXQyXywiSU5JTjIiKQorICAjcHJhZ21hIG1hcChpbmZsYXRlRW5kLCJJTkVORCIpCisgICNwcmFnbWEgbWFwKGluZmxhdGVTeW5jLCJJTlNZIikKKyAgI3ByYWdtYSBtYXAoaW5mbGF0ZVNldERpY3Rpb25hcnksIklOU0VESSIpCisgICNwcmFnbWEgbWFwKGNvbXByZXNzQm91bmQsIkNNQk5EIikKKyAgI3ByYWdtYSBtYXAoaW5mbGF0ZV90YWJsZSwiSU5UQUJMIikKKyAgI3ByYWdtYSBtYXAoaW5mbGF0ZV9mYXN0LCJJTkZBIikKKyAgI3ByYWdtYSBtYXAoaW5mbGF0ZV9jb3B5cmlnaHQsIklOQ09QWSIpCisjZW5kaWYKKworI2VuZGlmIC8qIFpDT05GX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy96bGliLjMgYi9zcmMvemxpYi4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjYWViZDkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvemxpYi4zCkBAIC0wLDAgKzEsMTQ5IEBACisuVEggWkxJQiAzICIyNyBNYXIgMjAyMiIKKy5TSCBOQU1FCit6bGliIFwtIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gbGlicmFyeQorLlNIIFNZTk9QU0lTCitbc2VlCisuSSB6bGliLmgKK2ZvciBmdWxsIGRlc2NyaXB0aW9uXQorLlNIIERFU0NSSVBUSU9OCitUaGUKKy5JIHpsaWIKK2xpYnJhcnkgaXMgYSBnZW5lcmFsIHB1cnBvc2UgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorVGhlIGNvZGUgaXMgdGhyZWFkIHNhZmUsIGFzc3VtaW5nIHRoYXQgdGhlIHN0YW5kYXJkIGxpYnJhcnkgZnVuY3Rpb25zCit1c2VkIGFyZSB0aHJlYWQgc2FmZSwgc3VjaCBhcyBtZW1vcnkgYWxsb2NhdGlvbiByb3V0aW5lcy4KK0l0IHByb3ZpZGVzIGluLW1lbW9yeSBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiBmdW5jdGlvbnMsCitpbmNsdWRpbmcgaW50ZWdyaXR5IGNoZWNrcyBvZiB0aGUgdW5jb21wcmVzc2VkIGRhdGEuCitUaGlzIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgc3VwcG9ydHMgb25seSBvbmUgY29tcHJlc3Npb24gbWV0aG9kIChkZWZsYXRpb24pCitidXQgb3RoZXIgYWxnb3JpdGhtcyBtYXkgYmUgYWRkZWQgbGF0ZXIKK3dpdGggdGhlIHNhbWUgc3RyZWFtIGludGVyZmFjZS4KKy5MUAorQ29tcHJlc3Npb24gY2FuIGJlIGRvbmUgaW4gYSBzaW5nbGUgc3RlcCBpZiB0aGUgYnVmZmVycyBhcmUgbGFyZ2UgZW5vdWdoCitvciBjYW4gYmUgZG9uZSBieSByZXBlYXRlZCBjYWxscyBvZiB0aGUgY29tcHJlc3Npb24gZnVuY3Rpb24uCitJbiB0aGUgbGF0dGVyIGNhc2UsCit0aGUgYXBwbGljYXRpb24gbXVzdCBwcm92aWRlIG1vcmUgaW5wdXQgYW5kL29yIGNvbnN1bWUgdGhlIG91dHB1dAorKHByb3ZpZGluZyBtb3JlIG91dHB1dCBzcGFjZSkgYmVmb3JlIGVhY2ggY2FsbC4KKy5MUAorVGhlIGxpYnJhcnkgYWxzbyBzdXBwb3J0cyByZWFkaW5nIGFuZCB3cml0aW5nIGZpbGVzIGluCisuSVIgZ3ppcCAoMSkKKyguZ3opIGZvcm1hdAord2l0aCBhbiBpbnRlcmZhY2Ugc2ltaWxhciB0byB0aGF0IG9mIHN0ZGlvLgorLkxQCitUaGUgbGlicmFyeSBkb2VzIG5vdCBpbnN0YWxsIGFueSBzaWduYWwgaGFuZGxlci4KK1RoZSBkZWNvZGVyIGNoZWNrcyB0aGUgY29uc2lzdGVuY3kgb2YgdGhlIGNvbXByZXNzZWQgZGF0YSwKK3NvIHRoZSBsaWJyYXJ5IHNob3VsZCBuZXZlciBjcmFzaCBldmVuIGluIHRoZSBjYXNlIG9mIGNvcnJ1cHRlZCBpbnB1dC4KKy5MUAorQWxsIGZ1bmN0aW9ucyBvZiB0aGUgY29tcHJlc3Npb24gbGlicmFyeSBhcmUgZG9jdW1lbnRlZCBpbiB0aGUgZmlsZQorLklSIHpsaWIuaCAuCitUaGUgZGlzdHJpYnV0aW9uIHNvdXJjZSBpbmNsdWRlcyBleGFtcGxlcyBvZiB1c2Ugb2YgdGhlIGxpYnJhcnkKK2luIHRoZSBmaWxlcworLkkgdGVzdC9leGFtcGxlLmMKK2FuZAorLklSIHRlc3QvbWluaWd6aXAuYywKK2FzIHdlbGwgYXMgb3RoZXIgZXhhbXBsZXMgaW4gdGhlCisuSVIgZXhhbXBsZXMvCitkaXJlY3RvcnkuCisuTFAKK0NoYW5nZXMgdG8gdGhpcyB2ZXJzaW9uIGFyZSBkb2N1bWVudGVkIGluIHRoZSBmaWxlCisuSSBDaGFuZ2VMb2cKK3RoYXQgYWNjb21wYW5pZXMgdGhlIHNvdXJjZS4KKy5MUAorLkkgemxpYgoraXMgYnVpbHQgaW4gdG8gbWFueSBsYW5ndWFnZXMgYW5kIG9wZXJhdGluZyBzeXN0ZW1zLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCitKYXZhLCBQeXRob24sIC5ORVQsIFBIUCwgUGVybCwgUnVieSwgU3dpZnQsIGFuZCBHby4KKy5MUAorQW4gZXhwZXJpbWVudGFsIHBhY2thZ2UgdG8gcmVhZCBhbmQgd3JpdGUgZmlsZXMgaW4gdGhlIC56aXAgZm9ybWF0LAord3JpdHRlbiBvbiB0b3Agb2YKKy5JIHpsaWIKK2J5IEdpbGxlcyBWb2xsYW50IChpbmZvQHdpbmltYWdlLmNvbSksCitpcyBhdmFpbGFibGUgYXQ6CisuSVAKK2h0dHA6Ly93d3cud2luaW1hZ2UuY29tL3pMaWJEbGwvbWluaXppcC5odG1sCithbmQgYWxzbyBpbiB0aGUKKy5JIGNvbnRyaWIvbWluaXppcAorZGlyZWN0b3J5IG9mIHRoZSBtYWluCisuSSB6bGliCitzb3VyY2UgZGlzdHJpYnV0aW9uLgorLlNIICJTRUUgQUxTTyIKK1RoZQorLkkgemxpYgord2ViIHNpdGUgY2FuIGJlIGZvdW5kIGF0OgorLklQCitodHRwOi8vemxpYi5uZXQvCisuTFAKK1RoZSBkYXRhIGZvcm1hdCB1c2VkIGJ5IHRoZQorLkkgemxpYgorbGlicmFyeSBpcyBkZXNjcmliZWQgYnkgUkZDCisoUmVxdWVzdCBmb3IgQ29tbWVudHMpIDE5NTAgdG8gMTk1MiBpbiB0aGUgZmlsZXM6CisuSVAKK2h0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzE5NTAgKGZvciB0aGUgemxpYiBoZWFkZXIgYW5kIHRyYWlsZXIgZm9ybWF0KQorLmJyCitodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMxOTUxIChmb3IgdGhlIGRlZmxhdGUgY29tcHJlc3NlZCBkYXRhIGZvcm1hdCkKKy5icgoraHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMTk1MiAoZm9yIHRoZSBnemlwIGhlYWRlciBhbmQgdHJhaWxlciBmb3JtYXQpCisuTFAKK01hcmsgTmVsc29uIHdyb3RlIGFuIGFydGljbGUgYWJvdXQKKy5JIHpsaWIKK2ZvciB0aGUgSmFuLiAxOTk3IGlzc3VlIG9mICBEci4gRG9iYidzIEpvdXJuYWw7CithIGNvcHkgb2YgdGhlIGFydGljbGUgaXMgYXZhaWxhYmxlIGF0OgorLklQCitodHRwOi8vbWFya25lbHNvbi51cy8xOTk3LzAxLzAxL3psaWItZW5naW5lLworLlNIICJSRVBPUlRJTkcgUFJPQkxFTVMiCitCZWZvcmUgcmVwb3J0aW5nIGEgcHJvYmxlbSwKK3BsZWFzZSBjaGVjayB0aGUKKy5JIHpsaWIKK3dlYiBzaXRlIHRvIHZlcmlmeSB0aGF0IHlvdSBoYXZlIHRoZSBsYXRlc3QgdmVyc2lvbiBvZgorLklSIHpsaWIgOworb3RoZXJ3aXNlLAorb2J0YWluIHRoZSBsYXRlc3QgdmVyc2lvbiBhbmQgc2VlIGlmIHRoZSBwcm9ibGVtIHN0aWxsIGV4aXN0cy4KK1BsZWFzZSByZWFkIHRoZQorLkkgemxpYgorRkFRIGF0OgorLklQCitodHRwOi8vemxpYi5uZXQvemxpYl9mYXEuaHRtbAorLkxQCitiZWZvcmUgYXNraW5nIGZvciBoZWxwLgorU2VuZCBxdWVzdGlvbnMgYW5kL29yIGNvbW1lbnRzIHRvIHpsaWJAZ3ppcC5vcmcsCitvciAoZm9yIHRoZSBXaW5kb3dzIERMTCB2ZXJzaW9uKSB0byBHaWxsZXMgVm9sbGFudCAoaW5mb0B3aW5pbWFnZS5jb20pLgorLlNIIEFVVEhPUlMgQU5EIExJQ0VOU0UKK1ZlcnNpb24gMS4yLjEyCisuTFAKK0NvcHlyaWdodCAoQykgMTk5NS0yMDIyIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIKKy5MUAorVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWQKK3dhcnJhbnR5LiAgSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMKK2FyaXNpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuCisuTFAKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLAoraW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdAorZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorLkxQCisubnIgc3RlcCAxIDEKKy5JUCBcbltzdGVwXS4gMworVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCBub3QKK2NsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlCitpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24gd291bGQgYmUKK2FwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuCisuSVAgXG4rW3N0ZXBdLgorQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmUKK21pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4KKy5JUCBcbitbc3RlcF0uCitUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLgorLkxQCitKZWFuLWxvdXAgR2FpbGx5ICAgICAgICBNYXJrIEFkbGVyCisuYnIKK2psb3VwQGd6aXAub3JnICAgICAgICAgIG1hZGxlckBhbHVtbmkuY2FsdGVjaC5lZHUKKy5MUAorVGhlIGRlZmxhdGUgZm9ybWF0IHVzZWQgYnkKKy5JIHpsaWIKK3dhcyBkZWZpbmVkIGJ5IFBoaWwgS2F0ei4KK1RoZSBkZWZsYXRlIGFuZAorLkkgemxpYgorc3BlY2lmaWNhdGlvbnMgd2VyZSB3cml0dGVuIGJ5IEwuIFBldGVyIERldXRzY2guCitUaGFua3MgdG8gYWxsIHRoZSBwZW9wbGUgd2hvIHJlcG9ydGVkIHByb2JsZW1zIGFuZCBzdWdnZXN0ZWQgdmFyaW91cworaW1wcm92ZW1lbnRzIGluCisuSVIgemxpYiA7Cit3aG8gYXJlIHRvbyBudW1lcm91cyB0byBjaXRlIGhlcmUuCisuTFAKK1VOSVggbWFudWFsIHBhZ2UgYnkgUi4gUC4gQy4gUm9kZ2VycywKK1UuUy4gTmF0aW9uYWwgTGlicmFyeSBvZiBNZWRpY2luZSAocm9kZ2Vyc0BubG0ubmloLmdvdikuCisuXCIgZW5kIG9mIG1hbiBwYWdlCmRpZmYgLS1naXQgYS9zcmMvemxpYi4zLnBkZiBiL3NyYy96bGliLjMucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ZDY3N2EKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvemxpYi4zLnBkZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zcmMvemxpYi5oIGIvc3JjL3psaWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTk4ZTM4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3psaWIuaApAQCAtMCwwICsxLDE5MzUgQEAKKy8qIHpsaWIuaCAtLSBpbnRlcmZhY2Ugb2YgdGhlICd6bGliJyBnZW5lcmFsIHB1cnBvc2UgY29tcHJlc3Npb24gbGlicmFyeQorICB2ZXJzaW9uIDEuMi4xMiwgTWFyY2ggMTF0aCwgMjAyMgorCisgIENvcHlyaWdodCAoQykgMTk5NS0yMDIyIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIKKworICBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZAorICB3YXJyYW50eS4gIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzCisgIGFyaXNpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuCisKKyAgUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UsCisgIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXQKKyAgZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCisgIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90CisgICAgIGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlCisgICAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZQorICAgICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLgorICAyLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZQorICAgICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuCisgIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uCisKKyAgSmVhbi1sb3VwIEdhaWxseSAgICAgICAgTWFyayBBZGxlcgorICBqbG91cEBnemlwLm9yZyAgICAgICAgICBtYWRsZXJAYWx1bW5pLmNhbHRlY2guZWR1CisKKworICBUaGUgZGF0YSBmb3JtYXQgdXNlZCBieSB0aGUgemxpYiBsaWJyYXJ5IGlzIGRlc2NyaWJlZCBieSBSRkNzIChSZXF1ZXN0IGZvcgorICBDb21tZW50cykgMTk1MCB0byAxOTUyIGluIHRoZSBmaWxlcyBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMxOTUwCisgICh6bGliIGZvcm1hdCksIHJmYzE5NTEgKGRlZmxhdGUgZm9ybWF0KSBhbmQgcmZjMTk1MiAoZ3ppcCBmb3JtYXQpLgorKi8KKworI2lmbmRlZiBaTElCX0gKKyNkZWZpbmUgWkxJQl9ICisKKyNpbmNsdWRlICJ6Y29uZi5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNkZWZpbmUgWkxJQl9WRVJTSU9OICIxLjIuMTIiCisjZGVmaW5lIFpMSUJfVkVSTlVNIDB4MTJjMAorI2RlZmluZSBaTElCX1ZFUl9NQUpPUiAxCisjZGVmaW5lIFpMSUJfVkVSX01JTk9SIDIKKyNkZWZpbmUgWkxJQl9WRVJfUkVWSVNJT04gMTIKKyNkZWZpbmUgWkxJQl9WRVJfU1VCUkVWSVNJT04gMAorCisvKgorICAgIFRoZSAnemxpYicgY29tcHJlc3Npb24gbGlicmFyeSBwcm92aWRlcyBpbi1tZW1vcnkgY29tcHJlc3Npb24gYW5kCisgIGRlY29tcHJlc3Npb24gZnVuY3Rpb25zLCBpbmNsdWRpbmcgaW50ZWdyaXR5IGNoZWNrcyBvZiB0aGUgdW5jb21wcmVzc2VkIGRhdGEuCisgIFRoaXMgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSBzdXBwb3J0cyBvbmx5IG9uZSBjb21wcmVzc2lvbiBtZXRob2QgKGRlZmxhdGlvbikKKyAgYnV0IG90aGVyIGFsZ29yaXRobXMgd2lsbCBiZSBhZGRlZCBsYXRlciBhbmQgd2lsbCBoYXZlIHRoZSBzYW1lIHN0cmVhbQorICBpbnRlcmZhY2UuCisKKyAgICBDb21wcmVzc2lvbiBjYW4gYmUgZG9uZSBpbiBhIHNpbmdsZSBzdGVwIGlmIHRoZSBidWZmZXJzIGFyZSBsYXJnZSBlbm91Z2gsCisgIG9yIGNhbiBiZSBkb25lIGJ5IHJlcGVhdGVkIGNhbGxzIG9mIHRoZSBjb21wcmVzc2lvbiBmdW5jdGlvbi4gIEluIHRoZSBsYXR0ZXIKKyAgY2FzZSwgdGhlIGFwcGxpY2F0aW9uIG11c3QgcHJvdmlkZSBtb3JlIGlucHV0IGFuZC9vciBjb25zdW1lIHRoZSBvdXRwdXQKKyAgKHByb3ZpZGluZyBtb3JlIG91dHB1dCBzcGFjZSkgYmVmb3JlIGVhY2ggY2FsbC4KKworICAgIFRoZSBjb21wcmVzc2VkIGRhdGEgZm9ybWF0IHVzZWQgYnkgZGVmYXVsdCBieSB0aGUgaW4tbWVtb3J5IGZ1bmN0aW9ucyBpcworICB0aGUgemxpYiBmb3JtYXQsIHdoaWNoIGlzIGEgemxpYiB3cmFwcGVyIGRvY3VtZW50ZWQgaW4gUkZDIDE5NTAsIHdyYXBwZWQKKyAgYXJvdW5kIGEgZGVmbGF0ZSBzdHJlYW0sIHdoaWNoIGlzIGl0c2VsZiBkb2N1bWVudGVkIGluIFJGQyAxOTUxLgorCisgICAgVGhlIGxpYnJhcnkgYWxzbyBzdXBwb3J0cyByZWFkaW5nIGFuZCB3cml0aW5nIGZpbGVzIGluIGd6aXAgKC5neikgZm9ybWF0CisgIHdpdGggYW4gaW50ZXJmYWNlIHNpbWlsYXIgdG8gdGhhdCBvZiBzdGRpbyB1c2luZyB0aGUgZnVuY3Rpb25zIHRoYXQgc3RhcnQKKyAgd2l0aCAiZ3oiLiAgVGhlIGd6aXAgZm9ybWF0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSB6bGliIGZvcm1hdC4gIGd6aXAgaXMgYQorICBnemlwIHdyYXBwZXIsIGRvY3VtZW50ZWQgaW4gUkZDIDE5NTIsIHdyYXBwZWQgYXJvdW5kIGEgZGVmbGF0ZSBzdHJlYW0uCisKKyAgICBUaGlzIGxpYnJhcnkgY2FuIG9wdGlvbmFsbHkgcmVhZCBhbmQgd3JpdGUgZ3ppcCBhbmQgcmF3IGRlZmxhdGUgc3RyZWFtcyBpbgorICBtZW1vcnkgYXMgd2VsbC4KKworICAgIFRoZSB6bGliIGZvcm1hdCB3YXMgZGVzaWduZWQgdG8gYmUgY29tcGFjdCBhbmQgZmFzdCBmb3IgdXNlIGluIG1lbW9yeQorICBhbmQgb24gY29tbXVuaWNhdGlvbnMgY2hhbm5lbHMuICBUaGUgZ3ppcCBmb3JtYXQgd2FzIGRlc2lnbmVkIGZvciBzaW5nbGUtCisgIGZpbGUgY29tcHJlc3Npb24gb24gZmlsZSBzeXN0ZW1zLCBoYXMgYSBsYXJnZXIgaGVhZGVyIHRoYW4gemxpYiB0byBtYWludGFpbgorICBkaXJlY3RvcnkgaW5mb3JtYXRpb24sIGFuZCB1c2VzIGEgZGlmZmVyZW50LCBzbG93ZXIgY2hlY2sgbWV0aG9kIHRoYW4gemxpYi4KKworICAgIFRoZSBsaWJyYXJ5IGRvZXMgbm90IGluc3RhbGwgYW55IHNpZ25hbCBoYW5kbGVyLiAgVGhlIGRlY29kZXIgY2hlY2tzCisgIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgY29tcHJlc3NlZCBkYXRhLCBzbyB0aGUgbGlicmFyeSBzaG91bGQgbmV2ZXIgY3Jhc2gKKyAgZXZlbiBpbiB0aGUgY2FzZSBvZiBjb3JydXB0ZWQgaW5wdXQuCisqLworCit0eXBlZGVmIHZvaWRwZiAoKmFsbG9jX2Z1bmMpIE9GKCh2b2lkcGYgb3BhcXVlLCB1SW50IGl0ZW1zLCB1SW50IHNpemUpKTsKK3R5cGVkZWYgdm9pZCAgICgqZnJlZV9mdW5jKSAgT0YoKHZvaWRwZiBvcGFxdWUsIHZvaWRwZiBhZGRyZXNzKSk7CisKK3N0cnVjdCBpbnRlcm5hbF9zdGF0ZTsKKwordHlwZWRlZiBzdHJ1Y3Qgel9zdHJlYW1fcyB7CisgICAgel9jb25zdCBCeXRlZiAqbmV4dF9pbjsgICAgIC8qIG5leHQgaW5wdXQgYnl0ZSAqLworICAgIHVJbnQgICAgIGF2YWlsX2luOyAgLyogbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSBhdCBuZXh0X2luICovCisgICAgdUxvbmcgICAgdG90YWxfaW47ICAvKiB0b3RhbCBudW1iZXIgb2YgaW5wdXQgYnl0ZXMgcmVhZCBzbyBmYXIgKi8KKworICAgIEJ5dGVmICAgICpuZXh0X291dDsgLyogbmV4dCBvdXRwdXQgYnl0ZSB3aWxsIGdvIGhlcmUgKi8KKyAgICB1SW50ICAgICBhdmFpbF9vdXQ7IC8qIHJlbWFpbmluZyBmcmVlIHNwYWNlIGF0IG5leHRfb3V0ICovCisgICAgdUxvbmcgICAgdG90YWxfb3V0OyAvKiB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgb3V0cHV0IHNvIGZhciAqLworCisgICAgel9jb25zdCBjaGFyICptc2c7ICAvKiBsYXN0IGVycm9yIG1lc3NhZ2UsIE5VTEwgaWYgbm8gZXJyb3IgKi8KKyAgICBzdHJ1Y3QgaW50ZXJuYWxfc3RhdGUgRkFSICpzdGF0ZTsgLyogbm90IHZpc2libGUgYnkgYXBwbGljYXRpb25zICovCisKKyAgICBhbGxvY19mdW5jIHphbGxvYzsgIC8qIHVzZWQgdG8gYWxsb2NhdGUgdGhlIGludGVybmFsIHN0YXRlICovCisgICAgZnJlZV9mdW5jICB6ZnJlZTsgICAvKiB1c2VkIHRvIGZyZWUgdGhlIGludGVybmFsIHN0YXRlICovCisgICAgdm9pZHBmICAgICBvcGFxdWU7ICAvKiBwcml2YXRlIGRhdGEgb2JqZWN0IHBhc3NlZCB0byB6YWxsb2MgYW5kIHpmcmVlICovCisKKyAgICBpbnQgICAgIGRhdGFfdHlwZTsgIC8qIGJlc3QgZ3Vlc3MgYWJvdXQgdGhlIGRhdGEgdHlwZTogYmluYXJ5IG9yIHRleHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBkZWZsYXRlLCBvciB0aGUgZGVjb2Rpbmcgc3RhdGUgZm9yIGluZmxhdGUgKi8KKyAgICB1TG9uZyAgIGFkbGVyOyAgICAgIC8qIEFkbGVyLTMyIG9yIENSQy0zMiB2YWx1ZSBvZiB0aGUgdW5jb21wcmVzc2VkIGRhdGEgKi8KKyAgICB1TG9uZyAgIHJlc2VydmVkOyAgIC8qIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovCit9IHpfc3RyZWFtOworCit0eXBlZGVmIHpfc3RyZWFtIEZBUiAqel9zdHJlYW1wOworCisvKgorICAgICBnemlwIGhlYWRlciBpbmZvcm1hdGlvbiBwYXNzZWQgdG8gYW5kIGZyb20gemxpYiByb3V0aW5lcy4gIFNlZSBSRkMgMTk1MgorICBmb3IgbW9yZSBkZXRhaWxzIG9uIHRoZSBtZWFuaW5ncyBvZiB0aGVzZSBmaWVsZHMuCisqLwordHlwZWRlZiBzdHJ1Y3QgZ3pfaGVhZGVyX3MgeworICAgIGludCAgICAgdGV4dDsgICAgICAgLyogdHJ1ZSBpZiBjb21wcmVzc2VkIGRhdGEgYmVsaWV2ZWQgdG8gYmUgdGV4dCAqLworICAgIHVMb25nICAgdGltZTsgICAgICAgLyogbW9kaWZpY2F0aW9uIHRpbWUgKi8KKyAgICBpbnQgICAgIHhmbGFnczsgICAgIC8qIGV4dHJhIGZsYWdzIChub3QgdXNlZCB3aGVuIHdyaXRpbmcgYSBnemlwIGZpbGUpICovCisgICAgaW50ICAgICBvczsgICAgICAgICAvKiBvcGVyYXRpbmcgc3lzdGVtICovCisgICAgQnl0ZWYgICAqZXh0cmE7ICAgICAvKiBwb2ludGVyIHRvIGV4dHJhIGZpZWxkIG9yIFpfTlVMTCBpZiBub25lICovCisgICAgdUludCAgICBleHRyYV9sZW47ICAvKiBleHRyYSBmaWVsZCBsZW5ndGggKHZhbGlkIGlmIGV4dHJhICE9IFpfTlVMTCkgKi8KKyAgICB1SW50ICAgIGV4dHJhX21heDsgIC8qIHNwYWNlIGF0IGV4dHJhIChvbmx5IHdoZW4gcmVhZGluZyBoZWFkZXIpICovCisgICAgQnl0ZWYgICAqbmFtZTsgICAgICAvKiBwb2ludGVyIHRvIHplcm8tdGVybWluYXRlZCBmaWxlIG5hbWUgb3IgWl9OVUxMICovCisgICAgdUludCAgICBuYW1lX21heDsgICAvKiBzcGFjZSBhdCBuYW1lIChvbmx5IHdoZW4gcmVhZGluZyBoZWFkZXIpICovCisgICAgQnl0ZWYgICAqY29tbWVudDsgICAvKiBwb2ludGVyIHRvIHplcm8tdGVybWluYXRlZCBjb21tZW50IG9yIFpfTlVMTCAqLworICAgIHVJbnQgICAgY29tbV9tYXg7ICAgLyogc3BhY2UgYXQgY29tbWVudCAob25seSB3aGVuIHJlYWRpbmcgaGVhZGVyKSAqLworICAgIGludCAgICAgaGNyYzsgICAgICAgLyogdHJ1ZSBpZiB0aGVyZSB3YXMgb3Igd2lsbCBiZSBhIGhlYWRlciBjcmMgKi8KKyAgICBpbnQgICAgIGRvbmU7ICAgICAgIC8qIHRydWUgd2hlbiBkb25lIHJlYWRpbmcgZ3ppcCBoZWFkZXIgKG5vdCB1c2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHdyaXRpbmcgYSBnemlwIGZpbGUpICovCit9IGd6X2hlYWRlcjsKKwordHlwZWRlZiBnel9oZWFkZXIgRkFSICpnel9oZWFkZXJwOworCisvKgorICAgICBUaGUgYXBwbGljYXRpb24gbXVzdCB1cGRhdGUgbmV4dF9pbiBhbmQgYXZhaWxfaW4gd2hlbiBhdmFpbF9pbiBoYXMgZHJvcHBlZAorICAgdG8gemVyby4gIEl0IG11c3QgdXBkYXRlIG5leHRfb3V0IGFuZCBhdmFpbF9vdXQgd2hlbiBhdmFpbF9vdXQgaGFzIGRyb3BwZWQKKyAgIHRvIHplcm8uICBUaGUgYXBwbGljYXRpb24gbXVzdCBpbml0aWFsaXplIHphbGxvYywgemZyZWUgYW5kIG9wYXF1ZSBiZWZvcmUKKyAgIGNhbGxpbmcgdGhlIGluaXQgZnVuY3Rpb24uICBBbGwgb3RoZXIgZmllbGRzIGFyZSBzZXQgYnkgdGhlIGNvbXByZXNzaW9uCisgICBsaWJyYXJ5IGFuZCBtdXN0IG5vdCBiZSB1cGRhdGVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4KKworICAgICBUaGUgb3BhcXVlIHZhbHVlIHByb3ZpZGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiB3aWxsIGJlIHBhc3NlZCBhcyB0aGUgZmlyc3QKKyAgIHBhcmFtZXRlciBmb3IgY2FsbHMgb2YgemFsbG9jIGFuZCB6ZnJlZS4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgY3VzdG9tCisgICBtZW1vcnkgbWFuYWdlbWVudC4gIFRoZSBjb21wcmVzc2lvbiBsaWJyYXJ5IGF0dGFjaGVzIG5vIG1lYW5pbmcgdG8gdGhlCisgICBvcGFxdWUgdmFsdWUuCisKKyAgICAgemFsbG9jIG11c3QgcmV0dXJuIFpfTlVMTCBpZiB0aGVyZSBpcyBub3QgZW5vdWdoIG1lbW9yeSBmb3IgdGhlIG9iamVjdC4KKyAgIElmIHpsaWIgaXMgdXNlZCBpbiBhIG11bHRpLXRocmVhZGVkIGFwcGxpY2F0aW9uLCB6YWxsb2MgYW5kIHpmcmVlIG11c3QgYmUKKyAgIHRocmVhZCBzYWZlLiAgSW4gdGhhdCBjYXNlLCB6bGliIGlzIHRocmVhZC1zYWZlLiAgV2hlbiB6YWxsb2MgYW5kIHpmcmVlIGFyZQorICAgWl9OVUxMIG9uIGVudHJ5IHRvIHRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiwgdGhleSBhcmUgc2V0IHRvIGludGVybmFsCisgICByb3V0aW5lcyB0aGF0IHVzZSB0aGUgc3RhbmRhcmQgbGlicmFyeSBmdW5jdGlvbnMgbWFsbG9jKCkgYW5kIGZyZWUoKS4KKworICAgICBPbiAxNi1iaXQgc3lzdGVtcywgdGhlIGZ1bmN0aW9ucyB6YWxsb2MgYW5kIHpmcmVlIG11c3QgYmUgYWJsZSB0byBhbGxvY2F0ZQorICAgZXhhY3RseSA2NTUzNiBieXRlcywgYnV0IHdpbGwgbm90IGJlIHJlcXVpcmVkIHRvIGFsbG9jYXRlIG1vcmUgdGhhbiB0aGlzIGlmCisgICB0aGUgc3ltYm9sIE1BWFNFR182NEsgaXMgZGVmaW5lZCAoc2VlIHpjb25mLmgpLiAgV0FSTklORzogT24gTVNET1MsIHBvaW50ZXJzCisgICByZXR1cm5lZCBieSB6YWxsb2MgZm9yIG9iamVjdHMgb2YgZXhhY3RseSA2NTUzNiBieXRlcyAqbXVzdCogaGF2ZSB0aGVpcgorICAgb2Zmc2V0IG5vcm1hbGl6ZWQgdG8gemVyby4gIFRoZSBkZWZhdWx0IGFsbG9jYXRpb24gZnVuY3Rpb24gcHJvdmlkZWQgYnkgdGhpcworICAgbGlicmFyeSBlbnN1cmVzIHRoaXMgKHNlZSB6dXRpbC5jKS4gIFRvIHJlZHVjZSBtZW1vcnkgcmVxdWlyZW1lbnRzIGFuZCBhdm9pZAorICAgYW55IGFsbG9jYXRpb24gb2YgNjRLIG9iamVjdHMsIGF0IHRoZSBleHBlbnNlIG9mIGNvbXByZXNzaW9uIHJhdGlvLCBjb21waWxlCisgICB0aGUgbGlicmFyeSB3aXRoIC1ETUFYX1dCSVRTPTE0IChzZWUgemNvbmYuaCkuCisKKyAgICAgVGhlIGZpZWxkcyB0b3RhbF9pbiBhbmQgdG90YWxfb3V0IGNhbiBiZSB1c2VkIGZvciBzdGF0aXN0aWNzIG9yIHByb2dyZXNzCisgICByZXBvcnRzLiAgQWZ0ZXIgY29tcHJlc3Npb24sIHRvdGFsX2luIGhvbGRzIHRoZSB0b3RhbCBzaXplIG9mIHRoZQorICAgdW5jb21wcmVzc2VkIGRhdGEgYW5kIG1heSBiZSBzYXZlZCBmb3IgdXNlIGJ5IHRoZSBkZWNvbXByZXNzb3IgKHBhcnRpY3VsYXJseQorICAgaWYgdGhlIGRlY29tcHJlc3NvciB3YW50cyB0byBkZWNvbXByZXNzIGV2ZXJ5dGhpbmcgaW4gYSBzaW5nbGUgc3RlcCkuCisqLworCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25zdGFudHMgKi8KKworI2RlZmluZSBaX05PX0ZMVVNIICAgICAgMAorI2RlZmluZSBaX1BBUlRJQUxfRkxVU0ggMQorI2RlZmluZSBaX1NZTkNfRkxVU0ggICAgMgorI2RlZmluZSBaX0ZVTExfRkxVU0ggICAgMworI2RlZmluZSBaX0ZJTklTSCAgICAgICAgNAorI2RlZmluZSBaX0JMT0NLICAgICAgICAgNQorI2RlZmluZSBaX1RSRUVTICAgICAgICAgNgorLyogQWxsb3dlZCBmbHVzaCB2YWx1ZXM7IHNlZSBkZWZsYXRlKCkgYW5kIGluZmxhdGUoKSBiZWxvdyBmb3IgZGV0YWlscyAqLworCisjZGVmaW5lIFpfT0sgICAgICAgICAgICAwCisjZGVmaW5lIFpfU1RSRUFNX0VORCAgICAxCisjZGVmaW5lIFpfTkVFRF9ESUNUICAgICAyCisjZGVmaW5lIFpfRVJSTk8gICAgICAgICgtMSkKKyNkZWZpbmUgWl9TVFJFQU1fRVJST1IgKC0yKQorI2RlZmluZSBaX0RBVEFfRVJST1IgICAoLTMpCisjZGVmaW5lIFpfTUVNX0VSUk9SICAgICgtNCkKKyNkZWZpbmUgWl9CVUZfRVJST1IgICAgKC01KQorI2RlZmluZSBaX1ZFUlNJT05fRVJST1IgKC02KQorLyogUmV0dXJuIGNvZGVzIGZvciB0aGUgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiBmdW5jdGlvbnMuIE5lZ2F0aXZlIHZhbHVlcworICogYXJlIGVycm9ycywgcG9zaXRpdmUgdmFsdWVzIGFyZSB1c2VkIGZvciBzcGVjaWFsIGJ1dCBub3JtYWwgZXZlbnRzLgorICovCisKKyNkZWZpbmUgWl9OT19DT01QUkVTU0lPTiAgICAgICAgIDAKKyNkZWZpbmUgWl9CRVNUX1NQRUVEICAgICAgICAgICAgIDEKKyNkZWZpbmUgWl9CRVNUX0NPTVBSRVNTSU9OICAgICAgIDkKKyNkZWZpbmUgWl9ERUZBVUxUX0NPTVBSRVNTSU9OICAoLTEpCisvKiBjb21wcmVzc2lvbiBsZXZlbHMgKi8KKworI2RlZmluZSBaX0ZJTFRFUkVEICAgICAgICAgICAgMQorI2RlZmluZSBaX0hVRkZNQU5fT05MWSAgICAgICAgMgorI2RlZmluZSBaX1JMRSAgICAgICAgICAgICAgICAgMworI2RlZmluZSBaX0ZJWEVEICAgICAgICAgICAgICAgNAorI2RlZmluZSBaX0RFRkFVTFRfU1RSQVRFR1kgICAgMAorLyogY29tcHJlc3Npb24gc3RyYXRlZ3k7IHNlZSBkZWZsYXRlSW5pdDIoKSBiZWxvdyBmb3IgZGV0YWlscyAqLworCisjZGVmaW5lIFpfQklOQVJZICAgMAorI2RlZmluZSBaX1RFWFQgICAgIDEKKyNkZWZpbmUgWl9BU0NJSSAgICBaX1RFWFQgICAvKiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIDEuMi4yIGFuZCBlYXJsaWVyICovCisjZGVmaW5lIFpfVU5LTk9XTiAgMgorLyogUG9zc2libGUgdmFsdWVzIG9mIHRoZSBkYXRhX3R5cGUgZmllbGQgZm9yIGRlZmxhdGUoKSAqLworCisjZGVmaW5lIFpfREVGTEFURUQgICA4CisvKiBUaGUgZGVmbGF0ZSBjb21wcmVzc2lvbiBtZXRob2QgKHRoZSBvbmx5IG9uZSBzdXBwb3J0ZWQgaW4gdGhpcyB2ZXJzaW9uKSAqLworCisjZGVmaW5lIFpfTlVMTCAgMCAgLyogZm9yIGluaXRpYWxpemluZyB6YWxsb2MsIHpmcmVlLCBvcGFxdWUgKi8KKworI2RlZmluZSB6bGliX3ZlcnNpb24gemxpYlZlcnNpb24oKQorLyogZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB2ZXJzaW9ucyA8IDEuMC4yICovCisKKworICAgICAgICAgICAgICAgICAgICAgICAgLyogYmFzaWMgZnVuY3Rpb25zICovCisKK1pFWFRFUk4gY29uc3QgY2hhciAqIFpFWFBPUlQgemxpYlZlcnNpb24gT0YoKHZvaWQpKTsKKy8qIFRoZSBhcHBsaWNhdGlvbiBjYW4gY29tcGFyZSB6bGliVmVyc2lvbiBhbmQgWkxJQl9WRVJTSU9OIGZvciBjb25zaXN0ZW5jeS4KKyAgIElmIHRoZSBmaXJzdCBjaGFyYWN0ZXIgZGlmZmVycywgdGhlIGxpYnJhcnkgY29kZSBhY3R1YWxseSB1c2VkIGlzIG5vdAorICAgY29tcGF0aWJsZSB3aXRoIHRoZSB6bGliLmggaGVhZGVyIGZpbGUgdXNlZCBieSB0aGUgYXBwbGljYXRpb24uICBUaGlzIGNoZWNrCisgICBpcyBhdXRvbWF0aWNhbGx5IG1hZGUgYnkgZGVmbGF0ZUluaXQgYW5kIGluZmxhdGVJbml0LgorICovCisKKy8qCitaRVhURVJOIGludCBaRVhQT1JUIGRlZmxhdGVJbml0IE9GKCh6X3N0cmVhbXAgc3RybSwgaW50IGxldmVsKSk7CisKKyAgICAgSW5pdGlhbGl6ZXMgdGhlIGludGVybmFsIHN0cmVhbSBzdGF0ZSBmb3IgY29tcHJlc3Npb24uICBUaGUgZmllbGRzCisgICB6YWxsb2MsIHpmcmVlIGFuZCBvcGFxdWUgbXVzdCBiZSBpbml0aWFsaXplZCBiZWZvcmUgYnkgdGhlIGNhbGxlci4gIElmCisgICB6YWxsb2MgYW5kIHpmcmVlIGFyZSBzZXQgdG8gWl9OVUxMLCBkZWZsYXRlSW5pdCB1cGRhdGVzIHRoZW0gdG8gdXNlIGRlZmF1bHQKKyAgIGFsbG9jYXRpb24gZnVuY3Rpb25zLgorCisgICAgIFRoZSBjb21wcmVzc2lvbiBsZXZlbCBtdXN0IGJlIFpfREVGQVVMVF9DT01QUkVTU0lPTiwgb3IgYmV0d2VlbiAwIGFuZCA5OgorICAgMSBnaXZlcyBiZXN0IHNwZWVkLCA5IGdpdmVzIGJlc3QgY29tcHJlc3Npb24sIDAgZ2l2ZXMgbm8gY29tcHJlc3Npb24gYXQgYWxsCisgICAodGhlIGlucHV0IGRhdGEgaXMgc2ltcGx5IGNvcGllZCBhIGJsb2NrIGF0IGEgdGltZSkuICBaX0RFRkFVTFRfQ09NUFJFU1NJT04KKyAgIHJlcXVlc3RzIGEgZGVmYXVsdCBjb21wcm9taXNlIGJldHdlZW4gc3BlZWQgYW5kIGNvbXByZXNzaW9uIChjdXJyZW50bHkKKyAgIGVxdWl2YWxlbnQgdG8gbGV2ZWwgNikuCisKKyAgICAgZGVmbGF0ZUluaXQgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIFpfTUVNX0VSUk9SIGlmIHRoZXJlIHdhcyBub3QgZW5vdWdoCisgICBtZW1vcnksIFpfU1RSRUFNX0VSUk9SIGlmIGxldmVsIGlzIG5vdCBhIHZhbGlkIGNvbXByZXNzaW9uIGxldmVsLCBvcgorICAgWl9WRVJTSU9OX0VSUk9SIGlmIHRoZSB6bGliIGxpYnJhcnkgdmVyc2lvbiAoemxpYl92ZXJzaW9uKSBpcyBpbmNvbXBhdGlibGUKKyAgIHdpdGggdGhlIHZlcnNpb24gYXNzdW1lZCBieSB0aGUgY2FsbGVyIChaTElCX1ZFUlNJT04pLiAgbXNnIGlzIHNldCB0byBudWxsCisgICBpZiB0aGVyZSBpcyBubyBlcnJvciBtZXNzYWdlLiAgZGVmbGF0ZUluaXQgZG9lcyBub3QgcGVyZm9ybSBhbnkgY29tcHJlc3Npb246CisgICB0aGlzIHdpbGwgYmUgZG9uZSBieSBkZWZsYXRlKCkuCisqLworCisKK1pFWFRFUk4gaW50IFpFWFBPUlQgZGVmbGF0ZSBPRigoel9zdHJlYW1wIHN0cm0sIGludCBmbHVzaCkpOworLyoKKyAgICBkZWZsYXRlIGNvbXByZXNzZXMgYXMgbXVjaCBkYXRhIGFzIHBvc3NpYmxlLCBhbmQgc3RvcHMgd2hlbiB0aGUgaW5wdXQKKyAgYnVmZmVyIGJlY29tZXMgZW1wdHkgb3IgdGhlIG91dHB1dCBidWZmZXIgYmVjb21lcyBmdWxsLiAgSXQgbWF5IGludHJvZHVjZQorICBzb21lIG91dHB1dCBsYXRlbmN5IChyZWFkaW5nIGlucHV0IHdpdGhvdXQgcHJvZHVjaW5nIGFueSBvdXRwdXQpIGV4Y2VwdCB3aGVuCisgIGZvcmNlZCB0byBmbHVzaC4KKworICAgIFRoZSBkZXRhaWxlZCBzZW1hbnRpY3MgYXJlIGFzIGZvbGxvd3MuICBkZWZsYXRlIHBlcmZvcm1zIG9uZSBvciBib3RoIG9mIHRoZQorICBmb2xsb3dpbmcgYWN0aW9uczoKKworICAtIENvbXByZXNzIG1vcmUgaW5wdXQgc3RhcnRpbmcgYXQgbmV4dF9pbiBhbmQgdXBkYXRlIG5leHRfaW4gYW5kIGF2YWlsX2luCisgICAgYWNjb3JkaW5nbHkuICBJZiBub3QgYWxsIGlucHV0IGNhbiBiZSBwcm9jZXNzZWQgKGJlY2F1c2UgdGhlcmUgaXMgbm90CisgICAgZW5vdWdoIHJvb20gaW4gdGhlIG91dHB1dCBidWZmZXIpLCBuZXh0X2luIGFuZCBhdmFpbF9pbiBhcmUgdXBkYXRlZCBhbmQKKyAgICBwcm9jZXNzaW5nIHdpbGwgcmVzdW1lIGF0IHRoaXMgcG9pbnQgZm9yIHRoZSBuZXh0IGNhbGwgb2YgZGVmbGF0ZSgpLgorCisgIC0gR2VuZXJhdGUgbW9yZSBvdXRwdXQgc3RhcnRpbmcgYXQgbmV4dF9vdXQgYW5kIHVwZGF0ZSBuZXh0X291dCBhbmQgYXZhaWxfb3V0CisgICAgYWNjb3JkaW5nbHkuICBUaGlzIGFjdGlvbiBpcyBmb3JjZWQgaWYgdGhlIHBhcmFtZXRlciBmbHVzaCBpcyBub24gemVyby4KKyAgICBGb3JjaW5nIGZsdXNoIGZyZXF1ZW50bHkgZGVncmFkZXMgdGhlIGNvbXByZXNzaW9uIHJhdGlvLCBzbyB0aGlzIHBhcmFtZXRlcgorICAgIHNob3VsZCBiZSBzZXQgb25seSB3aGVuIG5lY2Vzc2FyeS4gIFNvbWUgb3V0cHV0IG1heSBiZSBwcm92aWRlZCBldmVuIGlmCisgICAgZmx1c2ggaXMgemVyby4KKworICAgIEJlZm9yZSB0aGUgY2FsbCBvZiBkZWZsYXRlKCksIHRoZSBhcHBsaWNhdGlvbiBzaG91bGQgZW5zdXJlIHRoYXQgYXQgbGVhc3QKKyAgb25lIG9mIHRoZSBhY3Rpb25zIGlzIHBvc3NpYmxlLCBieSBwcm92aWRpbmcgbW9yZSBpbnB1dCBhbmQvb3IgY29uc3VtaW5nIG1vcmUKKyAgb3V0cHV0LCBhbmQgdXBkYXRpbmcgYXZhaWxfaW4gb3IgYXZhaWxfb3V0IGFjY29yZGluZ2x5OyBhdmFpbF9vdXQgc2hvdWxkCisgIG5ldmVyIGJlIHplcm8gYmVmb3JlIHRoZSBjYWxsLiAgVGhlIGFwcGxpY2F0aW9uIGNhbiBjb25zdW1lIHRoZSBjb21wcmVzc2VkCisgIG91dHB1dCB3aGVuIGl0IHdhbnRzLCBmb3IgZXhhbXBsZSB3aGVuIHRoZSBvdXRwdXQgYnVmZmVyIGlzIGZ1bGwgKGF2YWlsX291dAorICA9PSAwKSwgb3IgYWZ0ZXIgZWFjaCBjYWxsIG9mIGRlZmxhdGUoKS4gIElmIGRlZmxhdGUgcmV0dXJucyBaX09LIGFuZCB3aXRoCisgIHplcm8gYXZhaWxfb3V0LCBpdCBtdXN0IGJlIGNhbGxlZCBhZ2FpbiBhZnRlciBtYWtpbmcgcm9vbSBpbiB0aGUgb3V0cHV0CisgIGJ1ZmZlciBiZWNhdXNlIHRoZXJlIG1pZ2h0IGJlIG1vcmUgb3V0cHV0IHBlbmRpbmcuIFNlZSBkZWZsYXRlUGVuZGluZygpLAorICB3aGljaCBjYW4gYmUgdXNlZCBpZiBkZXNpcmVkIHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCB0aGVyZSBpcyBtb3JlIG91cHV0CisgIGluIHRoYXQgY2FzZS4KKworICAgIE5vcm1hbGx5IHRoZSBwYXJhbWV0ZXIgZmx1c2ggaXMgc2V0IHRvIFpfTk9fRkxVU0gsIHdoaWNoIGFsbG93cyBkZWZsYXRlIHRvCisgIGRlY2lkZSBob3cgbXVjaCBkYXRhIHRvIGFjY3VtdWxhdGUgYmVmb3JlIHByb2R1Y2luZyBvdXRwdXQsIGluIG9yZGVyIHRvCisgIG1heGltaXplIGNvbXByZXNzaW9uLgorCisgICAgSWYgdGhlIHBhcmFtZXRlciBmbHVzaCBpcyBzZXQgdG8gWl9TWU5DX0ZMVVNILCBhbGwgcGVuZGluZyBvdXRwdXQgaXMKKyAgZmx1c2hlZCB0byB0aGUgb3V0cHV0IGJ1ZmZlciBhbmQgdGhlIG91dHB1dCBpcyBhbGlnbmVkIG9uIGEgYnl0ZSBib3VuZGFyeSwgc28KKyAgdGhhdCB0aGUgZGVjb21wcmVzc29yIGNhbiBnZXQgYWxsIGlucHV0IGRhdGEgYXZhaWxhYmxlIHNvIGZhci4gIChJbgorICBwYXJ0aWN1bGFyIGF2YWlsX2luIGlzIHplcm8gYWZ0ZXIgdGhlIGNhbGwgaWYgZW5vdWdoIG91dHB1dCBzcGFjZSBoYXMgYmVlbgorICBwcm92aWRlZCBiZWZvcmUgdGhlIGNhbGwuKSBGbHVzaGluZyBtYXkgZGVncmFkZSBjb21wcmVzc2lvbiBmb3Igc29tZQorICBjb21wcmVzc2lvbiBhbGdvcml0aG1zIGFuZCBzbyBpdCBzaG91bGQgYmUgdXNlZCBvbmx5IHdoZW4gbmVjZXNzYXJ5LiAgVGhpcworICBjb21wbGV0ZXMgdGhlIGN1cnJlbnQgZGVmbGF0ZSBibG9jayBhbmQgZm9sbG93cyBpdCB3aXRoIGFuIGVtcHR5IHN0b3JlZCBibG9jaworICB0aGF0IGlzIHRocmVlIGJpdHMgcGx1cyBmaWxsZXIgYml0cyB0byB0aGUgbmV4dCBieXRlLCBmb2xsb3dlZCBieSBmb3VyIGJ5dGVzCisgICgwMCAwMCBmZiBmZikuCisKKyAgICBJZiBmbHVzaCBpcyBzZXQgdG8gWl9QQVJUSUFMX0ZMVVNILCBhbGwgcGVuZGluZyBvdXRwdXQgaXMgZmx1c2hlZCB0byB0aGUKKyAgb3V0cHV0IGJ1ZmZlciwgYnV0IHRoZSBvdXRwdXQgaXMgbm90IGFsaWduZWQgdG8gYSBieXRlIGJvdW5kYXJ5LiAgQWxsIG9mIHRoZQorICBpbnB1dCBkYXRhIHNvIGZhciB3aWxsIGJlIGF2YWlsYWJsZSB0byB0aGUgZGVjb21wcmVzc29yLCBhcyBmb3IgWl9TWU5DX0ZMVVNILgorICBUaGlzIGNvbXBsZXRlcyB0aGUgY3VycmVudCBkZWZsYXRlIGJsb2NrIGFuZCBmb2xsb3dzIGl0IHdpdGggYW4gZW1wdHkgZml4ZWQKKyAgY29kZXMgYmxvY2sgdGhhdCBpcyAxMCBiaXRzIGxvbmcuICBUaGlzIGFzc3VyZXMgdGhhdCBlbm91Z2ggYnl0ZXMgYXJlIG91dHB1dAorICBpbiBvcmRlciBmb3IgdGhlIGRlY29tcHJlc3NvciB0byBmaW5pc2ggdGhlIGJsb2NrIGJlZm9yZSB0aGUgZW1wdHkgZml4ZWQKKyAgY29kZXMgYmxvY2suCisKKyAgICBJZiBmbHVzaCBpcyBzZXQgdG8gWl9CTE9DSywgYSBkZWZsYXRlIGJsb2NrIGlzIGNvbXBsZXRlZCBhbmQgZW1pdHRlZCwgYXMKKyAgZm9yIFpfU1lOQ19GTFVTSCwgYnV0IHRoZSBvdXRwdXQgaXMgbm90IGFsaWduZWQgb24gYSBieXRlIGJvdW5kYXJ5LCBhbmQgdXAgdG8KKyAgc2V2ZW4gYml0cyBvZiB0aGUgY3VycmVudCBibG9jayBhcmUgaGVsZCB0byBiZSB3cml0dGVuIGFzIHRoZSBuZXh0IGJ5dGUgYWZ0ZXIKKyAgdGhlIG5leHQgZGVmbGF0ZSBibG9jayBpcyBjb21wbGV0ZWQuICBJbiB0aGlzIGNhc2UsIHRoZSBkZWNvbXByZXNzb3IgbWF5IG5vdAorICBiZSBwcm92aWRlZCBlbm91Z2ggYml0cyBhdCB0aGlzIHBvaW50IGluIG9yZGVyIHRvIGNvbXBsZXRlIGRlY29tcHJlc3Npb24gb2YKKyAgdGhlIGRhdGEgcHJvdmlkZWQgc28gZmFyIHRvIHRoZSBjb21wcmVzc29yLiAgSXQgbWF5IG5lZWQgdG8gd2FpdCBmb3IgdGhlIG5leHQKKyAgYmxvY2sgdG8gYmUgZW1pdHRlZC4gIFRoaXMgaXMgZm9yIGFkdmFuY2VkIGFwcGxpY2F0aW9ucyB0aGF0IG5lZWQgdG8gY29udHJvbAorICB0aGUgZW1pc3Npb24gb2YgZGVmbGF0ZSBibG9ja3MuCisKKyAgICBJZiBmbHVzaCBpcyBzZXQgdG8gWl9GVUxMX0ZMVVNILCBhbGwgb3V0cHV0IGlzIGZsdXNoZWQgYXMgd2l0aAorICBaX1NZTkNfRkxVU0gsIGFuZCB0aGUgY29tcHJlc3Npb24gc3RhdGUgaXMgcmVzZXQgc28gdGhhdCBkZWNvbXByZXNzaW9uIGNhbgorICByZXN0YXJ0IGZyb20gdGhpcyBwb2ludCBpZiBwcmV2aW91cyBjb21wcmVzc2VkIGRhdGEgaGFzIGJlZW4gZGFtYWdlZCBvciBpZgorICByYW5kb20gYWNjZXNzIGlzIGRlc2lyZWQuICBVc2luZyBaX0ZVTExfRkxVU0ggdG9vIG9mdGVuIGNhbiBzZXJpb3VzbHkgZGVncmFkZQorICBjb21wcmVzc2lvbi4KKworICAgIElmIGRlZmxhdGUgcmV0dXJucyB3aXRoIGF2YWlsX291dCA9PSAwLCB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGFnYWluCisgIHdpdGggdGhlIHNhbWUgdmFsdWUgb2YgdGhlIGZsdXNoIHBhcmFtZXRlciBhbmQgbW9yZSBvdXRwdXQgc3BhY2UgKHVwZGF0ZWQKKyAgYXZhaWxfb3V0KSwgdW50aWwgdGhlIGZsdXNoIGlzIGNvbXBsZXRlIChkZWZsYXRlIHJldHVybnMgd2l0aCBub24temVybworICBhdmFpbF9vdXQpLiAgSW4gdGhlIGNhc2Ugb2YgYSBaX0ZVTExfRkxVU0ggb3IgWl9TWU5DX0ZMVVNILCBtYWtlIHN1cmUgdGhhdAorICBhdmFpbF9vdXQgaXMgZ3JlYXRlciB0aGFuIHNpeCB0byBhdm9pZCByZXBlYXRlZCBmbHVzaCBtYXJrZXJzIGR1ZSB0bworICBhdmFpbF9vdXQgPT0gMCBvbiByZXR1cm4uCisKKyAgICBJZiB0aGUgcGFyYW1ldGVyIGZsdXNoIGlzIHNldCB0byBaX0ZJTklTSCwgcGVuZGluZyBpbnB1dCBpcyBwcm9jZXNzZWQsCisgIHBlbmRpbmcgb3V0cHV0IGlzIGZsdXNoZWQgYW5kIGRlZmxhdGUgcmV0dXJucyB3aXRoIFpfU1RSRUFNX0VORCBpZiB0aGVyZSB3YXMKKyAgZW5vdWdoIG91dHB1dCBzcGFjZS4gIElmIGRlZmxhdGUgcmV0dXJucyB3aXRoIFpfT0sgb3IgWl9CVUZfRVJST1IsIHRoaXMKKyAgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYWdhaW4gd2l0aCBaX0ZJTklTSCBhbmQgbW9yZSBvdXRwdXQgc3BhY2UgKHVwZGF0ZWQKKyAgYXZhaWxfb3V0KSBidXQgbm8gbW9yZSBpbnB1dCBkYXRhLCB1bnRpbCBpdCByZXR1cm5zIHdpdGggWl9TVFJFQU1fRU5EIG9yIGFuCisgIGVycm9yLiAgQWZ0ZXIgZGVmbGF0ZSBoYXMgcmV0dXJuZWQgWl9TVFJFQU1fRU5ELCB0aGUgb25seSBwb3NzaWJsZSBvcGVyYXRpb25zCisgIG9uIHRoZSBzdHJlYW0gYXJlIGRlZmxhdGVSZXNldCBvciBkZWZsYXRlRW5kLgorCisgICAgWl9GSU5JU0ggY2FuIGJlIHVzZWQgaW4gdGhlIGZpcnN0IGRlZmxhdGUgY2FsbCBhZnRlciBkZWZsYXRlSW5pdCBpZiBhbGwgdGhlCisgIGNvbXByZXNzaW9uIGlzIHRvIGJlIGRvbmUgaW4gYSBzaW5nbGUgc3RlcC4gIEluIG9yZGVyIHRvIGNvbXBsZXRlIGluIG9uZQorICBjYWxsLCBhdmFpbF9vdXQgbXVzdCBiZSBhdCBsZWFzdCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgZGVmbGF0ZUJvdW5kIChzZWUKKyAgYmVsb3cpLiAgVGhlbiBkZWZsYXRlIGlzIGd1YXJhbnRlZWQgdG8gcmV0dXJuIFpfU1RSRUFNX0VORC4gIElmIG5vdCBlbm91Z2gKKyAgb3V0cHV0IHNwYWNlIGlzIHByb3ZpZGVkLCBkZWZsYXRlIHdpbGwgbm90IHJldHVybiBaX1NUUkVBTV9FTkQsIGFuZCBpdCBtdXN0CisgIGJlIGNhbGxlZCBhZ2FpbiBhcyBkZXNjcmliZWQgYWJvdmUuCisKKyAgICBkZWZsYXRlKCkgc2V0cyBzdHJtLT5hZGxlciB0byB0aGUgQWRsZXItMzIgY2hlY2tzdW0gb2YgYWxsIGlucHV0IHJlYWQKKyAgc28gZmFyICh0aGF0IGlzLCB0b3RhbF9pbiBieXRlcykuICBJZiBhIGd6aXAgc3RyZWFtIGlzIGJlaW5nIGdlbmVyYXRlZCwgdGhlbgorICBzdHJtLT5hZGxlciB3aWxsIGJlIHRoZSBDUkMtMzIgY2hlY2tzdW0gb2YgdGhlIGlucHV0IHJlYWQgc28gZmFyLiAgKFNlZQorICBkZWZsYXRlSW5pdDIgYmVsb3cuKQorCisgICAgZGVmbGF0ZSgpIG1heSB1cGRhdGUgc3RybS0+ZGF0YV90eXBlIGlmIGl0IGNhbiBtYWtlIGEgZ29vZCBndWVzcyBhYm91dAorICB0aGUgaW5wdXQgZGF0YSB0eXBlIChaX0JJTkFSWSBvciBaX1RFWFQpLiAgSWYgaW4gZG91YnQsIHRoZSBkYXRhIGlzCisgIGNvbnNpZGVyZWQgYmluYXJ5LiAgVGhpcyBmaWVsZCBpcyBvbmx5IGZvciBpbmZvcm1hdGlvbiBwdXJwb3NlcyBhbmQgZG9lcyBub3QKKyAgYWZmZWN0IHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0gaW4gYW55IG1hbm5lci4KKworICAgIGRlZmxhdGUoKSByZXR1cm5zIFpfT0sgaWYgc29tZSBwcm9ncmVzcyBoYXMgYmVlbiBtYWRlIChtb3JlIGlucHV0CisgIHByb2Nlc3NlZCBvciBtb3JlIG91dHB1dCBwcm9kdWNlZCksIFpfU1RSRUFNX0VORCBpZiBhbGwgaW5wdXQgaGFzIGJlZW4KKyAgY29uc3VtZWQgYW5kIGFsbCBvdXRwdXQgaGFzIGJlZW4gcHJvZHVjZWQgKG9ubHkgd2hlbiBmbHVzaCBpcyBzZXQgdG8KKyAgWl9GSU5JU0gpLCBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc3RyZWFtIHN0YXRlIHdhcyBpbmNvbnNpc3RlbnQgKGZvciBleGFtcGxlCisgIGlmIG5leHRfaW4gb3IgbmV4dF9vdXQgd2FzIFpfTlVMTCBvciB0aGUgc3RhdGUgd2FzIGluYWR2ZXJ0ZW50bHkgd3JpdHRlbiBvdmVyCisgIGJ5IHRoZSBhcHBsaWNhdGlvbiksIG9yIFpfQlVGX0VSUk9SIGlmIG5vIHByb2dyZXNzIGlzIHBvc3NpYmxlIChmb3IgZXhhbXBsZQorICBhdmFpbF9pbiBvciBhdmFpbF9vdXQgd2FzIHplcm8pLiAgTm90ZSB0aGF0IFpfQlVGX0VSUk9SIGlzIG5vdCBmYXRhbCwgYW5kCisgIGRlZmxhdGUoKSBjYW4gYmUgY2FsbGVkIGFnYWluIHdpdGggbW9yZSBpbnB1dCBhbmQgbW9yZSBvdXRwdXQgc3BhY2UgdG8KKyAgY29udGludWUgY29tcHJlc3NpbmcuCisqLworCisKK1pFWFRFUk4gaW50IFpFWFBPUlQgZGVmbGF0ZUVuZCBPRigoel9zdHJlYW1wIHN0cm0pKTsKKy8qCisgICAgIEFsbCBkeW5hbWljYWxseSBhbGxvY2F0ZWQgZGF0YSBzdHJ1Y3R1cmVzIGZvciB0aGlzIHN0cmVhbSBhcmUgZnJlZWQuCisgICBUaGlzIGZ1bmN0aW9uIGRpc2NhcmRzIGFueSB1bnByb2Nlc3NlZCBpbnB1dCBhbmQgZG9lcyBub3QgZmx1c2ggYW55IHBlbmRpbmcKKyAgIG91dHB1dC4KKworICAgICBkZWZsYXRlRW5kIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBaX1NUUkVBTV9FUlJPUiBpZiB0aGUKKyAgIHN0cmVhbSBzdGF0ZSB3YXMgaW5jb25zaXN0ZW50LCBaX0RBVEFfRVJST1IgaWYgdGhlIHN0cmVhbSB3YXMgZnJlZWQKKyAgIHByZW1hdHVyZWx5IChzb21lIGlucHV0IG9yIG91dHB1dCB3YXMgZGlzY2FyZGVkKS4gIEluIHRoZSBlcnJvciBjYXNlLCBtc2cKKyAgIG1heSBiZSBzZXQgYnV0IHRoZW4gcG9pbnRzIHRvIGEgc3RhdGljIHN0cmluZyAod2hpY2ggbXVzdCBub3QgYmUKKyAgIGRlYWxsb2NhdGVkKS4KKyovCisKKworLyoKK1pFWFRFUk4gaW50IFpFWFBPUlQgaW5mbGF0ZUluaXQgT0YoKHpfc3RyZWFtcCBzdHJtKSk7CisKKyAgICAgSW5pdGlhbGl6ZXMgdGhlIGludGVybmFsIHN0cmVhbSBzdGF0ZSBmb3IgZGVjb21wcmVzc2lvbi4gIFRoZSBmaWVsZHMKKyAgIG5leHRfaW4sIGF2YWlsX2luLCB6YWxsb2MsIHpmcmVlIGFuZCBvcGFxdWUgbXVzdCBiZSBpbml0aWFsaXplZCBiZWZvcmUgYnkKKyAgIHRoZSBjYWxsZXIuICBJbiB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIGluZmxhdGUsIHRoZSBwcm92aWRlZCBpbnB1dCBpcyBub3QKKyAgIHJlYWQgb3IgY29uc3VtZWQuICBUaGUgYWxsb2NhdGlvbiBvZiBhIHNsaWRpbmcgd2luZG93IHdpbGwgYmUgZGVmZXJyZWQgdG8KKyAgIHRoZSBmaXJzdCBjYWxsIG9mIGluZmxhdGUgKGlmIHRoZSBkZWNvbXByZXNzaW9uIGRvZXMgbm90IGNvbXBsZXRlIG9uIHRoZQorICAgZmlyc3QgY2FsbCkuICBJZiB6YWxsb2MgYW5kIHpmcmVlIGFyZSBzZXQgdG8gWl9OVUxMLCBpbmZsYXRlSW5pdCB1cGRhdGVzCisgICB0aGVtIHRvIHVzZSBkZWZhdWx0IGFsbG9jYXRpb24gZnVuY3Rpb25zLgorCisgICAgIGluZmxhdGVJbml0IHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBaX01FTV9FUlJPUiBpZiB0aGVyZSB3YXMgbm90IGVub3VnaAorICAgbWVtb3J5LCBaX1ZFUlNJT05fRVJST1IgaWYgdGhlIHpsaWIgbGlicmFyeSB2ZXJzaW9uIGlzIGluY29tcGF0aWJsZSB3aXRoIHRoZQorICAgdmVyc2lvbiBhc3N1bWVkIGJ5IHRoZSBjYWxsZXIsIG9yIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBwYXJhbWV0ZXJzIGFyZQorICAgaW52YWxpZCwgc3VjaCBhcyBhIG51bGwgcG9pbnRlciB0byB0aGUgc3RydWN0dXJlLiAgbXNnIGlzIHNldCB0byBudWxsIGlmCisgICB0aGVyZSBpcyBubyBlcnJvciBtZXNzYWdlLiAgaW5mbGF0ZUluaXQgZG9lcyBub3QgcGVyZm9ybSBhbnkgZGVjb21wcmVzc2lvbi4KKyAgIEFjdHVhbCBkZWNvbXByZXNzaW9uIHdpbGwgYmUgZG9uZSBieSBpbmZsYXRlKCkuICBTbyBuZXh0X2luLCBhbmQgYXZhaWxfaW4sCisgICBuZXh0X291dCwgYW5kIGF2YWlsX291dCBhcmUgdW51c2VkIGFuZCB1bmNoYW5nZWQuICBUaGUgY3VycmVudAorICAgaW1wbGVtZW50YXRpb24gb2YgaW5mbGF0ZUluaXQoKSBkb2VzIG5vdCBwcm9jZXNzIGFueSBoZWFkZXIgaW5mb3JtYXRpb24gLS0KKyAgIHRoYXQgaXMgZGVmZXJyZWQgdW50aWwgaW5mbGF0ZSgpIGlzIGNhbGxlZC4KKyovCisKKworWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRlIE9GKCh6X3N0cmVhbXAgc3RybSwgaW50IGZsdXNoKSk7CisvKgorICAgIGluZmxhdGUgZGVjb21wcmVzc2VzIGFzIG11Y2ggZGF0YSBhcyBwb3NzaWJsZSwgYW5kIHN0b3BzIHdoZW4gdGhlIGlucHV0CisgIGJ1ZmZlciBiZWNvbWVzIGVtcHR5IG9yIHRoZSBvdXRwdXQgYnVmZmVyIGJlY29tZXMgZnVsbC4gIEl0IG1heSBpbnRyb2R1Y2UKKyAgc29tZSBvdXRwdXQgbGF0ZW5jeSAocmVhZGluZyBpbnB1dCB3aXRob3V0IHByb2R1Y2luZyBhbnkgb3V0cHV0KSBleGNlcHQgd2hlbgorICBmb3JjZWQgdG8gZmx1c2guCisKKyAgVGhlIGRldGFpbGVkIHNlbWFudGljcyBhcmUgYXMgZm9sbG93cy4gIGluZmxhdGUgcGVyZm9ybXMgb25lIG9yIGJvdGggb2YgdGhlCisgIGZvbGxvd2luZyBhY3Rpb25zOgorCisgIC0gRGVjb21wcmVzcyBtb3JlIGlucHV0IHN0YXJ0aW5nIGF0IG5leHRfaW4gYW5kIHVwZGF0ZSBuZXh0X2luIGFuZCBhdmFpbF9pbgorICAgIGFjY29yZGluZ2x5LiAgSWYgbm90IGFsbCBpbnB1dCBjYW4gYmUgcHJvY2Vzc2VkIChiZWNhdXNlIHRoZXJlIGlzIG5vdAorICAgIGVub3VnaCByb29tIGluIHRoZSBvdXRwdXQgYnVmZmVyKSwgdGhlbiBuZXh0X2luIGFuZCBhdmFpbF9pbiBhcmUgdXBkYXRlZAorICAgIGFjY29yZGluZ2x5LCBhbmQgcHJvY2Vzc2luZyB3aWxsIHJlc3VtZSBhdCB0aGlzIHBvaW50IGZvciB0aGUgbmV4dCBjYWxsIG9mCisgICAgaW5mbGF0ZSgpLgorCisgIC0gR2VuZXJhdGUgbW9yZSBvdXRwdXQgc3RhcnRpbmcgYXQgbmV4dF9vdXQgYW5kIHVwZGF0ZSBuZXh0X291dCBhbmQgYXZhaWxfb3V0CisgICAgYWNjb3JkaW5nbHkuICBpbmZsYXRlKCkgcHJvdmlkZXMgYXMgbXVjaCBvdXRwdXQgYXMgcG9zc2libGUsIHVudGlsIHRoZXJlIGlzCisgICAgbm8gbW9yZSBpbnB1dCBkYXRhIG9yIG5vIG1vcmUgc3BhY2UgaW4gdGhlIG91dHB1dCBidWZmZXIgKHNlZSBiZWxvdyBhYm91dAorICAgIHRoZSBmbHVzaCBwYXJhbWV0ZXIpLgorCisgICAgQmVmb3JlIHRoZSBjYWxsIG9mIGluZmxhdGUoKSwgdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBlbnN1cmUgdGhhdCBhdCBsZWFzdAorICBvbmUgb2YgdGhlIGFjdGlvbnMgaXMgcG9zc2libGUsIGJ5IHByb3ZpZGluZyBtb3JlIGlucHV0IGFuZC9vciBjb25zdW1pbmcgbW9yZQorICBvdXRwdXQsIGFuZCB1cGRhdGluZyB0aGUgbmV4dF8qIGFuZCBhdmFpbF8qIHZhbHVlcyBhY2NvcmRpbmdseS4gIElmIHRoZQorICBjYWxsZXIgb2YgaW5mbGF0ZSgpIGRvZXMgbm90IHByb3ZpZGUgYm90aCBhdmFpbGFibGUgaW5wdXQgYW5kIGF2YWlsYWJsZQorICBvdXRwdXQgc3BhY2UsIGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlcmUgd2lsbCBiZSBubyBwcm9ncmVzcyBtYWRlLiAgVGhlCisgIGFwcGxpY2F0aW9uIGNhbiBjb25zdW1lIHRoZSB1bmNvbXByZXNzZWQgb3V0cHV0IHdoZW4gaXQgd2FudHMsIGZvciBleGFtcGxlCisgIHdoZW4gdGhlIG91dHB1dCBidWZmZXIgaXMgZnVsbCAoYXZhaWxfb3V0ID09IDApLCBvciBhZnRlciBlYWNoIGNhbGwgb2YKKyAgaW5mbGF0ZSgpLiAgSWYgaW5mbGF0ZSByZXR1cm5zIFpfT0sgYW5kIHdpdGggemVybyBhdmFpbF9vdXQsIGl0IG11c3QgYmUKKyAgY2FsbGVkIGFnYWluIGFmdGVyIG1ha2luZyByb29tIGluIHRoZSBvdXRwdXQgYnVmZmVyIGJlY2F1c2UgdGhlcmUgbWlnaHQgYmUKKyAgbW9yZSBvdXRwdXQgcGVuZGluZy4KKworICAgIFRoZSBmbHVzaCBwYXJhbWV0ZXIgb2YgaW5mbGF0ZSgpIGNhbiBiZSBaX05PX0ZMVVNILCBaX1NZTkNfRkxVU0gsIFpfRklOSVNILAorICBaX0JMT0NLLCBvciBaX1RSRUVTLiAgWl9TWU5DX0ZMVVNIIHJlcXVlc3RzIHRoYXQgaW5mbGF0ZSgpIGZsdXNoIGFzIG11Y2gKKyAgb3V0cHV0IGFzIHBvc3NpYmxlIHRvIHRoZSBvdXRwdXQgYnVmZmVyLiAgWl9CTE9DSyByZXF1ZXN0cyB0aGF0IGluZmxhdGUoKQorICBzdG9wIGlmIGFuZCB3aGVuIGl0IGdldHMgdG8gdGhlIG5leHQgZGVmbGF0ZSBibG9jayBib3VuZGFyeS4gIFdoZW4gZGVjb2RpbmcKKyAgdGhlIHpsaWIgb3IgZ3ppcCBmb3JtYXQsIHRoaXMgd2lsbCBjYXVzZSBpbmZsYXRlKCkgdG8gcmV0dXJuIGltbWVkaWF0ZWx5CisgIGFmdGVyIHRoZSBoZWFkZXIgYW5kIGJlZm9yZSB0aGUgZmlyc3QgYmxvY2suICBXaGVuIGRvaW5nIGEgcmF3IGluZmxhdGUsCisgIGluZmxhdGUoKSB3aWxsIGdvIGFoZWFkIGFuZCBwcm9jZXNzIHRoZSBmaXJzdCBibG9jaywgYW5kIHdpbGwgcmV0dXJuIHdoZW4gaXQKKyAgZ2V0cyB0byB0aGUgZW5kIG9mIHRoYXQgYmxvY2ssIG9yIHdoZW4gaXQgcnVucyBvdXQgb2YgZGF0YS4KKworICAgIFRoZSBaX0JMT0NLIG9wdGlvbiBhc3Npc3RzIGluIGFwcGVuZGluZyB0byBvciBjb21iaW5pbmcgZGVmbGF0ZSBzdHJlYW1zLgorICBUbyBhc3Npc3QgaW4gdGhpcywgb24gcmV0dXJuIGluZmxhdGUoKSBhbHdheXMgc2V0cyBzdHJtLT5kYXRhX3R5cGUgdG8gdGhlCisgIG51bWJlciBvZiB1bnVzZWQgYml0cyBpbiB0aGUgbGFzdCBieXRlIHRha2VuIGZyb20gc3RybS0+bmV4dF9pbiwgcGx1cyA2NCBpZgorICBpbmZsYXRlKCkgaXMgY3VycmVudGx5IGRlY29kaW5nIHRoZSBsYXN0IGJsb2NrIGluIHRoZSBkZWZsYXRlIHN0cmVhbSwgcGx1cworICAxMjggaWYgaW5mbGF0ZSgpIHJldHVybmVkIGltbWVkaWF0ZWx5IGFmdGVyIGRlY29kaW5nIGFuIGVuZC1vZi1ibG9jayBjb2RlIG9yCisgIGRlY29kaW5nIHRoZSBjb21wbGV0ZSBoZWFkZXIgdXAgdG8ganVzdCBiZWZvcmUgdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIGRlZmxhdGUKKyAgc3RyZWFtLiAgVGhlIGVuZC1vZi1ibG9jayB3aWxsIG5vdCBiZSBpbmRpY2F0ZWQgdW50aWwgYWxsIG9mIHRoZSB1bmNvbXByZXNzZWQKKyAgZGF0YSBmcm9tIHRoYXQgYmxvY2sgaGFzIGJlZW4gd3JpdHRlbiB0byBzdHJtLT5uZXh0X291dC4gIFRoZSBudW1iZXIgb2YKKyAgdW51c2VkIGJpdHMgbWF5IGluIGdlbmVyYWwgYmUgZ3JlYXRlciB0aGFuIHNldmVuLCBleGNlcHQgd2hlbiBiaXQgNyBvZgorICBkYXRhX3R5cGUgaXMgc2V0LCBpbiB3aGljaCBjYXNlIHRoZSBudW1iZXIgb2YgdW51c2VkIGJpdHMgd2lsbCBiZSBsZXNzIHRoYW4KKyAgZWlnaHQuICBkYXRhX3R5cGUgaXMgc2V0IGFzIG5vdGVkIGhlcmUgZXZlcnkgdGltZSBpbmZsYXRlKCkgcmV0dXJucyBmb3IgYWxsCisgIGZsdXNoIG9wdGlvbnMsIGFuZCBzbyBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIGFtb3VudCBvZiBjdXJyZW50bHkKKyAgY29uc3VtZWQgaW5wdXQgaW4gYml0cy4KKworICAgIFRoZSBaX1RSRUVTIG9wdGlvbiBiZWhhdmVzIGFzIFpfQkxPQ0sgZG9lcywgYnV0IGl0IGFsc28gcmV0dXJucyB3aGVuIHRoZQorICBlbmQgb2YgZWFjaCBkZWZsYXRlIGJsb2NrIGhlYWRlciBpcyByZWFjaGVkLCBiZWZvcmUgYW55IGFjdHVhbCBkYXRhIGluIHRoYXQKKyAgYmxvY2sgaXMgZGVjb2RlZC4gIFRoaXMgYWxsb3dzIHRoZSBjYWxsZXIgdG8gZGV0ZXJtaW5lIHRoZSBsZW5ndGggb2YgdGhlCisgIGRlZmxhdGUgYmxvY2sgaGVhZGVyIGZvciBsYXRlciB1c2UgaW4gcmFuZG9tIGFjY2VzcyB3aXRoaW4gYSBkZWZsYXRlIGJsb2NrLgorICAyNTYgaXMgYWRkZWQgdG8gdGhlIHZhbHVlIG9mIHN0cm0tPmRhdGFfdHlwZSB3aGVuIGluZmxhdGUoKSByZXR1cm5zCisgIGltbWVkaWF0ZWx5IGFmdGVyIHJlYWNoaW5nIHRoZSBlbmQgb2YgdGhlIGRlZmxhdGUgYmxvY2sgaGVhZGVyLgorCisgICAgaW5mbGF0ZSgpIHNob3VsZCBub3JtYWxseSBiZSBjYWxsZWQgdW50aWwgaXQgcmV0dXJucyBaX1NUUkVBTV9FTkQgb3IgYW4KKyAgZXJyb3IuICBIb3dldmVyIGlmIGFsbCBkZWNvbXByZXNzaW9uIGlzIHRvIGJlIHBlcmZvcm1lZCBpbiBhIHNpbmdsZSBzdGVwIChhCisgIHNpbmdsZSBjYWxsIG9mIGluZmxhdGUpLCB0aGUgcGFyYW1ldGVyIGZsdXNoIHNob3VsZCBiZSBzZXQgdG8gWl9GSU5JU0guICBJbgorICB0aGlzIGNhc2UgYWxsIHBlbmRpbmcgaW5wdXQgaXMgcHJvY2Vzc2VkIGFuZCBhbGwgcGVuZGluZyBvdXRwdXQgaXMgZmx1c2hlZDsKKyAgYXZhaWxfb3V0IG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYWxsIG9mIHRoZSB1bmNvbXByZXNzZWQgZGF0YSBmb3IgdGhlCisgIG9wZXJhdGlvbiB0byBjb21wbGV0ZS4gIChUaGUgc2l6ZSBvZiB0aGUgdW5jb21wcmVzc2VkIGRhdGEgbWF5IGhhdmUgYmVlbgorICBzYXZlZCBieSB0aGUgY29tcHJlc3NvciBmb3IgdGhpcyBwdXJwb3NlLikgIFRoZSB1c2Ugb2YgWl9GSU5JU0ggaXMgbm90CisgIHJlcXVpcmVkIHRvIHBlcmZvcm0gYW4gaW5mbGF0aW9uIGluIG9uZSBzdGVwLiAgSG93ZXZlciBpdCBtYXkgYmUgdXNlZCB0bworICBpbmZvcm0gaW5mbGF0ZSB0aGF0IGEgZmFzdGVyIGFwcHJvYWNoIGNhbiBiZSB1c2VkIGZvciB0aGUgc2luZ2xlIGluZmxhdGUoKQorICBjYWxsLiAgWl9GSU5JU0ggYWxzbyBpbmZvcm1zIGluZmxhdGUgdG8gbm90IG1haW50YWluIGEgc2xpZGluZyB3aW5kb3cgaWYgdGhlCisgIHN0cmVhbSBjb21wbGV0ZXMsIHdoaWNoIHJlZHVjZXMgaW5mbGF0ZSdzIG1lbW9yeSBmb290cHJpbnQuICBJZiB0aGUgc3RyZWFtCisgIGRvZXMgbm90IGNvbXBsZXRlLCBlaXRoZXIgYmVjYXVzZSBub3QgYWxsIG9mIHRoZSBzdHJlYW0gaXMgcHJvdmlkZWQgb3Igbm90CisgIGVub3VnaCBvdXRwdXQgc3BhY2UgaXMgcHJvdmlkZWQsIHRoZW4gYSBzbGlkaW5nIHdpbmRvdyB3aWxsIGJlIGFsbG9jYXRlZCBhbmQKKyAgaW5mbGF0ZSgpIGNhbiBiZSBjYWxsZWQgYWdhaW4gdG8gY29udGludWUgdGhlIG9wZXJhdGlvbiBhcyBpZiBaX05PX0ZMVVNIIGhhZAorICBiZWVuIHVzZWQuCisKKyAgICAgSW4gdGhpcyBpbXBsZW1lbnRhdGlvbiwgaW5mbGF0ZSgpIGFsd2F5cyBmbHVzaGVzIGFzIG11Y2ggb3V0cHV0IGFzCisgIHBvc3NpYmxlIHRvIHRoZSBvdXRwdXQgYnVmZmVyLCBhbmQgYWx3YXlzIHVzZXMgdGhlIGZhc3RlciBhcHByb2FjaCBvbiB0aGUKKyAgZmlyc3QgY2FsbC4gIFNvIHRoZSBlZmZlY3RzIG9mIHRoZSBmbHVzaCBwYXJhbWV0ZXIgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbiBhcmUKKyAgb24gdGhlIHJldHVybiB2YWx1ZSBvZiBpbmZsYXRlKCkgYXMgbm90ZWQgYmVsb3csIHdoZW4gaW5mbGF0ZSgpIHJldHVybnMgZWFybHkKKyAgd2hlbiBaX0JMT0NLIG9yIFpfVFJFRVMgaXMgdXNlZCwgYW5kIHdoZW4gaW5mbGF0ZSgpIGF2b2lkcyB0aGUgYWxsb2NhdGlvbiBvZgorICBtZW1vcnkgZm9yIGEgc2xpZGluZyB3aW5kb3cgd2hlbiBaX0ZJTklTSCBpcyB1c2VkLgorCisgICAgIElmIGEgcHJlc2V0IGRpY3Rpb25hcnkgaXMgbmVlZGVkIGFmdGVyIHRoaXMgY2FsbCAoc2VlIGluZmxhdGVTZXREaWN0aW9uYXJ5CisgIGJlbG93KSwgaW5mbGF0ZSBzZXRzIHN0cm0tPmFkbGVyIHRvIHRoZSBBZGxlci0zMiBjaGVja3N1bSBvZiB0aGUgZGljdGlvbmFyeQorICBjaG9zZW4gYnkgdGhlIGNvbXByZXNzb3IgYW5kIHJldHVybnMgWl9ORUVEX0RJQ1Q7IG90aGVyd2lzZSBpdCBzZXRzCisgIHN0cm0tPmFkbGVyIHRvIHRoZSBBZGxlci0zMiBjaGVja3N1bSBvZiBhbGwgb3V0cHV0IHByb2R1Y2VkIHNvIGZhciAodGhhdCBpcywKKyAgdG90YWxfb3V0IGJ5dGVzKSBhbmQgcmV0dXJucyBaX09LLCBaX1NUUkVBTV9FTkQgb3IgYW4gZXJyb3IgY29kZSBhcyBkZXNjcmliZWQKKyAgYmVsb3cuICBBdCB0aGUgZW5kIG9mIHRoZSBzdHJlYW0sIGluZmxhdGUoKSBjaGVja3MgdGhhdCBpdHMgY29tcHV0ZWQgQWRsZXItMzIKKyAgY2hlY2tzdW0gaXMgZXF1YWwgdG8gdGhhdCBzYXZlZCBieSB0aGUgY29tcHJlc3NvciBhbmQgcmV0dXJucyBaX1NUUkVBTV9FTkQKKyAgb25seSBpZiB0aGUgY2hlY2tzdW0gaXMgY29ycmVjdC4KKworICAgIGluZmxhdGUoKSBjYW4gZGVjb21wcmVzcyBhbmQgY2hlY2sgZWl0aGVyIHpsaWItd3JhcHBlZCBvciBnemlwLXdyYXBwZWQKKyAgZGVmbGF0ZSBkYXRhLiAgVGhlIGhlYWRlciB0eXBlIGlzIGRldGVjdGVkIGF1dG9tYXRpY2FsbHksIGlmIHJlcXVlc3RlZCB3aGVuCisgIGluaXRpYWxpemluZyB3aXRoIGluZmxhdGVJbml0MigpLiAgQW55IGluZm9ybWF0aW9uIGNvbnRhaW5lZCBpbiB0aGUgZ3ppcAorICBoZWFkZXIgaXMgbm90IHJldGFpbmVkIHVubGVzcyBpbmZsYXRlR2V0SGVhZGVyKCkgaXMgdXNlZC4gIFdoZW4gcHJvY2Vzc2luZworICBnemlwLXdyYXBwZWQgZGVmbGF0ZSBkYXRhLCBzdHJtLT5hZGxlcjMyIGlzIHNldCB0byB0aGUgQ1JDLTMyIG9mIHRoZSBvdXRwdXQKKyAgcHJvZHVjZWQgc28gZmFyLiAgVGhlIENSQy0zMiBpcyBjaGVja2VkIGFnYWluc3QgdGhlIGd6aXAgdHJhaWxlciwgYXMgaXMgdGhlCisgIHVuY29tcHJlc3NlZCBsZW5ndGgsIG1vZHVsbyAyXjMyLgorCisgICAgaW5mbGF0ZSgpIHJldHVybnMgWl9PSyBpZiBzb21lIHByb2dyZXNzIGhhcyBiZWVuIG1hZGUgKG1vcmUgaW5wdXQgcHJvY2Vzc2VkCisgIG9yIG1vcmUgb3V0cHV0IHByb2R1Y2VkKSwgWl9TVFJFQU1fRU5EIGlmIHRoZSBlbmQgb2YgdGhlIGNvbXByZXNzZWQgZGF0YSBoYXMKKyAgYmVlbiByZWFjaGVkIGFuZCBhbGwgdW5jb21wcmVzc2VkIG91dHB1dCBoYXMgYmVlbiBwcm9kdWNlZCwgWl9ORUVEX0RJQ1QgaWYgYQorICBwcmVzZXQgZGljdGlvbmFyeSBpcyBuZWVkZWQgYXQgdGhpcyBwb2ludCwgWl9EQVRBX0VSUk9SIGlmIHRoZSBpbnB1dCBkYXRhIHdhcworICBjb3JydXB0ZWQgKGlucHV0IHN0cmVhbSBub3QgY29uZm9ybWluZyB0byB0aGUgemxpYiBmb3JtYXQgb3IgaW5jb3JyZWN0IGNoZWNrCisgIHZhbHVlLCBpbiB3aGljaCBjYXNlIHN0cm0tPm1zZyBwb2ludHMgdG8gYSBzdHJpbmcgd2l0aCBhIG1vcmUgc3BlY2lmaWMKKyAgZXJyb3IpLCBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc3RyZWFtIHN0cnVjdHVyZSB3YXMgaW5jb25zaXN0ZW50IChmb3IgZXhhbXBsZQorICBuZXh0X2luIG9yIG5leHRfb3V0IHdhcyBaX05VTEwsIG9yIHRoZSBzdGF0ZSB3YXMgaW5hZHZlcnRlbnRseSB3cml0dGVuIG92ZXIKKyAgYnkgdGhlIGFwcGxpY2F0aW9uKSwgWl9NRU1fRVJST1IgaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2ggbWVtb3J5LCBaX0JVRl9FUlJPUgorICBpZiBubyBwcm9ncmVzcyB3YXMgcG9zc2libGUgb3IgaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2ggcm9vbSBpbiB0aGUgb3V0cHV0CisgIGJ1ZmZlciB3aGVuIFpfRklOSVNIIGlzIHVzZWQuICBOb3RlIHRoYXQgWl9CVUZfRVJST1IgaXMgbm90IGZhdGFsLCBhbmQKKyAgaW5mbGF0ZSgpIGNhbiBiZSBjYWxsZWQgYWdhaW4gd2l0aCBtb3JlIGlucHV0IGFuZCBtb3JlIG91dHB1dCBzcGFjZSB0bworICBjb250aW51ZSBkZWNvbXByZXNzaW5nLiAgSWYgWl9EQVRBX0VSUk9SIGlzIHJldHVybmVkLCB0aGUgYXBwbGljYXRpb24gbWF5CisgIHRoZW4gY2FsbCBpbmZsYXRlU3luYygpIHRvIGxvb2sgZm9yIGEgZ29vZCBjb21wcmVzc2lvbiBibG9jayBpZiBhIHBhcnRpYWwKKyAgcmVjb3Zlcnkgb2YgdGhlIGRhdGEgaXMgdG8gYmUgYXR0ZW1wdGVkLgorKi8KKworCitaRVhURVJOIGludCBaRVhQT1JUIGluZmxhdGVFbmQgT0YoKHpfc3RyZWFtcCBzdHJtKSk7CisvKgorICAgICBBbGwgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGRhdGEgc3RydWN0dXJlcyBmb3IgdGhpcyBzdHJlYW0gYXJlIGZyZWVkLgorICAgVGhpcyBmdW5jdGlvbiBkaXNjYXJkcyBhbnkgdW5wcm9jZXNzZWQgaW5wdXQgYW5kIGRvZXMgbm90IGZsdXNoIGFueSBwZW5kaW5nCisgICBvdXRwdXQuCisKKyAgICAgaW5mbGF0ZUVuZCByZXR1cm5zIFpfT0sgaWYgc3VjY2Vzcywgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHN0cmVhbSBzdGF0ZQorICAgd2FzIGluY29uc2lzdGVudC4KKyovCisKKworICAgICAgICAgICAgICAgICAgICAgICAgLyogQWR2YW5jZWQgZnVuY3Rpb25zICovCisKKy8qCisgICAgVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIG5lZWRlZCBvbmx5IGluIHNvbWUgc3BlY2lhbCBhcHBsaWNhdGlvbnMuCisqLworCisvKgorWkVYVEVSTiBpbnQgWkVYUE9SVCBkZWZsYXRlSW5pdDIgT0YoKHpfc3RyZWFtcCBzdHJtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBtZXRob2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICB3aW5kb3dCaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgbWVtTGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBzdHJhdGVneSkpOworCisgICAgIFRoaXMgaXMgYW5vdGhlciB2ZXJzaW9uIG9mIGRlZmxhdGVJbml0IHdpdGggbW9yZSBjb21wcmVzc2lvbiBvcHRpb25zLiAgVGhlCisgICBmaWVsZHMgemFsbG9jLCB6ZnJlZSBhbmQgb3BhcXVlIG11c3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGJ5IHRoZSBjYWxsZXIuCisKKyAgICAgVGhlIG1ldGhvZCBwYXJhbWV0ZXIgaXMgdGhlIGNvbXByZXNzaW9uIG1ldGhvZC4gIEl0IG11c3QgYmUgWl9ERUZMQVRFRCBpbgorICAgdGhpcyB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LgorCisgICAgIFRoZSB3aW5kb3dCaXRzIHBhcmFtZXRlciBpcyB0aGUgYmFzZSB0d28gbG9nYXJpdGhtIG9mIHRoZSB3aW5kb3cgc2l6ZQorICAgKHRoZSBzaXplIG9mIHRoZSBoaXN0b3J5IGJ1ZmZlcikuICBJdCBzaG91bGQgYmUgaW4gdGhlIHJhbmdlIDguLjE1IGZvciB0aGlzCisgICB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LiAgTGFyZ2VyIHZhbHVlcyBvZiB0aGlzIHBhcmFtZXRlciByZXN1bHQgaW4gYmV0dGVyCisgICBjb21wcmVzc2lvbiBhdCB0aGUgZXhwZW5zZSBvZiBtZW1vcnkgdXNhZ2UuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxNSBpZgorICAgZGVmbGF0ZUluaXQgaXMgdXNlZCBpbnN0ZWFkLgorCisgICAgIEZvciB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiBkZWZsYXRlKCksIGEgd2luZG93Qml0cyB2YWx1ZSBvZiA4IChhCisgICB3aW5kb3cgc2l6ZSBvZiAyNTYgYnl0ZXMpIGlzIG5vdCBzdXBwb3J0ZWQuICBBcyBhIHJlc3VsdCwgYSByZXF1ZXN0IGZvciA4CisgICB3aWxsIHJlc3VsdCBpbiA5IChhIDUxMi1ieXRlIHdpbmRvdykuICBJbiB0aGF0IGNhc2UsIHByb3ZpZGluZyA4IHRvCisgICBpbmZsYXRlSW5pdDIoKSB3aWxsIHJlc3VsdCBpbiBhbiBlcnJvciB3aGVuIHRoZSB6bGliIGhlYWRlciB3aXRoIDkgaXMKKyAgIGNoZWNrZWQgYWdhaW5zdCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgaW5mbGF0ZSgpLiAgVGhlIHJlbWVkeSBpcyB0byBub3QgdXNlIDgKKyAgIHdpdGggZGVmbGF0ZUluaXQyKCkgd2l0aCB0aGlzIGluaXRpYWxpemF0aW9uLCBvciBhdCBsZWFzdCBpbiB0aGF0IGNhc2UgdXNlIDkKKyAgIHdpdGggaW5mbGF0ZUluaXQyKCkuCisKKyAgICAgd2luZG93Qml0cyBjYW4gYWxzbyBiZSAtOC4uLTE1IGZvciByYXcgZGVmbGF0ZS4gIEluIHRoaXMgY2FzZSwgLXdpbmRvd0JpdHMKKyAgIGRldGVybWluZXMgdGhlIHdpbmRvdyBzaXplLiAgZGVmbGF0ZSgpIHdpbGwgdGhlbiBnZW5lcmF0ZSByYXcgZGVmbGF0ZSBkYXRhCisgICB3aXRoIG5vIHpsaWIgaGVhZGVyIG9yIHRyYWlsZXIsIGFuZCB3aWxsIG5vdCBjb21wdXRlIGEgY2hlY2sgdmFsdWUuCisKKyAgICAgd2luZG93Qml0cyBjYW4gYWxzbyBiZSBncmVhdGVyIHRoYW4gMTUgZm9yIG9wdGlvbmFsIGd6aXAgZW5jb2RpbmcuICBBZGQKKyAgIDE2IHRvIHdpbmRvd0JpdHMgdG8gd3JpdGUgYSBzaW1wbGUgZ3ppcCBoZWFkZXIgYW5kIHRyYWlsZXIgYXJvdW5kIHRoZQorICAgY29tcHJlc3NlZCBkYXRhIGluc3RlYWQgb2YgYSB6bGliIHdyYXBwZXIuICBUaGUgZ3ppcCBoZWFkZXIgd2lsbCBoYXZlIG5vCisgICBmaWxlIG5hbWUsIG5vIGV4dHJhIGRhdGEsIG5vIGNvbW1lbnQsIG5vIG1vZGlmaWNhdGlvbiB0aW1lIChzZXQgdG8gemVybyksIG5vCisgICBoZWFkZXIgY3JjLCBhbmQgdGhlIG9wZXJhdGluZyBzeXN0ZW0gd2lsbCBiZSBzZXQgdG8gdGhlIGFwcHJvcHJpYXRlIHZhbHVlLAorICAgaWYgdGhlIG9wZXJhdGluZyBzeXN0ZW0gd2FzIGRldGVybWluZWQgYXQgY29tcGlsZSB0aW1lLiAgSWYgYSBnemlwIHN0cmVhbSBpcworICAgYmVpbmcgd3JpdHRlbiwgc3RybS0+YWRsZXIgaXMgYSBDUkMtMzIgaW5zdGVhZCBvZiBhbiBBZGxlci0zMi4KKworICAgICBGb3IgcmF3IGRlZmxhdGUgb3IgZ3ppcCBlbmNvZGluZywgYSByZXF1ZXN0IGZvciBhIDI1Ni1ieXRlIHdpbmRvdyBpcworICAgcmVqZWN0ZWQgYXMgaW52YWxpZCwgc2luY2Ugb25seSB0aGUgemxpYiBoZWFkZXIgcHJvdmlkZXMgYSBtZWFucyBvZgorICAgdHJhbnNtaXR0aW5nIHRoZSB3aW5kb3cgc2l6ZSB0byB0aGUgZGVjb21wcmVzc29yLgorCisgICAgIFRoZSBtZW1MZXZlbCBwYXJhbWV0ZXIgc3BlY2lmaWVzIGhvdyBtdWNoIG1lbW9yeSBzaG91bGQgYmUgYWxsb2NhdGVkCisgICBmb3IgdGhlIGludGVybmFsIGNvbXByZXNzaW9uIHN0YXRlLiAgbWVtTGV2ZWw9MSB1c2VzIG1pbmltdW0gbWVtb3J5IGJ1dCBpcworICAgc2xvdyBhbmQgcmVkdWNlcyBjb21wcmVzc2lvbiByYXRpbzsgbWVtTGV2ZWw9OSB1c2VzIG1heGltdW0gbWVtb3J5IGZvcgorICAgb3B0aW1hbCBzcGVlZC4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDguICBTZWUgemNvbmYuaCBmb3IgdG90YWwgbWVtb3J5IHVzYWdlCisgICBhcyBhIGZ1bmN0aW9uIG9mIHdpbmRvd0JpdHMgYW5kIG1lbUxldmVsLgorCisgICAgIFRoZSBzdHJhdGVneSBwYXJhbWV0ZXIgaXMgdXNlZCB0byB0dW5lIHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0uICBVc2UgdGhlCisgICB2YWx1ZSBaX0RFRkFVTFRfU1RSQVRFR1kgZm9yIG5vcm1hbCBkYXRhLCBaX0ZJTFRFUkVEIGZvciBkYXRhIHByb2R1Y2VkIGJ5IGEKKyAgIGZpbHRlciAob3IgcHJlZGljdG9yKSwgWl9IVUZGTUFOX09OTFkgdG8gZm9yY2UgSHVmZm1hbiBlbmNvZGluZyBvbmx5IChubworICAgc3RyaW5nIG1hdGNoKSwgb3IgWl9STEUgdG8gbGltaXQgbWF0Y2ggZGlzdGFuY2VzIHRvIG9uZSAocnVuLWxlbmd0aAorICAgZW5jb2RpbmcpLiAgRmlsdGVyZWQgZGF0YSBjb25zaXN0cyBtb3N0bHkgb2Ygc21hbGwgdmFsdWVzIHdpdGggYSBzb21ld2hhdAorICAgcmFuZG9tIGRpc3RyaWJ1dGlvbi4gIEluIHRoaXMgY2FzZSwgdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobSBpcyB0dW5lZCB0bworICAgY29tcHJlc3MgdGhlbSBiZXR0ZXIuICBUaGUgZWZmZWN0IG9mIFpfRklMVEVSRUQgaXMgdG8gZm9yY2UgbW9yZSBIdWZmbWFuCisgICBjb2RpbmcgYW5kIGxlc3Mgc3RyaW5nIG1hdGNoaW5nOyBpdCBpcyBzb21ld2hhdCBpbnRlcm1lZGlhdGUgYmV0d2VlbgorICAgWl9ERUZBVUxUX1NUUkFURUdZIGFuZCBaX0hVRkZNQU5fT05MWS4gIFpfUkxFIGlzIGRlc2lnbmVkIHRvIGJlIGFsbW9zdCBhcworICAgZmFzdCBhcyBaX0hVRkZNQU5fT05MWSwgYnV0IGdpdmUgYmV0dGVyIGNvbXByZXNzaW9uIGZvciBQTkcgaW1hZ2UgZGF0YS4gIFRoZQorICAgc3RyYXRlZ3kgcGFyYW1ldGVyIG9ubHkgYWZmZWN0cyB0aGUgY29tcHJlc3Npb24gcmF0aW8gYnV0IG5vdCB0aGUKKyAgIGNvcnJlY3RuZXNzIG9mIHRoZSBjb21wcmVzc2VkIG91dHB1dCBldmVuIGlmIGl0IGlzIG5vdCBzZXQgYXBwcm9wcmlhdGVseS4KKyAgIFpfRklYRUQgcHJldmVudHMgdGhlIHVzZSBvZiBkeW5hbWljIEh1ZmZtYW4gY29kZXMsIGFsbG93aW5nIGZvciBhIHNpbXBsZXIKKyAgIGRlY29kZXIgZm9yIHNwZWNpYWwgYXBwbGljYXRpb25zLgorCisgICAgIGRlZmxhdGVJbml0MiByZXR1cm5zIFpfT0sgaWYgc3VjY2VzcywgWl9NRU1fRVJST1IgaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2gKKyAgIG1lbW9yeSwgWl9TVFJFQU1fRVJST1IgaWYgYW55IHBhcmFtZXRlciBpcyBpbnZhbGlkIChzdWNoIGFzIGFuIGludmFsaWQKKyAgIG1ldGhvZCksIG9yIFpfVkVSU0lPTl9FUlJPUiBpZiB0aGUgemxpYiBsaWJyYXJ5IHZlcnNpb24gKHpsaWJfdmVyc2lvbikgaXMKKyAgIGluY29tcGF0aWJsZSB3aXRoIHRoZSB2ZXJzaW9uIGFzc3VtZWQgYnkgdGhlIGNhbGxlciAoWkxJQl9WRVJTSU9OKS4gIG1zZyBpcworICAgc2V0IHRvIG51bGwgaWYgdGhlcmUgaXMgbm8gZXJyb3IgbWVzc2FnZS4gIGRlZmxhdGVJbml0MiBkb2VzIG5vdCBwZXJmb3JtIGFueQorICAgY29tcHJlc3Npb246IHRoaXMgd2lsbCBiZSBkb25lIGJ5IGRlZmxhdGUoKS4KKyovCisKK1pFWFRFUk4gaW50IFpFWFBPUlQgZGVmbGF0ZVNldERpY3Rpb25hcnkgT0YoKHpfc3RyZWFtcCBzdHJtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQnl0ZWYgKmRpY3Rpb25hcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1SW50ICBkaWN0TGVuZ3RoKSk7CisvKgorICAgICBJbml0aWFsaXplcyB0aGUgY29tcHJlc3Npb24gZGljdGlvbmFyeSBmcm9tIHRoZSBnaXZlbiBieXRlIHNlcXVlbmNlCisgICB3aXRob3V0IHByb2R1Y2luZyBhbnkgY29tcHJlc3NlZCBvdXRwdXQuICBXaGVuIHVzaW5nIHRoZSB6bGliIGZvcm1hdCwgdGhpcworICAgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgZGVmbGF0ZUluaXQsIGRlZmxhdGVJbml0MiBvcgorICAgZGVmbGF0ZVJlc2V0LCBhbmQgYmVmb3JlIGFueSBjYWxsIG9mIGRlZmxhdGUuICBXaGVuIGRvaW5nIHJhdyBkZWZsYXRlLCB0aGlzCisgICBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBlaXRoZXIgYmVmb3JlIGFueSBjYWxsIG9mIGRlZmxhdGUsIG9yIGltbWVkaWF0ZWx5CisgICBhZnRlciB0aGUgY29tcGxldGlvbiBvZiBhIGRlZmxhdGUgYmxvY2ssIGkuZS4gYWZ0ZXIgYWxsIGlucHV0IGhhcyBiZWVuCisgICBjb25zdW1lZCBhbmQgYWxsIG91dHB1dCBoYXMgYmVlbiBkZWxpdmVyZWQgd2hlbiB1c2luZyBhbnkgb2YgdGhlIGZsdXNoCisgICBvcHRpb25zIFpfQkxPQ0ssIFpfUEFSVElBTF9GTFVTSCwgWl9TWU5DX0ZMVVNILCBvciBaX0ZVTExfRkxVU0guICBUaGUKKyAgIGNvbXByZXNzb3IgYW5kIGRlY29tcHJlc3NvciBtdXN0IHVzZSBleGFjdGx5IHRoZSBzYW1lIGRpY3Rpb25hcnkgKHNlZQorICAgaW5mbGF0ZVNldERpY3Rpb25hcnkpLgorCisgICAgIFRoZSBkaWN0aW9uYXJ5IHNob3VsZCBjb25zaXN0IG9mIHN0cmluZ3MgKGJ5dGUgc2VxdWVuY2VzKSB0aGF0IGFyZSBsaWtlbHkKKyAgIHRvIGJlIGVuY291bnRlcmVkIGxhdGVyIGluIHRoZSBkYXRhIHRvIGJlIGNvbXByZXNzZWQsIHdpdGggdGhlIG1vc3QgY29tbW9ubHkKKyAgIHVzZWQgc3RyaW5ncyBwcmVmZXJhYmx5IHB1dCB0b3dhcmRzIHRoZSBlbmQgb2YgdGhlIGRpY3Rpb25hcnkuICBVc2luZyBhCisgICBkaWN0aW9uYXJ5IGlzIG1vc3QgdXNlZnVsIHdoZW4gdGhlIGRhdGEgdG8gYmUgY29tcHJlc3NlZCBpcyBzaG9ydCBhbmQgY2FuIGJlCisgICBwcmVkaWN0ZWQgd2l0aCBnb29kIGFjY3VyYWN5OyB0aGUgZGF0YSBjYW4gdGhlbiBiZSBjb21wcmVzc2VkIGJldHRlciB0aGFuCisgICB3aXRoIHRoZSBkZWZhdWx0IGVtcHR5IGRpY3Rpb25hcnkuCisKKyAgICAgRGVwZW5kaW5nIG9uIHRoZSBzaXplIG9mIHRoZSBjb21wcmVzc2lvbiBkYXRhIHN0cnVjdHVyZXMgc2VsZWN0ZWQgYnkKKyAgIGRlZmxhdGVJbml0IG9yIGRlZmxhdGVJbml0MiwgYSBwYXJ0IG9mIHRoZSBkaWN0aW9uYXJ5IG1heSBpbiBlZmZlY3QgYmUKKyAgIGRpc2NhcmRlZCwgZm9yIGV4YW1wbGUgaWYgdGhlIGRpY3Rpb25hcnkgaXMgbGFyZ2VyIHRoYW4gdGhlIHdpbmRvdyBzaXplCisgICBwcm92aWRlZCBpbiBkZWZsYXRlSW5pdCBvciBkZWZsYXRlSW5pdDIuICBUaHVzIHRoZSBzdHJpbmdzIG1vc3QgbGlrZWx5IHRvIGJlCisgICB1c2VmdWwgc2hvdWxkIGJlIHB1dCBhdCB0aGUgZW5kIG9mIHRoZSBkaWN0aW9uYXJ5LCBub3QgYXQgdGhlIGZyb250LiAgSW4KKyAgIGFkZGl0aW9uLCB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiBkZWZsYXRlIHdpbGwgdXNlIGF0IG1vc3QgdGhlIHdpbmRvdworICAgc2l6ZSBtaW51cyAyNjIgYnl0ZXMgb2YgdGhlIHByb3ZpZGVkIGRpY3Rpb25hcnkuCisKKyAgICAgVXBvbiByZXR1cm4gb2YgdGhpcyBmdW5jdGlvbiwgc3RybS0+YWRsZXIgaXMgc2V0IHRvIHRoZSBBZGxlci0zMiB2YWx1ZQorICAgb2YgdGhlIGRpY3Rpb25hcnk7IHRoZSBkZWNvbXByZXNzb3IgbWF5IGxhdGVyIHVzZSB0aGlzIHZhbHVlIHRvIGRldGVybWluZQorICAgd2hpY2ggZGljdGlvbmFyeSBoYXMgYmVlbiB1c2VkIGJ5IHRoZSBjb21wcmVzc29yLiAgKFRoZSBBZGxlci0zMiB2YWx1ZQorICAgYXBwbGllcyB0byB0aGUgd2hvbGUgZGljdGlvbmFyeSBldmVuIGlmIG9ubHkgYSBzdWJzZXQgb2YgdGhlIGRpY3Rpb25hcnkgaXMKKyAgIGFjdHVhbGx5IHVzZWQgYnkgdGhlIGNvbXByZXNzb3IuKSBJZiBhIHJhdyBkZWZsYXRlIHdhcyByZXF1ZXN0ZWQsIHRoZW4gdGhlCisgICBBZGxlci0zMiB2YWx1ZSBpcyBub3QgY29tcHV0ZWQgYW5kIHN0cm0tPmFkbGVyIGlzIG5vdCBzZXQuCisKKyAgICAgZGVmbGF0ZVNldERpY3Rpb25hcnkgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIG9yIFpfU1RSRUFNX0VSUk9SIGlmIGEKKyAgIHBhcmFtZXRlciBpcyBpbnZhbGlkIChlLmcuICBkaWN0aW9uYXJ5IGJlaW5nIFpfTlVMTCkgb3IgdGhlIHN0cmVhbSBzdGF0ZSBpcworICAgaW5jb25zaXN0ZW50IChmb3IgZXhhbXBsZSBpZiBkZWZsYXRlIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkIGZvciB0aGlzIHN0cmVhbQorICAgb3IgaWYgbm90IGF0IGEgYmxvY2sgYm91bmRhcnkgZm9yIHJhdyBkZWZsYXRlKS4gIGRlZmxhdGVTZXREaWN0aW9uYXJ5IGRvZXMKKyAgIG5vdCBwZXJmb3JtIGFueSBjb21wcmVzc2lvbjogdGhpcyB3aWxsIGJlIGRvbmUgYnkgZGVmbGF0ZSgpLgorKi8KKworWkVYVEVSTiBpbnQgWkVYUE9SVCBkZWZsYXRlR2V0RGljdGlvbmFyeSBPRigoel9zdHJlYW1wIHN0cm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeXRlZiAqZGljdGlvbmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVJbnQgICpkaWN0TGVuZ3RoKSk7CisvKgorICAgICBSZXR1cm5zIHRoZSBzbGlkaW5nIGRpY3Rpb25hcnkgYmVpbmcgbWFpbnRhaW5lZCBieSBkZWZsYXRlLiAgZGljdExlbmd0aCBpcworICAgc2V0IHRvIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGRpY3Rpb25hcnksIGFuZCB0aGF0IG1hbnkgYnl0ZXMgYXJlIGNvcGllZAorICAgdG8gZGljdGlvbmFyeS4gIGRpY3Rpb25hcnkgbXVzdCBoYXZlIGVub3VnaCBzcGFjZSwgd2hlcmUgMzI3NjggYnl0ZXMgaXMKKyAgIGFsd2F5cyBlbm91Z2guICBJZiBkZWZsYXRlR2V0RGljdGlvbmFyeSgpIGlzIGNhbGxlZCB3aXRoIGRpY3Rpb25hcnkgZXF1YWwgdG8KKyAgIFpfTlVMTCwgdGhlbiBvbmx5IHRoZSBkaWN0aW9uYXJ5IGxlbmd0aCBpcyByZXR1cm5lZCwgYW5kIG5vdGhpbmcgaXMgY29waWVkLgorICAgU2ltaWxhcnksIGlmIGRpY3RMZW5ndGggaXMgWl9OVUxMLCB0aGVuIGl0IGlzIG5vdCBzZXQuCisKKyAgICAgZGVmbGF0ZUdldERpY3Rpb25hcnkoKSBtYXkgcmV0dXJuIGEgbGVuZ3RoIGxlc3MgdGhhbiB0aGUgd2luZG93IHNpemUsIGV2ZW4KKyAgIHdoZW4gbW9yZSB0aGFuIHRoZSB3aW5kb3cgc2l6ZSBpbiBpbnB1dCBoYXMgYmVlbiBwcm92aWRlZC4gSXQgbWF5IHJldHVybiB1cAorICAgdG8gMjU4IGJ5dGVzIGxlc3MgaW4gdGhhdCBjYXNlLCBkdWUgdG8gaG93IHpsaWIncyBpbXBsZW1lbnRhdGlvbiBvZiBkZWZsYXRlCisgICBtYW5hZ2VzIHRoZSBzbGlkaW5nIHdpbmRvdyBhbmQgbG9va2FoZWFkIGZvciBtYXRjaGVzLCB3aGVyZSBtYXRjaGVzIGNhbiBiZQorICAgdXAgdG8gMjU4IGJ5dGVzIGxvbmcuIElmIHRoZSBhcHBsaWNhdGlvbiBuZWVkcyB0aGUgbGFzdCB3aW5kb3ctc2l6ZSBieXRlcyBvZgorICAgaW5wdXQsIHRoZW4gdGhhdCB3b3VsZCBuZWVkIHRvIGJlIHNhdmVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBvdXRzaWRlIG9mIHpsaWIuCisKKyAgICAgZGVmbGF0ZUdldERpY3Rpb25hcnkgcmV0dXJucyBaX09LIG9uIHN1Y2Nlc3MsIG9yIFpfU1RSRUFNX0VSUk9SIGlmIHRoZQorICAgc3RyZWFtIHN0YXRlIGlzIGluY29uc2lzdGVudC4KKyovCisKK1pFWFRFUk4gaW50IFpFWFBPUlQgZGVmbGF0ZUNvcHkgT0YoKHpfc3RyZWFtcCBkZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgel9zdHJlYW1wIHNvdXJjZSkpOworLyoKKyAgICAgU2V0cyB0aGUgZGVzdGluYXRpb24gc3RyZWFtIGFzIGEgY29tcGxldGUgY29weSBvZiB0aGUgc291cmNlIHN0cmVhbS4KKworICAgICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VmdWwgd2hlbiBzZXZlcmFsIGNvbXByZXNzaW9uIHN0cmF0ZWdpZXMgd2lsbCBiZQorICAgdHJpZWQsIGZvciBleGFtcGxlIHdoZW4gdGhlcmUgYXJlIHNldmVyYWwgd2F5cyBvZiBwcmUtcHJvY2Vzc2luZyB0aGUgaW5wdXQKKyAgIGRhdGEgd2l0aCBhIGZpbHRlci4gIFRoZSBzdHJlYW1zIHRoYXQgd2lsbCBiZSBkaXNjYXJkZWQgc2hvdWxkIHRoZW4gYmUgZnJlZWQKKyAgIGJ5IGNhbGxpbmcgZGVmbGF0ZUVuZC4gIE5vdGUgdGhhdCBkZWZsYXRlQ29weSBkdXBsaWNhdGVzIHRoZSBpbnRlcm5hbAorICAgY29tcHJlc3Npb24gc3RhdGUgd2hpY2ggY2FuIGJlIHF1aXRlIGxhcmdlLCBzbyB0aGlzIHN0cmF0ZWd5IGlzIHNsb3cgYW5kIGNhbgorICAgY29uc3VtZSBsb3RzIG9mIG1lbW9yeS4KKworICAgICBkZWZsYXRlQ29weSByZXR1cm5zIFpfT0sgaWYgc3VjY2VzcywgWl9NRU1fRVJST1IgaWYgdGhlcmUgd2FzIG5vdAorICAgZW5vdWdoIG1lbW9yeSwgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHNvdXJjZSBzdHJlYW0gc3RhdGUgd2FzIGluY29uc2lzdGVudAorICAgKHN1Y2ggYXMgemFsbG9jIGJlaW5nIFpfTlVMTCkuICBtc2cgaXMgbGVmdCB1bmNoYW5nZWQgaW4gYm90aCBzb3VyY2UgYW5kCisgICBkZXN0aW5hdGlvbi4KKyovCisKK1pFWFRFUk4gaW50IFpFWFBPUlQgZGVmbGF0ZVJlc2V0IE9GKCh6X3N0cmVhbXAgc3RybSkpOworLyoKKyAgICAgVGhpcyBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIGRlZmxhdGVFbmQgZm9sbG93ZWQgYnkgZGVmbGF0ZUluaXQsIGJ1dAorICAgZG9lcyBub3QgZnJlZSBhbmQgcmVhbGxvY2F0ZSB0aGUgaW50ZXJuYWwgY29tcHJlc3Npb24gc3RhdGUuICBUaGUgc3RyZWFtCisgICB3aWxsIGxlYXZlIHRoZSBjb21wcmVzc2lvbiBsZXZlbCBhbmQgYW55IG90aGVyIGF0dHJpYnV0ZXMgdGhhdCBtYXkgaGF2ZSBiZWVuCisgICBzZXQgdW5jaGFuZ2VkLgorCisgICAgIGRlZmxhdGVSZXNldCByZXR1cm5zIFpfT0sgaWYgc3VjY2Vzcywgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHNvdXJjZQorICAgc3RyZWFtIHN0YXRlIHdhcyBpbmNvbnNpc3RlbnQgKHN1Y2ggYXMgemFsbG9jIG9yIHN0YXRlIGJlaW5nIFpfTlVMTCkuCisqLworCitaRVhURVJOIGludCBaRVhQT1JUIGRlZmxhdGVQYXJhbXMgT0YoKHpfc3RyZWFtcCBzdHJtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdHJhdGVneSkpOworLyoKKyAgICAgRHluYW1pY2FsbHkgdXBkYXRlIHRoZSBjb21wcmVzc2lvbiBsZXZlbCBhbmQgY29tcHJlc3Npb24gc3RyYXRlZ3kuICBUaGUKKyAgIGludGVycHJldGF0aW9uIG9mIGxldmVsIGFuZCBzdHJhdGVneSBpcyBhcyBpbiBkZWZsYXRlSW5pdDIoKS4gIFRoaXMgY2FuIGJlCisgICB1c2VkIHRvIHN3aXRjaCBiZXR3ZWVuIGNvbXByZXNzaW9uIGFuZCBzdHJhaWdodCBjb3B5IG9mIHRoZSBpbnB1dCBkYXRhLCBvcgorICAgdG8gc3dpdGNoIHRvIGEgZGlmZmVyZW50IGtpbmQgb2YgaW5wdXQgZGF0YSByZXF1aXJpbmcgYSBkaWZmZXJlbnQgc3RyYXRlZ3kuCisgICBJZiB0aGUgY29tcHJlc3Npb24gYXBwcm9hY2ggKHdoaWNoIGlzIGEgZnVuY3Rpb24gb2YgdGhlIGxldmVsKSBvciB0aGUKKyAgIHN0cmF0ZWd5IGlzIGNoYW5nZWQsIGFuZCBpZiB0aGVyZSBoYXZlIGJlZW4gYW55IGRlZmxhdGUoKSBjYWxscyBzaW5jZSB0aGUKKyAgIHN0YXRlIHdhcyBpbml0aWFsaXplZCBvciByZXNldCwgdGhlbiB0aGUgaW5wdXQgYXZhaWxhYmxlIHNvIGZhciBpcworICAgY29tcHJlc3NlZCB3aXRoIHRoZSBvbGQgbGV2ZWwgYW5kIHN0cmF0ZWd5IHVzaW5nIGRlZmxhdGUoc3RybSwgWl9CTE9DSykuCisgICBUaGVyZSBhcmUgdGhyZWUgYXBwcm9hY2hlcyBmb3IgdGhlIGNvbXByZXNzaW9uIGxldmVscyAwLCAxLi4zLCBhbmQgNC4uOQorICAgcmVzcGVjdGl2ZWx5LiAgVGhlIG5ldyBsZXZlbCBhbmQgc3RyYXRlZ3kgd2lsbCB0YWtlIGVmZmVjdCBhdCB0aGUgbmV4dCBjYWxsCisgICBvZiBkZWZsYXRlKCkuCisKKyAgICAgSWYgYSBkZWZsYXRlKHN0cm0sIFpfQkxPQ0spIGlzIHBlcmZvcm1lZCBieSBkZWZsYXRlUGFyYW1zKCksIGFuZCBpdCBkb2VzCisgICBub3QgaGF2ZSBlbm91Z2ggb3V0cHV0IHNwYWNlIHRvIGNvbXBsZXRlLCB0aGVuIHRoZSBwYXJhbWV0ZXIgY2hhbmdlIHdpbGwgbm90CisgICB0YWtlIGVmZmVjdC4gIEluIHRoaXMgY2FzZSwgZGVmbGF0ZVBhcmFtcygpIGNhbiBiZSBjYWxsZWQgYWdhaW4gd2l0aCB0aGUKKyAgIHNhbWUgcGFyYW1ldGVycyBhbmQgbW9yZSBvdXRwdXQgc3BhY2UgdG8gdHJ5IGFnYWluLgorCisgICAgIEluIG9yZGVyIHRvIGFzc3VyZSBhIGNoYW5nZSBpbiB0aGUgcGFyYW1ldGVycyBvbiB0aGUgZmlyc3QgdHJ5LCB0aGUKKyAgIGRlZmxhdGUgc3RyZWFtIHNob3VsZCBiZSBmbHVzaGVkIHVzaW5nIGRlZmxhdGUoKSB3aXRoIFpfQkxPQ0sgb3Igb3RoZXIgZmx1c2gKKyAgIHJlcXVlc3QgdW50aWwgc3RybS5hdmFpbF9vdXQgaXMgbm90IHplcm8sIGJlZm9yZSBjYWxsaW5nIGRlZmxhdGVQYXJhbXMoKS4KKyAgIFRoZW4gbm8gbW9yZSBpbnB1dCBkYXRhIHNob3VsZCBiZSBwcm92aWRlZCBiZWZvcmUgdGhlIGRlZmxhdGVQYXJhbXMoKSBjYWxsLgorICAgSWYgdGhpcyBpcyBkb25lLCB0aGUgb2xkIGxldmVsIGFuZCBzdHJhdGVneSB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIGRhdGEKKyAgIGNvbXByZXNzZWQgYmVmb3JlIGRlZmxhdGVQYXJhbXMoKSwgYW5kIHRoZSBuZXcgbGV2ZWwgYW5kIHN0cmF0ZWd5IHdpbGwgYmUKKyAgIGFwcGxpZWQgdG8gdGhlIHRoZSBkYXRhIGNvbXByZXNzZWQgYWZ0ZXIgZGVmbGF0ZVBhcmFtcygpLgorCisgICAgIGRlZmxhdGVQYXJhbXMgcmV0dXJucyBaX09LIG9uIHN1Y2Nlc3MsIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBzb3VyY2Ugc3RyZWFtCisgICBzdGF0ZSB3YXMgaW5jb25zaXN0ZW50IG9yIGlmIGEgcGFyYW1ldGVyIHdhcyBpbnZhbGlkLCBvciBaX0JVRl9FUlJPUiBpZgorICAgdGhlcmUgd2FzIG5vdCBlbm91Z2ggb3V0cHV0IHNwYWNlIHRvIGNvbXBsZXRlIHRoZSBjb21wcmVzc2lvbiBvZiB0aGUKKyAgIGF2YWlsYWJsZSBpbnB1dCBkYXRhIGJlZm9yZSBhIGNoYW5nZSBpbiB0aGUgc3RyYXRlZ3kgb3IgYXBwcm9hY2guICBOb3RlIHRoYXQKKyAgIGluIHRoZSBjYXNlIG9mIGEgWl9CVUZfRVJST1IsIHRoZSBwYXJhbWV0ZXJzIGFyZSBub3QgY2hhbmdlZC4gIEEgcmV0dXJuCisgICB2YWx1ZSBvZiBaX0JVRl9FUlJPUiBpcyBub3QgZmF0YWwsIGluIHdoaWNoIGNhc2UgZGVmbGF0ZVBhcmFtcygpIGNhbiBiZQorICAgcmV0cmllZCB3aXRoIG1vcmUgb3V0cHV0IHNwYWNlLgorKi8KKworWkVYVEVSTiBpbnQgWkVYUE9SVCBkZWZsYXRlVHVuZSBPRigoel9zdHJlYW1wIHN0cm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZ29vZF9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWF4X2xhenksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbmljZV9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWF4X2NoYWluKSk7CisvKgorICAgICBGaW5lIHR1bmUgZGVmbGF0ZSdzIGludGVybmFsIGNvbXByZXNzaW9uIHBhcmFtZXRlcnMuICBUaGlzIHNob3VsZCBvbmx5IGJlCisgICB1c2VkIGJ5IHNvbWVvbmUgd2hvIHVuZGVyc3RhbmRzIHRoZSBhbGdvcml0aG0gdXNlZCBieSB6bGliJ3MgZGVmbGF0ZSBmb3IKKyAgIHNlYXJjaGluZyBmb3IgdGhlIGJlc3QgbWF0Y2hpbmcgc3RyaW5nLCBhbmQgZXZlbiB0aGVuIG9ubHkgYnkgdGhlIG1vc3QKKyAgIGZhbmF0aWMgb3B0aW1pemVyIHRyeWluZyB0byBzcXVlZXplIG91dCB0aGUgbGFzdCBjb21wcmVzc2VkIGJpdCBmb3IgdGhlaXIKKyAgIHNwZWNpZmljIGlucHV0IGRhdGEuICBSZWFkIHRoZSBkZWZsYXRlLmMgc291cmNlIGNvZGUgZm9yIHRoZSBtZWFuaW5nIG9mIHRoZQorICAgbWF4X2xhenksIGdvb2RfbGVuZ3RoLCBuaWNlX2xlbmd0aCwgYW5kIG1heF9jaGFpbiBwYXJhbWV0ZXJzLgorCisgICAgIGRlZmxhdGVUdW5lKCkgY2FuIGJlIGNhbGxlZCBhZnRlciBkZWZsYXRlSW5pdCgpIG9yIGRlZmxhdGVJbml0MigpLCBhbmQKKyAgIHJldHVybnMgWl9PSyBvbiBzdWNjZXNzLCBvciBaX1NUUkVBTV9FUlJPUiBmb3IgYW4gaW52YWxpZCBkZWZsYXRlIHN0cmVhbS4KKyAqLworCitaRVhURVJOIHVMb25nIFpFWFBPUlQgZGVmbGF0ZUJvdW5kIE9GKCh6X3N0cmVhbXAgc3RybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVMb25nIHNvdXJjZUxlbikpOworLyoKKyAgICAgZGVmbGF0ZUJvdW5kKCkgcmV0dXJucyBhbiB1cHBlciBib3VuZCBvbiB0aGUgY29tcHJlc3NlZCBzaXplIGFmdGVyCisgICBkZWZsYXRpb24gb2Ygc291cmNlTGVuIGJ5dGVzLiAgSXQgbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgZGVmbGF0ZUluaXQoKSBvcgorICAgZGVmbGF0ZUluaXQyKCksIGFuZCBhZnRlciBkZWZsYXRlU2V0SGVhZGVyKCksIGlmIHVzZWQuICBUaGlzIHdvdWxkIGJlIHVzZWQKKyAgIHRvIGFsbG9jYXRlIGFuIG91dHB1dCBidWZmZXIgZm9yIGRlZmxhdGlvbiBpbiBhIHNpbmdsZSBwYXNzLCBhbmQgc28gd291bGQgYmUKKyAgIGNhbGxlZCBiZWZvcmUgZGVmbGF0ZSgpLiAgSWYgdGhhdCBmaXJzdCBkZWZsYXRlKCkgY2FsbCBpcyBwcm92aWRlZCB0aGUKKyAgIHNvdXJjZUxlbiBpbnB1dCBieXRlcywgYW4gb3V0cHV0IGJ1ZmZlciBhbGxvY2F0ZWQgdG8gdGhlIHNpemUgcmV0dXJuZWQgYnkKKyAgIGRlZmxhdGVCb3VuZCgpLCBhbmQgdGhlIGZsdXNoIHZhbHVlIFpfRklOSVNILCB0aGVuIGRlZmxhdGUoKSBpcyBndWFyYW50ZWVkCisgICB0byByZXR1cm4gWl9TVFJFQU1fRU5ELiAgTm90ZSB0aGF0IGl0IGlzIHBvc3NpYmxlIGZvciB0aGUgY29tcHJlc3NlZCBzaXplIHRvCisgICBiZSBsYXJnZXIgdGhhbiB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgZGVmbGF0ZUJvdW5kKCkgaWYgZmx1c2ggb3B0aW9ucyBvdGhlcgorICAgdGhhbiBaX0ZJTklTSCBvciBaX05PX0ZMVVNIIGFyZSB1c2VkLgorKi8KKworWkVYVEVSTiBpbnQgWkVYUE9SVCBkZWZsYXRlUGVuZGluZyBPRigoel9zdHJlYW1wIHN0cm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCAqcGVuZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqYml0cykpOworLyoKKyAgICAgZGVmbGF0ZVBlbmRpbmcoKSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgYW5kIGJpdHMgb2Ygb3V0cHV0IHRoYXQgaGF2ZQorICAgYmVlbiBnZW5lcmF0ZWQsIGJ1dCBub3QgeWV0IHByb3ZpZGVkIGluIHRoZSBhdmFpbGFibGUgb3V0cHV0LiAgVGhlIGJ5dGVzIG5vdAorICAgcHJvdmlkZWQgd291bGQgYmUgZHVlIHRvIHRoZSBhdmFpbGFibGUgb3V0cHV0IHNwYWNlIGhhdmluZyBiZWluZyBjb25zdW1lZC4KKyAgIFRoZSBudW1iZXIgb2YgYml0cyBvZiBvdXRwdXQgbm90IHByb3ZpZGVkIGFyZSBiZXR3ZWVuIDAgYW5kIDcsIHdoZXJlIHRoZXkKKyAgIGF3YWl0IG1vcmUgYml0cyB0byBqb2luIHRoZW0gaW4gb3JkZXIgdG8gZmlsbCBvdXQgYSBmdWxsIGJ5dGUuICBJZiBwZW5kaW5nCisgICBvciBiaXRzIGFyZSBaX05VTEwsIHRoZW4gdGhvc2UgdmFsdWVzIGFyZSBub3Qgc2V0LgorCisgICAgIGRlZmxhdGVQZW5kaW5nIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBvciBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc291cmNlCisgICBzdHJlYW0gc3RhdGUgd2FzIGluY29uc2lzdGVudC4KKyAqLworCitaRVhURVJOIGludCBaRVhQT1JUIGRlZmxhdGVQcmltZSBPRigoel9zdHJlYW1wIHN0cm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZhbHVlKSk7CisvKgorICAgICBkZWZsYXRlUHJpbWUoKSBpbnNlcnRzIGJpdHMgaW4gdGhlIGRlZmxhdGUgb3V0cHV0IHN0cmVhbS4gIFRoZSBpbnRlbnQKKyAgIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHN0YXJ0IG9mZiB0aGUgZGVmbGF0ZSBvdXRwdXQgd2l0aCB0aGUgYml0cworICAgbGVmdG92ZXIgZnJvbSBhIHByZXZpb3VzIGRlZmxhdGUgc3RyZWFtIHdoZW4gYXBwZW5kaW5nIHRvIGl0LiAgQXMgc3VjaCwgdGhpcworICAgZnVuY3Rpb24gY2FuIG9ubHkgYmUgdXNlZCBmb3IgcmF3IGRlZmxhdGUsIGFuZCBtdXN0IGJlIHVzZWQgYmVmb3JlIHRoZSBmaXJzdAorICAgZGVmbGF0ZSgpIGNhbGwgYWZ0ZXIgYSBkZWZsYXRlSW5pdDIoKSBvciBkZWZsYXRlUmVzZXQoKS4gIGJpdHMgbXVzdCBiZSBsZXNzCisgICB0aGFuIG9yIGVxdWFsIHRvIDE2LCBhbmQgdGhhdCBtYW55IG9mIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXRzIG9mIHZhbHVlCisgICB3aWxsIGJlIGluc2VydGVkIGluIHRoZSBvdXRwdXQuCisKKyAgICAgZGVmbGF0ZVByaW1lIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBaX0JVRl9FUlJPUiBpZiB0aGVyZSB3YXMgbm90IGVub3VnaAorICAgcm9vbSBpbiB0aGUgaW50ZXJuYWwgYnVmZmVyIHRvIGluc2VydCB0aGUgYml0cywgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlCisgICBzb3VyY2Ugc3RyZWFtIHN0YXRlIHdhcyBpbmNvbnNpc3RlbnQuCisqLworCitaRVhURVJOIGludCBaRVhQT1JUIGRlZmxhdGVTZXRIZWFkZXIgT0YoKHpfc3RyZWFtcCBzdHJtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnel9oZWFkZXJwIGhlYWQpKTsKKy8qCisgICAgIGRlZmxhdGVTZXRIZWFkZXIoKSBwcm92aWRlcyBnemlwIGhlYWRlciBpbmZvcm1hdGlvbiBmb3Igd2hlbiBhIGd6aXAKKyAgIHN0cmVhbSBpcyByZXF1ZXN0ZWQgYnkgZGVmbGF0ZUluaXQyKCkuICBkZWZsYXRlU2V0SGVhZGVyKCkgbWF5IGJlIGNhbGxlZAorICAgYWZ0ZXIgZGVmbGF0ZUluaXQyKCkgb3IgZGVmbGF0ZVJlc2V0KCkgYW5kIGJlZm9yZSB0aGUgZmlyc3QgY2FsbCBvZgorICAgZGVmbGF0ZSgpLiAgVGhlIHRleHQsIHRpbWUsIG9zLCBleHRyYSBmaWVsZCwgbmFtZSwgYW5kIGNvbW1lbnQgaW5mb3JtYXRpb24KKyAgIGluIHRoZSBwcm92aWRlZCBnel9oZWFkZXIgc3RydWN0dXJlIGFyZSB3cml0dGVuIHRvIHRoZSBnemlwIGhlYWRlciAoeGZsYWcgaXMKKyAgIGlnbm9yZWQgLS0gdGhlIGV4dHJhIGZsYWdzIGFyZSBzZXQgYWNjb3JkaW5nIHRvIHRoZSBjb21wcmVzc2lvbiBsZXZlbCkuICBUaGUKKyAgIGNhbGxlciBtdXN0IGFzc3VyZSB0aGF0LCBpZiBub3QgWl9OVUxMLCBuYW1lIGFuZCBjb21tZW50IGFyZSB0ZXJtaW5hdGVkIHdpdGgKKyAgIGEgemVybyBieXRlLCBhbmQgdGhhdCBpZiBleHRyYSBpcyBub3QgWl9OVUxMLCB0aGF0IGV4dHJhX2xlbiBieXRlcyBhcmUKKyAgIGF2YWlsYWJsZSB0aGVyZS4gIElmIGhjcmMgaXMgdHJ1ZSwgYSBnemlwIGhlYWRlciBjcmMgaXMgaW5jbHVkZWQuICBOb3RlIHRoYXQKKyAgIHRoZSBjdXJyZW50IHZlcnNpb25zIG9mIHRoZSBjb21tYW5kLWxpbmUgdmVyc2lvbiBvZiBnemlwICh1cCB0aHJvdWdoIHZlcnNpb24KKyAgIDEuMy54KSBkbyBub3Qgc3VwcG9ydCBoZWFkZXIgY3JjJ3MsIGFuZCB3aWxsIHJlcG9ydCB0aGF0IGl0IGlzIGEgIm11bHRpLXBhcnQKKyAgIGd6aXAgZmlsZSIgYW5kIGdpdmUgdXAuCisKKyAgICAgSWYgZGVmbGF0ZVNldEhlYWRlciBpcyBub3QgdXNlZCwgdGhlIGRlZmF1bHQgZ3ppcCBoZWFkZXIgaGFzIHRleHQgZmFsc2UsCisgICB0aGUgdGltZSBzZXQgdG8gemVybywgYW5kIG9zIHNldCB0byAyNTUsIHdpdGggbm8gZXh0cmEsIG5hbWUsIG9yIGNvbW1lbnQKKyAgIGZpZWxkcy4gIFRoZSBnemlwIGhlYWRlciBpcyByZXR1cm5lZCB0byB0aGUgZGVmYXVsdCBzdGF0ZSBieSBkZWZsYXRlUmVzZXQoKS4KKworICAgICBkZWZsYXRlU2V0SGVhZGVyIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBvciBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc291cmNlCisgICBzdHJlYW0gc3RhdGUgd2FzIGluY29uc2lzdGVudC4KKyovCisKKy8qCitaRVhURVJOIGludCBaRVhQT1JUIGluZmxhdGVJbml0MiBPRigoel9zdHJlYW1wIHN0cm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICB3aW5kb3dCaXRzKSk7CisKKyAgICAgVGhpcyBpcyBhbm90aGVyIHZlcnNpb24gb2YgaW5mbGF0ZUluaXQgd2l0aCBhbiBleHRyYSBwYXJhbWV0ZXIuICBUaGUKKyAgIGZpZWxkcyBuZXh0X2luLCBhdmFpbF9pbiwgemFsbG9jLCB6ZnJlZSBhbmQgb3BhcXVlIG11c3QgYmUgaW5pdGlhbGl6ZWQKKyAgIGJlZm9yZSBieSB0aGUgY2FsbGVyLgorCisgICAgIFRoZSB3aW5kb3dCaXRzIHBhcmFtZXRlciBpcyB0aGUgYmFzZSB0d28gbG9nYXJpdGhtIG9mIHRoZSBtYXhpbXVtIHdpbmRvdworICAgc2l6ZSAodGhlIHNpemUgb2YgdGhlIGhpc3RvcnkgYnVmZmVyKS4gIEl0IHNob3VsZCBiZSBpbiB0aGUgcmFuZ2UgOC4uMTUgZm9yCisgICB0aGlzIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxNSBpZiBpbmZsYXRlSW5pdCBpcyB1c2VkCisgICBpbnN0ZWFkLiAgd2luZG93Qml0cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgd2luZG93Qml0cyB2YWx1ZQorICAgcHJvdmlkZWQgdG8gZGVmbGF0ZUluaXQyKCkgd2hpbGUgY29tcHJlc3NpbmcsIG9yIGl0IG11c3QgYmUgZXF1YWwgdG8gMTUgaWYKKyAgIGRlZmxhdGVJbml0MigpIHdhcyBub3QgdXNlZC4gIElmIGEgY29tcHJlc3NlZCBzdHJlYW0gd2l0aCBhIGxhcmdlciB3aW5kb3cKKyAgIHNpemUgaXMgZ2l2ZW4gYXMgaW5wdXQsIGluZmxhdGUoKSB3aWxsIHJldHVybiB3aXRoIHRoZSBlcnJvciBjb2RlCisgICBaX0RBVEFfRVJST1IgaW5zdGVhZCBvZiB0cnlpbmcgdG8gYWxsb2NhdGUgYSBsYXJnZXIgd2luZG93LgorCisgICAgIHdpbmRvd0JpdHMgY2FuIGFsc28gYmUgemVybyB0byByZXF1ZXN0IHRoYXQgaW5mbGF0ZSB1c2UgdGhlIHdpbmRvdyBzaXplIGluCisgICB0aGUgemxpYiBoZWFkZXIgb2YgdGhlIGNvbXByZXNzZWQgc3RyZWFtLgorCisgICAgIHdpbmRvd0JpdHMgY2FuIGFsc28gYmUgLTguLi0xNSBmb3IgcmF3IGluZmxhdGUuICBJbiB0aGlzIGNhc2UsIC13aW5kb3dCaXRzCisgICBkZXRlcm1pbmVzIHRoZSB3aW5kb3cgc2l6ZS4gIGluZmxhdGUoKSB3aWxsIHRoZW4gcHJvY2VzcyByYXcgZGVmbGF0ZSBkYXRhLAorICAgbm90IGxvb2tpbmcgZm9yIGEgemxpYiBvciBnemlwIGhlYWRlciwgbm90IGdlbmVyYXRpbmcgYSBjaGVjayB2YWx1ZSwgYW5kIG5vdAorICAgbG9va2luZyBmb3IgYW55IGNoZWNrIHZhbHVlcyBmb3IgY29tcGFyaXNvbiBhdCB0aGUgZW5kIG9mIHRoZSBzdHJlYW0uICBUaGlzCisgICBpcyBmb3IgdXNlIHdpdGggb3RoZXIgZm9ybWF0cyB0aGF0IHVzZSB0aGUgZGVmbGF0ZSBjb21wcmVzc2VkIGRhdGEgZm9ybWF0CisgICBzdWNoIGFzIHppcC4gIFRob3NlIGZvcm1hdHMgcHJvdmlkZSB0aGVpciBvd24gY2hlY2sgdmFsdWVzLiAgSWYgYSBjdXN0b20KKyAgIGZvcm1hdCBpcyBkZXZlbG9wZWQgdXNpbmcgdGhlIHJhdyBkZWZsYXRlIGZvcm1hdCBmb3IgY29tcHJlc3NlZCBkYXRhLCBpdCBpcworICAgcmVjb21tZW5kZWQgdGhhdCBhIGNoZWNrIHZhbHVlIHN1Y2ggYXMgYW4gQWRsZXItMzIgb3IgYSBDUkMtMzIgYmUgYXBwbGllZCB0bworICAgdGhlIHVuY29tcHJlc3NlZCBkYXRhIGFzIGlzIGRvbmUgaW4gdGhlIHpsaWIsIGd6aXAsIGFuZCB6aXAgZm9ybWF0cy4gIEZvcgorICAgbW9zdCBhcHBsaWNhdGlvbnMsIHRoZSB6bGliIGZvcm1hdCBzaG91bGQgYmUgdXNlZCBhcyBpcy4gIE5vdGUgdGhhdCBjb21tZW50cworICAgYWJvdmUgb24gdGhlIHVzZSBpbiBkZWZsYXRlSW5pdDIoKSBhcHBsaWVzIHRvIHRoZSBtYWduaXR1ZGUgb2Ygd2luZG93Qml0cy4KKworICAgICB3aW5kb3dCaXRzIGNhbiBhbHNvIGJlIGdyZWF0ZXIgdGhhbiAxNSBmb3Igb3B0aW9uYWwgZ3ppcCBkZWNvZGluZy4gIEFkZAorICAgMzIgdG8gd2luZG93Qml0cyB0byBlbmFibGUgemxpYiBhbmQgZ3ppcCBkZWNvZGluZyB3aXRoIGF1dG9tYXRpYyBoZWFkZXIKKyAgIGRldGVjdGlvbiwgb3IgYWRkIDE2IHRvIGRlY29kZSBvbmx5IHRoZSBnemlwIGZvcm1hdCAodGhlIHpsaWIgZm9ybWF0IHdpbGwKKyAgIHJldHVybiBhIFpfREFUQV9FUlJPUikuICBJZiBhIGd6aXAgc3RyZWFtIGlzIGJlaW5nIGRlY29kZWQsIHN0cm0tPmFkbGVyIGlzIGEKKyAgIENSQy0zMiBpbnN0ZWFkIG9mIGFuIEFkbGVyLTMyLiAgVW5saWtlIHRoZSBndW56aXAgdXRpbGl0eSBhbmQgZ3pyZWFkKCkgKHNlZQorICAgYmVsb3cpLCBpbmZsYXRlKCkgd2lsbCAqbm90KiBhdXRvbWF0aWNhbGx5IGRlY29kZSBjb25jYXRlbmF0ZWQgZ3ppcCBtZW1iZXJzLgorICAgaW5mbGF0ZSgpIHdpbGwgcmV0dXJuIFpfU1RSRUFNX0VORCBhdCB0aGUgZW5kIG9mIHRoZSBnemlwIG1lbWJlci4gIFRoZSBzdGF0ZQorICAgd291bGQgbmVlZCB0byBiZSByZXNldCB0byBjb250aW51ZSBkZWNvZGluZyBhIHN1YnNlcXVlbnQgZ3ppcCBtZW1iZXIuICBUaGlzCisgICAqbXVzdCogYmUgZG9uZSBpZiB0aGVyZSBpcyBtb3JlIGRhdGEgYWZ0ZXIgYSBnemlwIG1lbWJlciwgaW4gb3JkZXIgZm9yIHRoZQorICAgZGVjb21wcmVzc2lvbiB0byBiZSBjb21wbGlhbnQgd2l0aCB0aGUgZ3ppcCBzdGFuZGFyZCAoUkZDIDE5NTIpLgorCisgICAgIGluZmxhdGVJbml0MiByZXR1cm5zIFpfT0sgaWYgc3VjY2VzcywgWl9NRU1fRVJST1IgaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2gKKyAgIG1lbW9yeSwgWl9WRVJTSU9OX0VSUk9SIGlmIHRoZSB6bGliIGxpYnJhcnkgdmVyc2lvbiBpcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUKKyAgIHZlcnNpb24gYXNzdW1lZCBieSB0aGUgY2FsbGVyLCBvciBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgcGFyYW1ldGVycyBhcmUKKyAgIGludmFsaWQsIHN1Y2ggYXMgYSBudWxsIHBvaW50ZXIgdG8gdGhlIHN0cnVjdHVyZS4gIG1zZyBpcyBzZXQgdG8gbnVsbCBpZgorICAgdGhlcmUgaXMgbm8gZXJyb3IgbWVzc2FnZS4gIGluZmxhdGVJbml0MiBkb2VzIG5vdCBwZXJmb3JtIGFueSBkZWNvbXByZXNzaW9uCisgICBhcGFydCBmcm9tIHBvc3NpYmx5IHJlYWRpbmcgdGhlIHpsaWIgaGVhZGVyIGlmIHByZXNlbnQ6IGFjdHVhbCBkZWNvbXByZXNzaW9uCisgICB3aWxsIGJlIGRvbmUgYnkgaW5mbGF0ZSgpLiAgKFNvIG5leHRfaW4gYW5kIGF2YWlsX2luIG1heSBiZSBtb2RpZmllZCwgYnV0CisgICBuZXh0X291dCBhbmQgYXZhaWxfb3V0IGFyZSB1bnVzZWQgYW5kIHVuY2hhbmdlZC4pIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uCisgICBvZiBpbmZsYXRlSW5pdDIoKSBkb2VzIG5vdCBwcm9jZXNzIGFueSBoZWFkZXIgaW5mb3JtYXRpb24gLS0gdGhhdCBpcworICAgZGVmZXJyZWQgdW50aWwgaW5mbGF0ZSgpIGlzIGNhbGxlZC4KKyovCisKK1pFWFRFUk4gaW50IFpFWFBPUlQgaW5mbGF0ZVNldERpY3Rpb25hcnkgT0YoKHpfc3RyZWFtcCBzdHJtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQnl0ZWYgKmRpY3Rpb25hcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1SW50ICBkaWN0TGVuZ3RoKSk7CisvKgorICAgICBJbml0aWFsaXplcyB0aGUgZGVjb21wcmVzc2lvbiBkaWN0aW9uYXJ5IGZyb20gdGhlIGdpdmVuIHVuY29tcHJlc3NlZCBieXRlCisgICBzZXF1ZW5jZS4gIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgYSBjYWxsIG9mIGluZmxhdGUsCisgICBpZiB0aGF0IGNhbGwgcmV0dXJuZWQgWl9ORUVEX0RJQ1QuICBUaGUgZGljdGlvbmFyeSBjaG9zZW4gYnkgdGhlIGNvbXByZXNzb3IKKyAgIGNhbiBiZSBkZXRlcm1pbmVkIGZyb20gdGhlIEFkbGVyLTMyIHZhbHVlIHJldHVybmVkIGJ5IHRoYXQgY2FsbCBvZiBpbmZsYXRlLgorICAgVGhlIGNvbXByZXNzb3IgYW5kIGRlY29tcHJlc3NvciBtdXN0IHVzZSBleGFjdGx5IHRoZSBzYW1lIGRpY3Rpb25hcnkgKHNlZQorICAgZGVmbGF0ZVNldERpY3Rpb25hcnkpLiAgRm9yIHJhdyBpbmZsYXRlLCB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgYXQgYW55CisgICB0aW1lIHRvIHNldCB0aGUgZGljdGlvbmFyeS4gIElmIHRoZSBwcm92aWRlZCBkaWN0aW9uYXJ5IGlzIHNtYWxsZXIgdGhhbiB0aGUKKyAgIHdpbmRvdyBhbmQgdGhlcmUgaXMgYWxyZWFkeSBkYXRhIGluIHRoZSB3aW5kb3csIHRoZW4gdGhlIHByb3ZpZGVkIGRpY3Rpb25hcnkKKyAgIHdpbGwgYW1lbmQgd2hhdCdzIHRoZXJlLiAgVGhlIGFwcGxpY2F0aW9uIG11c3QgaW5zdXJlIHRoYXQgdGhlIGRpY3Rpb25hcnkKKyAgIHRoYXQgd2FzIHVzZWQgZm9yIGNvbXByZXNzaW9uIGlzIHByb3ZpZGVkLgorCisgICAgIGluZmxhdGVTZXREaWN0aW9uYXJ5IHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBaX1NUUkVBTV9FUlJPUiBpZiBhCisgICBwYXJhbWV0ZXIgaXMgaW52YWxpZCAoZS5nLiAgZGljdGlvbmFyeSBiZWluZyBaX05VTEwpIG9yIHRoZSBzdHJlYW0gc3RhdGUgaXMKKyAgIGluY29uc2lzdGVudCwgWl9EQVRBX0VSUk9SIGlmIHRoZSBnaXZlbiBkaWN0aW9uYXJ5IGRvZXNuJ3QgbWF0Y2ggdGhlCisgICBleHBlY3RlZCBvbmUgKGluY29ycmVjdCBBZGxlci0zMiB2YWx1ZSkuICBpbmZsYXRlU2V0RGljdGlvbmFyeSBkb2VzIG5vdAorICAgcGVyZm9ybSBhbnkgZGVjb21wcmVzc2lvbjogdGhpcyB3aWxsIGJlIGRvbmUgYnkgc3Vic2VxdWVudCBjYWxscyBvZgorICAgaW5mbGF0ZSgpLgorKi8KKworWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRlR2V0RGljdGlvbmFyeSBPRigoel9zdHJlYW1wIHN0cm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeXRlZiAqZGljdGlvbmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVJbnQgICpkaWN0TGVuZ3RoKSk7CisvKgorICAgICBSZXR1cm5zIHRoZSBzbGlkaW5nIGRpY3Rpb25hcnkgYmVpbmcgbWFpbnRhaW5lZCBieSBpbmZsYXRlLiAgZGljdExlbmd0aCBpcworICAgc2V0IHRvIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGRpY3Rpb25hcnksIGFuZCB0aGF0IG1hbnkgYnl0ZXMgYXJlIGNvcGllZAorICAgdG8gZGljdGlvbmFyeS4gIGRpY3Rpb25hcnkgbXVzdCBoYXZlIGVub3VnaCBzcGFjZSwgd2hlcmUgMzI3NjggYnl0ZXMgaXMKKyAgIGFsd2F5cyBlbm91Z2guICBJZiBpbmZsYXRlR2V0RGljdGlvbmFyeSgpIGlzIGNhbGxlZCB3aXRoIGRpY3Rpb25hcnkgZXF1YWwgdG8KKyAgIFpfTlVMTCwgdGhlbiBvbmx5IHRoZSBkaWN0aW9uYXJ5IGxlbmd0aCBpcyByZXR1cm5lZCwgYW5kIG5vdGhpbmcgaXMgY29waWVkLgorICAgU2ltaWxhcnksIGlmIGRpY3RMZW5ndGggaXMgWl9OVUxMLCB0aGVuIGl0IGlzIG5vdCBzZXQuCisKKyAgICAgaW5mbGF0ZUdldERpY3Rpb25hcnkgcmV0dXJucyBaX09LIG9uIHN1Y2Nlc3MsIG9yIFpfU1RSRUFNX0VSUk9SIGlmIHRoZQorICAgc3RyZWFtIHN0YXRlIGlzIGluY29uc2lzdGVudC4KKyovCisKK1pFWFRFUk4gaW50IFpFWFBPUlQgaW5mbGF0ZVN5bmMgT0YoKHpfc3RyZWFtcCBzdHJtKSk7CisvKgorICAgICBTa2lwcyBpbnZhbGlkIGNvbXByZXNzZWQgZGF0YSB1bnRpbCBhIHBvc3NpYmxlIGZ1bGwgZmx1c2ggcG9pbnQgKHNlZSBhYm92ZQorICAgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiBkZWZsYXRlIHdpdGggWl9GVUxMX0ZMVVNIKSBjYW4gYmUgZm91bmQsIG9yIHVudGlsIGFsbAorICAgYXZhaWxhYmxlIGlucHV0IGlzIHNraXBwZWQuICBObyBvdXRwdXQgaXMgcHJvdmlkZWQuCisKKyAgICAgaW5mbGF0ZVN5bmMgc2VhcmNoZXMgZm9yIGEgMDAgMDAgRkYgRkYgcGF0dGVybiBpbiB0aGUgY29tcHJlc3NlZCBkYXRhLgorICAgQWxsIGZ1bGwgZmx1c2ggcG9pbnRzIGhhdmUgdGhpcyBwYXR0ZXJuLCBidXQgbm90IGFsbCBvY2N1cnJlbmNlcyBvZiB0aGlzCisgICBwYXR0ZXJuIGFyZSBmdWxsIGZsdXNoIHBvaW50cy4KKworICAgICBpbmZsYXRlU3luYyByZXR1cm5zIFpfT0sgaWYgYSBwb3NzaWJsZSBmdWxsIGZsdXNoIHBvaW50IGhhcyBiZWVuIGZvdW5kLAorICAgWl9CVUZfRVJST1IgaWYgbm8gbW9yZSBpbnB1dCB3YXMgcHJvdmlkZWQsIFpfREFUQV9FUlJPUiBpZiBubyBmbHVzaCBwb2ludAorICAgaGFzIGJlZW4gZm91bmQsIG9yIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBzdHJlYW0gc3RydWN0dXJlIHdhcyBpbmNvbnNpc3RlbnQuCisgICBJbiB0aGUgc3VjY2VzcyBjYXNlLCB0aGUgYXBwbGljYXRpb24gbWF5IHNhdmUgdGhlIGN1cnJlbnQgY3VycmVudCB2YWx1ZSBvZgorICAgdG90YWxfaW4gd2hpY2ggaW5kaWNhdGVzIHdoZXJlIHZhbGlkIGNvbXByZXNzZWQgZGF0YSB3YXMgZm91bmQuICBJbiB0aGUKKyAgIGVycm9yIGNhc2UsIHRoZSBhcHBsaWNhdGlvbiBtYXkgcmVwZWF0ZWRseSBjYWxsIGluZmxhdGVTeW5jLCBwcm92aWRpbmcgbW9yZQorICAgaW5wdXQgZWFjaCB0aW1lLCB1bnRpbCBzdWNjZXNzIG9yIGVuZCBvZiB0aGUgaW5wdXQgZGF0YS4KKyovCisKK1pFWFRFUk4gaW50IFpFWFBPUlQgaW5mbGF0ZUNvcHkgT0YoKHpfc3RyZWFtcCBkZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgel9zdHJlYW1wIHNvdXJjZSkpOworLyoKKyAgICAgU2V0cyB0aGUgZGVzdGluYXRpb24gc3RyZWFtIGFzIGEgY29tcGxldGUgY29weSBvZiB0aGUgc291cmNlIHN0cmVhbS4KKworICAgICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VmdWwgd2hlbiByYW5kb21seSBhY2Nlc3NpbmcgYSBsYXJnZSBzdHJlYW0uICBUaGUKKyAgIGZpcnN0IHBhc3MgdGhyb3VnaCB0aGUgc3RyZWFtIGNhbiBwZXJpb2RpY2FsbHkgcmVjb3JkIHRoZSBpbmZsYXRlIHN0YXRlLAorICAgYWxsb3dpbmcgcmVzdGFydGluZyBpbmZsYXRlIGF0IHRob3NlIHBvaW50cyB3aGVuIHJhbmRvbWx5IGFjY2Vzc2luZyB0aGUKKyAgIHN0cmVhbS4KKworICAgICBpbmZsYXRlQ29weSByZXR1cm5zIFpfT0sgaWYgc3VjY2VzcywgWl9NRU1fRVJST1IgaWYgdGhlcmUgd2FzIG5vdAorICAgZW5vdWdoIG1lbW9yeSwgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHNvdXJjZSBzdHJlYW0gc3RhdGUgd2FzIGluY29uc2lzdGVudAorICAgKHN1Y2ggYXMgemFsbG9jIGJlaW5nIFpfTlVMTCkuICBtc2cgaXMgbGVmdCB1bmNoYW5nZWQgaW4gYm90aCBzb3VyY2UgYW5kCisgICBkZXN0aW5hdGlvbi4KKyovCisKK1pFWFRFUk4gaW50IFpFWFBPUlQgaW5mbGF0ZVJlc2V0IE9GKCh6X3N0cmVhbXAgc3RybSkpOworLyoKKyAgICAgVGhpcyBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIGluZmxhdGVFbmQgZm9sbG93ZWQgYnkgaW5mbGF0ZUluaXQsCisgICBidXQgZG9lcyBub3QgZnJlZSBhbmQgcmVhbGxvY2F0ZSB0aGUgaW50ZXJuYWwgZGVjb21wcmVzc2lvbiBzdGF0ZS4gIFRoZQorICAgc3RyZWFtIHdpbGwga2VlcCBhdHRyaWJ1dGVzIHRoYXQgbWF5IGhhdmUgYmVlbiBzZXQgYnkgaW5mbGF0ZUluaXQyLgorCisgICAgIGluZmxhdGVSZXNldCByZXR1cm5zIFpfT0sgaWYgc3VjY2Vzcywgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHNvdXJjZQorICAgc3RyZWFtIHN0YXRlIHdhcyBpbmNvbnNpc3RlbnQgKHN1Y2ggYXMgemFsbG9jIG9yIHN0YXRlIGJlaW5nIFpfTlVMTCkuCisqLworCitaRVhURVJOIGludCBaRVhQT1JUIGluZmxhdGVSZXNldDIgT0YoKHpfc3RyZWFtcCBzdHJtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2luZG93Qml0cykpOworLyoKKyAgICAgVGhpcyBmdW5jdGlvbiBpcyB0aGUgc2FtZSBhcyBpbmZsYXRlUmVzZXQsIGJ1dCBpdCBhbHNvIHBlcm1pdHMgY2hhbmdpbmcKKyAgIHRoZSB3cmFwIGFuZCB3aW5kb3cgc2l6ZSByZXF1ZXN0cy4gIFRoZSB3aW5kb3dCaXRzIHBhcmFtZXRlciBpcyBpbnRlcnByZXRlZAorICAgdGhlIHNhbWUgYXMgaXQgaXMgZm9yIGluZmxhdGVJbml0Mi4gIElmIHRoZSB3aW5kb3cgc2l6ZSBpcyBjaGFuZ2VkLCB0aGVuIHRoZQorICAgbWVtb3J5IGFsbG9jYXRlZCBmb3IgdGhlIHdpbmRvdyBpcyBmcmVlZCwgYW5kIHRoZSB3aW5kb3cgd2lsbCBiZSByZWFsbG9jYXRlZAorICAgYnkgaW5mbGF0ZSgpIGlmIG5lZWRlZC4KKworICAgICBpbmZsYXRlUmVzZXQyIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBvciBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc291cmNlCisgICBzdHJlYW0gc3RhdGUgd2FzIGluY29uc2lzdGVudCAoc3VjaCBhcyB6YWxsb2Mgb3Igc3RhdGUgYmVpbmcgWl9OVUxMKSwgb3IgaWYKKyAgIHRoZSB3aW5kb3dCaXRzIHBhcmFtZXRlciBpcyBpbnZhbGlkLgorKi8KKworWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRlUHJpbWUgT0YoKHpfc3RyZWFtcCBzdHJtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBiaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2YWx1ZSkpOworLyoKKyAgICAgVGhpcyBmdW5jdGlvbiBpbnNlcnRzIGJpdHMgaW4gdGhlIGluZmxhdGUgaW5wdXQgc3RyZWFtLiAgVGhlIGludGVudCBpcworICAgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc3RhcnQgaW5mbGF0aW5nIGF0IGEgYml0IHBvc2l0aW9uIGluIHRoZQorICAgbWlkZGxlIG9mIGEgYnl0ZS4gIFRoZSBwcm92aWRlZCBiaXRzIHdpbGwgYmUgdXNlZCBiZWZvcmUgYW55IGJ5dGVzIGFyZSB1c2VkCisgICBmcm9tIG5leHRfaW4uICBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIHVzZWQgd2l0aCByYXcgaW5mbGF0ZSwgYW5kCisgICBzaG91bGQgYmUgdXNlZCBiZWZvcmUgdGhlIGZpcnN0IGluZmxhdGUoKSBjYWxsIGFmdGVyIGluZmxhdGVJbml0MigpIG9yCisgICBpbmZsYXRlUmVzZXQoKS4gIGJpdHMgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMTYsIGFuZCB0aGF0IG1hbnkgb2YgdGhlCisgICBsZWFzdCBzaWduaWZpY2FudCBiaXRzIG9mIHZhbHVlIHdpbGwgYmUgaW5zZXJ0ZWQgaW4gdGhlIGlucHV0LgorCisgICAgIElmIGJpdHMgaXMgbmVnYXRpdmUsIHRoZW4gdGhlIGlucHV0IHN0cmVhbSBiaXQgYnVmZmVyIGlzIGVtcHRpZWQuICBUaGVuCisgICBpbmZsYXRlUHJpbWUoKSBjYW4gYmUgY2FsbGVkIGFnYWluIHRvIHB1dCBiaXRzIGluIHRoZSBidWZmZXIuICBUaGlzIGlzIHVzZWQKKyAgIHRvIGNsZWFyIG91dCBiaXRzIGxlZnRvdmVyIGFmdGVyIGZlZWRpbmcgaW5mbGF0ZSBhIGJsb2NrIGRlc2NyaXB0aW9uIHByaW9yCisgICB0byBmZWVkaW5nIGluZmxhdGUgY29kZXMuCisKKyAgICAgaW5mbGF0ZVByaW1lIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBvciBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc291cmNlCisgICBzdHJlYW0gc3RhdGUgd2FzIGluY29uc2lzdGVudC4KKyovCisKK1pFWFRFUk4gbG9uZyBaRVhQT1JUIGluZmxhdGVNYXJrIE9GKCh6X3N0cmVhbXAgc3RybSkpOworLyoKKyAgICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHR3byB2YWx1ZXMsIG9uZSBpbiB0aGUgbG93ZXIgMTYgYml0cyBvZiB0aGUgcmV0dXJuCisgICB2YWx1ZSwgYW5kIHRoZSBvdGhlciBpbiB0aGUgcmVtYWluaW5nIHVwcGVyIGJpdHMsIG9idGFpbmVkIGJ5IHNoaWZ0aW5nIHRoZQorICAgcmV0dXJuIHZhbHVlIGRvd24gMTYgYml0cy4gIElmIHRoZSB1cHBlciB2YWx1ZSBpcyAtMSBhbmQgdGhlIGxvd2VyIHZhbHVlIGlzCisgICB6ZXJvLCB0aGVuIGluZmxhdGUoKSBpcyBjdXJyZW50bHkgZGVjb2RpbmcgaW5mb3JtYXRpb24gb3V0c2lkZSBvZiBhIGJsb2NrLgorICAgSWYgdGhlIHVwcGVyIHZhbHVlIGlzIC0xIGFuZCB0aGUgbG93ZXIgdmFsdWUgaXMgbm9uLXplcm8sIHRoZW4gaW5mbGF0ZSBpcyBpbgorICAgdGhlIG1pZGRsZSBvZiBhIHN0b3JlZCBibG9jaywgd2l0aCB0aGUgbG93ZXIgdmFsdWUgZXF1YWxpbmcgdGhlIG51bWJlciBvZgorICAgYnl0ZXMgZnJvbSB0aGUgaW5wdXQgcmVtYWluaW5nIHRvIGNvcHkuICBJZiB0aGUgdXBwZXIgdmFsdWUgaXMgbm90IC0xLCB0aGVuCisgICBpdCBpcyB0aGUgbnVtYmVyIG9mIGJpdHMgYmFjayBmcm9tIHRoZSBjdXJyZW50IGJpdCBwb3NpdGlvbiBpbiB0aGUgaW5wdXQgb2YKKyAgIHRoZSBjb2RlIChsaXRlcmFsIG9yIGxlbmd0aC9kaXN0YW5jZSBwYWlyKSBjdXJyZW50bHkgYmVpbmcgcHJvY2Vzc2VkLiAgSW4KKyAgIHRoYXQgY2FzZSB0aGUgbG93ZXIgdmFsdWUgaXMgdGhlIG51bWJlciBvZiBieXRlcyBhbHJlYWR5IGVtaXR0ZWQgZm9yIHRoYXQKKyAgIGNvZGUuCisKKyAgICAgQSBjb2RlIGlzIGJlaW5nIHByb2Nlc3NlZCBpZiBpbmZsYXRlIGlzIHdhaXRpbmcgZm9yIG1vcmUgaW5wdXQgdG8gY29tcGxldGUKKyAgIGRlY29kaW5nIG9mIHRoZSBjb2RlLCBvciBpZiBpdCBoYXMgY29tcGxldGVkIGRlY29kaW5nIGJ1dCBpcyB3YWl0aW5nIGZvcgorICAgbW9yZSBvdXRwdXQgc3BhY2UgdG8gd3JpdGUgdGhlIGxpdGVyYWwgb3IgbWF0Y2ggZGF0YS4KKworICAgICBpbmZsYXRlTWFyaygpIGlzIHVzZWQgdG8gbWFyayBsb2NhdGlvbnMgaW4gdGhlIGlucHV0IGRhdGEgZm9yIHJhbmRvbQorICAgYWNjZXNzLCB3aGljaCBtYXkgYmUgYXQgYml0IHBvc2l0aW9ucywgYW5kIHRvIG5vdGUgdGhvc2UgY2FzZXMgd2hlcmUgdGhlCisgICBvdXRwdXQgb2YgYSBjb2RlIG1heSBzcGFuIGJvdW5kYXJpZXMgb2YgcmFuZG9tIGFjY2VzcyBibG9ja3MuICBUaGUgY3VycmVudAorICAgbG9jYXRpb24gaW4gdGhlIGlucHV0IHN0cmVhbSBjYW4gYmUgZGV0ZXJtaW5lZCBmcm9tIGF2YWlsX2luIGFuZCBkYXRhX3R5cGUKKyAgIGFzIG5vdGVkIGluIHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhlIFpfQkxPQ0sgZmx1c2ggcGFyYW1ldGVyIGZvciBpbmZsYXRlLgorCisgICAgIGluZmxhdGVNYXJrIHJldHVybnMgdGhlIHZhbHVlIG5vdGVkIGFib3ZlLCBvciAtNjU1MzYgaWYgdGhlIHByb3ZpZGVkCisgICBzb3VyY2Ugc3RyZWFtIHN0YXRlIHdhcyBpbmNvbnNpc3RlbnQuCisqLworCitaRVhURVJOIGludCBaRVhQT1JUIGluZmxhdGVHZXRIZWFkZXIgT0YoKHpfc3RyZWFtcCBzdHJtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnel9oZWFkZXJwIGhlYWQpKTsKKy8qCisgICAgIGluZmxhdGVHZXRIZWFkZXIoKSByZXF1ZXN0cyB0aGF0IGd6aXAgaGVhZGVyIGluZm9ybWF0aW9uIGJlIHN0b3JlZCBpbiB0aGUKKyAgIHByb3ZpZGVkIGd6X2hlYWRlciBzdHJ1Y3R1cmUuICBpbmZsYXRlR2V0SGVhZGVyKCkgbWF5IGJlIGNhbGxlZCBhZnRlcgorICAgaW5mbGF0ZUluaXQyKCkgb3IgaW5mbGF0ZVJlc2V0KCksIGFuZCBiZWZvcmUgdGhlIGZpcnN0IGNhbGwgb2YgaW5mbGF0ZSgpLgorICAgQXMgaW5mbGF0ZSgpIHByb2Nlc3NlcyB0aGUgZ3ppcCBzdHJlYW0sIGhlYWQtPmRvbmUgaXMgemVybyB1bnRpbCB0aGUgaGVhZGVyCisgICBpcyBjb21wbGV0ZWQsIGF0IHdoaWNoIHRpbWUgaGVhZC0+ZG9uZSBpcyBzZXQgdG8gb25lLiAgSWYgYSB6bGliIHN0cmVhbSBpcworICAgYmVpbmcgZGVjb2RlZCwgdGhlbiBoZWFkLT5kb25lIGlzIHNldCB0byAtMSB0byBpbmRpY2F0ZSB0aGF0IHRoZXJlIHdpbGwgYmUKKyAgIG5vIGd6aXAgaGVhZGVyIGluZm9ybWF0aW9uIGZvcnRoY29taW5nLiAgTm90ZSB0aGF0IFpfQkxPQ0sgb3IgWl9UUkVFUyBjYW4gYmUKKyAgIHVzZWQgdG8gZm9yY2UgaW5mbGF0ZSgpIHRvIHJldHVybiBpbW1lZGlhdGVseSBhZnRlciBoZWFkZXIgcHJvY2Vzc2luZyBpcworICAgY29tcGxldGUgYW5kIGJlZm9yZSBhbnkgYWN0dWFsIGRhdGEgaXMgZGVjb21wcmVzc2VkLgorCisgICAgIFRoZSB0ZXh0LCB0aW1lLCB4ZmxhZ3MsIGFuZCBvcyBmaWVsZHMgYXJlIGZpbGxlZCBpbiB3aXRoIHRoZSBnemlwIGhlYWRlcgorICAgY29udGVudHMuICBoY3JjIGlzIHNldCB0byB0cnVlIGlmIHRoZXJlIGlzIGEgaGVhZGVyIENSQy4gIChUaGUgaGVhZGVyIENSQworICAgd2FzIHZhbGlkIGlmIGRvbmUgaXMgc2V0IHRvIG9uZS4pIElmIGV4dHJhIGlzIG5vdCBaX05VTEwsIHRoZW4gZXh0cmFfbWF4CisgICBjb250YWlucyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUgdG8gZXh0cmEuICBPbmNlIGRvbmUgaXMgdHJ1ZSwKKyAgIGV4dHJhX2xlbiBjb250YWlucyB0aGUgYWN0dWFsIGV4dHJhIGZpZWxkIGxlbmd0aCwgYW5kIGV4dHJhIGNvbnRhaW5zIHRoZQorICAgZXh0cmEgZmllbGQsIG9yIHRoYXQgZmllbGQgdHJ1bmNhdGVkIGlmIGV4dHJhX21heCBpcyBsZXNzIHRoYW4gZXh0cmFfbGVuLgorICAgSWYgbmFtZSBpcyBub3QgWl9OVUxMLCB0aGVuIHVwIHRvIG5hbWVfbWF4IGNoYXJhY3RlcnMgYXJlIHdyaXR0ZW4gdGhlcmUsCisgICB0ZXJtaW5hdGVkIHdpdGggYSB6ZXJvIHVubGVzcyB0aGUgbGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbiBuYW1lX21heC4gIElmCisgICBjb21tZW50IGlzIG5vdCBaX05VTEwsIHRoZW4gdXAgdG8gY29tbV9tYXggY2hhcmFjdGVycyBhcmUgd3JpdHRlbiB0aGVyZSwKKyAgIHRlcm1pbmF0ZWQgd2l0aCBhIHplcm8gdW5sZXNzIHRoZSBsZW5ndGggaXMgZ3JlYXRlciB0aGFuIGNvbW1fbWF4LiAgV2hlbiBhbnkKKyAgIG9mIGV4dHJhLCBuYW1lLCBvciBjb21tZW50IGFyZSBub3QgWl9OVUxMIGFuZCB0aGUgcmVzcGVjdGl2ZSBmaWVsZCBpcyBub3QKKyAgIHByZXNlbnQgaW4gdGhlIGhlYWRlciwgdGhlbiB0aGF0IGZpZWxkIGlzIHNldCB0byBaX05VTEwgdG8gc2lnbmFsIGl0cworICAgYWJzZW5jZS4gIFRoaXMgYWxsb3dzIHRoZSB1c2Ugb2YgZGVmbGF0ZVNldEhlYWRlcigpIHdpdGggdGhlIHJldHVybmVkCisgICBzdHJ1Y3R1cmUgdG8gZHVwbGljYXRlIHRoZSBoZWFkZXIuICBIb3dldmVyIGlmIHRob3NlIGZpZWxkcyBhcmUgc2V0IHRvCisgICBhbGxvY2F0ZWQgbWVtb3J5LCB0aGVuIHRoZSBhcHBsaWNhdGlvbiB3aWxsIG5lZWQgdG8gc2F2ZSB0aG9zZSBwb2ludGVycworICAgZWxzZXdoZXJlIHNvIHRoYXQgdGhleSBjYW4gYmUgZXZlbnR1YWxseSBmcmVlZC4KKworICAgICBJZiBpbmZsYXRlR2V0SGVhZGVyIGlzIG5vdCB1c2VkLCB0aGVuIHRoZSBoZWFkZXIgaW5mb3JtYXRpb24gaXMgc2ltcGx5CisgICBkaXNjYXJkZWQuICBUaGUgaGVhZGVyIGlzIGFsd2F5cyBjaGVja2VkIGZvciB2YWxpZGl0eSwgaW5jbHVkaW5nIHRoZSBoZWFkZXIKKyAgIENSQyBpZiBwcmVzZW50LiAgaW5mbGF0ZVJlc2V0KCkgd2lsbCByZXNldCB0aGUgcHJvY2VzcyB0byBkaXNjYXJkIHRoZSBoZWFkZXIKKyAgIGluZm9ybWF0aW9uLiAgVGhlIGFwcGxpY2F0aW9uIHdvdWxkIG5lZWQgdG8gY2FsbCBpbmZsYXRlR2V0SGVhZGVyKCkgYWdhaW4gdG8KKyAgIHJldHJpZXZlIHRoZSBoZWFkZXIgZnJvbSB0aGUgbmV4dCBnemlwIHN0cmVhbS4KKworICAgICBpbmZsYXRlR2V0SGVhZGVyIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBvciBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc291cmNlCisgICBzdHJlYW0gc3RhdGUgd2FzIGluY29uc2lzdGVudC4KKyovCisKKy8qCitaRVhURVJOIGludCBaRVhQT1JUIGluZmxhdGVCYWNrSW5pdCBPRigoel9zdHJlYW1wIHN0cm0sIGludCB3aW5kb3dCaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgRkFSICp3aW5kb3cpKTsKKworICAgICBJbml0aWFsaXplIHRoZSBpbnRlcm5hbCBzdHJlYW0gc3RhdGUgZm9yIGRlY29tcHJlc3Npb24gdXNpbmcgaW5mbGF0ZUJhY2soKQorICAgY2FsbHMuICBUaGUgZmllbGRzIHphbGxvYywgemZyZWUgYW5kIG9wYXF1ZSBpbiBzdHJtIG11c3QgYmUgaW5pdGlhbGl6ZWQKKyAgIGJlZm9yZSB0aGUgY2FsbC4gIElmIHphbGxvYyBhbmQgemZyZWUgYXJlIFpfTlVMTCwgdGhlbiB0aGUgZGVmYXVsdCBsaWJyYXJ5LQorICAgZGVyaXZlZCBtZW1vcnkgYWxsb2NhdGlvbiByb3V0aW5lcyBhcmUgdXNlZC4gIHdpbmRvd0JpdHMgaXMgdGhlIGJhc2UgdHdvCisgICBsb2dhcml0aG0gb2YgdGhlIHdpbmRvdyBzaXplLCBpbiB0aGUgcmFuZ2UgOC4uMTUuICB3aW5kb3cgaXMgYSBjYWxsZXIKKyAgIHN1cHBsaWVkIGJ1ZmZlciBvZiB0aGF0IHNpemUuICBFeGNlcHQgZm9yIHNwZWNpYWwgYXBwbGljYXRpb25zIHdoZXJlIGl0IGlzCisgICBhc3N1cmVkIHRoYXQgZGVmbGF0ZSB3YXMgdXNlZCB3aXRoIHNtYWxsIHdpbmRvdyBzaXplcywgd2luZG93Qml0cyBtdXN0IGJlIDE1CisgICBhbmQgYSAzMksgYnl0ZSB3aW5kb3cgbXVzdCBiZSBzdXBwbGllZCB0byBiZSBhYmxlIHRvIGRlY29tcHJlc3MgZ2VuZXJhbAorICAgZGVmbGF0ZSBzdHJlYW1zLgorCisgICAgIFNlZSBpbmZsYXRlQmFjaygpIGZvciB0aGUgdXNhZ2Ugb2YgdGhlc2Ugcm91dGluZXMuCisKKyAgICAgaW5mbGF0ZUJhY2tJbml0IHdpbGwgcmV0dXJuIFpfT0sgb24gc3VjY2VzcywgWl9TVFJFQU1fRVJST1IgaWYgYW55IG9mCisgICB0aGUgcGFyYW1ldGVycyBhcmUgaW52YWxpZCwgWl9NRU1fRVJST1IgaWYgdGhlIGludGVybmFsIHN0YXRlIGNvdWxkIG5vdCBiZQorICAgYWxsb2NhdGVkLCBvciBaX1ZFUlNJT05fRVJST1IgaWYgdGhlIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgZG9lcyBub3QgbWF0Y2gKKyAgIHRoZSB2ZXJzaW9uIG9mIHRoZSBoZWFkZXIgZmlsZS4KKyovCisKK3R5cGVkZWYgdW5zaWduZWQgKCppbl9mdW5jKSBPRigodm9pZCBGQVIgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgel9jb25zdCB1bnNpZ25lZCBjaGFyIEZBUiAqIEZBUiAqKSk7Cit0eXBlZGVmIGludCAoKm91dF9mdW5jKSBPRigodm9pZCBGQVIgKiwgdW5zaWduZWQgY2hhciBGQVIgKiwgdW5zaWduZWQpKTsKKworWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRlQmFjayBPRigoel9zdHJlYW1wIHN0cm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbl9mdW5jIGluLCB2b2lkIEZBUiAqaW5fZGVzYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dF9mdW5jIG91dCwgdm9pZCBGQVIgKm91dF9kZXNjKSk7CisvKgorICAgICBpbmZsYXRlQmFjaygpIGRvZXMgYSByYXcgaW5mbGF0ZSB3aXRoIGEgc2luZ2xlIGNhbGwgdXNpbmcgYSBjYWxsLWJhY2sKKyAgIGludGVyZmFjZSBmb3IgaW5wdXQgYW5kIG91dHB1dC4gIFRoaXMgaXMgcG90ZW50aWFsbHkgbW9yZSBlZmZpY2llbnQgdGhhbgorICAgaW5mbGF0ZSgpIGZvciBmaWxlIGkvbyBhcHBsaWNhdGlvbnMsIGluIHRoYXQgaXQgYXZvaWRzIGNvcHlpbmcgYmV0d2VlbiB0aGUKKyAgIG91dHB1dCBhbmQgdGhlIHNsaWRpbmcgd2luZG93IGJ5IHNpbXBseSBtYWtpbmcgdGhlIHdpbmRvdyBpdHNlbGYgdGhlIG91dHB1dAorICAgYnVmZmVyLiAgaW5mbGF0ZSgpIGNhbiBiZSBmYXN0ZXIgb24gbW9kZXJuIENQVXMgd2hlbiB1c2VkIHdpdGggbGFyZ2UKKyAgIGJ1ZmZlcnMuICBpbmZsYXRlQmFjaygpIHRydXN0cyB0aGUgYXBwbGljYXRpb24gdG8gbm90IGNoYW5nZSB0aGUgb3V0cHV0CisgICBidWZmZXIgcGFzc2VkIGJ5IHRoZSBvdXRwdXQgZnVuY3Rpb24sIGF0IGxlYXN0IHVudGlsIGluZmxhdGVCYWNrKCkgcmV0dXJucy4KKworICAgICBpbmZsYXRlQmFja0luaXQoKSBtdXN0IGJlIGNhbGxlZCBmaXJzdCB0byBhbGxvY2F0ZSB0aGUgaW50ZXJuYWwgc3RhdGUKKyAgIGFuZCB0byBpbml0aWFsaXplIHRoZSBzdGF0ZSB3aXRoIHRoZSB1c2VyLXByb3ZpZGVkIHdpbmRvdyBidWZmZXIuCisgICBpbmZsYXRlQmFjaygpIG1heSB0aGVuIGJlIHVzZWQgbXVsdGlwbGUgdGltZXMgdG8gaW5mbGF0ZSBhIGNvbXBsZXRlLCByYXcKKyAgIGRlZmxhdGUgc3RyZWFtIHdpdGggZWFjaCBjYWxsLiAgaW5mbGF0ZUJhY2tFbmQoKSBpcyB0aGVuIGNhbGxlZCB0byBmcmVlIHRoZQorICAgYWxsb2NhdGVkIHN0YXRlLgorCisgICAgIEEgcmF3IGRlZmxhdGUgc3RyZWFtIGlzIG9uZSB3aXRoIG5vIHpsaWIgb3IgZ3ppcCBoZWFkZXIgb3IgdHJhaWxlci4KKyAgIFRoaXMgcm91dGluZSB3b3VsZCBub3JtYWxseSBiZSB1c2VkIGluIGEgdXRpbGl0eSB0aGF0IHJlYWRzIHppcCBvciBnemlwCisgICBmaWxlcyBhbmQgd3JpdGVzIG91dCB1bmNvbXByZXNzZWQgZmlsZXMuICBUaGUgdXRpbGl0eSB3b3VsZCBkZWNvZGUgdGhlCisgICBoZWFkZXIgYW5kIHByb2Nlc3MgdGhlIHRyYWlsZXIgb24gaXRzIG93biwgaGVuY2UgdGhpcyByb3V0aW5lIGV4cGVjdHMgb25seQorICAgdGhlIHJhdyBkZWZsYXRlIHN0cmVhbSB0byBkZWNvbXByZXNzLiAgVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgZGVmYXVsdAorICAgYmVoYXZpb3Igb2YgaW5mbGF0ZSgpLCB3aGljaCBleHBlY3RzIGEgemxpYiBoZWFkZXIgYW5kIHRyYWlsZXIgYXJvdW5kIHRoZQorICAgZGVmbGF0ZSBzdHJlYW0uCisKKyAgICAgaW5mbGF0ZUJhY2soKSB1c2VzIHR3byBzdWJyb3V0aW5lcyBzdXBwbGllZCBieSB0aGUgY2FsbGVyIHRoYXQgYXJlIHRoZW4KKyAgIGNhbGxlZCBieSBpbmZsYXRlQmFjaygpIGZvciBpbnB1dCBhbmQgb3V0cHV0LiAgaW5mbGF0ZUJhY2soKSBjYWxscyB0aG9zZQorICAgcm91dGluZXMgdW50aWwgaXQgcmVhZHMgYSBjb21wbGV0ZSBkZWZsYXRlIHN0cmVhbSBhbmQgd3JpdGVzIG91dCBhbGwgb2YgdGhlCisgICB1bmNvbXByZXNzZWQgZGF0YSwgb3IgdW50aWwgaXQgZW5jb3VudGVycyBhbiBlcnJvci4gIFRoZSBmdW5jdGlvbidzCisgICBwYXJhbWV0ZXJzIGFuZCByZXR1cm4gdHlwZXMgYXJlIGRlZmluZWQgYWJvdmUgaW4gdGhlIGluX2Z1bmMgYW5kIG91dF9mdW5jCisgICB0eXBlZGVmcy4gIGluZmxhdGVCYWNrKCkgd2lsbCBjYWxsIGluKGluX2Rlc2MsICZidWYpIHdoaWNoIHNob3VsZCByZXR1cm4gdGhlCisgICBudW1iZXIgb2YgYnl0ZXMgb2YgcHJvdmlkZWQgaW5wdXQsIGFuZCBhIHBvaW50ZXIgdG8gdGhhdCBpbnB1dCBpbiBidWYuICBJZgorICAgdGhlcmUgaXMgbm8gaW5wdXQgYXZhaWxhYmxlLCBpbigpIG11c3QgcmV0dXJuIHplcm8gLS0gYnVmIGlzIGlnbm9yZWQgaW4gdGhhdAorICAgY2FzZSAtLSBhbmQgaW5mbGF0ZUJhY2soKSB3aWxsIHJldHVybiBhIGJ1ZmZlciBlcnJvci4gIGluZmxhdGVCYWNrKCkgd2lsbAorICAgY2FsbCBvdXQob3V0X2Rlc2MsIGJ1ZiwgbGVuKSB0byB3cml0ZSB0aGUgdW5jb21wcmVzc2VkIGRhdGEgYnVmWzAuLmxlbi0xXS4KKyAgIG91dCgpIHNob3VsZCByZXR1cm4gemVybyBvbiBzdWNjZXNzLCBvciBub24temVybyBvbiBmYWlsdXJlLiAgSWYgb3V0KCkKKyAgIHJldHVybnMgbm9uLXplcm8sIGluZmxhdGVCYWNrKCkgd2lsbCByZXR1cm4gd2l0aCBhbiBlcnJvci4gIE5laXRoZXIgaW4oKSBub3IKKyAgIG91dCgpIGFyZSBwZXJtaXR0ZWQgdG8gY2hhbmdlIHRoZSBjb250ZW50cyBvZiB0aGUgd2luZG93IHByb3ZpZGVkIHRvCisgICBpbmZsYXRlQmFja0luaXQoKSwgd2hpY2ggaXMgYWxzbyB0aGUgYnVmZmVyIHRoYXQgb3V0KCkgdXNlcyB0byB3cml0ZSBmcm9tLgorICAgVGhlIGxlbmd0aCB3cml0dGVuIGJ5IG91dCgpIHdpbGwgYmUgYXQgbW9zdCB0aGUgd2luZG93IHNpemUuICBBbnkgbm9uLXplcm8KKyAgIGFtb3VudCBvZiBpbnB1dCBtYXkgYmUgcHJvdmlkZWQgYnkgaW4oKS4KKworICAgICBGb3IgY29udmVuaWVuY2UsIGluZmxhdGVCYWNrKCkgY2FuIGJlIHByb3ZpZGVkIGlucHV0IG9uIHRoZSBmaXJzdCBjYWxsIGJ5CisgICBzZXR0aW5nIHN0cm0tPm5leHRfaW4gYW5kIHN0cm0tPmF2YWlsX2luLiAgSWYgdGhhdCBpbnB1dCBpcyBleGhhdXN0ZWQsIHRoZW4KKyAgIGluKCkgd2lsbCBiZSBjYWxsZWQuICBUaGVyZWZvcmUgc3RybS0+bmV4dF9pbiBtdXN0IGJlIGluaXRpYWxpemVkIGJlZm9yZQorICAgY2FsbGluZyBpbmZsYXRlQmFjaygpLiAgSWYgc3RybS0+bmV4dF9pbiBpcyBaX05VTEwsIHRoZW4gaW4oKSB3aWxsIGJlIGNhbGxlZAorICAgaW1tZWRpYXRlbHkgZm9yIGlucHV0LiAgSWYgc3RybS0+bmV4dF9pbiBpcyBub3QgWl9OVUxMLCB0aGVuIHN0cm0tPmF2YWlsX2luCisgICBtdXN0IGFsc28gYmUgaW5pdGlhbGl6ZWQsIGFuZCB0aGVuIGlmIHN0cm0tPmF2YWlsX2luIGlzIG5vdCB6ZXJvLCBpbnB1dCB3aWxsCisgICBpbml0aWFsbHkgYmUgdGFrZW4gZnJvbSBzdHJtLT5uZXh0X2luWzAgLi4gIHN0cm0tPmF2YWlsX2luIC0gMV0uCisKKyAgICAgVGhlIGluX2Rlc2MgYW5kIG91dF9kZXNjIHBhcmFtZXRlcnMgb2YgaW5mbGF0ZUJhY2soKSBpcyBwYXNzZWQgYXMgdGhlCisgICBmaXJzdCBwYXJhbWV0ZXIgb2YgaW4oKSBhbmQgb3V0KCkgcmVzcGVjdGl2ZWx5IHdoZW4gdGhleSBhcmUgY2FsbGVkLiAgVGhlc2UKKyAgIGRlc2NyaXB0b3JzIGNhbiBiZSBvcHRpb25hbGx5IHVzZWQgdG8gcGFzcyBhbnkgaW5mb3JtYXRpb24gdGhhdCB0aGUgY2FsbGVyLQorICAgc3VwcGxpZWQgaW4oKSBhbmQgb3V0KCkgZnVuY3Rpb25zIG5lZWQgdG8gZG8gdGhlaXIgam9iLgorCisgICAgIE9uIHJldHVybiwgaW5mbGF0ZUJhY2soKSB3aWxsIHNldCBzdHJtLT5uZXh0X2luIGFuZCBzdHJtLT5hdmFpbF9pbiB0bworICAgcGFzcyBiYWNrIGFueSB1bnVzZWQgaW5wdXQgdGhhdCB3YXMgcHJvdmlkZWQgYnkgdGhlIGxhc3QgaW4oKSBjYWxsLiAgVGhlCisgICByZXR1cm4gdmFsdWVzIG9mIGluZmxhdGVCYWNrKCkgY2FuIGJlIFpfU1RSRUFNX0VORCBvbiBzdWNjZXNzLCBaX0JVRl9FUlJPUgorICAgaWYgaW4oKSBvciBvdXQoKSByZXR1cm5lZCBhbiBlcnJvciwgWl9EQVRBX0VSUk9SIGlmIHRoZXJlIHdhcyBhIGZvcm1hdCBlcnJvcgorICAgaW4gdGhlIGRlZmxhdGUgc3RyZWFtIChpbiB3aGljaCBjYXNlIHN0cm0tPm1zZyBpcyBzZXQgdG8gaW5kaWNhdGUgdGhlIG5hdHVyZQorICAgb2YgdGhlIGVycm9yKSwgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHN0cmVhbSB3YXMgbm90IHByb3Blcmx5IGluaXRpYWxpemVkLgorICAgSW4gdGhlIGNhc2Ugb2YgWl9CVUZfRVJST1IsIGFuIGlucHV0IG9yIG91dHB1dCBlcnJvciBjYW4gYmUgZGlzdGluZ3Vpc2hlZAorICAgdXNpbmcgc3RybS0+bmV4dF9pbiB3aGljaCB3aWxsIGJlIFpfTlVMTCBvbmx5IGlmIGluKCkgcmV0dXJuZWQgYW4gZXJyb3IuICBJZgorICAgc3RybS0+bmV4dF9pbiBpcyBub3QgWl9OVUxMLCB0aGVuIHRoZSBaX0JVRl9FUlJPUiB3YXMgZHVlIHRvIG91dCgpIHJldHVybmluZworICAgbm9uLXplcm8uICAoaW4oKSB3aWxsIGFsd2F5cyBiZSBjYWxsZWQgYmVmb3JlIG91dCgpLCBzbyBzdHJtLT5uZXh0X2luIGlzCisgICBhc3N1cmVkIHRvIGJlIGRlZmluZWQgaWYgb3V0KCkgcmV0dXJucyBub24temVyby4pICBOb3RlIHRoYXQgaW5mbGF0ZUJhY2soKQorICAgY2Fubm90IHJldHVybiBaX09LLgorKi8KKworWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRlQmFja0VuZCBPRigoel9zdHJlYW1wIHN0cm0pKTsKKy8qCisgICAgIEFsbCBtZW1vcnkgYWxsb2NhdGVkIGJ5IGluZmxhdGVCYWNrSW5pdCgpIGlzIGZyZWVkLgorCisgICAgIGluZmxhdGVCYWNrRW5kKCkgcmV0dXJucyBaX09LIG9uIHN1Y2Nlc3MsIG9yIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBzdHJlYW0KKyAgIHN0YXRlIHdhcyBpbmNvbnNpc3RlbnQuCisqLworCitaRVhURVJOIHVMb25nIFpFWFBPUlQgemxpYkNvbXBpbGVGbGFncyBPRigodm9pZCkpOworLyogUmV0dXJuIGZsYWdzIGluZGljYXRpbmcgY29tcGlsZS10aW1lIG9wdGlvbnMuCisKKyAgICBUeXBlIHNpemVzLCB0d28gYml0cyBlYWNoLCAwMCA9IDE2IGJpdHMsIDAxID0gMzIsIDEwID0gNjQsIDExID0gb3RoZXI6CisgICAgIDEuMDogc2l6ZSBvZiB1SW50CisgICAgIDMuMjogc2l6ZSBvZiB1TG9uZworICAgICA1LjQ6IHNpemUgb2Ygdm9pZHBmIChwb2ludGVyKQorICAgICA3LjY6IHNpemUgb2Ygel9vZmZfdAorCisgICAgQ29tcGlsZXIsIGFzc2VtYmxlciwgYW5kIGRlYnVnIG9wdGlvbnM6CisgICAgIDg6IFpMSUJfREVCVUcKKyAgICAgOTogQVNNViBvciBBU01JTkYgLS0gdXNlIEFTTSBjb2RlCisgICAgIDEwOiBaTElCX1dJTkFQSSAtLSBleHBvcnRlZCBmdW5jdGlvbnMgdXNlIHRoZSBXSU5BUEkgY2FsbGluZyBjb252ZW50aW9uCisgICAgIDExOiAwIChyZXNlcnZlZCkKKworICAgIE9uZS10aW1lIHRhYmxlIGJ1aWxkaW5nIChzbWFsbGVyIGNvZGUsIGJ1dCBub3QgdGhyZWFkLXNhZmUgaWYgdHJ1ZSk6CisgICAgIDEyOiBCVUlMREZJWEVEIC0tIGJ1aWxkIHN0YXRpYyBibG9jayBkZWNvZGluZyB0YWJsZXMgd2hlbiBuZWVkZWQKKyAgICAgMTM6IERZTkFNSUNfQ1JDX1RBQkxFIC0tIGJ1aWxkIENSQyBjYWxjdWxhdGlvbiB0YWJsZXMgd2hlbiBuZWVkZWQKKyAgICAgMTQsMTU6IDAgKHJlc2VydmVkKQorCisgICAgTGlicmFyeSBjb250ZW50IChpbmRpY2F0ZXMgbWlzc2luZyBmdW5jdGlvbmFsaXR5KToKKyAgICAgMTY6IE5PX0daQ09NUFJFU1MgLS0gZ3oqIGZ1bmN0aW9ucyBjYW5ub3QgY29tcHJlc3MgKHRvIGF2b2lkIGxpbmtpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmbGF0ZSBjb2RlIHdoZW4gbm90IG5lZWRlZCkKKyAgICAgMTc6IE5PX0daSVAgLS0gZGVmbGF0ZSBjYW4ndCB3cml0ZSBnemlwIHN0cmVhbXMsIGFuZCBpbmZsYXRlIGNhbid0IGRldGVjdAorICAgICAgICAgICAgICAgICAgICBhbmQgZGVjb2RlIGd6aXAgc3RyZWFtcyAodG8gYXZvaWQgbGlua2luZyBjcmMgY29kZSkKKyAgICAgMTgtMTk6IDAgKHJlc2VydmVkKQorCisgICAgT3BlcmF0aW9uIHZhcmlhdGlvbnMgKGNoYW5nZXMgaW4gbGlicmFyeSBmdW5jdGlvbmFsaXR5KToKKyAgICAgMjA6IFBLWklQX0JVR19XT1JLQVJPVU5EIC0tIHNsaWdodGx5IG1vcmUgcGVybWlzc2l2ZSBpbmZsYXRlCisgICAgIDIxOiBGQVNURVNUIC0tIGRlZmxhdGUgYWxnb3JpdGhtIHdpdGggb25seSBvbmUsIGxvd2VzdCBjb21wcmVzc2lvbiBsZXZlbAorICAgICAyMiwyMzogMCAocmVzZXJ2ZWQpCisKKyAgICBUaGUgc3ByaW50ZiB2YXJpYW50IHVzZWQgYnkgZ3pwcmludGYgKHplcm8gaXMgYmVzdCk6CisgICAgIDI0OiAwID0gdnMqLCAxID0gcyogLS0gMSBtZWFucyBsaW1pdGVkIHRvIDIwIGFyZ3VtZW50cyBhZnRlciB0aGUgZm9ybWF0CisgICAgIDI1OiAwID0gKm5wcmludGYsIDEgPSAqcHJpbnRmIC0tIDEgbWVhbnMgZ3pwcmludGYoKSBub3Qgc2VjdXJlIQorICAgICAyNjogMCA9IHJldHVybnMgdmFsdWUsIDEgPSB2b2lkIC0tIDEgbWVhbnMgaW5mZXJyZWQgc3RyaW5nIGxlbmd0aCByZXR1cm5lZAorCisgICAgUmVtYWluZGVyOgorICAgICAyNy0zMTogMCAocmVzZXJ2ZWQpCisgKi8KKworI2lmbmRlZiBaX1NPTE8KKworICAgICAgICAgICAgICAgICAgICAgICAgLyogdXRpbGl0eSBmdW5jdGlvbnMgKi8KKworLyoKKyAgICAgVGhlIGZvbGxvd2luZyB1dGlsaXR5IGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgb24gdG9wIG9mIHRoZSBiYXNpYworICAgc3RyZWFtLW9yaWVudGVkIGZ1bmN0aW9ucy4gIFRvIHNpbXBsaWZ5IHRoZSBpbnRlcmZhY2UsIHNvbWUgZGVmYXVsdCBvcHRpb25zCisgICBhcmUgYXNzdW1lZCAoY29tcHJlc3Npb24gbGV2ZWwgYW5kIG1lbW9yeSB1c2FnZSwgc3RhbmRhcmQgbWVtb3J5IGFsbG9jYXRpb24KKyAgIGZ1bmN0aW9ucykuICBUaGUgc291cmNlIGNvZGUgb2YgdGhlc2UgdXRpbGl0eSBmdW5jdGlvbnMgY2FuIGJlIG1vZGlmaWVkIGlmCisgICB5b3UgbmVlZCBzcGVjaWFsIG9wdGlvbnMuCisqLworCitaRVhURVJOIGludCBaRVhQT1JUIGNvbXByZXNzIE9GKChCeXRlZiAqZGVzdCwgICB1TG9uZ2YgKmRlc3RMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCeXRlZiAqc291cmNlLCB1TG9uZyBzb3VyY2VMZW4pKTsKKy8qCisgICAgIENvbXByZXNzZXMgdGhlIHNvdXJjZSBidWZmZXIgaW50byB0aGUgZGVzdGluYXRpb24gYnVmZmVyLiAgc291cmNlTGVuIGlzCisgICB0aGUgYnl0ZSBsZW5ndGggb2YgdGhlIHNvdXJjZSBidWZmZXIuICBVcG9uIGVudHJ5LCBkZXN0TGVuIGlzIHRoZSB0b3RhbCBzaXplCisgICBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyLCB3aGljaCBtdXN0IGJlIGF0IGxlYXN0IHRoZSB2YWx1ZSByZXR1cm5lZCBieQorICAgY29tcHJlc3NCb3VuZChzb3VyY2VMZW4pLiAgVXBvbiBleGl0LCBkZXN0TGVuIGlzIHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUKKyAgIGNvbXByZXNzZWQgZGF0YS4gIGNvbXByZXNzKCkgaXMgZXF1aXZhbGVudCB0byBjb21wcmVzczIoKSB3aXRoIGEgbGV2ZWwKKyAgIHBhcmFtZXRlciBvZiBaX0RFRkFVTFRfQ09NUFJFU1NJT04uCisKKyAgICAgY29tcHJlc3MgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIFpfTUVNX0VSUk9SIGlmIHRoZXJlIHdhcyBub3QKKyAgIGVub3VnaCBtZW1vcnksIFpfQlVGX0VSUk9SIGlmIHRoZXJlIHdhcyBub3QgZW5vdWdoIHJvb20gaW4gdGhlIG91dHB1dAorICAgYnVmZmVyLgorKi8KKworWkVYVEVSTiBpbnQgWkVYUE9SVCBjb21wcmVzczIgT0YoKEJ5dGVmICpkZXN0LCAgIHVMb25nZiAqZGVzdExlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCeXRlZiAqc291cmNlLCB1TG9uZyBzb3VyY2VMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxldmVsKSk7CisvKgorICAgICBDb21wcmVzc2VzIHRoZSBzb3VyY2UgYnVmZmVyIGludG8gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlci4gIFRoZSBsZXZlbAorICAgcGFyYW1ldGVyIGhhcyB0aGUgc2FtZSBtZWFuaW5nIGFzIGluIGRlZmxhdGVJbml0LiAgc291cmNlTGVuIGlzIHRoZSBieXRlCisgICBsZW5ndGggb2YgdGhlIHNvdXJjZSBidWZmZXIuICBVcG9uIGVudHJ5LCBkZXN0TGVuIGlzIHRoZSB0b3RhbCBzaXplIG9mIHRoZQorICAgZGVzdGluYXRpb24gYnVmZmVyLCB3aGljaCBtdXN0IGJlIGF0IGxlYXN0IHRoZSB2YWx1ZSByZXR1cm5lZCBieQorICAgY29tcHJlc3NCb3VuZChzb3VyY2VMZW4pLiAgVXBvbiBleGl0LCBkZXN0TGVuIGlzIHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUKKyAgIGNvbXByZXNzZWQgZGF0YS4KKworICAgICBjb21wcmVzczIgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIFpfTUVNX0VSUk9SIGlmIHRoZXJlIHdhcyBub3QgZW5vdWdoCisgICBtZW1vcnksIFpfQlVGX0VSUk9SIGlmIHRoZXJlIHdhcyBub3QgZW5vdWdoIHJvb20gaW4gdGhlIG91dHB1dCBidWZmZXIsCisgICBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgbGV2ZWwgcGFyYW1ldGVyIGlzIGludmFsaWQuCisqLworCitaRVhURVJOIHVMb25nIFpFWFBPUlQgY29tcHJlc3NCb3VuZCBPRigodUxvbmcgc291cmNlTGVuKSk7CisvKgorICAgICBjb21wcmVzc0JvdW5kKCkgcmV0dXJucyBhbiB1cHBlciBib3VuZCBvbiB0aGUgY29tcHJlc3NlZCBzaXplIGFmdGVyCisgICBjb21wcmVzcygpIG9yIGNvbXByZXNzMigpIG9uIHNvdXJjZUxlbiBieXRlcy4gIEl0IHdvdWxkIGJlIHVzZWQgYmVmb3JlIGEKKyAgIGNvbXByZXNzKCkgb3IgY29tcHJlc3MyKCkgY2FsbCB0byBhbGxvY2F0ZSB0aGUgZGVzdGluYXRpb24gYnVmZmVyLgorKi8KKworWkVYVEVSTiBpbnQgWkVYUE9SVCB1bmNvbXByZXNzIE9GKChCeXRlZiAqZGVzdCwgICB1TG9uZ2YgKmRlc3RMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJ5dGVmICpzb3VyY2UsIHVMb25nIHNvdXJjZUxlbikpOworLyoKKyAgICAgRGVjb21wcmVzc2VzIHRoZSBzb3VyY2UgYnVmZmVyIGludG8gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlci4gIHNvdXJjZUxlbiBpcworICAgdGhlIGJ5dGUgbGVuZ3RoIG9mIHRoZSBzb3VyY2UgYnVmZmVyLiAgVXBvbiBlbnRyeSwgZGVzdExlbiBpcyB0aGUgdG90YWwgc2l6ZQorICAgb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciwgd2hpY2ggbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCB0aGUgZW50aXJlCisgICB1bmNvbXByZXNzZWQgZGF0YS4gIChUaGUgc2l6ZSBvZiB0aGUgdW5jb21wcmVzc2VkIGRhdGEgbXVzdCBoYXZlIGJlZW4gc2F2ZWQKKyAgIHByZXZpb3VzbHkgYnkgdGhlIGNvbXByZXNzb3IgYW5kIHRyYW5zbWl0dGVkIHRvIHRoZSBkZWNvbXByZXNzb3IgYnkgc29tZQorICAgbWVjaGFuaXNtIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgY29tcHJlc3Npb24gbGlicmFyeS4pIFVwb24gZXhpdCwgZGVzdExlbgorICAgaXMgdGhlIGFjdHVhbCBzaXplIG9mIHRoZSB1bmNvbXByZXNzZWQgZGF0YS4KKworICAgICB1bmNvbXByZXNzIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBaX01FTV9FUlJPUiBpZiB0aGVyZSB3YXMgbm90CisgICBlbm91Z2ggbWVtb3J5LCBaX0JVRl9FUlJPUiBpZiB0aGVyZSB3YXMgbm90IGVub3VnaCByb29tIGluIHRoZSBvdXRwdXQKKyAgIGJ1ZmZlciwgb3IgWl9EQVRBX0VSUk9SIGlmIHRoZSBpbnB1dCBkYXRhIHdhcyBjb3JydXB0ZWQgb3IgaW5jb21wbGV0ZS4gIEluCisgICB0aGUgY2FzZSB3aGVyZSB0aGVyZSBpcyBub3QgZW5vdWdoIHJvb20sIHVuY29tcHJlc3MoKSB3aWxsIGZpbGwgdGhlIG91dHB1dAorICAgYnVmZmVyIHdpdGggdGhlIHVuY29tcHJlc3NlZCBkYXRhIHVwIHRvIHRoYXQgcG9pbnQuCisqLworCitaRVhURVJOIGludCBaRVhQT1JUIHVuY29tcHJlc3MyIE9GKChCeXRlZiAqZGVzdCwgICB1TG9uZ2YgKmRlc3RMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCeXRlZiAqc291cmNlLCB1TG9uZyAqc291cmNlTGVuKSk7CisvKgorICAgICBTYW1lIGFzIHVuY29tcHJlc3MsIGV4Y2VwdCB0aGF0IHNvdXJjZUxlbiBpcyBhIHBvaW50ZXIsIHdoZXJlIHRoZQorICAgbGVuZ3RoIG9mIHRoZSBzb3VyY2UgaXMgKnNvdXJjZUxlbi4gIE9uIHJldHVybiwgKnNvdXJjZUxlbiBpcyB0aGUgbnVtYmVyIG9mCisgICBzb3VyY2UgYnl0ZXMgY29uc3VtZWQuCisqLworCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBnemlwIGZpbGUgYWNjZXNzIGZ1bmN0aW9ucyAqLworCisvKgorICAgICBUaGlzIGxpYnJhcnkgc3VwcG9ydHMgcmVhZGluZyBhbmQgd3JpdGluZyBmaWxlcyBpbiBnemlwICguZ3opIGZvcm1hdCB3aXRoCisgICBhbiBpbnRlcmZhY2Ugc2ltaWxhciB0byB0aGF0IG9mIHN0ZGlvLCB1c2luZyB0aGUgZnVuY3Rpb25zIHRoYXQgc3RhcnQgd2l0aAorICAgImd6Ii4gIFRoZSBnemlwIGZvcm1hdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgemxpYiBmb3JtYXQuICBnemlwIGlzIGEgZ3ppcAorICAgd3JhcHBlciwgZG9jdW1lbnRlZCBpbiBSRkMgMTk1Miwgd3JhcHBlZCBhcm91bmQgYSBkZWZsYXRlIHN0cmVhbS4KKyovCisKK3R5cGVkZWYgc3RydWN0IGd6RmlsZV9zICpnekZpbGU7ICAgIC8qIHNlbWktb3BhcXVlIGd6aXAgZmlsZSBkZXNjcmlwdG9yICovCisKKy8qCitaRVhURVJOIGd6RmlsZSBaRVhQT1JUIGd6b3BlbiBPRigoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSkpOworCisgICAgIE9wZW4gdGhlIGd6aXAgKC5neikgZmlsZSBhdCBwYXRoIGZvciByZWFkaW5nIGFuZCBkZWNvbXByZXNzaW5nLCBvcgorICAgY29tcHJlc3NpbmcgYW5kIHdyaXRpbmcuICBUaGUgbW9kZSBwYXJhbWV0ZXIgaXMgYXMgaW4gZm9wZW4gKCJyYiIgb3IgIndiIikKKyAgIGJ1dCBjYW4gYWxzbyBpbmNsdWRlIGEgY29tcHJlc3Npb24gbGV2ZWwgKCJ3YjkiKSBvciBhIHN0cmF0ZWd5OiAnZicgZm9yCisgICBmaWx0ZXJlZCBkYXRhIGFzIGluICJ3YjZmIiwgJ2gnIGZvciBIdWZmbWFuLW9ubHkgY29tcHJlc3Npb24gYXMgaW4gIndiMWgiLAorICAgJ1InIGZvciBydW4tbGVuZ3RoIGVuY29kaW5nIGFzIGluICJ3YjFSIiwgb3IgJ0YnIGZvciBmaXhlZCBjb2RlIGNvbXByZXNzaW9uCisgICBhcyBpbiAid2I5RiIuICAoU2VlIHRoZSBkZXNjcmlwdGlvbiBvZiBkZWZsYXRlSW5pdDIgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyAgIGFib3V0IHRoZSBzdHJhdGVneSBwYXJhbWV0ZXIuKSAgJ1QnIHdpbGwgcmVxdWVzdCB0cmFuc3BhcmVudCB3cml0aW5nIG9yCisgICBhcHBlbmRpbmcgd2l0aCBubyBjb21wcmVzc2lvbiBhbmQgbm90IHVzaW5nIHRoZSBnemlwIGZvcm1hdC4KKworICAgICAiYSIgY2FuIGJlIHVzZWQgaW5zdGVhZCBvZiAidyIgdG8gcmVxdWVzdCB0aGF0IHRoZSBnemlwIHN0cmVhbSB0aGF0IHdpbGwKKyAgIGJlIHdyaXR0ZW4gYmUgYXBwZW5kZWQgdG8gdGhlIGZpbGUuICAiKyIgd2lsbCByZXN1bHQgaW4gYW4gZXJyb3IsIHNpbmNlCisgICByZWFkaW5nIGFuZCB3cml0aW5nIHRvIHRoZSBzYW1lIGd6aXAgZmlsZSBpcyBub3Qgc3VwcG9ydGVkLiAgVGhlIGFkZGl0aW9uIG9mCisgICAieCIgd2hlbiB3cml0aW5nIHdpbGwgY3JlYXRlIHRoZSBmaWxlIGV4Y2x1c2l2ZWx5LCB3aGljaCBmYWlscyBpZiB0aGUgZmlsZQorICAgYWxyZWFkeSBleGlzdHMuICBPbiBzeXN0ZW1zIHRoYXQgc3VwcG9ydCBpdCwgdGhlIGFkZGl0aW9uIG9mICJlIiB3aGVuCisgICByZWFkaW5nIG9yIHdyaXRpbmcgd2lsbCBzZXQgdGhlIGZsYWcgdG8gY2xvc2UgdGhlIGZpbGUgb24gYW4gZXhlY3ZlKCkgY2FsbC4KKworICAgICBUaGVzZSBmdW5jdGlvbnMsIGFzIHdlbGwgYXMgZ3ppcCwgd2lsbCByZWFkIGFuZCBkZWNvZGUgYSBzZXF1ZW5jZSBvZiBnemlwCisgICBzdHJlYW1zIGluIGEgZmlsZS4gIFRoZSBhcHBlbmQgZnVuY3Rpb24gb2YgZ3pvcGVuKCkgY2FuIGJlIHVzZWQgdG8gY3JlYXRlCisgICBzdWNoIGEgZmlsZS4gIChBbHNvIHNlZSBnemZsdXNoKCkgZm9yIGFub3RoZXIgd2F5IHRvIGRvIHRoaXMuKSAgV2hlbgorICAgYXBwZW5kaW5nLCBnem9wZW4gZG9lcyBub3QgdGVzdCB3aGV0aGVyIHRoZSBmaWxlIGJlZ2lucyB3aXRoIGEgZ3ppcCBzdHJlYW0sCisgICBub3IgZG9lcyBpdCBsb29rIGZvciB0aGUgZW5kIG9mIHRoZSBnemlwIHN0cmVhbXMgdG8gYmVnaW4gYXBwZW5kaW5nLiAgZ3pvcGVuCisgICB3aWxsIHNpbXBseSBhcHBlbmQgYSBnemlwIHN0cmVhbSB0byB0aGUgZXhpc3RpbmcgZmlsZS4KKworICAgICBnem9wZW4gY2FuIGJlIHVzZWQgdG8gcmVhZCBhIGZpbGUgd2hpY2ggaXMgbm90IGluIGd6aXAgZm9ybWF0OyBpbiB0aGlzCisgICBjYXNlIGd6cmVhZCB3aWxsIGRpcmVjdGx5IHJlYWQgZnJvbSB0aGUgZmlsZSB3aXRob3V0IGRlY29tcHJlc3Npb24uICBXaGVuCisgICByZWFkaW5nLCB0aGlzIHdpbGwgYmUgZGV0ZWN0ZWQgYXV0b21hdGljYWxseSBieSBsb29raW5nIGZvciB0aGUgbWFnaWMgdHdvLQorICAgYnl0ZSBnemlwIGhlYWRlci4KKworICAgICBnem9wZW4gcmV0dXJucyBOVUxMIGlmIHRoZSBmaWxlIGNvdWxkIG5vdCBiZSBvcGVuZWQsIGlmIHRoZXJlIHdhcworICAgaW5zdWZmaWNpZW50IG1lbW9yeSB0byBhbGxvY2F0ZSB0aGUgZ3pGaWxlIHN0YXRlLCBvciBpZiBhbiBpbnZhbGlkIG1vZGUgd2FzCisgICBzcGVjaWZpZWQgKGFuICdyJywgJ3cnLCBvciAnYScgd2FzIG5vdCBwcm92aWRlZCwgb3IgJysnIHdhcyBwcm92aWRlZCkuCisgICBlcnJubyBjYW4gYmUgY2hlY2tlZCB0byBkZXRlcm1pbmUgaWYgdGhlIHJlYXNvbiBnem9wZW4gZmFpbGVkIHdhcyB0aGF0IHRoZQorICAgZmlsZSBjb3VsZCBub3QgYmUgb3BlbmVkLgorKi8KKworWkVYVEVSTiBnekZpbGUgWkVYUE9SVCBnemRvcGVuIE9GKChpbnQgZmQsIGNvbnN0IGNoYXIgKm1vZGUpKTsKKy8qCisgICAgIEFzc29jaWF0ZSBhIGd6RmlsZSB3aXRoIHRoZSBmaWxlIGRlc2NyaXB0b3IgZmQuICBGaWxlIGRlc2NyaXB0b3JzIGFyZQorICAgb2J0YWluZWQgZnJvbSBjYWxscyBsaWtlIG9wZW4sIGR1cCwgY3JlYXQsIHBpcGUgb3IgZmlsZW5vIChpZiB0aGUgZmlsZSBoYXMKKyAgIGJlZW4gcHJldmlvdXNseSBvcGVuZWQgd2l0aCBmb3BlbikuICBUaGUgbW9kZSBwYXJhbWV0ZXIgaXMgYXMgaW4gZ3pvcGVuLgorCisgICAgIFRoZSBuZXh0IGNhbGwgb2YgZ3pjbG9zZSBvbiB0aGUgcmV0dXJuZWQgZ3pGaWxlIHdpbGwgYWxzbyBjbG9zZSB0aGUgZmlsZQorICAgZGVzY3JpcHRvciBmZCwganVzdCBsaWtlIGZjbG9zZShmZG9wZW4oZmQsIG1vZGUpKSBjbG9zZXMgdGhlIGZpbGUgZGVzY3JpcHRvcgorICAgZmQuICBJZiB5b3Ugd2FudCB0byBrZWVwIGZkIG9wZW4sIHVzZSBmZCA9IGR1cChmZF9rZWVwKTsgZ3ogPSBnemRvcGVuKGZkLAorICAgbW9kZSk7LiAgVGhlIGR1cGxpY2F0ZWQgZGVzY3JpcHRvciBzaG91bGQgYmUgc2F2ZWQgdG8gYXZvaWQgYSBsZWFrLCBzaW5jZQorICAgZ3pkb3BlbiBkb2VzIG5vdCBjbG9zZSBmZCBpZiBpdCBmYWlscy4gIElmIHlvdSBhcmUgdXNpbmcgZmlsZW5vKCkgdG8gZ2V0IHRoZQorICAgZmlsZSBkZXNjcmlwdG9yIGZyb20gYSBGSUxFICosIHRoZW4geW91IHdpbGwgaGF2ZSB0byB1c2UgZHVwKCkgdG8gYXZvaWQKKyAgIGRvdWJsZS1jbG9zZSgpaW5nIHRoZSBmaWxlIGRlc2NyaXB0b3IuICBCb3RoIGd6Y2xvc2UoKSBhbmQgZmNsb3NlKCkgd2lsbAorICAgY2xvc2UgdGhlIGFzc29jaWF0ZWQgZmlsZSBkZXNjcmlwdG9yLCBzbyB0aGV5IG5lZWQgdG8gaGF2ZSBkaWZmZXJlbnQgZmlsZQorICAgZGVzY3JpcHRvcnMuCisKKyAgICAgZ3pkb3BlbiByZXR1cm5zIE5VTEwgaWYgdGhlcmUgd2FzIGluc3VmZmljaWVudCBtZW1vcnkgdG8gYWxsb2NhdGUgdGhlCisgICBnekZpbGUgc3RhdGUsIGlmIGFuIGludmFsaWQgbW9kZSB3YXMgc3BlY2lmaWVkIChhbiAncicsICd3Jywgb3IgJ2EnIHdhcyBub3QKKyAgIHByb3ZpZGVkLCBvciAnKycgd2FzIHByb3ZpZGVkKSwgb3IgaWYgZmQgaXMgLTEuICBUaGUgZmlsZSBkZXNjcmlwdG9yIGlzIG5vdAorICAgdXNlZCB1bnRpbCB0aGUgbmV4dCBneiogcmVhZCwgd3JpdGUsIHNlZWssIG9yIGNsb3NlIG9wZXJhdGlvbiwgc28gZ3pkb3BlbgorICAgd2lsbCBub3QgZGV0ZWN0IGlmIGZkIGlzIGludmFsaWQgKHVubGVzcyBmZCBpcyAtMSkuCisqLworCitaRVhURVJOIGludCBaRVhQT1JUIGd6YnVmZmVyIE9GKChnekZpbGUgZmlsZSwgdW5zaWduZWQgc2l6ZSkpOworLyoKKyAgICAgU2V0IHRoZSBpbnRlcm5hbCBidWZmZXIgc2l6ZSB1c2VkIGJ5IHRoaXMgbGlicmFyeSdzIGZ1bmN0aW9ucyBmb3IgZmlsZSB0bworICAgc2l6ZS4gIFRoZSBkZWZhdWx0IGJ1ZmZlciBzaXplIGlzIDgxOTIgYnl0ZXMuICBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkCisgICBhZnRlciBnem9wZW4oKSBvciBnemRvcGVuKCksIGFuZCBiZWZvcmUgYW55IG90aGVyIGNhbGxzIHRoYXQgcmVhZCBvciB3cml0ZQorICAgdGhlIGZpbGUuICBUaGUgYnVmZmVyIG1lbW9yeSBhbGxvY2F0aW9uIGlzIGFsd2F5cyBkZWZlcnJlZCB0byB0aGUgZmlyc3QgcmVhZAorICAgb3Igd3JpdGUuICBUaHJlZSB0aW1lcyB0aGF0IHNpemUgaW4gYnVmZmVyIHNwYWNlIGlzIGFsbG9jYXRlZC4gIEEgbGFyZ2VyCisgICBidWZmZXIgc2l6ZSBvZiwgZm9yIGV4YW1wbGUsIDY0SyBvciAxMjhLIGJ5dGVzIHdpbGwgbm90aWNlYWJseSBpbmNyZWFzZSB0aGUKKyAgIHNwZWVkIG9mIGRlY29tcHJlc3Npb24gKHJlYWRpbmcpLgorCisgICAgIFRoZSBuZXcgYnVmZmVyIHNpemUgYWxzbyBhZmZlY3RzIHRoZSBtYXhpbXVtIGxlbmd0aCBmb3IgZ3pwcmludGYoKS4KKworICAgICBnemJ1ZmZlcigpIHJldHVybnMgMCBvbiBzdWNjZXNzLCBvciAtMSBvbiBmYWlsdXJlLCBzdWNoIGFzIGJlaW5nIGNhbGxlZAorICAgdG9vIGxhdGUuCisqLworCitaRVhURVJOIGludCBaRVhQT1JUIGd6c2V0cGFyYW1zIE9GKChnekZpbGUgZmlsZSwgaW50IGxldmVsLCBpbnQgc3RyYXRlZ3kpKTsKKy8qCisgICAgIER5bmFtaWNhbGx5IHVwZGF0ZSB0aGUgY29tcHJlc3Npb24gbGV2ZWwgYW5kIHN0cmF0ZWd5IGZvciBmaWxlLiAgU2VlIHRoZQorICAgZGVzY3JpcHRpb24gb2YgZGVmbGF0ZUluaXQyIGZvciB0aGUgbWVhbmluZyBvZiB0aGVzZSBwYXJhbWV0ZXJzLiBQcmV2aW91c2x5CisgICBwcm92aWRlZCBkYXRhIGlzIGZsdXNoZWQgYmVmb3JlIGFwcGx5aW5nIHRoZSBwYXJhbWV0ZXIgY2hhbmdlcy4KKworICAgICBnenNldHBhcmFtcyByZXR1cm5zIFpfT0sgaWYgc3VjY2VzcywgWl9TVFJFQU1fRVJST1IgaWYgdGhlIGZpbGUgd2FzIG5vdAorICAgb3BlbmVkIGZvciB3cml0aW5nLCBaX0VSUk5PIGlmIHRoZXJlIGlzIGFuIGVycm9yIHdyaXRpbmcgdGhlIGZsdXNoZWQgZGF0YSwKKyAgIG9yIFpfTUVNX0VSUk9SIGlmIHRoZXJlIGlzIGEgbWVtb3J5IGFsbG9jYXRpb24gZXJyb3IuCisqLworCitaRVhURVJOIGludCBaRVhQT1JUIGd6cmVhZCBPRigoZ3pGaWxlIGZpbGUsIHZvaWRwIGJ1ZiwgdW5zaWduZWQgbGVuKSk7CisvKgorICAgICBSZWFkIGFuZCBkZWNvbXByZXNzIHVwIHRvIGxlbiB1bmNvbXByZXNzZWQgYnl0ZXMgZnJvbSBmaWxlIGludG8gYnVmLiAgSWYKKyAgIHRoZSBpbnB1dCBmaWxlIGlzIG5vdCBpbiBnemlwIGZvcm1hdCwgZ3pyZWFkIGNvcGllcyB0aGUgZ2l2ZW4gbnVtYmVyIG9mCisgICBieXRlcyBpbnRvIHRoZSBidWZmZXIgZGlyZWN0bHkgZnJvbSB0aGUgZmlsZS4KKworICAgICBBZnRlciByZWFjaGluZyB0aGUgZW5kIG9mIGEgZ3ppcCBzdHJlYW0gaW4gdGhlIGlucHV0LCBnenJlYWQgd2lsbCBjb250aW51ZQorICAgdG8gcmVhZCwgbG9va2luZyBmb3IgYW5vdGhlciBnemlwIHN0cmVhbS4gIEFueSBudW1iZXIgb2YgZ3ppcCBzdHJlYW1zIG1heSBiZQorICAgY29uY2F0ZW5hdGVkIGluIHRoZSBpbnB1dCBmaWxlLCBhbmQgd2lsbCBhbGwgYmUgZGVjb21wcmVzc2VkIGJ5IGd6cmVhZCgpLgorICAgSWYgc29tZXRoaW5nIG90aGVyIHRoYW4gYSBnemlwIHN0cmVhbSBpcyBlbmNvdW50ZXJlZCBhZnRlciBhIGd6aXAgc3RyZWFtLAorICAgdGhhdCByZW1haW5pbmcgdHJhaWxpbmcgZ2FyYmFnZSBpcyBpZ25vcmVkIChhbmQgbm8gZXJyb3IgaXMgcmV0dXJuZWQpLgorCisgICAgIGd6cmVhZCBjYW4gYmUgdXNlZCB0byByZWFkIGEgZ3ppcCBmaWxlIHRoYXQgaXMgYmVpbmcgY29uY3VycmVudGx5IHdyaXR0ZW4uCisgICBVcG9uIHJlYWNoaW5nIHRoZSBlbmQgb2YgdGhlIGlucHV0LCBnenJlYWQgd2lsbCByZXR1cm4gd2l0aCB0aGUgYXZhaWxhYmxlCisgICBkYXRhLiAgSWYgdGhlIGVycm9yIGNvZGUgcmV0dXJuZWQgYnkgZ3plcnJvciBpcyBaX09LIG9yIFpfQlVGX0VSUk9SLCB0aGVuCisgICBnemNsZWFyZXJyIGNhbiBiZSB1c2VkIHRvIGNsZWFyIHRoZSBlbmQgb2YgZmlsZSBpbmRpY2F0b3IgaW4gb3JkZXIgdG8gcGVybWl0CisgICBnenJlYWQgdG8gYmUgdHJpZWQgYWdhaW4uICBaX09LIGluZGljYXRlcyB0aGF0IGEgZ3ppcCBzdHJlYW0gd2FzIGNvbXBsZXRlZAorICAgb24gdGhlIGxhc3QgZ3pyZWFkLiAgWl9CVUZfRVJST1IgaW5kaWNhdGVzIHRoYXQgdGhlIGlucHV0IGZpbGUgZW5kZWQgaW4gdGhlCisgICBtaWRkbGUgb2YgYSBnemlwIHN0cmVhbS4gIE5vdGUgdGhhdCBnenJlYWQgZG9lcyBub3QgcmV0dXJuIC0xIGluIHRoZSBldmVudAorICAgb2YgYW4gaW5jb21wbGV0ZSBnemlwIHN0cmVhbS4gIFRoaXMgZXJyb3IgaXMgZGVmZXJyZWQgdW50aWwgZ3pjbG9zZSgpLCB3aGljaAorICAgd2lsbCByZXR1cm4gWl9CVUZfRVJST1IgaWYgdGhlIGxhc3QgZ3pyZWFkIGVuZGVkIGluIHRoZSBtaWRkbGUgb2YgYSBnemlwCisgICBzdHJlYW0uICBBbHRlcm5hdGl2ZWx5LCBnemVycm9yIGNhbiBiZSB1c2VkIGJlZm9yZSBnemNsb3NlIHRvIGRldGVjdCB0aGlzCisgICBjYXNlLgorCisgICAgIGd6cmVhZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgdW5jb21wcmVzc2VkIGJ5dGVzIGFjdHVhbGx5IHJlYWQsIGxlc3MgdGhhbgorICAgbGVuIGZvciBlbmQgb2YgZmlsZSwgb3IgLTEgZm9yIGVycm9yLiAgSWYgbGVuIGlzIHRvbyBsYXJnZSB0byBmaXQgaW4gYW4gaW50LAorICAgdGhlbiBub3RoaW5nIGlzIHJlYWQsIC0xIGlzIHJldHVybmVkLCBhbmQgdGhlIGVycm9yIHN0YXRlIGlzIHNldCB0bworICAgWl9TVFJFQU1fRVJST1IuCisqLworCitaRVhURVJOIHpfc2l6ZV90IFpFWFBPUlQgZ3pmcmVhZCBPRigodm9pZHAgYnVmLCB6X3NpemVfdCBzaXplLCB6X3NpemVfdCBuaXRlbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3pGaWxlIGZpbGUpKTsKKy8qCisgICAgIFJlYWQgYW5kIGRlY29tcHJlc3MgdXAgdG8gbml0ZW1zIGl0ZW1zIG9mIHNpemUgc2l6ZSBmcm9tIGZpbGUgaW50byBidWYsCisgICBvdGhlcndpc2Ugb3BlcmF0aW5nIGFzIGd6cmVhZCgpIGRvZXMuICBUaGlzIGR1cGxpY2F0ZXMgdGhlIGludGVyZmFjZSBvZgorICAgc3RkaW8ncyBmcmVhZCgpLCB3aXRoIHNpemVfdCByZXF1ZXN0IGFuZCByZXR1cm4gdHlwZXMuICBJZiB0aGUgbGlicmFyeQorICAgZGVmaW5lcyBzaXplX3QsIHRoZW4gel9zaXplX3QgaXMgaWRlbnRpY2FsIHRvIHNpemVfdC4gIElmIG5vdCwgdGhlbiB6X3NpemVfdAorICAgaXMgYW4gdW5zaWduZWQgaW50ZWdlciB0eXBlIHRoYXQgY2FuIGNvbnRhaW4gYSBwb2ludGVyLgorCisgICAgIGd6ZnJlYWQoKSByZXR1cm5zIHRoZSBudW1iZXIgb2YgZnVsbCBpdGVtcyByZWFkIG9mIHNpemUgc2l6ZSwgb3IgemVybyBpZgorICAgdGhlIGVuZCBvZiB0aGUgZmlsZSB3YXMgcmVhY2hlZCBhbmQgYSBmdWxsIGl0ZW0gY291bGQgbm90IGJlIHJlYWQsIG9yIGlmCisgICB0aGVyZSB3YXMgYW4gZXJyb3IuICBnemVycm9yKCkgbXVzdCBiZSBjb25zdWx0ZWQgaWYgemVybyBpcyByZXR1cm5lZCBpbgorICAgb3JkZXIgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIHdhcyBhbiBlcnJvci4gIElmIHRoZSBtdWx0aXBsaWNhdGlvbiBvZiBzaXplIGFuZAorICAgbml0ZW1zIG92ZXJmbG93cywgaS5lLiB0aGUgcHJvZHVjdCBkb2VzIG5vdCBmaXQgaW4gYSB6X3NpemVfdCwgdGhlbiBub3RoaW5nCisgICBpcyByZWFkLCB6ZXJvIGlzIHJldHVybmVkLCBhbmQgdGhlIGVycm9yIHN0YXRlIGlzIHNldCB0byBaX1NUUkVBTV9FUlJPUi4KKworICAgICBJbiB0aGUgZXZlbnQgdGhhdCB0aGUgZW5kIG9mIGZpbGUgaXMgcmVhY2hlZCBhbmQgb25seSBhIHBhcnRpYWwgaXRlbSBpcworICAgYXZhaWxhYmxlIGF0IHRoZSBlbmQsIGkuZS4gdGhlIHJlbWFpbmluZyB1bmNvbXByZXNzZWQgZGF0YSBsZW5ndGggaXMgbm90IGEKKyAgIG11bHRpcGxlIG9mIHNpemUsIHRoZW4gdGhlIGZpbmFsIHBhcnRpYWwgaXRlbSBpcyBuZXZldGhlbGVzcyByZWFkIGludG8gYnVmCisgICBhbmQgdGhlIGVuZC1vZi1maWxlIGZsYWcgaXMgc2V0LiAgVGhlIGxlbmd0aCBvZiB0aGUgcGFydGlhbCBpdGVtIHJlYWQgaXMgbm90CisgICBwcm92aWRlZCwgYnV0IGNvdWxkIGJlIGluZmVycmVkIGZyb20gdGhlIHJlc3VsdCBvZiBnenRlbGwoKS4gIFRoaXMgYmVoYXZpb3IKKyAgIGlzIHRoZSBzYW1lIGFzIHRoZSBiZWhhdmlvciBvZiBmcmVhZCgpIGltcGxlbWVudGF0aW9ucyBpbiBjb21tb24gbGlicmFyaWVzLAorICAgYnV0IGl0IHByZXZlbnRzIHRoZSBkaXJlY3QgdXNlIG9mIGd6ZnJlYWQoKSB0byByZWFkIGEgY29uY3VycmVudGx5IHdyaXR0ZW4KKyAgIGZpbGUsIHJlc2V0aW5nIGFuZCByZXRyeWluZyBvbiBlbmQtb2YtZmlsZSwgd2hlbiBzaXplIGlzIG5vdCAxLgorKi8KKworWkVYVEVSTiBpbnQgWkVYUE9SVCBnendyaXRlIE9GKChnekZpbGUgZmlsZSwgdm9pZHBjIGJ1ZiwgdW5zaWduZWQgbGVuKSk7CisvKgorICAgICBDb21wcmVzcyBhbmQgd3JpdGUgdGhlIGxlbiB1bmNvbXByZXNzZWQgYnl0ZXMgYXQgYnVmIHRvIGZpbGUuIGd6d3JpdGUKKyAgIHJldHVybnMgdGhlIG51bWJlciBvZiB1bmNvbXByZXNzZWQgYnl0ZXMgd3JpdHRlbiBvciAwIGluIGNhc2Ugb2YgZXJyb3IuCisqLworCitaRVhURVJOIHpfc2l6ZV90IFpFWFBPUlQgZ3pmd3JpdGUgT0YoKHZvaWRwYyBidWYsIHpfc2l6ZV90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpfc2l6ZV90IG5pdGVtcywgZ3pGaWxlIGZpbGUpKTsKKy8qCisgICAgIENvbXByZXNzIGFuZCB3cml0ZSBuaXRlbXMgaXRlbXMgb2Ygc2l6ZSBzaXplIGZyb20gYnVmIHRvIGZpbGUsIGR1cGxpY2F0aW5nCisgICB0aGUgaW50ZXJmYWNlIG9mIHN0ZGlvJ3MgZndyaXRlKCksIHdpdGggc2l6ZV90IHJlcXVlc3QgYW5kIHJldHVybiB0eXBlcy4gIElmCisgICB0aGUgbGlicmFyeSBkZWZpbmVzIHNpemVfdCwgdGhlbiB6X3NpemVfdCBpcyBpZGVudGljYWwgdG8gc2l6ZV90LiAgSWYgbm90LAorICAgdGhlbiB6X3NpemVfdCBpcyBhbiB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUgdGhhdCBjYW4gY29udGFpbiBhIHBvaW50ZXIuCisKKyAgICAgZ3pmd3JpdGUoKSByZXR1cm5zIHRoZSBudW1iZXIgb2YgZnVsbCBpdGVtcyB3cml0dGVuIG9mIHNpemUgc2l6ZSwgb3IgemVybworICAgaWYgdGhlcmUgd2FzIGFuIGVycm9yLiAgSWYgdGhlIG11bHRpcGxpY2F0aW9uIG9mIHNpemUgYW5kIG5pdGVtcyBvdmVyZmxvd3MsCisgICBpLmUuIHRoZSBwcm9kdWN0IGRvZXMgbm90IGZpdCBpbiBhIHpfc2l6ZV90LCB0aGVuIG5vdGhpbmcgaXMgd3JpdHRlbiwgemVybworICAgaXMgcmV0dXJuZWQsIGFuZCB0aGUgZXJyb3Igc3RhdGUgaXMgc2V0IHRvIFpfU1RSRUFNX0VSUk9SLgorKi8KKworWkVYVEVSTiBpbnQgWkVYUE9SVFZBIGd6cHJpbnRmIFpfQVJHKChnekZpbGUgZmlsZSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pKTsKKy8qCisgICAgIENvbnZlcnQsIGZvcm1hdCwgY29tcHJlc3MsIGFuZCB3cml0ZSB0aGUgYXJndW1lbnRzICguLi4pIHRvIGZpbGUgdW5kZXIKKyAgIGNvbnRyb2wgb2YgdGhlIHN0cmluZyBmb3JtYXQsIGFzIGluIGZwcmludGYuICBnenByaW50ZiByZXR1cm5zIHRoZSBudW1iZXIgb2YKKyAgIHVuY29tcHJlc3NlZCBieXRlcyBhY3R1YWxseSB3cml0dGVuLCBvciBhIG5lZ2F0aXZlIHpsaWIgZXJyb3IgY29kZSBpbiBjYXNlCisgICBvZiBlcnJvci4gIFRoZSBudW1iZXIgb2YgdW5jb21wcmVzc2VkIGJ5dGVzIHdyaXR0ZW4gaXMgbGltaXRlZCB0byA4MTkxLCBvcgorICAgb25lIGxlc3MgdGhhbiB0aGUgYnVmZmVyIHNpemUgZ2l2ZW4gdG8gZ3pidWZmZXIoKS4gIFRoZSBjYWxsZXIgc2hvdWxkIGFzc3VyZQorICAgdGhhdCB0aGlzIGxpbWl0IGlzIG5vdCBleGNlZWRlZC4gIElmIGl0IGlzIGV4Y2VlZGVkLCB0aGVuIGd6cHJpbnRmKCkgd2lsbAorICAgcmV0dXJuIGFuIGVycm9yICgwKSB3aXRoIG5vdGhpbmcgd3JpdHRlbi4gIEluIHRoaXMgY2FzZSwgdGhlcmUgbWF5IGFsc28gYmUgYQorICAgYnVmZmVyIG92ZXJmbG93IHdpdGggdW5wcmVkaWN0YWJsZSBjb25zZXF1ZW5jZXMsIHdoaWNoIGlzIHBvc3NpYmxlIG9ubHkgaWYKKyAgIHpsaWIgd2FzIGNvbXBpbGVkIHdpdGggdGhlIGluc2VjdXJlIGZ1bmN0aW9ucyBzcHJpbnRmKCkgb3IgdnNwcmludGYoKSwKKyAgIGJlY2F1c2UgdGhlIHNlY3VyZSBzbnByaW50ZigpIG9yIHZzbnByaW50ZigpIGZ1bmN0aW9ucyB3ZXJlIG5vdCBhdmFpbGFibGUuCisgICBUaGlzIGNhbiBiZSBkZXRlcm1pbmVkIHVzaW5nIHpsaWJDb21waWxlRmxhZ3MoKS4KKyovCisKK1pFWFRFUk4gaW50IFpFWFBPUlQgZ3pwdXRzIE9GKChnekZpbGUgZmlsZSwgY29uc3QgY2hhciAqcykpOworLyoKKyAgICAgQ29tcHJlc3MgYW5kIHdyaXRlIHRoZSBnaXZlbiBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nIHMgdG8gZmlsZSwgZXhjbHVkaW5nCisgICB0aGUgdGVybWluYXRpbmcgbnVsbCBjaGFyYWN0ZXIuCisKKyAgICAgZ3pwdXRzIHJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdyaXR0ZW4sIG9yIC0xIGluIGNhc2Ugb2YgZXJyb3IuCisqLworCitaRVhURVJOIGNoYXIgKiBaRVhQT1JUIGd6Z2V0cyBPRigoZ3pGaWxlIGZpbGUsIGNoYXIgKmJ1ZiwgaW50IGxlbikpOworLyoKKyAgICAgUmVhZCBhbmQgZGVjb21wcmVzcyBieXRlcyBmcm9tIGZpbGUgaW50byBidWYsIHVudGlsIGxlbi0xIGNoYXJhY3RlcnMgYXJlCisgICByZWFkLCBvciB1bnRpbCBhIG5ld2xpbmUgY2hhcmFjdGVyIGlzIHJlYWQgYW5kIHRyYW5zZmVycmVkIHRvIGJ1Ziwgb3IgYW4KKyAgIGVuZC1vZi1maWxlIGNvbmRpdGlvbiBpcyBlbmNvdW50ZXJlZC4gIElmIGFueSBjaGFyYWN0ZXJzIGFyZSByZWFkIG9yIGlmIGxlbgorICAgaXMgb25lLCB0aGUgc3RyaW5nIGlzIHRlcm1pbmF0ZWQgd2l0aCBhIG51bGwgY2hhcmFjdGVyLiAgSWYgbm8gY2hhcmFjdGVycworICAgYXJlIHJlYWQgZHVlIHRvIGFuIGVuZC1vZi1maWxlIG9yIGxlbiBpcyBsZXNzIHRoYW4gb25lLCB0aGVuIHRoZSBidWZmZXIgaXMKKyAgIGxlZnQgdW50b3VjaGVkLgorCisgICAgIGd6Z2V0cyByZXR1cm5zIGJ1ZiB3aGljaCBpcyBhIG51bGwtdGVybWluYXRlZCBzdHJpbmcsIG9yIGl0IHJldHVybnMgTlVMTAorICAgZm9yIGVuZC1vZi1maWxlIG9yIGluIGNhc2Ugb2YgZXJyb3IuICBJZiB0aGVyZSB3YXMgYW4gZXJyb3IsIHRoZSBjb250ZW50cyBhdAorICAgYnVmIGFyZSBpbmRldGVybWluYXRlLgorKi8KKworWkVYVEVSTiBpbnQgWkVYUE9SVCBnenB1dGMgT0YoKGd6RmlsZSBmaWxlLCBpbnQgYykpOworLyoKKyAgICAgQ29tcHJlc3MgYW5kIHdyaXRlIGMsIGNvbnZlcnRlZCB0byBhbiB1bnNpZ25lZCBjaGFyLCBpbnRvIGZpbGUuICBnenB1dGMKKyAgIHJldHVybnMgdGhlIHZhbHVlIHRoYXQgd2FzIHdyaXR0ZW4sIG9yIC0xIGluIGNhc2Ugb2YgZXJyb3IuCisqLworCitaRVhURVJOIGludCBaRVhQT1JUIGd6Z2V0YyBPRigoZ3pGaWxlIGZpbGUpKTsKKy8qCisgICAgIFJlYWQgYW5kIGRlY29tcHJlc3Mgb25lIGJ5dGUgZnJvbSBmaWxlLiAgZ3pnZXRjIHJldHVybnMgdGhpcyBieXRlIG9yIC0xCisgICBpbiBjYXNlIG9mIGVuZCBvZiBmaWxlIG9yIGVycm9yLiAgVGhpcyBpcyBpbXBsZW1lbnRlZCBhcyBhIG1hY3JvIGZvciBzcGVlZC4KKyAgIEFzIHN1Y2gsIGl0IGRvZXMgbm90IGRvIGFsbCBvZiB0aGUgY2hlY2tpbmcgdGhlIG90aGVyIGZ1bmN0aW9ucyBkby4gIEkuZS4KKyAgIGl0IGRvZXMgbm90IGNoZWNrIHRvIHNlZSBpZiBmaWxlIGlzIE5VTEwsIG5vciB3aGV0aGVyIHRoZSBzdHJ1Y3R1cmUgZmlsZQorICAgcG9pbnRzIHRvIGhhcyBiZWVuIGNsb2JiZXJlZCBvciBub3QuCisqLworCitaRVhURVJOIGludCBaRVhQT1JUIGd6dW5nZXRjIE9GKChpbnQgYywgZ3pGaWxlIGZpbGUpKTsKKy8qCisgICAgIFB1c2ggYyBiYWNrIG9udG8gdGhlIHN0cmVhbSBmb3IgZmlsZSB0byBiZSByZWFkIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb24KKyAgIHRoZSBuZXh0IHJlYWQuICBBdCBsZWFzdCBvbmUgY2hhcmFjdGVyIG9mIHB1c2gtYmFjayBpcyBhbHdheXMgYWxsb3dlZC4KKyAgIGd6dW5nZXRjKCkgcmV0dXJucyB0aGUgY2hhcmFjdGVyIHB1c2hlZCwgb3IgLTEgb24gZmFpbHVyZS4gIGd6dW5nZXRjKCkgd2lsbAorICAgZmFpbCBpZiBjIGlzIC0xLCBhbmQgbWF5IGZhaWwgaWYgYSBjaGFyYWN0ZXIgaGFzIGJlZW4gcHVzaGVkIGJ1dCBub3QgcmVhZAorICAgeWV0LiAgSWYgZ3p1bmdldGMgaXMgdXNlZCBpbW1lZGlhdGVseSBhZnRlciBnem9wZW4gb3IgZ3pkb3BlbiwgYXQgbGVhc3QgdGhlCisgICBvdXRwdXQgYnVmZmVyIHNpemUgb2YgcHVzaGVkIGNoYXJhY3RlcnMgaXMgYWxsb3dlZC4gIChTZWUgZ3pidWZmZXIgYWJvdmUuKQorICAgVGhlIHB1c2hlZCBjaGFyYWN0ZXIgd2lsbCBiZSBkaXNjYXJkZWQgaWYgdGhlIHN0cmVhbSBpcyByZXBvc2l0aW9uZWQgd2l0aAorICAgZ3pzZWVrKCkgb3IgZ3pyZXdpbmQoKS4KKyovCisKK1pFWFRFUk4gaW50IFpFWFBPUlQgZ3pmbHVzaCBPRigoZ3pGaWxlIGZpbGUsIGludCBmbHVzaCkpOworLyoKKyAgICAgRmx1c2ggYWxsIHBlbmRpbmcgb3V0cHV0IHRvIGZpbGUuICBUaGUgcGFyYW1ldGVyIGZsdXNoIGlzIGFzIGluIHRoZQorICAgZGVmbGF0ZSgpIGZ1bmN0aW9uLiAgVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgemxpYiBlcnJvciBudW1iZXIgKHNlZSBmdW5jdGlvbgorICAgZ3plcnJvciBiZWxvdykuICBnemZsdXNoIGlzIG9ubHkgcGVybWl0dGVkIHdoZW4gd3JpdGluZy4KKworICAgICBJZiB0aGUgZmx1c2ggcGFyYW1ldGVyIGlzIFpfRklOSVNILCB0aGUgcmVtYWluaW5nIGRhdGEgaXMgd3JpdHRlbiBhbmQgdGhlCisgICBnemlwIHN0cmVhbSBpcyBjb21wbGV0ZWQgaW4gdGhlIG91dHB1dC4gIElmIGd6d3JpdGUoKSBpcyBjYWxsZWQgYWdhaW4sIGEgbmV3CisgICBnemlwIHN0cmVhbSB3aWxsIGJlIHN0YXJ0ZWQgaW4gdGhlIG91dHB1dC4gIGd6cmVhZCgpIGlzIGFibGUgdG8gcmVhZCBzdWNoCisgICBjb25jYXRlbmF0ZWQgZ3ppcCBzdHJlYW1zLgorCisgICAgIGd6Zmx1c2ggc2hvdWxkIGJlIGNhbGxlZCBvbmx5IHdoZW4gc3RyaWN0bHkgbmVjZXNzYXJ5IGJlY2F1c2UgaXQgd2lsbAorICAgZGVncmFkZSBjb21wcmVzc2lvbiBpZiBjYWxsZWQgdG9vIG9mdGVuLgorKi8KKworLyoKK1pFWFRFUk4gel9vZmZfdCBaRVhQT1JUIGd6c2VlayBPRigoZ3pGaWxlIGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpfb2ZmX3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKSk7CisKKyAgICAgU2V0IHRoZSBzdGFydGluZyBwb3NpdGlvbiB0byBvZmZzZXQgcmVsYXRpdmUgdG8gd2hlbmNlIGZvciB0aGUgbmV4dCBnenJlYWQKKyAgIG9yIGd6d3JpdGUgb24gZmlsZS4gIFRoZSBvZmZzZXQgcmVwcmVzZW50cyBhIG51bWJlciBvZiBieXRlcyBpbiB0aGUKKyAgIHVuY29tcHJlc3NlZCBkYXRhIHN0cmVhbS4gIFRoZSB3aGVuY2UgcGFyYW1ldGVyIGlzIGRlZmluZWQgYXMgaW4gbHNlZWsoMik7CisgICB0aGUgdmFsdWUgU0VFS19FTkQgaXMgbm90IHN1cHBvcnRlZC4KKworICAgICBJZiB0aGUgZmlsZSBpcyBvcGVuZWQgZm9yIHJlYWRpbmcsIHRoaXMgZnVuY3Rpb24gaXMgZW11bGF0ZWQgYnV0IGNhbiBiZQorICAgZXh0cmVtZWx5IHNsb3cuICBJZiB0aGUgZmlsZSBpcyBvcGVuZWQgZm9yIHdyaXRpbmcsIG9ubHkgZm9yd2FyZCBzZWVrcyBhcmUKKyAgIHN1cHBvcnRlZDsgZ3pzZWVrIHRoZW4gY29tcHJlc3NlcyBhIHNlcXVlbmNlIG9mIHplcm9lcyB1cCB0byB0aGUgbmV3CisgICBzdGFydGluZyBwb3NpdGlvbi4KKworICAgICBnenNlZWsgcmV0dXJucyB0aGUgcmVzdWx0aW5nIG9mZnNldCBsb2NhdGlvbiBhcyBtZWFzdXJlZCBpbiBieXRlcyBmcm9tCisgICB0aGUgYmVnaW5uaW5nIG9mIHRoZSB1bmNvbXByZXNzZWQgc3RyZWFtLCBvciAtMSBpbiBjYXNlIG9mIGVycm9yLCBpbgorICAgcGFydGljdWxhciBpZiB0aGUgZmlsZSBpcyBvcGVuZWQgZm9yIHdyaXRpbmcgYW5kIHRoZSBuZXcgc3RhcnRpbmcgcG9zaXRpb24KKyAgIHdvdWxkIGJlIGJlZm9yZSB0aGUgY3VycmVudCBwb3NpdGlvbi4KKyovCisKK1pFWFRFUk4gaW50IFpFWFBPUlQgICAgZ3pyZXdpbmQgT0YoKGd6RmlsZSBmaWxlKSk7CisvKgorICAgICBSZXdpbmQgZmlsZS4gVGhpcyBmdW5jdGlvbiBpcyBzdXBwb3J0ZWQgb25seSBmb3IgcmVhZGluZy4KKworICAgICBnenJld2luZChmaWxlKSBpcyBlcXVpdmFsZW50IHRvIChpbnQpZ3pzZWVrKGZpbGUsIDBMLCBTRUVLX1NFVCkuCisqLworCisvKgorWkVYVEVSTiB6X29mZl90IFpFWFBPUlQgICAgZ3p0ZWxsIE9GKChnekZpbGUgZmlsZSkpOworCisgICAgIFJldHVybiB0aGUgc3RhcnRpbmcgcG9zaXRpb24gZm9yIHRoZSBuZXh0IGd6cmVhZCBvciBnendyaXRlIG9uIGZpbGUuCisgICBUaGlzIHBvc2l0aW9uIHJlcHJlc2VudHMgYSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIHVuY29tcHJlc3NlZCBkYXRhIHN0cmVhbSwKKyAgIGFuZCBpcyB6ZXJvIHdoZW4gc3RhcnRpbmcsIGV2ZW4gaWYgYXBwZW5kaW5nIG9yIHJlYWRpbmcgYSBnemlwIHN0cmVhbSBmcm9tCisgICB0aGUgbWlkZGxlIG9mIGEgZmlsZSB1c2luZyBnemRvcGVuKCkuCisKKyAgICAgZ3p0ZWxsKGZpbGUpIGlzIGVxdWl2YWxlbnQgdG8gZ3pzZWVrKGZpbGUsIDBMLCBTRUVLX0NVUikKKyovCisKKy8qCitaRVhURVJOIHpfb2ZmX3QgWkVYUE9SVCBnem9mZnNldCBPRigoZ3pGaWxlIGZpbGUpKTsKKworICAgICBSZXR1cm4gdGhlIGN1cnJlbnQgY29tcHJlc3NlZCAoYWN0dWFsKSByZWFkIG9yIHdyaXRlIG9mZnNldCBvZiBmaWxlLiAgVGhpcworICAgb2Zmc2V0IGluY2x1ZGVzIHRoZSBjb3VudCBvZiBieXRlcyB0aGF0IHByZWNlZGUgdGhlIGd6aXAgc3RyZWFtLCBmb3IgZXhhbXBsZQorICAgd2hlbiBhcHBlbmRpbmcgb3Igd2hlbiB1c2luZyBnemRvcGVuKCkgZm9yIHJlYWRpbmcuICBXaGVuIHJlYWRpbmcsIHRoZQorICAgb2Zmc2V0IGRvZXMgbm90IGluY2x1ZGUgYXMgeWV0IHVudXNlZCBidWZmZXJlZCBpbnB1dC4gIFRoaXMgaW5mb3JtYXRpb24gY2FuCisgICBiZSB1c2VkIGZvciBhIHByb2dyZXNzIGluZGljYXRvci4gIE9uIGVycm9yLCBnem9mZnNldCgpIHJldHVybnMgLTEuCisqLworCitaRVhURVJOIGludCBaRVhQT1JUIGd6ZW9mIE9GKChnekZpbGUgZmlsZSkpOworLyoKKyAgICAgUmV0dXJuIHRydWUgKDEpIGlmIHRoZSBlbmQtb2YtZmlsZSBpbmRpY2F0b3IgZm9yIGZpbGUgaGFzIGJlZW4gc2V0IHdoaWxlCisgICByZWFkaW5nLCBmYWxzZSAoMCkgb3RoZXJ3aXNlLiAgTm90ZSB0aGF0IHRoZSBlbmQtb2YtZmlsZSBpbmRpY2F0b3IgaXMgc2V0CisgICBvbmx5IGlmIHRoZSByZWFkIHRyaWVkIHRvIGdvIHBhc3QgdGhlIGVuZCBvZiB0aGUgaW5wdXQsIGJ1dCBjYW1lIHVwIHNob3J0LgorICAgVGhlcmVmb3JlLCBqdXN0IGxpa2UgZmVvZigpLCBnemVvZigpIG1heSByZXR1cm4gZmFsc2UgZXZlbiBpZiB0aGVyZSBpcyBubworICAgbW9yZSBkYXRhIHRvIHJlYWQsIGluIHRoZSBldmVudCB0aGF0IHRoZSBsYXN0IHJlYWQgcmVxdWVzdCB3YXMgZm9yIHRoZSBleGFjdAorICAgbnVtYmVyIG9mIGJ5dGVzIHJlbWFpbmluZyBpbiB0aGUgaW5wdXQgZmlsZS4gIFRoaXMgd2lsbCBoYXBwZW4gaWYgdGhlIGlucHV0CisgICBmaWxlIHNpemUgaXMgYW4gZXhhY3QgbXVsdGlwbGUgb2YgdGhlIGJ1ZmZlciBzaXplLgorCisgICAgIElmIGd6ZW9mKCkgcmV0dXJucyB0cnVlLCB0aGVuIHRoZSByZWFkIGZ1bmN0aW9ucyB3aWxsIHJldHVybiBubyBtb3JlIGRhdGEsCisgICB1bmxlc3MgdGhlIGVuZC1vZi1maWxlIGluZGljYXRvciBpcyByZXNldCBieSBnemNsZWFyZXJyKCkgYW5kIHRoZSBpbnB1dCBmaWxlCisgICBoYXMgZ3Jvd24gc2luY2UgdGhlIHByZXZpb3VzIGVuZCBvZiBmaWxlIHdhcyBkZXRlY3RlZC4KKyovCisKK1pFWFRFUk4gaW50IFpFWFBPUlQgZ3pkaXJlY3QgT0YoKGd6RmlsZSBmaWxlKSk7CisvKgorICAgICBSZXR1cm4gdHJ1ZSAoMSkgaWYgZmlsZSBpcyBiZWluZyBjb3BpZWQgZGlyZWN0bHkgd2hpbGUgcmVhZGluZywgb3IgZmFsc2UKKyAgICgwKSBpZiBmaWxlIGlzIGEgZ3ppcCBzdHJlYW0gYmVpbmcgZGVjb21wcmVzc2VkLgorCisgICAgIElmIHRoZSBpbnB1dCBmaWxlIGlzIGVtcHR5LCBnemRpcmVjdCgpIHdpbGwgcmV0dXJuIHRydWUsIHNpbmNlIHRoZSBpbnB1dAorICAgZG9lcyBub3QgY29udGFpbiBhIGd6aXAgc3RyZWFtLgorCisgICAgIElmIGd6ZGlyZWN0KCkgaXMgdXNlZCBpbW1lZGlhdGVseSBhZnRlciBnem9wZW4oKSBvciBnemRvcGVuKCkgaXQgd2lsbAorICAgY2F1c2UgYnVmZmVycyB0byBiZSBhbGxvY2F0ZWQgdG8gYWxsb3cgcmVhZGluZyB0aGUgZmlsZSB0byBkZXRlcm1pbmUgaWYgaXQKKyAgIGlzIGEgZ3ppcCBmaWxlLiAgVGhlcmVmb3JlIGlmIGd6YnVmZmVyKCkgaXMgdXNlZCwgaXQgc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUKKyAgIGd6ZGlyZWN0KCkuCisKKyAgICAgV2hlbiB3cml0aW5nLCBnemRpcmVjdCgpIHJldHVybnMgdHJ1ZSAoMSkgaWYgdHJhbnNwYXJlbnQgd3JpdGluZyB3YXMKKyAgIHJlcXVlc3RlZCAoIndUIiBmb3IgdGhlIGd6b3BlbigpIG1vZGUpLCBvciBmYWxzZSAoMCkgb3RoZXJ3aXNlLiAgKE5vdGU6CisgICBnemRpcmVjdCgpIGlzIG5vdCBuZWVkZWQgd2hlbiB3cml0aW5nLiAgVHJhbnNwYXJlbnQgd3JpdGluZyBtdXN0IGJlCisgICBleHBsaWNpdGx5IHJlcXVlc3RlZCwgc28gdGhlIGFwcGxpY2F0aW9uIGFscmVhZHkga25vd3MgdGhlIGFuc3dlci4gIFdoZW4KKyAgIGxpbmtpbmcgc3RhdGljYWxseSwgdXNpbmcgZ3pkaXJlY3QoKSB3aWxsIGluY2x1ZGUgYWxsIG9mIHRoZSB6bGliIGNvZGUgZm9yCisgICBnemlwIGZpbGUgcmVhZGluZyBhbmQgZGVjb21wcmVzc2lvbiwgd2hpY2ggbWF5IG5vdCBiZSBkZXNpcmVkLikKKyovCisKK1pFWFRFUk4gaW50IFpFWFBPUlQgICAgZ3pjbG9zZSBPRigoZ3pGaWxlIGZpbGUpKTsKKy8qCisgICAgIEZsdXNoIGFsbCBwZW5kaW5nIG91dHB1dCBmb3IgZmlsZSwgaWYgbmVjZXNzYXJ5LCBjbG9zZSBmaWxlIGFuZAorICAgZGVhbGxvY2F0ZSB0aGUgKGRlKWNvbXByZXNzaW9uIHN0YXRlLiAgTm90ZSB0aGF0IG9uY2UgZmlsZSBpcyBjbG9zZWQsIHlvdQorICAgY2Fubm90IGNhbGwgZ3plcnJvciB3aXRoIGZpbGUsIHNpbmNlIGl0cyBzdHJ1Y3R1cmVzIGhhdmUgYmVlbiBkZWFsbG9jYXRlZC4KKyAgIGd6Y2xvc2UgbXVzdCBub3QgYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIG9uIHRoZSBzYW1lIGZpbGUsIGp1c3QgYXMgZnJlZQorICAgbXVzdCBub3QgYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIG9uIHRoZSBzYW1lIGFsbG9jYXRpb24uCisKKyAgICAgZ3pjbG9zZSB3aWxsIHJldHVybiBaX1NUUkVBTV9FUlJPUiBpZiBmaWxlIGlzIG5vdCB2YWxpZCwgWl9FUlJOTyBvbiBhCisgICBmaWxlIG9wZXJhdGlvbiBlcnJvciwgWl9NRU1fRVJST1IgaWYgb3V0IG9mIG1lbW9yeSwgWl9CVUZfRVJST1IgaWYgdGhlCisgICBsYXN0IHJlYWQgZW5kZWQgaW4gdGhlIG1pZGRsZSBvZiBhIGd6aXAgc3RyZWFtLCBvciBaX09LIG9uIHN1Y2Nlc3MuCisqLworCitaRVhURVJOIGludCBaRVhQT1JUIGd6Y2xvc2VfciBPRigoZ3pGaWxlIGZpbGUpKTsKK1pFWFRFUk4gaW50IFpFWFBPUlQgZ3pjbG9zZV93IE9GKChnekZpbGUgZmlsZSkpOworLyoKKyAgICAgU2FtZSBhcyBnemNsb3NlKCksIGJ1dCBnemNsb3NlX3IoKSBpcyBvbmx5IGZvciB1c2Ugd2hlbiByZWFkaW5nLCBhbmQKKyAgIGd6Y2xvc2VfdygpIGlzIG9ubHkgZm9yIHVzZSB3aGVuIHdyaXRpbmcgb3IgYXBwZW5kaW5nLiAgVGhlIGFkdmFudGFnZSB0bworICAgdXNpbmcgdGhlc2UgaW5zdGVhZCBvZiBnemNsb3NlKCkgaXMgdGhhdCB0aGV5IGF2b2lkIGxpbmtpbmcgaW4gemxpYgorICAgY29tcHJlc3Npb24gb3IgZGVjb21wcmVzc2lvbiBjb2RlIHRoYXQgaXMgbm90IHVzZWQgd2hlbiBvbmx5IHJlYWRpbmcgb3Igb25seQorICAgd3JpdGluZyByZXNwZWN0aXZlbHkuICBJZiBnemNsb3NlKCkgaXMgdXNlZCwgdGhlbiBib3RoIGNvbXByZXNzaW9uIGFuZAorICAgZGVjb21wcmVzc2lvbiBjb2RlIHdpbGwgYmUgaW5jbHVkZWQgdGhlIGFwcGxpY2F0aW9uIHdoZW4gbGlua2luZyB0byBhIHN0YXRpYworICAgemxpYiBsaWJyYXJ5LgorKi8KKworWkVYVEVSTiBjb25zdCBjaGFyICogWkVYUE9SVCBnemVycm9yIE9GKChnekZpbGUgZmlsZSwgaW50ICplcnJudW0pKTsKKy8qCisgICAgIFJldHVybiB0aGUgZXJyb3IgbWVzc2FnZSBmb3IgdGhlIGxhc3QgZXJyb3Igd2hpY2ggb2NjdXJyZWQgb24gZmlsZS4KKyAgIGVycm51bSBpcyBzZXQgdG8gemxpYiBlcnJvciBudW1iZXIuICBJZiBhbiBlcnJvciBvY2N1cnJlZCBpbiB0aGUgZmlsZSBzeXN0ZW0KKyAgIGFuZCBub3QgaW4gdGhlIGNvbXByZXNzaW9uIGxpYnJhcnksIGVycm51bSBpcyBzZXQgdG8gWl9FUlJOTyBhbmQgdGhlCisgICBhcHBsaWNhdGlvbiBtYXkgY29uc3VsdCBlcnJubyB0byBnZXQgdGhlIGV4YWN0IGVycm9yIGNvZGUuCisKKyAgICAgVGhlIGFwcGxpY2F0aW9uIG11c3Qgbm90IG1vZGlmeSB0aGUgcmV0dXJuZWQgc3RyaW5nLiAgRnV0dXJlIGNhbGxzIHRvCisgICB0aGlzIGZ1bmN0aW9uIG1heSBpbnZhbGlkYXRlIHRoZSBwcmV2aW91c2x5IHJldHVybmVkIHN0cmluZy4gIElmIGZpbGUgaXMKKyAgIGNsb3NlZCwgdGhlbiB0aGUgc3RyaW5nIHByZXZpb3VzbHkgcmV0dXJuZWQgYnkgZ3plcnJvciB3aWxsIG5vIGxvbmdlciBiZQorICAgYXZhaWxhYmxlLgorCisgICAgIGd6ZXJyb3IoKSBzaG91bGQgYmUgdXNlZCB0byBkaXN0aW5ndWlzaCBlcnJvcnMgZnJvbSBlbmQtb2YtZmlsZSBmb3IgdGhvc2UKKyAgIGZ1bmN0aW9ucyBhYm92ZSB0aGF0IGRvIG5vdCBkaXN0aW5ndWlzaCB0aG9zZSBjYXNlcyBpbiB0aGVpciByZXR1cm4gdmFsdWVzLgorKi8KKworWkVYVEVSTiB2b2lkIFpFWFBPUlQgZ3pjbGVhcmVyciBPRigoZ3pGaWxlIGZpbGUpKTsKKy8qCisgICAgIENsZWFyIHRoZSBlcnJvciBhbmQgZW5kLW9mLWZpbGUgZmxhZ3MgZm9yIGZpbGUuICBUaGlzIGlzIGFuYWxvZ291cyB0byB0aGUKKyAgIGNsZWFyZXJyKCkgZnVuY3Rpb24gaW4gc3RkaW8uICBUaGlzIGlzIHVzZWZ1bCBmb3IgY29udGludWluZyB0byByZWFkIGEgZ3ppcAorICAgZmlsZSB0aGF0IGlzIGJlaW5nIHdyaXR0ZW4gY29uY3VycmVudGx5LgorKi8KKworI2VuZGlmIC8qICFaX1NPTE8gKi8KKworICAgICAgICAgICAgICAgICAgICAgICAgLyogY2hlY2tzdW0gZnVuY3Rpb25zICovCisKKy8qCisgICAgIFRoZXNlIGZ1bmN0aW9ucyBhcmUgbm90IHJlbGF0ZWQgdG8gY29tcHJlc3Npb24gYnV0IGFyZSBleHBvcnRlZAorICAgYW55d2F5IGJlY2F1c2UgdGhleSBtaWdodCBiZSB1c2VmdWwgaW4gYXBwbGljYXRpb25zIHVzaW5nIHRoZSBjb21wcmVzc2lvbgorICAgbGlicmFyeS4KKyovCisKK1pFWFRFUk4gdUxvbmcgWkVYUE9SVCBhZGxlcjMyIE9GKCh1TG9uZyBhZGxlciwgY29uc3QgQnl0ZWYgKmJ1ZiwgdUludCBsZW4pKTsKKy8qCisgICAgIFVwZGF0ZSBhIHJ1bm5pbmcgQWRsZXItMzIgY2hlY2tzdW0gd2l0aCB0aGUgYnl0ZXMgYnVmWzAuLmxlbi0xXSBhbmQKKyAgIHJldHVybiB0aGUgdXBkYXRlZCBjaGVja3N1bS4gQW4gQWRsZXItMzIgdmFsdWUgaXMgaW4gdGhlIHJhbmdlIG9mIGEgMzItYml0CisgICB1bnNpZ25lZCBpbnRlZ2VyLiBJZiBidWYgaXMgWl9OVUxMLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJlcXVpcmVkCisgICBpbml0aWFsIHZhbHVlIGZvciB0aGUgY2hlY2tzdW0uCisKKyAgICAgQW4gQWRsZXItMzIgY2hlY2tzdW0gaXMgYWxtb3N0IGFzIHJlbGlhYmxlIGFzIGEgQ1JDLTMyIGJ1dCBjYW4gYmUgY29tcHV0ZWQKKyAgIG11Y2ggZmFzdGVyLgorCisgICBVc2FnZSBleGFtcGxlOgorCisgICAgIHVMb25nIGFkbGVyID0gYWRsZXIzMigwTCwgWl9OVUxMLCAwKTsKKworICAgICB3aGlsZSAocmVhZF9idWZmZXIoYnVmZmVyLCBsZW5ndGgpICE9IEVPRikgeworICAgICAgIGFkbGVyID0gYWRsZXIzMihhZGxlciwgYnVmZmVyLCBsZW5ndGgpOworICAgICB9CisgICAgIGlmIChhZGxlciAhPSBvcmlnaW5hbF9hZGxlcikgZXJyb3IoKTsKKyovCisKK1pFWFRFUk4gdUxvbmcgWkVYUE9SVCBhZGxlcjMyX3ogT0YoKHVMb25nIGFkbGVyLCBjb25zdCBCeXRlZiAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgel9zaXplX3QgbGVuKSk7CisvKgorICAgICBTYW1lIGFzIGFkbGVyMzIoKSwgYnV0IHdpdGggYSBzaXplX3QgbGVuZ3RoLgorKi8KKworLyoKK1pFWFRFUk4gdUxvbmcgWkVYUE9SVCBhZGxlcjMyX2NvbWJpbmUgT0YoKHVMb25nIGFkbGVyMSwgdUxvbmcgYWRsZXIyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgel9vZmZfdCBsZW4yKSk7CisKKyAgICAgQ29tYmluZSB0d28gQWRsZXItMzIgY2hlY2tzdW1zIGludG8gb25lLiAgRm9yIHR3byBzZXF1ZW5jZXMgb2YgYnl0ZXMsIHNlcTEKKyAgIGFuZCBzZXEyIHdpdGggbGVuZ3RocyBsZW4xIGFuZCBsZW4yLCBBZGxlci0zMiBjaGVja3N1bXMgd2VyZSBjYWxjdWxhdGVkIGZvcgorICAgZWFjaCwgYWRsZXIxIGFuZCBhZGxlcjIuICBhZGxlcjMyX2NvbWJpbmUoKSByZXR1cm5zIHRoZSBBZGxlci0zMiBjaGVja3N1bSBvZgorICAgc2VxMSBhbmQgc2VxMiBjb25jYXRlbmF0ZWQsIHJlcXVpcmluZyBvbmx5IGFkbGVyMSwgYWRsZXIyLCBhbmQgbGVuMi4gIE5vdGUKKyAgIHRoYXQgdGhlIHpfb2ZmX3QgdHlwZSAobGlrZSBvZmZfdCkgaXMgYSBzaWduZWQgaW50ZWdlci4gIElmIGxlbjIgaXMKKyAgIG5lZ2F0aXZlLCB0aGUgcmVzdWx0IGhhcyBubyBtZWFuaW5nIG9yIHV0aWxpdHkuCisqLworCitaRVhURVJOIHVMb25nIFpFWFBPUlQgY3JjMzIgT0YoKHVMb25nIGNyYywgY29uc3QgQnl0ZWYgKmJ1ZiwgdUludCBsZW4pKTsKKy8qCisgICAgIFVwZGF0ZSBhIHJ1bm5pbmcgQ1JDLTMyIHdpdGggdGhlIGJ5dGVzIGJ1ZlswLi5sZW4tMV0gYW5kIHJldHVybiB0aGUKKyAgIHVwZGF0ZWQgQ1JDLTMyLiBBIENSQy0zMiB2YWx1ZSBpcyBpbiB0aGUgcmFuZ2Ugb2YgYSAzMi1iaXQgdW5zaWduZWQgaW50ZWdlci4KKyAgIElmIGJ1ZiBpcyBaX05VTEwsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcmVxdWlyZWQgaW5pdGlhbCB2YWx1ZSBmb3IgdGhlCisgICBjcmMuIFByZS0gYW5kIHBvc3QtY29uZGl0aW9uaW5nIChvbmUncyBjb21wbGVtZW50KSBpcyBwZXJmb3JtZWQgd2l0aGluIHRoaXMKKyAgIGZ1bmN0aW9uIHNvIGl0IHNob3VsZG4ndCBiZSBkb25lIGJ5IHRoZSBhcHBsaWNhdGlvbi4KKworICAgVXNhZ2UgZXhhbXBsZToKKworICAgICB1TG9uZyBjcmMgPSBjcmMzMigwTCwgWl9OVUxMLCAwKTsKKworICAgICB3aGlsZSAocmVhZF9idWZmZXIoYnVmZmVyLCBsZW5ndGgpICE9IEVPRikgeworICAgICAgIGNyYyA9IGNyYzMyKGNyYywgYnVmZmVyLCBsZW5ndGgpOworICAgICB9CisgICAgIGlmIChjcmMgIT0gb3JpZ2luYWxfY3JjKSBlcnJvcigpOworKi8KKworWkVYVEVSTiB1TG9uZyBaRVhQT1JUIGNyYzMyX3ogT0YoKHVMb25nIGNyYywgY29uc3QgQnl0ZWYgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6X3NpemVfdCBsZW4pKTsKKy8qCisgICAgIFNhbWUgYXMgY3JjMzIoKSwgYnV0IHdpdGggYSBzaXplX3QgbGVuZ3RoLgorKi8KKworLyoKK1pFWFRFUk4gdUxvbmcgWkVYUE9SVCBjcmMzMl9jb21iaW5lIE9GKCh1TG9uZyBjcmMxLCB1TG9uZyBjcmMyLCB6X29mZl90IGxlbjIpKTsKKworICAgICBDb21iaW5lIHR3byBDUkMtMzIgY2hlY2sgdmFsdWVzIGludG8gb25lLiAgRm9yIHR3byBzZXF1ZW5jZXMgb2YgYnl0ZXMsCisgICBzZXExIGFuZCBzZXEyIHdpdGggbGVuZ3RocyBsZW4xIGFuZCBsZW4yLCBDUkMtMzIgY2hlY2sgdmFsdWVzIHdlcmUKKyAgIGNhbGN1bGF0ZWQgZm9yIGVhY2gsIGNyYzEgYW5kIGNyYzIuICBjcmMzMl9jb21iaW5lKCkgcmV0dXJucyB0aGUgQ1JDLTMyCisgICBjaGVjayB2YWx1ZSBvZiBzZXExIGFuZCBzZXEyIGNvbmNhdGVuYXRlZCwgcmVxdWlyaW5nIG9ubHkgY3JjMSwgY3JjMiwgYW5kCisgICBsZW4yLgorKi8KKworLyoKK1pFWFRFUk4gdUxvbmcgWkVYUE9SVCBjcmMzMl9jb21iaW5lX2dlbiBPRigoel9vZmZfdCBsZW4yKSk7CisKKyAgICAgUmV0dXJuIHRoZSBvcGVyYXRvciBjb3JyZXNwb25kaW5nIHRvIGxlbmd0aCBsZW4yLCB0byBiZSB1c2VkIHdpdGgKKyAgIGNyYzMyX2NvbWJpbmVfb3AoKS4KKyovCisKK1pFWFRFUk4gdUxvbmcgWkVYUE9SVCBjcmMzMl9jb21iaW5lX29wIE9GKCh1TG9uZyBjcmMxLCB1TG9uZyBjcmMyLCB1TG9uZyBvcCkpOworLyoKKyAgICAgR2l2ZSB0aGUgc2FtZSByZXN1bHQgYXMgY3JjMzJfY29tYmluZSgpLCB1c2luZyBvcCBpbiBwbGFjZSBvZiBsZW4yLiBvcCBpcworICAgaXMgZ2VuZXJhdGVkIGZyb20gbGVuMiBieSBjcmMzMl9jb21iaW5lX2dlbigpLiBUaGlzIHdpbGwgYmUgZmFzdGVyIHRoYW4KKyAgIGNyYzMyX2NvbWJpbmUoKSBpZiB0aGUgZ2VuZXJhdGVkIG9wIGlzIHVzZWQgbW9yZSB0aGFuIG9uY2UuCisqLworCisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHZhcmlvdXMgaGFja3MsIGRvbid0IGxvb2sgOikgKi8KKworLyogZGVmbGF0ZUluaXQgYW5kIGluZmxhdGVJbml0IGFyZSBtYWNyb3MgdG8gYWxsb3cgY2hlY2tpbmcgdGhlIHpsaWIgdmVyc2lvbgorICogYW5kIHRoZSBjb21waWxlcidzIHZpZXcgb2Ygel9zdHJlYW06CisgKi8KK1pFWFRFUk4gaW50IFpFWFBPUlQgZGVmbGF0ZUluaXRfIE9GKCh6X3N0cmVhbXAgc3RybSwgaW50IGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnZlcnNpb24sIGludCBzdHJlYW1fc2l6ZSkpOworWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRlSW5pdF8gT0YoKHpfc3RyZWFtcCBzdHJtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnZlcnNpb24sIGludCBzdHJlYW1fc2l6ZSkpOworWkVYVEVSTiBpbnQgWkVYUE9SVCBkZWZsYXRlSW5pdDJfIE9GKCh6X3N0cmVhbXAgc3RybSwgaW50ICBsZXZlbCwgaW50ICBtZXRob2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aW5kb3dCaXRzLCBpbnQgbWVtTGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdHJhdGVneSwgY29uc3QgY2hhciAqdmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0cmVhbV9zaXplKSk7CitaRVhURVJOIGludCBaRVhQT1JUIGluZmxhdGVJbml0Ml8gT0YoKHpfc3RyZWFtcCBzdHJtLCBpbnQgIHdpbmRvd0JpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnZlcnNpb24sIGludCBzdHJlYW1fc2l6ZSkpOworWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRlQmFja0luaXRfIE9GKCh6X3N0cmVhbXAgc3RybSwgaW50IHdpbmRvd0JpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgRkFSICp3aW5kb3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnZlcnNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdHJlYW1fc2l6ZSkpOworI2lmZGVmIFpfUFJFRklYX1NFVAorIyAgZGVmaW5lIHpfZGVmbGF0ZUluaXQoc3RybSwgbGV2ZWwpIFwKKyAgICAgICAgICBkZWZsYXRlSW5pdF8oKHN0cm0pLCAobGV2ZWwpLCBaTElCX1ZFUlNJT04sIChpbnQpc2l6ZW9mKHpfc3RyZWFtKSkKKyMgIGRlZmluZSB6X2luZmxhdGVJbml0KHN0cm0pIFwKKyAgICAgICAgICBpbmZsYXRlSW5pdF8oKHN0cm0pLCBaTElCX1ZFUlNJT04sIChpbnQpc2l6ZW9mKHpfc3RyZWFtKSkKKyMgIGRlZmluZSB6X2RlZmxhdGVJbml0MihzdHJtLCBsZXZlbCwgbWV0aG9kLCB3aW5kb3dCaXRzLCBtZW1MZXZlbCwgc3RyYXRlZ3kpIFwKKyAgICAgICAgICBkZWZsYXRlSW5pdDJfKChzdHJtKSwobGV2ZWwpLChtZXRob2QpLCh3aW5kb3dCaXRzKSwobWVtTGV2ZWwpLFwKKyAgICAgICAgICAgICAgICAgICAgICAgIChzdHJhdGVneSksIFpMSUJfVkVSU0lPTiwgKGludClzaXplb2Yoel9zdHJlYW0pKQorIyAgZGVmaW5lIHpfaW5mbGF0ZUluaXQyKHN0cm0sIHdpbmRvd0JpdHMpIFwKKyAgICAgICAgICBpbmZsYXRlSW5pdDJfKChzdHJtKSwgKHdpbmRvd0JpdHMpLCBaTElCX1ZFUlNJT04sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpc2l6ZW9mKHpfc3RyZWFtKSkKKyMgIGRlZmluZSB6X2luZmxhdGVCYWNrSW5pdChzdHJtLCB3aW5kb3dCaXRzLCB3aW5kb3cpIFwKKyAgICAgICAgICBpbmZsYXRlQmFja0luaXRfKChzdHJtKSwgKHdpbmRvd0JpdHMpLCAod2luZG93KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgWkxJQl9WRVJTSU9OLCAoaW50KXNpemVvZih6X3N0cmVhbSkpCisjZWxzZQorIyAgZGVmaW5lIGRlZmxhdGVJbml0KHN0cm0sIGxldmVsKSBcCisgICAgICAgICAgZGVmbGF0ZUluaXRfKChzdHJtKSwgKGxldmVsKSwgWkxJQl9WRVJTSU9OLCAoaW50KXNpemVvZih6X3N0cmVhbSkpCisjICBkZWZpbmUgaW5mbGF0ZUluaXQoc3RybSkgXAorICAgICAgICAgIGluZmxhdGVJbml0Xygoc3RybSksIFpMSUJfVkVSU0lPTiwgKGludClzaXplb2Yoel9zdHJlYW0pKQorIyAgZGVmaW5lIGRlZmxhdGVJbml0MihzdHJtLCBsZXZlbCwgbWV0aG9kLCB3aW5kb3dCaXRzLCBtZW1MZXZlbCwgc3RyYXRlZ3kpIFwKKyAgICAgICAgICBkZWZsYXRlSW5pdDJfKChzdHJtKSwobGV2ZWwpLChtZXRob2QpLCh3aW5kb3dCaXRzKSwobWVtTGV2ZWwpLFwKKyAgICAgICAgICAgICAgICAgICAgICAgIChzdHJhdGVneSksIFpMSUJfVkVSU0lPTiwgKGludClzaXplb2Yoel9zdHJlYW0pKQorIyAgZGVmaW5lIGluZmxhdGVJbml0MihzdHJtLCB3aW5kb3dCaXRzKSBcCisgICAgICAgICAgaW5mbGF0ZUluaXQyXygoc3RybSksICh3aW5kb3dCaXRzKSwgWkxJQl9WRVJTSU9OLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAoaW50KXNpemVvZih6X3N0cmVhbSkpCisjICBkZWZpbmUgaW5mbGF0ZUJhY2tJbml0KHN0cm0sIHdpbmRvd0JpdHMsIHdpbmRvdykgXAorICAgICAgICAgIGluZmxhdGVCYWNrSW5pdF8oKHN0cm0pLCAod2luZG93Qml0cyksICh3aW5kb3cpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBaTElCX1ZFUlNJT04sIChpbnQpc2l6ZW9mKHpfc3RyZWFtKSkKKyNlbmRpZgorCisjaWZuZGVmIFpfU09MTworCisvKiBnemdldGMoKSBtYWNybyBhbmQgaXRzIHN1cHBvcnRpbmcgZnVuY3Rpb24gYW5kIGV4cG9zZWQgZGF0YSBzdHJ1Y3R1cmUuICBOb3RlCisgKiB0aGF0IHRoZSByZWFsIGludGVybmFsIHN0YXRlIGlzIG11Y2ggbGFyZ2VyIHRoYW4gdGhlIGV4cG9zZWQgc3RydWN0dXJlLgorICogVGhpcyBhYmJyZXZpYXRlZCBzdHJ1Y3R1cmUgZXhwb3NlcyBqdXN0IGVub3VnaCBmb3IgdGhlIGd6Z2V0YygpIG1hY3JvLiAgVGhlCisgKiB1c2VyIHNob3VsZCBub3QgbWVzcyB3aXRoIHRoZXNlIGV4cG9zZWQgZWxlbWVudHMsIHNpbmNlIHRoZWlyIG5hbWVzIG9yCisgKiBiZWhhdmlvciBjb3VsZCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZSwgcGVyaGFwcyBldmVuIGNhcHJpY2lvdXNseS4gIFRoZXkgY2FuCisgKiBvbmx5IGJlIHVzZWQgYnkgdGhlIGd6Z2V0YygpIG1hY3JvLiAgWW91IGhhdmUgYmVlbiB3YXJuZWQuCisgKi8KK3N0cnVjdCBnekZpbGVfcyB7CisgICAgdW5zaWduZWQgaGF2ZTsKKyAgICB1bnNpZ25lZCBjaGFyICpuZXh0OworICAgIHpfb2ZmNjRfdCBwb3M7Cit9OworWkVYVEVSTiBpbnQgWkVYUE9SVCBnemdldGNfIE9GKChnekZpbGUgZmlsZSkpOyAgLyogYmFja3dhcmQgY29tcGF0aWJpbGl0eSAqLworI2lmZGVmIFpfUFJFRklYX1NFVAorIyAgdW5kZWYgel9nemdldGMKKyMgIGRlZmluZSB6X2d6Z2V0YyhnKSBcCisgICAgICAgICAgKChnKS0+aGF2ZSA/ICgoZyktPmhhdmUtLSwgKGcpLT5wb3MrKywgKigoZyktPm5leHQpKyspIDogKGd6Z2V0YykoZykpCisjZWxzZQorIyAgZGVmaW5lIGd6Z2V0YyhnKSBcCisgICAgICAgICAgKChnKS0+aGF2ZSA/ICgoZyktPmhhdmUtLSwgKGcpLT5wb3MrKywgKigoZyktPm5leHQpKyspIDogKGd6Z2V0YykoZykpCisjZW5kaWYKKworLyogcHJvdmlkZSA2NC1iaXQgb2Zmc2V0IGZ1bmN0aW9ucyBpZiBfTEFSR0VGSUxFNjRfU09VUkNFIGRlZmluZWQsIGFuZC9vcgorICogY2hhbmdlIHRoZSByZWd1bGFyIGZ1bmN0aW9ucyB0byA2NCBiaXRzIGlmIF9GSUxFX09GRlNFVF9CSVRTIGlzIDY0IChpZgorICogYm90aCBhcmUgdHJ1ZSwgdGhlIGFwcGxpY2F0aW9uIGdldHMgdGhlICo2NCBmdW5jdGlvbnMsIGFuZCB0aGUgcmVndWxhcgorICogZnVuY3Rpb25zIGFyZSBjaGFuZ2VkIHRvIDY0IGJpdHMpIC0tIGluIGNhc2UgdGhlc2UgYXJlIHNldCBvbiBzeXN0ZW1zCisgKiB3aXRob3V0IGxhcmdlIGZpbGUgc3VwcG9ydCwgX0xGUzY0X0xBUkdFRklMRSBtdXN0IGFsc28gYmUgdHJ1ZQorICovCisjaWZkZWYgWl9MQVJHRTY0CisgICBaRVhURVJOIGd6RmlsZSBaRVhQT1JUIGd6b3BlbjY0IE9GKChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKikpOworICAgWkVYVEVSTiB6X29mZjY0X3QgWkVYUE9SVCBnenNlZWs2NCBPRigoZ3pGaWxlLCB6X29mZjY0X3QsIGludCkpOworICAgWkVYVEVSTiB6X29mZjY0X3QgWkVYUE9SVCBnenRlbGw2NCBPRigoZ3pGaWxlKSk7CisgICBaRVhURVJOIHpfb2ZmNjRfdCBaRVhQT1JUIGd6b2Zmc2V0NjQgT0YoKGd6RmlsZSkpOworICAgWkVYVEVSTiB1TG9uZyBaRVhQT1JUIGFkbGVyMzJfY29tYmluZTY0IE9GKCh1TG9uZywgdUxvbmcsIHpfb2ZmNjRfdCkpOworICAgWkVYVEVSTiB1TG9uZyBaRVhQT1JUIGNyYzMyX2NvbWJpbmU2NCBPRigodUxvbmcsIHVMb25nLCB6X29mZjY0X3QpKTsKKyAgIFpFWFRFUk4gdUxvbmcgWkVYUE9SVCBjcmMzMl9jb21iaW5lX2dlbjY0IE9GKCh6X29mZjY0X3QpKTsKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoWkxJQl9JTlRFUk5BTCkgJiYgZGVmaW5lZChaX1dBTlQ2NCkKKyMgIGlmZGVmIFpfUFJFRklYX1NFVAorIyAgICBkZWZpbmUgel9nem9wZW4gel9nem9wZW42NAorIyAgICBkZWZpbmUgel9nenNlZWsgel9nenNlZWs2NAorIyAgICBkZWZpbmUgel9nenRlbGwgel9nenRlbGw2NAorIyAgICBkZWZpbmUgel9nem9mZnNldCB6X2d6b2Zmc2V0NjQKKyMgICAgZGVmaW5lIHpfYWRsZXIzMl9jb21iaW5lIHpfYWRsZXIzMl9jb21iaW5lNjQKKyMgICAgZGVmaW5lIHpfY3JjMzJfY29tYmluZSB6X2NyYzMyX2NvbWJpbmU2NAorIyAgICBkZWZpbmUgel9jcmMzMl9jb21iaW5lX2dlbiB6X2NyYzMyX2NvbWJpbmVfZ2VuNjQKKyMgIGVsc2UKKyMgICAgZGVmaW5lIGd6b3BlbiBnem9wZW42NAorIyAgICBkZWZpbmUgZ3pzZWVrIGd6c2VlazY0CisjICAgIGRlZmluZSBnenRlbGwgZ3p0ZWxsNjQKKyMgICAgZGVmaW5lIGd6b2Zmc2V0IGd6b2Zmc2V0NjQKKyMgICAgZGVmaW5lIGFkbGVyMzJfY29tYmluZSBhZGxlcjMyX2NvbWJpbmU2NAorIyAgICBkZWZpbmUgY3JjMzJfY29tYmluZSBjcmMzMl9jb21iaW5lNjQKKyMgICAgZGVmaW5lIGNyYzMyX2NvbWJpbmVfZ2VuIGNyYzMyX2NvbWJpbmVfZ2VuNjQKKyMgIGVuZGlmCisjICBpZm5kZWYgWl9MQVJHRTY0CisgICAgIFpFWFRFUk4gZ3pGaWxlIFpFWFBPUlQgZ3pvcGVuNjQgT0YoKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKSk7CisgICAgIFpFWFRFUk4gel9vZmZfdCBaRVhQT1JUIGd6c2VlazY0IE9GKChnekZpbGUsIHpfb2ZmX3QsIGludCkpOworICAgICBaRVhURVJOIHpfb2ZmX3QgWkVYUE9SVCBnenRlbGw2NCBPRigoZ3pGaWxlKSk7CisgICAgIFpFWFRFUk4gel9vZmZfdCBaRVhQT1JUIGd6b2Zmc2V0NjQgT0YoKGd6RmlsZSkpOworICAgICBaRVhURVJOIHVMb25nIFpFWFBPUlQgYWRsZXIzMl9jb21iaW5lNjQgT0YoKHVMb25nLCB1TG9uZywgel9vZmZfdCkpOworICAgICBaRVhURVJOIHVMb25nIFpFWFBPUlQgY3JjMzJfY29tYmluZTY0IE9GKCh1TG9uZywgdUxvbmcsIHpfb2ZmX3QpKTsKKyAgICAgWkVYVEVSTiB1TG9uZyBaRVhQT1JUIGNyYzMyX2NvbWJpbmVfZ2VuNjQgT0YoKHpfb2ZmX3QpKTsKKyMgIGVuZGlmCisjZWxzZQorICAgWkVYVEVSTiBnekZpbGUgWkVYUE9SVCBnem9wZW4gT0YoKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKSk7CisgICBaRVhURVJOIHpfb2ZmX3QgWkVYUE9SVCBnenNlZWsgT0YoKGd6RmlsZSwgel9vZmZfdCwgaW50KSk7CisgICBaRVhURVJOIHpfb2ZmX3QgWkVYUE9SVCBnenRlbGwgT0YoKGd6RmlsZSkpOworICAgWkVYVEVSTiB6X29mZl90IFpFWFBPUlQgZ3pvZmZzZXQgT0YoKGd6RmlsZSkpOworICAgWkVYVEVSTiB1TG9uZyBaRVhQT1JUIGFkbGVyMzJfY29tYmluZSBPRigodUxvbmcsIHVMb25nLCB6X29mZl90KSk7CisgICBaRVhURVJOIHVMb25nIFpFWFBPUlQgY3JjMzJfY29tYmluZSBPRigodUxvbmcsIHVMb25nLCB6X29mZl90KSk7CisgICBaRVhURVJOIHVMb25nIFpFWFBPUlQgY3JjMzJfY29tYmluZV9nZW4gT0YoKHpfb2ZmX3QpKTsKKyNlbmRpZgorCisjZWxzZSAvKiBaX1NPTE8gKi8KKworICAgWkVYVEVSTiB1TG9uZyBaRVhQT1JUIGFkbGVyMzJfY29tYmluZSBPRigodUxvbmcsIHVMb25nLCB6X29mZl90KSk7CisgICBaRVhURVJOIHVMb25nIFpFWFBPUlQgY3JjMzJfY29tYmluZSBPRigodUxvbmcsIHVMb25nLCB6X29mZl90KSk7CisgICBaRVhURVJOIHVMb25nIFpFWFBPUlQgY3JjMzJfY29tYmluZV9nZW4gT0YoKHpfb2ZmX3QpKTsKKworI2VuZGlmIC8qICFaX1NPTE8gKi8KKworLyogdW5kb2N1bWVudGVkIGZ1bmN0aW9ucyAqLworWkVYVEVSTiBjb25zdCBjaGFyICAgKiBaRVhQT1JUIHpFcnJvciAgICAgICAgICAgT0YoKGludCkpOworWkVYVEVSTiBpbnQgICAgICAgICAgICBaRVhQT1JUIGluZmxhdGVTeW5jUG9pbnQgT0YoKHpfc3RyZWFtcCkpOworWkVYVEVSTiBjb25zdCB6X2NyY190IEZBUiAqIFpFWFBPUlQgZ2V0X2NyY190YWJsZSAgICBPRigodm9pZCkpOworWkVYVEVSTiBpbnQgICAgICAgICAgICBaRVhQT1JUIGluZmxhdGVVbmRlcm1pbmUgT0YoKHpfc3RyZWFtcCwgaW50KSk7CitaRVhURVJOIGludCAgICAgICAgICAgIFpFWFBPUlQgaW5mbGF0ZVZhbGlkYXRlIE9GKCh6X3N0cmVhbXAsIGludCkpOworWkVYVEVSTiB1bnNpZ25lZCBsb25nICBaRVhQT1JUIGluZmxhdGVDb2Rlc1VzZWQgT0YgKCh6X3N0cmVhbXApKTsKK1pFWFRFUk4gaW50ICAgICAgICAgICAgWkVYUE9SVCBpbmZsYXRlUmVzZXRLZWVwIE9GKCh6X3N0cmVhbXApKTsKK1pFWFRFUk4gaW50ICAgICAgICAgICAgWkVYUE9SVCBkZWZsYXRlUmVzZXRLZWVwIE9GKCh6X3N0cmVhbXApKTsKKyNpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoWl9TT0xPKQorWkVYVEVSTiBnekZpbGUgICAgICAgICBaRVhQT1JUIGd6b3Blbl93IE9GKChjb25zdCB3Y2hhcl90ICpwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptb2RlKSk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKFNUREMpIHx8IGRlZmluZWQoWl9IQVZFX1NUREFSR19IKQorIyAgaWZuZGVmIFpfU09MTworWkVYVEVSTiBpbnQgICAgICAgICAgICBaRVhQT1JUVkEgZ3p2cHJpbnRmIFpfQVJHKChnekZpbGUgZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9saXN0IHZhKSk7CisjICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBaTElCX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy96bGliLm1hcCBiL3NyYy96bGliLm1hcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzMwYjYwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3psaWIubWFwCkBAIC0wLDAgKzEsMTAwIEBACitaTElCXzEuMi4wIHsNCisgIGdsb2JhbDoNCisgICAgY29tcHJlc3NCb3VuZDsNCisgICAgZGVmbGF0ZUJvdW5kOw0KKyAgICBpbmZsYXRlQmFjazsNCisgICAgaW5mbGF0ZUJhY2tFbmQ7DQorICAgIGluZmxhdGVCYWNrSW5pdF87DQorICAgIGluZmxhdGVDb3B5Ow0KKyAgbG9jYWw6DQorICAgIGRlZmxhdGVfY29weXJpZ2h0Ow0KKyAgICBpbmZsYXRlX2NvcHlyaWdodDsNCisgICAgaW5mbGF0ZV9mYXN0Ow0KKyAgICBpbmZsYXRlX3RhYmxlOw0KKyAgICB6Y2FsbG9jOw0KKyAgICB6Y2ZyZWU7DQorICAgIHpfZXJybXNnOw0KKyAgICBnel9lcnJvcjsNCisgICAgZ3pfaW50bWF4Ow0KKyAgICBfKjsNCit9Ow0KKw0KK1pMSUJfMS4yLjAuMiB7DQorICAgIGd6Y2xlYXJlcnI7DQorICAgIGd6dW5nZXRjOw0KKyAgICB6bGliQ29tcGlsZUZsYWdzOw0KK30gWkxJQl8xLjIuMDsNCisNCitaTElCXzEuMi4wLjggew0KKyAgICBkZWZsYXRlUHJpbWU7DQorfSBaTElCXzEuMi4wLjI7DQorDQorWkxJQl8xLjIuMiB7DQorICAgIGFkbGVyMzJfY29tYmluZTsNCisgICAgY3JjMzJfY29tYmluZTsNCisgICAgZGVmbGF0ZVNldEhlYWRlcjsNCisgICAgaW5mbGF0ZUdldEhlYWRlcjsNCit9IFpMSUJfMS4yLjAuODsNCisNCitaTElCXzEuMi4yLjMgew0KKyAgICBkZWZsYXRlVHVuZTsNCisgICAgZ3pkaXJlY3Q7DQorfSBaTElCXzEuMi4yOw0KKw0KK1pMSUJfMS4yLjIuNCB7DQorICAgIGluZmxhdGVQcmltZTsNCit9IFpMSUJfMS4yLjIuMzsNCisNCitaTElCXzEuMi4zLjMgew0KKyAgICBhZGxlcjMyX2NvbWJpbmU2NDsNCisgICAgY3JjMzJfY29tYmluZTY0Ow0KKyAgICBnem9wZW42NDsNCisgICAgZ3pzZWVrNjQ7DQorICAgIGd6dGVsbDY0Ow0KKyAgICBpbmZsYXRlVW5kZXJtaW5lOw0KK30gWkxJQl8xLjIuMi40Ow0KKw0KK1pMSUJfMS4yLjMuNCB7DQorICAgIGluZmxhdGVSZXNldDI7DQorICAgIGluZmxhdGVNYXJrOw0KK30gWkxJQl8xLjIuMy4zOw0KKw0KK1pMSUJfMS4yLjMuNSB7DQorICAgIGd6YnVmZmVyOw0KKyAgICBnem9mZnNldDsNCisgICAgZ3pvZmZzZXQ2NDsNCisgICAgZ3pjbG9zZV9yOw0KKyAgICBnemNsb3NlX3c7DQorfSBaTElCXzEuMi4zLjQ7DQorDQorWkxJQl8xLjIuNS4xIHsNCisgICAgZGVmbGF0ZVBlbmRpbmc7DQorfSBaTElCXzEuMi4zLjU7DQorDQorWkxJQl8xLjIuNS4yIHsNCisgICAgZGVmbGF0ZVJlc2V0S2VlcDsNCisgICAgZ3pnZXRjXzsNCisgICAgaW5mbGF0ZVJlc2V0S2VlcDsNCit9IFpMSUJfMS4yLjUuMTsNCisNCitaTElCXzEuMi43LjEgew0KKyAgICBpbmZsYXRlR2V0RGljdGlvbmFyeTsNCisgICAgZ3p2cHJpbnRmOw0KK30gWkxJQl8xLjIuNS4yOw0KKw0KK1pMSUJfMS4yLjkgew0KKyAgICBpbmZsYXRlQ29kZXNVc2VkOw0KKyAgICBpbmZsYXRlVmFsaWRhdGU7DQorICAgIHVuY29tcHJlc3MyOw0KKyAgICBnemZyZWFkOw0KKyAgICBnemZ3cml0ZTsNCisgICAgZGVmbGF0ZUdldERpY3Rpb25hcnk7DQorICAgIGFkbGVyMzJfejsNCisgICAgY3JjMzJfejsNCit9IFpMSUJfMS4yLjcuMTsNCisNCitaTElCXzEuMi4xMiB7DQorCWNyYzMyX2NvbWJpbmVfZ2VuOw0KKwljcmMzMl9jb21iaW5lX2dlbjY0Ow0KKwljcmMzMl9jb21iaW5lX29wOw0KK30gWkxJQl8xLjIuOTsNCmRpZmYgLS1naXQgYS9zcmMvemxpYi5wYy5jbWFrZWluIGIvc3JjL3psaWIucGMuY21ha2VpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWU2NDI5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3psaWIucGMuY21ha2VpbgpAQCAtMCwwICsxLDEzIEBACitwcmVmaXg9QENNQUtFX0lOU1RBTExfUFJFRklYQAorZXhlY19wcmVmaXg9QENNQUtFX0lOU1RBTExfUFJFRklYQAorbGliZGlyPUBJTlNUQUxMX0xJQl9ESVJACitzaGFyZWRsaWJkaXI9QElOU1RBTExfTElCX0RJUkAKK2luY2x1ZGVkaXI9QElOU1RBTExfSU5DX0RJUkAKKworTmFtZTogemxpYgorRGVzY3JpcHRpb246IHpsaWIgY29tcHJlc3Npb24gbGlicmFyeQorVmVyc2lvbjogQFZFUlNJT05ACisKK1JlcXVpcmVzOgorTGliczogLUwke2xpYmRpcn0gLUwke3NoYXJlZGxpYmRpcn0gLWx6CitDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfQpkaWZmIC0tZ2l0IGEvc3JjL3psaWIucGMuaW4gYi9zcmMvemxpYi5wYy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTVhY2Y5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3psaWIucGMuaW4KQEAgLTAsMCArMSwxMyBAQAorcHJlZml4PUBwcmVmaXhACitleGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACitsaWJkaXI9QGxpYmRpckAKK3NoYXJlZGxpYmRpcj1Ac2hhcmVkbGliZGlyQAoraW5jbHVkZWRpcj1AaW5jbHVkZWRpckAKKworTmFtZTogemxpYgorRGVzY3JpcHRpb246IHpsaWIgY29tcHJlc3Npb24gbGlicmFyeQorVmVyc2lvbjogQFZFUlNJT05ACisKK1JlcXVpcmVzOgorTGliczogLUwke2xpYmRpcn0gLUwke3NoYXJlZGxpYmRpcn0gLWx6CitDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfQpkaWZmIC0tZ2l0IGEvc3JjL3psaWIyYW5zaSBiL3NyYy96bGliMmFuc2kKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTVlM2UxNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy96bGliMmFuc2kKQEAgLTAsMCArMSwxNTIgQEAKKyMhL3Vzci9iaW4vcGVybAorCisjIFRyYW5zZm9ybSBLJlIgQyBmdW5jdGlvbiBkZWZpbml0aW9ucyBpbnRvIEFOU0kgZXF1aXZhbGVudC4KKyMKKyMgQXV0aG9yOiBQYXVsIE1hcnF1ZXNzCisjIFZlcnNpb246IDEuMAorIyBEYXRlOiAzIE9jdG9iZXIgMjAwNgorCisjIFRPRE8KKyMKKyMgQXN1bWVzIG5vIGZ1bmN0aW9uIHBvaW50ZXIgcGFyYW1ldGVycy4gdW5sZXNzIHRoZXkgYXJlIHR5cGVkZWZlZC4KKyMgQXNzdW1lcyBubyBsaXRlcmFsIHN0cmluZ3MgdGhhdCBsb29rIGxpa2UgZnVuY3Rpb24gZGVmaW5pdGlvbnMKKyMgQXNzdW1lcyBmdW5jdGlvbnMgc3RhcnQgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUKKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKKworbG9jYWwgJC87CiskXyA9IDw+OworCitteSAkc3AgPSBxcnsgXHMqICg/OiAvXCogLio/IFwqLyApPyBccyogfXg7ICMgYXNzdW1lIG5vIG5lc3RlZCBjb21tZW50cworCitteSAkZDEgICAgPSBxcnsgJHNwICg/OiBbXHdcKlxzXSsgJHNwKSogJHNwIFx3KyAkc3AgW1xbXF1cc10qICRzcCB9eCA7CitteSAkZGVjbCAgPSBxcnsgJHNwICg/OiBcdysgJHNwICkrICRkMSB9eG8gOworbXkgJGRMaXN0ID0gcXJ7ICRzcCAkZGVjbCAoPzogJHNwICwgJGQxICkqICRzcCA7ICRzcCB9eG8gOworCisKK3doaWxlIChzL14KKyAgICAgICAgICAgICggICAgICAgICAgICAgICAgICAjIFN0YXJ0ICQxCisgICAgICAgICAgICAgICAgKCAgICAgICAgICAgICAgIyAgIFN0YXJ0ICQyCisgICAgICAgICAgICAgICAgICAgIC4qPyAgICAgICAgIyAgICAgTWluaW1hbCBlYXQgY29udGVudAorICAgICAgICAgICAgICAgICAgICAoIF4gXHcgW1x3XHNcKl0rICkgICAgIyAgICAgJDMgLS0gZnVuY3Rpb24gbmFtZQorICAgICAgICAgICAgICAgICAgICBccyogICAgICAgICMgICAgIG9wdGlvbmFsIHdoaXRlc3BhY2UKKyAgICAgICAgICAgICAgICApICAgICAgICAgICAgICAjICQyIC0gTWF0Y2hlZCB1cCB0byBiZWZvcmUgcGFyYW1ldGVyIGxpc3QKKworICAgICAgICAgICAgICAgIFwoIFxzKiAgICAgICAgICMgTGl0ZXJhbCAiKCIgKyBvcHRpb25hbCB3aGl0ZXNwYWNlCisgICAgICAgICAgICAgICAgKCBbXlwpXSsgKSAgICAgIyAkNCAtIG9uZSBvciBtb3JlIGFueXRoaW5ncyBleGNlcHQgIikiCisgICAgICAgICAgICAgICAgXHMqIFwpICAgICAgICAgIyBvcHRpb25hbCB3aGl0ZXNwYWNlIHN1cnJvdW5kaW5nIGEgTGl0ZXJhbCAiKSIKKworICAgICAgICAgICAgICAgICggKD86ICRkTGlzdCApKyApICMgJDUKKworICAgICAgICAgICAgICAgICRzcCBeIHsgICAgICAgICMgbGl0ZXJhbCAieyIgYXQgc3RhcnQgb2YgbGluZQorICAgICAgICAgICAgKSAgICAgICAgICAgICAgICAgICMgUmVtZW1iZXIgdG8gJDEKKyAgICAgICAgLy94c29tCisgICAgICApCit7CisgICAgbXkgJGFsbCA9ICQxIDsKKyAgICBteSAkcHJlZml4ID0gJDI7CisgICAgbXkgJHBhcmFtX2xpc3QgPSAkNCA7CisgICAgbXkgJHBhcmFtcyA9ICQ1OworCisgICAgU3RyaXBDb21tZW50cygkcGFyYW1zKTsKKyAgICBTdHJpcENvbW1lbnRzKCRwYXJhbV9saXN0KTsKKyAgICAkcGFyYW1fbGlzdCA9fiBzL15ccysvLzsKKyAgICAkcGFyYW1fbGlzdCA9fiBzL1xzKyQvLzsKKworICAgIG15ICRpID0gMCA7CisgICAgbXkgJXBMaXN0ID0gbWFwIHsgJF8gPT4gJGkrKyB9CisgICAgICAgICAgICAgICAgc3BsaXQgL1xzKixccyovLCAkcGFyYW1fbGlzdDsKKyAgICBteSAkcE1hdGNoID0gJyhcYicgLiBqb2luKCd8Jywga2V5cyAlcExpc3QpIC4gJ1xiKVxXKiQnIDsKKworICAgIG15IEBwYXJhbXMgPSBzcGxpdCAvXHMqO1xzKi8sICRwYXJhbXM7CisgICAgbXkgQG91dFBhcmFtcyA9ICgpOworICAgIGZvcmVhY2ggbXkgJHAgKEBwYXJhbXMpCisgICAgeworICAgICAgICBpZiAoJHAgPX4gLywvKQorICAgICAgICB7CisgICAgICAgICAgICBteSBAYml0cyA9IHNwbGl0IC9ccyosXHMqLywgJHA7CisgICAgICAgICAgICBteSAkZmlyc3QgPSBzaGlmdCBAYml0czsKKyAgICAgICAgICAgICRmaXJzdCA9fiBzL15ccyovLzsKKyAgICAgICAgICAgIHB1c2ggQG91dFBhcmFtcywgJGZpcnN0OworICAgICAgICAgICAgJGZpcnN0ID1+IC9eKFx3K1xzKikvOworICAgICAgICAgICAgbXkgJHR5cGUgPSAkMSA7CisgICAgICAgICAgICBwdXNoIEBvdXRQYXJhbXMsIG1hcCB7ICR0eXBlIC4gJF8gfSBAYml0czsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgICRwID1+IHMvXlxzKy8vOworICAgICAgICAgICAgcHVzaCBAb3V0UGFyYW1zLCAkcDsKKyAgICAgICAgfQorICAgIH0KKworCisgICAgbXkgJXRtcCA9IG1hcCB7IC8kcE1hdGNoLzsgICRfID0+ICRwTGlzdHskMX0gIH0KKyAgICAgICAgICAgICAgQG91dFBhcmFtcyA7CisKKyAgICBAb3V0UGFyYW1zID0gbWFwICB7ICIgICAgJF8iIH0KKyAgICAgICAgICAgICAgICAgc29ydCB7ICR0bXB7JGF9IDw9PiAkdG1weyRifSB9CisgICAgICAgICAgICAgICAgIEBvdXRQYXJhbXMgOworCisgICAgcHJpbnQgJHByZWZpeCA7CisgICAgcHJpbnQgIihcbiIgLiBqb2luKCIsXG4iLCBAb3V0UGFyYW1zKSAuICIpXG4iOworICAgIHByaW50ICJ7IiA7CisKK30KKworIyBPdXRwdXQgYW55IHRyYWlsaW5nIGNvZGUuCitwcmludCA7CitleGl0IDA7CisKKworc3ViIFN0cmlwQ29tbWVudHMKK3sKKworICBubyB3YXJuaW5nczsKKworICAjIFN0cmlwIEMgJiBDKysgY29tZW50cworICAjIEZyb20gdGhlIHBlcmxmYXEKKyAgJF9bMF0gPX4KKworICAgIHN7CisgICAgICAgL1wqICAgICAgICAgIyMgIFN0YXJ0IG9mIC8qIC4uLiAqLyBjb21tZW50CisgICAgICAgW14qXSpcKisgICAgIyMgIE5vbi0qIGZvbGxvd2VkIGJ5IDEtb3ItbW9yZSAqJ3MKKyAgICAgICAoCisgICAgICAgICBbXi8qXVteKl0qXCorCisgICAgICAgKSogICAgICAgICAgIyMgIDAtb3ItbW9yZSB0aGluZ3Mgd2hpY2ggZG9uJ3Qgc3RhcnQgd2l0aCAvCisgICAgICAgICAgICAgICAgICAgIyMgICAgYnV0IGRvIGVuZCB3aXRoICcqJworICAgICAgIC8gICAgICAgICAgICMjICBFbmQgb2YgLyogLi4uICovIGNvbW1lbnQKKworICAgICB8ICAgICAgICAgIyMgICAgIE9SICBDKysgQ29tbWVudAorICAgICAgIC8vICAgICAgICAgICMjIFN0YXJ0IG9mIEMrKyBjb21tZW50IC8vCisgICAgICAgW15cbl0qICAgICAgIyMgZm9sbG93ZWQgYnkgMC1vci1tb3JlIG5vbiBlbmQgb2YgbGluZSBjaGFyYWN0ZXJzCisKKyAgICAgfCAgICAgICAgICMjICAgICBPUiAgdmFyaW91cyB0aGluZ3Mgd2hpY2ggYXJlbid0IGNvbW1lbnRzOgorCisgICAgICAgKAorICAgICAgICAgIiAgICAgICAgICAgIyMgIFN0YXJ0IG9mICIgLi4uICIgc3RyaW5nCisgICAgICAgICAoCisgICAgICAgICAgIFxcLiAgICAgICAgICAgIyMgIEVzY2FwZWQgY2hhcgorICAgICAgICAgfCAgICAgICAgICAgICAgICMjICAgIE9SCisgICAgICAgICAgIFteIlxcXSAgICAgICAgIyMgIE5vbiAiXAorICAgICAgICAgKSoKKyAgICAgICAgICIgICAgICAgICAgICMjICBFbmQgb2YgIiAuLi4gIiBzdHJpbmcKKworICAgICAgIHwgICAgICAgICAjIyAgICAgT1IKKworICAgICAgICAgJyAgICAgICAgICAgIyMgIFN0YXJ0IG9mICcgLi4uICcgc3RyaW5nCisgICAgICAgICAoCisgICAgICAgICAgIFxcLiAgICAgICAgICAgIyMgIEVzY2FwZWQgY2hhcgorICAgICAgICAgfCAgICAgICAgICAgICAgICMjICAgIE9SCisgICAgICAgICAgIFteJ1xcXSAgICAgICAgIyMgIE5vbiAnXAorICAgICAgICAgKSoKKyAgICAgICAgICcgICAgICAgICAgICMjICBFbmQgb2YgJyAuLi4gJyBzdHJpbmcKKworICAgICAgIHwgICAgICAgICAjIyAgICAgT1IKKworICAgICAgICAgLiAgICAgICAgICAgIyMgIEFueXRoaW5nIG90aGVyIGNoYXIKKyAgICAgICAgIFteLyInXFxdKiAgICMjICBDaGFycyB3aGljaCBkb2Vzbid0IHN0YXJ0IGEgY29tbWVudCwgc3RyaW5nIG9yIGVzY2FwZQorICAgICAgICkKKyAgICAgfXskMn1neHM7CisKK30KZGlmZiAtLWdpdCBhL3NyYy96dXRpbC5jIGIvc3JjL3p1dGlsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNhYjI4YQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy96dXRpbC5jCkBAIC0wLDAgKzEsMzI1IEBACisvKiB6dXRpbC5jIC0tIHRhcmdldCBkZXBlbmRlbnQgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHRoZSBjb21wcmVzc2lvbiBsaWJyYXJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxNyBKZWFuLWxvdXAgR2FpbGx5CisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCisgKi8KKworLyogQCgjKSAkSWQkICovCisKKyNpbmNsdWRlICJ6dXRpbC5oIgorI2lmbmRlZiBaX1NPTE8KKyMgIGluY2x1ZGUgImd6Z3V0cy5oIgorI2VuZGlmCisKK3pfY29uc3QgY2hhciAqIGNvbnN0IHpfZXJybXNnWzEwXSA9IHsKKyAgICAoel9jb25zdCBjaGFyICopIm5lZWQgZGljdGlvbmFyeSIsICAgICAvKiBaX05FRURfRElDVCAgICAgICAyICAqLworICAgICh6X2NvbnN0IGNoYXIgKikic3RyZWFtIGVuZCIsICAgICAgICAgIC8qIFpfU1RSRUFNX0VORCAgICAgIDEgICovCisgICAgKHpfY29uc3QgY2hhciAqKSIiLCAgICAgICAgICAgICAgICAgICAgLyogWl9PSyAgICAgICAgICAgICAgMCAgKi8KKyAgICAoel9jb25zdCBjaGFyICopImZpbGUgZXJyb3IiLCAgICAgICAgICAvKiBaX0VSUk5PICAgICAgICAgKC0xKSAqLworICAgICh6X2NvbnN0IGNoYXIgKikic3RyZWFtIGVycm9yIiwgICAgICAgIC8qIFpfU1RSRUFNX0VSUk9SICAoLTIpICovCisgICAgKHpfY29uc3QgY2hhciAqKSJkYXRhIGVycm9yIiwgICAgICAgICAgLyogWl9EQVRBX0VSUk9SICAgICgtMykgKi8KKyAgICAoel9jb25zdCBjaGFyICopImluc3VmZmljaWVudCBtZW1vcnkiLCAvKiBaX01FTV9FUlJPUiAgICAgKC00KSAqLworICAgICh6X2NvbnN0IGNoYXIgKikiYnVmZmVyIGVycm9yIiwgICAgICAgIC8qIFpfQlVGX0VSUk9SICAgICAoLTUpICovCisgICAgKHpfY29uc3QgY2hhciAqKSJpbmNvbXBhdGlibGUgdmVyc2lvbiIsLyogWl9WRVJTSU9OX0VSUk9SICgtNikgKi8KKyAgICAoel9jb25zdCBjaGFyICopIiIKK307CisKKworY29uc3QgY2hhciAqIFpFWFBPUlQgemxpYlZlcnNpb24oKQoreworICAgIHJldHVybiBaTElCX1ZFUlNJT047Cit9CisKK3VMb25nIFpFWFBPUlQgemxpYkNvbXBpbGVGbGFncygpCit7CisgICAgdUxvbmcgZmxhZ3M7CisKKyAgICBmbGFncyA9IDA7CisgICAgc3dpdGNoICgoaW50KShzaXplb2YodUludCkpKSB7CisgICAgY2FzZSAyOiAgICAgYnJlYWs7CisgICAgY2FzZSA0OiAgICAgZmxhZ3MgKz0gMTsgICAgIGJyZWFrOworICAgIGNhc2UgODogICAgIGZsYWdzICs9IDI7ICAgICBicmVhazsKKyAgICBkZWZhdWx0OiAgICBmbGFncyArPSAzOworICAgIH0KKyAgICBzd2l0Y2ggKChpbnQpKHNpemVvZih1TG9uZykpKSB7CisgICAgY2FzZSAyOiAgICAgYnJlYWs7CisgICAgY2FzZSA0OiAgICAgZmxhZ3MgKz0gMSA8PCAyOyAgICAgICAgYnJlYWs7CisgICAgY2FzZSA4OiAgICAgZmxhZ3MgKz0gMiA8PCAyOyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDogICAgZmxhZ3MgKz0gMyA8PCAyOworICAgIH0KKyAgICBzd2l0Y2ggKChpbnQpKHNpemVvZih2b2lkcGYpKSkgeworICAgIGNhc2UgMjogICAgIGJyZWFrOworICAgIGNhc2UgNDogICAgIGZsYWdzICs9IDEgPDwgNDsgICAgICAgIGJyZWFrOworICAgIGNhc2UgODogICAgIGZsYWdzICs9IDIgPDwgNDsgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6ICAgIGZsYWdzICs9IDMgPDwgNDsKKyAgICB9CisgICAgc3dpdGNoICgoaW50KShzaXplb2Yoel9vZmZfdCkpKSB7CisgICAgY2FzZSAyOiAgICAgYnJlYWs7CisgICAgY2FzZSA0OiAgICAgZmxhZ3MgKz0gMSA8PCA2OyAgICAgICAgYnJlYWs7CisgICAgY2FzZSA4OiAgICAgZmxhZ3MgKz0gMiA8PCA2OyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDogICAgZmxhZ3MgKz0gMyA8PCA2OworICAgIH0KKyNpZmRlZiBaTElCX0RFQlVHCisgICAgZmxhZ3MgKz0gMSA8PCA4OworI2VuZGlmCisjaWYgZGVmaW5lZChBU01WKSB8fCBkZWZpbmVkKEFTTUlORikKKyAgICBmbGFncyArPSAxIDw8IDk7CisjZW5kaWYKKyNpZmRlZiBaTElCX1dJTkFQSQorICAgIGZsYWdzICs9IDEgPDwgMTA7CisjZW5kaWYKKyNpZmRlZiBCVUlMREZJWEVECisgICAgZmxhZ3MgKz0gMSA8PCAxMjsKKyNlbmRpZgorI2lmZGVmIERZTkFNSUNfQ1JDX1RBQkxFCisgICAgZmxhZ3MgKz0gMSA8PCAxMzsKKyNlbmRpZgorI2lmZGVmIE5PX0daQ09NUFJFU1MKKyAgICBmbGFncyArPSAxTCA8PCAxNjsKKyNlbmRpZgorI2lmZGVmIE5PX0daSVAKKyAgICBmbGFncyArPSAxTCA8PCAxNzsKKyNlbmRpZgorI2lmZGVmIFBLWklQX0JVR19XT1JLQVJPVU5ECisgICAgZmxhZ3MgKz0gMUwgPDwgMjA7CisjZW5kaWYKKyNpZmRlZiBGQVNURVNUCisgICAgZmxhZ3MgKz0gMUwgPDwgMjE7CisjZW5kaWYKKyNpZiBkZWZpbmVkKFNUREMpIHx8IGRlZmluZWQoWl9IQVZFX1NUREFSR19IKQorIyAgaWZkZWYgTk9fdnNucHJpbnRmCisgICAgZmxhZ3MgKz0gMUwgPDwgMjU7CisjICAgIGlmZGVmIEhBU192c3ByaW50Zl92b2lkCisgICAgZmxhZ3MgKz0gMUwgPDwgMjY7CisjICAgIGVuZGlmCisjICBlbHNlCisjICAgIGlmZGVmIEhBU192c25wcmludGZfdm9pZAorICAgIGZsYWdzICs9IDFMIDw8IDI2OworIyAgICBlbmRpZgorIyAgZW5kaWYKKyNlbHNlCisgICAgZmxhZ3MgKz0gMUwgPDwgMjQ7CisjICBpZmRlZiBOT19zbnByaW50ZgorICAgIGZsYWdzICs9IDFMIDw8IDI1OworIyAgICBpZmRlZiBIQVNfc3ByaW50Zl92b2lkCisgICAgZmxhZ3MgKz0gMUwgPDwgMjY7CisjICAgIGVuZGlmCisjICBlbHNlCisjICAgIGlmZGVmIEhBU19zbnByaW50Zl92b2lkCisgICAgZmxhZ3MgKz0gMUwgPDwgMjY7CisjICAgIGVuZGlmCisjICBlbmRpZgorI2VuZGlmCisgICAgcmV0dXJuIGZsYWdzOworfQorCisjaWZkZWYgWkxJQl9ERUJVRworI2luY2x1ZGUgPHN0ZGxpYi5oPgorIyAgaWZuZGVmIHZlcmJvc2UKKyMgICAgZGVmaW5lIHZlcmJvc2UgMAorIyAgZW5kaWYKK2ludCBaTElCX0lOVEVSTkFMIHpfdmVyYm9zZSA9IHZlcmJvc2U7CisKK3ZvaWQgWkxJQl9JTlRFUk5BTCB6X2Vycm9yIChtKQorICAgIGNoYXIgKm07Cit7CisgICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwgbSk7CisgICAgZXhpdCgxKTsKK30KKyNlbmRpZgorCisvKiBleHBvcnRlZCB0byBhbGxvdyBjb252ZXJzaW9uIG9mIGVycm9yIGNvZGUgdG8gc3RyaW5nIGZvciBjb21wcmVzcygpIGFuZAorICogdW5jb21wcmVzcygpCisgKi8KK2NvbnN0IGNoYXIgKiBaRVhQT1JUIHpFcnJvcihlcnIpCisgICAgaW50IGVycjsKK3sKKyAgICByZXR1cm4gRVJSX01TRyhlcnIpOworfQorCisjaWYgZGVmaW5lZChfV0lOMzJfV0NFKSAmJiBfV0lOMzJfV0NFIDwgMHg4MDAKKyAgICAvKiBUaGUgb2xkZXIgTWljcm9zb2Z0IEMgUnVuLVRpbWUgTGlicmFyeSBmb3IgV2luZG93cyBDRSBkb2Vzbid0IGhhdmUKKyAgICAgKiBlcnJuby4gIFdlIGRlZmluZSBpdCBhcyBhIGdsb2JhbCB2YXJpYWJsZSB0byBzaW1wbGlmeSBwb3J0aW5nLgorICAgICAqIEl0cyB2YWx1ZSBpcyBhbHdheXMgMCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkLgorICAgICAqLworICAgIGludCBlcnJubyA9IDA7CisjZW5kaWYKKworI2lmbmRlZiBIQVZFX01FTUNQWQorCit2b2lkIFpMSUJfSU5URVJOQUwgem1lbWNweShkZXN0LCBzb3VyY2UsIGxlbikKKyAgICBCeXRlZiogZGVzdDsKKyAgICBjb25zdCBCeXRlZiogc291cmNlOworICAgIHVJbnQgIGxlbjsKK3sKKyAgICBpZiAobGVuID09IDApIHJldHVybjsKKyAgICBkbyB7CisgICAgICAgICpkZXN0KysgPSAqc291cmNlKys7IC8qID8/PyB0byBiZSB1bnJvbGxlZCAqLworICAgIH0gd2hpbGUgKC0tbGVuICE9IDApOworfQorCitpbnQgWkxJQl9JTlRFUk5BTCB6bWVtY21wKHMxLCBzMiwgbGVuKQorICAgIGNvbnN0IEJ5dGVmKiBzMTsKKyAgICBjb25zdCBCeXRlZiogczI7CisgICAgdUludCAgbGVuOworeworICAgIHVJbnQgajsKKworICAgIGZvciAoaiA9IDA7IGogPCBsZW47IGorKykgeworICAgICAgICBpZiAoczFbal0gIT0gczJbal0pIHJldHVybiAyKihzMVtqXSA+IHMyW2pdKS0xOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBaTElCX0lOVEVSTkFMIHptZW16ZXJvKGRlc3QsIGxlbikKKyAgICBCeXRlZiogZGVzdDsKKyAgICB1SW50ICBsZW47Cit7CisgICAgaWYgKGxlbiA9PSAwKSByZXR1cm47CisgICAgZG8geworICAgICAgICAqZGVzdCsrID0gMDsgIC8qID8/PyB0byBiZSB1bnJvbGxlZCAqLworICAgIH0gd2hpbGUgKC0tbGVuICE9IDApOworfQorI2VuZGlmCisKKyNpZm5kZWYgWl9TT0xPCisKKyNpZmRlZiBTWVMxNkJJVAorCisjaWZkZWYgX19UVVJCT0NfXworLyogVHVyYm8gQyBpbiAxNi1iaXQgbW9kZSAqLworCisjICBkZWZpbmUgTVlfWkNBTExPQworCisvKiBUdXJibyBDIG1hbGxvYygpIGRvZXMgbm90IGFsbG93IGR5bmFtaWMgYWxsb2NhdGlvbiBvZiA2NEsgYnl0ZXMKKyAqIGFuZCBmYXJtYWxsb2MoNjRLKSByZXR1cm5zIGEgcG9pbnRlciB3aXRoIGFuIG9mZnNldCBvZiA4LCBzbyB3ZQorICogbXVzdCBmaXggdGhlIHBvaW50ZXIuIFdhcm5pbmc6IHRoZSBwb2ludGVyIG11c3QgYmUgcHV0IGJhY2sgdG8gaXRzCisgKiBvcmlnaW5hbCBmb3JtIGluIG9yZGVyIHRvIGZyZWUgaXQsIHVzZSB6Y2ZyZWUoKS4KKyAqLworCisjZGVmaW5lIE1BWF9QVFIgMTAKKy8qIDEwKjY0SyA9IDY0MEsgKi8KKworbG9jYWwgaW50IG5leHRfcHRyID0gMDsKKwordHlwZWRlZiBzdHJ1Y3QgcHRyX3RhYmxlX3MgeworICAgIHZvaWRwZiBvcmdfcHRyOworICAgIHZvaWRwZiBuZXdfcHRyOworfSBwdHJfdGFibGU7CisKK2xvY2FsIHB0cl90YWJsZSB0YWJsZVtNQVhfUFRSXTsKKy8qIFRoaXMgdGFibGUgaXMgdXNlZCB0byByZW1lbWJlciB0aGUgb3JpZ2luYWwgZm9ybSBvZiBwb2ludGVycworICogdG8gbGFyZ2UgYnVmZmVycyAoNjRLKS4gU3VjaCBwb2ludGVycyBhcmUgbm9ybWFsaXplZCB3aXRoIGEgemVybyBvZmZzZXQuCisgKiBTaW5jZSBNU0RPUyBpcyBub3QgYSBwcmVlbXB0aXZlIG11bHRpdGFza2luZyBPUywgdGhpcyB0YWJsZSBpcyBub3QKKyAqIHByb3RlY3RlZCBmcm9tIGNvbmN1cnJlbnQgYWNjZXNzLiBUaGlzIGhhY2sgZG9lc24ndCB3b3JrIGFueXdheSBvbgorICogYSBwcm90ZWN0ZWQgc3lzdGVtIGxpa2UgT1MvMi4gVXNlIE1pY3Jvc29mdCBDIGluc3RlYWQuCisgKi8KKwordm9pZHBmIFpMSUJfSU5URVJOQUwgemNhbGxvYyAodm9pZHBmIG9wYXF1ZSwgdW5zaWduZWQgaXRlbXMsIHVuc2lnbmVkIHNpemUpCit7CisgICAgdm9pZHBmIGJ1ZjsKKyAgICB1bGcgYnNpemUgPSAodWxnKWl0ZW1zKnNpemU7CisKKyAgICAodm9pZClvcGFxdWU7CisKKyAgICAvKiBJZiB3ZSBhbGxvY2F0ZSBsZXNzIHRoYW4gNjU1MjAgYnl0ZXMsIHdlIGFzc3VtZSB0aGF0IGZhcm1hbGxvYworICAgICAqIHdpbGwgcmV0dXJuIGEgdXNhYmxlIHBvaW50ZXIgd2hpY2ggZG9lc24ndCBoYXZlIHRvIGJlIG5vcm1hbGl6ZWQuCisgICAgICovCisgICAgaWYgKGJzaXplIDwgNjU1MjBMKSB7CisgICAgICAgIGJ1ZiA9IGZhcm1hbGxvYyhic2l6ZSk7CisgICAgICAgIGlmICgqKHVzaCopJmJ1ZiAhPSAwKSByZXR1cm4gYnVmOworICAgIH0gZWxzZSB7CisgICAgICAgIGJ1ZiA9IGZhcm1hbGxvYyhic2l6ZSArIDE2TCk7CisgICAgfQorICAgIGlmIChidWYgPT0gTlVMTCB8fCBuZXh0X3B0ciA+PSBNQVhfUFRSKSByZXR1cm4gTlVMTDsKKyAgICB0YWJsZVtuZXh0X3B0cl0ub3JnX3B0ciA9IGJ1ZjsKKworICAgIC8qIE5vcm1hbGl6ZSB0aGUgcG9pbnRlciB0byBzZWc6MCAqLworICAgICooKHVzaCopJmJ1ZisxKSArPSAoKHVzaCkoKHVjaCopYnVmLTApICsgMTUpID4+IDQ7CisgICAgKih1c2gqKSZidWYgPSAwOworICAgIHRhYmxlW25leHRfcHRyKytdLm5ld19wdHIgPSBidWY7CisgICAgcmV0dXJuIGJ1ZjsKK30KKwordm9pZCBaTElCX0lOVEVSTkFMIHpjZnJlZSAodm9pZHBmIG9wYXF1ZSwgdm9pZHBmIHB0cikKK3sKKyAgICBpbnQgbjsKKworICAgICh2b2lkKW9wYXF1ZTsKKworICAgIGlmICgqKHVzaCopJnB0ciAhPSAwKSB7IC8qIG9iamVjdCA8IDY0SyAqLworICAgICAgICBmYXJmcmVlKHB0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLyogRmluZCB0aGUgb3JpZ2luYWwgcG9pbnRlciAqLworICAgIGZvciAobiA9IDA7IG4gPCBuZXh0X3B0cjsgbisrKSB7CisgICAgICAgIGlmIChwdHIgIT0gdGFibGVbbl0ubmV3X3B0cikgY29udGludWU7CisKKyAgICAgICAgZmFyZnJlZSh0YWJsZVtuXS5vcmdfcHRyKTsKKyAgICAgICAgd2hpbGUgKCsrbiA8IG5leHRfcHRyKSB7CisgICAgICAgICAgICB0YWJsZVtuLTFdID0gdGFibGVbbl07CisgICAgICAgIH0KKyAgICAgICAgbmV4dF9wdHItLTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBc3NlcnQoMCwgInpjZnJlZTogcHRyIG5vdCBmb3VuZCIpOworfQorCisjZW5kaWYgLyogX19UVVJCT0NfXyAqLworCisKKyNpZmRlZiBNX0k4NgorLyogTWljcm9zb2Z0IEMgaW4gMTYtYml0IG1vZGUgKi8KKworIyAgZGVmaW5lIE1ZX1pDQUxMT0MKKworI2lmICghZGVmaW5lZChfTVNDX1ZFUikgfHwgKF9NU0NfVkVSIDw9IDYwMCkpCisjICBkZWZpbmUgX2hhbGxvYyAgaGFsbG9jCisjICBkZWZpbmUgX2hmcmVlICAgaGZyZWUKKyNlbmRpZgorCit2b2lkcGYgWkxJQl9JTlRFUk5BTCB6Y2FsbG9jICh2b2lkcGYgb3BhcXVlLCB1SW50IGl0ZW1zLCB1SW50IHNpemUpCit7CisgICAgKHZvaWQpb3BhcXVlOworICAgIHJldHVybiBfaGFsbG9jKChsb25nKWl0ZW1zLCBzaXplKTsKK30KKwordm9pZCBaTElCX0lOVEVSTkFMIHpjZnJlZSAodm9pZHBmIG9wYXF1ZSwgdm9pZHBmIHB0cikKK3sKKyAgICAodm9pZClvcGFxdWU7CisgICAgX2hmcmVlKHB0cik7Cit9CisKKyNlbmRpZiAvKiBNX0k4NiAqLworCisjZW5kaWYgLyogU1lTMTZCSVQgKi8KKworCisjaWZuZGVmIE1ZX1pDQUxMT0MgLyogQW55IHN5c3RlbSB3aXRob3V0IGEgc3BlY2lhbCBhbGxvYyBmdW5jdGlvbiAqLworCisjaWZuZGVmIFNUREMKK2V4dGVybiB2b2lkcCAgbWFsbG9jIE9GKCh1SW50IHNpemUpKTsKK2V4dGVybiB2b2lkcCAgY2FsbG9jIE9GKCh1SW50IGl0ZW1zLCB1SW50IHNpemUpKTsKK2V4dGVybiB2b2lkICAgZnJlZSAgIE9GKCh2b2lkcGYgcHRyKSk7CisjZW5kaWYKKwordm9pZHBmIFpMSUJfSU5URVJOQUwgemNhbGxvYyAob3BhcXVlLCBpdGVtcywgc2l6ZSkKKyAgICB2b2lkcGYgb3BhcXVlOworICAgIHVuc2lnbmVkIGl0ZW1zOworICAgIHVuc2lnbmVkIHNpemU7Cit7CisgICAgKHZvaWQpb3BhcXVlOworICAgIHJldHVybiBzaXplb2YodUludCkgPiAyID8gKHZvaWRwZiltYWxsb2MoaXRlbXMgKiBzaXplKSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZHBmKWNhbGxvYyhpdGVtcywgc2l6ZSk7Cit9CisKK3ZvaWQgWkxJQl9JTlRFUk5BTCB6Y2ZyZWUgKG9wYXF1ZSwgcHRyKQorICAgIHZvaWRwZiBvcGFxdWU7CisgICAgdm9pZHBmIHB0cjsKK3sKKyAgICAodm9pZClvcGFxdWU7CisgICAgZnJlZShwdHIpOworfQorCisjZW5kaWYgLyogTVlfWkNBTExPQyAqLworCisjZW5kaWYgLyogIVpfU09MTyAqLwpkaWZmIC0tZ2l0IGEvc3JjL3p1dGlsLmggYi9zcmMvenV0aWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWEyMGFlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3p1dGlsLmgKQEAgLTAsMCArMSwyNzQgQEAKKy8qIHp1dGlsLmggLS0gaW50ZXJuYWwgaW50ZXJmYWNlIGFuZCBjb25maWd1cmF0aW9uIG9mIHRoZSBjb21wcmVzc2lvbiBsaWJyYXJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMiBKZWFuLWxvdXAgR2FpbGx5LCBNYXJrIEFkbGVyCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCisgKi8KKworLyogV0FSTklORzogdGhpcyBmaWxlIHNob3VsZCAqbm90KiBiZSB1c2VkIGJ5IGFwcGxpY2F0aW9ucy4gSXQgaXMKKyAgIHBhcnQgb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBjb21wcmVzc2lvbiBsaWJyYXJ5IGFuZCBpcworICAgc3ViamVjdCB0byBjaGFuZ2UuIEFwcGxpY2F0aW9ucyBzaG91bGQgb25seSB1c2UgemxpYi5oLgorICovCisKKy8qIEAoIykgJElkJCAqLworCisjaWZuZGVmIFpVVElMX0gKKyNkZWZpbmUgWlVUSUxfSAorCisjaWZkZWYgSEFWRV9ISURERU4KKyMgIGRlZmluZSBaTElCX0lOVEVSTkFMIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpCisjZWxzZQorIyAgZGVmaW5lIFpMSUJfSU5URVJOQUwKKyNlbmRpZgorCisjaW5jbHVkZSAiemxpYi5oIgorCisjaWYgZGVmaW5lZChTVERDKSAmJiAhZGVmaW5lZChaX1NPTE8pCisjICBpZiAhKGRlZmluZWQoX1dJTjMyX1dDRSkgJiYgZGVmaW5lZChfTVNDX1ZFUikpCisjICAgIGluY2x1ZGUgPHN0ZGRlZi5oPgorIyAgZW5kaWYKKyMgIGluY2x1ZGUgPHN0cmluZy5oPgorIyAgaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKworI2lmbmRlZiBsb2NhbAorIyAgZGVmaW5lIGxvY2FsIHN0YXRpYworI2VuZGlmCisvKiBzaW5jZSAic3RhdGljIiBpcyB1c2VkIHRvIG1lYW4gdHdvIGNvbXBsZXRlbHkgZGlmZmVyZW50IHRoaW5ncyBpbiBDLCB3ZQorICAgZGVmaW5lICJsb2NhbCIgZm9yIHRoZSBub24tc3RhdGljIG1lYW5pbmcgb2YgInN0YXRpYyIsIGZvciByZWFkYWJpbGl0eQorICAgKGNvbXBpbGUgd2l0aCAtRGxvY2FsIGlmIHlvdXIgZGVidWdnZXIgY2FuJ3QgZmluZCBzdGF0aWMgc3ltYm9scykgKi8KKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyICB1Y2g7Cit0eXBlZGVmIHVjaCBGQVIgdWNoZjsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgdXNoOwordHlwZWRlZiB1c2ggRkFSIHVzaGY7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgIHVsZzsKKworI2lmICFkZWZpbmVkKFpfVTgpICYmICFkZWZpbmVkKFpfU09MTykgJiYgZGVmaW5lZChTVERDKQorIyAgaW5jbHVkZSA8bGltaXRzLmg+CisjICBpZiAoVUxPTkdfTUFYID09IDB4ZmZmZmZmZmZmZmZmZmZmZikKKyMgICAgZGVmaW5lIFpfVTggdW5zaWduZWQgbG9uZworIyAgZWxpZiAoVUxMT05HX01BWCA9PSAweGZmZmZmZmZmZmZmZmZmZmYpCisjICAgIGRlZmluZSBaX1U4IHVuc2lnbmVkIGxvbmcgbG9uZworIyAgZWxpZiAoVUlOVF9NQVggPT0gMHhmZmZmZmZmZmZmZmZmZmZmKQorIyAgICBkZWZpbmUgWl9VOCB1bnNpZ25lZAorIyAgZW5kaWYKKyNlbmRpZgorCitleHRlcm4gel9jb25zdCBjaGFyICogY29uc3Qgel9lcnJtc2dbMTBdOyAvKiBpbmRleGVkIGJ5IDItemxpYl9lcnJvciAqLworLyogKHNpemUgZ2l2ZW4gdG8gYXZvaWQgc2lsbHkgd2FybmluZ3Mgd2l0aCBWaXN1YWwgQysrKSAqLworCisjZGVmaW5lIEVSUl9NU0coZXJyKSB6X2Vycm1zZ1taX05FRURfRElDVC0oZXJyKV0KKworI2RlZmluZSBFUlJfUkVUVVJOKHN0cm0sZXJyKSBcCisgIHJldHVybiAoc3RybS0+bXNnID0gRVJSX01TRyhlcnIpLCAoZXJyKSkKKy8qIFRvIGJlIHVzZWQgb25seSB3aGVuIHRoZSBzdGF0ZSBpcyBrbm93biB0byBiZSB2YWxpZCAqLworCisgICAgICAgIC8qIGNvbW1vbiBjb25zdGFudHMgKi8KKworI2lmbmRlZiBERUZfV0JJVFMKKyMgIGRlZmluZSBERUZfV0JJVFMgTUFYX1dCSVRTCisjZW5kaWYKKy8qIGRlZmF1bHQgd2luZG93Qml0cyBmb3IgZGVjb21wcmVzc2lvbi4gTUFYX1dCSVRTIGlzIGZvciBjb21wcmVzc2lvbiBvbmx5ICovCisKKyNpZiBNQVhfTUVNX0xFVkVMID49IDgKKyMgIGRlZmluZSBERUZfTUVNX0xFVkVMIDgKKyNlbHNlCisjICBkZWZpbmUgREVGX01FTV9MRVZFTCAgTUFYX01FTV9MRVZFTAorI2VuZGlmCisvKiBkZWZhdWx0IG1lbUxldmVsICovCisKKyNkZWZpbmUgU1RPUkVEX0JMT0NLIDAKKyNkZWZpbmUgU1RBVElDX1RSRUVTIDEKKyNkZWZpbmUgRFlOX1RSRUVTICAgIDIKKy8qIFRoZSB0aHJlZSBraW5kcyBvZiBibG9jayB0eXBlICovCisKKyNkZWZpbmUgTUlOX01BVENIICAzCisjZGVmaW5lIE1BWF9NQVRDSCAgMjU4CisvKiBUaGUgbWluaW11bSBhbmQgbWF4aW11bSBtYXRjaCBsZW5ndGhzICovCisKKyNkZWZpbmUgUFJFU0VUX0RJQ1QgMHgyMCAvKiBwcmVzZXQgZGljdGlvbmFyeSBmbGFnIGluIHpsaWIgaGVhZGVyICovCisKKyAgICAgICAgLyogdGFyZ2V0IGRlcGVuZGVuY2llcyAqLworCisjaWYgZGVmaW5lZChNU0RPUykgfHwgKGRlZmluZWQoV0lORE9XUykgJiYgIWRlZmluZWQoV0lOMzIpKQorIyAgZGVmaW5lIE9TX0NPREUgIDB4MDAKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgaWYgZGVmaW5lZChfX1RVUkJPQ19fKSB8fCBkZWZpbmVkKF9fQk9STEFORENfXykKKyMgICAgICBpZiAoX19TVERDX18gPT0gMSkgJiYgKGRlZmluZWQoX19MQVJHRV9fKSB8fCBkZWZpbmVkKF9fQ09NUEFDVF9fKSkKKyAgICAgICAgIC8qIEFsbG93IGNvbXBpbGF0aW9uIHdpdGggQU5TSSBrZXl3b3JkcyBvbmx5IGVuYWJsZWQgKi8KKyAgICAgICAgIHZvaWQgX0NkZWNsIGZhcmZyZWUoIHZvaWQgKmJsb2NrICk7CisgICAgICAgICB2b2lkICpfQ2RlY2wgZmFybWFsbG9jKCB1bnNpZ25lZCBsb25nIG5ieXRlcyApOworIyAgICAgIGVsc2UKKyMgICAgICAgIGluY2x1ZGUgPGFsbG9jLmg+CisjICAgICAgZW5kaWYKKyMgICAgZWxzZSAvKiBNU0Mgb3IgREpHUFAgKi8KKyMgICAgICBpbmNsdWRlIDxtYWxsb2MuaD4KKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIEFNSUdBCisjICBkZWZpbmUgT1NfQ09ERSAgMQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFZBWEMpIHx8IGRlZmluZWQoVk1TKQorIyAgZGVmaW5lIE9TX0NPREUgIDIKKyMgIGRlZmluZSBGX09QRU4obmFtZSwgbW9kZSkgXAorICAgICBmb3BlbigobmFtZSksIChtb2RlKSwgIm1iYz02MCIsICJjdHg9c3RtIiwgInJmbT1maXgiLCAibXJzPTUxMiIpCisjZW5kaWYKKworI2lmZGVmIF9fMzcwX18KKyMgIGlmIF9fVEFSR0VUX0xJQl9fIDwgMHgyMDAwMDAwMAorIyAgICBkZWZpbmUgT1NfQ09ERSA0CisjICBlbGlmIF9fVEFSR0VUX0xJQl9fIDwgMHg0MDAwMDAwMAorIyAgICBkZWZpbmUgT1NfQ09ERSAxMQorIyAgZWxzZQorIyAgICBkZWZpbmUgT1NfQ09ERSA4CisjICBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEFUQVJJKSB8fCBkZWZpbmVkKGF0YXJpc3QpCisjICBkZWZpbmUgT1NfQ09ERSAgNQorI2VuZGlmCisKKyNpZmRlZiBPUzIKKyMgIGRlZmluZSBPU19DT0RFICA2CisjICBpZiBkZWZpbmVkKE1fSTg2KSAmJiAhZGVmaW5lZChaX1NPTE8pCisjICAgIGluY2x1ZGUgPG1hbGxvYy5oPgorIyAgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQUNPUykgfHwgZGVmaW5lZChUQVJHRVRfT1NfTUFDKQorIyAgZGVmaW5lIE9TX0NPREUgIDcKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgaWYgZGVmaW5lZChfX01XRVJLU19fKSAmJiBfX2Rlc3Rfb3MgIT0gX19iZV9vcyAmJiBfX2Rlc3Rfb3MgIT0gX193aW4zMl9vcworIyAgICAgIGluY2x1ZGUgPHVuaXguaD4gLyogZm9yIGZkb3BlbiAqLworIyAgICBlbHNlCisjICAgICAgaWZuZGVmIGZkb3BlbgorIyAgICAgICAgZGVmaW5lIGZkb3BlbihmZCxtb2RlKSBOVUxMIC8qIE5vIGZkb3BlbigpICovCisjICAgICAgZW5kaWYKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIF9fYWNvcm4KKyMgIGRlZmluZSBPU19DT0RFIDEzCisjZW5kaWYKKworI2lmIGRlZmluZWQoV0lOMzIpICYmICFkZWZpbmVkKF9fQ1lHV0lOX18pCisjICBkZWZpbmUgT1NfQ09ERSAgMTAKKyNlbmRpZgorCisjaWZkZWYgX0JFT1NfCisjICBkZWZpbmUgT1NfQ09ERSAgMTYKKyNlbmRpZgorCisjaWZkZWYgX19UT1NfT1M0MDBfXworIyAgZGVmaW5lIE9TX0NPREUgMTgKKyNlbmRpZgorCisjaWZkZWYgX19BUFBMRV9fCisjICBkZWZpbmUgT1NfQ09ERSAxOQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9CRU9TXykgfHwgZGVmaW5lZChSSVNDT1MpCisjICBkZWZpbmUgZmRvcGVuKGZkLG1vZGUpIE5VTEwgLyogTm8gZmRvcGVuKCkgKi8KKyNlbmRpZgorCisjaWYgKGRlZmluZWQoX01TQ19WRVIpICYmIChfTVNDX1ZFUiA+IDYwMCkpICYmICFkZWZpbmVkIF9fSU5URVJJWAorIyAgaWYgZGVmaW5lZChfV0lOMzJfV0NFKQorIyAgICBkZWZpbmUgZmRvcGVuKGZkLG1vZGUpIE5VTEwgLyogTm8gZmRvcGVuKCkgKi8KKyMgIGVsc2UKKyMgICAgZGVmaW5lIGZkb3BlbihmZCx0eXBlKSAgX2Zkb3BlbihmZCx0eXBlKQorIyAgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0JPUkxBTkRDX18pICYmICFkZWZpbmVkKE1TRE9TKQorICAjcHJhZ21hIHdhcm4gLTgwMDQKKyAgI3ByYWdtYSB3YXJuIC04MDA4CisgICNwcmFnbWEgd2FybiAtODA2NgorI2VuZGlmCisKKy8qIHByb3ZpZGUgcHJvdG90eXBlcyBmb3IgdGhlc2Ugd2hlbiBidWlsZGluZyB6bGliIHdpdGhvdXQgTEZTICovCisjaWYgIWRlZmluZWQoX1dJTjMyKSAmJiBcCisgICAgKCFkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpIHx8IF9MRlM2NF9MQVJHRUZJTEUtMCA9PSAwKQorICAgIFpFWFRFUk4gdUxvbmcgWkVYUE9SVCBhZGxlcjMyX2NvbWJpbmU2NCBPRigodUxvbmcsIHVMb25nLCB6X29mZl90KSk7CisgICAgWkVYVEVSTiB1TG9uZyBaRVhQT1JUIGNyYzMyX2NvbWJpbmU2NCBPRigodUxvbmcsIHVMb25nLCB6X29mZl90KSk7CisjZW5kaWYKKworICAgICAgICAvKiBjb21tb24gZGVmYXVsdHMgKi8KKworI2lmbmRlZiBPU19DT0RFCisjICBkZWZpbmUgT1NfQ09ERSAgMyAgICAgLyogYXNzdW1lIFVuaXggKi8KKyNlbmRpZgorCisjaWZuZGVmIEZfT1BFTgorIyAgZGVmaW5lIEZfT1BFTihuYW1lLCBtb2RlKSBmb3BlbigobmFtZSksIChtb2RlKSkKKyNlbmRpZgorCisgICAgICAgICAvKiBmdW5jdGlvbnMgKi8KKworI2lmIGRlZmluZWQocHlyKSB8fCBkZWZpbmVkKFpfU09MTykKKyMgIGRlZmluZSBOT19NRU1DUFkKKyNlbmRpZgorI2lmIGRlZmluZWQoU01BTExfTUVESVVNKSAmJiAhZGVmaW5lZChfTVNDX1ZFUikgJiYgIWRlZmluZWQoX19TQ19fKQorIC8qIFVzZSBvdXIgb3duIGZ1bmN0aW9ucyBmb3Igc21hbGwgYW5kIG1lZGl1bSBtb2RlbCB3aXRoIE1TQyA8PSA1LjAuCisgICogWW91IG1heSBoYXZlIHRvIHVzZSB0aGUgc2FtZSBzdHJhdGVneSBmb3IgQm9ybGFuZCBDICh1bnRlc3RlZCkuCisgICogVGhlIF9fU0NfXyBjaGVjayBpcyBmb3IgU3ltYW50ZWMuCisgICovCisjICBkZWZpbmUgTk9fTUVNQ1BZCisjZW5kaWYKKyNpZiBkZWZpbmVkKFNUREMpICYmICFkZWZpbmVkKEhBVkVfTUVNQ1BZKSAmJiAhZGVmaW5lZChOT19NRU1DUFkpCisjICBkZWZpbmUgSEFWRV9NRU1DUFkKKyNlbmRpZgorI2lmZGVmIEhBVkVfTUVNQ1BZCisjICBpZmRlZiBTTUFMTF9NRURJVU0gLyogTVNET1Mgc21hbGwgb3IgbWVkaXVtIG1vZGVsICovCisjICAgIGRlZmluZSB6bWVtY3B5IF9mbWVtY3B5CisjICAgIGRlZmluZSB6bWVtY21wIF9mbWVtY21wCisjICAgIGRlZmluZSB6bWVtemVybyhkZXN0LCBsZW4pIF9mbWVtc2V0KGRlc3QsIDAsIGxlbikKKyMgIGVsc2UKKyMgICAgZGVmaW5lIHptZW1jcHkgbWVtY3B5CisjICAgIGRlZmluZSB6bWVtY21wIG1lbWNtcAorIyAgICBkZWZpbmUgem1lbXplcm8oZGVzdCwgbGVuKSBtZW1zZXQoZGVzdCwgMCwgbGVuKQorIyAgZW5kaWYKKyNlbHNlCisgICB2b2lkIFpMSUJfSU5URVJOQUwgem1lbWNweSBPRigoQnl0ZWYqIGRlc3QsIGNvbnN0IEJ5dGVmKiBzb3VyY2UsIHVJbnQgbGVuKSk7CisgICBpbnQgWkxJQl9JTlRFUk5BTCB6bWVtY21wIE9GKChjb25zdCBCeXRlZiogczEsIGNvbnN0IEJ5dGVmKiBzMiwgdUludCBsZW4pKTsKKyAgIHZvaWQgWkxJQl9JTlRFUk5BTCB6bWVtemVybyBPRigoQnl0ZWYqIGRlc3QsIHVJbnQgbGVuKSk7CisjZW5kaWYKKworLyogRGlhZ25vc3RpYyBmdW5jdGlvbnMgKi8KKyNpZmRlZiBaTElCX0RFQlVHCisjICBpbmNsdWRlIDxzdGRpby5oPgorICAgZXh0ZXJuIGludCBaTElCX0lOVEVSTkFMIHpfdmVyYm9zZTsKKyAgIGV4dGVybiB2b2lkIFpMSUJfSU5URVJOQUwgel9lcnJvciBPRigoY2hhciAqbSkpOworIyAgZGVmaW5lIEFzc2VydChjb25kLG1zZykge2lmKCEoY29uZCkpIHpfZXJyb3IobXNnKTt9CisjICBkZWZpbmUgVHJhY2UoeCkge2lmICh6X3ZlcmJvc2U+PTApIGZwcmludGYgeCA7fQorIyAgZGVmaW5lIFRyYWNldih4KSB7aWYgKHpfdmVyYm9zZT4wKSBmcHJpbnRmIHggO30KKyMgIGRlZmluZSBUcmFjZXZ2KHgpIHtpZiAoel92ZXJib3NlPjEpIGZwcmludGYgeCA7fQorIyAgZGVmaW5lIFRyYWNlYyhjLHgpIHtpZiAoel92ZXJib3NlPjAgJiYgKGMpKSBmcHJpbnRmIHggO30KKyMgIGRlZmluZSBUcmFjZWN2KGMseCkge2lmICh6X3ZlcmJvc2U+MSAmJiAoYykpIGZwcmludGYgeCA7fQorI2Vsc2UKKyMgIGRlZmluZSBBc3NlcnQoY29uZCxtc2cpCisjICBkZWZpbmUgVHJhY2UoeCkKKyMgIGRlZmluZSBUcmFjZXYoeCkKKyMgIGRlZmluZSBUcmFjZXZ2KHgpCisjICBkZWZpbmUgVHJhY2VjKGMseCkKKyMgIGRlZmluZSBUcmFjZWN2KGMseCkKKyNlbmRpZgorCisjaWZuZGVmIFpfU09MTworICAgdm9pZHBmIFpMSUJfSU5URVJOQUwgemNhbGxvYyBPRigodm9pZHBmIG9wYXF1ZSwgdW5zaWduZWQgaXRlbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaXplKSk7CisgICB2b2lkIFpMSUJfSU5URVJOQUwgemNmcmVlICBPRigodm9pZHBmIG9wYXF1ZSwgdm9pZHBmIHB0cikpOworI2VuZGlmCisKKyNkZWZpbmUgWkFMTE9DKHN0cm0sIGl0ZW1zLCBzaXplKSBcCisgICAgICAgICAgICgqKChzdHJtKS0+emFsbG9jKSkoKHN0cm0pLT5vcGFxdWUsIChpdGVtcyksIChzaXplKSkKKyNkZWZpbmUgWkZSRUUoc3RybSwgYWRkcikgICgqKChzdHJtKS0+emZyZWUpKSgoc3RybSktPm9wYXF1ZSwgKHZvaWRwZikoYWRkcikpCisjZGVmaW5lIFRSWV9GUkVFKHMsIHApIHtpZiAocCkgWkZSRUUocywgcCk7fQorCisvKiBSZXZlcnNlIHRoZSBieXRlcyBpbiBhIDMyLWJpdCB2YWx1ZSAqLworI2RlZmluZSBaU1dBUDMyKHEpICgoKChxKSA+PiAyNCkgJiAweGZmKSArICgoKHEpID4+IDgpICYgMHhmZjAwKSArIFwKKyAgICAgICAgICAgICAgICAgICAgKCgocSkgJiAweGZmMDApIDw8IDgpICsgKCgocSkgJiAweGZmKSA8PCAyNCkpCisKKyNlbmRpZiAvKiBaVVRJTF9IICovCmRpZmYgLS1naXQgYS91cGRhdGVfemxpYi5zaCBiL3VwZGF0ZV96bGliLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY1NTcyYTAKLS0tIC9kZXYvbnVsbAorKysgYi91cGRhdGVfemxpYi5zaApAQCAtMCwwICsxLDQyIEBACisjIS9iaW4vYmFzaAorIyBSdW4gd2l0aCBubyBhcmd1bWVudHMgZnJvbSBhbnkgZGlyZWN0b3J5LCB3aXRoIG5vIHNwZWNpYWwgc2V0dXAgcmVxdWlyZWQuCisKKyMgQWJvcnQgaWYgYW55IGNvbW1hbmQgcmV0dXJucyBhbiBlcnJvciBleGl0IHN0YXR1cywgb3IgaWYgYW4gdW5kZWZpbmVkCisjIHZhcmlhYmxlIGlzIHVzZWQuCitzZXQgLWUKK3NldCAtdQorCitiYXNlX2Rpcj0kKHJlYWxwYXRoICQoZGlybmFtZSAkMCkpCisKKyMgRXh0cmFjdCB0aGUgbGF0ZXN0IHZlcnNpb24gZnJvbSB0aGUgd2ViIHBhZ2UuCituZXdfdmVyc2lvbj0kKHdnZXQgLU8gLSAtLW5vLXZlcmJvc2UgLXEgaHR0cDovL3psaWIubmV0LyB8IFwKKyAgICAgICAgICAgICAgZ3JlcCAnaHJlZj1cInpsaWItWzAtOV0uKi50YXIuZ3onIHwgXAorICAgICAgICAgICAgICBzZWQgJ3MvLip6bGliLVwoLipcKVwudGFyXC5nei4qL1wxLycpCit0Z3pfZmlsZT0iemxpYi0kbmV3X3ZlcnNpb24udGFyLmd6IgorCitlY2hvICJVcGdyYWRpbmcgemxpYiB0byB2ZXJzaW9uICRuZXdfdmVyc2lvbi4uLiIKK2VjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCisKK2VjaG8gIkRvd25sb2FkaW5nICR0Z3pfZmlsZS4uLiIKK3dnZXQgLU8gL3RtcC8kdGd6X2ZpbGUgLS1uby12ZXJib3NlICJodHRwOi8vemxpYi5uZXQvJHRnel9maWxlIgorCitlY2hvICJDbGVhbmluZyBvdXQgb2xkIHZlcnNpb24uLi4iCitzcmNfZGlyPSRiYXNlX2Rpci9zcmMKK3JtIC1yZiAkc3JjX2RpcgorCitlY2hvICJVbnBhY2tpbmcgbmV3IHZlcnNpb24uLi4iCitjZCAkYmFzZV9kaXIKK3RhciB6eGYgL3RtcC8kdGd6X2ZpbGUKK212IHpsaWItJG5ld192ZXJzaW9uIHNyYworCitlY2hvICJDb25maWd1cmluZyBuZXcgdmVyc2lvbi4uLiIKK2NkIHNyYworLi9jb25maWd1cmUKK3JtIE1ha2VmaWxlIGNvbmZpZ3VyZS5sb2cKK2NkIC4uCisKK2VjaG8gIkZpeGluZyBOT1RJQ0UgZmlsZS4uLiIKK2dyZXAgLUEyMSAnQ29weXJpZ2h0IG5vdGljZTonIHNyYy9SRUFETUUgfCB0YWlsIC0yMCA+IE5PVElDRQorCittZDVfc3VtPSQobWQ1c3VtIC90bXAvJHRnel9maWxlKQorZWNobyAiTUQ1OiAkbWQ1X3N1bSIKZGlmZiAtLWdpdCBhL3pjb25mLmggYi96Y29uZi5oCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAuLjllOTgxODUKLS0tIC9kZXYvbnVsbAorKysgYi96Y29uZi5oCkBAIC0wLDAgKzEgQEAKK3NyYy96Y29uZi5oClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvemxpYi5oIGIvemxpYi5oCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAuLmQzN2JlOTYKLS0tIC9kZXYvbnVsbAorKysgYi96bGliLmgKQEAgLTAsMCArMSBAQAorc3JjL3psaWIuaApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK