From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?Q?Pierre=2DAndr=C3=A9_Cornillon?= Subject: Babel partial support for SAS language Date: Wed, 11 Oct 2017 17:10:57 +0200 Message-ID: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="089e082f6640bc34b9055b46d4fc" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:33319) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1e2If6-0006qa-V4 for emacs-orgmode@gnu.org; Wed, 11 Oct 2017 11:11:14 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1e2Iez-0000M0-SA for emacs-orgmode@gnu.org; Wed, 11 Oct 2017 11:11:08 -0400 Received: from mail-lf0-x231.google.com ([2a00:1450:4010:c07::231]:51768) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1e2Iez-0000LI-Cq for emacs-orgmode@gnu.org; Wed, 11 Oct 2017 11:11:01 -0400 Received: by mail-lf0-x231.google.com with SMTP id r129so2451864lff.8 for ; Wed, 11 Oct 2017 08:10:59 -0700 (PDT) List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: "Emacs-orgmode" To: Org Mode List --089e082f6640bc34b9055b46d4fc Content-Type: text/plain; charset="UTF-8" Dear orgmode users as the best way to submit a Babel support for a new language is this mailing list, I submit this partial support for SAS language (using ESS). This is partial as only few header arguments are supported :results output :output graphics :session arguments are supported but one of the most important, :output value, is not supported (as I am not able to figure out what does it really mean with SAS). I am not proud of it but I have added a :results odsgraphics for odsgraphics (which are different from sas/graph classical graphics). If someone is interested in that support, please see the attached file (as I don't actually know anything about the orgmode mailing list policy about attached file, I hope it will be still attached...) Comments and suggestions are welcome. Best regards Pierre-Andre --089e082f6640bc34b9055b46d4fc Content-Type: text/x-emacs-lisp; charset="US-ASCII"; name="ob-sas.el" Content-Disposition: attachment; filename="ob-sas.el" Content-Transfer-Encoding: base64 X-Attachment-Id: f_j8n69vg90 Ozs7IG9iLXNhcy5lbCAtLS0gb3JnLWJhYmVsIGZ1bmN0aW9ucyBmb3Igc2FzIGNvZGUgZXZhbHVh dGlvbgoKOzsgQ29weXJpZ2h0IChDKSAyMDE3IFAuQS4gQ29ybmlsbG9uCjs7IEF1dGhvcjogUC5B LiBDb3JuaWxsb24KOzsgICAgICBHLiBKYXkgS2VybnMKOzsgICAgICBFcmljIFNjaHVsdGUKOzsg ICAgICBEYW4gRGF2aXNvbgoKCjs7IFRoaXMgZmlsZSBpcyBub3QgcGFydCBvZiBHTlUgRW1hY3Mu Cgo7OyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQo7OyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQo7OyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCjs7IGFueSBsYXRl ciB2ZXJzaW9uLgo7Owo7OyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKOzsgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKOzsgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo7OyBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo7Owo7OyBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQo7OyBhbG9uZyB3 aXRoIEdOVSBFbWFjczsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRo ZQo7OyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg RmlmdGggRmxvb3IsCjs7IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgoKOzs7IENvbW1lbnRh cnk6Cgo7OyBUaGUgZmlsZSBwcm92aWRlcyBPcmctQmFiZWwgc3VwcG9ydCBmb3IgZXZhbHVhdGlu ZyBzYXMgY29kZS4gIEl0IGlzCjs7IGJhc2ljYWxseSByZXN1bHQgb2YgZmluZC1hbmQtcmVwbGFj ZSAic2FzIiBmb3IgImp1bGlhIiBpbgo7OyBvYi1qdWxpYS5lbCBieSBHLiBKYXkgS2VybnMuCjs7 IDEpIFBhcmFtZXRlciAiOnJlc3VsdHMgb3V0cHV0IiBuZWVkcyBhCjs7IHRvIGdpdmUgdGhlIHJp Z2h0IGZpbGVuYW1lIGZvciBTQVMgaW4gdGhlICBQYXJhbWV0ZXIgIjpyZXN1bHRzIHZhbHVlIgo7 OyBkb2VzIG5vdCB3b3JrIChJJ20gbm90IHN1cmUgaXQgbWFrZXMgc2Vuc2Ugb3IgaXMgdXNlZnVs KS4gIFBhcmFtZXRlcgo7OyAiOnNlc3Npb24iIHdvcmtzIHdpdGggZGVmYXVsdCB2YWx1ZSB1c2lu ZyBFU1MKOzsgCgo7OzsgUmVxdWlyZW1lbnRzOgo7OyBTYXM6IGh0dHA6Ly9zYXMuY29tCjs7IEVT UzogaHR0cDovL2Vzcy5yLXByb2plY3Qub3JnCgo7OzsgQ29kZToKKHJlcXVpcmUgJ29iKQoocmVx dWlyZSAnY2wtbGliKQoKKGRlY2xhcmUtZnVuY3Rpb24gb3JndGJsLXRvLWNzdiAib3JnLXRhYmxl IiAodGFibGUgcGFyYW1zKSkKKGRlY2xhcmUtZnVuY3Rpb24gc2FzICJleHQ6ZXNzLXNhcyIgKCZv cHRpb25hbCBzdGFydC1hcmdzKSkKKGRlY2xhcmUtZnVuY3Rpb24gaW5mZXJpb3ItZXNzLXNlbmQt c3RyaW5nICJleHQ6ZXNzLWluZiIgKCkpCihkZWNsYXJlLWZ1bmN0aW9uIGVzcy1tYWtlLWJ1ZmZl ci1jdXJyZW50ICJleHQ6ZXNzLWluZiIgKCkpCihkZWNsYXJlLWZ1bmN0aW9uIGVzcy1ldmFsLWJ1 ZmZlciAiZXh0OmVzcy1pbmYiICh2aXMpKQooZGVjbGFyZS1mdW5jdGlvbiBvcmctbnVtYmVyLXNl cXVlbmNlICJvcmctY29tcGF0IiAoZnJvbSAmb3B0aW9uYWwgdG8gaW5jKSkKOzs7Ozs7Ozs7Ozs7 Ozs7OyBjb3VsZCBiZSB1c2VmdWwgdG8gaW5jcmVhc2Ugb3IgZGVjcmVhc2UgdGltZW91dCAuLi4u CihkZWZjdXN0b20gb3JnLWJhYmVsLXNhcy10aW1lb3V0IDEwMDAKICAiVGltZW91dCAoaW4gc2Vj KSB1c2VkIHdoZW4gd2FpdGluZyBvdXRwdXQgZnJvbSBhIHN1Ym1pdHRlZCBzcmMgYmxvY2sgKHRv IHNhcykgd2l0aCBhcmd1bWVudCA6c2Vzc2lvbi4iCiAgOmdyb3VwICdvcmctYmFiZWwKICA6dHlw ZSAnaW50ZWdlcikKOzs7Ozs7Ozs7Ozs7Ozs7OyBjb3VsZCBiZSB1c2VmdWwgdG8gdHdlYWsgcHJp bnRpbmcgcGFnZSBzaXplCihkZWZjdXN0b20gb3JnLWJhYmVsLXNhcy1wcmludC1vcHRpb25zICJv cHRpb25zIGZvcm1kbGltPScnIHBhZ2VzaXplPW1heDtcbiIKICAiZ2VuZXJhbCBvcHRpb25zIHVz ZWQgdG8gaGF2ZSB0aGUgbWF4aW11bSBwYWdlIHNpemUiCiAgOmdyb3VwICdvcmctYmFiZWwKICA6 dHlwZSAnc3RyaW5nKQoKOzs7Ozs7Ozs7Ozs7Ozs7OyB3aGVyZSBpcyBTQVMKKGRlZmN1c3RvbSBv cmctYmFiZWwtc2FzLWNvbW1hbmQgIi91c3IvbG9jYWwvYmluL3Nhc191OCIKOyAgaW5mZXJpb3It U0FTLXByb2dyYW0tbmFtZQogICJOYW1lIG9mIGNvbW1hbmQgdG8gdXNlIGZvciBleGVjdXRpbmcg c2FzIGNvZGUuIgogIDpncm91cCAnb3JnLWJhYmVsCiAgOnR5cGUgJ3N0cmluZykKCjs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OwooZGVmdmFyIG9yZy1iYWJlbC1zYXMtbGVwb2ludCAxKQooZGVm dmFyIG9yZy1iYWJlbC1zYXMtbG9nZmlsZS1uYW1lICJsb2dfc2FzLmxvZyIpCihkZWZ2YXIgb3Jn LWJhYmVsLXNhcy1lb2UtaW5kaWNhdG9yICJkYXRhIGVvZV9vcmdfZGF0YTtcbiBuYmFiZWx2YXJl b2U9MTtcbnJ1bjtcbk9QVElPTlMgTk9EQVRFIE5PTlVNQkVSO1xuVElUTEUxO1xuVElUTEUyO1xu cHJvYyBwcmludCBkYXRhPWVvZV9vcmdfZGF0YTtcbnJ1bjsiKQooZGVmdmFyIG9yZy1iYWJlbC1z YXMtZW9lLW91dHB1dCAiT2JzLiAgICBuYmFiZWx2YXJlb2VcblxuICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAxICAgICAgICAgICAxIikKKGRlZnZhciBvcmctYmFiZWwtc2FzLWJvZS1v dXRwdXQgIiQgdHR5XG4vZGV2L3B0cy9bMC05XStcblxcJCIpCihkZWZjb25zdCBvcmctYmFiZWwt aGVhZGVyLWFyZ3M6c2FzCiAgJygoaHNpemUJCSAuIDphbnkpCiAgICAodnNpemUJCSAuIDphbnkp CiAgICAoeHBpeGVscwkJIC4gOmFueSkKICAgICh5cGl4ZWxzCQkgLiA6YW55KQogICAgKGJvcmRl cgkJIC4gOmFueSkKICAgICh3aWR0aAkJIC4gOmFueSkKICAgIChoZWlnaHQJCSAuIDphbnkpCiAg ICAocmVzdWx0cyAgICAgICAgICAgICAuICgoZmlsZSBsaXN0IHZlY3RvciB0YWJsZSBzY2FsYXIg dmVyYmF0aW0pCgkJCSAgICAocmF3IG9yZyBodG1sIGxhdGV4IGNvZGUgcHAgd3JhcCkKCQkJICAg IChyZXBsYWNlIHNpbGVudCBhcHBlbmQgcHJlcGVuZCkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDs7IE5PVEU6IG5vdCBzdXJlICd2YWx1ZScgbWFrZXMgc2Vuc2UgaW4gc2FzCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7OyB3ZSBtYXkgd2FudCB0byByZW1vdmUgaXQgZnJvbSB0aGUg bGlzdAoJCQkgICAgKG91dHB1dCBncmFwaGljcykpKSkKICAic2FzLXNwZWNpZmljIGhlYWRlciBh cmd1bWVudHMuIikKCihhZGQtdG8tbGlzdCAnb3JnLWJhYmVsLXRhbmdsZS1sYW5nLWV4dHMgJygi c2FzIiAuICJzYXMiKSkKCjs7IHNlc3Npb24gdXNpbmcgRVNTIGlzIHRoZSB3YXkgdG8gZ28sIHNv IG1ha2UgdGhhdCB0aGUgZGVmYXVsdAooZGVmdmFyIG9yZy1iYWJlbC1kZWZhdWx0LWhlYWRlci1h cmdzOnNhcyAnKCg6cmVzdWx0cyAuICJvdXRwdXQiKSAoOnNlc3Npb24gLiBuaWwpKSkKCjs7IHRy aW0gd2hpdGUgc3BhY2UgYW5kIGdhcmJhZ2UKKGRlZnVuIG9yZy1iYWJlbC1zYXMtdHJpbS13aGl0 ZSAocykKICAicmVwbGFjZSBTIGJ5IGVtcHR5IHN0cmluZyBpZiBTIGlzIHdoaXRlc3BhY2Ugb25s eSIKICAoaWYgKHN0cmluZy1tYXRjaCAiXFxgWyBcdFxuXHJdK1xcJyIgcykKICAgICAgKHJlcGxh Y2UtbWF0Y2ggIiIgdCB0IHMpCiAgICBzKSkKOzsgbGV0J3MgZ286IG1haW4gZnVuY3Rpb24KKGRl ZnVuIG9yZy1iYWJlbC1leGVjdXRlOnNhcyAoYm9keSBwYXJhbXMpCiAgIkV4ZWN1dGUgYSBibG9j ayBvZiBzYXMgY29kZS4KVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgYG9yZy1iYWJlbC1leGVj dXRlLXNyYy1ibG9jaycuIgogIChzYXZlLWV4Y3Vyc2lvbgogICAgKGxldCogKChyZXN1bHQtcGFy YW1zIChjZHIgKGFzc3EgOnJlc3VsdC1wYXJhbXMgcGFyYW1zKSkpCgkgICAocmVzdWx0LXR5cGUg KGNkciAoYXNzcSA6cmVzdWx0LXR5cGUgcGFyYW1zKSkpCiAgICAgICAgICAoc2Vzc2lvbiAob3Jn LWJhYmVsLXNhcy1pbml0aWF0ZS1zZXNzaW9uCgkJICAgIChjZHIgKGFzc3EgOnNlc3Npb24gcGFy YW1zKSkgcGFyYW1zKSkKCSAgKGdyYXBoaWNzLWZpbGUgKG9yZy1iYWJlbC1zYXMtZ3JhcGhpY2Fs LW91dHB1dC1maWxlIHBhcmFtcykpCgkgIChncmFwaGljcy10eXBlIChvciAobWVtYmVyICJvZHNn cmFwaGljcyIgKGNkciAoYXNzcSA6cmVzdWx0LXBhcmFtcyBwYXJhbXMpKSkgKG1lbWJlciAiZ3Jh cGhpY3MiIChjZHIgKGFzc3EgOnJlc3VsdC1wYXJhbXMgcGFyYW1zKSkpKSkKCSAgKGZ1bGwtYm9k eSAob3JnLWJhYmVsLWV4cGFuZC1ib2R5OnNhcyBib2R5IHBhcmFtcyBncmFwaGljcy1maWxlIGdy YXBoaWNzLXR5cGUpKQoJICAocmVzdWx0CgkgICAob3JnLWJhYmVsLXNhcy1ldmFsdWF0ZQoJICAg IHNlc3Npb24gZnVsbC1ib2R5IHJlc3VsdC10eXBlIHJlc3VsdC1wYXJhbXMpKSkKICAgICAgKGlm IGdyYXBoaWNzLWZpbGUgbmlsIHJlc3VsdCkpKSkKCihkZWZ2YXIgZXNzLWFzay1mb3ItZXNzLWRp cmVjdG9yeSkgOyBkeW5hbWljYWxseSBzY29wZWQKCihkZWZ1biBvcmctYmFiZWwtc2FzLWluaXRp YXRlLXNlc3Npb24gKHNlc3Npb24gcGFyYW1zKQogICJJZiB0aGVyZSBpcyBub3QgYSBjdXJyZW50 IHNhcyBwcm9jZXNzIHRoZW4gY3JlYXRlIG9uZS4iCiAgKHVubGVzcyAoc3RyaW5nPSBzZXNzaW9u ICJub25lIikKICAgIChsZXQgKChzZXNzaW9uIChvciBzZXNzaW9uICIqU0FTKiIpKQoJICAoZXNz LWFzay1mb3ItZXNzLWRpcmVjdG9yeQoJICAgKGFuZCAoYW5kIChib3VuZHAgJ2Vzcy1hc2stZm9y LWVzcy1kaXJlY3RvcnkpIGVzcy1hc2stZm9yLWVzcy1kaXJlY3RvcnkpCgkJKG5vdCAoY2RyIChh c3NxIDpkaXIgcGFyYW1zKSkpKSkpCiAgICAgIChpZiAob3JnLWJhYmVsLWNvbWludC1idWZmZXIt bGl2ZXAgc2Vzc2lvbikKCSAgc2Vzc2lvbgoJKHNhdmUtd2luZG93LWV4Y3Vyc2lvbgoJICAocmVx dWlyZSAnZXNzKSAoU0FTKQoJICAocmVuYW1lLWJ1ZmZlcgoJICAgKGlmIChidWZmZXJwIHNlc3Np b24pCgkgICAgICAgKGJ1ZmZlci1uYW1lIHNlc3Npb24pCgkgICAgIChpZiAoc3RyaW5ncCBzZXNz aW9uKQoJCSBzZXNzaW9uCgkgICAgICAgKGJ1ZmZlci1uYW1lKSkpKQoJICAoY3VycmVudC1idWZm ZXIpKSkpKSkKCihkZWZ1biBvcmctYmFiZWwtc2FzLWFzc29jaWF0ZS1zZXNzaW9uIChzZXNzaW9u KQogICJBc3NvY2lhdGUgc2FzIGNvZGUgYnVmZmVyIHdpdGggYSBzYXMgc2Vzc2lvbi4KTWFrZSBT RVNTSU9OIGJlIHRoZSBpbmZlcmlvciBFU1MgcHJvY2VzcyBhc3NvY2lhdGVkIHdpdGggdGhlCmN1 cnJlbnQgY29kZSBidWZmZXIuIgogIChzZXRxIGVzcy1sb2NhbC1wcm9jZXNzLW5hbWUKCShwcm9j ZXNzLW5hbWUgKGdldC1idWZmZXItcHJvY2VzcyBzZXNzaW9uKSkpCiAgKGVzcy1tYWtlLWJ1ZmZl ci1jdXJyZW50KSkKCihkZWZ1biBvcmctYmFiZWwtbG9hZC1zZXNzaW9uOnNhcyAoc2Vzc2lvbiBi b2R5IHBhcmFtcykKICAiTG9hZCBCT0RZIGludG8gU0VTU0lPTi4iCiAgKHNhdmUtd2luZG93LWV4 Y3Vyc2lvbgogICAgKGxldCAoKGJ1ZmZlciAob3JnLWJhYmVsLXByZXAtc2Vzc2lvbjpzYXMgc2Vz c2lvbiBwYXJhbXMpKSkKICAgICAgKHdpdGgtY3VycmVudC1idWZmZXIgYnVmZmVyCiAgICAgICAg KGdvdG8tY2hhciAocHJvY2Vzcy1tYXJrIChnZXQtYnVmZmVyLXByb2Nlc3MgKGN1cnJlbnQtYnVm ZmVyKSkpKQogICAgICAgIChpbnNlcnQgKG9yZy1iYWJlbC1jaG9tcCBib2R5KSkpCiAgICAgIGJ1 ZmZlcikpKQoKKGRlZnVuIG9yZy1iYWJlbC1zYXMtZ3JhcGhpY2FsLW91dHB1dC1maWxlIChwYXJh bXMpCiAgIk5hbWUgb2YgZmlsZSB0byB3aGljaCBzYXMgc2hvdWxkIHNlbmQgZ3JhcGhpY2FsIG91 dHB1dC4iCiAgKGFuZCAob3IgKG1lbWJlciAiZ3JhcGhpY3MiIChjZHIgKGFzc3EgOnJlc3VsdC1w YXJhbXMgcGFyYW1zKSkpCgkgICAobWVtYmVyICJvZHNncmFwaGljcyIgKGNkciAoYXNzcSA6cmVz dWx0LXBhcmFtcyBwYXJhbXMpKSkpCiAgICAgICAoY2RyIChhc3NxIDpmaWxlIHBhcmFtcykpKSkK CihkZWZ1biBvcmctYmFiZWwtZXhwYW5kLWJvZHk6c2FzIChib2R5IHBhcmFtcyAmb3B0aW9uYWwg Z3JhcGhpY3MtZmlsZSBncmFwaGljcy10eXBlKQogICJFeHBhbmQgQk9EWSBhY2NvcmRpbmcgdG8g UEFSQU1TLCByZXR1cm4gdGhlIGV4cGFuZGVkIGJvZHkuIgogIChsZXQgKChncmFwaGljcy1maWxl CgkgKG9yIGdyYXBoaWNzLWZpbGUKCSAgICAgKG9yZy1iYWJlbC1zYXMtZ3JhcGhpY2FsLW91dHB1 dC1maWxlIHBhcmFtcykpKQoJKGdyYXBoaWNzLXR5cGUKCSAob3IgZ3JhcGhpY3MtdHlwZQoJICAg ICAob3IgKG1lbWJlciAib2RzZ3JhcGhpY3MiIChjZHIgKGFzc3EgOnJlc3VsdC1wYXJhbXMgcGFy YW1zKSkpCgkJIChtZW1iZXIgImdyYXBoaWNzIiAoY2RyIChhc3NxIDpyZXN1bHQtcGFyYW1zIHBh cmFtcykpKSkpKSkKICAgIChjb25jYXQgb3JnLWJhYmVsLXNhcy1wcmludC1vcHRpb25zCiAgICAg KGlmIGdyYXBoaWNzLWZpbGUKCSAgIChvcmctYmFiZWwtc2FzLWNvbnN0cnVjdC1ncmFwaGljcy1k ZXZpY2UtY2FsbAoJICAgIGdyYXBoaWNzLWZpbGUgZ3JhcGhpY3MtdHlwZSBwYXJhbXMpCiAgICAg ICAiIikgYm9keSAoaWYgZ3JhcGhpY3MtZmlsZQoJCSAgICAoaWYgKHN0cmluZy1lcXVhbCAoY2Fy IGdyYXBoaWNzLXR5cGUpICJvZHNncmFwaGljcyIpCgkJCSJxdWl0O1xub2RzIGdyYXBoaWNzIG9m ZjtcbiIKCQkgICAgICAicXVpdDtcbiIpKSkpKQoKKGRlZnZhciBvcmctYmFiZWwtc2FzLWdyYXBo aWNzLWRldmljZXMKICAnKCg6Ym1wICJibXAiKQogICAgKDplbWYgImVtZiIpCiAgICAoOnRpZmYg InRpZmYiKQogICAgKDpwbmcgInBuZyIpCiAgICAoOnBuZzMwMCAicG5nMzAwIikKICAgICg6c3Zn ICJzdmciKQogICAgKDpwZGYgInBkZiIpCiAgICAoOnBzICJwc2NvbG9yIikKICAgICg6cG9zdHNj cmlwdCAicHNjb2xvciIpKQogICJBbiBhbGlzdCBtYXBwaW5nIGdyYXBoaWNzIGZpbGUgdHlwZXMg dG8gU0FTIGRldmljZXMuCgpFYWNoIG1lbWJlciBvZiB0aGlzIGxpc3QgaXMgYSBsaXN0IHdpdGgg dGhyZWUgbWVtYmVyczoKMS4gdGhlIGZpbGUgZXh0ZW5zaW9uIG9mIHRoZSBncmFwaGljcyBmaWxl LCBhcyBhbiBlbGlzcCA6a2V5d29yZAoyLiB0aGUgU0FTIGRldmljZSBmdW5jdGlvbiB0byBjYWxs IHRvIGdlbmVyYXRlIHN1Y2ggYSBmaWxlIikKCjs7IHdlIG5lZWQgdGhlIGZvbGxvd2luZyB0d29s aW5lcyB3aXRoIHNhcy9ncmFwaCA6Z3JhcGhpY3MKOzsgZXhhbXBsZSBvZiBzdmcgZGV2aWNlCjs7 IGZpbGVuYW1lIHNvcnRpZSAidG90by5zdmciOwo7OyBnb3B0aW9ucyAgZGV2aWNlPXN2ZyBnc2Zu YW1lPXNvcnRpZQo7OyBvciB0aGlzIGxpbmUgd2l0aCBPRFMgZ3JhcGhpY3MgOm9kc2dyYXBoaWNz Cjs7IG9kcyBncmFwaGljcyBvbiAvICBpbWFnZWZtdD1wbmcgaW1hZ2VuYW1lPSJiYXJwbG90IiBi b3JkZXI9b2ZmIHdpZHRoPTEwY207CihkZWZ1biBvcmctYmFiZWwtc2FzLWNvbnN0cnVjdC1ncmFw aGljcy1kZXZpY2UtY2FsbCAob3V0LWZpbGUgZ3JhcGhpY3MtdHlwZSBwYXJhbXMpCiAgIkNvbnN0 cnVjdCB0aGUgc3RyaW5nIGZvciBjaG9vc2luZyBkZXZpY2UgYW5kIHNhdmluZyBncmFwaGljIGZp bGUiCiAgKGxldCogKChhbGxvd2VkLWFyZ3MgJyg6aHNpemUgOnZzaXplIDp4cGl4ZWxzIDp5cGl4 ZWxzIDpib3JkZXIgOndpZHRoIDpoZWlnaHQpKQoJIChkZXZpY2UgKGZpbGUtbmFtZS1leHRlbnNp b24gb3V0LWZpbGUpKQoJIChkZXZpY2UtaW5mbyAob3IgKGFzc3EgKGludGVybiAoY29uY2F0ICI6 IiBkZXZpY2UpKQoJCQkJb3JnLWJhYmVsLXNhcy1ncmFwaGljcy1kZXZpY2VzKQogICAgICAgICAg ICAgICAgICAgICAgICAgIChhc3NxIDpwbmcgb3JnLWJhYmVsLXNhcy1ncmFwaGljcy1kZXZpY2Vz KSkpCgkgKGV4dHJhLWFyZ3MgKGNkciAoYXNzcSA6U0FTLWRldi1hcmdzIHBhcmFtcykpKSBmaWxl YXJnIGFyZ3MpCiAgICAoc2V0cSBkZXZpY2UgKG50aCAxIGRldmljZS1pbmZvKSkKICAgIChzZXRx IGFyZ3MgKG1hcGNvbmNhdAoJCShsYW1iZGEgKHBhaXIpCgkJICAoaWYgKG1lbWJlciAoY2FyIHBh aXIpIGFsbG93ZWQtYXJncykKCQkgICAgICAoZm9ybWF0ICIgJXM9JVMiCgkJCSAgICAgIChzdWJz dHJpbmcgKHN5bWJvbC1uYW1lIChjYXIgcGFpcikpIDEpCgkJCSAgICAgIChjZHIgcGFpcikpICIi KSkKCQlwYXJhbXMgIiIpKQogICAgKGlmIChzdHJpbmctZXF1YWwgKGNhciBncmFwaGljcy10eXBl KSAib2RzZ3JhcGhpY3MiKQoJKGZvcm1hdCAib2RzIGdyYXBoaWNzIG9uIC8gaW1hZ2VuYW1lPVwi JXNcIiBpbWFnZWZtdD0lcyAlcztcbiIKCQkoZmlsZS1uYW1lLXNhbnMtZXh0ZW5zaW9uIG91dC1m aWxlKSBkZXZpY2UgYXJncwoJCShpZiBleHRyYS1hcmdzICIgIiAiIikgKG9yIGV4dHJhLWFyZ3Mg IiIpKQogICAgICAoZm9ybWF0ICJmaWxlbmFtZSBvdXRmb2IgXCIlc1wiO1xuZ29wdGlvbnMgIGRl dmljZT0lcyBnc2ZuYW1lPSBvdXRmb2IgJXM7XG4iCgkgICAgb3V0LWZpbGUgZGV2aWNlIGFyZ3MK CSAgICAoaWYgZXh0cmEtYXJncyAiICIgIiIpIChvciBleHRyYS1hcmdzICIiKSkpKSkKCgooZGVm dW4gb3JnLWJhYmVsLXNhcy1ldmFsdWF0ZQogIChzZXNzaW9uIGJvZHkgcmVzdWx0LXR5cGUgcmVz dWx0LXBhcmFtcykKICAiRXZhbHVhdGUgc2FzIGNvZGUgaW4gQk9EWS4iCiAgKGlmIHNlc3Npb24K ICAgICAgKG9yZy1iYWJlbC1zYXMtZXZhbHVhdGUtc2Vzc2lvbgogICAgICAgc2Vzc2lvbiBib2R5 IHJlc3VsdC10eXBlIHJlc3VsdC1wYXJhbXMpCiAgICAob3JnLWJhYmVsLXNhcy1ldmFsdWF0ZS1l eHRlcm5hbC1wcm9jZXNzCiAgICAgYm9keSByZXN1bHQtdHlwZSByZXN1bHQtcGFyYW1zKSkpCgoo ZGVmdW4gb3JnLWJhYmVsLXNhcy1ldmFsdWF0ZS1leHRlcm5hbC1wcm9jZXNzCiAgKGJvZHkgcmVz dWx0LXR5cGUgcmVzdWx0LXBhcmFtcykKICAiRXZhbHVhdGUgQk9EWSBpbiBleHRlcm5hbCBzYXMg cHJvY2Vzcy4KSWYgUkVTVUxULVRZUEUgZXF1YWxzICdvdXRwdXQgdGhlbiByZXR1cm4gc3RhbmRh cmQgb3V0cHV0IGFzIGEKc3RyaW5nLiAgSWYgUkVTVUxULVRZUEUgZXF1YWxzICd2YWx1ZSB0aGVu IHJldHVybiB0aGUgdmFsdWUgb2YgdGhlCmxhc3Qgc3RhdGVtZW50IGluIEJPRFksIGFzIGVsaXNw LiIKICAoY2wtY2FzZSByZXN1bHQtdHlwZQogICAgKHZhbHVlCiAgICAgKG1lc3NhZ2UgIiVzIiAi bm8gJzpyZXN1bHRzIHZhbHVlJyBpbiBTQVMsIHBsZWFzZSB1c2UgJzpyZXN1bHRzIG91dHB1dCcg aW5zdGVhZCIpKQogICAgKG91dHB1dAogICAgIDs7IG9yZy1iYWJlbC1ldmFsIGRvZXMgcGFzcyBl eHRlcm5hbCBhcmd1bWVudC4uLgogICAgIChsZXQgKCh0bXAtZmlsZSAic2FzLWZpbGU0Njc3ODQ2 NTQ3LnNhcyIpCgkgICAoZGlyZWN0b3J5LXNhcyAiIikpCiAgICAgICAod2l0aC1jdXJyZW50LWJ1 ZmZlcgoJICAgKHN3aXRjaC10by1idWZmZXIgKGZpbmQtZmlsZS1ub3NlbGVjdCB0bXAtZmlsZSkp CgkgKGluc2VydCBib2R5KQoJIChzYXZlLWJ1ZmZlciAwKSkKICAgICAgIChtZXNzYWdlICJvcHRp b25zICVzIiAoZm9ybWF0ICIlcyAtbG9nICVzIC1ub25ld3MgLW5vZG1zICVzIiBvcmctYmFiZWwt c2FzLWNvbW1hbmQgb3JnLWJhYmVsLXNhcy1sb2dmaWxlLW5hbWUgdG1wLWZpbGUpKQogICAgICAg KHNoZWxsLWNvbW1hbmQgKGZvcm1hdCAiJXMgLWxvZyAlcyAtbm9uZXdzIC1ub2RtcyAlcyIgb3Jn LWJhYmVsLXNhcy1jb21tYW5kIG9yZy1iYWJlbC1zYXMtbG9nZmlsZS1uYW1lIHRtcC1maWxlKSBu aWwgbmlsKQogICAgICAgKGtpbGwtYnVmZmVyICJzYXMtZmlsZTQ2Nzc4NDY1NDcuc2FzIikKICAg ICAgIChkZWxldGUtZmlsZSAic2FzLWZpbGU0Njc3ODQ2NTQ3LnNhcyIpCiAgICAgICAoc2V0cSBk aXJlY3Rvcnktc2FzIChmaWxlLW5hbWUtZGlyZWN0b3J5IChidWZmZXItZmlsZS1uYW1lIChnZXQt YnVmZmVyIG9yZy1iYWJlbC1zYXMtbG9nZmlsZS1uYW1lKSkpKQogICAgICAgKG1lc3NhZ2UgImRp cmVjdG9yeTogJXMiIGRpcmVjdG9yeS1zYXMpCiAgICAgICAoaWYgKGZpbGUtcmVhZGFibGUtcCAi c2FzLWZpbGU0Njc3ODQ2NTQ3LmxzdCIpCgkgICAocHJvZ24KCSAgICAgKHdpdGgtY3VycmVudC1i dWZmZXIKCQkgKHN3aXRjaC10by1idWZmZXIgKGZpbmQtZmlsZS1ub3NlbGVjdCAic2FzLWZpbGU0 Njc3ODQ2NTQ3LmxzdCIpKQoJICAgICAgIChiZWdpbm5pbmctb2YtYnVmZmVyKQoJICAgICAgIChz ZXRxIGJvZHkgKGJ1ZmZlci1zdHJpbmcpKSkKCSAgICAgKGRlbGV0ZS1maWxlICJzYXMtZmlsZTQ2 Nzc4NDY1NDcubHN0IikKCSAgICAgKGtpbGwtYnVmZmVyICJzYXMtZmlsZTQ2Nzc4NDY1NDcubHN0 IikKCSAgICAgYm9keSkKCSAocHJvZ24KCSAgIChpZiAoZ2V0LWJ1ZmZlciBvcmctYmFiZWwtc2Fz LWxvZ2ZpbGUtbmFtZSkKCSAgICAgICAod2l0aC1jdXJyZW50LWJ1ZmZlciAoZ2V0LWJ1ZmZlciBv cmctYmFiZWwtc2FzLWxvZ2ZpbGUtbmFtZSkKCQkgKHJldmVydC1idWZmZXIgOmlnbm9yZS1hdXRv IDpub2NvbmZpcm0gOnByZXNlcnZlLW1vZGVzKSkKCSAgICAgKHNhdmUtd2luZG93LWV4Y3Vyc2lv biAocG9wLXRvLWJ1ZmZlci1zYW1lLXdpbmRvdyAoZmluZC1maWxlLW5vc2VsZWN0IG9yZy1iYWJl bC1zYXMtbG9nZmlsZS1uYW1lKSkpKQoJICAgKGZvcm1hdCAiRXJyb3JzLCBwbGVhc2Ugc2VlIFtb ZmlsZTovLyVzLyVzXVtsb2cgZmlsZV1dIChpbiBCdWZmZXIgbGlzdCkiIGRpcmVjdG9yeS1zYXMg b3JnLWJhYmVsLXNhcy1sb2dmaWxlLW5hbWUpKSkpKSkpCgooZGVmdW4gb3JnLWJhYmVsLXNhcy1l dmFsdWF0ZS1zZXNzaW9uCiAgICAoc2Vzc2lvbiBib2R5IHJlc3VsdC10eXBlIHJlc3VsdC1wYXJh bXMpCiAgIkV2YWx1YXRlIEJPRFkgaW4gU0VTU0lPTi4KSWYgUkVTVUxULVRZUEUgZXF1YWxzICdv dXRwdXQgdGhlbiByZXR1cm4gc3RhbmRhcmQgb3V0cHV0IGFzIGEKc3RyaW5nLiAgSWYgUkVTVUxU LVRZUEUgZXF1YWxzICd2YWx1ZSB0aGVuIHJldHVybiB0aGUgdmFsdWUgb2YgdGhlCmxhc3Qgc3Rh dGVtZW50IGluIEJPRFksIGFzIGVsaXNwLiIKICAoY2wtY2FzZSByZXN1bHQtdHlwZQogICAgKHZh bHVlCiAgICAgKG1lc3NhZ2UgIiVzIiAibm8gJzpyZXN1bHRzIHZhbHVlJyBpbiBTQVMsIHBsZWFz ZSB1c2UgJzpyZXN1bHRzIG91dHB1dCcgaW5zdGVhZCIpKQogICAgKG91dHB1dAogICAgIDs7IHN1 Ym1pdCBib2R5IHRocm91Z2ggYSB0ZW1wIGJ1ZmZlciAoaW4gb3JkZXIgdG8gbm90IGdvCiAgICAg OzsgYmV5b25kIHRoZSBsaW1pdCBvZiA1MDAgYnl0ZXMpCiAgICAgOzsgc2VlIAogICAgIDs7IGh0 dHBzOi8vc3RhdC5ldGh6LmNoL3BpcGVybWFpbC9lc3MtaGVscC8yMDE1LUFwcmlsLzAxMDUxOC5o dG1sCiAgICAobGV0ICgob3JnLWJhYmVsLXNhcy1lc3MtcHJvY2Vzcy1uYW1lICAocHJvY2Vzcy1u YW1lIChnZXQtYnVmZmVyLXByb2Nlc3Mgc2Vzc2lvbikpKSkKICAgICAgKHdpdGgtdGVtcC1idWZm ZXIKCShpbnNlcnQgYm9keSkKCShsZXQgKChlc3MtbG9jYWwtcHJvY2Vzcy1uYW1lCgkgICAgICAg KHByb2Nlc3MtbmFtZSAoZ2V0LWJ1ZmZlci1wcm9jZXNzIHNlc3Npb24pKSkKCSAgICAgIChlc3Mt ZXZhbC12aXNpYmx5LXAgbmlsKSkKCSAgKGVzcy1ldmFsLWJ1ZmZlciBuaWwpKSkKICAgICAgKGVz cy1zZW5kLXN0cmluZyAoZ2V0LXByb2Nlc3Mgb3JnLWJhYmVsLXNhcy1lc3MtcHJvY2Vzcy1uYW1l KSBvcmctYmFiZWwtc2FzLWVvZS1pbmRpY2F0b3IpCiAgICAgIDs7ICAgIGV4Y3Vyc2lvbiBmb3Ig Y3V0L3Bhc3RlIHJlc3VsdHMgZnJvbSBvdXRwdXQgYnVmZmVyCiAgICAgIDs7ICAgYXMgb3V0cHV0 IGJ1ZmZlciBpcyBub3QgdGhlIHNhbWUgYXMgc2Vzc2lvbiBidWZmZXIKICAgICAgOzsgb3JnLWJh YmVsLWNvbWludC13aXRoLW91dHB1dCBjYW5ub3QgYmUgdXNlZCAKICAgICAgKHNhdmUtZXhjdXJz aW9uCiAgICAgIAkoc2V0LWJ1ZmZlciAoZm9ybWF0ICIqJXMubHN0KiIgb3JnLWJhYmVsLXNhcy1l c3MtcHJvY2Vzcy1uYW1lKSkKICAgICAgCShsZXQqICgoYSAwKSAoYiAwKSAoYW5jaWVucG9pbnQg b3JnLWJhYmVsLXNhcy1sZXBvaW50KSkKICAgICAgCSAod2hpbGUgKDwgYSBvcmctYmFiZWwtc2Fz LXRpbWVvdXQpCiAgICAgIAkgICAoc2V0cSBiIGEpCiAgICAgIAkgICAoZ290by1jaGFyIG9yZy1i YWJlbC1zYXMtbGVwb2ludCkKICAgICAgCSAgIChzZXRxIGEgKHJlLXNlYXJjaC1mb3J3YXJkIChy ZWdleHAtcXVvdGUgb3JnLWJhYmVsLXNhcy1lb2Utb3V0cHV0KSBuaWwgdCkpCiAgICAgIAkgICAo aWYgYQogICAgICAJICAgICAgIChwcm9nbiAoc2V0cSBhIG9yZy1iYWJlbC1zYXMtdGltZW91dCkK ICAgICAgCSAJICAgICAgKGdvdG8tY2hhciBvcmctYmFiZWwtc2FzLWxlcG9pbnQpCiAgICAgIAkg CSAgICAgIChzZXRxIGFuY2llbnBvaW50IG9yZy1iYWJlbC1zYXMtbGVwb2ludCkKCQkgICAgICA7 OyB3ZWxsIHdlbGwsIHRoaXMgaXMgZW1iYXJhc3NpbmcgYnV0CgkJICAgICAgOzsgYXMgdGhlcmUn cyBub3QgaGlzdG9yeSBsaWtlIGluIGNvbWludAoJCSAgICAgIDs7IHRoZSBsYXN0IHBvaW50IGlz IHNhdmVkIGluIHRoaXMgZ2xvYmFsCgkJICAgICAgOzsgdmFyaWFibGUgKHRoYXQgd2lsbCBiZSB1 c2VkIHRoZQoJCSAgICAgIDs7IG5leHQgdGltZSkKICAgICAgCSAJICAgICAgKHNldGYgb3JnLWJh YmVsLXNhcy1sZXBvaW50IChwb2ludC1tYXgpKSkKICAgICAgCSAgICAgKHNldHEgYSAoKyBiIDEp KSkKICAgICAgCSAgIChzaXQtZm9yIDAuMDEpKQogICAgICAgCSAob3JnLWJhYmVsLXNhcy10cmlt LXdoaXRlIChyZXBsYWNlLXJlZ2V4cC1pbi1zdHJpbmcgKGNvbmNhdCAiXFwoXGZcXClcXHxcXCgi IG9yZy1iYWJlbC1zYXMtYm9lLW91dHB1dCAiXFwpXFx8XFwoIiBvcmctYmFiZWwtc2FzLWVvZS1v dXRwdXQgIlxcKSIpICIiIChidWZmZXItc3Vic3RyaW5nIGFuY2llbnBvaW50IG9yZy1iYWJlbC1z YXMtbGVwb2ludCkpKSkpKSkpKQoKKHByb3ZpZGUgJ29iLXNhcykKCjs7OyBvYi1zYXMuZWwgZW5k cyBoZXJlCg== --089e082f6640bc34b9055b46d4fc--