Re: Getting started with Kamailio and Freeswitch
Alex Lake via sr-users <[email protected]> Thu, 30 Jul 2026 05:36:04 +0000
| Newsgroups | gmane.comp.voip.ser |
|---|---|
| Message-ID | <[email protected]> |
T24gMjkvMDcvMjAyNiAyMjozNSwgR2h1bGFtIE11c3RhZmEgdmlhIHNyLXVzZXJzIHdyb3RlOg0K PiBTaGFyZSBsb2dzIGFuZCBTSVAgbWVzc2FnZXMgaWYgcG9zc2libGUNCj4NCg0KT0shDQoNClNv IGhlcmUncyBhIHByZWNpcyBvZiB0aGUgbG9nOg0KDQogwqAzNTExIDQ5OC42MTQ0ODUyNzUgODAu MjI5LjE1MC4xNjUg4oaSIDQ2LjYyLjIzOC41MSBTSVAgOTM1IFJlcXVlc3Q6IA0KUkVHSVNURVIg c2lwOjQ2LjYyLjIzOC41MTt0cmFuc3BvcnQ9VURQwqAgKDEgYmluZGluZykgfA0KIMKgMzUxMiA0 OTguNjI1OTUzODA5IDQ2LjYyLjIzOC41MSDihpIgODAuMjI5LjE1MC4xNjUgU0lQIDUzMCBTdGF0 dXM6IDIwMCANCk9LIChSRUdJU1RFUinCoCAoMSBiaW5kaW5nKSB8DQogwqAzNzQzIDU0OS40MzQy MTYyNzYgODAuMjI5LjE1MC4xNjUg4oaSIDQ2LjYyLjIzOC41MSBTSVAvU0RQIDk5MCBSZXF1ZXN0 OiANCklOVklURSBzaXA6MDIwNzA2MDIwMDBANDYuNjIuMjM4LjUxO3RyYW5zcG9ydD1VRFAgfA0K IMKgMzc0NCA1NDkuNDM2MzE2MjcyIDQ2LjYyLjIzOC41MSDihpIgODAuMjI5LjE1MC4xNjUgU0lQ IDU0NCBTdGF0dXM6IDQwNyANClByb3h5IEF1dGhlbnRpY2F0aW9uIFJlcXVpcmVkIHwNCiDCoDM3 NDUgNTQ5LjQ4Nzc4NjQ0NSA4MC4yMjkuMTUwLjE2NSDihpIgNDYuNjIuMjM4LjUxIFNJUCA0MTAg UmVxdWVzdDogQUNLIA0Kc2lwOjAyMDcwNjAyMDAwQDQ2LjYyLjIzOC41MTt0cmFuc3BvcnQ9VURQ IHwNCiDCoDM3NDYgNTQ5LjU5ODA2MTU0OSA4MC4yMjkuMTUwLjE2NSDihpIgNDYuNjIuMjM4LjUx IFNJUC9TRFAgMTIwNCBSZXF1ZXN0OiANCklOVklURSBzaXA6MDIwNzA2MDIwMDBANDYuNjIuMjM4 LjUxO3RyYW5zcG9ydD1VRFAgfA0KIMKgMzc0NyA1NDkuNjEwODc4Mjc0IDQ2LjYyLjIzOC41MSDi hpIgODAuMjI5LjE1MC4xNjUgU0lQIDQzNSBTdGF0dXM6IDQwNCANCk5vdCBGb3VuZCBBIHwNCiDC oDM3NDggNTQ5LjY3NDMwMDI2OCA4MC4yMjkuMTUwLjE2NSDihpIgNDYuNjIuMjM4LjUxIFNJUCA0 MTAgUmVxdWVzdDogQUNLIA0Kc2lwOjAyMDcwNjAyMDAwQDQ2LjYyLjIzOC41MTt0cmFuc3BvcnQ9 VURQIHwNCiDCoDM3NTkgNTUyLjc4Nzg2MzU3OCA4MC4yMjkuMTUwLjE2NSDihpIgNDYuNjIuMjM4 LjUxIFNJUCA5MzUgUmVxdWVzdDogDQpSRUdJU1RFUiBzaXA6NDYuNjIuMjM4LjUxO3RyYW5zcG9y dD1VRFDCoCAoMSBiaW5kaW5nKSB8DQogwqAzNzYwIDU1Mi43OTkyMjU3MzMgNDYuNjIuMjM4LjUx IOKGkiA4MC4yMjkuMTUwLjE2NSBTSVAgNTMwIFN0YXR1czogMjAwIA0KT0sgKFJFR0lTVEVSKcKg ICgxIGJpbmRpbmcpIHwNCiDCoDM3NjggNTU2LjE1MjM5ODk3MSA4MC4yMjkuMTUwLjE2NSDihpIg NDYuNjIuMjM4LjUxIFNJUC9TRFAgOTkwIFJlcXVlc3Q6IA0KSU5WSVRFIHNpcDowMjA3MDYwMjAw MEA0Ni42Mi4yMzguNTE7dHJhbnNwb3J0PVVEUCB8DQogwqAzNzY5IDU1Ni4xNTM5MTQ2MTEgNDYu NjIuMjM4LjUxIOKGkiA4MC4yMjkuMTUwLjE2NSBTSVAgNTQ0IFN0YXR1czogNDA3IA0KUHJveHkg QXV0aGVudGljYXRpb24gUmVxdWlyZWQgfA0KIMKgMzc3MCA1NTYuMjAzMTMxNzQ4IDgwLjIyOS4x NTAuMTY1IOKGkiA0Ni42Mi4yMzguNTEgU0lQIDQxMCBSZXF1ZXN0OiBBQ0sgDQpzaXA6MDIwNzA2 MDIwMDBANDYuNjIuMjM4LjUxO3RyYW5zcG9ydD1VRFAgfA0KIMKgMzc3MSA1NTYuMzExMTE4NjMw IDgwLjIyOS4xNTAuMTY1IOKGkiA0Ni42Mi4yMzguNTEgU0lQL1NEUCAxMjA0IFJlcXVlc3Q6IA0K SU5WSVRFIHNpcDowMjA3MDYwMjAwMEA0Ni42Mi4yMzguNTE7dHJhbnNwb3J0PVVEUCB8DQogwqAz NzcyIDU1Ni4zMjQ2NTA0MzEgNDYuNjIuMjM4LjUxIOKGkiA4MC4yMjkuMTUwLjE2NSBTSVAgNDM1 IFN0YXR1czogNDA0IA0KTm90IEZvdW5kIEEgfA0KIMKgMzc3MyA1NTYuMzkwMDg2NzcyIDgwLjIy OS4xNTAuMTY1IOKGkiA0Ni42Mi4yMzguNTEgU0lQIDQxMCBSZXF1ZXN0OiBBQ0sgDQpzaXA6MDIw NzA2MDIwMDBANDYuNjIuMjM4LjUxO3RyYW5zcG9ydD1VRFAgfA0KDQoNCkFuZCB0aGUgY29uZmln DQoNCiMhS0FNQUlMSU8NCiMhZGVmaW5lIFdJVEhfTVlTUUwNCiMhZGVmaW5lIFdJVEhfQVVUSA0K IyFkZWZpbmUgV0lUSF9VU1JMT0NEQg0KIyFkZWZpbmUgV0lUSF9GUkVFU1dJVENIDQojIWRlZmlu ZSBXSVRIX0RFQlVHDQoNCiMNCiMgS2FtYWlsaW8gU0lQIFNlcnZlciB2NS43IC0gZGVmYXVsdCBj b25maWd1cmF0aW9uIHNjcmlwdA0KI8KgIMKgIMKgLSB3ZWI6IGh0dHBzOi8vd3d3LmthbWFpbGlv Lm9yZw0KI8KgIMKgIMKgLSBnaXQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9rYW1haWxpby9rYW1haWxp bw0KIw0KIyBEaXJlY3QgeW91ciBxdWVzdGlvbnMgYWJvdXQgdGhpcyBmaWxlIHRvOiA8c3ItdXNl cnNAbGlzdHMua2FtYWlsaW8ub3JnPg0KIw0KIyBSZWZlciB0byB0aGUgQ29yZSBDb29rQm9vayBh dCBodHRwczovL3d3dy5rYW1haWxpby5vcmcvd2lraWRvY3MvDQojIGZvciBhbiBleHBsYW5hdGlv biBvZiBwb3NzaWJsZSBzdGF0ZW1lbnRzLCBmdW5jdGlvbnMgYW5kIHBhcmFtZXRlcnMuDQojDQoj IE5vdGU6IHRoZSBjb21tZW50cyBjYW4gYmU6DQojwqAgwqAgwqAtIGxpbmVzIHN0YXJ0aW5nIHdp dGggIywgYnV0IG5vdCB0aGUgcHJlLXByb2Nlc3NvciBkaXJlY3RpdmVzLA0KI8KgIMKgIMKgIMKg d2hpY2ggc3RhcnQgd2l0aCAjISwgbGlrZSAjIWRlZmluZSwgIyFpZmRlZiwgIyFlbmRpZiwgIyFl bHNlLCANCiMhdHJ5ZGVmLA0KI8KgIMKgIMKgIMKgIyFzdWJzdCwgIyFzdWJzdGRlZiwgLi4uDQoj wqAgwqAgwqAtIGxpbmVzIHN0YXJ0aW5nIHdpdGggLy8NCiPCoCDCoCDCoC0gYmxvY2tzIGVuY2xv c2VkIGluIGJldHdlZW4gLyogKi8NCiMgTm90ZTogdGhlIGNvbmZpZyBwZXJmb3JtcyBzeW1tZXRy aWMgU0lQIHNpZ25hbGluZw0KI8KgIMKgIMKgLSBpdCBzZW5kcyB0aGUgcmVwbHkgdG8gdGhlIHNv dXJjZSBhZGRyZXNzIG9mIHRoZSByZXF1ZXN0DQojwqAgwqAgwqAtIHJlbW92ZSB0aGUgdXNlIG9m IGZvcmNlX3Jwb3J0KCkgZm9yIGFzeW1tZXRyaWMgU0lQIHNpZ25hbGluZw0KIw0KIyBTZXZlcmFs IGZlYXR1cmVzIGNhbiBiZSBlbmFibGVkIHVzaW5nICcjIWRlZmluZSBXSVRIX0ZFQVRVUkUnIGRp cmVjdGl2ZXM6DQojDQojICoqKiBUbyBydW4gaW4gZGVidWcgbW9kZToNCiPCoCDCoCDCoC0gZGVm aW5lIFdJVEhfREVCVUcNCiPCoCDCoCDCoC0gZGVidWcgbGV2ZWwgaW5jcmVhc2VkIHRvIDMsIGxv Z3Mgc3RpbGwgc2VudCB0byBzeXNsb2cNCiPCoCDCoCDCoC0gZGVidWdnZXIgbW9kdWxlIGxvYWRl ZCB3aXRoIGNmZ3RyYWNlIGVuYWJsZWQNCiMNCiMgKioqIFRvIGVuYWJsZSBteXNxbDoNCiPCoCDC oCDCoC0gZGVmaW5lIFdJVEhfTVlTUUwNCiMNCiMgKioqIFRvIGVuYWJsZSBhdXRoZW50aWNhdGlv biBleGVjdXRlOg0KI8KgIMKgIMKgLSBlbmFibGUgbXlzcWwNCiPCoCDCoCDCoC0gZGVmaW5lIFdJ VEhfQVVUSA0KI8KgIMKgIMKgLSBhZGQgdXNlcnMgdXNpbmcgJ2thbWN0bCcgb3IgJ2thbWNsaScN CiMNCiMgKioqIFRvIGVuYWJsZSBJUCBhdXRoZW50aWNhdGlvbiBleGVjdXRlOg0KI8KgIMKgIMKg LSBlbmFibGUgbXlzcWwNCiPCoCDCoCDCoC0gZW5hYmxlIGF1dGhlbnRpY2F0aW9uDQojwqAgwqAg wqAtIGRlZmluZSBXSVRIX0lQQVVUSA0KI8KgIMKgIMKgLSBhZGQgSVAgYWRkcmVzc2VzIHdpdGgg Z3JvdXAgaWQgJzEnIHRvICdhZGRyZXNzJyB0YWJsZQ0KIw0KIyAqKiogVG8gZW5hYmxlIHBlcnNp c3RlbnQgdXNlciBsb2NhdGlvbiBleGVjdXRlOg0KI8KgIMKgIMKgLSBlbmFibGUgbXlzcWwNCiPC oCDCoCDCoC0gZGVmaW5lIFdJVEhfVVNSTE9DREINCiMNCiMgKioqIFRvIGVuYWJsZSBwcmVzZW5j ZSBzZXJ2ZXIgZXhlY3V0ZToNCiPCoCDCoCDCoC0gZW5hYmxlIG15c3FsDQojwqAgwqAgwqAtIGRl ZmluZSBXSVRIX1BSRVNFTkNFDQojwqAgwqAgwqAtIGlmIG1vZGlmaWVkIGhlYWRlcnMgb3IgYm9k eSBpbiBjb25maWcgbXVzdCBiZSB1c2VkIGJ5IHByZXNlbmNlIA0KaGFuZGxpbmc6DQojwqAgwqAg wqAtIGRlZmluZSBXSVRIX01TR1JFQlVJTEQNCiMNCiMgKioqIFRvIGVuYWJsZSBuYXQgdHJhdmVy c2FsIGV4ZWN1dGU6DQojwqAgwqAgwqAtIGRlZmluZSBXSVRIX05BVA0KI8KgIMKgIMKgLSBvcHRp b24gZm9yIE5BVCBTSVAgT1BUSU9OUyBrZWVwYWxpdmVzOiBXSVRIX05BVFNJUFBJTkcNCiPCoCDC oCDCoC0gaW5zdGFsbCBSVFBQcm94eTogaHR0cDovL3d3dy5ydHBwcm94eS5vcmcNCiPCoCDCoCDC oC0gc3RhcnQgUlRQUHJveHk6DQojwqAgwqAgwqAgwqAgcnRwcHJveHkgLWwgX3lvdXJfcHVibGlj X2lwXyAtcyB1ZHA6bG9jYWxob3N0Ojc3MjINCiMNCiMgKioqIFRvIHVzZSBSVFBFbmdpbmUgKGlu c3RlYWQgb2YgUlRQUHJveHkpIGZvciBuYXQgdHJhdmVyc2FsIGV4ZWN1dGU6DQojwqAgwqAgwqAt IGRlZmluZSBXSVRIX1JUUEVOR0lORQ0KI8KgIMKgIMKgLSBpbnN0YWxsIFJUUEVuZ2luZTogaHR0 cHM6Ly9naXRodWIuY29tL3NpcHdpc2UvcnRwZW5naW5lDQojwqAgwqAgwqAtIHN0YXJ0IFJUUEVu Z2luZToNCiPCoCDCoCDCoCDCoCBydHBlbmdpbmUgLS1saXN0ZW4tbmc9MTI3LjAuMC4xOjIyMjMg Li4uDQojDQojICoqKiBUbyBlbmFibGUgUFNUTiBnYXRld2F5IHJvdXRpbmcgZXhlY3V0ZToNCiPC oCDCoCDCoC0gZGVmaW5lIFdJVEhfUFNUTg0KI8KgIMKgIMKgLSBzZXQgdGhlIHZhbHVlIG9mIHBz dG4uZ3dfaXANCiPCoCDCoCDCoC0gY2hlY2sgcm91dGVbUFNUTl0gZm9yIHJlZ2V4cCByb3V0aW5n IGNvbmRpdGlvbg0KIw0KIyAqKiogVG8gZW5hYmxlIGRhdGFiYXNlIGFsaWFzZXMgbG9va3VwIGV4 ZWN1dGU6DQojwqAgwqAgwqAtIGVuYWJsZSBteXNxbA0KI8KgIMKgIMKgLSBkZWZpbmUgV0lUSF9B TElBU0RCDQojDQojICoqKiBUbyBlbmFibGUgc3BlZWQgZGlhbCBsb29rdXAgZXhlY3V0ZToNCiPC oCDCoCDCoC0gZW5hYmxlIG15c3FsDQojwqAgwqAgwqAtIGRlZmluZSBXSVRIX1NQRUVERElBTA0K Iw0KIyAqKiogVG8gZW5hYmxlIG11bHRpLWRvbWFpbiBzdXBwb3J0IGV4ZWN1dGU6DQojwqAgwqAg wqAtIGVuYWJsZSBteXNxbA0KI8KgIMKgIMKgLSBkZWZpbmUgV0lUSF9NVUxUSURPTUFJTg0KIw0K IyAqKiogVG8gZW5hYmxlIFRMUyBzdXBwb3J0IGV4ZWN1dGU6DQojwqAgwqAgwqAtIGFkanVzdCBD RkdESVIvdGxzLmNmZyBhcyBuZWVkZWQNCiPCoCDCoCDCoC0gZGVmaW5lIFdJVEhfVExTDQojDQoj ICoqKiBUbyBlbmFibGUgSlNPTlJQQyBvdmVyIEhUVFAoUykgc3VwcG9ydCBleGVjdXRlOg0KI8Kg IMKgIMKgLSBkZWZpbmUgV0lUSF9KU09OUlBDDQojwqAgwqAgwqAtIGFkanVzdCBldmVudF9yb3V0 ZVt4aHR0cDpyZXF1ZXN0XSBmb3IgYWNjZXNzIHBvbGljeQ0KIw0KIyAqKiogVG8gZW5hYmxlIGFu dGktZmxvb2QgZGV0ZWN0aW9uIGV4ZWN1dGU6DQojwqAgwqAgwqAtIGFkanVzdCBwaWtlIGFuZCBo dGFibGU9PmlwYmFuIHNldHRpbmdzIGFzIG5lZWRlZCAoZGVmYXVsdCBpcw0KI8KgIMKgIMKgIMKg YmxvY2sgaWYgbW9yZSB0aGFuIDE2IHJlcXVlc3RzIGluIDIgc2Vjb25kcyBhbmQgYmFuIGZvciAz MDAgc2Vjb25kcykNCiPCoCDCoCDCoC0gZGVmaW5lIFdJVEhfQU5USUZMT09EDQojDQojICoqKiBU byBsb2FkIGh0YWJsZSBtb2R1bGUgZXhlY3V0ZToNCiPCoCDCoCDCoC0gZGVmaW5lIFdJVEhfSFRB QkxFDQojDQojICoqKiBUbyBibG9jayAzWFggcmVkaXJlY3QgcmVwbGllcyBleGVjdXRlOg0KI8Kg IMKgIMKgLSBkZWZpbmUgV0lUSF9CTE9DSzNYWA0KIw0KIyAqKiogVG8gYmxvY2sgNDAxIGFuZCA0 MDcgYXV0aGVudGljYXRpb24gcmVwbGllcyBleGVjdXRlOg0KI8KgIMKgIMKgLSBkZWZpbmUgV0lU SF9CTE9DSzQwMTQwNw0KIw0KIyAqKiogVG8gZW5hYmxlIFZvaWNlTWFpbCByb3V0aW5nIGV4ZWN1 dGU6DQojwqAgwqAgwqAtIGRlZmluZSBXSVRIX1ZPSUNFTUFJTA0KI8KgIMKgIMKgLSBzZXQgdGhl IHZhbHVlIG9mIHZvaWNlbWFpbC5zcnZfaXANCiPCoCDCoCDCoC0gYWRqdXN0IHRoZSB2YWx1ZSBv ZiB2b2ljZW1haWwuc3J2X3BvcnQNCiMNCiMgKioqIFRvIGVuaGFuY2UgYWNjb3VudGluZyBleGVj dXRlOg0KI8KgIMKgIMKgLSBlbmFibGUgbXlzcWwNCiPCoCDCoCDCoC0gZGVmaW5lIFdJVEhfQUND REINCiPCoCDCoCDCoC0gYWRkIGZvbGxvd2luZyBjb2x1bW5zIHRvIGRhdGFiYXNlDQojIWlmZGVm IEFDQ0RCX0NPTU1FTlQNCiDCoCBBTFRFUiBUQUJMRSBhY2MgQUREIENPTFVNTiBzcmNfdXNlciBW QVJDSEFSKDY0KSBOT1QgTlVMTCBERUZBVUxUICcnOw0KIMKgIEFMVEVSIFRBQkxFIGFjYyBBREQg Q09MVU1OIHNyY19kb21haW4gVkFSQ0hBUigxMjgpIE5PVCBOVUxMIERFRkFVTFQgJyc7DQogwqAg QUxURVIgVEFCTEUgYWNjIEFERCBDT0xVTU4gc3JjX2lwIHZhcmNoYXIoNjQpIE5PVCBOVUxMIGRl ZmF1bHQgJyc7DQogwqAgQUxURVIgVEFCTEUgYWNjIEFERCBDT0xVTU4gZHN0X291c2VyIFZBUkNI QVIoNjQpIE5PVCBOVUxMIERFRkFVTFQgJyc7DQogwqAgQUxURVIgVEFCTEUgYWNjIEFERCBDT0xV TU4gZHN0X3VzZXIgVkFSQ0hBUig2NCkgTk9UIE5VTEwgREVGQVVMVCAnJzsNCiDCoCBBTFRFUiBU QUJMRSBhY2MgQUREIENPTFVNTiBkc3RfZG9tYWluIFZBUkNIQVIoMTI4KSBOT1QgTlVMTCBERUZB VUxUICcnOw0KIMKgIEFMVEVSIFRBQkxFIG1pc3NlZF9jYWxscyBBREQgQ09MVU1OIHNyY191c2Vy IFZBUkNIQVIoNjQpIE5PVCBOVUxMIA0KREVGQVVMVCAnJzsNCiDCoCBBTFRFUiBUQUJMRSBtaXNz ZWRfY2FsbHMgQUREIENPTFVNTiBzcmNfZG9tYWluIFZBUkNIQVIoMTI4KSBOT1QgTlVMTCANCkRF RkFVTFQgJyc7DQogwqAgQUxURVIgVEFCTEUgbWlzc2VkX2NhbGxzIEFERCBDT0xVTU4gc3JjX2lw IHZhcmNoYXIoNjQpIE5PVCBOVUxMIA0KZGVmYXVsdCAnJzsNCiDCoCBBTFRFUiBUQUJMRSBtaXNz ZWRfY2FsbHMgQUREIENPTFVNTiBkc3Rfb3VzZXIgVkFSQ0hBUig2NCkgTk9UIE5VTEwgDQpERUZB VUxUICcnOw0KIMKgIEFMVEVSIFRBQkxFIG1pc3NlZF9jYWxscyBBREQgQ09MVU1OIGRzdF91c2Vy IFZBUkNIQVIoNjQpIE5PVCBOVUxMIA0KREVGQVVMVCAnJzsNCiDCoCBBTFRFUiBUQUJMRSBtaXNz ZWRfY2FsbHMgQUREIENPTFVNTiBkc3RfZG9tYWluIFZBUkNIQVIoMTI4KSBOT1QgTlVMTCANCkRF RkFVTFQgJyc7DQojIWVuZGlmDQoNCiMjIyMjIyMgSW5jbHVkZSBMb2NhbCBDb25maWcgSWYgRXhp c3RzICMjIyMjIyMjIw0KaW1wb3J0X2ZpbGUgImthbWFpbGlvLWxvY2FsLmNmZyINCg0KIyMjIyMj IyBEZWZpbmVkIFZhbHVlcyAjIyMjIyMjIyMNCg0KIyAqKiogVmFsdWUgZGVmaW5lcyAtIElEcyB1 c2VkIGxhdGVyIGluIGNvbmZpZw0KIyFpZmRlZiBXSVRIX0RFQlVHDQojIWRlZmluZSBEQkdMRVZF TCA1DQojIWVsc2UNCiMhZGVmaW5lIERCR0xFVkVMIDINCiMhZW5kaWYNCg0KIyFpZmRlZiBXSVRI X01ZU1FMDQojIC0gZGF0YWJhc2UgVVJMIC0gdXNlZCB0byBjb25uZWN0IHRvIGRhdGFiYXNlIHNl cnZlciBieSBtb2R1bGVzIHN1Y2gNCiPCoCDCoCDCoCDCoGFzOiBhdXRoX2RiLCBhY2MsIHVzcmxv YywgYS5zLm8uDQojIXRyeWRlZiBEQlVSTCAibXlzcWw6Ly9rYW1haWxpbzprYW1haWxpb3J3QGxv Y2FsaG9zdC9rYW1haWxpbyINCiMhZW5kaWYNCg0KIyFpZmRlZiBXSVRIX01VTFRJRE9NQUlODQoj IC0gdGhlIHZhbHVlIGZvciAndXNlX2RvbWFpbicgcGFyYW1ldGVycw0KIyFkZWZpbmUgTVVMVElE T01BSU4gMQ0KIyFlbHNlDQojIWRlZmluZSBNVUxUSURPTUFJTiAwDQojIWVuZGlmDQoNCiMhaWZk ZWYgV0lUSF9BTlRJRkxPT0QNCiMgLSBoYXNoIHRhYmxlICdpcGJhbicgdXNlZCB0byBzdG9yZSBi bG9ja2VkIElQIGFkZHJlc3Nlcw0KIyF0cnlkZWYgV0lUSF9IVEFCTEUNCiMhZW5kaWYNCg0KIyAt IGZsYWdzDQojwqAgwqBGTFRfIC0gcGVyIHRyYW5zYWN0aW9uIChtZXNzYWdlKSBmbGFncw0KIyFk ZWZpbmUgRkxUX0FDQyAxDQojIWRlZmluZSBGTFRfQUNDTUlTU0VEIDINCiMhZGVmaW5lIEZMVF9B Q0NGQUlMRUQgMw0KIyFkZWZpbmUgRkxUX05BVFMgNQ0KDQojwqAgwqAgwqAgwqBGTEJfIC0gcGVy IGJyYW5jaCBmbGFncw0KIyFkZWZpbmUgRkxCX05BVEIgNg0KIyFkZWZpbmUgRkxCX05BVFNJUFBJ TkcgNw0KDQojIyMjIyMjIEdsb2JhbCBQYXJhbWV0ZXJzICMjIyMjIyMjIw0KDQovKiBMT0cgTGV2 ZWxzOiAzPURCRywgMj1JTkZPLCAxPU5PVElDRSwgMD1XQVJOLCAtMT1FUlIsIC4uLiAqLw0KZGVi dWc9REJHTEVWRUwNCg0KLyogc2V0IHRvICd5ZXMnIHRvIHByaW50IGxvZyBtZXNzYWdlcyB0byB0 ZXJtaW5hbCBvciB1c2UgJy1FJyBjbGkgb3B0aW9uICovDQpsb2dfc3RkZXJyb3I9bm8NCg0KbWVt ZGJnPTUNCm1lbWxvZz01DQoNCmxvZ19mYWNpbGl0eT1MT0dfTE9DQUwwDQpsb2dfcHJlZml4PSJ7 JG10ICRoZHIoQ1NlcSkgJGNpfSAiDQoNCi8qIG51bWJlciBvZiBTSVAgcm91dGluZyBwcm9jZXNz ZXMgZm9yIGVhY2ggVURQIHNvY2tldA0KIMKgKiAtIHZhbHVlIGluaGVyaXRlZCBieSB0Y3BfY2hp bGRyZW4gYW5kIHNjdHBfY2hpbGRyZW4gd2hlbiBub3Qgc2V0IA0KZXhwbGljaXRlbHkgKi8NCmNo aWxkcmVuPTgNCg0KLyogdW5jb21tZW50IHRoZSBuZXh0IGxpbmUgdG8gZGlzYWJsZSBUQ1AgKGRl ZmF1bHQgb24pICovDQojIGRpc2FibGVfdGNwPXllcw0KDQovKiBudW1iZXIgb2YgU0lQIHJvdXRp bmcgcHJvY2Vzc2VzIGZvciBhbGwgVENQL1RMUyBzb2NrZXRzICovDQojIHRjcF9jaGlsZHJlbj04 DQoNCi8qIHVuY29tbWVudCB0aGUgbmV4dCBsaW5lIHRvIGRpc2FibGUgdGhlIGF1dG8gZGlzY292 ZXJ5IG9mIGxvY2FsIGFsaWFzZXMNCiDCoCogYmFzZWQgb24gcmV2ZXJzZSBETlMgb24gSVBzIChk ZWZhdWx0IG9uKSAqLw0KIyBhdXRvX2FsaWFzZXM9bm8NCg0KLyogYWRkIGxvY2FsIGRvbWFpbiBh bGlhc2VzIC0gaXQgY2FuIGJlIHNldCBtYW55IHRpbWVzICovDQojIGFsaWFzPSJzaXAubXlkb21h aW4uY29tIg0KDQovKiBsaXN0ZW4gc29ja2V0cyAtIGlmIG5vbmUgc2V0LCBLYW1haWxpbyBiaW5k cyB0byBhbGwgbG9jYWwgSVAgYWRkcmVzc2VzDQogwqAqIC0gYmFzaWMgcHJvdG90eXBlIChmdWxs IHByb3RvdHlwZSBjYW4gYmUgZm91bmQgaW4gV2lraSAtIENvcmUgQ29va2Jvb2spOg0KIMKgKsKg IMKgIMKgIGxpc3Rlbj1bcHJvdG9dOltsb2NhbGlwXTpbbHBvcnRdIGFkdmVydGlzZSBbcHVibGlj aXBdOltwcG9ydF0NCiDCoCogLSBpdCBjYW4gYmUgc2V0IG1hbnkgdGltZXMgdG8gYWRkIG1vcmUg c29ja2V0cyB0byBsaXN0ZW4gdG8gKi8NCiMgbGlzdGVuPXVkcDoxMC4wLjAuMTA6NTA2MA0KDQov KiBsaWZlIHRpbWUgb2YgVENQIGNvbm5lY3Rpb24gd2hlbiB0aGVyZSBpcyBubyB0cmFmZmljDQog wqAqIC0gYSBiaXQgaGlnaGVyIHRoYW4gcmVnaXN0cmF0aW9uIGV4cGlyZXMgdG8gY29wZSB3aXRo IFVBIGJlaGluZCBOQVQgKi8NCnRjcF9jb25uZWN0aW9uX2xpZmV0aW1lPTM2MDUNCg0KLyogdXBw ZXIgbGltaXQgZm9yIFRDUCBjb25uZWN0aW9ucyAoaXQgaW5jbHVkZXMgdGhlIFRMUyBjb25uZWN0 aW9ucykgKi8NCnRjcF9tYXhfY29ubmVjdGlvbnM9MjA0OA0KDQojIWlmZGVmIFdJVEhfSlNPTlJQ Qw0KdGNwX2FjY2VwdF9ub19jbD15ZXMNCiMhZW5kaWYNCg0KIyFpZmRlZiBXSVRIX1RMUw0KZW5h YmxlX3Rscz15ZXMNCg0KLyogdXBwZXIgbGltaXQgZm9yIFRMUyBjb25uZWN0aW9ucyAqLw0KdGxz X21heF9jb25uZWN0aW9ucz0yMDQ4DQojIWVuZGlmDQoNCi8qIHNldCBpdCB0byB5ZXMgdG8gZW5h YmxlIHNjdHAgYW5kIGxvYWQgc2N0cC5zbyBtb2R1bGUgKi8NCmVuYWJsZV9zY3RwPW5vDQoNCiMj IyMjIyMgQ3VzdG9tIFBhcmFtZXRlcnMgIyMjIyMjIyMjDQoNCi8qIFRoZXNlIHBhcmFtZXRlcnMg Y2FuIGJlIG1vZGlmaWVkIGF0IHJ1bnRpbWUgdmlhIFJQQyBpbnRlcmZhY2UNCiDCoCogLSBzZWUg dGhlIGRvY3VtZW50YXRpb24gb2YgJ2NmZ19ycGMnIG1vZHVsZS4NCiDCoCoNCiDCoCogRm9ybWF0 OiBncm91cC5pZCA9IHZhbHVlICdkZXNjJyBkZXNjcmlwdGlvbg0KIMKgKiBBY2Nlc3M6ICRzZWwo Y2ZnX2dldC5ncm91cC5pZCkgb3IgQGNmZ19nZXQuZ3JvdXAuaWQgKi8NCg0KIyFpZmRlZiBXSVRI X1BTVE4NCi8qIFBTVE4gR1cgUm91dGluZw0KIMKgKg0KIMKgKiAtIHBzdG4uZ3dfaXA6IHZhbGlk IElQIG9yIGhvc3RuYW1lIGFzIHN0cmluZyB2YWx1ZSwgZXhhbXBsZToNCiDCoCogcHN0bi5nd19p cCA9ICIxMC4wLjAuMTAxIiBkZXNjICJNeSBQU1ROIEdXIEFkZHJlc3MiDQogwqAqDQogwqAqIC0g YnkgZGVmYXVsdCBpcyBlbXB0eSB0byBhdm9pZCBtaXNyb3V0aW5nICovDQpwc3RuLmd3X2lwID0g IiIgZGVzYyAiUFNUTiBHVyBBZGRyZXNzIg0KcHN0bi5nd19wb3J0ID0gIiIgZGVzYyAiUFNUTiBH VyBQb3J0Ig0KIyFlbmRpZg0KDQojIWlmZGVmIFdJVEhfVk9JQ0VNQUlMDQovKiBWb2ljZU1haWwg Um91dGluZyBvbiBvZmZsaW5lLCBidXN5IG9yIG5vIGFuc3dlcg0KIMKgKg0KIMKgKiAtIGJ5IGRl ZmF1bHQgVm9pY2VtYWlsIHNlcnZlciBJUCBpcyBlbXB0eSB0byBhdm9pZCBtaXNyb3V0aW5nICov DQp2b2ljZW1haWwuc3J2X2lwID0gIiIgZGVzYyAiVm9pY2VNYWlsIElQIEFkZHJlc3MiDQp2b2lj ZW1haWwuc3J2X3BvcnQgPSAiNTA2MCIgZGVzYyAiVm9pY2VNYWlsIFBvcnQiDQojIWVuZGlmDQoN CiMhaWZkZWYgV0lUSF9GUkVFU1dJVENIDQpmcmVlc3dpdGNoLmJpbmRpcCA9ICI4NS4xMC40LjIi IGRlc2MgIkZyZWVTV0lUQ0ggSVAgQWRkcmVzcyINCmZyZWVzd2l0Y2guYmluZHBvcnQgPSAiNTA5 MCIgZGVzYyAiRnJlZVNXSVRDSCBQb3J0Ig0KIyFlbmRpZg0KDQoNCiMjIyMjIyMgTW9kdWxlcyBT ZWN0aW9uICMjIyMjIyMjDQoNCi8qIHNldCBwYXRocyB0byBsb2NhdGlvbiBvZiBtb2R1bGVzICov DQojIG1wYXRoPSIvdXNyL2xpYi94ODZfNjQtbGludXgtZ251L2thbWFpbGlvL21vZHVsZXMvIg0K DQojIWlmZGVmIFdJVEhfTVlTUUwNCmxvYWRtb2R1bGUgImRiX215c3FsLnNvIg0KIyFlbmRpZg0K DQojIWlmZGVmIFdJVEhfSlNPTlJQQw0KbG9hZG1vZHVsZSAieGh0dHAuc28iDQojIWVuZGlmDQps b2FkbW9kdWxlICJqc29ucnBjcy5zbyINCmxvYWRtb2R1bGUgImtleC5zbyINCmxvYWRtb2R1bGUg ImNvcmV4LnNvIg0KbG9hZG1vZHVsZSAidG0uc28iDQpsb2FkbW9kdWxlICJ0bXguc28iDQpsb2Fk bW9kdWxlICJzbC5zbyINCmxvYWRtb2R1bGUgInJyLnNvIg0KbG9hZG1vZHVsZSAicHYuc28iDQps b2FkbW9kdWxlICJtYXhmd2Quc28iDQpsb2FkbW9kdWxlICJ1c3Jsb2Muc28iDQpsb2FkbW9kdWxl ICJyZWdpc3RyYXIuc28iDQpsb2FkbW9kdWxlICJ0ZXh0b3BzLnNvIg0KbG9hZG1vZHVsZSAidGV4 dG9wc3guc28iDQpsb2FkbW9kdWxlICJzaXB1dGlscy5zbyINCmxvYWRtb2R1bGUgInhsb2cuc28i DQpsb2FkbW9kdWxlICJzYW5pdHkuc28iDQpsb2FkbW9kdWxlICJjdGwuc28iDQpsb2FkbW9kdWxl ICJjZmdfcnBjLnNvIg0KbG9hZG1vZHVsZSAiYWNjLnNvIg0KbG9hZG1vZHVsZSAiY291bnRlcnMu c28iDQoNCiMhaWZkZWYgV0lUSF9BVVRIDQpsb2FkbW9kdWxlICJhdXRoLnNvIg0KbG9hZG1vZHVs ZSAiYXV0aF9kYi5zbyINCiMhaWZkZWYgV0lUSF9JUEFVVEgNCmxvYWRtb2R1bGUgInBlcm1pc3Np b25zLnNvIg0KIyFlbmRpZg0KIyFlbmRpZg0KDQojIWlmZGVmIFdJVEhfQUxJQVNEQg0KbG9hZG1v ZHVsZSAiYWxpYXNfZGIuc28iDQojIWVuZGlmDQoNCiMhaWZkZWYgV0lUSF9TUEVFRERJQUwNCmxv YWRtb2R1bGUgInNwZWVkZGlhbC5zbyINCiMhZW5kaWYNCg0KIyFpZmRlZiBXSVRIX01VTFRJRE9N QUlODQpsb2FkbW9kdWxlICJkb21haW4uc28iDQojIWVuZGlmDQoNCiMhaWZkZWYgV0lUSF9QUkVT RU5DRQ0KbG9hZG1vZHVsZSAicHJlc2VuY2Uuc28iDQpsb2FkbW9kdWxlICJwcmVzZW5jZV94bWwu c28iDQojIWVuZGlmDQoNCiMhaWZkZWYgV0lUSF9OQVQNCmxvYWRtb2R1bGUgIm5hdGhlbHBlci5z byINCiMhaWZkZWYgV0lUSF9SVFBFTkdJTkUNCmxvYWRtb2R1bGUgInJ0cGVuZ2luZS5zbyINCiMh ZWxzZQ0KbG9hZG1vZHVsZSAicnRwcHJveHkuc28iDQojIWVuZGlmDQojIWVuZGlmDQoNCiMhaWZk ZWYgV0lUSF9UTFMNCmxvYWRtb2R1bGUgInRscy5zbyINCiMhZW5kaWYNCg0KIyFpZmRlZiBXSVRI X0hUQUJMRQ0KbG9hZG1vZHVsZSAiaHRhYmxlLnNvIg0KIyFlbmRpZg0KDQojIWlmZGVmIFdJVEhf QU5USUZMT09EDQpsb2FkbW9kdWxlICJwaWtlLnNvIg0KIyFlbmRpZg0KDQojIWlmZGVmIFdJVEhf REVCVUcNCmxvYWRtb2R1bGUgImRlYnVnZ2VyLnNvIg0KIyFlbmRpZg0KDQojIC0tLS0tLS0tLS0t LS0tLS0tIHNldHRpbmcgbW9kdWxlLXNwZWNpZmljIHBhcmFtZXRlcnMgLS0tLS0tLS0tLS0tLS0t DQoNCg0KIyAtLS0tLSBqc29ucnBjcyBwYXJhbXMgLS0tLS0NCm1vZHBhcmFtKCJqc29ucnBjcyIs ICJwcmV0dHlfZm9ybWF0IiwgMSkNCi8qIHNldCB0aGUgcGF0aCB0byBSUEMgZmlmbyBjb250cm9s IGZpbGUgKi8NCiMgbW9kcGFyYW0oImpzb25ycGNzIiwgImZpZm9fbmFtZSIsICIvcnVuL2thbWFp bGlvL2thbWFpbGlvX3JwYy5maWZvIikNCi8qIHNldCB0aGUgcGF0aCB0byBSUEMgdW5peCBzb2Nr ZXQgY29udHJvbCBmaWxlICovDQojIG1vZHBhcmFtKCJqc29ucnBjcyIsICJkZ3JhbV9zb2NrZXQi LCAiL3J1bi9rYW1haWxpby9rYW1haWxpb19ycGMuc29jayIpDQojIWlmZGVmIFdJVEhfSlNPTlJQ Qw0KbW9kcGFyYW0oImpzb25ycGNzIiwgInRyYW5zcG9ydCIsIDcpDQojIWVuZGlmDQoNCiMgLS0t LS0gY3RsIHBhcmFtcyAtLS0tLQ0KLyogc2V0IHRoZSBwYXRoIHRvIFJQQyB1bml4IHNvY2tldCBj b250cm9sIGZpbGUgKi8NCiMgbW9kcGFyYW0oImN0bCIsICJiaW5ycGMiLCAidW5peDovcnVuL2th bWFpbGlvL2thbWFpbGlvX2N0bCIpDQoNCiMgLS0tLS0gc2FuaXR5IHBhcmFtcyAtLS0tLQ0KbW9k cGFyYW0oInNhbml0eSIsICJhdXRvZHJvcCIsIDApDQoNCiMgLS0tLS0gdG0gcGFyYW1zIC0tLS0t DQojIGF1dG8tZGlzY2FyZCBicmFuY2hlcyBmcm9tIHByZXZpb3VzIHNlcmlhbCBmb3JraW5nIGxl Zw0KbW9kcGFyYW0oInRtIiwgImZhaWx1cmVfcmVwbHlfbW9kZSIsIDMpDQojIGRlZmF1bHQgcmV0 cmFuc21pc3Npb24gdGltZW91dDogMzBzZWMNCm1vZHBhcmFtKCJ0bSIsICJmcl90aW1lciIsIDMw MDAwKQ0KIyBkZWZhdWx0IGludml0ZSByZXRyYW5zbWlzc2lvbiB0aW1lb3V0IGFmdGVyIDF4eDog MTIwc2VjDQptb2RwYXJhbSgidG0iLCAiZnJfaW52X3RpbWVyIiwgMTIwMDAwKQ0KDQojIC0tLS0t IHJyIHBhcmFtcyAtLS0tLQ0KIyBzZXQgbmV4dCBwYXJhbSB0byAxIHRvIGFkZCB2YWx1ZSB0byA7 bHIgcGFyYW0gKGhlbHBzIHdpdGggc29tZSBVQXMpDQptb2RwYXJhbSgicnIiLCAiZW5hYmxlX2Z1 bGxfbHIiLCAwKQ0KIyBkbyBub3QgYXBwZW5kIGZyb20gdGFnIHRvIHRoZSBSUiAobm8gbmVlZCBm b3IgdGhpcyBzY3JpcHQpDQptb2RwYXJhbSgicnIiLCAiYXBwZW5kX2Zyb210YWciLCAwKQ0KDQoj IC0tLS0tIHJlZ2lzdHJhciBwYXJhbXMgLS0tLS0NCm1vZHBhcmFtKCJyZWdpc3RyYXIiLCAibWV0 aG9kX2ZpbHRlcmluZyIsIDEpDQovKiB1bmNvbW1lbnQgdGhlIG5leHQgbGluZSB0byBkaXNhYmxl IHBhcmFsbGVsIGZvcmtpbmcgdmlhIGxvY2F0aW9uICovDQojIG1vZHBhcmFtKCJyZWdpc3RyYXIi LCAiYXBwZW5kX2JyYW5jaGVzIiwgMCkNCi8qIHVuY29tbWVudCB0aGUgbmV4dCBsaW5lIG5vdCB0 byBhbGxvdyBtb3JlIHRoYW4gMTAgY29udGFjdHMgcGVyIEFPUiAqLw0KIyBtb2RwYXJhbSgicmVn aXN0cmFyIiwgIm1heF9jb250YWN0cyIsIDEwKQ0KLyogbWF4IHZhbHVlIGZvciBleHBpcmVzIG9m IHJlZ2lzdHJhdGlvbnMgKi8NCm1vZHBhcmFtKCJyZWdpc3RyYXIiLCAibWF4X2V4cGlyZXMiLCAz NjAwKQ0KLyogc2V0IGl0IHRvIDEgdG8gZW5hYmxlIEdSVVUgKi8NCm1vZHBhcmFtKCJyZWdpc3Ry YXIiLCAiZ3J1dV9lbmFibGVkIiwgMCkNCi8qIHNldCBpdCB0byAwIHRvIGRpc2FibGUgUGF0aCBo YW5kbGluZyAqLw0KbW9kcGFyYW0oInJlZ2lzdHJhciIsICJ1c2VfcGF0aCIsIDEpDQovKiBzYXZl IFBhdGggZXZlbiBpZiBub3QgbGlzdGVkIGluIFN1cHBvcnRlZCBoZWFkZXIgKi8NCm1vZHBhcmFt KCJyZWdpc3RyYXIiLCAicGF0aF9tb2RlIiwgMCkNCg0KIyAtLS0tLSBhY2MgcGFyYW1zIC0tLS0t DQovKiB3aGF0IHNwZWNpYWwgZXZlbnRzIHNob3VsZCBiZSBhY2NvdW50ZWQgPyAqLw0KbW9kcGFy YW0oImFjYyIsICJlYXJseV9tZWRpYSIsIDApDQptb2RwYXJhbSgiYWNjIiwgInJlcG9ydF9hY2si LCAwKQ0KbW9kcGFyYW0oImFjYyIsICJyZXBvcnRfY2FuY2VscyIsIDApDQovKiBieSBkZWZhdWx0 IHdlIGRvIG5vdCBhZGp1c3QgdGhlIGRpcmVjdCBvZiB0aGUgc2VxdWVudGlhbCByZXF1ZXN0cy4N CiDCoCogaWYgeW91IGVuYWJsZSB0aGlzIHBhcmFtZXRlciwgYmUgc3VyZSB0aGUgZW5hYmxlICJh cHBlbmRfZnJvbXRhZyINCiDCoCogaW4gInJyIiBtb2R1bGUgKi8NCm1vZHBhcmFtKCJhY2MiLCAi ZGV0ZWN0X2RpcmVjdGlvbiIsIDApDQovKiBhY2NvdW50IHRyaWdnZXJzIChmbGFncykgKi8NCm1v ZHBhcmFtKCJhY2MiLCAibG9nX2ZsYWciLCBGTFRfQUNDKQ0KbW9kcGFyYW0oImFjYyIsICJsb2df bWlzc2VkX2ZsYWciLCBGTFRfQUNDTUlTU0VEKQ0KbW9kcGFyYW0oImFjYyIsICJsb2dfZXh0cmEi LA0KIMKgIMKgIMKgIMKgICJzcmNfdXNlcj0kZlU7c3JjX2RvbWFpbj0kZmQ7c3JjX2lwPSRzaTsi DQogwqAgwqAgwqAgwqAgImRzdF9vdXNlcj0kdFU7ZHN0X3VzZXI9JHJVO2RzdF9kb21haW49JHJk IikNCm1vZHBhcmFtKCJhY2MiLCAiZmFpbGVkX3RyYW5zYWN0aW9uX2ZsYWciLCBGTFRfQUNDRkFJ TEVEKQ0KLyogZW5oYW5jZWQgREIgYWNjb3VudGluZyAqLw0KIyFpZmRlZiBXSVRIX0FDQ0RCDQpt b2RwYXJhbSgiYWNjIiwgImRiX2ZsYWciLCBGTFRfQUNDKQ0KbW9kcGFyYW0oImFjYyIsICJkYl9t aXNzZWRfZmxhZyIsIEZMVF9BQ0NNSVNTRUQpDQptb2RwYXJhbSgiYWNjIiwgImRiX3VybCIsIERC VVJMKQ0KbW9kcGFyYW0oImFjYyIsICJkYl9leHRyYSIsDQogwqAgwqAgwqAgwqAgInNyY191c2Vy PSRmVTtzcmNfZG9tYWluPSRmZDtzcmNfaXA9JHNpOyINCiDCoCDCoCDCoCDCoCAiZHN0X291c2Vy PSR0VTtkc3RfdXNlcj0kclU7ZHN0X2RvbWFpbj0kcmQiKQ0KIyFlbmRpZg0KDQojIC0tLS0tIHVz cmxvYyBwYXJhbXMgLS0tLS0NCm1vZHBhcmFtKCJ1c3Jsb2MiLCAidGltZXJfaW50ZXJ2YWwiLCA2 MCkNCm1vZHBhcmFtKCJ1c3Jsb2MiLCAidGltZXJfcHJvY3MiLCAxKQ0KbW9kcGFyYW0oInVzcmxv YyIsICJ1c2VfZG9tYWluIiwgTVVMVElET01BSU4pDQovKiBlbmFibGUgREIgcGVyc2lzdGVuY3kg Zm9yIGxvY2F0aW9uIGVudHJpZXMgKi8NCiMhaWZkZWYgV0lUSF9VU1JMT0NEQg0KbW9kcGFyYW0o InVzcmxvYyIsICJkYl91cmwiLCBEQlVSTCkNCm1vZHBhcmFtKCJ1c3Jsb2MiLCAiZGJfbW9kZSIs IDIpDQojIWVuZGlmDQoNCiMgLS0tLS0gYXV0aF9kYiBwYXJhbXMgLS0tLS0NCiMhaWZkZWYgV0lU SF9BVVRIDQptb2RwYXJhbSgiYXV0aF9kYiIsICJkYl91cmwiLCBEQlVSTCkNCm1vZHBhcmFtKCJh dXRoX2RiIiwgImNhbGN1bGF0ZV9oYTEiLCB5ZXMpDQptb2RwYXJhbSgiYXV0aF9kYiIsICJwYXNz d29yZF9jb2x1bW4iLCAicGFzc3dvcmQiKQ0KbW9kcGFyYW0oImF1dGhfZGIiLCAibG9hZF9jcmVk ZW50aWFscyIsICIiKQ0KbW9kcGFyYW0oImF1dGhfZGIiLCAidXNlX2RvbWFpbiIsIE1VTFRJRE9N QUlOKQ0KDQojIC0tLS0tIHBlcm1pc3Npb25zIHBhcmFtcyAtLS0tLQ0KIyFpZmRlZiBXSVRIX0lQ QVVUSA0KbW9kcGFyYW0oInBlcm1pc3Npb25zIiwgImRiX3VybCIsIERCVVJMKQ0KbW9kcGFyYW0o InBlcm1pc3Npb25zIiwgImxvYWRfYmFja2VuZHMiLCAxKQ0KIyFlbmRpZg0KDQojIWVuZGlmDQoN CiMgLS0tLS0gYWxpYXNfZGIgcGFyYW1zIC0tLS0tDQojIWlmZGVmIFdJVEhfQUxJQVNEQg0KbW9k cGFyYW0oImFsaWFzX2RiIiwgImRiX3VybCIsIERCVVJMKQ0KbW9kcGFyYW0oImFsaWFzX2RiIiwg InVzZV9kb21haW4iLCBNVUxUSURPTUFJTikNCiMhZW5kaWYNCg0KIyAtLS0tLSBzcGVlZGRpYWwg cGFyYW1zIC0tLS0tDQojIWlmZGVmIFdJVEhfU1BFRURESUFMDQptb2RwYXJhbSgic3BlZWRkaWFs IiwgImRiX3VybCIsIERCVVJMKQ0KbW9kcGFyYW0oInNwZWVkZGlhbCIsICJ1c2VfZG9tYWluIiwg TVVMVElET01BSU4pDQojIWVuZGlmDQoNCiMgLS0tLS0gZG9tYWluIHBhcmFtcyAtLS0tLQ0KIyFp ZmRlZiBXSVRIX01VTFRJRE9NQUlODQptb2RwYXJhbSgiZG9tYWluIiwgImRiX3VybCIsIERCVVJM KQ0KLyogcmVnaXN0ZXIgY2FsbGJhY2sgdG8gbWF0Y2ggbXlzZWxmIGNvbmRpdGlvbiB3aXRoIGRv bWFpbnMgbGlzdCAqLw0KbW9kcGFyYW0oImRvbWFpbiIsICJyZWdpc3Rlcl9teXNlbGYiLCAxKQ0K IyFlbmRpZg0KDQojIWlmZGVmIFdJVEhfUFJFU0VOQ0UNCiMgLS0tLS0gcHJlc2VuY2UgcGFyYW1z IC0tLS0tDQptb2RwYXJhbSgicHJlc2VuY2UiLCAiZGJfdXJsIiwgREJVUkwpDQoNCiMgLS0tLS0g cHJlc2VuY2VfeG1sIHBhcmFtcyAtLS0tLQ0KbW9kcGFyYW0oInByZXNlbmNlX3htbCIsICJkYl91 cmwiLCBEQlVSTCkNCm1vZHBhcmFtKCJwcmVzZW5jZV94bWwiLCAiZm9yY2VfYWN0aXZlIiwgMSkN CiMhZW5kaWYNCg0KIyFpZmRlZiBXSVRIX05BVA0KIyFpZmRlZiBXSVRIX1JUUEVOR0lORQ0KIyAt LS0tLSBydHBlbmdpbmUgcGFyYW1zIC0tLS0tDQptb2RwYXJhbSgicnRwZW5naW5lIiwgInJ0cGVu Z2luZV9zb2NrIiwgInVkcDoxMjcuMC4wLjE6MjIyMyIpDQojIWVsc2UNCiMgLS0tLS0gcnRwcHJv eHkgcGFyYW1zIC0tLS0tDQptb2RwYXJhbSgicnRwcHJveHkiLCAicnRwcHJveHlfc29jayIsICJ1 ZHA6MTI3LjAuMC4xOjc3MjIiKQ0KIyFlbmRpZg0KIyAtLS0tLSBuYXRoZWxwZXIgcGFyYW1zIC0t LS0tDQptb2RwYXJhbSgibmF0aGVscGVyIiwgIm5hdHBpbmdfaW50ZXJ2YWwiLCAzMCkNCm1vZHBh cmFtKCJuYXRoZWxwZXIiLCAicGluZ19uYXRlZF9vbmx5IiwgMSkNCm1vZHBhcmFtKCJuYXRoZWxw ZXIiLCAic2lwcGluZ19iZmxhZyIsIEZMQl9OQVRTSVBQSU5HKQ0KbW9kcGFyYW0oIm5hdGhlbHBl ciIsICJzaXBwaW5nX2Zyb20iLCAic2lwOnBpbmdlckBrYW1haWxpby5vcmciKQ0KDQojIHBhcmFt cyBuZWVkZWQgZm9yIE5BVCB0cmF2ZXJzYWwgaW4gb3RoZXIgbW9kdWxlcw0KbW9kcGFyYW0oIm5h dGhlbHBlcnxyZWdpc3RyYXIiLCAicmVjZWl2ZWRfYXZwIiwgIiRhdnAoUkVDRUlWRUQpIikNCm1v ZHBhcmFtKCJ1c3Jsb2MiLCAibmF0X2JmbGFnIiwgRkxCX05BVEIpDQojIWVuZGlmDQoNCiMhaWZk ZWYgV0lUSF9UTFMNCiMgLS0tLS0gdGxzIHBhcmFtcyAtLS0tLQ0KbW9kcGFyYW0oInRscyIsICJj b25maWciLCAiL2V0Yy9rYW1haWxpby90bHMuY2ZnIikNCiMhZW5kaWYNCg0KIyFpZmRlZiBXSVRI X0FOVElGTE9PRA0KIyAtLS0tLSBwaWtlIHBhcmFtcyAtLS0tLQ0KbW9kcGFyYW0oInBpa2UiLCAi c2FtcGxpbmdfdGltZV91bml0IiwgMikNCm1vZHBhcmFtKCJwaWtlIiwgInJlcXNfZGVuc2l0eV9w ZXJfdW5pdCIsIDE2KQ0KbW9kcGFyYW0oInBpa2UiLCAicmVtb3ZlX2xhdGVuY3kiLCA0KQ0KIyFl bmRpZg0KDQojIWlmZGVmIFdJVEhfSFRBQkxFDQojIC0tLS0tIGh0YWJsZSBwYXJhbXMgLS0tLS0N CiMhaWZkZWYgV0lUSF9BTlRJRkxPT0QNCi8qIGlwIGJhbiBodGFibGUgd2l0aCBhdXRvZXhwaXJl IGFmdGVyIDUgbWludXRlcyAqLw0KbW9kcGFyYW0oImh0YWJsZSIsICJodGFibGUiLCAiaXBiYW49 PnNpemU9ODthdXRvZXhwaXJlPTMwMDsiKQ0KIyFlbmRpZg0KIyFlbmRpZg0KDQojIWlmZGVmIFdJ VEhfREVCVUcNCiMgLS0tLS0gZGVidWdnZXIgcGFyYW1zIC0tLS0tDQptb2RwYXJhbSgiZGVidWdn ZXIiLCAiY2ZndHJhY2UiLCAxKQ0KbW9kcGFyYW0oImRlYnVnZ2VyIiwgImxvZ19sZXZlbF9uYW1l IiwgImV4ZWMiKQ0KIyFlbmRpZg0KDQojIyMjIyMjIFJvdXRpbmcgTG9naWMgIyMjIyMjIyMNCg0K DQovKiBNYWluIFNJUCByZXF1ZXN0IHJvdXRpbmcgbG9naWMNCiDCoCogLSBwcm9jZXNzaW5nIG9m IGFueSBpbmNvbWluZyBTSVAgcmVxdWVzdCBzdGFydHMgd2l0aCB0aGlzIHJvdXRlDQogwqAqIC0g bm90ZTogdGhpcyBpcyB0aGUgc2FtZSBhcyByb3V0ZSB7IC4uLiB9ICovDQpyZXF1ZXN0X3JvdXRl IHsNCg0KIMKgIMKgIMKgIMKgICMgcGVyIHJlcXVlc3QgaW5pdGlhbCBjaGVja3MNCiDCoCDCoCDC oCDCoCByb3V0ZShSRVFJTklUKTsNCg0KIMKgIMKgIMKgIMKgICMgTkFUIGRldGVjdGlvbg0KIMKg IMKgIMKgIMKgIHJvdXRlKE5BVERFVEVDVCk7DQoNCiDCoCDCoCDCoCDCoCAjIENBTkNFTCBwcm9j ZXNzaW5nDQogwqAgwqAgwqAgwqAgaWYgKGlzX21ldGhvZCgiQ0FOQ0VMIikpIHsNCiDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCBpZiAodF9jaGVja190cmFucygpKSB7DQogwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgcm91dGUoUkVMQVkpOw0KIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIH0NCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBleGl0Ow0KIMKgIMKgIMKgIMKgIH0NCg0K IMKgIMKgIMKgIMKgICMgaGFuZGxlIHJldHJhbnNtaXNzaW9ucw0KIMKgIMKgIMKgIMKgIGlmICgh aXNfbWV0aG9kKCJBQ0siKSkgew0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmKHRfcHJlY2hl Y2tfdHJhbnMoKSkgew0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHRfY2hl Y2tfdHJhbnMoKTsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBleGl0Ow0K IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIH0NCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB0X2No ZWNrX3RyYW5zKCk7DQogwqAgwqAgwqAgwqAgfQ0KDQogwqAgwqAgwqAgwqAgIyBoYW5kbGUgcmVx dWVzdHMgd2l0aGluIFNJUCBkaWFsb2dzDQogwqAgwqAgwqAgwqAgcm91dGUoV0lUSElORExHKTsN Cg0KIMKgIMKgIMKgIMKgICMjIyBvbmx5IGluaXRpYWwgcmVxdWVzdHMgKG5vIFRvIHRhZykNCg0K IMKgIMKgIMKgIMKgICMgYXV0aGVudGljYXRpb24NCiDCoCDCoCDCoCDCoCByb3V0ZShBVVRIKTsN Cg0KIMKgIMKgIMKgIMKgICMgcmVjb3JkIHJvdXRpbmcgZm9yIGRpYWxvZyBmb3JtaW5nIHJlcXVl c3RzIChpbiBjYXNlIHRoZXkgYXJlIA0Kcm91dGVkKQ0KIMKgIMKgIMKgIMKgICMgLSByZW1vdmUg cHJlbG9hZGVkIHJvdXRlIGhlYWRlcnMNCiDCoCDCoCDCoCDCoCByZW1vdmVfaGYoIlJvdXRlIik7 DQogwqAgwqAgwqAgwqAgaWYgKGlzX21ldGhvZCgiSU5WSVRFfFNVQlNDUklCRSIpKSB7DQogwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgcmVjb3JkX3JvdXRlKCk7DQogwqAgwqAgwqAgwqAgfQ0KDQog wqAgwqAgwqAgwqAgIyBhY2NvdW50IG9ubHkgSU5WSVRFcw0KIMKgIMKgIMKgIMKgIGlmIChpc19t ZXRob2QoIklOVklURSIpKSB7DQogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgc2V0ZmxhZyhGTFRf QUNDKTsgIyBkbyBhY2NvdW50aW5nDQogwqAgwqAgwqAgwqAgfQ0KDQogwqAgwqAgwqAgwqAgIyBk aXNwYXRjaCByZXF1ZXN0cyB0byBmb3JlaWduIGRvbWFpbnMNCiDCoCDCoCDCoCDCoCByb3V0ZShT SVBPVVQpOw0KDQogwqAgwqAgwqAgwqAgIyMjIHJlcXVlc3RzIGZvciBteSBsb2NhbCBkb21haW5z DQoNCiDCoCDCoCDCoCDCoCAjIGhhbmRsZSBwcmVzZW5jZSByZWxhdGVkIHJlcXVlc3RzDQogwqAg wqAgwqAgwqAgcm91dGUoUFJFU0VOQ0UpOw0KDQogwqAgwqAgwqAgwqAgIyBoYW5kbGUgcmVnaXN0 cmF0aW9ucw0KIMKgIMKgIMKgIMKgIHJvdXRlKFJFR0lTVFJBUik7DQoNCiDCoCDCoCDCoCDCoCBp ZiAoJHJVPT0kbnVsbCkgew0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICMgcmVxdWVzdCB3aXRo IG5vIFVzZXJuYW1lIGluIFJVUkkNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBzbF9zZW5kX3Jl cGx5KCI0ODQiLCAiQWRkcmVzcyBJbmNvbXBsZXRlIik7DQogwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgZXhpdDsNCiDCoCDCoCDCoCDCoCB9DQoNCiDCoCDCoCDCoCDCoCAjIGRpc3BhdGNoIGRlc3Rp bmF0aW9ucyB0byBQU1RODQogwqAgwqAgwqAgwqAgcm91dGUoUFNUTik7DQoNCiDCoCDCoCDCoCDC oCAjIHVzZXIgbG9jYXRpb24gc2VydmljZQ0KIMKgIMKgIMKgIMKgIHJvdXRlKExPQ0FUSU9OKTsN Cg0KIMKgIMKgIMKgIMKgIHJldHVybjsNCn0NCg0KIyBXcmFwcGVyIGZvciByZWxheWluZyByZXF1 ZXN0cw0Kcm91dGVbUkVMQVldIHsNCg0KIMKgIMKgIMKgIMKgICMgZW5hYmxlIGFkZGl0aW9uYWwg ZXZlbnQgcm91dGVzIGZvciBmb3J3YXJkZWQgcmVxdWVzdHMNCiDCoCDCoCDCoCDCoCAjIC0gc2Vy aWFsIGZvcmtpbmcsIFJUUCByZWxheWluZyBoYW5kbGluZywgYS5zLm8uDQogwqAgwqAgwqAgwqAg aWYgKGlzX21ldGhvZCgiSU5WSVRFfEJZRXxTVUJTQ1JJQkV8VVBEQVRFIikpIHsNCiDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCBpZighdF9pc19zZXQoImJyYW5jaF9yb3V0ZSIpKSB0X29uX2JyYW5j aCgiTUFOQUdFX0JSQU5DSCIpOw0KIMKgIMKgIMKgIMKgIH0NCiDCoCDCoCDCoCDCoCBpZiAoaXNf bWV0aG9kKCJJTlZJVEV8U1VCU0NSSUJFfFVQREFURSIpKSB7DQogwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgaWYoIXRfaXNfc2V0KCJvbnJlcGx5X3JvdXRlIikpIHRfb25fcmVwbHkoIk1BTkFHRV9S RVBMWSIpOw0KIMKgIMKgIMKgIMKgIH0NCiDCoCDCoCDCoCDCoCBpZiAoaXNfbWV0aG9kKCJJTlZJ VEUiKSkgew0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmKCF0X2lzX3NldCgiZmFpbHVyZV9y b3V0ZSIpKSANCnRfb25fZmFpbHVyZSgiTUFOQUdFX0ZBSUxVUkUiKTsNCiDCoCDCoCDCoCDCoCB9 DQoNCiDCoCDCoCDCoCDCoCBpZiAoIXRfcmVsYXkoKSkgew0KIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIHNsX3JlcGx5X2Vycm9yKCk7DQogwqAgwqAgwqAgwqAgfQ0KIMKgIMKgIMKgIMKgIGV4aXQ7 DQp9DQoNCiMgUGVyIFNJUCByZXF1ZXN0IGluaXRpYWwgY2hlY2tzDQpyb3V0ZVtSRVFJTklUXSB7 DQogwqAgwqAgwqAgwqAgIyBubyBjb25uZWN0IGZvciBzZW5kaW5nIHJlcGxpZXMNCiDCoCDCoCDC oCDCoCBzZXRfcmVwbHlfbm9fY29ubmVjdCgpOw0KIMKgIMKgIMKgIMKgICMgZW5mb3JjZSBzeW1t ZXRyaWMgc2lnbmFsaW5nDQogwqAgwqAgwqAgwqAgIyAtIHNlbmQgYmFjayByZXBsaWVzIHRvIHRo ZSBzb3VyY2UgYWRkcmVzcyBvZiByZXF1ZXN0DQogwqAgwqAgwqAgwqAgZm9yY2VfcnBvcnQoKTsN Cg0KIyFpZmRlZiBXSVRIX0FOVElGTE9PRA0KIMKgIMKgIMKgIMKgICMgZmxvb2QgZGV0ZWN0aW9u IGZyb20gc2FtZSBJUCBhbmQgdHJhZmZpYyBiYW4gZm9yIGEgd2hpbGUNCiDCoCDCoCDCoCDCoCAj IGJlIHN1cmUgeW91IGV4Y2x1ZGUgY2hlY2tpbmcgdHJ1c3RlZCBwZWVycywgc3VjaCBhcyBwc3Ru IGdhdGV3YXlzDQogwqAgwqAgwqAgwqAgIyAtIGxvY2FsIGhvc3QgZXhjbHVkZWQgKGUuZy4sIGxv b3AgdG8gc2VsZikNCiDCoCDCoCDCoCDCoCBpZihzcmNfaXAhPW15c2VsZikgew0KIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIGlmKCRzaHQoaXBiYW49PiRzaSkhPSRudWxsKSB7DQogwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgIyBpcCBpcyBhbHJlYWR5IGJsb2NrZWQNCiDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB4ZGJnKCJyZXF1ZXN0IGZyb20gYmxvY2tl ZCBJUCAtICRybSBmcm9tICRmdSANCihJUDokc2k6JHNwKVxuIik7DQogwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgZXhpdDsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB9DQog wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKCFwaWtlX2NoZWNrX3JlcSgpKSB7DQogwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgeGFsZXJ0KCJBTEVSVDogcGlrZSBibG9ja2lu ZyAkcm0gZnJvbSAkZnUgDQooSVA6JHNpOiRzcClcbiIpOw0KIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgICRzaHQoaXBiYW49PiRzaSkgPSAxOw0KIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIGV4aXQ7DQogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfQ0KIMKg IMKgIMKgIMKgIH0NCiMhZW5kaWYNCiDCoCDCoCDCoCDCoCBpZigkdWEgPX4gDQoiZnJpZW5kbHl8 c2Nhbm5lcnxzaXBjbGl8c2lwdmljaW91c3xWYXhTSVBVc2VyQWdlbnR8cHBsc2lwIikgew0KIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgICMgc2lsZW50IGRyb3AgZm9yIHNjYW5uZXJzIC0gdW5jb21t ZW50IG5leHQgbGluZSBpZiANCndhbnQgdG8gcmVwbHkNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCAjIHNsX3NlbmRfcmVwbHkoIjIwMCIsICJPSyIpOw0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IGV4aXQ7DQogwqAgwqAgwqAgwqAgfQ0KDQogwqAgwqAgwqAgwqAgaWYgKCFtZl9wcm9jZXNzX21h eGZ3ZF9oZWFkZXIoIjEwIikpIHsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBzbF9zZW5kX3Jl cGx5KCI0ODMiLCAiVG9vIE1hbnkgSG9wcyIpOw0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGV4 aXQ7DQogwqAgwqAgwqAgwqAgfQ0KDQogwqAgwqAgwqAgwqAgaWYoaXNfbWV0aG9kKCJPUFRJT05T IikgJiYgdXJpPT1teXNlbGYgJiYgJHJVPT0kbnVsbCkgew0KIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIHNsX3NlbmRfcmVwbHkoIjIwMCIsICJLZWVwYWxpdmUiKTsNCiDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCBleGl0Ow0KIMKgIMKgIMKgIMKgIH0NCg0KIMKgIMKgIMKgIMKgIGlmKCFzYW5pdHlf Y2hlY2soIjE3ODk1IiwgIjciKSkgew0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHhsb2coIk1h bGZvcm1lZCBTSVAgcmVxdWVzdCBmcm9tICRzaTokc3BcbiIpOw0KIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIGV4aXQ7DQogwqAgwqAgwqAgwqAgfQ0KfQ0KDQojIEhhbmRsZSByZXF1ZXN0cyB3aXRo aW4gU0lQIGRpYWxvZ3MNCnJvdXRlW1dJVEhJTkRMR10gew0KIMKgIMKgIMKgIMKgIGlmICghaGFz X3RvdGFnKCkpIHJldHVybjsNCg0KIMKgIMKgIMKgIMKgICMgc2VxdWVudGlhbCByZXF1ZXN0IHdp dGhpbiBhIGRpYWxvZyBzaG91bGQNCiDCoCDCoCDCoCDCoCAjIHRha2UgdGhlIHBhdGggZGV0ZXJt aW5lZCBieSByZWNvcmQtcm91dGluZw0KIMKgIMKgIMKgIMKgIGlmIChsb29zZV9yb3V0ZSgpKSB7 DQogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcm91dGUoRExHVVJJKTsNCiDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCBpZiAoaXNfbWV0aG9kKCJCWUUiKSkgew0KIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIHNldGZsYWcoRkxUX0FDQyk7ICMgZG8gYWNjb3VudGluZyAuLi4NCiDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBzZXRmbGFnKEZMVF9BQ0NGQUlMRUQp OyAjIC4uLiBldmVuIGlmIHRoZSANCnRyYW5zYWN0aW9uIGZhaWxzDQogwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgfSBlbHNlIGlmICggaXNfbWV0aG9kKCJBQ0siKSApIHsNCiDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAjIEFDSyBpcyBmb3J3YXJkZWQgc3RhdGVsZXNzbHkNCiDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCByb3V0ZShOQVRNQU5BR0UpOw0KIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIH0gZWxzZSBpZiAoIGlzX21ldGhvZCgiTk9USUZZIikgKSB7 DQogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgIyBBZGQgUmVjb3JkLVJvdXRl IGZvciBpbi1kaWFsb2cgTk9USUZZIGFzIHBlciANClJGQyA2NjY1Lg0KIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJlY29yZF9yb3V0ZSgpOw0KIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIH0NCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCByb3V0ZShSRUxBWSk7DQogwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgZXhpdDsNCiDCoCDCoCDCoCDCoCB9DQoNCiDCoCDCoCDCoCDCoCBp ZiAoaXNfbWV0aG9kKCJTVUJTQ1JJQkUiKSAmJiB1cmkgPT0gbXlzZWxmKSB7DQogwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgIyBpbi1kaWFsb2cgc3Vic2NyaWJlIHJlcXVlc3RzDQogwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgcm91dGUoUFJFU0VOQ0UpOw0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IGV4aXQ7DQogwqAgwqAgwqAgwqAgfQ0KIMKgIMKgIMKgIMKgIGlmICggaXNfbWV0aG9kKCJBQ0si KSApIHsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAoIHRfY2hlY2tfdHJhbnMoKSApIHsN CiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAjIG5vIGxvb3NlLXJvdXRlLCBi dXQgc3RhdGVmdWwgQUNLOw0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICMg bXVzdCBiZSBhbiBBQ0sgYWZ0ZXIgYSA0ODcNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCAjIG9yIGUuZy4gNDA0IGZyb20gdXBzdHJlYW0gc2VydmVyDQogwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcm91dGUoUkVMQVkpOw0KIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIGV4aXQ7DQogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfSBlbHNl IHsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAjIEFDSyB3aXRob3V0IG1h dGNoaW5nIHRyYW5zYWN0aW9uIC4uLiBpZ25vcmUgDQphbmQgZGlzY2FyZA0KIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGV4aXQ7DQogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg fQ0KIMKgIMKgIMKgIMKgIH0NCiDCoCDCoCDCoCDCoCBzbF9zZW5kX3JlcGx5KCI0MDQiLCAiTm90 IGhlcmUiKTsNCiDCoCDCoCDCoCDCoCBleGl0Ow0KfQ0KDQojIEhhbmRsZSBTSVAgcmVnaXN0cmF0 aW9ucw0Kcm91dGVbUkVHSVNUUkFSXSB7DQogwqAgwqAgwqAgwqAgaWYgKCFpc19tZXRob2QoIlJF R0lTVEVSIikpIHJldHVybjsNCg0KIMKgIMKgIMKgIMKgIGlmKGlzZmxhZ3NldChGTFRfTkFUUykp IHsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBzZXRiZmxhZyhGTEJfTkFUQik7DQojIWlmZGVm IFdJVEhfTkFUU0lQUElORw0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICMgZG8gU0lQIE5BVCBw aW5naW5nDQogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgc2V0YmZsYWcoRkxCX05BVFNJUFBJTkcp Ow0KIyFlbmRpZg0KIMKgIMKgIMKgIMKgIH0NCiDCoCDCoCDCoCDCoCBpZiAoIXNhdmUoImxvY2F0 aW9uIikpIHsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBzbF9yZXBseV9lcnJvcigpOw0KIMKg IMKgIMKgIMKgIH0NCiDCoCDCoCDCoCDCoCBleGl0Ow0KfQ0KDQojIFVzZXIgbG9jYXRpb24gc2Vy dmljZQ0Kcm91dGVbTE9DQVRJT05dIHsNCg0KIyFpZmRlZiBXSVRIX1NQRUVERElBTA0KIMKgIMKg IMKgIMKgICMgc2VhcmNoIGZvciBzaG9ydCBkaWFsaW5nIC0gMi1kaWdpdCBleHRlbnNpb24NCiDC oCDCoCDCoCDCoCBpZigkclU9fiJeWzAtOV1bMC05XSQiKSB7DQogwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgaWYoc2RfbG9va3VwKCJzcGVlZF9kaWFsIikpIHsNCiDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCByb3V0ZShTSVBPVVQpOw0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IH0NCiDCoCDCoCDCoCDCoCB9DQojIWVuZGlmDQoNCiMhaWZkZWYgV0lUSF9BTElBU0RCDQogwqAg wqAgwqAgwqAgIyBzZWFyY2ggaW4gREItYmFzZWQgYWxpYXNlcw0KIMKgIMKgIMKgIMKgIGlmKGFs aWFzX2RiX2xvb2t1cCgiZGJhbGlhc2VzIikpIHsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBy b3V0ZShTSVBPVVQpOw0KIMKgIMKgIMKgIMKgIH0NCiMhZW5kaWYNCg0KIMKgIMKgIMKgIMKgICRh dnAob2V4dGVuKSA9ICRyVTsNCiDCoCDCoCDCoCDCoCBpZiAoIWxvb2t1cCgibG9jYXRpb24iKSkg ew0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICR2YXIocmMpID0gJHJjOw0KIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIHJvdXRlKFRPVk9JQ0VNQUlMKTsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCB0X25ld3RyYW4oKTsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBzd2l0Y2ggKCR2YXIocmMp KSB7DQogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgY2FzZSAtMToNCiDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBjYXNlIC0zOg0KIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHNlbmRfcmVwbHkoIjQwNCIsICJOb3Qg Rm91bmQgQSIpOw0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIGV4aXQ7DQogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgY2FzZSAtMjoN CiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBzZW5kX3Jl cGx5KCI0MDUiLCAiTWV0aG9kIE5vdCBBbGxvd2VkIik7DQogwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZXhpdDsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCB9DQogwqAgwqAgwqAgwqAgfQ0KDQogwqAgwqAgwqAgwqAgIyB3aGVuIHJvdXRpbmcgdmlhIHVz cmxvYywgbG9nIHRoZSBtaXNzZWQgY2FsbHMgYWxzbw0KIMKgIMKgIMKgIMKgIGlmIChpc19tZXRo b2QoIklOVklURSIpKSB7DQogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgc2V0ZmxhZyhGTFRfQUND TUlTU0VEKTsNCiDCoCDCoCDCoCDCoCB9DQoNCiDCoCDCoCDCoCDCoCByb3V0ZShSRUxBWSk7DQog wqAgwqAgwqAgwqAgZXhpdDsNCn0NCg0KIyBQcmVzZW5jZSBzZXJ2ZXIgcHJvY2Vzc2luZw0Kcm91 dGVbUFJFU0VOQ0VdIHsNCiDCoCDCoCDCoCDCoCBpZighaXNfbWV0aG9kKCJQVUJMSVNIfFNVQlND UklCRSIpKSByZXR1cm47DQoNCiDCoCDCoCDCoCDCoCBpZihpc19tZXRob2QoIlNVQlNDUklCRSIp ICYmICRoZHIoRXZlbnQpPT0ibWVzc2FnZS1zdW1tYXJ5Iikgew0KIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIHJvdXRlKFRPVk9JQ0VNQUlMKTsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAjIHJl dHVybnMgaGVyZSBpZiBubyB2b2ljZW1haWwgc2VydmVyIGlzIGNvbmZpZ3VyZWQNCiDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCBzbF9zZW5kX3JlcGx5KCI0MDQiLCAiTm8gdm9pY2VtYWlsIHNlcnZp Y2UiKTsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBleGl0Ow0KIMKgIMKgIMKgIMKgIH0NCg0K IyFpZmRlZiBXSVRIX1BSRVNFTkNFDQojIWlmZGVmIFdJVEhfTVNHUkVCVUlMRA0KIMKgIMKgIMKg IMKgICMgYXBwbHkgY2hhbmdlcyBpbiBjYXNlIHRoZSByZXF1ZXN0IGhlYWRlcnMgb3IgYm9keSB3 ZXJlIG1vZGlmaWVkDQogwqAgwqAgwqAgwqAgbXNnX2FwcGx5X2NoYW5nZXMoKTsNCiMhZW5kaWYN CiDCoCDCoCDCoCDCoCBpZiAoIXRfbmV3dHJhbigpKSB7DQogwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgc2xfcmVwbHlfZXJyb3IoKTsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBleGl0Ow0KIMKg IMKgIMKgIMKgIH0NCg0KIMKgIMKgIMKgIMKgIGlmKGlzX21ldGhvZCgiUFVCTElTSCIpKSB7DQog wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaGFuZGxlX3B1Ymxpc2goKTsNCiDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCB0X3JlbGVhc2UoKTsNCiDCoCDCoCDCoCDCoCB9IGVsc2UgaWYoaXNfbWV0aG9k KCJTVUJTQ1JJQkUiKSkgew0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGhhbmRsZV9zdWJzY3Jp YmUoKTsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB0X3JlbGVhc2UoKTsNCiDCoCDCoCDCoCDC oCB9DQogwqAgwqAgwqAgwqAgZXhpdDsNCiMhZW5kaWYNCg0KIMKgIMKgIMKgIMKgICMgaWYgcHJl c2VuY2UgZW5hYmxlZCwgdGhpcyBwYXJ0IHdpbGwgbm90IGJlIGV4ZWN1dGVkDQogwqAgwqAgwqAg wqAgaWYgKGlzX21ldGhvZCgiUFVCTElTSCIpIHx8ICRyVT09JG51bGwpIHsNCiDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCBzbF9zZW5kX3JlcGx5KCI0MDQiLCAiTm90IGhlcmUiKTsNCiDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCBleGl0Ow0KIMKgIMKgIMKgIMKgIH0NCiDCoCDCoCDCoCDCoCByZXR1 cm47DQp9DQoNCiMgSVAgYXV0aG9yaXphdGlvbiBhbmQgdXNlciBhdXRoZW50aWNhdGlvbg0Kcm91 dGVbQVVUSF0gew0KIyFpZmRlZiBXSVRIX0FVVEgNCg0KIyFpZmRlZiBXSVRIX0lQQVVUSA0KIMKg IMKgIMKgIMKgIGlmKCghaXNfbWV0aG9kKCJSRUdJU1RFUiIpKSAmJiBhbGxvd19zb3VyY2VfYWRk cmVzcygpKSB7DQogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgIyBzb3VyY2UgSVAgYWxsb3dlZA0K IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldHVybjsNCiDCoCDCoCDCoCDCoCB9DQojIWVuZGlm DQoNCiDCoCDCoCDCoCDCoCBpZiAoaXNfbWV0aG9kKCJSRUdJU1RFUiIpIHx8IGZyb21fdXJpPT1t eXNlbGYpIHsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAjIGF1dGhlbnRpY2F0ZSByZXF1ZXN0 cw0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmICghYXV0aF9jaGVjaygiJGZkIiwgInN1YnNj cmliZXIiLCAiMSIpKSB7DQogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgYXV0 aF9jaGFsbGVuZ2UoIiRmZCIsICIwIik7DQogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgZXhpdDsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB9DQogwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgIyB1c2VyIGF1dGhlbnRpY2F0ZWQgLSByZW1vdmUgYXV0aCBoZWFkZXINCiDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCBpZighaXNfbWV0aG9kKCJSRUdJU1RFUnxQVUJMSVNIIikpDQog wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgY29uc3VtZV9jcmVkZW50aWFscygp Ow0KIMKgIMKgIMKgIMKgIH0NCiDCoCDCoCDCoCDCoCAjIGlmIGNhbGxlciBpcyBub3QgbG9jYWwg c3Vic2NyaWJlciwgdGhlbiBjaGVjayBpZiBpdCBjYWxscw0KIMKgIMKgIMKgIMKgICMgYSBsb2Nh bCBkZXN0aW5hdGlvbiwgb3RoZXJ3aXNlIGRlbnksIG5vdCBhbiBvcGVuIHJlbGF5IGhlcmUNCiDC oCDCoCDCoCDCoCBpZiAoZnJvbV91cmkhPW15c2VsZiAmJiB1cmkhPW15c2VsZikgew0KIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIHNsX3NlbmRfcmVwbHkoIjQwMyIsICJOb3QgcmVsYXlpbmciKTsN CiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBleGl0Ow0KIMKgIMKgIMKgIMKgIH0NCg0KIyFlbHNl DQoNCiDCoCDCoCDCoCDCoCAjIGF1dGhlbnRpY2F0aW9uIG5vdCBlbmFibGVkIC0gZG8gbm90IHJl bGF5IGF0IGFsbCB0byBmb3JlaWduIA0KbmV0d29ya3MNCiDCoCDCoCDCoCDCoCBpZih1cmkhPW15 c2VsZikgew0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHNsX3NlbmRfcmVwbHkoIjQwMyIsICJO b3QgcmVsYXlpbmciKTsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBleGl0Ow0KIMKgIMKgIMKg IMKgIH0NCg0KIyFlbmRpZg0KIMKgIMKgIMKgIMKgIHJldHVybjsNCn0NCg0KIyBDYWxsZXIgTkFU IGRldGVjdGlvbg0Kcm91dGVbTkFUREVURUNUXSB7DQojIWlmZGVmIFdJVEhfTkFUDQogwqAgwqAg wqAgwqAgaWYgKG5hdF91YWNfdGVzdCgiMTkiKSkgew0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IGlmIChpc19tZXRob2QoIlJFR0lTVEVSIikpIHsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCBmaXhfbmF0ZWRfcmVnaXN0ZXIoKTsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCB9IGVsc2Ugew0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmKGlzX2Zp cnN0X2hvcCgpKSB7DQogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgc2V0X2NvbnRhY3RfYWxpYXMoKTsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCB9DQogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfQ0KIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIHNldGZsYWcoRkxUX05BVFMpOw0KIMKgIMKgIMKgIMKgIH0NCiMhZW5kaWYNCiDCoCDC oCDCoCDCoCByZXR1cm47DQp9DQoNCiMgUlRQIHJlbGF5aW5nIG1hbmFnZW1lbnQgYW5kIHNpZ25h bGluZyB1cGRhdGVzIGZvciBOQVQgdHJhdmVyc2FsDQpyb3V0ZVtOQVRNQU5BR0VdIHsNCiMhaWZk ZWYgV0lUSF9OQVQNCiDCoCDCoCDCoCDCoCBpZiAoaXNfcmVxdWVzdCgpKSB7DQogwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgaWYoaGFzX3RvdGFnKCkpIHsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCBpZihjaGVja19yb3V0ZV9wYXJhbSgibmF0PXllcyIpKSB7DQogwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgc2V0YmZsYWcoRkxCX05B VEIpOw0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIH0NCiDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCB9DQogwqAgwqAgwqAgwqAgfQ0KIMKgIMKgIMKgIMKgIGlmICghKGlzZmxh Z3NldChGTFRfTkFUUykgfHwgaXNiZmxhZ3NldChGTEJfTkFUQikpKSByZXR1cm47DQoNCiMhaWZk ZWYgV0lUSF9SVFBFTkdJTkUNCiDCoCDCoCDCoCDCoCBpZihuYXRfdWFjX3Rlc3QoIjgiKSkgew0K IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJ0cGVuZ2luZV9tYW5hZ2UoIlNJUC1zb3VyY2UtYWRk cmVzcyByZXBsYWNlLW9yaWdpbiANCnJlcGxhY2Utc2Vzc2lvbi1jb25uZWN0aW9uIik7DQogwqAg wqAgwqAgwqAgfSBlbHNlIHsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBydHBlbmdpbmVfbWFu YWdlKCJyZXBsYWNlLW9yaWdpbiANCnJlcGxhY2Utc2Vzc2lvbi1jb25uZWN0aW9uIik7DQogwqAg wqAgwqAgwqAgfQ0KIyFlbHNlDQogwqAgwqAgwqAgwqAgaWYobmF0X3VhY190ZXN0KCI4IikpIHsN CiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBydHBwcm94eV9tYW5hZ2UoImNvIik7DQogwqAgwqAg wqAgwqAgfSBlbHNlIHsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBydHBwcm94eV9tYW5hZ2Uo ImNvciIpOw0KIMKgIMKgIMKgIMKgIH0NCiMhZW5kaWYNCg0KIMKgIMKgIMKgIMKgIGlmIChpc19y ZXF1ZXN0KCkpIHsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAoIWhhc190b3RhZygpKSB7 DQogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYodF9pc19icmFuY2hfcm91 dGUoKSkgew0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IGFkZF9ycl9wYXJhbSgiO25hdD15ZXMiKTsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCB9DQogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfQ0KIMKgIMKgIMKgIMKgIH0NCiDC oCDCoCDCoCDCoCBpZiAoaXNfcmVwbHkoKSkgew0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlm KGlzYmZsYWdzZXQoRkxCX05BVEIpKSB7DQogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgaWYoaXNfZmlyc3RfaG9wKCkpDQogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgc2V0X2NvbnRhY3RfYWxpYXMoKTsNCiDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCB9DQogwqAgwqAgwqAgwqAgfQ0KDQogwqAgwqAgwqAgwqAgaWYoaXNiZmxhZ3NldChG TEJfTkFUQikpIHsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAjIG5vIGNvbm5lY3QgbWVzc2Fn ZSBpbiBhIGRpYWxvZyBpbnZvbHZpbmcgTkFUIHRyYXZlcnNhbA0KIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIGlmIChpc19yZXF1ZXN0KCkpIHsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCBpZihoYXNfdG90YWcoKSkgew0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIHNldF9mb3J3YXJkX25vX2Nvbm5lY3QoKTsNCiDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB9DQogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfQ0K IMKgIMKgIMKgIMKgIH0NCiMhZW5kaWYNCiDCoCDCoCDCoCDCoCByZXR1cm47DQp9DQoNCiMgVVJJ IHVwZGF0ZSBmb3IgZGlhbG9nIHJlcXVlc3RzDQpyb3V0ZVtETEdVUkldIHsNCiMhaWZkZWYgV0lU SF9OQVQNCiDCoCDCoCDCoCDCoCBpZighaXNkc3R1cmlzZXQoKSkgew0KIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIGhhbmRsZV9ydXJpX2FsaWFzKCk7DQogwqAgwqAgwqAgwqAgfQ0KIyFlbmRpZg0K IMKgIMKgIMKgIMKgIHJldHVybjsNCn0NCg0KIyBSb3V0aW5nIHRvIGZvcmVpZ24gZG9tYWlucw0K cm91dGVbU0lQT1VUXSB7DQogwqAgwqAgwqAgwqAgaWYgKHVyaT09bXlzZWxmKSByZXR1cm47DQoN CiDCoCDCoCDCoCDCoCBhcHBlbmRfaGYoIlAtSGludDogb3V0Ym91bmRcclxuIik7DQogwqAgwqAg wqAgwqAgcm91dGUoUkVMQVkpOw0KIMKgIMKgIMKgIMKgIGV4aXQ7DQp9DQoNCiMgUFNUTiBHVyBy b3V0aW5nDQpyb3V0ZVtQU1ROXSB7DQojIWlmZGVmIFdJVEhfUFNUTg0KIMKgIMKgIMKgIMKgICMg Y2hlY2sgaWYgUFNUTiBHVyBJUCBpcyBkZWZpbmVkDQogwqAgwqAgwqAgwqAgaWYgKHN0cmVtcHR5 KCRzZWwoY2ZnX2dldC5wc3RuLmd3X2lwKSkpIHsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB4 bG9nKCJTQ1JJUFQ6IFBTVE4gcm91dGluZyBlbmFibGVkIGJ1dCBwc3RuLmd3X2lwIG5vdCANCmRl ZmluZWRcbiIpOw0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldHVybjsNCiDCoCDCoCDCoCDC oCB9DQoNCiDCoCDCoCDCoCDCoCAjIHJvdXRlIHRvIFBTVE4gZGlhbGVkIG51bWJlcnMgc3RhcnRp bmcgd2l0aCAnKycgb3IgJzAwJw0KIMKgIMKgIMKgIMKgICPCoCDCoCDCoChpbnRlcm5hdGlvbmFs IGZvcm1hdCkNCiDCoCDCoCDCoCDCoCAjIC0gdXBkYXRlIHRoZSBjb25kaXRpb24gdG8gbWF0Y2gg eW91ciBkaWFsaW5nIHJ1bGVzIGZvciBQU1ROIA0Kcm91dGluZw0KIMKgIMKgIMKgIMKgIGlmKCEo JHJVPX4iXihcK3wwMClbMS05XVswLTldezMsMjB9JCIpKSByZXR1cm47DQoNCiDCoCDCoCDCoCDC oCAjIG9ubHkgbG9jYWwgdXNlcnMgYWxsb3dlZCB0byBjYWxsDQogwqAgwqAgwqAgwqAgaWYoZnJv bV91cmkhPW15c2VsZikgew0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHNsX3NlbmRfcmVwbHko IjQwMyIsICJOb3QgQWxsb3dlZCIpOw0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGV4aXQ7DQog wqAgwqAgwqAgwqAgfQ0KDQogwqAgwqAgwqAgwqAgIyBub3JtYWxpemUgdGFyZ2V0IG51bWJlciBm b3IgcHN0biBnYXRld2F5DQogwqAgwqAgwqAgwqAgIyAtIGNvbnZlcnQgbGVhZGluZyAwMCB0byAr DQogwqAgwqAgwqAgwqAgaWYgKHN0YXJ0c193aXRoKCIkclUiLCAiMDAiKSkgew0KIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIHN0cmlwKDIpOw0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHByZWZp eCgiKyIpOw0KIMKgIMKgIMKgIMKgIH0NCg0KIMKgIMKgIMKgIMKgIGlmIChzdHJlbXB0eSgkc2Vs KGNmZ19nZXQucHN0bi5nd19wb3J0KSkpIHsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAkcnUg PSAic2lwOiIgKyAkclUgKyAiQCIgKyAkc2VsKGNmZ19nZXQucHN0bi5nd19pcCk7DQogwqAgwqAg wqAgwqAgfSBlbHNlIHsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAkcnUgPSAic2lwOiIgKyAk clUgKyAiQCIgKyAkc2VsKGNmZ19nZXQucHN0bi5nd19pcCkgKyAiOiINCiDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCArICRzZWwoY2Zn X2dldC5wc3RuLmd3X3BvcnQpOw0KIMKgIMKgIMKgIMKgIH0NCg0KIMKgIMKgIMKgIMKgIHJvdXRl KFJFTEFZKTsNCiDCoCDCoCDCoCDCoCBleGl0Ow0KIyFlbmRpZg0KDQogwqAgwqAgwqAgwqAgcmV0 dXJuOw0KfQ0KDQojIEpTT05SUEMgb3ZlciBIVFRQKFMpIHJvdXRpbmcNCiMhaWZkZWYgV0lUSF9K U09OUlBDDQpldmVudF9yb3V0ZVt4aHR0cDpyZXF1ZXN0XSB7DQogwqAgwqAgwqAgwqAgc2V0X3Jl cGx5X2Nsb3NlKCk7DQogwqAgwqAgwqAgwqAgc2V0X3JlcGx5X25vX2Nvbm5lY3QoKTsNCiDCoCDC oCDCoCDCoCBpZihzcmNfaXAhPTEyNy4wLjAuMSkgew0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IHhodHRwX3JlcGx5KCI0MDMiLCAiRm9yYmlkZGVuIiwgInRleHQvaHRtbCIsDQogwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgIjxodG1sPjxib2R5Pk5vdCBh bGxvd2VkIGZyb20gDQokc2k8L2JvZHk+PC9odG1sPiIpOw0KIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIGV4aXQ7DQogwqAgwqAgwqAgwqAgfQ0KIMKgIMKgIMKgIMKgIGlmICgkaHUgPX4gIl4vUlBD Iikgew0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGpzb25ycGNfZGlzcGF0Y2goKTsNCiDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCBleGl0Ow0KIMKgIMKgIMKgIMKgIH0NCg0KIMKgIMKgIMKgIMKg IHhodHRwX3JlcGx5KCIyMDAiLCAiT0siLCAidGV4dC9odG1sIiwNCiDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAiPGh0bWw+PGJvZHk+V3JvbmcgVVJMICRo dTwvYm9keT48L2h0bWw+Iik7DQogwqAgwqAgZXhpdDsNCn0NCiMhZW5kaWYNCg0KIyBSb3V0aW5n IHRvIHZvaWNlbWFpbCBzZXJ2ZXINCnJvdXRlW1RPVk9JQ0VNQUlMXSB7DQojIWlmZGVmIFdJVEhf Vk9JQ0VNQUlMDQogwqAgwqAgwqAgwqAgaWYoIWlzX21ldGhvZCgiSU5WSVRFfFNVQlNDUklCRSIp KSByZXR1cm47DQoNCiDCoCDCoCDCoCDCoCAjIGNoZWNrIGlmIFZvaWNlTWFpbCBzZXJ2ZXIgSVAg aXMgZGVmaW5lZA0KIMKgIMKgIMKgIMKgIGlmIChzdHJlbXB0eSgkc2VsKGNmZ19nZXQudm9pY2Vt YWlsLnNydl9pcCkpKSB7DQogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgeGxvZygiU0NSSVBUOiBW b2ljZU1haWwgcm91dGluZyBlbmFibGVkIGJ1dCBJUCBub3QgDQpkZWZpbmVkXG4iKTsNCiDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCByZXR1cm47DQogwqAgwqAgwqAgwqAgfQ0KIMKgIMKgIMKgIMKg IGlmKGlzX21ldGhvZCgiSU5WSVRFIikpIHsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZigk YXZwKG9leHRlbik9PSRudWxsKSByZXR1cm47DQoNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAk cnUgPSAic2lwOiIgKyAkYXZwKG9leHRlbikgKyAiQCIgKyANCiRzZWwoY2ZnX2dldC52b2ljZW1h aWwuc3J2X2lwKQ0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgICsgIjoiICsgJHNlbChjZmdfZ2V0LnZvaWNlbWFpbC5zcnZfcG9ydCk7DQogwqAgwqAgwqAg wqAgfSBlbHNlIHsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZigkclU9PSRudWxsKSByZXR1 cm47DQoNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAkcnUgPSAic2lwOiIgKyAkclUgKyAiQCIg KyAkc2VsKGNmZ19nZXQudm9pY2VtYWlsLnNydl9pcCkNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCArICI6IiArICRzZWwoY2ZnX2dldC52b2ljZW1haWwu c3J2X3BvcnQpOw0KIMKgIMKgIMKgIMKgIH0NCiDCoCDCoCDCoCDCoCByb3V0ZShSRUxBWSk7DQog wqAgwqAgwqAgwqAgZXhpdDsNCiMhZW5kaWYNCg0KIMKgIMKgIMKgIMKgIHJldHVybjsNCn0NCg0K IyBNYW5hZ2Ugb3V0Z29pbmcgYnJhbmNoZXMNCmJyYW5jaF9yb3V0ZVtNQU5BR0VfQlJBTkNIXSB7 DQogwqAgwqAgwqAgwqAgeGRiZygibmV3IGJyYW5jaCBbJFRfYnJhbmNoX2lkeF0gdG8gJHJ1XG4i KTsNCiDCoCDCoCDCoCDCoCByb3V0ZShOQVRNQU5BR0UpOw0KIMKgIMKgIMKgIMKgIHJldHVybjsN Cn0NCg0KIyBNYW5hZ2UgaW5jb21pbmcgcmVwbGllcw0KcmVwbHlfcm91dGUgew0KIMKgIMKgIMKg IMKgIGlmKCFzYW5pdHlfY2hlY2soIjE3NjA0IiwgIjYiKSkgew0KIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIHhsb2coIk1hbGZvcm1lZCBTSVAgcmVzcG9uc2UgZnJvbSAkc2k6JHNwXG4iKTsNCiDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBkcm9wOw0KIMKgIMKgIMKgIMKgIH0NCiDCoCDCoCDCoCDC oCByZXR1cm47DQp9DQoNCiMgTWFuYWdlIGluY29taW5nIHJlcGxpZXMgaW4gdHJhbnNhY3Rpb24g Y29udGV4dA0Kb25yZXBseV9yb3V0ZVtNQU5BR0VfUkVQTFldIHsNCiDCoCDCoCDCoCDCoCB4ZGJn KCJpbmNvbWluZyByZXBseVxuIik7DQogwqAgwqAgwqAgwqAgaWYoc3RhdHVzPX4iWzEyXVswLTld WzAtOV0iKSB7DQogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcm91dGUoTkFUTUFOQUdFKTsNCiDC oCDCoCDCoCDCoCB9DQogwqAgwqAgwqAgwqAgcmV0dXJuOw0KfQ0KDQojIE1hbmFnZSBmYWlsdXJl IHJvdXRpbmcgY2FzZXMNCmZhaWx1cmVfcm91dGVbTUFOQUdFX0ZBSUxVUkVdIHsNCiDCoCDCoCDC oCDCoCByb3V0ZShOQVRNQU5BR0UpOw0KDQogwqAgwqAgwqAgwqAgaWYgKHRfaXNfY2FuY2VsZWQo KSkgZXhpdDsNCg0KIyFpZmRlZiBXSVRIX0JMT0NLM1hYDQogwqAgwqAgwqAgwqAgIyBibG9jayBj YWxsIHJlZGlyZWN0IGJhc2VkIG9uIDN4eCByZXBsaWVzLg0KIMKgIMKgIMKgIMKgIGlmICh0X2No ZWNrX3N0YXR1cygiM1swLTldWzAtOV0iKSkgew0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHRf cmVwbHkoIjQwNCIsICJOb3QgZm91bmQgQiIpOw0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGV4 aXQ7DQogwqAgwqAgwqAgwqAgfQ0KIyFlbmRpZg0KDQojIWlmZGVmIFdJVEhfQkxPQ0s0MDE0MDcN CiDCoCDCoCDCoCDCoCAjIGJsb2NrIGNhbGwgcmVkaXJlY3QgYmFzZWQgb24gNDAxLCA0MDcgcmVw bGllcy4NCiDCoCDCoCDCoCDCoCBpZiAodF9jaGVja19zdGF0dXMoIjQwMXw0MDciKSkgew0KIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIHRfcmVwbHkoIjQwNCIsICJOb3QgZm91bmQgQyIpOw0KIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIGV4aXQ7DQogwqAgwqAgwqAgwqAgfQ0KIyFlbmRpZg0KDQoj IWlmZGVmIFdJVEhfVk9JQ0VNQUlMDQogwqAgwqAgwqAgwqAgIyBzZXJpYWwgZm9ya2luZw0KIMKg IMKgIMKgIMKgICMgLSByb3V0ZSB0byB2b2ljZW1haWwgb24gYnVzeSBvciBubyBhbnN3ZXIgKHRp bWVvdXQpDQogwqAgwqAgwqAgwqAgaWYgKHRfY2hlY2tfc3RhdHVzKCI0ODZ8NDA4IikpIHsNCiDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAkZHUgPSAkbnVsbDsNCiDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCByb3V0ZShUT1ZPSUNFTUFJTCk7DQogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZXhpdDsN CiDCoCDCoCDCoCDCoCB9DQojIWVuZGlmDQogwqAgwqAgwqAgwqAgcmV0dXJuOw0KfQ0KDQpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkth bWFpbGlvIC0gVXNlcnMgTWFpbGluZyBMaXN0IC0gTm9uIENvbW1lcmNpYWwgRGlzY3Vzc2lvbnMg LS0gc3ItdXNlcnNAbGlzdHMua2FtYWlsaW8ub3JnClRvIHVuc3Vic2NyaWJlIHNlbmQgYW4gZW1h aWwgdG8gc3ItdXNlcnMtbGVhdmVAbGlzdHMua2FtYWlsaW8ub3JnCkltcG9ydGFudDoga2VlcCB0 aGUgbWFpbGluZyBsaXN0IGluIHRoZSByZWNpcGllbnRzLCBkbyBub3QgcmVwbHkgb25seSB0byB0 aGUgc2VuZGVyIQo=