From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 13823 invoked by alias); 7 Feb 2003 14:40:29 -0000 Mailing-List: contact cgen-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cgen-owner@sources.redhat.com Received: (qmail 13813 invoked from network); 7 Feb 2003 14:40:29 -0000 Received: from unknown (HELO wrzx35.rz.uni-wuerzburg.de) (132.187.3.35) by 172.16.49.205 with SMTP; 7 Feb 2003 14:40:29 -0000 Received: from wrzx34.rz.uni-wuerzburg.de (wrzx34.rz.uni-wuerzburg.de [132.187.3.34]) by wrzx35.rz.uni-wuerzburg.de (8.8.8/8.8.8/uniwue-MM-1.05) with ESMTP id PAA325221 for ; Fri, 7 Feb 2003 15:40:27 +0100 (CET) Received: from virusscan (localhost [127.0.0.1]) by wrzx34.rz.uni-wuerzburg.de (Postfix) with ESMTP id B18B267385 for ; Fri, 7 Feb 2003 15:40:27 +0100 (CET) Received: from wrzx37.rz.uni-wuerzburg.de ([132.187.3.37]) by virusscan (wrzx34 [132.187.3.34:25]) (amavisd-new) with ESMTP id 21080-10 for ; Fri, 7 Feb 2003 15:40:27 +0100 (CET) Received: from spamchecker (localhost [127.0.0.1]) by wrzx37.rz.uni-wuerzburg.de (Postfix) with ESMTP id E4219AB5D for ; Fri, 7 Feb 2003 15:40:26 +0100 (CET) Received: from wpax16.physik.uni-wuerzburg.de (wpax16.physik.uni-wuerzburg.de [132.187.42.16]) by wrzx37.rz.uni-wuerzburg.de (Postfix) with ESMTP id B09E8AB49 for ; Fri, 7 Feb 2003 15:40:26 +0100 (CET) Received: from localhost (mlkessle@localhost) by wpax16.physik.uni-wuerzburg.de (8.10.0/8.10.0) with ESMTP id h17Eetr20318 for ; Fri, 7 Feb 2003 15:40:56 +0100 (MET) Date: Fri, 07 Feb 2003 14:40:00 -0000 From: Manuel Kessler X-Sender: mlkessle@wpax16.physik.uni-wuerzburg.de To: cgen@sources.redhat.com Subject: Again: variable width instructions In-Reply-To: <200212201757.54789.dfcarney@net-itech.com> Message-ID: MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="2005231591-851401618-1044628855=:20314" X-Spam-Status: No, hits=-12.6 required=8.0 tests=IN_REP_TO,LOCAL_CLIENT,LOCAL_SENDER,NICE_HELO, SPAM_PHRASE_00_01,USER_AGENT_PINE version=2.43-string_20021002 X-Spam-Level: X-Virus-Scanned: by amavisd-new (Rechenzentrum Universitaet Wuerzburg) X-SW-Source: 2003-q1/txt/msg00037.txt.bz2 This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. --2005231591-851401618-1044628855=:20314 Content-Type: TEXT/PLAIN; charset=US-ASCII Content-length: 2767 Five or six weeks ago David Carney asked how to handle instructions with fields beyond the usual instruction size, which is rather CISC-ish. While Frank and Doug responded quickly, how to handle this situation, by defining just fields starting at the next bit (and the trick to define lsb0? to #f), he did not succeed. As he told me, he had to move on to other things, and so got distracted. However, I am in a similar situation, trying to accomplish more or less the same thing. While for my microcontroller (Mitsubishi M16C, if anybody is interested) instructions may be as short as 8 bits, with operands, immediates and prefixes they may grow to up to 80 bits or so. I was able to assemble and disassemble the first instructions with different addressing modes (and correspondingly different lengths) by using xxx-insn-bitsize of 32 (instead of the 8 as suggested in the documentation for the smallest instruction), but for instructions even longer than that my attempts were not successful. While I can define instruction fields that late, I can not fill them with registers or immediates, this data (register indices etc.) gets stuck in the first portion of the instruction. Doug mentioned the fr30 port as a guidline, which has a single instruction taking a 32 bit immediate and thus being longer than the others. However, this functionality seems to be gone. The same problem is there: The immediate data does not get filled in the appropriate slot. I took this file: ; test file for ldi32 ldi:32 $0x80000000, r0 nop ldi:32 $0x00000000, r1 nop ldi:32 $0xffffffff, r2 nop ldi:32 $0x7fffffff, r3 nop .end assembled it, and objdump of the result told me: a.out: file format elf32-fr30 Disassembly of section .text: 00000000 <.text>: in disassemble_bytes 0: 9f 80 00 00 ldi:32 0x0,r0 4: 00 00 6: 9f a0 nop 8: 9f 81 00 00 ldi:32 0x0,r1 c: 00 00 e: 9f a0 nop 10: 9f 82 00 00 ldi:32 0x0,r2 14: 00 00 16: 9f a0 nop 18: 9f 83 00 00 ldi:32 0x0,r3 1c: 00 00 1e: 9f a0 nop As you can see, the immediate data vanishes somewhere in between. I am kind of stuck now. Is there still a trick I have been missing, or are variable width instructions currently broken, or only fields beyond the first instruction portion? I hope desperately there is a simple fix to this problem. Thanks for your time. Ciao, Manuel PS: For the curious I have attached the current state of my m16c.cpu file (I am not sure if it will make it to the list). Feel free to comment on it, and find further information and a CVS repository of the will-be binutils port at http://savannah.nongnu.org/projects/m16c/ --2005231591-851401618-1044628855=:20314 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="m16c.cpu" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="m16c.cpu" Content-length: 16109 OyBPcGVuIHF1ZXN0aW9uczoNCjsgLSB3aHkgZG9lc24ndCAkc2l6ZSB3b3Jr IGluIGRpc2Fzc2VtYmx5Pz8/DQo7IC0gd2h5IGRvIHdlIGhhdmUgdG8gdXNl IGJhc2UtaW5zbi1iaXRzaXplPTE2LzMyID8NCjsgLSBhZGRyZXNzL2luZGV4 IHJlZ2lzdGVycyBhcmUgY3VycmVudGx5IFdJLCBidXQgc2hvdWxkIGJlIEFJ DQo7ICAgLT4gQ0dFTiBwcm9ibGVtLCBldmVuIGlmIEhJIC0+IHNlbWFudGlj IGFjY2VzcyB0byB3aXRoIG1lbSBkb2Vzbid0IHdvcmsNCg0KOyBNaXRzdWJp c2hpIE0xNkMgQ1BVIGRlc2NyaXB0aW9uLiAgLSotIFNjaGVtZSAtKi0NCjsg Q29weXJpZ2h0IChDKSAyMDAyIE1hbnVlbCBLZXNzbGVyDQoNCihpbmNsdWRl ICJzaW1wbGlmeS5pbmMiKQ0KDQo7IEZJWE1FOiBEZWxldGUgc2lnbiBleHRl bnNpb24gb2YgYWNjdW11bGF0b3IgcmVzdWx0cy4NCjsgU2lnbiBleHRlbnNp b24gaXMgZG9uZSB3aGVuIGFjY3VtdWxhdG9yIGlzIHJlYWQuDQoNCjsgZGVm aW5lLWFyY2ggbXVzdCBhcHBlYXIgZmlyc3QNCg0KKGRlZmluZS1hcmNoDQog IChuYW1lIG0xNmMpIDsgbmFtZSBvZiBjcHUgZmFtaWx5DQogIChjb21tZW50 ICJNaXRzdWJpc2hpIE0xNkMiKQ0KICAoZGVmYXVsdC1hbGlnbm1lbnQgYWxp Z25lZCkNCiAgKGluc24tbHNiMD8gI3QpDQogIChtYWNocyBtMTZjOHgpDQog IChtYWNocyBtMTZjNnggbTE2Yzh4IG0zMmM4eCkNCiAgKGlzYXMgbTE2YykN CikNCg0KOyBJbnN0cnVjdGlvbiBzZXQgcGFyYW1ldGVycy4NCjsgRklYTUU6 IEkgdGhpbmsgOC84Lzggd291bGQgYmUgbW9yZSBjb3JyZWN0LCBidXQgY29u c3RhbnQgZmllbGRzIHNlZW0gdG8gYmUNCjsgbm90IGFsbG93ZWQgYmV5b25k IGJhc2UtaW5zbi1iaXRzaXplLCBhbmQgaXQgc2VlbXMgdG8gd29yayAobW9z dGx5KSBvaw0KOyB0aGlzIHdheS4gUGVyaGFwcyBjb21lIGJhY2sgdG8gdGhp cyBpc3N1ZSBsYXRlci4NCihkZWZpbmUtaXNhDQogIChuYW1lIG0xNmMpDQog IChkZWZhdWx0LWluc24tYml0c2l6ZSAzMikNCiAgKGJhc2UtaW5zbi1iaXRz aXplIDMyKQ0KICAoZGVmYXVsdC1pbnNuLXdvcmQtYml0c2l6ZSAzMikNCikN Cg0KOyBDcHUgZmFtaWx5IGRlZmluaXRpb25zLg0KDQooZGVmaW5lLWNwdQ0K ICA7IGNwdSBuYW1lcyBtdXN0IGJlIGRpc3RpbmN0IGZyb20gdGhlIGFyY2hp dGVjdHVyZSBuYW1lIGFuZCBtYWNoaW5lIG5hbWVzLg0KICA7IFRoZSAiYiIg c3VmZml4IHN0YW5kcyBmb3IgImJhc2UiIGFuZCBpcyB0aGUgY29udmVudGlv bi4NCiAgOyBUaGUgImYiIHN1ZmZpeCBzdGFuZHMgZm9yICJmYW1pbHkiIGFu ZCBpcyB0aGUgY29udmVudGlvbi4NCiAgKG5hbWUgbTE2Y2JmKQ0KICAoY29t bWVudCAiTWl0c3ViaXNoaSBNMTZDNnggYmFzZSBmYW1pbHkiKQ0KICAoZW5k aWFuIGxpdHRsZSkNCikNCg0KKGRlZmluZS1jcHUNCiAgKG5hbWUgbTMyY2Yp DQogIChjb21tZW50ICJNaXRzdWJpc2hpIE0xNkM4eC9NMzJDOHggZmFtaWx5 IikNCiAgKGVuZGlhbiBsaXR0bGUpDQogIDsgR2VuZXJhdGVkIGZpbGVzIGhh dmUgYW4gIngiIHN1ZmZpeC4NCiAgKGZpbGUtdHJhbnNmb3JtICJ4IikNCikN Cg0KKGRlZmluZS1tYWNoDQogIChuYW1lIG0xNmM2eCkNCiAgKGNvbW1lbnQg IkdlbmVyaWMgTTE2QzZ4IGNwdSIpDQogIChjcHUgbTE2Y2JmKQ0KKQ0KDQoo ZGVmaW5lLW1hY2gNCiAgKG5hbWUgbTE2Yzh4KQ0KICAoY29tbWVudCAiR2Vu ZXJpYyBNMTZDOHggY3B1IikNCiAgKGNwdSBtMzJjZikNCikNCg0KKGRlZmlu ZS1tYWNoDQogIChuYW1lIG0zMmM4eCkNCiAgKGNvbW1lbnQgIkdlbmVyaWMg TTMyQzh4IGNwdSIpDQogIChjcHUgbTMyY2YpDQopDQoNCjsgTW9kZWwgZGVz Y3JpcHRpb25zLg0KDQooZGVmaW5lLW1vZGVsDQogIChuYW1lIG0xNmM2MCkg KGNvbW1lbnQgIk0xNkMvNjAiKSAoYXR0cnMpDQogIChtYWNoIG0xNmM2eCkN CiAgKHBpcGVsaW5lIGFsbCAiIiAoKSAoKGZldGNoKSAoZGVjb2RlKSAoZXhl Y3V0ZSkgKHdyaXRlYmFjaykpKQ0KICAodW5pdCB1LWV4ZWMgIkV4ZWN1dGlv biBVbml0IiAoKQ0KCTEgMSA7IGlzc3VlIGRvbmUNCgkoKSAoKSAoKSAoKSkN CikNCg0KKGRlZmluZS1tb2RlbA0KICAobmFtZSBtMTZjODApIChjb21tZW50 ICJNMTZDLzgwIikgKGF0dHJzKQ0KICAobWFjaCBtMTZjOHgpDQogIChwaXBl bGluZSBhbGwgIiIgKCkgKChmZXRjaCkgKGRlY29kZSkgKGV4ZWN1dGUpICh3 cml0ZWJhY2spKSkNCiAgKHVuaXQgdS1leGVjICJFeGVjdXRpb24gVW5pdCIg KCkNCgkxIDEgOyBpc3N1ZSBkb25lDQoJKCkgKCkgKCkgKCkpDQopDQoNCihk ZWZpbmUtbW9kZWwNCiAgKG5hbWUgbTMyYzgwKSAoY29tbWVudCAiTTMyQy84 MCIpIChhdHRycykNCiAgKG1hY2ggbTMyYzh4KQ0KICAocGlwZWxpbmUgYWxs ICIiICgpICgoZmV0Y2gpIChkZWNvZGUpIChleGVjdXRlKSAod3JpdGViYWNr KSkpDQogICh1bml0IHUtZXhlYyAiRXhlY3V0aW9uIFVuaXQiICgpDQoJMSAx IDsgaXNzdWUgZG9uZQ0KCSgpICgpICgpICgpKQ0KKQ0KDQo7IHJlZ2lzdGVy IGZpbGUgZGVmaW5pdGlvbnMNCihkZWZpbmUta2V5d29yZA0KICAobmFtZSBn cjgtbmFtZXMpDQogIChwcmludC1uYW1lIGgtZ3I4KQ0KICAocHJlZml4ICIi KQ0KICAodmFsdWVzIChyMGggMCkgKHIxaCAxKSAocjBsIDIpIChyMWwgMykp DQopDQoNCihkZWZpbmUtaGFyZHdhcmUNCiAgKG5hbWUgaC1ncjgpDQogIChj b21tZW50ICI4IGJpdCBnZW5lcmFsIHJlZ2lzdGVycyIpDQogIChhdHRycyBW SVJUVUFMIFBST0ZJTEUpDQogICh0eXBlIHJlZ2lzdGVyIFFJICg0KSkNCiAg KGluZGljZXMgZXh0ZXJuLWtleXdvcmQgZ3I4LW5hbWVzKQ0KICAoZ2V0IChp bmRleCkNCiAgICAgICAoaWYgKGd0IGluZGV4IDEpDQoJICAgKHJlZyBRSSBo LWdyIGluZGV4KQ0KCSAgIChiaXRmaWVsZCAocmVnIGgtZ3IgKGFkZCBpbmRl eCAyKSkgMTUgOCkpKQ0KICAoc2V0IChpbmRleCBuZXd2YWwpDQogICAgICAg KGlmIChndCBpbmRleCAxKQ0KCSAgIChzZXQgKGJpdGZpZWxkIChyZWcgaC1n ciBpbmRleCkgOCA4KSBuZXd2YWwpDQoJICAgKHNldCAoYml0ZmllbGQgKHJl ZyBoLWdyIChhZGQgaW5kZXggMikpIDE1IDgpIG5ld3ZhbCkpKQ0KKQ0KDQoo ZGVmaW5lLWtleXdvcmQNCiAgKG5hbWUgZ3ItbmFtZXMpDQogIChwcmludC1u YW1lIGgtZ3IpDQogIChwcmVmaXggIiIpDQogICh2YWx1ZXMgKHIyIDApIChy MyAxKSAocjAgMikgKHIxIDMpKQ0KKQ0KDQooZGVmaW5lLWhhcmR3YXJlDQog IChuYW1lIGgtZ3IpDQogIChjb21tZW50ICJnZW5lcmFsIHJlZ2lzdGVycyIp DQogIChhdHRycyBQUk9GSUxFIENBQ0hFLUFERFIpDQogICh0eXBlIHJlZ2lz dGVyIEhJICg0KSkNCiAgKGluZGljZXMgZXh0ZXJuLWtleXdvcmQgZ3ItbmFt ZXMpDQopDQoNCihkZWZpbmUta2V5d29yZA0KICAobmFtZSBhci1uYW1lcykN CiAgKHByaW50LW5hbWUgaC1hcikNCiAgKHByZWZpeCAiIikNCiAgKHZhbHVl cyAoYTAgMCkgKGExIDEpKQ0KKQ0KDQooZGVmaW5lLWhhcmR3YXJlDQogIChu YW1lIGgtYXIpDQogIChjb21tZW50ICJhZGRyZXNzIHJlZ2lzdGVycyIpDQog IChhdHRycyBWSVJUVUFMIFBST0ZJTEUpDQogICh0eXBlIHJlZ2lzdGVyIFdJ ICgyKSkNCiAgKGluZGljZXMgZXh0ZXJuLWtleXdvcmQgYXItbmFtZXMpDQog IChnZXQgKGluZGV4KSAocmVnIGgtaXIgaW5kZXgpKQ0KICAoc2V0IChpbmRl eCBuZXd2YWwpIChzZXQgcmVnIGgtaXIgaW5kZXggbmV3dmFsKSkNCikNCg0K KGRlZmluZS1rZXl3b3JkDQogIChuYW1lIGJyLW5hbWVzKQ0KICAocHJpbnQt bmFtZSBoLWJyKQ0KICAocHJlZml4ICIiKQ0KICAodmFsdWVzIChzYiAwKSAo ZmIgMSkpDQopDQoNCihkZWZpbmUtaGFyZHdhcmUNCiAgKG5hbWUgaC1icikN CiAgKGNvbW1lbnQgImFkZHJlc3MgcmVnaXN0ZXJzIikNCiAgKGF0dHJzIFZJ UlRVQUwgUFJPRklMRSkNCiAgKHR5cGUgcmVnaXN0ZXIgV0kgKDIpKQ0KICAo aW5kaWNlcyBleHRlcm4ta2V5d29yZCBici1uYW1lcykNCiAgKGdldCAoaW5k ZXgpIChyZWcgaC1pciAoYWRkIGluZGV4IDIpKSkNCiAgKHNldCAoaW5kZXgg bmV3dmFsKSAoc2V0IHJlZyBoLWlyIChhZGQgaW5kZXggMikgbmV3dmFsKSkN CikNCg0KKGRlZmluZS1rZXl3b3JkDQogIChuYW1lIGlyLW5hbWVzKQ0KICAo cHJpbnQtbmFtZSBoLWlyKQ0KICAocHJlZml4ICIiKQ0KICAodmFsdWVzIChh MCAwKSAoYTEgMSkgKHNiIDIpIChmYiAzKSkNCikNCg0KKGRlZmluZS1oYXJk d2FyZQ0KICAobmFtZSBoLWlyKQ0KICAoY29tbWVudCAiaW5kZXggcmVnaXN0 ZXJzIikNCiAgKGF0dHJzIFBST0ZJTEUgQ0FDSEUtQUREUikNCiAgKHR5cGUg cmVnaXN0ZXIgV0kgKDQpKQ0KICAoaW5kaWNlcyBleHRlcm4ta2V5d29yZCBp ci1uYW1lcykNCikNCg0KKGRlZmluZS1rZXl3b3JkDQogIChuYW1lIGdyMzIt bmFtZXMpDQogIChwcmludC1uYW1lIGgtZ3IzMikNCiAgKHByZWZpeCAiIikN CiAgKHZhbHVlcyAocjJyMCAwKSAocjNyMSAxKSkNCikNCg0KKGRlZmluZS1o YXJkd2FyZQ0KICAobmFtZSBoLWdyMzIpDQogIChjb21tZW50ICIzMiBiaXQg Y29tYmluZWQgZ2VuZXJhbCByZWdpc3RlcnMiKQ0KICAoYXR0cnMgVklSVFVB TCBQUk9GSUxFKQ0KICAodHlwZSByZWdpc3RlciBXSSAoMTYpKQ0KICAoaW5k aWNlcyBleHRlcm4ta2V5d29yZCBncjMyLW5hbWVzKQ0KICAoZ2V0IChpbmRl eCkgKGFkZCAocmVnIEhJIGgtZ3IgKGFkZCAobXVsIGluZGV4IDIpIDEpKQ0K ICAJCQkJCShzbGwgKHJlZyBISSBoLWdyIChtdWwgaW5kZXggMikpIDE2KSkp DQogIChzZXQgKGluZGV4IG5ld3ZhbCkgKHBhcmFsbGVsIDsgRklYTUUgZG8g Ym90aCBoYWx2ZXM/Pw0KICAJCShzZXQgKHN1YndvcmQgSEkgaC1nciAocmVn IGgtZ3IgaW5kZXgpIDE1IDE2KSBuZXd2YWwpKSkNCikNCg0KKGRlZmluZS1r ZXl3b3JkDQogIChuYW1lIGNyOC1uYW1lcykNCiAgKHByaW50LW5hbWUgaC1j cjgpDQogIChwcmVmaXggIiIpDQogICh2YWx1ZXMgKGRjdDAgMCkgKGRjdDEg MSkgKGZsZyAyKSAoc3ZmIDMpDQoJKGRyYzAgNCkgKGRyYzEgNSkgKGRtZDAg NikgKGRtZDEgNykpDQopDQoNCihkZWZpbmUtaGFyZHdhcmUNCiAgKG5hbWUg aC1jcjgpDQogIChjb21tZW50ICI4IGJpdCBjb250cm9sIHJlZ2lzdGVycyIp DQogIChhdHRycyBQUk9GSUxFIENBQ0hFLUFERFIpDQogICh0eXBlIHJlZ2lz dGVyIFFJICg4KSkNCiAgKGluZGljZXMgZXh0ZXJuLWtleXdvcmQgY3I4LW5h bWVzKQ0KKQ0KDQooZGVmaW5lLWtleXdvcmQNCiAgKG5hbWUgY3IyNGEtbmFt ZXMpDQogIChwcmludC1uYW1lIGgtY3IyNGEpDQogIChwcmVmaXggIiIpDQog ICh2YWx1ZXMgKGludGIgMCkgKHNwIDEpIChzYiAyKSAoZmIgMykgKHN2cCA0 KSAodmN0IDUpIChpc3AgNykpDQopDQoNCihkZWZpbmUtaGFyZHdhcmUNCiAg KG5hbWUgaC1jcjI0YSkNCiAgKGNvbW1lbnQgIjI0IGJpdCBjb250cm9sIHJl Z2lzdGVycyIpDQogIChhdHRycyBQUk9GSUxFIENBQ0hFLUFERFIpDQogICh0 eXBlIHJlZ2lzdGVyIFdJICg4KSkNCiAgKGluZGljZXMgZXh0ZXJuLWtleXdv cmQgY3IyNGEtbmFtZXMpDQopDQoNCihkZWZpbmUta2V5d29yZA0KICAobmFt ZSBjcjI0Yi1uYW1lcykNCiAgKHByaW50LW5hbWUgaC1jcjI0YikNCiAgKHBy ZWZpeCAiIikNCiAgKHZhbHVlcyAoZG1hMCAyKSAoZG1hMSAzKSAoZHJhMCA0 KSAoZHJhMSA1KSAoZHNhMCA2KSAoZHNhMSA3KSkNCikNCg0KKGRlZmluZS1o YXJkd2FyZQ0KICAobmFtZSBoLWNyMjRiKQ0KICAoY29tbWVudCAiMjQgYml0 IGNvbnRyb2wgcmVnaXN0ZXJzIikNCiAgKGF0dHJzIFBST0ZJTEUgQ0FDSEUt QUREUikNCiAgKHR5cGUgcmVnaXN0ZXIgV0kgKDgpKQ0KICAoaW5kaWNlcyBl eHRlcm4ta2V5d29yZCBjcjI0Yi1uYW1lcykNCikNCg0KKGRlZmluZS1oYXJk d2FyZQ0KICAobmFtZSBoLXNpemUpDQogIChjb21tZW50ICJzaXplIHN1ZmZp eCIpDQogICh0eXBlIGltbWVkaWF0ZSAoVUlOVCAxKSkNCiAgKHZhbHVlcyBr ZXl3b3JkICIuIiAoKGIgMCkgKHcgMSkgKSkNCikNCg0KOyBGb3IgY29uZGJp dCBvcGVyYW5kLiAgRklYTUU6IE5lZWQgdG8gYWxsb3cgc3BlYyBvZiBnZXQv c2V0IG9mIG9wZXJhbmRzLg0KOyBIYXZpbmcgdGhpcyBzZXBhcmF0ZSBmcm9t IGgtcHN3IGtlZXBzIHRoZSBwYXJ0cyB0aGF0IHVzZSBpdCBzaW1wbGVyDQo7 IFtzaW5jZSB0aGV5IGdyZWF0bHkgb3V0bnVtYmVyIHRob3NlIHRoYXQgdXNl IGgtcHN3XS4NCg0KKGRzaCBoLWNvbmQgImNvbmRpdGlvbiBiaXQiICgpIChy ZWdpc3RlciBCSSkpDQoNCihkbmggaC1wYyAicHJvZ3JhbSBjb3VudGVyIiAo UEMgUFJPRklMRSkgKHBjKSAoKSAoKSAoKSkNCg0KOyBvcGVyYW5kIGZpZWxk cw0KOyBjb3BpZWQgZnJvbSBpYTMyLmNwdQ0KOyBUaGVyZSBjdXJyZW50bHkg ZG9lc24ndCBleGlzdCBzaG9ydGhhbmQgbWFjcm9zIGZvciBDSVNDIElTQSdz LA0KOyBzbyBkZWZpbmUgb3VyIG93bi4NCjsgRElGOiBkZWZpbmUtaWEzMi1m aWVsZA0KOyBETklGOiBkZWZpbmUtbm9ybWFsLWlhMzItZmllbGQNCg0KKGRl ZmluZS1wbWFjcm8gKGRpZiB4LW5hbWUgeC1jb21tZW50IHgtYXR0cnMgeC13 b3JkLW9mZnNldCB4LXdvcmQtbGVuZ3RoIHgtc3RhcnQgeC1sZW5ndGggeC1t b2RlIHgtZW5jb2RlIHgtZGVjb2RlKQ0KICAoZGVmaW5lLWlmaWVsZA0KICAg IChuYW1lIHgtbmFtZSkNCiAgICAoY29tbWVudCB4LWNvbW1lbnQpDQogICAg KC5zcGxpY2UgYXR0cnMgKC51bnNwbGljZSB4LWF0dHJzKSkNCiAgICAod29y ZC1vZmZzZXQgeC13b3JkLW9mZnNldCkNCiAgICAod29yZC1sZW5ndGggeC13 b3JkLWxlbmd0aCkNCiAgICAoc3RhcnQgeC1zdGFydCkNCiAgICAobGVuZ3Ro IHgtbGVuZ3RoKQ0KICAgIChtb2RlIHgtbW9kZSkNCiAgICAoZW5jb2RlIHgt ZW5jb2RlKQ0KICAgIChkZWNvZGUgeC1kZWNvZGUpDQogICAgKQ0KKQ0KDQoo ZGVmaW5lLXBtYWNybyAoZG5pZiB4LW5hbWUgeC1jb21tZW50IHgtYXR0cnMg eC13b3JkLW9mZnNldCB4LXdvcmQtbGVuZ3RoIHgtc3RhcnQgeC1sZW5ndGgp DQogIChkaWYgeC1uYW1lIHgtY29tbWVudCB4LWF0dHJzIHgtd29yZC1vZmZz ZXQgeC13b3JkLWxlbmd0aCB4LXN0YXJ0IHgtbGVuZ3RoDQogICAgICAgVUlO VCAjZiAjZikNCikNCg0KOyBvcGVyYW5kIDEgbW9kZSBzZWxlY3QNCihkbmYg Zi1vcDFtICAgICAgIm9wMW0iICAgICAoKSAzIDEpDQo7IG9wZXJhbmQgMSBk aXNwbGFjZW1lbnQgc2l6ZSBzZWxlY3QNCihkbmYgZi1vcDFpICAgICAgIm9w MWkiICAgICAoKSAyIDIpDQo7IG9wZXJhbmQgMSByZWdpc3RlciBzZWxlY3QN CihkbmYgZi1vcDFyICAgICAgIm9wMXIiICAgICAoKSAxNSAyKQ0KOyBvcGVy YW5kIDEgYWRkcmVzcyBtb2RlIHNlbGVjdA0KKGRuZiBmLW9wMWFtICAgICAi b3AxYW0iICAgICgpIDE1IDEpDQo7IG9wZXJhbmQgMSBhZGRyZXNzIHJlZ2lz dGVyIHNlbGVjdA0KKGRuZiBmLW9wMWFyICAgICAib3AxYXIiICAgICgpIDE0 IDEpDQoNCjsgZGl0byBmb3Igb3BlcmFuZCAyDQooZG5mIGYtb3AybSAgICAg ICJvcDJtIiAgICAgKCkgNiAxKQ0KKGRuZiBmLW9wMmkgICAgICAib3AyaSIg ICAgICgpIDUgMikNCihkbmYgZi1vcDJyICAgICAgIm9wMnIiICAgICAoKSAx MyAyKQ0KOyhkbm1mIGYtb3AyICAgICAgIm9wMiIgICAgICAoKSBVSU5UIChm LW9wMm0gZi1vcDJpIGYtb3AycikgI2YgI2YpDQoNCjsgb3BlcmFuZCBzaXpl IHNlbGVjdA0KKGRuZiBmLXNpemUgICAgICAic2l6ZSIgICAgICgpIDAgMSkN Cg0KOyBjb25kaXRpb24gc2VsZWN0DQooZG5mIGYtY29uZCAgICAgICJjb25k IiAgICAgKCkgMTIgNCkNCg0KDQooZGYgZi1kaXNwOCAgICAgICJkaXNwOCIg ICAgKCkgMjMgOCBJTlQgI2YgI2YpDQooZGYgZi1kaXNwMTYgICAgICJkaXNw MTYiICAgKCkgMzEgMTYgSU5UICNmICNmKQ0KKGRmIGYtZGlzcDI0ICAgICAi ZGlzcDI0IiAgICgpIDM5IDI0IElOVCAjZiAjZikNCihkbm9wIGRpc3A4ICAg ICAgImRpc3A4IiAgICAoKSBoLWlhZGRyIGYtZGlzcDgpDQooZG5vcCBkaXNw MTYgICAgICJkaXNwMTYiICAgKCkgaC1pYWRkciBmLWRpc3AxNikNCihkbm9w IGRpc3AyNCAgICAgImRpc3AyNCIgICAoKSBoLWlhZGRyIGYtZGlzcDI0KQ0K DQo7IEluc3RydWN0aW9uIGZpZWxkcy4NCg0KKGRlZmluZS1wbWFjcm8gKGJ1 aWxkLWhleDEgbnVtKSAoLmhleCBudW0gMSkpDQooZGVmaW5lLXBtYWNybyAo YnVpbGQtaGV4MiBudW0pICguaGV4IG51bSAyKSkNCg0KKGRuZiBmLW9wY29k ZSAic2luZ2xlIGluc24gYnl0ZSIgICAgICAgICAoKSA3IDgpDQooZG5mIGYt b3BjMSAgICJvcGNvZGUgc2luZ2xlIG9wZXJhbmQiICAgICgpIDcgNCkNCihk bmYgZi1vcGMxYiAgIm9wY29kZSBzaW5nbGUgb3BlcmFuZCAjMiIgKCkgMTMg NikNCihkbmYgZi1vcGMxbSAgIm9wY29kZSBtb2RlIiAgICAgICAgICAgICAg KCkgMyAzKQ0KKGRuZiBmLW9wY3MgICAib3Bjb2RlIHNpemUiICAgICAgICAg ICAgICAoKSAwIDEpDQoNCg0KOyBpbnNuLW9wY29kZQ0KOyAiMDAiIC4uLiAi RkYiDQo7KGRlZmluZS1ub3JtYWwtaW5zbi1lbnVtIGluc24tb3Bjb2RlICJp bnNuIG9wY29kZSBlbnVtcyIgKCkgT1BfIGYtb3Bjb2RlDQo7ICAoLm1hcCAu dXBjYXNlICgubWFwIGJ1aWxkLWhleDIgKC5pb3RhIDI1NikpKQ0KOykNCg0K OyBpbnNuLW9wMTogYml0cyA3LTQNCjsoZGVmaW5lLW5vcm1hbC1pbnNuLWVu dW0gaW5zbi1vcDEgImluc24gb3Bjb2RlIGVudW1zICgxIG9wKSIgKCkgT1Ax XyBmLW9wYzENCjsgICgubWFwIC51cGNhc2UgKC5tYXAgYnVpbGQtaGV4MSAo LmlvdGEgMTYpKSkNCjspDQo7IGluc24tb3AxOiBiaXRzIDEzLTgNCjsoZGVm aW5lLW5vcm1hbC1pbnNuLWVudW0gaW5zbi1vcDFiICJpbnNuIG9wY29kZSBl bnVtcyAoMSBvcCwgIzIpIiAoKSBPUDFCXyBmLW9wYzFiDQo7ICAoLm1hcCAu dXBjYXNlICgubWFwIGJ1aWxkLWhleDIgKC5pb3RhIDY0KSkpDQo7KQ0KOyBp bnNuLW9wMW06IGJpdHMgMy0xDQooZGVmaW5lLW5vcm1hbC1pbnNuLWVudW0g aW5zbi1vcDFtICJpbnNuIG9wY29kZSBtb2RlcyAoMSBvcCkiICgpIE9QMU1f IGYtb3BjMW0NCgkoIkEiICI4QSIgIjE2QSIgIjI0QSIgIlIiKQ0KKQ0KOyBp bnNuLW9wMXM6IGJpdCAwDQooZGVmaW5lLW5vcm1hbC1pbnNuLWVudW0gaW5z bi1vcDFzICJpbnNuIG9wY29kZSBzaXplIiAoKSBPUFNfIGYtb3Bjcw0KCSgi QiIgIlciKQ0KKQ0KOyBpbnNuLW9wMWFtOiBiaXQgMTUNCihkZWZpbmUtbm9y bWFsLWluc24tZW51bSBpbnNuLW9wMWFtICJpbnNuIG9wY29kZSBhZGRyZXNz IG1vZGUgKDEgb3ApIiAoKSBPUDFBTV8gZi1vcDFhbQ0KCSgiSSIgIkQiKSA7 IGRpcmVjdC9pbmRpcmVjdCBhMC9hMSByZXNwZWN0aXZlbHkgW2EwXS9bYTFd DQopDQoNCihkZWZpbmUtYXR0cg0KICAoZm9yIG9wZXJhbmQpDQogICh0eXBl IGJvb2xlYW4pDQogIChuYW1lIEhBU0gtUFJFRklYKQ0KICAoY29tbWVudCAi aW1tZWRpYXRlcyBoYXZlIGFuIG9wdGlvbmFsICcjJyBwcmVmaXgiKQ0KKQ0K DQooZG5vcCBzciAgICAgInNvdXJjZSByZWdpc3RlciIgICAgICAgICAgICAg ICgpIGgtZ3IgICBmLW9wMnIpDQooZG5vcCBkciAgICAgImRlc3RpbmF0aW9u IHJlZ2lzdGVyIiAgICAgICAgICgpIGgtZ3IgICBmLW9wMXIpDQooZG5vcCBz cjggICAgInNvdXJjZSByZWdpc3RlciIgICAgICAgICAgICAgICgpIGgtZ3I4 ICBmLW9wMnIpDQooZG5vcCBkcjggICAgImRlc3RpbmF0aW9uIHJlZ2lzdGVy IiAgICAgICAgICgpIGgtZ3I4ICBmLW9wMXIpDQooZG5vcCBpciAgICAgImlu ZGV4IHJlZ2lzdGVyIiAgICAgICAgICAgICAgICgpIGgtaXIgICBmLW9wMXIp DQooZG5vcCBhciAgICAgImFkZHJlc3MgcmVnaXN0ZXIiICAgICAgICAgICAg ICgpIGgtYXIgICBmLW9wMWFyKQ0KDQooZG5vcCBzaXplICAgInNpemUgc3Vm Zml4IiAgICAgICAgICAgICAgICAgICgpIGgtc2l6ZSBmLW9wY3MpDQoNCjso ZG5vcCBzaSAgICAgInNvdXJjZSBpbmRpcmVjdCIgICAgICAgICAgICAgICgp IGgtZ3IgICBmLW9wMnIpDQo7KGRub3AgZGkgICAgICJkZXN0aW5hdGlvbiBp bmRpcmVjdCIgICAgICAgICAoKSBoLWdyICAgZi1vcDFyKQ0KDQo7IEluc3Ry dWN0aW9ucw0KDQooZG5pIG5vcCAibm9wIg0KICAgICAoKQ0KICAgICAibm9w Ig0KICAgICAoKyAoZi1vcGNvZGUgI3hERSkpDQogICAgIChub3ApDQogICAg ICgpDQopDQoNCjtORUcuc2l6ZSAxMDEwZGRkUyBkZDEwMTExMQ0KOyBkZGQ9 MTAwIGZvciByOC9yMTYNCihkbmkgbmVnICJuZWciDQogICAgICgpDQogICAg ICJuZWcudyAkZHIiDQogICAgICgrIChmLW9wYzEgI3hBKSBPUDFNX1IgT1BT X1cgKGYtb3BjMWIgI3gyZikgZHIpDQogICAgIChzZXQgZHIgKG5lZyBkcikp DQogICAgICgpDQopDQooZG5taSBuZWctICJuZWcgYWxpYXMiDQogICAgIChO Ty1ESVMpDQogICAgICJuZWcgJGRyIg0KICAgICAoZW1pdCBuZWcgZHIpDQop DQoNCihkbmkgbmVnOCAibmVnOCINCiAgICAgKCkNCiAgICAgIm5lZy5iICRk cjgiDQogICAgICgrIChmLW9wYzEgI3hBKSBPUDFNX1IgT1BTX0IgKGYtb3Bj MWIgI3gyZikgZHI4KQ0KICAgICAoc2V0IGRyOCAobmVnIGRyOCkpDQogICAg ICgpDQopDQooZG5taSBuZWc4LSAibmVnOCBhbGlhcyINCiAgICAgKE5PLURJ UykNCiAgICAgIm5lZyAkZHI4Ig0KICAgICAoZW1pdCBuZWc4IGRyOCkNCikN Cg0KKGRuaSBuZWdhICJuZWdhIg0KICAgICAoKQ0KICAgICAibmVnLncgJGFy Ig0KICAgICAoKyAoZi1vcGMxICN4QSkgT1AxTV9BIE9QU19XIChmLW9wYzFi ICN4MkYpIE9QMUFNX0QgYXIpDQogICAgIChzZXQgYXIgKGFuZCAobmVnIGFy KSA2NTUzNSkpDQogICAgICgpDQopDQooZG5taSBuZWdhLSAibmVnYSBhbGlh cyINCiAgICAgKE5PLURJUykNCiAgICAgIm5lZyAkYXIiDQogICAgIChlbWl0 IG5lZ2EgYXIpDQopDQoNCjsgZGRkPTAwMDEgZm9yIGEwL2ExDQooZG5pIG5l Z2FpdyAibmVnYWl3Ig0KICAgICAoKQ0KICAgICAibmVnJHNpemUgWyRhcl0i DQogICAgICgrIChmLW9wYzEgI3hBKSBPUDFNX0Egc2l6ZSAoZi1vcGMxYiAj eDJGKSBPUDFBTV9JIGFyKQ0KICAgICAoaWYgc2l6ZQ0KICAgICAJKHNldCAo bWVtIEhJIGFyKSAobmVnIChtZW0gSEkgYXIpKSkNCiAgICAgCShzZXQgKG1l bSBRSSBhcikgKG5lZyAobWVtIFFJIGFyKSkpDQogICAgICkNCiAgICAgKCkN CikNCg0KKGRuaSBuZWdpOCAibmVnaTgiDQogICAgIChSRUxBWEFCTEUpDQog ICAgICJuZWckc2l6ZSAkZGlzcDhbJGlyXSINCiAgICAgKCsgKGYtb3BjMSAj eEEpIE9QMU1fOEEgc2l6ZSAoZi1vcGMxYiAjeDJGKSBpciBkaXNwOCkNCiAg ICAgKGlmIHNpemUNCiAgICAgCShzZXQgKG1lbSBISSAoYWRkIGlyIGRpc3A4 KSkgKG5lZyAobWVtIEhJIChhZGQgaXIgZGlzcDgpKSkpDQogICAgIAkoc2V0 IChtZW0gUUkgKGFkZCBpciBkaXNwOCkpIChuZWcgKG1lbSBRSSAoYWRkIGly IGRpc3A4KSkpKQ0KICAgICApDQogICAgICgpDQopDQo7KGRubWkgbmVnYi0g Im5lZy5YIDBbJGJyXSBhbGlhcyINCjsgICAgIChOTy1ESVMpDQo7ICAgICAi bmVnJHNpemUgWyRicl0iDQo7ICAgICAoZXhwYW5kIG5lZyQxIDBbJDJdKQ0K OykNCg0KDQooZG5pIG5lZ2kxNiAibmVnaTE2Ig0KICAgICAoKQ0KICAgICAi bmVnJHNpemUgJGRpc3AxNlskaXJdIg0KICAgICAoKyAoZi1vcGMxICN4QSkg T1AxTV8xNkEgc2l6ZSAoZi1vcGMxYiAjeDJGKSBpciBkaXNwMTYpDQogICAg IChpZiBzaXplDQogICAgIAkoc2V0IChtZW0gSEkgKGFkZCBpciBkaXNwMTYp KSAobmVnIChtZW0gSEkgKGFkZCBpciBkaXNwMTYpKSkpDQogICAgIAkoc2V0 IChtZW0gUUkgKGFkZCBpciBkaXNwMTYpKSAobmVnIChtZW0gUUkgKGFkZCBp ciBkaXNwMTYpKSkpDQogICAgICkNCiAgICAgKCkNCikNCg0KDQoNCg0KDQoN Cg== --2005231591-851401618-1044628855=:20314--