# Name: smd_remote_file v0.43 # Type: Admin/Client side plugin # Allows remote URL files to be handled from the Files tab # Author: Stef Dawson # URL: http://stefdawson.com/ # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjE1OiJzbWRfcmVtb3RlX2ZpbGUiO3M6NjoiYXV0aG9yIjtz OjExOiJTdGVmIERhd3NvbiI7czoxMDoiYXV0aG9yX3VyaSI7czoyMjoiaHR0cDovL3N0ZWZk YXdzb24uY29tLyI7czo3OiJ2ZXJzaW9uIjtzOjQ6IjAuNDMiO3M6MTE6ImRlc2NyaXB0aW9u IjtzOjU2OiJBbGxvd3MgcmVtb3RlIFVSTCBmaWxlcyB0byBiZSBoYW5kbGVkIGZyb20gdGhl IEZpbGVzIHRhYiI7czo0OiJoZWxwIjtzOjE5NTA3OiI8ZGl2IGlkPSJzbWRfaGVscCI+DQoN Cgk8aDEgaWQ9InRvcCI+c21kX3JlbW90ZV9maWxlPC9oMT4NCg0KCTxoMiBpZD0ib3ZlcnZp ZXciPk92ZXJ2aWV3PC9oMj4NCg0KCTxwPlVwbG9hZGluZyBsYXJnZSBmaWxlcyB0aHJvdWdo IFRleHRQYXR0ZXJuJiM4MjE3O3MgRmlsZXMgdGFiIGlzIGhpdCBhbmQgbWlzcyBkZXBlbmRp bmcgb24gdGhlIHNpemUgLyB0eXBlIG9mIGZpbGUsIHRoZSBzZXJ2ZXIgbGltaXRzIGFuZCBz byBvbi4gU29tZXRpbWVzIHlvdSBqdXN0IGRvbiYjODIxNzt0IGhhdmUgdGhlIGJhbmR3aWR0 aCBhdmFpbGFibGUgdG8gaG9zdCBtZWRpYSBjb250ZW50LjwvcD4NCg0KCTxwPlRoaXJkIHBh cnR5IHNpdGVzIHN1Y2ggYXMgZmlsZWRlbi5jb20gb2ZmZXIgdGhlIGFiaWxpdHkgdG8gdXBs b2FkIGZhaXJseSBzaXplYWJsZSBmaWxlcyBhbmQgdGhlbiBmcmVlbHkgaG90bGluayB0byB0 aGVtICh3aXRoaW4gcXVpdGUgZ2VuZXJvdXMgYmFuZHdpZHRoIGxpbWl0cykgc28gdGhleSBj YW4gYmUgc2hhcmVkLiBUYWtlIGFkdmFudGFnZSBvZiB0aGlzIHNlcnZpY2UgYnkgaW50ZWdy YXRpbmcgdGhlIHJlbW90ZSBmaWxlcyBpbnRvIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3Nw YW4+IHdpdGggdGhpcyBwbHVnaW4uPC9wPg0KDQoJPGgyIGlkPSJjb250ZW50cyI+Q29udGVu dHM8L2gyPg0KDQoJPHVsPg0KCQk8bGk+PGEgaHJlZj0iI2ZlYXR1cmVzIj5GZWF0dXJlczwv YT48L2xpPg0KCQk8bGk+PGEgaHJlZj0iI2F1dGhvciI+QXV0aG9yPC9hPjwvbGk+DQoJCTxs aT48YSBocmVmPSIjaW5zdGFsbCI+SW5zdGFsbGF0aW9uIC8gVW5pbnN0YWxsYXRpb248L2E+ PC9saT4NCgkJPGxpPjxhIGhyZWY9IiNwcmVyZXEiPlByZS1yZXF1aXNpdGVzPC9hPjwvbGk+ DQoJCTxsaT48YSBocmVmPSIjZmlsZXN0YWIiPlRoZSBGaWxlcyB0YWI8L2E+PC9saT4NCgkJ PGxpPjxhIGhyZWY9IiNtdWx0aXBsZXMiPk11bHRpcGxlIHBlcnNvbmFsaXRpZXM8L2E+PC9s aT4NCgkJPGxpPjxhIGhyZWY9IiN1c2FnZSI+VGFnIHVzYWdlPC9hPg0KCTx1bD4NCgkJPGxp PjxhIGhyZWY9IiNmZGwiPnNtZF9maWxlX2Rvd25sb2FkX2xpbms8L2E+PC9saT4NCgkJPGxp PjxhIGhyZWY9IiNmZG4iPnNtZF9maWxlX2Rvd25sb2FkX25hbWU8L2E+PC9saT4NCgkJPGxp PjxhIGhyZWY9IiNmZGkiPnNtZF9maWxlX2Rvd25sb2FkX2ltYWdlPC9hPjwvbGk+DQoJPC91 bD48L2xpPg0KCQk8bGk+PGEgaHJlZj0iI2hvd2l0d29ya3MiPkhvdyBpdCB3b3JrczwvYT48 L2xpPg0KCQk8bGk+PGEgaHJlZj0iI2V4YW1wbGVzIj5FeGFtcGxlczwvYT48L2xpPg0KCQk8 bGk+PGEgaHJlZj0iI2NoYW5nZWxvZyI+Q2hhbmdlbG9nPC9hPjwvbGk+DQoJCTxsaT48YSBo cmVmPSIjY3JlZGl0cyI+Q3JlZGl0czwvYT48L2xpPg0KCTwvdWw+DQoNCgk8aDIgaWQ9ImZl YXR1cmVzIj5GZWF0dXJlczwvaDI+DQoNCgk8dWw+DQoJCTxsaT5NYW5hZ2UgbGlua3MgdG8g dGhpcmQgcGFydHkgZmlsZXMgZGlyZWN0bHkgZnJvbSB0aGUgPHNwYW4gY2xhc3M9ImNhcHMi PlRYUDwvc3Bhbj4gRmlsZXMgdGFiLCBhcyBpZiB0aGV5IHdlcmUgbmF0aXZlbHkgaW5zaWRl IFRleHRQYXR0ZXJuLiBDYXRlZ29yeSAvIGRlc2NyaXB0aW9uIC8gc3RhdHVzIC8gZG93bmxv YWQgY291bnQgYWxsIHN1cHBvcnRlZDwvbGk+DQoJCTxsaT5Vc2Ugc3RhbmRhcmQgPGNvZGU+ Jmx0O3R4cDpmaWxlX2Rvd25sb2FkX2xpc3QgLyZndDs8L2NvZGU+IHRhZ3MgdG8gYnVpbGQg bGlzdHMgb2YgbG9jYWwgYW5kIHJlbW90ZSBmaWxlczwvbGk+DQoJCTxsaT5UaHJlZSBuZXcg dGFnczogPGNvZGU+Jmx0O3R4cDpzbWRfZmlsZV9kb3dubG9hZF9saW5rJmd0OzwvY29kZT4g Zm9yIGNob29zaW5nIHNwZWNpZmljIHJlbW90ZSBmaWxlcywgPGNvZGU+Jmx0O3R4cDpzbWRf ZmlsZV9kb3dubG9hZF9uYW1lJmd0OzwvY29kZT4gZm9yIHNob3dpbmcgcmVtb3RlIGZpbGUg bmFtZXMgYW5kIDxjb2RlPiZsdDt0eHA6c21kX2ZpbGVfZG93bmxvYWRfaW1hZ2UmZ3Q7PC9j b2RlPiBmb3Igc2hvd2luZyBpbWFnZXMgYmFzZWQgb24gdGhlIGZpbGVuYW1lIG9mIHRoZSBk b3dubG9hZDwvbGk+DQoJCTxsaT5VcGxvYWQgaWRlbnRpY2FsIGZpbGVzIHRvIG1vcmUgdGhh biBvbmUgcGxhY2Ugb24gdGhlIHdlYiBhbmQgdGVsbCA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQ PC9zcGFuPiB0aGUgdmFyaW91cyBhbHRlcm5hdGl2ZXMuIDxjb2RlPmZpbGVfZG93bmxvYWRf bGluazwvY29kZT4gYW5kIDxjb2RlPnNtZF9maWxlX2Rvd25sb2FkX2xpbms8L2NvZGU+IHdp bGwgY2hvb3NlIGEgcmFuZG9tIGxvY2F0aW9uIHRvIGhlbHAgbG9hZC1iYWxhbmNlIHlvdXIg YXZhaWxhYmxlIGJhbmR3aWR0aDwvbGk+DQoJCTxsaT5ObyBtb2RpZmljYXRpb25zIHRvIHRo ZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBkYXRhYmFzZToganVzdCBhIGJlYXV0 aWZ1bCBjaGVhdCBzdWdnZXN0ZWQgYnkgcnV1ZCAodGhhbmtzISk8L2xpPg0KCTwvdWw+DQoN Cgk8aDIgaWQ9ImF1dGhvciI+QXV0aG9yPC9oMj4NCg0KCTxwPjxhIGhyZWY9Imh0dHA6Ly9z dGVmZGF3c29uLmNvbS9jb21tZW50Rm9ybSI+U3RlZiBEYXdzb248L2E+LiBGb3Igb3RoZXIg c29mdHdhcmUgYnkgbWUsIG9yIHRvIG1ha2UgYSBkb25hdGlvbiwgc2VlIHRoZSA8YSBocmVm PSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vc3ciPnNvZnR3YXJlIHBhZ2U8L2E+LjwvcD4NCg0K CTxoMiBpZD0iaW5zdGFsbCI+SW5zdGFsbGF0aW9uIGFuZCBVbmluc3RhbGxhdGlvbjwvaDI+ DQoNCgk8cCBjbGFzcz0icmVxdWlyZWQiPlJlcXVpcmVzIFRleHRQYXR0ZXJuIHY0LjAuNiBv ciBncmVhdGVyIGluc3RhbGxlZC48L3A+DQoNCgk8cD5Eb3dubG9hZCB0aGUgcGx1Z2luIGZy b20gZWl0aGVyIDxhIGhyZWY9Imh0dHA6Ly90ZXh0cGF0dGVybi5vcmcvcGx1Z2lucy85MDEv c21kX3JlbW90ZV9maWxlIj50ZXh0cGF0dGVybi5vcmc8L2E+LCBvciB0aGUgPGEgaHJlZj0i aHR0cDovL3N0ZWZkYXdzb24uY29tL3N3Ij5zb2Z0d2FyZSBwYWdlPC9hPiwgcGFzdGUgdGhl IGNvZGUgaW50byB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gQWRtaW4gLSZn dDsgUGx1Z2lucyBwYW5lLCBpbnN0YWxsIGFuZCBlbmFibGUgdGhlIHBsdWdpbi4gVmlzaXQg dGhlIDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBo cD9pZD0yNDY3MyI+Zm9ydW0gdGhyZWFkPC9hPiBmb3IgbW9yZSBpbmZvIG9yIHRvIHJlcG9y dCBvbiB0aGUgc3VjY2VzcyBvciBvdGhlcndpc2Ugb2YgdGhlIHBsdWdpbi48L3A+DQoNCgk8 cD5UbyByZW1vdmUgdGhlIHBsdWdpbiwgc2ltcGx5IGRlbGV0ZSBpdCBmcm9tIHRoZSBBZG1p bi0mZ3Q7UGx1Z2lucyB0YWIuPC9wPg0KDQoJPGgyIGlkPSJwcmVyZXEiPlByZS1yZXF1aXNp dGVzPC9oMj4NCg0KCTxwPkNob29zZSBhbnkgdGhpcmQgcGFydHkgZmlsZSBob3N0ZXIgdGhh dCBvZmZlcnMgZnJlZSBkb3dubG9hZHMgb2YgeW91ciBzdHVmZi4gQ3JlYXRlIGFuIGFjY291 bnQsIHVwbG9hZCBmaWxlcyB0byBpdCwgYW5kIG1ha2Ugc3VyZSB5b3Uga25vdyBob3cgdG8g Z2V0IERpcmVjdCBMaW5rIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+cyBmcm9tIHRo ZWlyIGludGVyZmFjZSAoaXQmIzgyMTc7cyB1c3VhbGx5IGZhaXJseSBvYnZpb3VzKS4gWW91 JiM4MjE3O2xsIG5lZWQgdGhlc2UgdG8gcGFzdGUgaW50byBUZXh0UGF0dGVybi48L3A+DQoN Cgk8cD5UaGVuIHNpbXBseSBob3Agb3ZlciB0byB0aGUgPGEgaHJlZj0iI2ZpbGVzdGFiIj5G aWxlcyB0YWI8L2E+IHRvIGdldCBzdGFydGVkLjwvcD4NCg0KCTxoMiBpZD0iZmlsZXN0YWIi PlRoZSBGaWxlcyB0YWI8L2gyPg0KDQoJPHA+VGhlIHBsdWdpbiBhZGRzIG9uZSBpbnB1dCBm b3JtIGZpZWxkIHRvIHRoZSBGaWxlcyB0YWIuIEZyb20geW91ciB0aGlyZCBwYXJ0eSBzaXRl KHMpIG9mIGNob2ljZSwgc2ltcGx5IGNvcHkgYSB3ZWItZnJpZW5kbHkgKGkuZS4gdXJsLWVu Y29kZWQpIGhvdGxpbmsgYW5kIHBhc3RlIGl0IGludG8gdGhlIDxzcGFuIGNsYXNzPSJjYXBz Ij5VUkw8L3NwYW4+IGJveC4gWW91IGNhbiB1c3VhbGx5IHRlbGwgaWYgdGhlIGxpbmsgaXMg dXJsLWVuY29kZWQgYmVjYXVzZSBpdCYjODIxNztsbCBwcm9iYWJseSBoYXZlIDxjb2RlPiUy MDwvY29kZT4gaW4gcGxhY2Ugb2YgYW55IHNwYWNlcyBpbiB0aGUgZmlsZW5hbWUuIFRoZSBk aXJlY3RvcnkgcGFydCBpcywgaG93ZXZlciwgPGVtPm5vdDwvZW0+IHVzdWFsbHkgZW5jb2Rl ZCAoaS5lLiBhbnkgZm9yd2FyZCBzbGFzaGVzIGFuZCBjb2xvbnMgZXRjIHJlbWFpbikuPC9w Pg0KDQoJPHA+QSB0eXBpY2FsIGZpbGUgbWlnaHQgbG9vayBsaWtlIHRoaXM6PC9wPg0KDQo8 cHJlPmh0dHA6Ly93d3cuZmlsZWRlbi5jb20vZmlsZXMvMjAwNy8xMS8xLw0KICAgICAxMjM0 NTY3L0hlcmUlMjBpcyUyMHNvbWUlMjBtdXNpYy5tcDMNCjwvcHJlPg0KDQoJPHA+VGhlIGxp bmsgbXVzdCBiZSBhbiBhYnNvbHV0ZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiwg YmVnaW5uaW5nIDxjb2RlPmh0dHA6Ly88L2NvZGU+LiBPbmNlIHlvdSBoYXZlIHBhc3RlZCBp dCBpbiwgaGl0IFVwbG9hZCBuZXh0IHRvIHRoZSBib3ggYW5kIGEgbmV3IHNwZWNpYWwgJiM4 MjE2O2xpbmsmIzgyMTc7IGZpbGUgd2lsbCBiZSBjcmVhdGVkIGluIDxzcGFuIGNsYXNzPSJj YXBzIj5UWFA8L3NwYW4+LiBJdCB0YWtlcyBvbiB0aGUgZmlsZW5hbWUgZXhhY3RseSBhcyBp dCBhcHBlYXJzIGluIHlvdXIgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gKHdpdGgg PGNvZGU+Lmxpbms8L2NvZGU+IGFkZGVkKS4gU28gaW4gdGhlIGV4YW1wbGUgYWJvdmUsIGEg bmV3IGZpbGUgY2FsbGVkIDxjb2RlPkhlcmUgaXMgc29tZSBtdXNpYy5tcDMubGluazwvY29k ZT4gd2lsbCBiZSBtYWRlIGluIHlvdXIgc3RhbmRhcmQgPHNwYW4gY2xhc3M9ImNhcHMiPlRY UDwvc3Bhbj4gZmlsZXMgZGlyZWN0b3J5LjwvcD4NCg0KCTxwPlRoZSBuZXcgJiM4MjIwO2Zp bGUmIzgyMjE7IHdpbGwgYXBwZWFyIGluIHRoZSBsaXN0IGp1c3QgbGlrZSBhbnkgcmVhbCBm aWxlIGluIFRleHRQYXR0ZXJuLiBZb3UgY2FuIGVkaXQgaXQgdG8gYWRkIGEgZGVzY3JpcHRp b24sIGNhdGVnb3J5LCBzZXQgaXRzIHN0YXR1czogZXZlcnl0aGluZyB5b3UgY2FuIGRvIHdp dGggYSBjb252ZW50aW9uYWwgZmlsZS4gSnVzdCBkb24mIzgyMTc7dCByZW5hbWUgaXQhPC9w Pg0KDQoJPGgyIGlkPSJtdWx0aXBsZXMiPk11bHRpcGxlIHBlcnNvbmFsaXRpZXM8L2gyPg0K DQoJPHA+VGhpcmQgcGFydHkgc2l0ZXMgZG9uJiM4MjE3O3QgZ2l2ZSB5b3Ugc29tZXRoaW5n IGZvciBub3RoaW5nOyB0aGV5IG5vcm1hbGx5IGhhdmUgYSBiYW5kd2lkdGggY2FwLCBqdXN0 IGxpa2UgeW91ciB3ZWIgaG9zdGVyIHByb2JhYmx5IGRvZXMuIElmIHlvdSB3YW50IHRvIGRp c3RyaWJ1dGUgeW91ciBtdXNpYyBvciBsYXRlc3QgdmlkZW8sIGEgZmV3IHRob3VzYW5kIGhp dHMgcGVyIG1vbnRoIGFuZCB5b3VyIGJhbmR3aWR0aCBpcyBnb25lLjwvcD4NCg0KCTxwPlNv IHNwcmVhZCB0aGUgbG9hZCBhcm91bmQgdGhlIEludGVybmV0LiBHZXQgYWNjb3VudHMgYXQg dmFyaW91cyB0aGlyZCBwYXJ0eSBzaXRlcyBhbmQgdXBsb2FkIGV4YWN0bHkgdGhlIHNhbWUg ZmlsZSAobWFrZSBzdXJlIHRoZSBmaWxlbmFtZXMgYXJlIGlkZW50aWNhbCAmIzgyMTE7IGlu Y2x1ZGluZyBjYVNlIFNlbnNJVGl2SXRZKS4gVGhlbiBqdXN0IHBhc3RlIHRoZSA8c3BhbiBj bGFzcz0iY2FwcyI+VVJMPC9zcGFuPnMgaW50byB0aGUgdXBsb2FkIGJveDogc21kX3JlbW90 ZV9maWxlIHdpbGwgb25seSBtYWludGFpbiBvbmUgcGh5c2ljYWwgZmlsZSB3aXRoaW4gPHNw YW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gYnV0IHdpbGwgaG9sZCBkZXRhaWxzIG9mIHlv dXIgb3RoZXIgY29waWVzIGZvciB5b3UuIFVzaW5nIGVpdGhlciB0aGUgc3RhbmRhcmQgPGNv ZGU+ZmlsZV9kb3dubG9hZF9saW5rPC9jb2RlPiBvciB0aGUgbmV3IDxhIGhyZWY9IiNmZGwi PnNtZF9maWxlX2Rvd25sb2FkX2xpbms8L2E+IHRhZyB3aWxsIHJhbmRvbWx5IHBpY2sgb25l IG9mIHlvdXIgZG93bmxvYWQgbG9jYXRpb25zIGFzc29jaWF0ZWQgd2l0aCBlYWNoIGZpbGUg ZXZlcnkgdGltZSB0aGUgcGFnZSBsb2Fkcywgc3ByZWFkaW5nIHlvdXIgYmFuZHdpZHRoIHVz YWdlLjwvcD4NCg0KCTxwPldoZW4geW91IHNlbGVjdCBhIC5saW5rIGZpbGUgZm9yIGVkaXRp bmcgZnJvbSB0aGUgRmlsZXMgdGFiLCB5b3Ugd2lsbCBzZWUgYSBkaWFsb2cgYm94IGF0IHRo ZSBib3R0b20gZm9yIGFkZGluZyBtb3JlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+ cyB0byB5b3VyIGZpbGUuIFBhc3RlIHRoZSB1cmwtZW5jb2RlZCBkaXJlY3QgbGluayBmaWxl IG5hbWUgaW50byB0aGUgYm94IGFuZCBoaXQgVXBsb2FkIHRvIGFwcGVuZCBpdCB0byB0aGUg ZXhpc3Rpbmcgb25lLiBJZiB5b3UgY2hlY2sgdGhlIE92ZXJ3cml0ZSBib3ggdGhlbiB0aGUg PHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4geW91IHN1cHBseSB3aWxsIG92ZXJ3cml0 ZSA8ZW0+YWxsPC9lbT4gPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj5zIGN1cnJlbnRs eSBkZWZpbmVkIGluIHRoZSBmaWxlLiBJdCBkb2VzIHRoaXMgd2l0aG91dCB3YXJuaW5nLCBz byBjb25zaWRlciB0aGlzIGEgd2FybmluZyE8L3A+DQoNCgk8aDIgaWQ9InVzYWdlIj5UYWcg dXNhZ2U8L2gyPg0KDQoJPGgzIGNsYXNzPSJ0YWcgIiBpZD0iZmRsIj5zbWRfZmlsZV9kb3du bG9hZF9saW5rPC9oMz4NCg0KCTxwIGNsYXNzPSJ0YWctc3VtbWFyeSI+QW4gZXhhY3QgZHJv cC1pbiByZXBsYWNlbWVudCBmb3IgdGhlIHN0YW5kYXJkIDxjb2RlPiZsdDt0eHA6ZmlsZV9k b3dubG9hZF9saW5rJmd0OzwvY29kZT4gdGFnLCB3aXRoIHR3byBleHRyYSBvcHRpb25zLiBV c2UgdGhlIHRhZyBpbiBleGFjdGx5IHRoZSBzYW1lIHdheSBhcyB5b3Ugd291bGQgbm9ybWFs bHkuIFRoZSBvbmx5IHN1YnRsZSBkaWZmZXJlbmNlIGluIHRoaXMgdGFnJiM4MjE3O3MgZGVm YXVsdCBiZWhhdmlvdXIgaXMgdGhhdCBpdCB3aWxsIHJlbW92ZSBhbnkgPGNvZGU+Lmxpbms8 L2NvZGU+IG9uIHRoZSBlbmQgb2YgdGhlIGZpbGUgbmFtZXMgaW4gdGhlIHB1YmxpYyBpbnRl cmZhY2UgKHRoZSA8Y29kZT4ubGluazwvY29kZT4gc3VmZml4ZXMgYWx3YXlzIHJlbWFpbiB2 aXNpYmxlIGluIHRoZSBGaWxlcyB0YWIgdG8gcmVtaW5kIHlvdSkuIFRoZSA8Y29kZT4ubGlu azwvY29kZT4gY2FuIGJlIHJlaW5zdGF0ZWQgd2l0aCB0aGUgPGEgaHJlZj0iI2ZkbHNob3ds aW5rIj5zaG93X2xpbms8L2E+IGF0dHJpYnV0ZS48L3A+DQoNCgk8aDQgY2xhc3M9ImF0dHMg Ij5BdHRyaWJ1dGVzPC9oND4NCg0KCTx1bD4NCgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFt ZSI+aWQ8L3NwYW4+IDogdGhlIElEIG9mIHRoZSBmaWxlIHlvdSB3YW50IHRvIGxpbmsgdG8u IElmIGxlZnQgYmxhbmssIGl0IGNhbiBiZSBzdXBwbGllZCBmcm9tIHdoYXRldmVyIGlzIGJl dHdlZW4gdGhlIG9wZW5pbmcgYW5kIGNsb3NpbmcgdGFnPC9saT4NCgkJPGxpPjxzcGFuIGNs YXNzPSJhdHQtbmFtZSI+ZmlsZW5hbWU8L3NwYW4+IDogdGhlIGZpbGVuYW1lIG9mIHRoZSBm aWxlIHlvdSB3YW50IHRvIGxpbmsgdG8uIElmIGxlZnQgYmxhbmssIGl0IGNhbiBiZSBzdXBw bGllZCBmcm9tIHdoYXRldmVyIGlzIGJldHdlZW4gdGhlIG9wZW5pbmcgYW5kIGNsb3Npbmcg dGFnLiBJZiBib3RoIGZpbGVuYW1lIGFuZCBJRCBhcmUgc3BlY2lmaWVkLCBJRCB0YWtlcyBw cmVjZWRlbmNlPC9saT4NCgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+Y2hvb3NlPC9z cGFuPiA6IGdvdmVybnMgaG93IHRvIGNob29zZSB3aGljaCByZW1vdGUgPHNwYW4gY2xhc3M9 ImNhcHMiPlVSTDwvc3Bhbj4gdG8gc2VydmUuIElmIHVzaW5nIHRoZSBzdGFuZGFyZCA8Y29k ZT5maWxlX2Rvd25sb2FkX2xpbms8L2NvZGU+IHRhZyAob3IgYnkgZGVmYXVsdCBpbiB0aGlz IHRhZyksIGl0IGlzIHNldCB0byA8Y29kZT4wPC9jb2RlPiB3aGljaCBtZWFucyAmIzgyMTY7 cmFuZG9tbHkgcGljayBhIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IGZyb20gdGhv c2UgSSYjODIxNzt2ZSB1cGxvYWRlZCBmb3IgdGhpcyBmaWxlJiM4MjE3OyAod2hlcmUgd291 bGQgYW4gc21kXyBwbHVnaW4gYmUgd2l0aG91dCBhIHJhbmRvbSBvcHRpb24sIGVoPyEpLiBZ b3UgY2FuIGFsc28gc3BlY2lmeSBhIGhpZ2hlciBudW1iZXIgdG8gcGljayB0aGUgPHNwYW4g Y2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gZnJvbSB0aGF0IHBhcnRpY3VsYXIgc2xvdC4gU28g PGNvZGU+Y2hvb3NlPSZxdW90OzEmcXVvdDs8L2NvZGU+IHdpbGwgYWx3YXlzIHNlbGVjdCB0 aGUgMXN0IGZpbGUgeW91IHVwbG9hZGVkIGFuZCBkZWxpdmVyIHRoYXQ7IDxjb2RlPmNob29z ZT0mcXVvdDsyJnF1b3Q7PC9jb2RlPiB0aGUgc2Vjb25kOyBhbmQgc28gb24uIElmIHlvdSBz cGVjaWZ5IGEgbnVtYmVyIGJpZ2dlciB0aGFuIHRoZSBudW1iZXIgb2YgPHNwYW4gY2xhc3M9 ImNhcHMiPlVSTDwvc3Bhbj5zIHN0b3JlZCBhZ2FpbnN0IGEgZmlsZSwgaXQgcGlja3MgdGhl IGZpcnN0IG9uZSB5b3UgdXBsb2FkZWQuPC9saT4NCgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQt bmFtZSI+c2hvd19saW5rPC9zcGFuPiA6IHNldCB0byAwIGJ5IGRlZmF1bHQsIHdoaWNoIGhp ZGVzIHRoZSA8Y29kZT4ubGluazwvY29kZT4gb24gdGhlIGVuZCBvZiA8c3BhbiBjbGFzcz0i Y2FwcyI+VVJMPC9zcGFuPnMuIFNldCBpdCB0byAxIHRvIG1ha2UgdGhlIHRhZyBiZWhhdmUg bGlrZSB0aGUgYnVpbHQtaW4gPGNvZGU+ZmlsZV9kb3dubG9hZF9saW5rPC9jb2RlPjwvbGk+ DQoJPC91bD4NCg0KCTxoMyBjbGFzcz0idGFnICIgaWQ9ImZkbiI+c21kX2ZpbGVfZG93bmxv YWRfbmFtZTwvaDM+DQoNCgk8cCBjbGFzcz0idGFnLXN1bW1hcnkiPkFuIGV4YWN0IGRyb3At aW4gcmVwbGFjZW1lbnQgZm9yIHRoZSBzdGFuZGFyZCA8Y29kZT4mbHQ7dHhwOmZpbGVfZG93 bmxvYWRfbmFtZSZndDs8L2NvZGU+IHRhZywgYnV0IHdpdGggb25lIGF0dHJpYnV0ZS4gVGhp cyB0YWcmIzgyMTc7cyBkZWZhdWx0IGJlaGF2aW91ciB3aWxsIHJlbW92ZSBhbnkgPGNvZGU+ Lmxpbms8L2NvZGU+IG9uIHRoZSBlbmQgb2YgZmlsZSBuYW1lcy48L3A+DQoNCgk8aDQgY2xh c3M9ImF0dHMgIj5BdHRyaWJ1dGVzPC9oND4NCg0KCTx1bD4NCgkJPGxpPjxzcGFuIGNsYXNz PSJhdHQtbmFtZSI+c2hvd19saW5rPC9zcGFuPiA6IHNldCB0byAwIGJ5IGRlZmF1bHQsIHdo aWNoIGhpZGVzIHRoZSA8Y29kZT4ubGluazwvY29kZT4gb24gdGhlIGVuZCBvZiBmaWxlIG5h bWVzLiBTZXQgaXQgdG8gMSB0byBtYWtlIHRoZSB0YWcgYmVoYXZlIGxpa2UgdGhlIGJ1aWx0 LWluIDxjb2RlPmZpbGVfZG93bmxvYWRfbmFtZTwvY29kZT48L2xpPg0KCTwvdWw+DQoNCgk8 aDMgY2xhc3M9InRhZyAiIGlkPSJmZGkiPnNtZF9maWxlX2Rvd25sb2FkX2ltYWdlPC9oMz4N Cg0KCTxwIGNsYXNzPSJ0YWctc3VtbWFyeSI+V2hlbiBsaW5raW5nIHRvIGV4dGVybmFsIGNv bnRlbnQgKGVzcGVjaWFsbHkgbWVkaWEgZmlsZXMpIGl0IGlzIG9mdGVuIHVzZWZ1bCB0byBt YWtlIGEgbWluaSBpbWFnZSB0byBnbyB3aXRoIGl0LCBzdWNoIGFzIGEgc3RpbGwgZnJvbSBh IG1vdmllIG9yIHNvbWUgYXJ0d29yayBmb3IgYW4gbXAzIHRyYWNrLiBZb3UgY2FuIG9mIGNv dXJzZSBlbWJlZCBhIDxjb2RlPiZsdDt0eHA6aW1hZ2UmZ3Q7PC9jb2RlPiB0YWcgaW4geW91 ciBkb3dubG9hZCBmb3JtLCBidXQgdGhhdCB3aWxsIGdpdmUgYSBzdGF0aWMgaW1hZ2UgZm9y IGVhY2ggZmlsZS4gVGhpcyB0YWcgY2FuIGJlIHVzZWQgdG8gZGlzcGxheSBpbWFnZXMgdGhh dCB2YXJ5IHdpdGggdGhlIGZpbGVuYW1lIG9mIHRoZSByZW1vdGUgKG9yIGxvY2FsIG9mIGNv dXJzZSkgZmlsZS48L3A+DQoNCgk8cD5UbyB1c2UgaXQsIGp1c3QgdXBsb2FkIGFuIGltYWdl IChieSBkZWZhdWx0IGEganBnKSB2aWEgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4m IzgyMTc7cyBJbWFnZXMgdGFiIGFuZCBnaXZlIGl0IHRoZSBleGFjdCBzYW1lIGZpbGVuYW1l IGFzIHRoZSByZW1vdGUgZmlsZSBpdCByZXByZXNlbnRzLCBwbHVzIGl0cyBub3JtYWwgaW1h Z2UgZmlsZSBleHRlbnNpb24uIGkuZS4gaWYgeW91ciByZW1vdGUgZmlsZSB3YXMgPGNvZGU+ TWFuIGFuZCBib3kubXBnPC9jb2RlPiB5b3Ugd291bGQgdXBsb2FkIGFuIGltYWdlIGFuZCBu YW1lIGl0IDxjb2RlPk1hbiBhbmQgYm95Lm1wZy5qcGc8L2NvZGU+LiBEbyB0aGlzIGZvciBl YWNoIGZpbGUgYW5kIHRoZW4gdXNlIHRoaXMgdGFnIHRvIGRpc3BsYXkgdGhlbS48L3A+DQoN Cgk8cD5CeSBkZWZhdWx0LCBpZiBhbnkgaW1hZ2UgZG9lc24mIzgyMTc7dCBleGlzdCwgdGhl IHRhZyBvdXRwdXRzIHRoZSBpbWFnZSBmaWxlbmFtZSBpbnN0ZWFkIChpZiB1c2luZyB0aGUg PGNvZGU+ZmlsZW5hbWU8L2NvZGU+KSBvciB0aGUgaWQgKGlmIHVzaW5nIHRoZSA8Y29kZT5p ZDwvY29kZT4pLiBUaGlzIGJlaGF2aW91ciBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHRoZSA8 Y29kZT5pZm1pc3Npbmc8L2NvZGU+IG9wdGlvbi48L3A+DQoNCgk8aDQgY2xhc3M9ImF0dHMg Ij5BdHRyaWJ1dGVzPC9oND4NCg0KCTx1bD4NCgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFt ZSI+aWQ8L3NwYW4+IDogdGhlIElEIG9mIGFuIGltYWdlIHRvIGRpc3BsYXk8L2xpPg0KCQk8 bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj5maWxlbmFtZTwvc3Bhbj4gOiB0aGUgZmlsZW5h bWUgb2YgYW4gaW1hZ2UgdG8gZGlzcGxheS4gSWYgYm90aCBmaWxlbmFtZSBhbmQgSUQgYXJl IHNwZWNpZmllZCwgSUQgdGFrZXMgcHJlY2VkZW5jZS4gTm90ZSB0aGF0IGluIHRoaXMgYW5k IDxjb2RlPmlkPC9jb2RlPiBtb2RlcywgdGhlIHRhZyBpcyBlc3NlbnRpYWxseSB0aGUgc2Ft ZSBhcyA8Y29kZT4mbHQ7dHhwOmltYWdlJmd0OzwvY29kZT4uIFRoZSBleGNlcHRpb24gaXMg dGhhdCB5b3UgZG8gbm90IGhhdmUgdG8gc3BlY2lmeSB0aGUgaW1hZ2UgZmlsZSA8Y29kZT5l eHRlbnNpb248L2NvZGU+LCBhcyBpdCBkb2VzIHRoYXQgZm9yIHlvdSBieSBkZWZhdWx0IGlm IHlvdSB1c2UgPHNwYW4gY2xhc3M9ImNhcHMiPkpQRzwvc3Bhbj5zIGFuZCB5b3UgY2FuIHNw ZWNpZnkgdGh1bWJuYWlscyBpbnN0ZWFkIHVzaW5nIDxjb2RlPnRodW1iPC9jb2RlPjwvbGk+ DQoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPmV4dGVuc2lvbjwvc3Bhbj4gOiBzYXZl cyB5b3UgaGF2aW5nIHRvIHNwZWNpZnkgdGhlIGZpbGUgZXh0ZW5zaW9uIGluIHRoZSA8Y29k ZT5maWxlbmFtZTwvY29kZT4gcGFyYW1ldGVyLiBFbnRlciBpdCBoZXJlIDxlbT53aXRob3V0 PC9lbT4gdGhlIGRvdC4gQnkgZGVmYXVsdCBpdCBpcyBzZXQgdG8gPGNvZGU+ZXh0ZW5zaW9u PSZxdW90O2pwZyZxdW90OzwvY29kZT48L2xpPg0KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1u YW1lIj50aHVtYjwvc3Bhbj4gOiBzZXQgdG8gMCBieSBkZWZhdWx0LCB3aGljaCBtZWFucyB1 c2UgdGhlIGZ1bGwgc2l6ZSBpbWFnZS4gSWYgeW91IGhhdmUgY3JlYXRlZCB0aHVtYm5haWxz IHlvdSBtYXkgdXNlIDxjb2RlPnRodW1iPSZxdW90OzEmcXVvdDs8L2NvZGU+IHRvIHVzZSB0 aG9zZSBpbnN0ZWFkPC9saT4NCgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+aWZtaXNz aW5nPC9zcGFuPiA6IHdoZW4gYW4gaW1hZ2UgZmlsZSBpcyBtaXNzaW5nLCB0aGlzIG9wdGlv biYjODIxNztzIGRlZmF1bHQgc2V0dGluZyBvZiA8Y29kZT5pZm1pc3Npbmc9JnF1b3Q7P3Jl ZiZxdW90OzwvY29kZT4gd2lsbCBkaXNwbGF5IGVpdGhlciB0aGUgaW1hZ2UgZmlsZW5hbWUg b3IgaXRzIElEIGlmIGl0IHdhcyB1c2VkLiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHNwZWNp ZnkgYSBkZWRpY2F0ZWQgJiM4MjE2O25vIHBpYyYjODIxNzsgaW1hZ2UgYnkgdXBsb2FkaW5n IG9uZSBhbmQgdXNpbmcgdGhlIHNwZWNpYWwgY29kZSA8Y29kZT5pZm1pc3Npbmc9JnF1b3Q7 P2ltYWdlOklEX29yX25hbWUmcXVvdDs8L2NvZGU+IChlLmcuIDxjb2RlPmlmbWlzc2luZz0m cXVvdDs/aW1hZ2U6MzImcXVvdDs8L2NvZGU+IG9yIDxjb2RlPmlmbWlzc2luZz0mcXVvdDs/ aW1hZ2U6Tm9QaWMuanBnJnF1b3Q7PC9jb2RlPikuIElmIG5vdCB1c2luZyB0aGUgc3BlY2lh bCBjb2RlcywgcHV0IGFueSB0ZXh0IHlvdSBsaWtlIGhlcmUsIGZvciBleGFtcGxlIDxjb2Rl PmlmbWlzc2luZz0mcXVvdDtObyBpbWFnZSB5ZXQmcXVvdDs8L2NvZGU+LiBVc2UgPGNvZGU+ aWZtaXNzaW5nPSZxdW90OyZxdW90OzwvY29kZT4gdG8gb3V0cHV0IG5vdGhpbmcgaW4gdGhl IGV2ZW50IG9mIGEgbWlzc2luZyBpbWFnZTwvbGk+DQoJCTxsaT48c3BhbiBjbGFzcz0iYXR0 LW5hbWUiPndyYXB0YWc8L3NwYW4+IDogdGhlIHRhZyB0byB3cmFwIGFyb3VuZCB0aGUgb3V0 c2lkZSBvZiB0aGUgaW1hZ2UuIFNwZWNpZnkgaXQgd2l0aCBubyBhbmdsZSBtYXJrZXJzLCBl LmcuIDxjb2RlPndyYXB0YWc9JnF1b3Q7cCZxdW90OzwvY29kZT4uIERlZmF1bHRzIHRvIGVt cHR5IChpLmUuIG5vIHdyYXB0YWcpPC9saT4NCgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFt ZSI+Y2xhc3M8L3NwYW4+IDogdGhlIGNsYXNzIG5hbWUgdG8gYXBwbHkgdG8gdGhlIGltYWdl LiBJZiB1c2luZyA8Y29kZT53cmFwdGFnPC9jb2RlPiB0aGUgY2xhc3MgaXMgYXBwbGllZCB0 byB0aGUgc3Vycm91bmRpbmcgdGFnLiBJZiBpdCBpcyBvbWl0dGVkIHRoZSBjbGFzcyBpcyBh cHBsaWVkIGRpcmVjdGx5IHRvIHRoZSBpbWFnZS4gRGVmYXVsdDogZW1wdHkgKGkuZS4gbm8g Y2xhc3MpPC9saT4NCgk8L3VsPg0KDQoJPGgyIGlkPSJob3dpdHdvcmtzIj5Ib3cgaXQgd29y a3M8L2gyPg0KDQoJPHA+Rm9yIHRoZSBjdXJpb3VzLCB0aGUgcGx1Z2luIGp1c3QgY3JlYXRl cyBhIGR1bW15IHRleHQgZmlsZSB3aXRoIHRoZSBuYW1lIG9mIHlvdXIgZmlsZSBwbHVzIHRo ZSBzcGVjaWFsIHN1ZmZpeCA8Y29kZT4ubGluazwvY29kZT4gdG8gZGlzdGluZ3Vpc2ggaXQg ZnJvbSBhIHN0YW5kYXJkIGZpbGUuIEV2ZXJ5IHRpbWUgeW91IGFkZCBhIDxzcGFuIGNsYXNz PSJjYXBzIj5VUkw8L3NwYW4+IG9mIHRoZSBzYW1lIG5hbWUgaXQgaXMgYWRkZWQgYXMgYSBu ZXcgbGluZSB3aXRoaW4gdGhpcyBmaWxlLjwvcD4NCg0KCTxwPlRoaXMgbWVhbnMgeW91IGNh biBzaHVmZmxlIHRoZSBvcmRlciBvZiA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPnMs IGRlbGV0ZSByZW1vdGUgZmlsZXMgb3IgZWRpdCB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVS TDwvc3Bhbj5zIGRpcmVjdGx5IGlmIHlvdSBzbyB3aXNoIGJ5IHNpbXBseSBkb3dubG9hZGlu ZyB0aGUgcmVsZXZhbnQgLmxpbmsgZmlsZSBmcm9tIHlvdXIgPHNwYW4gY2xhc3M9ImNhcHMi PkZUUDwvc3Bhbj4gc2VydmVyLCBlZGl0aW5nIGl0IGFuZCByZS11cGxvYWRpbmcgaXQuIEFz IGxvbmcgYXMgeW91IG1ha2Ugc3VyZSB5b3UgaGF2ZSBvbmUgPHNwYW4gY2xhc3M9ImNhcHMi PlVSTDwvc3Bhbj4gcGVyIGxpbmUgZXZlcnl0aGluZyB3aWxsIHdvcmsuPC9wPg0KDQoJPHA+ SW5jaWRlbnRhbGx5LCB0aGUgcmVhbCBmaWxlIHNpemUgaXMgcmUtcmVhZCAoZnJvbSB0aGUg MXN0IGZpbGUgbGlzdGVkIGluIHRoZSAubGluayBmaWxlKSBldmVyeSB0aW1lIHRoZSBsb2Nh bCBmaWxlIGlzIGVkaXRlZCBiZWNhdXNlIG90aGVyd2lzZSA8c3BhbiBjbGFzcz0iY2FwcyI+ VFhQPC9zcGFuPiBvdmVyd3JpdGVzIGl0IHdpdGggdGhlIHNpemUgb2YgdGhlIGR1bW15IHRl eHQgZmlsZS4gVGhpcyBoYXMgcG90ZW50aWFsIHJhbWlmaWNhdGlvbnMgd2hlbiBkb3dubG9h ZGluZyBiZWNhdXNlIDxlbT50aGUgcGx1Z2luIGNoZWNrcyB0aGF0IHRoZSByZW1vdGUgZmls ZSBzaXplIG1hdGNoZXMgdGhlIG9uZSBpbiB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwv c3Bhbj4gaW50ZXJmYWNlIGJlZm9yZSBzZXJ2aW5nIHRoZSBmaWxlPC9lbT4uIElmIG9uZSBv ZiB5b3VyIHVwbG9hZGVkIGZpbGVzIGlzIGEgZGlmZmVyZW50IHNpemUgaXQgd2lsbCByZWZ1 c2UgdG8gZG93bmxvYWQuPC9wPg0KDQoJPHA+VGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB0byB0 cnkgdG8gbWFpbnRhaW4gZG93bmxvYWQgY291bnQgaW50ZWdyaXR5LiBJbnN0ZWFkIG9mIGRp c2hpbmcgb3V0IGEgc3RhbmRhcmQgNDA0IG1lc3NhZ2UsIHNvbWUgc2VydmVycyB3aWxsIHJl ZGlyZWN0IHRvIGFuIGltYWdlIG9yIDxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPiBm aWxlIHRvIHRlbGwgeW91IHRoYXQgYSBmaWxlIGlzIG1pc3NpbmcuIFRoaXMgcmV0dXJucyBh IHN0YXR1cyBjb2RlIG9mICYjODIxNzsyMDAgT0smIzgyMTc7IHRvIGluZGljYXRlIHRoYXQg dGhlIGRvd25sb2FkIG9mIHRoZSByZXBsYWNlbWVudCBjb250ZW50IHdlbnQgb2ssIGJ1dCBp biB0aGlzIGNhc2Ugd2UgZG8gPGVtPm5vdDwvZW0+IHdhbnQgdG8gaW5jcmVtZW50IHRoZSBj b3VudGVyOyB0aGUgZmlsZSYjODIxNztzIHN0aWxsIG1pc3NpbmcgYWZ0ZXIgYWxsISBVbmRl ciByYXJlIGNpcmN1bXN0YW5jZXMgeW91IG1pZ2h0IGZpbmQgdGhhdCB0aGUgcHJvdmlkZXIg cmV0dXJucyBjb250ZW50IGV4YWN0bHkgdGhlIHNhbWUgbGVuZ3RoIGFzIHRoZSBmaWxlIGl0 c2VsZiBhbmQgdGhlIGNvdW50IHdvdWxkIHRoZW4gYmUgd3JvbmdseSBpbmNyZW1lbnRlZC4g UHJhY3RpY2FsbHksIHlvdXIgZmlsZSBpcyBnb2luZyB0byBiZSBsYXJnZXIgdGhhbiB0aGVp ciByZXBsYWNlbWVudCBzbyBpdCB3b24mIzgyMTc7dCBtYXR0ZXIuPC9wPg0KDQoJPHA+Tm90 ZSB0aGF0IHRoZSAmIzgyMTY7ZG93bmxvYWQmIzgyMTc7IGxpbmsgbmV4dCB0byBlYWNoIGZp bGUgb24gdGhlIEZpbGVzIHRhYiBvZiB0aGUgYWRtaW4gaW50ZXJmYWNlIGFsd2F5cyBjaG9v c2VzIGEgcmFuZG9tIGZpbGUgZnJvbSB0aG9zZSB1cGxvYWRlZCB3aXRoIHRoYXQgbmFtZS48 L3A+DQoNCgk8cD5Lbm93biBpc3N1ZTogSWYgZWRpdGluZyBhICYjODIyMDtub3JtYWwmIzgy MjE7IGZpbGUgKG5vdCBhIC5saW5rKSBhbmQgeW91IGhpdCB0aGUgVXBsb2FkIGJ1dHRvbiA8 ZW0+d2l0aG91dCBzcGVjaWZ5aW5nIGEgZmlsZTwvZW0+LCB0aGUgPHNwYW4gY2xhc3M9ImNh cHMiPlVSTDwvc3Bhbj4gdXBsb2FkIGJveCBkb2VzIG5vdCBhcHBlYXIgb24gdGhlIEZpbGUg TGlzdCBwYWdlLiBIaXR0aW5nIHRoZSBGaWxlcyB0YWIgYWdhaW4gb3IgcGVyZm9ybWluZyBz b21lIG90aGVyIGFjdGlvbiByZS1pbnN0YXRlcyBpdC4gKnNocnVnKjwvcD4NCg0KCTxoMiBp ZD0iZXhhbXBsZXMiPkV4YW1wbGVzPC9oMj4NCg0KCTxoMyBpZD0iZWcxIj5FeGFtcGxlIDE8 L2gzPg0KDQoJPHA+SW4geW91ciA8Y29kZT5maWxlczwvY29kZT4gZm9ybTo8L3A+DQoNCjxw cmU+Jmx0O3R4cDpmaWxlX2Rvd25sb2FkX2xpbmsmZ3Q7DQogJmx0O3R4cDpzbWRfZmlsZV9k b3dubG9hZF9uYW1lIC8mZ3Q7IFsmbHQ7dHhwOmZpbGVfZG93bmxvYWRfc2l6ZQ0KICAgICBm b3JtYXQ9JnF1b3Q7YXV0byZxdW90OyBkZWNpbWFscz0mcXVvdDsyJnF1b3Q7IC8mZ3Q7XQ0K Jmx0Oy90eHA6ZmlsZV9kb3dubG9hZF9saW5rJmd0Ow0KPC9wcmU+DQoNCgk8aDMgaWQ9ImVn MiI+RXhhbXBsZSAyPC9oMz4NCg0KPHByZT4mbHQ7dHhwOnNtZF9maWxlX2Rvd25sb2FkX2xp bmsgY2hvb3NlPSZxdW90OzImcXVvdDsNCiAgICAgc2hvd19saW5rPSZxdW90OzEmcXVvdDsg LyZndDsNCjwvcHJlPg0KDQoJPHA+V2lsbCBhbHdheXMgc2VsZWN0IHRoZSAybmQgPHNwYW4g Y2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gZnJvbSB0aG9zZSB1cGxvYWRlZCBmb3IgZWFjaCBm aWxlLiBTaG93cyB0aGUgPGNvZGU+Lmxpbms8L2NvZGU+IG9uIHRoZSBlbmQgb2YgZWFjaCBy ZW1vdGUgZmlsZS48L3A+DQoNCgk8aDMgaWQ9ImVnMyI+RXhhbXBsZSAzPC9oMz4NCg0KPHBy ZT4mbHQ7dHhwOnNtZF9maWxlX2Rvd25sb2FkX2xpbmsmZ3Q7DQogJmx0O3R4cDpzbWRfZmls ZV9kb3dubG9hZF9pbWFnZSBpZm1pc3Npbmc9JnF1b3Q7U29ycnksIG5vIGltYWdlIGZvdW5k JnF1b3Q7DQogICAgIHdyYXB0YWc9JnF1b3Q7c3BhbiZxdW90OyBjbGFzcz0mcXVvdDtkbG9h ZCZxdW90OyAvJmd0Ow0KJmx0Oy90eHA6c21kX2ZpbGVfZG93bmxvYWRfbGluayZndDsNCjwv cHJlPg0KDQoJPHA+RGlzcGxheXMgYW4gaW1hZ2Ugd2l0aCB0aGUgc2FtZSBuYW1lIChwbHVz IC5qcGcpIGFzIHRoZSByZW1vdGUgZmlsZS4gVGhlIGltYWdlIGlzIGNsaWNrYWJsZSB0byBh bGxvdyB0aGUgZmlsZSB0byBiZSBkb3dubG9hZGVkIGJ1dCBpZiB0aGUgaW1hZ2UgaXMgbm90 IGZvdW5kLCB0aGUgdGV4dCAmIzgyMjA7U29ycnksIG5vIGltYWdlIGZvdW5kJiM4MjIxOyB3 aWxsIGJlIGRpc3BsYXllZCBpbnN0ZWFkICh0aGUgdGV4dCBpcyBhbHNvIGNsaWNrYWJsZSku IFdyYXBzIHRoZSBpbWcgb3IgdGV4dCBpbiA8Y29kZT4mbHQ7c3BhbiZndDs8L2NvZGU+IHRh Z3Mgd2l0aCBhIGNsYXNzIG9mIDxjb2RlPmRsb2FkPC9jb2RlPi48L3A+DQoNCgk8aDIgaWQ9 ImNoYW5nZWxvZyI+Q2hhbmdlbG9nPC9oMj4NCg0KCTx1bD4NCgkJPGxpPjEyIE5vdiAwNyB8 IDAuMSB8IEluaXRpYWwgcmVsZWFzZTwvbGk+DQoJCTxsaT4wNCBEZWMgMDcgfCAwLjIgfCBB ZGRlZCBkb3dubG9hZCBjb3VudGVyIGFuZCBzb21lIGJldHRlciBzdGF0dXMgbWVzc2FnZXM8 L2xpPg0KCQk8bGk+MDQgRGVjIDA3IHwgMC4zIHwgUmVtb3ZlZCAubGluayB3aGVuIHVzaW5n IDxjb2RlPnNtZF9maWxlX2Rvd25sb2FkX2xpbms8L2NvZGU+IDsgYWRkZWQgPGNvZGU+c2hv d19saW5rPC9jb2RlPiBhdHRyaWJ1dGUgOyBpbXByb3ZlZCBlcnJvciBoYW5kbGluZyBjb2Rl IDsgZG93bmxvYWQgY291bnQgb25seSBpbmNyZWFzZXMgaWYgZmlsZSBzaXplcyBtYXRjaDwv bGk+DQoJCTxsaT4wNSBEZWMgMDcgfCAwLjMxIHwgRmlsZSBpcyBjaGVja2VkIGZvciBlcnJv ciBjb25kaXRpb24gcHJpb3IgdG8gZG93bmxvYWQgaW4gbGluZSB3aXRoIGNvcmUgY2hhbmdl c2V0IHIyNzIwICh0aGFua3MgTWFyeSkgJiM4MjExOyBjYW4gYmUgcmVtb3ZlZCB3aGVuIDQu MC42IGlzIHJlbGVhc2VkPC9saT4NCgkJPGxpPjEyIERlYyAwNyB8IDAuMzIgfCBFbmhhbmNl ZCBpZm1pc3NpbmcgdG8gaW5jbHVkZSBpbWFnZSBzdXBwb3J0OyBjaGFuZ2VkIHRoZSA/Zmls ZSBhdHRyaWJ1dGUgdG8gP3JlZiAoaXQmIzgyMTc7cyBhIGJldHRlciBuYW1lKTwvbGk+DQoJ CTxsaT4wMyBGZWIgMDggfCAwLjQgfCBSZXF1aXJlcyA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQ PC9zcGFuPiA0LjAuNiA7IHJlbW92ZWQgZXJyb3IgY2hlY2sgZnJvbSB2MC4zMSA7IGFkZGVk L2ltcHJvdmVkIHJlcGxhY2UgcmVtb3RlIGZpbGUgOyByZWR1Y2VkIHRpbWVvdXQgZm9yIGFj Y2Vzc2luZyByZW1vdGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gdG8gdHJ5IGFu ZCBwcmV2ZW50IHVnbHkgd2FybmluZ3M8L2xpPg0KCQk8bGk+MDIgQXByIDA4IHwgMC40MSB8 IEFkZGVkIHNtZF9maWxlX2Rvd25sb2FkX25hbWUgKHRoYW5rcyBhc3dpaGFydCk8L2xpPg0K CQk8bGk+MDkgQXByIDA4IHwgMC40MiB8IEZpeGVkIG1pbm9yIGVkZ2UgY2FzZSBidWcgaW4g c21kX2ZpbGVfZG93bmxvYWRfbGluazwvbGk+DQoJCTxsaT4xMCBKdW4gMDggfCAwLjQzIHwg Rml4ZWQgc3B1cmlvdXMgY2hhcmFjdGVycyBpbiB0aGUgc2luZ2xlIHRhZyB2ZXJzaW9uIG9m IHNtZF9maWxlX2Rvd25sb2FkX2xpbmsgKHRoYW5rcyBpYmxhc3RvZmYpPC9saT4NCgk8L3Vs Pg0KDQoJPGgyIGlkPSJjcmVkaXRzIj5DcmVkaXRzPC9oMj4NCg0KCTxwPkkgY2Fubm90IHBv c3NpYmx5IGNsYWltIGFsbCB0aGUgY3JlZGl0IGZvciB0aGlzIGh1bmsgb2YgY29kZS4gVGhl IHBsdWdpbiB3b3VsZCBub3QgaGF2ZSBleGlzdGVkIGlmIGl0IHdlcmVuJiM4MjE3O3QgZm9y IHRoZSBhbWF6aW5nIG1pbmQgb2YgUnV1ZCB2YW4gTWVsaWNrLiBIZSBzdWdnZXN0ZWQgYSB2 ZXJ5IGNsZXZlciBzb2x1dGlvbiB0byBteSByZW1vdGUgZmlsZSBwcmVkaWNhbWVudC4gSSBi dWlsdCBvbiB0aGF0LCBleHRlbmRlZCBpdCwgcmVmaW5lZCBpdCwgcGx1Z2luaXNlZCBpdCBh bmQgZ2F2ZSBpdCB0byB5b3UuIE1hbnkgdGhhbmtzIHRvIFJ1dWQgZm9yIHRoZSBhd2Vzb21l IHN1cHBvcnQgaGUgb2ZmZXJzIHRoZSBjb21tdW5pdHksIGFuZCBhbHNvIHRvIFdldCBmb3Ig aGlzIGFzc2lzdGFuY2Ugd2l0aCBoZWxwaW5nIG1lIHVuZGVyc3RhbmQgdGhlIGNvcmUuPC9w Pg0KDQo8L2Rpdj4KPCEtLSAtLS0gQkVHSU4gUExVR0lOIENTUyAtLS0gLS0+CjxzdHlsZSB0 eXBlPSJ0ZXh0L2NzcyI+DQojc21kX2hlbHAgLnJlcXVpcmVkIHsgY29sb3I6cmVkOyBwYWRk aW5nOi41ZW0gMDsgZm9udC13ZWlnaHQ6Ym9sZDsgfQ0KI3NtZF9oZWxwIHsgbGluZS1oZWln aHQ6MS41IDt9DQojc21kX2hlbHAgLmF0dC1uYW1lIHsgZm9udC13ZWlnaHQ6Ym9sZDsgfQ0K I3NtZF9oZWxwIGNvZGUgeyBmb250LXdlaWdodDpib2xkOyBmb250OiAxMDUlLzEzMCUgIkNv dXJpZXIgTmV3IiwgY291cmllciwgbW9ub3NwYWNlOyBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZG RkNDO30NCiNzbWRfaGVscCBjb2RlLnNlZF9jb2RlX3RhZyB7IGZvbnQtd2VpZ2h0Om5vcm1h bDsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5OTsgYmFja2dyb3VuZC1jb2xvcjogI2YwZTY4Yzsg ZGlzcGxheTpibG9jazsgbWFyZ2luOjEwcHggMTBweCAyMHB4OyBwYWRkaW5nOjEwcHg7IH0N CiNzbWRfaGVscCBhOmxpbmssICNzbWRfaGVscCBhOnZpc2l0ZWQgeyBjb2xvcjogYmx1ZTsg dGV4dC1kZWNvcmF0aW9uOiBub25lOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmx1ZTsg cGFkZGluZy1ib3R0b206MXB4O30NCiNzbWRfaGVscCBhOmhvdmVyLCAjc21kX2hlbHAgYTph Y3RpdmUgeyBjb2xvcjogYmx1ZTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBib3JkZXItYm90 dG9tOiAycHggc29saWQgYmx1ZTsgcGFkZGluZy1ib3R0b206MXB4O30NCiNzbWRfaGVscCBo MSB7IGNvbG9yOiAjMzY5OyBmb250OiAyMHB4IEdlb3JnaWEsIHNhbnMtc2VyaWY7IG1hcmdp bjogMDsgdGV4dC1hbGlnbjogY2VudGVyOyB9DQojc21kX2hlbHAgaDIgeyBib3JkZXItYm90 dG9tOiAxcHggc29saWQgYmxhY2s7IHBhZGRpbmc6MTBweCAwIDA7IGNvbG9yOiAjMzY5OyBm b250OiAxN3B4IEdlb3JnaWEsIHNhbnMtc2VyaWY7IH0NCiNzbWRfaGVscCBoMyB7IGNvbG9y OiAjMTA4MDMwOyBmb250OiBib2xkIDEycHggQXJpYWwsIHNhbnMtc2VyaWY7IGxldHRlci1z cGFjaW5nOiAxcHg7IG1hcmdpbjogMTVweCAwIDA7dGV4dC10cmFuc2Zvcm06IHVwcGVyY2Fz ZTt9DQo8L3N0eWxlPgo8IS0tIC0tLSBFTkQgUExVR0lOIENTUyAtLS0gLS0+IjtzOjQ6ImNv ZGUiO3M6MTQ2MjY6Ii8vIHNtZF9yZW1vdGVfZmlsZSBieSBTdGVmIERhd3Nvbg0KDQovLyBZ dWsgOi0oDQpnbG9iYWwgJHNtZF9yZW1vdGVfZmlsZV92YXJzOw0KJHNtZF9yZW1vdGVfZmls ZV92YXJzID0gYXJyYXkoDQoJJ21zZycgPT4gJycsDQoJJ21pbl90eHBfdmVyJyA9PiAnNC4w LjYnLA0KKTsNCg0KaWYgKEB0eHBpbnRlcmZhY2UgPT09ICdhZG1pbicgJiYgZ3BzKCdldmVu dCcpID09PSAiZmlsZSIpIHsNCglpZiAodmVyc2lvbl9jb21wYXJlKEB0eHBfdmVyc2lvbiwg JHNtZF9yZW1vdGVfZmlsZV92YXJzWydtaW5fdHhwX3ZlciddLCAiPj0iKSkgew0KCQlyZWdp c3Rlcl9jYWxsYmFjaygnc21kX3JlbW90ZV9maWxlX3JlcGxhY2UnLCAnZmlsZScsICdzbWRf cmVtb3RlX2ZpbGVfcmVwbGFjZScpOw0KCQlyZWdpc3Rlcl9jYWxsYmFjaygnc21kX3JlbW90 ZV9maWxlX3VwZGF0ZScsICdmaWxlJywgJ2ZpbGVfc2F2ZScpOw0KCQlyZWdpc3Rlcl9jYWxs YmFjaygnc21kX3JlbW90ZV9maWxlX2NyZWF0ZScsICdmaWxlJywgJ3NtZF9yZW1vdGVfZmls ZV9jcmVhdGUnLCAxKTsNCgkJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF9yZW1vdGVfZmlsZScs ICdmaWxlJyk7DQoJfSBlbHNlIHsNCgkJdHJpZ2dlcl9lcnJvcihnVHh0KCd0eHBfdmVyc2lv bicpIC4gIiAiIC4kc21kX3JlbW90ZV9maWxlX3ZhcnNbJ21pbl90eHBfdmVyJ10uICIgcmVx dWlyZWQuIik7DQoJfQ0KfQ0KDQppZiAodHhwaW50ZXJmYWNlID09PSAncHVibGljJykgew0K CXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfcmVtb3RlX2Rvd25sb2FkJywgJ2ZpbGVfZG93bmxv YWQnKTsNCn0NCg0KLy8gQmxvdy1ieS1ibG93IGVxdWl2YWxlbnQgb2YgZmlsZV9kb3dubG9h ZF9saW5rLCBqdXN0IGEgcmVtb3RlLWF3YXJlIHZlcnNpb24uDQovLyBBZGRzIHRoZSBjaG9v c2Ugb3B0aW9uLiBEZWZhdWx0cyB0byAwICggPSByYW5kb20sIGZvciBsb2FkIGJhbGFuY2lu ZykuIFNwZWNpZnkNCi8vIGFueSBoaWdoZXIgaW50ZWdlciB0byBncmFiIHRoYXQgcGFydGlj dWxhciBlbnRyeSBmcm9tIHRoZSBmaWxlIChpZiBpdCBleGlzdHMsIGVsc2UgdXNlIDFzdCkN CmZ1bmN0aW9uIHNtZF9maWxlX2Rvd25sb2FkX2xpbmsoJGF0dHMsICR0aGluZykgew0KCWds b2JhbCAkdGhpc2ZpbGU7DQoJZXh0cmFjdChsQXR0cyhhcnJheSgNCgkJJ2ZpbGVuYW1lJyA9 PiAnJywNCgkJJ2lkJyA9PiAnJywNCgkJJ2Nob29zZScgPT4gJzAnLA0KCQknc2hvd19saW5r JyA9PiAnMCcsDQoJKSwgJGF0dHMpKTsNCg0KCS8vIFJlbW92ZSB0aGUgZXh0cmEgYXR0cmli dXRlcyBub3QgaW4gdGhlIG9yaWdpbmFsIHRhZw0KCXVuc2V0KCRhdHRzWydzaG93X2xpbmsn XSk7DQoJdW5zZXQoJGF0dHNbJ2Nob29zZSddKTsNCg0KCSRrZXlzID0gYXJyYXkoInNtZF9j aG9vc2UiID0+ICRjaG9vc2UpOw0KCSRvdXQgPSBmaWxlX2Rvd25sb2FkX2xpbmsoJGF0dHMs ICR0aGluZyk7DQoNCglpZiAoc3RycG9zKCRvdXQsICIubGluayIpKSB7DQoJCSRvcmlnTGlu ayA9IGV4cGxvZGUoJyInLCAkb3V0KTsNCgkJJGlkeCA9IChjb3VudCgkb3JpZ0xpbmspID09 IDEpID8gMCA6IDE7DQoJCSRvcmlnTGlua1skaWR4XSA9ICgoJHNob3dfbGluaykgPyAkb3Jp Z0xpbmtbJGlkeF0gOiBzdHJfcmVwbGFjZSgiLmxpbmsiLCAiIiwgJG9yaWdMaW5rWyRpZHhd KSkgLiBqb2luX3FzKCRrZXlzKTsgLy8gV2lsbCBpZ25vcmUgam9pbl9xcyBpZiBjaG9vc2Ug aXMgMA0KCQkkb3V0ID0gaW1wbG9kZSgnIicsICRvcmlnTGluayk7DQoJfQ0KCXJldHVybiAk b3V0Ow0KfQ0KDQovLyBFcXVpdmFsZW50IHRvIGZpbGVfZG93bmxvYWRfbmFtZSBidXQgb3B0 aW9uYWxseSByZW1vdmVzIHRoZSAubGluaw0KZnVuY3Rpb24gc21kX2ZpbGVfZG93bmxvYWRf bmFtZSgkYXR0cykgew0KCWdsb2JhbCAkdGhpc2ZpbGU7DQoJZXh0cmFjdChsQXR0cyhhcnJh eSgNCgkJJ3Nob3dfbGluaycgPT4gJzAnLA0KCSksICRhdHRzKSk7DQoJYXNzZXJ0X2ZpbGUo KTsNCglyZXR1cm4gKCRzaG93X2xpbmspID8gJHRoaXNmaWxlWydmaWxlbmFtZSddIDogc3Ry X3JlcGxhY2UoIi5saW5rIiwgIiIsICR0aGlzZmlsZVsnZmlsZW5hbWUnXSk7DQp9DQoNCi8v IEFkZCBhbiBpbWFnZSB0byB0aGUgZG93bmxvYWQgZm9ybSB3aGljaCwgYnkgZGVmYXVsdCwg aXMgYmFzZWQgb24gdGhlIGZpbGVuYW1lIG9mIHRoZSBkb3dubG9hZCBpdHNlbGYNCmZ1bmN0 aW9uIHNtZF9maWxlX2Rvd25sb2FkX2ltYWdlKCRhdHRzKSB7DQoJZ2xvYmFsICR0aGlzZmls ZTsNCglhc3NlcnRfZmlsZSgpOw0KDQoJZXh0cmFjdChsQXR0cyhhcnJheSgNCgkJJ2ZpbGVu YW1lJyA9PiAnJywNCgkJJ2lkJyA9PiAnJywNCgkJJ2V4dGVuc2lvbicgPT4gJ2pwZycsDQoJ CSdpZm1pc3NpbmcnID0+ICc/cmVmJywNCgkJJ3RodW1iJyA9PiAnMCcsDQoJCSdjbGFzcycg PT4gJycsDQoJCSd3cmFwdGFnJyA9PiAnJywNCgkpLCAkYXR0cykpOw0KCSRmaWxlbGluayA9 ICR0aGlzZmlsZVsnZmlsZW5hbWUnXTsNCglpZiAoJGZpbGVuYW1lID09ICIiKSB7DQoJCSRm aWxlbmFtZSA9ICRmaWxlbGluazsNCgl9DQoJJGZpbGVuYW1lID0gc3RyX3JlcGxhY2UoIi5s aW5rIiwgIiIsICRmaWxlbmFtZSkgLiAoKCRleHRlbnNpb249PSIiKSA/ICcnIDogJy4nLiRl eHRlbnNpb24pOw0KDQoJJGltZyA9ICcnOw0KCWlmICgkaWQpIHsNCgkJJGltZyA9ICgkdGh1 bWI9PTApID8gQGltYWdlKGFycmF5KCJpZCIgPT4gJGlkLCAiY2xhc3MiID0+ICRjbGFzcywg IndyYXB0YWciID0+ICR3cmFwdGFnKSkgOiBAdGh1bWJuYWlsKGFycmF5KCJpZCIgPT4gJGlk LCAiY2xhc3MiID0+ICRjbGFzcywgIndyYXB0YWciID0+ICR3cmFwdGFnKSk7DQoJfSBlbHNl IGlmICgoc3RycG9zKCRmaWxlbmFtZSwgImh0dHA6Ly8iKSA9PT0gMCkgfHwgKHN0cnBvcygk ZmlsZW5hbWUsICIvIikgPT09IDApKSB7DQoJCSRpbWcgPSAoKCR3cmFwdGFnPT0iIikgPyAn JyA6ICc8Jy4kd3JhcHRhZy4gKCgkY2xhc3M9PSIiKSA/ICcnIDogJyBjbGFzcz0iJy4kY2xh c3MuJyInKSAuJz4nKSAuICc8aW1nIHNyYz0iJy4kZmlsZW5hbWUuJyInLiAoKCR3cmFwdGFn PT0iIiAmJiAkY2xhc3MpID8gJyBjbGFzcz0iJy4kY2xhc3MuJyInIDogJycpIC4gJy8+Jy4g KCgkd3JhcHRhZz09IiIpID8gJycgOiAnPC8nLiR3cmFwdGFnLic+Jyk7DQoJfSBlbHNlIHsN CgkJJGltZyA9ICgkdGh1bWI9PTApID8gQGltYWdlKGFycmF5KCJuYW1lIiA9PiAkZmlsZW5h bWUsICJjbGFzcyIgPT4gJGNsYXNzLCAid3JhcHRhZyIgPT4gJHdyYXB0YWcpKSA6IEB0aHVt Ym5haWwoYXJyYXkoIm5hbWUiID0+ICRmaWxlbmFtZSwgImNsYXNzIiA9PiAkY2xhc3MsICJ3 cmFwdGFnIiA9PiAkd3JhcHRhZykpOw0KCX0NCgkkd3JhcHBlciA9ICgoJHdyYXB0YWc9PSIi KSA/ICdAQFJFUEwnIDogJzwnLiR3cmFwdGFnLiAoKCRjbGFzcz09IiIpID8gJycgOiAnIGNs YXNzPSInLiRjbGFzcy4nIicpIC4nPkBAUkVQTDwvJy4kd3JhcHRhZy4nPicpOw0KCWlmIChz dHJwb3MoJGlmbWlzc2luZywgIj9yZWYiKSA9PT0gMCkgew0KCQkkZGlzcGxheSA9ICgkaWQp ID8gJGlkIDogJGZpbGVuYW1lOw0KCQkkbWlzc2luZyA9IHN0cl9yZXBsYWNlKCJAQFJFUEwi LCAkZGlzcGxheSwgJHdyYXBwZXIpOw0KCX0gZWxzZSBpZiAoc3RycG9zKCRpZm1pc3Npbmcs ICI/aW1hZ2UiKSA9PT0gMCkgew0KCQkkaW1nUGFydHMgPSBleHBsb2RlKCI6IiwgJGlmbWlz c2luZyk7DQoJCWlmIChjb3VudCgkaW1nUGFydHMpID09IDIpIHsNCgkJCSRpbWdPcHRzID0g YXJyYXkoKTsNCgkJCWlmKGlzX251bWVyaWMoJGltZ1BhcnRzWzFdKSkgew0KCQkJCSRpbWdP cHRzWyJpZCJdID0gJGltZ1BhcnRzWzFdOw0KCQkJfSBlbHNlIHsNCgkJCQkkaW1nT3B0c1si bmFtZSJdID0gJGltZ1BhcnRzWzFdOw0KCQkJfQ0KCQkJJG1pc3NpbmcgPSBzdHJfcmVwbGFj ZSgiQEBSRVBMIiwgKCgkdGh1bWI9PTApID8gQGltYWdlKCRpbWdPcHRzKSA6IEB0aHVtYm5h aWwoJGltZ09wdHMpKSwgJHdyYXBwZXIpOw0KCQl9IGVsc2Ugew0KCQkJJG1pc3NpbmcgPSAi IjsNCgkJfQ0KCX0gZWxzZSBpZiAoJGlmbWlzc2luZyA9PSAiIikgew0KCQkkbWlzc2luZyA9 ICIiOw0KCX0gZWxzZSB7DQoJCSRtaXNzaW5nID0gc3RyX3JlcGxhY2UoIkBAUkVQTCIsICRp Zm1pc3NpbmcsICR3cmFwcGVyKTsNCgl9DQoJcmV0dXJuICgkaW1nKSA/ICRpbWcgOiAkbWlz c2luZzsNCn0NCg0KLy8gR2VuZXJpYyBjYWxsYmFjayB3aGljaCBpcyBmaXJlZCBfYWZ0ZXJf IHRoZSBGaWxlcyBwYWdlIGhhcyBsb2FkZWQuDQovLyBQZXJmb3JtcyBkaXNwbGF5IGNsZWFu dXAvaW5zZXJ0aW9uIGFuZCBwb3N0IHByb2Nlc3Npbmcgb2YgYW55IGZpbGUgaW5zZXJ0cy9l ZGl0cw0KZnVuY3Rpb24gc21kX3JlbW90ZV9maWxlKCRldmVudCwgJHN0ZXApIHsNCglnbG9i YWwgJHNtZF9yZW1vdGVfZmlsZV92YXJzOw0KDQoJJGhlbHBMaW5rID0gJzxhIHRhcmdldD0i X2JsYW5rIicuDQoJCQknIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9zbWRfcmVtb3Rl X2ZpbGVfdXJsX3BvcHVwIicuDQoJCQknIG9uY2xpY2s9InBvcFdpbih0aGlzLmhyZWYpOyBy ZXR1cm4gZmFsc2U7IiBjbGFzcz0icG9waGVscCI+PzwvYT4nOw0KCWlmICgkc3RlcCA9PSAi ZmlsZV9lZGl0IiB8fCAkc3RlcCA9PSAiZmlsZV9yZXBsYWNlIikgew0KCQkkaWQgPSBhc3Nl cnRfaW50KGdwcygnaWQnKSk7DQoJCSRycyA9IHNhZmVfcm93KCdmaWxlbmFtZScsJ3R4cF9m aWxlJywnaWQgPSAnLiAkaWQpOw0KCQlpZiAoc3RycG9zKCRyc1snZmlsZW5hbWUnXSwgIi5s aW5rIikgIT09IGZhbHNlKSB7DQoJCQkkdWxfZm9ybSA9IHRyaW0oZm9ybShlSW5wdXQoJ2Zp bGUnKS4gc0lucHV0KCdzbWRfcmVtb3RlX2ZpbGVfcmVwbGFjZScpLiBoSW5wdXQoJ2lkJywk aWQpLg0KCQkJCQlncmFmKCdBZGQgVVJMJy5zcC4kaGVscExpbmsuc3AuZklucHV0KCd0ZXh0 JywgJ3NtZF9yZW1vdGVfdXJsJywgJycsICdlZGl0JywgJ0VudGVyIGEgVVJMIHRvIGFkZCB0 byB0aGlzIGZpbGUnLCAnJywgJzMyJykuc3AuDQoJCQkJCQkiT3ZlcndyaXRlOiIuc3AuY2hl Y2tib3goJ3NtZF9yZW1vdGVfYmxhdCcsICdzbWRfcmVtb3RlX2JsYXQnLCAwKS5zcC4NCgkJ CQkJCWZJbnB1dCgnc3VibWl0JywgJycsICdVcGxvYWQnLCAnc21hbGxlcmJveCcpKQ0KCQkJ CSwgJ3RleHQtYWxpZ246IGNlbnRlcjsnKSk7DQoJCQllY2hvIHNtZF9yZW1vdGVfanMoJyQo Ii51cGxvYWQtZm9ybSIpLnJlcGxhY2VXaXRoKFwnJy4kdWxfZm9ybS4nXCcpOycpOw0KCQl9 DQoJfSBlbHNlIHsNCgkJJHVsX2Zvcm0gPSB0cmltKGZvcm0oZUlucHV0KCdmaWxlJykuIHNJ bnB1dCgnc21kX3JlbW90ZV9maWxlX2NyZWF0ZScpLg0KCQkJCQlncmFmKCdvciBVUkwnLnNw LiRoZWxwTGluay5zcC5mSW5wdXQoJ3RleHQnLCAnc21kX3JlbW90ZV91cmwnLCAnJywgJ2Vk aXQnLCAnRW50ZXIgYSBVUkwgdG8gdXBsb2FkIHRvIFRYUCcsICcnLCAnMzInKS5zcC4NCgkJ CQkJCWZJbnB1dCgnc3VibWl0JywgJycsICdVcGxvYWQnLCAnc21hbGxlcmJveCcpKQ0KCQkJ CSwgJ3RleHQtYWxpZ246IGNlbnRlcjsnKSk7DQoJCWVjaG8gc21kX3JlbW90ZV9qcygnJCgi LnVwbG9hZC1mb3JtIikuYXBwZW5kKFwnJy4kdWxfZm9ybS4nXCcpOycpOw0KCX0NCg0KCWlm ICgkc21kX3JlbW90ZV9maWxlX3ZhcnNbJ21zZyddICE9ICIiKSB7DQoJCWVjaG8gc21kX3Jl bW90ZV9qcygnJCgiI25hdi1wcmltYXJ5IHRhYmxlIHRkOmVxKDApIikuYXBwZW5kKFwnJy4k c21kX3JlbW90ZV9maWxlX3ZhcnNbJ21zZyddLidcJyk7Jyk7DQoJfQ0KfQ0KDQovLyBXaGVu IGEgZmlsZSBpcyAicmVwbGFjZWQiIHdpdGggYSBuZXcgVVJMIHRoZSBleGlzdGluZyBmaWxl IG5hbWUgbXVzdCByZW1haW4NCi8vIHVuY2hhbmdlZC4gQnkgZGVmYXVsdCB0aGUgbmV3IFVS TCBpcyBhcHBlbmRlZCB0byB0aGUgLmxpbmsgZmlsZSB1bmxlc3MgdGhlICdvdmVyd3JpdGUn DQovLyBjaGVja2JveCBpcyBzZXQNCmZ1bmN0aW9uIHNtZF9yZW1vdGVfZmlsZV9yZXBsYWNl KCkgew0KCWdsb2JhbCAkZmlsZV9iYXNlX3BhdGgsICRzbWRfcmVtb3RlX2ZpbGVfdmFyczsN Cg0KCWV4dHJhY3QoZ3BzYShhcnJheSgnc21kX3JlbW90ZV91cmwnLCAnc21kX3JlbW90ZV9i bGF0JywgJ2lkJykpKTsNCgkkaWQgPSBhc3NlcnRfaW50KCRpZCk7DQoJJHVybCA9IHRyaW0o JHNtZF9yZW1vdGVfdXJsKTsNCgkkcnMgPSBzYWZlX3JvdygnZmlsZW5hbWUnLCd0eHBfZmls ZScsJ2lkID0gJy4kaWQpOw0KDQoJaWYgKHN0cnBvcygkcnNbJ2ZpbGVuYW1lJ10sICIubGlu ayIpICE9PSBmYWxzZSkgew0KCQlpZiAoc3RycG9zKCR1cmwsICJodHRwIikgPT09IDApIHsN CgkJCSR3cml0ZU1vZGUgPSAoJHNtZF9yZW1vdGVfYmxhdCkgPyAidyIgOiAiYSI7DQoJCQkk ZGVzdF9maWxlcGF0aCA9IGJ1aWxkX2ZpbGVfcGF0aCgkZmlsZV9iYXNlX3BhdGgsICRyc1sn ZmlsZW5hbWUnXSk7DQoJCQlzbWRfcmVtb3RlX2ZpbGVfd3JpdGUoJGRlc3RfZmlsZXBhdGgs ICRyc1snZmlsZW5hbWUnXSwgJHVybCwgJHdyaXRlTW9kZSk7DQoJCX0gZWxzZSB7DQoJCQkk c21kX3JlbW90ZV9maWxlX3ZhcnNbJ21zZyddID0gZ1R4dCgnZmlsZV91cGxvYWRfZmFpbGVk JykgLiAoKGVtcHR5KCRzbWRfcmVtb3RlX3VybCkpID8gJyAtICcuZ1R4dCgndXBsb2FkX2Vy cl9ub19maWxlJykgOiAnJyk7DQoJCX0NCgl9DQp9DQoNCi8vIEV2ZXJ5IHRpbWUgYSBmaWxl IGlzIHNhdmVkL2VkaXRlZCwgVFhQIHJlY2FsY3VsYXRlcyBpdHMgc2l6ZSBmcm9tIHRoZSBy ZWFsIGZpbGUgKGdycnIpLg0KLy8gVGhpcyBpcyB1bmRlc2lyYWJsZSBzbyBpdCBpcyByZXBs YWNlZCB3aXRoIHRoZSBzaXplIG9mIHRoZSByZW1vdGUgVVJMIGZpbGUgaW5zdGVhZC4NCmZ1 bmN0aW9uIHNtZF9yZW1vdGVfZmlsZV91cGRhdGUoKSB7DQoJZXh0cmFjdChncHNhKGFycmF5 KCdpZCcpKSk7DQoJc21kX3JlbW90ZV9zZXRfc2l6ZSgkaWQpOw0KfQ0KDQovLyBTZXRzIHRo ZSBzaXplIG9mIHRoZSBnaXZlbiBUWFAgZGF0YWJhc2UgZmlsZSB0byB0aGF0IG9mIGl0cyBj b3JyZXNwb25kaW5nICJyZWFsIiByZW1vdGUgVVJMIGZpbGUgc2l6ZQ0KZnVuY3Rpb24gc21k X3JlbW90ZV9zZXRfc2l6ZSgkaWRfb3JfZmlsZSkgew0KCWdsb2JhbCAkZmlsZV9iYXNlX3Bh dGg7DQoNCglpZiAoaXNfbnVtZXJpYygkaWRfb3JfZmlsZSkpIHsNCgkJJGZpbGVuYW1lID0g dHJpbShzYWZlX2ZpZWxkKCJmaWxlbmFtZSIsICJ0eHBfZmlsZSIsICJpZD0iLmludHZhbCgk aWRfb3JfZmlsZSkpKTsNCgl9IGVsc2Ugew0KCQkkZmlsZW5hbWUgPSB0cmltKGRvU2xhc2go JGlkX29yX2ZpbGUpKTsNCgl9DQoJaWYgKHN0cnBvcygkZmlsZW5hbWUsICIubGluayIpKSB7 DQoJCSRmaWxlcGF0aCA9IGJ1aWxkX2ZpbGVfcGF0aCgkZmlsZV9iYXNlX3BhdGgsICRmaWxl bmFtZSk7DQoJCSR1cmwgPSBzbWRfcmVtb3RlX2ZpbGVfbGlzdCgkZmlsZXBhdGgsIDEsIDEp Ow0KCQlpZiAoY291bnQoJHVybCkgPiAwKSB7DQoJCQkkaGRycyA9IHNtZF9nZXRfaGVhZGVy cygkdXJsWzBdLCAxKTsNCgkJCSRzaXplID0gKCRoZHJzID09PSBmYWxzZSB8fCAhaXNzZXQo JGhkcnNbJ2NvbnRlbnQtbGVuZ3RoJ10pKSA/IDEgOiAkaGRyc1snY29udGVudC1sZW5ndGgn XTsNCgkJCXNhZmVfdXBkYXRlKCJ0eHBfZmlsZSIsICJzaXplPSIuJHNpemUsICJmaWxlbmFt ZT0nIi4kZmlsZW5hbWUuIiciKTsNCgkJfQ0KCX0NCn0NCg0KLy8gQ2FsbGJhY2sgZm9yIHVw bG9hZGluZyBhIFVSTCBmcm9tIHRoZSBGaWxlcyB0YWINCmZ1bmN0aW9uIHNtZF9yZW1vdGVf ZmlsZV9jcmVhdGUoKSB7DQoJZ2xvYmFsICRmaWxlX2Jhc2VfcGF0aCwgJHNtZF9yZW1vdGVf ZmlsZV92YXJzOw0KDQoJZXh0cmFjdChkb1NsYXNoKGdwc2EoYXJyYXkoJ3NtZF9yZW1vdGVf dXJsJywnY2F0ZWdvcnknLCdwZXJtaXNzaW9ucycsJ2Rlc2NyaXB0aW9uJykpKSk7DQoNCgkk dXJsID0gdHJpbSgkc21kX3JlbW90ZV91cmwpOw0KCS8vIE9ubHkgaW50ZXJjZXB0IHJlbW90 ZSBmaWxlczsgbGVhdmUgZXZlcnl0aGluZyBlbHNlIGZvciBUWFAgdG8gbWFuYWdlDQoJaWYg KHN0cnBvcygkdXJsLCAiaHR0cCIpID09PSAwKSB7DQoJCSRoZHJzID0gc21kX2dldF9oZWFk ZXJzKCR1cmwsIDEpOw0KCQkkc2l6ZSA9ICgkaGRycyA9PT0gZmFsc2UgfHwgIWlzc2V0KCRo ZHJzWydjb250ZW50LWxlbmd0aCddKSkgPyAxIDogJGhkcnNbJ2NvbnRlbnQtbGVuZ3RoJ107 DQoNCgkJLy8gTWFrZSBhIGZpbGVuYW1lIGFuZCBmdWxsIHBhdGg6IHVuZW5jb2RlZA0KCQkk ZGVzdF9maWxlbmFtZSA9IGJhc2VuYW1lKHVybGRlY29kZSgkdXJsKSkuIi5saW5rIjsNCgkJ JGRlc3RfZmlsZXBhdGggPSBidWlsZF9maWxlX3BhdGgoJGZpbGVfYmFzZV9wYXRoLCAkZGVz dF9maWxlbmFtZSk7DQoNCgkJaWYgKGZpbGVfZXhpc3RzKCRkZXN0X2ZpbGVwYXRoKSkgew0K CQkJc21kX3JlbW90ZV9maWxlX3dyaXRlKCRkZXN0X2ZpbGVwYXRoLCAkZGVzdF9maWxlbmFt ZSwgJHVybCk7DQoJCX0gZWxzZSB7DQoJCQkvLyBGaWxlIGRvZXNuJ3QgZXhpc3Qgc28gY3Jl YXRlIGl0IGFuZCBwdXQgdGhlIFVSTCBpbnNpZGUNCgkJCSR0bXAgPSB0ZW1wbmFtKCIvdG1w IiwgInNtZF8iKTsNCgkJCSRoYW5kbGUgPSBmb3BlbigkdG1wLCAidyIpOw0KCQkJZndyaXRl KCRoYW5kbGUsICR1cmwubik7DQoJCQlmY2xvc2UoJGhhbmRsZSk7DQoJCQlyZW5hbWUoJHRt cCwgJGRlc3RfZmlsZXBhdGgpOw0KDQoJCQkvLyBBZGQgdGhlIGZpbGUgdG8gVFhQDQoJCQkk cmV0ID0gc2FmZV9pbnNlcnQoInR4cF9maWxlIiwNCgkJCQkiZmlsZW5hbWUgPSAnJGRlc3Rf ZmlsZW5hbWUnLA0KCQkJCSBjYXRlZ29yeSA9ICckY2F0ZWdvcnknLA0KCQkJCSBwZXJtaXNz aW9ucyA9ICckcGVybWlzc2lvbnMnLA0KCQkJCSBkZXNjcmlwdGlvbiA9ICckZGVzY3JpcHRp b24nLA0KCQkJCSBzaXplID0gJyRzaXplJywNCgkJCQkgY3JlYXRlZCA9IG5vdygpLA0KCQkJ CSBtb2RpZmllZCA9IG5vdygpDQoJCQkiKTsNCgkJCSRzbWRfcmVtb3RlX2ZpbGVfdmFyc1sn bXNnJ10gPSBnVHh0KCdmaWxlX3VwbG9hZGVkJywgYXJyYXkoJ3tuYW1lfScgPT4gdXJsZGVj b2RlKCR1cmwpKSk7DQoJCX0NCgl9IGVsc2Ugew0KCQkkc21kX3JlbW90ZV9maWxlX3ZhcnNb J21zZyddID0gZ1R4dCgnZmlsZV91cGxvYWRfZmFpbGVkJykgLiAoKGVtcHR5KCRzbWRfcmVt b3RlX3VybCkpID8gJyAtICcuZ1R4dCgndXBsb2FkX2Vycl9ub19maWxlJykgOiAnJyk7DQoJ fQ0KfQ0KDQovLyBBcHBlbmQgYSBVUkwgdG8gdGhlIGdpdmVuIGZpbGUuIElmIHdyaXRlTW9k ZT0idyIgdGhlIHdob2xlIGZpbGUgaXMgcmVwbGFjZWQNCmZ1bmN0aW9uIHNtZF9yZW1vdGVf ZmlsZV93cml0ZSgkZmlsZXBhdGgsICRmaWxlbmFtZSwgJHVybCwgJHdyaXRlTW9kZT0iYSIp IHsNCglnbG9iYWwgJHNtZF9yZW1vdGVfZmlsZV92YXJzOw0KDQoJLy8gUmVhZCB0aGUgd2hv bGUgZmlsZSBiZWNhdXNlIHdlIG9ubHkgd2FudCB0byBhZGQgdGhlIFVSTCBpZiBpdCdzIG5v dCB0aGVyZSBhbHJlYWR5DQoJJGxpbmVzID0gc21kX3JlbW90ZV9maWxlX2xpc3QoJGZpbGVw YXRoLCAwLCAxKTsNCglpZiAoIWluX2FycmF5KCR1cmwsICRsaW5lcykgfHwgJHdyaXRlTW9k ZSA9PSAidyIpIHsNCgkJJGhhbmRsZSA9IGZvcGVuKCRmaWxlcGF0aCwgJHdyaXRlTW9kZSk7 DQoJCWZ3cml0ZSgkaGFuZGxlLCAkdXJsLm4pOw0KCQlmY2xvc2UoJGhhbmRsZSk7DQoJCSRz bWRfcmVtb3RlX2ZpbGVfdmFyc1snbXNnJ10gPSBnVHh0KCdmaWxlX3VwbG9hZGVkJywgYXJy YXkoJ3tuYW1lfScgPT4gdXJsZGVjb2RlKCR1cmwpKSk7DQoJfSBlbHNlIHsNCgkJJHNtZF9y ZW1vdGVfZmlsZV92YXJzWydtc2cnXSA9IGdUeHQoJ2ZpbGVfYWxyZWFkeS1leGlzdHMnLCBh cnJheSgne25hbWV9JyA9PiB1cmxkZWNvZGUoJHVybCkpKTsNCgl9DQoJLy8gU2V0IHRoZSBz aXplIGp1c3QgaW4gY2FzZQ0KCXNtZF9yZW1vdGVfc2V0X3NpemUoJGZpbGVuYW1lKTsNCn0N Cg0KLy8gUmVhZCB0aGUgY29udGVudHMgb2YgdGhlIGNob3NlbiBmaWxlIChmdWxsIHBhdGgg cmVxdWlyZWQpIGFuZCBnZXQgbGluZXMgZnJvbSB3aXRoaW4sIGFkZGluZyB0aGVtIHRvIGFu IGFycmF5Lg0KLy8gICRvZmZzZXQgaXMgd2hlcmUgdG8gc3RhcnQgZnJvbS4gTm9ybWFsbHkg MSA9IDFzdCByb3csIDIgPSAybmQgcm93IGFuZCBzbyBvbi4gMCA9IGEgcmFuZG9tIHJvdy4N Ci8vICAkcXR5IHNwZWNpZmllcyBob3cgbWFueSByb3dzIHRvIHB1bGwuIDAgPSB1bmxpbWl0 ZWQuDQpmdW5jdGlvbiBzbWRfcmVtb3RlX2ZpbGVfbGlzdCgkZm5hbWUsICRxdHk9MSwgJG9m ZnNldD0wKSB7DQoJJG91dCA9IGFycmF5KCk7DQoJaWYgKGZpbGVfZXhpc3RzKCRmbmFtZSkp IHsNCgkJJGZkID0gZm9wZW4oJGZuYW1lLCAiciIpOw0KCQkvLyBSZWFkIHRoZSB3aG9sZSBm aWxlIGluICh5ZXMgdGhlcmUncyB0aGUgZmlsZSgpIGNhbGwsIGJ1dCBmZ2V0cygpIGlzIHN1 cHBvc2VkbHkgcXVpY2tlciBvbiB0eHQgZmlsZXMpDQoJCXdoaWxlICghZmVvZigkZmQpKSB7 DQoJCQkkbGluZSA9IHJ0cmltKGZnZXRzKCRmZCkpOw0KCQkJaWYgKCRsaW5lICE9ICIiKSB7 DQoJCQkgICAkbGluZXNbXSA9ICRsaW5lOw0KCQkJfQ0KCQl9DQoJCWZjbG9zZSAoJGZkKTsN CgkJaWYgKCRvZmZzZXQgPT0gMCkgew0KCQkJc2h1ZmZsZSgkbGluZXMpOw0KCQkJJG9mZnNl dCA9IDE7DQoJCX0NCgkJJG9mZnNldCA9ICgkb2Zmc2V0ID4gY291bnQoJGxpbmVzKSkgPyAx IDogJG9mZnNldDsNCgkJJG91dCA9ICgkcXR5ID09IDApID8gJGxpbmVzIDogYXJyYXlfc2xp Y2UoJGxpbmVzLCAkb2Zmc2V0LTEsICRxdHkpOw0KCX0NCglyZXR1cm4gJG91dDsNCn0NCg0K Ly8gQ2FsbGVkIGp1c3QgYmVmb3JlIGEgZG93bmxvYWQgaXMgaW5pdGlhdGVkDQpmdW5jdGlv biBzbWRfcmVtb3RlX2Rvd25sb2FkKCRldmVudCwgJHN0ZXApIHsNCglnbG9iYWwgJHByZXRl eHQsICRpZCwgJGZpbGVfYmFzZV9wYXRoLCAkZmlsZV9lcnJvcjsNCg0KCWlmICghaXNzZXQo JGZpbGVfZXJyb3IpKSB7DQoJCS8vIEdldCB0aGUgInRydWUiIGZpbGVuYW1lICh1bmZvcnR1 bmF0ZWx5IGZyb20gdGhlIGRhdGFiYXNlID0gMSBleHRyYSBxdWVyeSkuDQoJCSRyZWFsX2Zp bGUgPSBzYWZlX3JvdygiZmlsZW5hbWUsIHNpemUiLCAidHhwX2ZpbGUiLCAiaWQ9Ii5pbnR2 YWwoJGlkKSk7DQoJCWlmIChzdHJwb3MoJHJlYWxfZmlsZVsnZmlsZW5hbWUnXSwgIi5saW5r IikgPiAwKSB7DQoJCQkkY2hvb3NlID0gMDsNCgkJCS8vIEdldCBhbnkgb3ZlcnJpZGluZyB2 YWx1ZSBvZiBzbWRfY2hvb3NlIGZyb20gdGhlIHF1ZXJ5IHN0cmluZw0KCQkJaWYgKCRwcmV0 ZXh0WydxcyddKSB7DQoJCQkJbGlzdCgkcWtleSwgJHF2YWwpID0gZXhwbG9kZSgiPSIsICRw cmV0ZXh0WydxcyddKTsNCgkJCQlpZiAoJHFrZXkgPT0gInNtZF9jaG9vc2UiKSB7DQoJCQkJ CWlmICgkcXZhbCA+IDApIHsNCgkJCQkJCSRjaG9vc2UgPSBpbnR2YWwoJHF2YWwpOw0KCQkJ CQl9DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gVGhlIGZpbGUgc2l6ZSwgaG93ZXZlciwgaXMgdGhh dCBvZiB0aGUgcmVtb3RlIGZpbGUNCgkJCSRyZW1vdGVVUkwgPSBzbWRfcmVtb3RlX2ZpbGVf bGlzdChidWlsZF9maWxlX3BhdGgoJGZpbGVfYmFzZV9wYXRoLCAkcmVhbF9maWxlWydmaWxl bmFtZSddKSwgMSwgJGNob29zZSk7DQoJCQlpZiAoY291bnQoJHJlbW90ZVVSTCkgPiAwKSB7 DQoJCQkJJHVybCA9ICRyZW1vdGVVUkxbMF07DQoJCQkJLy8gVGVzdCB0aGUgZmlsZSBleGlz dHM6IHNsb3csIGJ1dCByZWR1Y2VzIGZhbHNlIGRvd25sb2FkIGNvdW50IGluY3JlbWVudHMN CgkJCQkkaGRycyA9IHNtZF9nZXRfaGVhZGVycygkdXJsLCAxKTsNCgkJCQkkYWxsa2V5ID0g c3RydG9sb3dlcihpbXBsb2RlKCIgIiwgYXJyYXlfa2V5cygkaGRycykpKTsNCgkJCQlpZiAo c3RycG9zKCRhbGxrZXksICIyMDAiKSA+IDAgJiYgc3RycG9zKCRhbGxrZXksICJvayIpID4g MCkgew0KCQkJCQloZWFkZXIoJ0NvbnRlbnQtRGVzY3JpcHRpb246IEZpbGUgRG93bmxvYWQn KTsNCgkJCQkJaGVhZGVyKCdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVh bScpOw0KCQkJCQloZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZp bGVuYW1lPSInIC4gYmFzZW5hbWUoJHJlYWxfZmlsZVsnZmlsZW5hbWUnXSkgLiAnIjsgc2l6 ZSA9ICInLiRyZWFsX2ZpbGVbJ3NpemUnXS4nIicpOw0KCQkJCQkvLyBGaXggZm9yIGxhbWUg SUUgNiBwZGYgYnVnIG9uIHNlcnZlcnMgY29uZmlndXJlZCB0byBzZW5kIGNhY2hlIGhlYWRl cnMNCgkJCQkJaGVhZGVyKCdDYWNoZS1Db250cm9sOiBwcml2YXRlJyk7DQoJCQkJCUBpbmlf c2V0KCJ6bGliLm91dHB1dF9jb21wcmVzc2lvbiIsICJPZmYiKTsNCgkJCQkJQHNldF90aW1l X2xpbWl0KDApOw0KCQkJCQlAaWdub3JlX3VzZXJfYWJvcnQodHJ1ZSk7DQoNCgkJCQkJLy8g SGFuZC1vZmYgdG8gdGhlIHJlbW90ZSBmaWxlDQoJCQkJCWhlYWRlcignTG9jYXRpb246ICcg LiAkdXJsKTsNCg0KCQkJCQkvLyByZWNvcmQgZG93bmxvYWQgaWYgdGhlIGZpbGUgc2l6ZXMg bWF0Y2gNCgkJCQkJaWYgKGludHZhbCgkaGRyc1snY29udGVudC1sZW5ndGgnXSkgPT0gaW50 dmFsKCRyZWFsX2ZpbGVbJ3NpemUnXSkpIHsNCgkJCQkJCXNhZmVfdXBkYXRlKCJ0eHBfZmls ZSIsICJkb3dubG9hZHM9ZG93bmxvYWRzKzEiLCAnaWQ9Jy5pbnR2YWwoJGlkKSk7DQoJCQkJ CQlsb2dfaGl0KCcyMDAnKTsNCgkJCQkJfQ0KCQkJCQkvLyByZW1vdGUgZG93bmxvYWQgZG9u ZTogZ2FtZSBvdmVyDQoJCQkJCWV4aXQoMCk7DQoNCgkJCQl9IGVsc2Ugew0KCQkJCQkkZmls ZV9lcnJvciA9IDQwNDsNCgkJCQl9DQoJCQl9IGVsc2Ugew0KCQkJCSRmaWxlX2Vycm9yID0g NDA0Ow0KCQkJfQ0KCQl9DQoJfQ0KCS8vIHJlbW90ZSBkb3dubG9hZCBub3QgZG9uZSAtIGxl YXZlIHRvIFRYUCB0byBoYW5kbGUgZXJyb3Igb3IgImxvY2FsIiBmaWxlIGRvd25sb2FkDQoJ cmV0dXJuOw0KfQ0KDQpmdW5jdGlvbiBzbWRfcmVtb3RlX2pzKCRjb250ZW50KSB7DQoJJG91 dCA9ICc8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Jy5uOw0KCSRvdXQgLj0gJGNv bnRlbnQubjsNCgkkb3V0IC49ICc8L3NjcmlwdD4nLm47DQoJcmV0dXJuICRvdXQ7DQp9DQoN Ci8vIFBIUDQgZW11bGF0aW9uKGlzaCkgb2YgUEhQNSdzIGdldF9oZWFkZXJzKCkuIFN0b2xl biBmcm9tIHBocC5uZXQgYW5kIG1vZGRlZA0KZnVuY3Rpb24gc21kX2dldF9oZWFkZXJzKCR1 cmwsICRmb3JtYXQ9MCkgew0KCWlmICghJHVybCkgew0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0K CSR1aW5mbz1wYXJzZV91cmwoJHVybCk7DQoJJGhlYWRlcnMgPSBhcnJheSgpOw0KCWlmIChp c19jYWxsYWJsZSgnY2hlY2tkbnNycicpICYmICFjaGVja2Ruc3JyKCR1aW5mb1snaG9zdCdd LicuJywnTVgnKSAmJiAhY2hlY2tkbnNycigkdWluZm9bJ2hvc3QnXS4nLicsJ0EnKSkgew0K CQlyZXR1cm4gZmFsc2U7DQoJfQ0KCSRwb3J0ID0gaXNzZXQoJHVpbmZvWydwb3J0J10pID8g JHVpbmZvWydwb3J0J10gOiA4MDsNCgkkZnA9ZnNvY2tvcGVuKCR1aW5mb1snaG9zdCddLCAk cG9ydCwgJGVycm5vLCAkZXJyc3RyLCA1KTsNCg0KCWlmKCRmcCkgew0KCQkkaGVhZCA9ICJH RVQgIi5AJHVpbmZvWydwYXRoJ10uIj8iLkAkdWluZm9bJ3F1ZXJ5J10uIiBIVFRQLzEuMFxy XG4iOw0KCQkkaGVhZCAuPSAiSG9zdDogIi5AJHVpbmZvWydob3N0J10uIjoiLiRwb3J0LiJc clxuIjsNCgkJJGhlYWQgLj0gIkNvbm5lY3Rpb246IENsb3NlXHJcbiI7DQoJCSRoZWFkIC49 ICJBY2NlcHQ6ICovKlxyXG4iOw0KCQlpZiAoQCR1aW5mb1sndXNlciddKSB7DQoJCQkkaGVh ZCAuPSAiQXV0aG9yaXphdGlvbjogQmFzaWMgIi5iYXNlNjRfZW5jb2RlKCR1aW5mb1sndXNl ciddLic6Jy4kdWluZm9bJ3Bhc3MnXSkuIlxyXG4iOw0KCQl9DQoJCSRoZWFkIC49ICJcclxu IjsNCgkJZnB1dHMoJGZwLCAkaGVhZCk7DQoJCSRlb2hlYWRlciA9IGZhbHNlOw0KCQl3aGls ZSghZmVvZigkZnApIG9yICgkZW9oZWFkZXI9PXRydWUpKSB7DQoJCQlpZigkaGVhZGVyPWZn ZXRzKCRmcCwgMTAyNCkpIHsNCgkJCQlpZiAoJGhlYWRlciA9PSAiXHJcbiIpIHsNCgkJCQkJ JGVvaGVhZGVyID0gdHJ1ZTsNCgkJCQkJYnJlYWs7DQoJCQkJfSBlbHNlIHsNCgkJCQkJJGhl YWRlciA9IHRyaW0oJGhlYWRlcik7DQoJCQkJfQ0KCQkJCWlmKCRmb3JtYXQgPT0gMSkgew0K CQkJCQkka2V5ID0gc3RydG9sb3dlcihhcnJheV9zaGlmdChleHBsb2RlKCc6ICcsJGhlYWRl cikpKTsNCgkJCQkJaWYoJGtleSA9PSAkaGVhZGVyKSB7DQoJCQkJCQkkaGVhZGVyc1tdID0g JGhlYWRlcjsNCgkJCQkJfSBlbHNlIHsNCgkJCQkJCSRoZWFkZXJzWyRrZXldPXN1YnN0cigk aGVhZGVyLHN0cmxlbigka2V5KSsyKTsNCgkJCQkJfQ0KCQkJCQl1bnNldCgka2V5KTsNCgkJ CQl9IGVsc2Ugew0KCQkJCQkkaGVhZGVyc1tdID0gJGhlYWRlcjsNCgkJCQl9DQoJCQl9DQoJ CX0NCgkJcmV0dXJuICRoZWFkZXJzOw0KDQoJfSBlbHNlIHsNCgkJcmV0dXJuIGZhbHNlOw0K CX0NCn0iO3M6NDoidHlwZSI7czoxOiIxIjtzOjU6ImZsYWdzIjtzOjE6IjAiO3M6NToib3Jk ZXIiO3M6MToiNSI7czozOiJtZDUiO3M6MzI6IjMxNWQzMDA0OGFhN2FmMzYyYjg4MTU4NTRi YWQwZDlkIjt9