[Mapserver-users] OGC-compliant WMS-server deliveringdynamiclayers with MS?

Debbie Pagurek pagurekd at agr.gc.ca
Tue Sep 30 11:22:18 EDT 2003


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.

--=_114F5AA0.E786E6D8
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

Hi all,

as per some suggestions from Daniel Morissette, I have made a change to
my script so that it doesn't do a redirect to result in an image,
instead, the script outputs an image directly using PHP readfile
function.

I have also made changes to the script so that it is upgraded to
mapserver 4.0 and php_mapscript_40.so.

See the GETMAP section in the attached script.

By the way, Daniel and Tom, I have a new context document at
http://wms1.agr.gc.ca/context_40.xml which points to my new
script(testscript_40.php), and this works in CWC2 now!

Thank for your help, guys.

Debbie Pagurek


>>> "Debbie Pagurek" <pagurekd at agr.gc.ca> 09/17/03 03:36PM >>>

Hi Tom,
there isn't an API/class for OGC specs that I know of but I'm sure
someone out there could make one - good project.

I simply made a 'process' function that went through the name/value
pairs of the OGC compliant URL to extract what I needed to create the
mapfile and produce the desired image.  The script also has a section
to
respond to the 'request' parameter - either GetMap, GetCapabilities,
or
GetFeatureInfo.

I'm willing to share code if you want it - just let me know and give
me
a chance to clean it up a little.

Debbie


>>> <Tom.Kralidis at CCRS.NRCan.gc.ca> 09/17/03 03:17PM >>>

Debbie,

Thanks for the info.  This is something that I've been interested in
for
some time, that is providing WMS for real-time data (earthquakes,
sensor
readings, etc.) which is not necesarily available through the mapserv
CGI
WMS interface.

Does PHP/Mapscript provide an API/class for OGC specifications?

Thanks

..Tom

=================================
Tom Kralidis
Systems Scientist
Canada Centre for Remote Sensing
Tel: +01-613-947-1828
http://www.cgdi.ca/ 
=================================

> -----Original Message-----
> From: Debbie Pagurek [mailto:pagurekd at agr.gc.ca] 
> Sent: Wednesday, September 17, 2003 1:44 PM
> To: mapserver-users at lists.gis.umn.edu;
ter-haseborg at sf-datentechnik.de 
> Subject: Re: [Mapserver-users] OGC-compliant WMS-server delivering
> dynamic layers with MS?
> 
> 
> It is definitely possible to create a WMS service that can access
> lat/long fields from a database.  We are using PHP/Mapscript 
> to do this.
>  The php script looks at the name/value pairs in the request 
> and returns
> an image.
> 
> For example, in the example below, we are passing the name of a
given
> taxon as the Layer name (Cyanocitta cristata).  The php script then
> creates a mapfile on the fly, retrieves the Cyanocitta cristata
points
> from the database, adds the lat/long coordinates as feature 
> (POINTS) to
> the map, creates an image in the format specified in the url
request,

> and then returns the image
>   $theheader="Location: http://thehost".$image_url;
>     Header($theheader);
> 
> http://wms1.agr.gc.ca/mapdata/itis/testscript.php?VERSION=1.1.
> 0&REQUEST=GetMap&Layers=Cyanocitta%20cristata&SRS=EPSG:42304&B
> BOX=-2750560,-936638,3583870,4673120&WIDTH=339&HEIGHT=300&FORM
> AT=image/png
> 
> The one problem we have had with this application is the
> GetCapabilities.  We have over 100,000 taxa available for mapping,
but
> we don't want to generate such a large getcapabilities document that
> lists the each taxon as a layer.  So instead we have a 'dummy'
> getcapabilities document that is returned from
> http://wms1.agr.gc.ca/mapdata/itis/testscript.php?VERSION=1.0.
> 0&REQUEST=GetCapabilities
>  This document provides instructions on how to formulate the getmap
> request e.g. Layers=Abudefduf or Layers=Cyanocitta cristata.
> 
> Some of the WMS viewers that are available out there on the internet
> seem to automatically go to the getCapabilities request, even if you
> enter a getmap request.  Because of that, there has been some 
> difficulty
> using our WMS in some online mapping applications.  That being said,
> however, it is very easy to use our getmap requests in Web Map
Context
> documents that can combine the point distribution maps on top of
other
> layers.  These web map context documents can be that can be 
> loaded into
> applications that handle those types of documents..
> 
> Good luck with your work!
> Debbie Pagurek
> 
> 
> >>> "Frieso ter Haseborg" <ter-haseborg at sf-datentechnik.de> 09/17/03
> 11:56AM >>>
> Hi,
> 
> I'm searching for possibilities to use MS for building an
> OGC-compliant
> WMS-service which creates and serves dynamic layers from data out of
> RDBMS. These RDBMS do NOT have any spatial-extensions it's just the
> "x,y-coordinate & label-data"-thing. 
> 
> So what I want to do: retrieve the coordinates from my databases and
> create one or more dynamic layers. I did some experiments with
> PHP/MapScript, no major problems so far, that seems to be the easier
> part.
> 
> The problem comes here: I don't want to create these layers in any
> client-app, I want to have these layers served by the mapserver,
since
> I
> have to incorporate other servers e.g. ArcIMS which have to use and
> process this layers through OGC-requests. Any ideas?
> 
> Are there any possibilities to create dynamic layers from RDBMS e.g.
> Sybase ASA, MS SQL Server, Oracle without spatial-extensions I
> overlooked, besides doing this in PHP/MapScript?
> 
> Are there any hooks or entry-points in the mapserv-cgi to process
> customized-operations like creating the mentioned dynamic layers?
> 
> Any comment and hint would be appreciated!
> 
> TIA,
>  
> Frieso ter Haseborg
> - Software Development - 
>  
> --
> 
> -------------------------------------------------- 
> S&F Datentechnik GmbH&Co.KG 
> Reimersstr. 41b 
> 26789 Leer, Germany
> 
> _______________________________________________
> Mapserver-users mailing list
> Mapserver-users at lists.gis.umn.edu 
> http://lists.gis.umn.edu/mailman/listinfo/mapserver-users 
> _______________________________________________
> Mapserver-users mailing list
> Mapserver-users at lists.gis.umn.edu 
> http://lists.gis.umn.edu/mailman/listinfo/mapserver-users 
> 
_______________________________________________
Mapserver-users mailing list
Mapserver-users at lists.gis.umn.edu 
http://lists.gis.umn.edu/mailman/listinfo/mapserver-users

--=_114F5AA0.E786E6D8
Content-Type: application/octet-stream; name="scriptname.php"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="scriptname.php"

