[mapserver-users] mouse over map (FWD)

Steve Lime steve.lime@dnr.state.mn.us
Fri, 25 Oct 2002 12:33:19 -0500


--=_124E9B7E.6F0E7509
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

Hi Thomas: I've attached a simpler version of this stuff that was used
to actually do the weather version. In this case a perl script is used
to build XML files that are then read by an XML enabled version of the
mapplet. The XML files boil down to something like an image map and the
applet interprets that image map for mouse overs...

You can see this application in action at
http://thoreau.dnr.state.mn.us/cgi-bin/mapdoqs.pl. You have to zoom
in a bit to see the DOQs and then look for little red dots to mouse
over. That data is from the USGS GNIS database.

Steve


Stephen Lime
Data & Applications Manager

Minnesota DNR
500 Lafayette Road
St. Paul, MN 55155
651-297-2937

>>> "Thomas, Cord" <cthomas@rand.org> 10/23/02 06:00PM >>>
Is source available for this maplet?  Does dnr publish its source?  

-----Original Message-----
From: Steve Lime [mailto:steve.lime@dnr.state.mn.us] 
Sent: Wednesday, October 23, 2002 3:38 PM
To: gabriel@ciasc.gov.br; mapserver-users@lists.gis.umn.edu 
Subject: Re: [mapserver-users] mouse over map (FWD)


Oops. It should be http://thoreau.dnr.state.mn.us/weather/map.html 

Steve

>>> "gabriel" <gabriel@ciasc.gov.br> 10/23/02 03:07PM >>>
This was a good example on weather use of MS.

Today, I could not find this URL. Anyone could help me.

----- Original Message -----
From: "teb" <teb@mallit.fr.umn.edu>
To: <mapserver-users@lists.gis.umn.edu>
Cc: <Amy.Stender@erdc.usace.army.mil>
Sent: Friday, February 01, 2002 2:51 PM
Subject: [mapserver-users] mouse over map (FWD)


>
> ------------- Begin Forwarded Message -------------
>
> From: "Stender, Amy ERDC-CRREL-NH" <Amy.Stender@erdc.usace.army.mil>
> To: mapserver-info@lists.gis.umn.edu 
> Subject: mouse over map
> Date: Fri, 1 Feb 2002 10:15:35 -0500
> MIME-Version: 1.0
>
> I was looking at the DNR weather map:
>
> http://www.dnr.state.mn.us/weather/map.html 
>
> and I was wondering if anyone could help me try something like that
for my
> map. I'd like the user to be able to mouse over a point and have an
> "alt"-like box appear next to the mouse. But my map isn't static, so
I can
> necessarily say: when mouse is that this pixel by this pixel, popUp.
>
> Is this something I'll have to alter in the mapplet?
>
> Thanks in advance,
> Amy
>
> Amy L. Stender
> Remote Sensing/GIS Center
> Cold Regions Research and Engineering Laboratory
> United States Army Corps of Engineers
> 72 Lyme Road, Hanover, NH 03755-1290
> Tel: (603) 646-4733
> Fax: (603) 646-4730
> astender@crrel.usace.army.mil 
>
>
> ------------- End Forwarded Message -------------
>

--=_124E9B7E.6F0E7509
Content-Type: application/octet-stream; name="mapdoqs.pl"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="mapdoqs.pl"

