Lex, Sorry if this is a bad time to mention it, but it seemed to me that MIMEDocument is a clear candidate for unification with MIMEPart, while leaving MailMessage as a (mostly) dumb container. This partitioning seemed natural because the structured content might not arrive via mail, though it doesn't seem critical.
Either way, do you agree that MIMEDoc should go? (I'm feeling the woes of postponing my refactoring... ;-)
About giving MailMessage content-sensitive behavior, I'd propose a Strategy pattern. Have a dictionary from some combination of content-type and disposition to appropriate strategy classes, and have every MailMessage choose it's own, and delegate content-type sensitive actions to it. This would include it's favorite display, a menu of appropriate actions and so forth.
This solution uses classes to allow extendability per package.
BTW, I skimmed the code and saw various cosmetic change (names and stuff) which I liked... way to go.
"Lex Spoon" lex@cc.gatech.edu wrote:
--==CelesteAttachment35733== Content-Type: text/plain; charset="us-ascii"
Below is a single changeset that incorporates Daniel Vainsencher's recent posts into Celeste, allowing Celeste to deal with attachments when sending, receiving, and forwarding. It files cleanly into the most recent 2.8a, and in fact that's where I'm sending this message from.
This is mostly Daniel's code, but it has several small adjustments by me, including:
MIMEPart is merged into MailMessage, to try and simplify things
the UI is uses clickable text, instead of an extra menu item.
the "message/rfc822" type is handled now, and so recursive messages
work.
- forwarding uses a multipart format, so that attachments are
preserved.
Unless I've missed something important, or this thing starts crashing people's images, I wholeheartedly suggest we get this changeset into the main system. Or heck, put it out anyway, and let someone send in a bug fix. Attachments have been Celeste's biggest weakness, and due to the combined effort of a lot of people each spending a tiny amount of time, that weakness is finally removed.
-Lex
--==CelesteAttachment35733== Content-Type: application/octet-stream; name="attachments-dvf.5.cs" Content-Disposition: attachment; filename="attachments-dvf.5.cs" Content-Transfer-Encoding: base64
J0Zyb20gU3F1ZWFrMi44YWxwaGEgb2YgOSBNYXJjaCAyMDAwIFtsYXRlc3QgdXBkYXRlOiAj MjAwNV0gb24gMzAgQXByaWwgMjAwMCBhdCAxMTo0OTo1NiBwbSchDSJDaGFuZ2UgU2V0OgkJ Q2VsZXN0ZTMNRGF0ZToJCQlBcHJpbCAyMDAwDUF1dGhvcjoJCQlEYW5pZWwgVmFpbnNlbmNo ZXIgYW5kIExleCBTcG9vbg0NQWxsb3dzIHNlbmRpbmcgYW5kIHJlY2VpdmluZyBhdHRhY2ht ZW50cyBpbiBDZWxlc3RlLiIhDQ1Nb2RlbCBzdWJjbGFzczogI0NlbGVzdGUNCWluc3RhbmNl VmFyaWFibGVOYW1lczogJ21haWxEQiBjdXJyZW50Q2F0ZWdvcnkgY3VycmVudE1lc3NhZ2Vz IGN1cnJlbnRUT0MgY3VycmVudE1zZ0lEIGxhc3RDYXRlZ29yeSBzdWJqZWN0RmlsdGVyIGZy b21GaWx0ZXIgZGF0ZUZpbHRlciBjdXN0b21GaWx0ZXJCbG9jayBmb3JtYXRNZXNzYWdlcyBs YXN0Q2F0ZWdvcnlMaXN0IGxhc3RDYXRlZ29yeU1lbnUgbWVzc2FnZVRleHRWaWV3IHVzZXJQ YXNzd29yZCBzdGF0dXMgJw0JY2xhc3NWYXJpYWJsZU5hbWVzOiAnQ0NMaXN0IEN1c3RvbUZp bHRlcnMgRGVsZXRlSW5ib3hBZnRlckZldGNoaW5nIEZvcm1hdFdoZW5GZXRjaGluZyBQb3BT ZXJ2ZXIgUG9wVXNlck5hbWUgU210cFNlcnZlciBTdXBwcmVzc1dvcnRobGVzc0hlYWRlckZp ZWxkcyBVc2VyTmFtZSAnDQlwb29sRGljdGlvbmFyaWVzOiAnJw0JY2F0ZWdvcnk6ICdOZXR3 b3JrLU1haWwgUmVhZGVyJyENTW9kZWwgc3ViY2xhc3M6ICNDZWxlc3RlQ29tcG9zaXRpb24N CWluc3RhbmNlVmFyaWFibGVOYW1lczogJ2NlbGVzdGUgbWVzc2FnZVRleHQgdGV4dEVkaXRv ciBtb3JwaGljV2luZG93IG12Y1dpbmRvdyBhdHRhY2htZW50U2VwYXJhdG9yICcNCWNsYXNz VmFyaWFibGVOYW1lczogJycNCXBvb2xEaWN0aW9uYXJpZXM6ICcnDQljYXRlZ29yeTogJ05l dHdvcmstTWFpbCBSZWFkZXInIQ1PYmplY3Qgc3ViY2xhc3M6ICNNSU1FSGVhZGVyVmFsdWUN CWluc3RhbmNlVmFyaWFibGVOYW1lczogJ21haW5WYWx1ZSBwYXJhbWV0ZXJzICcNCWNsYXNz VmFyaWFibGVOYW1lczogJycNCXBvb2xEaWN0aW9uYXJpZXM6ICcnDQljYXRlZ29yeTogJ05l dHdvcmstTWFpbCBSZWFkZXInIQ1PYmplY3Qgc3ViY2xhc3M6ICNNYWlsTWVzc2FnZQ0JaW5z dGFuY2VWYXJpYWJsZU5hbWVzOiAndGltZSBmcm9tIHRvIGNjIHN1YmplY3QgdGV4dCBib2R5 IHNlcGFyYXRvciBmaWVsZHMgcGFydHMgJw0JY2xhc3NWYXJpYWJsZU5hbWVzOiAnJw0JcG9v bERpY3Rpb25hcmllczogJycNCWNhdGVnb3J5OiAnTmV0d29yay1NYWlsIFJlYWRlcichDVRl eHRBdHRyaWJ1dGUgc3ViY2xhc3M6ICNUZXh0TWVzc2FnZUxpbmsNCWluc3RhbmNlVmFyaWFi bGVOYW1lczogJ21lc3NhZ2UgJw0JY2xhc3NWYXJpYWJsZU5hbWVzOiAnJw0JcG9vbERpY3Rp b25hcmllczogJycNCWNhdGVnb3J5OiAnTmV0d29yay1NYWlsIFJlYWRlcichDQ0hVGV4dE1l c3NhZ2VMaW5rIGNvbW1lbnRTdGFtcDogJ2xzIDQvMzAvMjAwMCAxODo1NCcgcHJpb3I6IDAh DUEgbGluayB0byBhIGhpZGRlbiBtYWlsIG1lc3NhZ2UuICBDbGlja2luZyBvbiBpdCBhbGxv d3MgdGhlIG1lc3NhZ2UgdG8gYmUgdmlld2VkIG9yIHNhdmVkIHRvIGRpc2suIQ0NIUNlbGVz dGUgbWV0aG9kc0ZvcjogJ2NhdGVnb3JpZXMgcGFuZScgc3RhbXA6ICdkdmYgNC8yNy8yMDAw IDIxOjA0JyENbWVzc2FnZXM6IGFjdHVhbGx5U2hvd24gZnJvbTogcG9zc2libGUgDQlzdGF0 dXMgXyAnU2hvd2luZyAnICwgYWN0dWFsbHlTaG93biBwcmludFN0cmluZyAsICcgb2YgJyAs IHBvc3NpYmxlIHByaW50U3RyaW5nICwgJyBtZXNzYWdlcyBpbiAnLCBzZWxmIGNhdGVnb3J5 Lg0Jc2VsZiBjaGFuZ2VkOiBzdGF0dXMhICENDSFDZWxlc3RlIG1ldGhvZHNGb3I6ICd0YWJs ZSBvZiBjb250ZW50cyBwYW5lJyBzdGFtcDogJ2R2ZiA0LzI3LzIwMDAgMDA6MTQnIQ1zYXZl TWVzc2FnZQ0JInNhdmUgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBtZXNzYWdlIHRvIGEgZmls ZSINCXwgZmlsZU5hbWUgZmlsZSB8DQljdXJyZW50TXNnSUQgaWZOaWw6IFteIHNlbGZdLg0J ZmlsZU5hbWUgXyBGaWxsSW5UaGVCbGFuayByZXF1ZXN0OiAnZmlsZSB0byBzYXZlIGluJy4N CWZpbGVOYW1lIGlzRW1wdHkgaWZUcnVlOiBbXiBzZWxmXS4NCWZpbGUgXyBGaWxlU3RyZWFt IGZpbGVOYW1lZDogZmlsZU5hbWUuDQlmaWxlIG5leHRQdXRBbGw6IChzZWxmIGN1cnJlbnRN ZXNzYWdlKSB0ZXh0Lg0JZmlsZSBjbG9zZSEgIQ0NIUNlbGVzdGUgbWV0aG9kc0ZvcjogJ21l c3NhZ2UgdGV4dCBwYW5lJyBzdGFtcDogJ2xzIDQvMzAvMjAwMCAxODozMychDW1lc3NhZ2VU ZXh0DQkiQW5zd2VyIHRoZSB0ZXh0IHdoaWNoIG1ha2VzIHVwIHRoZSBjb21wbGV0ZSBtZXNz YWdlIChoZWFkZXIrYm9keSkiDQ0JKGN1cnJlbnRNc2dJRCBpc05pbCkgaWZUcnVlOiBbXicn XS4NDQkiQWx3YXlzIHNob3cgdGhlIGZ1bGwgbWVzc2FnZSBoZWFkZXIgZm9yIG1lc3NhZ2Vz IGluIHRoZSBjYXRlZ29yeSAudG9zZW5kLiBzbyB0aGF0IGFsbCBzcGVjaWFsIGhlYWRlciBs aW5lcyBhcmUgcHJlc2VydmVkLCBzaG93biBhbmQgY2FuIGJlIGVkaXRlZC4iDQkoY3VycmVu dENhdGVnb3J5ID0gJy50b3NlbmQuJykNCQlpZlRydWU6IFteIG1haWxEQiBnZXRUZXh0OiBj dXJyZW50TXNnSURdLg0NCVN1cHByZXNzV29ydGhsZXNzSGVhZGVyRmllbGRzDQkJaWZUcnVl OiBbXiBzZWxmIGN1cnJlbnRNZXNzYWdlIGZvcm1hdHRlZFRleHRdDQkJaWZGYWxzZTogW14g bWFpbERCIGdldFRleHQ6IGN1cnJlbnRNc2dJRF0uDSEgIQ0NIUNlbGVzdGUgbWV0aG9kc0Zv cjogJ290aGVyJyBzdGFtcDogJ2R2ZiA0LzI3LzIwMDAgMDA6MTInIQ1jdXJyZW50TWVzc2Fn ZQ0JXm1haWxEQiBnZXRNZXNzYWdlOiBjdXJyZW50TXNnSUQhICENDSFDZWxlc3RlIG1ldGhv ZHNGb3I6ICdzZW5kaW5nIG1haWwnIHN0YW1wOiAnbHMgNC8zMC8yMDAwIDIzOjEyJyENZm9y d2FyZFRleHRGb3I6IG1zZ0lEDQkiQW5zd2VyIHRoZSB0ZW1wbGF0ZSBmb3IgZm9yd2FyZGlu ZyB0aGUgbWVzc2FnZSB3aXRoIHRoZSBnaXZlbiBJRC4iDQl8IG1zZyBzZXBhcmF0b3IgfA0J bXNnIDo9IHNlbGYgY3VycmVudE1lc3NhZ2UuDQ0JXlN0cmluZyBzdHJlYW1Db250ZW50czog WyA6c3RyIHwNCQkiRnJvbSBoZWFkZXIiDQkJc3RyIG5leHRQdXRBbGw6ICdGcm9tOiAnOw0J CW5leHRQdXRBbGw6IENlbGVzdGUgdXNlck5hbWU7IGNyLg0NCQkiUHV0IGEgYmxhbmsgVG8i DQkJc3RyIG5leHRQdXRBbGw6ICdUbzogJzsgY3IuDQ0JCSJBZGQgYSBzdWJqZWN0IG1vZGlm aWVkIGZyb20gdGhlIG9yaWdpbmFsIg0JCXN0ciBuZXh0UHV0QWxsOiAnU3ViamVjdDogKGZ3 ZCkgJy4NCQlzdHIgbmV4dFB1dEFsbDogbXNnIHN1YmplY3QuDQkJc3RyIGNyLg0NDQkJIkFk ZCBhdXRvLWNjIGlmIGl0J3MgYmVlbiBzZXQiDQkJQ2VsZXN0ZSBjY0xpc3QgaXNFbXB0eSBp ZkZhbHNlOiBbDQkJCXN0ciBuZXh0UHV0QWxsOiAnQ2M6ICcuDQkJCXN0ciBuZXh0UHV0QWxs OiBDZWxlc3RlIGNjTGlzdDsgY3JdLg0NCQkiYWRkIHRoZSBtaW1lIGhlYWRlcnMgdG8gbWFr ZSBpdCBtdWx0aS1wYXJ0Ig0JCXNlcGFyYXRvciA6PSBNYWlsTWVzc2FnZSBnZW5lcmF0ZVNl cGFyYXRvci4NCQlzdHIgbmV4dFB1dEFsbDogJ01JTUUtVmVyc2lvbjogMS4wJzsgY3IuDQkJ c3RyIG5leHRQdXRBbGw6ICdDb250ZW50LXR5cGU6IG11bHRpcGFydC9taXhlZDsgc2VwYXJh dG9yPScuDQkJc3RyIG5leHRQdXRBbGw6IHNlcGFyYXRvci4NCQlzdHIgY3IuDQ0JCSJza2lw IGRvd24gdG8gdGhlIG1haW4gcGFydCBvZiB0aGUgbWVzc2FnZSINCQlzdHIgY3IuDQkJc3Ry IG5leHRQdXRBbGw6ICctLSc7IG5leHRQdXRBbGw6IHNlcGFyYXRvcjsgY3IuDQkJc3RyIG5l eHRQdXRBbGw6ICdDb250ZW50LXR5cGU6IHRleHQvcGxhaW4nOyBjcjsgY3IuDQ0JCSJpbnNl cnQgdGhlIGZvcndhcmRlZCBtZXNzYWdlIg0JCXN0ciBjcjsgY3I7IG5leHRQdXRBbGw6ICc9 PT09Zm9yd2FyZGVkPT09PSc7IGNyOyBjci4NCQlzdHIgbmV4dFB1dEFsbDogJy0tJzsgbmV4 dFB1dEFsbDogc2VwYXJhdG9yOyBjci4NCQlzdHIgbmV4dFB1dEFsbDogJ0NvbnRlbnQtdHlw ZTogbWVzc2FnZS9yZmM4MjInOyBjcjsgY3IuDQkJc3RyIG5leHRQdXRBbGw6IG1zZyB0ZXh0 OyBjci4NDQkJImZpbmFsIHNlcGFyYXRvciINCQlzdHIgbmV4dFB1dEFsbDogJy0tJzsgbmV4 dFB1dEFsbDogc2VwYXJhdG9yOyBuZXh0UHV0QWxsOiAnLS0nOyBjci4NCV0uISAhDQ0NIUNl bGVzdGVDb21wb3NpdGlvbiBtZXRob2RzRm9yOiAncHJpdmF0ZScgc3RhbXA6ICdkdmYgNC8y OC8yMDAwIDAyOjE5JyENaGFzQXR0YWNobWVudHMNCV4gYXR0YWNobWVudFNlcGFyYXRvciBu b3ROaWwhICENDSFDZWxlc3RlQ29tcG9zaXRpb24gbWV0aG9kc0ZvcjogJ2ludGVyZmFjZScg c3RhbXA6ICdkdmYgNC8yOC8yMDAwIDAzOjIxJyENYWRkQXR0YWNobWVudA0JfCBmaWxlIGZp bGVSZXN1bHQgZmlsZU5hbWUgc3RybSB8DQl0ZXh0RWRpdG9yDQkJaWZOb3ROaWw6IFtzZWxm IGhhc1VuYWNjZXB0ZWRFZGl0cyBpZlRydWU6IFt0ZXh0RWRpdG9yIGFjY2VwdF1dLg0JInRy YW5zZm9ybSBpbnRvIG11bHRpcGFydCBpZiBuZWVkZWQiDQlzZWxmIGhhc0F0dGFjaG1lbnRz IGlmRmFsc2U6IFtzZWxmIHRyYW5zZm9ybVRvTXVsdGlwYXJ0XS4NCSJ0aGVuIHNpbXBseSBh cHBlbmQgYW5vdGhlciBhdHRhY2htZW50IHNlY3Rpb24iDQkoZmlsZVJlc3VsdCBfIFN0YW5k YXJkRmlsZU1lbnUgb2xkRmlsZSkNCQlpZk5vdE5pbDogDQkJCVtmaWxlTmFtZSBfIGZpbGVS ZXN1bHQgZGlyZWN0b3J5IGZ1bGxOYW1lRm9yOiBmaWxlUmVzdWx0IG5hbWUuDQkJCWZpbGUg XyBGaWxlU3RyZWFtIG9sZEZpbGVOYW1lZDogZmlsZU5hbWUuDQkJCWZpbGUNCQkJCWlmTm90 TmlsOiANCQkJCQlbc3RybSBfIFdyaXRlU3RyZWFtIG9uOiAoU3RyaW5nIG5ldzogMTAwKS4N CQkJCQlzdHJtIG5leHRQdXRBbGw6ICdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL29jdGV0 LXN0cmVhbTsgbmFtZT0iJyAsIGZpbGVSZXN1bHQgbmFtZSAsICciJzsNCQkJCQkgY3I7DQkJ CQkJIG5leHRQdXRBbGw6ICdDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxl bmFtZT0iJyAsIGZpbGVSZXN1bHQgbmFtZSAsICciJzsNCQkJCQkgY3I7DQkJCQkJIG5leHRQ dXRBbGw6ICdDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiYXNlNjQnOw0JCQkJCSBjcjsN CQkJCQkgY3IuDQkJCQkJQmFzZTY0TWltZUNvbnZlcnRlciBuZXcgZGF0YVN0cmVhbTogZmls ZTsNCQkJCQkgbWltZVN0cmVhbTogc3RybTsNCQkJCQkgbWltZUVuY29kZS4NCQkJCQlzdHJt IGNyOyBuZXh0UHV0QWxsOiAnLS0nICwgYXR0YWNobWVudFNlcGFyYXRvcjsgY3IuIHNlbGYg bWVzc2FnZVRleHQ6IChzZWxmIG1lc3NhZ2VUZXh0LCBzdHJtIGNvbnRlbnRzKV1dISAhDQ0h Q2VsZXN0ZUNvbXBvc2l0aW9uIG1ldGhvZHNGb3I6ICdpbnRlcmZhY2UnIHN0YW1wOiAnZHZm IDQvMjgvMjAwMCAwMjowNichDW9wZW5Jbk1vcnBoaWMNCSJvcGVuIGFuIGludGVyZmFjZSBm b3Igc2VuZGluZyBhIG1haWwgbWVzc2FnZSB3aXRoIHRoZSBnaXZlbiBpbml0aWFsIA0JdGV4 dCAiDQl8IHRleHRNb3JwaCBidXR0b25zTGlzdCBzZW5kQnV0dG9uIGF0dGFjaG1lbnRCdXR0 b24gfA0JbW9ycGhpY1dpbmRvdyBfIFN5c3RlbVdpbmRvdyBsYWJlbGxlZDogJ01pc3RlciBQ b3N0bWFuJy4NCW1vcnBoaWNXaW5kb3cgbW9kZWw6IHNlbGYuDQl0ZXh0RWRpdG9yIF8gdGV4 dE1vcnBoIF8gUGx1Z2dhYmxlVGV4dE1vcnBoDQkJCQkJCW9uOiBzZWxmDQkJCQkJCXRleHQ6 ICNtZXNzYWdlVGV4dA0JCQkJCQlhY2NlcHQ6ICNtZXNzYWdlVGV4dDouDQltb3JwaGljV2lu ZG93IGFkZE1vcnBoOiB0ZXh0TW9ycGggZnJhbWU6ICgwIEAgMC4xIGNvcm5lcjogMSBAIDEp Lg0JYnV0dG9uc0xpc3QgXyBBbGlnbm1lbnRNb3JwaCBuZXdSb3cuDQlzZW5kQnV0dG9uIF8g UGx1Z2dhYmxlQnV0dG9uTW9ycGgNCQkJCW9uOiBzZWxmDQkJCQlnZXRTdGF0ZTogbmlsDQkJ CQlhY3Rpb246ICNzdWJtaXQuDQlzZW5kQnV0dG9uIGxhYmVsOiAnc2VuZCBtZXNzYWdlJy4N CXNlbmRCdXR0b24gc2V0QmFsbG9vblRleHQ6ICdhZGQgdGhpcyB0byB0aGUgcXVldWUgb2Yg bWVzc2FnZXMgdG8gYmUgc2VudCcuDQlzZW5kQnV0dG9uIG9uQ29sb3I6IENvbG9yIHdoaXRl IG9mZkNvbG9yOiBDb2xvciB3aGl0ZS4NCWJ1dHRvbnNMaXN0IGFkZE1vcnBoQmFjazogc2Vu ZEJ1dHRvbi4NCQ0JYXR0YWNobWVudEJ1dHRvbiBfIFBsdWdnYWJsZUJ1dHRvbk1vcnBoDQkJ CQlvbjogc2VsZg0JCQkJZ2V0U3RhdGU6IG5pbA0JCQkJYWN0aW9uOiAjYWRkQXR0YWNobWVu dC4NCWF0dGFjaG1lbnRCdXR0b24gbGFiZWw6ICdhZGQgYXR0YWNobWVudCcuDQlhdHRhY2ht ZW50QnV0dG9uIHNldEJhbGxvb25UZXh0OiAnU2VuZCBhIGZpbGUgd2l0aCB0aGUgbWVzc2Fn ZScuDQlhdHRhY2htZW50QnV0dG9uIG9uQ29sb3I6IENvbG9yIHdoaXRlIG9mZkNvbG9yOiBD b2xvciB3aGl0ZS4NCWJ1dHRvbnNMaXN0IGFkZE1vcnBoQmFjazogYXR0YWNobWVudEJ1dHRv bi4NCQ0JbW9ycGhpY1dpbmRvdyBhZGRNb3JwaDogYnV0dG9uc0xpc3QgZnJhbWU6ICgwIEAg MCBleHRlbnQ6IDEgQCAwLjEpLg0JbW9ycGhpY1dpbmRvdyBvcGVuSW5NVkMhICENDSFDZWxl c3RlQ29tcG9zaXRpb24gbWV0aG9kc0ZvcjogJ2ludGVyZmFjZScgc3RhbXA6ICdscyA0LzMw LzIwMDAgMjI6NTgnIQ10cmFuc2Zvcm1Ub011bHRpcGFydA0JfCBvbGRQYXJ0IG5ld1RleHQg c3RybSB8DQlvbGRQYXJ0IF8gTWFpbE1lc3NhZ2UgZnJvbTogc2VsZiBtZXNzYWdlVGV4dCBh c1N0cmluZy4NCWF0dGFjaG1lbnRTZXBhcmF0b3IgXyBNYWlsTWVzc2FnZSBnZW5lcmF0ZVNl cGFyYXRvci4NCW5ld1RleHQgXyBTdHJpbmcgbmV3OiAyMDAuDQlzdHJtIF8gV3JpdGVTdHJl YW0gb246IG5ld1RleHQuDQlzdHJtIG5leHRQdXRBbGw6ICdNaW1lLVZlcnNpb246IDEuMCc7 DQkgY3I7DQkgbmV4dFB1dEFsbDogJ0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBi b3VuZGFyeT0iJzsNCSBuZXh0UHV0QWxsOiBhdHRhY2htZW50U2VwYXJhdG9yOw0JIG5leHRQ dXQ6ICQiOw0JIGNyOw0JIG5leHRQdXRBbGw6IG9sZFBhcnQgZmllbGRzQXNNaW1lSGVhZGVy Ow0JIGNyO2NyOw0JIG5leHRQdXRBbGw6ICctLScgLCBhdHRhY2htZW50U2VwYXJhdG9yOw0J IGNyOw0JIG5leHRQdXRBbGw6ICdDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9 InVzLWFzY2lpIic7DQkgY3I7DQkgY3I7DQkgbmV4dFB1dEFsbDogb2xkUGFydCBjb250ZW50 Ow0JIGNyOw0JIG5leHRQdXRBbGw6ICctLScgLCBhdHRhY2htZW50U2VwYXJhdG9yOw0JIGNy Lg0Jc2VsZiBtZXNzYWdlVGV4dDogc3RybSBjb250ZW50cyEgIQ0NDSFNSU1FRG9jdW1lbnQg bWV0aG9kc0ZvcjogJ2FzIHlldCB1bmNsYXNzaWZpZWQnIHN0YW1wOiAnbHMgNC8zMC8yMDAw IDE4OjA3JyENaXNNdWx0aXBhcnQNCV5zZWxmIG1haW5UeXBlID0gJ211bHRpcGFydCchICEN DSFNSU1FRG9jdW1lbnQgbWV0aG9kc0ZvcjogJ2FzIHlldCB1bmNsYXNzaWZpZWQnIHN0YW1w OiAnbHMgNC8zMC8yMDAwIDE4OjQ1JyENaXNNdWx0aXBhcnRBbHRlcm5hdGl2ZQ0JIndoZXRo ZXIgdGhlIGRvY3VtZW50IGlzIGluIGEgbXVsdGlwYXJ0IGZvcm1hdCB3aGVyZSB0aGUgcGFy dHMgYXJlIGFsdGVybmF0ZXMiDQleIHNlbGYgY29udGVudFR5cGUgPSAnbXVsdGlwYXJ0L2Fs dGVybmF0aXZlJw0hICENDQ0hTUlNRUhlYWRlclZhbHVlIG1ldGhvZHNGb3I6ICdhY2Nlc3Np bmcnIHN0YW1wOiAnZHZmIDQvMjcvMjAwMCAxODo1NSchDW1haW5WYWx1ZQ0JXm1haW5WYWx1 ZSEgIQ0NIU1JTUVIZWFkZXJWYWx1ZSBtZXRob2RzRm9yOiAnYWNjZXNzaW5nJyBzdGFtcDog J2R2ZiA0LzI3LzIwMDAgMTg6MTMnIQ1tYWluVmFsdWU6IGFuT2JqZWN0DQltYWluVmFsdWUg XyBhbk9iamVjdCEgIQ0NIU1JTUVIZWFkZXJWYWx1ZSBtZXRob2RzRm9yOiAnYWNjZXNzaW5n JyBzdGFtcDogJ2R2ZiA0LzI3LzIwMDAgMTg6MTgnIQ1wYXJhbWV0ZXJzDQlecGFyYW1ldGVy cyEgIQ0NIU1JTUVIZWFkZXJWYWx1ZSBtZXRob2RzRm9yOiAnYWNjZXNzaW5nJyBzdGFtcDog J2R2ZiA0LzI3LzIwMDAgMTg6MTEnIQ1wYXJhbWV0ZXJzOiBhbk9iamVjdA0JcGFyYW1ldGVy cyBfIGFuT2JqZWN0ISAhDQ0hTUlNRUhlYWRlclZhbHVlIG1ldGhvZHNGb3I6ICdwcmludGlu Zycgc3RhbXA6ICdkdmYgNC8yOC8yMDAwIDAyOjQ4JyENYXNIZWFkZXJWYWx1ZQ0JfCBzdHJt IHwNCXN0cm0gXyBXcml0ZVN0cmVhbSBvbjogKFN0cmluZyBuZXc6IDIwKS4NCXN0cm0gbmV4 dFB1dEFsbDogbWFpblZhbHVlLg0JcGFyYW1ldGVycyBhc3NvY2lhdGlvbnNEbzogWzplIHwg c3RybSBuZXh0UHV0OiAkOyA7IG5leHRQdXRBbGw6IGUga2V5Ow0JCSBuZXh0UHV0QWxsOiAn PSInOw0JCSBuZXh0UHV0QWxsOiBlIHZhbHVlICwgJyInXS4NCV4gc3RybSBjb250ZW50cyEg IQ0NDSFNSU1FSGVhZGVyVmFsdWUgY2xhc3MgbWV0aG9kc0ZvcjogJ2FzIHlldCB1bmNsYXNz aWZpZWQnIHN0YW1wOiAnbHMgNC8zMC8yMDAwIDE5OjIxJyENZnJvbVN0cmluZzogYVN0cmlu ZyANCXwgcGFydHMgbmV3VmFsdWUgcGFybXMgdGVtcCB8DQ0JcGFydHMgXyBSZWFkU3RyZWFt IG9uOiAoYVN0cmluZyBmaW5kVG9rZW5zOiAnOycpLg0JbmV3VmFsdWUgXyBzZWxmIG5ldyBt YWluVmFsdWU6IHBhcnRzIG5leHQuDQlwYXJtcyBfIERpY3Rpb25hcnkgbmV3Lg0JcGFydHMg ZG86IA0JCVs6ZSB8IA0JCXRlbXAgXyBlIHdpdGhCbGFua3NUcmltbWVkIGZpbmRUb2tlbnM6 ICc9IicuDQkJdGVtcCBzaXplID0gMiBpZlRydWU6IFsNCQkJcGFybXMgYXQ6IHRlbXAgZmly c3QgYXNMb3dlcmNhc2UgcHV0OiB0ZW1wIHNlY29uZF1dLg0JbmV3VmFsdWUgcGFyYW1ldGVy czogcGFybXMuDQleIG5ld1ZhbHVlISAhDQ0NIU1haWxNZXNzYWdlIG1ldGhvZHNGb3I6ICdp bml0aWFsaXplLXJlbGVhc2UnIHN0YW1wOiAnbHMgNC8zMC8yMDAwIDIyOjQ3JyENZnJvbTog YVN0cmluZyANCSJQYXJzZSBhU3RyaW5nIHRvIGluaXRpYWxpemUgbXlzZWxmLiINCXwgcGFy c2VTdHJlYW0gaXNNaW1lIGNvbnRlbnRUeXBlIGJvZHlUZXh0IGNvbnRlbnRUcmFuc2ZlckVu Y29kaW5nIHwNCXRpbWUgXyAwLg0JZnJvbSBfIHRvIF8gY2MgXyBzdWJqZWN0IF8gJycgY29w eS4NCXRleHQgXyBhU3RyaW5nIHdpdGhvdXRUcmFpbGluZ0JsYW5rcy4NCXBhcnNlU3RyZWFt IF8gUmVhZFN0cmVhbSBvbjogdGV4dC4NCWlzTWltZSBfIGZhbHNlLg0JIm1kcjogdGhpcyBk b2VzIG5vdCBhcHBlYXIgdG8gYmUgdXNlZCINCWNvbnRlbnRUeXBlIF8gJ3RleHQvcGxhaW4n Lg0JY29udGVudFRyYW5zZmVyRW5jb2RpbmcgXyBuaWwuDQlmaWVsZHMgOj0gRGljdGlvbmFy eSBuZXcuDQ0Jc2VsZiBmaWVsZHNGcm9tOiBwYXJzZVN0cmVhbSBkbzogDQkJWzpmTmFtZSA6 ZlZhbHVlIHwgDQkJZk5hbWUgPSAnZGF0ZScgaWZUcnVlOiBbdGltZSBfIChzZWxmIHRpbWVG cm9tOiBmVmFsdWUpIGlmTmlsOiBbIDAgXV0uDQkJZk5hbWUgPSAnZnJvbScgaWZUcnVlOiBb ZnJvbSBfIGZWYWx1ZV0uDQkJZk5hbWUgPSAndG8nDQkJCWlmVHJ1ZTogW3RvIGlzRW1wdHkN CQkJCQlpZlRydWU6IFt0byBfIGZWYWx1ZV0NCQkJCQlpZkZhbHNlOiBbdG8gXyB0byAsICcs ICcgLCBmVmFsdWVdXS4NCQlmTmFtZSA9ICdjYycNCQkJaWZUcnVlOiBbY2MgaXNFbXB0eQ0J CQkJCWlmVHJ1ZTogW2NjIF8gZlZhbHVlXQ0JCQkJCWlmRmFsc2U6IFtjYyBfIGNjICwgJywg JyAsIGZWYWx1ZV1dLg0JCWZOYW1lID0gJ3N1YmplY3QnIGlmVHJ1ZTogW3N1YmplY3QgXyBm VmFsdWVdLg0JCWZOYW1lID0gJ21pbWUtdmVyc2lvbicgaWZUcnVlOiBbaXNNaW1lIF8gdHJ1 ZV0uDQkJZk5hbWUgPSAnY29udGVudC10eXBlJyBpZlRydWU6IFtjb250ZW50VHlwZSBfIChm VmFsdWUgY29weVVwVG86ICQ7KSBhc0xvd2VyY2FzZV0uDQkJZk5hbWUgPSAnY29udGVudC10 cmFuc2Zlci1lbmNvZGluZycgaWZUcnVlOiBbY29udGVudFRyYW5zZmVyRW5jb2RpbmcgXyBm VmFsdWUgYXNMb3dlcmNhc2VdLg0NCQlmaWVsZHMgYXQ6IGZOYW1lIHB1dDogKE1JTUVIZWFk ZXJWYWx1ZSBmcm9tU3RyaW5nOiBmVmFsdWUpXS4NCWJvZHlUZXh0IF8gcGFyc2VTdHJlYW0g dXBUb0VuZC4NCWNvbnRlbnRUcmFuc2ZlckVuY29kaW5nID0gJ2Jhc2U2NCcNCQlpZlRydWU6 IA0JCQlbYm9keVRleHQgXyBCYXNlNjRNaW1lQ29udmVydGVyIG1pbWVEZWNvZGVUb0NoYXJz OiAoUmVhZFN0cmVhbSBvbjogYm9keVRleHQpLg0JCQlib2R5VGV4dCBfIGJvZHlUZXh0IGNv bnRlbnRzXS4NCWNvbnRlbnRUcmFuc2ZlckVuY29kaW5nID0gJ3F1b3RlZC1wcmludGFibGUn IGlmVHJ1ZTogW2JvZHlUZXh0IF8gYm9keVRleHQgZGVjb2RlUXVvdGVkUHJpbnRhYmxlXS4N CWJvZHkgXyBNSU1FRG9jdW1lbnQgY29udGVudFR5cGU6IGNvbnRlbnRUeXBlIGNvbnRlbnQ6 IGJvZHlUZXh0ISAhDQ0hTWFpbE1lc3NhZ2UgbWV0aG9kc0ZvcjogJ2FjY2Vzcycgc3RhbXA6 ICdscyA0LzMwLzIwMDAgMTg6MTUnIQ1maWVsZHMNCV4gZmllbGRzISAhDQ0hTWFpbE1lc3Nh Z2UgbWV0aG9kc0ZvcjogJ2FjY2Vzcycgc3RhbXA6ICdscyA0LzMwLzIwMDAgMTg6MjEnIQ1u YW1lDQkicmV0dXJuIGEgZGVmYXVsdCBuYW1lIGZvciB0aGlzIHBhcnQsIGlmIGFueSB3YXMg c3BlY2lmaWVkLiAgSWYgbm90LCByZXR1cm4gbmlsIg0JfCB0eXBlIG5hbWVGaWVsZCBkaXNw b3NpdGlvbiB8DQ0JInRyeSBpbiB0aGUgY29udGVudC10eXBlOiBoZWFkZXIiDQl0eXBlIF8g c2VsZiBmaWVsZHMgYXQ6ICdjb250ZW50LXR5cGUnIGlmQWJzZW50OiBbbmlsXS4NCSh0eXBl IG5vdE5pbCBhbmQ6IFsobmFtZUZpZWxkIF8gdHlwZSBwYXJhbWV0ZXJzIGF0OiAnbmFtZScg aWZBYnNlbnQ6IFtuaWxdKSBub3ROaWxdKQ0JCWlmVHJ1ZTogW14gbmFtZUZpZWxkXS4NDQki dHJ5IGluIGNvbnRlbnQtZGlzcG9zaXRpb246Ig0JZGlzcG9zaXRpb24gXyBzZWxmIGZpZWxk cyBhdDogJ2NvbnRlbnQtZGlzcG9zaXRpb24nIGlmQWJzZW50OiBbbmlsXS4NCShkaXNwb3Np dGlvbiBub3ROaWwgYW5kOiBbKG5hbWVGaWVsZCBfIGRpc3Bvc2l0aW9uIHBhcmFtZXRlcnMg YXQ6ICdmaWxlbmFtZScgaWZBYnNlbnQ6IFtuaWxdKSBub3ROaWxdKQ0JCWlmVHJ1ZTogW14g bmFtZUZpZWxkXS4NDQkiZ2l2ZSB1cCINCV4gbmlsISAhDQ0hTWFpbE1lc3NhZ2UgbWV0aG9k c0ZvcjogJ3ByaW50aW5nL2Zvcm1hdHRpbmcnIHN0YW1wOiAnbHMgNC8zMC8yMDAwIDIzOjM3 JyENYm9keVRleHRGb3JtYXR0ZWQNCSJBbnN3ZXIgYSB2ZXJzaW9uIG9mIHRoZSB0ZXh0IGlu IG15IGJvZHkgc3VpdGFibGUgZm9yIGRpc3BsYXkuICBUaGlzIHdpbGwgcGFyc2UgbXVsdGlw YXJ0IGZvcm1zLCBkZWNvZGUgSFRNTCwgYW5kIG90aGVyIHN1Y2ggdGhpbmdzIg0NCSJjaGVj ayBmb3IgbXVsdGlwYXJ0Ig0Jc2VsZiBib2R5IGlzTXVsdGlwYXJ0IGlmVHJ1ZTogWw0JCSJj aGVjayBmb3IgYWx0ZXJuYXRpdmUgZm9ybXMiDQkJc2VsZiBib2R5IGlzTXVsdGlwYXJ0QWx0 ZXJuYXRpdmUgaWZUcnVlOiBbDQkJCSJpdCdzIG11bHRpcGFydC9hbHRlcm5hdGl2ZS4gIHNl YXJjaCBmb3IgYSBwYXJ0IHRoYXQgd2UgY2FuIGRpc3BsYXksIGJpYXNpbmcgdG93YXJkcyBu aWNlciBmb3JtYXRzIg0JCQkjKCd0ZXh0L2h0bWwnICd0ZXh0L3BsYWluJykgZG86IFsgOmZv cm1hdCB8DQkJCQlzZWxmIHBhcnRzIGRvOiBbIDpwYXJ0IHwNCQkJCQlwYXJ0IGJvZHkgY29u dGVudFR5cGUgPSBmb3JtYXQgaWZUcnVlOiBbIF5wYXJ0IGJvZHlUZXh0Rm9ybWF0dGVkIF0g XSBdLg0NCQkJImNvdWxkbid0IGZpbmQgYSBkZXNpcmFibGUgcGFydCB0byBkaXNwbGF5OyBq dXN0IGRpc3BsYXkgdGhlIGZpcnN0IHBhcnQiDQkJCV5zZWxmIHBhcnRzIGZpcnN0IGJvZHlU ZXh0Rm9ybWF0dGVkIF0uDQ0JCSJub3QgYWx0ZXJuYXRpdmUgcGFydHMuICBwdXQgc29tZXRo aW5nIGZvciBlYWNoIHBhcnQiDQkJXlRleHQgc3RyZWFtQ29udGVudHM6IFsgOnN0ciB8DQkJ CXNlbGYgcGFydHMgZG86IFsgOnBhcnQgfA0JCQkJKCgjKCd0ZXh0JyAnbXVsdGlwYXJ0Jykg aW5jbHVkZXM6IHBhcnQgYm9keSBtYWluVHlwZSkgb3I6IA0JCQkJCVsgcGFydCBib2R5IGNv bnRlbnRUeXBlID0gJ21lc3NhZ2UvcmZjODIyJ10pDQkJCQlpZlRydWU6IFsNCQkJCQkidHJ5 IHRvIGlubGluZSB0aGUgbWVzc2FnZSBwYXJ0Ig0JCQkJCXN0ciBuZXh0UHV0QWxsOiBwYXJ0 IGJvZHlUZXh0Rm9ybWF0dGVkLiBdDQkJCQlpZkZhbHNlOiBbIA0JCQkJCXxkZXNjcmlwdCB8 DQkJCQkJc3RyIGNyLg0JCQkJCWRlc2NyaXB0IDo9IHBhcnQgbmFtZSBpZk5pbDogWyAnYXR0 YWNobWVudCcgXS4NCQkJCQlzdHIgbmV4dFB1dEFsbDogKFRleHQgc3RyaW5nOiAnWycsIGRl c2NyaXB0LCAnXScgIGF0dHJpYnV0ZTogKFRleHRNZXNzYWdlTGluayBtZXNzYWdlOiBwYXJ0 KSkuIF0gXSBdLiBdLg0NDQkiY2hlY2sgZm9yIEhUTUwiDQlzZWxmIGJvZHkgY29udGVudFR5 cGUgPSAndGV4dC9odG1sJw0JCWlmVHJ1ZTogW14oSHRtbFBhcnNlciBwYXJzZTogKFJlYWRT dHJlYW0gb246IGJvZHkgY29udGVudCkpIGZvcm1hdHRlZFRleHRdLg0NCSJjaGVjayBmb3Ig YW4gZW1iZWRkZWQgbWVzc2FnZSINCXNlbGYgYm9keSBjb250ZW50VHlwZSA9ICdtZXNzYWdl L3JmYzgyMicgaWZUcnVlOiBbDQkJXihNYWlsTWVzc2FnZSBmcm9tOiBzZWxmIGJvZHkgY29u dGVudCkgZm9ybWF0dGVkVGV4dCBdLg0NCSJub3RoaW5nIHNwZWNpYWwtLWp1c3QgcmV0dXJu IHRoZSB0ZXh0Ig0JXmJvZHkgY29udGVudC4NDSEgIQ0NIU1haWxNZXNzYWdlIG1ldGhvZHNG b3I6ICdwcmludGluZy9mb3JtYXR0aW5nJyBzdGFtcDogJ2xzIDQvMzAvMjAwMCAxODoxOSch DWZpZWxkc0FzTWltZUhlYWRlcg0JInJldHVybiB0aGUgZW50aXJlIGhlYWRlciBpbiBwcm9w ZXIgTUlNRSBmb3JtYXQiDQl8IHN0cm0gfA0Jc3RybSBfIFdyaXRlU3RyZWFtIG9uOiAoU3Ry aW5nIG5ldzogMTAwKS4NCXNlbGYgZmllbGRzIGFzc29jaWF0aW9uc0RvOiBbOmUgfCBzdHJt IG5leHRQdXRBbGw6IGUga2V5Ow0JCSBuZXh0UHV0QWxsOiAnOiAnOw0JCSBuZXh0UHV0QWxs OiBlIHZhbHVlIGFzSGVhZGVyVmFsdWU7DQkJIGNyXS4gDQleIHN0cm0gY29udGVudHMhICEN DSFNYWlsTWVzc2FnZSBtZXRob2RzRm9yOiAncHJpbnRpbmcvZm9ybWF0dGluZycgc3RhbXA6 ICdscyA0LzMwLzIwMDAgMTg6NTInIQ1mb3JtYXR0ZWRUZXh0DQkiQW5zd2VyIGEgdmVyc2lv biBvZiBteSB0ZXh0IHN1aXRhYmxlIGZvciBkaXNwbGF5LiAgVGhpcyBjbGVhbnMgdXAgdGhl IGhlYWRlciwgZGVjb2RlcyBIVE1MLCBhbmQgdGhpbmdzIGxpa2UgdGhhdCINDQkNCV4gc2Vs ZiBjbGVhbmVkSGVhZGVyIGFzVGV4dCwgU3RyaW5nIGNyICwgc2VsZiBib2R5VGV4dEZvcm1h dHRlZCEgIQ0NIU1haWxNZXNzYWdlIG1ldGhvZHNGb3I6ICdwcmludGluZy9mb3JtYXR0aW5n JyBzdGFtcDogJ2xzIDQvMzAvMjAwMCAyMDozMichDXZpZXdCb2R5DQkib3BlbiBhIHZpZXdl ciBvbiB0aGUgYm9keSBvZiB0aGlzIG1lc3NhZ2UiDQkoU3RyaW5nSG9sZGVyIG5ldyBjb250 ZW50czogc2VsZiBib2R5VGV4dEZvcm1hdHRlZDsgeW91cnNlbGYpIA0JCW9wZW5MYWJlbDog KHNlbGYgbmFtZSBpZk5pbDogWycoYSBtZXNzYWdlIHBhcnQpJ10pICEgIQ0NIU1haWxNZXNz YWdlIG1ldGhvZHNGb3I6ICdtdWx0aXBhcnQnIHN0YW1wOiAnbHMgNC8zMC8yMDAwIDE4OjQ3 JyENY29udGVudA0JInJldHVybnMgdGhlIHRleHQsIHN0aWxsIGVuY29kZWQiDQlec2VsZiBi b2R5VGV4dCEgIQ0NIU1haWxNZXNzYWdlIG1ldGhvZHNGb3I6ICdtdWx0aXBhcnQnIHN0YW1w OiAnbHMgNC8zMC8yMDAwIDE4OjEzJyENZGVjb2RlckNsYXNzDQl8IGVuY29kaW5nIHwNCWVu Y29kaW5nIF8gc2VsZiBmaWVsZHMgYXQ6ICdjb250ZW50LXRyYW5zZmVyLWVuY29kaW5nJyBp ZkFic2VudDogW14gbmlsXS4NCWVuY29kaW5nIF8gZW5jb2RpbmcgbWFpblZhbHVlLg0JZW5j b2RpbmcgYXNMb3dlcmNhc2UgPSAnYmFzZTY0JyBpZlRydWU6IFteIEJhc2U2NE1pbWVDb252 ZXJ0ZXJdLg0JZW5jb2RpbmcgYXNMb3dlcmNhc2UgPSAncXVvdGVkLXByaW50YWJsZScgaWZU cnVlOiBbXiBRdW90ZWRQcmludGFibGVNaW1lQ29udmVydGVyXS4NCV4gbmlsISAhDQ0hTWFp bE1lc3NhZ2UgbWV0aG9kc0ZvcjogJ211bHRpcGFydCcgc3RhbXA6ICdscyA0LzMwLzIwMDAg MTg6MTQnIQ1leGNlcnB0DQkiZ2l2ZSBhIHZlcnkgYnJpZWYgZXhjZXJwdCBmcm9tIHRoZSB0 ZXh0Ig0JXiBzZWxmIGNvbnRlbnQgd2l0aFNlcGFyYXRvcnNDb21wYWN0ZWQgdHJ1bmNhdGVX aXRoRWxpcHNpc1RvOiAzMCEgIQ0NIU1haWxNZXNzYWdlIG1ldGhvZHNGb3I6ICdtdWx0aXBh cnQnIHN0YW1wOiAnbHMgNC8zMC8yMDAwIDIyOjM3JyENcGFyc2VQYXJ0cw0JInByaXZhdGUg LS0gcGFyc2UgdGhlIHBhcnRzIG9mIHRoZSBtZXNzYWdlIGFuZCBwdXQgdGhlbSBpbiB0aGUg cGFydHMgaXZhci4gIElmIHRoaXMgaXMgbm90IGEgbXVsdGlwYXJ0IG1lc3NhZ2UsIHB1dCAj KCkgaW50byB0aGUgaXZhciINCXwgcGFyc2VTdHJlYW0gY3VyckxpbmUgbXNnU3RyZWFtIG1l c3NhZ2VzIHwNCXNlbGYgYm9keSBpc011bHRpcGFydCBpZkZhbHNlOiBbXiBwYXJ0cyBfICMo KV0uDQlwYXJzZVN0cmVhbSBfIFJlYWRTdHJlYW0gb246IHNlbGYgY29udGVudC4NCWN1cnJM aW5lIF8gJycuDQlbJy0tKicgbWF0Y2g6IGN1cnJMaW5lXQ0JCXdoaWxlRmFsc2U6IFtjdXJy TGluZSBfIHBhcnNlU3RyZWFtIG5leHRMaW5lXS4NCXNlcGFyYXRvciBfIGN1cnJMaW5lIGNv cHkuDQltc2dTdHJlYW0gXyBMaW1pdGluZ0xpbmVTdHJlYW1XcmFwcGVyIG9uOiBwYXJzZVN0 cmVhbSBkZWxpbWl0ZXI6IHNlcGFyYXRvci4NCW1lc3NhZ2VzIF8gT3JkZXJlZENvbGxlY3Rp b24gbmV3Lg0JW3BhcnNlU3RyZWFtIGF0RW5kXQ0JCXdoaWxlRmFsc2U6IA0JCQlbbWVzc2Fn ZXMgYWRkOiBtc2dTdHJlYW0gdXBUb0VuZC4NCQkJbXNnU3RyZWFtIHNraXBUaGlzTGluZV0u DQlwYXJ0cyBfIG1lc3NhZ2VzIGNvbGxlY3Q6IFs6ZSB8IE1haWxNZXNzYWdlIGZyb206IGVd ISAhDQ0hTWFpbE1lc3NhZ2UgbWV0aG9kc0ZvcjogJ211bHRpcGFydCcgc3RhbXA6ICdscyA0 LzMwLzIwMDAgMTg6MjInIQ1wYXJ0cw0JcGFydHMgaWZOaWw6IFtzZWxmIHBhcnNlUGFydHNd Lg0JXiBwYXJ0cyEgIQ0NIU1haWxNZXNzYWdlIG1ldGhvZHNGb3I6ICdtdWx0aXBhcnQnIHN0 YW1wOiAnbHMgNC8zMC8yMDAwIDIwOjMxJyENc2F2ZQ0JInNhdmUgdGhlIHBhcnQgdG8gYSBm aWxlIg0JfCBmaWxlTmFtZSBmaWxlIHwNCWZpbGVOYW1lIF8gc2VsZiBuYW1lIGlmTmlsOiBb J2F0dGFjaG1lbnQnICwgVXRpbGl0aWVzIGRhdGVUaW1lU3VmZml4XS4NCWZpbGVOYW1lIF8g RmlsbEluVGhlQmxhbmsgcmVxdWVzdDogJ0ZpbGUgbmFtZSBmb3Igc2F2ZT8nIGluaXRpYWxB bnN3ZXI6IGZpbGVOYW1lLg0NCWZpbGVOYW1lIGlzRW1wdHkgaWZUcnVlOiBbIF5uaWwgXS4N DQlmaWxlIF8gRmlsZVN0cmVhbSBuZXdGaWxlTmFtZWQ6IGZpbGVOYW1lLg0JZmlsZSBuZXh0 UHV0QWxsOiBzZWxmIGNvbnRlbnQuISAhDQ0NIU1haWxNZXNzYWdlIGNsYXNzIG1ldGhvZHNG b3I6ICd1dGlsaXRpZXMnIHN0YW1wOiAnbHMgNC8zMC8yMDAwIDIyOjU4JyENZ2VuZXJhdGVT ZXBhcmF0b3INCSJnZW5lcmF0ZSBhIHNlcGFyYXRvciB1c2FibGUgZm9yIG1ha2luZyBNSU1F IG11bHRpcGFydCBkb2N1bWVudHMuICBBIGxlYWRpbmcgLS0gd2lsbCAqbm90KiBiZSBpbmNs dWRlZCINCV4nPT1DZWxlc3RlQXR0YWNobWVudCcgLCAoMTAwMDAgdG86IDk5OTk5KSBhdFJh bmRvbSBhc1N0cmluZyAsICc9PScuISAhDQ0NIVNlcXVlbmNlYWJsZUNvbGxlY3Rpb24gbWV0 aG9kc0ZvcjogJ2NvcHlpbmcnIHN0YW1wOiAnbHMgNC8zMC8yMDAwIDE4OjU5JyENY29weVdp dGhvdXRGaXJzdA0JInJldHVybiBhIGNvcHkgb2YgdGhlIHJlY2VpdmVyIHdoaWNoIGRvZXNu J3QgaW5jbHVkZSB0aGUgZmlyc3QgZWxlbWVudCINCV5zZWxmIGNvcHlGcm9tOiAyIHRvOiBz ZWxmIHNpemUNISAhDQ0NIVRleHRNZXNzYWdlTGluayBtZXRob2RzRm9yOiAnaW5pdGlhbGl6 YXRpb24nIHN0YW1wOiAnbHMgNC8zMC8yMDAwIDE4OjU0JyENaW5pdGlhbGl6ZTogbWVzc2Fn ZTANCW1lc3NhZ2UgOj0gbWVzc2FnZTAhICENDSFUZXh0TWVzc2FnZUxpbmsgbWV0aG9kc0Zv cjogJ2FjdGluZycgc3RhbXA6ICdscyA0LzMwLzIwMDAgMjA6MzUnIQ1hY3RPbkNsaWNrRm9y OiBldnQNCXwgY2hvaWNlIHwNCWNob2ljZSA6PSAoUG9wVXBNZW51IGxhYmVsczogJ3ZpZXcg dGhpcyBhdHRhY2htZW50XHNhdmUgdGhpcyBhdHRhY2htZW50JyB3aXRoQ1JzKSBzdGFydFVw Lg0NCWNob2ljZSA9IDEgaWZUcnVlOiBbDQkJIm9wZW4gYSBuZXcgdmlld2VyIg0JCW1lc3Nh Z2Ugdmlld0JvZHldLg0NCWNob2ljZSA9IDIgaWZUcnVlOiBbDQkJInNhdmUgdGhlIG1lc2Fz Z2UiDQkJbWVzc2FnZSBzYXZlIF0uDQ0JXnRydWUhICENDSFUZXh0TWVzc2FnZUxpbmsgbWV0 aG9kc0ZvcjogJ2FjdGluZycgc3RhbXA6ICdscyA0LzMwLzIwMDAgMTk6MDMnIQ1tYXlBY3RP bkNsaWNrDQledHJ1ZSEgIQ0NIVRleHRNZXNzYWdlTGluayBtZXRob2RzRm9yOiAnYXBwZWFy YW5jZScgc3RhbXA6ICdscyA0LzMwLzIwMDAgMjA6MzQnIQ1lbXBoYXNpemVTY2FubmVyOiBz Y2FubmVyDQlzY2FubmVyIHRleHRDb2xvcjogQ29sb3IgYnJvd24hICENDQ0hVGV4dE1lc3Nh Z2VMaW5rIGNsYXNzIG1ldGhvZHNGb3I6ICdpbnN0YW5jZSBjcmVhdGlvbicgc3RhbXA6ICds cyA0LzMwLzIwMDAgMTk6MDAnIQ1tZXNzYWdlOiBhTWVzc2FnZQ0JXnN1cGVyIG5ldyBpbml0 aWFsaXplOiBhTWVzc2FnZSEgIQ0NT2JqZWN0IHN1YmNsYXNzOiAjTWFpbE1lc3NhZ2UNCWlu c3RhbmNlVmFyaWFibGVOYW1lczogJ3RpbWUgZnJvbSB0byBjYyBzdWJqZWN0IHRleHQgYm9k eSBmaWVsZHMgcGFydHMgc2VwYXJhdG9yICcNCWNsYXNzVmFyaWFibGVOYW1lczogJycNCXBv b2xEaWN0aW9uYXJpZXM6ICcnDQljYXRlZ29yeTogJ05ldHdvcmstTWFpbCBSZWFkZXInIQ1N b2RlbCBzdWJjbGFzczogI0NlbGVzdGVDb21wb3NpdGlvbg0JaW5zdGFuY2VWYXJpYWJsZU5h bWVzOiAnY2VsZXN0ZSBtZXNzYWdlVGV4dCB0ZXh0RWRpdG9yIGF0dGFjaG1lbnRTZXBhcmF0 b3IgbW9ycGhpY1dpbmRvdyBtdmNXaW5kb3cgJw0JY2xhc3NWYXJpYWJsZU5hbWVzOiAnJw0J cG9vbERpY3Rpb25hcmllczogJycNCWNhdGVnb3J5OiAnTmV0d29yay1NYWlsIFJlYWRlcich DQ== --==CelesteAttachment35733==
squeak-dev@lists.squeakfoundation.org