PD9waHAKLy9tYXBzZXJ2XzQwDQpkbCAoJ3BocF9tYXBzY3JpcHRfNDAuc28nKTsNCgoKLy9BdXRo
b3I6IERlYmJpZSBQYWd1cmVrIGFuZCBEZXJlayBNdW5ybywgQWdyaWN1bHR1cmUgYW5kIEFncmkt
Rm9vZCBDYW5hZGEKCi8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KLyogRnVuY3Rpb24gdG8gcmV0cmlldmUg
cG9pbnRzIGZyb20gWE1MIGFuZCBjcmVhdGUgYSAndHJhY2tpbmdsYXllcicgICAgICAqLwovKiBp
biBNYXBzZXJ2ZXIgYnkgYWRkaW5nIGZlYXR1cmVzIHRvIGEgZHVtbXkgbGF5ZXIgdGhhdCBpcyBs
aXN0ZWQgaW4gdGhlICovCi8qIG1hcGZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLyogKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwpm
dW5jdGlvbiB4bWwybWFwKCkKewoKLy90aGlzIGlzIHRoZSBmdW5jdGlvbiB3aGVyZSBJIGFkZGVk
IHBvaW50cyB0byB0aGUgbWFwIAoKLy9pbiB0aGlzIGNhc2UsIHRoZSBwb2ludCBkYXRhIGNhbWUg
dmlhIGFuIFhNTCBzdHJlYW0uICBUaGUgWE1MIHdhcyBwYXJzZWQgYW5kIHRoZSBwb2ludCBsYXQv
bG9uZyAKLy9jb29yZGluYXRlcyB3ZXJlIHBsYWNlZCBpbnRvIGFycmF5cy4gIAovL1RoZSBzb3Vy
Y2Ugb2YgeW91ciBwb2ludCBkYXRhIG1pZ2h0IGJlIGZyb20gWE1MLCBhIGRhdGFiYXNlIGNvbm5l
Y3Rpb24sIG9yIGEgc2hhcGVmaWxlIC0gcHV0IHlvdXIgb3duIGNvZGUgaGVyZQoKZ2xvYmFsICRt
YXBfZmlsZTsKZ2xvYmFsICRtYXA7Cmdsb2JhbCAkbG9uZzsKZ2xvYmFsICRsYXQ7Cmdsb2JhbCAk
bGF5ZXJuYW1lOwpnbG9iYWwgJGxhbmc7Cmdsb2JhbCAkaWZ4OwoKJG1hcCA9IG1zX25ld01hcE9i
aigkbWFwX2ZpbGUpOwoKJGR1bW15bGF5ZXI9JG1hcC0+Z2V0TGF5ZXJCeU5hbWUoJGxheWVybmFt
ZSk7CgovLyBsb29wIHRocm91Z2ggcmVjb3JkcyBhbmQgZGlzcGxheSAoYWRkZmVhdHVyZSkgZWFj
aCBwb2ludApnbG9iYWwgJG51bXJvd3M7CiRudW1yb3dzID0gY291bnQoJGxvbmcpOwoKZm9yICgk
aSA9IDAgOyAkaSA8ICRudW1yb3dzOyArKyRpKQogIHsKICAgJG9TaHA9bXNfbmV3U2hhcGVPYmoo
TVNfU0hQX1BPSU5UKTsKICAgJG9MaW5lPW1zX25ld0xpbmVPYmooKTsKICAgJG9MaW5lLT5hZGRY
WSgkbG9uZ1skaV0sJGxhdFskaV0pOwoKICAgJG9TaHAtPmFkZCgkb0xpbmUpOwogICAkZHVtbXls
YXllci0+YWRkZmVhdHVyZSgkb1NocCk7CiAgfSAvLyBlbmQgdGhlIHdoaWxlIGxvb3AgdGhyb3Vn
aCB0aGUgdGF4b24gcG9pbnRzCgp9IC8vIGVuZCBvZiB4bWwybWFwIGZ1bmN0aW9uCgoKLyogKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiAgICAqLwovKiBmdW5jdGlvbiBHTWFwUGl4MkdlbygkblBpeFBvcywgJGRmUGl4TWlu
LCAkZGZQaXhNYXgsICRkZkdlb01pbiwgZGZHZW9NYXgsICovCi8qICRuSW52ZXJzZVBpeCkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq
LwovKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKi8KLyogIFRoaXMgZnVuY3Rpb24gd2FzIG9idGFpbmVkIGZy
b20gRE1Tb2x1dGlvbnMgR01BUCBhcHBsaWNhdGlvbiAgICAgICAgICAgICovCi8qICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAqLwovKiBVdGlsaXR5IGZ1bmN0aW9uIHRvIGNvbnZlcnQgYSBwaXhlbCBwb3NpdGlv
biB0byBnZW9jb2RlZCBwb3NpdGlvbi4gICAgICAgKi8KLyogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi8q
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAqLwovKiBUaGUgcGFyYW1ldGVyICRuSW52ZXJzZVBpeCBjb3VsZCBi
ZSBzZXQgdG8gMSBmb3IgWSBwaXhlbCAgICAgICAgICAgICAgICAgKi8KLyogY29vcmRpbmF0ZXMg
d2hlcmUgdGhlIFVMID4gTFIuIEVsc2Ugc2V0IHRvIDAuICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICovCi8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiAgICAqLwpmdW5jdGlvbiBHTWFwUGl4MkdlbygkblBpeFBv
cywgJGRmUGl4TWluLCAkZGZQaXhNYXgsICRkZkdlb01pbiwgJGRmR2VvTWF4LCAkbkludmVyc2VQ
aXgpCnsKIC8vICRuUGl4UG9zIDogcGl4ZWwgcG9zaXRpb24gKFggb3IgWSkKIC8vICRkZlBpeE1p
biwgJGRmUGl4TWF4IDogUGl4ZWwgbWluaW11bSBhbmQgbWF4aW11bSAoWCBvciBZKSBvZiB5b3Vy
IG1hcCBvbiB0aGUgc2NyZWVuIChzaG91bGQgYmUgMCB0byB4eHgpCiAvLyAkZGZHZW9NaW4sICRk
Zkdlb01heCA6IEdlb2dyYXBoaWMgY29vcmRpbmF0ZSBtaW4gbWF4IChYIG9yIFkpIG9mIHlvdXIg
bWFwIG9uIHRoZSBzY3JlZW4KICRkZldpZHRoR2VvID0gJGRmR2VvTWF4IC0gJGRmR2VvTWluOwog
JGRmV2lkdGhQaXggPSAkZGZQaXhNYXggLSAkZGZQaXhNaW47CiAkZGZQaXhUb0dlbyA9ICRkZldp
ZHRoR2VvIC8gJGRmV2lkdGhQaXg7CiAgIGlmICghJG5JbnZlcnNlUGl4KQogICB7CiAgICAgJGRm
RGVsdGFQaXggPSAkblBpeFBvcyAtICRkZlBpeE1pbjsKICAgfSBlbHNlIHsKICAgICAkZGZEZWx0
YVBpeCA9ICRkZlBpeE1heCAtICRuUGl4UG9zOwogICB9CiAkZGZEZWx0YUdlbyA9ICRkZkRlbHRh
UGl4ICogJGRmUGl4VG9HZW87CiAkZGZQb3NHZW8gPSAkZGZHZW9NaW4gKyAkZGZEZWx0YUdlbzsK
IHJldHVybiAoJGRmUG9zR2VvKTsKfSAvL2VuZCBvZiBHTWFwUGl4MkdlbyBmdW5jdGlvbgoKCi8q
ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiogKi8KLyogWE1MIEZVTkNUSU9OUyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwovKiAqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICov
CgovL2NvZGUgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoaXMgc2VjdGlvbiBmb3Igc2ltcGxpY2l0
eS4gIAovL1hNTCBwYXJzaW5nIGZ1bmN0aW9ucyB3ZXJlIGluY2x1ZGVkIGhlcmUgdG8gZXh0cmFj
dCB0aGUgcG9pbnQgZGlzdHJpYnV0aW9uIGxhdC9sb25nCi8vY29vcmRpbmF0ZXMgYW5kIHB1dCB0
aGVtIGluIGFycmF5cy4KCi8vLi4uc3R1ZmYgcmVtb3ZlZApzd2l0Y2ggKHN0cnRvbG93ZXIoJGtl
eSkpIAp7CgkvLy4uLnN0dWZmIHJlbW92ZWQKICAgICBjYXNlICJsYXRpdHVkZSIgOgogICAgICAg
JGxhdFtdID0gJGVsWzFdOwogICAgICAgYnJlYWs7CiAgICAgY2FzZSAibG9uZ2l0dWRlIiA6CiAg
ICAgICAkY291bnQrKzsKICAgICAgICRsb25nW10gPSAkZWxbMV07CiAgICAgICBicmVhazsKfQov
KiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqICovCgoKCgovKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi8qIFNUQVJUICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKi8KLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiAqLwoKLy9zZXQgZGVmYXVsdCB2YWx1ZXMKJGxheWVybmFt
ZT0iIjsKJHRoZWhlaWdodCA9IDMwMDsKJHRoZXdpZHRoID0gNjAwOwokdGhlZXh0ZW50PSItMTgw
IC05MCAxODAgOTAiOwokdGhlc3JzPSJlcHNnOjQzMjYiOwokdGhlZm9ybWF0PSJwbmciOwokdGhl
cmVxdWVzdCA9ICJHZXRDYXBhYmlsaXRpZXMiOwokdGhlYmNvbG9yID0gIjB4RkZGRkZGIjsKJHRo
ZXRyYW5zcGFyZW5jeSA9ICJ0cnVlIjsKJHRoZXN0eWxlID0gIjB4RkYwMDAwIjsgLy9kZWZhdWx0
IHBvaW50IGNvbG91ciBpcyByZWQKCmZ1bmN0aW9uIHByb2Nlc3MoJGFyKXsKZ2xvYmFsICRsYXll
cm5hbWU7Cmdsb2JhbCAkdGhlaGVpZ2h0OwpnbG9iYWwgJHRoZXdpZHRoOwpnbG9iYWwgJHRoZWV4
dGVudDsKZ2xvYmFsICR0aGVzcnM7Cmdsb2JhbCAkdGhlZm9ybWF0OwpnbG9iYWwgJHRoZXJlcXVl
c3Q7Cmdsb2JhbCAkdGhlYmNvbG9yOwpnbG9iYWwgJHRoZXRyYW5zcGFyZW5jeTsKZ2xvYmFsICR0
aGVzdHlsZTsKCiB3aGlsZShsaXN0KCRrZXksJHZhbCk9ZWFjaCgkYXIpKXsKICAgc3dpdGNoIChz
dHJ0b2xvd2VyKCRrZXkpKSB7CiAgICAgY2FzZSAibGF5ZXIiOgogICAgICAgJGxheWVybmFtZSA9
IHN0cnRvbG93ZXIoJHZhbCk7CiAgICAgICBicmVhazsKICAgICBjYXNlICJsYXllcnMiOgogICAg
ICAgJGxheWVybmFtZSA9IHN0cnRvbG93ZXIoJHZhbCk7CiAgICAgICBicmVhazsKICAgICBjYXNl
ICJxdWVyeV9sYXllcnMiOgogICAgICAgJGxheWVybmFtZSA9IHN0cnRvbG93ZXIoJHZhbCk7CiAg
ICAgICBicmVhazsKICAgICBjYXNlICJoZWlnaHQiOgogICAgICAgJHRoZWhlaWdodCA9ICR2YWw7
CiAgICAgICBicmVhazsKICAgICBjYXNlICJ3aWR0aCI6CiAgICAgICAkdGhld2lkdGggPSAkdmFs
OwogICAgICAgYnJlYWs7CiAgICAgY2FzZSAiYmJveCI6CiAgICAgICAkdGhlZXh0ZW50ID0gJHZh
bDsKICAgICAgICR0aGVleHRlbnQgPSBzdHJfcmVwbGFjZSgiLCIsIiAiLCR0aGVleHRlbnQpOwog
ICAgICAgYnJlYWs7CiAgICAgY2FzZSAic3JzIjoKICAgICAgICR0aGVzcnMgPSBzdHJ0b2xvd2Vy
KCR2YWwpOwogICAgICAgYnJlYWs7CiAgICAgY2FzZSAiZm9ybWF0IjoKICAgICAgICR0aGVmb3Jt
YXQgPSBzdHJ0b2xvd2VyKCR2YWwpOwogICAgICAgYnJlYWs7CiAgICAgY2FzZSAicmVxdWVzdCI6
CiAgICAgICAkdGhlcmVxdWVzdCA9IHN0cnRvbG93ZXIoJHZhbCk7CiAgICAgICBicmVhazsKICAg
ICBjYXNlICJiZ2NvbG9yIjoKICAgICAgICR0aGViY29sb3IgPSBzdHJ0b2xvd2VyKCR2YWwpOwog
ICAgICAgYnJlYWs7CiAgICAgY2FzZSAidHJhbnNwYXJlbnQiOgogICAgICAgJHRoZXRyYW5zcGFy
ZW5jeSA9IHN0cnRvbG93ZXIoJHZhbCk7CiAgICAgICBicmVhazsKICAgICBjYXNlICJzdHlsZXMi
OgogICAgICAgJHRoZXN0eWxlID0gJHZhbDsKICAgICAgIGJyZWFrOwogICB9IC8vZW5kIGNhc2UK
IH0gLy9lbmQgd2hpbGUKfSAvL2VuZCBwcm9jZXNzIGZ1bmN0aW9uCgoKcHJvY2VzcygkSFRUUF9H
RVRfVkFSUyk7CgoKLy9hZGp1c3RtZW50cwokbGF5ZXJuYW1lID0gc3RydG91cHBlcihzdWJzdHIo
JGxheWVybmFtZSwwLDEpKS5zdWJzdHIoJGxheWVybmFtZSwxLHN0cmxlbigkbGF5ZXJuYW1lKSk7
CgppZiAoJHRoZXRyYW5zcGFyZW5jeSA9PSAidHJ1ZSIpIHsKICAkdGhldHJhbnNwYXJlbmN5ID0g
Ik9OIjsKfSBlbHNlIHsKICAkdGhldHJhbnNwYXJlbmN5ID0gIk9GRiI7Cn0KCi8vWE1MIFBBUlNJ
TkcKLy90aGlzIHBhcnQgb2YgdGhlIGNvZGUgaXMgd2hlcmUgdGhlIHBvaW50IGRhdGEgd2FzIHBy
b2Nlc3NlZC4gIAovL2luIHRoaXMgY2FzZSwgdGhlIHBvaW50IGRhdGEgY2FtZSB2aWEgYW4gWE1M
IHN0cmVhbS4gIFRoZSBYTUwgd2FzIHBhcnNlZCBhbmQgdGhlIHBvaW50IGxhdC9sb25nIAovL2Nv
b3JkaW5hdGVzIHdlcmUgcGxhY2VkIGludG8gYXJyYXlzLiAgQ29kZSBoYXMgYmVlbiByZW1vdmVk
IGhlcmUgdG8gc2ltcGxpZnkgdGhpbmdzLCAKLy9hbmQgYmVjYXVzZSB0aGUgc291cmNlIG9mIHlv
dXIgcG9pbnQgZGF0YSBtaWdodCBiZSBmcm9tIFhNTCwgYSBkYXRhYmFzZSBjb25uZWN0aW9uLCBv
ciBhIHNoYXBlZmlsZS4KCi8vIC4uLiBzdHVmZiByZW1vdmVkLi4uCi8vICAkbGF0ID0gYXJyYXko
KTsKLy8gICRsb25nID0gYXJyYXkoKTsKCmlmICgkbGF5ZXJuYW1lIDw+ICIiKSB7IC8vbWlnaHQg
YmUgZG9pbmcgR2V0Q2FwYWJpbGl0ZXMsIHRoZXJlZm9yZSBubyBsYXllcm5hbWUgaXMgcGFzc2Vk
LgogIAogIC8vIC4uLiBzdHVmZiByZW1vdmVkLi4uIHhtbCBwYXJzaW5nCgogIC8vc2V0IG1hcCBm
aWxlIGFuZCBtYXAgb2JqZWN0CiAgJG1hcF9wYXRoID0gIiI7CiAgJG1hcF9maWxlID0gIndtc3Rl
c3RtYXAiLnVuaXFpZCgiIikuIi5tYXAiOwoKICAvL21hcCBmaWxlIGlzIHdyaXR0ZW4gb3V0IGR5
bmFtaWNhbGx5CiAgJGZwID0gZm9wZW4oJG1hcF9maWxlLCAiYSIgKSBvciBkaWUgKCJDb3VsZG4n
dCBvcGVuICRmaWxlbmFtZSIpOwogIGZwdXRzKCRmcCwiIi4iTkFNRSBJVElTV01TIi4gIlxuIiAp
OwogIGZwdXRzKCRmcCwiIi4iU1RBVFVTIE9OIi4gIlxuIiApOwogIGZwdXRzKCRmcCwiIi4iU0la
RSAiLiAkdGhld2lkdGguICIgIiAuJHRoZWhlaWdodC4gIlxuIiApOwoKICBmcHV0cygkZnAsIiIu
IlVOSVRTIEREIi4gIlxuIiApOwogIGZwdXRzKCRmcCwiIi4iVFJBTlNQQVJFTlQgIi4kdGhldHJh
bnNwYXJlbmN5LiAiXG4iICk7CgogICRyID0gaGV4ZGVjKHN1YnN0cigkdGhlYmNvbG9yLCAyLCAy
KSk7IAogICRnID0gaGV4ZGVjKHN1YnN0cigkdGhlYmNvbG9yLCA0LCAyKSk7IAogICRiID0gaGV4
ZGVjKHN1YnN0cigkdGhlYmNvbG9yLCA2LCAyKSk7IAoKICAkcHRzX3IgPSAgaGV4ZGVjKHN1YnN0
cigkdGhlc3R5bGUsIDIsIDIpKTsKICAkcHRzX2IgPSAgaGV4ZGVjKHN1YnN0cigkdGhlc3R5bGUs
IDQsIDIpKTsKICAkcHRzX2cgPSAgaGV4ZGVjKHN1YnN0cigkdGhlc3R5bGUsIDYsIDIpKTsKCiAg
ZnB1dHMoJGZwLCIiLiJJTUFHRUNPTE9SICIuJHIuIiAiLiRnLiIgIi4kYi4gIlxuIiApOwogIGZw
dXRzKCRmcCwiIi4iU1lNQk9MU0VUIHN5bXNldC5zeW0iLiAiXG4iICk7CiAgZnB1dHMoJGZwLCIi
LiJFWFRFTlQgIi4kdGhlZXh0ZW50LiAiXG4iICk7CgogIGZwdXRzKCRmcCwiIi4iUFJPSkVDVElP
TiIuICJcbiIgKTsKICBmcHV0cygkZnAsIiIuIlwiaW5pdD0iLiR0aGVzcnMuIlwiIi4iXG4iICk7
CiAgZnB1dHMoJGZwLCIiLiJFTkQiLiAiXG4iICk7CiAgZnB1dHMoJGZwLCIiLiJXRUIiLiAiXG4i
ICk7CiAgZnB1dHMoJGZwLCIiLiJJTUFHRVBBVEggL3Vzci93d3cvaHR0cGQvaHRkb2NzL21hcGRh
dGEvdG1wLyIuICJcbiIgKTsKICBmcHV0cygkZnAsIiIuIklNQUdFVVJMIC9tYXBkYXRhL3RtcC8i
LiAiXG4iICk7CiAgZnB1dHMoJGZwLCIiLiJNRVRBREFUQSIuICJcbiIgKTsKICBmcHV0cygkZnAs
IiIuIlwid21zX3RpdGxlXCIgXCJXTVMgSVRJU1wiIi4gIlxuIiApOwogIGZwdXRzKCRmcCwiIi4i
XCJ3bXNfb25saW5lcmVzb3VyY2VcIiBcImh0dHA6Ly90aGVob3N0L21hcGRhdGEvaXRpcy9zY3Jp
cHRuYW1lLnBocD9cIiIuICJcbiIgKTsKICBmcHV0cygkZnAsIiIuIlwid21zX3Nyc1wiIFwiRVBT
Rzo0MzI2IEVQU0c6NDIzMDQgRVBTRzo0MjEwMVwiIi4gIlxuIiApOwogIGZwdXRzKCRmcCwiIi4i
XCJ3bXNfYWJzdHJhY3RcIiBcInRlc3RpbmcgaXRpcyB3bXNcIiIuICJcbiIgKTsKICBmcHV0cygk
ZnAsIiIuIlwiYWNjZXNzY29uc3RyYWludHNcIiBcIm5vbmVcIiIuICJcbiIgKTsKICBmcHV0cygk
ZnAsIiIuIlwid21zX2FkZHJlc3N0eXBlXCIgXCJwb3N0YWxcIiIuICJcbiIgKTsKICBmcHV0cygk
ZnAsIiIuIlwid21zX2FkZHJlc3NcIiBcIjk2MCBDYXJsaW5nIEF2ZSBcIiIuICJcbiIgKTsKICBm
cHV0cygkZnAsIiIuIlwid21zX2NpdHlcIiBcIk90dGF3YVwiIi4gIlxuIiApOwogIGZwdXRzKCRm
cCwiIi4iXCJ3bXNfc3RhdGVvcnByb3ZpbmNlXCIgXCJPbnRhcmlvXCIiLiAiXG4iICk7CiAgZnB1
dHMoJGZwLCIiLiJcIndtc19wb3N0Y29kZVwiIFwiSzFBIDBDNlwiIi4gIlxuIiApOwogIGZwdXRz
KCRmcCwiIi4iXCJ3bXNfY291bnRyeVwiIFwiQ2FuYWRhXCIiLiAiXG4iICk7CiAgZnB1dHMoJGZw
LCIiLiJcIndtc19jb250YWN0ZWxlY3Ryb25pY21haWxhZGRyZXNzXCIgXCJtdW5yb2RiQGFnci5n
Yy5jYSxwYWd1cmVrZEBhZ3IuZ2MuY2FcIiIuICJcbiIgKTsKICBmcHV0cygkZnAsIiIuIlwid21z
X2NvbnRhY3RmYWNzaW1pbGV0ZWxlcGhvbmVcIiBcIjYxMy03NTktMTkzN1wiIi4gIlxuIiApOwog
IGZwdXRzKCRmcCwiIi4iXCJ3bXNfY29udGFjdG9yZ2FuaXphdGlvblwiIFwiQWdyaWN1bHR1cmUg
YW5kIEFncmktRm9vZCBDYW5hZGFcIiIuICJcbiIgKTsKICAKICBmcHV0cygkZnAsIiIuIkVORCIu
ICJcbiIgKTsKICBmcHV0cygkZnAsIiIuIkVORCIuICJcbiIgKTsKICBmcHV0cygkZnAsIiIuIkxB
WUVSIi4gIlxuIiApOwogIGZwdXRzKCRmcCwiIi4iTkFNRSBcIiIuICRsYXllcm5hbWUgLiJcIiIu
ICJcbiIgKTsKICBmcHV0cygkZnAsIiIuIlRZUEUgUE9JTlQiLiAiXG4iICk7CiAgZnB1dHMoJGZw
LCIiLiJTVEFUVVMgREVGQVVMVCIuICJcbiIgKTsKICBmcHV0cygkZnAsIiIuIkNMQVNTIi4gIlxu
IiApOwogIGZwdXRzKCRmcCwiIi4iU1lNQk9MIFwiY2lyY2xlXCIiLiAiXG4iICk7CiAgZnB1dHMo
JGZwLCIiLiJTSVpFIDUiLiAiXG4iICk7CiAgZnB1dHMoJGZwLCIiLiJDT0xPUiAiLiRwdHNfci4i
ICIuJHB0c19nLiIgIi4kcHRzX2IuICJcbiIgKTsKICBmcHV0cygkZnAsIiIuIkVORCIuICJcbiIg
KTsKICBmcHV0cygkZnAsIiIuIiBQUk9KRUNUSU9OIi4gIlxuIiApOwogIGZwdXRzKCRmcCwiIi4i
IFwiaW5pdD1lcHNnOjQzMjZcIiIuICJcbiIgKTsKICBmcHV0cygkZnAsIiIuIiBFTkQiLiAiXG4i
ICk7CiAgZnB1dHMoJGZwLCIiLiJNRVRBREFUQSIuICJcbiIgKTsKICBmcHV0cygkZnAsIiIuIiBc
Indtc190aXRsZVwiIFwiSXRpcyB3bXMgdGVzdCBsYXllclwiIi4gIlxuIiApOwogIGZwdXRzKCRm
cCwiIi4iIFwid21zX3Nyc1wiIFwiRVBTRzo0MzI2XCIiLiAiXG4iICk7CiAgZnB1dHMoJGZwLCIi
LiIgXCJ3bXNfYWJzdHJhY3RcIiBcInRlc3RpbmcgaXRpcyB3bXMgbGF5ZXJcIiIuICJcbiIgKTsK
ICBmcHV0cygkZnAsIiIuIiBcIndtc19leHRlbnRcIiBcIi0xODAgLTkwIDE4MCA5MFwiIi4gIlxu
IiApOwogIGZwdXRzKCRmcCwiIi4iIFwid21zX29wYXF1ZVwiIFwiMVwiIi4gIlxuIiApOwogIGZw
dXRzKCRmcCwiIi4iRU5EIi4gIlxuIiApOwogIGZwdXRzKCRmcCwiIi4iRU5EIi4gIlxuIiApOwog
IGZwdXRzKCRmcCwiIi4iRU5EIi4gIlxuIiApOwogIGZjbG9zZSggJGZwKTsKfQoKCi8vaGFuZGxp
bmcgb2YgV01TIFVSTCBuYW1lL3ZhbHVlIHBhaXJzIGZvciBHRVRNQVAsIEdFVENBUEFCSUxJVElF
UyBvciBHRVRGRUFUVVJFSU5GTwppZiAoJHRoZXJlcXVlc3QgPT0gImdldG1hcCIpCnsKICAgIC8v
ICoqKioqKipHRVRNQVAqKioqKioqCiAgICB4bWwybWFwKCk7IC8vZnVuY3Rpb24gdG8gYWRkIHBv
aW50cyB0byB0aGUgbWFwCgogICAgJGltYWdlPSRtYXAtPmRyYXcoKTsKCiAgICAvL2NhbiBjaGFu
Z2UgaW1hZ2UgZm9ybWF0IGhlcmUgYmFzZWQgb24gcmVxdWVzdAogICAgaWYgKCgkdGhlZm9ybWF0
ID09ICJwbmciKSBvciAoJHRoZWZvcm1hdCA9PSAiaW1hZ2UvcG5nIikpIHsKICAgICAgLy8kaW1h
Z2VfdXJsPSRpbWFnZS0+c2F2ZVdlYkltYWdlKE1TX1BORywxLDEsMCk7IC8vdGhpcyBpcyBmb3Ig
bWFwc2VydmVyIDMuNgoKICAgICAvL3RoaXMgaXMgZm9yIHBocF9tYXBzY3JpcHRfNDAuc28gIC8g
bWFwc2VydmVyIDQuMAogICAgICRtYXAtPm91dHB1dGZvcm1hdC0+c2V0Zm9ybWF0b3B0aW9uKCJN
SU1FVFlQRSIsICJpbWFnZS9wbmciKTsNCiAgICAgJGltYWdlX3VybD0kaW1hZ2UtPnNhdmVXZWJJ
bWFnZSgpOw0KCiAgICB9IGVsc2VpZiAoKCR0aGVmb3JtYXQgPT0gImdpZiIpIG9yICgkdGhlZm9y
bWF0ID09ICJpbWFnZS9naWYiKSkgIHsKICAgICAgLy8kaW1hZ2VfdXJsPSRpbWFnZS0+c2F2ZVdl
YkltYWdlKE1TX0dJRiwxLDEsMCk7IC8vdGhpcyBpcyBmb3IgbWFwc2VydmVyIDMuNgogIAogICAg
ICAvL3RoaXMgaXMgZm9yIHBocF9tYXBzY3JpcHRfNDAuc28gL21hcHNlcnZlciA0LjAKICAgICAg
JG1hcC0+b3V0cHV0Zm9ybWF0LT5zZXRmb3JtYXRvcHRpb24oIk1JTUVUWVBFIiwgImltYWdlL2dp
ZiIpOw0KICAgICAgJGltYWdlX3VybD0kaW1hZ2UtPnNhdmVXZWJJbWFnZSgpOw0KCiAgICB9Cgov
L29sZCBtZXRob2QgdXNpbmcgcmVkaXJlY3QKLy8gICAgJHRoZWhlYWRlcj0iTG9jYXRpb246IGh0
dHA6Ly90aGVob3N0Ii4kaW1hZ2VfdXJsOwovLyAgICBIZWFkZXIoJHRoZWhlYWRlcik7CgovL291
dHB1dCB0aGUgaW1hZ2UgZGlyZWN0bHkgCnJlYWRmaWxlKCIvdXNyL3d3dy9odHRwZC9odGRvY3Mi
LiRpbWFnZV91cmwpOwoKCn0gZWxzZWlmICgkdGhlcmVxdWVzdCA9PSAiZ2V0Y2FwYWJpbGl0aWVz
IikgewogICAgLy8gKioqKioqKkdFVENBUEFCSUxJVElFUyoqKioqKioKCiAgaWYgKCRsYXllcm5h
bWUgPD4gIiIpIAogIHsKICAgICAgLy93cml0ZSBvdXQgYSBuZXcgbWFwZmlsZQogICAgICAvL3Nl
dCBtYXAgZmlsZSBhbmQgbWFwIG9iamVjdAogICAgICAkbWFwX3BhdGggPSAiIjsKICAgICAgJG1h
cF9maWxlID0gIndtc2dldGNhcCIudW5pcWlkKCIiKS4iLm1hcCI7CiAgICAKICAgICAgJGZwID0g
Zm9wZW4oJG1hcF9maWxlLCAiYSIgKSBvciBkaWUgKCJDb3VsZG4ndCBvcGVuICRmaWxlbmFtZSIp
OwogICAgICBmcHV0cygkZnAsIiIuIk5BTUUgSVRJU1dNUyIuICJcbiIgKTsKICAgICAgZnB1dHMo
JGZwLCIiLiJTVEFUVVMgT04iLiAiXG4iICk7CiAgICAgIGZwdXRzKCRmcCwiIi4iU0laRSA2MDAg
MzAwIi4gIlxuIiApOwogICAgICBmcHV0cygkZnAsIiIuIlVOSVRTIEREIi4gIlxuIiApOwogICAg
ICBmcHV0cygkZnAsIiIuIlRSQU5TUEFSRU5UIE9OIi4gIlxuIiApOwogICAgICBmcHV0cygkZnAs
IiIuIklNQUdFQ09MT1IgMjU1IDI1NSAyNTUiLiAiXG4iICk7CiAgICAgIGZwdXRzKCRmcCwiIi4i
U1lNQk9MU0VUIHN5bXNldC5zeW0iLiAiXG4iICk7CiAgICAgIGZwdXRzKCRmcCwiIi4iRVhURU5U
IC0xODAgLTkwIDE4MCA5MCAiLiAiXG4iICk7CiAgICAgIGZwdXRzKCRmcCwiIi4iUFJPSkVDVElP
TiIuICJcbiIgKTsKICAgICAgZnB1dHMoJGZwLCIiLiJcImluaXQ9ZXBzZzo0MzI2XCIiLiJcbiIg
KTsKICAgICAgZnB1dHMoJGZwLCIiLiJFTkQiLiAiXG4iICk7CiAgICAgIGZwdXRzKCRmcCwiIi4i
V0VCIi4gIlxuIiApOwogICAgICBmcHV0cygkZnAsIiIuIklNQUdFUEFUSCAvdXNyL3d3dy9odHRw
ZC9odGRvY3MvbWFwZGF0YS90bXAvIi4gIlxuIiApOwogICAgICBmcHV0cygkZnAsIiIuIklNQUdF
VVJMIC9tYXBkYXRhL3RtcC8iLiAiXG4iICk7CiAgICAgIGZwdXRzKCRmcCwiIi4iTUVUQURBVEEi
LiAiXG4iICk7CiAgICAgIGZwdXRzKCRmcCwiIi4iXCJ3bXNfdGl0bGVcIiBcIldNUyBJVElTXCIi
LiAiXG4iICk7CiAgICAgIGZwdXRzKCRmcCwiIi4iXCJ3bXNfb25saW5lcmVzb3VyY2VcIiBcImh0
dHA6Ly90aGVob3N0L21hcGRhdGEvaXRpcy9zY3JpcHRuYW1lLnBocD9cIiIuICJcbiIgKTsKICAg
ICAgZnB1dHMoJGZwLCIiLiJcIndtc19zcnNcIiBcIkVQU0c6NDMyNiBFUFNHOjQyMzA0IEVQU0c6
NDIxMDFcIiIuICJcbiIgKTsKICAgICAgZnB1dHMoJGZwLCIiLiJcIndtc19hYnN0cmFjdFwiIFwi
dGVzdGluZyBpdGlzIHdtc1wiIi4gIlxuIiApOwogICAgICBmcHV0cygkZnAsIiIuIlwiYWNjZXNz
Y29uc3RyYWludHNcIiBcIm5vbmVcIiIuICJcbiIgKTsKICAgICAgZnB1dHMoJGZwLCIiLiJcIndt
c19hZGRyZXNzdHlwZVwiIFwicG9zdGFsXCIiLiAiXG4iICk7CiAgICAgIGZwdXRzKCRmcCwiIi4i
XCJ3bXNfYWRkcmVzc1wiIFwiOTYwIENhcmxpbmcgQXZlIFwiIi4gIlxuIiApOwogICAgICBmcHV0
cygkZnAsIiIuIlwid21zX2NpdHlcIiBcIk90dGF3YVwiIi4gIlxuIiApOwogICAgICBmcHV0cygk
ZnAsIiIuIlwid21zX3N0YXRlb3Jwcm92aW5jZVwiIFwiT250YXJpb1wiIi4gIlxuIiApOwogICAg
ICBmcHV0cygkZnAsIiIuIlwid21zX3Bvc3Rjb2RlXCIgXCJLMUEgMEM2XCIiLiAiXG4iICk7CiAg
ICAgIGZwdXRzKCRmcCwiIi4iXCJ3bXNfY291bnRyeVwiIFwiQ2FuYWRhXCIiLiAiXG4iICk7CiAg
ICAgIGZwdXRzKCRmcCwiIi4iXCJ3bXNfY29udGFjdGVsZWN0cm9uaWNtYWlsYWRkcmVzc1wiIFwi
bXVucm9kYkBhZ3IuZ2MuY2EscGFndXJla2RAYWdyLmdjLmNhXCIiLiAiXG4iICk7CiAgICAgIGZw
dXRzKCRmcCwiIi4iXCJ3bXNfY29udGFjdGZhY3NpbWlsZXRlbGVwaG9uZVwiIFwiNjEzLTc1OS0x
OTM3XCIiLiAiXG4iICk7CiAgICAgIGZwdXRzKCRmcCwiIi4iXCJ3bXNfY29udGFjdG9yZ2FuaXph
dGlvblwiIFwiQWdyaWN1bHR1cmUgYW5kIEFncmktRm9vZCBDYW5hZGFcIiIuICJcbiIgKTsKICAg
ICAgZnB1dHMoJGZwLCIiLiJFTkQiLiAiXG4iICk7CiAgICAgIGZwdXRzKCRmcCwiIi4iRU5EIi4g
IlxuIiApOwogICAgICBmcHV0cygkZnAsIiIuIkxBWUVSIi4gIlxuIiApOwogICAgICBmcHV0cygk
ZnAsIiIuIk5BTUUgXCIiLiAkbGF5ZXJuYW1lIC4iXCIiLiAiXG4iICk7CiAgICAgIGZwdXRzKCRm
cCwiIi4iVFlQRSBQT0lOVCIuICJcbiIgKTsKICAgICAgZnB1dHMoJGZwLCIiLiJTVEFUVVMgREVG
QVVMVCIuICJcbiIgKTsKICAgICAgZnB1dHMoJGZwLCIiLiJDTEFTUyIuICJcbiIgKTsKICAgICAg
ZnB1dHMoJGZwLCIiLiJTWU1CT0wgXCJjaXJjbGVcIiIuICJcbiIgKTsKICAgICAgZnB1dHMoJGZw
LCIiLiJTSVpFIDUiLiAiXG4iICk7CiAgICAgIGZwdXRzKCRmcCwiIi4iQ09MT1IgMjU1IDAgMCIu
ICJcbiIgKTsKICAgICAgZnB1dHMoJGZwLCIiLiJFTkQiLiAiXG4iICk7CiAgICAgIGZwdXRzKCRm
cCwiIi4iIFBST0pFQ1RJT04iLiAiXG4iICk7CiAgICAgIGZwdXRzKCRmcCwiIi4iIFwiaW5pdD1l
cHNnOjQzMjZcIiIuICJcbiIgKTsKICAgICAgZnB1dHMoJGZwLCIiLiIgRU5EIi4gIlxuIiApOwog
ICAgICBmcHV0cygkZnAsIiIuIk1FVEFEQVRBIi4gIlxuIiApOwogICAgICBmcHV0cygkZnAsIiIu
IiBcIndtc190aXRsZVwiIFwiSXRpcyB3bXMgdGVzdCBsYXllclwiIi4gIlxuIiApOwogICAgICBm
cHV0cygkZnAsIiIuIiBcIndtc19zcnNcIiBcIkVQU0c6NDMyNlwiIi4gIlxuIiApOwogICAgICBm
cHV0cygkZnAsIiIuIiBcIndtc19hYnN0cmFjdFwiIFwidGVzdGluZyBpdGlzIHdtcyBsYXllclwi
Ii4gIlxuIiApOwogICAgICBmcHV0cygkZnAsIiIuIiBcIndtc19leHRlbnRcIiBcIi0xODAgLTkw
IDE4MCA5MFwiIi4gIlxuIiApOwogICAgICBmcHV0cygkZnAsIiIuIiBcIndtc19vcGFxdWVcIiBc
IjFcIiIuICJcbiIgKTsKICAgICAgZnB1dHMoJGZwLCIiLiJFTkQiLiAiXG4iICk7CiAgICAgIGZw
dXRzKCRmcCwiIi4iRU5EIi4gIlxuIiApOwogICAgICBmcHV0cygkZnAsIiIuIkVORCIuICJcbiIg
KTsKICAgICAgZmNsb3NlKCAkZnApOwogICAgCiAgICAgICRjYXBfaGVhZGVyID0gIkxvY2F0aW9u
OiBodHRwOi8vdGhlaG9zdC9jZ2ktYmluL21hcHNlcnZlci9tYXBzZXJ2P1ZFUlNJT049MS4xLjAm
UkVRVUVTVD1HZXRDYXBhYmlsaXRpZXMmbWFwPS91c3Ivd3d3L2h0dHBkL2h0ZG9jcy9tYXBkYXRh
L2l0aXMvIiAuICRtYXBfZmlsZTsKICAgICAKICAgICAgSGVhZGVyKCRjYXBfaGVhZGVyKTsKICB9
CgogIGVsc2UgCiAgeyAvL25vIGxheWVyIHdhcyBzcGVjaWZpZWQgc28gdXNlIG1vY2sgdXAgb2Yg
bWFwZmlsZQogICAgJHRoZV93bXNtYXAgPSB1cmxlbmNvZGUoIi91c3Ivd3d3L2h0dHBkL2h0ZG9j
cy9tYXBkYXRhL2l0aXMvaXRpc3dtcy5tYXAiKTsgCiAgICAkY2FwX2hlYWRlciA9ICJMb2NhdGlv
bjogaHR0cDovL3RoZWhvc3QvY2dpLWJpbi9tYXBzZXJ2ZXIvbWFwc2Vydj9WRVJTSU9OPTEuMS4w
JlJFUVVFU1Q9R2V0Q2FwYWJpbGl0aWVzJm1hcD0iIC4gJHRoZV93bXNtYXA7CiAgIAogICAgSGVh
ZGVyKCRjYXBfaGVhZGVyKTsKICB9Cgp9IGVsc2VpZiAoJHRoZXJlcXVlc3QgPT0gImdldGZlYXR1
cmVpbmZvIikgewogICAgLy8gKioqKioqKkdFVEZFQVRVUkVJTkZPKioqKioqKgogICAgLy8gdGhl
IHVzZXIgaXMgcXVlcnlpbmcKICAgIHhtbDJtYXAoKTsgLy9mdW5jdGlvbiB0byBhZGQgcG9pbnRz
IHRvIHRoZSBtYXAKICAgIAogICAgLy93aGVyZSB0aGUgdXNlciBjbGlja2VkCiAgICAkdGhlX3g9
KCRIVFRQX0dFVF9WQVJTWyJYIl0pOwogICAgJHRoZV95PSgkSFRUUF9HRVRfVkFSU1siWSJdKTsg
ICAgIAoKICAgIC8vIHpvb20gaW4gbW9yZSBmb3IgbW9yZSBhY2N1cmFjeQogICAgJG15X3BvaW50
ID0gbXNfbmV3cG9pbnRPYmooKTsgLy8gdGhpcyBpcyB0aGUgcG9pbnQgdGhlIHVzZXIgY2xpY2tl
ZAogICAgJG15X3BvaW50LT5zZXRYWSgkdGhlX3gsJHRoZV95KTsKICAgICR6b29tX2ZhY3Rvcj02
MDsKICAgICRteV9leHRlbnQgPSBtc19uZXdSZWN0T2JqKCk7CiAgICAkZXh0ZW50X3RvX3NldCA9
IGV4cGxvZGUoIiAiLCR0aGVleHRlbnQpOwogICAgJG1hcC0+c2V0ZXh0ZW50KCRleHRlbnRfdG9f
c2V0WzBdLCRleHRlbnRfdG9fc2V0WzFdLCRleHRlbnRfdG9fc2V0WzJdLCRleHRlbnRfdG9fc2V0
WzNdKTsKICAgICRteV9leHRlbnQtPnNldGV4dGVudCgkZXh0ZW50X3RvX3NldFswXSwkZXh0ZW50
X3RvX3NldFsxXSwkZXh0ZW50X3RvX3NldFsyXSwkZXh0ZW50X3RvX3NldFszXSk7CgogICAgJG1h
cC0+em9vbXBvaW50KCR6b29tX2ZhY3RvciwkbXlfcG9pbnQsNjAwLDMwMCwkbXlfZXh0ZW50KTsK
CiAgICAvLyBjb252ZXJ0IGZyb20gcGl4ZWxzIHRvIG1hcCBjb29yZGluYXRlcwogICAgJHRlc3R4
ID0gR01hcFBpeDJHZW8oJHRoZV94LDAsNjAwLCRtYXAtPmV4dGVudC0+bWlueCwkbWFwLT5leHRl
bnQtPm1heHgsMCk7CiAgICAkdGVzdHkgPSBHTWFwUGl4MkdlbygkdGhlX3ksMCwzMDAsJG1hcC0+
ZXh0ZW50LT5taW55LCRtYXAtPmV4dGVudC0+bWF4eSwwKTsKCiAgICAvLyBzZXQgbmV3IHBvaW50
IHRvIHVzZSBmb3IgY2hlY2tpbmcgZGlzdGFuY2UgZnJvbSBjbGljayB0byBhY3R1YWwgcG9pbnRz
CiAgICAkbXlwb2ludDI9bXNfbmV3cG9pbnRPYmooKTsKICAgICRteXBvaW50Mi0+c2V0WFkoJHRl
c3R4LCR0ZXN0eSk7CiAgICAkY2xvc2VzdCA9IDE1MDAwMDAwOyAvL3RoaXMgaXMgaW4gbWV0ZXJz
LiBTZXQgdG8gYSBsYXJnZSBudW1iZXIsIGluIG1hcCB1bml0cy4KCiAgICAkbnVtcm93cyA9IGNv
dW50KCRsb25nKTsKICAgIGZvciAoJGkgPSAwIDsgJGkgPCAkbnVtcm93czsgKyskaSkKICAgIHsK
ICAgICAgJHRyYWNraW5nbGF5ZXJwdD1tc19uZXdwb2ludE9iaigpOwogICAgICAkdHJhY2tpbmds
YXllcnB0LT5zZXRYWSgkbG9uZ1skaV0sJGxhdFskaV0pOwogICAgICAKICAgICAgLy9kZXRlcm1p
bmUgd2hpY2ggcG9pbnQgdGhlIHVzZXIgaXMgY2xpY2tpbmcgb24KICAgICAgJGRpc3QgPSAkbXlw
b2ludDItPmRpc3RhbmNldG9wb2ludCgkdHJhY2tpbmdsYXllcnB0KTsKICAgICAgaWYgKCRkaXN0
IDw9ICRjbG9zZXN0KQogICAgICB7IC8vIGNvbXBhcmluZyBlYWNoIGRpc3QgY2FsYyB0byBwcmV2
aW91cyBvbmVzIHRvIGdldCB0aGUgY2xvc2VzdAogICAgICAgICAkY2xvc2VzdCA9ICRkaXN0Owog
ICAgICAgICAvLyB0aGlzIGlzIHRoZSBjbG9zZXN0IHBvaW50IHNvIGZhciBzbyBzZXQgdGhlIFVS
TCB0byBwdXQgaW4gdGhlIHF1ZXJ5IHJlc3VsdCBwb3AgdXAgd2luZG93CiAgICAgICAgICR0aGV1
cmwgPSAiaHR0cDovL3RoZWhvc3QvaXRpc3Rlc3RkZXYvYmNpbiU1RnNwZUNzJTJFY29vcmQ/cCU1
RmxhdD0iLiR0cmFja2luZ2xheWVycHQtPnkuIiZwJTVGbG9uZz0iLiR0cmFja2luZ2xheWVycHQt
PnguIiZwJTVGdGF4b249Ii4kbGF5ZXJuYW1lOwogICAgICB9CiAgICAgfSAvLyBlbmQgdGhlIHdo
aWxlIGxvb3AgdGhyb3VnaCB0aGUgdGF4b24gcG9pbnRzCgogICAgIGVjaG8gIjxodG1sPjxib2R5
PiI7CgogICAgIGVjaG8gIjxhIGhyZWY9XCIiIC4gJHRoZXVybCAuICJcIj4iIC4gJHRoZXVybCAu
ICI8L2E+IjsKICAgICBlY2hvICI8L2JvZHk+PC9odG1sPiI7CiAgICB9Cgo/PgoKCg==

--=_114F5AA0.E786E6D8--



More information about the mapserver-users mailing list