IyEvdXNyL2Jpbi9wZXJsCgp1c2UgQ0dJIHF3KDphbGwgZXNjYXBlKTsKdXNlIG1hcHNjcmlwdDsK
dXNlIFhCYXNlOwp1c2UgWE1MOjpXcml0ZXI7CnVzZSBJTzsKCgokbWFwZmlsZSA9ICIvd2ViMDEv
ZG9jcy9tYXBwaW5nL2RvcXMvdmlldy5tYXAiOwokbWFwID0gJyc7CgokaW1hZ2VmaWxlID0gJCQg
LiB0aW1lKCkgLiAiLmdpZiI7CiR4bWxmaWxlID0gJCQgLiB0aW1lKCkgLiAiLnhtbCI7Cgokem9v
bV9kaXJlY3Rpb24gPSAwOyAjIGRlZmF1bHRzCiR6b29tX3NpemUgPSAyOwoKc3ViIGVycm9yKCkg
ewogICBteSgkZXJyKSA9IEBfOwogICBwcmludCBoZWFkZXI7CiAgIHByaW50ICI8aHRtbD48cHJl
PiRlcnI8L3ByZT48L2h0bWw+XG4iOwogICBleGl0IDA7Cn0KCnN1YiBzZXRfZXh0ZW50KCkgewog
IG15ICR6b29tLCBAaW1nZXh0LCBAaW1nYm94LCBAaW1neHk7CiAgbXkgJGNlbGx4LCAkY2VsbHk7
ICAKICAKICBAaW1nYm94ID0gc3BsaXQoL1xzKy8sJGNnaS0+cGFyYW0oJ2ltZ2JveCcpKSBpZiAo
ZGVmaW5lZCgkY2dpLT5wYXJhbSgnaW1nYm94JykpKTsKICBAaW1nZXh0ID0gc3BsaXQoL1xzKy8s
ICRjZ2ktPnBhcmFtKCdpbWdleHQnKSkgaWYgKGRlZmluZWQoJGNnaS0+cGFyYW0oJ2ltZ2V4dCcp
KSk7CiAgQGltZ3h5ID0gc3BsaXQoL1xzKy8sICRjZ2ktPnBhcmFtKCdpbWd4eScpKSBpZiAoZGVm
aW5lZCgkY2dpLT5wYXJhbSgnaW1neHknKSkpOwoKICBpZigoJGltZ2JveFswXSAhPSAkaW1nYm94
WzJdKSAmJiAoJGltZ2JveFsxXSAhPSAkaW1nYm94WzNdKSkgeyAKICAgICRjZWxseCA9ICgkaW1n
ZXh0WzJdLSRpbWdleHRbMF0pLygkbWFwLT57d2lkdGh9LTEpOwogICAgJGNlbGx5ID0gKCRpbWdl
eHRbM10tJGltZ2V4dFsxXSkvKCRtYXAtPntoZWlnaHR9LTEpOwogICAgJG1hcC0+e2V4dGVudH0t
PnttaW54fT0gMS4wKiRpbWdleHRbMF0gKyAkY2VsbHgqJGltZ2JveFswXTsKICAgICRtYXAtPntl
eHRlbnR9LT57bWF4eH09IDEuMCokaW1nZXh0WzBdICsgJGNlbGx4KiRpbWdib3hbMl07CiAgICAk
bWFwLT57ZXh0ZW50fS0+e21pbnl9PSAxLjAqJGltZ2V4dFszXSAtICRjZWxseSokaW1nYm94WzNd
OwogICAgJG1hcC0+e2V4dGVudH0tPnttYXh5fT0gMS4wKiRpbWdleHRbM10gLSAkY2VsbHkqJGlt
Z2JveFsxXTsKICB9IGVsc2lmKCRjZ2ktPnBhcmFtKCdpbWdleHQnKSkgewogICAgJHpvb20gPSAk
Y2dpLT5wYXJhbSgnem9vbScpOwogICAgCiAgICAkem9vbSA9IDEuMC9hYnMoJHpvb20pIGlmICR6
b29tIDwgMDsKICAgIAogICAgJGNlbGx4ID0gKCRpbWdleHRbMl0tJGltZ2V4dFswXSkvKCRtYXAt
Pnt3aWR0aH0tMSk7CiAgICAkY2VsbHkgPSAoJGltZ2V4dFszXS0kaW1nZXh0WzFdKS8oJG1hcC0+
e2hlaWdodH0tMSk7CiAgICAKICAgICR4ID0gJGltZ2V4dFswXSArICRjZWxseCokaW1neHlbMF07
CiAgICAkeSA9ICRpbWdleHRbM10gLSAkY2VsbHkqJGltZ3h5WzFdOwogICAgCiAgICAkbWFwLT57
ZXh0ZW50fS0+e21pbnh9PSR4LS41KigoJGltZ2V4dFsyXS0kaW1nZXh0WzBdKS8kem9vbSk7CiAg
ICAkbWFwLT57ZXh0ZW50fS0+e21pbnl9PSR5LS41KigoJGltZ2V4dFszXS0kaW1nZXh0WzFdKS8k
em9vbSk7CiAgICAkbWFwLT57ZXh0ZW50fS0+e21heHh9PSR4Ky41KigoJGltZ2V4dFsyXS0kaW1n
ZXh0WzBdKS8kem9vbSk7CiAgICAkbWFwLT57ZXh0ZW50fS0+e21heHl9PSR5Ky41KigoJGltZ2V4
dFszXS0kaW1nZXh0WzFdKS8kem9vbSk7CgogIH0KfQoKc3ViIHJlbmRlciB7CgogICRtYXAgPSBu
ZXcgbWFwT2JqKCRtYXBmaWxlKSBvciAmZXJyb3IoIlVuYWJsZSB0byBvcGVuICRtYXBmaWxlLiIp
OwoKICAmc2V0X2V4dGVudCgpOwoKICAkaW1nID0gJG1hcC0+ZHJhdygpIG9yICZlcnJvcigiVW5h
YmxlIHRvIGNyZWF0ZSBtYXAuIiwgJG1hcHNjcmlwdDo6bXNfZXJyb3ItPnttZXNzYWdlfSk7CiAg
bWFwc2NyaXB0Ojptc1NhdmVJbWFnZSgkaW1nLCAkbWFwLT57d2VifS0+e2ltYWdlcGF0aH0uJGlt
YWdlZmlsZSwgJG1hcC0+e3RyYW5zcGFyZW50fSwkbWFwLT57aW50ZXJsYWNlfSk7CgogICMgc2F2
ZSBzb21lIHRoaW5ncyBmb3IgbGF0ZXIKICAkaW1nZXh0ID0gam9pbiAnICcsICRtYXAtPntleHRl
bnR9LT57bWlueH0sICRtYXAtPntleHRlbnR9LT57bWlueX0sICRtYXAtPntleHRlbnR9LT57bWF4
eH0sICRtYXAtPntleHRlbnR9LT57bWF4eX07CiAgJHNjYWxlID0gJG1hcC0+e3NjYWxlfTsKCiAg
IyBub3cgdGhlIHdyaXRlIGFuIFhNTCBmaWxlIG9mIEdOSVMgbG9jYXRpb25zCiAgJHVzZXhtbCA9
IDA7CiAgJGxheWVyID0gJG1hcC0+Z2V0TGF5ZXJCeU5hbWUoJ2duaXMnKSBvciAmZXJyb3IoIkNh
bid0IGZpbmQgbGF5ZXIgJ2duaXMnLiIpOwoKICBpZigkbGF5ZXItPnttYXhzY2FsZX0gPiAkbWFw
LT57c2NhbGV9KSB7CiAgICAKICAgIG15ICRyZXN1bHRzID0gJGxheWVyLT5xdWVyeVVzaW5nUmVj
dCgkbWFwLCAkbWFwLT57ZXh0ZW50fSkgb3IgcmV0dXJuOyAjIG5vdCBhbiBlcnJvciwganVzdCBu
b3RoaW5nIHRvIGRvCgogICAgbXkgJG91dHB1dCA9IG5ldyBJTzo6RmlsZSgiPiIuJG1hcC0+e3dl
Yn0tPntpbWFnZXBhdGh9LiR4bWxmaWxlKTsKICAgIG15ICR3cml0ZXIgPSBuZXcgWE1MOjpXcml0
ZXIoT1VUUFVUID0+ICRvdXRwdXQsIERBVEFfSU5ERU5UID0+IDIsIERBVEFfTU9ERSA9PiAxKTsK
CiAgICAkd3JpdGVyLT5zdGFydFRhZygiaW1hZ2VtYXAiKTsKCiAgICBteSAkdGFibGUgPSAnJzsK
ICAgIGZvcihteSAkaT0wOyAkaTwkcmVzdWx0cy0+e251bXJlc3VsdHN9OyAkaSsrKSB7CiAgICAg
IG15ICRkYXRhID0gJHJlc3VsdHMtPm5leHQoKTsKICAgICAgCiAgICAgIGlmKCEkdGFibGUpIHsK
CSR0YWJsZSA9IG5ldyBYQmFzZSAkbWFwLT57c2hhcGVwYXRofS4nLycuJGxheWVyLT57ZGF0YX0u
Jy5kYmYnIG9yICZlcnJvcihYQmFzZS0+ZXJyc3RyKTsKICAgICAgfQogICAgICAKICAgICAgbXkg
KCRkZWxldGVkLCAkbmFtZSwgJHgsICR5LCAkbGF0LCAkbG9uKSA9ICR0YWJsZS0+Z2V0X3JlY29y
ZCgkZGF0YS0+e3NoYXBlfSwgJ0ZFQVRfTkFNRScsICdYVVRNJywgJ1lVVE0nLCAnTEFUX0REJywg
J0xPTl9ERCcpOwoKICAgICAgJHggPSAoJHggLSAkbWFwLT57ZXh0ZW50fS0+e21pbnh9KS8kbWFw
LT57Y2VsbHNpemV9OwogICAgICAkeSA9ICgkbWFwLT57ZXh0ZW50fS0+e21heHl9IC0gJHkpLyRt
YXAtPntjZWxsc2l6ZX07CiAgICAgIAogICAgICAkd3JpdGVyLT5zdGFydFRhZygiYXJlYSIsIHR5
cGUgPT4gImNpcmNsZSIsIGRhdGEgPT4gaW50KCR4KS4iLCIuaW50KCR5KS4iLDEwIik7CgogICAg
ICAkd3JpdGVyLT5zdGFydFRhZygidGV4dCIpOwogICAgICAkd3JpdGVyLT5jaGFyYWN0ZXJzKCJO
YW1lOiAkbmFtZSIpOwogICAgICAkd3JpdGVyLT5lbmRUYWcoInRleHQiKTsKCiAgICAgICR3cml0
ZXItPnN0YXJ0VGFnKCJ0ZXh0Iik7CiAgICAgICR3cml0ZXItPmNoYXJhY3RlcnMoIkxhdC9Mb246
ICRsYXQvJGxvbiIpOwogICAgICAkd3JpdGVyLT5lbmRUYWcoInRleHQiKTsKCiAgICAgICR3cml0
ZXItPmVuZFRhZygiYXJlYSIpOwogICAgfQoKICAgICR0YWJsZS0+Y2xvc2UoKTsKICAgICRyZXN1
bHRzLT5mcmVlKCk7CiAgICB1bmRlZiAkbWFwOwoKICAgICR3cml0ZXItPmVuZFRhZygiaW1hZ2Vt
YXAiKTsKICAgICR3cml0ZXItPmVuZCgpOwoKICAgICR1c2V4bWwgPSAxOwogIH0KCiAgcmV0dXJu
Owp9CgojIGhlcmUgaXMgdGhlIG1haW4gcHJvZ3JhbQokY2dpID0gbmV3IENHSTsKCiMgZHJhdyB0
aGUgaW1hZ2UgYW5kIG91dHB1dCBhbnkgWE1MIGltYWdlbWFwCiZyZW5kZXIoKTsKCiMgbm93IGVj
aG8gdGhlIHBhZ2UKcHJpbnQgaGVhZGVyOwpwcmludCAiPCEtLSAkc2NhbGUgLS0+XG4iOwpwcmlu
dCAiPGh0bWw+XG4iOwpwcmludCAiICA8aGVhZD5cbiI7CgpwcmludCAiICAgIDx0aXRsZT5ET1Fz
PC90aXRsZT5cbiI7CgpwcmludCAiICAgIDxTQ1JJUFQgTEFOR1VBR0U9XCJKYXZhU2NyaXB0XCI+
XG4iOwpwcmludCAiICAgICAgZnVuY3Rpb24gbWFwcGxldF9hcHBseShuYW1lLCBtaW54LCBtaW55
LCBtYXh4LCBtYXh5LCByZWRyYXcpIHtcbiI7CnByaW50ICIgICAgICAgIGRvY3VtZW50Lm1hcHNl
cnYuaW1nYm94LnZhbHVlID0gbWlueCArIFwiIFwiICsgbWlueSArIFwiIFwiICsgbWF4eCArIFwi
IFwiICsgbWF4eTtcbiI7CnByaW50ICIgICAgICAgIGRvY3VtZW50Lm1hcHNlcnYuaW1neHkudmFs
dWUgPSBtaW54ICsgXCIgXCIgKyBtaW55O1xuIjsKcHJpbnQgIiAgICAgIH1cbiI7CnByaW50ICIg
ICAgICBmdW5jdGlvbiBtYXBwbGV0X2Vycm9yKG1lc3NhZ2UpIHtcbiI7CnByaW50ICIgICAgICAg
IGFsZXJ0KG1lc3NhZ2UpO1xuIjsKcHJpbnQgIiAgICAgIH1cbiI7CnByaW50ICIgICAgPC9TQ1JJ
UFQ+XG4iOwoKcHJpbnQgIiAgPC9oZWFkPlxuIjsKCnByaW50ICIgIDxib2R5IGJnY29sb3I9XCIj
ZmZmZmZmXCI+XG4iOwogIApwcmludCAiICAgIDxmb3JtIG1ldGhvZD1QT1NUIG5hbWU9XCJtYXBz
ZXJ2XCIgYWN0aW9uPVwiL2NnaS1iaW4vbWFwZG9xcy5wbFwiPlxuIjsKcHJpbnQgIiAgICAgIDxp
bnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cImltZ3h5XCIgdmFsdWU9XCIxNDkgMTk5XCI+XG4i
OwpwcmludCAiICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiaW1nYm94XCIgdmFs
dWU9XCItMSAtMSAtMSAtMVwiPlxuIjsKcHJpbnQgIiAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVu
XCIgbmFtZT1cIm1hcFwiIHZhbHVlPVwiZG9xcy92aWV3Lm1hcFwiPlxuIjsKcHJpbnQgIiAgICAg
IDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cImltZ2V4dFwiIHZhbHVlPVwiJGltZ2V4dFwi
PlxuIjsKCnByaW50ICIgICAgICA8Y2VudGVyPlxuIjsKcHJpbnQgIiAgICAgICAgPHRhYmxlPlxu
IjsKcHJpbnQgIiAgICAgICAgICA8dHI+PHRkPlxuIjsKcHJpbnQgIiAgICAgICAgICAgIDxzZWxl
Y3QgbmFtZT1cInpvb21cIiBzaXplPVwiMVwiPlxuIjsKcHJpbnQgIiAgICAgICAgICAgICAgPG9w
dGlvbiB2YWx1ZT1cIjEwXCI+IFpvb20gaW4gMTAgdGltZXNcbiI7CnByaW50ICIgICAgICAgICAg
ICAgIDxvcHRpb24gdmFsdWU9XCI4XCI+IFpvb20gaW4gOCB0aW1lc1xuIjsKcHJpbnQgIiAgICAg
ICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjRcIj4gWm9vbSBpbiA0IHRpbWVzXG4iOwpwcmludCAi
ICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiM1wiPiBab29tIGluIDMgdGltZXNcbiI7CnBy
aW50ICIgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIyXCI+IFpvb20gaW4gMiB0aW1lc1xu
IjsKcHJpbnQgIiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjFcIiBzZWxlY3RlZD4gUmVj
ZW50ZXIgTWFwXG4iOwpwcmludCAiICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiLTJcIj4g
Wm9vbSBvdXQgMiB0aW1lc1xuIjsKcHJpbnQgIiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1c
Ii0zXCI+IFpvb20gb3V0IDMgdGltZXNcbiI7CnByaW50ICIgICAgICAgICAgICAgIDxvcHRpb24g
dmFsdWU9XCItNFwiPiBab29tIG91dCA0IHRpbWVzXG4iOwpwcmludCAiICAgICAgICAgICAgICA8
b3B0aW9uIHZhbHVlPVwiLThcIj4gWm9vbSBvdXQgOCB0aW1lc1xuIjsKcHJpbnQgIiAgICAgICAg
ICAgICAgPG9wdGlvbiB2YWx1ZT1cIi0xMFwiPiBab29tIG91dCAxMCB0aW1lc1xuIjsKcHJpbnQg
IiAgICAgICAgICAgIDwvc2VsZWN0PlxuIjsKCnByaW50ICIgICAgICAgICAgICA8aW5wdXQgdHlw
ZT1cInN1Ym1pdFwiIHZhbHVlPVwiU3VibWl0XCI+XG4iOwpwcmludCAiICAgICAgICAgIDwvdGQ+
PC90cj5cbiI7CnByaW50ICIgICAgICAgICAgPHRyPjx0ZD5cbiI7CnByaW50ICIgICAgICAgICAg
ICA8YXBwbGV0IGNvZGViYXNlPVwiL21hcHBpbmcvamF2YS9tYXBwbGV0X3htbFwiIGNvZGU9XCJt
YXBwbGV0X3htbC5jbGFzc1wiIHdpZHRoPVwiMzAwXCIgaGVpZ2h0PVwiNDAwXCIgbmFtZT1cIm1h
cHBsZXRcIiBNQVlTQ1JJUFQ+XG4iOwpwcmludCAiICAgICAgICAgICAgICA8cGFyYW0gbmFtZT1c
ImltYWdlXCIgdmFsdWU9XCJodHRwOi8vdGhvcmVhdS5kbnIuc3RhdGUubW4udXMvdG1wLyIuICRp
bWFnZWZpbGUgLiJcIj5cbiI7CnByaW50ICIgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPVwiaml0
dGVyXCIgdmFsdWU9XCIxMFwiPlxuIjsKcHJpbnQgIiAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9
XCJ0aGlja25lc3NcIiB2YWx1ZT1cIjJcIj5cbiI7CnByaW50ICIgICAgICAgICAgICAgIDxwYXJh
bSBuYW1lPVwiY29sb3JcIiB2YWx1ZT1cInllbGxvd1wiPlxuIjsKaWYoJHVzZXhtbCkgewogIHBy
aW50ICIJICAgICAgICAgICAgIDxwYXJhbSBuYW1lPVwiaW1hZ2VtYXBcIiB2YWx1ZT1cImh0dHA6
Ly90aG9yZWF1LmRuci5zdGF0ZS5tbi51cy90bXAvIi4gJHhtbGZpbGUgLiJcIj5cbiI7Cn0KcHJp
bnQgIgkgICAgICAgICAgICAgPHBhcmFtIG5hbWU9XCJmb250XCIgdmFsdWU9XCJ0aW1lc3JvbWFu
LHBsYWluLDEwXCI+XG4iOwpwcmludCAiCSAgICAgICAgICAgICA8cGFyYW0gbmFtZT1cImZvbnRj
b2xvclwiIHZhbHVlPVwicmVkXCI+XG4iOwpwcmludCAiICAgICAgICAgICAgICA8cGFyYW0gbmFt
ZT1cImJveGJvcmRlcnNpemVcIiB2YWx1ZT1cIjJcIj5cbiI7CnByaW50ICIJICAgICAgICAgICAg
IDxwYXJhbSBuYW1lPVwiYm94aG9yaXpvbnRhbG1hcmdpblwiIHZhbHVlPVwiNFwiPlxuIjsKcHJp
bnQgIiAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9XCJib3h2ZXJ0aWNhbG1hcmdpblwiIHZhbHVl
PVwiNFwiPlxuIjsKcHJpbnQgIiAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9XCJvdXRsaW5lc1wi
IHZhbHVlPVwib25cIj5cbiI7CnByaW50ICIJICAgICAgICAgICAgIDxwYXJhbSBuYW1lPVwib3V0
bGluZWNvbG9yXCIgdmFsdWU9XCIyNTUsMCwwXCI+XG4iOwpwcmludCAiICAgICAgICAgICAgPC9h
cHBsZXQ+XG4iOwpwcmludCAiICAgICAgICAgIDwvdGQ+PC90cj5cbiI7CnByaW50ICIgICAgICA8
L3RhYmxlPlxuIjsKcHJpbnQgIiAgICA8L2Zvcm0+XG4iOwpwcmludCAiICA8L2JvZHk+XG4iOwpw
cmludCAiPC9odG1sPlxuIjsK

