4.7 sec in total
345 ms
4 sec
389 ms
Welcome to beurfm.rad.io homepage info - get ready to check Beurfm Rad best content right away, or after learning these important things about beurfm.rad.io
/ radio.net – Radio your way
Visit beurfm.rad.ioWe analyzed Beurfm.rad.io page load time and found that the first response time was 345 ms and then it took 4.4 sec to load all DOM resources and completely render a web page. This is a poor result, as 65% of websites can load faster.
beurfm.rad.io performance score
345 ms
488 ms
56 ms
485 ms
320 ms
Our browser made a total of 201 requests to load all elements on the main page. We found that 0% of them (1 request) were addressed to the original Beurfm.rad.io, 29% (58 requests) were made to Static.radio.net and 5% (10 requests) were made to Securepubads.g.doubleclick.net. The less responsive or slowest element that took the longest time to load (1.8 sec) relates to the external source Static.radio.net.
Page size can be reduced by 1.9 MB (55%)
3.5 MB
1.6 MB
In fact, the total size of Beurfm.rad.io main page is 3.5 MB. This result falls beyond the top 1M of websites and identifies a large and not optimized web page that may take ages to load. 80% of websites need less resources to load and that’s why Accessify’s recommendations for optimization and resource minification can be helpful for this project. Javascripts take 1.8 MB which makes up the majority of the site volume.
Potential reduce by 123.2 kB
HTML content can be minified and compressed by a website’s server. The most efficient way is to compress content using GZIP which reduces data amount travelling through the network between server and browser. This page needs HTML code to be minified as it can gain 17.9 kB, which is 12% of the original size. It is highly recommended that content of this web page should be compressed using GZIP, as it can save up to 123.2 kB or 81% of the original size.
Potential reduce by 105.0 kB
Image size optimization can help to speed up a website loading time. The chart above shows the difference between the size before and after optimization. Beurfm Rad images are well optimized though.
Potential reduce by 1.2 MB
It’s better to minify JavaScript in order to improve website performance. The diagram shows the current total size of all JavaScript files against the prospective JavaScript size after its minification and compression. It is highly recommended that all JavaScript files should be compressed and minified as it can save up to 1.2 MB or 66% of the original size.
Potential reduce by 494.7 kB
CSS files minification is very important to reduce a web page rendering time. The faster CSS files can load, the earlier a page can be rendered. Beurfm.rad.io needs all CSS files to be minified and compressed as it can save up to 494.7 kB or 100% of the original size.
Number of requests can be reduced by 92 (49%)
188
96
The browser has sent 188 CSS, Javascripts, AJAX and image requests in order to completely render the main page of Beurfm Rad. We recommend that multiple CSS and JavaScript files should be merged into one by each type, as it can help reduce assets requests from 60 to 1 for JavaScripts and as a result speed up the page load time.
beurfm.rad.io
345 ms
488 ms
zenbox.css
56 ms
radio.css
485 ms
playerapi-f8d3a0c0138c9ba0890258e23d971f22a41fdbe1min.js
320 ms
omsv_container_151.js
453 ms
iam.js
395 ms
radio-built-f8d3a0c0138c9ba0890258e23d971f22a41fdbe1.js
842 ms
zenbox.js
29 ms
gpt.js
5 ms
rc
211 ms
26865,26867,26869,26871
184 ms
rta.js
31 ms
pubads_impl_81.js
10 ms
container.html
9 ms
default.js
154 ms
p.min.js
39 ms
c44.png
119 ms
c175.png
120 ms
c44.png
265 ms
c44.png
263 ms
c44.png
265 ms
c44.png
265 ms
c44.png
266 ms
c44.png
265 ms
c44.png
744 ms
c44.png
743 ms
c44.png
744 ms
c44.png
744 ms
c44.png
726 ms
c44.png
743 ms
c44.png
877 ms
c44.png
877 ms
c44.png
879 ms
c44.png
861 ms
c44.png
879 ms
c44.png
879 ms
c44.png
978 ms
c44.png
976 ms
c44.png
976 ms
c44.png
976 ms
c44.png
976 ms
c44.png
975 ms
c44.png
1148 ms
c44.png
1185 ms
c44.png
1147 ms
ads
56 ms
normal-s2ec5f50070.png
1800 ms
ani_line_bw.gif
1196 ms
data
744 ms
DINWebPro-Light.woff
1361 ms
DINWebPro.woff
1509 ms
radio_de_icons.woff
1265 ms
DINWebPro-Cond.woff
1448 ms
gtm.js
19 ms
ads
161 ms
DINWebPro-LightItalic.woff
1478 ms
ads
467 ms
analytics.js
419 ms
restserver.php
380 ms
translations.json
421 ms
account
837 ms
nowplaying
847 ms
localstations
921 ms
ads
346 ms
stationsbygenre
876 ms
osd.js
124 ms
client:plus.js
128 ms
ads
413 ms
container.html
56 ms
ads
220 ms
Oscars-248c3.jpeg
924 ms
Cowboy-56d30-c9c91.jpeg
928 ms
Valentinstag-9e597-bed09.jpeg
923 ms
Superbowl-b12b6.jpeg
994 ms
Thailand-a9ed6-0ea6c.jpeg
970 ms
linkid.js
118 ms
sdk.js
124 ms
cb=gapi.loaded_0
137 ms
adex.js
346 ms
adrtxtag.min.js
228 ms
collect
57 ms
collect
229 ms
collect
295 ms
collect
50 ms
301 ms
ads
252 ms
ads
179 ms
xd_arbiter.php
168 ms
xd_arbiter.php
244 ms
postmessageRelay
231 ms
2.gif
172 ms
tab_de_support.png
399 ms
close_big.png
130 ms
log.js
310 ms
loading.html
121 ms
ajs.php
159 ms
ads
324 ms
ads
117 ms
t.js
206 ms
ajs.php
112 ms
load_large.gif
89 ms
api.js
158 ms
core:rpc:shindig.random:shindig.sha1.js
291 ms
2536007149-postmessagerelay.js
346 ms
recents
275 ms
recommended
268 ms
ads
347 ms
jstag
249 ms
lg.php
287 ms
show_ads.js
142 ms
lg.php
262 ms
c175.png
335 ms
c175.png
336 ms
c175.png
333 ms
c175.png
335 ms
c175.png
428 ms
c175.png
427 ms
c175.png
435 ms
c175.png
435 ms
c175.png
435 ms
c175.png
498 ms
c175.png
545 ms
c175.png
545 ms
c175.png
566 ms
c175.png
565 ms
nowplayingbystations
239 ms
beurfm.radio.net.js
277 ms
1.gif
190 ms
analytic.js
261 ms
257 ms
zrt_lookup.html
219 ms
show_ads_impl.js
185 ms
ajs.php
173 ms
match.aspx
114 ms
lg.php
67 ms
acj
129 ms
ads
271 ms
acj
110 ms
acj
105 ms
pixel
20 ms
cm.gif
107 ms
pd
27 ms
adsbygoogle.js
3 ms
ri
26 ms
ca-pub-8323069366462793.js
31 ms
ads
306 ms
8223cf93-92ec-a556-593b-115467086598
51 ms
pixel
34 ms
osd.js
27 ms
pd
25 ms
ri
25 ms
ads
293 ms
showad.js
24 ms
ri
20 ms
sd
106 ms
openx
17 ms
sd
106 ms
openx
19 ms
showad.js
21 ms
AdServerServlet
29 ms
sd
92 ms
sd
16 ms
sd
16 ms
sd
16 ms
sd
90 ms
PugMaster
65 ms
2.gif
103 ms
ads
209 ms
16363638886137133266
61 ms
abg.js
62 ms
m_js_controller.js
83 ms
googlelogo_color_112x36dp.png
61 ms
p-P7x87XHnVfbWr.gif
29 ms
sync
37 ms
sd
42 ms
sd
51 ms
Pug
47 ms
demconf.jpg
17 ms
Pug
39 ms
Pug
65 ms
s
87 ms
x_button_blue2.png
63 ms
Pug
73 ms
8047575840627904911
57 ms
27722-213258-36959-71
103 ms
html_inpage_rendering_lib_200_117.js
106 ms
MdyApZkAHG2-UELdOwjNjjFZXSz-CGj4o1JtDR7aGgs.js
9 ms
728x90_SM-1_MEDIAS1.jpg
77 ms
FPTI_PayPal.js
76 ms
FPTIFrame.html
8 ms
lidar.js
7 ms
index.html
21 ms
Enabler_01_93.js
10 ms
bundle.js
40 ms
index_boot.js
33 ms
AdKit.js
35 ms
Ad.js
64 ms
bootstrap.js
64 ms
Pug
90 ms
javascript;base64,%20KGZ1bmN0aW9uIChsaWIsIGltZywgY2pzKSB7DQoNCnZhciBwOyAvLyBzaG9ydGN1dCB0byByZWZlcmVuY2UgcHJvdG90eXBlcw0KDQovLyBsaWJyYXJ5IHByb3BlcnRpZXM6DQpsaWIucHJvcGVydGllcyA9IHsNCgl3aWR0aDogMTYwLA0KCWhlaWdodDogNjAwLA0KCWZwczogMjQsDQoJY29sb3I6ICIjMDAwMDAwIiwNCgltYW5pZmVzdDogWw0KCQl7c3JjOiJpbWFnZXMvRm9zc2lsX2xvZ29fMTYweDYwMC5wbmciLCBpZDoiRm9zc2lsX2xvZ29fMTYweDYwMCJ9LA0KCQl7c3JjOiJpbWFnZXMvR29vZ2xlX1N0b3JlX0Zvc3NpbF8xNjB4NjAwX3Byb2R1Y3RfMS5wbmciLCBpZDoiR29vZ2xlX1N0b3JlX0Zvc3NpbF8xNjB4NjAwX3Byb2R1Y3RfMSJ9LA0KCQl7c3JjOiJpbWFnZXMvR29vZ2xlX1N0b3JlX0Zvc3NpbF8xNjB4NjAwX3Byb2R1Y3RfMi5wbmciLCBpZDoiR29vZ2xlX1N0b3JlX0Zvc3NpbF8xNjB4NjAwX3Byb2R1Y3RfMiJ9LA0KCQl7c3JjOiJpbWFnZXMvR29vZ2xlX1N0b3JlX0Zvc3NpbF8xNjB4NjAwX3Byb2R1Y3RfMy5wbmciLCBpZDoiR29vZ2xlX1N0b3JlX0Zvc3NpbF8xNjB4NjAwX3Byb2R1Y3RfMyJ9DQoJXQ0KfTsNCg0KDQoNCi8vIHN5bWJvbHM6DQoNCg0KDQoobGliLkZvc3NpbF9sb2dvXzE2MHg2MDAgPSBmdW5jdGlvbigpIHsNCgl0aGlzLmluaXRpYWxpemUoaW1nLkZvc3NpbF9sb2dvXzE2MHg2MDApOw0KfSkucHJvdG90eXBlID0gcCA9IG5ldyBjanMuQml0bWFwKCk7DQpwLm5vbWluYWxCb3VuZHMgPSBuZXcgY2pzLlJlY3RhbmdsZSgwLDAsODAsMjgpOw0KDQoNCihsaWIuR29vZ2xlX1N0b3JlX0Zvc3NpbF8xNjB4NjAwX3Byb2R1Y3RfMSA9IGZ1bmN0aW9uKCkgew0KCXRoaXMuaW5pdGlhbGl6ZShpbWcuR29vZ2xlX1N0b3JlX0Zvc3NpbF8xNjB4NjAwX3Byb2R1Y3RfMSk7DQp9KS5wcm90b3R5cGUgPSBwID0gbmV3IGNqcy5CaXRtYXAoKTsNCnAubm9taW5hbEJvdW5kcyA9IG5ldyBjanMuUmVjdGFuZ2xlKDAsMCwxNDgsMTU2KTsNCg0KDQoobGliLkdvb2dsZV9TdG9yZV9Gb3NzaWxfMTYweDYwMF9wcm9kdWN0XzIgPSBmdW5jdGlvbigpIHsNCgl0aGlzLmluaXRpYWxpemUoaW1nLkdvb2dsZV9TdG9yZV9Gb3NzaWxfMTYweDYwMF9wcm9kdWN0XzIpOw0KfSkucHJvdG90eXBlID0gcCA9IG5ldyBjanMuQml0bWFwKCk7DQpwLm5vbWluYWxCb3VuZHMgPSBuZXcgY2pzLlJlY3RhbmdsZSgwLDAsMTUyLDE2MCk7DQoNCg0KKGxpYi5Hb29nbGVfU3RvcmVfRm9zc2lsXzE2MHg2MDBfcHJvZHVjdF8zID0gZnVuY3Rpb24oKSB7DQoJdGhpcy5pbml0aWFsaXplKGltZy5Hb29nbGVfU3RvcmVfRm9zc2lsXzE2MHg2MDBfcHJvZHVjdF8zKTsNCn0pLnByb3RvdHlwZSA9IHAgPSBuZXcgY2pzLkJpdG1hcCgpOw0KcC5ub21pbmFsQm91bmRzID0gbmV3IGNqcy5SZWN0YW5nbGUoMCwwLDE1MCwxMzkpOw0KDQoNCihsaWIubWNfcmVwbGF5ID0gZnVuY3Rpb24oKSB7DQoJdGhpcy5pbml0aWFsaXplKCk7DQoNCgkvLyBMYXllciAxDQoJdGhpcy5zaGFwZSA9IG5ldyBjanMuU2hhcGUoKTsNCgl0aGlzLnNoYXBlLmdyYXBoaWNzLmYoIiNGMkYxRjEiKS5zKCkucCgiQWdyQXJRZ1RnU0FBZ1pRQUFnWUFUZ1NRQVJnVEFhQUFRQVpBQUFTQVRJQVVnVElBQUF2SWd5QUFJQVRnUlFnT2dQZ1NBQVFnVUFBZ05BT1FnT0FPQUFBU1FBQUFUQU9BT1FBTkFPQVVBQVFBUkFBQVBnT0lBS0FMUWdTQVNnWUFBUWdhQUFnUmdUZyIpOw0KCXRoaXMuc2hhcGUuc2V0VHJhbnNmb3JtKDYuNCw2LjIpOw0KDQoJdGhpcy5hZGRDaGlsZCh0aGlzLnNoYXBlKTsNCn0pLnByb3RvdHlwZSA9IHAgPSBuZXcgY2pzLkNvbnRhaW5lcigpOw0KcC5ub21pbmFsQm91bmRzID0gbmV3IGNqcy5SZWN0YW5nbGUoMCwwLDEyLjcsMTIuNSk7DQoNCg0KKGxpYi5tY19saWdodCA9IGZ1bmN0aW9uKCkgew0KCXRoaXMuaW5pdGlhbGl6ZSgpOw0KDQoJLy8gTGF5ZXIgMQ0KCXRoaXMuc2hhcGUgPSBuZXcgY2pzLlNoYXBlKCk7DQoJdGhpcy5zaGFwZS5ncmFwaGljcy5sZihbInJnYmEoMjU1LDI1NSwyNTUsMC4zNTcpIiwicmdiYSgyNTUsMjU1LDI1NSwwLjg4NikiXSxbMCwwLjk4NF0sMTA2LjIsMC4zLDIxMS44LDAuMykucygpLnAoIkVnZ2lBTThRQUFnTkhFc1hRSEVzVkFCZ3RRQUNneFpGQXZRTW5BWU5OQWhRQUtBQWs5TDJRazlMNGdNQUFRdVNBYXRvQVVReHBBYm1OQUFRallBQUFBZ0lnIik7DQoJdGhpcy5zaGFwZS5zZXRUcmFuc2Zvcm0oNTMuOCw4My43KTsNCg0KCXRoaXMuYWRkQ2hpbGQodGhpcy5zaGFwZSk7DQp9KS5wcm90b3R5cGUgPSBwID0gbmV3IGNqcy5Db250YWluZXIoKTsNCnAubm9taW5hbEJvdW5kcyA9IG5ldyBjanMuUmVjdGFuZ2xlKC0xNTQuNSwwLDQxNi43LDE2Ny40KTsNCg0KDQoobGliLm1jX2hpdCA9IGZ1bmN0aW9uKCkgew0KCXRoaXMuaW5pdGlhbGl6ZSgpOw0KDQoJLy8gTGF5ZXIgMQ0KCXRoaXMuc2hhcGUgPSBuZXcgY2pzLlNoYXBlKCk7DQoJdGhpcy5zaGFwZS5ncmFwaGljcy5mKCIjNUU1RDVEIikucygpLnAoIkFoZUJiSUFBaTFJQzhBQUlBQUMxZyIpOw0KCXRoaXMuc2hhcGUuc2V0VHJhbnNmb3JtKDkuNSw5LjIpOw0KDQoJdGhpcy5hZGRDaGlsZCh0aGlzLnNoYXBlKTsNCn0pLnByb3RvdHlwZSA9IHAgPSBuZXcgY2pzLkNvbnRhaW5lcigpOw0KcC5ub21pbmFsQm91bmRzID0gbmV3IGNqcy5SZWN0YW5nbGUoMCwwLDE5LDE4LjMpOw0KDQoNCihsaWIubWNfaGlnaGxpZ2h0TGluZSA9IGZ1bmN0aW9uKCkgew0KCXRoaXMuaW5pdGlhbGl6ZSgpOw0KDQoJLy8gTGF5ZXIgMQ0KCXRoaXMuc2hhcGUgPSBuZXcgY2pzLlNoYXBlKCk7DQoJdGhpcy5zaGFwZS5ncmFwaGljcy5sZihbInJnYmEoMjU1LDI1NSwyNTUsMCkiLCJyZ2JhKDI1NSwyNTUsMjU1LDAuODA0KSIsInJnYmEoMjU1LDI1NSwyNTUsMCkiXSxbMCwwLjUzNywxXSwtNTkuOCwtMTkuNyw0MC4xLDQyLjUpLnMoKS5wKCJBeWVNdk1BVlZnak1JUG9Kdk1nVlZBak1nIik7DQoJdGhpcy5zaGFwZS5zZXRUcmFuc2Zvcm0oMTE4LjMsMTQzLjgpOw0KDQoJdGhpcy5hZGRDaGlsZCh0aGlzLnNoYXBlKTsNCn0pLnByb3RvdHlwZSA9IHAgPSBuZXcgY2pzLkNvbnRhaW5lcigpOw0KcC5ub21pbmFsQm91bmRzID0gbmV3IGNqcy5SZWN0YW5nbGUoMCwwLDIzNi42LDI4Ny42KTsNCg0KDQoobGliLm1jX2dvb2dsZVN0b3JlX0xvZ28gPSBmdW5jdGlvbigpIHsNCgl0aGlzLmluaXRpYWxpemUoKTsNCg0KCS8vIGZsYXNoDQoJdGhpcy5zaGFwZSA9IG5ldyBjanMuU2hhcGUoKTsNCgl0aGlzLnNoYXBlLmdyYXBoaWNzLmYoIiNGRkZGRkYiKS5zKCkucCgiQXUvSmlRaEZnMmdnaFBJQ0JnMlFBVUF3QW9BaFFBdkFuQS9BQVFCVkFBQXZnelFBeGd6Z0JoZ0lBQWd4SWdFQUFRZ2NBaGdzQVZRZ3lBV2c0QUFRaUNBQmhnaGlRaGloakFBaU1RQUFpS0JpaGxRQmdoaUNDQUFRQTRBQUF5QVhRQXNBVUFjQWdJQUVBQUlBQWczSUNPQUFJQUFKZFFBQUN4aGdCZFFoVkJTaU5BQVFod0FBaFdoQ2dBdHpodVFnNEE4QUFCV1FBQUJZQTRBNlFBMkE2Qk9nQlFCTkFCQXpnNlFBMWc2QUFoWVFBQWhXZzFnOFFnemc2aE5BQVFoT0FBZzJBNmdBZ1ZFU1FoZ2hnQUFpUFFBQWlTQmVoaFFCWmhkQ0ZBQVFCMUFBQlRCUFFBOEE1QWVCUElBUUFtSW5FQzVRQTBCbUJ3QUFRQm5BQUEraGRJQjBCTlFnbUE1ZzdBbVFoU0EyaG1BQVFpUUFBaGVoaWdBQlhoNVFnK0E2QURCWElFdWg3UWdNZ2dnamdUUWdpZ1Znc0FCUWhCQUFnMUF4Z0E3QUVVUWhraGdBQWlSUUFBaVFCa2hnUUJpaGdDTkFBUUNPQUFCaUJnUUJrQmdBQUNRUUFBQ1Joa0JnUWhpQmhpT2dCUWlOQUJoaWhoZ0E1WGh2UWc1QTZBQUJZUUFBQlpBNUE2UUE0QTVCT0FBUUJPQUFBNGc1UUE1ZzdBQWhZUUFBaFlnNWc2UWczZzVoUEFBUWhQQUFnM0E1Z0VnbWxBRVVRaGpoZ0FBaVJRQUFpUUJqaGdRQmpoZ0NPQUFRQ05BQUJpQmdRQmpCZ0FCQ1FRZ0JDUmhqQmdRaGlCaGlOZ0JRaU9BQmhqaGhnRWdrN2dCdlFnNEE2QUFCWVFBQUJaQTRBNlFBNEE1QlBBQVFCT0FBQTNnNVFBNWc3QUFoWVFBQWhZZzVnNlFnM2c1aE9BQVFoUUFBZzNBNWdFZzJjQURhUWllaWFBQWpXUUFBallDZWliUUNkaWFEYUFBUURRQUFDWENSSWhrQmxRaHRobWlXZ0JRaWVBQWh1QndRaHRCdkFBQ2ZRQUFDZEJ0QnZRQnVCd0NlZ0JRQmRBQUJJZ2hRQTJnYUF1Z3RRQkFoQUFPaHpJbFhBQUlBQWlQSUhqQUFRQUhBb0FCQXhRQUFCY2diQlBRZ2dCaGhDQkNRaU5DVGpoZ0JRamFBQWlkaWFnRUF3c0FFVVFoWWhlQUFpUVFBQWlJQlZoZ1FCWGhrQ0hBQVFDTkFBQlRCYlFCVUJjQUFDVklnQ0FXSW52QUFRQUZCZkE5QTVRQTRBMUJPZ0JRQTRBQUFyZ1lRQXhnYkFYZzRJQnBBclFnZkJLaEJBdVFoTEEwaG5BQVFpT0FBaGFoZ2dFQXlVZ0NTUWd4QXBnU0JHSUZzQUFRZ0VnMmduZ3FRZzBnM2haQUFRaEJnQmd3QXBnQWZGRVVRaGJoZUFBaVFRQUFpT0JiaGZRQmJoZkNOQUFRQ01BQUJiQmZRQmJCZkFBQ09RQUFDUWhiQmVRaGJCZ2lNQUFRaU5BQWhiaGdnRUFnZmdCL1FoQUJCQUJCa1FnQkJuQkFCQVFBNkE3QlVBQVFCVEFBQTZnN1FBL2hBQUFoblFBQWhrZy9oQlFnNmc4aFRBQlFoVWdCZzZBOGdBT1lFM1FobGhGZ2RoMklCcmdyUUFUQkxBN0F6UUE5QTFCSkFBUUJOQUFBMGduUUE1Z3BBQWhHUUFBaE1nOGd0UWd4Z2xoMWdrUWg2Z21nOGc3UWhDZy9BQWhmUUFBaGlCTmhIUUJSaExCOEFBUUIwQUFCU0JCUUJBQXpBWEJGSWh0QXRRZ0xncmdwZ2lRZ3lncGhIQUFRaERBQmd3QWtRZ3hBbUFBQTVRQUFBekF3QW5RQXBBZ0JWQWNRQ1BBdEJCQTBRQmNCTGdCQjlRQUFDQWhrQkpRaFZBL2g1QUFRaGpBQWhhZzlnQVpWRTFRZzBnMEFBaGdJQUFsSElodUFBSUFBaHNJQnVBQUlBQWkvSUIyQUFJQUFDL0lDWkFBSUFBQnNJaVpBQUlBQUUrUUFBQm5CVUFBUUFoZ0JBVmdLSUFwQmxRZ25BUmc0QUFRaGlBQWcwZzFnRUFwT0FGZ0lBQXB5SUJ3QUFJQUFCbklBRkFBUUFTZ3pBNmdqUUEyZ2dBMEFBUUF6QUFBbEFQSWdzQnVRZ1lnSWduZ0JRaEJBQmd1QXdRZzBBMUFBQlFJQUFGWGdBbFJGZ0lBQXZmSUNWQUFJQUFQZmciKTsNCgl0aGlzLnNoYXBlLnNldFRyYW5zZm9ybSgzNjQuMyw2Ny43KTsNCg0KCXRoaXMuYWRkQ2hpbGQodGhpcy5zaGFwZSk7DQp9KS5wcm90b3R5cGUgPSBwID0gbmV3IGNqcy5Db250YWluZXIoKTsNCnAubm9taW5hbEJvdW5kcyA9IG5ldyBjanMuUmVjdGFuZ2xlKDAsMCw3MjguNiwxMzUuMyk7DQoNCg0KKGxpYi5tY19jb3B5MDNfbG4wMyA9IGZ1bmN0aW9uKCkgew0KCXRoaXMuaW5pdGlhbGl6ZSgpOw0KDQoJLy8gZmxhc2ggY29weQ0KCXRoaXMuc2hhcGUgPSBuZXcgY2pzLlNoYXBlKCk7DQoJdGhpcy5zaGFwZS5ncmFwaGljcy5mKCIjRkZGRkZGIikucygpLnAoIkFCQUJGSUFBZ1JRZ1VnQmdPZ0dJQUFnU1FBSUFFQUpBRFFBS0FDQUhBQUlBQWdmSWdIZ0RRZ05nRGdIZ0hRZ0dnSEFBZ0xRQUFnTUFKZ0hRQUpnSEFQZ0NJQUFnT0lBTEFBSUFBQU9RQVJBQkFQQUZJZ0dBUFFnTmdFZ05nQ0lBQUFmSUFIQUNRQVBBR0FHQUZRQUdBSEFBQUpRQUFBTWdJQUlRZ0pBSWdSQUNJQUFBU2dBQkxBalFBUGdDQUFnTFFBQWdFZ0RnRFFnRWdEZ0lnRGdBQTJnaVFnREFEQUFBRlFBQUFFQURBRVFBREFDQUhBRElBQWdaUWdHQUJnRUFEZ0FGQ0EySUFBZ1NJQVBBSFFBSkFDQUlBQVFBTkFBQUhnSFFBSGdGQUFnTVFBQWdWZ2NBQUlnS0FBSWdLQUNJZ0pnRElBRmc4SUEvQUFJQUFBU0lndUFBSWdDQWVJQUhnQklBS2dCUUFTQUFBTEFLUUFMQUhBQUFSUUFBQVVnTUFMUWdOQUxnV0FBUWdVQUFnTWdIZ0FqdEEzUWdKZ0dnRmdMUWdFZ0tBQWdPUUFBZ1VBS2dNUUFMZ05BVEFBUUFTQUFBTEFOUUFLQU1BQUFVUUFBQVdnS0FNUWdMQU5nVEFBUWdNQUFnSmdHZ0FqdmdOUWdJQUtBQUFSUUFBQVNBSUFMUUFKQUtBUEFBUUFPQUFBSmdLUUFJZ0xBQWdTUUFBZ1JnSWdLUWdKZ0xnUEFBUWdQQUFnSUFMZ0FEdEE3SUF2aG1JZy9BQUlBQWdSSUJVQUFJQUFBT0lndkJwZ0FCK0E3SUFBZ1BJQWZnZklBU2dUSUFIZ0tRQUNnR0FBZ0ZRQUFnSmdGZ0ZRZ0ZnRWdKQUFRZ0dBQWdIQUNRZ0hBRGdJQUdJZ0xnTVFBTGdKQUpnRVFBS2dEQUtBQVFBUkFBQUxBSlFBS0FJQUFBUFFBQUFJZ0RBSVFnREFIZ0dBSFFnR0FIZ1BBTklnVkFWSUFBQUJJQTZBQUlBQUFSZ0FnbUE3SUFBZzdRQUFnTWdGZ0ZRZ0ZnSGdMQUFRZ09BQmdHQUhRZ0hBSUFBQU9JQUFBMUlnSUFBSUFBZzdRQUFnWWdWQUFRZ09BQWdIQUpRZ0dBSUFBQVFJQUFBeUlnSkFBSUFBaFlJQUhBQUlBQ0FNSUFBQUFRQUVnSEFIZ0RRQUhnRUFJQUFRQVdBQUFHQVFRQUVnSEFJZ0ZRQUhnRUFLQUFRQU9BQUFJQUlRQUhBSUFBQVBJQUFBN2dBazhBN0lBQWhZSUFIQUFJQUJBUUlBQUFBUUFHZ0tBR2dFUUFHZ0VBSkFBSUFOQUJJZ0NBSUlnTWdDUWdMQUFnSUFLUWdIQUtBQUFOSUFBQXlnQW1RQTdJQUFoNElCREFBSUFBQUpJZzZBQUlBQUF6SUEzQUFJQUFBR0lnM0FBSUFBQTJnIik7DQoJdGhpcy5zaGFwZS5zZXRUcmFuc2Zvcm0oMjMuOCwzMy4yKTsNCg0KCS8vIGZsYXNoDQoJdGhpcy5zaGFwZV8xID0gbmV3IGNqcy5TaGFwZSgpOw0KCXRoaXMuc2hhcGVfMS5ncmFwaGljcy5mKCIjRkZGRkZGIikucygpLnAoIkFCQUJGSUFBZ1JRZ1VnQmdPZ0dJQUFnU1FBSUFFQUpBRFFBS0FDQUhBQUlBQWdmSWdIZ0RRZ05nRGdIZ0hRZ0dnSEFBZ0xRQUFnTUFKZ0hRQUpnSEFQZ0NJQUFnT0lBTEFBSUFBQU9RQVJBQkFQQUZJZ0dBUFFnTmdFZ05nQ0lBQUFmSUFIQUNRQVBBR0FHQUZRQUdBSEFBQUpRQUFBTWdJQUlRZ0pBSWdSQUNJQUFBU2dBQkxBalFBUGdDQUFnTFFBQWdFZ0RnRFFnRWdEZ0lnRGdBQTJnaVFnREFEQUFBRlFBQUFFQURBRVFBREFDQUhBRElBQWdaUWdHQUJnRUFEZ0FGQ0EySUFBZ1NJQVBBSFFBSkFDQUlBQVFBTkFBQUhnSFFBSGdGQUFnTVFBQWdWZ2NBQUlnS0FBSWdLQUNJZ0pnRElBRmc4SUEvQUFJQUFBU0lndUFBSWdDQWVJQUhnQklBS2dCUUFTQUFBTEFLUUFMQUhBQUFSUUFBQVVnTUFMUWdOQUxnV0FBUWdVQUFnTWdIZ0FqdEEzUWdKZ0dnRmdMUWdFZ0tBQWdPUUFBZ1VBS2dNUUFMZ05BVEFBUUFTQUFBTEFOUUFLQU1BQUFVUUFBQVdnS0FNUWdMQU5nVEFBUWdNQUFnSmdHZ0FqdmdOUWdJQUtBQUFSUUFBQVNBSUFMUUFKQUtBUEFBUUFPQUFBSmdLUUFJZ0xBQWdTUUFBZ1JnSWdLUWdKZ0xnUEFBUWdQQUFnSUFMZ0FEdEE3SUF2aG1JZy9BQUlBQWdSSUJVQUFJQUFBT0lndkJwZ0FCK0E3SUFBZ1BJQWZnZklBU2dUSUFIZ0tRQUNnR0FBZ0ZRQUFnSmdGZ0ZRZ0ZnRWdKQUFRZ0dBQWdIQUNRZ0hBRGdJQUdJZ0xnTVFBTGdKQUpnRVFBS2dEQUtBQVFBUkFBQUxBSlFBS0FJQUFBUFFBQUFJZ0RBSVFnREFIZ0dBSFFnR0FIZ1BBTklnVkFWSUFBQUJJQTZBQUlBQUFSZ0FnbUE3SUFBZzdRQUFnTWdGZ0ZRZ0ZnSGdMQUFRZ09BQmdHQUhRZ0hBSUFBQU9JQUFBMUlnSUFBSUFBZzdRQUFnWWdWQUFRZ09BQWdIQUpRZ0dBSUFBQVFJQUFBeUlnSkFBSUFBaFlJQUhBQUlBQ0FNSUFBQUFRQUVnSEFIZ0RRQUhnRUFJQUFRQVdBQUFHQVFRQUVnSEFJZ0ZRQUhnRUFLQUFRQU9BQUFJQUlRQUhBSUFBQVBJQUFBN2dBazhBN0lBQWhZSUFIQUFJQUJBUUlBQUFBUUFHZ0tBR2dFUUFHZ0VBSkFBSUFOQUJJZ0NBSUlnTWdDUWdMQUFnSUFLUWdIQUtBQUFOSUFBQXlnQW1RQTdJQUFoNElCREFBSUFBQUpJZzZBQUlBQUF6SUEzQUFJQUFBR0lnM0FBSUFBQTJnIik7DQoJdGhpcy5zaGFwZV8xLnNldFRyYW5zZm9ybSgyMy44LDMzLjIpOw0KDQoJdGhpcy5hZGRDaGlsZCh0aGlzLnNoYXBlXzEsdGhpcy5zaGFwZSk7DQp9KS5wcm90b3R5cGUgPSBwID0gbmV3IGNqcy5Db250YWluZXIoKTsNCnAubm9taW5hbEJvdW5kcyA9IG5ldyBjanMuUmVjdGFuZ2xlKC0yMCwxOSwxNDgsMjcuMik7DQoNCg0KKGxpYi5tY19jb3B5MDNfbG4wMiA9IGZ1bmN0aW9uKCkgew0KCXRoaXMuaW5pdGlhbGl6ZSgpOw0KDQoJLy8gZmxhc2ggY29weQ0KCXRoaXMuc2hhcGUgPSBuZXcgY2pzLlNoYXBlKCk7DQoJdGhpcy5zaGFwZS5ncmFwaGljcy5mKCIjRkZGRkZGIikucygpLnAoIkFpMEJPUWdLZ0hBQWdMUUFBZ0tBSGdHUUFGZ0dBS2dDUWdFZ0NnQ2dEUWdEZ0RBQWdFUUFBZ0tBTWdHUWdJZ0VnRWdFUWdGZ0hBQWdKUUFBZ09BSWdKUUFKZ0hBUEFBUUFKQUFBRUFDSUFkQUFJQUFBRklnU0FCUUFIQUtBQUFMUUFCQU5nS0FGUWdJQUpnT0FBSWdKQUFRZ0ZBQ2dEQUVRZ0RBREFBQURRQUFBRkFFQUNRQURBQ0FJQUFJQVFBQVFBT0FBQUlBR1FBSUFHQUFBTVFBQUFPZ0xBSFFnTUFJZ1dBQVFnUkFCZ0pnSGdBaTFBN1FBQkFTQWJBQlFBakFBQUFnWFFBQmdKZ0dnRFFnRmdFZ05BQUlnUEFBUWdaQUJBQUFUZ0FpbmdpUWdIQUhBQUFMUUFBQUtBSEFHUUFHQURBTEFBUUFMQUFBR2dEUUFHZ0dBQWdMUUFBZ01nR2dGUWdIZ0dnS0FBUWdNQUFnRkFHZ0FIc0FsUUFBZ0lBSEFBUUFHQUFBQkFJUWdCQUlnR0FBUWdIQUFBQWdJZ0FHV0FoUWdMZ01BQWdWUUFBZ1VBTGdPUUFLZ01BU0FBUUFRQUFBS0FMUUFJQUxBQkFUSUFBQUZJaENBQVFBQUFTQUpBS1FBSUFKQVFBQUlBT2dCUUFHZ0JBSmdESUFBQUhRZ0hBRWdIQUJJZ1BBQlFnVEFBZ0xnTWdBR2RnZlFnSUFKZ0JBUUlBNEFBUUFBZ1FnSGdKUWdIZ0lnTUFBUWdOQUFnSUFJZ0FENEFuUWdKZ0ZnRmdMUWdFZ0xnQmdNUUFBZ1dBTGdNUUFMZ01BU0FBUUFUQUFBTEFNUUFLQU1BQUFXUUFBQVVnS0FOUWdMQU1nVEFBUWdNQUFnSmdHZ0FEMmdjUWdJQUpBQUFUUUFBQVJBSUFLUUFJQUxBUGdCUUFQQUJBSmdMUUFJZ0tBQWdSUUFBZ1RnSWdKUWdKZ0xnUEFBUWdQQUFnSUFMZ0FDNEFuUWdHZ0hBQWdPSUFBZzNJZ05BQUlBQWdHSUFOZ0RJQUVnVklBRUFBSUFBQVhJQWJBQUlBQUFISWdiQUFJQUFBM1FBQkFLQURBRlFBREFGQUpBQVFBSEFBQUdnQ0lBQUFIUWdHQUNnSEFBUWdOQUFnRmdHZ0FCUEFvSUFBZ0lRQU9BRkFVQUFRQU9BQkFLZ0lRQUlnR0FBZ01RQUFnR2dEZ0ZRZ0RnRGdHZ0RRZ0hnRWdOZ0VRZ1NnSGdIZ0hRZ0lnSEFBZ05RQUFnT0FNZ0lRQUtnSkFSQUFRQVJBQkFQQUdJZ0RBSFFnUGdHZ09BQVFnTkFBZ0pBR1FnSEFIZ0JBS1FBQUFIQURBRVFBQ0FGQUdBRFFBR0FEQU5BRlFBUEFGQUdBRlFBSUFFQURBR1FBREFFQUFBSVFBQUFQZ0xBSlFnTEFKZ1RBQVFnV0FBZ01nRmdBZ3RBaFFnS2dNZ0JnVlFBQWdVQUxnT1FBTGdNQVJBQVFBUkFBQUhBTFFBSkFMQUFBVElBQUFGSWcvQUFRQUFBU0FJQUtRQUpBSkFRQUFJQU5nQlFBRmdCQUpnRElBQUFIUWdJQUVnRkFCSWdPQUJRZ1RBQWdNZ01nQWdtZ2ZRZ0hBSmdDQVFJQTJBQVFBQWdRZ0dnSlFnR2dJZ01BQVFnTkFBZ0lBSWdBa0lBblFnSmdGZ0ZnTFFnRWdMQUFnTVFBQWdXQUtnTVFBTGdNQVNBQVFBVEFBQUxBTVFBS0FNQUFBV1FBQUFVZ0tBTlFnTEFNZ1RBQVFnTUFBZ0pnR2dBa0tnY1FnSUFKQUFBVFFBQUFSQUlBS1FBSkFMQU9nQlFBUEFCQUpnTFFBSGdLQUJnUlFnQmdUZ0hnSlFnSmdMZ1BBQVFnUEFBZ0lBTGdBbHJBblFnSmdGZ0dnTFFnRWdMQUFnTVFBQWdXQUtnTVFBTGdNQVRBQVFBU0FBQUxBTVFBTEFNQUFBV1FBQUFVZ0xBTlFnS0FNZ1VBQVFnTEFBZ0pnR2dBbHRnY1FnSkFKQUJBVFFnQkFSQUpBS1FBSUFMQVBnQlFBUEFCQUlnTFFBSWdLQUFnUlFBQWdUZ0lnSlFnSWdMZ1FBQVFnUEFBZ0hBTGdBbnBBZFFnUWdSQUFnYlFBQmdUQUhnT1FBSWdPQU9nSVFBT2dJQVNBQVFBVUFBQVFBSUlnREFIUWdRZ0hnUkFBUWdZQUFnT0FQUWdPQVBBQUFaUUFBQVpBT0FPUUFOQU5BWkFBUUFSQUFBTWdFSUFBZ29JZ2tBQUlBQWdJSUFzQUFJQUFBMFFnUkFJZ1dBQVFnY0FBZ1FnUWdBRk9Bc0lBQWhZSUFIQUFJQUJBUUlBQkFBUUFGZ0xBSGdFUUFGZ0RBS0FBSUFNQUJJZ0JBSVFnSGdDZ0dBQVFnTEFBZ0lBS1FnR0FLQUFBT0lBQUF4Z0FoWkFzSUFBaUFJQUlBQUlBQUNBZyIpOw0KCXRoaXMuc2hhcGUuc2V0VHJhbnNmb3JtKDIwLjcsMTQuOCk7DQoNCgkvLyBmbGFzaA0KCXRoaXMuc2hhcGVfMSA9IG5ldyBjanMuU2hhcGUoKTsNCgl0aGlzLnNoYXBlXzEuZ3JhcGhpY3MuZigiI0ZGRkZGRiIpLnMoKS5wKCJBaTBCT1FnS2dIQUFnTFFBQWdLQUhnR1FBRmdHQUtnQ1FnRWdDZ0NnRFFnRGdEQUFnRVFBQWdLQU1nR1FnSWdFZ0VnRVFnRmdIQUFnSlFBQWdPQUlnSlFBSmdIQVBBQVFBSkFBQUVBQ0lBZEFBSUFBQUZJZ1NBQlFBSEFLQUFBTFFBQkFOZ0tBRlFnSUFKZ09BQUlnSkFBUWdGQUNnREFFUWdEQURBQUFEUUFBQUZBRUFDUUFEQUNBSUFBSUFRQUFRQU9BQUFJQUdRQUlBR0FBQU1RQUFBT2dMQUhRZ01BSWdXQUFRZ1JBQmdKZ0hnQWkxQTdRQUJBU0FiQUJRQWpBQUFBZ1hRQUJnSmdHZ0RRZ0ZnRWdOQUFJZ1BBQVFnWkFCQUFBVGdBaW5naVFnSEFIQUFBTFFBQUFLQUhBR1FBR0FEQUxBQVFBTEFBQUdnRFFBR2dHQUFnTFFBQWdNZ0dnRlFnSGdHZ0tBQVFnTUFBZ0ZBR2dBSHNBbFFBQWdJQUhBQVFBR0FBQUJBSVFnQkFJZ0dBQVFnSEFBQUFnSWdBR1dBaFFnTGdNQUFnVlFBQWdVQUxnT1FBS2dNQVNBQVFBUUFBQUtBTFFBSUFMQUJBVElBQUFGSWhDQUFRQUFBU0FKQUtRQUlBSkFRQUFJQU9nQlFBR2dCQUpnRElBQUFIUWdIQUVnSEFCSWdQQUJRZ1RBQWdMZ01nQUdkZ2ZRZ0lBSmdCQVFJQTRBQVFBQWdRZ0hnSlFnSGdJZ01BQVFnTkFBZ0lBSWdBRDRBblFnSmdGZ0ZnTFFnRWdMZ0JnTVFBQWdXQUxnTVFBTGdNQVNBQVFBVEFBQUxBTVFBS0FNQUFBV1FBQUFVZ0tBTlFnTEFNZ1RBQVFnTUFBZ0pnR2dBRDJnY1FnSUFKQUFBVFFBQUFSQUlBS1FBSUFMQVBnQlFBUEFCQUpnTFFBSWdLQUFnUlFBQWdUZ0lnSlFnSmdMZ1BBQVFnUEFBZ0lBTGdBQzRBblFnR2dIQUFnT0lBQWczSWdOQUFJQUFnR0lBTmdESUFFZ1ZJQUVBQUlBQUFYSUFiQUFJQUFBSElnYkFBSUFBQTNRQUJBS0FEQUZRQURBRkFKQUFRQUhBQUFHZ0NJQUFBSFFnR0FDZ0hBQVFnTkFBZ0ZnR2dBQlBBb0lBQWdJUUFPQUZBVUFBUUFPQUJBS2dJUUFJZ0dBQWdNUUFBZ0dnRGdGUWdEZ0RnR2dEUWdIZ0VnTmdFUWdTZ0hnSGdIUWdJZ0hBQWdOUUFBZ09BTWdJUUFLZ0pBUkFBUUFSQUJBUEFHSWdEQUhRZ1BnR2dPQUFRZ05BQWdKQUdRZ0hBSGdCQUtRQUFBSEFEQUVRQUNBRkFHQURRQUdBREFOQUZRQVBBRkFHQUZRQUlBRUFEQUdRQURBRUFBQUlRQUFBUGdMQUpRZ0xBSmdUQUFRZ1dBQWdNZ0ZnQWd0QWhRZ0tnTWdCZ1ZRQUFnVUFMZ09RQUxnTUFSQUFRQVJBQUFIQUxRQUpBTEFBQVRJQUFBRklnL0FBUUFBQVNBSUFLUUFKQUpBUUFBSUFOZ0JRQUZnQkFKZ0RJQUFBSFFnSUFFZ0ZBQklnT0FCUWdUQUFnTWdNZ0FnbWdmUWdIQUpnQ0FRSUEyQUFRQUFnUWdHZ0pRZ0dnSWdNQUFRZ05BQWdJQUlnQWtJQW5RZ0pnRmdGZ0xRZ0VnTEFBZ01RQUFnV0FLZ01RQUxnTUFTQUFRQVRBQUFMQU1RQUtBTUFBQVdRQUFBVWdLQU5RZ0xBTWdUQUFRZ01BQWdKZ0dnQWtLZ2NRZ0lBSkFBQVRRQUFBUkFJQUtRQUpBTEFPZ0JRQVBBQkFKZ0xRQUhnS0FCZ1JRZ0JnVGdIZ0pRZ0pnTGdQQUFRZ1BBQWdJQUxnQWxyQW5RZ0pnRmdHZ0xRZ0VnTEFBZ01RQUFnV0FLZ01RQUxnTUFUQUFRQVNBQUFMQU1RQUxBTUFBQVdRQUFBVWdMQU5RZ0tBTWdVQUFRZ0xBQWdKZ0dnQWx0Z2NRZ0pBSkFCQVRRZ0JBUkFKQUtRQUlBTEFQZ0JRQVBBQkFJZ0xRQUlnS0FBZ1JRQUFnVGdJZ0pRZ0lnTGdRQUFRZ1BBQWdIQUxnQW5wQWRRZ1FnUkFBZ2JRQUJnVEFIZ09RQUlnT0FPZ0lRQU9nSUFTQUFRQVVBQUFRQUlJZ0RBSFFnUWdIZ1JBQVFnWUFBZ09BUFFnT0FQQUFBWlFBQUFaQU9BT1FBTkFOQVpBQVFBUkFBQU1nRUlBQWdvSWdrQUFJQUFnSUlBc0FBSUFBQTBRZ1JBSWdXQUFRZ2NBQWdRZ1FnQUZPQXNJQUFoWUlBSEFBSUFCQVFJQUJBQVFBRmdMQUhnRVFBRmdEQUtBQUlBTUFCSWdCQUlRZ0hnQ2dHQUFRZ0xBQWdJQUtRZ0dBS0FBQU9JQUFBeGdBaFpBc0lBQWlBSUFJQUFJQUFDQWciKTsNCgl0aGlzLnNoYXBlXzEuc2V0VHJhbnNmb3JtKDIwLjcsMTQuOCk7DQoNCgl0aGlzLmFkZENoaWxkKHRoaXMuc2hhcGVfMSx0aGlzLnNoYXBlKTsNCn0pLnByb3RvdHlwZSA9IHAgPSBuZXcgY2pzLkNvbnRhaW5lcigpOw0KcC5ub21pbmFsQm91bmRzID0gbmV3IGNqcy5SZWN0YW5nbGUoLTMzLC0xLDEwOS40LDUwLjMpOw0KDQoNCihsaWIubWNfY29weTAzX2xuMDEgPSBmdW5jdGlvbigpIHsNCgl0aGlzLmluaXRpYWxpemUoKTsNCg0KCS8vIGZsYXNoIGNvcHkNCgl0aGlzLnNoYXBlID0gbmV3IGNqcy5TaGFwZSgpOw0KCXRoaXMuc2hhcGUuZ3JhcGhpY3MuZigiI0ZGRkZGRiIpLnMoKS5wKCJBSURBMVFnTGdNQUFnV1FBQWdVQUtnTlFBTGdOQVNBQVFBUUFBQUpBTFFBSkFNQUFBUklBQUFHSWhCQUFRQUFBVEFKQUtRQUlBSkFSQUFJQU5nQlFBR2dCQUpnRElBQUFIUWdJQUVnR0FCSWdPQUJRZ1VBQWdMZ01nQUlLZ0xRZ0lBSmdCQU9JQTRBQVFBQWdPZ0hnSlFnSGdJZ01BQVFnTkFBZ0lBSWdBRmxBN1FnRmdIQUFnT0lBQWc0SWdOQUFJQUFnRklBTmdESUFFZ1ZJQUVBQUlBQUFXSUFiQUFJQUFBSElnYkFBSUFBQTNRQUFBTEFFQUZRQURBRkFKQUFRQUhBQUFHZ0NJQUFBSFFnR0FDZ0hBQVFnTkFBZ0dnR2dBRUJBN1FnR2dIQUFnT0lBQWc0SWdOQUFJQUFnRklBTmdESUFFZ1ZJQUVBQUlBQUFXSUFiQUFJQUFBSElnYkFBSUFBQTNRQUJBTEFEQUZRQURBRkFKQUFRQUhBQUFHZ0NJQUFBSFFnR0FDZ0hBQVFnTkFBZ0ZnR2dBQ2hBNlFnSWdIQUFnTVFBQWdOQU1nSFFBS2dJQVZBQUlBUkFBSUFBZ0dRQUJnTGdHZ0hRZ0ZnR2dMQUFRZ05BQWdOQUhJZ0VnSVFBUGdIQVBBQVFBUEFBQUhBSVFBSEFJQUJBT0lBQUE4SWdIQUFJZ0NnT0lBQUFBUWdIQUpnSUFEUWdHQUVnTEFBUWdOQUFnSGdIZ0FERkFTUWdTQUJnSkFGUWdIQUZnQkFMUUFCQUlBRkFGUUFFQUVBS0FBUUFPQUFBSmdJUUFJZ0lBQWdQSUFBZ0pnQUFUQTFRZ0xnTUFBZ1dRQUFnVUFLZ05RQUxnTkFTQUFRQVFBQUFKQUxRQUpBTUFBQVJJQUFBR0loQkFBUUFBQVRBSkFLUUFJQUpBUkFBSUFOZ0JRQUdnQkFKZ0RJQUFBSFFnSUFFZ0dBQklnT0FCUWdVQUFnTGdNZ0FBYWdMUWdJQUpnQkFPSUE0QUFRQUFnT2dIZ0pRZ0hnSWdNQUFRZ05BQWdJQUlnQWhvQTlRZ0lnRWdFZ0hJZ0JBQUlnQ0FOSWdHQUFJQUFoL0lBSkFBSUFBQWhJZ0JBTklBQUFISUFCQUFRQUZnSUFJZ0VRQUhnRUFKQUFRQVVBQUFLQU1RQUpBTUFBQVZRQUFBWGdLQU1RZ0tBTWdUQUFRZ0pBQWdJZ0VnQWh0Z0tRZ0hBSkFBQVRJQUFBQlFBQUFWQUhBSlFBSEFKQVBBQVFBUEFBQUlnTFFBSGdLQUFnVFFBQWdsZ2VBQVFnUUFBZ0dBSmdBaldBNlFnSWdIQUFnTVFBQWdOQU1nSFFBS2dJQVZBQUlBUkFBSUFBZ0dRQUFnTGdFZ0hRZ0dnR2dMQUFRZ05BQWdOQUhJZ0VnSVFBUWdIQU9BQVFBUEFBQUhBSVFBSEFJQUFBT0lBQUE4SWdHQUFJZ0NnT0lnQkFBUWdHQUpnSUFEUWdIQUVnSkFBUWdPQUFnSGdIZ0FpeUFTUWdTQUJnSkFGUWdIQUZnQkFMUUFCQUlBRUFGUUFGQUVBS0FBUUFPQUFBSmdJUUFJZ0lBQWdQSUFBZ0pnQWw5QTZRZ0hnSEFBZ01RZ0JnTkFMZ0hRQUxnSUFXQUFJQVJBQUlBQWdHUWdCZ0xnRmdIUWdGZ0dnTUFBUWdNQUFnT0FISWdDZ0lRQVBnSEFPQUFRQVBBQUFIQUlRQUlBSWdCQU9JQUFBOElnRkFBSWdDZ09JZ0NBQVFnR0FKZ0hBRFFnSUFFZ0pBQVFnTkFBZ0lnSGdBbFlBU1FnVUFCZ0hBRlFnSkFGQUJBTFFBQUFJQUVBRlFBR0FFQUpBQVFBT0FBQUpnSVFBSmdJQUFnUElBQWdKZ0FIWUEvSUFBZzZRQUFnTWdHZ0dRZ0dnR2dNQUFRZ1FBQWdJQUlRZ0hBSUFBQVFJQUFBeUlnSUFBSUFBaC9JQUlBQUlBQUExSUFBQUFRQUZnSUFJZ0VRQUhnRUFNQUFRQWZBQUFBQWZJQUFBN2dBZ1lBL0lBQWgvSUFKQUFJQUFCL2dBajlBL0lBQWgvSUFKQUFJQUFCL2dBa2pBL0lBQWhZSUFJQUFJQUFCWWdBbTRBL0lnamhZSUFKQUFJQVlBN0lBSEFWSUFBQUFJQUdnVklBWWc3SUFJQUFJZ2pCWWdBbmtBL0lnUmdySWd4QUFJZ1JBcklnS0FBSUF4aDRJQUZBQUlBd0I0Z0FvU2dkSWdSQXFJQXJBQUlnUWdxSWdGZ09JZ0ZBT2dBa2tneVFBQWdJQUVBQVFBQkFBQUJBQVFBQUFBQUJBQVFBQUFCQUJBQVFBQUFCQUJBQVFBQkFDQUFBRVFBQUFFZ0JBQ1FnQkFBQUFBQlFnQkFBQUFBQlFnQkFBQUFBQVFnQkFBZ0JBQVFnRUFBQUFnSWciKTsNCgl0aGlzLnNoYXBlLnNldFRyYW5zZm9ybSg2Ni44LDEyLjgpOw0KDQoJLy8gZmxhc2gNCgl0aGlzLnNoYXBlXzEgPSBuZXcgY2pzLlNoYXBlKCk7DQoJdGhpcy5zaGFwZV8xLmdyYXBoaWNzLmYoIiNGRkZGRkYiKS5zKCkucCgiQUlEQTFRZ0xnTUFBZ1dRQUFnVUFLZ05RQUxnTkFTQUFRQVFBQUFKQUxRQUpBTUFBQVJJQUFBR0loQkFBUUFBQVRBSkFLUUFJQUpBUkFBSUFOZ0JRQUdnQkFKZ0RJQUFBSFFnSUFFZ0dBQklnT0FCUWdVQUFnTGdNZ0FJS2dMUWdJQUpnQkFPSUE0QUFRQUFnT2dIZ0pRZ0hnSWdNQUFRZ05BQWdJQUlnQUZsQTdRZ0ZnSEFBZ09JQUFnNElnTkFBSUFBZ0ZJQU5nRElBRWdWSUFFQUFJQUFBV0lBYkFBSUFBQUhJZ2JBQUlBQUEzUUFBQUxBRUFGUUFEQUZBSkFBUUFIQUFBR2dDSUFBQUhRZ0dBQ2dIQUFRZ05BQWdHZ0dnQUVCQTdRZ0dnSEFBZ09JQUFnNElnTkFBSUFBZ0ZJQU5nRElBRWdWSUFFQUFJQUFBV0lBYkFBSUFBQUhJZ2JBQUlBQUEzUUFCQUxBREFGUUFEQUZBSkFBUUFIQUFBR2dDSUFBQUhRZ0dBQ2dIQUFRZ05BQWdGZ0dnQUNoQTZRZ0lnSEFBZ01RQUFnTkFNZ0hRQUtnSUFWQUFJQVJBQUlBQWdHUUFCZ0xnR2dIUWdGZ0dnTEFBUWdOQUFnTkFISWdFZ0lRQVBnSEFQQUFRQVBBQUFIQUlRQUhBSUFCQU9JQUFBOElnSEFBSWdDZ09JQUFBQVFnSEFKZ0lBRFFnR0FFZ0xBQVFnTkFBZ0hnSGdBREZBU1FnU0FCZ0pBRlFnSEFGZ0JBTFFBQkFJQUZBRlFBRUFFQUtBQVFBT0FBQUpnSVFBSWdJQUFnUElBQWdKZ0FBVEExUWdMZ01BQWdXUUFBZ1VBS2dOUUFMZ05BU0FBUUFRQUFBSkFMUUFKQU1BQUFSSUFBQUdJaEJBQVFBQUFUQUpBS1FBSUFKQVJBQUlBTmdCUUFHZ0JBSmdESUFBQUhRZ0lBRWdHQUJJZ09BQlFnVUFBZ0xnTWdBQWFnTFFnSUFKZ0JBT0lBNEFBUUFBZ09nSGdKUWdIZ0lnTUFBUWdOQUFnSUFJZ0Fob0E5UWdJZ0VnRWdISWdCQUFJZ0NBTklnR0FBSUFBaC9JQUpBQUlBQUFoSWdCQU5JQUFBSElBQkFBUUFGZ0lBSWdFUUFIZ0VBSkFBUUFVQUFBS0FNUUFKQU1BQUFWUUFBQVhnS0FNUWdLQU1nVEFBUWdKQUFnSWdFZ0FodGdLUWdIQUpBQUFUSUFBQUJRQUFBVkFIQUpRQUhBSkFQQUFRQVBBQUFJZ0xRQUhnS0FBZ1RRQUFnbGdlQUFRZ1FBQWdHQUpnQWpXQTZRZ0lnSEFBZ01RQUFnTkFNZ0hRQUtnSUFWQUFJQVJBQUlBQWdHUUFBZ0xnRWdIUWdHZ0dnTEFBUWdOQUFnTkFISWdFZ0lRQVFnSEFPQUFRQVBBQUFIQUlRQUhBSUFBQU9JQUFBOElnR0FBSWdDZ09JZ0JBQVFnR0FKZ0lBRFFnSEFFZ0pBQVFnT0FBZ0hnSGdBaXlBU1FnU0FCZ0pBRlFnSEFGZ0JBTFFBQkFJQUVBRlFBRkFFQUtBQVFBT0FBQUpnSVFBSWdJQUFnUElBQWdKZ0FsOUE2UWdIZ0hBQWdNUWdCZ05BTGdIUUFMZ0lBV0FBSUFSQUFJQUFnR1FnQmdMZ0ZnSFFnRmdHZ01BQVFnTUFBZ09BSElnQ2dJUUFQZ0hBT0FBUUFQQUFBSEFJUUFJQUlnQkFPSUFBQThJZ0ZBQUlnQ2dPSWdDQUFRZ0dBSmdIQURRZ0lBRWdKQUFRZ05BQWdJZ0hnQWxZQVNRZ1VBQmdIQUZRZ0pBRkFCQUxRQUFBSUFFQUZRQUdBRUFKQUFRQU9BQUFKZ0lRQUpnSUFBZ1BJQUFnSmdBSFlBL0lBQWc2UUFBZ01nR2dHUWdHZ0dnTUFBUWdRQUFnSUFJUWdIQUlBQUFRSUFBQXlJZ0lBQUlBQWgvSUFJQUFJQUFBMUlBQUFBUUFGZ0lBSWdFUUFIZ0VBTUFBUUFmQUFBQUFmSUFBQTdnQWdZQS9JQUFoL0lBSkFBSUFBQi9nQWo5QS9JQUFoL0lBSkFBSUFBQi9nQWtqQS9JQUFoWUlBSUFBSUFBQllnQW00QS9JZ2poWUlBSkFBSUFZQTdJQUhBVklBQUFBSUFHZ1ZJQVlnN0lBSUFBSWdqQllnQW5rQS9JZ1JncklneEFBSWdSQXJJZ0tBQUlBeGg0SUFGQUFJQXdCNGdBb1NnZElnUkFxSUFyQUFJZ1FncUlnRmdPSWdGQU9nQWtrZ3lRQUFnSUFFQUFRQUJBQUFCQUFRQUFBQUFCQUFRQUFBQkFCQUFRQUFBQkFCQUFRQUJBQ0FBQUVRQUFBRWdCQUNRZ0JBQUFBQUJRZ0JBQUFBQUJRZ0JBQUFBQUFRZ0JBQWdCQUFRZ0VBQUFBZ0lnIik7DQoJdGhpcy5zaGFwZV8xLnNldFRyYW5zZm9ybSg2Ni44LDEyLjgpOw0KDQoJdGhpcy5hZGRDaGlsZCh0aGlzLnNoYXBlXzEsdGhpcy5zaGFwZSk7DQp9KS5wcm90b3R5cGUgPSBwID0gbmV3IGNqcy5Db250YWluZXIoKTsNCnAubm9taW5hbEJvdW5kcyA9IG5ldyBjanMuUmVjdGFuZ2xlKDcsLTEsMTIxLjQsNTAuMyk7DQoNCg0KKGxpYi5tY19jb3B5MDJfbG4wMyA9IGZ1bmN0aW9uKCkgew0KCXRoaXMuaW5pdGlhbGl6ZSgpOw0KDQoJLy8gZmxhc2ggY29weQ0KCXRoaXMuc2hhcGUgPSBuZXcgY2pzLlNoYXBlKCk7DQoJdGhpcy5zaGFwZS5ncmFwaGljcy5mKCIjRkZGRkZGIikucygpLnAoIkFndUJUSUFBZ0hRQUVBQkFHQUFRQUVBQUFEZ0NRQUVnQ0FDZ0ZJQUdnTUlBRmdOSWdqaFlJQUpBQUlBVEF4UUFKQVhBQ0FJSUFBQUFJQUtnZklBVGd4SUFJQUFJZ21CblFnRkFOZ0RBRlFnRUFFZ0VBQ1FnRkFDZ0dBQlFnRkFBZ0ZnQ2dBQ3ZBbFFBQWdJQUdBQVFBSEFBQUFBSVFBQUFJZ0hBQVFnR0FBQUFnSWdBQlpBaFFnTGdNQUFnVlFBQWdWQUtnTlFBTGdOQVNBQlFBUWdCQUpBTFFBSkFNQUFBVElBQUFGSWhCQUFRQUFBU0FKQUtRQUlBS0FRQUFJQU9nQ1FBR0FBQUpnRUlBQUFJUWdJQURnR0FCSWdQQUJRZ1RBQWdMZ01nQUJnZ2VRZ0lBSWdCQVFJQTRBQVFBQWdRZ0hnSVFnSGdKZ01BQVFnTkFBZ0lBSmdBaFRBblFnRmdHQUFnUElBQWc0SWdPQUFJQUFnRklBT2dESUFFZ1VJQUVBQUlBQUFWSUFiQUFJQUFBSElnYkFBSUFBQTNRQUFBTEFFQUZRQURBRkFJQUFRQUlBQUFHZ0NJQUFBSFFnR0FDZ0lBQVFnTUFBZ0dnR2dBaTdBcElBQWdKUUFOQUdBVUFBUUFQZ0JBSmdHUUFKZ0lBQWdLUUFBZ0lnRGdFUWdEZ0NnR2dFUWdIZ0VnTmdFUWdTZ0hnSGdIUWdJZ0lBQWdNUUFBZ05BTGdKUUFMZ0pBUkFCUUFSZ0JBUEFISWdEQUhRZ1BnR2dPQUFRZ09BQWdJQUdRZ0lBSEFBQUtRQUFBSEFEQUVRQUNBRUFHQUVRQUZBRUFPQUVRQU9BRkFIQUVRQUhBRkFFQUdRQURBRUFBQUlRQUFBUWdMQUlRZ0xBSmdUQUFRZ1dBQWdNZ0VnQUFzQXJJQUFoK0lBSkFBSUFBQitnIik7DQoJdGhpcy5zaGFwZS5zZXRUcmFuc2Zvcm0oMzEuOCw1NC44KTsNCg0KCS8vIGZsYXNoDQoJdGhpcy5zaGFwZV8xID0gbmV3IGNqcy5TaGFwZSgpOw0KCXRoaXMuc2hhcGVfMS5ncmFwaGljcy5mKCIjRkZGRkZGIikucygpLnAoIkFndUJUSUFBZ0hRQUVBQkFHQUFRQUVBQUFEZ0NRQUVnQ0FDZ0ZJQUdnTUlBRmdOSWdqaFlJQUpBQUlBVEF4UUFKQVhBQ0FJSUFBQUFJQUtnZklBVGd4SUFJQUFJZ21CblFnRkFOZ0RBRlFnRUFFZ0VBQ1FnRkFDZ0dBQlFnRkFBZ0ZnQ2dBQ3ZBbFFBQWdJQUdBQVFBSEFBQUFBSVFBQUFJZ0hBQVFnR0FBQUFnSWdBQlpBaFFnTGdNQUFnVlFBQWdWQUtnTlFBTGdOQVNBQlFBUWdCQUpBTFFBSkFNQUFBVElBQUFGSWhCQUFRQUFBU0FKQUtRQUlBS0FRQUFJQU9nQ1FBR0FBQUpnRUlBQUFJUWdJQURnR0FCSWdQQUJRZ1RBQWdMZ01nQUJnZ2VRZ0lBSWdCQVFJQTRBQVFBQWdRZ0hnSVFnSGdKZ01BQVFnTkFBZ0lBSmdBaFRBblFnRmdHQUFnUElBQWc0SWdPQUFJQUFnRklBT2dESUFFZ1VJQUVBQUlBQUFWSUFiQUFJQUFBSElnYkFBSUFBQTNRQUFBTEFFQUZRQURBRkFJQUFRQUlBQUFHZ0NJQUFBSFFnR0FDZ0lBQVFnTUFBZ0dnR2dBaTdBcElBQWdKUUFOQUdBVUFBUUFQZ0JBSmdHUUFKZ0lBQWdLUUFBZ0lnRGdFUWdEZ0NnR2dFUWdIZ0VnTmdFUWdTZ0hnSGdIUWdJZ0lBQWdNUUFBZ05BTGdKUUFMZ0pBUkFCUUFSZ0JBUEFISWdEQUhRZ1BnR2dPQUFRZ09BQWdJQUdRZ0lBSEFBQUtRQUFBSEFEQUVRQUNBRUFHQUVRQUZBRUFPQUVRQU9BRkFIQUVRQUhBRkFFQUdRQURBRUFBQUlRQUFBUWdMQUlRZ0xBSmdUQUFRZ1dBQWdNZ0VnQUFzQXJJQUFoK0lBSkFBSUFBQitnIik7DQoJdGhpcy5zaGFwZV8xLnNldFRyYW5zZm9ybSgzMS44LDU0LjgpOw0KDQoJdGhpcy5hZGRDaGlsZCh0aGlzLnNoYXBlXzEsdGhpcy5zaGFwZSk7DQp9KS5wcm90b3R5cGUgPSBwID0gbmV3IGNqcy5Db250YWluZXIoKTsNCnAubm9taW5hbEJvdW5kcyA9IG5ldyBjanMuUmVjdGFuZ2xlKDEwLDM5LDEwNCwyNy4yKTsNCg0KDQoobGliLm1jX2NvcHkwMl9sbjAyID0gZnVuY3Rpb24oKSB7DQoJdGhpcy5pbml0aWFsaXplKCk7DQoNCgkvLyBmbGFzaCBjb3B5DQoJdGhpcy5zaGFwZSA9IG5ldyBjanMuU2hhcGUoKTsNCgl0aGlzLnNoYXBlLmdyYXBoaWNzLmYoIiNGRkZGRkYiKS5zKCkucCgiQUc2QTFRZ0tnTWdCZ1dRQUFnVUFMZ05RQUtnTkFUQUFRQVBBQUFLQUxRQUpBTUFBQVJJQUFBR0loQkFBUUFBQVRBSUFLUUFKQUpBUUFBSUFOZ0JRQUdnQkFKZ0RJQUFBSFFnSEFFZ0hBQklnT0FCUWdUQUFnTWdNZ0FIQmdMUWdIQUpnQ0FPSUE0QUFRQUFnT2dHZ0pRZ0lnSWdMQUFRZ05BQWdKQUlnQUUrQTlRZ0lnRWdGZ0hJZ0JBQUlnQkFOSWdHQUFJQUFoL0lBSUFBSUFBQWhJQUFBTklnQkFISUFCQUFRQUdnSUFIZ0VRQUhnRUFLQUFRQVRBQUFLQU1RQUtBTUFBQVZRZ0JBWGdKQU1RZ0xBTWdTQUFRZ0tBQWdIZ0VnQUU0Z0tRZ0dBSmdCQVRJQUFBQlFBQUFWQUlBSlFBSEFKQVBBQVFBUEFBQUhnTFFBSWdLQUFnVFFnQmdsZ2RBQVFnUUFBZ0hBSmdBRFBBNlFnSGdIQUFnTVFBQWdOQUxnSFFBTGdJQVZBQUlBUkFBSUFBZ0dRQUFnTGdGZ0hRZ0ZnR2dNQUFRZ05BQWdOQUhJZ0RnSVFBUGdIQVBBQVFBUEFBQUdBSVFBSUFJQUFBT0lBQUE4SWdHQUFJZ0NnT0lnQkFBUWdHQUpnSUFEUWdIQUVnS0FBUWdOQUFnSWdIZ0FEMEFTUWdUQUJnSUFGUWdJQUZBQUFMUUFBQUlBRkFGUUFGQUVBS0FBUUFPQUFBSWdJUUFKZ0lBQWdQSUFBZ0pnQWlRQTdRZ0pnR2dGZ0tRZ0VnTGdCZ09RQUFnVUFMZ01RQUxnTkFTQUFRQVRBQUFMQU5RQUtBTUFBQVVRQUFBV2dLQU5RZ0xBTWdUQUFRZ01BQWdKZ0dnQWlTZ0pRZ0lBSkFBQVNRQUFBVEFJQUtRQUlBS0FQQUFRQVBBQUFJZ0tRQUpnS0FBZ1RRQUFnU2dKZ0pRZ0lnS2dQQUFRZ1BBQWdJQUtnQWpRQTdRZ0dnSEFBZ09JQUFnNElnTkFBSUFBZ0ZJQU5nRElBRWdWSUFFQUFJQUFBV0lBYkFBSUFBQUhJZ2JBQUlBQUEzUUFCQUxBREFGUUFEQUZBSkFBUUFIQUFBR2dDSUFBQUhRZ0dBQ2dIQUFRZ05BQWdGZ0dnQWt0QTdJQUFnSlFBTkFIQVBBQVFBTkFBQUhnRVFBSWdGQUFnSFFnQmdIZ0ZnRVFnR2dGZ01nRlFnT2dFZ0ZnRVFnR2dFZ0RnRVFnQ2dFQUFnRlFnQmdLQUtnR1FBSGdHQVFBQVFBT0FBQU5BR0lnREFIUWdNZ0ZnTUFBUWdMQUFnSEFEUWdHQUVBQUFIUUFBQUZBRkFFUUFGQUVBT0FGUUFOQUZBRkFEUUFHQUVBREFFUUFEQUZBQUFHUWdCQU1nSUFHUWdLQUhnUkFBUWdTQUFnS2dHZ0FtTEFnSUFBZzVJQUlBQUlBQUE0UUFBQU9BR0FHUUFHQUdBTUFBUUFRQUFBSGdJUUFJZ0lBQWdTSUFBZ3dJQUlBQUlBQUJZSWdIQUFJZ0NnTUlBQUFBUWdJQU9nWEFBUWdmQUFBQWdoZ0FucEF3UWdQZ1FBQWdlUUFBZ1FBSWdPUUFHZ09BTmdJUUFPZ0lBUkFBUUFSQUFBUEFISWdEQUhRZ09nR2dPQUFRZ1hBQWdOQU9RZ05BUGdCQVhRQUFBYUFOQVBRQU1BT0FYQUFRQVBBQUFOZ0VJQUFBSVFnTUFFZ1NBQVFnYUFBZ09nUmdBR09BL0lBQWgvSUFJQUFJQUFCL2dBQjVBL0lBQWdGSUExaE1JZ3lBQUlBQWdISUE5QUFJQUFBRklnMkJNSUEyQUFJQUFBSGdBQmFBL0lBQWhZSUFJQUFJQUFCWWdBQTFBL0lBQWc3UUFBZ0xnRmdHUWdHZ0dnS0FBUWdPQUFnR0FIUWdIQUlBQUFPSUFBQTFJZ0dBQUlBQWc5UWdCZ1ZnVUFBUWdQQUFnR0FJUWdIQUlBQkFRSUFBQXlJZ0pBQUlBQWhZSUFIQUFJQUNBTUlBQUFBUUFFZ0dBSGdFUUFHZ0VBSkFBUUFXQUFBRUFRUUFFZ0hBSWdGUUFIZ0VBS0FBUUFPQUFBSEFJUUFJQUlBQUFQSUFBQTdnQUJaZ3lRQUFnSUFGQUFRQUJBQUFBQUFRQUJBQUFBQUFRQUJBQkFBQUFRQUJBQkFBQUFRQUJBQ0FBQUVRQUFBRWdCQUNRQUFBQWdCQUJRQUFBQWdCQUJRQUFBQWdCQUFRQUFBQWdCQUFRZ0ZBQUFBZ0lnIik7DQoJdGhpcy5zaGFwZS5zZXRUcmFuc2Zvcm0oMzIuNiwzMi44KTsNCg0KCS8vIGZsYXNoDQoJdGhpcy5zaGFwZV8xID0gbmV3IGNqcy5TaGFwZSgpOw0KCXRoaXMuc2hhcGVfMS5ncmFwaGljcy5mKCIjRkZGRkZGIikucygpLnAoIkFHNkExUWdLZ01nQmdXUUFBZ1VBTGdOUUFLZ05BVEFBUUFQQUFBS0FMUUFKQU1BQUFSSUFBQUdJaEJBQVFBQUFUQUlBS1FBSkFKQVFBQUlBTmdCUUFHZ0JBSmdESUFBQUhRZ0hBRWdIQUJJZ09BQlFnVEFBZ01nTWdBSEJnTFFnSEFKZ0NBT0lBNEFBUUFBZ09nR2dKUWdJZ0lnTEFBUWdOQUFnSkFJZ0FFK0E5UWdJZ0VnRmdISWdCQUFJZ0JBTklnR0FBSUFBaC9JQUlBQUlBQUFoSUFBQU5JZ0JBSElBQkFBUUFHZ0lBSGdFUUFIZ0VBS0FBUUFUQUFBS0FNUUFLQU1BQUFWUWdCQVhnSkFNUWdMQU1nU0FBUWdLQUFnSGdFZ0FFNGdLUWdHQUpnQkFUSUFBQUJRQUFBVkFJQUpRQUhBSkFQQUFRQVBBQUFIZ0xRQUlnS0FBZ1RRZ0JnbGdkQUFRZ1FBQWdIQUpnQURQQTZRZ0hnSEFBZ01RQUFnTkFMZ0hRQUxnSUFWQUFJQVJBQUlBQWdHUUFBZ0xnRmdIUWdGZ0dnTUFBUWdOQUFnTkFISWdEZ0lRQVBnSEFQQUFRQVBBQUFHQUlRQUlBSUFBQU9JQUFBOElnR0FBSWdDZ09JZ0JBQVFnR0FKZ0lBRFFnSEFFZ0tBQVFnTkFBZ0lnSGdBRDBBU1FnVEFCZ0lBRlFnSUFGQUFBTFFBQUFJQUZBRlFBRkFFQUtBQVFBT0FBQUlnSVFBSmdJQUFnUElBQWdKZ0FpUUE3UWdKZ0dnRmdLUWdFZ0xnQmdPUUFBZ1VBTGdNUUFMZ05BU0FBUUFUQUFBTEFOUUFLQU1BQUFVUUFBQVdnS0FOUWdMQU1nVEFBUWdNQUFnSmdHZ0FpU2dKUWdJQUpBQUFTUUFBQVRBSUFLUUFJQUtBUEFBUUFQQUFBSWdLUUFKZ0tBQWdUUUFBZ1NnSmdKUWdJZ0tnUEFBUWdQQUFnSUFLZ0FqUUE3UWdHZ0hBQWdPSUFBZzRJZ05BQUlBQWdGSUFOZ0RJQUVnVklBRUFBSUFBQVdJQWJBQUlBQUFISWdiQUFJQUFBM1FBQkFMQURBRlFBREFGQUpBQVFBSEFBQUdnQ0lBQUFIUWdHQUNnSEFBUWdOQUFnRmdHZ0FrdEE3SUFBZ0pRQU5BSEFQQUFRQU5BQUFIZ0VRQUlnRkFBZ0hRZ0JnSGdGZ0VRZ0dnRmdNZ0ZRZ09nRWdGZ0VRZ0dnRWdEZ0VRZ0NnRUFBZ0ZRZ0JnS0FLZ0dRQUhnR0FRQUFRQU9BQUFOQUdJZ0RBSFFnTWdGZ01BQVFnTEFBZ0hBRFFnR0FFQUFBSFFBQUFGQUZBRVFBRkFFQU9BRlFBTkFGQUZBRFFBR0FFQURBRVFBREFGQUFBR1FnQkFNZ0lBR1FnS0FIZ1JBQVFnU0FBZ0tnR2dBbUxBZ0lBQWc1SUFJQUFJQUFBNFFBQUFPQUdBR1FBR0FHQU1BQVFBUUFBQUhnSVFBSWdJQUFnU0lBQWd3SUFJQUFJQUFCWUlnSEFBSWdDZ01JQUFBQVFnSUFPZ1hBQVFnZkFBQUFnaGdBbnBBd1FnUGdRQUFnZVFBQWdRQUlnT1FBR2dPQU5nSVFBT2dJQVJBQVFBUkFBQVBBSElnREFIUWdPZ0dnT0FBUWdYQUFnTkFPUWdOQVBnQkFYUUFBQWFBTkFQUUFNQU9BWEFBUUFQQUFBTmdFSUFBQUlRZ01BRWdTQUFRZ2FBQWdPZ1JnQUdPQS9JQUFoL0lBSUFBSUFBQi9nQUI1QS9JQUFnRklBMWhNSWd5QUFJQUFnSElBOUFBSUFBQUZJZzJCTUlBMkFBSUFBQUhnQUJhQS9JQUFoWUlBSUFBSUFBQllnQUExQS9JQUFnN1FBQWdMZ0ZnR1FnR2dHZ0tBQVFnT0FBZ0dBSFFnSEFJQUFBT0lBQUExSWdHQUFJQUFnOVFnQmdWZ1VBQVFnUEFBZ0dBSVFnSEFJQUJBUUlBQUF5SWdKQUFJQUFoWUlBSEFBSUFDQU1JQUFBQVFBRWdHQUhnRVFBR2dFQUpBQVFBV0FBQUVBUVFBRWdIQUlnRlFBSGdFQUtBQVFBT0FBQUhBSVFBSUFJQUFBUElBQUE3Z0FCWmd5UUFBZ0lBRkFBUUFCQUFBQUFBUUFCQUFBQUFBUUFCQUJBQUFBUUFCQUJBQUFBUUFCQUNBQUFFUUFBQUVnQkFDUUFBQUFnQkFCUUFBQUFnQkFCUUFBQUFnQkFBUUFBQUFnQkFBUWdGQUFBQWdJZyIpOw0KCXRoaXMuc2hhcGVfMS5zZXRUcmFuc2Zvcm0oMzIuNiwzMi44KTsNCg0KCXRoaXMuYWRkQ2hpbGQodGhpcy5zaGFwZV8xLHRoaXMuc2hhcGUpOw0KfSkucHJvdG90eXBlID0gcCA9IG5ldyBjanMuQ29udGFpbmVyKCk7DQpwLm5vbWluYWxCb3VuZHMgPSBuZXcgY2pzLlJlY3RhbmdsZSgtMjEsMTksMTEwLjMsMjcuMik7DQoNCg0KKGxpYi5tY19jb3B5MDJfbG4wMSA9IGZ1bmN0aW9uKCkgew0KCXRoaXMuaW5pdGlhbGl6ZSgpOw0KDQoJLy8gZmxhc2ggY29weQ0KCXRoaXMuc2hhcGUgPSBuZXcgY2pzLlNoYXBlKCk7DQoJdGhpcy5zaGFwZS5ncmFwaGljcy5mKCIjRkZGRkZGIikucygpLnAoIkFGWEJPUWdLZ0hBQWdMUUFCZ0tBRmdHUUFIZ0dBSmdDUWdFZ0NnQ2dEUWdEZ0RBQWdFUUFBZ0tBTWdHUWdJZ0VnRWdFUWdGZ0hBQWdKUUFBZ09BSWdKUUFKZ0hBUEFBUUFKQUFBRUFDSUFkQUFJQUFBRklnU0FCUUFIQUtBQUFMUUFCQU5nS0FGUWdJQUpnT0FBSWdKQUFRZ0ZBQ2dEQUVRZ0NBREFBQURRQUFBRkFEQUNRQURBQ0FJQUFJQVFBQVFBT0FBQUlBR1FBSUFHQUFBTVFBQUFPZ0xBSFFnTUFJZ1dBQVFnUUFCZ0tnSGdBRldBN1FBQUFTQWNBQlFBa0FBZ0JnWFFBQmdKZ0dnRFFnRmdFZ05BQUlnUEFBUWdaQUJBQUFUZ0FGa2dpUWdIQUhBQUFMUUFBQUtBSEFHUUFHQURBTEFBUUFMQUFBR2dEUUFHZ0dBQWdMUUFBZ01nR2dGUWdIZ0dnS0FBUWdNQUFnRkFHZ0FJTkJCUUFHZ1dBRWdUSUFKQUFJQUJBQ1FnR0FWZ0pBU2dBRGNBbklBQWdKUUFOQUlBUGdCUUFPQUFBR2dFUUFJZ0VBQWdJUWdCZ0dnRmdGUWdHZ0ZnTWdGUWdPZ0NnRmdFUWdHZ0RnRGdGUWdDZ0VBQWdIUWdCZ0pBS2dIUUFIZ0ZBUUFBUUFQZ0JBTkFHSWdFQUhRZ05nRmdMQUFRZ0xBQWdHQUVRZ0hBRUFBQUdRQUFBSEFGQUVRQUZBRkFQQUVRQU1BRkFHQUJRQUZBRUFEQUZRQUNBRUFCQUdRZ0JBTWdJQUdRZ0tBSGdSQUFRZ1NBQWdLZ0dnQUNNQWhRZ0xnTUFBZ1ZRQUFnVUFMZ09RQUtnTUFTQUFRQVFBQUFLQUxRQUlBTEFCQVRJQUFBRkloQkFBUWdCQVNBSkFLUUFKQUpBUEFBSUFPZ0JRQUdnQkFKZ0RJQUFBSFFnSUFFZ0dBQklnUEFCUWdUQUFnTGdNZ0FDVGdmUWdIQUpnQ0FRSUE0QUFRQUFnUWdIZ0pRZ0hnSWdNQUFRZ05BQWdJQUlnQWhuQWhRZ0xnTUFBZ1ZRQUFnVkFNZ05RQUtnTUFVQUFRQU1BQUFMQURJZ0RBSVFnTGdFZ0pBQVFnUkFBZ0lBTFFnSkFKQUFBVFFBQUFSQUpBS1FBSUFMQVFnQlFBTUFBQUxnRElBQUFIUWdKQUVnT0FBUWdUQUFnTGdNZ0FqckFuSUFBZ0pRQU9BSUFQZ0JRQU9BQUFHZ0VRQUlnRWdCZ0lRQUJnR2dHZ0ZRZ0ZnRmdOZ0ZRZ09nQ2dGZ0VRZ0ZnRGdEZ0ZRZ0VnRUFBZ0hRQUJnSkFJZ0hRQUpnRkFQQUFRQU9nQkFPQUdJZ0RBSFFnTmdGZ01BQVFnTEFBZ0dBRVFnSEFFQUFBR1FBQUFIQUZBRVFBRkFGQVBBRVFBTUFGQUdBQlFBRkFFQURBRlFBREFFZ0JBR1FBQkFNZ0tBR1FnSkFIZ1JBQVFnU0FBZ0xnR2dBazZBbklBQWdKUUFPQUlBUGdCUUFOQUFBSWdFUUFHZ0VBQWdJUUFCZ0dnR2dGUWdGZ0ZnTmdGUWdPZ0NnRmdFUWdGZ0RnRGdGUWdEZ0VnQmdIUUFCZ0pBSWdIUUFJZ0ZBUUFBUUFQZ0JBTUFHSWdDQUhRZ09nRmdMQUFRZ0xBQWdIQUVRZ0dBRUFBQUdRQUFBSEFGQUVRQUZBRkFPQUVRQU5BRkFGQUJRQUdBRUFEQUZRQUNBRUFBQUdRQUFBTWdKQUdRZ0pBSGdSQUFRZ1NBQWdMZ0dnQW1MQW1RZ0lnR0FBZ05RQUFnTUFNZ0hRQUtnR0FWZ0JJQVJBQUlBQWdHUUFCZ05nR2dIUWdGZ0dnTEFBUWdOQUFnTkFISWdFZ0lRQVBnR0FQQUFRQVBBQUFIQUhRQUhBSUFCQVFJQUFBN0lnSEFBSWdDZ1BJQUFBQVFnSEFKZ0lBRVFnR0FEZ0xBQVFnTkFBZ0hnSGdBbG5BQVFnU0FBZ0pBRVFnSEFGZ0JBTFFBQkFJQUZBRlFBRUFFQUtBQVFBT0FCQUpnSlFBSWdJQUFnT0lBQWdIZ0FvUkFjUWdQZ1FBQWdiUUFBZ1RBSGdPUUFIZ09BT2dJUUFNZ0hBU2dCUUFSQUJBUEFHSWdFQUlRZ05nSGdQQUFRZ1hBQWdOQVBRZ01BUEFBQVpRQUFBWUFNQU9RQU1BT0FYQUFRQVFBQUFNZ0RJQUFBSFFnTUFFZ1NBQVFnYUFBZ09nUmdBSHhBc0lBQWc1UUFBZ09nRmdHUWdIZ0dnTEFBUWdSQUFnSEFJUWdJQUlBQUFTSUFBQXhJZ0lBQUlBQWhZSUFIQUFJQUJBTElBQkFBUUFKZ05BV0FBUUFmQUFBQUFnSUFBQTZnQUV5QXNJQUFoWUlBSkFBSUFBQllnQUFRQXNJQUFoNElBaEFBUUFkQUFBUEFRUUFQQVBBQUFkUUFBQWNnUEFRUWdSQVFnZkFBZ0FBWUFrSUFVQUFRQTNBQUFBZzBRQUFnYWdOZ05RZ09nT2daQUFJZ1hBQWdBaVRBc0lBQWhZSUFJQUFJQUFCWWdBbXlBc0lBQWlBSUFKQUFJQUFDQWdBRXhoR1FBQWdJQUdBQVFBQUFBQUJBQVFBQUFBQUJBQlFBQUFBQUJBQVFBQUFCQUFBQVFBQ0FDQUFBRVFBQUFFZ0NBQ1FBQUFCQUFBQVFnQkFCQUFBQVFnQkFBQUFBQVFnQkFCQUFBQVFnR0FBQUFnSmdBaVVoR1FBQWdJQUVBQVFBQkFBQUJBQVFBQUFBQUJBQlFBQUFBQUJBQVFBQUFCQUJBQVFBQkFDQUFBRVFBQUFFZ0JBQ1FnQkFCQUFBQVFnQkFCQUFBQVFnQkFBQUFBQVFnQkFCZ0JBQVFnRUFBQUFnSmciKTsNCgl0aGlzLnNoYXBlLnNldFRyYW5zZm9ybSgzMi42LDE0LjgpOw0KDQoJLy8gZmxhc2gNCgl0aGlzLnNoYXBlXzEgPSBuZXcgY2pzLlNoYXBlKCk7DQoJdGhpcy5zaGFwZV8xLmdyYXBoaWNzLmYoIiNGRkZGRkYiKS5zKCkucCgiQUZYQk9RZ0tnSEFBZ0xRQUJnS0FGZ0dRQUhnR0FKZ0NRZ0VnQ2dDZ0RRZ0RnREFBZ0VRQUFnS0FNZ0dRZ0lnRWdFZ0VRZ0ZnSEFBZ0pRQUFnT0FJZ0pRQUpnSEFQQUFRQUpBQUFFQUNJQWRBQUlBQUFGSWdTQUJRQUhBS0FBQUxRQUJBTmdLQUZRZ0lBSmdPQUFJZ0pBQVFnRkFDZ0RBRVFnQ0FEQUFBRFFBQUFGQURBQ1FBREFDQUlBQUlBUUFBUUFPQUFBSUFHUUFJQUdBQUFNUUFBQU9nTEFIUWdNQUlnV0FBUWdRQUJnS2dIZ0FGV0E3UUFBQVNBY0FCUUFrQUFnQmdYUUFCZ0pnR2dEUWdGZ0VnTkFBSWdQQUFRZ1pBQkFBQVRnQUZrZ2lRZ0hBSEFBQUxRQUFBS0FIQUdRQUdBREFMQUFRQUxBQUFHZ0RRQUdnR0FBZ0xRQUFnTWdHZ0ZRZ0hnR2dLQUFRZ01BQWdGQUdnQUlOQkJRQUdnV0FFZ1RJQUpBQUlBQkFDUWdHQVZnSkFTZ0FEY0FuSUFBZ0pRQU5BSUFQZ0JRQU9BQUFHZ0VRQUlnRUFBZ0lRZ0JnR2dGZ0ZRZ0dnRmdNZ0ZRZ09nQ2dGZ0VRZ0dnRGdEZ0ZRZ0NnRUFBZ0hRZ0JnSkFLZ0hRQUhnRkFRQUFRQVBnQkFOQUdJZ0VBSFFnTmdGZ0xBQVFnTEFBZ0dBRVFnSEFFQUFBR1FBQUFIQUZBRVFBRkFGQVBBRVFBTUFGQUdBQlFBRkFFQURBRlFBQ0FFQUJBR1FnQkFNZ0lBR1FnS0FIZ1JBQVFnU0FBZ0tnR2dBQ01BaFFnTGdNQUFnVlFBQWdVQUxnT1FBS2dNQVNBQVFBUUFBQUtBTFFBSUFMQUJBVElBQUFGSWhCQUFRZ0JBU0FKQUtRQUpBSkFQQUFJQU9nQlFBR2dCQUpnRElBQUFIUWdJQUVnR0FCSWdQQUJRZ1RBQWdMZ01nQUNUZ2ZRZ0hBSmdDQVFJQTRBQVFBQWdRZ0hnSlFnSGdJZ01BQVFnTkFBZ0lBSWdBaG5BaFFnTGdNQUFnVlFBQWdWQU1nTlFBS2dNQVVBQVFBTUFBQUxBRElnREFJUWdMZ0VnSkFBUWdSQUFnSUFMUWdKQUpBQUFUUUFBQVJBSkFLUUFJQUxBUWdCUUFNQUFBTGdESUFBQUhRZ0pBRWdPQUFRZ1RBQWdMZ01nQWpyQW5JQUFnSlFBT0FJQVBnQlFBT0FBQUdnRVFBSWdFZ0JnSVFBQmdHZ0dnRlFnRmdGZ05nRlFnT2dDZ0ZnRVFnRmdEZ0RnRlFnRWdFQUFnSFFBQmdKQUlnSFFBSmdGQVBBQVFBT2dCQU9BR0lnREFIUWdOZ0ZnTUFBUWdMQUFnR0FFUWdIQUVBQUFHUUFBQUhBRkFFUUFGQUZBUEFFUUFNQUZBR0FCUUFGQUVBREFGUUFEQUVnQkFHUUFCQU1nS0FHUWdKQUhnUkFBUWdTQUFnTGdHZ0FrNkFuSUFBZ0pRQU9BSUFQZ0JRQU5BQUFJZ0VRQUdnRUFBZ0lRQUJnR2dHZ0ZRZ0ZnRmdOZ0ZRZ09nQ2dGZ0VRZ0ZnRGdEZ0ZRZ0RnRWdCZ0hRQUJnSkFJZ0hRQUlnRkFRQUFRQVBnQkFNQUdJZ0NBSFFnT2dGZ0xBQVFnTEFBZ0hBRVFnR0FFQUFBR1FBQUFIQUZBRVFBRkFGQU9BRVFBTkFGQUZBQlFBR0FFQURBRlFBQ0FFQUFBR1FBQUFNZ0pBR1FnSkFIZ1JBQVFnU0FBZ0xnR2dBbUxBbVFnSWdHQUFnTlFBQWdNQU1nSFFBS2dHQVZnQklBUkFBSUFBZ0dRQUJnTmdHZ0hRZ0ZnR2dMQUFRZ05BQWdOQUhJZ0VnSVFBUGdHQVBBQVFBUEFBQUhBSFFBSEFJQUJBUUlBQUE3SWdIQUFJZ0NnUElBQUFBUWdIQUpnSUFFUWdHQURnTEFBUWdOQUFnSGdIZ0FsbkFBUWdTQUFnSkFFUWdIQUZnQkFMUUFCQUlBRkFGUUFFQUVBS0FBUUFPQUJBSmdKUUFJZ0lBQWdPSUFBZ0hnQW9SQWNRZ1BnUUFBZ2JRQUFnVEFIZ09RQUhnT0FPZ0lRQU1nSEFTZ0JRQVJBQkFQQUdJZ0VBSVFnTmdIZ1BBQVFnWEFBZ05BUFFnTUFQQUFBWlFBQUFZQU1BT1FBTUFPQVhBQVFBUUFBQU1nRElBQUFIUWdNQUVnU0FBUWdhQUFnT2dSZ0FIeEFzSUFBZzVRQUFnT2dGZ0dRZ0hnR2dMQUFRZ1JBQWdIQUlRZ0lBSUFBQVNJQUFBeElnSUFBSUFBaFlJQUhBQUlBQkFMSUFCQUFRQUpnTkFXQUFRQWZBQUFBQWdJQUFBNmdBRXlBc0lBQWhZSUFKQUFJQUFCWWdBQVFBc0lBQWg0SUFoQUFRQWRBQUFQQVFRQVBBUEFBQWRRQUFBY2dQQVFRZ1JBUWdmQUFnQUFZQWtJQVVBQVFBM0FBQUFnMFFBQWdhZ05nTlFnT2dPZ1pBQUlnWEFBZ0FpVEFzSUFBaFlJQUlBQUlBQUJZZ0FteUFzSUFBaUFJQUpBQUlBQUNBZ0FFeGhHUUFBZ0lBR0FBUUFBQUFBQkFBUUFBQUFBQkFCUUFBQUFBQkFBUUFBQUJBQUFBUUFDQUNBQUFFUUFBQUVnQ0FDUUFBQUJBQUFBUWdCQUJBQUFBUWdCQUFBQUFBUWdCQUJBQUFBUWdHQUFBQWdKZ0FpVWhHUUFBZ0lBRUFBUUFCQUFBQkFBUUFBQUFBQkFCUUFBQUFBQkFBUUFBQUJBQkFBUUFCQUNBQUFFUUFBQUVnQkFDUWdCQUJBQUFBUWdCQUJBQUFBUWdCQUFBQUFBUWdCQUJnQkFBUWdFQUFBQWdKZyIpOw0KCXRoaXMuc2hhcGVfMS5zZXRUcmFuc2Zvcm0oMzIuNiwxNC44KTsNCg0KCXRoaXMuYWRkQ2hpbGQodGhpcy5zaGFwZV8xLHRoaXMuc2hhcGUpOw0KfSkucHJvdG90eXBlID0gcCA9IG5ldyBjanMuQ29udGFpbmVyKCk7DQpwLm5vbWluYWxCb3VuZHMgPSBuZXcgY2pzLlJlY3RhbmdsZSgtMjUsLTEsMTE2LjEsNTAuMyk7DQoNCg0KKGxpYi5tY19jb3B5MDFfbG4wMSA9IGZ1bmN0aW9uKCkgew0KCXRoaXMuaW5pdGlhbGl6ZSgpOw0KDQoJLy8gdmVjdG9yIGNvcHkNCgl0aGlzLnNoYXBlID0gbmV3IGNqcy5TaGFwZSgpOw0KCXRoaXMuc2hhcGUuZ3JhcGhpY3MuZigiI0ZGRkZGRiIpLnMoKS5wKCJBQkJCVElBQWdIUUFFQUJBR0FBUUFFQUFBRGdDUUFFZ0NBQ2dFSUFHZ05JQUZnTUlnamhZSUFKQUFJQVRBd1FBSkFZQUNBSUlBQUFBSUFNZ2dJQVRnd0lBSUFBSWdvQm1RZ0ZBTmdEQUZRZ0VBRmdFQUNRZ0ZBQ2dHQUFRZ0ZBQWdGZ0NnQUpzQW1RQUFnSkFHQUJRQUhnQkFBQUpRQUFBSGdIQUJRZ0dnQkFBZ0hnQUhKQW9JQUFnSlFBT0FIQVBBQVFBTkFBQUhnRlFBSGdFQUFnSFFBQWdIZ0ZnRVFnR2dGZ01nRlFnT2dDZ0ZnRVFnR2dFZ0RnRVFnRGdGQUFnR1FBQWdLQUpnR1FBSWdHQVFBQVFBT0FBQU5BRklnREFJUWdOZ0ZnTGdCUWdMQUJnSEFEUWdHQUVBQUFIUUFBQUdBRkFGUUFGQUVBT0FGUUFOQUVBRkFDUUFHQUVBREFFUUFDQUZBQUFGUUFBQU1nSkFIUWdKQUdnUkFCUWdTZ0JnTGdGZ0FGNkFvSUFBZ0pRQU9BSEFQQUFRQU5BQUFIZ0ZRQUhnRUFBZ0hRQUFnSGdGZ0VRZ0dnRmdNZ0ZRZ09nQ2dGZ0VRZ0dnRWdEZ0VRZ0RnRkFBZ0dRQUFnS0FKZ0dRQUlnR0FRQUFRQU9BQUFOQUZJZ0RBSVFnTmdGZ0xnQlFnTEFCZ0hBRFFnR0FFQUFBSFFBQUFHQUZBRlFBRkFFQU9BRlFBTkFFQUZBQ1FBR0FFQURBRVFBQ0FGQUFBRlFBQUFNZ0pBSFFnSkFHZ1JBQlFnU2dCZ0xnRmdBRXNBb1FnSmdHZ0ZnTFFnRWdLQUFnTlFBQWdXQUtnTFFBTGdOQVRBQVFBU0FBQUxBTlFBS0FNQUFBVlFBQUFWZ0tBTVFnTEFNZ1RBQlFnTWdCZ0pnRmdBRXFnY1FnSUFLQUFBU1FBQUFTQUlBS1FBSkFLQVBBQVFBT0FBQUpnS1FBSWdLQUFnU1FBQWdTZ0lnS1FnSmdMZ1BBQVFnUEFBZ0lBTGdBQUFBcFFnSGdEZ0VnSUlnQkFBSWdDQU9JZ0dBQUlBQWgvSUFKQUFJQUFBaElnQkFNSUFBQUlJQUJBQVFBRmdJQUdnRVFBR2dFQUtBQVFBVEFBQUtBTVFBS0FNQUFBV1FBQUFXZ0tBTFFnTEFNZ1NBQlFnS0FBZ0dnRmdBZ0ZnZVFnR0FLQUFBVUlBQUFBUUFBQVVBSEFLUUFGQUpBUGdCUUFQQUJBSGdMUUFJZ0tBQWdTUUFBZ21nZWdCUWdRQUJnRkFJZ0FpZ0FpUWdLZ0xBQWdYUUFBZ1ZBS2dNUUFLZ05BU0FBUUFLQUFBSEFFUUFIQURBR0FKSUFCQUFJZ0JnVUlBQWdoSUFJQUFJQUFCL0lnRkFBSWdDZ09JZ0JBQVFnS0FRZ1RBQVFnVEFBZ0tnTWdBaWFnY1FnSEFMQUFBUlFBQUFuQWVnQlFBUEFCQUhnSlFBSGdLQUFnVUlBQUFBUUFBZ1VnSGdLUWdIZ0lnUWdCUWdPQUFnSUFMZ0FqOEFoUWdMZ0xBQWdXUUFBZ1VBS2dOUUFMZ05BU0FBUUFRQUFBSkFMUUFKQU1BQUFTSUFBQUZJaEJBQVFBQUFUQUpBS1FBSUFKQVFBQUlBT2dCUUFHZ0JBSmdFSUFBQUlRZ0lBRWdHQUJJZ1BBQlFnVGdCZ0xnTWdBajFnZVFnSUFJZ0JBUklBNEFBUUFBZ1FnSGdKUWdIZ0pnTUFBUWdOQUFnSUFKZ0FrMUFuUWdHZ0dBQWdPSUFBZzRJZ05BQUlBQWdGSUFOZ0VJQUVnVUlBRkFBSUFBQVdJQWFBQUlBQUFISWdhQUFJQUFBM1FBQUFMQURBRVFBRUFHQUlnQlFBSEFBQUdnQklBQUFIUWdHQUNnSEFBUWdNQUFnR2dIZ0FuSUFuUWdIZ0hBQWdNUUFBZ05BTGdIUUFMZ0dBVkFBSUFSQUFJQUFnSFFBQWdNZ0ZnSFFnR2dHZ0xnQlFnTkFBZ05BSElnRGdIUUFQZ0hBT0FBUUFQQUFBSEFJUUFJQUhBQUFSSUFBQTZJZ0dBQUlnQ2dPSWdCQUFRZ0hBSmdIQURRZ0hBRGdLQUJRZ05nQmdJZ0dnQW1qQUFRZ1RBQWdJQUVRZ0lBR0FBQUtRQUFBSkFGQUVRQUZBRkFKQUFRQVBBQUFJZ0lRQUpnSkFBZ09JQUFnSGdBcHBBZFFnUGdRQUFnY1FBQWdUQUhnT1FBSGdPQU5nSFFBTmdJQVNBQVFBUkFBQVBBSElnRUFIUWdOZ0dnUEFBUWdYQUFnTkFPUWdOQVBBQUFaUUFBQVlBTkFPUUFNQVBBWEFBUUFQQUFBTmdFSUFBQUhRZ01BRmdTQUFRZ2FBQWdPZ1JnQUpIQXNJQUFoL0lBSUFBSUFBQi9nQUlnQXNJQUFoWUlBSkFBSUFBQllnQURMQXNJQUFoNElCREFBSUFBQUlJZzZBQUlBQUEwSUEzQUFJQUFBSUlnM0FBSUFBQTBnQWxxQXNJQUFoUklnUkFBSUFBZ0ZJQVJnRElBQWdIUUFBZ1FBR2dKUUFHZ0hBT0FBUUFIQUFBSUFDSWdDQUhRZ0hnQ2dHQUFRZ0tBQWdFQUdRZ0VBR0FBQU5JQUFBSUlBVkFBSUFBQUhJZ1ZBQUlBQUJSZ0FvS0FzSUFBaFlJQUhBQUlBQkFRSUFBQUFRQUdnS0FHZ0VRQUdnRUFKQUFJQU5BQklnQ0FJSWdNZ0NRZ0xBQmdJQUpRZ0hBS0FBQVBJQUFBd2dBSWZoRlFBQWdKQUZBQlFBQkFBQUFBQVFBQkFBQUJBQVFBQUFBQUFBQlFBQkFBQUFBQlFBQ0FDQUFBRVFBQUFEZ0NBQ1FBQUFCZ0JBQlFBQUFBQUFBQVFnQkFCZ0JBQVFBQUFBZ0JBQVFnRkFBQUFnSWciKTsNCgl0aGlzLnNoYXBlLnNldFRyYW5zZm9ybSg2My40LDM1LjcpOw0KDQoJdGhpcy5hZGRDaGlsZCh0aGlzLnNoYXBlKTsNCn0pLnByb3RvdHlwZSA9IHAgPSBuZXcgY2pzLkNvbnRhaW5lcigpOw0KcC5ub21pbmFsQm91bmRzID0gbmV3IGNqcy5SZWN0YW5nbGUoLTMsMjAsMTM2LDUwLjMpOw0KDQoNCihsaWIubWNfYmdfYmx1ZSA9IGZ1bmN0aW9uKCkgew0KCXRoaXMuaW5pdGlhbGl6ZSgpOw0KDQoJLy8gTGF5ZXIgMQ0KCXRoaXMuc2hhcGUgPSBuZXcgY2pzLlNoYXBlKCk7DQoJdGhpcy5zaGFwZS5ncmFwaGljcy5mKCIjNDJBNkY2IikucygpLnAoIkFzZlo4TUFBQWd6M0lZL0FBTUFBQUF6M2ciKTsNCgl0aGlzLnNoYXBlLnNldFRyYW5zZm9ybSg4MCwxNjYpOw0KDQoJdGhpcy5hZGRDaGlsZCh0aGlzLnNoYXBlKTsNCn0pLnByb3RvdHlwZSA9IHAgPSBuZXcgY2pzLkNvbnRhaW5lcigpOw0KcC5ub21pbmFsQm91bmRzID0gbmV3IGNqcy5SZWN0YW5nbGUoMCwwLDE2MCwzMzIpOw0KDQoNCihsaWIubWNfYmcgPSBmdW5jdGlvbigpIHsNCgl0aGlzLmluaXRpYWxpemUoKTsNCg0KCS8vIExheWVyIDENCgl0aGlzLnNoYXBlID0gbmV3IGNqcy5TaGFwZSgpOw0KCXRoaXMuc2hhcGUuZ3JhcGhpY3MuZigiI0ZDRkNGQyIpLnMoKS5wKCJBc2ZVOE1BQUFncDJJWS9BQU1BQUFBcDJnIik7DQoJdGhpcy5zaGFwZS5zZXRUcmFuc2Zvcm0oODAsNDY2KTsNCg0KCXRoaXMuYWRkQ2hpbGQodGhpcy5zaGFwZSk7DQp9KS5wcm90b3R5cGUgPSBwID0gbmV3IGNqcy5Db250YWluZXIoKTsNCnAubm9taW5hbEJvdW5kcyA9IG5ldyBjanMuUmVjdGFuZ2xlKDAsMzMyLDE2MCwyNjgpOw0KDQoNCihsaWIubWNfYXN1cyA9IGZ1bmN0aW9uKCkgew0KCXRoaXMuaW5pdGlhbGl6ZSgpOw0KDQoJLy8gTGF5ZXIgMQ0KCXRoaXMuaW5zdGFuY2UgPSBuZXcgbGliLkZvc3NpbF9sb2dvXzE2MHg2MDAoKTsNCgl0aGlzLmluc3RhbmNlLnNldFRyYW5zZm9ybSg3LC0xMik7DQoNCgl0aGlzLmFkZENoaWxkKHRoaXMuaW5zdGFuY2UpOw0KfSkucHJvdG90eXBlID0gcCA9IG5ldyBjanMuQ29udGFpbmVyKCk7DQpwLm5vbWluYWxCb3VuZHMgPSBuZXcgY2pzLlJlY3RhbmdsZSg3LC0xMiw4MCwyOCk7DQoNCg0KKGxpYi5tY19jdGFDb3B5ID0gZnVuY3Rpb24oKSB7DQoJdGhpcy5pbml0aWFsaXplKCk7DQoNCgkvLyBMYXllciAxDQoJdGhpcy5zaGFwZSA9IG5ldyBjanMuU2hhcGUoKTsNCgl0aGlzLnNoYXBlLmdyYXBoaWNzLmYoIiM0MkE2RjYiKS5zKCkucCgiQUJYQWVRZ0tnTEFBZ1RRQUFnVEFLZ0tRQUtnTEFTQUFRQVNBQUFLQUxRQUpBTEFBQVNRQUFBVGdKQUxRZ0tBS2dTQUFRZ1NBQWdLZ0tnQUJoZ1ZRZ0dBSEFBQU9RQUFBT0FHQUlRQUdBSEFNQUJRQU1nQkFGZ0hRQUdnSEFBZ1BRQUFnT2dGZ0hRZ0dnSWdNQUFRZ01BQWdHQUlnQWkzQWZRZ0lnSEFBZ09JQUFneUlBTkFBSUFBQXhRQUFBS0FGQUVRQUVBR0FLQUFRQVNBQUFBZ1VJQUFneElBTkFBSUFBQXpRQUFBSWdEQUhRZ0VBR2dIQUVRZ0lBRGdLQUFRZ09BQmdKZ0pnQURqQW5JZ09ndUlnQ2dKSWdCZ0lJZ0NBSklnQ0FJSWdPQXVJZ09BQUlnVmhQSUFPQUFJQUxBdElBRUFVSUFDZ0xJQUNnSklBTmd0SUFOQUFJQU5BdElBRUFVSUFFZ1VJQU1ndElBTkFBSWdWQlBnQUFtQW5JZ21nK0lBQUFBSUFBQURJQUFBVElBQUFvSWdMQUFJQUFoUElBT0FBSUFuQStJQUJBQUlnQmdKSUFBZ01JQUFncElBTUFBSUFBQlBnQWhVQW5JQUFnZklnYmd3SUFPQUFJQVRBbElBVGdsSUFQQUFJZ2JBdklBQUFnZ0FrRkFuSUFBaFBJQVlBQVFBUkFBQUhBR1FBSEFFQUFBS1FBQUFJZ0RBRVFnRUFGZ0hBQklBQUFBUUFKQUNBRUFEUUFFQUZBQUFIUUFBQU1nSUFGUWdIQUhnT0FBZ0FqNEFjSUFPQUFRQUlBQUFGZ0VRQUVnREFBZ0hRQUFnR2dFZ0RRZ0ZnRGdJQUFJZ09BQWdBajRnR0lBTkFBUUFJQUFBRWdEUUFFZ0RBQWdHUUFBZ0dnRWdDUWdFZ0NnSmdCSWdNQUFnIik7DQoJdGhpcy5zaGFwZS5zZXRUcmFuc2Zvcm0oMjYuMiw0LjEpOw0KDQoJdGhpcy5hZGRDaGlsZCh0aGlzLnNoYXBlKTsNCn0pLnByb3RvdHlwZSA9IHAgPSBuZXcgY2pzLkNvbnRhaW5lcigpOw0KcC5ub21pbmFsQm91bmRzID0gbmV3IGNqcy5SZWN0YW5nbGUoMCwwLDUyLjUsOC4yKTsNCg0KDQoobGliLm1jX2N0YUJhc2UgPSBmdW5jdGlvbigpIHsNCgl0aGlzLmluaXRpYWxpemUoKTsNCg0KCS8vIExheWVyIDENCgl0aGlzLnNoYXBlID0gbmV3IGNqcy5TaGFwZSgpOw0KCXRoaXMuc2hhcGUuZ3JhcGhpY3MuZigiIzQyQTZGNiIpLnMoKS5wKCJBbGRCZUlBQWk4SUs3QUFJQUFDOGdBbFRCVklLbkFBSUFBaXBJcW5BQWciKTsNCgl0aGlzLnNoYXBlLnNldFRyYW5zZm9ybSgzNSw5LjUpOw0KDQoJdGhpcy5hZGRDaGlsZCh0aGlzLnNoYXBlKTsNCn0pLnByb3RvdHlwZSA9IHAgPSBuZXcgY2pzLkNvbnRhaW5lcigpOw0KcC5ub21pbmFsQm91bmRzID0gbmV3IGNqcy5SZWN0YW5nbGUoMCwwLDcwLDE5KTsNCg0KDQoobGliLm1jX3dhdGNoMDMgPSBmdW5jdGlvbihtb2RlLHN0YXJ0UG9zaXRpb24sbG9vcCkgew0KCXRoaXMuaW5pdGlhbGl6ZShtb2RlLHN0YXJ0UG9zaXRpb24sbG9vcCx7fSk7DQoNCgkvLyB0aW1lbGluZSBmdW5jdGlvbnM6DQoJdGhpcy5mcmFtZV8wID0gZnVuY3Rpb24oKSB7DQoJCXRoaXMuZ290b0FuZFN0b3AoKTsNCgl9DQoJdGhpcy5mcmFtZV81OCA9IGZ1bmN0aW9uKCkgew0KCQl0aGlzLmdvdG9BbmRTdG9wKCk7DQoJfQ0KDQoJLy8gYWN0aW9ucyB0d2VlbjoNCgl0aGlzLnRpbWVsaW5lLmFkZFR3ZWVuKGNqcy5Ud2Vlbi5nZXQodGhpcykuY2FsbCh0aGlzLmZyYW1lXzApLndhaXQoNTgpLmNhbGwodGhpcy5mcmFtZV81OCkud2FpdCgxKSk7DQoNCgkvLyBMYXllciAyIGNvcHkgMyAobWFzaykNCgl2YXIgbWFzayA9IG5ldyBjanMuU2hhcGUoKTsNCgltYXNrLl9vZmYgPSB0cnVlOw0KCW1hc2suZ3JhcGhpY3MucCgiQUFBRDNRaHVnUmhCaEZRZ2xnbmdWZ3dRZ1dnd2dDZ3dRZ0dobUJKaEJRQkpoRkJ3QUxRQnhBTUJQQlpRQk5CWGdGQm9RZ0JBVmdJQWFJakZDZElnUUFCUWdTQUFnVGdEZyIpOw0KCW1hc2suc2V0VHJhbnNmb3JtKDEwMS4yLDU2LjcpOw0KDQoJLy8gTGF5ZXIgNSBjb3B5DQoJdGhpcy5pbnN0YW5jZSA9IG5ldyBsaWIubWNfbGlnaHQoKTsNCgl0aGlzLmluc3RhbmNlLnNldFRyYW5zZm9ybSg0MjksMTAwLjYsMS41MDcsMS41MDcsOCwwLDAsMTM2LjEsODMuOCk7DQoNCgl0aGlzLmluc3RhbmNlLm1hc2sgPSBtYXNrOw0KDQoJdGhpcy50aW1lbGluZS5hZGRUd2VlbihjanMuVHdlZW4uZ2V0KHRoaXMuaW5zdGFuY2UpLndhaXQoNCkudG8oe3JlZ1g6NTMuOCxyZWdZOjgzLjcseDozMTMuNix5Ojg5LjcsYWxwaGE6MC44OTl9LDApLndhaXQoMSkudG8oe3g6MzE4LjIseTo5My44LGFscGhhOjAuODM2fSwwKS53YWl0KDEpLnRvKHt4OjMyMS44LHk6OTYuOSxhbHBoYTowLjc4OH0sMCkud2FpdCgxKS50byh7eDozMjQuNyx5Ojk5LjUsYWxwaGE6MC43NDh9LDApLndhaXQoMSkudG8oe3g6MzI3LjIseToxMDEuNyxhbHBoYTowLjcxNH0sMCkud2FpdCgxKS50byh7eDozMjkuNCx5OjEwMy42LGFscGhhOjAuNjg1fSwwKS53YWl0KDEpLnRvKHt4OjMzMS40LHk6MTA1LjMsYWxwaGE6MC42NTh9LDApLndhaXQoMSkudG8oe3g6MzMzLjEseToxMDYuOCxhbHBoYTowLjYzNH0sMCkud2FpdCgxKS50byh7eDozMzQuNyx5OjEwOC4yLGFscGhhOjAuNjEzfSwwKS53YWl0KDEpLnRvKHt4OjMzNi4yLHk6MTA5LjUsYWxwaGE6MC41OTN9LDApLndhaXQoMSkudG8oe3g6MzM3LjUseToxMTAuNyxhbHBoYTowLjU3NH0sMCkud2FpdCgxKS50byh7eDozMzguOCx5OjExMS44LGFscGhhOjAuNTU4fSwwKS53YWl0KDEpLnRvKHt4OjMzOS45LHk6MTEyLjgsYWxwaGE6MC41NDJ9LDApLndhaXQoMSkudG8oe3g6MzQxLHk6MTEzLjcsYWxwaGE6MC41Mjd9LDApLndhaXQoMSkudG8oe3g6MzQyLHk6MTE0LjYsYWxwaGE6MC41MTR9LDApLndhaXQoMSkudG8oe3g6MzQyLjkseToxMTUuNCxhbHBoYTowLjUwMX0sMCkud2FpdCgxKS50byh7eDozNDMuOCx5OjExNi4yLGFscGhhOjAuNDg5fSwwKS53YWl0KDEpLnRvKHt4OjM0NC42LHk6MTE2LjksYWxwaGE6MC40Nzh9LDApLndhaXQoMSkudG8oe3g6MzQ1LjQseToxMTcuNixhbHBoYTowLjQ2N30sMCkud2FpdCgxKS50byh7eDozNDYuMSx5OjExOC4yLGFscGhhOjAuNDU3fSwwKS53YWl0KDEpLnRvKHt4OjM0Ni44LHk6MTE4LjgsYWxwaGE6MC40NDh9LDApLndhaXQoMSkudG8oe3g6MzQ3LjUseToxMTkuNCxhbHBoYTowLjQzOX0sMCkud2FpdCgxKS50byh7eDozNDguMSx5OjExOS45LGFscGhhOjAuNDMxfSwwKS53YWl0KDEpLnRvKHt4OjM0OC43LHk6MTIwLjQsYWxwaGE6MC40MjN9LDApLndhaXQoMSkudG8oe3g6MzQ5LjIseToxMjAuOSxhbHBoYTowLjQxNn0sMCkud2FpdCgxKS50byh7eDozNDkuNyx5OjEyMS40LGFscGhhOjAuNDA5fSwwKS53YWl0KDEpLnRvKHt4OjM1MC4yLHk6MTIxLjgsYWxwaGE6MC40MDJ9LDApLndhaXQoMSkudG8oe3g6MzUwLjcseToxMjIuMixhbHBoYTowLjM5Nn0sMCkud2FpdCgxKS50byh7eDozNTEuMSx5OjEyMi41LGFscGhhOjAuMzl9LDApLndhaXQoMSkudG8oe3g6MzUxLjUseToxMjIuOSxhbHBoYTowLjM4NX0sMCkud2FpdCgxKS50byh7eDozNTEuOSx5OjEyMy4yLGFscGhhOjAuMzh9LDApLndhaXQoMSkudG8oe3g6MzUyLjIseToxMjMuNSxhbHBoYTowLjM3NX0sMCkud2FpdCgxKS50byh7eDozNTIuNSx5OjEyMy44LGFscGhhOjAuMzd9LDApLndhaXQoMSkudG8oe3g6MzUyLjkseToxMjQuMSxhbHBoYTowLjM2Nn0sMCkud2FpdCgxKS50byh7eDozNTMuMSx5OjEyNC40LGFscGhhOjAuMzYyfSwwKS53YWl0KDEpLnRvKHt4OjM1My40LHk6MTI0LjYsYWxwaGE6MC4zNTh9LDApLndhaXQoMSkudG8oe3g6MzUzLjcseToxMjQuOCxhbHBoYTowLjM1NX0sMCkud2FpdCgxKS50byh7eDozNTMuOSx5OjEyNSxhbHBoYTowLjM1Mn0sMCkud2FpdCgxKS50byh7eDozNTQuMSx5OjEyNS4yLGFscGhhOjAuMzQ5fSwwKS53YWl0KDEpLnRvKHt4OjM1NC4zLHk6MTI1LjQsYWxwaGE6MC4zNDZ9LDApLndhaXQoMSkudG8oe3g6MzU0LjUseToxMjUuNSxhbHBoYTowLjM0NH0sMCkud2FpdCgxKS50byh7eDozNTQuNyx5OjEyNS43LGFscGhhOjAuMzQxfSwwKS53YWl0KDEpLnRvKHt4OjM1NC44LHk6MTI1LjgsYWxwaGE6MC4zMzl9LDApLndhaXQoMSkudG8oe3g6MzU1LHk6MTI1LjksYWxwaGE6MC4zMzd9LDApLndhaXQoMSkudG8oe3g6MzU1LjEseToxMjYuMSxhbHBoYTowLjMzNn0sMCkud2FpdCgxKS50byh7eDozNTUuMix5OjEyNi4yLGFscGhhOjAuMzM0fSwwKS53YWl0KDEpLnRvKHt4OjM1NS4zLGFscGhhOjAuMzMzfSwwKS53YWl0KDEpLnRvKHt4OjM1NS40LHk6MTI2LjMsYWxwaGE6MC4zMzJ9LDApLndhaXQoMSkudG8oe3g6MzU1LjUseToxMjYuNCxhbHBoYTowLjMzMX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4zM30sMCkud2FpdCgxKS50byh7eDozNTUuNix5OjEyNi41LGFscGhhOjAuMzI5fSwwKS53YWl0KDIpLnRvKHthbHBoYTowLjMyOH0sMCkud2FpdCgyKS50byh7cmVnWDoxMzYseDo0NzguNCx5OjE0My45fSwwKS53YWl0KDEpKTsNCg0KCS8vIExheWVyIDIgY29weSAyIChtYXNrKQ0KCXZhciBtYXNrXzEgPSBuZXcgY2pzLlNoYXBlKCk7DQoJbWFza18xLl9vZmYgPSB0cnVlOw0KCW1hc2tfMS5ncmFwaGljcy5wKCJBQVRFWVFoc2dSaEJoRlFnbGdtZ1Znd1FnV2d4Z0NneFFnR2hrQkpoQ1FCSmhGQnVBTVFCekFNQlBCWVFCTkJZZ0ZCblFnQkFWZ0lBYUlqRkNlSWdRQUJRZ1NBQWdWZ0VnQWtYaHlRQWhoUEJOZ29RQW5nVUFoZ0RJZzFnTklnVWdGSUFBZ0NJQWxnR0lBQmdCUUFjQUdBUUFHUUFZQUxBTEFCUUFPQUVCTEFKUUJDQU1Bd0FpUUFhQVRBY0FjUUFEQURBS0FFSUFMQUVRQUNBRmdOQUNRZ0NBQWdmZ2VRZzFnbWd0Z1FRZ3RnUWhBZ0ZRaDZnR2hOQkJRZ1hBVGdRQVlJZ0xBVVFnRUFGZ0NBQUlnQmdCZyIpOw0KCW1hc2tfMS5zZXRUcmFuc2Zvcm0oOTkuMSw1My4zKTsNCg0KCS8vIExheWVyIDQgY29weQ0KCXRoaXMuaW5zdGFuY2VfMSA9IG5ldyBsaWIubWNfaGlnaGxpZ2h0TGluZSgpOw0KCXRoaXMuaW5zdGFuY2VfMS5zZXRUcmFuc2Zvcm0oNy4yLDIzLjEsMS43MTUsMS4zMTEsMTYsMCwwLDExOC4zLDE0My44KTsNCgl0aGlzLmluc3RhbmNlXzEuYWxwaGEgPSAwLjE3MjsNCg0KCXRoaXMuaW5zdGFuY2VfMS5tYXNrID0gbWFza18xOw0KDQoJdGhpcy50aW1lbGluZS5hZGRUd2VlbihjanMuVHdlZW4uZ2V0KHRoaXMuaW5zdGFuY2VfMSkud2FpdCgxKS50byh7cm90YXRpb246MTYuMix4OjMyLjMseTozNS4yLGFscGhhOjAuMTQ4fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjoxNi40LHg6NDguOSx5OjQzLjIsYWxwaGE6MC4xMzN9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOjE2LjYseDo2MS43LHk6NDkuMyxhbHBoYTowLjEyMX0sMCkud2FpdCgxKS50byh7cm90YXRpb246MTYuNyx4OjcyLjIseTo1NC40LGFscGhhOjAuMTExfSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjoxNi44LHg6ODEuMSx5OjU4LjYsYWxwaGE6MC4xMDJ9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOjE2LjkseDo4OC44LHk6NjIuMyxhbHBoYTowLjA5NX0sMCkud2FpdCgxKS50byh7eDo5NS41LHk6NjUuNixhbHBoYTowLjA4OX0sMCkud2FpdCgxKS50byh7cm90YXRpb246MTcseDoxMDEuNix5OjY4LjUsYWxwaGE6MC4wODN9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOjE3LjEseDoxMDcseTo3MS4xLGFscGhhOjAuMDc4fSwwKS53YWl0KDEpLnRvKHt4OjExMix5OjczLjUsYWxwaGE6MC4wNzN9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOjE3LjIseDoxMTYuNCx5Ojc1LjcsYWxwaGE6MC4wNjl9LDApLndhaXQoMSkudG8oe3g6MTIwLjYseTo3Ny43LGFscGhhOjAuMDY1fSwwKS53YWl0KDEpLnRvKHt4OjEyNC4zLHk6NzkuNSxhbHBoYTowLjA2Mn0sMCkud2FpdCgxKS50byh7cm90YXRpb246MTcuMyx4OjEyNy44LHk6ODEuMSxhbHBoYTowLjA1OX0sMCkud2FpdCgxKS50byh7eDoxMzEseTo4Mi43LGFscGhhOjAuMDU2fSwwKS53YWl0KDEpLnRvKHt4OjEzNCx5Ojg0LjEsYWxwaGE6MC4wNTN9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOjE3LjQseDoxMzYuNyx5Ojg1LjQsYWxwaGE6MC4wNX0sMCkud2FpdCgxKS50byh7eDoxMzkuMix5Ojg2LjcsYWxwaGE6MC4wNDh9LDApLndhaXQoMSkudG8oe3g6MTQxLjYseTo4Ny43LGFscGhhOjAuMDQ2fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjoxNy41LHg6MTQzLjcseTo4OC44LGFscGhhOjAuMDQzfSwwKS53YWl0KDEpLnRvKHt4OjE0NS44LHk6ODkuOCxhbHBoYTowLjA0Mn0sMCkud2FpdCgxKS50byh7eDoxNDcuNyx5OjkwLjcsYWxwaGE6MC4wNH0sMCkud2FpdCgxKS50byh7eDoxNDkuNSx5OjkxLjUsYWxwaGE6MC4wMzh9LDApLndhaXQoMSkudG8oe3g6MTUxLjEseTo5Mi40LGFscGhhOjAuMDM3fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjoxNy42LHg6MTUyLjcseTo5My4xLGFscGhhOjAuMDM1fSwwKS53YWl0KDEpLnRvKHt4OjE1NC4xLHk6OTMuOCxhbHBoYTowLjAzNH0sMCkud2FpdCgxKS50byh7eDoxNTUuNCx5Ojk0LjQsYWxwaGE6MC4wMzN9LDApLndhaXQoMSkudG8oe3g6MTU2LjYseTo5NS4xLGFscGhhOjAuMDMxfSwwKS53YWl0KDEpLnRvKHt4OjE1Ny44LHk6OTUuNixhbHBoYTowLjAzfSwwKS53YWl0KDEpLnRvKHt4OjE1OC45LHk6OTYuMSxhbHBoYTowLjAyOX0sMCkud2FpdCgxKS50byh7eDoxNTkuOSx5Ojk2LjYsYWxwaGE6MC4wMjh9LDApLndhaXQoMSkudG8oe3g6MTYwLjgseTo5NyxhbHBoYTowLjAyN30sMCkud2FpdCgxKS50byh7cm90YXRpb246MTcuNyx4OjE2MS42LHk6OTcuNH0sMCkud2FpdCgxKS50byh7eDoxNjIuNCx5Ojk3LjgsYWxwaGE6MC4wMjZ9LDApLndhaXQoMSkudG8oe3g6MTYzLjEseTo5OC4xLGFscGhhOjAuMDI1fSwwKS53YWl0KDEpLnRvKHt4OjE2My44LHk6OTguNX0sMCkud2FpdCgxKS50byh7eDoxNjQuNCx5Ojk4LjgsYWxwaGE6MC4wMjR9LDApLndhaXQoMSkudG8oe3g6MTY1LHk6OTkuMX0sMCkud2FpdCgxKS50byh7eDoxNjUuNSx5Ojk5LjMsYWxwaGE6MC4wMjN9LDApLndhaXQoMSkudG8oe3g6MTY2LHk6OTkuNn0sMCkud2FpdCgxKS50byh7eDoxNjYuNCx5Ojk5LjgsYWxwaGE6MC4wMjJ9LDApLndhaXQoMSkudG8oe3g6MTY2LjgseTo5OS45fSwwKS53YWl0KDEpLnRvKHt4OjE2Ny4yLHk6MTAwLjEsYWxwaGE6MC4wMjF9LDApLndhaXQoMSkudG8oe3g6MTY3LjUseToxMDAuMn0sMCkud2FpdCgxKS50byh7eDoxNjcuOCx5OjEwMC40fSwwKS53YWl0KDEpLnRvKHt4OjE2OCx5OjEwMC41fSwwKS53YWl0KDEpLnRvKHt4OjE2OC4zLHk6MTAwLjYsYWxwaGE6MC4wMn0sMCkud2FpdCgxKS50byh7eDoxNjguNSx5OjEwMC43fSwwKS53YWl0KDEpLnRvKHt4OjE2OC43LHk6MTAwLjh9LDApLndhaXQoMSkudG8oe3g6MTY4LjgseToxMDAuOX0sMCkud2FpdCgyKS50byh7eDoxNjguOSx5OjEwMX0sMCkud2FpdCgxKS50byh7eDoxNjl9LDApLndhaXQoMSkudG8oe3g6MTY5LjF9LDApLndhaXQoMSkudG8oe3k6MTAxLjF9LDApLndhaXQoMSkudG8oe3g6MTY5LjJ9LDApLndhaXQoMikudG8oe3g6MTY5LjMseToxMDF9LDApLndhaXQoMSkpOw0KDQoJLy8gTGF5ZXIgMiAobWFzaykNCgl2YXIgbWFza18yID0gbmV3IGNqcy5TaGFwZSgpOw0KCW1hc2tfMi5fb2ZmID0gdHJ1ZTsNCgltYXNrXzIuZ3JhcGhpY3MucCgiQWllRU9RZ2FnTmdUZ1VRaGZoZmdCaHVRQUFnOEFaZzVRQVlnNkFyZ3FRQlloVkI2QUNRQjZBQ0JZQllRQldCWUFCQjRRZ0JCNmhXQlZRZ1NBU2drQVBnIik7DQoJbWFza18yLnNldFRyYW5zZm9ybSgzMSw3MSk7DQoNCgkvLyBMYXllciA1DQoJdGhpcy5pbnN0YW5jZV8yID0gbmV3IGxpYi5tY19saWdodCgpOw0KCXRoaXMuaW5zdGFuY2VfMi5zZXRUcmFuc2Zvcm0oMzU0LDc4LjYsMS41MDcsMS41MDcsLTEuMiwwLDAsMTM2LjEsODMuOCk7DQoNCgl0aGlzLmluc3RhbmNlXzIubWFzayA9IG1hc2tfMjsNCg0KCXRoaXMudGltZWxpbmUuYWRkVHdlZW4oY2pzLlR3ZWVuLmdldCh0aGlzLmluc3RhbmNlXzIpLndhaXQoMSkudG8oe3JlZ1g6NTMuOCxyZWdZOjgzLjcscm90YXRpb246LTAuOSx4OjIzOS40LHk6ODQuOSxhbHBoYTowLjkwM30sMCkud2FpdCgxKS50byh7cm90YXRpb246LTAuOCx4OjI0NS40LHk6ODcuMixhbHBoYTowLjg0Mn0sMCkud2FpdCgxKS50byh7cm90YXRpb246LTAuNix4OjI1MCx5Ojg5LjEsYWxwaGE6MC43OTV9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0wLjUseDoyNTMuNyx5OjkwLjYsYWxwaGE6MC43NTZ9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0wLjQseDoyNTcseTo5MS45LGFscGhhOjAuNzIzfSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMC4zLHg6MjU5LjgseTo5MyxhbHBoYTowLjY5NH0sMCkud2FpdCgxKS50byh7eDoyNjIuNCx5Ojk0LGFscGhhOjAuNjY3fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMC4yLHg6MjY0LjcseTo5NC45LGFscGhhOjAuNjQ0fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMC4xLHg6MjY2LjcseTo5NS44LGFscGhhOjAuNjIyfSwwKS53YWl0KDEpLnRvKHt4OjI2OC43LHk6OTYuNixhbHBoYTowLjYwM30sMCkud2FpdCgxKS50byh7cm90YXRpb246MCx4OjI3MC40LHk6OTcuMixhbHBoYTowLjU4NX0sMCkud2FpdCgxKS50byh7eDoyNzIuMSx5Ojk3LjksYWxwaGE6MC41Njh9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOjAuMSx4OjI3My42LHk6OTguNSxhbHBoYTowLjU1Mn0sMCkud2FpdCgxKS50byh7eDoyNzUseTo5OS4xLGFscGhhOjAuNTM4fSwwKS53YWl0KDEpLnRvKHt4OjI3Ni40LHk6OTkuNixhbHBoYTowLjUyNH0sMCkud2FpdCgxKS50byh7cm90YXRpb246MC4yLHg6Mjc3LjYseToxMDAuMSxhbHBoYTowLjUxMX0sMCkud2FpdCgxKS50byh7eDoyNzguOCx5OjEwMC42LGFscGhhOjAuNDk5fSwwKS53YWl0KDEpLnRvKHt4OjI3OS45LHk6MTAxLGFscGhhOjAuNDg4fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjowLjMseDoyODAuOSx5OjEwMS40LGFscGhhOjAuNDc3fSwwKS53YWl0KDEpLnRvKHt4OjI4MS45LHk6MTAxLjgsYWxwaGE6MC40Njd9LDApLndhaXQoMSkudG8oe3g6MjgyLjgseToxMDIuMixhbHBoYTowLjQ1OH0sMCkud2FpdCgxKS50byh7cm90YXRpb246MC40LHg6MjgzLjcseToxMDIuNSxhbHBoYTowLjQ0OX0sMCkud2FpdCgxKS50byh7eDoyODQuNSx5OjEwMi45LGFscGhhOjAuNDQxfSwwKS53YWl0KDEpLnRvKHt4OjI4NS4zLHk6MTAzLjEsYWxwaGE6MC40MzN9LDApLndhaXQoMSkudG8oe3g6Mjg2LHk6MTAzLjUsYWxwaGE6MC40MjV9LDApLndhaXQoMSkudG8oe3g6Mjg2LjcseToxMDMuOCxhbHBoYTowLjQxOH0sMCkud2FpdCgxKS50byh7cm90YXRpb246MC41LHg6Mjg3LjQseToxMDQsYWxwaGE6MC40MTF9LDApLndhaXQoMSkudG8oe3g6Mjg4LHk6MTA0LjMsYWxwaGE6MC40MDV9LDApLndhaXQoMSkudG8oe3g6Mjg4LjYseToxMDQuNSxhbHBoYTowLjM5OX0sMCkud2FpdCgxKS50byh7eDoyODkuMSx5OjEwNC43LGFscGhhOjAuMzkzfSwwKS53YWl0KDEpLnRvKHt4OjI4OS43LHk6MTA0LjksYWxwaGE6MC4zODh9LDApLndhaXQoMSkudG8oe3g6MjkwLjEseToxMDUuMSxhbHBoYTowLjM4M30sMCkud2FpdCgxKS50byh7cm90YXRpb246MC42LHg6MjkwLjYseToxMDUuMyxhbHBoYTowLjM3OH0sMCkud2FpdCgxKS50byh7eDoyOTEseToxMDUuNSxhbHBoYTowLjM3NH0sMCkud2FpdCgxKS50byh7eDoyOTEuNCx5OjEwNS43LGFscGhhOjAuMzY5fSwwKS53YWl0KDEpLnRvKHt4OjI5MS44LHk6MTA1LjgsYWxwaGE6MC4zNjV9LDApLndhaXQoMSkudG8oe3g6MjkyLjIseToxMDUuOSxhbHBoYTowLjM2Mn0sMCkud2FpdCgxKS50byh7eDoyOTIuNSx5OjEwNixhbHBoYTowLjM1OH0sMCkud2FpdCgxKS50byh7eDoyOTIuOCx5OjEwNi4yLGFscGhhOjAuMzU1fSwwKS53YWl0KDEpLnRvKHt4OjI5My4xLHk6MTA2LjMsYWxwaGE6MC4zNTJ9LDApLndhaXQoMSkudG8oe3g6MjkzLjQseToxMDYuNCxhbHBoYTowLjM0OX0sMCkud2FpdCgxKS50byh7cm90YXRpb246MC43LHg6MjkzLjcseToxMDYuNSxhbHBoYTowLjM0N30sMCkud2FpdCgxKS50byh7eDoyOTMuOSx5OjEwNi42LGFscGhhOjAuMzQ0fSwwKS53YWl0KDEpLnRvKHt4OjI5NC4xLHk6MTA2LjcsYWxwaGE6MC4zNDJ9LDApLndhaXQoMSkudG8oe3g6Mjk0LjQseToxMDYuOCxhbHBoYTowLjM0fSwwKS53YWl0KDEpLnRvKHt4OjI5NC41LHk6MTA2LjksYWxwaGE6MC4zMzh9LDApLndhaXQoMSkudG8oe3g6Mjk0LjcsYWxwaGE6MC4zMzZ9LDApLndhaXQoMSkudG8oe3g6Mjk0LjgseToxMDcsYWxwaGE6MC4zMzV9LDApLndhaXQoMSkudG8oe3g6Mjk1LGFscGhhOjAuMzMzfSwwKS53YWl0KDEpLnRvKHt4OjI5NS4xLHk6MTA3LjEsYWxwaGE6MC4zMzJ9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMzMxfSwwKS53YWl0KDEpLnRvKHt4OjI5NS4yLHk6MTA3LjIsYWxwaGE6MC4zM30sMCkud2FpdCgxKS50byh7eDoyOTUuM30sMCkud2FpdCgxKS50byh7eDoyOTUuNCxhbHBoYTowLjMyOX0sMCkud2FpdCgyKS50byh7YWxwaGE6MC4zMjh9LDApLndhaXQoMSkudG8oe3g6Mjk1LjV9LDApLndhaXQoMSkudG8oe3JlZ1g6MTM2LHg6NDE5LjQseToxMDguOX0sMCkud2FpdCgxKSk7DQoNCgkvLyB3YXRjaDAzDQoJdGhpcy5pbnN0YW5jZV8zID0gbmV3IGxpYi5Hb29nbGVfU3RvcmVfRm9zc2lsXzE2MHg2MDBfcHJvZHVjdF8zKCk7DQoJdGhpcy5pbnN0YW5jZV8zLnNldFRyYW5zZm9ybSgtNiwxMSk7DQoNCgl0aGlzLnRpbWVsaW5lLmFkZFR3ZWVuKGNqcy5Ud2Vlbi5nZXQodGhpcy5pbnN0YW5jZV8zKS53YWl0KDU5KSk7DQoNCn0pLnByb3RvdHlwZSA9IHAgPSBuZXcgY2pzLk1vdmllQ2xpcCgpOw0KcC5ub21pbmFsQm91bmRzID0gbmV3IGNqcy5SZWN0YW5nbGUoLTYsMTEsMTUwLDEzOSk7DQoNCg0KKGxpYi5tY193YXRjaDAyID0gZnVuY3Rpb24obW9kZSxzdGFydFBvc2l0aW9uLGxvb3ApIHsNCgl0aGlzLmluaXRpYWxpemUobW9kZSxzdGFydFBvc2l0aW9uLGxvb3Ase30pOw0KDQoJLy8gdGltZWxpbmUgZnVuY3Rpb25zOg0KCXRoaXMuZnJhbWVfMCA9IGZ1bmN0aW9uKCkgew0KCQl0aGlzLmdvdG9BbmRTdG9wKCk7DQoJfQ0KCXRoaXMuZnJhbWVfNTIgPSBmdW5jdGlvbigpIHsNCgkJdGhpcy5nb3RvQW5kU3RvcCgpOw0KCX0NCg0KCS8vIGFjdGlvbnMgdHdlZW46DQoJdGhpcy50aW1lbGluZS5hZGRUd2VlbihjanMuVHdlZW4uZ2V0KHRoaXMpLmNhbGwodGhpcy5mcmFtZV8wKS53YWl0KDUyKS5jYWxsKHRoaXMuZnJhbWVfNTIpLndhaXQoMSkpOw0KDQoJLy8gTGF5ZXIgMiBjb3B5IChtYXNrKQ0KCXZhciBtYXNrID0gbmV3IGNqcy5TaGFwZSgpOw0KCW1hc2suX29mZiA9IHRydWU7DQoJbWFzay5ncmFwaGljcy5wKCJBQVNHeElBQ2hTUWdhZ2NnZWcxUWc4aHNnTWlEUWdCaC9BeWgzUUFRZ2xBVGdmSUFRZ1lRQUZnTkFEZ1hRQUdnd2dHZzRRZ0VnNEFVQUNRQUxBQkFOQU5JQUpBSVFBS0FNQUlBUlFBWkEzZ01CWVFnNEJ4Z1NCelFnR0E1QUFBaElBUkI4UUFlQ0pBL0JGUWdFQndnZ0FrUWdRQVJnSWdGSWdIQUJRZ1dBQWdEaEZnIik7DQoJbWFzay5zZXRUcmFuc2Zvcm0oLTUuNSw4OS40KTsNCg0KCS8vIExheWVyIDUgY29weSAyDQoJdGhpcy5pbnN0YW5jZSA9IG5ldyBsaWIubWNfaGlnaGxpZ2h0TGluZSgpOw0KCXRoaXMuaW5zdGFuY2Uuc2V0VHJhbnNmb3JtKC01Ni4xLDQ5LjksMS4yODMsMS4wNjQsOC40LDAsMCwxMTguMywxNDMuOCk7DQoJdGhpcy5pbnN0YW5jZS5hbHBoYSA9IDAuNDE7DQoNCgl0aGlzLmluc3RhbmNlLm1hc2sgPSBtYXNrOw0KDQoJdGhpcy50aW1lbGluZS5hZGRUd2VlbihjanMuVHdlZW4uZ2V0KHRoaXMuaW5zdGFuY2UpLndhaXQoMSkudG8oe3NjYWxlWDoxLjI4LHJvdGF0aW9uOjguMyx4Oi01Mi45LHk6NTEuMSxhbHBoYTowLjQwMn0sMCkud2FpdCgxKS50byh7c2NhbGVYOjEuMjgscm90YXRpb246OC4yLHg6LTQ5LjYseTo1Mi41LGFscGhhOjAuMzk0fSwwKS53YWl0KDEpLnRvKHtzY2FsZVg6MS4yNyxyb3RhdGlvbjo4LHg6LTQ2LjIseTo1My44LGFscGhhOjAuMzg1fSwwKS53YWl0KDEpLnRvKHtzY2FsZVg6MS4yNyxyb3RhdGlvbjo3LjkseDotNDIuNyx5OjU1LjIsYWxwaGE6MC4zNzZ9LDApLndhaXQoMSkudG8oe3NjYWxlWDoxLjI3LHJvdGF0aW9uOjcuOCx4Oi0zOS4yLHk6NTYuNixhbHBoYTowLjM2N30sMCkud2FpdCgxKS50byh7c2NhbGVYOjEuMjcscm90YXRpb246Ny42LHg6LTM1LjYseTo1OCxhbHBoYTowLjM1OH0sMCkud2FpdCgxKS50byh7c2NhbGVYOjEuMjYscm90YXRpb246Ny41LHg6LTMxLjgseTo1OS41LGFscGhhOjAuMzQ4fSwwKS53YWl0KDEpLnRvKHtzY2FsZVg6MS4yNixyb3RhdGlvbjo3LjMseDotMjgseTo2MSxhbHBoYTowLjMzOX0sMCkud2FpdCgxKS50byh7c2NhbGVYOjEuMjYscm90YXRpb246Ny4yLHg6LTI0LjIseTo2Mi41LGFscGhhOjAuMzI5fSwwKS53YWl0KDEpLnRvKHtzY2FsZVg6MS4yNixyb3RhdGlvbjo3LjEseDotMjAuMyx5OjY0LjEsYWxwaGE6MC4zMTl9LDApLndhaXQoMSkudG8oe3NjYWxlWDoxLjI1LHJvdGF0aW9uOjYuOSx4Oi0xNi40LHk6NjUuNyxhbHBoYTowLjMwOX0sMCkud2FpdCgxKS50byh7c2NhbGVYOjEuMjUscm90YXRpb246Ni44LHg6LTEyLjQseTo2Ny4zLGFscGhhOjAuMjk5fSwwKS53YWl0KDEpLnRvKHtzY2FsZVg6MS4yNSxyb3RhdGlvbjo2LjYseDotOC41LHk6NjguOCxhbHBoYTowLjI4OX0sMCkud2FpdCgxKS50byh7c2NhbGVYOjEuMjQscm90YXRpb246Ni40LHg6LTQuNSx5OjcwLjQsYWxwaGE6MC4yNzh9LDApLndhaXQoMSkudG8oe3NjYWxlWDoxLjI0LHJvdGF0aW9uOjYuMyx4Oi0wLjYseTo3MS45LGFscGhhOjAuMjY4fSwwKS53YWl0KDEpLnRvKHtzY2FsZVg6MS4yNCxyb3RhdGlvbjo2LjEseDozLjMseTo3My41LGFscGhhOjAuMjU4fSwwKS53YWl0KDEpLnRvKHtzY2FsZVg6MS4yNCxyb3RhdGlvbjo2LHg6Ny4yLHk6NzUuMSxhbHBoYTowLjI0OX0sMCkud2FpdCgxKS50byh7c2NhbGVYOjEuMjMscm90YXRpb246NS45LHg6MTEuMSx5Ojc2LjYsYWxwaGE6MC4yMzl9LDApLndhaXQoMSkudG8oe3NjYWxlWDoxLjIzLHJvdGF0aW9uOjUuNyx4OjE0LjgseTo3OC4xLGFscGhhOjAuMjI5fSwwKS53YWl0KDEpLnRvKHtzY2FsZVg6MS4yMyxyb3RhdGlvbjo1LjYseDoxOC41LHk6NzkuNSxhbHBoYTowLjIyfSwwKS53YWl0KDEpLnRvKHtzY2FsZVg6MS4yMixyb3RhdGlvbjo1LjQseDoyMi4xLHk6ODAuOSxhbHBoYTowLjIxMX0sMCkud2FpdCgxKS50byh7c2NhbGVYOjEuMjIscm90YXRpb246NS4zLHg6MjUuNix5OjgyLjQsYWxwaGE6MC4yMDJ9LDApLndhaXQoMSkudG8oe3NjYWxlWDoxLjIyLHJvdGF0aW9uOjUuMix4OjI5LHk6ODMuNyxhbHBoYTowLjE5M30sMCkud2FpdCgxKS50byh7c2NhbGVYOjEuMjIscm90YXRpb246NSx4OjMyLjIseTo4NSxhbHBoYTowLjE4NX0sMCkud2FpdCgxKS50byh7c2NhbGVYOjEuMjEscm90YXRpb246NC45LHg6MzUuNCx5Ojg2LjMsYWxwaGE6MC4xNzd9LDApLndhaXQoMSkudG8oe3NjYWxlWDoxLjIxLHJvdGF0aW9uOjQuOCx4OjM4LjUseTo4Ny41LGFscGhhOjAuMTY5fSwwKS53YWl0KDEpLnRvKHtzY2FsZVg6MS4yMSxyb3RhdGlvbjo0LjcseDo0MS40LHk6ODguNixhbHBoYTowLjE2MX0sMCkud2FpdCgxKS50byh7c2NhbGVYOjEuMjEscm90YXRpb246NC42LHg6NDQuMix5Ojg5LjgsYWxwaGE6MC4xNTR9LDApLndhaXQoMSkudG8oe3NjYWxlWDoxLjIxLHJvdGF0aW9uOjQuNSx4OjQ2LjgseTo5MC44LGFscGhhOjAuMTQ3fSwwKS53YWl0KDEpLnRvKHtzY2FsZVg6MS4yLHJvdGF0aW9uOjQuNCx4OjQ5LjQseTo5MS44LGFscGhhOjAuMTQxfSwwKS53YWl0KDEpLnRvKHtzY2FsZVg6MS4yLHJvdGF0aW9uOjQuMyx4OjUxLjgseTo5Mi43LGFscGhhOjAuMTM1fSwwKS53YWl0KDEpLnRvKHtzY2FsZVg6MS4yLHJvdGF0aW9uOjQuMix4OjU0LHk6OTMuNyxhbHBoYTowLjEyOX0sMCkud2FpdCgxKS50byh7c2NhbGVYOjEuMixyb3RhdGlvbjo0LjEseDo1Ni4xLHk6OTQuNSxhbHBoYTowLjEyNH0sMCkud2FpdCgxKS50byh7c2NhbGVYOjEuMix4OjU4LjEseTo5NS4zLGFscGhhOjAuMTE5fSwwKS53YWl0KDEpLnRvKHtzY2FsZVg6MS4yLHJvdGF0aW9uOjQseDo2MCx5Ojk2LGFscGhhOjAuMTE0fSwwKS53YWl0KDEpLnRvKHtzY2FsZVg6MS4yLHJvdGF0aW9uOjMuOSx4OjYxLjcseTo5Ni43LGFscGhhOjAuMTF9LDApLndhaXQoMSkudG8oe3NjYWxlWDoxLjE5LHg6NjMuMyx5Ojk3LjMsYWxwaGE6MC4xMDV9LDApLndhaXQoMSkudG8oe3NjYWxlWDoxLjE5LHJvdGF0aW9uOjMuOCx4OjY0LjcseTo5Ny45LGFscGhhOjAuMTAyfSwwKS53YWl0KDEpLnRvKHtzY2FsZVg6MS4xOSxyb3RhdGlvbjozLjcseDo2Ni4xLHk6OTguNCxhbHBoYTowLjA5OH0sMCkud2FpdCgxKS50byh7c2NhbGVYOjEuMTkseDo2Ny4zLHk6OTguOSxhbHBoYTowLjA5NX0sMCkud2FpdCgxKS50byh7eDo2OC41LHk6OTkuNCxhbHBoYTowLjA5Mn0sMCkud2FpdCgxKS50byh7c2NhbGVYOjEuMTkscm90YXRpb246My42LHg6NjkuNSx5Ojk5LjgsYWxwaGE6MC4wOX0sMCkud2FpdCgxKS50byh7c2NhbGVYOjEuMTkseDo3MC4zLHk6MTAwLjIsYWxwaGE6MC4wODd9LDApLndhaXQoMSkudG8oe3NjYWxlWDoxLjE5LHg6NzEuMSx5OjEwMC41LGFscGhhOjAuMDg1fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjozLjUseDo3MS44LHk6MTAwLjcsYWxwaGE6MC4wODR9LDApLndhaXQoMSkudG8oe3g6NzIuNCx5OjEwMSxhbHBoYTowLjA4Mn0sMCkud2FpdCgxKS50byh7c2NhbGVYOjEuMTkseDo3Mi45LHk6MTAxLjIsYWxwaGE6MC4wODF9LDApLndhaXQoMSkudG8oe3g6NzMuMyx5OjEwMS4zLGFscGhhOjAuMDh9LDApLndhaXQoMSkudG8oe3g6NzMuNix5OjEwMS40LGFscGhhOjAuMDc5fSwwKS53YWl0KDEpLnRvKHt4OjczLjgseToxMDEuNX0sMCkud2FpdCgxKS50byh7c2NhbGVYOjEuMTkscm90YXRpb246My40LHg6NzQseToxMDEuNixhbHBoYTowLjA3OH0sMCkud2FpdCgyKSk7DQoNCgkvLyBMYXllciAyIGNvcHkgMiAobWFzaykNCgl2YXIgbWFza18xID0gbmV3IGNqcy5TaGFwZSgpOw0KCW1hc2tfMS5fb2ZmID0gdHJ1ZTsNCgltYXNrXzEuZ3JhcGhpY3MucCgiQWpWRnpRaGJodUFGaUhRQUNoTUFaaEZRQWJoSUF0ZzBRQllocEIwQURRQnhBREJLQm1RQkpCa2dFQ0tRZ0ZDTGhQQm5RZ1JBVmdaQVdJa3FBaVFnWWdRZ1pnZWdBRXJBeFFnQ2dDZ0dnMFFnVGhLZ2FndlFnYWd2Z3hnelFoZ2hlaHBBTFFnaEFFZ2ZBT0lnWUFNUWdJQUZBQWdGUUJVZzhCWUFRUUF1QUhBY0FVUWdQZ1pnVGdjUWdsZzFnUGdJUWdSZ0pBU0FCUUFTQUJBSEFIUUFMQUxBWkFnUUFlQW5BTEFYUUFPQWNBSEFKUUFLQVBBM0ErUUF0QTZBUkJGUUFKQWtBR0F1UUFDQWRnREFBSUFBQUFnIik7DQoJbWFza18xLnNldFRyYW5zZm9ybSgzMyw3OC42KTsNCg0KCS8vIExheWVyIDQgY29weQ0KCXRoaXMuaW5zdGFuY2VfMSA9IG5ldyBsaWIubWNfaGlnaGxpZ2h0TGluZSgpOw0KCXRoaXMuaW5zdGFuY2VfMS5zZXRUcmFuc2Zvcm0oLTUzLjgsNC4xLDEuNzE1LDEuMzExLDE2LDAsMCwxMTguMywxNDMuOCk7DQoJdGhpcy5pbnN0YW5jZV8xLmFscGhhID0gMC4xNzI7DQoNCgl0aGlzLmluc3RhbmNlXzEubWFzayA9IG1hc2tfMTsNCg0KCXRoaXMudGltZWxpbmUuYWRkVHdlZW4oY2pzLlR3ZWVuLmdldCh0aGlzLmluc3RhbmNlXzEpLndhaXQoMSkudG8oe3JvdGF0aW9uOjE2LjMseDotMjIuOSx5OjI2LjUsYWxwaGE6MC4xNDZ9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOjE2LjUseDotMyx5OjQxLGFscGhhOjAuMTN9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOjE2LjYseDoxMi4xLHk6NTEuOSxhbHBoYTowLjExN30sMCkud2FpdCgxKS50byh7cm90YXRpb246MTYuNyx4OjI0LjQseTo2MC45LGFscGhhOjAuMTA3fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjoxNi44LHg6MzQuOCx5OjY4LjQsYWxwaGE6MC4wOTh9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOjE2LjkseDo0My43LHk6NzQuOSxhbHBoYTowLjA5MX0sMCkud2FpdCgxKS50byh7cm90YXRpb246MTcseDo1MS42LHk6ODAuNixhbHBoYTowLjA4NH0sMCkud2FpdCgxKS50byh7eDo1OC41LHk6ODUuNyxhbHBoYTowLjA3OH0sMCkud2FpdCgxKS50byh7cm90YXRpb246MTcuMSx4OjY0LjcseTo5MC4yLGFscGhhOjAuMDczfSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjoxNy4yLHg6NzAuNCx5Ojk0LjIsYWxwaGE6MC4wNjl9LDApLndhaXQoMSkudG8oe3g6NzUuNSx5Ojk4LGFscGhhOjAuMDY0fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjoxNy4zLHg6ODAuMSx5OjEwMS40LGFscGhhOjAuMDZ9LDApLndhaXQoMSkudG8oe3g6ODQuMyx5OjEwNC40LGFscGhhOjAuMDU3fSwwKS53YWl0KDEpLnRvKHt4Ojg4LjEseToxMDcuMixhbHBoYTowLjA1NH0sMCkud2FpdCgxKS50byh7cm90YXRpb246MTcuNCx4OjkxLjcseToxMDkuNyxhbHBoYTowLjA1MX0sMCkud2FpdCgxKS50byh7eDo5NC45LHk6MTEyLjEsYWxwaGE6MC4wNDh9LDApLndhaXQoMSkudG8oe3g6OTcuOSx5OjExNC4zLGFscGhhOjAuMDQ2fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjoxNy41LHg6MTAwLjcseToxMTYuMyxhbHBoYTowLjA0M30sMCkud2FpdCgxKS50byh7eDoxMDMuMix5OjExOC4yLGFscGhhOjAuMDQxfSwwKS53YWl0KDEpLnRvKHt4OjEwNS42LHk6MTE5LjksYWxwaGE6MC4wMzl9LDApLndhaXQoMSkudG8oe3g6MTA3LjgseToxMjEuNCxhbHBoYTowLjAzN30sMCkud2FpdCgxKS50byh7eDoxMDkuNyx5OjEyMi45LGFscGhhOjAuMDM2fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjoxNy42LHg6MTExLjYseToxMjQuMyxhbHBoYTowLjAzNH0sMCkud2FpdCgxKS50byh7eDoxMTMuMyx5OjEyNS41LGFscGhhOjAuMDMzfSwwKS53YWl0KDEpLnRvKHt4OjExNC45LHk6MTI2LjcsYWxwaGE6MC4wMzF9LDApLndhaXQoMSkudG8oe3g6MTE2LjQseToxMjcuNyxhbHBoYTowLjAzfSwwKS53YWl0KDEpLnRvKHt4OjExNy43LHk6MTI4LjYsYWxwaGE6MC4wMjl9LDApLndhaXQoMSkudG8oe3g6MTE4LjkseToxMjkuNixhbHBoYTowLjAyOH0sMCkud2FpdCgxKS50byh7eDoxMjAuMSx5OjEzMC40LGFscGhhOjAuMDI3fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjoxNy43LHg6MTIxLjEseToxMzEuMixhbHBoYTowLjAyNn0sMCkud2FpdCgxKS50byh7eDoxMjIseToxMzEuOX0sMCkud2FpdCgxKS50byh7eDoxMjIuOSx5OjEzMi41LGFscGhhOjAuMDI1fSwwKS53YWl0KDEpLnRvKHt4OjEyMy43LHk6MTMzLGFscGhhOjAuMDI0fSwwKS53YWl0KDEpLnRvKHt4OjEyNC40LHk6MTMzLjZ9LDApLndhaXQoMSkudG8oe3g6MTI1LjEseToxMzQuMSxhbHBoYTowLjAyM30sMCkud2FpdCgxKS50byh7eDoxMjUuNyx5OjEzNC41fSwwKS53YWl0KDEpLnRvKHt4OjEyNi4yLHk6MTM0LjksYWxwaGE6MC4wMjJ9LDApLndhaXQoMSkudG8oe3g6MTI2LjcseToxMzUuMn0sMCkud2FpdCgxKS50byh7eDoxMjcuMSx5OjEzNS42LGFscGhhOjAuMDIxfSwwKS53YWl0KDEpLnRvKHt4OjEyNy41LHk6MTM1Ljh9LDApLndhaXQoMSkudG8oe3g6MTI3LjkseToxMzZ9LDApLndhaXQoMSkudG8oe3g6MTI4LjIseToxMzYuMixhbHBoYTowLjAyfSwwKS53YWl0KDEpLnRvKHt4OjEyOC40LHk6MTM2LjR9LDApLndhaXQoMSkudG8oe3g6MTI4LjYseToxMzYuNn0sMCkud2FpdCgxKS50byh7eDoxMjguNyx5OjEzNi43fSwwKS53YWl0KDEpLnRvKHt4OjEyOC45LHk6MTM2Ljh9LDApLndhaXQoMSkudG8oe3g6MTI5LHk6MTM2Ljl9LDApLndhaXQoMSkudG8oe3g6MTI5LjEseToxMzd9LDApLndhaXQoMSkudG8oe3g6MTI5LjJ9LDApLndhaXQoMSkudG8oe3k6MTM3LjF9LDApLndhaXQoMikudG8oe3g6MTI5LjMseToxMzd9LDApLndhaXQoMSkpOw0KDQoJLy8gTGF5ZXIgMiAobWFzaykNCgl2YXIgbWFza18yID0gbmV3IGNqcy5TaGFwZSgpOw0KCW1hc2tfMi5fb2ZmID0gdHJ1ZTsNCgltYXNrXzIuZ3JhcGhpY3MucCgiQWpCRWRRaGFodEFFaUhRQUNoS0FhaEhRQWFoSUF1ZzFRQlhob0IwQURRQnhBQ0JLQm1RQkpCa2dFQ0tRZ0ZDTWhQQm5RZ1JBVmdaQVdJa3FBaVFnWWdSZ1pnZWciKTsNCgltYXNrXzIuc2V0VHJhbnNmb3JtKDMwLjksODcuMSk7DQoNCgkvLyBMYXllciA1DQoJdGhpcy5pbnN0YW5jZV8yID0gbmV3IGxpYi5tY19saWdodCgpOw0KCXRoaXMuaW5zdGFuY2VfMi5zZXRUcmFuc2Zvcm0oMzcwLDY2LjgsMS41MDcsMS41MDcsLTEuMiwwLDAsMTM2LjEsODMuOCk7DQoNCgl0aGlzLmluc3RhbmNlXzIubWFzayA9IG1hc2tfMjsNCg0KCXRoaXMudGltZWxpbmUuYWRkVHdlZW4oY2pzLlR3ZWVuLmdldCh0aGlzLmluc3RhbmNlXzIpLndhaXQoMSkudG8oe3JlZ1g6NTMuOCxyZWdZOjgzLjcscm90YXRpb246LTAuOSx4OjI1Ny43LHk6NzAuMixhbHBoYTowLjg5NX0sMCkud2FpdCgxKS50byh7cm90YXRpb246LTAuNyx4OjI2NC45LHk6NzAuOCxhbHBoYTowLjgzfSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMC42LHg6MjcwLjQseTo3MS4yLGFscGhhOjAuNzgxfSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMC41LHg6Mjc0LjkseTo3MS41LGFscGhhOjAuNzR9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0wLjQseDoyNzguOCx5OjcxLjgsYWxwaGE6MC43MDV9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0wLjMseDoyODIuMix5OjcyLjEsYWxwaGE6MC42NzV9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0wLjIseDoyODUuMSx5OjcyLjMsYWxwaGE6MC42NDh9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0wLjEseDoyODcuOCx5OjcyLjUsYWxwaGE6MC42MjR9LDApLndhaXQoMSkudG8oe3g6MjkwLjMseTo3Mi43LGFscGhhOjAuNjAyfSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjowLHg6MjkyLjUseTo3Mi44LGFscGhhOjAuNTgyfSwwKS53YWl0KDEpLnRvKHt4OjI5NC42LHk6NzMsYWxwaGE6MC41NjR9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOjAuMSx4OjI5Ni41LHk6NzMuMSxhbHBoYTowLjU0N30sMCkud2FpdCgxKS50byh7eDoyOTguMyx5OjczLjMsYWxwaGE6MC41MzF9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOjAuMix4OjI5OS45LHk6NzMuNCxhbHBoYTowLjUxNn0sMCkud2FpdCgxKS50byh7eDozMDEuNCx5OjczLjUsYWxwaGE6MC41MDN9LDApLndhaXQoMSkudG8oe3g6MzAyLjgseTo3My42LGFscGhhOjAuNDl9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOjAuMyx4OjMwNC4yLHk6NzMuNyxhbHBoYTowLjQ3OH0sMCkud2FpdCgxKS50byh7eDozMDUuNCx5OjczLjgsYWxwaGE6MC40Njd9LDApLndhaXQoMSkudG8oe3g6MzA2LjYseTo3My45LGFscGhhOjAuNDU2fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjowLjQseDozMDcuNyx5Ojc0LGFscGhhOjAuNDQ2fSwwKS53YWl0KDEpLnRvKHt4OjMwOC43LHk6NzQuMSxhbHBoYTowLjQzN30sMCkud2FpdCgxKS50byh7eDozMDkuNyx5Ojc0LjIsYWxwaGE6MC40Mjl9LDApLndhaXQoMSkudG8oe3g6MzEwLjYsYWxwaGE6MC40Mn0sMCkud2FpdCgxKS50byh7cm90YXRpb246MC41LHg6MzExLjQseTo3NC4zLGFscGhhOjAuNDEzfSwwKS53YWl0KDEpLnRvKHt4OjMxMi4yLHk6NzQuNCxhbHBoYTowLjQwNn0sMCkud2FpdCgxKS50byh7eDozMTMsYWxwaGE6MC4zOTl9LDApLndhaXQoMSkudG8oe3g6MzEzLjcseTo3NC41LGFscGhhOjAuMzkzfSwwKS53YWl0KDEpLnRvKHt4OjMxNC4zLGFscGhhOjAuMzg3fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjowLjYseDozMTUseTo3NC42LGFscGhhOjAuMzgxfSwwKS53YWl0KDEpLnRvKHt4OjMxNS41LGFscGhhOjAuMzc2fSwwKS53YWl0KDEpLnRvKHt4OjMxNixhbHBoYTowLjM3MX0sMCkud2FpdCgxKS50byh7eDozMTYuNix5Ojc0LjcsYWxwaGE6MC4zNjd9LDApLndhaXQoMSkudG8oe3g6MzE3LGFscGhhOjAuMzYyfSwwKS53YWl0KDEpLnRvKHt4OjMxNy41LGFscGhhOjAuMzU5fSwwKS53YWl0KDEpLnRvKHt4OjMxNy45LHk6NzQuOCxhbHBoYTowLjM1NX0sMCkud2FpdCgxKS50byh7eDozMTguMyxhbHBoYTowLjM1Mn0sMCkud2FpdCgxKS50byh7eDozMTguNixhbHBoYTowLjM0OH0sMCkud2FpdCgxKS50byh7cm90YXRpb246MC43LHg6MzE4LjksYWxwaGE6MC4zNDZ9LDApLndhaXQoMSkudG8oe3g6MzE5LjIseTo3NC45LGFscGhhOjAuMzQzfSwwKS53YWl0KDEpLnRvKHt4OjMxOS41LGFscGhhOjAuMzQxfSwwKS53YWl0KDEpLnRvKHt4OjMxOS43LGFscGhhOjAuMzM5fSwwKS53YWl0KDEpLnRvKHt4OjMxOS45LGFscGhhOjAuMzM3fSwwKS53YWl0KDEpLnRvKHt4OjMyMC4xLGFscGhhOjAuMzM1fSwwKS53YWl0KDEpLnRvKHt4OjMyMC4zLGFscGhhOjAuMzMzfSwwKS53YWl0KDEpLnRvKHt4OjMyMC41LHk6NzUsYWxwaGE6MC4zMzJ9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMzMxfSwwKS53YWl0KDEpLnRvKHt4OjMyMC42LGFscGhhOjAuMzN9LDApLndhaXQoMSkudG8oe3g6MzIwLjcsYWxwaGE6MC4zMjl9LDApLndhaXQoMSkudG8oe3g6MzIwLjh9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMzI4fSwwKS53YWl0KDEpLnRvKHt4OjMyMC45fSwwKS53YWl0KDEpLnRvKHtyZWdYOjEzNix4OjQ0NC44LHk6NzYuNn0sMCkud2FpdCgxKSk7DQoNCgkvLyBMYXllciA2DQoJdGhpcy5pbnN0YW5jZV8zID0gbmV3IGxpYi5Hb29nbGVfU3RvcmVfRm9zc2lsXzE2MHg2MDBfcHJvZHVjdF8yKCk7DQoJdGhpcy5pbnN0YW5jZV8zLnNldFRyYW5zZm9ybSgtNzMsMTMpOw0KDQoJdGhpcy50aW1lbGluZS5hZGRUd2VlbihjanMuVHdlZW4uZ2V0KHRoaXMuaW5zdGFuY2VfMykud2FpdCg1MykpOw0KDQp9KS5wcm90b3R5cGUgPSBwID0gbmV3IGNqcy5Nb3ZpZUNsaXAoKTsNCnAubm9taW5hbEJvdW5kcyA9IG5ldyBjanMuUmVjdGFuZ2xlKC03MywxMywxNTIsMTYwKTsNCg0KDQoobGliLm1jX3dhdGNoMDEgPSBmdW5jdGlvbihtb2RlLHN0YXJ0UG9zaXRpb24sbG9vcCkgew0KCXRoaXMuaW5pdGlhbGl6ZShtb2RlLHN0YXJ0UG9zaXRpb24sbG9vcCx7fSk7DQoNCgkvLyB0aW1lbGluZSBmdW5jdGlvbnM6DQoJdGhpcy5mcmFtZV8wID0gZnVuY3Rpb24oKSB7DQoJCXRoaXMuZ290b0FuZFN0b3AoKTsNCgl9DQoJdGhpcy5mcmFtZV82OSA9IGZ1bmN0aW9uKCkgew0KCQl0aGlzLmdvdG9BbmRTdG9wKCk7DQoJfQ0KDQoJLy8gYWN0aW9ucyB0d2VlbjoNCgl0aGlzLnRpbWVsaW5lLmFkZFR3ZWVuKGNqcy5Ud2Vlbi5nZXQodGhpcykuY2FsbCh0aGlzLmZyYW1lXzApLndhaXQoNjkpLmNhbGwodGhpcy5mcmFtZV82OSkud2FpdCgxKSk7DQoNCgkvLyBtYXNrIChtYXNrKQ0KCXZhciBtYXNrID0gbmV3IGNqcy5TaGFwZSgpOw0KCW1hc2suX29mZiA9IHRydWU7DQoJbWFzay5ncmFwaGljcy5wKCJBRnNJTFFoVWh2QUFpZVFBQWlkQlVodVFCVmh1QjRBQVFCNEFBQlZCdVFCVkJ1QUFDZFFBQUNlaFZCdlFoVkJ3aDRBQVFoNEFBaFZod2ciKTsNCgltYXNrLnNldFRyYW5zZm9ybSg4Niw2My41KTsNCg0KCS8vIExheWVyIDUgY29weQ0KCXRoaXMuaW5zdGFuY2UgPSBuZXcgbGliLm1jX2hpZ2hsaWdodExpbmUoKTsNCgl0aGlzLmluc3RhbmNlLnNldFRyYW5zZm9ybSg2OC40LDk3LjksMS43MTUsMS4zMTEsLTMwLDAsMCwxMTguMywxNDMuOCk7DQoJdGhpcy5pbnN0YW5jZS5hbHBoYSA9IDAuNDM7DQoNCgl0aGlzLmluc3RhbmNlLm1hc2sgPSBtYXNrOw0KDQoJdGhpcy50aW1lbGluZS5hZGRUd2VlbihjanMuVHdlZW4uZ2V0KHRoaXMuaW5zdGFuY2UpLndhaXQoMSkudG8oe3JvdGF0aW9uOi0yOS43LHg6NzYuOSx5Ojk3LjMsYWxwaGE6MC40MTR9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0yOS40LHg6ODQseTo5Ni44LGFscGhhOjAuNDAyfSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMjkuMix4OjkwLjMseTo5Ni4zLGFscGhhOjAuMzkxfSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMjkseDo5Ni4yLHk6OTYsYWxwaGE6MC4zOH0sMCkud2FpdCgxKS50byh7cm90YXRpb246LTI4LjgseDoxMDEuNyx5Ojk1LjYsYWxwaGE6MC4zN30sMCkud2FpdCgxKS50byh7cm90YXRpb246LTI4LjYseDoxMDcseTo5NS4yLGFscGhhOjAuMzYxfSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMjguNSx4OjExMix5Ojk0LjksYWxwaGE6MC4zNTJ9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0yOC4zLHg6MTE2LjkseTo5NC41LGFscGhhOjAuMzQzfSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMjguMSx4OjEyMS42LHk6OTQuMixhbHBoYTowLjMzNX0sMCkud2FpdCgxKS50byh7cm90YXRpb246LTI4LHg6MTI2LjIseTo5My45LGFscGhhOjAuMzI3fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMjcuOCx4OjEzMC42LHk6OTMuNixhbHBoYTowLjMxOX0sMCkud2FpdCgxKS50byh7cm90YXRpb246LTI3LjcseDoxMzQuOSx5OjkzLjMsYWxwaGE6MC4zMTF9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0yNy41LHg6MTM5LjEseTo5Mi45LGFscGhhOjAuMzA0fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMjcuNCx4OjE0My4yLHk6OTIuNyxhbHBoYTowLjI5N30sMCkud2FpdCgxKS50byh7cm90YXRpb246LTI3LjIseDoxNDcuMix5OjkyLjQsYWxwaGE6MC4yOX0sMCkud2FpdCgxKS50byh7cm90YXRpb246LTI3LjEseDoxNTEseTo5Mi4yLGFscGhhOjAuMjgzfSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMjYuOSx4OjE1NC45LHk6OTEuOSxhbHBoYTowLjI3Nn0sMCkud2FpdCgxKS50byh7cm90YXRpb246LTI2LjgseDoxNTguNSx5OjkxLjYsYWxwaGE6MC4yNjl9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0yNi43LHg6MTYyLjIseTo5MS40LGFscGhhOjAuMjYzfSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMjYuNix4OjE2NS43LHk6OTEuMSxhbHBoYTowLjI1Nn0sMCkud2FpdCgxKS50byh7cm90YXRpb246LTI2LjQseDoxNjkuMix5OjkwLjksYWxwaGE6MC4yNX0sMCkud2FpdCgxKS50byh7cm90YXRpb246LTI2LjMseDoxNzIuNix5OjkwLjYsYWxwaGE6MC4yNDR9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0yNi4yLHg6MTc1LjgseTo5MC40LGFscGhhOjAuMjM4fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMjYuMSx4OjE3OS4xLHk6OTAuMixhbHBoYTowLjIzM30sMCkud2FpdCgxKS50byh7cm90YXRpb246LTI2LHg6MTgyLjIseTo5MCxhbHBoYTowLjIyN30sMCkud2FpdCgxKS50byh7cm90YXRpb246LTI1LjkseDoxODUuNCx5Ojg5LjgsYWxwaGE6MC4yMjJ9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0yNS44LHg6MTg4LjMseTo4OS42LGFscGhhOjAuMjE2fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMjUuNyx4OjE5MS4zLHk6ODkuMyxhbHBoYTowLjIxMX0sMCkud2FpdCgxKS50byh7cm90YXRpb246LTI1LjYseDoxOTQuMix5Ojg5LjIsYWxwaGE6MC4yMDZ9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0yNS41LHg6MTk2LjkseTo4OSxhbHBoYTowLjIwMX0sMCkud2FpdCgxKS50byh7cm90YXRpb246LTI1LjQseDoxOTkuNyx5Ojg4LjgsYWxwaGE6MC4xOTZ9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0yNS4zLHg6MjAyLjQseTo4OC42LGFscGhhOjAuMTkxfSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMjUuMix4OjIwNSx5Ojg4LjQsYWxwaGE6MC4xODd9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0yNS4xLHg6MjA3LjUseTo4OC4zLGFscGhhOjAuMTgyfSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMjUseDoyMTAseTo4OCxhbHBoYTowLjE3OH0sMCkud2FpdCgxKS50byh7cm90YXRpb246LTI0LjkseDoyMTIuNCx5Ojg3LjksYWxwaGE6MC4xNzN9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0yNC44LHg6MjE0LjcseTo4Ny43LGFscGhhOjAuMTY5fSwwKS53YWl0KDEpLnRvKHt4OjIxNi45LHk6ODcuNixhbHBoYTowLjE2NX0sMCkud2FpdCgxKS50byh7cm90YXRpb246LTI0LjcseDoyMTkuMix5Ojg3LjQsYWxwaGE6MC4xNjF9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0yNC42LHg6MjIxLjMseTo4Ny4zLGFscGhhOjAuMTU4fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMjQuNSx4OjIyMy4zLHk6ODcuMixhbHBoYTowLjE1NH0sMCkud2FpdCgxKS50byh7eDoyMjUuMyx5Ojg3LGFscGhhOjAuMTV9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0yNC40LHg6MjI3LjIseTo4Ni45LGFscGhhOjAuMTQ3fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMjQuMyx4OjIyOS4xLHk6ODYuOCxhbHBoYTowLjE0NH0sMCkud2FpdCgxKS50byh7eDoyMzAuOSx5Ojg2LjYsYWxwaGE6MC4xNH0sMCkud2FpdCgxKS50byh7cm90YXRpb246LTI0LjIseDoyMzIuNix5Ojg2LjUsYWxwaGE6MC4xMzd9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0yNC4xLHg6MjM0LjMsYWxwaGE6MC4xMzR9LDApLndhaXQoMSkudG8oe3g6MjM1LjkseTo4Ni4zLGFscGhhOjAuMTMyfSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMjQseDoyMzcuNCx5Ojg2LjIsYWxwaGE6MC4xMjl9LDApLndhaXQoMSkudG8oe3g6MjM4LjkseTo4Ni4xLGFscGhhOjAuMTI2fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMjMuOSx4OjI0MC4yLHk6ODYsYWxwaGE6MC4xMjR9LDApLndhaXQoMSkudG8oe3g6MjQxLjYseTo4NS45LGFscGhhOjAuMTIxfSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMjMuOCx4OjI0Mi44LHk6ODUuOCxhbHBoYTowLjExOX0sMCkud2FpdCgxKS50byh7eDoyNDQsYWxwaGE6MC4xMTd9LDApLndhaXQoMSkudG8oe3g6MjQ1LjEseTo4NS43LGFscGhhOjAuMTE1fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMjMuNyx4OjI0Ni4xLHk6ODUuNixhbHBoYTowLjExM30sMCkud2FpdCgxKS50byh7eDoyNDcuMSxhbHBoYTowLjExMn0sMCkud2FpdCgxKS50byh7eDoyNDcuOSx5Ojg1LjUsYWxwaGE6MC4xMX0sMCkud2FpdCgxKS50byh7cm90YXRpb246LTIzLjYseDoyNDguOCx5Ojg1LjQsYWxwaGE6MC4xMDl9LDApLndhaXQoMSkudG8oe3g6MjQ5LjUsYWxwaGE6MC4xMDd9LDApLndhaXQoMSkudG8oe3g6MjUwLjIseTo4NS4zLGFscGhhOjAuMTA2fSwwKS53YWl0KDEpLnRvKHt4OjI1MC44LGFscGhhOjAuMTA1fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMjMuNSx4OjI1MS4zLGFscGhhOjAuMTA0fSwwKS53YWl0KDEpLnRvKHt4OjI1MS43LHk6ODUuMixhbHBoYTowLjEwM30sMCkud2FpdCgxKS50byh7eDoyNTIuMSx5Ojg1LjF9LDApLndhaXQoMSkudG8oe3g6MjUyLjQseTo4NS4yLGFscGhhOjAuMTAyfSwwKS53YWl0KDEpLnRvKHt4OjI1Mi42fSwwKS53YWl0KDEpLnRvKHt4OjI1Mi43fSwwKS53YWl0KDEpLnRvKHt5Ojg1LjF9LDApLndhaXQoMSkpOw0KDQoJLy8gTGF5ZXIgMw0KCXRoaXMuaW5zdGFuY2VfMSA9IG5ldyBsaWIubWNfbGlnaHQoKTsNCgl0aGlzLmluc3RhbmNlXzEuc2V0VHJhbnNmb3JtKDQ0NywtMzAuMiwxLjUwNywxLjUwNywtMjEuMiwwLDAsMTM2LjEsODMuNyk7DQoNCgl0aGlzLmluc3RhbmNlXzEubWFzayA9IG1hc2s7DQoNCgl0aGlzLnRpbWVsaW5lLmFkZFR3ZWVuKGNqcy5Ud2Vlbi5nZXQodGhpcy5pbnN0YW5jZV8xKS53YWl0KDEpLnRvKHtyZWdYOjUzLjgscm90YXRpb246LTIwLjQseDozNDMuMix5OjE3LjYsYWxwaGE6MC44Nzd9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0xOS44LHg6MzUxLjMseToxOS43LGFscGhhOjAuNzkyfSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMTkuMyx4OjM1Ny44LHk6MjEuMyxhbHBoYTowLjcyNn0sMCkud2FpdCgxKS50byh7cm90YXRpb246LTE5LHg6MzYzLjEseToyMi42LGFscGhhOjAuNjcxfSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMTguNix4OjM2Ny43LHk6MjMuNyxhbHBoYTowLjYyNH0sMCkud2FpdCgxKS50byh7cm90YXRpb246LTE4LjQseDozNzEuNyx5OjI0LjcsYWxwaGE6MC41ODN9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0xOC4xLHg6Mzc1LjIseToyNS42LGFscGhhOjAuNTQ3fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMTcuOSx4OjM3OC40LHk6MjYuMyxhbHBoYTowLjUxNH0sMCkud2FpdCgxKS50byh7cm90YXRpb246LTE3LjcseDozODEuMyx5OjI3LGFscGhhOjAuNDg0fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMTcuNSx4OjM4My45LHk6MjcuNyxhbHBoYTowLjQ1N30sMCkud2FpdCgxKS50byh7cm90YXRpb246LTE3LjMseDozODYuNCx5OjI4LjMsYWxwaGE6MC40MzJ9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0xNy4yLHg6Mzg4LjUseToyOC44LGFscGhhOjAuNDA5fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMTcseDozOTAuNix5OjI5LjQsYWxwaGE6MC4zODh9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0xNi45LHg6MzkyLjUseToyOS44LGFscGhhOjAuMzY5fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMTYuOCx4OjM5NC4zLHk6MzAuMixhbHBoYTowLjM1fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMTYuNyx4OjM5NS45LHk6MzAuNixhbHBoYTowLjMzM30sMCkud2FpdCgxKS50byh7cm90YXRpb246LTE2LjYseDozOTcuNSx5OjMxLGFscGhhOjAuMzE3fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMTYuNSx4OjM5OC45LHk6MzEuNCxhbHBoYTowLjMwM30sMCkud2FpdCgxKS50byh7cm90YXRpb246LTE2LjQseDo0MDAuMyx5OjMxLjcsYWxwaGE6MC4yODl9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0xNi4zLHg6NDAxLjYseTozMixhbHBoYTowLjI3Nn0sMCkud2FpdCgxKS50byh7cm90YXRpb246LTE2LjIseDo0MDIuOCx5OjMyLjMsYWxwaGE6MC4yNjN9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0xNi4xLHg6NDAzLjkseTozMi42LGFscGhhOjAuMjUyfSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMTYseDo0MDUseTozMi44LGFscGhhOjAuMjQxfSwwKS53YWl0KDEpLnRvKHt4OjQwNix5OjMzLjEsYWxwaGE6MC4yMzF9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0xNS45LHg6NDA2LjkseTozMy4zLGFscGhhOjAuMjIxfSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMTUuOCx4OjQwNy44LHk6MzMuNixhbHBoYTowLjIxMn0sMCkud2FpdCgxKS50byh7eDo0MDguNix5OjMzLjcsYWxwaGE6MC4yMDR9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0xNS43LHg6NDA5LjQseTozMy45LGFscGhhOjAuMTk2fSwwKS53YWl0KDEpLnRvKHt4OjQxMC4xLHk6MzQuMSxhbHBoYTowLjE4OH0sMCkud2FpdCgxKS50byh7cm90YXRpb246LTE1LjYseDo0MTAuOCx5OjM0LjIsYWxwaGE6MC4xODF9LDApLndhaXQoMSkudG8oe3g6NDExLjQseTozNC40LGFscGhhOjAuMTc0fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMTUuNSx4OjQxMix5OjM0LjYsYWxwaGE6MC4xNjh9LDApLndhaXQoMSkudG8oe3g6NDEyLjYseTozNC43LGFscGhhOjAuMTYyfSwwKS53YWl0KDEpLnRvKHt4OjQxMy4yLHk6MzQuOCxhbHBoYTowLjE1N30sMCkud2FpdCgxKS50byh7cm90YXRpb246LTE1LjQseDo0MTMuNyx5OjM0LjksYWxwaGE6MC4xNTF9LDApLndhaXQoMSkudG8oe3g6NDE0LjIseTozNS4xLGFscGhhOjAuMTQ3fSwwKS53YWl0KDEpLnRvKHt4OjQxNC42LHk6MzUuMixhbHBoYTowLjE0Mn0sMCkud2FpdCgxKS50byh7cm90YXRpb246LTE1LjMseDo0MTUuMSx5OjM1LjMsYWxwaGE6MC4xMzh9LDApLndhaXQoMSkudG8oe3g6NDE1LjQseTozNS40LGFscGhhOjAuMTM0fSwwKS53YWl0KDEpLnRvKHt4OjQxNS44LHk6MzUuNSxhbHBoYTowLjEzfSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMTUuMix4OjQxNi4xLGFscGhhOjAuMTI2fSwwKS53YWl0KDEpLnRvKHt4OjQxNi41LHk6MzUuNixhbHBoYTowLjEyM30sMCkud2FpdCgxKS50byh7eDo0MTYuNyx5OjM1LjcsYWxwaGE6MC4xMn0sMCkud2FpdCgxKS50byh7eDo0MTcuMSxhbHBoYTowLjExN30sMCkud2FpdCgxKS50byh7eDo0MTcuNCx5OjM1LjgsYWxwaGE6MC4xMTR9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0xNS4xLHg6NDE3LjYseTozNS45LGFscGhhOjAuMTEyfSwwKS53YWl0KDEpLnRvKHt4OjQxNy44LHk6MzYsYWxwaGE6MC4xMDl9LDApLndhaXQoMSkudG8oe3g6NDE4LGFscGhhOjAuMTA3fSwwKS53YWl0KDEpLnRvKHt4OjQxOC4yLHk6MzYuMSxhbHBoYTowLjEwNX0sMCkud2FpdCgxKS50byh7eDo0MTguNCxhbHBoYTowLjEwM30sMCkud2FpdCgxKS50byh7eDo0MTguNSxhbHBoYTowLjEwMn0sMCkud2FpdCgxKS50byh7eDo0MTguNyx5OjM2LjIsYWxwaGE6MC4xfSwwKS53YWl0KDEpLnRvKHt4OjQxOC45LGFscGhhOjAuMDk5fSwwKS53YWl0KDEpLnRvKHt4OjQxOSxhbHBoYTowLjA5N30sMCkud2FpdCgxKS50byh7cm90YXRpb246LTE1LHg6NDE5LjEseTozNi4zLGFscGhhOjAuMDk2fSwwKS53YWl0KDEpLnRvKHt4OjQxOS4yLGFscGhhOjAuMDk1fSwwKS53YWl0KDEpLnRvKHt4OjQxOS4zLGFscGhhOjAuMDk0fSwwKS53YWl0KDEpLnRvKHt4OjQxOS40fSwwKS53YWl0KDEpLnRvKHt4OjQxOS41LGFscGhhOjAuMDkzfSwwKS53YWl0KDEpLnRvKHt5OjM2LjQsYWxwaGE6MC4wOTJ9LDApLndhaXQoMikudG8oe3g6NDE5LjYsYWxwaGE6MC4wOTF9LDApLndhaXQoMikudG8oe3g6NDE5LjcsYWxwaGE6MC4wOX0sMCkud2FpdCg1KS50byh7cmVnWDoxMzYuMSx4OjUzOS42LHk6NC40fSwwKS53YWl0KDEpKTsNCg0KCS8vIHdhdGNoDQoJdGhpcy5pbnN0YW5jZV8yID0gbmV3IGxpYi5Hb29nbGVfU3RvcmVfRm9zc2lsXzE2MHg2MDBfcHJvZHVjdF8xKCk7DQoJdGhpcy5pbnN0YW5jZV8yLnNldFRyYW5zZm9ybSg0NSwxMyk7DQoNCgl0aGlzLnRpbWVsaW5lLmFkZFR3ZWVuKGNqcy5Ud2Vlbi5nZXQodGhpcy5pbnN0YW5jZV8yKS53YWl0KDcwKSk7DQoNCn0pLnByb3RvdHlwZSA9IHAgPSBuZXcgY2pzLk1vdmllQ2xpcCgpOw0KcC5ub21pbmFsQm91bmRzID0gbmV3IGNqcy5SZWN0YW5nbGUoNDUsMTMsMTQ4LDE1Nik7DQoNCg0KKGxpYi5tY19yZXBsYXljb3B5ID0gZnVuY3Rpb24obW9kZSxzdGFydFBvc2l0aW9uLGxvb3ApIHsNCgl0aGlzLmluaXRpYWxpemUobW9kZSxzdGFydFBvc2l0aW9uLGxvb3Ase292ZXI6MSxvdXQ6MTV9KTsNCg0KCS8vIHRpbWVsaW5lIGZ1bmN0aW9uczoNCgl0aGlzLmZyYW1lXzAgPSBmdW5jdGlvbigpIHsNCgkJdGhpcy5zdG9wKCk7DQoJfQ0KCXRoaXMuZnJhbWVfMTQgPSBmdW5jdGlvbigpIHsNCgkJdGhpcy5zdG9wKCk7DQoJfQ0KDQoJLy8gYWN0aW9ucyB0d2VlbjoNCgl0aGlzLnRpbWVsaW5lLmFkZFR3ZWVuKGNqcy5Ud2Vlbi5nZXQodGhpcykuY2FsbCh0aGlzLmZyYW1lXzApLndhaXQoMTQpLmNhbGwodGhpcy5mcmFtZV8xNCkud2FpdCgxMCkpOw0KDQoJLy8gTGF5ZXIgMQ0KCXRoaXMuaW5zdGFuY2UgPSBuZXcgbGliLm1jX3JlcGxheSgpOw0KCXRoaXMuaW5zdGFuY2Uuc2V0VHJhbnNmb3JtKDAuMSwxMCwxLDEsMCwwLDAsNi40LDYuMik7DQoNCgl0aGlzLnRpbWVsaW5lLmFkZFR3ZWVuKGNqcy5Ud2Vlbi5nZXQodGhpcy5pbnN0YW5jZSkud2FpdCgyKS50byh7cmVnWDo2LjMscm90YXRpb246My41LHg6MH0sMCkud2FpdCgxKS50byh7cm90YXRpb246MTguMX0sMCkud2FpdCgxKS50byh7cm90YXRpb246NjAuOCx5OjkuOX0sMCkud2FpdCgxKS50byh7cm90YXRpb246MTc0LjEseDowLjEseToxMH0sMCkud2FpdCgxKS50byh7cm90YXRpb246MjUyLjYseDowLHk6MTAuMX0sMCkud2FpdCgxKS50byh7cm90YXRpb246MjkyLjd9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOjMxNy40LHk6MTB9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOjMzMy43fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjozNDQuOH0sMCkud2FpdCgxKS50byh7cm90YXRpb246MzUyLjF9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOjM1Ni44fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjozNTkuMn0sMCkud2FpdCgxKS50byh7cmVnWDo2LjQscm90YXRpb246MzYwLHg6MC4xfSwwKS53YWl0KDEwKSk7DQoNCgkvLyBoaXRBcmVhIChyZXNpemUgbWUpDQoJdGhpcy5oaXQgPSBuZXcgbGliLm1jX2hpdCgpOw0KCXRoaXMuaGl0LnNldFRyYW5zZm9ybSgtMC4xLDExLDEsMSwwLDAsMCwxMiwxMyk7DQoJdGhpcy5oaXQuYWxwaGEgPSAwOw0KDQoJdGhpcy50aW1lbGluZS5hZGRUd2VlbihjanMuVHdlZW4uZ2V0KHRoaXMuaGl0KS53YWl0KDI0KSk7DQoNCn0pLnByb3RvdHlwZSA9IHAgPSBuZXcgY2pzLk1vdmllQ2xpcCgpOw0KcC5ub21pbmFsQm91bmRzID0gbmV3IGNqcy5SZWN0YW5nbGUoLTEyLjEsLTIsMTksMTguMyk7DQoNCg0KKGxpYi5tY19jYXRjaGFsbCA9IGZ1bmN0aW9uKCkgew0KCXRoaXMuaW5pdGlhbGl6ZSgpOw0KDQoJLy8gTGF5ZXIgMQ0KCXRoaXMuaGl0ID0gbmV3IGxpYi5tY19oaXQoKTsNCgl0aGlzLmhpdC5zZXRUcmFuc2Zvcm0oMTIsMTMsMSwxLDAsMCwwLDEyLDEzKTsNCgl0aGlzLmhpdC5hbHBoYSA9IDA7DQoNCgl0aGlzLmFkZENoaWxkKHRoaXMuaGl0KTsNCn0pLnByb3RvdHlwZSA9IHAgPSBuZXcgY2pzLkNvbnRhaW5lcigpOw0KcC5ub21pbmFsQm91bmRzID0gbmV3IGNqcy5SZWN0YW5nbGUoMCwwLDE5LDE4LjMpOw0KDQoNCihsaWIuQ1RBID0gZnVuY3Rpb24obW9kZSxzdGFydFBvc2l0aW9uLGxvb3ApIHsNCgl0aGlzLmluaXRpYWxpemUobW9kZSxzdGFydFBvc2l0aW9uLGxvb3AseyJvdmVyIjoxLCJvdXQiOjIwfSk7DQoNCgkvLyB0aW1lbGluZSBmdW5jdGlvbnM6DQoJdGhpcy5mcmFtZV8wID0gZnVuY3Rpb24oKSB7DQoJCXRoaXMuc3RvcCgpOw0KCX0NCgl0aGlzLmZyYW1lXzE5ID0gZnVuY3Rpb24oKSB7DQoJCXRoaXMuc3RvcCgpOw0KCX0NCgl0aGlzLmZyYW1lXzI3ID0gZnVuY3Rpb24oKSB7DQoJCXRoaXMuc3RvcCgpOw0KCX0NCg0KCS8vIGFjdGlvbnMgdHdlZW46DQoJdGhpcy50aW1lbGluZS5hZGRUd2VlbihjanMuVHdlZW4uZ2V0KHRoaXMpLmNhbGwodGhpcy5mcmFtZV8wKS53YWl0KDE5KS5jYWxsKHRoaXMuZnJhbWVfMTkpLndhaXQoOCkuY2FsbCh0aGlzLmZyYW1lXzI3KS53YWl0KDEpKTsNCg0KCS8vIEhpdFpvbmUNCgl0aGlzLmhpdCA9IG5ldyBsaWIubWNfaGl0KCk7DQoJdGhpcy5oaXQuc2V0VHJhbnNmb3JtKDQ2LDEzLDMuNjgsMS4wNCwwLDAsMCwxMi41LDEyLjUpOw0KCXRoaXMuaGl0LmFscGhhID0gMDsNCg0KCXRoaXMudGltZWxpbmUuYWRkVHdlZW4oY2pzLlR3ZWVuLmdldCh0aGlzLmhpdCkud2FpdCgyOCkpOw0KDQoJLy8gQ29weSBjb3B5IChtYXNrKQ0KCXZhciBtYXNrID0gbmV3IGNqcy5TaGFwZSgpOw0KCW1hc2suX29mZiA9IHRydWU7DQoJbWFzay5ncmFwaGljcy5wKCJBQ0VBOFFnS2dMQUFnVVFBQWdUQUtnS1FBS2dKQVNBQVFBU0FBQUtBSlFBSkFLQUFBVFFBQUFVZ0pBTFFnS0FMZ1NBQVFnU0FBZ0tnTGdBQ09BSFFnR0FJQUFBT1FBQUFQQUdBSVFBR0FJQU1BQVFBTUFBQUZnSVFBR2dIQUFnUVFBQWdPZ0ZnSVFnR2dIZ01BQVFnTUFBZ0dBSGdBaUtBK1FnSWdJQUFnT0lBQWd4SUFOQUFJQUFBd1FBQUFLQUZBRlFBRUFFQUtBQVFBU0FBQUFnVElBQWd3SUFOQUFJQUFBeFFBQUFKZ0RBSFFnRUFIZ0hBRFFnSUFFZ0tBQVFnT2dCZ0pnSGdBRVFCRklnT2d3SWdDZ0pJZ0JnSklnQ0FKSWdDQUpJZ09Bd0lnT0FBSWdWaE9JQU9BQUlBTEFzSUFFQVVJQUNnS0lBQ2dKSUFOZ3RJQU5BQUlBTkF0SUFFQVRJQUVnVUlBTWdzSUFOQUFJZ1ZCT2dBQlRCRklnbmhBSWdCQUFJQUFBRUlBQkFTSUFBQXFJZ01BQUlBQWhPSUFRQUFJQW5BOUlBQkFBSWdCZ0pJQUFnTklBQWduSUFNQUFJQUFCT2dBZ25CRklBQWdmSWdiZ3ZJQU9BQUlBVEFpSUFUZ2lJQU9BQUlnYUF1SUFBQWdnQWpZQkZJQUFoT0lBWUFBUUFSQUFBSEFFUUFIQUZBQUFKUUFBQUdnREFGUWdFQUZnSEFCSUFBQUJRQUpBQkFFQUZRQUVBRUFBQUlRQUFBTGdJQUhRZ0hBRmdPQUJnQWpMQTVJQU9BQVFBSUFBQUZnRFFBRWdEQUFnR1FBQWdIZ0VnRFFnRmdEZ0lBQUlnT0FBZ0FqTEFWSUFOQUFRQUlBQUFFZ0NRQUVnREFBZ0dRQUFnR2dFZ0NRZ0VnQ2dKQUFJZ01BQWciKTsNCgltYXNrLnNldFRyYW5zZm9ybSgzMC43LDcuMSk7DQoNCgkvLyBzaGluZSBjb3B5DQoJdGhpcy5pbnN0YW5jZSA9IG5ldyBsaWIubWNfaGlnaGxpZ2h0TGluZSgpOw0KCXRoaXMuaW5zdGFuY2Uuc2V0VHJhbnNmb3JtKC0yMCwtMjYsMC41MjcsMC41MjcsMCwwLDAsMTE4LjMsMTQzLjgpOw0KCXRoaXMuaW5zdGFuY2UuX29mZiA9IHRydWU7DQoNCgl0aGlzLmluc3RhbmNlLm1hc2sgPSBtYXNrOw0KDQoJdGhpcy50aW1lbGluZS5hZGRUd2VlbihjanMuVHdlZW4uZ2V0KHRoaXMuaW5zdGFuY2UpLndhaXQoNCkudG8oe19vZmY6ZmFsc2V9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0wLjYseDotMTAuMSx5Oi0yMyxhbHBoYTowLjk1N30sMCkud2FpdCgxKS50byh7cm90YXRpb246LTEuMix4Oi0wLjMseTotMjAuMSxhbHBoYTowLjkxNH0sMCkud2FpdCgxKS50byh7cm90YXRpb246LTEuOCx4OjkuNSx5Oi0xNy4yLGFscGhhOjAuODcxfSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMi40LHg6MTkuMyx5Oi0xNC4yLGFscGhhOjAuODI4fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMyx4OjI5LjEseTotMTEuMyxhbHBoYTowLjc4NX0sMCkud2FpdCgxKS50byh7cm90YXRpb246LTMuNix4OjM4LjkseTotOC40LGFscGhhOjAuNzQyfSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotNC4yLHg6NDguNyx5Oi01LjQsYWxwaGE6MC42OTl9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi00LjgseDo1OC41LHk6LTIuNSxhbHBoYTowLjY1Nn0sMCkud2FpdCgxKS50byh7cm90YXRpb246LTUuNCx4OjY4LjMseTowLjQsYWxwaGE6MC42MTN9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi02LHg6NzgseTozLjQsYWxwaGE6MC41N30sMCkud2FpdCgxKS50byh7cm90YXRpb246LTYuNix4Ojg3LjkseTo2LjMsYWxwaGE6MC41Mjd9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi03LjIseDo5Ny43LHk6OS4yLGFscGhhOjAuNDg0fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotNy44LHg6MTA3LjUseToxMi4xLGFscGhhOjAuNDQxfSwwKS53YWl0KDEpLnRvKHtyZWdYOjExOC4yLHJlZ1k6MTQ0LHJvdGF0aW9uOi04LjQseDoxMTcuNCx5OjE1LjEsYWxwaGE6MC4zOTh9LDApLndhaXQoMTApKTsNCg0KCS8vIEJhc2UgbWFzayAobWFzaykNCgl2YXIgbWFza18xID0gbmV3IGNqcy5TaGFwZSgpOw0KCW1hc2tfMS5fb2ZmID0gdHJ1ZTsNCgltYXNrXzEuZ3JhcGhpY3MucCgiQWxkQmVJQUFpOElLN0FBSUFBQzhnQWxUQlZJS25BQUlBQWlwSXFuQUFnIik7DQoJbWFza18xLnNldFRyYW5zZm9ybSgzNSw5LjUpOw0KDQoJLy8gc2hpbmUNCgl0aGlzLmluc3RhbmNlXzEgPSBuZXcgbGliLm1jX2hpZ2hsaWdodExpbmUoKTsNCgl0aGlzLmluc3RhbmNlXzEuc2V0VHJhbnNmb3JtKC0yMCwtMjYsMC41MjcsMC41MjcsMCwwLDAsMTE4LjMsMTQzLjgpOw0KDQoJdGhpcy5pbnN0YW5jZV8xLm1hc2sgPSBtYXNrXzE7DQoNCgl0aGlzLnRpbWVsaW5lLmFkZFR3ZWVuKGNqcy5Ud2Vlbi5nZXQodGhpcy5pbnN0YW5jZV8xKS53YWl0KDEpLnRvKHtyb3RhdGlvbjoxLHg6LTExLjYseTotMjIuMyxhbHBoYTowLjk2Mn0sMCkud2FpdCgxKS50byh7cm90YXRpb246Mix4Oi0zLjQseTotMTguNixhbHBoYTowLjkyNX0sMCkud2FpdCgxKS50byh7cm90YXRpb246Myx4OjQuOSx5Oi0xNC45LGFscGhhOjAuODg3fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjo0LHg6MTMuMyx5Oi0xMS4yLGFscGhhOjAuODV9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOjQuOSx4OjIxLjUseTotNy42LGFscGhhOjAuODEyfSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjo1LjkseDoyOS44LHk6LTMuOCxhbHBoYTowLjc3NH0sMCkud2FpdCgxKS50byh7cm90YXRpb246Ni45LHg6MzguMix5Oi0wLjEsYWxwaGE6MC43Mzd9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOjcuOSx4OjQ2LjQseTozLjUsYWxwaGE6MC42OTl9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOjguOSx4OjU0LjcseTo3LjMsYWxwaGE6MC42NjJ9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOjkuOSx4OjYzLHk6MTAuOSxhbHBoYTowLjYyNH0sMCkud2FpdCgxKS50byh7cm90YXRpb246MTAuOSx4OjcxLjMseToxNC42LGFscGhhOjAuNTg2fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjoxMS45LHg6NzkuNix5OjE4LjMsYWxwaGE6MC41NDl9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOjEyLjgseDo4Ny45LHk6MjIsYWxwaGE6MC41MTF9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOjEzLjgseDo5Ni4yLHk6MjUuNyxhbHBoYTowLjQ3NH0sMCkud2FpdCgxKS50byh7cm90YXRpb246MTQuOCx4OjEwNC41LHk6MjkuNCxhbHBoYTowLjQzNn0sMCkud2FpdCgxKS50byh7cm90YXRpb246MTUuOCx4OjExMi44LHk6MzMsYWxwaGE6MC4zOTh9LDApLndhaXQoMTIpKTsNCg0KCS8vIENvcHkNCgl0aGlzLmluc3RhbmNlXzIgPSBuZXcgbGliLm1jX2N0YUNvcHkoKTsNCgl0aGlzLmluc3RhbmNlXzIuc2V0VHJhbnNmb3JtKDM1LjIsMTAuMSwxLDEsMCwwLDAsMjYuMiw0LjEpOw0KDQoJdGhpcy50aW1lbGluZS5hZGRUd2VlbihjanMuVHdlZW4uZ2V0KHRoaXMuaW5zdGFuY2VfMikud2FpdCgyOCkpOw0KDQoJLy8gQmFzZQ0KCXRoaXMuaW5zdGFuY2VfMyA9IG5ldyBsaWIubWNfY3RhQmFzZSgpOw0KCXRoaXMuaW5zdGFuY2VfMy5zZXRUcmFuc2Zvcm0oNDUsMTEuNSwxLDEsMCwwLDAsNDUsMTEuNSk7DQoNCgl0aGlzLnRpbWVsaW5lLmFkZFR3ZWVuKGNqcy5Ud2Vlbi5nZXQodGhpcy5pbnN0YW5jZV8zKS53YWl0KDI4KSk7DQoNCn0pLnByb3RvdHlwZSA9IHAgPSBuZXcgY2pzLk1vdmllQ2xpcCgpOw0KcC5ub21pbmFsQm91bmRzID0gbmV3IGNqcy5SZWN0YW5nbGUoMCwwLDcwLDE5LjEpOw0KDQoNCihsaWIubWNfbWFpbkNvbnRhaW5lciA9IGZ1bmN0aW9uKG1vZGUsc3RhcnRQb3NpdGlvbixsb29wKSB7DQoJdGhpcy5pbml0aWFsaXplKG1vZGUsc3RhcnRQb3NpdGlvbixsb29wLHt9KTsNCg0KCS8vIHRpbWVsaW5lIGZ1bmN0aW9uczoNCgl0aGlzLmZyYW1lXzAgPSBmdW5jdGlvbigpIHsNCgkJdGhpcy5jdGFPdmVyID0gZnVuY3Rpb24gKGUpIHsNCgkJCS8vIFN0YXJ0IHlvdXIgY3VzdG9tIGNvZGUNCgkJCXRoaXMuY3RhLmdvdG9BbmRQbGF5KCJvdmVyIik7DQoJCQkvLyBUaGlzIGV4YW1wbGUgY29kZSBkaXNwbGF5cyB0aGUgd29yZHMgIk1vdXNlZCBvdmVyIiBpbiB0aGUgT3V0cHV0IHBhbmVsLg0KCQkJY29uc29sZS5sb2coIkNUQTogbW91c2Ugb3ZlciIpOw0KCQkJLy8gRW5kIHlvdXIgY3VzdG9tIGNvZGUNCgkJfS5iaW5kKHRoaXMpOw0KCQkNCgkJdGhpcy5jdGFPdXQgPSBmdW5jdGlvbiAoZSkgew0KCQkJLy8gU3RhcnQgeW91ciBjdXN0b20gY29kZQ0KCQkJdGhpcy5jdGEuZ290b0FuZFBsYXkoIm91dCIpOw0KCQkJLy8gVGhpcyBleGFtcGxlIGNvZGUgZGlzcGxheXMgdGhlIHdvcmRzICJNb3VzZWQgb3V0IiBpbiB0aGUgT3V0cHV0IHBhbmVsLg0KCQkJY29uc29sZS5sb2coIkNUQTogbW91c2Ugb3V0Iik7DQoJCQkvLyBFbmQgeW91ciBjdXN0b20gY29kZQ0KCQl9LmJpbmQodGhpcyk7DQoJCQ0KCQkNCgkJDQoJCXRoaXMucmVwbGF5T3ZlciA9IGZ1bmN0aW9uIChlKSB7DQoJCQkvLyBTdGFydCB5b3VyIGN1c3RvbSBjb2RlDQoJCQl0aGlzLnJlcGxheS5nb3RvQW5kUGxheSgib3ZlciIpOw0KCQkJLy8gVGhpcyBleGFtcGxlIGNvZGUgZGlzcGxheXMgdGhlIHdvcmRzICJNb3VzZWQgb3ZlciIgaW4gdGhlIE91dHB1dCBwYW5lbC4NCgkJCWNvbnNvbGUubG9nKCJyZXBsYXk6IG1vdXNlIG92ZXIiKTsNCgkJCS8vIEVuZCB5b3VyIGN1c3RvbSBjb2RlDQoJCX0uYmluZCh0aGlzKTsNCgkJDQoJCXRoaXMucmVwbGF5T3V0ID0gZnVuY3Rpb24gKGUpIHsNCgkJCS8vIFN0YXJ0IHlvdXIgY3VzdG9tIGNvZGUNCgkJCXRoaXMucmVwbGF5LmdvdG9BbmRQbGF5KCJvdXQiKTsNCgkJCS8vIFRoaXMgZXhhbXBsZSBjb2RlIGRpc3BsYXlzIHRoZSB3b3JkcyAiTW91c2VkIG91dCIgaW4gdGhlIE91dHB1dCBwYW5lbC4NCgkJCWNvbnNvbGUubG9nKCJyZXBsYXk6IG1vdXNlIG91dCIpOw0KCQkJLy8gRW5kIHlvdXIgY3VzdG9tIGNvZGUNCgkJfS5iaW5kKHRoaXMpOw0KCQkNCgkJDQoJCQ0KCQlpZiAoIXRoaXMuY3RhLmhhc0V2ZW50TGlzdGVuZXIgKCJjbGljayIpKSB7DQoJCQl0aGlzLmNhdGNoYWxsLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgYWRLaXQuZXhpdC5jYXRjaGFsbCk7DQoJCQkNCgkJCXRoaXMucmVwbGF5LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgYWRLaXQucmVwbGF5KTsNCgkJCXRoaXMucmVwbGF5LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3ZlciIsIHRoaXMucmVwbGF5T3Zlcik7CQ0KCQkJdGhpcy5yZXBsYXkuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLCB0aGlzLnJlcGxheU91dCk7DQoJCQkNCgkJCXRoaXMuY3RhLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgYWRLaXQuZXhpdC5jdGEpOw0KCQkJdGhpcy5jdGEuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdmVyIiwgdGhpcy5jdGFPdmVyKTsNCgkJCXRoaXMuY3RhLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3V0IiwgdGhpcy5jdGFPdXQpOw0KCQkJDQoJCX0NCgkJDQoJCWFkS2l0LmNyZWF0ZUJ1dHRvbih0aGlzLnJlcGxheSk7DQoJCWFkS2l0LmNyZWF0ZUJ1dHRvbih0aGlzLmNhdGNoYWxsKTsNCgkJYWRLaXQuY3JlYXRlQnV0dG9uKHRoaXMuY3RhKTsNCgl9DQoJdGhpcy5mcmFtZV8xMiA9IGZ1bmN0aW9uKCkgew0KCQl0aGlzLndhdGNoMDEuZ290b0FuZFBsYXkoMSk7DQoJfQ0KCXRoaXMuZnJhbWVfOTMgPSBmdW5jdGlvbigpIHsNCgkJdGhpcy53YXRjaDAyLmdvdG9BbmRQbGF5KDEpOw0KCX0NCgl0aGlzLmZyYW1lXzE3NCA9IGZ1bmN0aW9uKCkgew0KCQl0aGlzLndhdGNoMDMuZ290b0FuZFBsYXkoMSk7DQoJfQ0KCXRoaXMuZnJhbWVfMjE0ID0gZnVuY3Rpb24oKSB7DQoJCXRoaXMuc3RvcCgpOw0KCX0NCg0KCS8vIGFjdGlvbnMgdHdlZW46DQoJdGhpcy50aW1lbGluZS5hZGRUd2VlbihjanMuVHdlZW4uZ2V0KHRoaXMpLmNhbGwodGhpcy5mcmFtZV8wKS53YWl0KDEyKS5jYWxsKHRoaXMuZnJhbWVfMTIpLndhaXQoODEpLmNhbGwodGhpcy5mcmFtZV85Mykud2FpdCg4MSkuY2FsbCh0aGlzLmZyYW1lXzE3NCkud2FpdCg0MCkuY2FsbCh0aGlzLmZyYW1lXzIxNCkud2FpdCgxMCkpOw0KDQoJLy8gcmVwbGF5DQoJdGhpcy5yZXBsYXkgPSBuZXcgbGliLm1jX3JlcGxheWNvcHkoKTsNCgl0aGlzLnJlcGxheS5zZXRUcmFuc2Zvcm0oMjk3LjUsMjQsMSwxLDAsMCwwLDEwLjUsMjIpOw0KCXRoaXMucmVwbGF5LmFscGhhID0gMDsNCg0KCXRoaXMudGltZWxpbmUuYWRkVHdlZW4oY2pzLlR3ZWVuLmdldCh0aGlzLnJlcGxheSkud2FpdCgyMDYpLnRvKHt4OjE1OC41fSwwKS50byh7YWxwaGE6MX0sOCkudG8oe19vZmY6dHJ1ZX0sMSkud2FpdCg5KSk7DQoNCgkvLyBDVEENCgl0aGlzLmN0YSA9IG5ldyBsaWIuQ1RBKCk7DQoJdGhpcy5jdGEuc2V0VHJhbnNmb3JtKDI2NSwyMzIuNSwxLDEsMCwwLDAsNDUsMTEuNSk7DQoJdGhpcy5jdGEuYWxwaGEgPSAwOw0KDQoJdGhpcy50aW1lbGluZS5hZGRUd2VlbihjanMuVHdlZW4uZ2V0KHRoaXMuY3RhKS53YWl0KDMzKS50byh7cmVnWDowLHJlZ1k6MCx4OjQ1LHk6NTU0fSwwKS53YWl0KDEpLnRvKHtyZWdYOjM1LHJlZ1k6OS41LHg6ODAseTo1NjMuNSxhbHBoYTowLjAxMn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4wNDZ9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMDk4fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjE2N30sMCkud2FpdCgxKS50byh7YWxwaGE6MC4yNDl9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMzR9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNDM3fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjUzN30sMCkud2FpdCgxKS50byh7YWxwaGE6MC42MzZ9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNzMxfSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjgxN30sMCkud2FpdCgxKS50byh7YWxwaGE6MC44OTF9LDApLndhaXQoMSkudG8oe2FscGhhOjAuOTQ5fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjk4N30sMCkud2FpdCgxKS50byh7cmVnWDowLHJlZ1k6MCx4OjQ1LHk6NTU0LGFscGhhOjF9LDApLnRvKHtfb2ZmOnRydWV9LDE2Nykud2FpdCg5KSk7DQoNCgkvLyBjYXRjaGFsbA0KCXRoaXMuY2F0Y2hhbGwgPSBuZXcgbGliLm1jX2NhdGNoYWxsKCk7DQoJdGhpcy5jYXRjaGFsbC5zZXRUcmFuc2Zvcm0oMjEwLjYsODE5LjcsOC40MjEsMzIuNzg3LDAsMCwwLDI1LDI1KTsNCgl0aGlzLmNhdGNoYWxsLmFscGhhID0gMC4wMTI7DQoNCgl0aGlzLnRpbWVsaW5lLmFkZFR3ZWVuKGNqcy5Ud2Vlbi5nZXQodGhpcy5jYXRjaGFsbCkudG8oe19vZmY6dHJ1ZX0sMjE1KS53YWl0KDkpKTsNCg0KCS8vIGNvcHkgMyBsbiAzDQoJdGhpcy5pbnN0YW5jZSA9IG5ldyBsaWIubWNfY29weTAzX2xuMDIoKTsNCgl0aGlzLmluc3RhbmNlLnNldFRyYW5zZm9ybSg0OSw3My45LDEsMSwwLDAsMCw1MiwxMi45KTsNCgl0aGlzLmluc3RhbmNlLmFscGhhID0gMDsNCg0KCXRoaXMuaW5zdGFuY2VfMSA9IG5ldyBsaWIubWNfY29weTAzX2xuMDMoKTsNCgl0aGlzLmluc3RhbmNlXzEuc2V0VHJhbnNmb3JtKDExMCwxNDguOSwxLDEsMCwwLDAsNTIsMTIuOSk7DQoJdGhpcy5pbnN0YW5jZV8xLmFscGhhID0gMDsNCgl0aGlzLmluc3RhbmNlXzEuX29mZiA9IHRydWU7DQoNCgl0aGlzLnRpbWVsaW5lLmFkZFR3ZWVuKGNqcy5Ud2Vlbi5nZXQoe30pLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZX1dfSkudG8oe3N0YXRlOlt7dDp0aGlzLmluc3RhbmNlXzF9XX0sMTc0KS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfMX1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfMX1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfMX1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfMX1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfMX1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfMX1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfMX1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfMX1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfMX1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfMX1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfMX1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfMX1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfMX1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfMX1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfMX1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfMX1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfMX1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfMX1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfMX1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfMX1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfMX1dfSwxKS50byh7c3RhdGU6W119LDIwKS53YWl0KDkpKTsNCgl0aGlzLnRpbWVsaW5lLmFkZFR3ZWVuKGNqcy5Ud2Vlbi5nZXQodGhpcy5pbnN0YW5jZV8xKS53YWl0KDE3NCkudG8oe19vZmY6ZmFsc2V9LDApLndhaXQoMSkudG8oe3JlZ1g6MjMuOCxyZWdZOjMzLjIseDo4MS44LHk6MTY5LjIsYWxwaGE6MC4wMDd9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMDI1fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjA1NX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4wOTV9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMTQzfSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjE5OH0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4yNTl9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMzI1fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjM5NH0sMCkud2FpdCgxKS50byh7YWxwaGE6MC40NjR9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNTM2fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjYwNn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC42NzV9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNzQxfSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjgwMn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC44NTd9LDApLndhaXQoMSkudG8oe2FscGhhOjAuOTA1fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjk0NX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC45NzV9LDApLndhaXQoMSkudG8oe2FscGhhOjAuOTkzfSwwKS53YWl0KDEpLnRvKHtyZWdYOjUyLHJlZ1k6MTIuOSx4OjExMCx5OjE0OC45LGFscGhhOjF9LDApLnRvKHtfb2ZmOnRydWV9LDIwKS53YWl0KDkpKTsNCg0KCS8vIGNvcHkgMyBsbiAyDQoJdGhpcy5pbnN0YW5jZV8yID0gbmV3IGxpYi5tY19jb3B5MDNfbG4wMigpOw0KCXRoaXMuaW5zdGFuY2VfMi5zZXRUcmFuc2Zvcm0oNDksNzMuOSwxLDEsMCwwLDAsNTIsMTIuOSk7DQoJdGhpcy5pbnN0YW5jZV8yLmFscGhhID0gMDsNCg0KCXRoaXMudGltZWxpbmUuYWRkVHdlZW4oY2pzLlR3ZWVuLmdldCh0aGlzLmluc3RhbmNlXzIpLndhaXQoMTcyKS50byh7eDoxMTAseToxNDguOX0sMCkud2FpdCgxKS50byh7cmVnWDoyMC42LHJlZ1k6MTQuOCx4Ojc4LjYseToxNTAuOCxhbHBoYTowLjAwN30sMCkud2FpdCgxKS50byh7YWxwaGE6MC4wMjV9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMDU1fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjA5NX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4xNDN9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMTk4fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjI1OX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4zMjV9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMzk0fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjQ2NH0sMCkud2FpdCgxKS50byh7YWxwaGE6MC41MzZ9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNjA2fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjY3NX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC43NDF9LDApLndhaXQoMSkudG8oe2FscGhhOjAuODAyfSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjg1N30sMCkud2FpdCgxKS50byh7YWxwaGE6MC45MDV9LDApLndhaXQoMSkudG8oe2FscGhhOjAuOTQ1fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjk3NX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC45OTN9LDApLndhaXQoMSkudG8oe3JlZ1g6NTIscmVnWToxMi45LHg6MTEwLHk6MTQ4LjksYWxwaGE6MX0sMCkudG8oe19vZmY6dHJ1ZX0sMjIpLndhaXQoOSkpOw0KDQoJLy8gY29weSAzIGxuIDENCgl0aGlzLmluc3RhbmNlXzMgPSBuZXcgbGliLm1jX2NvcHkwM19sbjAxKCk7DQoJdGhpcy5pbnN0YW5jZV8zLnNldFRyYW5zZm9ybSgzMS4yLDU1LjksMSwxLDAsMCwwLDM1LjIsMTIuOSk7DQoJdGhpcy5pbnN0YW5jZV8zLmFscGhhID0gMDsNCg0KCXRoaXMudGltZWxpbmUuYWRkVHdlZW4oY2pzLlR3ZWVuLmdldCh0aGlzLmluc3RhbmNlXzMpLndhaXQoMTcwKS50byh7eDo0Ny4yLHk6MTI4Ljl9LDApLndhaXQoMSkudG8oe3JlZ1g6NjYuOCxyZWdZOjEyLjgseDo3OC44LHk6MTI4LjgsYWxwaGE6MC4wMDd9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMDI4fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjA2MX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4xMDR9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMTU2fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjIxNn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4yODJ9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMzUyfSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjQyNX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC41fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjU3NX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC42NDh9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNzE4fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjc4NH0sMCkud2FpdCgxKS50byh7YWxwaGE6MC44NDR9LDApLndhaXQoMSkudG8oe2FscGhhOjAuODk2fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjkzOX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC45NzJ9LDApLndhaXQoMSkudG8oe2FscGhhOjAuOTkzfSwwKS53YWl0KDEpLnRvKHtyZWdYOjM1LjIscmVnWToxMi45LHg6NDcuMix5OjEyOC45LGFscGhhOjF9LDApLnRvKHtfb2ZmOnRydWV9LDI1KS53YWl0KDkpKTsNCg0KCS8vIG1jX3dhdGNoMDMNCgl0aGlzLndhdGNoMDMgPSBuZXcgbGliLm1jX3dhdGNoMDMoKTsNCgl0aGlzLndhdGNoMDMuc2V0VHJhbnNmb3JtKDgyLDMzNi41LDEsMSwwLDAsMCw1Myw5MC41KTsNCgl0aGlzLndhdGNoMDMuYWxwaGEgPSAwOw0KCXRoaXMud2F0Y2gwMy5fb2ZmID0gdHJ1ZTsNCg0KCXRoaXMudGltZWxpbmUuYWRkVHdlZW4oY2pzLlR3ZWVuLmdldCh0aGlzLndhdGNoMDMpLndhaXQoMTY3KS50byh7X29mZjpmYWxzZX0sMCkud2FpdCgxKS50byh7cmVnWDo2OSxyZWdZOjgwLjUseDo5NS42LHk6MzI2LjUsYWxwaGE6MC4xODN9LDApLndhaXQoMSkudG8oe3g6OTQuMixhbHBoYTowLjI5fSwwKS53YWl0KDEpLnRvKHt4OjkzLjEsYWxwaGE6MC4zNzR9LDApLndhaXQoMSkudG8oe3g6OTIuMixhbHBoYTowLjQ0NH0sMCkud2FpdCgxKS50byh7eDo5MS40LGFscGhhOjAuNTA2fSwwKS53YWl0KDEpLnRvKHt4OjkwLjcsYWxwaGE6MC41Nn0sMCkud2FpdCgxKS50byh7eDo5MC4xLGFscGhhOjAuNjA5fSwwKS53YWl0KDEpLnRvKHt4Ojg5LjUsYWxwaGE6MC42NTN9LDApLndhaXQoMSkudG8oe3g6ODksYWxwaGE6MC42OTR9LDApLndhaXQoMSkudG8oe3g6ODguNSxhbHBoYTowLjczMX0sMCkud2FpdCgxKS50byh7eDo4OC4xLGFscGhhOjAuNzY1fSwwKS53YWl0KDEpLnRvKHt4Ojg3LjYsYWxwaGE6MC43OTZ9LDApLndhaXQoMSkudG8oe3g6ODcuMyxhbHBoYTowLjgyNX0sMCkud2FpdCgxKS50byh7eDo4Ni45LGFscGhhOjAuODUxfSwwKS53YWl0KDEpLnRvKHt4Ojg2LjYsYWxwaGE6MC44NzV9LDApLndhaXQoMSkudG8oe3g6ODYuMyxhbHBoYTowLjg5N30sMCkud2FpdCgxKS50byh7eDo4Ni4xLGFscGhhOjAuOTE2fSwwKS53YWl0KDEpLnRvKHt4Ojg1LjksYWxwaGE6MC45MzR9LDApLndhaXQoMSkudG8oe3g6ODUuNyxhbHBoYTowLjk0OX0sMCkud2FpdCgxKS50byh7eDo4NS41LGFscGhhOjAuOTYyfSwwKS53YWl0KDEpLnRvKHt4Ojg1LjMsYWxwaGE6MC45NzR9LDApLndhaXQoMSkudG8oe3g6ODUuMixhbHBoYTowLjk4M30sMCkud2FpdCgxKS50byh7eDo4NS4xLGFscGhhOjAuOTl9LDApLndhaXQoMSkudG8oe2FscGhhOjAuOTk2fSwwKS53YWl0KDEpLnRvKHt4Ojg1LGFscGhhOjAuOTk5fSwwKS53YWl0KDEpLnRvKHtyZWdYOjUzLHJlZ1k6OTAuNSx4OjY5LHk6MzM2LjUsYWxwaGE6MX0sMCkudG8oe19vZmY6dHJ1ZX0sMjIpLndhaXQoOSkpOw0KDQoJLy8gY29weSAyIGxuIDMNCgl0aGlzLmluc3RhbmNlXzQgPSBuZXcgbGliLm1jX2NvcHkwMl9sbjAxKCk7DQoJdGhpcy5pbnN0YW5jZV80LnNldFRyYW5zZm9ybSg2NCw1NS45LDEsMSwwLDAsMCw1MiwxMi45KTsNCgl0aGlzLmluc3RhbmNlXzQuYWxwaGEgPSAwOw0KDQoJdGhpcy5pbnN0YW5jZV81ID0gbmV3IGxpYi5tY19jb3B5MDJfbG4wMygpOw0KCXRoaXMuaW5zdGFuY2VfNS5zZXRUcmFuc2Zvcm0oMTAwLDEyOC45LDEsMSwwLDAsMCw1MiwxMi45KTsNCgl0aGlzLmluc3RhbmNlXzUuYWxwaGEgPSAwOw0KCXRoaXMuaW5zdGFuY2VfNS5fb2ZmID0gdHJ1ZTsNCg0KCXRoaXMudGltZWxpbmUuYWRkVHdlZW4oY2pzLlR3ZWVuLmdldCh7fSkudG8oe3N0YXRlOlt7dDp0aGlzLmluc3RhbmNlXzR9XX0pLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV81fV19LDk2KS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfNX1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfNX1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfNX1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfNX1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfNX1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfNX1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfNX1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfNX1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfNX1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfNX1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfNX1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfNX1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfNX1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfNX1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfNX1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfNX1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfNX1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfNX1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfNX1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfNX1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfNX1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfNX1dfSwzNCkudG8oe3N0YXRlOlt7dDp0aGlzLmluc3RhbmNlXzV9XX0sMSkudG8oe3N0YXRlOlt7dDp0aGlzLmluc3RhbmNlXzV9XX0sMSkudG8oe3N0YXRlOlt7dDp0aGlzLmluc3RhbmNlXzV9XX0sMSkudG8oe3N0YXRlOlt7dDp0aGlzLmluc3RhbmNlXzV9XX0sMSkudG8oe3N0YXRlOlt7dDp0aGlzLmluc3RhbmNlXzV9XX0sMSkudG8oe3N0YXRlOlt7dDp0aGlzLmluc3RhbmNlXzV9XX0sMSkudG8oe3N0YXRlOlt7dDp0aGlzLmluc3RhbmNlXzV9XX0sMSkudG8oe3N0YXRlOlt7dDp0aGlzLmluc3RhbmNlXzV9XX0sMSkudG8oe3N0YXRlOlt7dDp0aGlzLmluc3RhbmNlXzV9XX0sMSkudG8oe3N0YXRlOlt7dDp0aGlzLmluc3RhbmNlXzV9XX0sMSkudG8oe3N0YXRlOlt7dDp0aGlzLmluc3RhbmNlXzV9XX0sMSkudG8oe3N0YXRlOlt7dDp0aGlzLmluc3RhbmNlXzV9XX0sMSkudG8oe3N0YXRlOlt7dDp0aGlzLmluc3RhbmNlXzV9XX0sMSkudG8oe3N0YXRlOlt7dDp0aGlzLmluc3RhbmNlXzV9XX0sMSkudG8oe3N0YXRlOlt7dDp0aGlzLmluc3RhbmNlXzV9XX0sMSkudG8oe3N0YXRlOlt7dDp0aGlzLmluc3RhbmNlXzV9XX0sMSkudG8oe3N0YXRlOlt7dDp0aGlzLmluc3RhbmNlXzV9XX0sMSkudG8oe3N0YXRlOlt7dDp0aGlzLmluc3RhbmNlXzV9XX0sMSkudG8oe3N0YXRlOlt7dDp0aGlzLmluc3RhbmNlXzV9XX0sMSkudG8oe3N0YXRlOlt7dDp0aGlzLmluc3RhbmNlXzV9XX0sMSkudG8oe3N0YXRlOlt7dDp0aGlzLmluc3RhbmNlXzV9XX0sMSkudG8oe3N0YXRlOlt7dDp0aGlzLmluc3RhbmNlXzV9XX0sMSkudG8oe3N0YXRlOlt7dDp0aGlzLmluc3RhbmNlXzV9XX0sMSkudG8oe3N0YXRlOlt7dDp0aGlzLmluc3RhbmNlXzV9XX0sMSkudG8oe3N0YXRlOltdfSw0MCkud2FpdCg5KSk7DQoJdGhpcy50aW1lbGluZS5hZGRUd2VlbihjanMuVHdlZW4uZ2V0KHRoaXMuaW5zdGFuY2VfNSkud2FpdCg5NikudG8oe19vZmY6ZmFsc2V9LDApLndhaXQoMSkudG8oe3JlZ1g6MzEuOCxyZWdZOjU0LjgseDo3OS44LHk6MTcwLjgsYWxwaGE6MC4wMDd9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMDI2fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjA1N30sMCkud2FpdCgxKS50byh7YWxwaGE6MC4wOTd9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMTQ2fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjIwMn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4yNjR9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMzN9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMzk5fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjQ3MX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC41NDJ9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNjEzfSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjY4MX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC43NDZ9LDApLndhaXQoMSkudG8oe2FscGhhOjAuODA2fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjg2MX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC45MDh9LDApLndhaXQoMSkudG8oe2FscGhhOjAuOTQ2fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjk3NX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC45OTR9LDApLndhaXQoMSkudG8oe3JlZ1g6NTIscmVnWToxMi45LHg6MTAwLHk6MTI4LjksYWxwaGE6MX0sMCkud2FpdCgzNSkudG8oe3JlZ1g6MzEuOCxyZWdZOjU0LjgseDo3OS44LHk6MTcwLjgsYWxwaGE6MC45OTV9LDApLndhaXQoMSkudG8oe2FscGhhOjAuOTgxfSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjk1OH0sMCkud2FpdCgxKS50byh7YWxwaGE6MC45Mjd9LDApLndhaXQoMSkudG8oe2FscGhhOjAuODg5fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjg0NX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC43OTZ9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNzQzfSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjY4Nn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC42Mjd9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNTY2fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjUwNH0sMCkud2FpdCgxKS50byh7YWxwaGE6MC40NDF9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMzh9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMzJ9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMjYyfSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjIwOH0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4xNTl9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMTE0fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjA3NX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4wNDR9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMDJ9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMDA1fSwwKS53YWl0KDEpLnRvKHtyZWdYOjUyLHJlZ1k6MTIuOSx4OjEwMCx5OjEyOC45LGFscGhhOjB9LDApLnRvKHtfb2ZmOnRydWV9LDQwKS53YWl0KDkpKTsNCg0KCS8vIGNvcHkgMiBsbiAyDQoJdGhpcy5pbnN0YW5jZV82ID0gbmV3IGxpYi5tY19jb3B5MDJfbG4wMSgpOw0KCXRoaXMuaW5zdGFuY2VfNi5zZXRUcmFuc2Zvcm0oNjQsNTUuOSwxLDEsMCwwLDAsNTIsMTIuOSk7DQoJdGhpcy5pbnN0YW5jZV82LmFscGhhID0gMDsNCg0KCXRoaXMuaW5zdGFuY2VfNyA9IG5ldyBsaWIubWNfY29weTAyX2xuMDIoKTsNCgl0aGlzLmluc3RhbmNlXzcuc2V0VHJhbnNmb3JtKDEwMCwxMjguOSwxLDEsMCwwLDAsNTIsMTIuOSk7DQoJdGhpcy5pbnN0YW5jZV83LmFscGhhID0gMDsNCgl0aGlzLmluc3RhbmNlXzcuX29mZiA9IHRydWU7DQoNCgl0aGlzLnRpbWVsaW5lLmFkZFR3ZWVuKGNqcy5Ud2Vlbi5nZXQoe30pLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV82fV19KS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfN31dfSw5NCkudG8oe3N0YXRlOlt7dDp0aGlzLmluc3RhbmNlXzd9XX0sMSkudG8oe3N0YXRlOlt7dDp0aGlzLmluc3RhbmNlXzd9XX0sMSkudG8oe3N0YXRlOlt7dDp0aGlzLmluc3RhbmNlXzd9XX0sMSkudG8oe3N0YXRlOlt7dDp0aGlzLmluc3RhbmNlXzd9XX0sMSkudG8oe3N0YXRlOlt7dDp0aGlzLmluc3RhbmNlXzd9XX0sMSkudG8oe3N0YXRlOlt7dDp0aGlzLmluc3RhbmNlXzd9XX0sMSkudG8oe3N0YXRlOlt7dDp0aGlzLmluc3RhbmNlXzd9XX0sMSkudG8oe3N0YXRlOlt7dDp0aGlzLmluc3RhbmNlXzd9XX0sMSkudG8oe3N0YXRlOlt7dDp0aGlzLmluc3RhbmNlXzd9XX0sMSkudG8oe3N0YXRlOlt7dDp0aGlzLmluc3RhbmNlXzd9XX0sMSkudG8oe3N0YXRlOlt7dDp0aGlzLmluc3RhbmNlXzd9XX0sMSkudG8oe3N0YXRlOlt7dDp0aGlzLmluc3RhbmNlXzd9XX0sMSkudG8oe3N0YXRlOlt7dDp0aGlzLmluc3RhbmNlXzd9XX0sMSkudG8oe3N0YXRlOlt7dDp0aGlzLmluc3RhbmNlXzd9XX0sMSkudG8oe3N0YXRlOlt7dDp0aGlzLmluc3RhbmNlXzd9XX0sMSkudG8oe3N0YXRlOlt7dDp0aGlzLmluc3RhbmNlXzd9XX0sMSkudG8oe3N0YXRlOlt7dDp0aGlzLmluc3RhbmNlXzd9XX0sMSkudG8oe3N0YXRlOlt7dDp0aGlzLmluc3RhbmNlXzd9XX0sMSkudG8oe3N0YXRlOlt7dDp0aGlzLmluc3RhbmNlXzd9XX0sMSkudG8oe3N0YXRlOlt7dDp0aGlzLmluc3RhbmNlXzd9XX0sMSkudG8oe3N0YXRlOlt7dDp0aGlzLmluc3RhbmNlXzd9XX0sMSkudG8oe3N0YXRlOlt7dDp0aGlzLmluc3RhbmNlXzd9XX0sMzQpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV83fV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV83fV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV83fV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV83fV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV83fV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV83fV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV83fV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV83fV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV83fV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV83fV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV83fV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV83fV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV83fV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV83fV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV83fV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV83fV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV83fV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV83fV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV83fV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV83fV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV83fV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV83fV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV83fV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV83fV19LDEpLnRvKHtzdGF0ZTpbXX0sNDIpLndhaXQoOSkpOw0KCXRoaXMudGltZWxpbmUuYWRkVHdlZW4oY2pzLlR3ZWVuLmdldCh0aGlzLmluc3RhbmNlXzcpLndhaXQoOTQpLnRvKHtfb2ZmOmZhbHNlfSwwKS53YWl0KDEpLnRvKHtyZWdYOjMyLjYscmVnWTozMi44LHg6ODAuNix5OjE0OC44LGFscGhhOjAuMDA3fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjAyNn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4wNTd9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMDk3fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjE0Nn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4yMDJ9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMjY0fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjMzfSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjM5OX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC40NzF9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNTQyfSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjYxM30sMCkud2FpdCgxKS50byh7YWxwaGE6MC42ODF9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNzQ2fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjgwNn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC44NjF9LDApLndhaXQoMSkudG8oe2FscGhhOjAuOTA4fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjk0Nn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC45NzV9LDApLndhaXQoMSkudG8oe2FscGhhOjAuOTk0fSwwKS53YWl0KDEpLnRvKHtyZWdYOjUyLHJlZ1k6MTIuOSx4OjEwMCx5OjEyOC45LGFscGhhOjF9LDApLndhaXQoMzUpLnRvKHtyZWdYOjMyLjYscmVnWTozMi44LHg6ODAuNix5OjE0OC44LGFscGhhOjAuOTk1fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjk4MX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC45NTh9LDApLndhaXQoMSkudG8oe2FscGhhOjAuOTI3fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjg4OX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC44NDV9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNzk2fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjc0M30sMCkud2FpdCgxKS50byh7YWxwaGE6MC42ODZ9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNjI3fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjU2Nn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC41MDR9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNDQxfSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjM4fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjMyfSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjI2Mn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4yMDh9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMTU5fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjExNH0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4wNzV9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMDQ0fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjAyfSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjAwNX0sMCkud2FpdCgxKS50byh7cmVnWDo1MixyZWdZOjEyLjkseDoxMDAseToxMjguOSxhbHBoYTowfSwwKS50byh7X29mZjp0cnVlfSw0Mikud2FpdCg5KSk7DQoNCgkvLyBjb3B5IDIgbG4gMQ0KCXRoaXMuaW5zdGFuY2VfOCA9IG5ldyBsaWIubWNfY29weTAyX2xuMDEoKTsNCgl0aGlzLmluc3RhbmNlXzguc2V0VHJhbnNmb3JtKDY0LDU1LjksMSwxLDAsMCwwLDUyLDEyLjkpOw0KCXRoaXMuaW5zdGFuY2VfOC5hbHBoYSA9IDA7DQoNCgl0aGlzLnRpbWVsaW5lLmFkZFR3ZWVuKGNqcy5Ud2Vlbi5nZXQodGhpcy5pbnN0YW5jZV84KS53YWl0KDkyKS50byh7eDoxMDAseToxMjguOX0sMCkud2FpdCgxKS50byh7cmVnWDozMi42LHJlZ1k6MTQuOCx4OjgwLjYseToxMzAuOCxhbHBoYTowLjAwN30sMCkud2FpdCgxKS50byh7YWxwaGE6MC4wMjZ9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMDU3fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjA5N30sMCkud2FpdCgxKS50byh7YWxwaGE6MC4xNDZ9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMjAyfSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjI2NH0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4zM30sMCkud2FpdCgxKS50byh7YWxwaGE6MC4zOTl9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNDcxfSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjU0Mn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC42MTN9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNjgxfSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjc0Nn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC44MDZ9LDApLndhaXQoMSkudG8oe2FscGhhOjAuODYxfSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjkwOH0sMCkud2FpdCgxKS50byh7YWxwaGE6MC45NDZ9LDApLndhaXQoMSkudG8oe2FscGhhOjAuOTc1fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjk5NH0sMCkud2FpdCgxKS50byh7cmVnWDo1MixyZWdZOjEyLjkseDoxMDAseToxMjguOSxhbHBoYToxfSwwKS53YWl0KDM1KS50byh7cmVnWDozMi42LHJlZ1k6MTQuOCx4OjgwLjYseToxMzAuOCxhbHBoYTowLjk5NX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC45ODF9LDApLndhaXQoMSkudG8oe2FscGhhOjAuOTU4fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjkyN30sMCkud2FpdCgxKS50byh7YWxwaGE6MC44ODl9LDApLndhaXQoMSkudG8oe2FscGhhOjAuODQ1fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjc5Nn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC43NDN9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNjg2fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjYyN30sMCkud2FpdCgxKS50byh7YWxwaGE6MC41NjZ9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNTA0fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjQ0MX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4zOH0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4zMn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4yNjJ9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMjA4fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjE1OX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4xMTR9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMDc1fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjA0NH0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4wMn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4wMDV9LDApLndhaXQoMSkudG8oe3JlZ1g6NTIscmVnWToxMi45LHg6MTAwLHk6MTI4LjksYWxwaGE6MH0sMCkudG8oe19vZmY6dHJ1ZX0sNDQpLndhaXQoOSkpOw0KDQoJLy8gd2F0Y2gwMg0KCXRoaXMud2F0Y2gwMiA9IG5ldyBsaWIubWNfd2F0Y2gwMigpOw0KCXRoaXMud2F0Y2gwMi5zZXRUcmFuc2Zvcm0oMTQzLjUsMzA5LDEsMSwwLDAsMCwyOS41LDg0KTsNCgl0aGlzLndhdGNoMDIuYWxwaGEgPSAwOw0KCXRoaXMud2F0Y2gwMi5fb2ZmID0gdHJ1ZTsNCg0KCXRoaXMudGltZWxpbmUuYWRkVHdlZW4oY2pzLlR3ZWVuLmdldCh0aGlzLndhdGNoMDIpLndhaXQoODkpLnRvKHtfb2ZmOmZhbHNlfSwwKS53YWl0KDEpLnRvKHtyZWdYOjMscmVnWTo5Myx4OjEwOC4yLHk6MzE4LGFscGhhOjAuMjY2fSwwKS53YWl0KDEpLnRvKHt4OjEwMy4yLGFscGhhOjAuNDE5fSwwKS53YWl0KDEpLnRvKHt4Ojk5LjcsYWxwaGE6MC41MjN9LDApLndhaXQoMSkudG8oe3g6OTcuMixhbHBoYTowLjYwMX0sMCkud2FpdCgxKS50byh7eDo5NS4xLGFscGhhOjAuNjYzfSwwKS53YWl0KDEpLnRvKHt4OjkzLjQsYWxwaGE6MC43MTR9LDApLndhaXQoMSkudG8oe3g6OTIsYWxwaGE6MC43NTZ9LDApLndhaXQoMSkudG8oe3g6OTAuOSxhbHBoYTowLjc5Mn0sMCkud2FpdCgxKS50byh7eDo4OS44LGFscGhhOjAuODIzfSwwKS53YWl0KDEpLnRvKHt4Ojg5LGFscGhhOjAuODQ5fSwwKS53YWl0KDEpLnRvKHt4Ojg4LjIsYWxwaGE6MC44NzJ9LDApLndhaXQoMSkudG8oe3g6ODcuNixhbHBoYTowLjg5Mn0sMCkud2FpdCgxKS50byh7eDo4NyxhbHBoYTowLjkxfSwwKS53YWl0KDEpLnRvKHt4Ojg2LjUsYWxwaGE6MC45MjV9LDApLndhaXQoMSkudG8oe3g6ODYsYWxwaGE6MC45Mzh9LDApLndhaXQoMSkudG8oe3g6ODUuNyxhbHBoYTowLjk1fSwwKS53YWl0KDEpLnRvKHt4Ojg1LjMsYWxwaGE6MC45Nn0sMCkud2FpdCgxKS50byh7eDo4NSxhbHBoYTowLjk2OH0sMCkud2FpdCgxKS50byh7eDo4NC44LGFscGhhOjAuOTc2fSwwKS53YWl0KDEpLnRvKHt4Ojg0LjYsYWxwaGE6MC45ODJ9LDApLndhaXQoMSkudG8oe3g6ODQuNCxhbHBoYTowLjk4N30sMCkud2FpdCgxKS50byh7eDo4NC4zLGFscGhhOjAuOTkxfSwwKS53YWl0KDEpLnRvKHt4Ojg0LjIsYWxwaGE6MC45OTV9LDApLndhaXQoMSkudG8oe3g6ODQuMSxhbHBoYTowLjk5N30sMCkud2FpdCgxKS50byh7eDo4NCxhbHBoYTowLjk5OX0sMCkud2FpdCgxKS50byh7YWxwaGE6MX0sMCkud2FpdCgxKS50byh7cmVnWDoyOS41LHJlZ1k6ODQseDoxMTAuNSx5OjMwOX0sMCkud2FpdCgzMikudG8oe3JlZ1g6MyxyZWdZOjkzLHg6ODIuOSx5OjMxOCxhbHBoYTowLjkxMn0sMCkud2FpdCgxKS50byh7eDo4MS45LGFscGhhOjAuODIyfSwwKS53YWl0KDEpLnRvKHt4OjgwLjgsYWxwaGE6MC43MzJ9LDApLndhaXQoMSkudG8oe3g6NzkuNyxhbHBoYTowLjY0Mn0sMCkud2FpdCgxKS50byh7eDo3OC43LGFscGhhOjAuNTU1fSwwKS53YWl0KDEpLnRvKHt4Ojc3LjcsYWxwaGE6MC40NzF9LDApLndhaXQoMSkudG8oe3g6NzYuNyxhbHBoYTowLjM5Mn0sMCkud2FpdCgxKS50byh7eDo3NS44LGFscGhhOjAuMzE3fSwwKS53YWl0KDEpLnRvKHt4Ojc1LGFscGhhOjAuMjQ4fSwwKS53YWl0KDEpLnRvKHt4Ojc0LjIsYWxwaGE6MC4xODV9LDApLndhaXQoMSkudG8oe3g6NzMuNSxhbHBoYTowLjEyOH0sMCkud2FpdCgxKS50byh7eDo3Mi45LGFscGhhOjAuMDc5fSwwKS53YWl0KDEpLnRvKHt4OjcyLjQsYWxwaGE6MC4wMzZ9LDApLndhaXQoMSkudG8oe3JlZ1g6MjkuNSxyZWdZOjg0LHg6OTguNSx5OjMwOSxhbHBoYTowfSwwKS50byh7X29mZjp0cnVlfSw1NCkud2FpdCg5KSk7DQoNCgkvLyBjb3B5IDEgbG4gMSBjb3B5DQoJdGhpcy5pbnN0YW5jZV85ID0gbmV3IGxpYi5tY19jb3B5MDFfbG4wMSgpOw0KCXRoaXMuaW5zdGFuY2VfOS5zZXRUcmFuc2Zvcm0oNjgsMTI3LjksMSwxLDAsMCwwLDUyLDEyLjkpOw0KCXRoaXMuaW5zdGFuY2VfOS5hbHBoYSA9IDA7DQoJdGhpcy5pbnN0YW5jZV85Ll9vZmYgPSB0cnVlOw0KDQoJdGhpcy50aW1lbGluZS5hZGRUd2VlbihjanMuVHdlZW4uZ2V0KHRoaXMuaW5zdGFuY2VfOSkud2FpdCgxNCkudG8oe19vZmY6ZmFsc2V9LDApLndhaXQoMSkudG8oe3JlZ1g6NjMuNCxyZWdZOjM1LjcseDo3OS40LHk6MTUwLjcsYWxwaGE6MC4wMDd9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMDI4fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjA2MX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4xMDR9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMTU2fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjIxNn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4yODJ9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMzUyfSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjQyNX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC41fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjU3NX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC42NDh9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNzE4fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjc4NH0sMCkud2FpdCgxKS50byh7YWxwaGE6MC44NDR9LDApLndhaXQoMSkudG8oe2FscGhhOjAuODk2fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjkzOX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC45NzJ9LDApLndhaXQoMSkudG8oe2FscGhhOjAuOTkzfSwwKS53YWl0KDEpLnRvKHtyZWdYOjUyLHJlZ1k6MTIuOSx4OjY4LHk6MTI3LjksYWxwaGE6MX0sMCkud2FpdCgzOSkudG8oe3JlZ1g6NjMuNCxyZWdZOjM1LjcseDo3OS40LHk6MTUwLjcsYWxwaGE6MC45OTV9LDApLndhaXQoMSkudG8oe2FscGhhOjAuOTgxfSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjk1OH0sMCkud2FpdCgxKS50byh7YWxwaGE6MC45Mjd9LDApLndhaXQoMSkudG8oe2FscGhhOjAuODg5fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjg0Nn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC43OTd9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNzQ0fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjY4OH0sMCkud2FpdCgxKS50byh7YWxwaGE6MC42Mjh9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNTY3fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjUwNX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC40NDN9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMzgyfSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjMyMn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4yNjR9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMjF9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMTZ9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMTE1fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjA3Nn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4wNDR9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMDJ9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMDA1fSwwKS53YWl0KDEpLnRvKHtyZWdYOjUyLHJlZ1k6MTIuOSx4OjY4LHk6MTI3LjksYWxwaGE6MH0sMCkudG8oe19vZmY6dHJ1ZX0sMTE5KS53YWl0KDkpKTsNCg0KCS8vIGNvcHkgMSBsbiAxDQoJdGhpcy5pbnN0YW5jZV8xMCA9IG5ldyBsaWIubWNfY29weTAxX2xuMDEoKTsNCgl0aGlzLmluc3RhbmNlXzEwLnNldFRyYW5zZm9ybSg2OCwxMjcuOSwxLDEsMCwwLDAsNTIsMTIuOSk7DQoJdGhpcy5pbnN0YW5jZV8xMC5hbHBoYSA9IDA7DQoJdGhpcy5pbnN0YW5jZV8xMC5fb2ZmID0gdHJ1ZTsNCg0KCXRoaXMudGltZWxpbmUuYWRkVHdlZW4oY2pzLlR3ZWVuLmdldCh0aGlzLmluc3RhbmNlXzEwKS53YWl0KDE0KS50byh7X29mZjpmYWxzZX0sMCkud2FpdCgxKS50byh7cmVnWDo2My40LHJlZ1k6MzUuNyx4Ojc5LjQseToxNTAuNyxhbHBoYTowLjAwN30sMCkud2FpdCgxKS50byh7YWxwaGE6MC4wMjh9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMDYxfSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjEwNH0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4xNTZ9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMjE2fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjI4Mn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4zNTJ9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNDI1fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjV9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNTc1fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjY0OH0sMCkud2FpdCgxKS50byh7YWxwaGE6MC43MTh9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNzg0fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjg0NH0sMCkud2FpdCgxKS50byh7YWxwaGE6MC44OTZ9LDApLndhaXQoMSkudG8oe2FscGhhOjAuOTM5fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjk3Mn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC45OTN9LDApLndhaXQoMSkudG8oe3JlZ1g6NTIscmVnWToxMi45LHg6NjgseToxMjcuOSxhbHBoYToxfSwwKS53YWl0KDM5KS50byh7cmVnWDo2My40LHJlZ1k6MzUuNyx4Ojc5LjQseToxNTAuNyxhbHBoYTowLjk5NX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC45ODF9LDApLndhaXQoMSkudG8oe2FscGhhOjAuOTU4fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjkyN30sMCkud2FpdCgxKS50byh7YWxwaGE6MC44ODl9LDApLndhaXQoMSkudG8oe2FscGhhOjAuODQ2fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjc5N30sMCkud2FpdCgxKS50byh7YWxwaGE6MC43NDR9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNjg4fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjYyOH0sMCkud2FpdCgxKS50byh7YWxwaGE6MC41Njd9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNTA1fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjQ0M30sMCkud2FpdCgxKS50byh7YWxwaGE6MC4zODJ9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMzIyfSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjI2NH0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4yMX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4xNn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4xMTV9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMDc2fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjA0NH0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4wMn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4wMDV9LDApLndhaXQoMSkudG8oe3JlZ1g6NTIscmVnWToxMi45LHg6NjgseToxMjcuOSxhbHBoYTowfSwwKS50byh7X29mZjp0cnVlfSwxMTkpLndhaXQoOSkpOw0KDQoJLy8gd2F0Y2gwMQ0KCXRoaXMud2F0Y2gwMSA9IG5ldyBsaWIubWNfd2F0Y2gwMSgpOw0KCXRoaXMud2F0Y2gwMS5zZXRUcmFuc2Zvcm0oODgsMjk3LjUsMSwxLDAsMCwwLDg4LDcyLjUpOw0KCXRoaXMud2F0Y2gwMS5hbHBoYSA9IDA7DQoNCgl0aGlzLnRpbWVsaW5lLmFkZFR3ZWVuKGNqcy5Ud2Vlbi5nZXQodGhpcy53YXRjaDAxKS53YWl0KDEpLnRvKHtyZWdYOjk2LjUscmVnWTo4NC41LHg6OTMuMyx5OjMwOS41LGFscGhhOjAuMDk3fSwwKS53YWl0KDEpLnRvKHt4OjkwLjksYWxwaGE6MC4xNzN9LDApLndhaXQoMSkudG8oe3g6ODguNixhbHBoYTowLjI0fSwwKS53YWl0KDEpLnRvKHt4Ojg2LjYsYWxwaGE6MC4zMDF9LDApLndhaXQoMSkudG8oe3g6ODQuNyxhbHBoYTowLjM1OH0sMCkud2FpdCgxKS50byh7eDo4MyxhbHBoYTowLjQxMX0sMCkud2FpdCgxKS50byh7eDo4MS40LGFscGhhOjAuNDZ9LDApLndhaXQoMSkudG8oe3g6NzkuOCxhbHBoYTowLjUwNn0sMCkud2FpdCgxKS50byh7eDo3OC40LGFscGhhOjAuNTQ5fSwwKS53YWl0KDEpLnRvKHt4Ojc3LjEsYWxwaGE6MC41OX0sMCkud2FpdCgxKS50byh7eDo3NS44LGFscGhhOjAuNjI4fSwwKS53YWl0KDEpLnRvKHt4Ojc0LjcsYWxwaGE6MC42NjN9LDApLndhaXQoMSkudG8oe3g6NzMuNixhbHBoYTowLjY5Nn0sMCkud2FpdCgxKS50byh7eDo3Mi41LGFscGhhOjAuNzI4fSwwKS53YWl0KDEpLnRvKHt4OjcxLjYsYWxwaGE6MC43NTd9LDApLndhaXQoMSkudG8oe3g6NzAuNyxhbHBoYTowLjc4NH0sMCkud2FpdCgxKS50byh7eDo2OS45LGFscGhhOjAuODA5fSwwKS53YWl0KDEpLnRvKHt4OjY5LjEsYWxwaGE6MC44MzJ9LDApLndhaXQoMSkudG8oe3g6NjguNCxhbHBoYTowLjg1NH0sMCkud2FpdCgxKS50byh7eDo2Ny43LGFscGhhOjAuODc0fSwwKS53YWl0KDEpLnRvKHt4OjY3LjEsYWxwaGE6MC44OTJ9LDApLndhaXQoMSkudG8oe3g6NjYuNixhbHBoYTowLjkwOX0sMCkud2FpdCgxKS50byh7eDo2Ni4xLGFscGhhOjAuOTI0fSwwKS53YWl0KDEpLnRvKHt4OjY1LjYsYWxwaGE6MC45Mzh9LDApLndhaXQoMSkudG8oe3g6NjUuMixhbHBoYTowLjk1fSwwKS53YWl0KDEpLnRvKHt4OjY0LjgsYWxwaGE6MC45NjF9LDApLndhaXQoMSkudG8oe3g6NjQuNSxhbHBoYTowLjk3fSwwKS53YWl0KDEpLnRvKHt4OjY0LjMsYWxwaGE6MC45Nzh9LDApLndhaXQoMSkudG8oe3g6NjQsYWxwaGE6MC45ODV9LDApLndhaXQoMSkudG8oe3g6NjMuOSxhbHBoYTowLjk5fSwwKS53YWl0KDEpLnRvKHt4OjYzLjcsYWxwaGE6MC45OTV9LDApLndhaXQoMSkudG8oe3g6NjMuNixhbHBoYTowLjk5OH0sMCkud2FpdCgxKS50byh7YWxwaGE6MC45OTl9LDApLndhaXQoMSkudG8oe3JlZ1g6ODgscmVnWTo3Mi41LHg6NTUseToyOTcuNSxhbHBoYToxfSwwKS53YWl0KDM5KS50byh7cmVnWDo5Ni41LHJlZ1k6ODQuNSx4OjYxLjYseTozMDkuNSxhbHBoYTowLjkwNX0sMCkud2FpdCgxKS50byh7eDo1OS44LGFscGhhOjAuODF9LDApLndhaXQoMSkudG8oe3g6NTcuOSxhbHBoYTowLjcxOH0sMCkud2FpdCgxKS50byh7eDo1Ni4xLGFscGhhOjAuNjI4fSwwKS53YWl0KDEpLnRvKHt4OjU0LjQsYWxwaGE6MC41NDF9LDApLndhaXQoMSkudG8oe3g6NTIuNyxhbHBoYTowLjQ1N30sMCkud2FpdCgxKS50byh7eDo1MS4xLGFscGhhOjAuMzc3fSwwKS53YWl0KDEpLnRvKHt4OjQ5LjYsYWxwaGE6MC4zMDJ9LDApLndhaXQoMSkudG8oe3g6NDguMixhbHBoYTowLjIzMX0sMCkud2FpdCgxKS50byh7eDo0Ni45LGFscGhhOjAuMTY3fSwwKS53YWl0KDEpLnRvKHt4OjQ1LjcsYWxwaGE6MC4xMX0sMCkud2FpdCgxKS50byh7eDo0NC44LGFscGhhOjAuMDYxfSwwKS53YWl0KDEpLnRvKHt4OjQ0LGFscGhhOjAuMDIzfSwwKS53YWl0KDEpLnRvKHtyZWdYOjg4LHJlZ1k6NzIuNSx4OjM1LHk6Mjk3LjUsYWxwaGE6MH0sMCkudG8oe19vZmY6dHJ1ZX0sMTI5KS53YWl0KDkpKTsNCg0KCS8vIGZvc3NpbCBsb2dvDQoJdGhpcy5pbnN0YW5jZV8xMSA9IG5ldyBsaWIubWNfYXN1cygpOw0KCXRoaXMuaW5zdGFuY2VfMTEuc2V0VHJhbnNmb3JtKDM5LDUxMyk7DQoJdGhpcy5pbnN0YW5jZV8xMS5hbHBoYSA9IDA7DQoNCgl0aGlzLnRpbWVsaW5lLmFkZFR3ZWVuKGNqcy5Ud2Vlbi5nZXQodGhpcy5pbnN0YW5jZV8xMSkud2FpdCgxNikudG8oe3JlZ1g6NDcscmVnWToyLHg6ODYseTo1MTUsYWxwaGE6MC4wMTR9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMDUzfSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjExfSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjE4Mn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4yNjV9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMzU2fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjQ1MX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC41NDd9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNjQyfSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjczM30sMCkud2FpdCgxKS50byh7YWxwaGE6MC44MTZ9LDApLndhaXQoMSkudG8oe2FscGhhOjAuODg5fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjk0N30sMCkud2FpdCgxKS50byh7YWxwaGE6MC45ODZ9LDApLndhaXQoMSkudG8oe3JlZ1g6MCxyZWdZOjAseDozOSx5OjUxMyxhbHBoYToxfSwwKS50byh7X29mZjp0cnVlfSwxODUpLndhaXQoOSkpOw0KDQoJLy8gYmcgd2hpdGUgY29weQ0KCXRoaXMuaW5zdGFuY2VfMTIgPSBuZXcgbGliLm1jX2JnKCk7DQoJdGhpcy5pbnN0YW5jZV8xMi5zZXRUcmFuc2Zvcm0oMTUwLC00NTkuOSwxLDIuMjMxLDAsMCwwLDE1MCwxMjUpOw0KDQoJdGhpcy50aW1lbGluZS5hZGRUd2VlbihjanMuVHdlZW4uZ2V0KHRoaXMuaW5zdGFuY2VfMTIpLndhaXQoNCkudG8oe3JlZ1k6MTI1LjEsc2NhbGVZOjIuMjUseTotNDY2Ljd9LDApLndhaXQoMSkudG8oe3JlZ1g6ODAscmVnWTo0NjYsc2NhbGVZOjEuOTUseDo4MC4yLHk6MzM4Ljl9LDApLndhaXQoMSkudG8oe3NjYWxlWToxLjgzLHg6ODAuMyx5OjM1NS4xfSwwKS53YWl0KDEpLnRvKHtzY2FsZVk6MS43NCx4OjgwLjQseTozNjd9LDApLndhaXQoMSkudG8oe3NjYWxlWToxLjY3LHg6ODAuNSx5OjM3Ni44fSwwKS53YWl0KDEpLnRvKHtzY2FsZVk6MS42LHk6Mzg1LjF9LDApLndhaXQoMSkudG8oe3NjYWxlWToxLjU1LHg6ODAuNix5OjM5Mi4zfSwwKS53YWl0KDEpLnRvKHtzY2FsZVk6MS41LHk6Mzk4Ljd9LDApLndhaXQoMSkudG8oe3NjYWxlWToxLjQ2LHk6NDA0LjR9LDApLndhaXQoMSkudG8oe3NjYWxlWToxLjQyLHg6ODAuNyx5OjQwOS42fSwwKS53YWl0KDEpLnRvKHtzY2FsZVk6MS4zOSx5OjQxNC40fSwwKS53YWl0KDEpLnRvKHtzY2FsZVk6MS4zNSx5OjQxOC43fSwwKS53YWl0KDEpLnRvKHtzY2FsZVk6MS4zMix5OjQyMi42fSwwKS53YWl0KDEpLnRvKHtzY2FsZVk6MS4zLHg6ODAuOCx5OjQyNi4zfSwwKS53YWl0KDEpLnRvKHtzY2FsZVk6MS4yNyx5OjQyOS43fSwwKS53YWl0KDEpLnRvKHtzY2FsZVk6MS4yNSx5OjQzMi44fSwwKS53YWl0KDEpLnRvKHtzY2FsZVk6MS4yMyx5OjQzNS43fSwwKS53YWl0KDEpLnRvKHtzY2FsZVk6MS4yMSx5OjQzOC40fSwwKS53YWl0KDEpLnRvKHtzY2FsZVk6MS4xOSx5OjQ0MC45fSwwKS53YWl0KDEpLnRvKHtzY2FsZVk6MS4xNyx4OjgwLjkseTo0NDMuM30sMCkud2FpdCgxKS50byh7c2NhbGVZOjEuMTUseTo0NDUuNH0sMCkud2FpdCgxKS50byh7c2NhbGVZOjEuMTQseTo0NDcuNH0sMCkud2FpdCgxKS50byh7c2NhbGVZOjEuMTMseTo0NDkuM30sMCkud2FpdCgxKS50byh7c2NhbGVZOjEuMTEseTo0NTEuMX0sMCkud2FpdCgxKS50byh7c2NhbGVZOjEuMSx5OjQ1Mi43fSwwKS53YWl0KDEpLnRvKHtzY2FsZVk6MS4wOSx5OjQ1NC4xfSwwKS53YWl0KDEpLnRvKHtzY2FsZVk6MS4wOCx5OjQ1NS41fSwwKS53YWl0KDEpLnRvKHtzY2FsZVk6MS4wNyx5OjQ1Ni44fSwwKS53YWl0KDEpLnRvKHtzY2FsZVk6MS4wNix4OjgxLHk6NDU3Ljl9LDApLndhaXQoMSkudG8oe3NjYWxlWToxLjA1LHk6NDU5fSwwKS53YWl0KDEpLnRvKHtzY2FsZVk6MS4wNSx5OjQ2MH0sMCkud2FpdCgxKS50byh7c2NhbGVZOjEuMDQseTo0NjAuOX0sMCkud2FpdCgxKS50byh7c2NhbGVZOjEuMDMseTo0NjEuN30sMCkud2FpdCgxKS50byh7c2NhbGVZOjEuMDMseTo0NjIuNH0sMCkud2FpdCgxKS50byh7c2NhbGVZOjEuMDIseTo0NjMuMX0sMCkud2FpdCgxKS50byh7c2NhbGVZOjEuMDIseTo0NjMuN30sMCkud2FpdCgxKS50byh7c2NhbGVZOjEuMDEseTo0NjQuMn0sMCkud2FpdCgxKS50byh7c2NhbGVZOjEuMDEseTo0NjQuNn0sMCkud2FpdCgxKS50byh7c2NhbGVZOjEuMDEseTo0NjV9LDApLndhaXQoMSkudG8oe3NjYWxlWToxLHk6NDY1LjN9LDApLndhaXQoMSkudG8oe3NjYWxlWToxLHk6NDY1LjZ9LDApLndhaXQoMSkudG8oe3NjYWxlWToxLHk6NDY1Ljh9LDApLndhaXQoMSkudG8oe3NjYWxlWToxLHk6NDY1Ljl9LDApLndhaXQoMSkudG8oe3NjYWxlWToxLHk6NDY2fSwwKS53YWl0KDEpLnRvKHtyZWdYOjE1MCxyZWdZOjEyNSx4OjE1MSx5OjEyNX0sMCkudG8oe19vZmY6dHJ1ZX0sMSkud2FpdCgxNzUpKTsNCg0KCS8vIGdvb2dsZVN0b3JlX0xvZ28NCgl0aGlzLmluc3RhbmNlXzEzID0gbmV3IGxpYi5tY19nb29nbGVTdG9yZV9Mb2dvKCk7DQoJdGhpcy5pbnN0YW5jZV8xMy5zZXRUcmFuc2Zvcm0oOTEuMyw0MS42LDAuMTc4LDAuMTczLDAsMCwwLDQyNy40LDc4LjQpOw0KDQoJdGhpcy50aW1lbGluZS5hZGRUd2VlbihjanMuVHdlZW4uZ2V0KHRoaXMuaW5zdGFuY2VfMTMpLnRvKHtfb2ZmOnRydWV9LDIxNikud2FpdCg4KSk7DQoNCgkvLyBiZyBibHVlDQoJdGhpcy5pbnN0YW5jZV8xNCA9IG5ldyBsaWIubWNfYmdfYmx1ZSgpOw0KDQoJdGhpcy50aW1lbGluZS5hZGRUd2VlbihjanMuVHdlZW4uZ2V0KHRoaXMuaW5zdGFuY2VfMTQpLnRvKHtfb2ZmOnRydWV9LDIxNSkud2FpdCg5KSk7DQoNCgkvLyBiZyB3aGl0ZQ0KCXRoaXMuaW5zdGFuY2VfMTUgPSBuZXcgbGliLm1jX2JnKCk7DQoJdGhpcy5pbnN0YW5jZV8xNS5zZXRUcmFuc2Zvcm0oMTUwLDEyNSwxLDEsMCwwLDAsMTUwLDEyNSk7DQoNCgl0aGlzLnRpbWVsaW5lLmFkZFR3ZWVuKGNqcy5Ud2Vlbi5nZXQodGhpcy5pbnN0YW5jZV8xNSkudG8oe19vZmY6dHJ1ZX0sMjE1KS53YWl0KDkpKTsNCg0KfSkucHJvdG90eXBlID0gcCA9IG5ldyBjanMuTW92aWVDbGlwKCk7DQpwLm5vbWluYWxCb3VuZHMgPSBuZXcgY2pzLlJlY3RhbmdsZSgtMjAxLjYsMCw4NzEuMiw2MDAuMSk7DQoNCg0KLy8gc3RhZ2UgY29udGVudDoNCg0KDQoNCihsaWIuaW5kZXggPSBmdW5jdGlvbigpIHsNCgl0aGlzLmluaXRpYWxpemUoKTsNCg0KCS8vIFN0cm9rZQ0KCXRoaXMuc2hhcGUgPSBuZXcgY2pzLlNoYXBlKCk7DQoJdGhpcy5zaGFwZS5ncmFwaGljcy5mKCIjNjY2NjY2IikucygpLnAoIkVnTWZBdTRNQUFBaGR2SVkvQUFNQUFBQmR2Z0VnTVZBdXVJWXJBQU1BQUFoZGJJNHJBQWciKTsNCgl0aGlzLnNoYXBlLnNldFRyYW5zZm9ybSg4MCwzMDApOw0KDQoJLy8gTWFpbg0KCXRoaXMuX21haW4gPSBuZXcgbGliLm1jX21haW5Db250YWluZXIoKTsNCgl0aGlzLl9tYWluLnNldFRyYW5zZm9ybSgyNSwyNSwxLDEsMCwwLDAsMjUsMjUpOw0KDQoJdGhpcy5hZGRDaGlsZCh0aGlzLl9tYWluLHRoaXMuc2hhcGUpOw0KfSkucHJvdG90eXBlID0gcCA9IG5ldyBjanMuQ29udGFpbmVyKCk7DQpwLm5vbWluYWxCb3VuZHMgPSBuZXcgY2pzLlJlY3RhbmdsZSgtMTIxLjYsMzAwLDg3MS4yLDYwMC4xKTsNCg0KfSkobGliID0gbGlifHx7fSwgaW1hZ2VzID0gaW1hZ2VzfHx7fSwgY3JlYXRlanMgPSBjcmVhdGVqc3x8e30pOw0KdmFyIGxpYiwgaW1hZ2VzLCBjcmVhdGVqczs=
36 ms
beurfm.rad.io SEO score
N/A
N/A
UTF-8
Language claimed in HTML meta tag should match the language actually used on the web page. Otherwise Beurfm.rad.io can be misinterpreted by Google and other search engines. Unfortunately we cannot identify language used on the page (probably there is a mix of languages, too little text or something else) and no language is claimed in <html> or <meta> tags either. Our system also found out that Beurfm.rad.io main page’s claimed encoding is utf-8. Use of this encoding format is the best practice as the main page visitors from all over the world won’t have any issues with symbol transcription.
beurfm.rad.io
Open Graph data is detected on the main page of Beurfm Rad. This is the best way to make the web page social media friendly. Here is how it looks like on Facebook: