This archive contains answers to questions sent to Unidata support through mid-2025. Note that the archive is no longer being updated. We provide the archive for reference; many of the answers presented here remain technically correct, even if somewhat outdated. For the most up-to-date information on the use of NSF Unidata software and data services, please consult the Software Documentation first.
>From: Darren Gallant <address@hidden> >Organization: UCAR/JOSS >Keywords: 200110151753.f9FHrZ118806 McIDAS TeraScan HDF AREA Darren, I am in Madison, WI right now, so I can't help out with your HDF to AREA conversion process. It may be very helpful to check out the beginning section(s) of the McIDAS Programming Manual (go to the Unidata McIDAS HomePage; click on documentation (Doc) and then select the application programming manual). The first couple of chapters contain information on programming in the McIDAS environment. Some of the info is on how to build local programs, and linking is part of building. I will be able to look at your program in depth when I get back to Boulder next Monday. Tom >The attached program extracts image data and pertinent parameters from a >HDF satellite image file. I use a precompiled HDf library for >Solaris and the following to compile the code: f77 -O -o HDF2AREA >HDF2AREA.f -L/home/gallant/bin/HDF/current/4.1r3_solaris/lib -lmfhdf -ldf >-ljpeg -lz -lnsl -L/usr/local/lib. > >In order to create an areafile from the HDF image data, I would just place >in HDF2AREA.f the needed lines of code from makearea.pgm. Unfortunately, I >don't know how to compile HDF2AREA with Mcidas function calls. What lines >would I need in my makefile to compile code containing calls to Mcidas >functions? > >Thanks > >Darren > > >Darren R. Gallant UCAR/JOSS >Programmer/Technician Joint OfFice Of Science Support >303-497-2634 P.O. Box 3000 >address@hidden Boulder,CO 80307-30000 > > >---559023410-758783491-1003168409=:1356 >Content-Type: TEXT/PLAIN; charset=US-ASCII; name="HDF2AREA.f" >Content-Transfer-Encoding: BASE64 >Content-ID: <Pine.GSO.4.33.0110151153290.1356@thunder> >Content-Description: >Content-Disposition: attachment; filename="HDF2AREA.f" > >ICAgICAgUFJPR1JBTSBIREYyQVJFQQ0KQyAgICAgUHJvZ3JhbSBpbnB1dHMg >SERGIGFuZCBjcmVhdGVzIGFuIEFSRUEgZmlsZSBmb3IgZWFjaCBjaGFubmVs >DQpDCQ0KQw0KQwkNCkMNCkMqKioqKioqKioqKioqKioqKioqKioqKioqKioq >KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCkMgICAg >ICBzdWJyb3V0aW5lIGhkZjJhcmVhDQpDKioqKioqKioqKioqKioqKioqKioq >KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq >DQogICAgICBJTlRFR0VSIElBUkdDLEFSR0NULExPQyxGSUxDTlQsTEVOR1RI >DQogICAgICBJTlRFR0VSIElOVU5JLE9VVFVOSSxMT0MxLExPQw0KICAgICAg >Y2hhcmFjdGVyIFlZREREKjUsSEhNTVNTKjYNCiAgICAgIGludGVnZXIgc2Rf >aWQsIHNkc19pZCwgY291bnRlciwgY291bnQNCiAgICAgIGludGVnZXIgc2Rf >aW5kZXgNCiAgICAgIGludGVnZXIgc3RhcnQoMiksIGVkZ2VzKDIpLCBzdHJp >ZGUoMikNCiAgICAgIGludGVnZXIgaXN0YXQNCiAgICAgIGludGVnZXIgc2Zz >dGFydCwgc2ZzZWxlY3QNCiAgICAgIGludGVnZXIgc2ZlbmRhY2MsIHNmZW5k >LCBzZnJkYXRhLCBzZnJjZGF0YQ0KICAgICAgaW50ZWdlciBwYXNzX2RhdGUN >CiAgICAgIGludGVnZXIqNCBERk5UX0lOVDE2LCBERkFDQ19SRUFEDQogICAg >ICBpbnRlZ2VyKjQgRElNMSwgRElNMCwgTUFYRElNLCBGQUlMLCBNQVhfVkFS >X0RJTVMNCiAgICAgIHBhcmFtZXRlciAoREZOVF9JTlQxNiA9IDIyLCBNQVhE >SU0gPSA0MDAwMCwgREZBQ0NfUkVBRCA9IDEsDQogICAgICtNQVhfVkFSX0RJ >TVMgPSAzMiwgRkFJTCA9IC0xLCBOVU0gPSA1LCBPVVRVTkkgPSAxMikNCiAg >ICAgIGludGVnZXIgaWJ1ZmZlcihNQVhESU0vNCksIGlkaXIoNjQpDQogICAg >ICBjaGFyYWN0ZXIqMSBjYnVmZmVyKE1BWERJTSkNCiAgICAgIGludGVnZXIq >MiBqYnVmZmVyKE1BWERJTS8yKQ0KICAgICAgQ0hBUkFDVEVSKjI1NiBBUkdW >LElORklMLE9VVEZJTA0KICAgICAgY2hhcmFjdGVyKjY0IHZhcl9uYW1lcyhO >VU0pDQogICAgICBjaGFyYWN0ZXIqMjAgdW5pdHNfYnVmZmVyKE5VTSksIHNh >dGVsbGl0ZSwgc2Vuc29yX25hbWUNCiAgICAgIGludGVnZXIqNCBpbmRleGVz >KE5VTSksIHJhbmtzKE5VTSksIGRpbWVuc2lvbnMoTlVNLDIpDQogICAgICBy >ZWFsKjggY2FsaWIoTlVNKSwgY2FsaWJfZXJyKE5VTSksIG9mZnNldChOVU0p >LCANCiAgICAgK29mZnNldF9lcnIoTlVNKSwgc3RhcnRfdGltZSwgY2VudGVy >X2xpbmUsIGNlbnRlcl9zYW1wDQogICAgICBpbnRlZ2VyIGF0dHJpYnMoTlVN >KSwgdmFyX3R5cGVzKE5VTSkNCiAgICAgIGNoYXJhY3Rlcio4MCBjZXJyb3IN >CiAgICAgIGVxdWl2YWxlbmNlKGlidWZmZXIsamJ1ZmZlcixjYnVmZmVyKQ0K >ICAgICAgSU5VTkkgPSAxMQ0KICAgICAgRklMQ05UID0gMQ0KQyBHZXQgbnVt >YmVyIG9mIGNtZCBsaW5lIGFyZ3MNCiAgICAgIEFSR0NUID0gSUFSR0MoKQ0K >QyBJZiBubyBhcmd1bWVudHMsIGVycm9yOiBjYW4ndCB1c2Ugc3RkaW4vc3Rk >b3V0DQogICAgICBJRiAoQVJHQ1QgLkVRLiAwKSBUSEVODQogICAgICAgICBX >UklURSAoMCwqKSAnIFVzYWdlOiBIREYgPCBIREYgZmlsZXM+Jw0KICAgICAg >ICAgR08gVE8gOTk5OQ0KICAgICAgRU5EIElGDQogICAgICAgIA0KQyBMb29w >IHRvIHJ1biBwcm9ncmFtIG9uY2Ugb24gZWFjaCBmaWxlIG5hbWVkDQpDLi4u >Li4gQW5ub3VuY2UgYmVnaW5uaW5nIG9mIHByb2dyYW0NCkMgICAgICBDQUxM >IFNERVNUKCdNQUtFQVJFQSAtIEJlZ2luJywwKQ0KICAgICAgRE8gV0hJTEUg >KEZJTENOVCAuTEUuIEFSR0NUKQ0KQyBJbnRpYWxpemUgYXJyYXlzDQogICAg >ICAgICBqID0gMQ0KICAgICAgICAgZG8gd2hpbGUoaiAubGUuIGludChNQVhE >SU0vNCkpDQogICAgICAgICAgICBpYnVmZmVyKGopID0gMA0KICAgICAgICAg >ICAgaiA9IGogKyAxDQogICAgICAgICBlbmRkbw0KDQogICAgICAgICBqID0g >MQ0KICAgICAgICAgZG8gd2hpbGUoaiAubGUuIGludChNQVhESU0vMikpDQog >ICAgICAgICAgICBqYnVmZmVyKGopID0gMA0KICAgICAgICAgICAgaiA9IGog >KyAxDQogICAgICAgICBlbmRkbw0KICAgICAgICAgDQogICAgICAgICBqID0g >MQ0KICAgICAgICAgZG8gd2hpbGUoaiAubGUuIE1BWERJTSkNCiAgICAgICAg >ICAgICBjYnVmZmVyKGopID0gJyAnDQogICAgICAgICAgICBqID0gaiArIDEN >CiAgICAgICAgIGVuZGRvDQoNCiAgICAgICAgIGo9MQ0KICAgICAgICAgZG8g >d2hpbGUoaiAubGUuIE5VTSkNCiAgICAgICAgICAgIHZhcl9uYW1lcyhqKSA9 >ICcgJw0KICAgICAgICAgICAgdW5pdHNfYnVmZmVyKGopID0gJyAnDQogICAg >ICAgICAgICBpbmRleGVzKGopID0gMA0KICAgICAgICAgICAgcmFua3Moaikg >PSAwDQogICAgICAgICAgICBkaW1lbnNpb25zKGosMSkgPSAwDQogICAgICAg >ICAgICBkaW1lbnNpb25zKGosMikgPSAwDQogICAgICAgICAgICBhdHRyaWJz >KGopID0gMA0KICAgICAgICAgICAgdmFyX3R5cGVzKGopID0gMA0KICAgICAg >ICAgICAgY2FsaWIoaikgPSAwLg0KICAgICAgICAgICAgY2FsaWJfZXJyKGop >ID0gMC4NCiAgICAgICAgICAgIG9mZnNldChqKSA9IDAuDQogICAgICAgICAg >ICBvZmZzZXRfZXJyKGopID0gMC4NCiAgICAgICAgICAgIGogPSBqICsgMQ0K >ICAgICAgICAgZW5kZG8NCg0KDQpDIEdldCBIREYgZmlsZW5hbWUgZnJvbSBj >b21tYW5kIGxpbmUNCkMgICAgIA0KICAgICAgICAgQ0FMTCBHRVRBUkcoRklM >Q05ULEFSR1YpDQogICAgICAgICBJTkZJTCA9IEFSR1YNCiAgICAgICAgIGNv >dW50ZXIgPSAwDQpDIEhERiBmaWxlbmFtZSBpcyBpbiBmb3JtIG9mIGZpbGUu >aGRmIG9yIGZpbGUNCkMgR3JhYiBub21pbmFsIHN0YXJ0IGRhdGUgYW5kIHRp >bWUgZnJvbSBIREYgZmlsZW5hbWUuDQogICAgICAgICBMT0MxID0gSU5ERVgo >SU5GSUwsJy4nKQ0KICAgICAgICAgTEVOR1RIID0gTEVOKElORklMKQ0KICAg >ICAgICAgTE9DMiA9IElOREVYKElORklMKExPQzErMTpMRU5HVEgpLCcuJykN >CiAgICAgICAgIGlmKExFTihJTkZJTChMT0MxKzE6TE9DMStMT0MyLTEpKSAu >ZXEuIDcpIHRoZW4NCiAgICAgICAgICAgIFlZREREID0gSU5GSUwoTE9DMSsz >OkxPQzErTE9DMi0xKQ0KICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgWVlE >REQgPSBJTkZJTChMT0MxKzE6TE9DMStMT0MyLTEpDQogICAgICAgICBlbmQg >aWYNCiAgICAgICAgIExPQzE9TE9DMStMT0MyKzENCiAgICAgICAgIExPQzIg >PSBJTkRFWChJTkZJTChMT0MxOkxFTkdUSCksJy4nKQ0KICAgICAgICAgSEhN >TVNTID0gSU5GSUwoTE9DMTpMT0MxK0xPQzItMikgLy8gJzAwJw0KICAgICAg >ICAgd3JpdGUoKiwqKSdZWURERD0nLFlZRERELCcgSEhNTVNTPScsSEhNTVNT >DQpDIA0KQyBPcGVuIEZpbGVzDQpDICAgICBPcGVuIHRoZSBmaWxlIGFuZCBp >bml0aWF0ZSB0aGUgU0QgaW50ZXJmYWNlLg0KQyAgICAgSnVzdCBuZWVkIHRv >IG9wZW4gSERGIGludGVyZmFjZSBvbmUgYXQgYmVnaW5uaW5nIG9mIHByb2dy >YW0NCkMgICAgIA0KICAgICAgICAgc2RfaWQgPSBzZnN0YXJ0KElORklMLCBE >RkFDQ19SRUFEKQ0KICAgICAgICAgaWYgKHNkX2lkIC5uZS4gRkFJTCkgdGhl >bg0KICAgICAgICAgICAgcHJpbnQqDQogICAgICAgICAgICB3cml0ZSgqLDE1 >KUlORklMDQogMTUgICAgICAgICBmb3JtYXQoJy4uLiAnLEE0MCwnIG9wZW5l >ZCBmb3IgUkVBRCBhY2Nlc3MuJykNCiAgICAgICAgIGVuZCBpZg0KDQpDIEV4 >dHJhY3RpbmcgR2xvYmFsIEF0dHJpYnV0ZXMgZnJvbSBIREYgZmlsZQ0KICAg >ICAgICAgY2FsbCBnbG9iYWxfYXR0cmliIChzZF9pZCxzYXRlbGxpdGUsc2Vu >c29yX25hbWUsDQogICAgICtwYXNzX2RhdGUsc3RhcnRfdGltZSxjZW50ZXJf >bGluZSxjZW50ZXJfc2FtcCkNCkMgICAgICAgICB3cml0ZSgqLCopJ3NhdGVs >bGl0ZTogJywgc2F0ZWxsaXRlDQpDICAgICAgICAgd3JpdGUoKiwqKSdzZW5z >b3JfbmFtZTogJyxzZW5zb3JfbmFtZSANCkMgICAgICAgICB3cml0ZSgqLCop >J3Bhc3NfZGF0ZSAnLHBhc3NfZGF0ZQ0KQyAgICAgICAgIHdyaXRlKCosKikn >c3RhcnRfdGltZSAnLHN0YXJ0X3RpbWUNCkMgICAgICAgICB3cml0ZSgqLCop >J2NlbnRlciBsaW5lICcsY2VudGVyX2xpbmUNCkMgICAgICAgICB3cml0ZSgq >LCopJ2NlbnRlciBzYW1wbGUgJyxjZW50ZXJfc2FtcA0KQyBFbmQgb2YgR2xv >YmFsIEF0dHJpYnV0ZSBFeHRyYWN0aW9uDQoNCiAgICAgICAgIGNhbGwgZ2V0 >X3Zhcl9pbmZvIChzZF9pZCwgdmFyX25hbWVzLCBpbmRleGVzLCByYW5rcywN >CiAgICAgK2F0dHJpYnMsIHZhcl90eXBlcywgZGltZW5zaW9ucywgY291bnRl >cikNCiAgICAgICAgIGNhbGwgZ2V0X2NhbGliX2luZm8gKHNkX2lkLCBpbmRl >eGVzLCB2YXJfdHlwZXMsIGNhbGliLCANCiAgICAgK2NhbGliX2Vyciwgb2Zm >c2V0LCBvZmZzZXRfZXJyLCBjb3VudGVyKQ0KICAgICAgICAgY2FsbCBnZXRf >dW5pdHNfaW5mbyhzZF9pZCwgaW5kZXhlcywgdW5pdHNfYnVmZmVyLCANCiAg >ICAgK2NvdW50ZXIpDQoNCiAgICAgICAgIGRvIDEyIGsgPSAxLGNvdW50ZXIN >CkMgICAgICAgICAgICB3cml0ZSgqLCopJ3Zhcl9uYW1lczonLHZhcl9uYW1l >cyhrKQ0KQyAgICAgICAgICAgIHdyaXRlKCosKiknY2FsaWI6JyxjYWxpYihr >KQ0KQyAgICAgICAgICAgIHdyaXRlKCosKiknY2FsaWJfZXJyOicsY2FsaWJf >ZXJyKGspDQpDICAgICAgICAgICAgd3JpdGUoKiwqKSdvZmZzZXQ6JyxvZmZz >ZXQoaykNCkMgICAgICAgICAgICB3cml0ZSgqLCopJ29mZnNldF9lcnI6Jyxv >ZmZzZXRfZXJyKGspDQpDICAgICAgICAgICAgd3JpdGUoKiwqKSd1bml0czon >LHVuaXRzX2J1ZmZlcihrKQ0KIDEyICAgICAgY29udGludWUNCg0KICAgICAg >ICAgDQoNCg0KICAgICAgICAgZG8gMjAgayA9IDEsY291bnRlcg0KDQpDICAg >ICBEZWZpbmUgdGhlIGxvY2F0aW9uLCBwYXR0ZXJuLCBhbmQgc2l6ZSBvZiB0 >aGUgZGF0YSBzZXQNCkMgICAgIHRoYXQgd2lsbCBiZSB3cml0dGVuIHRvLg0K >ICAgICAgICAgICAgRElNMCA9IGRpbWVuc2lvbnMoaywyKQ0KICAgICAgICAg >ICAgRElNMSA9IGRpbWVuc2lvbnMoaywxKQ0KICAgICAgICAgICAgc3RhcnQo >MSkgPSAwDQogICAgICAgICAgICBzdGFydCgyKSA9IDANCiAgICAgICAgICAg >IGVkZ2VzKDEpID0gRElNMQ0KICAgICAgICAgICAgZWRnZXMoMikgPSAxDQpD >ICAgICAgICAgICAgZWRnZXMoMikgPSBESU0wDQogICAgICAgICAgICBzdHJp >ZGUoMSkgPSAxDQogICAgICAgICAgICBzdHJpZGUoMikgPSAxDQpDICoqKiBh >c3N1bWVzIHRoYXQgdGhlIGZpcnN0IHBlcmlvZCBpbiB0aGUgZmlsZW5hbWUg >aXMgYWxzbyB0aGUgbGFzdCEhIQ0KICAgICAgICAgICAgTE9DID0gSU5ERVgo >SU5GSUwsJy5oZGYnKQ0KICAgICAgICAgICAgSUYgKExPQyAuRVEuIDApIFRI >RU4NCiAgICAgICAgICAgICAgIExPQyA9IElOREVYKEFSR1YsJyAnKQ0KICAg >ICAgICAgICAgICAgTE9DID0gTE9DIC0gMQ0KICAgICAgICAgICAgICAgT1VU >RklMID0gSU5GSUwoMTpMT0MpIC8vICcudmFyX25hbWVzKGspJw0KICAgICAg >ICAgICAgRUxTRQ0KICAgICAgICAgICAgICAgT1VURklMID0gSU5GSUwoMTpM >T0MpIC8vIHZhcl9uYW1lcyhrKQ0KICAgICAgICAgICAgRU5EIElGDQogICAg >ICAgICAgICB3cml0ZSgqLDU1KU9VVEZJTA0KIDU1ICAgICAgICAgZm9ybWF0 >KCcuLi4gJyxBNDAsJyBvcGVuZWQgZm9yIFdSSVRFLicpDQogICAgICAgICAg >ICBPUEVOIChGSUxFPU9VVEZJTCwgVU5JVD1PVVRVTkksIFNUQVRVUz0nTkVX >JywgRVJSPTk5OTkpDQoNCiAgICAgICAgICAgIHNkX2luZGV4ID0gaW5kZXhl >cyhrKQ0KICAgICAgICAgICAgc2RzX2lkID0gc2ZzZWxlY3QgKHNkX2lkLCBz >ZF9pbmRleCkgDQogICAgICAgICAgICBpZiAoc2RzX2lkIC5lcS4gRkFJTCkg >dGhlbg0KICAgICAgICAgICAgICAgaXN0YXQ9aGVwcm50KDApDQogICAgICAg >ICAgICBlbmQgaWYNCiAgICAgICAgICAgIGlmKHZhcl90eXBlcyhrKSAuZXEu >IDIyKSB0aGVuDQogICAgICAgICAgICAgICBkbyAzMCBqaj0xLERJTTANCiAg >ICAgICAgICAgICAgICAgIGlzdGF0PXNmcmRhdGEoc2RzX2lkLCBzdGFydCwg >c3RyaWRlLCBlZGdlcywgaWJ1ZmZlcikNCiAgICAgICAgICAgICAgICAgIHN0 >YXJ0KDIpID0gc3RhcnQoMikgKyAxDQogICAgICAgICAgICAgICAgICBkbyAz >NSBpaT0xLERJTTENCiAgICAgICAgICAgICAgICAgICAgIGNvdW50ID0gMipp >aQ0KDQogICAgICAgICAgICAgICAgICAgICBjYnVmZmVyKGNvdW50LTEpID0g >Y2hhcihpYnVmZmVyKGlpKS8yNTYpDQoNCiAgICAgICAgICAgICAgICAgICAg >IGNidWZmZXIoY291bnQpID0gY2hhcihpYnVmZmVyKGlpKSoyNTYpDQogMzUg >ICAgICAgICAgICAgICBjb250aW51ZQ0KDQogICAgICAgICAgICAgICAgICAg >d3JpdGUoT1VUVU5JLDYwKShjYnVmZmVyKGtrKSxraz0xLDIqRElNMSkNCiAz >MCAgICAgICAgICAgIGNvbnRpbnVlICAgDQogICAgICAgICAgICBlbHNlIGlm >KHZhcl90eXBlcyhrKS5lcS4yMS5vci52YXJfdHlwZXMoaykuZXEuMjApIHRo >ZW4NCiAgICAgICAgICAgICAgIGRvIDQwIGpqID0gMSxESU0wDQogICAgICAg >ICAgICAgICAgICBpc3RhdD1zZnJjZGF0YShzZHNfaWQsIHN0YXJ0LCBzdHJp >ZGUsIGVkZ2VzLCBjYnVmZmVyKQ0KICAgICAgICAgICAgICAgICAgc3RhcnQo >MikgPSBzdGFydCgyKSArIDENCiAgICAgICAgICAgICAgICAgICB3cml0ZShP >VVRVTkksNjUpKGNidWZmZXIoaWkpLGlpPTEsRElNMSkNCiA0MCAgICAgICAg >ICAgIGNvbnRpbnVlDQogICAgICAgICAgICBlbmQgaWYNCg0KICAgICAgICAg >ICAgaWYgKGlzdGF0IC5lcS4gRkFJTCkgdGhlbg0KICAgICAgICAgICAgICAg >aXN0YXQ9aGVwcm50KDApDQogICAgICAgICAgICBlbmQgaWYNCiAgICAgICAg >ICAgIHdyaXRlKCosKiknRWRnZXM6Jw0KICAgICAgICAgICAgd3JpdGUoKiw0 >NSkoZWRnZXMoaiksaj0xLDIpDQogNDUgICAgICAgICBmb3JtYXQoMXgsaTYp >DQogICAgICAgICAgICB3cml0ZSgqLDUwKURJTTAsRElNMQ0KIDUwICAgICAg >ICAgZm9ybWF0KCdESU0wID0gJyxpNiwxeCwnRElNMSA9ICcsaTYpDQogNjAg >ICAgICAgICBmb3JtYXQoPDIqRElNMT4oQSksJCkNCiA2NSAgICAgICAgIGZv >cm1hdCg8RElNMT4oQSksJCkNCiA3MCAgICAgICAgIGZvcm1hdCgxeCw8RElN >MT4oaTQpKQ0KQyAgICAgVGVybWluYXRlIGFjY2VzcyB0byB0aGUgYXJyYXku >DQogICAgICAgICAgICBpc3RhdCA9IHNmZW5kYWNjKHNkc19pZCkNCiAgICAg >ICAgICAgIGlmIChpc3RhdCAuZXEuIEZBSUwpIHRoZW4NCiAgICAgICAgICAg >ICAgIGlzdGF0PWhlcHJudCgwKQ0KICAgICAgICAgICAgZW5kIGlmDQoNCg0K >IDIwICAgICAgY29udGludWUNCg0KQyAgICAgVGVybWluYXRlIGFjY2VzcyB0 >byB0aGUgU0QgaW50ZXJmYWNlIGFuZCBjbG9zZSB0aGUgZmlsZS4NCiAgICAg >ICAgIGlzdGF0ID0gc2ZlbmQoc2RfaWQpDQogICAgICAgICBpZiAoaXN0YXQg >LmVxLiBGQUlMKSB0aGVuDQogICAgICAgICAgICBpc3RhdD1oZXBybnQoMCkN >CiAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIHByaW50KiwnLi4uIGZpbGUg >Y2xvc2VkJw0KICAgICAgICAgICAgcHJpbnQqDQogICAgICAgICBlbmQgaWYN >Cg0KDQoNCkMgQ2xvc2UgaW4vb3V0IGZpbGVzDQpDCUNMT1NFIChVTklUPUlO >VU5JKQ0KCUNMT1NFIChVTklUPU9VVFVOSSkNCg0KQyBFbmQgb2YgbWFpbiBs >b29wIGZvciBjbWQgbGluZSBhcmdzDQoJRklMQ05UID0gRklMQ05UICsgMQ0K >ICAgICAgICBFTkQgRE8NCjk5OTkgICAgQ09OVElOVUUNCglTVE9QDQoJRU5E >DQoNCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq >KioqKioqKioqKioqKioqKioqKioqKioqKioqDQogICAgICBzdWJyb3V0aW5l >IGdsb2JhbF9hdHRyaWIoc2RfaWQsIHNhdGVsbGl0ZSwgc2Vuc29yX25hbWUs >DQogICAgICtwYXNzX2RhdGUsIHN0YXJ0X3RpbWUsIGNlbnRlcl9saW5lLCBj >ZW50ZXJfc2FtcCkNCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq >KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogICAgICBp >bnRlZ2VyIHNkX2lkLCBhdHRyX2luZGV4LCBzZmZhdHRyLCBzZnJjYXR0LCBz >ZnJuYXR0DQogICAgICBpbnRlZ2VyIGlzdGF0LCBwYXNzX2RhdGUNCiAgICAg >IGNoYXJhY3RlcioyMCBzYXRlbGxpdGUsIHNlbnNvcl9uYW1lDQogICAgICBy >ZWFsKjggc3RhcnRfdGltZSwgY2VudGVyX2xpbmUsIGNlbnRlcl9zYW1wDQpD >IEV4dHJhY3RpbmcgR2xvYmFsIEF0dHJpYnV0ZXMgZnJvbSBIREYgZmlsZQ0K >DQpDICAgICBGaW5kIHRoZSBmaWxlIGF0dHJpYnV0ZSBuYW1lZCAnc2F0ZWxs >aXRlJy4gDQogICAgICBhdHRyX2luZGV4ID0gc2ZmYXR0cihzZF9pZCwgJ3Nh >dGVsbGl0ZScpDQoNCkMgICAgIFJlYWQgdGhlIGF0dHJpYnV0ZSBkYXRhLiAN >CiAgICAgIGlzdGF0ID0gc2ZyY2F0dChzZF9pZCwgYXR0cl9pbmRleCwgc2F0 >ZWxsaXRlKQ0KICAgICAgDQoNCkMgICAgIEZpbmQgdGhlIGZpbGUgYXR0cmli >dXRlIG5hbWVkICdzZW5zb3IgbmFtZScNCg0KICAgICAgYXR0cl9pbmRleCA9 >IHNmZmF0dHIoc2RfaWQsICdzZW5zb3JfbmFtZScpDQoNCkMgICAgIFJlYWQg >dGhlIGF0dHJpYnV0ZSBkYXRhLiANCiAgICAgIGlzdGF0ID0gc2ZyY2F0dChz >ZF9pZCwgYXR0cl9pbmRleCwgc2Vuc29yX25hbWUpDQogICAgICANCg0KQyAg >ICAgRmluZCB0aGUgZmlsZSBhdHRyaWJ1dGUgbmFtZWQgJ3Bhc3NfZGF0ZScN >CiAgICAgIA0KDQpDICAgICBSZWFkIHRoZSBhdHRyaWJ1dGUgZGF0YS4NCg0K >ICAgICAgaXN0YXQgPSBzZnJuYXR0KHNkX2lkLCBhdHRyX2luZGV4LCBwYXNz >X2RhdGUpDQogICAgICANCkMgICAgIEZpbmQgdGhlIGZpbGUgYXR0cmlidXRl >IG5hbWVkICdzdGFydCB0aW1lJw0KICAgICAgYXR0cl9pbmRleCA9IHNmZmF0 >dHIoc2RfaWQsICdzdGFydF90aW1lJykNCg0KQyAgICAgUmVhZCB0aGUgYXR0 >cmlidXRlIGRhdGEuDQoNCiAgICAgIGlzdGF0ID0gc2ZybmF0dChzZF9pZCwg >YXR0cl9pbmRleCwgc3RhcnRfdGltZSkNCiAgICAgIA0KDQpDICAgICBGaW5k >IHRoZSBmaWxlIGF0dHJpYnV0ZSBuYW1lZCAnY2VudGVyIGxpbmUnDQogICAg >ICBhdHRyX2luZGV4ID0gc2ZmYXR0cihzZF9pZCwgJ2NlbnRlcl9saW5lJykN >Cg0KQyAgICAgUmVhZCB0aGUgYXR0cmlidXRlIGRhdGEuDQoNCiAgICAgIGlz >dGF0ID0gc2ZybmF0dChzZF9pZCwgYXR0cl9pbmRleCwgY2VudGVyX2xpbmUp >DQogICAgICANCkMgICAgIEZpbmQgdGhlIGZpbGUgYXR0cmlidXRlIG5hbWVk >ICdjZW50ZXIgc2FtcGxlJw0KICAgICAgYXR0cl9pbmRleCA9IHNmZmF0dHIo >c2RfaWQsICdjZW50ZXJfc2FtcCcpDQpDICAgICBSZWFkIHRoZSBhdHRyaWJ1 >dGUgZGF0YS4NCiAgICAgIGlzdGF0ID0gc2ZybmF0dChzZF9pZCwgYXR0cl9p >bmRleCwgY2VudGVyX3NhbXApDQogICAgICANCkMgRW5kIG9mIEdsb2JhbCBB >dHRyaWJ1dGUgRXh0cmFjdGlvbg0KICAgICAgcmV0dXJuDQogICAgICBlbmQN >CioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq >KioqKioqKioqKioqKioqKioqKioqKioqDQogICAgICBzdWJyb3V0aW5lIGdl >dF92YXJfaW5mbyAoc2RfaWQsIHZhcl9uYW1lcywgaW5kZXhlcywgcmFua3Ms >DQogICAgICthdHRyaWJzLCB2YXJfdHlwZXMsIGRpbWVuc2lvbnMsIGNvdW50 >ZXIpDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq >KioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgICAgcGFyYW1ldGVy >KE1BWF9WQVJfRElNID0gMzIsIE5VTSA9IDUpDQogICAgICBpbnRlZ2VyIGlz >dGF0LCBzZF9pZCwgc2RzX2lkLCBzZF9pbmRleCwgY291bnRlcg0KICAgICAg >aW50ZWdlciBzZmZpbmZvLCBzZnNlbGVjdCwgc2ZnaW5mbywgc2ZlbmRhY2MN >CiAgICAgIGludGVnZXIgbl9kYXRhc2V0cywgbl9maWxlX2F0dHJzLCByYW5r >DQogICAgICBpbnRlZ2VyIGF0dHJpYnV0ZXMsIG51bV90eXBlLCBhdHRyaWJz >KCopLCB2YXJfdHlwZXMoKikNCiAgICAgIGludGVnZXIqNCBpbmRleGVzKCop >LCByYW5rcygqKSwgZGltZW5zaW9ucyhOVU0sMiksDQogICAgICtkaW1fc2l6 >ZXMoMikNCiAgICAgIGNoYXJhY3RlciBuYW1lICooNjQpDQogICAgICBjaGFy >YWN0ZXIqNjQgdmFyX25hbWVzICgqKQ0KQyAgICAgRGV0ZXJtaW5lIHRoZSBj >b250ZW50cyBvZiB0aGUgZmlsZS4NCiAgICAgIGlzdGF0ID0gc2ZmaW5mbyhz >ZF9pZCwgbl9kYXRhc2V0cywgbl9maWxlX2F0dHJzKQ0KQyAgICAgQWNjZXNz >IGFuZCBwcmludCB0aGUgbmFtZXMgb2YgZXZlcnkgZGF0YSBzZXQgaW4gdGhl >IGZpbGUuDQogICAgICBjb3VudGVyID0gMA0KICAgICAgDQogICAgICBkbyAx >MCBzZF9pbmRleCA9IDAsIG5fZGF0YXNldHMgLSAxDQogICAgICAgICBzZHNf >aWQgPSBzZnNlbGVjdChzZF9pZCwgc2RfaW5kZXgpDQogICAgICAgICBpc3Rh >dCA9IHNmZ2luZm8oc2RzX2lkLCBuYW1lLCByYW5rLCBkaW1fc2l6ZXMsIG51 >bV90eXBlLCANCiAgICAgKyAgICAgICAgICAgICAgICAgYXR0cmlidXRlcykN >CiAgICAgICAgIGlmKChuYW1lIC5lcS4gJ2d2YXJfY2gxJyAub3IuIG5hbWUg >LmVxLiAnZ3Zhcl9jaDInIC5vci4NCiAgICAgK25hbWUgLmVxLiAnZ3Zhcl9j >aDMnIC5vci4gbmFtZSAuZXEuICdndmFyX2NoNCcgLm9yLiBuYW1lIC5lcS4N >CiAgICAgKydndmFyX2NoNScpIC5hbmQuIHJhbmsgLmVxLiAyLikgdGhlbg0K >ICAgICAgICAgICAgY291bnRlciA9IGNvdW50ZXIgKyAxDQogICAgICAgICAg >ICB2YXJfbmFtZXMoY291bnRlcikgPSBuYW1lDQogICAgICAgICAgICBpbmRl >eGVzKGNvdW50ZXIpID0gc2RfaW5kZXgNCiAgICAgICAgICAgIHJhbmtzKGNv >dW50ZXIpID0gcmFuaw0KICAgICAgICAgICAgYXR0cmlicyhjb3VudGVyKSA9 >IGF0dHJpYnV0ZXMNCiAgICAgICAgICAgIHZhcl90eXBlcyhjb3VudGVyKSA9 >IG51bV90eXBlDQogICAgICAgICAgICBpID0gMQ0KICAgICAgICAgICAgZG8g >d2hpbGUgKGkgLmxlLiByYW5rcyhjb3VudGVyKSkNCiAgICAgICAgICAgICAg >IGRpbWVuc2lvbnMoY291bnRlcixpKSA9IGRpbV9zaXplcyhpKQ0KICAgICAg >ICAgICAgICAgaSA9IGkgKyAxDQogICAgICAgICAgICBlbmQgZG8NCiAgICAg >ICAgIGVuZCBpZg0KICAgICAgICAgaXN0YXQgPSBzZmVuZGFjYyhzZHNfaWQp >ICAgICAgDQogMTAgICBjb250aW51ZQ0KICAgICAgcmV0dXJuIA0KICAgICAg >ZW5kDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq >KioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgICAgc3Vicm91dGlu >ZSBnZXRfY2FsaWJfaW5mbyAoc2RfaWQsIGluZGV4ZXMsIHZhcl90eXBlcywg >Y2FsaWIsIA0KICAgICArY2FsaWJfZXJyLCBvZmZzZXQsIG9mZnNldF9lcnIs >IGNvdW50ZXIpDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq >KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgICAgDQog >ICAgICBpbnRlZ2VyIHNkX2lkLCBzZHNfaWQsIHNkX2luZGV4LCBpc3RhdCwg >c2ZzZWxlY3QsIHNmZ2NhbCwgDQogICAgICtjb3VudGVyLCB2YXJfdHlwZXMo >KiksIHNmZW5kYWNjDQogICAgICBpbnRlZ2VyKjQgaW5kZXhlcygqKSwgRkFJ >TA0KICAgICAgcGFyYW1ldGVyKEZBSUwgPSAtMSkNCiAgICAgIHJlYWwqOCBj >YWxpYigqKSwgY2FsaWJfZXJyKCopLCBvZmZzZXQoKiksIG9mZnNldF9lcnIo >KikNCiAgICAgIGRvIDEwIGsgPSAxLGNvdW50ZXINCiAgICAgICAgIHNkX2lu >ZGV4ID0gaW5kZXhlcyhrKQ0KICAgICAgICAgDQogICAgICAgICBzZHNfaWQg >PSBzZnNlbGVjdCAoc2RfaWQsIHNkX2luZGV4KQ0KICAgICAgICAgaWYgKHNk >c19pZCAuZXEuIEZBSUwpIHRoZW4NCiAgICAgICAgICAgIGlzdGF0PWhlcHJu >dCgwKQ0KICAgICAgICAgZW5kIGlmDQogICAgICAgICBpc3RhdCA9IHNmZ2Nh >bChzZHNfaWQsIGNhbGliKGspLCBjYWxpYl9lcnIoayksIG9mZnNldChrKSwg >DQogICAgICtvZmZzZXRfZXJyKGspLCB2YXJfdHlwZXMoaykpDQogICAgICAg >IGlmKGlzdGF0IC5uZS4gRkFJTCkgdGhlbg0KICAgICAgICAgICAgd3JpdGUo >KiwqKSdjYWxpYnJhdGlvbiA9ICcsY2FsaWIoaykNCiAgICAgICAgICAgIHdy >aXRlKCosKiknY2FsaWJyYXRpb24gZXJyb3IgPSAnLGNhbGliX2VycihrKQ0K >ICAgICAgICAgICAgd3JpdGUoKiwqKSdvZmZzZXQgPSAnLG9mZnNldChrKQ0K >ICAgICAgICAgICAgd3JpdGUoKiwqKSdvZmZzZXQgZXJyb3IgPSAnLG9mZnNl >dF9lcnIoaykNCiAgICAgICAgZW5kIGlmDQogICAgICAgICBpc3RhdCA9IHNm >ZW5kYWNjKHNkc19pZCkNCiAxMCAgIGNvbnRpbnVlICAgICAgDQogICAgICBy >ZXR1cm4NCiAgICAgIGVuZA0KKioqKioqKioqKioqKioqKioqKioqKioqKioq >KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0K >ICAgICAgc3Vicm91dGluZSBnZXRfdW5pdHNfaW5mbyhzZF9pZCwgaW5kZXhl >cywgdW5pdHNfYnVmZmVyLCANCiAgICAgK2NvdW50ZXIpDQoqKioqKioqKioq >KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq >KioqKioqKioqKioqKioqDQogICAgICBpbnRlZ2VyIHNkX2lkLCBzZHNfaWQs >IGF0dHJfaW5kZXgsIHNkX2luZGV4LCBjb3VudGVyLCANCiAgICAgK3Nmc2Vs >ZWN0LCBzZmZhdHRyLCBzZnJuYXR0LCBzZmVuZGFjYywgaXN0YXQNCiAgICAg >IGludGVnZXIqNCBpbmRleGVzKCopLCBGQUlMDQogICAgICBwYXJhbWV0ZXIo >RkFJTCA9IC0xKQ0KICAgICAgY2hhcmFjdGVyKjIwIHVuaXRzX2J1ZmZlcigq >KQ0KICAgICAgZG8gMTAgayA9IDEsY291bnRlcg0KICAgICAgICAgc2RfaW5k >ZXggPSBpbmRleGVzKGspDQogICAgICAgICBzZHNfaWQgPSBzZnNlbGVjdCAo >c2RfaWQsIHNkX2luZGV4KQ0KICAgICAgICAgYXR0cl9pbmRleCA9IHNmZmF0 >dHIoc2RzX2lkLCAndW5pdHMnKQ0KICAgICAgICAgaWYgKHNkc19pZCAuZXEu >IEZBSUwpIHRoZW4NCiAgICAgICAgICAgIGlzdGF0PWhlcHJudCgwKQ0KICAg >ICAgICAgZW5kIGlmDQogICAgICAgICBpc3RhdCA9IHNmcm5hdHQoc2RzX2lk >LCBhdHRyX2luZGV4LCB1bml0c19idWZmZXIoaykpDQogICAgICAgICBpZihp >c3RhdCAubmUuIEZBSUwpIHRoZW4NCiAgICAgICAgICAgIHdyaXRlKCosKikn >dW5pdHM6Jyx1bml0c19idWZmZXIoaykNCiAgICAgICAgIGVuZCBpZg0KDQpD >ICAgICBUZXJtaW5hdGUgYWNjZXNzIHRvIHRoZSBhcnJheSANCiAgICAgICAg >IGlzdGF0ID0gc2ZlbmRhY2Moc2RzX2lkKSAgICAgICAgICAgIA0KDQogMTAg >ICBjb250aW51ZQ0KICAgICAgcmV0dXJuDQogICAgICBlbmQNCioqKioqKioq >KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq >KioqKioqKioqKioqKioqKioqKg0KDQoNCg0KDQo= >---559023410-758783491-1003168409=:1356-- >