--=_124E9B7E.6F0E7509
Content-Type: application/octet-stream; name="mapplet_xml.java"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="mapplet_xml.java"

Ly8KLy8gTWFwcGxldC54bWwgYXBwbGV0IGlzIHBhcnQgb2YgdGhlIE1hcFNlcnZlciBjbGllbnQg
c3VwcG9ydAovLyBwYWNrYWdlLiBSZXF1aXJlcyB0aGUgQWVsZnJlZCBYTUwgcGFyc2VyIHdoaWNo
IGlzIGF2YWlsYmxlCi8vIGZyb20gd3d3Lm9wZW50ZXh0LmNvbS9taWNyb3N0YXIuIC0gU0RMIC0K
Ly8KLy8gUGFyYW10ZXJzOgovLyAgICBjb2xvciBpbnQsIGludCwgaW50IC0gY29sb3IgdG8gdXNl
IChyZ2IpIGZvciB0aGUgc2VsZWN0aW9uIHJlY3RhbmdsZS4KLy8gICAgaml0dGVyIGludCAtIG1p
bmltdW0gc2l6ZSAoaW4gcGl4ZWxzKSBmb3IgYSBkcmFnZ2VkIGJveC4KLy8gICAgaW1hZ2Ugc3Ry
aW5nIC0gdXJsIGZvciB0aGUgaW1hZ2UgdG8gZGlzcGxheSwgbXVzdCBiZSBmdWxseSBxdWFsaWZp
ZWQuCi8vICAgIHRoaWNrbmVzcyBpbnQgLSB0aGlja25lc3MgKGluIHBpeGVscykgb2YgdGhlIGRy
YWdnZWQgYm94LgovLyAgICBib3ggb24vb2ZmIC0gc3RhdHVzIGZvciBib3ggZHJhd2luZywgZGVm
YXVsdCBpcyBvbgovLwovLyBQdWJsaWMgbWV0aG9kczoKLy8gICAgYm94b24gLSB0b2dnbGVzIGJv
eCBkcmF3aW5nIG9uLgovLyAgICBib3hvZmYgLSB0b2dnbGVzIGJveCBkcmF3aW5nIG9mZi4KLy8g
ICAgc3dhcChzdHJpbmcpIC0gZGlzcGxheXMgdGhlIGltYWdlIGxvYWRlZCBmcm9tIHRoZSBwYXNz
ZWQgdXJsLiAKCmltcG9ydCBqYXZhLmFwcGxldC5BcHBsZXQ7CmltcG9ydCBqYXZhLmF3dC4qOwpp
bXBvcnQgamF2YS5hd3QuZXZlbnQuKjsKaW1wb3J0IGphdmEubmV0Lio7CmltcG9ydCBqYXZhLnV0
aWwuKjsKaW1wb3J0IG5ldHNjYXBlLmphdmFzY3JpcHQuKjsKCmltcG9ydCBjb20ubWljcm9zdGFy
LnhtbC5YbWxIYW5kbGVyOwppbXBvcnQgY29tLm1pY3Jvc3Rhci54bWwuWG1sUGFyc2VyOwoKY2xh
c3MgYXJlYSB7CgogICAgLy8gY29uc3RhbnRzCiAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQg
UkVDVCA9IDE7CiAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQgRUxMSVBTRSA9IDI7CiAgICBw
cml2YXRlIGZpbmFsIHN0YXRpYyBpbnQgUE9MWUdPTiA9IDM7CgogICAgLy8gbWVtYmVycwogICAg
cHJpdmF0ZSBpbnQgdHlwZTsKCiAgICBwcml2YXRlIFJlY3RhbmdsZSByZWN0OwogICAgcHJpdmF0
ZSBpbnQgeCwgeSwgYSwgYjsgLy8gcGFyYW1ldGVycyBmb3IgYW4gZWxsaXBzZQogICAgcHJpdmF0
ZSBQb2x5Z29uIHBvbHk7CgogICAgcHVibGljIFVSTCB1cmw9bnVsbDsKICAgIHB1YmxpYyBTdHJp
bmcgdGFyZ2V0PW51bGw7CgogICAgcHVibGljIFN0cmluZyB0ZXh0W10gPSBuZXcgU3RyaW5nWzIw
XTsKICAgIHB1YmxpYyBpbnQgbnVtbGluZXM9MDsKCiAgICBwdWJsaWMgaW50IGJveExlZnQ9MCwg
Ym94VG9wPTAsIGJveFdpZHRoPTAsIGJveEhlaWdodD0wOwoKICAgIC8vIGNvbnN0cnVjdG9ycwog
ICAgcHVibGljIGFyZWEoUmVjdGFuZ2xlIHJlY3QpIHsKCXRoaXMudHlwZSA9IFJFQ1Q7Cgl0aGlz
LnJlY3QgPSByZWN0OwogICAgfQoKICAgIHB1YmxpYyBhcmVhKGludCB4LCBpbnQgeSwgaW50IGEs
IGludCBiKSB7Cgl0aGlzLnR5cGUgPSBFTExJUFNFOwoJdGhpcy54ID0geDsKCXRoaXMueSA9IHk7
Cgl0aGlzLmEgPSBNYXRoLmFicyhhKTsKCXRoaXMuYiA9IE1hdGguYWJzKGIpOwogICAgfQoKICAg
IHB1YmxpYyBhcmVhKFBvbHlnb24gcG9seSkgewoJdGhpcy50eXBlID0gUE9MWUdPTjsKCXRoaXMu
cG9seSA9IHBvbHk7CiAgICB9CgogICAgLy8gbWV0aG9kcyAgIAogICAgcHVibGljIFJlY3Rhbmds
ZSBnZXRSZWN0KCkgewoJaWYodGhpcy50eXBlID09IFJFQ1QpIHJldHVybih0aGlzLnJlY3QpOwkK
CXJldHVybihuZXcgUmVjdGFuZ2xlKCkpOwogICAgfQogICAgCiAgICBwdWJsaWMgUmVjdGFuZ2xl
IGdldEVsbGlwc2UoKSB7CglpZih0aGlzLnR5cGUgPT0gRUxMSVBTRSkgcmV0dXJuKG5ldyBSZWN0
YW5nbGUodGhpcy54IC0gdGhpcy5hLCB0aGlzLnkgLSB0aGlzLmIsIHRoaXMuYSoyLCB0aGlzLmIq
MikpOwoJcmV0dXJuKG5ldyBSZWN0YW5nbGUoKSk7CiAgICB9CgogICAgcHVibGljIFBvbHlnb24g
Z2V0UG9seWdvbigpIHsKCWlmKHRoaXMudHlwZSA9PSBQT0xZR09OKSByZXR1cm4odGhpcy5wb2x5
KTsKCQoJcmV0dXJuKG5ldyBQb2x5Z29uKCkpOwogICAgfQoKICAgIHB1YmxpYyBib29sZWFuIGlz
UmVjdCgpIHsKCWlmKHRoaXMudHlwZSA9PSBSRUNUKSByZXR1cm4odHJ1ZSk7CglyZXR1cm4oZmFs
c2UpOwogICAgfQoKICAgIHB1YmxpYyBib29sZWFuIGlzRWxsaXBzZSgpIHsKCWlmKHRoaXMudHlw
ZSA9PSBFTExJUFNFKSByZXR1cm4odHJ1ZSk7CglyZXR1cm4oZmFsc2UpOwogICAgfQoKICAgIHB1
YmxpYyBib29sZWFuIGlzUG9seWdvbigpIHsKCWlmKHRoaXMudHlwZSA9PSBQT0xZR09OKSByZXR1
cm4odHJ1ZSk7CglyZXR1cm4oZmFsc2UpOwogICAgfQogICAgCiAgICBwdWJsaWMgUmVjdGFuZ2xl
IGdldEJvdW5kcygpIHsKCVJlY3RhbmdsZSByZWN0PW51bGw7CgoJaWYodGhpcy5pc1JlY3QoKSkg
cmVjdCA9IHRoaXMucmVjdDsKCWlmKHRoaXMuaXNFbGxpcHNlKCkpIHJlY3QgPSB0aGlzLmdldEVs
bGlwc2UoKTsKCWlmKHRoaXMuaXNQb2x5Z29uKCkpIHJlY3QgPSB0aGlzLnBvbHkuZ2V0Qm91bmRz
KCk7CgkKCXJldHVybihyZWN0KTsKICAgIH0KCiAgICBwdWJsaWMgUG9pbnQgZ2V0Q2VudHJvaWQo
KSB7CglQb2ludCBwb2ludCA9IG5ldyBQb2ludCgpOwoJUmVjdGFuZ2xlIHJlY3Q9dGhpcy5nZXRC
b3VuZHMoKTsKCQoJcG9pbnQueCA9IHJlY3QueCArIHJlY3Qud2lkdGgvMjsKCXBvaW50LnkgPSBy
ZWN0LnkgKyByZWN0LmhlaWdodC8yOwoKCXJldHVybihwb2ludCk7CiAgICB9CgogICAgcHVibGlj
IGJvb2xlYW4gaW5zaWRlKGludCB4LCBpbnQgeSkgewoJZG91YmxlIHY7CgkKCWlmICh0aGlzLmlz
UmVjdCgpKSByZXR1cm4odGhpcy5yZWN0LmNvbnRhaW5zKHgseSkpOwoKCWlmICh0aGlzLmlzRWxs
aXBzZSgpKSB7CgkgICAgeCAtPSB0aGlzLng7CgkgICAgeSAtPSB0aGlzLnk7CgkgICAgaWYoTWF0
aC5hYnMoeCkgPiB0aGlzLmEgfHwgTWF0aC5hYnMoeSkgPiB0aGlzLmIpCgkJcmV0dXJuKGZhbHNl
KTsKCSAgICB2ID0gKGludCkgKChkb3VibGUpIHRoaXMuYiAqIE1hdGguc3FydCgxLjAgLSAoZG91
YmxlKSAoeCAqIHgpIC8gKGRvdWJsZSkgKHRoaXMuYSAqdGhpcy5hKSkpOwoJICAgIGlmKE1hdGgu
YWJzKHkpIDw9IHYpIAoJCXJldHVybih0cnVlKTsKCX0KCglpZiAodGhpcy5pc1BvbHlnb24oKSkg
cmV0dXJuKHRoaXMucG9seS5jb250YWlucyh4LHkpKTsKCglyZXR1cm4oZmFsc2UpOwogICAgfQoK
ICAgIHB1YmxpYyB2b2lkIHNldFVSTChVUkwgdXJsKSB7Cgl0aGlzLnVybCA9IHVybDsKICAgIH0K
CiAgICBwdWJsaWMgdm9pZCBzZXRVUkwoVVJMIHVybCwgU3RyaW5nIHRhcmdldCkgewoJdGhpcy51
cmwgPSB1cmw7Cgl0aGlzLnRhcmdldCA9IHRhcmdldDsKICAgIH0KCiAgICBwdWJsaWMgdm9pZCBz
ZXRUZXh0KFN0cmluZyB0ZXh0KSB7Cgl0aGlzLnRleHRbdGhpcy5udW1saW5lc10gPSB0ZXh0OwoJ
dGhpcy5udW1saW5lcysrOwogICAgfQoKICAgIHB1YmxpYyB2b2lkIHNldFRleHRCb3hQb3NpdGlv
bihpbnQgeCwgaW50IHkpIHsKCXRoaXMuYm94TGVmdCA9IHg7Cgl0aGlzLmJveFRvcCA9IHk7CiAg
ICB9CgogICAgcHVibGljIHZvaWQgc2V0VGV4dEJveFNpemUoaW50IHcsIGludCBoKSB7Cgl0aGlz
LmJveFdpZHRoID0gdzsKCXRoaXMuYm94SGVpZ2h0ID0gaDsKICAgIH0KfQoKY2xhc3MgZXZhbFRo
cmVhZCBleHRlbmRzIFRocmVhZCB7CiAgICBKU09iamVjdCB0d2luZG93OwogICAgZG91YmxlIHR4
MSwgdHgyLCB0eTEsIHR5MjsKICAgIGJvb2xlYW4gdGRyYXc7CiAgICBTdHJpbmcgdG5hbWU7Cgog
ICAgcHVibGljIGV2YWxUaHJlYWQoSlNPYmplY3Qgd2luZG93LCBTdHJpbmcgbmFtZSwgZG91Ymxl
IHgxLCBkb3VibGUgeTEsIGRvdWJsZSB4MiwgZG91YmxlIHkyLCBib29sZWFuIGRyYXcpIHsKCXR3
aW5kb3cgPSB3aW5kb3c7Cgl0bmFtZSA9IG5hbWU7Cgl0eDEgPSB4MTsKCXR5MSA9IHkxOwoJdHgy
ID0geDI7Cgl0eTIgPSB5MjsKCXRkcmF3ID0gZHJhdzsKICAgIH0KCiAgICBwdWJsaWMgdm9pZCBy
dW4oKSB7Cgl0d2luZG93LmV2YWwoIm1hcHBsZXRfYXBwbHkoJyIgKyB0bmFtZSArICInLCIgKyBN
YXRoLm1pbih0eDEsdHgyKSArICIsIiArIE1hdGgubWluKHR5MSx0eTIpICsgIiwiICsgTWF0aC5t
YXgodHgxLHR4MikgKyAiLCIgKyBNYXRoLm1heCh0eTEsdHkyKSArICIsICIgKyB0ZHJhdyArICIp
OyIpOwogICAgfQp9CgpwdWJsaWMgY2xhc3MgbWFwcGxldF94bWwgZXh0ZW5kcyBBcHBsZXQgaW1w
bGVtZW50cyBNb3VzZUxpc3RlbmVyLCBNb3VzZU1vdGlvbkxpc3RlbmVyLCBYbWxIYW5kbGVyIHsK
ICAgIFN0cmluZyAJbmFtZTsKICAgIGJvb2xlYW4gICAgIGJ1c3k9ZmFsc2UsIGJveD10cnVlLCBp
bml0PXRydWU7CiAgICBJbWFnZSAJaW1nLCBidXN5aW1nPW51bGw7CiAgICBkb3VibGUgICAgICB4
MT0tMSwgeTE9LTEsIHgyPS0xLCB5Mj0tMTsgICAgCiAgICBpbnQJCWppdHRlcj01LCBjdXJzb3Jz
aXplPTQsIHRoaWNrbmVzcz0xOwoKICAgIENvbG9yICAgICAgIGNvbG9yPUNvbG9yLnJlZDsKCiAg
ICBKU09iamVjdCAgCXdpbmRvdzsKCiAgICBJbWFnZSAgICAgICBvZmZTY3JlZW5JbWFnZTsKICAg
IEdyYXBoaWNzIAlvZmZTY3JlZW5HcmFwaGljczsKCiAgICBEaW1lbnNpb24gICBzY3JlZW5TaXpl
OwogICAgCiAgICAvLyBpbWFnZW1hcCBzdHVmZgogICAgWG1sUGFyc2VyICAgcGFyc2VyOwogICAg
U3RyaW5nICAgICAgY3VycmVudFR5cGU9InJlY3RhbmdsZSI7CiAgICBTdHJpbmcgICAgICBjdXJy
ZW50RGF0YT1udWxsOwogICAgU3RyaW5nICAgICAgY3VycmVudENoYXJEYXRhPW51bGw7IC8vIGZv
ciBhbGwgdGFncwoKICAgIGJvb2xlYW4gICAgIGltYWdlTWFwU3RhdHVzPWZhbHNlOwogICAgYXJl
YSAgICAgICAgaW1hZ2VNYXBbXSA9IG5ldyBhcmVhWzEwMDBdOwogICAgCiAgICBpbnQgICAgICAg
ICBudW1BcmVhcz0wOwogICAgaW50ICAgICAgICAgYWN0aXZlQXJlYT0tMTsKCiAgICBib29sZWFu
ICAgICBzaG93T3V0bGluZXM9ZmFsc2U7CiAgICBDb2xvciAgICAgICBvdXRsaW5lQ29sb3I9Q29s
b3IuYmxhY2s7CgogICAgQ29sb3IgICAgICAgdGV4dENvbG9yPUNvbG9yLmJsYWNrOwogICAgU3Ry
aW5nICAgICAgdGV4dE5hbWU9IkRpYWxvZyI7CiAgICBpbnQgICAgICAgICB0ZXh0U3R5bGU9Rm9u
dC5QTEFJTjsKICAgIGludCAgICAgICAgIHRleHRTaXplPTEyOwoKICAgIGludCAgICAgICAgIGJv
eE9mZnNldD01OwogICAgQ29sb3IgICAgICAgYm94Q29sb3I9Q29sb3Iud2hpdGU7CiAgICBpbnQg
ICAgICAgICBib3hCb3JkZXJTaXplPTE7CiAgICBDb2xvciAgICAgICBib3hCb3JkZXJDb2xvcj1D
b2xvci5ibGFjazsKICAgIGludCAgICAgICAgIGJveEhvcml6b250YWxNYXJnaW49MTA7CiAgICBp
bnQgICAgICAgICBib3hWZXJ0aWNhbE1hcmdpbj0xMDsKCiAgICAvLyBmb250IHN0dWZmCiAgICBG
b250IGZvbnQ7CiAgICBpbnQgZm9udEFkdmFuY2UsIGZvbnRBc2NlbnQsIGZvbnRIZWlnaHQ7CiAg
ICBGb250TWV0cmljcyBmb250TWV0cmljczsKCiAgICBwdWJsaWMgdm9pZCBpbml0ICgpIHsKCVN0
cmluZ1Rva2VuaXplciBzdDsKCVN0cmluZyAJcz1udWxsLCB0PW51bGw7CglVUkwgdXJsPW51bGw7
CgoJc2NyZWVuU2l6ZSA9IHRoaXMuZ2V0U2l6ZSgpOyAvLyBuYWIgdGhlIGFwcGxldCBzaXplCgoJ
b2ZmU2NyZWVuSW1hZ2UgPSBjcmVhdGVJbWFnZShzY3JlZW5TaXplLndpZHRoLCBzY3JlZW5TaXpl
LmhlaWdodCk7CglvZmZTY3JlZW5HcmFwaGljcyA9IG9mZlNjcmVlbkltYWdlLmdldEdyYXBoaWNz
KCk7CgkKCS8vIGdldCB0aGUgTmF2aWdhdG9yIHdpbmRvdyBoYW5kbGUKCXdpbmRvdyA9IEpTT2Jq
ZWN0LmdldFdpbmRvdyh0aGlzKTsKCglzID0gZ2V0UGFyYW1ldGVyKCJqaXR0ZXIiKTsKCWlmKHMg
IT0gbnVsbCkKCSAgICBqaXR0ZXIgPSBJbnRlZ2VyLnBhcnNlSW50KHMpOwoJCglzID0gZ2V0UGFy
YW1ldGVyKCJjb2xvciIpOwoJaWYocyAhPSBudWxsKSB7CgkgICAgY29sb3IgPSBnZXRDb2xvclBh
cmFtZXRlcihzKTsKCX0KCQoJcyA9IGdldFBhcmFtZXRlcigidGhpY2tuZXNzIik7CglpZihzICE9
IG51bGwpCgkgICAgdGhpY2tuZXNzID0gSW50ZWdlci5wYXJzZUludChzKTsKCglzID0gZ2V0UGFy
YW1ldGVyKCJjdXJzb3JzaXplIik7CglpZihzICE9IG51bGwpCgkgICAgY3Vyc29yc2l6ZSA9IElu
dGVnZXIucGFyc2VJbnQocyk7CgoJcyA9IGdldFBhcmFtZXRlcigiYnVzeWltYWdlIik7CglpZihz
ICE9IG51bGwpIHsKCSAgICB0cnkgewoJCXVybCA9IG5ldyBVUkwocyk7CgkgICAgfSBjYXRjaChN
YWxmb3JtZWRVUkxFeGNlcHRpb24gZSkgewoJCXdpbmRvdy5ldmFsKCJtYXBwbGV0X2Vycm9yKCci
ICsgbmFtZSArICInLCdBcHBsZXQgZXJyb3IuIE1hbGZvcm1lZCBpbWFnZSBVUkwuJyk7Iik7CgkJ
dGhpcy5zdG9wKCk7CgkgICAgfQoJICAgIGJ1c3lpbWcgPSBnZXRJbWFnZSh1cmwpOwoJfQoKCXMg
PSBnZXRQYXJhbWV0ZXIoImJveCIpOwoJaWYocyAhPSBudWxsKSB7CgkgICAgaWYocy5lcXVhbHNJ
Z25vcmVDYXNlKCJvZmYiKSkgYm94ID0gZmFsc2U7Cgl9CgoJbmFtZSA9IGdldFBhcmFtZXRlcigi
bmFtZSIpOwoKCS8vIG5hYiB0aGUgaW1hZ2UgaXRzZWxmCglzID0gZ2V0UGFyYW1ldGVyKCJpbWFn
ZSIpOwogICAgICAgIHRyeSB7CgkgICAgdXJsID0gbmV3IFVSTChzKTsKCX0gY2F0Y2goTWFsZm9y
bWVkVVJMRXhjZXB0aW9uIGUpIHsgCgkgICAgd2luZG93LmV2YWwoIm1hcHBsZXRfZXJyb3IoJyIg
KyBuYW1lICsgIicsJ0FwcGxldCBlcnJvci4gTWFsZm9ybWVkIGltYWdlIFVSTC4nKTsiKTsKCSAg
ICB0aGlzLnN0b3AoKTsKCX0KCWltZyA9IGdldEltYWdlKHVybCk7CgkKCS8vIGxvYWQgdGhlIGlt
YWdlIG1hcCBYTUwgZmlsZQkKCXMgPSBnZXRQYXJhbWV0ZXIoImltYWdlbWFwIik7CglpZihzICE9
IG51bGwpIHsKCSAgICBwYXJzZXIgPSBuZXcgWG1sUGFyc2VyKCk7CgkgICAgcGFyc2VyLnNldEhh
bmRsZXIodGhpcyk7CgkgICAgCgkgICAgdHJ5IHsKCQlwYXJzZXIucGFyc2UocywgbnVsbCwgKFN0
cmluZykgbnVsbCk7CgkgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsgfQoKCSAgICBpbWFnZU1h
cFN0YXR1cyA9IHRydWU7CgoJICAgIHMgPSBnZXRQYXJhbWV0ZXIoIm91dGxpbmVzIik7CgkgICAg
aWYocyAhPSBudWxsKSB7CgkJaWYgKHMuZXF1YWxzSWdub3JlQ2FzZSgib24iKSkgc2hvd091dGxp
bmVzID0gdHJ1ZTsKCSAgICB9CgoJICAgIHMgPSBnZXRQYXJhbWV0ZXIoIm91dGxpbmVjb2xvciIp
OwoJICAgIGlmKHMgIT0gbnVsbCkgewoJCW91dGxpbmVDb2xvciA9IGdldENvbG9yUGFyYW1ldGVy
KHMpOwoJICAgIH0KCgkgICAgcyA9IGdldFBhcmFtZXRlcigiZm9udCIpOwoJICAgIGlmKHMgIT0g
bnVsbCkgewoJCXN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihzLCAiLCIpOwoJCQoJCS8vIFRleHQg
bmFtZS4KCQl0ID0gc3QubmV4dFRva2VuKCk7CgkJaWYgKHQuZXF1YWxzSWdub3JlQ2FzZSgiQ291
cmllciIpKQoJCSAgICB0ZXh0TmFtZSA9ICJDb3VyaWVyIjsKCQllbHNlIGlmICh0LmVxdWFsc0ln
bm9yZUNhc2UoIkRpYWxvZyIpKQoJCSAgICB0ZXh0TmFtZSA9ICJEaWFsb2ciOwoJCWVsc2UgaWYg
KHQuZXF1YWxzSWdub3JlQ2FzZSgiSGVsdmV0aWNhIikpCgkJICAgIHRleHROYW1lID0gIkhlbHZl
dGljYSI7CgkJZWxzZSBpZiAodC5lcXVhbHNJZ25vcmVDYXNlKCJTeW1ib2wiKSkKCQkgICAgdGV4
dE5hbWUgPSAiU3ltYm9sIjsKCQllbHNlIGlmICh0LmVxdWFsc0lnbm9yZUNhc2UoIlRpbWVzUm9t
YW4iKSkKCQkgICAgdGV4dE5hbWUgPSAiVGltZXNSb21hbiI7CgoJCS8vIFRleHQgc3R5bGUuCgkJ
dCA9IHN0Lm5leHRUb2tlbigpOwoJCWlmICh0LmVxdWFsc0lnbm9yZUNhc2UoInBsYWluIikpCgkJ
ICAgIHRleHRTdHlsZSA9IEZvbnQuUExBSU47CgkJZWxzZSBpZiAodC5lcXVhbHNJZ25vcmVDYXNl
KCJib2xkIikpCgkJICAgIHRleHRTdHlsZSA9IEZvbnQuQk9MRDsKCQllbHNlIGlmICh0LmVxdWFs
c0lnbm9yZUNhc2UoIml0YWxpYyIpKQoJCSAgICB0ZXh0U3R5bGUgPSBGb250LklUQUxJQzsKCQll
bHNlIGlmICh0LmVxdWFsc0lnbm9yZUNhc2UoImJvbGRJdGFsaWMiKSkKCQkgICAgdGV4dFN0eWxl
ID0gRm9udC5CT0xEICsgRm9udC5JVEFMSUM7CgkJCgkJLy8gVGV4dCBzaXplLgoJCXRleHRTaXpl
ID0gSW50ZWdlci5wYXJzZUludChzdC5uZXh0VG9rZW4oKSk7CgkgICAgfQoJICAgIAoJICAgIHMg
PSBnZXRQYXJhbWV0ZXIoImZvbnRzaXplIik7CgkgICAgaWYocyAhPSBudWxsKSB7CgkJdGV4dFNp
emUgPSBJbnRlZ2VyLnBhcnNlSW50KHMpOwoJICAgIH0KCSAgICAKCSAgICAKCSAgICBzID0gZ2V0
UGFyYW1ldGVyKCJmb250Y29sb3IiKTsKCSAgICBpZihzICE9IG51bGwpIHsKCQl0ZXh0Q29sb3Ig
PSBnZXRDb2xvclBhcmFtZXRlcihzKTsKCSAgICB9CgoJICAgIC8vIGJveCBjb25maWd1cmF0aW9u
IHBhcmFtZXRlcnMKCSAgICBzID0gZ2V0UGFyYW1ldGVyKCJib3hjb2xvciIpOwoJICAgIGlmKHMg
IT0gbnVsbCkgewoJCWJveENvbG9yID0gZ2V0Q29sb3JQYXJhbWV0ZXIocyk7CgkgICAgfQoJICAg
IAoJICAgIHMgPSBnZXRQYXJhbWV0ZXIoImJveGJvcmRlcmNvbG9yIik7CgkgICAgaWYocyAhPSBu
dWxsKSB7CgkJYm94Qm9yZGVyQ29sb3IgPSBnZXRDb2xvclBhcmFtZXRlcihzKTsKCSAgICB9CgoJ
ICAgIHMgPSBnZXRQYXJhbWV0ZXIoImJveGJvcmRlcnNpemUiKTsKCSAgICBpZihzICE9IG51bGwp
CgkJYm94Qm9yZGVyU2l6ZSA9IEludGVnZXIucGFyc2VJbnQocyk7CgoJICAgIHMgPSBnZXRQYXJh
bWV0ZXIoImJveG9mZnNldCIpOwoJICAgIGlmKHMgIT0gbnVsbCkKCQlib3hPZmZzZXQgPSBJbnRl
Z2VyLnBhcnNlSW50KHMpOwoKCSAgICBzID0gZ2V0UGFyYW1ldGVyKCJib3hob3Jpem9udGFsbWFy
Z2luIik7CgkgICAgaWYocyAhPSBudWxsKQoJCWJveEhvcml6b250YWxNYXJnaW4gPSBJbnRlZ2Vy
LnBhcnNlSW50KHMpOwoKCSAgICBzID0gZ2V0UGFyYW1ldGVyKCJib3h2ZXJ0aWNhbG1hcmdpbiIp
OwoJICAgIGlmKHMgIT0gbnVsbCkKCQlib3hWZXJ0aWNhbE1hcmdpbiA9IEludGVnZXIucGFyc2VJ
bnQocyk7CgoJICAgIC8vIGZvbnQgc2V0dXAKCSAgICBHcmFwaGljcyBnID0gZ2V0R3JhcGhpY3Mo
KTsKCSAgICBnLnNldEZvbnQoZm9udCA9IG5ldyBGb250KHRleHROYW1lLCB0ZXh0U3R5bGUsIHRl
eHRTaXplKSk7CgkgICAgZm9udE1ldHJpY3MgPSBnLmdldEZvbnRNZXRyaWNzKCk7CgkgICAgZm9u
dEFkdmFuY2UgPSBmb250TWV0cmljcy5nZXRNYXhBZHZhbmNlKCk7CgkgICAgZm9udEFzY2VudCA9
IGZvbnRNZXRyaWNzLmdldE1heEFzY2VudCgpOwoJICAgIGZvbnRIZWlnaHQgPSBmb250TWV0cmlj
cy5nZXRIZWlnaHQoKTsKCSAgICAKCSAgICBzZXRUZXh0Qm94ZXMoKTsKCX0JCgoJLy8gd2Ugd2Fu
dCBtb3VzZSBldmVudHMgYW5kIG1vdXNlIG1vdmVtZW50IGV2ZW50cwoJYWRkTW91c2VMaXN0ZW5l
cih0aGlzKTsKCWFkZE1vdXNlTW90aW9uTGlzdGVuZXIodGhpcyk7CiAgICB9CgogICAgcHJpdmF0
ZSB2b2lkIHNldFRleHRCb3hlcygpIHsKCWludCBpLCBqOwoJaW50IHdpZHRoLCBtYXh3aWR0aDsK
CVBvaW50IHBvaW50OwoJaW50IHg9MCwgeT0wOwoJUmVjdGFuZ2xlIHJlY3QgPSBuZXcgUmVjdGFu
Z2xlKHNjcmVlblNpemUpOwoKCVN5c3RlbS5vdXQucHJpbnRsbihyZWN0LnRvU3RyaW5nKCkpOwoK
CWZvcihpPTA7IGk8bnVtQXJlYXM7IGkrKykgewoJICAgIG1heHdpZHRoPTA7CgkgICAgCgkgICAg
Ly8gc2V0IGJveCBzaXplCgkgICAgZm9yKGo9MDsgajxpbWFnZU1hcFtpXS5udW1saW5lczsgaisr
KSB7CgkJd2lkdGggPSBmb250TWV0cmljcy5zdHJpbmdXaWR0aChpbWFnZU1hcFtpXS50ZXh0W2pd
KTsKCQlpZih3aWR0aCA+IG1heHdpZHRoKSBtYXh3aWR0aCA9IHdpZHRoOwoJICAgIH0KCgkgICAg
aW1hZ2VNYXBbaV0uc2V0VGV4dEJveFNpemUobWF4d2lkdGggKyAyKmJveEhvcml6b250YWxNYXJn
aW4sIGltYWdlTWFwW2ldLm51bWxpbmVzKmZvbnRIZWlnaHQgKyAyKmJveFZlcnRpY2FsTWFyZ2lu
KTsKCgkgICAgLy8gc2V0IGJveCBwb3NpdGlvbgoJICAgIHBvaW50ID0gaW1hZ2VNYXBbaV0uZ2V0
Q2VudHJvaWQoKTsKCgkgICAgLy8gc3RlcCB0aHJvdWdoIHRoZSBwb3NzaWJsZSBwb3NpdGlvbnMs
IGNoZWNraW5nIGZvciBvdmVybGFwIHdpdGggdGhlIAoJICAgIGZvcihqPTA7IGo8NjsgaisrKSB7
CgkJaWYoaiA9PSAwKSB7IC8vIHVsCgkJICAgIHggPSBwb2ludC54IC0gaW1hZ2VNYXBbaV0uYm94
V2lkdGggLSBib3hPZmZzZXQ7CgkJICAgIHkgPSBwb2ludC55IC0gaW1hZ2VNYXBbaV0uYm94SGVp
Z2h0IC0gYm94T2Zmc2V0OwoJCX0gZWxzZSBpZihqID09IDEpIHsgLy8gbHIgCgkJICAgIHggPSBw
b2ludC54ICsgYm94T2Zmc2V0OwoJCSAgICB5ID0gcG9pbnQueSArIGJveE9mZnNldDsKCQl9IGVs
c2UgaWYoaiA9PSAyKSB7IC8vIGxsIAoJCSAgICB4ID0gcG9pbnQueCAtIGltYWdlTWFwW2ldLmJv
eFdpZHRoIC0gYm94T2Zmc2V0OwoJCSAgICB5ID0gcG9pbnQueSArIGJveE9mZnNldDsKCQl9IGVs
c2UgaWYoaiA9PSAzKSB7IC8vIHVyIAoJCSAgICB4ID0gcG9pbnQueCArIGJveE9mZnNldDsKCQkg
ICAgeSA9IHBvaW50LnkgLSBpbWFnZU1hcFtpXS5ib3hIZWlnaHQgLSBib3hPZmZzZXQ7CgkJfSBl
bHNlIGlmKGogPT0gNCkgeyAvLyB1YwoJCSAgICB4ID0gKGludCkgKHBvaW50LnggLSBNYXRoLnJv
dW5kKGltYWdlTWFwW2ldLmJveFdpZHRoLzIuMCkpOwoJCSAgICB5ID0gcG9pbnQueSAtIGltYWdl
TWFwW2ldLmJveEhlaWdodCAtIGJveE9mZnNldDsKCQl9IGVsc2UgaWYoaiA9PSA1KSB7IC8vIGxj
IAoJCSAgICB4ID0gKGludCkgKHBvaW50LnggLSBNYXRoLnJvdW5kKGltYWdlTWFwW2ldLmJveFdp
ZHRoLzIuMCkpOwoJCSAgICB5ID0gcG9pbnQueSArIGJveE9mZnNldDsKCQl9CgkJCgkJLy8gY2hl
Y2sgdGV4dCBib3ggYWdhaW5zdCB0aGUgaW1hZ2UKCQlpZighcmVjdC5jb250YWlucyh4LCB5KSkg
Y29udGludWU7CgkJaWYoIXJlY3QuY29udGFpbnMoeCArIGltYWdlTWFwW2ldLmJveFdpZHRoLCB5
KSkgY29udGludWU7CgkJaWYoIXJlY3QuY29udGFpbnMoeCArIGltYWdlTWFwW2ldLmJveFdpZHRo
LCB5ICsgaW1hZ2VNYXBbaV0uYm94SGVpZ2h0KSkgY29udGludWU7CgkJaWYoIXJlY3QuY29udGFp
bnMoeCwgeSArIGltYWdlTWFwW2ldLmJveEhlaWdodCkpIGNvbnRpbnVlOwoKCQlicmVhazsKCSAg
ICB9CgkgICAgCSAgICAKCSAgICBpbWFnZU1hcFtpXS5zZXRUZXh0Qm94UG9zaXRpb24oeCwgeSk7
Cgl9CiAgICB9CgogICAgcHJpdmF0ZSBDb2xvciBnZXRDb2xvclBhcmFtZXRlcihTdHJpbmcgcykg
ewoJU3RyaW5nVG9rZW5pemVyIHN0OwoJaW50IHIsIGcsIGI7CgkKCS8vIGNoZWNrIGlmIGEgcHJl
LWRlZmluZWQgY29sb3IgaXMgc3BlY2lmaWVkCQoJaWYgKHMuZXF1YWxzSWdub3JlQ2FzZSgiYmxh
Y2siKSkKCSAgICByZXR1cm4oQ29sb3IuYmxhY2spOwoJaWYgKHMuZXF1YWxzSWdub3JlQ2FzZSgi
Ymx1ZSIpKQoJICAgIHJldHVybihDb2xvci5ibHVlKTsKCWlmIChzLmVxdWFsc0lnbm9yZUNhc2Uo
ImN5YW4iKSkKCSAgICByZXR1cm4oQ29sb3IuY3lhbik7CglpZiAocy5lcXVhbHNJZ25vcmVDYXNl
KCJkYXJrR3JheSIpKQoJICAgIHJldHVybihDb2xvci5kYXJrR3JheSk7CglpZiAocy5lcXVhbHNJ
Z25vcmVDYXNlKCJncmF5IikpCgkgICAgcmV0dXJuKENvbG9yLmdyYXkpOwoJaWYgKHMuZXF1YWxz
SWdub3JlQ2FzZSgiZ3JlZW4iKSkKCSAgICByZXR1cm4oQ29sb3IuZ3JlZW4pOwoJaWYgKHMuZXF1
YWxzSWdub3JlQ2FzZSgibGlnaHRHcmF5IikpCgkgICAgcmV0dXJuKENvbG9yLmxpZ2h0R3JheSk7
CglpZiAocy5lcXVhbHNJZ25vcmVDYXNlKCJtYWdlbnRhIikpCgkgICAgcmV0dXJuKENvbG9yLm1h
Z2VudGEpOwoJaWYgKHMuZXF1YWxzSWdub3JlQ2FzZSgib3JhbmdlIikpCgkgICAgcmV0dXJuKENv
bG9yLm9yYW5nZSk7CglpZiAocy5lcXVhbHNJZ25vcmVDYXNlKCJwaW5rIikpCgkgICAgcmV0dXJu
KENvbG9yLnBpbmspOwoJaWYgKHMuZXF1YWxzSWdub3JlQ2FzZSgicmVkIikpCgkgICAgcmV0dXJu
KENvbG9yLnJlZCk7CglpZiAocy5lcXVhbHNJZ25vcmVDYXNlKCJ3aGl0ZSIpKQoJICAgIHJldHVy
bihDb2xvci53aGl0ZSk7CglpZiAocy5lcXVhbHNJZ25vcmVDYXNlKCJ5ZWxsb3ciKSkKCSAgICBy
ZXR1cm4oQ29sb3IueWVsbG93KTsKCgkvLyBub3BlLCBtdXN0IGJlIGFuIFJHQiB0cmlwbGV0Cglz
dCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIocywgIiwiKTsKCXIgPSBJbnRlZ2VyLnBhcnNlSW50KHN0
Lm5leHRUb2tlbigpKTsKCWcgPSBJbnRlZ2VyLnBhcnNlSW50KHN0Lm5leHRUb2tlbigpKTsKCWIg
PSBJbnRlZ2VyLnBhcnNlSW50KHN0Lm5leHRUb2tlbigpKTsKCXJldHVybihuZXcgQ29sb3Iocixn
LGIpKTsKICB9CgogICAgcHVibGljIHZvaWQgYm94b24gKCkgewoJYm94ID0gdHJ1ZTsKCXJldHVy
bjsKICAgIH0KICAgIAogICAgcHVibGljIHZvaWQgYm94b2ZmICgpIHsKCWJveCA9IGZhbHNlOwoJ
eDIgPSB4MTsgLy8gY29sbGFwc2UKCXkyID0geTE7CgkKCXJlcGFpbnQoKTsKCgluZXcgZXZhbFRo
cmVhZCh3aW5kb3csIG5hbWUsIHgxLCB5MSwgeDIsIHkyLCBmYWxzZSkuc3RhcnQoKTsKCQoJcmV0
dXJuOwogICAgfQogICAgCiAgICBwdWJsaWMgdm9pZCBzd2FwKFN0cmluZyBzKSB7CglVUkwgdXJs
PW51bGw7CglNZWRpYVRyYWNrZXIgdHJhY2tlciA9IG5ldyBNZWRpYVRyYWNrZXIodGhpcyk7CgkK
CWJ1c3kgPSB0cnVlOwoKCS8vIHJlaW5pdGlhbGl6ZSB0aGUgY3Vyc29yIHBvc2l0aW9uCgl4MSA9
IHgyID0gKHNjcmVlblNpemUud2lkdGgtMSkvMi4wOwoJeTEgPSB5MiA9IChzY3JlZW5TaXplLmhl
aWdodC0xKS8yLjA7CgkKCWlmKGJ1c3lpbWcgIT0gbnVsbCkKCSAgICByZXBhaW50KCk7IC8vIHNo
b3cgYnVzeSBpbWFnZQoKCS8vIGltZy5mbHVzaCgpOwoJICAgCgl0cnkgewoJICAgIHVybCA9IG5l
dyBVUkwocyk7Cgl9IGNhdGNoKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKSB7CgkgICAgcmV0dXJu
OwoJfQoJCglpbWcgPSBnZXRJbWFnZSh1cmwpOwoJdHJhY2tlci5hZGRJbWFnZShpbWcsIDApOwoK
CXRyeSB7IAoJICB0cmFja2VyLndhaXRGb3JJRCgwKTsgLy8gd2FpdCB0aWxsIGl0IGxvYWRzCgl9
IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7CgkgIHJldHVybjsKCX0KCQoJYnVzeSA9
IGZhbHNlOwoJCiAgICAgICAgcmVwYWludCgpOwoKCW5ldyBldmFsVGhyZWFkKHdpbmRvdywgbmFt
ZSwgeDEsIHkxLCB4MiwgeTIsIGZhbHNlKS5zdGFydCgpOwoKCXJldHVybjsKICAgIH0KCiAgICAv
LwogICAgLy8gWE1MIGV2ZW50IGhhbmRsZXJzCiAgICAvLwogICAgcHVibGljIHZvaWQgc3RhcnRE
b2N1bWVudCgpIHsgfQogICAgcHVibGljIHZvaWQgZW5kRG9jdW1lbnQoKSB7IH0KICAgIHB1Ymxp
YyB2b2lkIHN0YXJ0RWxlbWVudChTdHJpbmcgbmFtZSkgeyAKCVN0cmluZ1Rva2VuaXplciBzdDsK
CWludCB4MSwgeTEsIHgyLCB5MjsKCWludCB4LCB5LCBhLCBiOwoJUG9seWdvbiBwb2x5OwoKCWlm
KG5hbWUuZXF1YWxzSWdub3JlQ2FzZSgiYXJlYSIpKSB7CgkgICAgc3QgPSBuZXcgU3RyaW5nVG9r
ZW5pemVyKGN1cnJlbnREYXRhLCAiLCIpOwoJICAgIGlmKGN1cnJlbnRUeXBlLmVxdWFsc0lnbm9y
ZUNhc2UoInJlY3RhbmdsZSIpKSB7CgkJeDEgPSBJbnRlZ2VyLnBhcnNlSW50KHN0Lm5leHRUb2tl
bigpKTsKCQl5MSA9IEludGVnZXIucGFyc2VJbnQoc3QubmV4dFRva2VuKCkpOwoJCXgyID0gSW50
ZWdlci5wYXJzZUludChzdC5uZXh0VG9rZW4oKSk7CgkJeTIgPSBJbnRlZ2VyLnBhcnNlSW50KHN0
Lm5leHRUb2tlbigpKTsKCQlpbWFnZU1hcFtudW1BcmVhc10gPSBuZXcgYXJlYShuZXcgUmVjdGFu
Z2xlKHgxLCB5MSwgeDIteDEsIHkyLXkxKSk7CgkgICAgfSBlbHNlIGlmKGN1cnJlbnRUeXBlLmVx
dWFsc0lnbm9yZUNhc2UoImNpcmNsZSIpKSB7CgkJeCA9IEludGVnZXIucGFyc2VJbnQoc3QubmV4
dFRva2VuKCkpOwoJCXkgPSBJbnRlZ2VyLnBhcnNlSW50KHN0Lm5leHRUb2tlbigpKTsKCSAgICAg
ICAgYSA9IEludGVnZXIucGFyc2VJbnQoc3QubmV4dFRva2VuKCkpOwoJCWltYWdlTWFwW251bUFy
ZWFzXSA9IG5ldyBhcmVhKHgsIHksIGEsIGEpOwoJICAgIH0gZWxzZSBpZihjdXJyZW50VHlwZS5l
cXVhbHNJZ25vcmVDYXNlKCJlbGxpcHNlIikpIHsKCQl4ID0gSW50ZWdlci5wYXJzZUludChzdC5u
ZXh0VG9rZW4oKSk7CgkJeSA9IEludGVnZXIucGFyc2VJbnQoc3QubmV4dFRva2VuKCkpOwoJICAg
ICAgICBhID0gSW50ZWdlci5wYXJzZUludChzdC5uZXh0VG9rZW4oKSk7CgkJYiA9IEludGVnZXIu
cGFyc2VJbnQoc3QubmV4dFRva2VuKCkpOwoJCWltYWdlTWFwW251bUFyZWFzXSA9IG5ldyBhcmVh
KHgsIHksIGEsIGIpOwoJICAgIH0gZWxzZSBpZihjdXJyZW50VHlwZS5lcXVhbHNJZ25vcmVDYXNl
KCJwb2x5Z29uIikpIHsKCQlwb2x5ID0gbmV3IFBvbHlnb24oKTsKCQl3aGlsZShzdC5oYXNNb3Jl
VG9rZW5zKCkpIHsKCQkgICAgeCA9IEludGVnZXIucGFyc2VJbnQoc3QubmV4dFRva2VuKCkpOwoJ
CSAgICB5ID0gSW50ZWdlci5wYXJzZUludChzdC5uZXh0VG9rZW4oKSk7CgkJICAgIHBvbHkuYWRk
UG9pbnQoeCwgeSk7CgkJfQoJCWltYWdlTWFwW251bUFyZWFzXSA9IG5ldyBhcmVhKHBvbHkpOwoJ
ICAgIH0KCSAgICBudW1BcmVhcysrOwoJICAgIAoJICAgIGN1cnJlbnRUeXBlID0gInJlY3Rhbmds
ZSI7IC8vIHJlc2V0CgkgICAgY3VycmVudERhdGEgPSBudWxsOwoJfQogICAgfQogICAgcHVibGlj
IHZvaWQgZW5kRWxlbWVudChTdHJpbmcgbmFtZSkgewkKCVVSTCB1cmw9bnVsbDsKCglpZihuYW1l
LmVxdWFsc0lnbm9yZUNhc2UoInRleHQiKSkgewoJICAgIGltYWdlTWFwW251bUFyZWFzLTFdLnNl
dFRleHQoY3VycmVudENoYXJEYXRhKTsKCX0gZWxzZSBpZihuYW1lLmVxdWFsc0lnbm9yZUNhc2Uo
InVybCIpKSB7CgkgICAgdHJ5IHsKCQl1cmwgPSBuZXcgVVJMKGN1cnJlbnRDaGFyRGF0YSk7Cgkg
ICAgfSBjYXRjaChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkgeyAKCQl3aW5kb3cuZXZhbCgibWFw
cGxldF9lcnJvcignIiArIG5hbWUgKyAiJywnQXBwbGV0IGVycm9yLiBNYWxmb3JtZWQgaW1hZ2Vt
YXAgVVJMLicpOyIpOwoJCXRoaXMuc3RvcCgpOwoJICAgIH0KCSAgICBpbWFnZU1hcFtudW1BcmVh
cy0xXS5zZXRVUkwodXJsKTsKCX0KICAgIH0KICAgIHB1YmxpYyB2b2lkIGlnbm9yYWJsZVdoaXRl
c3BhY2UoY2hhciBjaFtdLCBpbnQgc3RhcnQsIGludCBsZW5ndGgpIHsgfQogICAgcHVibGljIHZv
aWQgY2hhckRhdGEoY2hhciBjaFtdLCBpbnQgc3RhcnQsIGludCBsZW5ndGgpIHsgCgljdXJyZW50
Q2hhckRhdGEgPSBuZXcgU3RyaW5nKGNoLCBzdGFydCwgbGVuZ3RoKTsKICAgIH0KICAgIHB1Ymxp
YyB2b2lkIGF0dHJpYnV0ZShTdHJpbmcgbmFtZSwgU3RyaW5nIHZhbHVlLCBib29sZWFuIGlzU3Bl
Y2lmaWVkKSB7IAoJaWYobmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJ0eXBlIikpCgkgICAgY3VycmVu
dFR5cGUgPSB2YWx1ZTsKCWVsc2UgaWYobmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJkYXRhIikpCgkg
ICAgY3VycmVudERhdGEgPSB2YWx1ZTsKICAgIH0KICAgIHB1YmxpYyBPYmplY3QgcmVzb2x2ZUVu
dGl0eShTdHJpbmcgcHVibGljSWQsIFN0cmluZyBzeXN0ZW1JZCkgeyByZXR1cm4gbnVsbDsgfQog
ICAgcHVibGljIHZvaWQgc3RhcnRFeHRlcm5hbEVudGl0eShTdHJpbmcgc3lzdGVtSWQpIHsgfQog
ICAgcHVibGljIHZvaWQgZW5kRXh0ZXJuYWxFbnRpdHkoU3RyaW5nIHN5c3RlbUlkKSB7IH0KICAg
IHB1YmxpYyB2b2lkIGRvY3R5cGVEZWNsKFN0cmluZyBuYW1lLCBTdHJpbmcgcHViaWQsIFN0cmlu
ZyBzeXNpZCkgeyB9CiAgICBwdWJsaWMgdm9pZCBwcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oU3RyaW5n
IHRhcmdldCwgU3RyaW5nIGRhdGEpIHsgfQogICAgcHVibGljIHZvaWQgZXJyb3IoU3RyaW5nIG1l
c3NhZ2UsIFN0cmluZyB1cmwsIGludCBsaW5lLCBpbnQgY29sdW1uKSB7IAoJd2luZG93LmV2YWwo
Im1hcHBsZXRfZXJyb3IoJyIgKyBuYW1lICsgIicsJ0FwcGxldCBlcnJvci4gIiArIG1lc3NhZ2Ug
KyAiIGF0ICIgKyB1cmwudG9TdHJpbmcoKSArICI6IGxpbmUgIiArIGxpbmUgKyAiIGNvbHVtbiAi
ICsgY29sdW1uICsgIik7Iik7Cgl0aGlzLnN0b3AoKTsKICAgIH0KCiAgICAvLwogICAgLy8gTW91
c2UgZXZlbnQgaGFuZGxlcnMKICAgIC8vCiAgICBwdWJsaWMgdm9pZCBtb3VzZUNsaWNrZWQoTW91
c2VFdmVudCBlKSB7IH0KICAgIHB1YmxpYyB2b2lkIG1vdXNlRW50ZXJlZChNb3VzZUV2ZW50IGUp
IHsgfQoKICAgIHB1YmxpYyB2b2lkIG1vdXNlRXhpdGVkKE1vdXNlRXZlbnQgZSkgeyAKCWlmKHZl
cmJvc2UpIHdpbmRvdy5ldmFsKCJqYXZhc2NyaXB0Om1hcHBsZXRfbW91c2VfZXhpdGVkKCciICsg
bmFtZSArICInKTsiKTsKCWFjdGl2ZUFyZWEgPSAtMTsKCXJlcGFpbnQoKTsKICAgIH0KCiAgICBw
dWJsaWMgdm9pZCBtb3VzZU1vdmVkKE1vdXNlRXZlbnQgZSkgewoJaW50IGxhc3RBcmVhID0gYWN0
aXZlQXJlYTsKCWludCBpOwoKICAgICAgICBpZih2ZXJib3NlKSB3aW5kb3cuZXZhbCgiamF2YXNj
cmlwdDptYXBwbGV0X21vdXNlX21vdmVkKCciICsgbmFtZSArICInLCIgKyBlLmdldFgoKSArICIs
IiArIGUuZ2V0WSgpICsgIik7Iik7CgoJaWYoaW1hZ2VNYXBTdGF0dXMpIHsKCSAgICBhY3RpdmVB
cmVhID0gLTE7CgkgICAgZm9yKGk9MDsgaTxudW1BcmVhczsgaSsrKSB7CgkJaWYoaW1hZ2VNYXBb
aV0uaW5zaWRlKCBlLmdldFgoKSwgIGUuZ2V0WSgpKSkgCgkJICAgIGFjdGl2ZUFyZWEgPSBpOwoJ
ICAgIH0KCSAgICAKCSAgICBpZihhY3RpdmVBcmVhICE9IGxhc3RBcmVhKSByZXBhaW50KCk7Cgl9
CiAgICB9CgogICAgcHVibGljIHZvaWQgbW91c2VQcmVzc2VkKE1vdXNlRXZlbnQgZSkgewoJeDEg
PSB4MiA9IGUuZ2V0WCgpOwoJeTEgPSB5MiA9IGUuZ2V0WSgpOwogICAgfQoKICAgIHB1YmxpYyB2
b2lkIG1vdXNlRHJhZ2dlZChNb3VzZUV2ZW50IGUpIHsKCWFjdGl2ZUFyZWEgPSAtMTsKCgl4MiA9
IGUuZ2V0WCgpOwoJeTIgPSBlLmdldFkoKTsKCWlmKCFib3gpIHsKCSAgICB4MSA9IHgyOwoJICAg
IHkxID0geTI7CSAgICAKCX0KCXJlcGFpbnQoKTsKICAgIH0KCiAgICBwdWJsaWMgdm9pZCBtb3Vz
ZVJlbGVhc2VkKE1vdXNlRXZlbnQgZSkgeyAJCgkKCWlmKGJveCkgewoJICAgIHgyID0gZS5nZXRY
KCk7CgkgICAgeTIgPSBlLmdldFkoKTsKCSAgICBpZiAoIHgyID4gc2NyZWVuU2l6ZS53aWR0aCkg
eyB4MiA9IHNjcmVlblNpemUud2lkdGgtMTsgfSAKCSAgICBpZiAoIHgyIDwgMCApIHsgeDIgPSAw
OyB9IAoJICAgIGlmICggeTIgPiBzY3JlZW5TaXplLmhlaWdodCkgeyB5MiA9IHNjcmVlblNpemUu
aGVpZ2h0LTE7IH0gCgkgICAgaWYgKCB5MiA8IDAgKSB7IHkyID0gMDsgfSAKCSAgICAKCSAgICAv
LyBjaGVjayB0byBzZWUgaWYgKHgyLHkyKSBmb3JtcyBhIGxhcmdlIGVub3VnaCByZWN0YW5nbGUK
CSAgICAvLyB0byBiZSBjb25zaWRlcmVkIGEgbmV3IGV4dGVudCBvciBpZiB0aGUgdXNlciBpcyBq
dXN0IGEKCSAgICAvLyBwb29yIG1vdXNlIGNsaWtja2VyCgkgICAgaWYoKE1hdGguYWJzKHgxLXgy
KSA8PSBqaXR0ZXIpIHx8IChNYXRoLmFicyh5MS15MikgPD0gaml0dGVyKSkgewoJCXgyID0geDE7
CgkJeTIgPSB5MTsKCSAgICB9Cgl9IGVsc2UgewoJICAgIHgyID0geDE7CgkgICAgeTIgPSB5MTsK
CX0KCQoJcmVwYWludCgpOwoKCS8vIHRoaXMgYSB0aW1lIGZvciBhIHJlLWRyYXcgaWYgdGhlIGFw
cGxpY2F0aW9uIHNvIGNob29zZXMKCWlmKCFidXN5KQoJICAgIG5ldyBldmFsVGhyZWFkKHdpbmRv
dywgbmFtZSwgeDEsIHkxLCB4MiwgeTIsIHRydWUpLnN0YXJ0KCk7CiAgICB9CiAgICAKICAgIHB1
YmxpYyB2b2lkIHBhaW50KEdyYXBoaWNzIGcpIHsKCWludCBpOwoJaW50IHgsIHksIHcsIGg7CglS
ZWN0YW5nbGUgcmVjdDsKCVBvbHlnb24gcG9seTsKCgkvLyBkcmF3IHRoZSBpbWFnZQoJb2ZmU2Ny
ZWVuR3JhcGhpY3MuZHJhd0ltYWdlKGltZywwLDAsdGhpcyk7CQoJCgkvLyBkcmF3IHRoZSB1c2Vy
IGRlZmluZWQgcmVjdGFuZ2xlIG9yIGNyb3NzaGFpcgoJb2ZmU2NyZWVuR3JhcGhpY3Muc2V0Q29s
b3IoY29sb3IpOwoJaWYoKHgxPT14MikgJiYgKHkxPT15MikpIHsKCSAgICBpZihjdXJzb3JzaXpl
ID4gMCkgewoJICAgICAgb2ZmU2NyZWVuR3JhcGhpY3MuZHJhd0xpbmUoKGludCkoeDItY3Vyc29y
c2l6ZSksIChpbnQpeTIsIChpbnQpKHgyK2N1cnNvcnNpemUpLCAoaW50KXkyKTsKCSAgICAgIG9m
ZlNjcmVlbkdyYXBoaWNzLmRyYXdMaW5lKChpbnQpeDIsIChpbnQpKHkyLWN1cnNvcnNpemUpLCAo
aW50KXgyLCAoaW50KSh5MitjdXJzb3JzaXplKSk7CgkgICAgfQoJfSBlbHNlIHsKCSAgICB4ID0g
KGludClNYXRoLm1pbih4MSx4Mik7CgkgICAgeSA9IChpbnQpTWF0aC5taW4oeTEseTIpOwoJICAg
IHcgPSAoaW50KU1hdGguYWJzKHgxLXgyKTsKCSAgICBoID0gKGludClNYXRoLmFicyh5MS15Mik7
CgkgICAgCgkgICAgZm9yKGk9MDsgaTx0aGlja25lc3M7IGkrKykKCQlvZmZTY3JlZW5HcmFwaGlj
cy5kcmF3UmVjdCh4K2ksIHkraSwgdy0oMippKSwgaC0oMippKSk7Cgl9CgkKCWlmKGJ1c3kgJiYg
YnVzeWltZyAhPSBudWxsKSB7CgkgICAgeCA9IHNjcmVlblNpemUud2lkdGgvMiAtIGJ1c3lpbWcu
Z2V0V2lkdGgodGhpcykvMjsKCSAgICB5ID0gc2NyZWVuU2l6ZS5oZWlnaHQvMiAtIGJ1c3lpbWcu
Z2V0SGVpZ2h0KHRoaXMpLzI7CgkgICAgb2ZmU2NyZWVuR3JhcGhpY3MuZHJhd0ltYWdlKGJ1c3lp
bWcseCx5LHRoaXMpOwoJfQoKCS8vIGRpc3BsYXkgaW1hZ2VtYXAgYXJlYSBpbmZvcm1hdGlvbiBp
ZiB0aGVyZSBpcyBhIGN1cnJlbnQgb25lCglpZihpbWFnZU1hcFN0YXR1cyAmJiBhY3RpdmVBcmVh
ID49IDApIHsKCgkgICAgLy8gdGhlIGFjdGl2ZSBvdXRsaW5lCgkgICAgaWYoc2hvd091dGxpbmVz
KSB7CgkJb2ZmU2NyZWVuR3JhcGhpY3Muc2V0Q29sb3Iob3V0bGluZUNvbG9yKTsKCQlpZihpbWFn
ZU1hcFthY3RpdmVBcmVhXS5pc1JlY3QoKSkgewoJCSAgICByZWN0ID0gaW1hZ2VNYXBbYWN0aXZl
QXJlYV0uZ2V0UmVjdCgpOwoJCSAgICBvZmZTY3JlZW5HcmFwaGljcy5kcmF3UmVjdChyZWN0Lngs
IHJlY3QueSwgcmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpOwoJCX0gZWxzZSBpZihpbWFnZU1hcFth
Y3RpdmVBcmVhXS5pc0VsbGlwc2UoKSkgewoJCSAgICByZWN0ID0gaW1hZ2VNYXBbYWN0aXZlQXJl
YV0uZ2V0RWxsaXBzZSgpOwoJCSAgICBvZmZTY3JlZW5HcmFwaGljcy5kcmF3T3ZhbChyZWN0Lngs
IHJlY3QueSwgcmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpOwoJCX0gZWxzZSBpZihpbWFnZU1hcFth
Y3RpdmVBcmVhXS5pc1BvbHlnb24oKSkgewoJCSAgICBwb2x5ID0gaW1hZ2VNYXBbYWN0aXZlQXJl
YV0uZ2V0UG9seWdvbigpOwoJCSAgICBvZmZTY3JlZW5HcmFwaGljcy5kcmF3UG9seWdvbihwb2x5
KTsKCQl9CgkgICAgfQoKCSAgICAvLyB0aGUgYmFja2dyb3VuZCBib3gKCSAgICBvZmZTY3JlZW5H
cmFwaGljcy5zZXRDb2xvcihib3hCb3JkZXJDb2xvcik7CgkgICAgb2ZmU2NyZWVuR3JhcGhpY3Mu
ZmlsbFJlY3QoaW1hZ2VNYXBbYWN0aXZlQXJlYV0uYm94TGVmdCwgaW1hZ2VNYXBbYWN0aXZlQXJl
YV0uYm94VG9wLCBpbWFnZU1hcFthY3RpdmVBcmVhXS5ib3hXaWR0aCwgaW1hZ2VNYXBbYWN0aXZl
QXJlYV0uYm94SGVpZ2h0KTsKCSAgICBvZmZTY3JlZW5HcmFwaGljcy5zZXRDb2xvcihib3hDb2xv
cik7CgkgICAgb2ZmU2NyZWVuR3JhcGhpY3MuZmlsbFJlY3QoaW1hZ2VNYXBbYWN0aXZlQXJlYV0u
Ym94TGVmdCArIGJveEJvcmRlclNpemUsIGltYWdlTWFwW2FjdGl2ZUFyZWFdLmJveFRvcCArIGJv
eEJvcmRlclNpemUsIGltYWdlTWFwW2FjdGl2ZUFyZWFdLmJveFdpZHRoIC0gMipib3hCb3JkZXJT
aXplLCBpbWFnZU1hcFthY3RpdmVBcmVhXS5ib3hIZWlnaHQgLSAyKmJveEJvcmRlclNpemUpOwoK
CSAgICAvLyB0aGUgdGV4dAoJICAgIG9mZlNjcmVlbkdyYXBoaWNzLnNldEZvbnQoZm9udCk7Cgkg
ICAgb2ZmU2NyZWVuR3JhcGhpY3Muc2V0Q29sb3IodGV4dENvbG9yKTsKCSAgICBmb3IoaT0wOyBp
PGltYWdlTWFwW2FjdGl2ZUFyZWFdLm51bWxpbmVzOyBpKyspIHsKCQlvZmZTY3JlZW5HcmFwaGlj
cy5kcmF3U3RyaW5nKGltYWdlTWFwW2FjdGl2ZUFyZWFdLnRleHRbaV0sIGltYWdlTWFwW2FjdGl2
ZUFyZWFdLmJveExlZnQgKyBib3hIb3Jpem9udGFsTWFyZ2luLCBpbWFnZU1hcFthY3RpdmVBcmVh
XS5ib3hUb3AgKyBib3hWZXJ0aWNhbE1hcmdpbiArIGkqZm9udEhlaWdodCArIGZvbnRBc2NlbnQp
OwoJICAgIH0KCX0KCiAgICAgICAgZy5kcmF3SW1hZ2Uob2ZmU2NyZWVuSW1hZ2UsIDAsIDAsIHRo
aXMpOwogICAgfQogICAgCiAgICBwdWJsaWMgdm9pZCBkZXN0cm95ICgpIHt9CiAgICAKICAgIHB1
YmxpYyB2b2lkIHVwZGF0ZSAoR3JhcGhpY3MgZykgewoJcGFpbnQoZyk7CiAgICB9ICAgCn0K

--=_124E9B7E.6F0E7509--