[mapserver-users] Drawing features dynamically
Steve Lime
steve.lime@dnr.state.mn.us
Tue, 19 Mar 2002 14:09:52 -0600
This is a MIME message. If you are reading this text, you may want to
consider changing to a mail reader or gateway that understands how to
properly handle MIME multipart messages.
--=_7E23D826.D5B4DC5A
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
Content-Disposition: inline
Here's the original quake mapper example in perl. It takes point data
from a USGS
ftp server and drops those points over the top of a TIF background
image. It's been
ported to the 3.5 version of MapScript. I didn't include the underlying
TIF image
because it's a tad big. Let me know if you'd like it...
Steve
Stephen Lime
Data & Applications Manager
Minnesota DNR
500 Lafayette Road
St. Paul, MN 55155
651-297-2937
>>> Dan Barron <dbarron@ddive.com> 03/19/02 12:02PM >>>
Hi Ricardo,
Below is a function that will take the results from a query to mySQL
and
draw the points on a the specified layer. I have tested this with up
to
10K points on a W2K machine with mySQL & Apache and it works fine.
Hope this helps.
Dan Barron
Destination Software LLC
San Diego, CA, USA
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// drawPoints - take the database query results and draw the points on
the
map layer
//
// $results - results of the database query
// $layerName - name of the layer to draw on image
//
// return True or False
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function drawPoints( $results, $layerName ) {
GLOBAL $map;
GLOBAL $image;
$layer = $map->getLayerByName( $layerName );
// Loop through result of point query and:
while ($line = mysql_fetch_array($results, MYSQL_ASSOC)) {
$pt = ms_newPointObj();
$pt->setXY( $line["longitude"], $line["latitude"] );
$pt->draw($map, $layer, $image, 0, "TEST");
$layer->set('status', MS_ON);
$layer->draw($image);
}
return True;
}
At 03:57 PM 3/18/2002 -0300, Ricardo Scachetti Pereira wrote:
> Does anyone know how to draw features (points, lines and
polygons)
>dynamically over a base map using Perl or PHP mapscript?
> I would like to draw data points coming from disparate (remote)
data
>sources, which are providing data as a XML documents. Each document
can
>contain a large number of features (thousands). I would like to avoid
>writing individual shapefiles for each dataset, just to display them.
I
>would like to know if mapserver has any built in mechanism to display
>dynamic features, besides the one described on the CGI documentation
>(which is designed to handle small amounts of data).
> I've been exploring the pointObj and its methods (especially the
>draw() method), because it seems to be developed to implement the
kind
>of feature I'm looking for. However, I couldn't write anything that
does
>what I want. Mostly, I get segmentation fault errors. Does anyone
know
>any sample scripts that draw points using this object?
>
>Ricardo
>
>
>--
>Ricardo Scachetti Pereira
>Gerente de Pesquisa
>Centro de Referência em Informação Ambiental - CRIA
>http://www.cria.org.br/
--=_7E23D826.D5B4DC5A
Content-Type: application/octet-stream; name="quakes.map"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="quakes.map"
TUFQDQogIFNUQVRVUyBPTg0KICBFWFRFTlQgLTE4MCAtOTAgMTgwIDkwDQogIFNJWkUgNTYxIDI4
MQ0KICBVTklUUyBERA0KICBJTUFHRUNPTE9SIDI1NSAwIDANCg0KICBMQVlFUg0KICAgIE5BTUUg
cmVsaWVmDQogICAgVFlQRSBSQVNURVINCiAgICBEQVRBIHJlbGllZi50aWYNCiAgICBTVEFUVVMg
REVGQVVMVA0KICBFTkQNCg0KICBTWU1CT0wNCiAgICBUWVBFIEVMTElQU0UNCiAgICBOQU1FICJj
aXJjbGUiDQogICAgUE9JTlRTIDEgMSBFTkQNCiAgICBGSUxMRUQNCiAgRU5EDQoNCiAgTEFZRVIN
CiAgICBOQU1FIHF1YWtlcw0KICAgIFRZUEUgUE9JTlQNCiAgICBTVEFUVVMgT0ZGDQogICAgU1lN
Qk9MU0NBTEUJNTAwMDAwMDANCiAgICBDTEFTUw0KICAgICAgTkFNRSAiUmVjZW50IGVhcnRoIHF1
YWtlcy4iDQogICAgICBTWU1CT0wgY2lyY2xlDQogICAgICBTSVpFIDE1DQogICAgICBPVVRMSU5F
Q09MT1IgMCAwIDAJDQogICAgICBDT0xPUiAyNTUgMCAwDQogICAgICBMQUJFTA0KICAgICAgICBP
VVRMSU5FQ09MT1IgMCAwIDANCiAgICAgICAgQ09MT1IgMjU1IDI1NSAyNTUNCiAgICAgICAgU0la
RSBUSU5ZDQoJUE9TSVRJT04gQVVUTw0KCVBBUlRJQUxTIEZBTFNFDQogICAgICBFTkQNCiAgICBF
TkQNCiAgICBURU1QTEFURSAiZHVtbXkiDQogIEVORA0KDQogIExBWUVSDQogICAgTkFNRSB0aW1l
c3RhbXANCiAgICBUWVBFIEFOTk9UQVRJT04NCiAgICBTVEFUVVMgT0ZGDQogICAgVFJBTlNGT1JN
IEZBTFNFDQogICAgQ0xBU1MNCiAgICAgIFRFWFQgJ1RoaXMgaXMgd2hlcmUgdGhlIHRpbWVzdGFt
cCBnb2VzLicNCiAgICAgIExBQkVMDQogICAgICAgIENPTE9SIDAgMCAwDQogICAgICAgIE9VVExJ
TkVDT0xPUiAyMjUgMjI1IDIyNQ0KICAgICAgICBTSVpFIE1FRElVTQ0KICAgICAgICBQT1NJVElP
TiBDUg0KCUZPUkNFIE9ODQogICAgICBFTkQgICAgIA0KICAgIEVORA0KICAgIEZFQVRVUkUNCiAg
ICAgIFBPSU5UUyA1IDI3MCBFTkQgDQogICAgRU5EDQogIEVORA0KRU5EDQo=
--=_7E23D826.D5B4DC5A
Content-Type: application/octet-stream; name="mapquakes.pl"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="mapquakes.pl"
IyEvdXNyL2Jpbi9wZXJsDQoNCnVzZSBDR0kgcXcoOnN0YW5kYXJkIDpodG1sIGVzY2FwZSk7DQp1
c2UgTFdQOjpTaW1wbGU7DQp1c2UgbWFwc2NyaXB0Ow0KDQojDQojIGRlZmF1bHRzLCBtYWtlIGFu
eSBuZWNlc3NhcnkgY2hhbmdlcyBoZXJlLi4uDQojDQokcXVha2VfbWFwID0gJy9ob21lL3NkbGlt
ZS9tYXBxdWFrZXMvcXVha2VzLm1hcCc7DQokcXVha2Vfc291cmNlID0gJ2Z0cDovL2dodGZ0cC5j
ci51c2dzLmdvdi9wdWIvcXVha2UnOw0KDQpAcXVha2VzID0gJyc7DQokcXVha2VfZGF0YSA9ICcn
Ow0KJHF1YWtlX3RpbWVzdGFtcCA9ICcnOw0KDQokaW1hZ2VfcGF0aCA9ICcvdXNyL2xvY2FsL2Fw
YWNoZS9odGRvY3MvdG1wLyc7DQokaW1hZ2VfdmlydHVhbF9wYXRoID0gJy90bXAvJzsNCiRpbWFn
ZV9pZCA9ICQkIC4gdGltZSgpIC4gIi5naWYiOw0KJG1hcCA9ICcnOw0KDQokem9vbV9kaXJlY3Rp
b24gPSAwOyANCiR6b29tX3NpemUgPSAyOw0KDQpzdWIgZ2V0X3F1YWtlcyB7ICAgIA0KICAgICRx
dWFrZV9kYXRhID0gZ2V0ICRxdWFrZV9zb3VyY2Ugb3IgZGllICdnZXQgZmFpbGVkJzsNCg0KICAg
IG15ICRpID0gMDsNCiAgICBteSAkaXNfcXVha2UgPSAwOw0KDQogICAgZm9yZWFjaCAoc3BsaXQo
L14vLCAkcXVha2VfZGF0YSkpIHsgICAgDQoJJHF1YWtlX3RpbWVzdGFtcCA9ICRfIGlmIC9eVXBk
YXRlZCBhcyBvZi87IA0KCQ0KCWlmKCRpc19xdWFrZSkgew0KCSAgICAkcXVha2VzWyRpXXtsYXR9
ID0gc3Vic3RyKCRfLCAxOCwgNyk7DQoJICAgICRxdWFrZXNbJGlde2xvbn0gPSBzdWJzdHIoJF8s
IDI2LCA3KTsNCgkgICAgJHF1YWtlc1skaV17bWFnbml0dWRlfSA9IHN1YnN0cigkXywgNDAsIDMp
Ow0KCSAgICANCgkgICAgaWYoJHF1YWtlc1skaV17bG9ufSA9fiAvRSQvKSB7DQoJCSRxdWFrZXNb
JGlde2xvbn0gPX4gcy9FLy87DQoJICAgIH0gZWxzZSB7DQoJCSRxdWFrZXNbJGlde2xvbn0gPX4g
cy9XLy87DQoJCSRxdWFrZXNbJGlde2xvbn0gKj0gLTE7DQoJICAgIH0NCgkgICAgDQoJICAgIGlm
KCRxdWFrZXNbJGlde2xhdH0gPX4gL04kLykgew0KCQkkcXVha2VzWyRpXXtsYXR9ID1+IHMvTi8v
Ow0KCSAgICB9IGVsc2Ugew0KCQkkcXVha2VzWyRpXXtsYXR9ID1+IHMvUy8vOw0KCQkkcXVha2Vz
WyRpXXtsYXR9ICo9IC0xOw0KCSAgICB9DQoNCgkgICAgJGkrKzsNCgl9DQoNCgkkaXNfcXVha2Ug
PSAxIGlmIC9eeXkvOw0KICAgIH0NCg0KICAgIHJldHVybjsNCn0NCg0Kc3ViIHNldF9leHRlbnQo
KSB7DQogICAgbXkgJHpvb20sIEBpbWdleHQ7DQogICAgbXkgJHgsICR5Ow0KICAgIG15ICRjZWxs
c2l6ZXgsICRjZWxsc2l6ZXk7ICANCg0KICAgIGlmKCRjZ2ktPnBhcmFtKCdpbWdleHQnKSkgeyAj
IGlmIGFuIGludGVyYWN0aXZlIGludGVyZmFjZSB0aGVuIGNhbGN1bGF0ZSBhIG5ldyBleHRlbnQN
CglAaW1nZXh0ID0gc3BsaXQoJyAnLCAkY2dpLT5wYXJhbSgnaW1nZXh0JykpOw0KCSR4ID0gJGNn
aS0+cGFyYW0oJ2ltZy54Jyk7DQoJJHkgPSAkY2dpLT5wYXJhbSgnaW1nLnknKTsNCgkkem9vbV9z
aXplID0gJGNnaS0+cGFyYW0oJ3pvb21zaXplJyk7DQoJJHpvb21fZGlyZWN0aW9uID0gJGNnaS0+
cGFyYW0oJ3pvb21kaXInKTsNCg0KCWlmKCR6b29tX2RpcmVjdGlvbiA9PSAwKSB7ICMgcGFuDQoJ
ICAgICR6b29tID0gMTsNCgl9IGVsc2UgeyAjIGluIG9yIG91dA0KCSAgICAkem9vbSA9ICR6b29t
X3NpemUqJHpvb21fZGlyZWN0aW9uOw0KCSAgICAkem9vbSA9IDEuMC9hYnMoJHpvb20pIGlmICR6
b29tIDwgMDsNCgl9DQoNCgkkY3ggPSAoJGltZ2V4dFsyXS0kaW1nZXh0WzBdKS8oJG1hcC0+e3dp
ZHRofSk7ICMgY2FsY3VsYXRlIGNlbGxzaXplIGluIHggYW5kIHkNCgkkY3kgPSAoJGltZ2V4dFsz
XS0kaW1nZXh0WzFdKS8oJG1hcC0+e2hlaWdodH0pOw0KDQoJJHggPSAkaW1nZXh0WzBdICsgJGN4
KiR4OyAjIGNoYW5nZSB4LHkgZnJvbSBpbWFnZSB0byBtYXAgY29vcmRpbmF0ZXMsIG9mZnNldCBm
cm9tIFVMIGNvcm5lciBvZiBwcmV2aW91cyBpbWFnZQ0KCSR5ID0gJGltZ2V4dFszXSAtICRjeSok
eTsNCg0KCSRtYXAtPntleHRlbnR9LT57bWlueH0gPSAkeCAtIC41KigoJGltZ2V4dFsyXSAtICRp
bWdleHRbMF0pLyR6b29tKTsgIyBjYWxjdWxhdGUgbmV3IGV4dGVudA0KCSRtYXAtPntleHRlbnR9
LT57bWlueX0gPSAkeSAtIC41KigoJGltZ2V4dFszXSAtICRpbWdleHRbMV0pLyR6b29tKTsNCgkk
bWFwLT57ZXh0ZW50fS0+e21heHh9ID0gJHggKyAuNSooKCRpbWdleHRbMl0gLSAkaW1nZXh0WzBd
KS8kem9vbSk7DQoJJG1hcC0+e2V4dGVudH0tPnttYXh5fSA9ICR5ICsgLjUqKCgkaW1nZXh0WzNd
IC0gJGltZ2V4dFsxXSkvJHpvb20pOw0KICAgfQ0KfQ0KDQpzdWIgcmVuZGVyX3F1YWtlcyB7DQog
ICAgZGllICRtYXBzY3JpcHQ6Om1zX2Vycm9yLT57bWVzc2FnZX0gdW5sZXNzICRtYXAgPSBuZXcg
bWFwT2JqKCRxdWFrZV9tYXApOw0KICAgIA0KICAgICZzZXRfZXh0ZW50KCk7DQoNCiAgICBteSAk
aW1nID0gJG1hcC0+cHJlcGFyZUltYWdlKCk7DQoNCiAgICBteSAkcG9pbnQgPSBuZXcgcG9pbnRP
YmooKTsNCiAgICANCiAgICBteSAkbGF5ZXIgPSAkbWFwLT5nZXRMYXllckJ5TmFtZSgncmVsaWVm
Jyk7DQogICAgJGxheWVyLT5kcmF3KCRtYXAsICRpbWcpOyAjIGRyYXcgYmFzZW1hcA0KDQogICAg
JGxheWVyID0gJG1hcC0+Z2V0TGF5ZXJCeU5hbWUoJ3F1YWtlcycpOw0KICAgIG15ICRjbGFzcyA9
ICRsYXllci0+Z2V0Q2xhc3MoMCk7DQogICAgbXkgJGkgPSAxOyAjIHF1YWtlIGNvdW50ZXINCiAg
ICBmb3JlYWNoIG15ICRxIChAcXVha2VzKSB7DQoJJGNsYXNzLT57c2l6ZX0gPSBpbnQoJHEtPntt
YWduaXR1ZGV9KjIpOw0KCSRjbGFzcy0+e21heHNpemV9ID0gJGNsYXNzLT57bWluc2l6ZX0gPSAk
Y2xhc3MtPntzaXplfTsgIyBkb24ndCB3YW50IHRvIHNjYWxlDQoNCgkkcG9pbnQtPnt4fSA9ICRx
LT57bG9ufTsNCgkkcG9pbnQtPnt5fSA9ICRxLT57bGF0fTsNCgkkcG9pbnQtPmRyYXcoJG1hcCwg
JGxheWVyLCAkaW1nLCB1bmRlZiwgIiRpIik7DQoJJGkrKzsNCiAgICB9DQoNCiAgICAjJGxheWVy
ID0gJG1hcC0+Z2V0TGF5ZXJCeU5hbWUoJ3RpbWVzdGFtcCcpOyAjIGFkZCB0aW1lc3RhbXANCiAg
ICAjJGxheWVyLT57c3RhdHVzfSA9IDE7ICMgdHVybiB0aGUgbGF5ZXIgb24NCiAgICAjJGNsYXNz
ID0gJGxheWVyLT5nZXRDbGFzcygwKTsNCiAgICAjJGNsYXNzLT5zZXRUZXh0KCRxdWFrZV90aW1l
c3RhbXApOw0KICAgICMkbGF5ZXItPmRyYXcoJG1hcCwgJGltZyk7DQogICAgDQogICAgJG1hcC0+
ZHJhd0xhYmVsQ2FjaGUoJGltZyk7DQogICAgbWFwc2NyaXB0Ojptc1NhdmVJbWFnZSgkaW1nLCAk
aW1hZ2VfcGF0aCAuICRpbWFnZV9pZCwgJG1hcC0+e2ltYWdldHlwZX0sICRtYXAtPnt0cmFuc3Bh
cmVudH0sICRtYXAtPntpbnRlcmxhY2V9LCAkbWFwLT57aW1hZ2VxdWFsaXR5fSk7DQoNCiAgICBy
ZXR1cm47DQp9DQoNCiMgaGVyZSBpcyB0aGUgbWFpbiBwcm9ncmFtDQokY2dpID0gbmV3IENHSTsN
Cg0KJmdldF9xdWFrZXMoKTsNCiZyZW5kZXJfcXVha2VzKCk7DQoNCiMgbm93IHRoZSBodG1sDQoN
CnByaW50IGhlYWRlcigpOw0KcHJpbnQgc3RhcnRfaHRtbCgtdGl0bGU9PidNYXBTZXJ2ZXIgVGVz
dCBTdWl0ZSAtIEVhcnRocXVha2UgTWFwcGVyJywgLWJnY29sb3I9PiIjZmZmZmZmIik7DQoNCnBy
aW50ICI8IS0tICIgLm1hcHNjcmlwdDo6bXNHZXRWZXJzaW9uKCkuICIgLS0+IjsNCnByaW50ICI8
IS0tICIgLiRtYXAtPntzY2FsZX0uICIgLS0+IjsNCg0KcHJpbnQgIjxjZW50ZXI+PHRhYmxlIHdp
ZHRoPVwiNjAwXCI+PHRyPjx0ZD4iOw0KDQpwcmludCAiPGZvbnQgc2l6ZT1cIisyXCIgZmFjZT1c
ImFyaWFsLGhlbHZldGljYVwiPjxiPk1hcFNjcmlwdCAtIEVhcnRocXVha2UgTWFwcGVyPC9iPjwv
Zm9udD48cD4iOw0KDQpwcmludCAiVGhpcyBpcyBhIHNpbXBsZSBvZiBleGFtcGxlIG9mIHVzaW5n
IE1hcFNjcmlwdC4gTmVhciByZWFsLXRpbWUgZWFydGhxdWFrZSBkYXRhIGlzIHJldHJpZXZlZCAi
Ow0KcHJpbnQgImZyb20gdGhlIFVTR1Mgd2ViIHNlcnZlcnMuIFRoZSByZXN1bHRpbmcgaW5mb3Jt
YXRpb24gaXMgcGFyc2VkIHVzaW5nIHBlcmwgYW5kIGVhY2ggIjsNCnByaW50ICJxdWFrZSBpcyBw
bG90dGVkIG9uIHRvcCBvZiBhIGJhc2VtYXAuIFRoZSBzaXplIG9mIHRoZSBtYXJrZXIgaW5kaWNh
dGVzIHF1YWtlIG1hZ25pdHVkZS4gIjsNCnByaW50ICJNYW55IG90aGVyIHBvc3NpYmxlIGVuaGFu
Y2VtZW50cy4gIElmIHRoZSBpbnRlcmZhY2Ugc2VlbXMgYSBiaXQgc2xvdyBpdCdzIGJlY2F1c2Ug
dGhlICI7DQpwcmludCAiVVNHUyBzZXJ2ZXJzIGNhbiBiZSBkaWZmaWN1bHQgdG8gcmVhY2gtIHRo
ZSBwZXJpbHMgb2YgcmVtb3RlIGRhdGEuIEhlcmUncyB0aGUgIjsNCnByaW50ICI8YSBocmVmPVwi
L21hcHNlcnZlcl9kZW1vcy90ZXN0cy9wZXJsL3F1YWtlcy9tYXBxdWFrZXMucGxcIj5zb3VyY2U8
L2E+IGNvZGUuPHA+IjsNCg0KcHJpbnQgIjxmb3JtIG5hbWU9XCJtYXBxdWFrZXNcIiBhY3Rpb249
XCIvY2dpLWJpbi9tYXBxdWFrZXMucGxcIiBtZXRob2Q9XCJnZXRcIj4iOw0KcHJpbnQgIjxjZW50
ZXI+IjsNCnByaW50ICI8aW5wdXQgYm9yZGVyPVwiMFwiIHR5cGU9XCJpbWFnZVwiIG5hbWU9XCJp
bWdcIiBzcmM9XCIiLiAkaW1hZ2VfdmlydHVhbF9wYXRoIC4gJGltYWdlX2lkIC4iXCI+PGJyPiI7
DQpwcmludCAiPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiaW1nZXh0XCIgdmFsdWU9XCIi
IC4gam9pbignICcsICRtYXAtPntleHRlbnR9LT57bWlueH0sJG1hcC0+e2V4dGVudH0tPnttaW55
fSwkbWFwLT57ZXh0ZW50fS0+e21heHh9LCRtYXAtPntleHRlbnR9LT57bWF4eX0pIC4iXCI+IjsN
Cg0KaWYoJHpvb21fZGlyZWN0aW9uID09IDApIHsNCiAgICBwcmludCAiPGlucHV0IHR5cGU9XCJy
YWRpb1wiIG5hbWU9XCJ6b29tZGlyXCIgdmFsdWU9XCIxXCI+IHpvb20gaW4gJm5ic3A7Jm5ic3A7
IjsNCiAgICBwcmludCAiPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJ6b29tZGlyXCIgdmFs
dWU9XCIwXCIgY2hlY2tlZD4gcGFuICZuYnNwOyZuYnNwOyI7DQogICAgcHJpbnQgIjxpbnB1dCB0
eXBlPVwicmFkaW9cIiBuYW1lPVwiem9vbWRpclwiIHZhbHVlPVwiLTFcIj4gem9vbSBvdXQgJm5i
c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IjsNCn0gZWxzZSB7DQogICAgaWYoJHpvb21fZGlyZWN0aW9u
ID09IC0xKSB7DQoJcHJpbnQgIjxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwiem9vbWRpclwi
IHZhbHVlPVwiMVwiPiB6b29tIGluICZuYnNwOyZuYnNwOyI7DQoJcHJpbnQgIjxpbnB1dCB0eXBl
PVwicmFkaW9cIiBuYW1lPVwiem9vbWRpclwiIHZhbHVlPVwiMFwiPiBwYW4gJm5ic3A7Jm5ic3A7
IjsNCglwcmludCAiPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJ6b29tZGlyXCIgdmFsdWU9
XCItMVwiIGNoZWNrZWQ+IHpvb20gb3V0ICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyI7DQogICAg
fSBlbHNlIHsNCglwcmludCAiPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJ6b29tZGlyXCIg
dmFsdWU9XCIxXCIgY2hlY2tlZD4gem9vbSBpbiAmbmJzcDsmbmJzcDsiOw0KCXByaW50ICI8aW5w
dXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cInpvb21kaXJcIiB2YWx1ZT1cIjBcIj4gcGFuICZuYnNw
OyZuYnNwOyI7DQoJcHJpbnQgIjxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwiem9vbWRpclwi
IHZhbHVlPVwiLTFcIj4gem9vbSBvdXQgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IjsNCiAgICB9
DQp9DQoNCnByaW50ICJ6b29tIHNpemUgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgc2l6ZT1cIjJcIiBu
YW1lPVwiem9vbXNpemVcIiB2YWx1ZT1cIiR6b29tX3NpemVcIj4iOw0KDQpwcmludCAiPC9jZW50
ZXI+IjsNCnByaW50ICI8L2Zvcm0+IjsNCg0KcHJpbnQgIjxwPjxmb250IGZhY2U9XCJhcmlhbCxo
ZWx2ZXRpY2FcIj48Yj5IZXJlJ3Mgc29tZSBvZiB0aGUgb3V0cHV0IGZyb20gdGhlIFVTR1M6PC9i
PjwvZm9udD48cD4iOw0KcHJpbnQgIjxwPjxwcmU+IjsNCg0KJHNob3cgPSAwOw0KJG51bWJlciA9
IDA7DQpmb3JlYWNoIChzcGxpdCgvXi8sICRxdWFrZV9kYXRhKSkgew0KICAgICRzaG93ID0gMSBp
ZiAvVXBkYXRlZC87ICAgIA0KICAgDQogICAgcHJpbnRmICI8Yj4lMmQ8L2I+OiAiLCAkbnVtYmVy
IGlmICRzaG93IGFuZCAkbnVtYmVyOw0KICAgIHByaW50ICIgICAgIi4gJF8gaWYgJHNob3cgYW5k
ICEkbnVtYmVyOw0KICAgIHByaW50ICRfIGlmICRzaG93IGFuZCAkbnVtYmVyOw0KICAgICRudW1i
ZXIrKyBpZiAkc2hvdyBhbmQgJG51bWJlcjsNCg0KICAgICRudW1iZXIgPSAxIGlmIC9eeXkvOw0K
fQ0KDQpwcmludCAiPC9wcmU+IjsNCg0KcHJpbnQgIjwvdGQ+PC90cj48L3RhYmxlPiI7DQoNCnBy
aW50IGVuZF9odG1sKCk7DQpleGl0KDApOw0K
--=_7E23D826.D5B4DC5A--