From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 13949 invoked by alias); 30 Nov 2004 06:12:06 -0000 Mailing-List: contact xconq7-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: xconq7-owner@sources.redhat.com Received: (qmail 13253 invoked from network); 30 Nov 2004 06:11:28 -0000 Received: from unknown (HELO urk.execulink.net) (199.166.6.45) by sourceware.org with SMTP; 30 Nov 2004 06:11:28 -0000 Received: from diamond.ansuz.sooke.bc.ca (dsl317.rba1.pppoe.execulink.com [66.203.175.65]) by urk.execulink.net (8.11.6/8.11.6) with ESMTP id iAU6BPT02540; Tue, 30 Nov 2004 01:11:25 -0500 Received: from localhost (mskala@localhost) by diamond.ansuz.sooke.bc.ca (8.10.2/8.10.2) with ESMTP id iAU65fH29410; Tue, 30 Nov 2004 01:05:41 -0500 Date: Wed, 01 Dec 2004 02:34:00 -0000 From: mskala@ansuz.sooke.bc.ca To: xconq-general@lists.sourceforge.net, xconq7 Subject: Improved scaler Message-ID: MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="50987268-217631084-1101794741=:28810" X-SW-Source: 2004/txt/msg01449.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. --50987268-217631084-1101794741=:28810 Content-Type: TEXT/PLAIN; charset=US-ASCII Content-length: 4806 Attached is a patch (against current mainline CVS) implementing an improved image scaler. Since this is done inside imf.c, it should be applicable to all interfaces. In my own testing it seems to make XConq a lot prettier in general, and it fixes the "terrain changes to flat colours at highest magnification" problem. It seems to work in both the TCL and SDL interfaces, which are the only ones I can really test. However, there are some issues remaining: * I'm 99% sure this problem is not caused by my patch because it seems to exist in the mainline CVS also, but I discovered it while testing this patch: some shipped game modules cause the TCL/TK interface to crash with a segfault. See attached backtrace. To replicate the problem, choose the game "Cave of Wandering Death" in the TCL interface and choose the defaults for variants and players; the segfault occurs just before the map window comes up. I'll probably log it into the SourceForge bug tracker. I've seen what seems to be the same bug with a few other game modules but haven't been able to determine what's special about the ones that exhibit it. "Beirut 1982" also segfaults, but it seems like that may be a different bug because the map window does pop up and messages appear before it segfaults. * Subimage scaling is still non-existant (not a new problem, but one that is not fixed by this patch) so even if you define several alternate terrain images, only one will be used at any magnifications where the image must be generated by scaling. * Some of the existing art doesn't really look very good with the new scaler's selection rules. In particular, some image families contain tiles that clash visually with scaled versions of the non-tile images from other image families. To see an example, choose the default game in the TCL interface with default settings except "world seen" turned on, and look at the different zoom levels. At one level, you'll see all the terrain as tiles, including a nasty-looking brown and white triangle pattern for mountains, blue with wavy lines for ocean, and yellow and brown dots for desert. All the other levels look more photographic, so it's somewhat jarring to switch between the two. This is really more an issue of what's defined in the art than how the scaler works, but having the scaler always choose the closest match means that the closest match had better be the image we actually want to use. A similar issue, though I haven't actually seen it in practice, would be that if we defined both colour and monochrome images in the same family, then the scaler might use them both at different resolutions, to the possible annoyance of the user. * Similarly: if you take a hexagon at 44x48 and you scale it up to 88x96, the result will not be a perfect hexagon because the "jaggies" along the slanted edges will have 2-pixel staircase steps instead of 1-pixel staircase steps. If you then attempt to cover a real 88x96 hexagon with the scaler output, the result will leave some pixels around the edges uncovered. To see the effect of this issue, start an "advances" game in the TCL interface and zoom in to the maximum. The terrain images are only defined at 44x48 resolution (maybe also at smaller resolutions) and so when they're scaled up to 88x96, there are stray pixels along the slanted edges, resulting in zigzag horizontal grey lines on the display. I think, ultimately, that this is an art problem; the art should be defined with image data a little bigger than the hexagon instead of going up to the hex edge and then stopping. That way the scaler will be able to do its job. I'm not sure why we bother having masks in cell-terrain images. The system doesn't appear to need it; I've successfully used images covering the entire image rectangle with no mask for cell terrain, and the interfaces seem to correctly mask out the central hexagon anyway. They'll have to, when I get to the advanced terrain image stuff, or else I'll have to generate hexagonal masks on the fly. I may be able to edit the GIFs to add some extra pixels of appropriate colour around the edges of the hexagons. It seems like this issue affects very few actual images among the ones we're distributing - the only example I've found is advt44x48.gif. I also might be able to tweak the scaler to fake the extra pixels automatically so that no changes to the art would be needed, but I'm less happy about that because it would mean the scaler would have to *know* for sure whether a given image was going to be used for cell terrain, and I can think of a lot of scenarios where the automatic fill-in would generate bad data and cause more problems than it would solve. -- Matthew Skala mskala@ansuz.sooke.bc.ca Embrace and defend. http://ansuz.sooke.bc.ca/ --50987268-217631084-1101794741=:28810 Content-Type: TEXT/PLAIN; charset=US-ASCII; name=msgtemp Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=msgtemp Content-length: 28459 SW5kZXg6IGtlcm5lbC9pbWYuYw0KPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K UkNTIGZpbGU6IC9jdnNyb290L3hjb25xL3hjb25xL2tlcm5lbC9pbWYuYyx2 DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMg0KZGlmZiAtYyAtcjEuMiBpbWYu Yw0KKioqIGtlcm5lbC9pbWYuYwkyNSBOb3YgMjAwNCAwNjo1OToyOSAtMDAw MAkxLjINCi0tLSBrZXJuZWwvaW1mLmMJMzAgTm92IDIwMDQgMDU6Mjg6MDcg LTAwMDANCioqKioqKioqKioqKioqKg0KKioqIDMyLDQ0ICoqKioNCiAgICAg IEtfT1RIRVJfDQogIH07DQogIA0KICBzdGF0aWMgSW1hZ2UgKmdldF9zdWJp bWcoSW1hZ2VGYW1pbHkgKmltZiwgaW50IHcsIGludCBoKTsNCiAgc3RhdGlj IEltYWdlICpsYXJnZXN0X2ltYWdlKEltYWdlRmFtaWx5ICppbWYpOw0KICBz dGF0aWMgaW50IGltYWdlX3BpeGVsX2F0KEltYWdlICppbWcsIGludCBpbXR5 cGUsIGludCB4LCBpbnQgeSk7DQogIHN0YXRpYyB2b2lkIHNldF9pbWFnZV9w aXhlbF9hdChJbWFnZSAqaW1nLCBpbnQgaW10eXBlLCBpbnQgeCwgaW50IHks IGludCB2YWwpOw0KICBzdGF0aWMgSW1hZ2VGYW1pbHkgKm5ld19pbWYoY2hh ciAqbmFtZSk7DQotIHN0YXRpYyBJbWFnZSAqYWRkX3NocnVua2VuX2ltYWdl KEltYWdlRmFtaWx5ICppbWYpOw0KLSBzdGF0aWMgSW1hZ2UgKmFkZF9tYWdu aWZpZWRfaW1hZ2UoSW1hZ2VGYW1pbHkgKmltZik7DQogIHN0YXRpYyBpbnQg Yml0bWFwc19tYXRjaChpbnQgdywgaW50IGgsIE9iaiAqbGlzcGRhdGEsIGNo YXIgKnJhd2RhdGEpOw0KICBzdGF0aWMgaW50IGNvbG9yX21hdGNoZXNfbW9u byhJbWFnZSAqaW1nKTsNCiAgc3RhdGljIHZvaWQgd3JpdGVfcGl4bWFwKEZJ TEUgKmZwLCBpbnQgdywgaW50IGgsIGludCBhdywgaW50IGFoLA0KLS0tIDMy LDQ3IC0tLS0NCiAgICAgIEtfT1RIRVJfDQogIH07DQogIA0KKyB0eXBlZGVm IHN0cnVjdCBfTUZFbnRyeSB7DQorICAgICBpbnQgdmFsdWUsIGNvdW50Ow0K KyB9IE1GRW50cnk7DQorIHR5cGVkZWYgTUZFbnRyeSAqTW9kZUZpbHRlcjsN CisgDQogIHN0YXRpYyBJbWFnZSAqZ2V0X3N1YmltZyhJbWFnZUZhbWlseSAq aW1mLCBpbnQgdywgaW50IGgpOw0KICBzdGF0aWMgSW1hZ2UgKmxhcmdlc3Rf aW1hZ2UoSW1hZ2VGYW1pbHkgKmltZik7DQogIHN0YXRpYyBpbnQgaW1hZ2Vf cGl4ZWxfYXQoSW1hZ2UgKmltZywgaW50IGltdHlwZSwgaW50IHgsIGludCB5 KTsNCiAgc3RhdGljIHZvaWQgc2V0X2ltYWdlX3BpeGVsX2F0KEltYWdlICpp bWcsIGludCBpbXR5cGUsIGludCB4LCBpbnQgeSwgaW50IHZhbCk7DQogIHN0 YXRpYyBJbWFnZUZhbWlseSAqbmV3X2ltZihjaGFyICpuYW1lKTsNCiAgc3Rh dGljIGludCBiaXRtYXBzX21hdGNoKGludCB3LCBpbnQgaCwgT2JqICpsaXNw ZGF0YSwgY2hhciAqcmF3ZGF0YSk7DQogIHN0YXRpYyBpbnQgY29sb3JfbWF0 Y2hlc19tb25vKEltYWdlICppbWcpOw0KICBzdGF0aWMgdm9pZCB3cml0ZV9w aXhtYXAoRklMRSAqZnAsIGludCB3LCBpbnQgaCwgaW50IGF3LCBpbnQgYWgs DQoqKioqKioqKioqKioqKioNCioqKiA1MCw1NSAqKioqDQotLS0gNTMsNjUg LS0tLQ0KICBzdGF0aWMgdm9pZCB3cml0ZV9wYWxldHRlX2NvbnRlbnRzKEZJ TEUgKmZwLCBPYmogKnBhbGV0dGUsDQogIAkJCQkgICBpbnQgKnJhd3BhbGV0 dGUsIGludCBudW1jb2xvcnMpOw0KICBzdGF0aWMgdm9pZCB3cml0ZV9jb2xv cihGSUxFICpmcCwgaW50IG4sIGludCByLCBpbnQgZywgaW50IGIpOw0KKyBz dGF0aWMgTW9kZUZpbHRlciBuZXdfbWYoaW50IG1heHZhbHMpOw0KKyBzdGF0 aWMgdm9pZCBhZGRfdG9fbWYoTW9kZUZpbHRlciBtZiwgaW50IHZhbCk7DQor IHN0YXRpYyBpbnQgbW9kZV9vZl9tZihNb2RlRmlsdGVyIG1mKTsNCisgc3Rh dGljIHZvaWQgemVyb19tZihNb2RlRmlsdGVyIG1mKTsNCisgc3RhdGljIHZv aWQgZGVsZXRlX21mKE1vZGVGaWx0ZXIgbWYpOw0KKyBzdGF0aWMgSW1hZ2Ug KmFkZF9zY2FsZWRfaW1hZ2UoSW1hZ2VGYW1pbHkgKmltZiwgSW1hZ2UgKmlt ZywgaW50IHcsIGludCBoKTsNCisgc3RhdGljIGludCBzaXplX21hdGNoX3Nj b3JlKGludCB3YSwgaW50IGhhLCBpbnQgd2IsIGludCBoYik7DQogIA0KICAv KiBUaGlzIGlzIHRoZSBhcnJheSBhbmQgY291bnQgb2Yga25vd24gaW1hZ2Ug ZmFtaWxpZXMuICovDQogIA0KKioqKioqKioqKioqKioqDQoqKiogNzUzLDg5 MyAqKioqDQogICAgICB9DQogIH0NCiAgDQohIC8qIElmIGFuIGltYWdlIGZh bWlseSBpbmNsdWRlcyBubyBzbWFsbCBpbWFnZXMgKDE2eDE2IG9yIGxlc3Mp LCB0aGVuDQohICAgIGFkZCBhbiBpbWFnZSB0aGF0IGlzIGhhbGYgdGhlIHNp emUgb2YgdGhlIHNtYWxsZXN0IGltYWdlIGluIHRoZQ0KISAgICBmYW1pbHku ICovDQogIA0KISBzdGF0aWMgSW1hZ2UgKg0KISBhZGRfc2hydW5rZW5faW1h Z2UoSW1hZ2VGYW1pbHkgKmltZikNCiEgew0KISAgICAgaW50IG51bWJ5dGVz LCBudW1ieXRlczIsIHgsIHksIHN1bSwgaXg7DQohICAgICBJbWFnZSAqaW1n LCAqaW1nMjsNCiAgDQohICAgICBpZiAoaW1mID09IE5VTEwpDQohICAgICAg IHJldHVybiBOVUxMOw0KISAgICAgaW1nID0gc21hbGxlc3RfaW1hZ2UoaW1m KTsNCiEgICAgIC8qIERvbid0IHRyeSB0byBzaHJpbmsgdGlsZXMgb3IgYWxy ZWFkeS1zaHJ1bmtlbiBpbWFnZXMgb3IgdmVyeQ0KISAgICAgICAgc21hbGwg aW1hZ2VzLiAqLw0KISAgICAgaWYgKGltZy0+aXN0aWxlIHx8IGltZy0+dyA8 PSA4IHx8IGltZy0+aCA8PSA4KQ0KISAgICAgICByZXR1cm4gTlVMTDsNCiEg ICAgIGltZzIgPSBnZXRfaW1nKGltZiwgaW1nLT53IC8gMiwgaW1nLT5oIC8g Mik7DQohICAgICAvKiBDaGFuY2VzIGFyZSB0aGF0IGFueSBlbWJlZGRlZCBz dWJpbWFnZSB3aWxsIGJlY29tZSB1bnJlY29nbml6YWJsZSwNCiEgICAgICAg IHNvIGxlYXZlIGVtYmVkbmFtZSBlbXB0eS4gKi8NCiEgICAgIGlmIChpbWct PmVtYmVkeCA+IDApDQohICAgICAgIGltZzItPmVtYmVkeCA9IGltZy0+ZW1i ZWR4IC8gMjsNCiEgICAgIGlmIChpbWctPmVtYmVkeSA+IDApDQohICAgICAg IGltZzItPmVtYmVkeSA9IGltZy0+ZW1iZWR5IC8gMjsNCiEgICAgIGlmIChp bWctPmVtYmVkdyA+IDApDQohICAgICAgIGltZzItPmVtYmVkdyA9IGltZy0+ ZW1iZWR3IC8gMjsNCiEgICAgIGlmIChpbWctPmVtYmVkaCA+IDApDQohICAg ICAgIGltZzItPmVtYmVkaCA9IGltZy0+ZW1iZWRoIC8gMjsNCiEgICAgIGlm IChpbWctPnJhd2NvbHJkYXRhID09IE5VTEwpIHsNCiEgCS8qIFRyeSBkaWZm ZXJlbnQgd2F5cyB0byBnZXQgc29tZSBpbWFnZSBkYXRhLiAqLw0KISAJaWYg KGltZy0+Y29scmRhdGEgIT0gbGlzcG5pbCkgew0KISAJICAgIG51bWJ5dGVz ID0gaW1nLT5oICogY29tcHV0ZWRfcm93Ynl0ZXMoaW1nLT53LCBpbWctPnBp eGVsc2l6ZSk7DQohIAkgICAgaW1nLT5yYXdjb2xyZGF0YSA9IChjaGFyICop eG1hbGxvYyhudW1ieXRlcyk7DQohIAkgICAgaW50ZXJwX2J5dGVzKGltZy0+ Y29scmRhdGEsIG51bWJ5dGVzLCBpbWctPnJhd2NvbHJkYXRhLCAwKTsNCiEg CX0gZWxzZSBpZiAoaW1nLT5maWxlZGF0YSAhPSBsaXNwbmlsKSB7DQohIAkg ICAgbWFrZV9pbWFnZV9mcm9tX2ZpbGVfaW1hZ2UoaW1mLCBpbWcsIGltZywg MCk7DQohIAl9DQohICAgICB9DQohICAgICBpbWcyLT5waXhlbHNpemUgPSBp bWctPnBpeGVsc2l6ZTsNCiEgICAgIGltZzItPnBhbGV0dGUgPSBpbWctPnBh bGV0dGU7DQohICAgICBpbWcyLT5yYXdwYWxldHRlID0gaW1nLT5yYXdwYWxl dHRlOw0KISAgICAgaW1nMi0+bnVtY29sb3JzID0gaW1nLT5udW1jb2xvcnM7 DQohICAgICAvKiBNYXJrIHRoZSBpbWFnZSBhcyBoYXZpbmcgYmVlbiBjb21w dXRlZCByYXRoZXIgdGhhbiByZWFkIGluLiAqLw0KISAgICAgaW1nMi0+c3lu dGhldGljID0gVFJVRTsNCiEgICAgIGlmIChpbWctPnJhd2NvbHJkYXRhICE9 IE5VTEwpIHsNCiEgCW51bWJ5dGVzMiA9IGltZzItPmggKiBjb21wdXRlZF9y b3dieXRlcyhpbWcyLT53LCBpbWcyLT5waXhlbHNpemUpOw0KISAJaW1nMi0+ cmF3Y29scmRhdGEgPSAoY2hhciAqKXhtYWxsb2MobnVtYnl0ZXMyKTsNCiEg ICAgIH0NCiEgICAgIG51bWJ5dGVzID0gaW1nLT5oICogY29tcHV0ZWRfcm93 Ynl0ZXMoaW1nLT53LCAxKTsNCiEgICAgIG51bWJ5dGVzMiA9IGltZzItPmgg KiBjb21wdXRlZF9yb3dieXRlcyhpbWcyLT53LCAxKTsNCiEgICAgIC8qIEVu c3VyZSB0aGF0IGJpbmFyeSB2ZXJzaW9uIG9mIG1vbm8gaW1hZ2UgZXhpc3Rz LiAqLw0KISAgICAgbWFrZV9yYXdfbW9ub19kYXRhKGltZywgRkFMU0UpOw0K ISAgICAgaWYgKGltZy0+cmF3bW9ub2RhdGEgIT0gTlVMTCkNCiEgICAgICAg aW1nMi0+cmF3bW9ub2RhdGEgPSAoY2hhciAqKXhtYWxsb2MobnVtYnl0ZXMy KTsNCiEgICAgIC8qIEVuc3VyZSB0aGF0IGJpbmFyeSB2ZXJzaW9uIG9mIG1h c2sgZXhpc3RzLiAqLw0KISAgICAgaWYgKGltZy0+cmF3bWFza2RhdGEgPT0g TlVMTCAmJiBpbWctPm1hc2tkYXRhICE9IGxpc3BuaWwpIHsNCiEgCWltZy0+ cmF3bWFza2RhdGEgPSAoY2hhciAqKXhtYWxsb2MobnVtYnl0ZXMpOw0KISAJ aW50ZXJwX2J5dGVzKGltZy0+bWFza2RhdGEsIG51bWJ5dGVzLCBpbWctPnJh d21hc2tkYXRhLCAwKTsNCiAgICAgIH0NCiEgICAgIGlmIChpbWctPnJhd21h c2tkYXRhICE9IE5VTEwpDQohICAgICAgIGltZzItPnJhd21hc2tkYXRhID0g KGNoYXIgKil4bWFsbG9jKG51bWJ5dGVzMik7DQohICAgICAvKiBTY2FuIHRo cm91Z2ggdGhlIG5ldyBpbWFnZSwgY29tcHV0aW5nIGVhY2ggcGl4ZWwgc2Vw YXJhdGVseS4gKi8NCiEgICAgIGZvciAoeCA9IDA7IHggPCBpbWcyLT53OyAr K3gpIHsNCiEgCWZvciAoeSA9IDA7IHkgPCBpbWcyLT5oOyArK3kpIHsNCiEg CSAgICBpeCA9IC0xOw0KISAJICAgIGlmIChpbWcyLT5yYXdjb2xyZGF0YSAh PSBOVUxMKSB7DQohIAkJLyogKHNob3VsZCBjaG9vc2UgbW9zdCBjb21tb24g b3IgZWxzZSBhdmVyYWdlIGNvbG9ycykgKi8NCiEgCQlpbnQgdmFsc1s0XTsN CiEgCQl2YWxzWzBdID0gaW1hZ2VfcGl4ZWxfYXQoaW1nLCBLX0NPTFJfLCAy ICogeCwgICAgIDIgKiB5KTsNCiEgCQl2YWxzWzFdID0gaW1hZ2VfcGl4ZWxf YXQoaW1nLCBLX0NPTFJfLCAyICogeCArIDEsIDIgKiB5KTsNCiEgCQl2YWxz WzJdID0gaW1hZ2VfcGl4ZWxfYXQoaW1nLCBLX0NPTFJfLCAyICogeCwgICAg IDIgKiB5ICsgMSk7DQohIAkJdmFsc1szXSA9IGltYWdlX3BpeGVsX2F0KGlt ZywgS19DT0xSXywgMiAqIHggKyAxLCAyICogeSArIDEpOw0KISAJCWl4ID0g MDsNCiEgCQlpZiAodmFsc1sxXSA9PSB2YWxzWzJdIHx8IHZhbHNbMV0gPT0g dmFsc1szXSkNCiEgCQkgIGl4ID0gMTsNCiEgCQllbHNlIGlmICh2YWxzWzJd ID09IHZhbHNbM10pDQohIAkJICBpeCA9IDI7DQohIAkJc2V0X2ltYWdlX3Bp eGVsX2F0KGltZzIsIEtfQ09MUl8sIHgsIHksIHZhbHNbaXhdKTsNCiEgCSAg ICB9DQohIAkgICAgLyogQWRkIHRvIHRoZSBtb25vIGltYWdlIGlmIDIgb3Ig bW9yZSBvZiB0aGUgNCBvcmlnaW5hbA0KISAJICAgICAgIGJpdHMgYXJlIG9u LiAqLw0KISAJICAgIGlmIChpbWcyLT5yYXdtb25vZGF0YSAhPSBOVUxMKSB7 DQohIAkJc3VtID0gMDsNCiEgCQlzdW0gKz0gaW1hZ2VfcGl4ZWxfYXQoaW1n LCBLX01PTk9fLCAyICogeCwgICAgIDIgKiB5KTsNCiEgCQlzdW0gKz0gaW1h Z2VfcGl4ZWxfYXQoaW1nLCBLX01PTk9fLCAyICogeCArIDEsIDIgKiB5KTsN CiEgCQlzdW0gKz0gaW1hZ2VfcGl4ZWxfYXQoaW1nLCBLX01PTk9fLCAyICog eCwgICAgIDIgKiB5ICsgMSk7DQohIAkJc3VtICs9IGltYWdlX3BpeGVsX2F0 KGltZywgS19NT05PXywgMiAqIHggKyAxLCAyICogeSArIDEpOw0KISAJCXN1 bSA9IChzdW0gPj0gMiA/IDEgOiAwKTsNCiEgCQlzZXRfaW1hZ2VfcGl4ZWxf YXQoaW1nMiwgS19NT05PXywgeCwgeSwgc3VtKTsNCiEgCSAgICB9DQohIAkg ICAgLyogVXNlIHRoZSB2YWx1ZSBmb3IgdGhlIG1hc2sgY29ycmVzcG9uZGlu ZyB0byB0aGUgdmFsdWUNCiEgCSAgICAgICB3ZSB1c2VkIGZvciB0aGUgY29s b3IgaW1hZ2UsIG9yIGVsc2UgdGhlIFVMIGNvcm5lcg0KISAJICAgICAgIHZh bHVlLiAqLw0KISAJICAgIGlmIChpbWcyLT5yYXdtYXNrZGF0YSAhPSBOVUxM KSB7DQohIAkJaW50IHZhbHNbNF07DQohIAkJdmFsc1swXSA9IGltYWdlX3Bp eGVsX2F0KGltZywgS19NQVNLXywgMiAqIHgsICAgICAyICogeSk7DQohIAkJ dmFsc1sxXSA9IGltYWdlX3BpeGVsX2F0KGltZywgS19NQVNLXywgMiAqIHgg KyAxLCAyICogeSk7DQohIAkJdmFsc1syXSA9IGltYWdlX3BpeGVsX2F0KGlt ZywgS19NQVNLXywgMiAqIHgsICAgICAyICogeSArIDEpOw0KISAJCXZhbHNb M10gPSBpbWFnZV9waXhlbF9hdChpbWcsIEtfTUFTS18sIDIgKiB4ICsgMSwg MiAqIHkgKyAxKTsNCiEgCQlpZiAoaXggPCAwKQ0KISAJCSAgaXggPSAwOw0K ISAJCXNldF9pbWFnZV9waXhlbF9hdChpbWcyLCBLX01BU0tfLCB4LCB5LCB2 YWxzW2l4XSk7DQogIAkgICAgfQ0KISAJfQ0KICAgICAgfQ0KLSAgICAgY29t cHV0ZV9pbWFnZV9iYm94KGltZzIpOw0KLSAgICAgaWYgKGltZl9pbnRlcnBf aG9vaykNCi0gICAgICAgKCppbWZfaW50ZXJwX2hvb2spKGltZiwgaW1nMiwg RkFMU0UpOw0KLSAgICAgcmV0dXJuIGltZzI7DQogIH0NCiAgDQohIC8qIEFk ZCBhbiBpbWFnZSB0d2ljZSB0aGUgc2l6ZSBvZiB0aGUgbGFyZ2VzdCBpbWFn ZSBpbiB0aGUgZmFtaWx5LCBpZg0KISAgICB0aGUgZmFtaWx5IGRvZXMgbm90 IGFscmVhZHkgaW5jbHVkZSBhIGxhcmdlIGltYWdlLiAqLw0KICANCiAgc3Rh dGljIEltYWdlICoNCiEgYWRkX21hZ25pZmllZF9pbWFnZShJbWFnZUZhbWls eSAqaW1mKQ0KICB7DQohICAgICBpbnQgbnVtYnl0ZXMsIG51bWJ5dGVzMiwg eCwgeSwgeDIsIHkyOw0KISAgICAgSW1hZ2UgKmltZywgKmltZzI7DQogIA0K ISAgICAgaWYgKGltZiA9PSBOVUxMKQ0KISAgICAgICByZXR1cm4gTlVMTDsN CiEgICAgIGltZyA9IGxhcmdlc3RfaW1hZ2UoaW1mKTsNCiEgICAgIGlmIChp bWctPmlzdGlsZSB8fCBpbWctPncgPj0gNjQgfHwgaW1nLT5oID49IDY0KQ0K ISAgICAgICByZXR1cm4gTlVMTDsNCiEgICAgIGltZzIgPSBnZXRfaW1nKGlt ZiwgaW1nLT53ICogMiwgaW1nLT5oICogMik7DQohICAgICBpbWcyLT5lbWJl ZG5hbWUgPSBpbWctPmVtYmVkbmFtZTsNCiEgICAgIGlmIChpbWctPmVtYmVk eCA+IDApDQohICAgICAgIGltZzItPmVtYmVkeCA9IGltZy0+ZW1iZWR4ICog MjsNCiEgICAgIGlmIChpbWctPmVtYmVkeSA+IDApDQohICAgICAgIGltZzIt PmVtYmVkeSA9IGltZy0+ZW1iZWR5ICogMjsNCiEgICAgIGlmIChpbWctPmVt YmVkdyA+IDApDQohICAgICAgIGltZzItPmVtYmVkdyA9IGltZy0+ZW1iZWR3 ICogMjsNCiEgICAgIGlmIChpbWctPmVtYmVkaCA+IDApDQohICAgICAgIGlt ZzItPmVtYmVkaCA9IGltZy0+ZW1iZWRoICogMjsNCiAgICAgIGlmIChpbWct PnJhd2NvbHJkYXRhID09IE5VTEwpIHsNCiAgCS8qIFRyeSBkaWZmZXJlbnQg d2F5cyB0byBnZXQgc29tZSBpbWFnZSBkYXRhLiAqLw0KICAJaWYgKGltZy0+ Y29scmRhdGEgIT0gbGlzcG5pbCkgew0KLS0tIDc2Myw5MTkgLS0tLQ0KICAg ICAgfQ0KICB9DQogIA0KISAvKiBDcmVhdGUgYSBuZXcgZGF0YSBzdHJ1Y3R1 cmUgZm9yIG1vZGUgZmlsdGVyaW5nOyBtYXh2YWxzIGlzIGhvdyBtYW55DQoh ICAgIGRpc3RpbmN0IHZhbHVlcyB3ZSBtaWdodCBjYWxsIGFkZF90b19tZiBv bi4gIFRoZSB3YXkgdGhpcyB3b3JrcyBpcyB0aGF0DQohICAgIHlvdSBjcmVh dGUgdGhlIHN0cnVjdHVyZSB3aXRoIG5ld19tZiwgdGhlbiB5b3UgY2FsbCBh ZGRfdG9fbWYgYSBidW5jaCBvZg0KISAgICB0aW1lcyB3aXRoIGRpZmZlcmVu dCB2YWx1ZXMuICBUaGVuIHlvdSBjYW4gY2FsbCBtb2RlX29mX21mIGFuZCBp dCdsbA0KISAgICB0ZWxsIHdoaWNoIHZhbHVlIHlvdSB1c2VkIHRoZSBtb3N0 IHRpbWVzIGluIGNhbGxzIHRvIGFkZF90b19tZi4gIENhbGxpbmcNCiEgICAg emVyb19tZiByZXNldHMgdGhlIGZpbHRlciBpbiBhIHdheSB0aGF0IGlzIGNo ZWFwZXIgdGhhbiBkZWxldGluZyBhbmQNCiEgICAgcmUtY3JlYXRpbmcgaXQs IGFuZCBkZWxldGVfbWYgaXMgY2FsbGVkIHdoZW4geW91J3JlIGZpbmFsbHkg ZmluaXNoZWQuICovDQohIA0KISBzdGF0aWMgTW9kZUZpbHRlcg0KISBuZXdf bWYoaW50IG1heHZhbCkNCiEgew0KISAgICAgTW9kZUZpbHRlciBydmFsID0g KE1vZGVGaWx0ZXIpeG1hbGxvYyhzaXplb2YoTUZFbnRyeSkqKG1heHZhbCsx KSk7DQohICAgIA0KISAgICAgcmV0dXJuIHJ2YWw7DQohIH0NCiAgDQohIC8q IEFkZCBhIG5ldyB2YWx1ZSB0byB0aGUgbW9kZSBmaWx0ZXIuICovDQogIA0K ISBzdGF0aWMgdm9pZA0KISBhZGRfdG9fbWYoTW9kZUZpbHRlciBtZiwgaW50 IHZhbCkNCiEgew0KISAgICAgaW50IGk7DQohICAgICBNRkVudHJ5IG1mZTsN CiEgICAgDQohICAgICBpZiAobWYgPT0gTlVMTCkgcmV0dXJuOw0KISAgICAg Zm9yIChpID0gMDsgKG1mW2ldLnZhbHVlICE9IHZhbCkgJiYgKG1mW2ldLmNv dW50ICE9IDApOyBpKyspOw0KISAgICAgbWZbaV0udmFsdWUgPSB2YWw7DQoh ICAgICBtZltpXS5jb3VudCsrOw0KISAgICAgaWYgKG1mW2ldLmNvdW50ID4g bWZbMF0uY291bnQpIHsNCiEgICAgICAgICBtZmUgPSBtZltpXTsNCiEgICAg ICAgICBtZltpXSA9IG1mWzBdOw0KISAgICAgICAgIG1mWzBdID0gbWZlOw0K ICAgICAgfQ0KISB9DQohIA0KISAvKiBGaW5kIHRoZSBtb3N0IGNvbW1vbiB2 YWx1ZSBpbiB0aGUgbW9kZSBmaWx0ZXIuICovDQohIA0KISBzdGF0aWMgaW50 DQohIG1vZGVfb2ZfbWYoTW9kZUZpbHRlciBtZikNCiEgew0KISAgICAgaWYg KG1mICE9IE5VTEwpDQohICAgICAgICAgcmV0dXJuIG1mWzBdLnZhbHVlOw0K ISAgICAgZWxzZQ0KISAgICAgICAgIHJldHVybiAwOw0KISB9DQohIA0KISAv KiBFbXB0eSB0aGUgbW9kZSBmaWx0ZXIgb2YgYWxsIGNvdW50cy4gKi8NCiEg DQohIHN0YXRpYyB2b2lkDQohIHplcm9fbWYoTW9kZUZpbHRlciBtZikNCiEg ew0KISAgICAgaW50IGk7DQohICAgIA0KISAgICAgaWYgKG1mID09IE5VTEwp IHJldHVybjsNCiEgICAgIGZvciAoaSA9IDA7IG1mW2ldLmNvdW50ICE9IDA7 IGkrKykNCiEgICAgICAgICBtZltpXS5jb3VudCA9IDA7DQohICAgICBtZlsw XS52YWx1ZSA9IDA7DQohIH0NCiEgDQohIC8qIEdldCByaWQgb2YgdGhlIG1v ZGUgZmlsdGVyLiAqLw0KISANCiEgc3RhdGljIHZvaWQNCiEgZGVsZXRlX21m KE1vZGVGaWx0ZXIgbWYpDQohIHsNCiEgICAgIGlmIChtZiAhPSBOVUxMKSBm cmVlKG1mKTsNCiEgfQ0KISANCiEgLyogU2NhbGUgb25lIGxheWVyIG9mIGFu IGltYWdlLiAqLw0KISANCiEgc3RhdGljIHZvaWQNCiEgc2NhbGVfaW1hZ2Vf bGF5ZXIoSW1hZ2UgKmltZ2luLCBJbWFnZSAqaW1nb3V0LCBpbnQgbGF5ZXIs IGludCB1c2VfbWFzaywNCiEgCQkgIE1vZGVGaWx0ZXIgbWYpDQohIHsNCiEg ICAgIGludCB1LCB2LCB4LCB5LCB4YSwgeGIsIHlhLCB5YiwgdG1wOw0KISAN CiEgICAgLyogUGVyZm9ybSBhIG1vZGUtZmlsdGVyZWQgc2NhbGluZyBvcGVy YXRpb24uICovDQohICAgIA0KISAgICAgLyogVGhlIHdheSB0aGlzIHdvcmtz IGlzIHRoYXQgdSBhbmQgdiBhcmUgY29vcmRpbmF0ZXMgaW4gdGhlIG91dHB1 dCBpbWFnZQ0KISAgICAgICAgcnZhbC4gIEZvciBlYWNoIHBpeGVsICh1LHYp IHdlIGNvbXB1dGUgdGhlIHJlY3RhbmdsZSAoeGEuLnhiLHlhLi55YikNCiEg ICAgICAgIGluIHRoZSBpbnB1dCBpbWFnZSBpbWcsIHdoaWNoIHJlY3Rhbmds ZSBjb3ZlcnMgYWxsIHRoZSBwaXhlbHMgdGhhdCBhcmUNCiEgICAgICAgIHRv dWNoZWQgYnkgdGhlIHBpeGVsICh1LHYpIHdoZW4gaXQncyBwcm9qZWN0ZWQg b250byBpbWcsIG5vdGluZyB0aGF0DQohICAgICAgICBhIHBpeGVsIGlzIGRl ZmluZWQgdG8gYmUgY2xvc2VkIG9uIHRoZSBzaWRlcyB3aXRoIGxlc3NlciBj b29yZGluYXRlDQohICAgICAgICB2YWx1ZXMgYW5kIG9wZW4gb24gdGhlIHNp ZGVzIHdpdGggZ3JlYXRlciBjb29yZGluYXRlIHZhbHVlcy4gIFdlDQohICAg ICAgICBwZXJmb3JtIGEgbW9kZSBmaWx0ZXIgb3ZlciAoeGEuLnhiLHlhLi55 YiksIHRoYXQgaXMsIHdlIGZpbmQgdGhlDQohICAgICAgICBwaXhlbCB2YWx1 ZSB0aGF0IG9jY3VycyBtb3N0IGNvbW1vbmx5IGluIHRoYXQgcmVjdGFuZ2xl LCBzcGxpdHRpbmcNCiEgICAgICAgIHRpZXMgYnkgcHJlZmVycmluZyB0aGUg dmFsdWUgdGhhdCBvY2N1cnMgZmlyc3QgaW4gcmVhZGluZyBvcmRlcjsgdGhl DQohICAgICAgICByZXN1bHQgaXMgdGhlIHBpeGVsIHZhbHVlIGZvciB0aGUg cGl4ZWwgKHUsdikuICBXZSBkbyBub3QgY291bnQgaW5wdXQNCiEgICAgICAg IHBpeGVscyB0aGF0IGFyZSBtYXNrZWQgb3V0LiAgSWYgdGhlIHNjYWxpbmcg aXMgYnkgbGVzcyB0aGFuIGEgZmFjdG9yDQohICAgICAgICBvZiAyIHVwIG9y IGRvd24sIHRoZSByZXN1bHQgd2lsbCBiZSBiYXNpY2FsbHkgdGhlIHNhbWUg YXMNCiEgICAgICAgIG5lYXJlc3QtbmVpZ2hib3VyIHJlc2FtcGxpbmcuICov DQohICAgIA0KISAgICAgLyogTG9vcCBmb3IgZWFjaCBwaXhlbCAodSx2KSAq Lw0KISAgICAgZm9yICh2ID0gMDsgdiA8IGltZ291dC0+aDsgdisrKSB7DQoh ICAgICAgIA0KISAgICAgICAgIC8qIE1pZ2h0IGFzIHdlbGwgY2FsY3VsYXRl IHlhIGFuZCB5YiBoZXJlIGJlY2F1c2UgdiBkZXRlcm1pbmVzIHRoZW0gKi8N CiEgICAgICAgICB5YSA9ICh2KmltZ2luLT5oKS9pbWdvdXQtPmg7DQohICAg ICAgICAgeWIgPSAoKHYrMSkqaW1naW4tPmgtMSkvaW1nb3V0LT5oOw0KISAg ICAgICANCiEgICAgICAgICBmb3IgKHUgPSAwOyB1IDwgaW1nb3V0LT53OyB1 KyspIHsNCiEgDQohIAkgICAgLyogQ2FsY3VsYXRlIHhhIGFuZCB4YiAqLw0K ISAJICAgIHhhID0gKHUqaW1naW4tPncpL2ltZ291dC0+dzsNCiEgCSAgICB4 YiA9ICgodSsxKSppbWdpbi0+dy0xKS9pbWdvdXQtPnc7DQohIAkgIA0KISAJ ICAgIC8qIElmIHRoZSByZWN0YW5nbGUgaXMgc21hbGwsIGFuZCB3ZSBkb24n dCBoYXZlIGEgbWFzaywgdGhlbg0KISAJICAgICAgIHNraXAgdGhlIG1vZGUg ZmlsdGVyIGJ1c2luZXNzIGJlY2F1c2UgdGhlIGZpcnN0IHBpeGVsIHdpbnMu ICovDQohIAkgICAgaWYgKCh4Yi14YSsxKSooeWIteWErMSkgPD0gMiAmJiAh dXNlX21hc2spIHsNCiEgCSAgICAgICAgc2V0X2ltYWdlX3BpeGVsX2F0KGlt Z291dCwgbGF5ZXIsIHUsIHYsDQohIAkJICAgIGltYWdlX3BpeGVsX2F0KGlt Z2luLCBsYXllciwgeGEsIHlhKSk7DQohIA0KISAJICAgIC8qIE90aGVyd2lz ZSB3ZSBoYXZlIHRvIGRvIHRoZSBmaWx0ZXIgdGhpbmcuICovDQohIAkgICAg fSBlbHNlIHsNCiEgCSAgICAgIA0KISAJICAgICAgICAvKiBMb29rIHRocm91 Z2ggdGhlIGlucHV0IHJlY3RhbmdsZSBhbmQgY29tcHV0ZSBtb2RlcyAqLw0K ISAJICAgICAgICBmb3IgKHkgPSB5YjsgeSA+PSB5YTsgeS0tKQ0KISAJCSAg ICBmb3IgKHggPSB4YjsgeCA+PSB4YTsgeC0tKQ0KISAJCSAgICAgICAgaWYg KCF1c2VfbWFzaw0KISAJCQkgICAgfHwgaW1hZ2VfcGl4ZWxfYXQoaW1naW4s IEtfTUFTS18sIHgsIHkpICE9IDApDQohIAkJICAgICAgICBhZGRfdG9fbWYo bWYsIGltYWdlX3BpeGVsX2F0KGltZ2luLCBsYXllciwgeCwgeSkpOw0KISAJ ICAgICAgDQohIAkgICAgICAgIC8qIFNldCBvdXRwdXQgcGl4ZWwgKi8NCiEg CQlzZXRfaW1hZ2VfcGl4ZWxfYXQoaW1nb3V0LCBsYXllciwgdSwgdiwgbW9k ZV9vZl9tZihtZikpOw0KISAJCXplcm9fbWYobWYpOw0KICAJICAgIH0NCiEg ICAgICAgICB9DQogICAgICB9DQogIH0NCiAgDQohIC8qIFNjYWxlIGltYWdl IGltZyBpbiBmYW1pbHkgaW1mIHRvIHNpemUgdyBieSBoIGFuZCBhZGQgaXQg dG8gdGhlIGZhbWlseS4gKi8NCiAgDQogIHN0YXRpYyBJbWFnZSAqDQohIGFk ZF9zY2FsZWRfaW1hZ2UoSW1hZ2VGYW1pbHkgKmltZiwgSW1hZ2UgKmltZywg aW50IHcsIGludCBoKQ0KICB7DQohICAgICBJbWFnZSAqcnZhbDsNCiEgICAg IGludCBudW1ieXRlcywgbnVtYnl0ZXMyOw0KISAgICAgTW9kZUZpbHRlciBt ZjsNCiEgICAgDQohICAgICAvKiBXZSBtdXN0IGhhdmUgYSBmYW1pbHkgYW5k IGFuIGlucHV0IGltYWdlLCBhbmQgdGhlIHNpemUgbXVzdCBiZSBzYW5lLiAq Lw0KISAgICAgaWYgKGltZiA9PSBOVUxMIHx8IGltZyA9PSBOVUxMIHx8IHcg PD0gMCB8fCBoIDw9IDApDQohICAgICAgICAgcmV0dXJuIE5VTEw7DQohICAg IA0KISAgICAgLyogQ3JlYXRlIGEgZGF0YSBzdHJ1Y3R1cmUgZm9yIHRoZSBv dXRwdXQuICovDQohICAgICBydmFsID0gZ2V0X2ltZyhpbWYsIHcsIGgpOw0K ISANCiEgICAgIC8qIFNjYWxlIHRoZSBlbWJlZGRpbmcgY29vcmRpbmF0ZXMu ICovDQohICAgICBydmFsLT5lbWJlZHggPSAoaW1nLT5lbWJlZHgqdykvaW1n LT53Ow0KISAgICAgcnZhbC0+ZW1iZWR5ID0gKGltZy0+ZW1iZWR5KmgpL2lt Zy0+aDsNCiEgICAgIHJ2YWwtPmVtYmVkdyA9IChpbWctPmVtYmVkdyp3KS9p bWctPnc7DQohICAgICBydmFsLT5lbWJlZGggPSAoaW1nLT5lbWJlZGgqaCkv aW1nLT5oOw0KICANCiEgICAgIC8qIEFjdHVhbGx5IGdldCB0aGUgaW5wdXQg aW1hZ2UgaWYgd2UgaGF2ZW4ndCB5ZXQuICovDQogICAgICBpZiAoaW1nLT5y YXdjb2xyZGF0YSA9PSBOVUxMKSB7DQogIAkvKiBUcnkgZGlmZmVyZW50IHdh eXMgdG8gZ2V0IHNvbWUgaW1hZ2UgZGF0YS4gKi8NCiAgCWlmIChpbWctPmNv bHJkYXRhICE9IGxpc3BuaWwpIHsNCioqKioqKioqKioqKioqKg0KKioqIDg5 OCw5NDQgKioqKg0KICAJICAgIG1ha2VfaW1hZ2VfZnJvbV9maWxlX2ltYWdl KGltZiwgaW1nLCBpbWcsIDApOw0KICAJfQ0KICAgICAgfQ0KISAgICAgaW1n Mi0+cGl4ZWxzaXplID0gaW1nLT5waXhlbHNpemU7DQohICAgICBpbWcyLT5w YWxldHRlID0gaW1nLT5wYWxldHRlOw0KISAgICAgaW1nMi0+cmF3cGFsZXR0 ZSA9IGltZy0+cmF3cGFsZXR0ZTsNCiEgICAgIGltZzItPm51bWNvbG9ycyA9 IGltZy0+bnVtY29sb3JzOw0KISAgICAgaW1nMi0+c3ludGhldGljID0gVFJV RTsNCiAgICAgIGlmIChpbWctPnJhd2NvbHJkYXRhICE9IE5VTEwpIHsNCiEg CW51bWJ5dGVzMiA9IGltZzItPmggKiBjb21wdXRlZF9yb3dieXRlcyhpbWcy LT53LCBpbWcyLT5waXhlbHNpemUpOw0KISAJaW1nMi0+cmF3Y29scmRhdGEg PSAoY2hhciAqKXhtYWxsb2MobnVtYnl0ZXMyKTsNCiAgICAgIH0NCiAgICAg IG51bWJ5dGVzID0gaW1nLT5oICogY29tcHV0ZWRfcm93Ynl0ZXMoaW1nLT53 LCAxKTsNCiEgICAgIG51bWJ5dGVzMiA9IGltZzItPmggKiBjb21wdXRlZF9y b3dieXRlcyhpbWcyLT53LCAxKTsNCiAgICAgIG1ha2VfcmF3X21vbm9fZGF0 YShpbWcsIEZBTFNFKTsNCiAgICAgIGlmIChpbWctPnJhd21vbm9kYXRhICE9 IE5VTEwpDQohICAgICAgIGltZzItPnJhd21vbm9kYXRhID0gKGNoYXIgKil4 bWFsbG9jKG51bWJ5dGVzMik7DQohICAgICBpZiAoaW1nLT5yYXdtYXNrZGF0 YSA9PSBOVUxMICYmIGltZy0+bWFza2RhdGEgIT0gbGlzcG5pbCApIHsNCiAg CWltZy0+cmF3bWFza2RhdGEgPSAoY2hhciAqKXhtYWxsb2MobnVtYnl0ZXMp Ow0KICAJaW50ZXJwX2J5dGVzKGltZy0+bWFza2RhdGEsIG51bWJ5dGVzLCBp bWctPnJhd21hc2tkYXRhLCAwKTsNCiAgICAgIH0NCiAgICAgIGlmIChpbWct PnJhd21hc2tkYXRhICE9IE5VTEwpDQohICAgICAgIGltZzItPnJhd21hc2tk YXRhID0gKGNoYXIgKil4bWFsbG9jKG51bWJ5dGVzMik7DQohICAgICBmb3Ig KHggPSAwOyB4IDwgaW1nMi0+dzsgKyt4KSB7DQohIAlmb3IgKHkgPSAwOyB5 IDwgaW1nMi0+aDsgKyt5KSB7DQohIAkgICAgeDIgPSB4ID4+IDE7ICB5MiA9 IHkgPj4gMTsNCiEgCSAgICBpZiAoaW1nLT5yYXdjb2xyZGF0YSAhPSBOVUxM KSB7DQohIAkJc2V0X2ltYWdlX3BpeGVsX2F0KGltZzIsIEtfQ09MUl8sIHgs IHksDQohIAkJCQkgICBpbWFnZV9waXhlbF9hdChpbWcsIEtfQ09MUl8sIHgy LCB5MikpOw0KISAJICAgIH0NCiEgCSAgICBpZiAoaW1nLT5yYXdtb25vZGF0 YSAhPSBOVUxMKSB7DQohIAkJc2V0X2ltYWdlX3BpeGVsX2F0KGltZzIsIEtf TU9OT18sIHgsIHksDQohIAkJCQkgICBpbWFnZV9waXhlbF9hdChpbWcsIEtf TU9OT18sIHgyLCB5MikpOw0KISAJICAgIH0NCiEgCSAgICBpZiAoaW1nLT5y YXdtYXNrZGF0YSAhPSBOVUxMKSB7DQohIAkJc2V0X2ltYWdlX3BpeGVsX2F0 KGltZzIsIEtfTUFTS18sIHgsIHksDQohIAkJCQkgICBpbWFnZV9waXhlbF9h dChpbWcsIEtfTUFTS18sIHgyLCB5MikpOw0KISAJICAgIH0NCiEgCX0NCiEg ICAgIH0NCiEgICAgIGNvbXB1dGVfaW1hZ2VfYmJveChpbWcyKTsNCiAgICAg IGlmIChpbWZfaW50ZXJwX2hvb2spDQohICAgICAgICgqaW1mX2ludGVycF9o b29rKShpbWYsIGltZzIsIEZBTFNFKTsNCiEgICAgIHJldHVybiBpbWcyOw0K ICB9DQogIA0KICB2b2lkDQotLS0gOTI0LDk4MyAtLS0tDQogIAkgICAgbWFr ZV9pbWFnZV9mcm9tX2ZpbGVfaW1hZ2UoaW1mLCBpbWcsIGltZywgMCk7DQog IAl9DQogICAgICB9DQohIA0KISAgICAgLyogQ29weSBvdmVyIGEgYnVuY2gg b2Ygb3RoZXIgZmllbGRzLiAqLw0KISAgICAgcnZhbC0+cGl4ZWxzaXplID0g aW1nLT5waXhlbHNpemU7DQohICAgICBydmFsLT5wYWxldHRlID0gaW1nLT5w YWxldHRlOw0KISAgICAgcnZhbC0+cmF3cGFsZXR0ZSA9IGltZy0+cmF3cGFs ZXR0ZTsNCiEgICAgIHJ2YWwtPm51bWNvbG9ycyA9IGltZy0+bnVtY29sb3Jz Ow0KISANCiEgICAgIC8qIE1hcmsgdGhlIGltYWdlIGFzIGhhdmluZyBiZWVu IGNvbXB1dGVkIHJhdGhlciB0aGFuIHJlYWQgaW4uICovDQohICAgICBydmFs LT5zeW50aGV0aWMgPSBUUlVFOw0KISANCiAgICAgIGlmIChpbWctPnJhd2Nv bHJkYXRhICE9IE5VTEwpIHsNCiEgCW51bWJ5dGVzMiA9IHJ2YWwtPmggKiBj b21wdXRlZF9yb3dieXRlcyhydmFsLT53LCBydmFsLT5waXhlbHNpemUpOw0K ISAJcnZhbC0+cmF3Y29scmRhdGEgPSAoY2hhciAqKXhtYWxsb2MobnVtYnl0 ZXMyKTsNCiAgICAgIH0NCiAgICAgIG51bWJ5dGVzID0gaW1nLT5oICogY29t cHV0ZWRfcm93Ynl0ZXMoaW1nLT53LCAxKTsNCiEgICAgIG51bWJ5dGVzMiA9 IHJ2YWwtPmggKiBjb21wdXRlZF9yb3dieXRlcyhydmFsLT53LCAxKTsNCiEg DQohICAgICAvKiBFbnN1cmUgdGhhdCBiaW5hcnkgdmVyc2lvbiBvZiBtb25v IGltYWdlIGV4aXN0cy4gKi8NCiAgICAgIG1ha2VfcmF3X21vbm9fZGF0YShp bWcsIEZBTFNFKTsNCiAgICAgIGlmIChpbWctPnJhd21vbm9kYXRhICE9IE5V TEwpDQohICAgICAgIHJ2YWwtPnJhd21vbm9kYXRhID0gKGNoYXIgKil4bWFs bG9jKG51bWJ5dGVzMik7DQohIA0KISAgICAgLyogRW5zdXJlIHRoYXQgYmlu YXJ5IHZlcnNpb24gb2YgbWFzayBleGlzdHMuICovDQohICAgICBpZiAoaW1n LT5yYXdtYXNrZGF0YSA9PSBOVUxMICYmIGltZy0+bWFza2RhdGEgIT0gbGlz cG5pbCkgew0KICAJaW1nLT5yYXdtYXNrZGF0YSA9IChjaGFyICopeG1hbGxv YyhudW1ieXRlcyk7DQogIAlpbnRlcnBfYnl0ZXMoaW1nLT5tYXNrZGF0YSwg bnVtYnl0ZXMsIGltZy0+cmF3bWFza2RhdGEsIDApOw0KICAgICAgfQ0KICAg ICAgaWYgKGltZy0+cmF3bWFza2RhdGEgIT0gTlVMTCkNCiEgICAgICAgcnZh bC0+cmF3bWFza2RhdGEgPSAoY2hhciAqKXhtYWxsb2MobnVtYnl0ZXMyKTsN CiEgICAgDQohICAgICBtZiA9IG5ld19tZigyNTYpOw0KISAgICAgaWYgKHJ2 YWwtPnJhd21hc2tkYXRhICE9IE5VTEwpIHsNCiEgICAgICAgICBpZiAocnZh bC0+cmF3Y29scmRhdGEgIT0gTlVMTCkNCiEgCSAgICBzY2FsZV9pbWFnZV9s YXllcihpbWcsIHJ2YWwsIEtfQ09MUl8sIFRSVUUsIG1mKTsNCiEgICAgICAg ICBpZiAocnZhbC0+cmF3bW9ub2RhdGEgIT0gTlVMTCkNCiEgCSAgICBzY2Fs ZV9pbWFnZV9sYXllcihpbWcsIHJ2YWwsIEtfTU9OT18sIFRSVUUsIG1mKTsN CiEgICAgICAgICBzY2FsZV9pbWFnZV9sYXllcihpbWcsIHJ2YWwsIEtfTUFT S18sIEZBTFNFLCBtZik7DQohICAgICB9IGVsc2Ugew0KISAgICAgICAgIGlm IChydmFsLT5yYXdjb2xyZGF0YSAhPSBOVUxMKQ0KISAJICAgIHNjYWxlX2lt YWdlX2xheWVyKGltZywgcnZhbCwgS19DT0xSXywgRkFMU0UsIG1mKTsNCiEg ICAgICAgICBpZiAocnZhbC0+cmF3bW9ub2RhdGEgIT0gTlVMTCkNCiEgCSAg ICBzY2FsZV9pbWFnZV9sYXllcihpbWcsIHJ2YWwsIEtfTU9OT18sIEZBTFNF LCBtZik7DQohICAgICB9DQohICAgICBkZWxldGVfbWYobWYpOw0KISAgICAN CiEgICAgIC8qIFNldCB0aGUgaW1hZ2UgYm91bmRpbmcgYm94ICovDQohICAg ICBjb21wdXRlX2ltYWdlX2Jib3gocnZhbCk7DQohICAgIA0KISAgICAgLyog Q2FsbCB0aGUgaW50ZXJmYWNlIGhvb2sgKi8NCiAgICAgIGlmIChpbWZfaW50 ZXJwX2hvb2spDQohICAgICAgICAgKCppbWZfaW50ZXJwX2hvb2spKGltZiwg cnZhbCwgRkFMU0UpOw0KISAgICANCiEgICAgIC8qIFJldHVybiByZXN1bHQg Ki8NCiEgICAgIHJldHVybiBydmFsOw0KICB9DQogIA0KICB2b2lkDQoqKioq KioqKioqKioqKioNCioqKiA5ODksMTA1MCAqKioqDQogICAgICB9DQogIH0N CiAgDQohIC8qIFRyeSB0byBmaW5kIHRoZSBiZXN0IG9mIG11bHRpcGxlIGlt YWdlcyBmb3IgdGhlIGdpdmVuIGJvdW5kaW5nIGJveC4NCiEgICAgRG9uJ3Qg cmV0dXJuIGFueXRoaW5nIHRoYXQgd29uJ3QgZml0IGluIG1pbiBzcGFjZS4g Ki8NCiAgDQogIEltYWdlICoNCiAgYmVzdF9pbWFnZShJbWFnZUZhbWlseSAq aW1mLCBpbnQgdywgaW50IGgpDQogIHsNCiEgICAgIEltYWdlICppbWcsICpi ZXN0ID0gTlVMTCwgKmZhbGxiYWNrID0gTlVMTCwgKmJlc3RfdGlsZSA9IE5V TEw7DQogIA0KICAgICAgaWYgKGltZiA9PSBOVUxMIHx8IGltZi0+aW1hZ2Vz ID09IE5VTEwpDQohICAgICAgIHJldHVybiBOVUxMOw0KICAgICAgZm9yX2Fs bF9pbWFnZXMoaW1mLCBpbWcpIHsNCiEgICAgIAkvKiBTa2lwIGFsbCBiYXNp YyB0ZXJyYWluIGltYWdlcyBleGNlcHQgcG93ZXIgNCBhbmQgNQ0KISAgICAg CWlmIHdlIGFyZSBsb3cgb24gbWVtb3J5LiAqLw0KICAgICAgCWlmIChwb29y X21lbW9yeQ0KICAgICAgCSAgICAmJiBpbWctPmlzdGVycmFpbg0KICAgICAg CSAgICAmJiBpbWctPncgIT0gMjQNCiAgICAgIAkgICAgJiYgaW1nLT53ICE9 IDQ0KSB7DQogICAgICAJCWNvbnRpbnVlOw0KICAgICAgCX0NCiEgCS8qIEV4 YWN0IG1hdGNoZXMgbmVlZCBubyBmdXJ0aGVyIHNlYXJjaGluZy4gKi8NCiAg CWlmICh3ID09IGltZy0+dyAmJiBoID09IGltZy0+aCAmJiAhaW1nLT5pc3Rp bGUpIHsNCiAgCQlyZXR1cm4gaW1nOw0KICAJfQ0KISAJLyogRmluZCB0aGUg YmVzdCBzaXplIG9mIGltYWdlLiAqLw0KISAJaWYgKGJlc3QgPT0gTlVMTA0K ISAJICAgIHx8IChpbWctPncgPD0gdyAmJiBpbWctPmggPD0gaA0KISAJCSYm IGltZy0+dyA+IGJlc3QtPncgJiYgaW1nLT5oID4gYmVzdC0+aCkpIHsNCiEg CQliZXN0ID0gaW1nOw0KISAJfQ0KISAJLyogRm9yIHRpbGVzLCBwaWNrIG91 dCB0aGUgbGFyZ2VzdCB0aWxlLiAqLw0KISAJaWYgKGltZy0+aXN0aWxlKSB7 DQohIAkgICAgaWYgKGJlc3RfdGlsZSA9PSBOVUxMDQohIAkJfHwgKGltZy0+ dyA+IGJlc3RfdGlsZS0+dyAmJiBpbWctPmggPiBiZXN0X3RpbGUtPmgpKSB7 DQohIAkJYmVzdF90aWxlID0gaW1nOw0KICAJICAgIH0NCiAgCX0NCiAgICAg IH0NCiEgICAgIC8qIElmIHRoZXJlIHdlcmUgYW55IHRpbGVzIGF0IGFsbCBm b3IgdGhpcyBpbWFnZSwgd2UncmUgcHJvYmFibHkNCiEgICAgICAgIGhlcmUg YmVjYXVzZSBpdCdzIGEgdGVycmFpbiBpbWFnZSBmb3Igd2hpY2ggbm8gZXhh Y3QgbWF0Y2hlcw0KISAgICAgICAgd2VyZSBmb3VuZDsgc28gcmV0dXJuIHRo ZSBsYXJnZXN0IHRpbGUgaW5zdGVhZC4gKi8NCiEgICAgIGlmIChiZXN0X3Rp bGUgIT0gTlVMTCkNCiEgICAgICAgcmV0dXJuIGJlc3RfdGlsZTsNCiEgICAg IC8qIElmIHRoZSBiZXN0IGltYWdlIGlzIHRvbyBsYXJnZSBvciB0b28gc21h bGwgKGF0IHRoaXMgcG9pbnQgd2UNCiEgICAgICAgIGtub3cgaXQncyBub3Qg YSB0aWxpbmcgcGF0dGVybiksIHNjYWxlIHRoZSBpbWFnZSBhbmQgcmV0dXJu IHRoYXQuICovDQohICAgICBpZiAoYmVzdC0+dyA+IHcgJiYgYmVzdC0+aCA+ IGgpIHsNCiEgCWJlc3QgPSBhZGRfc2hydW5rZW5faW1hZ2UoaW1mKTsNCiEg CWlmIChiZXN0ICE9IE5VTEwgJiYgYmVzdC0+dyA+IHcgJiYgYmVzdC0+aCA+ IGgpIHsNCiEgCSAgICAgIGJlc3QgPSBhZGRfc2hydW5rZW5faW1hZ2UoaW1m KTsNCiEgCX0NCiEgICAgIH0gZWxzZSBpZiAoYmVzdC0+dyA8PSAodyA+PiAx KSAmJiBiZXN0LT5oIDw9IChoID4+IDEpKSB7DQohIAlmYWxsYmFjayA9IGFk ZF9tYWduaWZpZWRfaW1hZ2UoaW1mKTsNCiEgCWlmIChmYWxsYmFjayAhPSBO VUxMKSB7IA0KISAJCWJlc3QgPSBmYWxsYmFjazsNCiEgICAgIAl9DQohICAg ICB9DQohICAgICByZXR1cm4gYmVzdDsNCiAgfQ0KICANCiAgSW1hZ2UgKg0K LS0tIDEwMjgsMTEwMiAtLS0tDQogICAgICB9DQogIH0NCiAgDQohIC8qIENv bXB1dGUgYSBzY29yZSBkZXNjcmliaW5nIGhvdyBtdWNoIHNjYWxpbmcgb3Ig dGlsaW5nIGEgZ2l2ZW4gaW1hZ2Ugd2lsbA0KISAgICBuZWVkIHRvIG1hdGNo IGEgZ2l2ZW4gc2l6ZS4gKi8NCiEgDQohIHN0YXRpYyBpbnQNCiEgc2l6ZV9t YXRjaF9zY29yZShpbnQgd2EsIGludCBoYSwgaW50IHdiLCBpbnQgaGIpDQoh IHsNCiEgICAgIHJldHVybiAod2EqMTAwKS93YiArICh3YioxMDApL3dhICsg KGhhKjEwMCkvaGIgKyAoaGIqMTAwKS9oYSAtIDQwMDsNCiEgfQ0KISANCiEg LyogVHJ5IHRvIGZpbmQgYW4gaW1hZ2Ugb2YgdGhlIGdpdmVuIHNpemUgZnJv bSB0aGUgZmFtaWx5LCBnZW5lcmF0aW5nIGl0DQohICAgIGJ5IHNjYWxpbmcg aWYgbmVjZXNzYXJ5LiAqLw0KICANCiAgSW1hZ2UgKg0KICBiZXN0X2ltYWdl KEltYWdlRmFtaWx5ICppbWYsIGludCB3LCBpbnQgaCkNCiAgew0KISAgICAg SW1hZ2UgKmltZywgKmJlc3Rfbm9uc3ludGggPSBOVUxMLCAqYmVzdF90aWxl ID0gTlVMTDsNCiEgICAgIGludCBiZXN0X25vbnN5bnRoX3Njb3JlLCBiZXN0 X3RpbGVfc2NvcmUsIHM7DQogIA0KICAgICAgaWYgKGltZiA9PSBOVUxMIHx8 IGltZi0+aW1hZ2VzID09IE5VTEwpDQohICAgICAgICAgcmV0dXJuIE5VTEw7 DQohIA0KICAgICAgZm9yX2FsbF9pbWFnZXMoaW1mLCBpbWcpIHsNCiEgDQoh ICAgICAgICAgLyogU2tpcCBhbGwgYmFzaWMgdGVycmFpbiBpbWFnZXMgZXhj ZXB0IHBvd2VyIDQgYW5kIDUNCiEgCSAgIGlmIHdlIGFyZSBsb3cgb24gbWVt b3J5LiAqLw0KICAgICAgCWlmIChwb29yX21lbW9yeQ0KICAgICAgCSAgICAm JiBpbWctPmlzdGVycmFpbg0KICAgICAgCSAgICAmJiBpbWctPncgIT0gMjQN CiAgICAgIAkgICAgJiYgaW1nLT53ICE9IDQ0KSB7DQogICAgICAJCWNvbnRp bnVlOw0KICAgICAgCX0NCiEgDQohICAgICAgICAgLyogRXhhY3QgbWF0Y2hl cyBuZWVkIG5vIGZ1cnRoZXIgc2VhcmNoaW5nLiAqLw0KICAJaWYgKHcgPT0g aW1nLT53ICYmIGggPT0gaW1nLT5oICYmICFpbWctPmlzdGlsZSkgew0KICAJ CXJldHVybiBpbWc7DQogIAl9DQohIA0KISAgICAgICAgIC8qIEZpbmQgYmVz dCBpbWFnZSB0aGF0IGlzbid0IHN5bnRoZXRpYyBvciB0aWxlIChzY2FsaW5n IGNhbmRpZGF0ZSkgKi8NCiEgICAgICAgICBpZiAoIWltZy0+aXN0aWxlICYm ICFpbWctPnN5bnRoZXRpYykgew0KISAJICAgIHMgPSBzaXplX21hdGNoX3Nj b3JlKHcsIGgsIGltZy0+dywgaW1nLT5oKTsNCiEgCSAgICBpZiAoYmVzdF9u b25zeW50aCA9PSBOVUxMIHx8IHMgPCBiZXN0X25vbnN5bnRoX3Njb3JlKSB7 DQohIAkgICAgICAgIGJlc3Rfbm9uc3ludGggPSBpbWc7DQohIAkgICAgICAg IGJlc3Rfbm9uc3ludGhfc2NvcmUgPSBzOw0KISAJICAgIH0NCiEgCX0NCiEg DQohICAgICAgICAgLyogRmluZCBiZXN0IHRpbGUgKi8NCiEgICAgICAgICBp ZiAoaW1nLT5pc3RpbGUpIHsNCiEgCSAgICBzID0gc2l6ZV9tYXRjaF9zY29y ZSh3LCBoLCBpbWctPncsIGltZy0+aCk7DQohIAkgICAgaWYgKGJlc3RfdGls ZSA9PSBOVUxMIHx8IHMgPCBiZXN0X3RpbGVfc2NvcmUpIHsNCiEgCSAgICAg ICAgYmVzdF90aWxlID0gaW1nOw0KISAJICAgICAgICBiZXN0X3RpbGVfc2Nv cmUgPSBzOw0KICAJICAgIH0NCiAgCX0NCiAgICAgIH0NCiEgDQohICAgICAv KiBJZiB3ZSBoYXZlIGEgdGlsZSwgYW5kIHdlJ3JlIGxvdyBvbiBtZW1vcnks IHdlIGNhbid0IHNjYWxlLCBvcg0KISAgICAgICAgdGhlIGJlc3Qgc2NhbGlu ZyBjYW5kaWRhdGUgaXNuJ3QgYXMgZ29vZCBhcyB0aGUgdGlsZSwgdXNlIHRp bGUuICovDQohICAgICBpZiAoYmVzdF90aWxlICE9IE5VTEwgJiYgKHBvb3Jf bWVtb3J5IHx8IGJlc3Rfbm9uc3ludGggPT0gTlVMTCB8fA0KISAJCQkgICAg ICBiZXN0X3RpbGVfc2NvcmUgPCBiZXN0X25vbnN5bnRoX3Njb3JlKSkNCiEg ICAgICAgICByZXR1cm4gYmVzdF90aWxlOw0KISAgICANCiEgICAgIC8qIE5v dyB3ZSBrbm93IHdlIHdhbnQgdG8gc2NhbGUsIHNvIHRoZXJlIGhhZCBiZXR0 ZXIgZXhpc3QgYSBjYW5kaWRhdGUuDQohICAgICAgICBJZiBub3QsIGxldCB0 aGUgY2FsbGVyIHdvcnJ5IGFib3V0IGl0LiAqLw0KISAgICAgaWYgKGJlc3Rf bm9uc3ludGggPT0gTlVMTCkNCiEgICAgICAgICByZXR1cm4gTlVMTDsNCiEg DQohICAgICAvKiBTY2FsZSB0aGUgY2FuZGlkYXRlLiAqLw0KISAgICAgcmV0 dXJuIGFkZF9zY2FsZWRfaW1hZ2UoaW1mLCBiZXN0X25vbnN5bnRoLCB3LCBo KTsNCiAgfQ0KICANCiAgSW1hZ2UgKg0K --50987268-217631084-1101794741=:28810 Content-Type: TEXT/PLAIN; charset=US-ASCII; name=backtrace Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=backtrace Content-length: 5730 R05VIGdkYiA1LjMNCkNvcHlyaWdodCAyMDAyIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbiwgSW5jLg0KR0RCIGlzIGZyZWUgc29mdHdhcmUsIGNvdmVyZWQg YnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhbmQgeW91IGFy ZQ0Kd2VsY29tZSB0byBjaGFuZ2UgaXQgYW5kL29yIGRpc3RyaWJ1dGUgY29w aWVzIG9mIGl0IHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucy4NClR5cGUgInNo b3cgY29weWluZyIgdG8gc2VlIHRoZSBjb25kaXRpb25zLg0KVGhlcmUgaXMg YWJzb2x1dGVseSBubyB3YXJyYW50eSBmb3IgR0RCLiAgVHlwZSAic2hvdyB3 YXJyYW50eSIgZm9yIGRldGFpbHMuDQpUaGlzIEdEQiB3YXMgY29uZmlndXJl ZCBhcyAiaTM4Ni1zbGFja3dhcmUtbGludXgiLi4uDQooZ2RiKSBydW4NClN0 YXJ0aW5nIHByb2dyYW06IC91c3IvbG9jYWwvYmluL3hjb25xIA0KDQpQcm9n cmFtIHJlY2VpdmVkIHNpZ25hbCBTSUdTRUdWLCBTZWdtZW50YXRpb24gZmF1 bHQuDQoweDQwMTg4MTRjIGluIFRjbF9TZXRSZXN1bHQgKCkgZnJvbSAvdXNy L2xpYi9saWJ0Y2w4LjQuc28NCihnZGIpIGJ0DQojMCAgMHg0MDE4ODE0YyBp biBUY2xfU2V0UmVzdWx0ICgpIGZyb20gL3Vzci9saWIvbGlidGNsOC40LnNv DQojMSAgMHgwODA0Y2I2MyBpbiB0a191X2ltYWdlX25hbWUodm9pZCosIFRj bF9JbnRlcnAqLCBpbnQsIGNoYXIqKikgKA0KICAgIGNsZGF0YT0weDAsIGlu dGVycD0weDgyMGM2NjAsIGFyZ2M9MiwgYXJndj0weDApIGF0IHRrbWFpbi5j Ojg0OQ0KIzIgIDB4NDAxMzJjYmIgaW4gVGNsSW52b2tlU3RyaW5nQ29tbWFu ZCAoKSBmcm9tIC91c3IvbGliL2xpYnRjbDguNC5zbw0KIzMgIDB4NDAxMzNk YmEgaW4gVGNsRXZhbE9ianZJbnRlcm5hbCAoKSBmcm9tIC91c3IvbGliL2xp YnRjbDguNC5zbw0KIzQgIDB4NDAxNTgyNGUgaW4gVGNsRXhlY3V0ZUJ5dGVD b2RlICgpIGZyb20gL3Vzci9saWIvbGlidGNsOC40LnNvDQojNSAgMHg0MDE1 NzkyMCBpbiBUY2xDb21wRXZhbE9iaiAoKSBmcm9tIC91c3IvbGliL2xpYnRj bDguNC5zbw0KIzYgIDB4NDAxODY4ZTQgaW4gVGNsT2JqSW50ZXJwUHJvYyAo KSBmcm9tIC91c3IvbGliL2xpYnRjbDguNC5zbw0KIzcgIDB4NDAxMzNkYmEg aW4gVGNsRXZhbE9ianZJbnRlcm5hbCAoKSBmcm9tIC91c3IvbGliL2xpYnRj bDguNC5zbw0KIzggIDB4NDAxNTgyNGUgaW4gVGNsRXhlY3V0ZUJ5dGVDb2Rl ICgpIGZyb20gL3Vzci9saWIvbGlidGNsOC40LnNvDQojOSAgMHg0MDE1Nzky MCBpbiBUY2xDb21wRXZhbE9iaiAoKSBmcm9tIC91c3IvbGliL2xpYnRjbDgu NC5zbw0KIzEwIDB4NDAxODY4ZTQgaW4gVGNsT2JqSW50ZXJwUHJvYyAoKSBm cm9tIC91c3IvbGliL2xpYnRjbDguNC5zbw0KIzExIDB4NDAxMzNkYmEgaW4g VGNsRXZhbE9ianZJbnRlcm5hbCAoKSBmcm9tIC91c3IvbGliL2xpYnRjbDgu NC5zbw0KIzEyIDB4NDAxMzQ3NDcgaW4gVGNsX0V2YWxFeCAoKSBmcm9tIC91 c3IvbGliL2xpYnRjbDguNC5zbw0KIzEzIDB4NDAxMzRiMTMgaW4gVGNsX0V2 YWwgKCkgZnJvbSAvdXNyL2xpYi9saWJ0Y2w4LjQuc28NCiMxNCAweDQwMTM2 MDlmIGluIFRjbF9HbG9iYWxFdmFsICgpIGZyb20gL3Vzci9saWIvbGlidGNs OC40LnNvDQojMTUgMHgwODA1NTM0MSBpbiBldmFsX3RjbF9jbWQoY2hhcios IC4uLikgKA0KICAgIGZtdD0weDIgPEFkZHJlc3MgMHgyIG91dCBvZiBib3Vu ZHM+KSBhdCB0a21haW4uYzozOTAyDQojMTYgMHgwODA1NTgwYSBpbiBjcmVh dGVfbWFwKCkgKCkgYXQgdGttYWluLmM6NDA1NA0KIzE3IDB4MDgwNTZlMWYg aW4gaW5pdF9kaXNwbGF5KCkgKCkgYXQgdGtpbml0LmM6Mjc4DQojMTggMHgw ODA1NTcxYSBpbiBpbml0X2FsbF9kaXNwbGF5cyAoKSBhdCB0a21haW4uYzo0 MDExDQojMTkgMHgwODA1NjljOCBpbiBsYXVuY2hfZ2FtZSgpICgpIGF0IHRr bWFpbi5jOjQ2NDkNCiMyMCAweDA4MDRkZmFiIGluIHRrX2xhdW5jaF9nYW1l KHZvaWQqLCBUY2xfSW50ZXJwKiwgaW50LCBjaGFyKiopIChjbGRhdGE9MHgw LCANCiAgICBpbnRlcnA9MHg4MjBjNjYwLCBhcmdjPTEsIGFyZ3Y9MHhiZmZm ZGZlMCkgYXQgdGttYWluLmM6MTQwNg0KIzIxIDB4NDAxMzJjYmIgaW4gVGNs SW52b2tlU3RyaW5nQ29tbWFuZCAoKSBmcm9tIC91c3IvbGliL2xpYnRjbDgu NC5zbw0KIzIyIDB4NDAxMzNkYmEgaW4gVGNsRXZhbE9ianZJbnRlcm5hbCAo KSBmcm9tIC91c3IvbGliL2xpYnRjbDguNC5zbw0KIzIzIDB4NDAxNTgyNGUg aW4gVGNsRXhlY3V0ZUJ5dGVDb2RlICgpIGZyb20gL3Vzci9saWIvbGlidGNs OC40LnNvDQojMjQgMHg0MDE1NzkyMCBpbiBUY2xDb21wRXZhbE9iaiAoKSBm cm9tIC91c3IvbGliL2xpYnRjbDguNC5zbw0KIzI1IDB4NDAxODY4ZTQgaW4g VGNsT2JqSW50ZXJwUHJvYyAoKSBmcm9tIC91c3IvbGliL2xpYnRjbDguNC5z bw0KIzI2IDB4NDAxMzNkYmEgaW4gVGNsRXZhbE9ianZJbnRlcm5hbCAoKSBm cm9tIC91c3IvbGliL2xpYnRjbDguNC5zbw0KIzI3IDB4NDAxNTgyNGUgaW4g VGNsRXhlY3V0ZUJ5dGVDb2RlICgpIGZyb20gL3Vzci9saWIvbGlidGNsOC40 LnNvDQojMjggMHg0MDE1NzkyMCBpbiBUY2xDb21wRXZhbE9iaiAoKSBmcm9t IC91c3IvbGliL2xpYnRjbDguNC5zbw0KIzI5IDB4NDAxMzRjYTEgaW4gVGNs X0V2YWxPYmpFeCAoKSBmcm9tIC91c3IvbGliL2xpYnRjbDguNC5zbw0KIzMw IDB4NDAyMTEzOWUgaW4gVGtJbnZva2VCdXR0b24gKCkgZnJvbSAvdXNyL2xp Yi9saWJ0azguNC5zbw0KIzMxIDB4NDAyMTA2NDQgaW4gQnV0dG9uV2lkZ2V0 T2JqQ21kICgpIGZyb20gL3Vzci9saWIvbGlidGs4LjQuc28NCiMzMiAweDQw MTMzZGJhIGluIFRjbEV2YWxPYmp2SW50ZXJuYWwgKCkgZnJvbSAvdXNyL2xp Yi9saWJ0Y2w4LjQuc28NCiMzMyAweDQwMTMzZmJlIGluIFRjbF9FdmFsT2Jq diAoKSBmcm9tIC91c3IvbGliL2xpYnRjbDguNC5zbw0KIzM0IDB4NDAxMzRj NDQgaW4gVGNsX0V2YWxPYmpFeCAoKSBmcm9tIC91c3IvbGliL2xpYnRjbDgu NC5zbw0KIzM1IDB4NDAxODYyNDUgaW4gVGNsX1VwbGV2ZWxPYmpDbWQgKCkg ZnJvbSAvdXNyL2xpYi9saWJ0Y2w4LjQuc28NCiMzNiAweDQwMTMzZGJhIGlu IFRjbEV2YWxPYmp2SW50ZXJuYWwgKCkgZnJvbSAvdXNyL2xpYi9saWJ0Y2w4 LjQuc28NCiMzNyAweDQwMTU4MjRlIGluIFRjbEV4ZWN1dGVCeXRlQ29kZSAo KSBmcm9tIC91c3IvbGliL2xpYnRjbDguNC5zbw0KIzM4IDB4NDAxNTc5MjAg aW4gVGNsQ29tcEV2YWxPYmogKCkgZnJvbSAvdXNyL2xpYi9saWJ0Y2w4LjQu c28NCiMzOSAweDQwMTg2OGU0IGluIFRjbE9iakludGVycFByb2MgKCkgZnJv bSAvdXNyL2xpYi9saWJ0Y2w4LjQuc28NCiM0MCAweDQwMTMzZGJhIGluIFRj bEV2YWxPYmp2SW50ZXJuYWwgKCkgZnJvbSAvdXNyL2xpYi9saWJ0Y2w4LjQu c28NCiM0MSAweDQwMTM0NzQ3IGluIFRjbF9FdmFsRXggKCkgZnJvbSAvdXNy L2xpYi9saWJ0Y2w4LjQuc28NCiM0MiAweDQwMTM0YjEzIGluIFRjbF9FdmFs ICgpIGZyb20gL3Vzci9saWIvbGlidGNsOC40LnNvDQojNDMgMHg0MDEzNjA5 ZiBpbiBUY2xfR2xvYmFsRXZhbCAoKSBmcm9tIC91c3IvbGliL2xpYnRjbDgu NC5zbw0KIzQ0IDB4NDAxY2YwNGEgaW4gVGtfQmluZEV2ZW50ICgpIGZyb20g L3Vzci9saWIvbGlidGs4LjQuc28NCiM0NSAweDQwMWQ0Yzg3IGluIFRrQmlu ZEV2ZW50UHJvYyAoKSBmcm9tIC91c3IvbGliL2xpYnRrOC40LnNvDQojNDYg MHg0MDFkYzI5MyBpbiBUa19IYW5kbGVFdmVudCAoKSBmcm9tIC91c3IvbGli L2xpYnRrOC40LnNvDQojNDcgMHg0MDFkYzZlZCBpbiBXaW5kb3dFdmVudFBy b2MgKCkgZnJvbSAvdXNyL2xpYi9saWJ0azguNC5zbw0KIzQ4IDB4NDAxN2Nj YWEgaW4gVGNsX1NlcnZpY2VFdmVudCAoKSBmcm9tIC91c3IvbGliL2xpYnRj bDguNC5zbw0KIzQ5IDB4NDAxN2NmMWEgaW4gVGNsX0RvT25lRXZlbnQgKCkg ZnJvbSAvdXNyL2xpYi9saWJ0Y2w4LjQuc28NCiM1MCAweDA4MDUwMDA1IGlu IHVpX21haW5sb29wKCkgKCkgYXQgdGttYWluLmM6MjAzMg0KIzUxIDB4MDgw NGFmNzUgaW4gbWFpbiAoYXJnYz0xLCBhcmd2PTB4YmZmZmY4NzQpIGF0IHRr dW5peC5jOjExOA0KIzUyIDB4NDAzN2ViYjQgaW4gX19saWJjX3N0YXJ0X21h aW4gKCkgZnJvbSAvbGliL2xpYmMuc28uNg0KKGdkYikgcXVpdA0KVGhlIHBy b2dyYW0gaXMgcnVubmluZy4gIEV4aXQgYW55d2F5PyAoeSBvciBuKSA= --50987268-217631084-1101794741=:28810--